From 80df00db878b12e7866420b3b1041e53e5e69229 Mon Sep 17 00:00:00 2001 From: "Graydon, Tracy" Date: Mon, 23 Jul 2012 16:57:22 -0700 Subject: [PATCH 1/1] TZIVI-254: IVI needs a newer version of cmake --- .gitattributes | 22 + .hooks-config.bash | 18 + CMakeCPack.cmake | 123 + CMakeCPackOptions.cmake.in | 53 + CMakeGraphVizOptions.cmake | 1 + CMakeLists.txt | 645 + CMakeLogo.gif | Bin 0 -> 4481 bytes CTestConfig.cmake | 25 + CTestCustom.cmake.in | 85 + CTestCustom.ctest.in | 3 + ChangeLog.manual | 3071 + ChangeLog.txt | 86670 +++++++++++++++++++ CompileFlags.cmake | 64 + Copyright.txt | 56 + DartConfig.cmake | 18 + DartLocal.conf.in | 121 + Docs/cmake-completion | 207 + Docs/cmake-help.vim | 21 + Docs/cmake-indent.vim | 93 + Docs/cmake-mode.el | 340 + Docs/cmake-syntax.vim | 89 + Example/CMakeLists.txt | 10 + Example/Demo/CMakeLists.txt | 12 + Example/Demo/demo.cxx | 10 + Example/Demo/demo_b.cxx | 3 + Example/Hello/CMakeLists.txt | 3 + Example/Hello/hello.cxx | 7 + Example/Hello/hello.h | 11 + Modules/AddFileDependencies.cmake | 29 + Modules/AutomocInfo.cmake.in | 16 + .../BasicConfigVersion-AnyNewerVersion.cmake.in | 26 + Modules/BasicConfigVersion-ExactVersion.cmake.in | 42 + .../BasicConfigVersion-SameMajorVersion.cmake.in | 41 + Modules/BundleUtilities.cmake | 786 + Modules/CMake.cmake | 17 + Modules/CMakeASM-ATTInformation.cmake | 25 + Modules/CMakeASMCompiler.cmake.in | 12 + Modules/CMakeASMInformation.cmake | 130 + Modules/CMakeASM_MASMInformation.cmake | 24 + Modules/CMakeASM_NASMInformation.cmake | 46 + Modules/CMakeAddFortranSubdirectory.cmake | 206 + .../build_mingw.cmake.in | 2 + .../config_mingw.cmake.in | 9 + Modules/CMakeAddNewLanguage.txt | 17 + Modules/CMakeBackwardCompatibilityC.cmake | 100 + Modules/CMakeBackwardCompatibilityCXX.cmake | 54 + Modules/CMakeBorlandFindMake.cmake | 17 + Modules/CMakeBuildSettings.cmake.in | 13 + Modules/CMakeCCompiler.cmake.in | 50 + Modules/CMakeCCompilerABI.c | 28 + Modules/CMakeCCompilerId.c.in | 204 + Modules/CMakeCInformation.cmake | 219 + Modules/CMakeCXXCompiler.cmake.in | 51 + Modules/CMakeCXXCompilerABI.cpp | 20 + Modules/CMakeCXXCompilerId.cpp.in | 187 + Modules/CMakeCXXInformation.cmake | 287 + Modules/CMakeCommonLanguageInclude.cmake | 107 + Modules/CMakeCompilerABI.h | 36 + Modules/CMakeConfigurableFile.in | 2 + Modules/CMakeDependentOption.cmake | 51 + Modules/CMakeDetermineASM-ATTCompiler.cmake | 20 + Modules/CMakeDetermineASMCompiler.cmake | 182 + Modules/CMakeDetermineASM_MASMCompiler.cmake | 27 + Modules/CMakeDetermineASM_NASMCompiler.cmake | 27 + Modules/CMakeDetermineCCompiler.cmake | 181 + Modules/CMakeDetermineCXXCompiler.cmake | 187 + Modules/CMakeDetermineCompilerABI.cmake | 131 + Modules/CMakeDetermineCompilerId.cmake | 329 + Modules/CMakeDetermineFortranCompiler.cmake | 228 + Modules/CMakeDetermineJavaCompiler.cmake | 102 + Modules/CMakeDetermineRCCompiler.cmake | 67 + Modules/CMakeDetermineSystem.cmake | 176 + Modules/CMakeDetermineVSServicePack.cmake | 187 + Modules/CMakeExpandImportedTargets.cmake | 129 + Modules/CMakeExportBuildSettings.cmake | 36 + ...atorDetermineCompilerMacrosAndIncludeDirs.cmake | 120 + Modules/CMakeFindBinUtils.cmake | 75 + Modules/CMakeFindCodeBlocks.cmake | 25 + Modules/CMakeFindEclipseCDT4.cmake | 79 + Modules/CMakeFindFrameworks.cmake | 32 + Modules/CMakeFindKDevelop3.cmake | 23 + Modules/CMakeFindPackageMode.cmake | 188 + Modules/CMakeFindWMake.cmake | 17 + Modules/CMakeFindXCode.cmake | 20 + Modules/CMakeForceCompiler.cmake | 82 + Modules/CMakeFortranCompiler.cmake.in | 52 + Modules/CMakeFortranCompilerABI.F | 38 + Modules/CMakeFortranCompilerId.F.in | 123 + Modules/CMakeFortranInformation.cmake | 233 + Modules/CMakeGenericSystem.cmake | 175 + Modules/CMakeImportBuildSettings.cmake | 24 + Modules/CMakeJOMFindMake.cmake | 18 + Modules/CMakeJavaCompiler.cmake.in | 13 + Modules/CMakeJavaInformation.cmake | 59 + Modules/CMakeMSYSFindMake.cmake | 20 + Modules/CMakeMinGWFindMake.cmake | 24 + Modules/CMakeNMakeFindMake.cmake | 18 + Modules/CMakeNinjaFindMake.cmake | 17 + Modules/CMakePackageConfigHelpers.cmake | 227 + Modules/CMakeParseArguments.cmake | 138 + Modules/CMakeParseImplicitLinkInfo.cmake | 128 + Modules/CMakePlatformId.h.in | 154 + Modules/CMakePrintSystemInformation.cmake | 46 + Modules/CMakePushCheckState.cmake | 61 + Modules/CMakeRCCompiler.cmake.in | 6 + Modules/CMakeRCInformation.cmake | 53 + Modules/CMakeSystem.cmake.in | 15 + Modules/CMakeSystemSpecificInformation.cmake | 69 + Modules/CMakeTestASM-ATTCompiler.cmake | 23 + Modules/CMakeTestASMCompiler.cmake | 35 + Modules/CMakeTestASM_MASMCompiler.cmake | 23 + Modules/CMakeTestASM_NASMCompiler.cmake | 23 + Modules/CMakeTestCCompiler.cmake | 87 + Modules/CMakeTestCXXCompiler.cmake | 80 + Modules/CMakeTestCompilerCommon.cmake | 21 + Modules/CMakeTestForFreeVC.cxx | 3 + Modules/CMakeTestFortranCompiler.cmake | 101 + Modules/CMakeTestGNU.c | 9 + Modules/CMakeTestJavaCompiler.cmake | 20 + Modules/CMakeTestNMakeCLVersion.c | 2 + Modules/CMakeTestRCCompiler.cmake | 23 + Modules/CMakeTestWatcomVersion.c | 1 + Modules/CMakeUnixFindMake.cmake | 16 + Modules/CMakeVS10FindMake.cmake | 54 + Modules/CMakeVS11FindMake.cmake | 54 + Modules/CMakeVS6BackwardCompatibility.cmake | 26 + Modules/CMakeVS6FindMake.cmake | 25 + Modules/CMakeVS71FindMake.cmake | 26 + Modules/CMakeVS7BackwardCompatibility.cmake | 26 + Modules/CMakeVS7FindMake.cmake | 25 + Modules/CMakeVS8FindMake.cmake | 34 + Modules/CMakeVS9FindMake.cmake | 39 + Modules/CMakeVerifyManifest.cmake | 115 + Modules/CPack.DS_Store.in | Bin 0 -> 12292 bytes Modules/CPack.Description.plist.in | 12 + Modules/CPack.Info.plist.in | 37 + Modules/CPack.OSXScriptLauncher.in | Bin 0 -> 29592 bytes Modules/CPack.OSXScriptLauncher.rsrc.in | Bin 0 -> 362 bytes Modules/CPack.OSXX11.Info.plist.in | 49 + Modules/CPack.OSXX11.main.scpt.in | Bin 0 -> 1870 bytes Modules/CPack.RuntimeScript.in | 87 + Modules/CPack.STGZ_Header.sh.in | 141 + Modules/CPack.VolumeIcon.icns.in | Bin 0 -> 45739 bytes Modules/CPack.background.png.in | Bin 0 -> 47076 bytes Modules/CPack.cmake | 566 + Modules/CPack.distribution.dist.in | 9 + Modules/CPackBundle.cmake | 48 + Modules/CPackComponent.cmake | 513 + Modules/CPackCygwin.cmake | 33 + Modules/CPackDMG.cmake | 70 + Modules/CPackDeb.cmake | 393 + Modules/CPackNSIS.cmake | 131 + Modules/CPackPackageMaker.cmake | 35 + Modules/CPackRPM.cmake | 922 + Modules/CPackZIP.cmake | 41 + Modules/CTest.cmake | 286 + Modules/CTestScriptMode.cmake | 24 + Modules/CTestTargets.cmake | 95 + Modules/CheckCCompilerFlag.cmake | 43 + Modules/CheckCSourceCompiles.cmake | 95 + Modules/CheckCSourceRuns.cmake | 91 + Modules/CheckCXXCompilerFlag.cmake | 46 + Modules/CheckCXXSourceCompiles.cmake | 96 + Modules/CheckCXXSourceRuns.cmake | 91 + Modules/CheckCXXSymbolExists.cmake | 42 + Modules/CheckForPthreads.c | 38 + Modules/CheckFortranFunctionExists.cmake | 69 + Modules/CheckFunctionExists.c | 23 + Modules/CheckFunctionExists.cmake | 74 + Modules/CheckIncludeFile.c.in | 13 + Modules/CheckIncludeFile.cmake | 77 + Modules/CheckIncludeFile.cxx.in | 6 + Modules/CheckIncludeFileCXX.cmake | 77 + Modules/CheckIncludeFiles.cmake | 82 + Modules/CheckLanguage.cmake | 65 + Modules/CheckLibraryExists.cmake | 70 + Modules/CheckLibraryExists.lists.in | 8 + Modules/CheckPrototypeDefinition.c.in | 29 + Modules/CheckPrototypeDefinition.cmake | 101 + Modules/CheckSizeOf.cmake | 18 + Modules/CheckStructHasMember.cmake | 51 + Modules/CheckSymbolExists.cmake | 101 + Modules/CheckTypeSize.c.in | 37 + Modules/CheckTypeSize.cmake | 196 + Modules/CheckTypeSizeMap.cmake.in | 1 + Modules/CheckVariableExists.c | 20 + Modules/CheckVariableExists.cmake | 66 + Modules/Compiler/Absoft-Fortran.cmake | 10 + Modules/Compiler/Clang-C.cmake | 1 + Modules/Compiler/Clang-CXX.cmake | 1 + Modules/Compiler/Cray-C.cmake | 1 + Modules/Compiler/Cray-CXX.cmake | 1 + Modules/Compiler/Cray-Fortran.cmake | 6 + Modules/Compiler/G95-Fortran.cmake | 9 + Modules/Compiler/GNU-ASM.cmake | 6 + Modules/Compiler/GNU-C.cmake | 2 + Modules/Compiler/GNU-CXX.cmake | 2 + Modules/Compiler/GNU-Fortran.cmake | 17 + Modules/Compiler/GNU.cmake | 50 + Modules/Compiler/HP-ASM.cmake | 3 + Modules/Compiler/HP-C.cmake | 4 + Modules/Compiler/HP-CXX.cmake | 4 + Modules/Compiler/HP-Fortran.cmake | 3 + Modules/Compiler/Intel-ASM.cmake | 13 + Modules/Compiler/Intel-C.cmake | 10 + Modules/Compiler/Intel-CXX.cmake | 10 + Modules/Compiler/Intel-Fortran.cmake | 9 + Modules/Compiler/MIPSpro-C.cmake | 1 + Modules/Compiler/MIPSpro-CXX.cmake | 1 + Modules/Compiler/MIPSpro-Fortran.cmake | 3 + Modules/Compiler/NAG-Fortran.cmake | 34 + Modules/Compiler/PGI-C.cmake | 4 + Modules/Compiler/PGI-CXX.cmake | 4 + Modules/Compiler/PGI-Fortran.cmake | 15 + Modules/Compiler/PGI.cmake | 35 + Modules/Compiler/PathScale-C.cmake | 4 + Modules/Compiler/PathScale-CXX.cmake | 4 + Modules/Compiler/PathScale-Fortran.cmake | 6 + Modules/Compiler/PathScale.cmake | 31 + Modules/Compiler/SCO-C.cmake | 2 + Modules/Compiler/SCO-CXX.cmake | 2 + Modules/Compiler/SCO.cmake | 25 + Modules/Compiler/SunPro-ASM.cmake | 24 + Modules/Compiler/SunPro-C.cmake | 25 + Modules/Compiler/SunPro-CXX.cmake | 31 + Modules/Compiler/SunPro-Fortran.cmake | 18 + Modules/Compiler/TinyCC-C.cmake | 8 + Modules/Compiler/VisualAge-C.cmake | 1 + Modules/Compiler/VisualAge-CXX.cmake | 1 + Modules/Compiler/VisualAge-Fortran.cmake | 1 + Modules/Compiler/XL-ASM.cmake | 13 + Modules/Compiler/XL-C.cmake | 9 + Modules/Compiler/XL-CXX.cmake | 11 + Modules/Compiler/XL-Fortran.cmake | 17 + Modules/Compiler/XL.cmake | 53 + Modules/Dart.cmake | 124 + Modules/DartConfiguration.tcl.in | 93 + Modules/DeployQt4.cmake | 301 + Modules/Documentation.cmake | 52 + Modules/DummyCXXFile.cxx | 4 + Modules/ExternalProject.cmake | 1505 + Modules/FLTKCompatibility.cmake | 15 + Modules/FeatureSummary.cmake | 466 + Modules/FindALSA.cmake | 55 + Modules/FindASPELL.cmake | 37 + Modules/FindAVIFile.cmake | 48 + Modules/FindArmadillo.cmake | 95 + Modules/FindBISON.cmake | 175 + Modules/FindBLAS.cmake | 608 + Modules/FindBZip2.cmake | 52 + Modules/FindBoost.cmake | 1221 + Modules/FindBullet.cmake | 84 + Modules/FindCABLE.cmake | 81 + Modules/FindCUDA.cmake | 1367 + Modules/FindCUDA/make2cmake.cmake | 93 + Modules/FindCUDA/parse_cubin.cmake | 112 + Modules/FindCUDA/run_nvcc.cmake | 280 + Modules/FindCURL.cmake | 59 + Modules/FindCVS.cmake | 69 + Modules/FindCoin3D.cmake | 84 + Modules/FindCups.cmake | 69 + Modules/FindCurses.cmake | 176 + Modules/FindCxxTest.cmake | 200 + Modules/FindCygwin.cmake | 28 + Modules/FindDCMTK.cmake | 154 + Modules/FindDart.cmake | 36 + Modules/FindDevIL.cmake | 63 + Modules/FindDoxygen.cmake | 144 + Modules/FindEXPAT.cmake | 60 + Modules/FindFLEX.cmake | 161 + Modules/FindFLTK.cmake | 315 + Modules/FindFLTK2.cmake | 277 + Modules/FindFreetype.cmake | 110 + Modules/FindGCCXML.cmake | 27 + Modules/FindGDAL.cmake | 107 + Modules/FindGIF.cmake | 80 + Modules/FindGLU.cmake | 28 + Modules/FindGLUT.cmake | 90 + Modules/FindGTK.cmake | 165 + Modules/FindGTK2.cmake | 590 + Modules/FindGTest.cmake | 158 + Modules/FindGettext.cmake | 220 + Modules/FindGit.cmake | 62 + Modules/FindGnuTLS.cmake | 69 + Modules/FindGnuplot.cmake | 57 + Modules/FindHDF5.cmake | 385 + Modules/FindHSPELL.cmake | 46 + Modules/FindHTMLHelp.cmake | 54 + Modules/FindITK.cmake | 57 + Modules/FindImageMagick.cmake | 237 + Modules/FindJNI.cmake | 261 + Modules/FindJPEG.cmake | 43 + Modules/FindJasper.cmake | 53 + Modules/FindJava.cmake | 204 + Modules/FindKDE3.cmake | 299 + Modules/FindKDE4.cmake | 100 + Modules/FindLAPACK.cmake | 336 + Modules/FindLATEX.cmake | 126 + Modules/FindLibArchive.cmake | 67 + Modules/FindLibXml2.cmake | 66 + Modules/FindLibXslt.cmake | 74 + Modules/FindLua50.cmake | 96 + Modules/FindLua51.cmake | 85 + Modules/FindMFC.cmake | 60 + Modules/FindMPEG.cmake | 44 + Modules/FindMPEG2.cmake | 54 + Modules/FindMPI.cmake | 631 + Modules/FindMatlab.cmake | 120 + Modules/FindMotif.cmake | 44 + Modules/FindOpenAL.cmake | 103 + Modules/FindOpenGL.cmake | 160 + Modules/FindOpenMP.cmake | 167 + Modules/FindOpenSSL.cmake | 304 + Modules/FindOpenSceneGraph.cmake | 246 + Modules/FindOpenThreads.cmake | 123 + Modules/FindPHP4.cmake | 85 + Modules/FindPNG.cmake | 75 + Modules/FindPackageHandleStandardArgs.cmake | 296 + Modules/FindPackageMessage.cmake | 49 + Modules/FindPerl.cmake | 83 + Modules/FindPerlLibs.cmake | 255 + Modules/FindPhysFS.cmake | 61 + Modules/FindPike.cmake | 37 + Modules/FindPkgConfig.cmake | 369 + Modules/FindPostgreSQL.cmake | 172 + Modules/FindProducer.cmake | 82 + Modules/FindProtobuf.cmake | 218 + Modules/FindPythonInterp.cmake | 141 + Modules/FindPythonLibs.cmake | 257 + Modules/FindQt.cmake | 160 + Modules/FindQt3.cmake | 302 + Modules/FindQt4.cmake | 1187 + Modules/FindQuickTime.cmake | 47 + Modules/FindRTI.cmake | 102 + Modules/FindRuby.cmake | 243 + Modules/FindSDL.cmake | 173 + Modules/FindSDL_image.cmake | 74 + Modules/FindSDL_mixer.cmake | 74 + Modules/FindSDL_net.cmake | 73 + Modules/FindSDL_sound.cmake | 421 + Modules/FindSDL_ttf.cmake | 74 + Modules/FindSWIG.cmake | 68 + Modules/FindSelfPackers.cmake | 68 + Modules/FindSquish.cmake | 129 + Modules/FindSubversion.cmake | 131 + Modules/FindTCL.cmake | 219 + Modules/FindTIFF.cmake | 48 + Modules/FindTclStub.cmake | 132 + Modules/FindTclsh.cmake | 100 + Modules/FindThreads.cmake | 166 + Modules/FindUnixCommands.cmake | 93 + Modules/FindVTK.cmake | 141 + Modules/FindWget.cmake | 36 + Modules/FindWish.cmake | 85 + Modules/FindX11.cmake | 492 + Modules/FindXMLRPC.cmake | 146 + Modules/FindZLIB.cmake | 92 + Modules/Findosg.cmake | 54 + Modules/FindosgAnimation.cmake | 51 + Modules/FindosgDB.cmake | 51 + Modules/FindosgFX.cmake | 51 + Modules/FindosgGA.cmake | 51 + Modules/FindosgIntrospection.cmake | 51 + Modules/FindosgManipulator.cmake | 51 + Modules/FindosgParticle.cmake | 51 + Modules/FindosgPresentation.cmake | 52 + Modules/FindosgProducer.cmake | 51 + Modules/FindosgQt.cmake | 52 + Modules/FindosgShadow.cmake | 51 + Modules/FindosgSim.cmake | 51 + Modules/FindosgTerrain.cmake | 51 + Modules/FindosgText.cmake | 51 + Modules/FindosgUtil.cmake | 51 + Modules/FindosgViewer.cmake | 51 + Modules/FindosgVolume.cmake | 51 + Modules/FindosgWidget.cmake | 51 + Modules/Findosg_functions.cmake | 105 + Modules/FindwxWidgets.cmake | 1044 + Modules/FindwxWindows.cmake | 706 + Modules/FortranCInterface.cmake | 293 + Modules/FortranCInterface/CMakeLists.txt | 108 + Modules/FortranCInterface/Detect.cmake | 183 + Modules/FortranCInterface/Input.cmake.in | 3 + Modules/FortranCInterface/Macro.h.in | 4 + Modules/FortranCInterface/Output.cmake.in | 33 + Modules/FortranCInterface/Verify/CMakeLists.txt | 34 + Modules/FortranCInterface/Verify/VerifyC.c | 5 + Modules/FortranCInterface/Verify/VerifyCXX.cxx | 4 + Modules/FortranCInterface/Verify/VerifyFortran.f | 3 + Modules/FortranCInterface/Verify/main.c | 16 + Modules/FortranCInterface/call_mod.f90 | 6 + Modules/FortranCInterface/call_sub.f | 4 + Modules/FortranCInterface/main.F | 6 + Modules/FortranCInterface/my_module.f90 | 8 + Modules/FortranCInterface/my_module_.c | 1 + Modules/FortranCInterface/my_sub.f | 2 + Modules/FortranCInterface/mymodule.f90 | 8 + Modules/FortranCInterface/mymodule_.c | 1 + Modules/FortranCInterface/mysub.f | 2 + Modules/FortranCInterface/symbol.c.in | 4 + Modules/GNUInstallDirs.cmake | 188 + Modules/GenerateExportHeader.cmake | 351 + Modules/GetPrerequisites.cmake | 869 + Modules/ITKCompatibility.cmake | 17 + Modules/InstallRequiredSystemLibraries.cmake | 401 + Modules/IntelVSImplicitPath/CMakeLists.txt | 7 + Modules/IntelVSImplicitPath/detect.cmake | 9 + Modules/IntelVSImplicitPath/hello.f | 0 Modules/KDE3Macros.cmake | 411 + Modules/MacOSXBundleInfo.plist.in | 36 + Modules/MacOSXFrameworkInfo.plist.in | 26 + Modules/MacroAddFileDependencies.cmake | 33 + Modules/NSIS.InstallOptions.ini.in | 46 + Modules/NSIS.template.in | 949 + Modules/Platform/AIX-GNU-C.cmake | 2 + Modules/Platform/AIX-GNU-CXX.cmake | 2 + Modules/Platform/AIX-GNU-Fortran.cmake | 2 + Modules/Platform/AIX-GNU.cmake | 25 + Modules/Platform/AIX-VisualAge-C.cmake | 1 + Modules/Platform/AIX-VisualAge-CXX.cmake | 1 + Modules/Platform/AIX-VisualAge-Fortran.cmake | 1 + Modules/Platform/AIX-XL-ASM.cmake | 2 + Modules/Platform/AIX-XL-C.cmake | 2 + Modules/Platform/AIX-XL-CXX.cmake | 2 + Modules/Platform/AIX-XL-Fortran.cmake | 2 + Modules/Platform/AIX-XL.cmake | 28 + Modules/Platform/AIX.cmake | 29 + Modules/Platform/BSDOS.cmake | 2 + Modules/Platform/BeOS.cmake | 10 + Modules/Platform/BlueGeneL.cmake | 40 + Modules/Platform/BlueGeneP-base.cmake | 121 + Modules/Platform/BlueGeneP-dynamic-GNU-C.cmake | 16 + Modules/Platform/BlueGeneP-dynamic-GNU-CXX.cmake | 16 + .../Platform/BlueGeneP-dynamic-GNU-Fortran.cmake | 16 + Modules/Platform/BlueGeneP-dynamic-XL-C.cmake | 16 + Modules/Platform/BlueGeneP-dynamic-XL-CXX.cmake | 16 + .../Platform/BlueGeneP-dynamic-XL-Fortran.cmake | 16 + Modules/Platform/BlueGeneP-dynamic.cmake | 19 + Modules/Platform/BlueGeneP-static-GNU-C.cmake | 16 + Modules/Platform/BlueGeneP-static-GNU-CXX.cmake | 16 + .../Platform/BlueGeneP-static-GNU-Fortran.cmake | 16 + Modules/Platform/BlueGeneP-static-XL-C.cmake | 16 + Modules/Platform/BlueGeneP-static-XL-CXX.cmake | 16 + Modules/Platform/BlueGeneP-static-XL-Fortran.cmake | 16 + Modules/Platform/BlueGeneP-static.cmake | 19 + Modules/Platform/CYGWIN-GNU-C.cmake | 2 + Modules/Platform/CYGWIN-GNU-CXX.cmake | 2 + Modules/Platform/CYGWIN-GNU-Fortran.cmake | 2 + Modules/Platform/CYGWIN-GNU.cmake | 53 + Modules/Platform/CYGWIN-windres.cmake | 1 + Modules/Platform/CYGWIN.cmake | 64 + Modules/Platform/Catamount.cmake | 26 + Modules/Platform/Darwin-Absoft-Fortran.cmake | 1 + Modules/Platform/Darwin-GNU-C.cmake | 4 + Modules/Platform/Darwin-GNU-CXX.cmake | 4 + Modules/Platform/Darwin-GNU-Fortran.cmake | 2 + Modules/Platform/Darwin-GNU.cmake | 64 + Modules/Platform/Darwin-NAG-Fortran.cmake | 5 + Modules/Platform/Darwin-VisualAge-C.cmake | 1 + Modules/Platform/Darwin-VisualAge-CXX.cmake | 1 + Modules/Platform/Darwin-XL-C.cmake | 5 + Modules/Platform/Darwin-XL-CXX.cmake | 5 + Modules/Platform/Darwin-icc.cmake | 128 + Modules/Platform/Darwin-icpc.cmake | 3 + Modules/Platform/Darwin.cmake | 265 + Modules/Platform/DragonFly.cmake | 5 + Modules/Platform/FreeBSD.cmake | 26 + Modules/Platform/GNU.cmake | 13 + Modules/Platform/GNUtoMS_lib.bat.in | 3 + Modules/Platform/GNUtoMS_lib.cmake | 10 + Modules/Platform/Generic-ADSP-ASM.cmake | 7 + Modules/Platform/Generic-ADSP-C.cmake | 20 + Modules/Platform/Generic-ADSP-CXX.cmake | 18 + Modules/Platform/Generic-ADSP-Common.cmake | 120 + Modules/Platform/Generic-SDCC-C.cmake | 54 + Modules/Platform/Generic.cmake | 17 + Modules/Platform/HP-UX-GNU-C.cmake | 2 + Modules/Platform/HP-UX-GNU-CXX.cmake | 2 + Modules/Platform/HP-UX-GNU-Fortran.cmake | 2 + Modules/Platform/HP-UX-GNU.cmake | 27 + Modules/Platform/HP-UX-HP-ASM.cmake | 2 + Modules/Platform/HP-UX-HP-C.cmake | 6 + Modules/Platform/HP-UX-HP-CXX.cmake | 14 + Modules/Platform/HP-UX-HP-Fortran.cmake | 2 + Modules/Platform/HP-UX-HP.cmake | 30 + Modules/Platform/HP-UX.cmake | 50 + Modules/Platform/Haiku.cmake | 22 + Modules/Platform/IRIX.cmake | 45 + Modules/Platform/IRIX64.cmake | 73 + Modules/Platform/Linux-Absoft-Fortran.cmake | 1 + Modules/Platform/Linux-Clang-C.cmake | 1 + Modules/Platform/Linux-Clang-CXX.cmake | 1 + Modules/Platform/Linux-GNU-C.cmake | 2 + Modules/Platform/Linux-GNU-CXX.cmake | 2 + Modules/Platform/Linux-GNU-Fortran.cmake | 2 + Modules/Platform/Linux-GNU.cmake | 25 + Modules/Platform/Linux-Intel-C.cmake | 2 + Modules/Platform/Linux-Intel-CXX.cmake | 2 + Modules/Platform/Linux-Intel-Fortran.cmake | 4 + Modules/Platform/Linux-Intel.cmake | 48 + Modules/Platform/Linux-NAG-Fortran.cmake | 10 + Modules/Platform/Linux-PGI-C.cmake | 2 + Modules/Platform/Linux-PGI-CXX.cmake | 2 + Modules/Platform/Linux-PGI-Fortran.cmake | 2 + Modules/Platform/Linux-PGI.cmake | 25 + Modules/Platform/Linux-PathScale-C.cmake | 2 + Modules/Platform/Linux-PathScale-CXX.cmake | 2 + Modules/Platform/Linux-PathScale-Fortran.cmake | 2 + Modules/Platform/Linux-PathScale.cmake | 25 + Modules/Platform/Linux-SunPro-CXX.cmake | 9 + Modules/Platform/Linux-TinyCC-C.cmake | 4 + Modules/Platform/Linux-VisualAge-C.cmake | 1 + Modules/Platform/Linux-VisualAge-CXX.cmake | 1 + Modules/Platform/Linux-VisualAge-Fortran.cmake | 1 + Modules/Platform/Linux-XL-C.cmake | 1 + Modules/Platform/Linux-XL-CXX.cmake | 1 + Modules/Platform/Linux-XL-Fortran.cmake | 1 + Modules/Platform/Linux-como.cmake | 17 + Modules/Platform/Linux.cmake | 57 + Modules/Platform/MP-RAS.cmake | 10 + Modules/Platform/NetBSD.cmake | 13 + Modules/Platform/OSF1.cmake | 45 + Modules/Platform/OpenBSD.cmake | 18 + Modules/Platform/OpenVMS.cmake | 8 + Modules/Platform/QNX.cmake | 33 + Modules/Platform/RISCos.cmake | 6 + Modules/Platform/SCO_SV.cmake | 2 + Modules/Platform/SINIX.cmake | 2 + Modules/Platform/SunOS-GNU-C.cmake | 2 + Modules/Platform/SunOS-GNU-CXX.cmake | 2 + Modules/Platform/SunOS-GNU-Fortran.cmake | 2 + Modules/Platform/SunOS-GNU.cmake | 34 + Modules/Platform/SunOS.cmake | 30 + Modules/Platform/Tru64.cmake | 2 + Modules/Platform/ULTRIX.cmake | 5 + Modules/Platform/UNIX_SV.cmake | 3 + Modules/Platform/UnixPaths.cmake | 88 + Modules/Platform/UnixWare.cmake | 3 + Modules/Platform/Windows-Borland-C.cmake | 1 + Modules/Platform/Windows-Borland-CXX.cmake | 1 + Modules/Platform/Windows-Embarcadero-C.cmake | 3 + Modules/Platform/Windows-Embarcadero-CXX.cmake | 3 + Modules/Platform/Windows-Embarcadero.cmake | 129 + Modules/Platform/Windows-G95-Fortran.cmake | 1 + Modules/Platform/Windows-GNU-C-ABI.cmake | 1 + Modules/Platform/Windows-GNU-C.cmake | 2 + Modules/Platform/Windows-GNU-CXX-ABI.cmake | 1 + Modules/Platform/Windows-GNU-CXX.cmake | 2 + Modules/Platform/Windows-GNU-Fortran-ABI.cmake | 1 + Modules/Platform/Windows-GNU-Fortran.cmake | 5 + Modules/Platform/Windows-GNU.cmake | 181 + Modules/Platform/Windows-Intel-ASM.cmake | 2 + Modules/Platform/Windows-Intel-C.cmake | 2 + Modules/Platform/Windows-Intel-CXX.cmake | 4 + Modules/Platform/Windows-Intel-Fortran.cmake | 11 + Modules/Platform/Windows-Intel.cmake | 108 + Modules/Platform/Windows-NMcl.cmake | 4 + Modules/Platform/Windows-cl.cmake | 253 + Modules/Platform/Windows-cl.cmake.in | 14 + Modules/Platform/Windows-df.cmake | 70 + Modules/Platform/Windows-wcl386.cmake | 121 + Modules/Platform/Windows-windres.cmake | 1 + Modules/Platform/Windows.cmake | 36 + Modules/Platform/WindowsPaths.cmake | 96 + Modules/Platform/Xenix.cmake | 2 + Modules/Platform/cl.cmake | 62 + Modules/Platform/eCos.cmake | 65 + Modules/Platform/gas.cmake | 19 + Modules/Platform/kFreeBSD.cmake | 4 + Modules/Platform/syllable.cmake | 31 + Modules/ProcessorCount.cmake | 183 + Modules/Qt4ConfigDependentSettings.cmake | 295 + Modules/Qt4Macros.cmake | 432 + Modules/RepositoryInfo.txt.in | 3 + Modules/SelectLibraryConfigurations.cmake | 81 + Modules/SquishRunTestCase.bat | 11 + Modules/SquishRunTestCase.sh | 13 + Modules/SquishTestScript.cmake | 72 + Modules/SystemInformation.cmake | 103 + Modules/SystemInformation.in | 88 + Modules/TestBigEndian.cmake | 112 + Modules/TestCXXAcceptsFlag.cmake | 43 + Modules/TestEndianess.c.in | 23 + Modules/TestForANSIForScope.cmake | 44 + Modules/TestForANSIStreamHeaders.cmake | 34 + Modules/TestForANSIStreamHeaders.cxx | 6 + Modules/TestForAnsiForScope.cxx | 7 + Modules/TestForSSTREAM.cmake | 43 + Modules/TestForSSTREAM.cxx | 11 + Modules/TestForSTDNamespace.cmake | 43 + Modules/TestForSTDNamespace.cxx | 6 + Modules/UseEcos.cmake | 236 + Modules/UseJava.cmake | 881 + Modules/UseJavaClassFilelist.cmake | 52 + Modules/UseJavaSymlinks.cmake | 32 + Modules/UsePkgConfig.cmake | 78 + Modules/UseQt4.cmake | 108 + Modules/UseSWIG.cmake | 253 + Modules/UseVTK40.cmake | 29 + Modules/UseVTKBuildSettings40.cmake | 38 + Modules/UseVTKConfig40.cmake | 409 + Modules/Use_wxWindows.cmake | 64 + Modules/UsewxWidgets.cmake | 89 + Modules/VTKCompatibility.cmake | 52 + Modules/WriteBasicConfigVersionFile.cmake | 44 + Modules/ecos_clean.cmake | 26 + Modules/exportheader.cmake.in | 35 + Modules/kde3init_dummy.cpp.in | 6 + Modules/kde3uic.cmake | 33 + Modules/readme.txt | 151 + Readme.txt | 53 + Source/.cvsignore | 5 + Source/.gitattributes | 2 + Source/CMakeLists.txt | 566 + Source/CMakeVersionSource.cmake | 37 + Source/CPack/OSXLauncherScript.scpt | Bin 0 -> 3102 bytes Source/CPack/OSXScriptLauncher.cxx | 147 + Source/CPack/bills-comments.txt | 68 + Source/CPack/cmCPackArchiveGenerator.cxx | 314 + Source/CPack/cmCPackArchiveGenerator.h | 74 + Source/CPack/cmCPackBundleGenerator.cxx | 174 + Source/CPack/cmCPackBundleGenerator.h | 40 + Source/CPack/cmCPackComponentGroup.cxx | 44 + Source/CPack/cmCPackComponentGroup.h | 138 + Source/CPack/cmCPackConfigure.h.in | 11 + Source/CPack/cmCPackCygwinBinaryGenerator.cxx | 92 + Source/CPack/cmCPackCygwinBinaryGenerator.h | 38 + Source/CPack/cmCPackCygwinSourceGenerator.cxx | 182 + Source/CPack/cmCPackCygwinSourceGenerator.h | 40 + Source/CPack/cmCPackDebGenerator.cxx | 828 + Source/CPack/cmCPackDebGenerator.h | 63 + Source/CPack/cmCPackDocumentMacros.cxx | 16 + Source/CPack/cmCPackDocumentMacros.h | 21 + Source/CPack/cmCPackDocumentVariables.cxx | 80 + Source/CPack/cmCPackDocumentVariables.h | 21 + Source/CPack/cmCPackDragNDropGenerator.cxx | 588 + Source/CPack/cmCPackDragNDropGenerator.h | 47 + Source/CPack/cmCPackGenerator.cxx | 1619 + Source/CPack/cmCPackGenerator.h | 287 + Source/CPack/cmCPackGeneratorFactory.cxx | 137 + Source/CPack/cmCPackGeneratorFactory.h | 59 + Source/CPack/cmCPackLog.cxx | 225 + Source/CPack/cmCPackLog.h | 155 + Source/CPack/cmCPackNSISGenerator.cxx | 990 + Source/CPack/cmCPackNSISGenerator.h | 80 + Source/CPack/cmCPackOSXX11Generator.cxx | 311 + Source/CPack/cmCPackOSXX11Generator.h | 46 + Source/CPack/cmCPackPackageMakerGenerator.cxx | 982 + Source/CPack/cmCPackPackageMakerGenerator.h | 119 + Source/CPack/cmCPackRPMGenerator.cxx | 275 + Source/CPack/cmCPackRPMGenerator.h | 63 + Source/CPack/cmCPackSTGZGenerator.cxx | 138 + Source/CPack/cmCPackSTGZGenerator.h | 41 + Source/CPack/cmCPackTGZGenerator.cxx | 26 + Source/CPack/cmCPackTGZGenerator.h | 35 + Source/CPack/cmCPackTarBZip2Generator.cxx | 25 + Source/CPack/cmCPackTarBZip2Generator.h | 34 + Source/CPack/cmCPackTarCompressGenerator.cxx | 26 + Source/CPack/cmCPackTarCompressGenerator.h | 35 + Source/CPack/cmCPackZIPGenerator.cxx | 26 + Source/CPack/cmCPackZIPGenerator.h | 36 + Source/CPack/cpack.cxx | 584 + Source/CPack/cygwin.readme | 69 + Source/CTest/cmCTestBZR.cxx | 524 + Source/CTest/cmCTestBZR.h | 55 + Source/CTest/cmCTestBatchTestHandler.cxx | 143 + Source/CTest/cmCTestBatchTestHandler.h | 41 + Source/CTest/cmCTestBuildAndTestHandler.cxx | 526 + Source/CTest/cmCTestBuildAndTestHandler.h | 78 + Source/CTest/cmCTestBuildCommand.cxx | 193 + Source/CTest/cmCTestBuildCommand.h | 98 + Source/CTest/cmCTestBuildHandler.cxx | 1310 + Source/CTest/cmCTestBuildHandler.h | 152 + Source/CTest/cmCTestCVS.cxx | 319 + Source/CTest/cmCTestCVS.h | 51 + Source/CTest/cmCTestCommand.h | 40 + Source/CTest/cmCTestConfigureCommand.cxx | 172 + Source/CTest/cmCTestConfigureCommand.h | 84 + Source/CTest/cmCTestConfigureHandler.cxx | 132 + Source/CTest/cmCTestConfigureHandler.h | 39 + Source/CTest/cmCTestCoverageCommand.cxx | 73 + Source/CTest/cmCTestCoverageCommand.h | 90 + Source/CTest/cmCTestCoverageHandler.cxx | 2066 + Source/CTest/cmCTestCoverageHandler.h | 137 + .../CTest/cmCTestEmptyBinaryDirectoryCommand.cxx | 36 + Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h | 78 + Source/CTest/cmCTestGIT.cxx | 652 + Source/CTest/cmCTestGIT.h | 57 + Source/CTest/cmCTestGenericHandler.cxx | 171 + Source/CTest/cmCTestGenericHandler.h | 107 + Source/CTest/cmCTestGlobalVC.cxx | 142 + Source/CTest/cmCTestGlobalVC.h | 68 + Source/CTest/cmCTestHG.cxx | 338 + Source/CTest/cmCTestHG.h | 47 + Source/CTest/cmCTestHandlerCommand.cxx | 197 + Source/CTest/cmCTestHandlerCommand.h | 77 + Source/CTest/cmCTestLaunch.cxx | 719 + Source/CTest/cmCTestLaunch.h | 104 + Source/CTest/cmCTestMemCheckCommand.cxx | 32 + Source/CTest/cmCTestMemCheckCommand.h | 88 + Source/CTest/cmCTestMemCheckHandler.cxx | 955 + Source/CTest/cmCTestMemCheckHandler.h | 125 + Source/CTest/cmCTestMultiProcessHandler.cxx | 691 + Source/CTest/cmCTestMultiProcessHandler.h | 116 + Source/CTest/cmCTestReadCustomFilesCommand.cxx | 35 + Source/CTest/cmCTestReadCustomFilesCommand.h | 75 + Source/CTest/cmCTestRunScriptCommand.cxx | 65 + Source/CTest/cmCTestRunScriptCommand.h | 80 + Source/CTest/cmCTestRunTest.cxx | 735 + Source/CTest/cmCTestRunTest.h | 112 + Source/CTest/cmCTestSVN.cxx | 450 + Source/CTest/cmCTestSVN.h | 68 + Source/CTest/cmCTestScriptHandler.cxx | 1090 + Source/CTest/cmCTestScriptHandler.h | 172 + Source/CTest/cmCTestSleepCommand.cxx | 55 + Source/CTest/cmCTestSleepCommand.h | 77 + Source/CTest/cmCTestStartCommand.cxx | 170 + Source/CTest/cmCTestStartCommand.h | 92 + Source/CTest/cmCTestSubmitCommand.cxx | 255 + Source/CTest/cmCTestSubmitCommand.h | 118 + Source/CTest/cmCTestSubmitHandler.cxx | 1508 + Source/CTest/cmCTestSubmitHandler.h | 98 + Source/CTest/cmCTestTestCommand.cxx | 112 + Source/CTest/cmCTestTestCommand.h | 107 + Source/CTest/cmCTestTestHandler.cxx | 2267 + Source/CTest/cmCTestTestHandler.h | 273 + Source/CTest/cmCTestUpdateCommand.cxx | 78 + Source/CTest/cmCTestUpdateCommand.h | 73 + Source/CTest/cmCTestUpdateHandler.cxx | 404 + Source/CTest/cmCTestUpdateHandler.h | 76 + Source/CTest/cmCTestUploadCommand.cxx | 69 + Source/CTest/cmCTestUploadCommand.h | 85 + Source/CTest/cmCTestUploadHandler.cxx | 77 + Source/CTest/cmCTestUploadHandler.h | 45 + Source/CTest/cmCTestVC.cxx | 241 + Source/CTest/cmCTestVC.h | 133 + Source/CTest/cmParsePHPCoverage.cxx | 253 + Source/CTest/cmParsePHPCoverage.h | 48 + Source/CTest/cmProcess.cxx | 272 + Source/CTest/cmProcess.h | 82 + Source/CursesDialog/.NoDartCoverage | 1 + Source/CursesDialog/CMakeLists.txt | 37 + Source/CursesDialog/ccmake.cxx | 217 + Source/CursesDialog/cmCursesBoolWidget.cxx | 74 + Source/CursesDialog/cmCursesBoolWidget.h | 40 + .../CursesDialog/cmCursesCacheEntryComposite.cxx | 103 + Source/CursesDialog/cmCursesCacheEntryComposite.h | 42 + Source/CursesDialog/cmCursesDummyWidget.cxx | 26 + Source/CursesDialog/cmCursesDummyWidget.h | 36 + Source/CursesDialog/cmCursesFilePathWidget.cxx | 20 + Source/CursesDialog/cmCursesFilePathWidget.h | 28 + Source/CursesDialog/cmCursesForm.cxx | 57 + Source/CursesDialog/cmCursesForm.h | 75 + Source/CursesDialog/cmCursesLabelWidget.cxx | 33 + Source/CursesDialog/cmCursesLabelWidget.h | 38 + Source/CursesDialog/cmCursesLongMessageForm.cxx | 207 + Source/CursesDialog/cmCursesLongMessageForm.h | 58 + Source/CursesDialog/cmCursesMainForm.cxx | 1303 + Source/CursesDialog/cmCursesMainForm.h | 164 + Source/CursesDialog/cmCursesPathWidget.cxx | 94 + Source/CursesDialog/cmCursesPathWidget.h | 40 + Source/CursesDialog/cmCursesStandardIncludes.h | 83 + Source/CursesDialog/cmCursesStringWidget.cxx | 249 + Source/CursesDialog/cmCursesStringWidget.h | 76 + Source/CursesDialog/cmCursesWidget.cxx | 58 + Source/CursesDialog/cmCursesWidget.h | 87 + Source/CursesDialog/form/.NoDartCoverage | 1 + Source/CursesDialog/form/CMakeLists.txt | 66 + Source/CursesDialog/form/READ.ME | 15 + Source/CursesDialog/form/cmFormConfigure.h.in | 21 + Source/CursesDialog/form/eti.h | 52 + Source/CursesDialog/form/fld_arg.c | 91 + Source/CursesDialog/form/fld_attr.c | 116 + Source/CursesDialog/form/fld_current.c | 124 + Source/CursesDialog/form/fld_def.c | 346 + Source/CursesDialog/form/fld_dup.c | 97 + Source/CursesDialog/form/fld_ftchoice.c | 62 + Source/CursesDialog/form/fld_ftlink.c | 83 + Source/CursesDialog/form/fld_info.c | 91 + Source/CursesDialog/form/fld_just.c | 81 + Source/CursesDialog/form/fld_link.c | 90 + Source/CursesDialog/form/fld_max.c | 74 + Source/CursesDialog/form/fld_move.c | 62 + Source/CursesDialog/form/fld_newftyp.c | 125 + Source/CursesDialog/form/fld_opts.c | 124 + Source/CursesDialog/form/fld_pad.c | 78 + Source/CursesDialog/form/fld_page.c | 76 + Source/CursesDialog/form/fld_stat.c | 73 + Source/CursesDialog/form/fld_type.c | 51 + Source/CursesDialog/form/fld_user.c | 67 + Source/CursesDialog/form/form.h | 401 + Source/CursesDialog/form/form.priv.h | 134 + Source/CursesDialog/form/frm_cursor.c | 66 + Source/CursesDialog/form/frm_data.c | 183 + Source/CursesDialog/form/frm_def.c | 376 + Source/CursesDialog/form/frm_driver.c | 3898 + Source/CursesDialog/form/frm_hook.c | 140 + Source/CursesDialog/form/frm_opts.c | 116 + Source/CursesDialog/form/frm_page.c | 100 + Source/CursesDialog/form/frm_post.c | 124 + Source/CursesDialog/form/frm_req_name.c | 169 + Source/CursesDialog/form/frm_scale.c | 63 + Source/CursesDialog/form/frm_sub.c | 69 + Source/CursesDialog/form/frm_user.c | 67 + Source/CursesDialog/form/frm_win.c | 70 + Source/CursesDialog/form/fty_alnum.c | 138 + Source/CursesDialog/form/fty_alpha.c | 139 + Source/CursesDialog/form/fty_enum.c | 295 + Source/CursesDialog/form/fty_int.c | 161 + Source/CursesDialog/form/fty_ipv4.c | 84 + Source/CursesDialog/form/fty_num.c | 192 + Source/CursesDialog/form/fty_regex.c | 264 + Source/CursesDialog/form/llib-lform | 694 + Source/CursesDialog/form/mf_common.h | 93 + Source/CursesDialog/form/nc_alloc.h | 83 + Source/QtDialog/AddCacheEntry.cxx | 83 + Source/QtDialog/AddCacheEntry.h | 36 + Source/QtDialog/AddCacheEntry.ui | 97 + Source/QtDialog/CMake.desktop | 12 + Source/QtDialog/CMakeLists.txt | 122 + Source/QtDialog/CMakeSetup.cxx | 199 + Source/QtDialog/CMakeSetup.icns | Bin 0 -> 138205 bytes Source/QtDialog/CMakeSetup.ico | Bin 0 -> 24542 bytes Source/QtDialog/CMakeSetup.qrc | 8 + Source/QtDialog/CMakeSetup.rc | 1 + Source/QtDialog/CMakeSetup128.png | Bin 0 -> 13269 bytes Source/QtDialog/CMakeSetup32.png | Bin 0 -> 358 bytes Source/QtDialog/CMakeSetupDialog.cxx | 1153 + Source/QtDialog/CMakeSetupDialog.h | 132 + Source/QtDialog/CMakeSetupDialog.ui | 310 + Source/QtDialog/Compilers.h | 21 + Source/QtDialog/Compilers.ui | 87 + Source/QtDialog/CrossCompiler.ui | 213 + Source/QtDialog/Delete16.png | Bin 0 -> 731 bytes Source/QtDialog/FirstConfigure.cxx | 509 + Source/QtDialog/FirstConfigure.h | 177 + Source/QtDialog/MacInstallDialog.ui | 103 + Source/QtDialog/Plus16.png | Bin 0 -> 358 bytes Source/QtDialog/QCMake.cxx | 448 + Source/QtDialog/QCMake.h | 154 + Source/QtDialog/QCMakeCacheView.cxx | 735 + Source/QtDialog/QCMakeCacheView.h | 172 + Source/QtDialog/QCMakeWidgets.cxx | 134 + Source/QtDialog/QCMakeWidgets.h | 87 + Source/QtDialog/QMacInstallDialog.cxx | 122 + Source/QtDialog/QMacInstallDialog.h | 20 + Source/QtDialog/QtDialogCPack.cmake.in | 18 + Source/QtDialog/cmakecache.xml | 8 + Source/QtDialog/postflight.sh.in | 3 + Source/QtDialog/postupgrade.sh.in | 2 + Source/cmAddCustomCommandCommand.cxx | 387 + Source/cmAddCustomCommandCommand.h | 187 + Source/cmAddCustomTargetCommand.cxx | 192 + Source/cmAddCustomTargetCommand.h | 108 + Source/cmAddDefinitionsCommand.cxx | 31 + Source/cmAddDefinitionsCommand.h | 82 + Source/cmAddDependenciesCommand.cxx | 46 + Source/cmAddDependenciesCommand.h | 78 + Source/cmAddExecutableCommand.cxx | 136 + Source/cmAddExecutableCommand.h | 117 + Source/cmAddLibraryCommand.cxx | 192 + Source/cmAddLibraryCommand.h | 142 + Source/cmAddSubDirectoryCommand.cxx | 123 + Source/cmAddSubDirectoryCommand.h | 99 + Source/cmAddTestCommand.cxx | 180 + Source/cmAddTestCommand.h | 101 + Source/cmArchiveWrite.cxx | 307 + Source/cmArchiveWrite.h | 94 + Source/cmAuxSourceDirectoryCommand.cxx | 89 + Source/cmAuxSourceDirectoryCommand.h | 86 + Source/cmBootstrapCommands.cxx | 171 + Source/cmBreakCommand.cxx | 21 + Source/cmBreakCommand.h | 73 + Source/cmBuildCommand.cxx | 161 + Source/cmBuildCommand.h | 97 + Source/cmBuildNameCommand.cxx | 77 + Source/cmBuildNameCommand.h | 82 + Source/cmCMakeMinimumRequired.cxx | 139 + Source/cmCMakeMinimumRequired.h | 90 + Source/cmCMakePolicyCommand.cxx | 172 + Source/cmCMakePolicyCommand.h | 142 + Source/cmCPluginAPI.cxx | 934 + Source/cmCPluginAPI.h | 243 + Source/cmCTest.cxx | 3204 + Source/cmCTest.h | 584 + Source/cmCacheManager.cxx | 1003 + Source/cmCacheManager.h | 189 + Source/cmCallVisualStudioMacro.cxx | 540 + Source/cmCallVisualStudioMacro.h | 45 + Source/cmCommand.h | 195 + Source/cmCommandArgumentLexer.cxx | 2077 + Source/cmCommandArgumentLexer.h | 333 + Source/cmCommandArgumentLexer.in.l | 161 + Source/cmCommandArgumentParser.cxx | 1835 + Source/cmCommandArgumentParser.y | 245 + Source/cmCommandArgumentParserHelper.cxx | 367 + Source/cmCommandArgumentParserHelper.h | 110 + Source/cmCommandArgumentParserTokens.h | 92 + Source/cmCommandArgumentsHelper.cxx | 307 + Source/cmCommandArgumentsHelper.h | 207 + Source/cmCommands.cxx | 75 + Source/cmCommands.h | 28 + Source/cmComputeComponentGraph.cxx | 159 + Source/cmComputeComponentGraph.h | 83 + Source/cmComputeLinkDepends.cxx | 998 + Source/cmComputeLinkDepends.h | 168 + Source/cmComputeLinkInformation.cxx | 1869 + Source/cmComputeLinkInformation.h | 185 + Source/cmComputeTargetDepends.cxx | 537 + Source/cmComputeTargetDepends.h | 82 + Source/cmConfigure.cmake.h.in | 22 + Source/cmConfigureFileCommand.cxx | 141 + Source/cmConfigureFileCommand.h | 109 + Source/cmCoreTryCompile.cxx | 478 + Source/cmCoreTryCompile.h | 60 + Source/cmCreateTestSourceList.cxx | 189 + Source/cmCreateTestSourceList.h | 90 + Source/cmCryptoHash.cxx | 130 + Source/cmCryptoHash.h | 65 + Source/cmCustomCommand.cxx | 172 + Source/cmCustomCommand.h | 93 + Source/cmCustomCommandGenerator.cxx | 72 + Source/cmCustomCommandGenerator.h | 40 + Source/cmDefinePropertyCommand.cxx | 137 + Source/cmDefinePropertyCommand.h | 93 + Source/cmDefinitions.cxx | 178 + Source/cmDefinitions.h | 86 + Source/cmDepends.cxx | 286 + Source/cmDepends.h | 121 + Source/cmDependsC.cxx | 581 + Source/cmDependsC.h | 99 + Source/cmDependsFortran.cxx | 1258 + Source/cmDependsFortran.h | 92 + Source/cmDependsFortranLexer.cxx | 2388 + Source/cmDependsFortranLexer.h | 341 + Source/cmDependsFortranLexer.in.l | 184 + Source/cmDependsFortranParser.cxx | 2030 + Source/cmDependsFortranParser.h | 96 + Source/cmDependsFortranParser.y | 279 + Source/cmDependsFortranParserTokens.h | 118 + Source/cmDependsJava.cxx | 45 + Source/cmDependsJava.h | 42 + Source/cmDependsJavaLexer.cxx | 2542 + Source/cmDependsJavaLexer.h | 334 + Source/cmDependsJavaLexer.in.l | 188 + Source/cmDependsJavaParser.cxx | 6021 ++ Source/cmDependsJavaParser.y | 3226 + Source/cmDependsJavaParserHelper.cxx | 429 + Source/cmDependsJavaParserHelper.h | 128 + Source/cmDependsJavaParserTokens.h | 254 + Source/cmDocumentCompileDefinitions.h | 34 + Source/cmDocumentGeneratorExpressions.h | 30 + Source/cmDocumentLocationUndefined.h | 24 + Source/cmDocumentVariables.cxx | 1705 + Source/cmDocumentVariables.h | 21 + Source/cmDocumentation.cxx | 1958 + Source/cmDocumentation.h | 269 + Source/cmDocumentationFormatter.cxx | 156 + Source/cmDocumentationFormatter.h | 67 + Source/cmDocumentationFormatterDocbook.cxx | 255 + Source/cmDocumentationFormatterDocbook.h | 41 + Source/cmDocumentationFormatterHTML.cxx | 288 + Source/cmDocumentationFormatterHTML.h | 42 + Source/cmDocumentationFormatterMan.cxx | 96 + Source/cmDocumentationFormatterMan.h | 40 + Source/cmDocumentationFormatterText.cxx | 180 + Source/cmDocumentationFormatterText.h | 40 + Source/cmDocumentationFormatterUsage.cxx | 63 + Source/cmDocumentationFormatterUsage.h | 31 + Source/cmDocumentationSection.cxx | 81 + Source/cmDocumentationSection.h | 68 + Source/cmDynamicLoader.cxx | 112 + Source/cmDynamicLoader.h | 47 + Source/cmELF.cxx | 920 + Source/cmELF.h | 108 + Source/cmElseCommand.cxx | 21 + Source/cmElseCommand.h | 72 + Source/cmElseIfCommand.cxx | 20 + Source/cmElseIfCommand.h | 72 + Source/cmEnableLanguageCommand.cxx | 43 + Source/cmEnableLanguageCommand.h | 76 + Source/cmEnableTestingCommand.cxx | 22 + Source/cmEnableTestingCommand.h | 79 + Source/cmEndForEachCommand.cxx | 23 + Source/cmEndForEachCommand.h | 79 + Source/cmEndFunctionCommand.cxx | 23 + Source/cmEndFunctionCommand.h | 79 + Source/cmEndIfCommand.cxx | 29 + Source/cmEndIfCommand.h | 72 + Source/cmEndMacroCommand.cxx | 23 + Source/cmEndMacroCommand.h | 79 + Source/cmEndWhileCommand.cxx | 32 + Source/cmEndWhileCommand.h | 79 + Source/cmExecProgramCommand.cxx | 145 + Source/cmExecProgramCommand.h | 95 + Source/cmExecuteProcessCommand.cxx | 422 + Source/cmExecuteProcessCommand.h | 113 + Source/cmExecutionStatus.h | 55 + Source/cmExportBuildFileGenerator.cxx | 152 + Source/cmExportBuildFileGenerator.h | 61 + Source/cmExportCommand.cxx | 347 + Source/cmExportCommand.h | 121 + Source/cmExportFileGenerator.cxx | 433 + Source/cmExportFileGenerator.h | 105 + Source/cmExportInstallFileGenerator.cxx | 333 + Source/cmExportInstallFileGenerator.h | 124 + Source/cmExportLibraryDependencies.cxx | 204 + Source/cmExportLibraryDependencies.h | 100 + Source/cmExprLexer.cxx | 1928 + Source/cmExprLexer.h | 334 + Source/cmExprLexer.in.l | 73 + Source/cmExprParser.cxx | 1433 + Source/cmExprParser.y | 169 + Source/cmExprParserHelper.cxx | 112 + Source/cmExprParserHelper.h | 71 + Source/cmExprParserTokens.h | 76 + Source/cmExternalMakefileProjectGenerator.cxx | 64 + Source/cmExternalMakefileProjectGenerator.h | 70 + Source/cmExtraCodeBlocksGenerator.cxx | 779 + Source/cmExtraCodeBlocksGenerator.h | 60 + Source/cmExtraEclipseCDT4Generator.cxx | 1364 + Source/cmExtraEclipseCDT4Generator.h | 121 + Source/cmFLTKWrapUICommand.cxx | 173 + Source/cmFLTKWrapUICommand.h | 94 + Source/cmFileCommand.cxx | 3178 + Source/cmFileCommand.h | 254 + Source/cmFileTimeComparison.cxx | 274 + Source/cmFileTimeComparison.h | 51 + Source/cmFindBase.cxx | 598 + Source/cmFindBase.h | 76 + Source/cmFindCommon.cxx | 505 + Source/cmFindCommon.h | 101 + Source/cmFindFileCommand.cxx | 30 + Source/cmFindFileCommand.h | 53 + Source/cmFindLibraryCommand.cxx | 527 + Source/cmFindLibraryCommand.h | 75 + Source/cmFindPackageCommand.cxx | 2585 + Source/cmFindPackageCommand.h | 154 + Source/cmFindPathCommand.cxx | 240 + Source/cmFindPathCommand.h | 76 + Source/cmFindProgramCommand.cxx | 191 + Source/cmFindProgramCommand.h | 75 + Source/cmForEachCommand.cxx | 246 + Source/cmForEachCommand.h | 116 + Source/cmFunctionBlocker.h | 48 + Source/cmFunctionCommand.cxx | 300 + Source/cmFunctionCommand.h | 104 + Source/cmGeneratedFileStream.cxx | 260 + Source/cmGeneratedFileStream.h | 152 + Source/cmGeneratorExpression.cxx | 193 + Source/cmGeneratorExpression.h | 58 + Source/cmGeneratorTarget.cxx | 184 + Source/cmGeneratorTarget.h | 64 + Source/cmGetCMakePropertyCommand.cxx | 77 + Source/cmGetCMakePropertyCommand.h | 72 + Source/cmGetDirectoryPropertyCommand.cxx | 96 + Source/cmGetDirectoryPropertyCommand.h | 78 + Source/cmGetFilenameComponentCommand.cxx | 139 + Source/cmGetFilenameComponentCommand.h | 91 + Source/cmGetPropertyCommand.cxx | 381 + Source/cmGetPropertyCommand.h | 117 + Source/cmGetSourceFilePropertyCommand.cxx | 52 + Source/cmGetSourceFilePropertyCommand.h | 66 + Source/cmGetTargetPropertyCommand.cxx | 39 + Source/cmGetTargetPropertyCommand.h | 68 + Source/cmGetTestPropertyCommand.cxx | 42 + Source/cmGetTestPropertyCommand.h | 65 + Source/cmGlobalBorlandMakefileGenerator.cxx | 63 + Source/cmGlobalBorlandMakefileGenerator.h | 48 + Source/cmGlobalGenerator.cxx | 2461 + Source/cmGlobalGenerator.h | 399 + Source/cmGlobalJOMMakefileGenerator.cxx | 69 + Source/cmGlobalJOMMakefileGenerator.h | 49 + Source/cmGlobalKdevelopGenerator.cxx | 616 + Source/cmGlobalKdevelopGenerator.h | 92 + Source/cmGlobalMSYSMakefileGenerator.cxx | 115 + Source/cmGlobalMSYSMakefileGenerator.h | 51 + Source/cmGlobalMinGWMakefileGenerator.cxx | 80 + Source/cmGlobalMinGWMakefileGenerator.h | 47 + Source/cmGlobalNMakeMakefileGenerator.cxx | 69 + Source/cmGlobalNMakeMakefileGenerator.h | 47 + Source/cmGlobalNinjaGenerator.cxx | 822 + Source/cmGlobalNinjaGenerator.h | 338 + Source/cmGlobalUnixMakefileGenerator3.cxx | 1068 + Source/cmGlobalUnixMakefileGenerator3.h | 189 + Source/cmGlobalVisualStudio10Generator.cxx | 214 + Source/cmGlobalVisualStudio10Generator.h | 84 + Source/cmGlobalVisualStudio10IA64Generator.cxx | 51 + Source/cmGlobalVisualStudio10IA64Generator.h | 40 + Source/cmGlobalVisualStudio10Win64Generator.cxx | 51 + Source/cmGlobalVisualStudio10Win64Generator.h | 40 + Source/cmGlobalVisualStudio11Generator.cxx | 56 + Source/cmGlobalVisualStudio11Generator.h | 46 + Source/cmGlobalVisualStudio11Win64Generator.cxx | 33 + Source/cmGlobalVisualStudio11Win64Generator.h | 37 + Source/cmGlobalVisualStudio6Generator.cxx | 424 + Source/cmGlobalVisualStudio6Generator.h | 102 + Source/cmGlobalVisualStudio71Generator.cxx | 323 + Source/cmGlobalVisualStudio71Generator.h | 77 + Source/cmGlobalVisualStudio7Generator.cxx | 809 + Source/cmGlobalVisualStudio7Generator.h | 154 + Source/cmGlobalVisualStudio8Generator.cxx | 375 + Source/cmGlobalVisualStudio8Generator.h | 87 + Source/cmGlobalVisualStudio8Win64Generator.cxx | 51 + Source/cmGlobalVisualStudio8Win64Generator.h | 50 + Source/cmGlobalVisualStudio9Generator.cxx | 99 + Source/cmGlobalVisualStudio9Generator.h | 66 + Source/cmGlobalVisualStudio9IA64Generator.cxx | 48 + Source/cmGlobalVisualStudio9IA64Generator.h | 50 + Source/cmGlobalVisualStudio9Win64Generator.cxx | 48 + Source/cmGlobalVisualStudio9Win64Generator.h | 50 + Source/cmGlobalVisualStudioGenerator.cxx | 861 + Source/cmGlobalVisualStudioGenerator.h | 121 + Source/cmGlobalWatcomWMakeGenerator.cxx | 66 + Source/cmGlobalWatcomWMakeGenerator.h | 46 + Source/cmGlobalXCodeGenerator.cxx | 3753 + Source/cmGlobalXCodeGenerator.h | 239 + Source/cmGraphAdjacencyList.h | 40 + Source/cmGraphVizWriter.cxx | 587 + Source/cmGraphVizWriter.h | 89 + Source/cmHexFileConverter.cxx | 265 + Source/cmHexFileConverter.h | 28 + Source/cmIDEFlagTable.h | 40 + Source/cmIDEOptions.cxx | 179 + Source/cmIDEOptions.h | 60 + Source/cmIfCommand.cxx | 934 + Source/cmIfCommand.h | 260 + Source/cmIncludeCommand.cxx | 109 + Source/cmIncludeCommand.h | 92 + Source/cmIncludeDirectoryCommand.cxx | 120 + Source/cmIncludeDirectoryCommand.h | 89 + Source/cmIncludeExternalMSProjectCommand.cxx | 44 + Source/cmIncludeExternalMSProjectCommand.h | 74 + Source/cmIncludeRegularExpressionCommand.cxx | 32 + Source/cmIncludeRegularExpressionCommand.h | 75 + Source/cmInstallCommand.cxx | 1328 + Source/cmInstallCommand.h | 347 + Source/cmInstallCommandArguments.cxx | 199 + Source/cmInstallCommandArguments.h | 66 + Source/cmInstallDirectoryGenerator.cxx | 52 + Source/cmInstallDirectoryGenerator.h | 42 + Source/cmInstallExportGenerator.cxx | 229 + Source/cmInstallExportGenerator.h | 58 + Source/cmInstallFilesCommand.cxx | 179 + Source/cmInstallFilesCommand.h | 114 + Source/cmInstallFilesGenerator.cxx | 50 + Source/cmInstallFilesGenerator.h | 41 + Source/cmInstallGenerator.cxx | 172 + Source/cmInstallGenerator.h | 63 + Source/cmInstallProgramsCommand.cxx | 140 + Source/cmInstallProgramsCommand.h | 108 + Source/cmInstallScriptGenerator.cxx | 47 + Source/cmInstallScriptGenerator.h | 33 + Source/cmInstallTargetGenerator.cxx | 738 + Source/cmInstallTargetGenerator.h | 102 + Source/cmInstallTargetsCommand.cxx | 65 + Source/cmInstallTargetsCommand.h | 81 + Source/cmInstallType.h | 29 + Source/cmLinkDirectoriesCommand.cxx | 70 + Source/cmLinkDirectoriesCommand.h | 84 + Source/cmLinkLibrariesCommand.cxx | 59 + Source/cmLinkLibrariesCommand.h | 83 + Source/cmListCommand.cxx | 595 + Source/cmListCommand.h | 128 + Source/cmListFileCache.cxx | 314 + Source/cmListFileCache.h | 79 + Source/cmListFileLexer.c | 2316 + Source/cmListFileLexer.h | 59 + Source/cmListFileLexer.in.l | 417 + Source/cmLoadCacheCommand.cxx | 196 + Source/cmLoadCacheCommand.h | 89 + Source/cmLoadCommandCommand.cxx | 315 + Source/cmLoadCommandCommand.h | 75 + Source/cmLocalGenerator.cxx | 3174 + Source/cmLocalGenerator.h | 429 + Source/cmLocalNinjaGenerator.cxx | 393 + Source/cmLocalNinjaGenerator.h | 133 + Source/cmLocalUnixMakefileGenerator3.cxx | 2245 + Source/cmLocalUnixMakefileGenerator3.h | 383 + Source/cmLocalVisualStudio10Generator.cxx | 116 + Source/cmLocalVisualStudio10Generator.h | 46 + Source/cmLocalVisualStudio6Generator.cxx | 1904 + Source/cmLocalVisualStudio6Generator.h | 103 + Source/cmLocalVisualStudio7Generator.cxx | 2213 + Source/cmLocalVisualStudio7Generator.h | 131 + Source/cmLocalVisualStudioGenerator.cxx | 206 + Source/cmLocalVisualStudioGenerator.h | 74 + Source/cmLocalXCodeGenerator.cxx | 35 + Source/cmLocalXCodeGenerator.h | 36 + Source/cmMacroCommand.cxx | 350 + Source/cmMacroCommand.h | 110 + Source/cmMakeDepend.cxx | 352 + Source/cmMakeDepend.h | 150 + Source/cmMakeDirectoryCommand.cxx | 34 + Source/cmMakeDirectoryCommand.h | 85 + Source/cmMakefile.cxx | 4297 + Source/cmMakefile.h | 1004 + Source/cmMakefileExecutableTargetGenerator.cxx | 463 + Source/cmMakefileExecutableTargetGenerator.h | 31 + Source/cmMakefileLibraryTargetGenerator.cxx | 928 + Source/cmMakefileLibraryTargetGenerator.h | 46 + Source/cmMakefileTargetGenerator.cxx | 2014 + Source/cmMakefileTargetGenerator.h | 264 + Source/cmMakefileUtilityTargetGenerator.cxx | 110 + Source/cmMakefileUtilityTargetGenerator.h | 31 + Source/cmMarkAsAdvancedCommand.cxx | 62 + Source/cmMarkAsAdvancedCommand.h | 85 + Source/cmMathCommand.cxx | 61 + Source/cmMathCommand.h | 76 + Source/cmMessageCommand.cxx | 82 + Source/cmMessageCommand.h | 91 + Source/cmNewLineStyle.cxx | 95 + Source/cmNewLineStyle.h | 46 + Source/cmNinjaNormalTargetGenerator.cxx | 500 + Source/cmNinjaNormalTargetGenerator.h | 48 + Source/cmNinjaTargetGenerator.cxx | 536 + Source/cmNinjaTargetGenerator.h | 126 + Source/cmNinjaTypes.h | 19 + Source/cmNinjaUtilityTargetGenerator.cxx | 116 + Source/cmNinjaUtilityTargetGenerator.h | 30 + Source/cmObject.h | 51 + Source/cmOptionCommand.cxx | 71 + Source/cmOptionCommand.h | 78 + Source/cmOrderDirectories.cxx | 611 + Source/cmOrderDirectories.h | 89 + Source/cmOutputRequiredFilesCommand.cxx | 240 + Source/cmOutputRequiredFilesCommand.h | 88 + Source/cmPolicies.cxx | 831 + Source/cmPolicies.h | 127 + Source/cmProcessTools.cxx | 90 + Source/cmProcessTools.h | 82 + Source/cmProjectCommand.cxx | 100 + Source/cmProjectCommand.h | 82 + Source/cmProperty.cxx | 40 + Source/cmProperty.h | 41 + Source/cmPropertyDefinition.cxx | 47 + Source/cmPropertyDefinition.h | 70 + Source/cmPropertyDefinitionMap.cxx | 125 + Source/cmPropertyDefinitionMap.h | 41 + Source/cmPropertyMap.cxx | 123 + Source/cmPropertyMap.h | 43 + Source/cmQTWrapCPPCommand.cxx | 115 + Source/cmQTWrapCPPCommand.h | 74 + Source/cmQTWrapUICommand.cxx | 166 + Source/cmQTWrapUICommand.h | 75 + Source/cmQtAutomoc.cxx | 1084 + Source/cmQtAutomoc.h | 92 + Source/cmRemoveCommand.cxx | 76 + Source/cmRemoveCommand.h | 81 + Source/cmRemoveDefinitionsCommand.cxx | 31 + Source/cmRemoveDefinitionsCommand.h | 71 + Source/cmReturnCommand.cxx | 21 + Source/cmReturnCommand.h | 81 + Source/cmScriptGenerator.cxx | 237 + Source/cmScriptGenerator.h | 96 + Source/cmSeparateArgumentsCommand.cxx | 109 + Source/cmSeparateArgumentsCommand.h | 92 + Source/cmSetCommand.cxx | 177 + Source/cmSetCommand.h | 101 + Source/cmSetDirectoryPropertiesCommand.cxx | 70 + Source/cmSetDirectoryPropertiesCommand.h | 78 + Source/cmSetPropertyCommand.cxx | 483 + Source/cmSetPropertyCommand.h | 116 + Source/cmSetSourceFilesPropertiesCommand.cxx | 170 + Source/cmSetSourceFilesPropertiesCommand.h | 74 + Source/cmSetTargetPropertiesCommand.cxx | 110 + Source/cmSetTargetPropertiesCommand.h | 168 + Source/cmSetTestsPropertiesCommand.cxx | 117 + Source/cmSetTestsPropertiesCommand.h | 81 + Source/cmSiteNameCommand.cxx | 95 + Source/cmSiteNameCommand.h | 72 + Source/cmSourceFile.cxx | 557 + Source/cmSourceFile.h | 122 + Source/cmSourceFileLocation.cxx | 289 + Source/cmSourceFileLocation.h | 101 + Source/cmSourceGroup.cxx | 204 + Source/cmSourceGroup.h | 132 + Source/cmSourceGroupCommand.cxx | 102 + Source/cmSourceGroupCommand.h | 81 + Source/cmStandardIncludes.cxx | 16 + Source/cmStandardIncludes.h | 384 + Source/cmStandardLexer.h | 73 + Source/cmStringCommand.cxx | 881 + Source/cmStringCommand.h | 181 + Source/cmSubdirCommand.cxx | 74 + Source/cmSubdirCommand.h | 92 + Source/cmSubdirDependsCommand.cxx | 20 + Source/cmSubdirDependsCommand.h | 77 + Source/cmSystemTools.cxx | 2966 + Source/cmSystemTools.h | 488 + Source/cmTarget.cxx | 4765 + Source/cmTarget.h | 627 + Source/cmTargetDepend.h | 48 + Source/cmTargetLinkLibrariesCommand.cxx | 304 + Source/cmTargetLinkLibrariesCommand.h | 166 + Source/cmTest.cxx | 205 + Source/cmTest.h | 80 + Source/cmTestGenerator.cxx | 184 + Source/cmTestGenerator.h | 45 + Source/cmTryCompileCommand.cxx | 42 + Source/cmTryCompileCommand.h | 119 + Source/cmTryRunCommand.cxx | 387 + Source/cmTryRunCommand.h | 118 + Source/cmUnsetCommand.cxx | 59 + Source/cmUnsetCommand.h | 79 + Source/cmUseMangledMesaCommand.cxx | 131 + Source/cmUseMangledMesaCommand.h | 88 + Source/cmUtilitySourceCommand.cxx | 127 + Source/cmUtilitySourceCommand.h | 90 + Source/cmVS10CLFlagTable.h | 270 + Source/cmVS10LibFlagTable.h | 102 + Source/cmVS10LinkFlagTable.h | 305 + Source/cmVariableRequiresCommand.cxx | 76 + Source/cmVariableRequiresCommand.h | 82 + Source/cmVariableWatch.cxx | 93 + Source/cmVariableWatch.h | 80 + Source/cmVariableWatchCommand.cxx | 140 + Source/cmVariableWatchCommand.h | 98 + Source/cmVersion.cxx | 24 + Source/cmVersion.h | 39 + Source/cmVersionConfig.h.in | 16 + Source/cmVersionMacros.h | 22 + Source/cmVisualStudio10TargetGenerator.cxx | 1698 + Source/cmVisualStudio10TargetGenerator.h | 104 + Source/cmVisualStudioGeneratorOptions.cxx | 370 + Source/cmVisualStudioGeneratorOptions.h | 79 + Source/cmWhileCommand.cxx | 142 + Source/cmWhileCommand.h | 101 + Source/cmWin32ProcessExecution.cxx | 940 + Source/cmWin32ProcessExecution.h | 169 + Source/cmWriteFileCommand.cxx | 93 + Source/cmWriteFileCommand.h | 85 + Source/cmXCode21Object.cxx | 105 + Source/cmXCode21Object.h | 28 + Source/cmXCodeObject.cxx | 273 + Source/cmXCodeObject.h | 179 + Source/cmXMLParser.cxx | 237 + Source/cmXMLParser.h | 112 + Source/cmXMLSafe.cxx | 102 + Source/cmXMLSafe.h | 44 + Source/cm_sha2.c | 1613 + Source/cm_sha2.h | 140 + Source/cm_sha2_mangle.h | 51 + Source/cm_utf8.c | 84 + Source/cm_utf8.h | 29 + Source/cmake.cxx | 4530 + Source/cmake.h | 545 + Source/cmakemain.cxx | 658 + Source/cmaketest.h.in | 16 + Source/cmakewizard.cxx | 158 + Source/cmakewizard.h | 42 + Source/cmakexbuild.cxx | 92 + Source/cmparseMSBuildXML.py | 329 + Source/cmw9xcom.cxx | 45 + Source/ctest.cxx | 337 + Source/kwsys/Base64.c | 279 + Source/kwsys/Base64.h.in | 120 + Source/kwsys/CMakeEmptyInputFile.in | 1 + Source/kwsys/CMakeLists.txt | 1030 + Source/kwsys/CPU.h.in | 117 + Source/kwsys/CTestConfig.cmake | 18 + Source/kwsys/CommandLineArguments.cxx | 859 + Source/kwsys/CommandLineArguments.hxx.in | 286 + Source/kwsys/Configure.h.in | 145 + Source/kwsys/Configure.hxx.in | 175 + Source/kwsys/Copyright.txt | 31 + Source/kwsys/DateStamp.h.in | 42 + Source/kwsys/Directory.cxx | 250 + Source/kwsys/Directory.hxx.in | 80 + Source/kwsys/DynamicLoader.cxx | 482 + Source/kwsys/DynamicLoader.hxx.in | 101 + Source/kwsys/EncodeExecutable.c | 114 + Source/kwsys/ExtraTest.cmake.in | 1 + Source/kwsys/FundamentalType.h.in | 146 + Source/kwsys/Glob.cxx | 516 + Source/kwsys/Glob.hxx.in | 117 + Source/kwsys/IOStream.cxx | 281 + Source/kwsys/IOStream.hxx.in | 146 + Source/kwsys/MD5.c | 518 + Source/kwsys/MD5.h.in | 107 + Source/kwsys/Process.h.in | 428 + Source/kwsys/ProcessFwd9x.c | 211 + Source/kwsys/ProcessUNIX.c | 2753 + Source/kwsys/ProcessWin32.c | 2952 + Source/kwsys/README.txt | 10 + Source/kwsys/Registry.cxx | 818 + Source/kwsys/Registry.hxx.in | 107 + Source/kwsys/RegularExpression.cxx | 1251 + Source/kwsys/RegularExpression.hxx.in | 414 + Source/kwsys/SharedForward.h.in | 922 + Source/kwsys/String.c | 115 + Source/kwsys/String.h.in | 67 + Source/kwsys/String.hxx.in | 65 + Source/kwsys/System.c | 856 + Source/kwsys/System.h.in | 162 + Source/kwsys/SystemInformation.cxx | 3677 + Source/kwsys/SystemInformation.hxx.in | 88 + Source/kwsys/SystemTools.cxx | 4664 + Source/kwsys/SystemTools.hxx.in | 900 + Source/kwsys/Terminal.c | 432 + Source/kwsys/Terminal.h.in | 159 + Source/kwsys/auto_ptr.hxx.in | 201 + Source/kwsys/hash_fun.hxx.in | 150 + Source/kwsys/hash_map.hxx.in | 461 + Source/kwsys/hash_set.hxx.in | 445 + Source/kwsys/hashtable.hxx.in | 1275 + Source/kwsys/kwsysDateStamp.cmake | 21 + Source/kwsys/kwsysDateStamp.py | 54 + Source/kwsys/kwsysHeaderDump.pl | 50 + Source/kwsys/kwsysPlatformTests.cmake | 216 + Source/kwsys/kwsysPlatformTestsC.c | 100 + Source/kwsys/kwsysPlatformTestsCXX.cxx | 481 + Source/kwsys/kwsysPrivate.h | 41 + Source/kwsys/kwsys_cstddef.hxx.in | 35 + Source/kwsys/kwsys_ios_fstream.h.in | 46 + Source/kwsys/kwsys_ios_iosfwd.h.in | 49 + Source/kwsys/kwsys_ios_iostream.h.in | 99 + Source/kwsys/kwsys_ios_sstream.h.in | 199 + Source/kwsys/kwsys_stl.hxx.in | 49 + Source/kwsys/kwsys_stl_string.hxx.in | 123 + Source/kwsys/testAutoPtr.cxx | 166 + Source/kwsys/testCommandLineArguments.cxx | 187 + Source/kwsys/testCommandLineArguments1.cxx | 106 + Source/kwsys/testDynamicLoader.cxx | 133 + Source/kwsys/testDynload.c | 22 + Source/kwsys/testEncode.c | 76 + Source/kwsys/testFail.c | 35 + Source/kwsys/testHashSTL.cxx | 75 + Source/kwsys/testIOS.cxx | 167 + Source/kwsys/testProcess.c | 526 + Source/kwsys/testRegistry.cxx | 109 + Source/kwsys/testSharedForward.c.in | 36 + Source/kwsys/testSystemInformation.cxx | 65 + Source/kwsys/testSystemTools.bin | Bin 0 -> 766 bytes Source/kwsys/testSystemTools.cxx | 360 + Source/kwsys/testSystemTools.h.in | 20 + Source/kwsys/testTerminal.c | 31 + Templates/AppleInfo.plist | 36 + Templates/CMakeVSMacros1.vsmacros | Bin 0 -> 88064 bytes Templates/CMakeVSMacros2.vsmacros | Bin 0 -> 63488 bytes Templates/CMakeVisualStudio6Configurations.cmake | 3 + Templates/CPack.GenericDescription.txt | 5 + Templates/CPack.GenericLicense.txt | 5 + Templates/CPack.GenericWelcome.txt | 1 + Templates/CPackConfig.cmake.in | 12 + Templates/CTestScript.cmake.in | 33 + Templates/DLLFooter.dsptemplate | 4 + Templates/DLLHeader.dsptemplate | 192 + Templates/EXEFooter.dsptemplate | 4 + Templates/EXEHeader.dsptemplate | 183 + Templates/EXEWinHeader.dsptemplate | 187 + Templates/TestDriver.cxx.in | 155 + Templates/UtilityFooter.dsptemplate | 2 + Templates/UtilityHeader.dsptemplate | 95 + Templates/cygwin-package.sh.in | 103 + Templates/staticLibFooter.dsptemplate | 4 + Templates/staticLibHeader.dsptemplate | 173 + Tests/.NoDartCoverage | 1 + Tests/Architecture/CMakeLists.txt | 59 + Tests/Architecture/bar.c | 2 + Tests/Architecture/foo.c | 1 + Tests/ArgumentExpansion/CMakeLists.txt | 60 + Tests/Assembler/CMakeLists.txt | 32 + Tests/Assembler/main-linux-x86-gas.s | 28 + Tests/Assembler/main.c | 12 + Tests/BuildDepends/CMakeLists.txt | 221 + Tests/BuildDepends/Project/CMakeLists.txt | 108 + Tests/BuildDepends/Project/bar.cxx | 25 + Tests/BuildDepends/Project/dep.cxx | 1 + Tests/BuildDepends/Project/dep_custom.cxx | 1 + Tests/BuildDepends/Project/generator.cxx | 24 + Tests/BuildDepends/Project/linkdep.cxx | 4 + Tests/BuildDepends/Project/zot.cxx | 14 + Tests/BuildDepends/Project/zot_macro_dir.cxx | 7 + Tests/BuildDepends/Project/zot_macro_tgt.cxx | 7 + Tests/BundleGeneratorTest/BundleIcon.icns | Bin 0 -> 33452 bytes Tests/BundleGeneratorTest/CMakeLists.txt | 33 + Tests/BundleGeneratorTest/CustomVolumeIcon.icns | Bin 0 -> 37827 bytes Tests/BundleGeneratorTest/Executable.cxx | 8 + Tests/BundleGeneratorTest/Info.plist | 14 + Tests/BundleGeneratorTest/Library.cxx | 7 + Tests/BundleGeneratorTest/StartupCommand | 12 + Tests/BundleTest/BundleLib.cxx | 70 + Tests/BundleTest/BundleSubDir/CMakeLists.txt | 36 + Tests/BundleTest/BundleTest.cxx | 20 + Tests/BundleTest/CMakeLists.txt | 104 + Tests/BundleTest/SomeRandomFile.txt | 0 Tests/BundleTest/randomResourceFile.plist.in | 9 + Tests/BundleUtilities/CMakeLists.txt | 133 + Tests/BundleUtilities/bundleutils.cmake | 45 + Tests/BundleUtilities/framework.cpp | 8 + Tests/BundleUtilities/framework.h | 17 + Tests/BundleUtilities/module.cpp | 10 + Tests/BundleUtilities/module.h | 7 + Tests/BundleUtilities/shared.cpp | 8 + Tests/BundleUtilities/shared.h | 17 + Tests/BundleUtilities/shared2.cpp | 8 + Tests/BundleUtilities/shared2.h | 17 + Tests/BundleUtilities/testbundleutils1.cpp | 33 + Tests/BundleUtilities/testbundleutils2.cpp | 33 + Tests/BundleUtilities/testbundleutils3.cpp | 33 + Tests/CFBundleTest/CMakeLists.txt | 56 + Tests/CFBundleTest/ExportList_plugin.txt | 3 + Tests/CFBundleTest/Info.plist.in | 54 + Tests/CFBundleTest/InfoPlist.strings.in | 4 + Tests/CFBundleTest/Localized.r | 18 + Tests/CFBundleTest/Localized.rsrc | Bin 0 -> 496 bytes Tests/CFBundleTest/PluginConfig.cmake | 21 + Tests/CFBundleTest/README.txt | 16 + Tests/CFBundleTest/VerifyResult.cmake | 32 + Tests/CFBundleTest/np_macmain.cpp | 49 + Tests/CMakeBuildTest.cmake.in | 59 + .../target_link_libraries/CMakeLists.txt | 58 + Tests/CMakeCommands/target_link_libraries/depA.cpp | 7 + Tests/CMakeCommands/target_link_libraries/depA.h | 7 + Tests/CMakeCommands/target_link_libraries/depB.cpp | 11 + Tests/CMakeCommands/target_link_libraries/depB.h | 7 + Tests/CMakeCommands/target_link_libraries/depC.cpp | 13 + Tests/CMakeCommands/target_link_libraries/depC.h | 12 + .../target_link_libraries/targetA.cpp | 12 + Tests/CMakeInstall.cmake | 51 + Tests/CMakeLib/CMakeLists.txt | 39 + Tests/CMakeLib/run_compile_commands.cxx | 141 + Tests/CMakeLib/testGeneratedFileStream.cxx | 100 + Tests/CMakeLib/testSystemTools.cxx | 33 + Tests/CMakeLib/testUTF8.cxx | 125 + Tests/CMakeLib/testXMLParser.cxx | 17 + Tests/CMakeLib/testXMLParser.h.in | 6 + Tests/CMakeLib/testXMLParser.xml | 4 + Tests/CMakeLib/testXMLSafe.cxx | 47 + Tests/CMakeLists.txt | 2321 + Tests/CMakeOnly/AllFindModules/CMakeLists.txt | 85 + Tests/CMakeOnly/CMakeLists.txt | 30 + .../CMakeOnly/CheckCXXCompilerFlag/CMakeLists.txt | 58 + .../CMakeOnly/CheckCXXSymbolExists/CMakeLists.txt | 62 + Tests/CMakeOnly/CheckLanguage/CMakeLists.txt | 22 + Tests/CMakeOnly/CheckSymbolExists/CMakeLists.txt | 51 + Tests/CMakeOnly/CheckSymbolExists/cm_cse.h | 6 + Tests/CMakeOnly/LinkInterfaceLoop/CMakeLists.txt | 27 + Tests/CMakeOnly/LinkInterfaceLoop/lib.c | 1 + Tests/CMakeOnly/LinkInterfaceLoop/main.c | 1 + Tests/CMakeOnly/ProjectInclude/CMakeLists.txt | 4 + Tests/CMakeOnly/ProjectInclude/include.cmake | 1 + Tests/CMakeOnly/TargetScope/CMakeLists.txt | 13 + Tests/CMakeOnly/TargetScope/Sib/CMakeLists.txt | 6 + Tests/CMakeOnly/TargetScope/Sub/CMakeLists.txt | 9 + Tests/CMakeOnly/TargetScope/Sub/Sub/CMakeLists.txt | 6 + Tests/CMakeOnly/Test.cmake.in | 13 + Tests/CMakeTestAllGenerators/RunCMake.cmake | 117 + Tests/CMakeTestBadCommandLines/RunCMake.cmake | 79 + Tests/CMakeTestMultipleConfigures/RunCMake.cmake | 165 + Tests/CMakeTests/.gitattributes | 1 + .../A/include/cmake_i_do_not_exist_in_the_system.h | 1 + Tests/CMakeTests/CMakeLists.txt | 69 + Tests/CMakeTests/CMakeMinimumRequiredTest.cmake.in | 18 + .../CMakeMinimumRequiredTestScript.cmake | 31 + Tests/CMakeTests/CheckCMakeTest.cmake | 30 + Tests/CMakeTests/CheckSourceTreeTest.cmake.in | 357 + Tests/CMakeTests/CompilerIdVendorTest.cmake.in | 31 + Tests/CMakeTests/ConfigureFile-BadArg.cmake | 1 + Tests/CMakeTests/ConfigureFile-DirInput.cmake | 1 + Tests/CMakeTests/ConfigureFile-DirOutput.cmake | 5 + .../ConfigureFile-NewLineStyle-COPYONLY.cmake | 3 + .../ConfigureFile-NewLineStyle-NoArg.cmake | 3 + .../ConfigureFile-NewLineStyle-ValidArg.cmake | 17 + .../ConfigureFile-NewLineStyle-WrongArg.cmake | 3 + Tests/CMakeTests/ConfigureFile-Relative.cmake | 4 + Tests/CMakeTests/ConfigureFileTest.cmake.in | 28 + Tests/CMakeTests/DummyToolchain.cmake | 8 + Tests/CMakeTests/ELF/elf32lsb.bin | Bin 0 -> 2824 bytes Tests/CMakeTests/ELF/elf32msb.bin | Bin 0 -> 17984 bytes Tests/CMakeTests/ELF/elf64lsb.bin | Bin 0 -> 4320 bytes Tests/CMakeTests/ELF/elf64msb.bin | Bin 0 -> 18704 bytes Tests/CMakeTests/ELFTest.cmake.in | 48 + Tests/CMakeTests/EndStuffTest.cmake.in | 18 + Tests/CMakeTests/EndStuffTestScript.cmake | 70 + Tests/CMakeTests/ExecuteScriptTests.cmake | 63 + Tests/CMakeTests/File-Copy-BadArg.cmake | 1 + Tests/CMakeTests/File-Copy-BadPerm.cmake | 1 + Tests/CMakeTests/File-Copy-BadRegex.cmake | 1 + Tests/CMakeTests/File-Copy-EarlyArg.cmake | 1 + Tests/CMakeTests/File-Copy-LateArg.cmake | 1 + Tests/CMakeTests/File-Copy-NoDest.cmake | 1 + Tests/CMakeTests/File-Copy-NoFile.cmake | 1 + Tests/CMakeTests/File-HASH-Input.txt | 1 + Tests/CMakeTests/File-MD5-BadArg1.cmake | 1 + Tests/CMakeTests/File-MD5-BadArg2.cmake | 1 + Tests/CMakeTests/File-MD5-BadArg4.cmake | 1 + Tests/CMakeTests/File-MD5-NoFile.cmake | 1 + Tests/CMakeTests/File-MD5-Works.cmake | 2 + Tests/CMakeTests/File-SHA1-Works.cmake | 2 + Tests/CMakeTests/File-SHA224-Works.cmake | 2 + Tests/CMakeTests/File-SHA256-Works.cmake | 2 + Tests/CMakeTests/File-SHA384-Works.cmake | 2 + Tests/CMakeTests/File-SHA512-Works.cmake | 2 + Tests/CMakeTests/FileDownloadInput.png | Bin 0 -> 358 bytes Tests/CMakeTests/FileDownloadTest.cmake.in | 43 + Tests/CMakeTests/FileTest.cmake.in | 74 + Tests/CMakeTests/FileTestScript.cmake | 227 + Tests/CMakeTests/FileUploadTest.cmake.in | 49 + Tests/CMakeTests/FindBaseTest.cmake.in | 62 + .../GetFilenameComponentRealpathTest.cmake.in | 72 + Tests/CMakeTests/GetPrerequisitesTest.cmake.in | 159 + Tests/CMakeTests/GetProperty-Bad-Argument.cmake | 1 + Tests/CMakeTests/GetProperty-Bad-Directory.cmake | 1 + Tests/CMakeTests/GetProperty-Bad-Scope.cmake | 1 + Tests/CMakeTests/GetProperty-Bad-Target.cmake | 1 + Tests/CMakeTests/GetProperty-Bad-Test.cmake | 1 + Tests/CMakeTests/GetProperty-Doc-Properties.cmake | 10 + Tests/CMakeTests/GetProperty-Global-Name.cmake | 1 + .../CMakeTests/GetProperty-Missing-Argument.cmake | 1 + Tests/CMakeTests/GetProperty-No-Cache.cmake | 1 + Tests/CMakeTests/GetProperty-No-Property.cmake | 1 + Tests/CMakeTests/GetProperty-No-Source.cmake | 1 + Tests/CMakeTests/GetProperty-No-Target.cmake | 1 + Tests/CMakeTests/GetProperty-No-Test.cmake | 1 + Tests/CMakeTests/GetProperty-Variable-Name.cmake | 1 + Tests/CMakeTests/GetPropertyTest.cmake.in | 98 + Tests/CMakeTests/If-Invalid-Argument.cmake | 2 + Tests/CMakeTests/IfTest.cmake.in | 166 + Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in | 420 + Tests/CMakeTests/IncludeTest.cmake.in | 41 + Tests/CMakeTests/ListTest.cmake.in | 88 + Tests/CMakeTests/MathTest.cmake.in | 18 + Tests/CMakeTests/MathTestScript.cmake | 18 + Tests/CMakeTests/MessageTest.cmake.in | 30 + Tests/CMakeTests/MessageTestScript.cmake | 4 + Tests/CMakeTests/ModuleNoticesTest.cmake.in | 46 + Tests/CMakeTests/ProcessorCountTest.cmake.in | 72 + Tests/CMakeTests/PushCheckStateTest.cmake.in | 30 + Tests/CMakeTests/SeparateArgumentsTest.cmake.in | 25 + Tests/CMakeTests/String-MD5-BadArg1.cmake | 1 + Tests/CMakeTests/String-MD5-BadArg2.cmake | 1 + Tests/CMakeTests/String-MD5-BadArg4.cmake | 1 + Tests/CMakeTests/String-MD5-Works.cmake | 2 + Tests/CMakeTests/String-SHA1-Works.cmake | 2 + Tests/CMakeTests/String-SHA224-Works.cmake | 2 + Tests/CMakeTests/String-SHA256-Works.cmake | 2 + Tests/CMakeTests/String-SHA384-Works.cmake | 2 + Tests/CMakeTests/String-SHA512-Works.cmake | 2 + Tests/CMakeTests/StringTest.cmake.in | 50 + Tests/CMakeTests/StringTestScript.cmake | 279 + Tests/CMakeTests/ToolchainTest.cmake.in | 139 + Tests/CMakeTests/VariableWatchTest.cmake.in | 31 + Tests/CMakeTests/VersionTest.cmake.in | 9 + Tests/CMakeTests/While-Endwhile-Alone-Args.cmake | 1 + Tests/CMakeTests/While-Endwhile-Alone.cmake | 1 + Tests/CMakeTests/While-Endwhile-Mismatch.cmake | 2 + Tests/CMakeTests/While-Missing-Argument.cmake | 1 + Tests/CMakeTests/While-Missing-Endwhile.cmake | 1 + Tests/CMakeTests/WhileTest.cmake.in | 53 + .../include/cmake_i_do_not_exist_in_the_system.h | 1 + Tests/CMakeWizardTest.cmake | 52 + Tests/COnly/CMakeLists.txt | 23 + Tests/COnly/conly.c | 23 + Tests/COnly/foo.c | 1 + Tests/COnly/foo.h | 1 + Tests/COnly/libc1.c | 4 + Tests/COnly/libc1.h | 1 + Tests/COnly/libc2.c | 6 + Tests/COnly/libc2.h | 11 + Tests/COnly/testCModule.c | 6 + Tests/CPackComponents/CMakeLists.txt | 128 + Tests/CPackComponents/Issue 7470.html | 9 + Tests/CPackComponents/VerifyResult.cmake | 48 + Tests/CPackComponents/mylib.cpp | 7 + Tests/CPackComponents/mylib.h | 1 + Tests/CPackComponents/mylibapp.cpp | 6 + Tests/CPackComponentsForAll/CMakeLists.txt | 123 + .../MyLibCPackConfig-AllInOne.cmake.in | 22 + .../MyLibCPackConfig-IgnoreGroup.cmake.in | 23 + .../MyLibCPackConfig-OnePackPerGroup.cmake.in | 27 + .../RunCPackVerifyResult.cmake | 126 + Tests/CPackComponentsForAll/mylib.cpp | 7 + Tests/CPackComponentsForAll/mylib.h | 1 + Tests/CPackComponentsForAll/mylibapp.cpp | 6 + Tests/CPackTestAllGenerators/CMakeLists.txt | 5 + Tests/CPackTestAllGenerators/RunCPack.cmake | 55 + Tests/CTestConfig/CMakeLists.txt | 47 + Tests/CTestConfig/CTestConfig.cxx | 20 + Tests/CTestConfig/dashboard.cmake.in | 43 + Tests/CTestConfig/script.cmake.in | 21 + Tests/CTestScriptMode/CTestTestScriptMode.cmake.in | 14 + Tests/CTestTest/SmallAndFast/CMakeLists.txt | 25 + Tests/CTestTest/SmallAndFast/echoargs.c | 11 + .../SmallAndFast/intentional_compile_error.cxx | 1 + .../SmallAndFast/intentional_compile_warning.cxx | 11 + Tests/CTestTest/test.cmake.in | 68 + Tests/CTestTest2/test.cmake.in | 60 + Tests/CTestTestBadExe/CMakeLists.txt | 7 + Tests/CTestTestBadExe/CTestConfig.cmake | 7 + Tests/CTestTestBadExe/notAnExe.txt | 1 + Tests/CTestTestBadExe/test.cmake.in | 21 + Tests/CTestTestChecksum/test.cmake.in | 25 + Tests/CTestTestConfigFileInBuildDir/CMakeLists.txt | 3 + .../CTestConfig.cmake | 7 + Tests/CTestTestConfigFileInBuildDir/test1.cmake.in | 17 + Tests/CTestTestConfigFileInBuildDir/test2.cmake.in | 17 + Tests/CTestTestCostSerial/CMakeLists.txt | 13 + Tests/CTestTestCostSerial/CTestConfig.cmake | 7 + Tests/CTestTestCostSerial/sleep.c | 16 + Tests/CTestTestCostSerial/test.cmake.in | 28 + Tests/CTestTestCrash/CMakeLists.txt | 7 + Tests/CTestTestCrash/CTestConfig.cmake | 7 + Tests/CTestTestCrash/crash.cxx | 6 + Tests/CTestTestCrash/test.cmake.in | 22 + Tests/CTestTestCycle/CMakeLists.txt | 13 + Tests/CTestTestCycle/CTestConfig.cmake | 7 + Tests/CTestTestCycle/simple.cxx | 5 + Tests/CTestTestCycle/test.cmake.in | 19 + Tests/CTestTestDepends/CMakeLists.txt | 12 + Tests/CTestTestDepends/CTestConfig.cmake | 7 + Tests/CTestTestDepends/simple.cxx | 5 + Tests/CTestTestDepends/test.cmake.in | 19 + Tests/CTestTestFailedSubmits/test.cmake.in | 47 + Tests/CTestTestFailure/CMakeLists.txt | 8 + Tests/CTestTestFailure/CTestConfig.cmake | 7 + Tests/CTestTestFailure/badCode.cxx | 4 + Tests/CTestTestFailure/testNoBuild.cmake.in | 21 + Tests/CTestTestFailure/testNoExe.cmake.in | 19 + Tests/CTestTestParallel/CMakeLists.txt | 15 + Tests/CTestTestParallel/CTestConfig.cmake | 7 + Tests/CTestTestParallel/lockFile.c | 20 + Tests/CTestTestParallel/test.cmake.in | 21 + Tests/CTestTestResourceLock/CMakeLists.txt | 13 + Tests/CTestTestResourceLock/CTestConfig.cmake | 7 + Tests/CTestTestResourceLock/lockFile.c | 31 + Tests/CTestTestResourceLock/test.cmake.in | 19 + Tests/CTestTestRunScript/hello.cmake.in | 2 + Tests/CTestTestRunScript/test.cmake.in | 2 + Tests/CTestTestScheduler/CMakeLists.txt | 9 + Tests/CTestTestScheduler/CTestConfig.cmake | 7 + Tests/CTestTestScheduler/sleep.c | 21 + Tests/CTestTestScheduler/test.cmake.in | 28 + Tests/CTestTestStopTime/CMakeLists.txt | 11 + Tests/CTestTestStopTime/CTestConfig.cmake | 7 + Tests/CTestTestStopTime/GetDate.cmake | 233 + Tests/CTestTestStopTime/sleep.c | 21 + Tests/CTestTestStopTime/test.cmake.in | 31 + Tests/CTestTestSubdir/CMakeLists.txt | 7 + Tests/CTestTestSubdir/CTestConfig.cmake | 7 + Tests/CTestTestSubdir/subdir/CMakeLists.txt | 2 + Tests/CTestTestSubdir/subdir/main.c | 4 + Tests/CTestTestSubdir/subdir2/CMakeLists.txt | 2 + Tests/CTestTestSubdir/subdir2/main.c | 4 + Tests/CTestTestSubdir/subdir3/CMakeLists.txt | 2 + Tests/CTestTestSubdir/subdir3/main.c | 4 + Tests/CTestTestSubdir/test.cmake.in | 21 + Tests/CTestTestTimeout/CMakeLists.txt | 28 + Tests/CTestTestTimeout/CTestConfig.cmake | 7 + Tests/CTestTestTimeout/check.cmake | 9 + Tests/CTestTestTimeout/test.cmake.in | 25 + Tests/CTestTestTimeout/timeout.c | 18 + Tests/CTestTestTimeout/timeout.cmake | 6 + Tests/CTestTestUpload/CMakeLists.txt | 4 + Tests/CTestTestUpload/CTestConfig.cmake | 7 + Tests/CTestTestUpload/sleep.c | 21 + Tests/CTestTestUpload/test.cmake.in | 17 + Tests/CTestTestZeroTimeout/CMakeLists.txt | 8 + Tests/CTestTestZeroTimeout/CTestConfig.cmake | 7 + Tests/CTestTestZeroTimeout/sleep.c | 16 + Tests/CTestTestZeroTimeout/test.cmake.in | 20 + Tests/CTestUpdateBZR.cmake.in | 153 + Tests/CTestUpdateCVS.cmake.in | 172 + Tests/CTestUpdateCommon.cmake | 234 + Tests/CTestUpdateGIT.cmake.in | 314 + Tests/CTestUpdateGIT.sh.in | 6 + Tests/CTestUpdateHG.cmake.in | 166 + Tests/CTestUpdateSVN.cmake.in | 150 + Tests/CheckCompilerRelatedVariables/CMakeLists.txt | 90 + Tests/CheckFortran.cmake | 50 + Tests/CommandLineTest/CMakeLists.txt | 79 + Tests/CommandLineTest/CommandLineTest.cxx | 4 + Tests/CommandLineTest/PreLoad.cmake | 1 + Tests/CompileCommandOutput/CMakeLists.txt | 16 + .../compile_command_output.cxx | 9 + Tests/CompileCommandOutput/file with spaces.cxx | 1 + .../CompileCommandOutput/file_with_underscores.cxx | 3 + Tests/CompileCommandOutput/file_with_underscores.h | 1 + Tests/CompileCommandOutput/relative.cxx | 3 + Tests/CompileCommandOutput/relative.h | 11 + Tests/Complex/CMakeLists.txt | 406 + Tests/Complex/Cache/CMakeCache.txt | 34 + Tests/Complex/Executable/A.cxx | 9 + Tests/Complex/Executable/A.h | 4 + Tests/Complex/Executable/A.hh | 2 + Tests/Complex/Executable/A.txt | 1 + Tests/Complex/Executable/CMakeLists.txt | 170 + Tests/Complex/Executable/Included.cmake | 2 + Tests/Complex/Executable/Sub1/NameConflictTest.c | 4 + Tests/Complex/Executable/Sub2/NameConflictTest.c | 4 + Tests/Complex/Executable/Temp/CMakeLists.txt | 8 + Tests/Complex/Executable/cmVersion.h.in | 1 + Tests/Complex/Executable/complex.cxx | 1026 + Tests/Complex/Executable/complex.file.cxx | 8 + Tests/Complex/Executable/complex_nobuild.c | 1 + Tests/Complex/Executable/complex_nobuild.cxx | 1 + Tests/Complex/Executable/notInAllExe.cxx | 10 + Tests/Complex/Executable/testSystemDir.cxx | 3 + Tests/Complex/Executable/testcflags.c | 26 + Tests/Complex/Library/CMakeLists.txt | 140 + Tests/Complex/Library/ExtraSources/file1.cxx | 4 + Tests/Complex/Library/ExtraSources/file1.h | 1 + Tests/Complex/Library/SystemDir/testSystemDir.h | 2 + Tests/Complex/Library/TestLink.c | 8 + Tests/Complex/Library/create_file.cxx | 28 + Tests/Complex/Library/dummy | 0 Tests/Complex/Library/empty.h | 0 Tests/Complex/Library/file2.cxx | 10 + Tests/Complex/Library/file2.h | 1 + Tests/Complex/Library/notInAllLib.cxx | 5 + Tests/Complex/Library/sharedFile.cxx | 6 + Tests/Complex/Library/sharedFile.h | 12 + Tests/Complex/Library/testConly.c | 13 + Tests/Complex/Library/testConly.h | 13 + Tests/Complex/Library/test_preprocess.cmake | 7 + Tests/Complex/VarTests.cmake | 198 + Tests/Complex/cmTestConfigure.h.in | 85 + Tests/Complex/cmTestConfigureEscape.h.in | 1 + Tests/Complex/cmTestGeneratedHeader.h.in | 1 + Tests/ComplexOneConfig/CMakeLists.txt | 376 + Tests/ComplexOneConfig/Cache/CMakeCache.txt | 34 + Tests/ComplexOneConfig/Executable/A.cxx | 9 + Tests/ComplexOneConfig/Executable/A.h | 4 + Tests/ComplexOneConfig/Executable/A.hh | 2 + Tests/ComplexOneConfig/Executable/A.txt | 1 + Tests/ComplexOneConfig/Executable/CMakeLists.txt | 170 + Tests/ComplexOneConfig/Executable/Included.cmake | 2 + .../Executable/Sub1/NameConflictTest.c | 4 + .../Executable/Sub2/NameConflictTest.c | 4 + .../Executable/Temp/CMakeLists.txt | 8 + Tests/ComplexOneConfig/Executable/cmVersion.h.in | 1 + Tests/ComplexOneConfig/Executable/complex.cxx | 1026 + Tests/ComplexOneConfig/Executable/complex.file.cxx | 8 + .../ComplexOneConfig/Executable/complex_nobuild.c | 1 + .../Executable/complex_nobuild.cxx | 1 + Tests/ComplexOneConfig/Executable/notInAllExe.cxx | 10 + .../ComplexOneConfig/Executable/testSystemDir.cxx | 3 + Tests/ComplexOneConfig/Executable/testcflags.c | 26 + Tests/ComplexOneConfig/Library/CMakeLists.txt | 140 + .../Library/ExtraSources/file1.cxx | 4 + .../ComplexOneConfig/Library/ExtraSources/file1.h | 1 + .../Library/SystemDir/testSystemDir.h | 2 + Tests/ComplexOneConfig/Library/TestLink.c | 8 + Tests/ComplexOneConfig/Library/create_file.cxx | 28 + Tests/ComplexOneConfig/Library/dummy | 0 Tests/ComplexOneConfig/Library/empty.h | 0 Tests/ComplexOneConfig/Library/file2.cxx | 10 + Tests/ComplexOneConfig/Library/file2.h | 1 + Tests/ComplexOneConfig/Library/notInAllLib.cxx | 5 + Tests/ComplexOneConfig/Library/sharedFile.cxx | 6 + Tests/ComplexOneConfig/Library/sharedFile.h | 12 + Tests/ComplexOneConfig/Library/testConly.c | 13 + Tests/ComplexOneConfig/Library/testConly.h | 13 + .../ComplexOneConfig/Library/test_preprocess.cmake | 7 + Tests/ComplexOneConfig/VarTests.cmake | 198 + Tests/ComplexOneConfig/cmTestConfigure.h.in | 85 + Tests/ComplexOneConfig/cmTestConfigureEscape.h.in | 1 + Tests/ComplexOneConfig/cmTestGeneratedHeader.h.in | 1 + Tests/Contracts/Trilinos-10-6/CMakeLists.txt | 103 + Tests/Contracts/Trilinos-10-6/Dashboard.cmake.in | 63 + Tests/Contracts/Trilinos-10-6/EnvScript.cmake | 32 + Tests/Contracts/Trilinos-10-6/Patch.cmake | 38 + Tests/Contracts/Trilinos-10-6/RunTest.cmake | 7 + .../Contracts/Trilinos-10-6/ValidateBuild.cmake.in | 39 + Tests/Contracts/cse-snapshot/CMakeLists.txt | 114 + Tests/Contracts/cse-snapshot/Dashboard.cmake.in | 76 + Tests/Contracts/cse-snapshot/RunTest.cmake | 3 + Tests/Contracts/vtk542/CMakeLists.txt | 30 + Tests/Contracts/vtk542/RunTest.cmake | 1 + Tests/CrossCompile/CMakeLists.txt | 13 + Tests/CrossCompile/main.c | 4 + Tests/CustComDepend/CMakeLists.txt | 14 + Tests/CustComDepend/bar.h | 9 + Tests/CustComDepend/foo.cxx | 15 + Tests/CustomCommand/CMakeLists.txt | 438 + Tests/CustomCommand/GeneratedHeader/CMakeLists.txt | 13 + Tests/CustomCommand/GeneratedHeader/generated.h.in | 1 + Tests/CustomCommand/GeneratedHeader/main.cpp | 5 + .../GeneratorInExtraDir/CMakeLists.txt | 8 + Tests/CustomCommand/check_command_line.c.in | 36 + Tests/CustomCommand/check_mark.cmake | 5 + Tests/CustomCommand/config.h.in | 1 + Tests/CustomCommand/doc1.tex | 1 + Tests/CustomCommand/foo.h.in | 1 + Tests/CustomCommand/foo.in | 28 + Tests/CustomCommand/gen_redirect_in.c | 5 + Tests/CustomCommand/generator.cxx | 19 + Tests/CustomCommand/main.cxx | 6 + Tests/CustomCommand/tcat.cxx | 11 + Tests/CustomCommand/wrapped.h | 1 + Tests/CustomCommand/wrapper.cxx | 36 + Tests/CustomCommandWorkingDirectory/CMakeLists.txt | 42 + Tests/CustomCommandWorkingDirectory/customTarget.c | 4 + Tests/CustomCommandWorkingDirectory/working.c.in | 7 + Tests/CxxOnly/CMakeLists.txt | 13 + Tests/CxxOnly/cxxonly.cxx | 25 + Tests/CxxOnly/libcxx1.cxx | 6 + Tests/CxxOnly/libcxx1.h | 5 + Tests/CxxOnly/libcxx2.cxx | 6 + Tests/CxxOnly/libcxx2.h | 15 + Tests/CxxOnly/test.CPP | 1 + Tests/CxxOnly/testCxxModule.cxx | 6 + Tests/Dependency/1/CMakeLists.txt | 3 + Tests/Dependency/1/OneSrc.c | 3 + Tests/Dependency/CMakeLists.txt | 53 + Tests/Dependency/Case1/CMakeLists.txt | 19 + Tests/Dependency/Case1/a.c | 5 + Tests/Dependency/Case1/b.c | 6 + Tests/Dependency/Case1/b2.c | 4 + Tests/Dependency/Case1/c.c | 6 + Tests/Dependency/Case1/c2.c | 6 + Tests/Dependency/Case1/d.c | 7 + Tests/Dependency/Case1/main.c | 10 + Tests/Dependency/Case2/CMakeLists.txt | 22 + Tests/Dependency/Case2/bar1.c | 4 + Tests/Dependency/Case2/bar2.c | 2 + Tests/Dependency/Case2/bar3.c | 2 + Tests/Dependency/Case2/foo1.c | 2 + Tests/Dependency/Case2/foo1b.c | 2 + Tests/Dependency/Case2/foo1c.c | 2 + Tests/Dependency/Case2/foo2.c | 2 + Tests/Dependency/Case2/foo2b.c | 2 + Tests/Dependency/Case2/foo2c.c | 2 + Tests/Dependency/Case2/foo3.c | 2 + Tests/Dependency/Case2/foo3b.c | 2 + Tests/Dependency/Case2/foo3c.c | 1 + Tests/Dependency/Case2/zot.c | 5 + Tests/Dependency/Case3/CMakeLists.txt | 10 + Tests/Dependency/Case3/bar.c | 5 + Tests/Dependency/Case3/foo1.c | 2 + Tests/Dependency/Case3/foo1b.c | 1 + Tests/Dependency/Case3/foo2.c | 2 + Tests/Dependency/Case4/CMakeLists.txt | 19 + Tests/Dependency/Case4/bar.c | 2 + Tests/Dependency/Case4/foo.c | 1 + Tests/Dependency/Eight/CMakeLists.txt | 3 + Tests/Dependency/Eight/EightSrc.c | 6 + Tests/Dependency/Exec/CMakeLists.txt | 7 + Tests/Dependency/Exec/ExecMain.c | 18 + Tests/Dependency/Exec2/CMakeLists.txt | 12 + Tests/Dependency/Exec2/ExecMain.c | 14 + Tests/Dependency/Exec3/CMakeLists.txt | 6 + Tests/Dependency/Exec3/ExecMain.c | 14 + Tests/Dependency/Exec4/CMakeLists.txt | 6 + Tests/Dependency/Exec4/ExecMain.c | 14 + Tests/Dependency/Five/CMakeLists.txt | 3 + Tests/Dependency/Five/FiveSrc.c | 6 + Tests/Dependency/Four/CMakeLists.txt | 6 + Tests/Dependency/Four/FourSrc.c | 15 + Tests/Dependency/NoDepA/CMakeLists.txt | 1 + Tests/Dependency/NoDepA/NoDepASrc.c | 3 + Tests/Dependency/NoDepB/CMakeLists.txt | 3 + Tests/Dependency/NoDepB/NoDepBSrc.c | 6 + Tests/Dependency/NoDepC/CMakeLists.txt | 3 + Tests/Dependency/NoDepC/NoDepCSrc.c | 6 + Tests/Dependency/Seven/CMakeLists.txt | 3 + Tests/Dependency/Seven/SevenSrc.c | 6 + Tests/Dependency/Six/CMakeLists.txt | 12 + Tests/Dependency/Six/SixASrc.c | 8 + Tests/Dependency/Six/SixBSrc.c | 10 + Tests/Dependency/Three/CMakeLists.txt | 3 + Tests/Dependency/Three/ThreeSrc.c | 12 + Tests/Dependency/Two/CMakeLists.txt | 20 + Tests/Dependency/Two/TwoCustomSrc.c | 10 + Tests/Dependency/Two/TwoSrc.c | 10 + Tests/Dependency/Two/two-test.h.in | 1 + Tests/DocTest/CMakeLists.txt | 7 + Tests/DocTest/DocTest.cxx | 33 + Tests/DoubleProject/CMakeLists.txt | 3 + Tests/DoubleProject/silly.c | 4 + Tests/EmptyLibrary/CMakeLists.txt | 4 + Tests/EmptyLibrary/subdir/CMakeLists.txt | 1 + Tests/EmptyLibrary/subdir/test.h | 1 + Tests/EnforceConfig.cmake.in | 26 + Tests/Environment/CMakeLists.txt | 26 + Tests/Environment/main.cxx | 16 + Tests/ExportImport/CMakeLists.txt | 75 + Tests/ExportImport/Export/CMakeLists.txt | 145 + Tests/ExportImport/Export/testExe1.c | 26 + Tests/ExportImport/Export/testExe1lib.c | 1 + Tests/ExportImport/Export/testExe2.c | 12 + Tests/ExportImport/Export/testExe2lib.c | 10 + Tests/ExportImport/Export/testExe2libImp.c | 7 + Tests/ExportImport/Export/testExe3.c | 24 + Tests/ExportImport/Export/testLib1.c | 1 + Tests/ExportImport/Export/testLib2.c | 4 + Tests/ExportImport/Export/testLib3.c | 10 + Tests/ExportImport/Export/testLib3Imp.c | 10 + Tests/ExportImport/Export/testLib3ImpDep.c | 7 + Tests/ExportImport/Export/testLib4.c | 7 + Tests/ExportImport/Export/testLib4lib.c | 4 + Tests/ExportImport/Export/testLib4libdbg.c | 14 + Tests/ExportImport/Export/testLib4libdbg1.c | 1 + Tests/ExportImport/Export/testLib4libopt.c | 14 + Tests/ExportImport/Export/testLib4libopt1.c | 1 + Tests/ExportImport/Export/testLib5.c | 7 + Tests/ExportImport/Export/testLib6.cxx | 6 + Tests/ExportImport/Export/testLib6c.c | 5 + Tests/ExportImport/Export/testLibCycleA1.c | 2 + Tests/ExportImport/Export/testLibCycleA2.c | 2 + Tests/ExportImport/Export/testLibCycleA3.c | 2 + Tests/ExportImport/Export/testLibCycleB1.c | 2 + Tests/ExportImport/Export/testLibCycleB2.c | 2 + Tests/ExportImport/Export/testLibCycleB3.c | 1 + Tests/ExportImport/Import/A/CMakeLists.txt | 150 + Tests/ExportImport/Import/A/imp_lib1.c | 6 + Tests/ExportImport/Import/A/imp_mod1.c | 13 + Tests/ExportImport/Import/A/imp_testExe1.c | 25 + Tests/ExportImport/Import/CMakeLists.txt | 19 + Tests/ExportImport/Import/imp_testTransExe1.c | 6 + Tests/ExportImport/InitialCache.cmake.in | 15 + Tests/ExportImport/main.c | 4 + Tests/ExternalOBJ/CMakeLists.txt | 63 + Tests/ExternalOBJ/Object/CMakeLists.txt | 13 + Tests/ExternalOBJ/Object/external_main.cxx | 4 + Tests/ExternalOBJ/Object/external_object.cxx | 4 + Tests/ExternalOBJ/Sub/CMakeLists.txt | 3 + Tests/ExternalOBJ/executable.cxx | 5 + Tests/ExternalProject/CMakeLists.txt | 585 + Tests/ExternalProject/Example/CMakeLists.txt | 11 + Tests/ExternalProject/Step1.tar | Bin 0 -> 5632 bytes Tests/ExternalProject/Step1.tar.bz2 | Bin 0 -> 904 bytes Tests/ExternalProject/Step1.tgz | Bin 0 -> 791 bytes Tests/ExternalProject/Step1.zip | Bin 0 -> 1074 bytes Tests/ExternalProject/Step1NoDir.tar | Bin 0 -> 5120 bytes Tests/ExternalProject/Step1NoDir.tar.bz2 | Bin 0 -> 852 bytes Tests/ExternalProject/Step1NoDir.tgz | Bin 0 -> 770 bytes Tests/ExternalProject/Step1NoDir.zip | Bin 0 -> 1038 bytes Tests/ExternalProject/Step1Patch.cmake | 25 + Tests/ExternalProject/TryCheckout.cmake | 54 + Tests/ExternalProject/cvsrepo.tgz | Bin 0 -> 1317 bytes Tests/ExternalProject/gitrepo.tgz | Bin 0 -> 1934 bytes Tests/ExternalProject/svnrepo.tgz | Bin 0 -> 3673 bytes Tests/FindModulesExecuteAll/CMakeLists.txt | 30 + Tests/FindModulesExecuteAll/main.c | 4 + Tests/FindPackageModeMakefileTest/CMakeLists.txt | 31 + Tests/FindPackageModeMakefileTest/FindFoo.cmake.in | 9 + Tests/FindPackageModeMakefileTest/Makefile.in | 10 + Tests/FindPackageModeMakefileTest/foo.cpp | 4 + Tests/FindPackageModeMakefileTest/foo.h | 6 + Tests/FindPackageModeMakefileTest/main.cpp | 8 + Tests/FindPackageTest/A/wibble-config.cmake | 1 + Tests/FindPackageTest/B/wibble-config.cmake | 1 + Tests/FindPackageTest/Baz 1.1/BazConfig.cmake | 1 + .../FindPackageTest/Baz 1.1/BazConfigVersion.cmake | 8 + .../FindPackageTest/Baz 1.2/CMake/BazConfig.cmake | 1 + .../Baz 1.2/CMake/BazConfigVersion.cmake | 8 + Tests/FindPackageTest/CMakeLists.txt | 521 + Tests/FindPackageTest/Exporter/CMakeLists.txt | 12 + .../Exporter/CMakeTestExportPackageConfig.cmake.in | 1 + .../CMakeTestExportPackageConfigVersion.cmake.in | 6 + Tests/FindPackageTest/Exporter/dummy.c | 1 + Tests/FindPackageTest/FindLotsOfComponents.cmake | 10 + .../FindPackageHandleStandardArgs.cmake | 1 + Tests/FindPackageTest/FindPackageTest.cxx | 4 + Tests/FindPackageTest/FindRecursiveA.cmake | 1 + Tests/FindPackageTest/FindRecursiveB.cmake | 1 + Tests/FindPackageTest/FindRecursiveC.cmake | 1 + Tests/FindPackageTest/FindVersionTestA.cmake | 18 + Tests/FindPackageTest/FindVersionTestB.cmake | 18 + Tests/FindPackageTest/FindVersionTestC.cmake | 18 + Tests/FindPackageTest/FindVersionTestD.cmake | 18 + Tests/FindPackageTest/RelocatableConfig.cmake.in | 11 + .../CMakeTestSystemPackageConfig.cmake | 1 + .../TApp.app/Contents/Resources/TAppConfig.cmake | 1 + .../Contents/Resources/cmake/tapp-config.cmake | 1 + .../A/Resources/CMake/TFrameworkConfig.cmake | 1 + .../Versions/A/Resources/tframework-config.cmake | 1 + .../cmake/SetFoundFALSEConfig.cmake | 1 + .../FindPackageTest/cmake/SetFoundTRUEConfig.cmake | 1 + Tests/FindPackageTest/include/foo.h | 1 + Tests/FindPackageTest/lib/Bar/BarConfig.cmake | 1 + .../FindPackageTest/lib/Bar/cmake/bar-config.cmake | 1 + Tests/FindPackageTest/lib/Blub/BlubConfig.cmake | 1 + .../lib/RecursiveA/recursivea-config.cmake | 4 + Tests/FindPackageTest/lib/TApp/TAppConfig.cmake | 2 + Tests/FindPackageTest/lib/arch/Bar/BarConfig.cmake | 1 + .../arch/cmake/zot-4.0/zot-config-version.cmake | 7 + .../lib/arch/cmake/zot-4.0/zot-config.cmake | 1 + .../lib/arch/foo-1.2/CMake/FooConfig.cmake | 1 + .../lib/arch/zot-3.1/zot-config-version.cmake | 7 + .../lib/arch/zot-3.1/zot-config.cmake | 1 + .../lib/cmake/zot-3.1/zot-config-version.cmake | 4 + .../lib/cmake/zot-3.1/zot-config.cmake | 2 + .../lib/cmake/zot-4.0/zot-config-version.cmake | 8 + .../lib/cmake/zot-4.0/zot-config.cmake | 1 + .../lib/foo-1.2/CMake/FooConfig.cmake | 1 + Tests/FindPackageTest/lib/foo-1.2/foo-config.cmake | 1 + .../lib/suffix/test/SuffixTestConfig.cmake | 1 + .../lib/suffix/test/SuffixTestConfigVersion.cmake | 7 + Tests/FindPackageTest/lib/zot-1.0/zot-config.cmake | 1 + .../lib/zot-2.0/zot-config-version.cmake | 5 + Tests/FindPackageTest/lib/zot-2.0/zot-config.cmake | 1 + .../lib/zot-3.0/zot-config-version.cmake | 5 + Tests/FindPackageTest/lib/zot-3.0/zot-config.cmake | 1 + .../lib/zot-3.1/zot-config-version.cmake | 8 + Tests/FindPackageTest/lib/zot-3.1/zot-config.cmake | 1 + .../lib/zot/zot-config-version.cmake | 10 + Tests/FindPackageTest/lib/zot/zot-config.cmake | 2 + Tests/ForceInclude/CMakeLists.txt | 10 + Tests/ForceInclude/foo.c | 7 + Tests/ForceInclude/foo1.h | 1 + Tests/ForceInclude/foo2.h | 1 + Tests/Fortran/CMakeLists.txt | 220 + Tests/Fortran/Executable/CMakeLists.txt | 8 + Tests/Fortran/Executable/main.f90 | 6 + Tests/Fortran/External/CMakeLists.txt | 4 + Tests/Fortran/External/a.f90 | 7 + Tests/Fortran/Library/CMakeLists.txt | 11 + Tests/Fortran/Library/a.f90 | 3 + Tests/Fortran/Library/b.f90 | 2 + Tests/Fortran/Library/main.f90 | 3 + Tests/Fortran/foo.f | 9 + Tests/Fortran/hello.f | 6 + Tests/Fortran/in_interface/main.f90 | 3 + Tests/Fortran/in_interface/module.f90 | 12 + Tests/Fortran/include/test_preprocess.h | 5 + Tests/Fortran/mainc.c | 5 + Tests/Fortran/maincxx.c | 6 + Tests/Fortran/myc.c | 12 + Tests/Fortran/mycxx.cxx | 6 + Tests/Fortran/mysub.f | 5 + Tests/Fortran/test_module_implementation.f90 | 6 + Tests/Fortran/test_module_interface.f90 | 9 + Tests/Fortran/test_module_main.f90 | 4 + Tests/Fortran/test_preprocess.F90 | 51 + Tests/Fortran/test_use_in_comment_fixedform.f | 7 + Tests/Fortran/test_use_in_comment_freeform.f90 | 7 + Tests/Fortran/testf.f | 7 + Tests/Fortran/world.f | 6 + Tests/Fortran/world_gnu.def | 2 + Tests/Fortran/world_icl.def | 2 + Tests/FortranC/CMakeLists.txt | 25 + Tests/FortranC/Flags.cmake.in | 28 + Tests/FortranC/test_opt.sh.in | 18 + Tests/FortranOnly/CMakeLists.txt | 45 + Tests/FortranOnly/checksayhello.cmake | 7 + Tests/FortranOnly/checktestf2.cmake | 8 + Tests/FortranOnly/hello.f | 5 + Tests/FortranOnly/testf.f | 6 + Tests/FortranOnly/world.f | 4 + Tests/Framework/CMakeLists.txt | 80 + Tests/Framework/bar.cxx | 6 + Tests/Framework/foo.cxx | 10 + Tests/Framework/foo.h | 1 + Tests/Framework/foo2.h | 1 + Tests/Framework/fooBoth.h | 1 + Tests/Framework/fooDeepPublic.h | 1 + Tests/Framework/fooExtensionlessResource | 1 + Tests/Framework/fooNeither.h | 1 + Tests/Framework/fooPrivate.h | 1 + Tests/Framework/fooPrivateExtensionlessHeader | 1 + Tests/Framework/fooPublic.h | 1 + Tests/Framework/fooPublicExtensionlessHeader | 1 + Tests/Framework/test.lua | 1 + Tests/FunctionTest/CMakeLists.txt | 176 + Tests/FunctionTest/SubDirScope/CMakeLists.txt | 14 + Tests/FunctionTest/Util.cmake | 3 + Tests/FunctionTest/functionTest.c | 7 + Tests/IPO/CMakeLists.txt | 7 + Tests/IncludeDirectories/CMakeLists.txt | 49 + .../TargetIncludeDirectories/CMakeLists.txt | 26 + .../TargetIncludeDirectories/main.cpp | 10 + Tests/IncludeDirectories/main.cpp | 9 + Tests/JCTest/CMakeLists.txt | 9 + Tests/JCTest/TestTime.cxx | 12 + Tests/Java/A.java | 11 + Tests/Java/CMakeLists.txt | 9 + Tests/Java/HelloWorld.java | 11 + Tests/Jump/CMakeLists.txt | 6 + Tests/Jump/Executable/CMakeLists.txt | 6 + Tests/Jump/Executable/jumpExecutable.cxx | 12 + Tests/Jump/Library/CMakeLists.txt | 2 + Tests/Jump/Library/Shared/CMakeLists.txt | 26 + Tests/Jump/Library/Shared/jumpShared.cxx | 7 + Tests/Jump/Library/Static/CMakeLists.txt | 1 + Tests/Jump/Library/Static/jumpStatic.cxx | 1 + Tests/KDE4StableBranchTest/test_kde4.sh.in | 62 + Tests/LibName/CMakeLists.txt | 13 + Tests/LibName/bar.c | 7 + Tests/LibName/foo.c | 11 + Tests/LibName/foobar.c | 10 + Tests/LinkDirectory/CMakeLists.txt | 47 + Tests/LinkDirectory/External/CMakeLists.txt | 14 + Tests/LinkDirectory/External/myexe.c | 3 + Tests/LinkDirectory/mylibA.c | 1 + Tests/LinkDirectory/mylibB.c | 1 + Tests/LinkFlags/CMakeLists.txt | 28 + Tests/LinkFlags/LinkFlags.c | 1 + Tests/LinkFlags/LinkFlagsExe.c | 6 + Tests/LinkFlags/LinkFlagsLib.c | 6 + Tests/LinkLanguage/CMakeLists.txt | 15 + Tests/LinkLanguage/LinkLanguage.c | 6 + Tests/LinkLanguage/foo.cxx | 6 + Tests/LinkLine/CMakeLists.txt | 12 + Tests/LinkLine/Exec.c | 9 + Tests/LinkLine/One.c | 10 + Tests/LinkLine/Two.c | 10 + Tests/LinkLineOrder/CMakeLists.txt | 36 + Tests/LinkLineOrder/Exec1.c | 8 + Tests/LinkLineOrder/Exec2.c | 8 + Tests/LinkLineOrder/NoDepA.c | 7 + Tests/LinkLineOrder/NoDepB.c | 4 + Tests/LinkLineOrder/NoDepC.c | 7 + Tests/LinkLineOrder/NoDepE.c | 11 + Tests/LinkLineOrder/NoDepF.c | 11 + Tests/LinkLineOrder/NoDepX.c | 7 + Tests/LinkLineOrder/NoDepY.c | 4 + Tests/LinkLineOrder/NoDepZ.c | 7 + Tests/LinkLineOrder/One.c | 10 + Tests/LinkLineOrder/Two.c | 8 + Tests/LinkStatic/CMakeLists.txt | 27 + Tests/LinkStatic/LinkStatic.c | 5 + Tests/LoadCommand/CMakeCommands/CMakeLists.txt | 14 + Tests/LoadCommand/CMakeCommands/cmTestCommand.c | 219 + Tests/LoadCommand/CMakeLists.txt | 63 + Tests/LoadCommand/LoadedCommand.cxx.in | 41 + Tests/LoadCommand/LoadedCommand.h.in | 7 + .../CMakeCommands/CMakeLists.txt | 17 + .../CMakeCommands/cmTestCommand.c | 219 + Tests/LoadCommandOneConfig/CMakeLists.txt | 69 + Tests/LoadCommandOneConfig/LoadedCommand.cxx.in | 41 + Tests/LoadCommandOneConfig/LoadedCommand.h.in | 13 + Tests/MFC/CMakeLists.txt | 61 + Tests/MFC/CMakeLists.txt.in | 62 + Tests/MFC/ValidateBuild.cmake.in | 68 + Tests/MFC/mfc1/.gitattributes | 6 + Tests/MFC/mfc1/ChildFrm.cpp | 59 + Tests/MFC/mfc1/ChildFrm.h | 34 + Tests/MFC/mfc1/MainFrm.cpp | 98 + Tests/MFC/mfc1/MainFrm.h | 38 + Tests/MFC/mfc1/ReadMe.txt | 135 + Tests/MFC/mfc1/Resource.h | 20 + Tests/MFC/mfc1/mfc1.cpp | 144 + Tests/MFC/mfc1/mfc1.h | 31 + Tests/MFC/mfc1/mfc1.rc | 393 + Tests/MFC/mfc1/mfc1.reg | 13 + Tests/MFC/mfc1/mfc1.sln | 21 + Tests/MFC/mfc1/mfc1.vcproj | 216 + Tests/MFC/mfc1/mfc1Doc.cpp | 78 + Tests/MFC/mfc1/mfc1Doc.h | 37 + Tests/MFC/mfc1/mfc1View.cpp | 99 + Tests/MFC/mfc1/mfc1View.h | 48 + Tests/MFC/mfc1/res/Toolbar.bmp | Bin 0 -> 1078 bytes Tests/MFC/mfc1/res/mfc1.ico | Bin 0 -> 21630 bytes Tests/MFC/mfc1/res/mfc1.manifest | 22 + Tests/MFC/mfc1/res/mfc1.rc2 | 13 + Tests/MFC/mfc1/res/mfc1Doc.ico | Bin 0 -> 1078 bytes Tests/MFC/mfc1/stdafx.cpp | 5 + Tests/MFC/mfc1/stdafx.h | 56 + Tests/MFC/try_compile/CMakeLists.txt | 15 + Tests/MacroTest/CMakeLists.txt | 91 + Tests/MacroTest/context.cmake | 10 + Tests/MacroTest/macroTest.c | 7 + Tests/MakeClean/CMakeLists.txt | 57 + Tests/MakeClean/ToClean/CMakeLists.txt | 31 + Tests/MakeClean/ToClean/ToCleanFiles.cmake.in | 1 + Tests/MakeClean/ToClean/toclean.cxx | 4 + Tests/MakeClean/check_clean.c.in | 26 + Tests/MathTest/CMakeLists.txt | 29 + Tests/MathTest/MathTestExec.cxx | 26 + Tests/MathTest/MathTestTests.h.in | 1 + Tests/MissingSourceFile/CMakeLists.txt | 3 + Tests/Module/CheckTypeSize/CMakeLists.txt | 18 + Tests/Module/CheckTypeSize/CheckTypeSize.c | 122 + Tests/Module/CheckTypeSize/config.h.in | 39 + Tests/Module/GenerateExportHeader/CMakeLists.txt | 184 + .../GenerateExportHeader/exportheader_test.cpp | 82 + .../lib_shared_and_static/CMakeLists.txt | 23 + .../lib_shared_and_static/libshared_and_static.cpp | 91 + .../lib_shared_and_static/libshared_and_static.h | 54 + .../lib_shared_and_statictest/CMakeLists.txt | 33 + .../GenerateExportHeader/libshared/CMakeLists.txt | 16 + .../GenerateExportHeader/libshared/libshared.cpp | 91 + .../GenerateExportHeader/libshared/libshared.h | 54 + .../libsharedtest/CMakeLists.txt | 44 + .../GenerateExportHeader/libstatic/CMakeLists.txt | 18 + .../GenerateExportHeader/libstatic/libstatic.cpp | 87 + .../GenerateExportHeader/libstatic/libstatic.h | 54 + .../libstatictest/CMakeLists.txt | 18 + .../nodeprecated/CMakeLists.txt | 26 + .../nodeprecated/CMakeLists.txt.in | 15 + .../GenerateExportHeader/nodeprecated/src/main.cpp | 9 + .../nodeprecated/src/someclass.cpp | 9 + .../nodeprecated/src/someclass.h | 10 + .../override_symbol/CMakeLists.txt | 11 + .../GenerateExportHeader/override_symbol/main.cpp | 9 + .../override_symbol/someclass.cpp | 7 + .../override_symbol/someclass.h | 8 + .../GenerateExportHeader/prefix/CMakeLists.txt | 15 + Tests/Module/GenerateExportHeader/prefix/main.cpp | 8 + .../GenerateExportHeader/prefix/useprefixclass.cpp | 7 + .../GenerateExportHeader/prefix/useprefixclass.h | 13 + Tests/ModuleDefinition/CMakeLists.txt | 31 + Tests/ModuleDefinition/example_dll.c | 1 + Tests/ModuleDefinition/example_dll.def | 2 + Tests/ModuleDefinition/example_dll_2.c | 1 + Tests/ModuleDefinition/example_dll_2.def | 2 + Tests/ModuleDefinition/example_dll_gen.c | 1 + Tests/ModuleDefinition/example_dll_gen.def.in | 2 + Tests/ModuleDefinition/example_exe.c | 16 + Tests/ModuleDefinition/example_exe.def | 2 + Tests/ModuleDefinition/example_mod_1.c | 21 + Tests/NewlineArgs/CMakeLists.txt | 16 + Tests/NewlineArgs/cxxonly.cxx | 19 + Tests/NewlineArgs/libcxx1.cxx | 10 + Tests/NewlineArgs/libcxx1.h | 9 + Tests/NewlineArgs/libcxx2.h.in | 6 + Tests/ObjC++/CMakeLists.txt | 6 + Tests/ObjC++/objc++.mm | 22 + Tests/ObjectLibrary/A/CMakeLists.txt | 17 + Tests/ObjectLibrary/A/a.h | 6 + Tests/ObjectLibrary/A/a1.c.in | 2 + Tests/ObjectLibrary/A/a2.c | 2 + Tests/ObjectLibrary/AB.def | 5 + Tests/ObjectLibrary/B/CMakeLists.txt | 15 + Tests/ObjectLibrary/B/b.h | 11 + Tests/ObjectLibrary/B/b1.c | 2 + Tests/ObjectLibrary/B/b1_vs6.c | 1 + Tests/ObjectLibrary/B/b2.c | 2 + Tests/ObjectLibrary/B/b2_vs6.c | 1 + Tests/ObjectLibrary/CMakeLists.txt | 52 + Tests/ObjectLibrary/c.c | 19 + Tests/ObjectLibrary/dummy.c | 1 + Tests/ObjectLibrary/dummy.obj | Bin 0 -> 498 bytes Tests/ObjectLibrary/main.c | 16 + Tests/ObjectLibrary/mainAB.c | 22 + Tests/OutDir/CMakeLists.txt | 35 + Tests/OutDir/OutDir.c | 24 + Tests/OutDir/OutDir.cmake | 28 + Tests/OutOfBinary/CMakeLists.txt | 2 + Tests/OutOfBinary/outlib.c | 2 + Tests/OutOfSource/CMakeLists.txt | 18 + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt | 62 + Tests/OutOfSource/OutOfSourceSubdir/simple.cxx | 39 + Tests/OutOfSource/OutOfSourceSubdir/simple.cxx.in | 1 + Tests/OutOfSource/OutOfSourceSubdir/testlib.cxx | 6 + Tests/OutOfSource/OutOfSourceSubdir/testlib.h | 11 + Tests/OutOfSource/SubDir/CMakeLists.txt | 8 + Tests/OutOfSource/simple.cxx | 1 + Tests/OutOfSource/testdp.h.in | 1 + Tests/PerConfig/CMakeLists.txt | 34 + Tests/PerConfig/pcShared.c | 5 + Tests/PerConfig/pcShared.h | 16 + Tests/PerConfig/pcStatic.c | 4 + Tests/PerConfig/perconfig.c | 8 + Tests/PerConfig/perconfig.cmake | 40 + Tests/Plugin/CMakeLists.txt | 44 + Tests/Plugin/include/example.h | 25 + Tests/Plugin/src/example_exe.cxx | 60 + Tests/Plugin/src/example_exe.h.in | 6 + Tests/Plugin/src/example_mod_1.c | 22 + Tests/Policy0002/A/CMakeLists.txt | 1 + Tests/Policy0002/CMakeLists.txt | 5 + Tests/Policy0002/policy0002.c | 4 + Tests/PolicyScope/Bar.cmake | 8 + Tests/PolicyScope/CMakeLists.txt | 104 + Tests/PolicyScope/FindFoo.cmake | 2 + Tests/PolicyScope/main.c | 4 + Tests/PreOrder/CMakeLists.txt | 6 + Tests/PreOrder/Library/CMakeLists.txt | 2 + Tests/PreOrder/Library/simpleLib.cxx | 3 + Tests/PreOrder/simple.cxx | 6 + Tests/PrecompiledHeader/CMakeLists.txt | 59 + Tests/PrecompiledHeader/foo1.c | 8 + Tests/PrecompiledHeader/foo2.c | 9 + Tests/PrecompiledHeader/foo_precompile.c | 5 + Tests/PrecompiledHeader/include/foo.h | 4 + Tests/PrecompiledHeader/include/foo_precompiled.h | 1 + Tests/Preprocess/CMakeLists.txt | 269 + Tests/Preprocess/file_def.h | 1 + Tests/Preprocess/preprocess.c | 198 + Tests/Preprocess/preprocess.cxx | 225 + Tests/Preprocess/preprocess.h.in | 16 + Tests/Preprocess/preprocess_vs6.cxx | 3 + Tests/Preprocess/target_def.h | 1 + Tests/Properties/CMakeLists.txt | 147 + Tests/Properties/SubDir/properties3.cxx | 9 + Tests/Properties/properties.h.in | 1 + Tests/Properties/properties2.h | 1 + Tests/Qt4Deploy/CMakeLists.txt | 70 + Tests/Qt4Deploy/testdeploy.cpp | 29 + Tests/QtAutomoc/CMakeLists.txt | 23 + Tests/QtAutomoc/abc.cpp | 49 + Tests/QtAutomoc/abc.h | 28 + Tests/QtAutomoc/abc_p.h | 30 + Tests/QtAutomoc/bar.cpp | 28 + Tests/QtAutomoc/blub.cpp | 40 + Tests/QtAutomoc/blub.h | 26 + Tests/QtAutomoc/calwidget.cpp | 424 + Tests/QtAutomoc/calwidget.h | 121 + Tests/QtAutomoc/codeeditor.cpp | 153 + Tests/QtAutomoc/codeeditor.h | 99 + Tests/QtAutomoc/foo.cpp | 39 + Tests/QtAutomoc/foo.h | 28 + Tests/QtAutomoc/main.cpp | 82 + Tests/QtAutomoc/private_slot.cpp | 21 + Tests/QtAutomoc/private_slot.h | 20 + Tests/QtAutomoc/sub/bar.h | 28 + Tests/QtAutomoc/xyz.cpp | 28 + Tests/QtAutomoc/xyz.h | 28 + Tests/QtAutomoc/yaf.cpp | 32 + Tests/QtAutomoc/yaf.h | 25 + Tests/QtAutomoc/yaf_p.h | 30 + Tests/README | 39 + Tests/ReturnTest/CMakeLists.txt | 147 + Tests/ReturnTest/include_return.cmake | 3 + Tests/ReturnTest/returnTest.c | 7 + Tests/ReturnTest/subdir/CMakeLists.txt | 3 + Tests/RunCMake/CMakeLists.txt | 46 + .../ObjectLibrary/BadObjSource1-result.txt | 1 + .../ObjectLibrary/BadObjSource1-stderr.txt | 8 + Tests/RunCMake/ObjectLibrary/BadObjSource1.cmake | 1 + .../ObjectLibrary/BadObjSource2-result.txt | 1 + .../ObjectLibrary/BadObjSource2-stderr.txt | 8 + Tests/RunCMake/ObjectLibrary/BadObjSource2.cmake | 1 + .../ObjectLibrary/BadSourceExpression1-result.txt | 1 + .../ObjectLibrary/BadSourceExpression1-stderr.txt | 6 + .../ObjectLibrary/BadSourceExpression1.cmake | 1 + .../ObjectLibrary/BadSourceExpression2-result.txt | 1 + .../ObjectLibrary/BadSourceExpression2-stderr.txt | 4 + .../ObjectLibrary/BadSourceExpression2.cmake | 1 + .../ObjectLibrary/BadSourceExpression3-result.txt | 1 + .../ObjectLibrary/BadSourceExpression3-stderr.txt | 4 + .../ObjectLibrary/BadSourceExpression3.cmake | 2 + Tests/RunCMake/ObjectLibrary/CMakeLists.txt | 3 + Tests/RunCMake/ObjectLibrary/Export-result.txt | 1 + Tests/RunCMake/ObjectLibrary/Export-stderr.txt | 4 + Tests/RunCMake/ObjectLibrary/Export.cmake | 2 + Tests/RunCMake/ObjectLibrary/ExportLanguages.cmake | 15 + Tests/RunCMake/ObjectLibrary/Import-result.txt | 1 + Tests/RunCMake/ObjectLibrary/Import-stderr.txt | 4 + Tests/RunCMake/ObjectLibrary/Import.cmake | 1 + Tests/RunCMake/ObjectLibrary/Install-result.txt | 1 + Tests/RunCMake/ObjectLibrary/Install-stderr.txt | 4 + Tests/RunCMake/ObjectLibrary/Install.cmake | 2 + Tests/RunCMake/ObjectLibrary/LinkObjLHS-result.txt | 1 + Tests/RunCMake/ObjectLibrary/LinkObjLHS-stderr.txt | 4 + Tests/RunCMake/ObjectLibrary/LinkObjLHS.cmake | 2 + .../RunCMake/ObjectLibrary/LinkObjRHS1-result.txt | 1 + .../RunCMake/ObjectLibrary/LinkObjRHS1-stderr.txt | 6 + Tests/RunCMake/ObjectLibrary/LinkObjRHS1.cmake | 3 + .../RunCMake/ObjectLibrary/LinkObjRHS2-result.txt | 1 + .../RunCMake/ObjectLibrary/LinkObjRHS2-stderr.txt | 6 + Tests/RunCMake/ObjectLibrary/LinkObjRHS2.cmake | 3 + Tests/RunCMake/ObjectLibrary/ObjWithObj-result.txt | 1 + Tests/RunCMake/ObjectLibrary/ObjWithObj-stderr.txt | 4 + Tests/RunCMake/ObjectLibrary/ObjWithObj.cmake | 2 + Tests/RunCMake/ObjectLibrary/PostBuild-result.txt | 1 + Tests/RunCMake/ObjectLibrary/PostBuild-stderr.txt | 5 + Tests/RunCMake/ObjectLibrary/PostBuild.cmake | 4 + Tests/RunCMake/ObjectLibrary/PreBuild-result.txt | 1 + Tests/RunCMake/ObjectLibrary/PreBuild-stderr.txt | 5 + Tests/RunCMake/ObjectLibrary/PreBuild.cmake | 4 + Tests/RunCMake/ObjectLibrary/PreLink-result.txt | 1 + Tests/RunCMake/ObjectLibrary/PreLink-stderr.txt | 5 + Tests/RunCMake/ObjectLibrary/PreLink.cmake | 4 + Tests/RunCMake/ObjectLibrary/RunCMakeTest.cmake | 18 + Tests/RunCMake/ObjectLibrary/a.c | 1 + Tests/RunCMake/ObjectLibrary/a.cxx | 1 + Tests/RunCMake/ObjectLibrary/bad.def | 0 Tests/RunCMake/ObjectLibrary/bad.obj | 0 Tests/RunCMake/RunCMake.cmake | 69 + Tests/RunCMake/build_command/CMakeLists.txt | 59 + Tests/RunCMake/build_command/ErrorsOFF-stderr.txt | 1 + Tests/RunCMake/build_command/ErrorsOFF-stdout.txt | 1 + Tests/RunCMake/build_command/ErrorsOFF.cmake | 1 + Tests/RunCMake/build_command/ErrorsON-result.txt | 1 + Tests/RunCMake/build_command/ErrorsON-stderr.txt | 12 + Tests/RunCMake/build_command/ErrorsON-stdout.txt | 1 + Tests/RunCMake/build_command/ErrorsON.cmake | 1 + Tests/RunCMake/build_command/RunCMakeTest.cmake | 4 + Tests/RunCMake/find_package/CMakeLists.txt | 3 + .../ComponentRequiredAndOptional-result.txt | 1 + .../ComponentRequiredAndOptional-stderr.txt | 8 + .../ComponentRequiredAndOptional.cmake | 1 + .../RunCMake/find_package/MissingConfig-stderr.txt | 19 + Tests/RunCMake/find_package/MissingConfig.cmake | 2 + .../find_package/MissingConfigOneName-stderr.txt | 10 + .../find_package/MissingConfigOneName.cmake | 1 + .../find_package/MissingConfigRequired-result.txt | 1 + .../find_package/MissingConfigRequired-stderr.txt | 13 + .../find_package/MissingConfigRequired.cmake | 2 + .../find_package/MissingConfigVersion-stderr.txt | 13 + .../find_package/MissingConfigVersion.cmake | 1 + .../RunCMake/find_package/MissingModule-stderr.txt | 26 + Tests/RunCMake/find_package/MissingModule.cmake | 2 + .../find_package/MissingModuleRequired-result.txt | 1 + .../find_package/MissingModuleRequired-stderr.txt | 21 + .../find_package/MissingModuleRequired.cmake | 2 + .../RunCMake/find_package/MissingNormal-stderr.txt | 23 + Tests/RunCMake/find_package/MissingNormal.cmake | 2 + .../find_package/MissingNormalRequired-result.txt | 1 + .../find_package/MissingNormalRequired-stderr.txt | 17 + .../find_package/MissingNormalRequired.cmake | 2 + .../find_package/MissingNormalVersion-stderr.txt | 17 + .../find_package/MissingNormalVersion.cmake | 1 + .../MissingNormalWarnNoModuleNew-stderr.txt | 30 + .../MissingNormalWarnNoModuleNew.cmake | 3 + .../MissingNormalWarnNoModuleOld-stderr.txt | 29 + .../MissingNormalWarnNoModuleOld.cmake | 2 + .../find_package/MixedModeOptions-result.txt | 1 + .../find_package/MixedModeOptions-stderr.txt | 14 + Tests/RunCMake/find_package/MixedModeOptions.cmake | 1 + Tests/RunCMake/find_package/RunCMakeTest.cmake | 16 + .../RunCMake/find_package/SetFoundFALSE-stderr.txt | 9 + Tests/RunCMake/find_package/SetFoundFALSE.cmake | 2 + .../find_package/SetFoundFALSEConfig.cmake | 1 + Tests/RuntimePath/CMakeLists.txt | 33 + Tests/RuntimePath/bar1.c | 2 + Tests/RuntimePath/bar2.c | 2 + Tests/RuntimePath/foo1.c | 1 + Tests/RuntimePath/foo2.c | 1 + Tests/RuntimePath/main.c | 5 + Tests/SBCS/CMakeLists.txt | 6 + Tests/SBCS/SBCS.cxx | 22 + Tests/SameName/CMakeLists.txt | 7 + Tests/SameName/Exe1/CMakeLists.txt | 11 + Tests/SameName/Exe1/conly.c | 12 + Tests/SameName/Lib1/CMakeLists.txt | 1 + Tests/SameName/Lib1/libc1.c | 4 + Tests/SameName/Lib1/libc1.h | 1 + Tests/SetLang/CMakeLists.txt | 10 + Tests/SetLang/bar.c | 21 + Tests/SetLang/foo.c | 7 + Tests/Simple/CMakeLists.txt | 17 + Tests/Simple/simple.cxx | 11 + Tests/Simple/simpleCLib.c | 12 + Tests/Simple/simpleLib.cxx | 3 + Tests/Simple/simpleWe.cpp | 17 + Tests/SimpleCOnly/CMakeLists.txt | 17 + Tests/SimpleCOnly/bar.c | 1 + Tests/SimpleCOnly/foo.c | 1 + Tests/SimpleCOnly/main.c | 12 + Tests/SimpleExclude/CMakeLists.txt | 11 + Tests/SimpleExclude/dirC/CMakeLists.txt | 3 + Tests/SimpleExclude/dirC/dirA/CMakeLists.txt | 10 + Tests/SimpleExclude/dirC/dirA/t1.c | 8 + Tests/SimpleExclude/dirC/dirA/t2.c | 7 + Tests/SimpleExclude/dirC/dirA/t3.c | 7 + Tests/SimpleExclude/dirC/dirA/t4.c | 17 + Tests/SimpleExclude/dirC/dirA/t5.c | 7 + Tests/SimpleExclude/dirC/dirB/CMakeLists.txt | 5 + Tests/SimpleExclude/dirC/dirB/t6.c | 8 + Tests/SimpleExclude/dirC/dirB/t7.c | 16 + Tests/SimpleExclude/dirD/CMakeLists.txt | 7 + Tests/SimpleExclude/dirD/t8.c | 7 + Tests/SimpleExclude/dirD/t9.c | 24 + Tests/SimpleExclude/run.cmake.in | 13 + Tests/SimpleInstall/CMakeLists.txt | 398 + Tests/SimpleInstall/InstallScript1.cmake | 5 + Tests/SimpleInstall/InstallScript2.cmake | 14 + Tests/SimpleInstall/InstallScript3.cmake | 12 + Tests/SimpleInstall/InstallScript4.cmake | 22 + Tests/SimpleInstall/PackageScript.cmake | 10 + Tests/SimpleInstall/PostInstall.cmake | 6 + Tests/SimpleInstall/PreInstall.cmake | 2 + Tests/SimpleInstall/TestSubDir/CMakeLists.txt | 3 + Tests/SimpleInstall/TestSubDir/TSD.cxx | 10 + Tests/SimpleInstall/TestSubDir/TSD.h | 1 + Tests/SimpleInstall/TestSubDir/TSD_utils.cxx | 10 + Tests/SimpleInstall/foo.c | 6 + Tests/SimpleInstall/foo.h | 11 + Tests/SimpleInstall/inst.cxx | 37 + Tests/SimpleInstall/inst2.cxx | 2 + Tests/SimpleInstall/lib1.cxx | 6 + Tests/SimpleInstall/lib1.h | 1 + Tests/SimpleInstall/lib2.cxx | 6 + Tests/SimpleInstall/lib2.h | 11 + Tests/SimpleInstall/lib3.cxx | 6 + Tests/SimpleInstall/lib3.h | 11 + Tests/SimpleInstall/lib4.cxx | 7 + Tests/SimpleInstall/lib4.h | 12 + Tests/SimpleInstall/scripts/.gitattributes | 1 + Tests/SimpleInstall/scripts/CMakeLists.txt | 1 + Tests/SimpleInstall/scripts/sample_script | 2 + Tests/SimpleInstall/scripts/sample_script.bat | 1 + Tests/SimpleInstallS2/CMakeLists.txt | 398 + Tests/SimpleInstallS2/InstallScript1.cmake | 5 + Tests/SimpleInstallS2/InstallScript2.cmake | 14 + Tests/SimpleInstallS2/InstallScript3.cmake | 12 + Tests/SimpleInstallS2/InstallScript4.cmake | 22 + Tests/SimpleInstallS2/PackageScript.cmake | 10 + Tests/SimpleInstallS2/PostInstall.cmake | 6 + Tests/SimpleInstallS2/PreInstall.cmake | 2 + Tests/SimpleInstallS2/TestSubDir/CMakeLists.txt | 3 + Tests/SimpleInstallS2/TestSubDir/TSD.cxx | 10 + Tests/SimpleInstallS2/TestSubDir/TSD.h | 1 + Tests/SimpleInstallS2/TestSubDir/TSD_utils.cxx | 10 + Tests/SimpleInstallS2/foo.c | 6 + Tests/SimpleInstallS2/foo.h | 11 + Tests/SimpleInstallS2/inst.cxx | 37 + Tests/SimpleInstallS2/inst2.cxx | 2 + Tests/SimpleInstallS2/lib1.cxx | 6 + Tests/SimpleInstallS2/lib1.h | 1 + Tests/SimpleInstallS2/lib2.cxx | 6 + Tests/SimpleInstallS2/lib2.h | 11 + Tests/SimpleInstallS2/lib3.cxx | 6 + Tests/SimpleInstallS2/lib3.h | 11 + Tests/SimpleInstallS2/lib4.cxx | 7 + Tests/SimpleInstallS2/lib4.h | 12 + Tests/SimpleInstallS2/scripts/.gitattributes | 1 + Tests/SimpleInstallS2/scripts/CMakeLists.txt | 1 + Tests/SimpleInstallS2/scripts/sample_script | 2 + Tests/SimpleInstallS2/scripts/sample_script.bat | 1 + Tests/SourceGroups/CMakeLists.txt | 35 + Tests/SourceGroups/README.txt | 1 + Tests/SourceGroups/bar.c | 4 + Tests/SourceGroups/baz.c | 4 + Tests/SourceGroups/foo.c | 4 + Tests/SourceGroups/main.c | 13 + Tests/SourceGroups/sub1/foo.c | 4 + Tests/SourceGroups/sub1/foobar.c | 4 + Tests/StringFileTest/CMakeLists.txt | 282 + Tests/StringFileTest/InputFile.h.in | 38 + Tests/StringFileTest/StringFile.cxx | 31 + Tests/StringFileTest/main.ihx | 21 + Tests/StringFileTest/main.srec | 21 + Tests/StringFileTest/test.bin | Bin 0 -> 5 bytes Tests/SubDir/AnotherSubdir/pair+int.int.c | 6 + Tests/SubDir/AnotherSubdir/pair_int.int.c | 6 + Tests/SubDir/AnotherSubdir/secondone.c | 6 + Tests/SubDir/AnotherSubdir/testfromsubdir.c | 14 + Tests/SubDir/CMakeLists.txt | 46 + Tests/SubDir/Examples/CMakeLists.txt | 3 + Tests/SubDir/Examples/example1/CMakeLists.txt | 7 + Tests/SubDir/Examples/example1/example1.cxx | 7 + Tests/SubDir/Examples/example2/CMakeLists.txt | 2 + Tests/SubDir/Examples/example2/example2.cxx | 7 + Tests/SubDir/Executable/CMakeLists.txt | 1 + Tests/SubDir/Executable/test.cxx | 49 + Tests/SubDir/ThirdSubDir/pair+int.int1.c | 6 + Tests/SubDir/ThirdSubDir/pair_int.int1.c | 6 + Tests/SubDir/ThirdSubDir/pair_p_int.int1.c | 6 + Tests/SubDir/ThirdSubDir/testfromauxsubdir.c | 16 + Tests/SubDir/ThirdSubDir/thirdone.c | 6 + Tests/SubDir/vcl_algorithm+vcl_pair+double.foo.c | 6 + Tests/SubDir/vcl_algorithm_vcl_pair_double.foo.c | 6 + Tests/SubDirSpaces/Another Subdir/pair+int.int.c | 6 + Tests/SubDirSpaces/Another Subdir/pair_int.int.c | 6 + Tests/SubDirSpaces/Another Subdir/secondone.c | 6 + Tests/SubDirSpaces/Another Subdir/testfromsubdir.c | 14 + Tests/SubDirSpaces/CMakeLists.txt | 77 + .../SubDirSpaces/Executable Sources/CMakeLists.txt | 1 + Tests/SubDirSpaces/Executable Sources/test.cxx | 49 + Tests/SubDirSpaces/Executable/CMakeLists.txt | 1 + Tests/SubDirSpaces/Executable/test.cxx | 49 + Tests/SubDirSpaces/Some Examples/CMakeLists.txt | 3 + .../Some Examples/example1/CMakeLists.txt | 7 + .../Some Examples/example1/example1.cxx | 7 + .../Some Examples/example2/CMakeLists.txt | 2 + .../Some Examples/example2/example2.cxx | 7 + .../SubDirSpaces/Some(x86) Sources/CMakeLists.txt | 1 + Tests/SubDirSpaces/Some(x86) Sources/test.c | 3 + Tests/SubDirSpaces/ThirdSubDir/pair+int.int1.c | 6 + Tests/SubDirSpaces/ThirdSubDir/pair_int.int1.c | 6 + Tests/SubDirSpaces/ThirdSubDir/pair_p_int.int1.c | 6 + Tests/SubDirSpaces/ThirdSubDir/testfromauxsubdir.c | 21 + Tests/SubDirSpaces/ThirdSubDir/thirdone.c | 6 + .../vcl_algorithm+vcl_pair+double.foo.c | 6 + .../vcl_algorithm_vcl_pair_double.foo.c | 6 + Tests/SubProject/CMakeLists.txt | 6 + Tests/SubProject/bar.cxx | 4 + Tests/SubProject/car.cxx | 6 + Tests/SubProject/foo/CMakeLists.txt | 3 + Tests/SubProject/foo/foo.cxx | 15 + Tests/SwigTest/CMakeLists.txt | 50 + Tests/SwigTest/example.cxx | 28 + Tests/SwigTest/example.h | 39 + Tests/SwigTest/example.i | 10 + Tests/SwigTest/runme.php4 | 58 + Tests/SwigTest/runme.pike | 53 + Tests/SwigTest/runme.pl | 57 + Tests/SwigTest/runme.py | 51 + Tests/SwigTest/runme.rb | 49 + Tests/SwigTest/runme.tcl | 50 + Tests/SwigTest/runme2.tcl | 70 + Tests/SystemInformation/CMakeLists.txt | 61 + Tests/SystemInformation/DumpInformation.cxx | 80 + Tests/SystemInformation/DumpInformation.h.in | 6 + Tests/SystemInformation/SystemInformation.in | 96 + Tests/TarTest/CMakeLists.txt | 69 + Tests/TarTest/TestTarExec.cxx | 5 + Tests/TargetName/CMakeLists.txt | 5 + Tests/TargetName/executables/CMakeLists.txt | 1 + Tests/TargetName/executables/hello_world.c | 5 + Tests/TargetName/scripts/.gitattributes | 1 + Tests/TargetName/scripts/CMakeLists.txt | 13 + Tests/TargetName/scripts/hello_world | 2 + Tests/TestDriver/CMakeLists.txt | 15 + Tests/TestDriver/subdir/test3.cxx | 8 + Tests/TestDriver/test1.cxx | 25 + Tests/TestDriver/test2.cxx | 8 + Tests/TestDriver/testArgs.h | 20 + Tests/TestDriver/testExtraStuff.cxx | 4 + Tests/TestDriver/testExtraStuff2.cxx | 4 + Tests/TestDriver/testExtraStuff3.cxx | 4 + Tests/TestInstall.sh.in | 63 + Tests/Testing/CMakeLists.txt | 59 + Tests/Testing/DartConfig.cmake | 24 + Tests/Testing/Sub/Sub2/CMakeLists.txt | 17 + Tests/Testing/Sub/Sub2/testing2.cxx | 4 + Tests/Testing/testing.cxx | 4 + Tests/TestsWorkingDirectory/CMakeLists.txt | 42 + Tests/TestsWorkingDirectory/main.c | 64 + Tests/TestsWorkingDirectory/subdir/CMakeLists.txt | 31 + Tests/TryCompile/CMakeLists.txt | 247 + Tests/TryCompile/Inner/CMakeLists.txt | 15 + Tests/TryCompile/Inner/innerexe.c | 2 + Tests/TryCompile/Inner/innerlib.c | 1 + Tests/TryCompile/exit_success.c | 7 + Tests/TryCompile/exit_with_error.c | 7 + Tests/TryCompile/expect_arg.c | 22 + Tests/TryCompile/fail.c | 1 + Tests/TryCompile/pass.c | 6 + Tests/Tutorial/Step1/CMakeLists.txt | 20 + Tests/Tutorial/Step1/TutorialConfig.h.in | 4 + Tests/Tutorial/Step1/tutorial.cxx | 23 + Tests/Tutorial/Step2/CMakeLists.txt | 31 + Tests/Tutorial/Step2/MathFunctions/CMakeLists.txt | 1 + Tests/Tutorial/Step2/MathFunctions/MathFunctions.h | 1 + Tests/Tutorial/Step2/MathFunctions/mysqrt.cxx | 29 + Tests/Tutorial/Step2/TutorialConfig.h.in | 5 + Tests/Tutorial/Step2/tutorial.cxx | 34 + Tests/Tutorial/Step3/CMakeLists.txt | 68 + Tests/Tutorial/Step3/MathFunctions/CMakeLists.txt | 4 + Tests/Tutorial/Step3/MathFunctions/MathFunctions.h | 1 + Tests/Tutorial/Step3/MathFunctions/mysqrt.cxx | 29 + Tests/Tutorial/Step3/TutorialConfig.h.in | 5 + Tests/Tutorial/Step3/tutorial.cxx | 34 + Tests/Tutorial/Step4/CMakeLists.txt | 68 + Tests/Tutorial/Step4/MathFunctions/CMakeLists.txt | 4 + Tests/Tutorial/Step4/MathFunctions/MathFunctions.h | 1 + Tests/Tutorial/Step4/MathFunctions/mysqrt.cxx | 39 + Tests/Tutorial/Step4/TutorialConfig.h.in | 9 + Tests/Tutorial/Step4/tutorial.cxx | 34 + Tests/Tutorial/Step5/CMakeLists.txt | 72 + Tests/Tutorial/Step5/MathFunctions/CMakeLists.txt | 17 + Tests/Tutorial/Step5/MathFunctions/MakeTable.cxx | 35 + Tests/Tutorial/Step5/MathFunctions/MathFunctions.h | 1 + Tests/Tutorial/Step5/MathFunctions/mysqrt.cxx | 44 + Tests/Tutorial/Step5/TutorialConfig.h.in | 9 + Tests/Tutorial/Step5/tutorial.cxx | 34 + Tests/Tutorial/Step6/CMakeLists.txt | 78 + Tests/Tutorial/Step6/License.txt | 2 + Tests/Tutorial/Step6/MathFunctions/CMakeLists.txt | 26 + Tests/Tutorial/Step6/MathFunctions/MakeTable.cxx | 35 + Tests/Tutorial/Step6/MathFunctions/MathFunctions.h | 1 + Tests/Tutorial/Step6/MathFunctions/mysqrt.cxx | 44 + Tests/Tutorial/Step6/TutorialConfig.h.in | 9 + Tests/Tutorial/Step6/tutorial.cxx | 34 + Tests/Tutorial/Step7/CMakeLists.txt | 82 + Tests/Tutorial/Step7/CTestConfig.cmake | 1 + Tests/Tutorial/Step7/License.txt | 2 + Tests/Tutorial/Step7/MathFunctions/CMakeLists.txt | 26 + Tests/Tutorial/Step7/MathFunctions/MakeTable.cxx | 35 + Tests/Tutorial/Step7/MathFunctions/MathFunctions.h | 1 + Tests/Tutorial/Step7/MathFunctions/mysqrt.cxx | 44 + Tests/Tutorial/Step7/TutorialConfig.h.in | 9 + Tests/Tutorial/Step7/build1.cmake | 5 + Tests/Tutorial/Step7/build2.cmake | 9 + Tests/Tutorial/Step7/tutorial.cxx | 34 + Tests/Unset/CMakeLists.txt | 55 + Tests/Unset/unset.c | 4 + Tests/VSExternalInclude/CMakeLists.txt | 60 + Tests/VSExternalInclude/Lib1/CMakeLists.txt | 5 + Tests/VSExternalInclude/Lib1/lib1.cpp | 7 + Tests/VSExternalInclude/Lib1/lib1.h | 8 + Tests/VSExternalInclude/Lib2/CMakeLists.txt | 7 + Tests/VSExternalInclude/Lib2/lib2.cpp | 9 + Tests/VSExternalInclude/Lib2/lib2.h | 10 + Tests/VSExternalInclude/main.cpp | 9 + Tests/VSGNUFortran/CMakeLists.txt | 26 + Tests/VSGNUFortran/c_code/CMakeLists.txt | 2 + Tests/VSGNUFortran/c_code/main.c | 7 + Tests/VSGNUFortran/runtest.cmake.in | 23 + Tests/VSGNUFortran/subdir/CMakeLists.txt | 16 + Tests/VSGNUFortran/subdir/fortran/CMakeLists.txt | 46 + Tests/VSGNUFortran/subdir/fortran/hello.f | 7 + Tests/VSGNUFortran/subdir/fortran/world.f | 6 + Tests/VSMidl/CMakeLists.txt | 81 + Tests/VSMidl/src/CMakeLists.txt | 12 + Tests/VSMidl/src/main.cpp | 17 + Tests/VSMidl/src/test.idl | 30 + Tests/VSResource/CMakeLists.txt | 40 + Tests/VSResource/main.cpp | 80 + Tests/VSResource/test.rc | 17 + Tests/VSResource/test.txt | 1 + Tests/VariableUnusedViaSet/CMakeLists.txt | 4 + Tests/VariableUnusedViaUnset/CMakeLists.txt | 8 + Tests/VariableUsage/CMakeLists.txt | 1 + Tests/Wrapping/CMakeLists.txt | 107 + Tests/Wrapping/Wrap.c | 23 + Tests/Wrapping/dummy | 0 Tests/Wrapping/fakefluid.cxx | 17 + Tests/Wrapping/fltk1.fl | 0 Tests/Wrapping/foo.ui.in | 44 + Tests/Wrapping/hints | 0 Tests/Wrapping/itkWrapperConfig.cxx | 0 Tests/Wrapping/qtnoqtmain.cxx | 5 + Tests/Wrapping/qtwrapping.ui | 44 + Tests/Wrapping/qtwrappingmain.cxx | 29 + Tests/Wrapping/vtkExcluded.cxx | 0 Tests/Wrapping/vtkExcluded.h | 2 + Tests/Wrapping/vtkIncluded.cxx | 0 Tests/Wrapping/vtkIncluded.h | 2 + Tests/Wrapping/vtkTestMoc.h | 8 + Tests/Wrapping/wrapping.cxx | 4 + Tests/X11/CMakeLists.txt | 40 + Tests/X11/HelloWorldX11.cxx | 145 + Tests/X11/X11.c | 21 + Tests/bootstrap.bat.in | 2 + Tests/iOSNavApp/CMakeLists.txt | 38 + Tests/iOSNavApp/Classes/NavApp3AppDelegate.h | 20 + Tests/iOSNavApp/Classes/NavApp3AppDelegate.m | 88 + Tests/iOSNavApp/Classes/RootViewController.h | 14 + Tests/iOSNavApp/Classes/RootViewController.m | 168 + Tests/iOSNavApp/Info.plist.in | 32 + Tests/iOSNavApp/MainWindow.xib | 542 + Tests/iOSNavApp/NavApp3_Prefix.pch | 14 + Tests/iOSNavApp/RootViewController.xib | 384 + Tests/iOSNavApp/TotalFunction.c | 14 + Tests/iOSNavApp/TotalFunction.h | 14 + Tests/iOSNavApp/main.m | 17 + Tests/test_clean.cmake.in | 2 + Utilities/.NoDartCoverage | 1 + Utilities/CMakeLists.txt | 158 + Utilities/Doxygen/CMakeLists.txt | 39 + Utilities/Doxygen/authors.txt | 17 + Utilities/Doxygen/doc_makeall.sh.in | 248 + Utilities/Doxygen/doxyfile.in | 79 + Utilities/Git/commit-msg | 23 + Utilities/Git/pre-commit | 47 + Utilities/Git/prepare-commit-msg | 15 + Utilities/KWIML/ABI.h.in | 474 + Utilities/KWIML/CMakeLists.txt | 79 + Utilities/KWIML/Copyright.txt | 30 + Utilities/KWIML/INT.h.in | 736 + Utilities/KWIML/README.txt | 29 + Utilities/KWIML/test/CMakeLists.txt | 70 + Utilities/KWIML/test/test.c | 39 + Utilities/KWIML/test/test.cxx | 12 + Utilities/KWIML/test/test.h | 37 + Utilities/KWIML/test/test_ABI_C.c | 22 + Utilities/KWIML/test/test_ABI_CXX.cxx | 22 + Utilities/KWIML/test/test_ABI_endian.h.in | 47 + Utilities/KWIML/test/test_INT_C.c | 22 + Utilities/KWIML/test/test_INT_CXX.cxx | 22 + Utilities/KWIML/test/test_INT_format.h.in | 200 + Utilities/KWIML/test/test_include_C.c | 22 + Utilities/KWIML/test/test_include_CXX.cxx | 28 + Utilities/KWStyle/CMake.kws.xml.in | 11 + Utilities/KWStyle/CMakeFiles.txt.in | 15 + Utilities/KWStyle/CMakeLists.txt | 78 + Utilities/KWStyle/CMakeMoreChecks.kws.xml.in | 30 + Utilities/KWStyle/CMakeOverwrite.txt | 0 Utilities/KWStyle/Headers/CMakeHeader.h | 11 + Utilities/Release/CMakeInstall.bmp | Bin 0 -> 25820 bytes Utilities/Release/CMakeLogo.ico | Bin 0 -> 24542 bytes Utilities/Release/Cygwin/CMakeLists.txt | 25 + Utilities/Release/Cygwin/README.cygwin.in | 42 + Utilities/Release/Cygwin/cygwin-package.sh.in | 90 + Utilities/Release/Cygwin/cygwin-patch.diff.in | 0 Utilities/Release/Cygwin/cygwin-setup.hint.in | 5 + Utilities/Release/README | 21 + Utilities/Release/create-cmake-release.cmake | 42 + Utilities/Release/dash2win64_cygwin.cmake | 19 + Utilities/Release/dash2win64_release.cmake | 19 + Utilities/Release/dashmacmini2_release.cmake | 18 + Utilities/Release/dashmacmini5_release.cmake | 20 + Utilities/Release/ferrari_sgi64_release.cmake | 16 + Utilities/Release/ferrari_sgi_release.cmake | 11 + Utilities/Release/hythloth_release.cmake | 10 + Utilities/Release/magrathea_release.cmake | 16 + Utilities/Release/release_cmake.cmake | 136 + Utilities/Release/release_cmake.sh.in | 154 + Utilities/Release/upload_release.cmake | 30 + Utilities/Release/v20n250_aix_release.cmake | 21 + Utilities/cmThirdParty.h.in | 23 + Utilities/cm_bzlib.h | 23 + Utilities/cm_curl.h | 23 + Utilities/cm_expat.h | 23 + Utilities/cm_libarchive.h | 25 + Utilities/cm_xmlrpc.h | 22 + Utilities/cm_zlib.h | 23 + Utilities/cmake.m4 | 53 + Utilities/cmbzip2/CHANGES | 319 + Utilities/cmbzip2/CMakeLists.txt | 4 + Utilities/cmbzip2/LICENSE | 42 + Utilities/cmbzip2/Makefile-libbz2_so | 59 + Utilities/cmbzip2/README | 210 + Utilities/cmbzip2/README.COMPILATION.PROBLEMS | 58 + Utilities/cmbzip2/README.XML.STUFF | 45 + Utilities/cmbzip2/blocksort.c | 1094 + Utilities/cmbzip2/bz-common.xsl | 39 + Utilities/cmbzip2/bz-fo.xsl | 276 + Utilities/cmbzip2/bz-html.xsl | 20 + Utilities/cmbzip2/bzdiff | 76 + Utilities/cmbzip2/bzdiff.1 | 47 + Utilities/cmbzip2/bzgrep | 75 + Utilities/cmbzip2/bzgrep.1 | 56 + Utilities/cmbzip2/bzip.css | 74 + Utilities/cmbzip2/bzip2.1 | 454 + Utilities/cmbzip2/bzip2.1.preformatted | 399 + Utilities/cmbzip2/bzip2.c | 2034 + Utilities/cmbzip2/bzip2.txt | 391 + Utilities/cmbzip2/bzip2recover.c | 514 + Utilities/cmbzip2/bzlib.c | 1575 + Utilities/cmbzip2/bzlib.h | 282 + Utilities/cmbzip2/bzlib_private.h | 526 + Utilities/cmbzip2/bzmore | 61 + Utilities/cmbzip2/bzmore.1 | 152 + Utilities/cmbzip2/compress.c | 672 + Utilities/cmbzip2/crctable.c | 104 + Utilities/cmbzip2/decompress.c | 626 + Utilities/cmbzip2/dlltest.c | 175 + Utilities/cmbzip2/dlltest.dsp | 93 + Utilities/cmbzip2/entities.xml | 9 + Utilities/cmbzip2/format.pl | 68 + Utilities/cmbzip2/huffman.c | 205 + Utilities/cmbzip2/libbz2.def | 27 + Utilities/cmbzip2/libbz2.dsp | 130 + Utilities/cmbzip2/libbz2.lib | Bin 0 -> 60774 bytes Utilities/cmbzip2/makefile.msc | 63 + Utilities/cmbzip2/manual.html | 2540 + Utilities/cmbzip2/manual.pdf | Bin 0 -> 289422 bytes Utilities/cmbzip2/manual.ps | 82900 ++++++++++++++++++ Utilities/cmbzip2/manual.xml | 2964 + Utilities/cmbzip2/mk251.c | 31 + Utilities/cmbzip2/randtable.c | 84 + Utilities/cmbzip2/sample1.bz2 | Bin 0 -> 32558 bytes Utilities/cmbzip2/sample1.rb2 | Bin 0 -> 32558 bytes Utilities/cmbzip2/sample1.ref | Bin 0 -> 98869 bytes Utilities/cmbzip2/sample1.tst | Bin 0 -> 98869 bytes Utilities/cmbzip2/sample2.bz2 | Bin 0 -> 74143 bytes Utilities/cmbzip2/sample2.rb2 | Bin 0 -> 74143 bytes Utilities/cmbzip2/sample2.ref | Bin 0 -> 212610 bytes Utilities/cmbzip2/sample2.tst | Bin 0 -> 212610 bytes Utilities/cmbzip2/sample3.bz2 | Bin 0 -> 238 bytes Utilities/cmbzip2/sample3.rb2 | Bin 0 -> 237 bytes Utilities/cmbzip2/sample3.ref | 30007 +++++++ Utilities/cmbzip2/sample3.tst | 30007 +++++++ Utilities/cmbzip2/spewG.c | 54 + Utilities/cmbzip2/unzcrash.c | 141 + Utilities/cmbzip2/words0 | 9 + Utilities/cmbzip2/words1 | 4 + Utilities/cmbzip2/words2 | 5 + Utilities/cmbzip2/words3 | 30 + Utilities/cmbzip2/xmlproc.sh | 114 + Utilities/cmcompress/CMakeLists.txt | 5 + Utilities/cmcompress/Copyright.txt | 34 + Utilities/cmcompress/cmcompress.c | 551 + Utilities/cmcompress/cmcompress.h | 195 + Utilities/cmcompress/compress.c.original | 1308 + Utilities/cmcurl/CMake/CMakeConfigurableFile.in | 2 + .../cmcurl/CMake/CurlCheckCSourceCompiles.cmake | 75 + Utilities/cmcurl/CMake/CurlCheckCSourceRuns.cmake | 83 + Utilities/cmcurl/CMake/CurlTests.c | 526 + Utilities/cmcurl/CMake/OtherTests.cmake | 242 + Utilities/cmcurl/CMakeLists.txt | 722 + Utilities/cmcurl/COPYING | 21 + Utilities/cmcurl/Platforms/WindowsCache.cmake | 121 + Utilities/cmcurl/Platforms/config-aix.h | 486 + Utilities/cmcurl/Testing/CMakeLists.txt | 19 + Utilities/cmcurl/Testing/curlgtk.c | 95 + Utilities/cmcurl/Testing/curltest.c | 159 + Utilities/cmcurl/Testing/ftpget.c | 84 + Utilities/cmcurl/Testing/ftpgetresp.c | 64 + Utilities/cmcurl/Testing/ftpupload.c | 93 + Utilities/cmcurl/Testing/getinmemory.c | 83 + Utilities/cmcurl/Testing/http-post.c | 35 + Utilities/cmcurl/Testing/httpput.c | 100 + Utilities/cmcurl/Testing/multithread.c | 70 + Utilities/cmcurl/Testing/persistant.c | 53 + Utilities/cmcurl/Testing/postit2.c | 92 + Utilities/cmcurl/Testing/sepheaders.c | 78 + Utilities/cmcurl/Testing/simple.c | 28 + Utilities/cmcurl/Testing/simplessl.c | 118 + Utilities/cmcurl/Testing/testconfig.h.in | 7 + Utilities/cmcurl/Testing/win32sockets.c | 49 + Utilities/cmcurl/amigaos.c | 74 + Utilities/cmcurl/amigaos.h | 58 + Utilities/cmcurl/arpa_telnet.h | 101 + Utilities/cmcurl/base64.c | 366 + Utilities/cmcurl/base64.h | 28 + Utilities/cmcurl/ca-bundle.h | 1 + Utilities/cmcurl/config.h.in | 726 + Utilities/cmcurl/connect.c | 905 + Utilities/cmcurl/connect.h | 46 + Utilities/cmcurl/content_encoding.c | 424 + Utilities/cmcurl/content_encoding.h | 41 + Utilities/cmcurl/cookie.c | 1017 + Utilities/cmcurl/cookie.h | 107 + Utilities/cmcurl/curl/curl.h | 1644 + Utilities/cmcurl/curl/curlver.h | 56 + Utilities/cmcurl/curl/easy.h | 81 + Utilities/cmcurl/curl/mprintf.h | 80 + Utilities/cmcurl/curl/multi.h | 327 + Utilities/cmcurl/curl/stdcheaders.h | 34 + Utilities/cmcurl/curl/types.h | 1 + Utilities/cmcurl/curlx.h | 107 + Utilities/cmcurl/dict.c | 280 + Utilities/cmcurl/dict.h | 30 + Utilities/cmcurl/easy.c | 895 + Utilities/cmcurl/easyif.h | 40 + Utilities/cmcurl/escape.c | 181 + Utilities/cmcurl/escape.h | 30 + Utilities/cmcurl/file.c | 407 + Utilities/cmcurl/file.h | 31 + Utilities/cmcurl/formdata.c | 1694 + Utilities/cmcurl/formdata.h | 97 + Utilities/cmcurl/ftp.c | 3865 + Utilities/cmcurl/ftp.h | 43 + Utilities/cmcurl/getenv.c | 69 + Utilities/cmcurl/getinfo.c | 234 + Utilities/cmcurl/getinfo.h | 28 + Utilities/cmcurl/gtls.c | 640 + Utilities/cmcurl/gtls.h | 46 + Utilities/cmcurl/hash.c | 315 + Utilities/cmcurl/hash.h | 61 + Utilities/cmcurl/hostares.c | 307 + Utilities/cmcurl/hostasyn.c | 174 + Utilities/cmcurl/hostip.c | 636 + Utilities/cmcurl/hostip.h | 271 + Utilities/cmcurl/hostip4.c | 389 + Utilities/cmcurl/hostip6.c | 306 + Utilities/cmcurl/hostsyn.c | 138 + Utilities/cmcurl/hostthre.c | 840 + Utilities/cmcurl/http.c | 2422 + Utilities/cmcurl/http.h | 85 + Utilities/cmcurl/http_chunks.c | 360 + Utilities/cmcurl/http_chunks.h | 104 + Utilities/cmcurl/http_digest.c | 504 + Utilities/cmcurl/http_digest.h | 58 + Utilities/cmcurl/http_negotiate.c | 327 + Utilities/cmcurl/http_negotiate.h | 39 + Utilities/cmcurl/http_ntlm.c | 1111 + Utilities/cmcurl/http_ntlm.h | 146 + Utilities/cmcurl/if2ip.c | 134 + Utilities/cmcurl/if2ip.h | 67 + Utilities/cmcurl/inet_ntoa_r.h | 44 + Utilities/cmcurl/inet_ntop.c | 224 + Utilities/cmcurl/inet_ntop.h | 37 + Utilities/cmcurl/inet_pton.c | 241 + Utilities/cmcurl/inet_pton.h | 42 + Utilities/cmcurl/krb4.c | 425 + Utilities/cmcurl/krb4.h | 70 + Utilities/cmcurl/ldap.c | 702 + Utilities/cmcurl/ldap.h | 29 + Utilities/cmcurl/llist.c | 138 + Utilities/cmcurl/llist.h | 60 + Utilities/cmcurl/md5.c | 352 + Utilities/cmcurl/md5.h | 29 + Utilities/cmcurl/memdebug.c | 298 + Utilities/cmcurl/memdebug.h | 125 + Utilities/cmcurl/memory.h | 50 + Utilities/cmcurl/mprintf.c | 1218 + Utilities/cmcurl/multi.c | 1988 + Utilities/cmcurl/multiif.h | 46 + Utilities/cmcurl/netrc.c | 247 + Utilities/cmcurl/netrc.h | 34 + Utilities/cmcurl/nwlib.c | 300 + Utilities/cmcurl/parsedate.c | 425 + Utilities/cmcurl/parsedate.h | 28 + Utilities/cmcurl/progress.c | 424 + Utilities/cmcurl/progress.h | 70 + Utilities/cmcurl/security.c | 493 + Utilities/cmcurl/select.c | 315 + Utilities/cmcurl/select.h | 60 + Utilities/cmcurl/sendf.c | 663 + Utilities/cmcurl/sendf.h | 72 + Utilities/cmcurl/setup.h | 390 + Utilities/cmcurl/setup_once.h | 153 + Utilities/cmcurl/share.c | 219 + Utilities/cmcurl/share.h | 56 + Utilities/cmcurl/sockaddr.h | 38 + Utilities/cmcurl/socks.c | 585 + Utilities/cmcurl/socks.h | 41 + Utilities/cmcurl/speedcheck.c | 75 + Utilities/cmcurl/speedcheck.h | 34 + Utilities/cmcurl/splay.c | 425 + Utilities/cmcurl/splay.h | 54 + Utilities/cmcurl/ssh.c | 979 + Utilities/cmcurl/ssh.h | 49 + Utilities/cmcurl/sslgen.c | 618 + Utilities/cmcurl/sslgen.h | 84 + Utilities/cmcurl/ssluse.c | 1945 + Utilities/cmcurl/ssluse.h | 71 + Utilities/cmcurl/strdup.c | 46 + Utilities/cmcurl/strdup.h | 34 + Utilities/cmcurl/strequal.c | 143 + Utilities/cmcurl/strequal.h | 43 + Utilities/cmcurl/strerror.c | 748 + Utilities/cmcurl/strerror.h | 34 + Utilities/cmcurl/strtok.c | 68 + Utilities/cmcurl/strtok.h | 38 + Utilities/cmcurl/strtoofft.c | 165 + Utilities/cmcurl/strtoofft.h | 73 + Utilities/cmcurl/telnet.c | 1403 + Utilities/cmcurl/telnet.h | 30 + Utilities/cmcurl/tftp.c | 816 + Utilities/cmcurl/tftp.h | 31 + Utilities/cmcurl/timeval.c | 116 + Utilities/cmcurl/timeval.h | 76 + Utilities/cmcurl/transfer.c | 2494 + Utilities/cmcurl/transfer.h | 51 + Utilities/cmcurl/url.c | 4252 + Utilities/cmcurl/url.h | 85 + Utilities/cmcurl/urldata.h | 1340 + Utilities/cmcurl/version.c | 249 + Utilities/cmexpat/.NoDartCoverage | 1 + Utilities/cmexpat/CMakeLists.txt | 34 + Utilities/cmexpat/COPYING | 21 + Utilities/cmexpat/ascii.h | 86 + Utilities/cmexpat/asciitab.h | 37 + Utilities/cmexpat/cm_expat_mangle.h | 87 + Utilities/cmexpat/expat.h | 740 + Utilities/cmexpat/expatConfig.h.in | 43 + Utilities/cmexpat/expatDllConfig.h.in | 6 + Utilities/cmexpat/iasciitab.h | 38 + Utilities/cmexpat/latin1tab.h | 37 + Utilities/cmexpat/nametab.h | 150 + Utilities/cmexpat/utf8tab.h | 38 + Utilities/cmexpat/xmlparse.c | 4622 + Utilities/cmexpat/xmlrole.c | 1401 + Utilities/cmexpat/xmlrole.h | 100 + Utilities/cmexpat/xmltok.c | 1584 + Utilities/cmexpat/xmltok.h | 299 + Utilities/cmexpat/xmltok_impl.c | 1775 + Utilities/cmexpat/xmltok_impl.h | 46 + Utilities/cmexpat/xmltok_ns.c | 98 + Utilities/cmlibarchive/.gitattributes | 2 + Utilities/cmlibarchive/CMakeLists.txt | 1114 + Utilities/cmlibarchive/COPYING | 60 + Utilities/cmlibarchive/CTestConfig.cmake | 11 + Utilities/cmlibarchive/README-CMake.txt | 66 + .../cmlibarchive/build/cmake/CheckFileOffsetBits.c | 14 + .../build/cmake/CheckFileOffsetBits.cmake | 44 + .../cmlibarchive/build/cmake/CheckFuncs.cmake | 49 + .../cmlibarchive/build/cmake/CheckFuncs_stub.c.in | 16 + .../build/cmake/CheckHeaderDirent.cmake | 32 + .../build/cmake/CheckStructMember.cmake | 43 + .../cmlibarchive/build/cmake/CheckTypeExists.cmake | 42 + Utilities/cmlibarchive/build/cmake/FindLZMA.cmake | 48 + Utilities/cmlibarchive/build/cmake/config.h.in | 1110 + .../cmlibarchive/build/pkgconfig/libarchive.pc.in | 11 + .../utils/gen_archive_string_composition_h.sh | 418 + Utilities/cmlibarchive/build/version | 1 + Utilities/cmlibarchive/libarchive/CMakeLists.txt | 152 + Utilities/cmlibarchive/libarchive/archive.h | 826 + Utilities/cmlibarchive/libarchive/archive_acl.c | 1264 + .../cmlibarchive/libarchive/archive_acl_private.h | 87 + .../cmlibarchive/libarchive/archive_check_magic.c | 174 + Utilities/cmlibarchive/libarchive/archive_crc32.h | 78 + Utilities/cmlibarchive/libarchive/archive_crypto.c | 1427 + .../libarchive/archive_crypto_private.h | 376 + Utilities/cmlibarchive/libarchive/archive_endian.h | 162 + Utilities/cmlibarchive/libarchive/archive_entry.3 | 148 + Utilities/cmlibarchive/libarchive/archive_entry.c | 1651 + Utilities/cmlibarchive/libarchive/archive_entry.h | 620 + .../cmlibarchive/libarchive/archive_entry_acl.3 | 233 + .../libarchive/archive_entry_copy_bhfi.c | 75 + .../libarchive/archive_entry_copy_stat.c | 79 + .../libarchive/archive_entry_link_resolver.c | 444 + .../libarchive/archive_entry_linkify.3 | 224 + .../cmlibarchive/libarchive/archive_entry_locale.h | 88 + .../cmlibarchive/libarchive/archive_entry_paths.3 | 151 + .../cmlibarchive/libarchive/archive_entry_perms.3 | 207 + .../libarchive/archive_entry_private.h | 176 + .../cmlibarchive/libarchive/archive_entry_sparse.c | 156 + .../cmlibarchive/libarchive/archive_entry_stat.3 | 272 + .../cmlibarchive/libarchive/archive_entry_stat.c | 118 + .../libarchive/archive_entry_strmode.c | 87 + .../cmlibarchive/libarchive/archive_entry_time.3 | 127 + .../cmlibarchive/libarchive/archive_entry_xattr.c | 158 + .../cmlibarchive/libarchive/archive_options.c | 164 + .../libarchive/archive_options_private.h | 47 + .../cmlibarchive/libarchive/archive_platform.h | 170 + Utilities/cmlibarchive/libarchive/archive_ppmd7.c | 1164 + .../libarchive/archive_ppmd7_private.h | 119 + .../cmlibarchive/libarchive/archive_ppmd_private.h | 158 + .../cmlibarchive/libarchive/archive_private.h | 150 + Utilities/cmlibarchive/libarchive/archive_rb.c | 701 + Utilities/cmlibarchive/libarchive/archive_rb.h | 100 + Utilities/cmlibarchive/libarchive/archive_read.3 | 250 + Utilities/cmlibarchive/libarchive/archive_read.c | 1342 + .../cmlibarchive/libarchive/archive_read_data.3 | 128 + .../libarchive/archive_read_data_into_fd.c | 139 + .../cmlibarchive/libarchive/archive_read_disk.3 | 315 + .../libarchive/archive_read_disk_entry_from_file.c | 1008 + .../libarchive/archive_read_disk_posix.c | 2318 + .../libarchive/archive_read_disk_private.h | 71 + .../archive_read_disk_set_standard_lookup.c | 311 + .../libarchive/archive_read_disk_windows.c | 1983 + .../cmlibarchive/libarchive/archive_read_extract.3 | 135 + .../cmlibarchive/libarchive/archive_read_extract.c | 183 + .../cmlibarchive/libarchive/archive_read_filter.3 | 127 + .../cmlibarchive/libarchive/archive_read_format.3 | 175 + .../cmlibarchive/libarchive/archive_read_free.3 | 91 + .../cmlibarchive/libarchive/archive_read_header.3 | 89 + .../cmlibarchive/libarchive/archive_read_new.3 | 57 + .../cmlibarchive/libarchive/archive_read_open.3 | 231 + .../cmlibarchive/libarchive/archive_read_open_fd.c | 181 + .../libarchive/archive_read_open_file.c | 177 + .../libarchive/archive_read_open_filename.c | 509 + .../libarchive/archive_read_open_memory.c | 186 + .../cmlibarchive/libarchive/archive_read_private.h | 210 + .../libarchive/archive_read_set_options.3 | 207 + .../libarchive/archive_read_set_options.c | 148 + .../libarchive/archive_read_support_filter_all.c | 75 + .../libarchive/archive_read_support_filter_bzip2.c | 370 + .../archive_read_support_filter_compress.c | 454 + .../libarchive/archive_read_support_filter_gzip.c | 476 + .../libarchive/archive_read_support_filter_none.c | 52 + .../archive_read_support_filter_program.c | 476 + .../libarchive/archive_read_support_filter_rpm.c | 288 + .../libarchive/archive_read_support_filter_uu.c | 680 + .../libarchive/archive_read_support_filter_xz.c | 985 + .../libarchive/archive_read_support_format_7zip.c | 3706 + .../libarchive/archive_read_support_format_all.c | 87 + .../libarchive/archive_read_support_format_ar.c | 625 + .../archive_read_support_format_by_code.c | 74 + .../libarchive/archive_read_support_format_cab.c | 3315 + .../libarchive/archive_read_support_format_cpio.c | 1048 + .../libarchive/archive_read_support_format_empty.c | 93 + .../archive_read_support_format_iso9660.c | 3213 + .../libarchive/archive_read_support_format_lha.c | 2745 + .../libarchive/archive_read_support_format_mtree.c | 1744 + .../libarchive/archive_read_support_format_rar.c | 2574 + .../libarchive/archive_read_support_format_raw.c | 187 + .../libarchive/archive_read_support_format_tar.c | 2692 + .../libarchive/archive_read_support_format_xar.c | 3324 + .../libarchive/archive_read_support_format_zip.c | 1266 + Utilities/cmlibarchive/libarchive/archive_string.c | 4237 + Utilities/cmlibarchive/libarchive/archive_string.h | 237 + .../libarchive/archive_string_composition.h | 1351 + .../libarchive/archive_string_sprintf.c | 186 + Utilities/cmlibarchive/libarchive/archive_util.3 | 222 + Utilities/cmlibarchive/libarchive/archive_util.c | 465 + .../cmlibarchive/libarchive/archive_virtual.c | 147 + .../cmlibarchive/libarchive/archive_windows.c | 813 + .../cmlibarchive/libarchive/archive_windows.h | 297 + Utilities/cmlibarchive/libarchive/archive_write.3 | 261 + Utilities/cmlibarchive/libarchive/archive_write.c | 709 + .../libarchive/archive_write_add_filter_bzip2.c | 335 + .../libarchive/archive_write_add_filter_compress.c | 445 + .../libarchive/archive_write_add_filter_gzip.c | 356 + .../libarchive/archive_write_add_filter_none.c | 43 + .../libarchive/archive_write_add_filter_program.c | 327 + .../libarchive/archive_write_add_filter_xz.c | 502 + .../libarchive/archive_write_blocksize.3 | 112 + .../cmlibarchive/libarchive/archive_write_data.3 | 60 + .../cmlibarchive/libarchive/archive_write_disk.3 | 401 + .../libarchive/archive_write_disk_posix.c | 2844 + .../libarchive/archive_write_disk_private.h | 38 + .../archive_write_disk_set_standard_lookup.c | 262 + .../libarchive/archive_write_disk_windows.c | 2551 + .../cmlibarchive/libarchive/archive_write_filter.3 | 98 + .../libarchive/archive_write_finish_entry.3 | 74 + .../cmlibarchive/libarchive/archive_write_format.3 | 98 + .../cmlibarchive/libarchive/archive_write_free.3 | 81 + .../cmlibarchive/libarchive/archive_write_header.3 | 71 + .../cmlibarchive/libarchive/archive_write_new.3 | 56 + .../cmlibarchive/libarchive/archive_write_open.3 | 233 + .../libarchive/archive_write_open_fd.c | 144 + .../libarchive/archive_write_open_file.c | 109 + .../libarchive/archive_write_open_filename.c | 248 + .../libarchive/archive_write_open_memory.c | 114 + .../libarchive/archive_write_private.h | 136 + .../libarchive/archive_write_set_format.c | 76 + .../libarchive/archive_write_set_format_7zip.c | 2303 + .../libarchive/archive_write_set_format_ar.c | 564 + .../libarchive/archive_write_set_format_by_name.c | 86 + .../libarchive/archive_write_set_format_cpio.c | 464 + .../archive_write_set_format_cpio_newc.c | 420 + .../libarchive/archive_write_set_format_gnutar.c | 684 + .../libarchive/archive_write_set_format_iso9660.c | 8114 ++ .../libarchive/archive_write_set_format_mtree.c | 1468 + .../libarchive/archive_write_set_format_pax.c | 1833 + .../libarchive/archive_write_set_format_shar.c | 642 + .../libarchive/archive_write_set_format_ustar.c | 692 + .../libarchive/archive_write_set_format_xar.c | 3171 + .../libarchive/archive_write_set_format_zip.c | 820 + .../libarchive/archive_write_set_options.3 | 437 + .../libarchive/archive_write_set_options.c | 124 + Utilities/cmlibarchive/libarchive/config_freebsd.h | 160 + Utilities/cmlibarchive/libarchive/cpio.5 | 325 + Utilities/cmlibarchive/libarchive/filter_fork.c | 161 + Utilities/cmlibarchive/libarchive/filter_fork.h | 41 + .../cmlibarchive/libarchive/filter_fork_windows.c | 117 + .../cmlibarchive/libarchive/libarchive-formats.5 | 361 + Utilities/cmlibarchive/libarchive/libarchive.3 | 256 + .../cmlibarchive/libarchive/libarchive_changes.3 | 341 + .../cmlibarchive/libarchive/libarchive_internals.3 | 365 + Utilities/cmlibarchive/libarchive/mtree.5 | 269 + Utilities/cmlibarchive/libarchive/tar.5 | 947 + Utilities/cmzlib/.NoDartCoverage | 1 + Utilities/cmzlib/CMakeLists.txt | 43 + Utilities/cmzlib/ChangeLog | 855 + Utilities/cmzlib/Copyright.txt | 23 + Utilities/cmzlib/FAQ | 339 + Utilities/cmzlib/INDEX | 51 + Utilities/cmzlib/README | 125 + Utilities/cmzlib/README.Kitware.txt | 40 + Utilities/cmzlib/adler32.c | 149 + Utilities/cmzlib/cm_zlib_mangle.h | 93 + Utilities/cmzlib/compress.c | 79 + Utilities/cmzlib/crc32.c | 423 + Utilities/cmzlib/crc32.h | 441 + Utilities/cmzlib/deflate.c | 1743 + Utilities/cmzlib/deflate.h | 331 + Utilities/cmzlib/gzio.c | 1026 + Utilities/cmzlib/inffast.c | 318 + Utilities/cmzlib/inffast.h | 11 + Utilities/cmzlib/inffixed.h | 94 + Utilities/cmzlib/inflate.c | 1368 + Utilities/cmzlib/inflate.h | 115 + Utilities/cmzlib/inftrees.c | 329 + Utilities/cmzlib/inftrees.h | 55 + Utilities/cmzlib/trees.c | 1219 + Utilities/cmzlib/trees.h | 128 + Utilities/cmzlib/uncompr.c | 61 + Utilities/cmzlib/zconf.h | 351 + Utilities/cmzlib/zlib.def | 47 + Utilities/cmzlib/zlib.h | 1357 + Utilities/cmzlib/zlib.rc | 32 + Utilities/cmzlib/zlibDllConfig.h.in | 6 + Utilities/cmzlib/zutil.c | 318 + Utilities/cmzlib/zutil.h | 275 + Utilities/xml/xhtml-lat1.ent | 196 + Utilities/xml/xhtml-special.ent | 80 + Utilities/xml/xhtml-symbol.ent | 237 + Utilities/xml/xhtml1-strict.dtd | 977 + bootstrap | 1528 + cmake_uninstall.cmake.in | 22 + configure | 3 + doxygen.config | 697 + packaging/cmake.changes | 197 + packaging/cmake.spec | 78 + packaging/macros.cmake | 24 + packaging/tinfo.patch | 12 + 3342 files changed, 774823 insertions(+) create mode 100644 .gitattributes create mode 100644 .hooks-config.bash create mode 100644 CMakeCPack.cmake create mode 100644 CMakeCPackOptions.cmake.in create mode 100644 CMakeGraphVizOptions.cmake create mode 100644 CMakeLists.txt create mode 100644 CMakeLogo.gif create mode 100644 CTestConfig.cmake create mode 100644 CTestCustom.cmake.in create mode 100644 CTestCustom.ctest.in create mode 100644 ChangeLog.manual create mode 100644 ChangeLog.txt create mode 100644 CompileFlags.cmake create mode 100644 Copyright.txt create mode 100644 DartConfig.cmake create mode 100644 DartLocal.conf.in create mode 100644 Docs/cmake-completion create mode 100644 Docs/cmake-help.vim create mode 100644 Docs/cmake-indent.vim create mode 100644 Docs/cmake-mode.el create mode 100644 Docs/cmake-syntax.vim create mode 100644 Example/CMakeLists.txt create mode 100644 Example/Demo/CMakeLists.txt create mode 100644 Example/Demo/demo.cxx create mode 100644 Example/Demo/demo_b.cxx create mode 100644 Example/Hello/CMakeLists.txt create mode 100644 Example/Hello/hello.cxx create mode 100644 Example/Hello/hello.h create mode 100644 Modules/AddFileDependencies.cmake create mode 100644 Modules/AutomocInfo.cmake.in create mode 100644 Modules/BasicConfigVersion-AnyNewerVersion.cmake.in create mode 100644 Modules/BasicConfigVersion-ExactVersion.cmake.in create mode 100644 Modules/BasicConfigVersion-SameMajorVersion.cmake.in create mode 100644 Modules/BundleUtilities.cmake create mode 100644 Modules/CMake.cmake create mode 100644 Modules/CMakeASM-ATTInformation.cmake create mode 100644 Modules/CMakeASMCompiler.cmake.in create mode 100644 Modules/CMakeASMInformation.cmake create mode 100644 Modules/CMakeASM_MASMInformation.cmake create mode 100644 Modules/CMakeASM_NASMInformation.cmake create mode 100644 Modules/CMakeAddFortranSubdirectory.cmake create mode 100644 Modules/CMakeAddFortranSubdirectory/build_mingw.cmake.in create mode 100644 Modules/CMakeAddFortranSubdirectory/config_mingw.cmake.in create mode 100644 Modules/CMakeAddNewLanguage.txt create mode 100644 Modules/CMakeBackwardCompatibilityC.cmake create mode 100644 Modules/CMakeBackwardCompatibilityCXX.cmake create mode 100644 Modules/CMakeBorlandFindMake.cmake create mode 100644 Modules/CMakeBuildSettings.cmake.in create mode 100644 Modules/CMakeCCompiler.cmake.in create mode 100644 Modules/CMakeCCompilerABI.c create mode 100644 Modules/CMakeCCompilerId.c.in create mode 100644 Modules/CMakeCInformation.cmake create mode 100644 Modules/CMakeCXXCompiler.cmake.in create mode 100644 Modules/CMakeCXXCompilerABI.cpp create mode 100644 Modules/CMakeCXXCompilerId.cpp.in create mode 100644 Modules/CMakeCXXInformation.cmake create mode 100644 Modules/CMakeCommonLanguageInclude.cmake create mode 100644 Modules/CMakeCompilerABI.h create mode 100644 Modules/CMakeConfigurableFile.in create mode 100644 Modules/CMakeDependentOption.cmake create mode 100644 Modules/CMakeDetermineASM-ATTCompiler.cmake create mode 100644 Modules/CMakeDetermineASMCompiler.cmake create mode 100644 Modules/CMakeDetermineASM_MASMCompiler.cmake create mode 100644 Modules/CMakeDetermineASM_NASMCompiler.cmake create mode 100644 Modules/CMakeDetermineCCompiler.cmake create mode 100644 Modules/CMakeDetermineCXXCompiler.cmake create mode 100644 Modules/CMakeDetermineCompilerABI.cmake create mode 100644 Modules/CMakeDetermineCompilerId.cmake create mode 100644 Modules/CMakeDetermineFortranCompiler.cmake create mode 100644 Modules/CMakeDetermineJavaCompiler.cmake create mode 100644 Modules/CMakeDetermineRCCompiler.cmake create mode 100644 Modules/CMakeDetermineSystem.cmake create mode 100644 Modules/CMakeDetermineVSServicePack.cmake create mode 100644 Modules/CMakeExpandImportedTargets.cmake create mode 100644 Modules/CMakeExportBuildSettings.cmake create mode 100644 Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake create mode 100644 Modules/CMakeFindBinUtils.cmake create mode 100644 Modules/CMakeFindCodeBlocks.cmake create mode 100644 Modules/CMakeFindEclipseCDT4.cmake create mode 100644 Modules/CMakeFindFrameworks.cmake create mode 100644 Modules/CMakeFindKDevelop3.cmake create mode 100644 Modules/CMakeFindPackageMode.cmake create mode 100644 Modules/CMakeFindWMake.cmake create mode 100644 Modules/CMakeFindXCode.cmake create mode 100644 Modules/CMakeForceCompiler.cmake create mode 100644 Modules/CMakeFortranCompiler.cmake.in create mode 100644 Modules/CMakeFortranCompilerABI.F create mode 100644 Modules/CMakeFortranCompilerId.F.in create mode 100644 Modules/CMakeFortranInformation.cmake create mode 100644 Modules/CMakeGenericSystem.cmake create mode 100644 Modules/CMakeImportBuildSettings.cmake create mode 100644 Modules/CMakeJOMFindMake.cmake create mode 100644 Modules/CMakeJavaCompiler.cmake.in create mode 100644 Modules/CMakeJavaInformation.cmake create mode 100644 Modules/CMakeMSYSFindMake.cmake create mode 100644 Modules/CMakeMinGWFindMake.cmake create mode 100644 Modules/CMakeNMakeFindMake.cmake create mode 100644 Modules/CMakeNinjaFindMake.cmake create mode 100644 Modules/CMakePackageConfigHelpers.cmake create mode 100644 Modules/CMakeParseArguments.cmake create mode 100644 Modules/CMakeParseImplicitLinkInfo.cmake create mode 100644 Modules/CMakePlatformId.h.in create mode 100644 Modules/CMakePrintSystemInformation.cmake create mode 100644 Modules/CMakePushCheckState.cmake create mode 100644 Modules/CMakeRCCompiler.cmake.in create mode 100644 Modules/CMakeRCInformation.cmake create mode 100644 Modules/CMakeSystem.cmake.in create mode 100644 Modules/CMakeSystemSpecificInformation.cmake create mode 100644 Modules/CMakeTestASM-ATTCompiler.cmake create mode 100644 Modules/CMakeTestASMCompiler.cmake create mode 100644 Modules/CMakeTestASM_MASMCompiler.cmake create mode 100644 Modules/CMakeTestASM_NASMCompiler.cmake create mode 100644 Modules/CMakeTestCCompiler.cmake create mode 100644 Modules/CMakeTestCXXCompiler.cmake create mode 100644 Modules/CMakeTestCompilerCommon.cmake create mode 100644 Modules/CMakeTestForFreeVC.cxx create mode 100644 Modules/CMakeTestFortranCompiler.cmake create mode 100644 Modules/CMakeTestGNU.c create mode 100644 Modules/CMakeTestJavaCompiler.cmake create mode 100644 Modules/CMakeTestNMakeCLVersion.c create mode 100644 Modules/CMakeTestRCCompiler.cmake create mode 100644 Modules/CMakeTestWatcomVersion.c create mode 100644 Modules/CMakeUnixFindMake.cmake create mode 100644 Modules/CMakeVS10FindMake.cmake create mode 100644 Modules/CMakeVS11FindMake.cmake create mode 100644 Modules/CMakeVS6BackwardCompatibility.cmake create mode 100644 Modules/CMakeVS6FindMake.cmake create mode 100644 Modules/CMakeVS71FindMake.cmake create mode 100644 Modules/CMakeVS7BackwardCompatibility.cmake create mode 100644 Modules/CMakeVS7FindMake.cmake create mode 100644 Modules/CMakeVS8FindMake.cmake create mode 100644 Modules/CMakeVS9FindMake.cmake create mode 100644 Modules/CMakeVerifyManifest.cmake create mode 100644 Modules/CPack.DS_Store.in create mode 100644 Modules/CPack.Description.plist.in create mode 100644 Modules/CPack.Info.plist.in create mode 100755 Modules/CPack.OSXScriptLauncher.in create mode 100644 Modules/CPack.OSXScriptLauncher.rsrc.in create mode 100644 Modules/CPack.OSXX11.Info.plist.in create mode 100644 Modules/CPack.OSXX11.main.scpt.in create mode 100755 Modules/CPack.RuntimeScript.in create mode 100755 Modules/CPack.STGZ_Header.sh.in create mode 100644 Modules/CPack.VolumeIcon.icns.in create mode 100644 Modules/CPack.background.png.in create mode 100644 Modules/CPack.cmake create mode 100644 Modules/CPack.distribution.dist.in create mode 100644 Modules/CPackBundle.cmake create mode 100644 Modules/CPackComponent.cmake create mode 100644 Modules/CPackCygwin.cmake create mode 100644 Modules/CPackDMG.cmake create mode 100644 Modules/CPackDeb.cmake create mode 100644 Modules/CPackNSIS.cmake create mode 100644 Modules/CPackPackageMaker.cmake create mode 100644 Modules/CPackRPM.cmake create mode 100644 Modules/CPackZIP.cmake create mode 100644 Modules/CTest.cmake create mode 100644 Modules/CTestScriptMode.cmake create mode 100644 Modules/CTestTargets.cmake create mode 100644 Modules/CheckCCompilerFlag.cmake create mode 100644 Modules/CheckCSourceCompiles.cmake create mode 100644 Modules/CheckCSourceRuns.cmake create mode 100644 Modules/CheckCXXCompilerFlag.cmake create mode 100644 Modules/CheckCXXSourceCompiles.cmake create mode 100644 Modules/CheckCXXSourceRuns.cmake create mode 100644 Modules/CheckCXXSymbolExists.cmake create mode 100644 Modules/CheckForPthreads.c create mode 100644 Modules/CheckFortranFunctionExists.cmake create mode 100644 Modules/CheckFunctionExists.c create mode 100644 Modules/CheckFunctionExists.cmake create mode 100644 Modules/CheckIncludeFile.c.in create mode 100644 Modules/CheckIncludeFile.cmake create mode 100644 Modules/CheckIncludeFile.cxx.in create mode 100644 Modules/CheckIncludeFileCXX.cmake create mode 100644 Modules/CheckIncludeFiles.cmake create mode 100644 Modules/CheckLanguage.cmake create mode 100644 Modules/CheckLibraryExists.cmake create mode 100644 Modules/CheckLibraryExists.lists.in create mode 100644 Modules/CheckPrototypeDefinition.c.in create mode 100644 Modules/CheckPrototypeDefinition.cmake create mode 100644 Modules/CheckSizeOf.cmake create mode 100644 Modules/CheckStructHasMember.cmake create mode 100644 Modules/CheckSymbolExists.cmake create mode 100644 Modules/CheckTypeSize.c.in create mode 100644 Modules/CheckTypeSize.cmake create mode 100644 Modules/CheckTypeSizeMap.cmake.in create mode 100644 Modules/CheckVariableExists.c create mode 100644 Modules/CheckVariableExists.cmake create mode 100644 Modules/Compiler/Absoft-Fortran.cmake create mode 100644 Modules/Compiler/Clang-C.cmake create mode 100644 Modules/Compiler/Clang-CXX.cmake create mode 100644 Modules/Compiler/Cray-C.cmake create mode 100644 Modules/Compiler/Cray-CXX.cmake create mode 100644 Modules/Compiler/Cray-Fortran.cmake create mode 100644 Modules/Compiler/G95-Fortran.cmake create mode 100644 Modules/Compiler/GNU-ASM.cmake create mode 100644 Modules/Compiler/GNU-C.cmake create mode 100644 Modules/Compiler/GNU-CXX.cmake create mode 100644 Modules/Compiler/GNU-Fortran.cmake create mode 100644 Modules/Compiler/GNU.cmake create mode 100644 Modules/Compiler/HP-ASM.cmake create mode 100644 Modules/Compiler/HP-C.cmake create mode 100644 Modules/Compiler/HP-CXX.cmake create mode 100644 Modules/Compiler/HP-Fortran.cmake create mode 100644 Modules/Compiler/Intel-ASM.cmake create mode 100644 Modules/Compiler/Intel-C.cmake create mode 100644 Modules/Compiler/Intel-CXX.cmake create mode 100644 Modules/Compiler/Intel-Fortran.cmake create mode 100644 Modules/Compiler/MIPSpro-C.cmake create mode 100644 Modules/Compiler/MIPSpro-CXX.cmake create mode 100644 Modules/Compiler/MIPSpro-Fortran.cmake create mode 100644 Modules/Compiler/NAG-Fortran.cmake create mode 100644 Modules/Compiler/PGI-C.cmake create mode 100644 Modules/Compiler/PGI-CXX.cmake create mode 100644 Modules/Compiler/PGI-Fortran.cmake create mode 100644 Modules/Compiler/PGI.cmake create mode 100644 Modules/Compiler/PathScale-C.cmake create mode 100644 Modules/Compiler/PathScale-CXX.cmake create mode 100644 Modules/Compiler/PathScale-Fortran.cmake create mode 100644 Modules/Compiler/PathScale.cmake create mode 100644 Modules/Compiler/SCO-C.cmake create mode 100644 Modules/Compiler/SCO-CXX.cmake create mode 100644 Modules/Compiler/SCO.cmake create mode 100644 Modules/Compiler/SunPro-ASM.cmake create mode 100644 Modules/Compiler/SunPro-C.cmake create mode 100644 Modules/Compiler/SunPro-CXX.cmake create mode 100644 Modules/Compiler/SunPro-Fortran.cmake create mode 100644 Modules/Compiler/TinyCC-C.cmake create mode 100644 Modules/Compiler/VisualAge-C.cmake create mode 100644 Modules/Compiler/VisualAge-CXX.cmake create mode 100644 Modules/Compiler/VisualAge-Fortran.cmake create mode 100644 Modules/Compiler/XL-ASM.cmake create mode 100644 Modules/Compiler/XL-C.cmake create mode 100644 Modules/Compiler/XL-CXX.cmake create mode 100644 Modules/Compiler/XL-Fortran.cmake create mode 100644 Modules/Compiler/XL.cmake create mode 100644 Modules/Dart.cmake create mode 100644 Modules/DartConfiguration.tcl.in create mode 100644 Modules/DeployQt4.cmake create mode 100644 Modules/Documentation.cmake create mode 100644 Modules/DummyCXXFile.cxx create mode 100644 Modules/ExternalProject.cmake create mode 100644 Modules/FLTKCompatibility.cmake create mode 100644 Modules/FeatureSummary.cmake create mode 100644 Modules/FindALSA.cmake create mode 100644 Modules/FindASPELL.cmake create mode 100644 Modules/FindAVIFile.cmake create mode 100644 Modules/FindArmadillo.cmake create mode 100644 Modules/FindBISON.cmake create mode 100644 Modules/FindBLAS.cmake create mode 100644 Modules/FindBZip2.cmake create mode 100644 Modules/FindBoost.cmake create mode 100644 Modules/FindBullet.cmake create mode 100644 Modules/FindCABLE.cmake create mode 100644 Modules/FindCUDA.cmake create mode 100644 Modules/FindCUDA/make2cmake.cmake create mode 100644 Modules/FindCUDA/parse_cubin.cmake create mode 100644 Modules/FindCUDA/run_nvcc.cmake create mode 100644 Modules/FindCURL.cmake create mode 100644 Modules/FindCVS.cmake create mode 100644 Modules/FindCoin3D.cmake create mode 100644 Modules/FindCups.cmake create mode 100644 Modules/FindCurses.cmake create mode 100644 Modules/FindCxxTest.cmake create mode 100644 Modules/FindCygwin.cmake create mode 100644 Modules/FindDCMTK.cmake create mode 100644 Modules/FindDart.cmake create mode 100644 Modules/FindDevIL.cmake create mode 100644 Modules/FindDoxygen.cmake create mode 100644 Modules/FindEXPAT.cmake create mode 100644 Modules/FindFLEX.cmake create mode 100644 Modules/FindFLTK.cmake create mode 100644 Modules/FindFLTK2.cmake create mode 100644 Modules/FindFreetype.cmake create mode 100644 Modules/FindGCCXML.cmake create mode 100644 Modules/FindGDAL.cmake create mode 100644 Modules/FindGIF.cmake create mode 100644 Modules/FindGLU.cmake create mode 100644 Modules/FindGLUT.cmake create mode 100644 Modules/FindGTK.cmake create mode 100644 Modules/FindGTK2.cmake create mode 100644 Modules/FindGTest.cmake create mode 100644 Modules/FindGettext.cmake create mode 100644 Modules/FindGit.cmake create mode 100644 Modules/FindGnuTLS.cmake create mode 100644 Modules/FindGnuplot.cmake create mode 100644 Modules/FindHDF5.cmake create mode 100644 Modules/FindHSPELL.cmake create mode 100644 Modules/FindHTMLHelp.cmake create mode 100644 Modules/FindITK.cmake create mode 100644 Modules/FindImageMagick.cmake create mode 100644 Modules/FindJNI.cmake create mode 100644 Modules/FindJPEG.cmake create mode 100644 Modules/FindJasper.cmake create mode 100644 Modules/FindJava.cmake create mode 100644 Modules/FindKDE3.cmake create mode 100644 Modules/FindKDE4.cmake create mode 100644 Modules/FindLAPACK.cmake create mode 100644 Modules/FindLATEX.cmake create mode 100644 Modules/FindLibArchive.cmake create mode 100644 Modules/FindLibXml2.cmake create mode 100644 Modules/FindLibXslt.cmake create mode 100644 Modules/FindLua50.cmake create mode 100644 Modules/FindLua51.cmake create mode 100644 Modules/FindMFC.cmake create mode 100644 Modules/FindMPEG.cmake create mode 100644 Modules/FindMPEG2.cmake create mode 100644 Modules/FindMPI.cmake create mode 100644 Modules/FindMatlab.cmake create mode 100644 Modules/FindMotif.cmake create mode 100644 Modules/FindOpenAL.cmake create mode 100644 Modules/FindOpenGL.cmake create mode 100644 Modules/FindOpenMP.cmake create mode 100644 Modules/FindOpenSSL.cmake create mode 100644 Modules/FindOpenSceneGraph.cmake create mode 100644 Modules/FindOpenThreads.cmake create mode 100644 Modules/FindPHP4.cmake create mode 100644 Modules/FindPNG.cmake create mode 100644 Modules/FindPackageHandleStandardArgs.cmake create mode 100644 Modules/FindPackageMessage.cmake create mode 100644 Modules/FindPerl.cmake create mode 100644 Modules/FindPerlLibs.cmake create mode 100644 Modules/FindPhysFS.cmake create mode 100644 Modules/FindPike.cmake create mode 100644 Modules/FindPkgConfig.cmake create mode 100644 Modules/FindPostgreSQL.cmake create mode 100644 Modules/FindProducer.cmake create mode 100644 Modules/FindProtobuf.cmake create mode 100644 Modules/FindPythonInterp.cmake create mode 100644 Modules/FindPythonLibs.cmake create mode 100644 Modules/FindQt.cmake create mode 100644 Modules/FindQt3.cmake create mode 100644 Modules/FindQt4.cmake create mode 100644 Modules/FindQuickTime.cmake create mode 100644 Modules/FindRTI.cmake create mode 100644 Modules/FindRuby.cmake create mode 100644 Modules/FindSDL.cmake create mode 100644 Modules/FindSDL_image.cmake create mode 100644 Modules/FindSDL_mixer.cmake create mode 100644 Modules/FindSDL_net.cmake create mode 100644 Modules/FindSDL_sound.cmake create mode 100644 Modules/FindSDL_ttf.cmake create mode 100644 Modules/FindSWIG.cmake create mode 100644 Modules/FindSelfPackers.cmake create mode 100644 Modules/FindSquish.cmake create mode 100644 Modules/FindSubversion.cmake create mode 100644 Modules/FindTCL.cmake create mode 100644 Modules/FindTIFF.cmake create mode 100644 Modules/FindTclStub.cmake create mode 100644 Modules/FindTclsh.cmake create mode 100644 Modules/FindThreads.cmake create mode 100644 Modules/FindUnixCommands.cmake create mode 100644 Modules/FindVTK.cmake create mode 100644 Modules/FindWget.cmake create mode 100644 Modules/FindWish.cmake create mode 100644 Modules/FindX11.cmake create mode 100644 Modules/FindXMLRPC.cmake create mode 100644 Modules/FindZLIB.cmake create mode 100644 Modules/Findosg.cmake create mode 100644 Modules/FindosgAnimation.cmake create mode 100644 Modules/FindosgDB.cmake create mode 100644 Modules/FindosgFX.cmake create mode 100644 Modules/FindosgGA.cmake create mode 100644 Modules/FindosgIntrospection.cmake create mode 100644 Modules/FindosgManipulator.cmake create mode 100644 Modules/FindosgParticle.cmake create mode 100644 Modules/FindosgPresentation.cmake create mode 100644 Modules/FindosgProducer.cmake create mode 100644 Modules/FindosgQt.cmake create mode 100644 Modules/FindosgShadow.cmake create mode 100644 Modules/FindosgSim.cmake create mode 100644 Modules/FindosgTerrain.cmake create mode 100644 Modules/FindosgText.cmake create mode 100644 Modules/FindosgUtil.cmake create mode 100644 Modules/FindosgViewer.cmake create mode 100644 Modules/FindosgVolume.cmake create mode 100644 Modules/FindosgWidget.cmake create mode 100644 Modules/Findosg_functions.cmake create mode 100644 Modules/FindwxWidgets.cmake create mode 100644 Modules/FindwxWindows.cmake create mode 100644 Modules/FortranCInterface.cmake create mode 100644 Modules/FortranCInterface/CMakeLists.txt create mode 100644 Modules/FortranCInterface/Detect.cmake create mode 100644 Modules/FortranCInterface/Input.cmake.in create mode 100644 Modules/FortranCInterface/Macro.h.in create mode 100644 Modules/FortranCInterface/Output.cmake.in create mode 100644 Modules/FortranCInterface/Verify/CMakeLists.txt create mode 100644 Modules/FortranCInterface/Verify/VerifyC.c create mode 100644 Modules/FortranCInterface/Verify/VerifyCXX.cxx create mode 100644 Modules/FortranCInterface/Verify/VerifyFortran.f create mode 100644 Modules/FortranCInterface/Verify/main.c create mode 100644 Modules/FortranCInterface/call_mod.f90 create mode 100644 Modules/FortranCInterface/call_sub.f create mode 100644 Modules/FortranCInterface/main.F create mode 100644 Modules/FortranCInterface/my_module.f90 create mode 100644 Modules/FortranCInterface/my_module_.c create mode 100644 Modules/FortranCInterface/my_sub.f create mode 100644 Modules/FortranCInterface/mymodule.f90 create mode 100644 Modules/FortranCInterface/mymodule_.c create mode 100644 Modules/FortranCInterface/mysub.f create mode 100644 Modules/FortranCInterface/symbol.c.in create mode 100644 Modules/GNUInstallDirs.cmake create mode 100644 Modules/GenerateExportHeader.cmake create mode 100644 Modules/GetPrerequisites.cmake create mode 100644 Modules/ITKCompatibility.cmake create mode 100644 Modules/InstallRequiredSystemLibraries.cmake create mode 100644 Modules/IntelVSImplicitPath/CMakeLists.txt create mode 100644 Modules/IntelVSImplicitPath/detect.cmake create mode 100644 Modules/IntelVSImplicitPath/hello.f create mode 100644 Modules/KDE3Macros.cmake create mode 100644 Modules/MacOSXBundleInfo.plist.in create mode 100644 Modules/MacOSXFrameworkInfo.plist.in create mode 100644 Modules/MacroAddFileDependencies.cmake create mode 100644 Modules/NSIS.InstallOptions.ini.in create mode 100644 Modules/NSIS.template.in create mode 100644 Modules/Platform/AIX-GNU-C.cmake create mode 100644 Modules/Platform/AIX-GNU-CXX.cmake create mode 100644 Modules/Platform/AIX-GNU-Fortran.cmake create mode 100644 Modules/Platform/AIX-GNU.cmake create mode 100644 Modules/Platform/AIX-VisualAge-C.cmake create mode 100644 Modules/Platform/AIX-VisualAge-CXX.cmake create mode 100644 Modules/Platform/AIX-VisualAge-Fortran.cmake create mode 100644 Modules/Platform/AIX-XL-ASM.cmake create mode 100644 Modules/Platform/AIX-XL-C.cmake create mode 100644 Modules/Platform/AIX-XL-CXX.cmake create mode 100644 Modules/Platform/AIX-XL-Fortran.cmake create mode 100644 Modules/Platform/AIX-XL.cmake create mode 100644 Modules/Platform/AIX.cmake create mode 100644 Modules/Platform/BSDOS.cmake create mode 100644 Modules/Platform/BeOS.cmake create mode 100644 Modules/Platform/BlueGeneL.cmake create mode 100644 Modules/Platform/BlueGeneP-base.cmake create mode 100644 Modules/Platform/BlueGeneP-dynamic-GNU-C.cmake create mode 100644 Modules/Platform/BlueGeneP-dynamic-GNU-CXX.cmake create mode 100644 Modules/Platform/BlueGeneP-dynamic-GNU-Fortran.cmake create mode 100644 Modules/Platform/BlueGeneP-dynamic-XL-C.cmake create mode 100644 Modules/Platform/BlueGeneP-dynamic-XL-CXX.cmake create mode 100644 Modules/Platform/BlueGeneP-dynamic-XL-Fortran.cmake create mode 100644 Modules/Platform/BlueGeneP-dynamic.cmake create mode 100644 Modules/Platform/BlueGeneP-static-GNU-C.cmake create mode 100644 Modules/Platform/BlueGeneP-static-GNU-CXX.cmake create mode 100644 Modules/Platform/BlueGeneP-static-GNU-Fortran.cmake create mode 100644 Modules/Platform/BlueGeneP-static-XL-C.cmake create mode 100644 Modules/Platform/BlueGeneP-static-XL-CXX.cmake create mode 100644 Modules/Platform/BlueGeneP-static-XL-Fortran.cmake create mode 100644 Modules/Platform/BlueGeneP-static.cmake create mode 100644 Modules/Platform/CYGWIN-GNU-C.cmake create mode 100644 Modules/Platform/CYGWIN-GNU-CXX.cmake create mode 100644 Modules/Platform/CYGWIN-GNU-Fortran.cmake create mode 100644 Modules/Platform/CYGWIN-GNU.cmake create mode 100644 Modules/Platform/CYGWIN-windres.cmake create mode 100644 Modules/Platform/CYGWIN.cmake create mode 100644 Modules/Platform/Catamount.cmake create mode 100644 Modules/Platform/Darwin-Absoft-Fortran.cmake create mode 100644 Modules/Platform/Darwin-GNU-C.cmake create mode 100644 Modules/Platform/Darwin-GNU-CXX.cmake create mode 100644 Modules/Platform/Darwin-GNU-Fortran.cmake create mode 100644 Modules/Platform/Darwin-GNU.cmake create mode 100644 Modules/Platform/Darwin-NAG-Fortran.cmake create mode 100644 Modules/Platform/Darwin-VisualAge-C.cmake create mode 100644 Modules/Platform/Darwin-VisualAge-CXX.cmake create mode 100644 Modules/Platform/Darwin-XL-C.cmake create mode 100644 Modules/Platform/Darwin-XL-CXX.cmake create mode 100644 Modules/Platform/Darwin-icc.cmake create mode 100644 Modules/Platform/Darwin-icpc.cmake create mode 100644 Modules/Platform/Darwin.cmake create mode 100644 Modules/Platform/DragonFly.cmake create mode 100644 Modules/Platform/FreeBSD.cmake create mode 100644 Modules/Platform/GNU.cmake create mode 100644 Modules/Platform/GNUtoMS_lib.bat.in create mode 100644 Modules/Platform/GNUtoMS_lib.cmake create mode 100644 Modules/Platform/Generic-ADSP-ASM.cmake create mode 100644 Modules/Platform/Generic-ADSP-C.cmake create mode 100644 Modules/Platform/Generic-ADSP-CXX.cmake create mode 100644 Modules/Platform/Generic-ADSP-Common.cmake create mode 100644 Modules/Platform/Generic-SDCC-C.cmake create mode 100644 Modules/Platform/Generic.cmake create mode 100644 Modules/Platform/HP-UX-GNU-C.cmake create mode 100644 Modules/Platform/HP-UX-GNU-CXX.cmake create mode 100644 Modules/Platform/HP-UX-GNU-Fortran.cmake create mode 100644 Modules/Platform/HP-UX-GNU.cmake create mode 100644 Modules/Platform/HP-UX-HP-ASM.cmake create mode 100644 Modules/Platform/HP-UX-HP-C.cmake create mode 100644 Modules/Platform/HP-UX-HP-CXX.cmake create mode 100644 Modules/Platform/HP-UX-HP-Fortran.cmake create mode 100644 Modules/Platform/HP-UX-HP.cmake create mode 100644 Modules/Platform/HP-UX.cmake create mode 100644 Modules/Platform/Haiku.cmake create mode 100644 Modules/Platform/IRIX.cmake create mode 100644 Modules/Platform/IRIX64.cmake create mode 100644 Modules/Platform/Linux-Absoft-Fortran.cmake create mode 100644 Modules/Platform/Linux-Clang-C.cmake create mode 100644 Modules/Platform/Linux-Clang-CXX.cmake create mode 100644 Modules/Platform/Linux-GNU-C.cmake create mode 100644 Modules/Platform/Linux-GNU-CXX.cmake create mode 100644 Modules/Platform/Linux-GNU-Fortran.cmake create mode 100644 Modules/Platform/Linux-GNU.cmake create mode 100644 Modules/Platform/Linux-Intel-C.cmake create mode 100644 Modules/Platform/Linux-Intel-CXX.cmake create mode 100644 Modules/Platform/Linux-Intel-Fortran.cmake create mode 100644 Modules/Platform/Linux-Intel.cmake create mode 100644 Modules/Platform/Linux-NAG-Fortran.cmake create mode 100644 Modules/Platform/Linux-PGI-C.cmake create mode 100644 Modules/Platform/Linux-PGI-CXX.cmake create mode 100644 Modules/Platform/Linux-PGI-Fortran.cmake create mode 100644 Modules/Platform/Linux-PGI.cmake create mode 100644 Modules/Platform/Linux-PathScale-C.cmake create mode 100644 Modules/Platform/Linux-PathScale-CXX.cmake create mode 100644 Modules/Platform/Linux-PathScale-Fortran.cmake create mode 100644 Modules/Platform/Linux-PathScale.cmake create mode 100644 Modules/Platform/Linux-SunPro-CXX.cmake create mode 100644 Modules/Platform/Linux-TinyCC-C.cmake create mode 100644 Modules/Platform/Linux-VisualAge-C.cmake create mode 100644 Modules/Platform/Linux-VisualAge-CXX.cmake create mode 100644 Modules/Platform/Linux-VisualAge-Fortran.cmake create mode 100644 Modules/Platform/Linux-XL-C.cmake create mode 100644 Modules/Platform/Linux-XL-CXX.cmake create mode 100644 Modules/Platform/Linux-XL-Fortran.cmake create mode 100644 Modules/Platform/Linux-como.cmake create mode 100644 Modules/Platform/Linux.cmake create mode 100644 Modules/Platform/MP-RAS.cmake create mode 100644 Modules/Platform/NetBSD.cmake create mode 100644 Modules/Platform/OSF1.cmake create mode 100644 Modules/Platform/OpenBSD.cmake create mode 100644 Modules/Platform/OpenVMS.cmake create mode 100644 Modules/Platform/QNX.cmake create mode 100644 Modules/Platform/RISCos.cmake create mode 100644 Modules/Platform/SCO_SV.cmake create mode 100644 Modules/Platform/SINIX.cmake create mode 100644 Modules/Platform/SunOS-GNU-C.cmake create mode 100644 Modules/Platform/SunOS-GNU-CXX.cmake create mode 100644 Modules/Platform/SunOS-GNU-Fortran.cmake create mode 100644 Modules/Platform/SunOS-GNU.cmake create mode 100644 Modules/Platform/SunOS.cmake create mode 100644 Modules/Platform/Tru64.cmake create mode 100644 Modules/Platform/ULTRIX.cmake create mode 100644 Modules/Platform/UNIX_SV.cmake create mode 100644 Modules/Platform/UnixPaths.cmake create mode 100644 Modules/Platform/UnixWare.cmake create mode 100644 Modules/Platform/Windows-Borland-C.cmake create mode 100644 Modules/Platform/Windows-Borland-CXX.cmake create mode 100644 Modules/Platform/Windows-Embarcadero-C.cmake create mode 100644 Modules/Platform/Windows-Embarcadero-CXX.cmake create mode 100644 Modules/Platform/Windows-Embarcadero.cmake create mode 100644 Modules/Platform/Windows-G95-Fortran.cmake create mode 100644 Modules/Platform/Windows-GNU-C-ABI.cmake create mode 100644 Modules/Platform/Windows-GNU-C.cmake create mode 100644 Modules/Platform/Windows-GNU-CXX-ABI.cmake create mode 100644 Modules/Platform/Windows-GNU-CXX.cmake create mode 100644 Modules/Platform/Windows-GNU-Fortran-ABI.cmake create mode 100644 Modules/Platform/Windows-GNU-Fortran.cmake create mode 100644 Modules/Platform/Windows-GNU.cmake create mode 100644 Modules/Platform/Windows-Intel-ASM.cmake create mode 100644 Modules/Platform/Windows-Intel-C.cmake create mode 100644 Modules/Platform/Windows-Intel-CXX.cmake create mode 100644 Modules/Platform/Windows-Intel-Fortran.cmake create mode 100644 Modules/Platform/Windows-Intel.cmake create mode 100644 Modules/Platform/Windows-NMcl.cmake create mode 100644 Modules/Platform/Windows-cl.cmake create mode 100644 Modules/Platform/Windows-cl.cmake.in create mode 100644 Modules/Platform/Windows-df.cmake create mode 100644 Modules/Platform/Windows-wcl386.cmake create mode 100644 Modules/Platform/Windows-windres.cmake create mode 100644 Modules/Platform/Windows.cmake create mode 100644 Modules/Platform/WindowsPaths.cmake create mode 100644 Modules/Platform/Xenix.cmake create mode 100644 Modules/Platform/cl.cmake create mode 100644 Modules/Platform/eCos.cmake create mode 100644 Modules/Platform/gas.cmake create mode 100644 Modules/Platform/kFreeBSD.cmake create mode 100644 Modules/Platform/syllable.cmake create mode 100644 Modules/ProcessorCount.cmake create mode 100644 Modules/Qt4ConfigDependentSettings.cmake create mode 100644 Modules/Qt4Macros.cmake create mode 100644 Modules/RepositoryInfo.txt.in create mode 100644 Modules/SelectLibraryConfigurations.cmake create mode 100755 Modules/SquishRunTestCase.bat create mode 100755 Modules/SquishRunTestCase.sh create mode 100644 Modules/SquishTestScript.cmake create mode 100644 Modules/SystemInformation.cmake create mode 100644 Modules/SystemInformation.in create mode 100644 Modules/TestBigEndian.cmake create mode 100644 Modules/TestCXXAcceptsFlag.cmake create mode 100644 Modules/TestEndianess.c.in create mode 100644 Modules/TestForANSIForScope.cmake create mode 100644 Modules/TestForANSIStreamHeaders.cmake create mode 100644 Modules/TestForANSIStreamHeaders.cxx create mode 100644 Modules/TestForAnsiForScope.cxx create mode 100644 Modules/TestForSSTREAM.cmake create mode 100644 Modules/TestForSSTREAM.cxx create mode 100644 Modules/TestForSTDNamespace.cmake create mode 100644 Modules/TestForSTDNamespace.cxx create mode 100644 Modules/UseEcos.cmake create mode 100644 Modules/UseJava.cmake create mode 100644 Modules/UseJavaClassFilelist.cmake create mode 100644 Modules/UseJavaSymlinks.cmake create mode 100644 Modules/UsePkgConfig.cmake create mode 100644 Modules/UseQt4.cmake create mode 100644 Modules/UseSWIG.cmake create mode 100644 Modules/UseVTK40.cmake create mode 100644 Modules/UseVTKBuildSettings40.cmake create mode 100644 Modules/UseVTKConfig40.cmake create mode 100644 Modules/Use_wxWindows.cmake create mode 100644 Modules/UsewxWidgets.cmake create mode 100644 Modules/VTKCompatibility.cmake create mode 100644 Modules/WriteBasicConfigVersionFile.cmake create mode 100644 Modules/ecos_clean.cmake create mode 100644 Modules/exportheader.cmake.in create mode 100644 Modules/kde3init_dummy.cpp.in create mode 100644 Modules/kde3uic.cmake create mode 100644 Modules/readme.txt create mode 100644 Readme.txt create mode 100644 Source/.cvsignore create mode 100644 Source/.gitattributes create mode 100644 Source/CMakeLists.txt create mode 100644 Source/CMakeVersionSource.cmake create mode 100644 Source/CPack/OSXLauncherScript.scpt create mode 100644 Source/CPack/OSXScriptLauncher.cxx create mode 100644 Source/CPack/bills-comments.txt create mode 100644 Source/CPack/cmCPackArchiveGenerator.cxx create mode 100644 Source/CPack/cmCPackArchiveGenerator.h create mode 100644 Source/CPack/cmCPackBundleGenerator.cxx create mode 100644 Source/CPack/cmCPackBundleGenerator.h create mode 100644 Source/CPack/cmCPackComponentGroup.cxx create mode 100644 Source/CPack/cmCPackComponentGroup.h create mode 100644 Source/CPack/cmCPackConfigure.h.in create mode 100644 Source/CPack/cmCPackCygwinBinaryGenerator.cxx create mode 100644 Source/CPack/cmCPackCygwinBinaryGenerator.h create mode 100644 Source/CPack/cmCPackCygwinSourceGenerator.cxx create mode 100644 Source/CPack/cmCPackCygwinSourceGenerator.h create mode 100644 Source/CPack/cmCPackDebGenerator.cxx create mode 100644 Source/CPack/cmCPackDebGenerator.h create mode 100644 Source/CPack/cmCPackDocumentMacros.cxx create mode 100644 Source/CPack/cmCPackDocumentMacros.h create mode 100644 Source/CPack/cmCPackDocumentVariables.cxx create mode 100644 Source/CPack/cmCPackDocumentVariables.h create mode 100644 Source/CPack/cmCPackDragNDropGenerator.cxx create mode 100644 Source/CPack/cmCPackDragNDropGenerator.h create mode 100644 Source/CPack/cmCPackGenerator.cxx create mode 100644 Source/CPack/cmCPackGenerator.h create mode 100644 Source/CPack/cmCPackGeneratorFactory.cxx create mode 100644 Source/CPack/cmCPackGeneratorFactory.h create mode 100644 Source/CPack/cmCPackLog.cxx create mode 100644 Source/CPack/cmCPackLog.h create mode 100644 Source/CPack/cmCPackNSISGenerator.cxx create mode 100644 Source/CPack/cmCPackNSISGenerator.h create mode 100644 Source/CPack/cmCPackOSXX11Generator.cxx create mode 100644 Source/CPack/cmCPackOSXX11Generator.h create mode 100644 Source/CPack/cmCPackPackageMakerGenerator.cxx create mode 100644 Source/CPack/cmCPackPackageMakerGenerator.h create mode 100644 Source/CPack/cmCPackRPMGenerator.cxx create mode 100644 Source/CPack/cmCPackRPMGenerator.h create mode 100644 Source/CPack/cmCPackSTGZGenerator.cxx create mode 100644 Source/CPack/cmCPackSTGZGenerator.h create mode 100644 Source/CPack/cmCPackTGZGenerator.cxx create mode 100644 Source/CPack/cmCPackTGZGenerator.h create mode 100644 Source/CPack/cmCPackTarBZip2Generator.cxx create mode 100644 Source/CPack/cmCPackTarBZip2Generator.h create mode 100644 Source/CPack/cmCPackTarCompressGenerator.cxx create mode 100644 Source/CPack/cmCPackTarCompressGenerator.h create mode 100644 Source/CPack/cmCPackZIPGenerator.cxx create mode 100644 Source/CPack/cmCPackZIPGenerator.h create mode 100644 Source/CPack/cpack.cxx create mode 100644 Source/CPack/cygwin.readme create mode 100644 Source/CTest/cmCTestBZR.cxx create mode 100644 Source/CTest/cmCTestBZR.h create mode 100644 Source/CTest/cmCTestBatchTestHandler.cxx create mode 100644 Source/CTest/cmCTestBatchTestHandler.h create mode 100644 Source/CTest/cmCTestBuildAndTestHandler.cxx create mode 100644 Source/CTest/cmCTestBuildAndTestHandler.h create mode 100644 Source/CTest/cmCTestBuildCommand.cxx create mode 100644 Source/CTest/cmCTestBuildCommand.h create mode 100644 Source/CTest/cmCTestBuildHandler.cxx create mode 100644 Source/CTest/cmCTestBuildHandler.h create mode 100644 Source/CTest/cmCTestCVS.cxx create mode 100644 Source/CTest/cmCTestCVS.h create mode 100644 Source/CTest/cmCTestCommand.h create mode 100644 Source/CTest/cmCTestConfigureCommand.cxx create mode 100644 Source/CTest/cmCTestConfigureCommand.h create mode 100644 Source/CTest/cmCTestConfigureHandler.cxx create mode 100644 Source/CTest/cmCTestConfigureHandler.h create mode 100644 Source/CTest/cmCTestCoverageCommand.cxx create mode 100644 Source/CTest/cmCTestCoverageCommand.h create mode 100644 Source/CTest/cmCTestCoverageHandler.cxx create mode 100644 Source/CTest/cmCTestCoverageHandler.h create mode 100644 Source/CTest/cmCTestEmptyBinaryDirectoryCommand.cxx create mode 100644 Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h create mode 100644 Source/CTest/cmCTestGIT.cxx create mode 100644 Source/CTest/cmCTestGIT.h create mode 100644 Source/CTest/cmCTestGenericHandler.cxx create mode 100644 Source/CTest/cmCTestGenericHandler.h create mode 100644 Source/CTest/cmCTestGlobalVC.cxx create mode 100644 Source/CTest/cmCTestGlobalVC.h create mode 100644 Source/CTest/cmCTestHG.cxx create mode 100644 Source/CTest/cmCTestHG.h create mode 100644 Source/CTest/cmCTestHandlerCommand.cxx create mode 100644 Source/CTest/cmCTestHandlerCommand.h create mode 100644 Source/CTest/cmCTestLaunch.cxx create mode 100644 Source/CTest/cmCTestLaunch.h create mode 100644 Source/CTest/cmCTestMemCheckCommand.cxx create mode 100644 Source/CTest/cmCTestMemCheckCommand.h create mode 100644 Source/CTest/cmCTestMemCheckHandler.cxx create mode 100644 Source/CTest/cmCTestMemCheckHandler.h create mode 100644 Source/CTest/cmCTestMultiProcessHandler.cxx create mode 100644 Source/CTest/cmCTestMultiProcessHandler.h create mode 100644 Source/CTest/cmCTestReadCustomFilesCommand.cxx create mode 100644 Source/CTest/cmCTestReadCustomFilesCommand.h create mode 100644 Source/CTest/cmCTestRunScriptCommand.cxx create mode 100644 Source/CTest/cmCTestRunScriptCommand.h create mode 100644 Source/CTest/cmCTestRunTest.cxx create mode 100644 Source/CTest/cmCTestRunTest.h create mode 100644 Source/CTest/cmCTestSVN.cxx create mode 100644 Source/CTest/cmCTestSVN.h create mode 100644 Source/CTest/cmCTestScriptHandler.cxx create mode 100644 Source/CTest/cmCTestScriptHandler.h create mode 100644 Source/CTest/cmCTestSleepCommand.cxx create mode 100644 Source/CTest/cmCTestSleepCommand.h create mode 100644 Source/CTest/cmCTestStartCommand.cxx create mode 100644 Source/CTest/cmCTestStartCommand.h create mode 100644 Source/CTest/cmCTestSubmitCommand.cxx create mode 100644 Source/CTest/cmCTestSubmitCommand.h create mode 100644 Source/CTest/cmCTestSubmitHandler.cxx create mode 100644 Source/CTest/cmCTestSubmitHandler.h create mode 100644 Source/CTest/cmCTestTestCommand.cxx create mode 100644 Source/CTest/cmCTestTestCommand.h create mode 100644 Source/CTest/cmCTestTestHandler.cxx create mode 100644 Source/CTest/cmCTestTestHandler.h create mode 100644 Source/CTest/cmCTestUpdateCommand.cxx create mode 100644 Source/CTest/cmCTestUpdateCommand.h create mode 100644 Source/CTest/cmCTestUpdateHandler.cxx create mode 100644 Source/CTest/cmCTestUpdateHandler.h create mode 100644 Source/CTest/cmCTestUploadCommand.cxx create mode 100644 Source/CTest/cmCTestUploadCommand.h create mode 100644 Source/CTest/cmCTestUploadHandler.cxx create mode 100644 Source/CTest/cmCTestUploadHandler.h create mode 100644 Source/CTest/cmCTestVC.cxx create mode 100644 Source/CTest/cmCTestVC.h create mode 100644 Source/CTest/cmParsePHPCoverage.cxx create mode 100644 Source/CTest/cmParsePHPCoverage.h create mode 100644 Source/CTest/cmProcess.cxx create mode 100644 Source/CTest/cmProcess.h create mode 100644 Source/CursesDialog/.NoDartCoverage create mode 100644 Source/CursesDialog/CMakeLists.txt create mode 100644 Source/CursesDialog/ccmake.cxx create mode 100644 Source/CursesDialog/cmCursesBoolWidget.cxx create mode 100644 Source/CursesDialog/cmCursesBoolWidget.h create mode 100644 Source/CursesDialog/cmCursesCacheEntryComposite.cxx create mode 100644 Source/CursesDialog/cmCursesCacheEntryComposite.h create mode 100644 Source/CursesDialog/cmCursesDummyWidget.cxx create mode 100644 Source/CursesDialog/cmCursesDummyWidget.h create mode 100644 Source/CursesDialog/cmCursesFilePathWidget.cxx create mode 100644 Source/CursesDialog/cmCursesFilePathWidget.h create mode 100644 Source/CursesDialog/cmCursesForm.cxx create mode 100644 Source/CursesDialog/cmCursesForm.h create mode 100644 Source/CursesDialog/cmCursesLabelWidget.cxx create mode 100644 Source/CursesDialog/cmCursesLabelWidget.h create mode 100644 Source/CursesDialog/cmCursesLongMessageForm.cxx create mode 100644 Source/CursesDialog/cmCursesLongMessageForm.h create mode 100644 Source/CursesDialog/cmCursesMainForm.cxx create mode 100644 Source/CursesDialog/cmCursesMainForm.h create mode 100644 Source/CursesDialog/cmCursesPathWidget.cxx create mode 100644 Source/CursesDialog/cmCursesPathWidget.h create mode 100644 Source/CursesDialog/cmCursesStandardIncludes.h create mode 100644 Source/CursesDialog/cmCursesStringWidget.cxx create mode 100644 Source/CursesDialog/cmCursesStringWidget.h create mode 100644 Source/CursesDialog/cmCursesWidget.cxx create mode 100644 Source/CursesDialog/cmCursesWidget.h create mode 100644 Source/CursesDialog/form/.NoDartCoverage create mode 100644 Source/CursesDialog/form/CMakeLists.txt create mode 100644 Source/CursesDialog/form/READ.ME create mode 100644 Source/CursesDialog/form/cmFormConfigure.h.in create mode 100644 Source/CursesDialog/form/eti.h create mode 100644 Source/CursesDialog/form/fld_arg.c create mode 100644 Source/CursesDialog/form/fld_attr.c create mode 100644 Source/CursesDialog/form/fld_current.c create mode 100644 Source/CursesDialog/form/fld_def.c create mode 100644 Source/CursesDialog/form/fld_dup.c create mode 100644 Source/CursesDialog/form/fld_ftchoice.c create mode 100644 Source/CursesDialog/form/fld_ftlink.c create mode 100644 Source/CursesDialog/form/fld_info.c create mode 100644 Source/CursesDialog/form/fld_just.c create mode 100644 Source/CursesDialog/form/fld_link.c create mode 100644 Source/CursesDialog/form/fld_max.c create mode 100644 Source/CursesDialog/form/fld_move.c create mode 100644 Source/CursesDialog/form/fld_newftyp.c create mode 100644 Source/CursesDialog/form/fld_opts.c create mode 100644 Source/CursesDialog/form/fld_pad.c create mode 100644 Source/CursesDialog/form/fld_page.c create mode 100644 Source/CursesDialog/form/fld_stat.c create mode 100644 Source/CursesDialog/form/fld_type.c create mode 100644 Source/CursesDialog/form/fld_user.c create mode 100644 Source/CursesDialog/form/form.h create mode 100644 Source/CursesDialog/form/form.priv.h create mode 100644 Source/CursesDialog/form/frm_cursor.c create mode 100644 Source/CursesDialog/form/frm_data.c create mode 100644 Source/CursesDialog/form/frm_def.c create mode 100644 Source/CursesDialog/form/frm_driver.c create mode 100644 Source/CursesDialog/form/frm_hook.c create mode 100644 Source/CursesDialog/form/frm_opts.c create mode 100644 Source/CursesDialog/form/frm_page.c create mode 100644 Source/CursesDialog/form/frm_post.c create mode 100644 Source/CursesDialog/form/frm_req_name.c create mode 100644 Source/CursesDialog/form/frm_scale.c create mode 100644 Source/CursesDialog/form/frm_sub.c create mode 100644 Source/CursesDialog/form/frm_user.c create mode 100644 Source/CursesDialog/form/frm_win.c create mode 100644 Source/CursesDialog/form/fty_alnum.c create mode 100644 Source/CursesDialog/form/fty_alpha.c create mode 100644 Source/CursesDialog/form/fty_enum.c create mode 100644 Source/CursesDialog/form/fty_int.c create mode 100644 Source/CursesDialog/form/fty_ipv4.c create mode 100644 Source/CursesDialog/form/fty_num.c create mode 100644 Source/CursesDialog/form/fty_regex.c create mode 100644 Source/CursesDialog/form/llib-lform create mode 100644 Source/CursesDialog/form/mf_common.h create mode 100644 Source/CursesDialog/form/nc_alloc.h create mode 100644 Source/QtDialog/AddCacheEntry.cxx create mode 100644 Source/QtDialog/AddCacheEntry.h create mode 100644 Source/QtDialog/AddCacheEntry.ui create mode 100644 Source/QtDialog/CMake.desktop create mode 100644 Source/QtDialog/CMakeLists.txt create mode 100644 Source/QtDialog/CMakeSetup.cxx create mode 100644 Source/QtDialog/CMakeSetup.icns create mode 100644 Source/QtDialog/CMakeSetup.ico create mode 100644 Source/QtDialog/CMakeSetup.qrc create mode 100644 Source/QtDialog/CMakeSetup.rc create mode 100644 Source/QtDialog/CMakeSetup128.png create mode 100644 Source/QtDialog/CMakeSetup32.png create mode 100644 Source/QtDialog/CMakeSetupDialog.cxx create mode 100644 Source/QtDialog/CMakeSetupDialog.h create mode 100644 Source/QtDialog/CMakeSetupDialog.ui create mode 100644 Source/QtDialog/Compilers.h create mode 100644 Source/QtDialog/Compilers.ui create mode 100644 Source/QtDialog/CrossCompiler.ui create mode 100644 Source/QtDialog/Delete16.png create mode 100644 Source/QtDialog/FirstConfigure.cxx create mode 100644 Source/QtDialog/FirstConfigure.h create mode 100644 Source/QtDialog/MacInstallDialog.ui create mode 100644 Source/QtDialog/Plus16.png create mode 100644 Source/QtDialog/QCMake.cxx create mode 100644 Source/QtDialog/QCMake.h create mode 100644 Source/QtDialog/QCMakeCacheView.cxx create mode 100644 Source/QtDialog/QCMakeCacheView.h create mode 100644 Source/QtDialog/QCMakeWidgets.cxx create mode 100644 Source/QtDialog/QCMakeWidgets.h create mode 100644 Source/QtDialog/QMacInstallDialog.cxx create mode 100644 Source/QtDialog/QMacInstallDialog.h create mode 100644 Source/QtDialog/QtDialogCPack.cmake.in create mode 100644 Source/QtDialog/cmakecache.xml create mode 100755 Source/QtDialog/postflight.sh.in create mode 100755 Source/QtDialog/postupgrade.sh.in create mode 100644 Source/cmAddCustomCommandCommand.cxx create mode 100644 Source/cmAddCustomCommandCommand.h create mode 100644 Source/cmAddCustomTargetCommand.cxx create mode 100644 Source/cmAddCustomTargetCommand.h create mode 100644 Source/cmAddDefinitionsCommand.cxx create mode 100644 Source/cmAddDefinitionsCommand.h create mode 100644 Source/cmAddDependenciesCommand.cxx create mode 100644 Source/cmAddDependenciesCommand.h create mode 100644 Source/cmAddExecutableCommand.cxx create mode 100644 Source/cmAddExecutableCommand.h create mode 100644 Source/cmAddLibraryCommand.cxx create mode 100644 Source/cmAddLibraryCommand.h create mode 100644 Source/cmAddSubDirectoryCommand.cxx create mode 100644 Source/cmAddSubDirectoryCommand.h create mode 100644 Source/cmAddTestCommand.cxx create mode 100644 Source/cmAddTestCommand.h create mode 100644 Source/cmArchiveWrite.cxx create mode 100644 Source/cmArchiveWrite.h create mode 100644 Source/cmAuxSourceDirectoryCommand.cxx create mode 100644 Source/cmAuxSourceDirectoryCommand.h create mode 100644 Source/cmBootstrapCommands.cxx create mode 100644 Source/cmBreakCommand.cxx create mode 100644 Source/cmBreakCommand.h create mode 100644 Source/cmBuildCommand.cxx create mode 100644 Source/cmBuildCommand.h create mode 100644 Source/cmBuildNameCommand.cxx create mode 100644 Source/cmBuildNameCommand.h create mode 100644 Source/cmCMakeMinimumRequired.cxx create mode 100644 Source/cmCMakeMinimumRequired.h create mode 100644 Source/cmCMakePolicyCommand.cxx create mode 100644 Source/cmCMakePolicyCommand.h create mode 100644 Source/cmCPluginAPI.cxx create mode 100644 Source/cmCPluginAPI.h create mode 100644 Source/cmCTest.cxx create mode 100644 Source/cmCTest.h create mode 100644 Source/cmCacheManager.cxx create mode 100644 Source/cmCacheManager.h create mode 100644 Source/cmCallVisualStudioMacro.cxx create mode 100644 Source/cmCallVisualStudioMacro.h create mode 100644 Source/cmCommand.h create mode 100644 Source/cmCommandArgumentLexer.cxx create mode 100644 Source/cmCommandArgumentLexer.h create mode 100644 Source/cmCommandArgumentLexer.in.l create mode 100644 Source/cmCommandArgumentParser.cxx create mode 100644 Source/cmCommandArgumentParser.y create mode 100644 Source/cmCommandArgumentParserHelper.cxx create mode 100644 Source/cmCommandArgumentParserHelper.h create mode 100644 Source/cmCommandArgumentParserTokens.h create mode 100644 Source/cmCommandArgumentsHelper.cxx create mode 100644 Source/cmCommandArgumentsHelper.h create mode 100644 Source/cmCommands.cxx create mode 100644 Source/cmCommands.h create mode 100644 Source/cmComputeComponentGraph.cxx create mode 100644 Source/cmComputeComponentGraph.h create mode 100644 Source/cmComputeLinkDepends.cxx create mode 100644 Source/cmComputeLinkDepends.h create mode 100644 Source/cmComputeLinkInformation.cxx create mode 100644 Source/cmComputeLinkInformation.h create mode 100644 Source/cmComputeTargetDepends.cxx create mode 100644 Source/cmComputeTargetDepends.h create mode 100644 Source/cmConfigure.cmake.h.in create mode 100644 Source/cmConfigureFileCommand.cxx create mode 100644 Source/cmConfigureFileCommand.h create mode 100644 Source/cmCoreTryCompile.cxx create mode 100644 Source/cmCoreTryCompile.h create mode 100644 Source/cmCreateTestSourceList.cxx create mode 100644 Source/cmCreateTestSourceList.h create mode 100644 Source/cmCryptoHash.cxx create mode 100644 Source/cmCryptoHash.h create mode 100644 Source/cmCustomCommand.cxx create mode 100644 Source/cmCustomCommand.h create mode 100644 Source/cmCustomCommandGenerator.cxx create mode 100644 Source/cmCustomCommandGenerator.h create mode 100644 Source/cmDefinePropertyCommand.cxx create mode 100644 Source/cmDefinePropertyCommand.h create mode 100644 Source/cmDefinitions.cxx create mode 100644 Source/cmDefinitions.h create mode 100644 Source/cmDepends.cxx create mode 100644 Source/cmDepends.h create mode 100644 Source/cmDependsC.cxx create mode 100644 Source/cmDependsC.h create mode 100644 Source/cmDependsFortran.cxx create mode 100644 Source/cmDependsFortran.h create mode 100644 Source/cmDependsFortranLexer.cxx create mode 100644 Source/cmDependsFortranLexer.h create mode 100644 Source/cmDependsFortranLexer.in.l create mode 100644 Source/cmDependsFortranParser.cxx create mode 100644 Source/cmDependsFortranParser.h create mode 100644 Source/cmDependsFortranParser.y create mode 100644 Source/cmDependsFortranParserTokens.h create mode 100644 Source/cmDependsJava.cxx create mode 100644 Source/cmDependsJava.h create mode 100644 Source/cmDependsJavaLexer.cxx create mode 100644 Source/cmDependsJavaLexer.h create mode 100644 Source/cmDependsJavaLexer.in.l create mode 100644 Source/cmDependsJavaParser.cxx create mode 100644 Source/cmDependsJavaParser.y create mode 100644 Source/cmDependsJavaParserHelper.cxx create mode 100644 Source/cmDependsJavaParserHelper.h create mode 100644 Source/cmDependsJavaParserTokens.h create mode 100644 Source/cmDocumentCompileDefinitions.h create mode 100644 Source/cmDocumentGeneratorExpressions.h create mode 100644 Source/cmDocumentLocationUndefined.h create mode 100644 Source/cmDocumentVariables.cxx create mode 100644 Source/cmDocumentVariables.h create mode 100644 Source/cmDocumentation.cxx create mode 100644 Source/cmDocumentation.h create mode 100644 Source/cmDocumentationFormatter.cxx create mode 100644 Source/cmDocumentationFormatter.h create mode 100644 Source/cmDocumentationFormatterDocbook.cxx create mode 100644 Source/cmDocumentationFormatterDocbook.h create mode 100644 Source/cmDocumentationFormatterHTML.cxx create mode 100644 Source/cmDocumentationFormatterHTML.h create mode 100644 Source/cmDocumentationFormatterMan.cxx create mode 100644 Source/cmDocumentationFormatterMan.h create mode 100644 Source/cmDocumentationFormatterText.cxx create mode 100644 Source/cmDocumentationFormatterText.h create mode 100644 Source/cmDocumentationFormatterUsage.cxx create mode 100644 Source/cmDocumentationFormatterUsage.h create mode 100644 Source/cmDocumentationSection.cxx create mode 100644 Source/cmDocumentationSection.h create mode 100644 Source/cmDynamicLoader.cxx create mode 100644 Source/cmDynamicLoader.h create mode 100644 Source/cmELF.cxx create mode 100644 Source/cmELF.h create mode 100644 Source/cmElseCommand.cxx create mode 100644 Source/cmElseCommand.h create mode 100644 Source/cmElseIfCommand.cxx create mode 100644 Source/cmElseIfCommand.h create mode 100644 Source/cmEnableLanguageCommand.cxx create mode 100644 Source/cmEnableLanguageCommand.h create mode 100644 Source/cmEnableTestingCommand.cxx create mode 100644 Source/cmEnableTestingCommand.h create mode 100644 Source/cmEndForEachCommand.cxx create mode 100644 Source/cmEndForEachCommand.h create mode 100644 Source/cmEndFunctionCommand.cxx create mode 100644 Source/cmEndFunctionCommand.h create mode 100644 Source/cmEndIfCommand.cxx create mode 100644 Source/cmEndIfCommand.h create mode 100644 Source/cmEndMacroCommand.cxx create mode 100644 Source/cmEndMacroCommand.h create mode 100644 Source/cmEndWhileCommand.cxx create mode 100644 Source/cmEndWhileCommand.h create mode 100644 Source/cmExecProgramCommand.cxx create mode 100644 Source/cmExecProgramCommand.h create mode 100644 Source/cmExecuteProcessCommand.cxx create mode 100644 Source/cmExecuteProcessCommand.h create mode 100644 Source/cmExecutionStatus.h create mode 100644 Source/cmExportBuildFileGenerator.cxx create mode 100644 Source/cmExportBuildFileGenerator.h create mode 100644 Source/cmExportCommand.cxx create mode 100644 Source/cmExportCommand.h create mode 100644 Source/cmExportFileGenerator.cxx create mode 100644 Source/cmExportFileGenerator.h create mode 100644 Source/cmExportInstallFileGenerator.cxx create mode 100644 Source/cmExportInstallFileGenerator.h create mode 100644 Source/cmExportLibraryDependencies.cxx create mode 100644 Source/cmExportLibraryDependencies.h create mode 100644 Source/cmExprLexer.cxx create mode 100644 Source/cmExprLexer.h create mode 100644 Source/cmExprLexer.in.l create mode 100644 Source/cmExprParser.cxx create mode 100644 Source/cmExprParser.y create mode 100644 Source/cmExprParserHelper.cxx create mode 100644 Source/cmExprParserHelper.h create mode 100644 Source/cmExprParserTokens.h create mode 100644 Source/cmExternalMakefileProjectGenerator.cxx create mode 100644 Source/cmExternalMakefileProjectGenerator.h create mode 100644 Source/cmExtraCodeBlocksGenerator.cxx create mode 100644 Source/cmExtraCodeBlocksGenerator.h create mode 100644 Source/cmExtraEclipseCDT4Generator.cxx create mode 100644 Source/cmExtraEclipseCDT4Generator.h create mode 100644 Source/cmFLTKWrapUICommand.cxx create mode 100644 Source/cmFLTKWrapUICommand.h create mode 100644 Source/cmFileCommand.cxx create mode 100644 Source/cmFileCommand.h create mode 100644 Source/cmFileTimeComparison.cxx create mode 100644 Source/cmFileTimeComparison.h create mode 100644 Source/cmFindBase.cxx create mode 100644 Source/cmFindBase.h create mode 100644 Source/cmFindCommon.cxx create mode 100644 Source/cmFindCommon.h create mode 100644 Source/cmFindFileCommand.cxx create mode 100644 Source/cmFindFileCommand.h create mode 100644 Source/cmFindLibraryCommand.cxx create mode 100644 Source/cmFindLibraryCommand.h create mode 100644 Source/cmFindPackageCommand.cxx create mode 100644 Source/cmFindPackageCommand.h create mode 100644 Source/cmFindPathCommand.cxx create mode 100644 Source/cmFindPathCommand.h create mode 100644 Source/cmFindProgramCommand.cxx create mode 100644 Source/cmFindProgramCommand.h create mode 100644 Source/cmForEachCommand.cxx create mode 100644 Source/cmForEachCommand.h create mode 100644 Source/cmFunctionBlocker.h create mode 100644 Source/cmFunctionCommand.cxx create mode 100644 Source/cmFunctionCommand.h create mode 100644 Source/cmGeneratedFileStream.cxx create mode 100644 Source/cmGeneratedFileStream.h create mode 100644 Source/cmGeneratorExpression.cxx create mode 100644 Source/cmGeneratorExpression.h create mode 100644 Source/cmGeneratorTarget.cxx create mode 100644 Source/cmGeneratorTarget.h create mode 100644 Source/cmGetCMakePropertyCommand.cxx create mode 100644 Source/cmGetCMakePropertyCommand.h create mode 100644 Source/cmGetDirectoryPropertyCommand.cxx create mode 100644 Source/cmGetDirectoryPropertyCommand.h create mode 100644 Source/cmGetFilenameComponentCommand.cxx create mode 100644 Source/cmGetFilenameComponentCommand.h create mode 100644 Source/cmGetPropertyCommand.cxx create mode 100644 Source/cmGetPropertyCommand.h create mode 100644 Source/cmGetSourceFilePropertyCommand.cxx create mode 100644 Source/cmGetSourceFilePropertyCommand.h create mode 100644 Source/cmGetTargetPropertyCommand.cxx create mode 100644 Source/cmGetTargetPropertyCommand.h create mode 100644 Source/cmGetTestPropertyCommand.cxx create mode 100644 Source/cmGetTestPropertyCommand.h create mode 100644 Source/cmGlobalBorlandMakefileGenerator.cxx create mode 100644 Source/cmGlobalBorlandMakefileGenerator.h create mode 100644 Source/cmGlobalGenerator.cxx create mode 100644 Source/cmGlobalGenerator.h create mode 100644 Source/cmGlobalJOMMakefileGenerator.cxx create mode 100644 Source/cmGlobalJOMMakefileGenerator.h create mode 100644 Source/cmGlobalKdevelopGenerator.cxx create mode 100644 Source/cmGlobalKdevelopGenerator.h create mode 100644 Source/cmGlobalMSYSMakefileGenerator.cxx create mode 100644 Source/cmGlobalMSYSMakefileGenerator.h create mode 100644 Source/cmGlobalMinGWMakefileGenerator.cxx create mode 100644 Source/cmGlobalMinGWMakefileGenerator.h create mode 100644 Source/cmGlobalNMakeMakefileGenerator.cxx create mode 100644 Source/cmGlobalNMakeMakefileGenerator.h create mode 100644 Source/cmGlobalNinjaGenerator.cxx create mode 100644 Source/cmGlobalNinjaGenerator.h create mode 100644 Source/cmGlobalUnixMakefileGenerator3.cxx create mode 100644 Source/cmGlobalUnixMakefileGenerator3.h create mode 100644 Source/cmGlobalVisualStudio10Generator.cxx create mode 100644 Source/cmGlobalVisualStudio10Generator.h create mode 100644 Source/cmGlobalVisualStudio10IA64Generator.cxx create mode 100644 Source/cmGlobalVisualStudio10IA64Generator.h create mode 100644 Source/cmGlobalVisualStudio10Win64Generator.cxx create mode 100644 Source/cmGlobalVisualStudio10Win64Generator.h create mode 100644 Source/cmGlobalVisualStudio11Generator.cxx create mode 100644 Source/cmGlobalVisualStudio11Generator.h create mode 100644 Source/cmGlobalVisualStudio11Win64Generator.cxx create mode 100644 Source/cmGlobalVisualStudio11Win64Generator.h create mode 100644 Source/cmGlobalVisualStudio6Generator.cxx create mode 100644 Source/cmGlobalVisualStudio6Generator.h create mode 100644 Source/cmGlobalVisualStudio71Generator.cxx create mode 100644 Source/cmGlobalVisualStudio71Generator.h create mode 100644 Source/cmGlobalVisualStudio7Generator.cxx create mode 100644 Source/cmGlobalVisualStudio7Generator.h create mode 100644 Source/cmGlobalVisualStudio8Generator.cxx create mode 100644 Source/cmGlobalVisualStudio8Generator.h create mode 100644 Source/cmGlobalVisualStudio8Win64Generator.cxx create mode 100644 Source/cmGlobalVisualStudio8Win64Generator.h create mode 100644 Source/cmGlobalVisualStudio9Generator.cxx create mode 100644 Source/cmGlobalVisualStudio9Generator.h create mode 100644 Source/cmGlobalVisualStudio9IA64Generator.cxx create mode 100644 Source/cmGlobalVisualStudio9IA64Generator.h create mode 100644 Source/cmGlobalVisualStudio9Win64Generator.cxx create mode 100644 Source/cmGlobalVisualStudio9Win64Generator.h create mode 100644 Source/cmGlobalVisualStudioGenerator.cxx create mode 100644 Source/cmGlobalVisualStudioGenerator.h create mode 100644 Source/cmGlobalWatcomWMakeGenerator.cxx create mode 100644 Source/cmGlobalWatcomWMakeGenerator.h create mode 100644 Source/cmGlobalXCodeGenerator.cxx create mode 100644 Source/cmGlobalXCodeGenerator.h create mode 100644 Source/cmGraphAdjacencyList.h create mode 100644 Source/cmGraphVizWriter.cxx create mode 100644 Source/cmGraphVizWriter.h create mode 100644 Source/cmHexFileConverter.cxx create mode 100644 Source/cmHexFileConverter.h create mode 100644 Source/cmIDEFlagTable.h create mode 100644 Source/cmIDEOptions.cxx create mode 100644 Source/cmIDEOptions.h create mode 100644 Source/cmIfCommand.cxx create mode 100644 Source/cmIfCommand.h create mode 100644 Source/cmIncludeCommand.cxx create mode 100644 Source/cmIncludeCommand.h create mode 100644 Source/cmIncludeDirectoryCommand.cxx create mode 100644 Source/cmIncludeDirectoryCommand.h create mode 100644 Source/cmIncludeExternalMSProjectCommand.cxx create mode 100644 Source/cmIncludeExternalMSProjectCommand.h create mode 100644 Source/cmIncludeRegularExpressionCommand.cxx create mode 100644 Source/cmIncludeRegularExpressionCommand.h create mode 100644 Source/cmInstallCommand.cxx create mode 100644 Source/cmInstallCommand.h create mode 100644 Source/cmInstallCommandArguments.cxx create mode 100644 Source/cmInstallCommandArguments.h create mode 100644 Source/cmInstallDirectoryGenerator.cxx create mode 100644 Source/cmInstallDirectoryGenerator.h create mode 100644 Source/cmInstallExportGenerator.cxx create mode 100644 Source/cmInstallExportGenerator.h create mode 100644 Source/cmInstallFilesCommand.cxx create mode 100644 Source/cmInstallFilesCommand.h create mode 100644 Source/cmInstallFilesGenerator.cxx create mode 100644 Source/cmInstallFilesGenerator.h create mode 100644 Source/cmInstallGenerator.cxx create mode 100644 Source/cmInstallGenerator.h create mode 100644 Source/cmInstallProgramsCommand.cxx create mode 100644 Source/cmInstallProgramsCommand.h create mode 100644 Source/cmInstallScriptGenerator.cxx create mode 100644 Source/cmInstallScriptGenerator.h create mode 100644 Source/cmInstallTargetGenerator.cxx create mode 100644 Source/cmInstallTargetGenerator.h create mode 100644 Source/cmInstallTargetsCommand.cxx create mode 100644 Source/cmInstallTargetsCommand.h create mode 100644 Source/cmInstallType.h create mode 100644 Source/cmLinkDirectoriesCommand.cxx create mode 100644 Source/cmLinkDirectoriesCommand.h create mode 100644 Source/cmLinkLibrariesCommand.cxx create mode 100644 Source/cmLinkLibrariesCommand.h create mode 100644 Source/cmListCommand.cxx create mode 100644 Source/cmListCommand.h create mode 100644 Source/cmListFileCache.cxx create mode 100644 Source/cmListFileCache.h create mode 100644 Source/cmListFileLexer.c create mode 100644 Source/cmListFileLexer.h create mode 100644 Source/cmListFileLexer.in.l create mode 100644 Source/cmLoadCacheCommand.cxx create mode 100644 Source/cmLoadCacheCommand.h create mode 100644 Source/cmLoadCommandCommand.cxx create mode 100644 Source/cmLoadCommandCommand.h create mode 100644 Source/cmLocalGenerator.cxx create mode 100644 Source/cmLocalGenerator.h create mode 100644 Source/cmLocalNinjaGenerator.cxx create mode 100644 Source/cmLocalNinjaGenerator.h create mode 100644 Source/cmLocalUnixMakefileGenerator3.cxx create mode 100644 Source/cmLocalUnixMakefileGenerator3.h create mode 100644 Source/cmLocalVisualStudio10Generator.cxx create mode 100644 Source/cmLocalVisualStudio10Generator.h create mode 100644 Source/cmLocalVisualStudio6Generator.cxx create mode 100644 Source/cmLocalVisualStudio6Generator.h create mode 100644 Source/cmLocalVisualStudio7Generator.cxx create mode 100644 Source/cmLocalVisualStudio7Generator.h create mode 100644 Source/cmLocalVisualStudioGenerator.cxx create mode 100644 Source/cmLocalVisualStudioGenerator.h create mode 100644 Source/cmLocalXCodeGenerator.cxx create mode 100644 Source/cmLocalXCodeGenerator.h create mode 100644 Source/cmMacroCommand.cxx create mode 100644 Source/cmMacroCommand.h create mode 100644 Source/cmMakeDepend.cxx create mode 100644 Source/cmMakeDepend.h create mode 100644 Source/cmMakeDirectoryCommand.cxx create mode 100644 Source/cmMakeDirectoryCommand.h create mode 100644 Source/cmMakefile.cxx create mode 100644 Source/cmMakefile.h create mode 100644 Source/cmMakefileExecutableTargetGenerator.cxx create mode 100644 Source/cmMakefileExecutableTargetGenerator.h create mode 100644 Source/cmMakefileLibraryTargetGenerator.cxx create mode 100644 Source/cmMakefileLibraryTargetGenerator.h create mode 100644 Source/cmMakefileTargetGenerator.cxx create mode 100644 Source/cmMakefileTargetGenerator.h create mode 100644 Source/cmMakefileUtilityTargetGenerator.cxx create mode 100644 Source/cmMakefileUtilityTargetGenerator.h create mode 100644 Source/cmMarkAsAdvancedCommand.cxx create mode 100644 Source/cmMarkAsAdvancedCommand.h create mode 100644 Source/cmMathCommand.cxx create mode 100644 Source/cmMathCommand.h create mode 100644 Source/cmMessageCommand.cxx create mode 100644 Source/cmMessageCommand.h create mode 100644 Source/cmNewLineStyle.cxx create mode 100644 Source/cmNewLineStyle.h create mode 100644 Source/cmNinjaNormalTargetGenerator.cxx create mode 100644 Source/cmNinjaNormalTargetGenerator.h create mode 100644 Source/cmNinjaTargetGenerator.cxx create mode 100644 Source/cmNinjaTargetGenerator.h create mode 100644 Source/cmNinjaTypes.h create mode 100644 Source/cmNinjaUtilityTargetGenerator.cxx create mode 100644 Source/cmNinjaUtilityTargetGenerator.h create mode 100644 Source/cmObject.h create mode 100644 Source/cmOptionCommand.cxx create mode 100644 Source/cmOptionCommand.h create mode 100644 Source/cmOrderDirectories.cxx create mode 100644 Source/cmOrderDirectories.h create mode 100644 Source/cmOutputRequiredFilesCommand.cxx create mode 100644 Source/cmOutputRequiredFilesCommand.h create mode 100644 Source/cmPolicies.cxx create mode 100644 Source/cmPolicies.h create mode 100644 Source/cmProcessTools.cxx create mode 100644 Source/cmProcessTools.h create mode 100644 Source/cmProjectCommand.cxx create mode 100644 Source/cmProjectCommand.h create mode 100644 Source/cmProperty.cxx create mode 100644 Source/cmProperty.h create mode 100644 Source/cmPropertyDefinition.cxx create mode 100644 Source/cmPropertyDefinition.h create mode 100644 Source/cmPropertyDefinitionMap.cxx create mode 100644 Source/cmPropertyDefinitionMap.h create mode 100644 Source/cmPropertyMap.cxx create mode 100644 Source/cmPropertyMap.h create mode 100644 Source/cmQTWrapCPPCommand.cxx create mode 100644 Source/cmQTWrapCPPCommand.h create mode 100644 Source/cmQTWrapUICommand.cxx create mode 100644 Source/cmQTWrapUICommand.h create mode 100644 Source/cmQtAutomoc.cxx create mode 100644 Source/cmQtAutomoc.h create mode 100644 Source/cmRemoveCommand.cxx create mode 100644 Source/cmRemoveCommand.h create mode 100644 Source/cmRemoveDefinitionsCommand.cxx create mode 100644 Source/cmRemoveDefinitionsCommand.h create mode 100644 Source/cmReturnCommand.cxx create mode 100644 Source/cmReturnCommand.h create mode 100644 Source/cmScriptGenerator.cxx create mode 100644 Source/cmScriptGenerator.h create mode 100644 Source/cmSeparateArgumentsCommand.cxx create mode 100644 Source/cmSeparateArgumentsCommand.h create mode 100644 Source/cmSetCommand.cxx create mode 100644 Source/cmSetCommand.h create mode 100644 Source/cmSetDirectoryPropertiesCommand.cxx create mode 100644 Source/cmSetDirectoryPropertiesCommand.h create mode 100644 Source/cmSetPropertyCommand.cxx create mode 100644 Source/cmSetPropertyCommand.h create mode 100644 Source/cmSetSourceFilesPropertiesCommand.cxx create mode 100644 Source/cmSetSourceFilesPropertiesCommand.h create mode 100644 Source/cmSetTargetPropertiesCommand.cxx create mode 100644 Source/cmSetTargetPropertiesCommand.h create mode 100644 Source/cmSetTestsPropertiesCommand.cxx create mode 100644 Source/cmSetTestsPropertiesCommand.h create mode 100644 Source/cmSiteNameCommand.cxx create mode 100644 Source/cmSiteNameCommand.h create mode 100644 Source/cmSourceFile.cxx create mode 100644 Source/cmSourceFile.h create mode 100644 Source/cmSourceFileLocation.cxx create mode 100644 Source/cmSourceFileLocation.h create mode 100644 Source/cmSourceGroup.cxx create mode 100644 Source/cmSourceGroup.h create mode 100644 Source/cmSourceGroupCommand.cxx create mode 100644 Source/cmSourceGroupCommand.h create mode 100644 Source/cmStandardIncludes.cxx create mode 100644 Source/cmStandardIncludes.h create mode 100644 Source/cmStandardLexer.h create mode 100644 Source/cmStringCommand.cxx create mode 100644 Source/cmStringCommand.h create mode 100644 Source/cmSubdirCommand.cxx create mode 100644 Source/cmSubdirCommand.h create mode 100644 Source/cmSubdirDependsCommand.cxx create mode 100644 Source/cmSubdirDependsCommand.h create mode 100644 Source/cmSystemTools.cxx create mode 100644 Source/cmSystemTools.h create mode 100644 Source/cmTarget.cxx create mode 100644 Source/cmTarget.h create mode 100644 Source/cmTargetDepend.h create mode 100644 Source/cmTargetLinkLibrariesCommand.cxx create mode 100644 Source/cmTargetLinkLibrariesCommand.h create mode 100644 Source/cmTest.cxx create mode 100644 Source/cmTest.h create mode 100644 Source/cmTestGenerator.cxx create mode 100644 Source/cmTestGenerator.h create mode 100644 Source/cmTryCompileCommand.cxx create mode 100644 Source/cmTryCompileCommand.h create mode 100644 Source/cmTryRunCommand.cxx create mode 100644 Source/cmTryRunCommand.h create mode 100644 Source/cmUnsetCommand.cxx create mode 100644 Source/cmUnsetCommand.h create mode 100644 Source/cmUseMangledMesaCommand.cxx create mode 100644 Source/cmUseMangledMesaCommand.h create mode 100644 Source/cmUtilitySourceCommand.cxx create mode 100644 Source/cmUtilitySourceCommand.h create mode 100644 Source/cmVS10CLFlagTable.h create mode 100644 Source/cmVS10LibFlagTable.h create mode 100644 Source/cmVS10LinkFlagTable.h create mode 100644 Source/cmVariableRequiresCommand.cxx create mode 100644 Source/cmVariableRequiresCommand.h create mode 100644 Source/cmVariableWatch.cxx create mode 100644 Source/cmVariableWatch.h create mode 100644 Source/cmVariableWatchCommand.cxx create mode 100644 Source/cmVariableWatchCommand.h create mode 100644 Source/cmVersion.cxx create mode 100644 Source/cmVersion.h create mode 100644 Source/cmVersionConfig.h.in create mode 100644 Source/cmVersionMacros.h create mode 100644 Source/cmVisualStudio10TargetGenerator.cxx create mode 100644 Source/cmVisualStudio10TargetGenerator.h create mode 100644 Source/cmVisualStudioGeneratorOptions.cxx create mode 100644 Source/cmVisualStudioGeneratorOptions.h create mode 100644 Source/cmWhileCommand.cxx create mode 100644 Source/cmWhileCommand.h create mode 100644 Source/cmWin32ProcessExecution.cxx create mode 100644 Source/cmWin32ProcessExecution.h create mode 100644 Source/cmWriteFileCommand.cxx create mode 100644 Source/cmWriteFileCommand.h create mode 100644 Source/cmXCode21Object.cxx create mode 100644 Source/cmXCode21Object.h create mode 100644 Source/cmXCodeObject.cxx create mode 100644 Source/cmXCodeObject.h create mode 100644 Source/cmXMLParser.cxx create mode 100644 Source/cmXMLParser.h create mode 100644 Source/cmXMLSafe.cxx create mode 100644 Source/cmXMLSafe.h create mode 100644 Source/cm_sha2.c create mode 100644 Source/cm_sha2.h create mode 100644 Source/cm_sha2_mangle.h create mode 100644 Source/cm_utf8.c create mode 100644 Source/cm_utf8.h create mode 100644 Source/cmake.cxx create mode 100644 Source/cmake.h create mode 100644 Source/cmakemain.cxx create mode 100644 Source/cmaketest.h.in create mode 100644 Source/cmakewizard.cxx create mode 100644 Source/cmakewizard.h create mode 100644 Source/cmakexbuild.cxx create mode 100755 Source/cmparseMSBuildXML.py create mode 100644 Source/cmw9xcom.cxx create mode 100644 Source/ctest.cxx create mode 100644 Source/kwsys/Base64.c create mode 100644 Source/kwsys/Base64.h.in create mode 100644 Source/kwsys/CMakeEmptyInputFile.in create mode 100644 Source/kwsys/CMakeLists.txt create mode 100644 Source/kwsys/CPU.h.in create mode 100644 Source/kwsys/CTestConfig.cmake create mode 100644 Source/kwsys/CommandLineArguments.cxx create mode 100644 Source/kwsys/CommandLineArguments.hxx.in create mode 100644 Source/kwsys/Configure.h.in create mode 100644 Source/kwsys/Configure.hxx.in create mode 100644 Source/kwsys/Copyright.txt create mode 100644 Source/kwsys/DateStamp.h.in create mode 100644 Source/kwsys/Directory.cxx create mode 100644 Source/kwsys/Directory.hxx.in create mode 100644 Source/kwsys/DynamicLoader.cxx create mode 100644 Source/kwsys/DynamicLoader.hxx.in create mode 100644 Source/kwsys/EncodeExecutable.c create mode 100644 Source/kwsys/ExtraTest.cmake.in create mode 100644 Source/kwsys/FundamentalType.h.in create mode 100644 Source/kwsys/Glob.cxx create mode 100644 Source/kwsys/Glob.hxx.in create mode 100644 Source/kwsys/IOStream.cxx create mode 100644 Source/kwsys/IOStream.hxx.in create mode 100644 Source/kwsys/MD5.c create mode 100644 Source/kwsys/MD5.h.in create mode 100644 Source/kwsys/Process.h.in create mode 100644 Source/kwsys/ProcessFwd9x.c create mode 100644 Source/kwsys/ProcessUNIX.c create mode 100644 Source/kwsys/ProcessWin32.c create mode 100644 Source/kwsys/README.txt create mode 100644 Source/kwsys/Registry.cxx create mode 100644 Source/kwsys/Registry.hxx.in create mode 100644 Source/kwsys/RegularExpression.cxx create mode 100644 Source/kwsys/RegularExpression.hxx.in create mode 100644 Source/kwsys/SharedForward.h.in create mode 100644 Source/kwsys/String.c create mode 100644 Source/kwsys/String.h.in create mode 100644 Source/kwsys/String.hxx.in create mode 100644 Source/kwsys/System.c create mode 100644 Source/kwsys/System.h.in create mode 100644 Source/kwsys/SystemInformation.cxx create mode 100644 Source/kwsys/SystemInformation.hxx.in create mode 100644 Source/kwsys/SystemTools.cxx create mode 100644 Source/kwsys/SystemTools.hxx.in create mode 100644 Source/kwsys/Terminal.c create mode 100644 Source/kwsys/Terminal.h.in create mode 100644 Source/kwsys/auto_ptr.hxx.in create mode 100644 Source/kwsys/hash_fun.hxx.in create mode 100644 Source/kwsys/hash_map.hxx.in create mode 100644 Source/kwsys/hash_set.hxx.in create mode 100644 Source/kwsys/hashtable.hxx.in create mode 100644 Source/kwsys/kwsysDateStamp.cmake create mode 100755 Source/kwsys/kwsysDateStamp.py create mode 100755 Source/kwsys/kwsysHeaderDump.pl create mode 100644 Source/kwsys/kwsysPlatformTests.cmake create mode 100644 Source/kwsys/kwsysPlatformTestsC.c create mode 100644 Source/kwsys/kwsysPlatformTestsCXX.cxx create mode 100644 Source/kwsys/kwsysPrivate.h create mode 100644 Source/kwsys/kwsys_cstddef.hxx.in create mode 100644 Source/kwsys/kwsys_ios_fstream.h.in create mode 100644 Source/kwsys/kwsys_ios_iosfwd.h.in create mode 100644 Source/kwsys/kwsys_ios_iostream.h.in create mode 100644 Source/kwsys/kwsys_ios_sstream.h.in create mode 100644 Source/kwsys/kwsys_stl.hxx.in create mode 100644 Source/kwsys/kwsys_stl_string.hxx.in create mode 100644 Source/kwsys/testAutoPtr.cxx create mode 100644 Source/kwsys/testCommandLineArguments.cxx create mode 100644 Source/kwsys/testCommandLineArguments1.cxx create mode 100644 Source/kwsys/testDynamicLoader.cxx create mode 100644 Source/kwsys/testDynload.c create mode 100644 Source/kwsys/testEncode.c create mode 100644 Source/kwsys/testFail.c create mode 100644 Source/kwsys/testHashSTL.cxx create mode 100644 Source/kwsys/testIOS.cxx create mode 100644 Source/kwsys/testProcess.c create mode 100644 Source/kwsys/testRegistry.cxx create mode 100644 Source/kwsys/testSharedForward.c.in create mode 100644 Source/kwsys/testSystemInformation.cxx create mode 100644 Source/kwsys/testSystemTools.bin create mode 100644 Source/kwsys/testSystemTools.cxx create mode 100644 Source/kwsys/testSystemTools.h.in create mode 100644 Source/kwsys/testTerminal.c create mode 100644 Templates/AppleInfo.plist create mode 100644 Templates/CMakeVSMacros1.vsmacros create mode 100644 Templates/CMakeVSMacros2.vsmacros create mode 100644 Templates/CMakeVisualStudio6Configurations.cmake create mode 100644 Templates/CPack.GenericDescription.txt create mode 100644 Templates/CPack.GenericLicense.txt create mode 100644 Templates/CPack.GenericWelcome.txt create mode 100644 Templates/CPackConfig.cmake.in create mode 100644 Templates/CTestScript.cmake.in create mode 100644 Templates/DLLFooter.dsptemplate create mode 100644 Templates/DLLHeader.dsptemplate create mode 100644 Templates/EXEFooter.dsptemplate create mode 100644 Templates/EXEHeader.dsptemplate create mode 100644 Templates/EXEWinHeader.dsptemplate create mode 100644 Templates/TestDriver.cxx.in create mode 100644 Templates/UtilityFooter.dsptemplate create mode 100644 Templates/UtilityHeader.dsptemplate create mode 100755 Templates/cygwin-package.sh.in create mode 100644 Templates/staticLibFooter.dsptemplate create mode 100644 Templates/staticLibHeader.dsptemplate create mode 100644 Tests/.NoDartCoverage create mode 100644 Tests/Architecture/CMakeLists.txt create mode 100644 Tests/Architecture/bar.c create mode 100644 Tests/Architecture/foo.c create mode 100644 Tests/ArgumentExpansion/CMakeLists.txt create mode 100644 Tests/Assembler/CMakeLists.txt create mode 100644 Tests/Assembler/main-linux-x86-gas.s create mode 100644 Tests/Assembler/main.c create mode 100644 Tests/BuildDepends/CMakeLists.txt create mode 100644 Tests/BuildDepends/Project/CMakeLists.txt create mode 100644 Tests/BuildDepends/Project/bar.cxx create mode 100644 Tests/BuildDepends/Project/dep.cxx create mode 100644 Tests/BuildDepends/Project/dep_custom.cxx create mode 100644 Tests/BuildDepends/Project/generator.cxx create mode 100644 Tests/BuildDepends/Project/linkdep.cxx create mode 100644 Tests/BuildDepends/Project/zot.cxx create mode 100644 Tests/BuildDepends/Project/zot_macro_dir.cxx create mode 100644 Tests/BuildDepends/Project/zot_macro_tgt.cxx create mode 100644 Tests/BundleGeneratorTest/BundleIcon.icns create mode 100644 Tests/BundleGeneratorTest/CMakeLists.txt create mode 100644 Tests/BundleGeneratorTest/CustomVolumeIcon.icns create mode 100644 Tests/BundleGeneratorTest/Executable.cxx create mode 100644 Tests/BundleGeneratorTest/Info.plist create mode 100644 Tests/BundleGeneratorTest/Library.cxx create mode 100755 Tests/BundleGeneratorTest/StartupCommand create mode 100644 Tests/BundleTest/BundleLib.cxx create mode 100644 Tests/BundleTest/BundleSubDir/CMakeLists.txt create mode 100644 Tests/BundleTest/BundleTest.cxx create mode 100644 Tests/BundleTest/CMakeLists.txt create mode 100644 Tests/BundleTest/SomeRandomFile.txt create mode 100644 Tests/BundleTest/randomResourceFile.plist.in create mode 100644 Tests/BundleUtilities/CMakeLists.txt create mode 100644 Tests/BundleUtilities/bundleutils.cmake create mode 100644 Tests/BundleUtilities/framework.cpp create mode 100644 Tests/BundleUtilities/framework.h create mode 100644 Tests/BundleUtilities/module.cpp create mode 100644 Tests/BundleUtilities/module.h create mode 100644 Tests/BundleUtilities/shared.cpp create mode 100644 Tests/BundleUtilities/shared.h create mode 100644 Tests/BundleUtilities/shared2.cpp create mode 100644 Tests/BundleUtilities/shared2.h create mode 100644 Tests/BundleUtilities/testbundleutils1.cpp create mode 100644 Tests/BundleUtilities/testbundleutils2.cpp create mode 100644 Tests/BundleUtilities/testbundleutils3.cpp create mode 100644 Tests/CFBundleTest/CMakeLists.txt create mode 100644 Tests/CFBundleTest/ExportList_plugin.txt create mode 100644 Tests/CFBundleTest/Info.plist.in create mode 100644 Tests/CFBundleTest/InfoPlist.strings.in create mode 100644 Tests/CFBundleTest/Localized.r create mode 100644 Tests/CFBundleTest/Localized.rsrc create mode 100644 Tests/CFBundleTest/PluginConfig.cmake create mode 100644 Tests/CFBundleTest/README.txt create mode 100644 Tests/CFBundleTest/VerifyResult.cmake create mode 100644 Tests/CFBundleTest/np_macmain.cpp create mode 100644 Tests/CMakeBuildTest.cmake.in create mode 100644 Tests/CMakeCommands/target_link_libraries/CMakeLists.txt create mode 100644 Tests/CMakeCommands/target_link_libraries/depA.cpp create mode 100644 Tests/CMakeCommands/target_link_libraries/depA.h create mode 100644 Tests/CMakeCommands/target_link_libraries/depB.cpp create mode 100644 Tests/CMakeCommands/target_link_libraries/depB.h create mode 100644 Tests/CMakeCommands/target_link_libraries/depC.cpp create mode 100644 Tests/CMakeCommands/target_link_libraries/depC.h create mode 100644 Tests/CMakeCommands/target_link_libraries/targetA.cpp create mode 100644 Tests/CMakeInstall.cmake create mode 100644 Tests/CMakeLib/CMakeLists.txt create mode 100644 Tests/CMakeLib/run_compile_commands.cxx create mode 100644 Tests/CMakeLib/testGeneratedFileStream.cxx create mode 100644 Tests/CMakeLib/testSystemTools.cxx create mode 100644 Tests/CMakeLib/testUTF8.cxx create mode 100644 Tests/CMakeLib/testXMLParser.cxx create mode 100644 Tests/CMakeLib/testXMLParser.h.in create mode 100644 Tests/CMakeLib/testXMLParser.xml create mode 100644 Tests/CMakeLib/testXMLSafe.cxx create mode 100644 Tests/CMakeLists.txt create mode 100644 Tests/CMakeOnly/AllFindModules/CMakeLists.txt create mode 100644 Tests/CMakeOnly/CMakeLists.txt create mode 100644 Tests/CMakeOnly/CheckCXXCompilerFlag/CMakeLists.txt create mode 100644 Tests/CMakeOnly/CheckCXXSymbolExists/CMakeLists.txt create mode 100644 Tests/CMakeOnly/CheckLanguage/CMakeLists.txt create mode 100644 Tests/CMakeOnly/CheckSymbolExists/CMakeLists.txt create mode 100644 Tests/CMakeOnly/CheckSymbolExists/cm_cse.h create mode 100644 Tests/CMakeOnly/LinkInterfaceLoop/CMakeLists.txt create mode 100644 Tests/CMakeOnly/LinkInterfaceLoop/lib.c create mode 100644 Tests/CMakeOnly/LinkInterfaceLoop/main.c create mode 100644 Tests/CMakeOnly/ProjectInclude/CMakeLists.txt create mode 100644 Tests/CMakeOnly/ProjectInclude/include.cmake create mode 100644 Tests/CMakeOnly/TargetScope/CMakeLists.txt create mode 100644 Tests/CMakeOnly/TargetScope/Sib/CMakeLists.txt create mode 100644 Tests/CMakeOnly/TargetScope/Sub/CMakeLists.txt create mode 100644 Tests/CMakeOnly/TargetScope/Sub/Sub/CMakeLists.txt create mode 100644 Tests/CMakeOnly/Test.cmake.in create mode 100644 Tests/CMakeTestAllGenerators/RunCMake.cmake create mode 100644 Tests/CMakeTestBadCommandLines/RunCMake.cmake create mode 100644 Tests/CMakeTestMultipleConfigures/RunCMake.cmake create mode 100644 Tests/CMakeTests/.gitattributes create mode 100644 Tests/CMakeTests/A/include/cmake_i_do_not_exist_in_the_system.h create mode 100644 Tests/CMakeTests/CMakeLists.txt create mode 100644 Tests/CMakeTests/CMakeMinimumRequiredTest.cmake.in create mode 100644 Tests/CMakeTests/CMakeMinimumRequiredTestScript.cmake create mode 100644 Tests/CMakeTests/CheckCMakeTest.cmake create mode 100644 Tests/CMakeTests/CheckSourceTreeTest.cmake.in create mode 100644 Tests/CMakeTests/CompilerIdVendorTest.cmake.in create mode 100644 Tests/CMakeTests/ConfigureFile-BadArg.cmake create mode 100644 Tests/CMakeTests/ConfigureFile-DirInput.cmake create mode 100644 Tests/CMakeTests/ConfigureFile-DirOutput.cmake create mode 100644 Tests/CMakeTests/ConfigureFile-NewLineStyle-COPYONLY.cmake create mode 100644 Tests/CMakeTests/ConfigureFile-NewLineStyle-NoArg.cmake create mode 100644 Tests/CMakeTests/ConfigureFile-NewLineStyle-ValidArg.cmake create mode 100644 Tests/CMakeTests/ConfigureFile-NewLineStyle-WrongArg.cmake create mode 100644 Tests/CMakeTests/ConfigureFile-Relative.cmake create mode 100644 Tests/CMakeTests/ConfigureFileTest.cmake.in create mode 100644 Tests/CMakeTests/DummyToolchain.cmake create mode 100644 Tests/CMakeTests/ELF/elf32lsb.bin create mode 100644 Tests/CMakeTests/ELF/elf32msb.bin create mode 100644 Tests/CMakeTests/ELF/elf64lsb.bin create mode 100644 Tests/CMakeTests/ELF/elf64msb.bin create mode 100644 Tests/CMakeTests/ELFTest.cmake.in create mode 100644 Tests/CMakeTests/EndStuffTest.cmake.in create mode 100644 Tests/CMakeTests/EndStuffTestScript.cmake create mode 100644 Tests/CMakeTests/ExecuteScriptTests.cmake create mode 100644 Tests/CMakeTests/File-Copy-BadArg.cmake create mode 100644 Tests/CMakeTests/File-Copy-BadPerm.cmake create mode 100644 Tests/CMakeTests/File-Copy-BadRegex.cmake create mode 100644 Tests/CMakeTests/File-Copy-EarlyArg.cmake create mode 100644 Tests/CMakeTests/File-Copy-LateArg.cmake create mode 100644 Tests/CMakeTests/File-Copy-NoDest.cmake create mode 100644 Tests/CMakeTests/File-Copy-NoFile.cmake create mode 100644 Tests/CMakeTests/File-HASH-Input.txt create mode 100644 Tests/CMakeTests/File-MD5-BadArg1.cmake create mode 100644 Tests/CMakeTests/File-MD5-BadArg2.cmake create mode 100644 Tests/CMakeTests/File-MD5-BadArg4.cmake create mode 100644 Tests/CMakeTests/File-MD5-NoFile.cmake create mode 100644 Tests/CMakeTests/File-MD5-Works.cmake create mode 100644 Tests/CMakeTests/File-SHA1-Works.cmake create mode 100644 Tests/CMakeTests/File-SHA224-Works.cmake create mode 100644 Tests/CMakeTests/File-SHA256-Works.cmake create mode 100644 Tests/CMakeTests/File-SHA384-Works.cmake create mode 100644 Tests/CMakeTests/File-SHA512-Works.cmake create mode 100644 Tests/CMakeTests/FileDownloadInput.png create mode 100644 Tests/CMakeTests/FileDownloadTest.cmake.in create mode 100644 Tests/CMakeTests/FileTest.cmake.in create mode 100644 Tests/CMakeTests/FileTestScript.cmake create mode 100644 Tests/CMakeTests/FileUploadTest.cmake.in create mode 100644 Tests/CMakeTests/FindBaseTest.cmake.in create mode 100644 Tests/CMakeTests/GetFilenameComponentRealpathTest.cmake.in create mode 100644 Tests/CMakeTests/GetPrerequisitesTest.cmake.in create mode 100644 Tests/CMakeTests/GetProperty-Bad-Argument.cmake create mode 100644 Tests/CMakeTests/GetProperty-Bad-Directory.cmake create mode 100644 Tests/CMakeTests/GetProperty-Bad-Scope.cmake create mode 100644 Tests/CMakeTests/GetProperty-Bad-Target.cmake create mode 100644 Tests/CMakeTests/GetProperty-Bad-Test.cmake create mode 100644 Tests/CMakeTests/GetProperty-Doc-Properties.cmake create mode 100644 Tests/CMakeTests/GetProperty-Global-Name.cmake create mode 100644 Tests/CMakeTests/GetProperty-Missing-Argument.cmake create mode 100644 Tests/CMakeTests/GetProperty-No-Cache.cmake create mode 100644 Tests/CMakeTests/GetProperty-No-Property.cmake create mode 100644 Tests/CMakeTests/GetProperty-No-Source.cmake create mode 100644 Tests/CMakeTests/GetProperty-No-Target.cmake create mode 100644 Tests/CMakeTests/GetProperty-No-Test.cmake create mode 100644 Tests/CMakeTests/GetProperty-Variable-Name.cmake create mode 100644 Tests/CMakeTests/GetPropertyTest.cmake.in create mode 100644 Tests/CMakeTests/If-Invalid-Argument.cmake create mode 100644 Tests/CMakeTests/IfTest.cmake.in create mode 100644 Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in create mode 100644 Tests/CMakeTests/IncludeTest.cmake.in create mode 100644 Tests/CMakeTests/ListTest.cmake.in create mode 100644 Tests/CMakeTests/MathTest.cmake.in create mode 100644 Tests/CMakeTests/MathTestScript.cmake create mode 100644 Tests/CMakeTests/MessageTest.cmake.in create mode 100644 Tests/CMakeTests/MessageTestScript.cmake create mode 100644 Tests/CMakeTests/ModuleNoticesTest.cmake.in create mode 100644 Tests/CMakeTests/ProcessorCountTest.cmake.in create mode 100644 Tests/CMakeTests/PushCheckStateTest.cmake.in create mode 100644 Tests/CMakeTests/SeparateArgumentsTest.cmake.in create mode 100644 Tests/CMakeTests/String-MD5-BadArg1.cmake create mode 100644 Tests/CMakeTests/String-MD5-BadArg2.cmake create mode 100644 Tests/CMakeTests/String-MD5-BadArg4.cmake create mode 100644 Tests/CMakeTests/String-MD5-Works.cmake create mode 100644 Tests/CMakeTests/String-SHA1-Works.cmake create mode 100644 Tests/CMakeTests/String-SHA224-Works.cmake create mode 100644 Tests/CMakeTests/String-SHA256-Works.cmake create mode 100644 Tests/CMakeTests/String-SHA384-Works.cmake create mode 100644 Tests/CMakeTests/String-SHA512-Works.cmake create mode 100644 Tests/CMakeTests/StringTest.cmake.in create mode 100644 Tests/CMakeTests/StringTestScript.cmake create mode 100644 Tests/CMakeTests/ToolchainTest.cmake.in create mode 100644 Tests/CMakeTests/VariableWatchTest.cmake.in create mode 100644 Tests/CMakeTests/VersionTest.cmake.in create mode 100644 Tests/CMakeTests/While-Endwhile-Alone-Args.cmake create mode 100644 Tests/CMakeTests/While-Endwhile-Alone.cmake create mode 100644 Tests/CMakeTests/While-Endwhile-Mismatch.cmake create mode 100644 Tests/CMakeTests/While-Missing-Argument.cmake create mode 100644 Tests/CMakeTests/While-Missing-Endwhile.cmake create mode 100644 Tests/CMakeTests/WhileTest.cmake.in create mode 100644 Tests/CMakeTests/include/cmake_i_do_not_exist_in_the_system.h create mode 100644 Tests/CMakeWizardTest.cmake create mode 100644 Tests/COnly/CMakeLists.txt create mode 100644 Tests/COnly/conly.c create mode 100644 Tests/COnly/foo.c create mode 100644 Tests/COnly/foo.h create mode 100644 Tests/COnly/libc1.c create mode 100644 Tests/COnly/libc1.h create mode 100644 Tests/COnly/libc2.c create mode 100644 Tests/COnly/libc2.h create mode 100644 Tests/COnly/testCModule.c create mode 100644 Tests/CPackComponents/CMakeLists.txt create mode 100644 Tests/CPackComponents/Issue 7470.html create mode 100644 Tests/CPackComponents/VerifyResult.cmake create mode 100644 Tests/CPackComponents/mylib.cpp create mode 100644 Tests/CPackComponents/mylib.h create mode 100644 Tests/CPackComponents/mylibapp.cpp create mode 100644 Tests/CPackComponentsForAll/CMakeLists.txt create mode 100644 Tests/CPackComponentsForAll/MyLibCPackConfig-AllInOne.cmake.in create mode 100644 Tests/CPackComponentsForAll/MyLibCPackConfig-IgnoreGroup.cmake.in create mode 100644 Tests/CPackComponentsForAll/MyLibCPackConfig-OnePackPerGroup.cmake.in create mode 100644 Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake create mode 100644 Tests/CPackComponentsForAll/mylib.cpp create mode 100644 Tests/CPackComponentsForAll/mylib.h create mode 100644 Tests/CPackComponentsForAll/mylibapp.cpp create mode 100644 Tests/CPackTestAllGenerators/CMakeLists.txt create mode 100644 Tests/CPackTestAllGenerators/RunCPack.cmake create mode 100644 Tests/CTestConfig/CMakeLists.txt create mode 100644 Tests/CTestConfig/CTestConfig.cxx create mode 100644 Tests/CTestConfig/dashboard.cmake.in create mode 100644 Tests/CTestConfig/script.cmake.in create mode 100644 Tests/CTestScriptMode/CTestTestScriptMode.cmake.in create mode 100644 Tests/CTestTest/SmallAndFast/CMakeLists.txt create mode 100644 Tests/CTestTest/SmallAndFast/echoargs.c create mode 100644 Tests/CTestTest/SmallAndFast/intentional_compile_error.cxx create mode 100644 Tests/CTestTest/SmallAndFast/intentional_compile_warning.cxx create mode 100644 Tests/CTestTest/test.cmake.in create mode 100644 Tests/CTestTest2/test.cmake.in create mode 100644 Tests/CTestTestBadExe/CMakeLists.txt create mode 100644 Tests/CTestTestBadExe/CTestConfig.cmake create mode 100644 Tests/CTestTestBadExe/notAnExe.txt create mode 100644 Tests/CTestTestBadExe/test.cmake.in create mode 100644 Tests/CTestTestChecksum/test.cmake.in create mode 100644 Tests/CTestTestConfigFileInBuildDir/CMakeLists.txt create mode 100644 Tests/CTestTestConfigFileInBuildDir/CTestConfig.cmake create mode 100644 Tests/CTestTestConfigFileInBuildDir/test1.cmake.in create mode 100644 Tests/CTestTestConfigFileInBuildDir/test2.cmake.in create mode 100644 Tests/CTestTestCostSerial/CMakeLists.txt create mode 100644 Tests/CTestTestCostSerial/CTestConfig.cmake create mode 100644 Tests/CTestTestCostSerial/sleep.c create mode 100644 Tests/CTestTestCostSerial/test.cmake.in create mode 100644 Tests/CTestTestCrash/CMakeLists.txt create mode 100644 Tests/CTestTestCrash/CTestConfig.cmake create mode 100644 Tests/CTestTestCrash/crash.cxx create mode 100644 Tests/CTestTestCrash/test.cmake.in create mode 100644 Tests/CTestTestCycle/CMakeLists.txt create mode 100644 Tests/CTestTestCycle/CTestConfig.cmake create mode 100644 Tests/CTestTestCycle/simple.cxx create mode 100644 Tests/CTestTestCycle/test.cmake.in create mode 100644 Tests/CTestTestDepends/CMakeLists.txt create mode 100644 Tests/CTestTestDepends/CTestConfig.cmake create mode 100644 Tests/CTestTestDepends/simple.cxx create mode 100644 Tests/CTestTestDepends/test.cmake.in create mode 100644 Tests/CTestTestFailedSubmits/test.cmake.in create mode 100644 Tests/CTestTestFailure/CMakeLists.txt create mode 100644 Tests/CTestTestFailure/CTestConfig.cmake create mode 100644 Tests/CTestTestFailure/badCode.cxx create mode 100644 Tests/CTestTestFailure/testNoBuild.cmake.in create mode 100644 Tests/CTestTestFailure/testNoExe.cmake.in create mode 100644 Tests/CTestTestParallel/CMakeLists.txt create mode 100644 Tests/CTestTestParallel/CTestConfig.cmake create mode 100644 Tests/CTestTestParallel/lockFile.c create mode 100644 Tests/CTestTestParallel/test.cmake.in create mode 100644 Tests/CTestTestResourceLock/CMakeLists.txt create mode 100644 Tests/CTestTestResourceLock/CTestConfig.cmake create mode 100644 Tests/CTestTestResourceLock/lockFile.c create mode 100644 Tests/CTestTestResourceLock/test.cmake.in create mode 100644 Tests/CTestTestRunScript/hello.cmake.in create mode 100644 Tests/CTestTestRunScript/test.cmake.in create mode 100644 Tests/CTestTestScheduler/CMakeLists.txt create mode 100644 Tests/CTestTestScheduler/CTestConfig.cmake create mode 100644 Tests/CTestTestScheduler/sleep.c create mode 100644 Tests/CTestTestScheduler/test.cmake.in create mode 100644 Tests/CTestTestStopTime/CMakeLists.txt create mode 100644 Tests/CTestTestStopTime/CTestConfig.cmake create mode 100644 Tests/CTestTestStopTime/GetDate.cmake create mode 100644 Tests/CTestTestStopTime/sleep.c create mode 100644 Tests/CTestTestStopTime/test.cmake.in create mode 100644 Tests/CTestTestSubdir/CMakeLists.txt create mode 100644 Tests/CTestTestSubdir/CTestConfig.cmake create mode 100644 Tests/CTestTestSubdir/subdir/CMakeLists.txt create mode 100644 Tests/CTestTestSubdir/subdir/main.c create mode 100644 Tests/CTestTestSubdir/subdir2/CMakeLists.txt create mode 100644 Tests/CTestTestSubdir/subdir2/main.c create mode 100644 Tests/CTestTestSubdir/subdir3/CMakeLists.txt create mode 100644 Tests/CTestTestSubdir/subdir3/main.c create mode 100644 Tests/CTestTestSubdir/test.cmake.in create mode 100644 Tests/CTestTestTimeout/CMakeLists.txt create mode 100644 Tests/CTestTestTimeout/CTestConfig.cmake create mode 100644 Tests/CTestTestTimeout/check.cmake create mode 100644 Tests/CTestTestTimeout/test.cmake.in create mode 100644 Tests/CTestTestTimeout/timeout.c create mode 100644 Tests/CTestTestTimeout/timeout.cmake create mode 100644 Tests/CTestTestUpload/CMakeLists.txt create mode 100644 Tests/CTestTestUpload/CTestConfig.cmake create mode 100644 Tests/CTestTestUpload/sleep.c create mode 100644 Tests/CTestTestUpload/test.cmake.in create mode 100644 Tests/CTestTestZeroTimeout/CMakeLists.txt create mode 100644 Tests/CTestTestZeroTimeout/CTestConfig.cmake create mode 100644 Tests/CTestTestZeroTimeout/sleep.c create mode 100644 Tests/CTestTestZeroTimeout/test.cmake.in create mode 100644 Tests/CTestUpdateBZR.cmake.in create mode 100644 Tests/CTestUpdateCVS.cmake.in create mode 100644 Tests/CTestUpdateCommon.cmake create mode 100644 Tests/CTestUpdateGIT.cmake.in create mode 100755 Tests/CTestUpdateGIT.sh.in create mode 100644 Tests/CTestUpdateHG.cmake.in create mode 100644 Tests/CTestUpdateSVN.cmake.in create mode 100644 Tests/CheckCompilerRelatedVariables/CMakeLists.txt create mode 100644 Tests/CheckFortran.cmake create mode 100644 Tests/CommandLineTest/CMakeLists.txt create mode 100644 Tests/CommandLineTest/CommandLineTest.cxx create mode 100644 Tests/CommandLineTest/PreLoad.cmake create mode 100644 Tests/CompileCommandOutput/CMakeLists.txt create mode 100644 Tests/CompileCommandOutput/compile_command_output.cxx create mode 100644 Tests/CompileCommandOutput/file with spaces.cxx create mode 100644 Tests/CompileCommandOutput/file_with_underscores.cxx create mode 100644 Tests/CompileCommandOutput/file_with_underscores.h create mode 100644 Tests/CompileCommandOutput/relative.cxx create mode 100644 Tests/CompileCommandOutput/relative.h create mode 100644 Tests/Complex/CMakeLists.txt create mode 100644 Tests/Complex/Cache/CMakeCache.txt create mode 100644 Tests/Complex/Executable/A.cxx create mode 100644 Tests/Complex/Executable/A.h create mode 100644 Tests/Complex/Executable/A.hh create mode 100644 Tests/Complex/Executable/A.txt create mode 100644 Tests/Complex/Executable/CMakeLists.txt create mode 100644 Tests/Complex/Executable/Included.cmake create mode 100644 Tests/Complex/Executable/Sub1/NameConflictTest.c create mode 100644 Tests/Complex/Executable/Sub2/NameConflictTest.c create mode 100644 Tests/Complex/Executable/Temp/CMakeLists.txt create mode 100644 Tests/Complex/Executable/cmVersion.h.in create mode 100644 Tests/Complex/Executable/complex.cxx create mode 100644 Tests/Complex/Executable/complex.file.cxx create mode 100644 Tests/Complex/Executable/complex_nobuild.c create mode 100644 Tests/Complex/Executable/complex_nobuild.cxx create mode 100644 Tests/Complex/Executable/notInAllExe.cxx create mode 100644 Tests/Complex/Executable/testSystemDir.cxx create mode 100644 Tests/Complex/Executable/testcflags.c create mode 100644 Tests/Complex/Library/CMakeLists.txt create mode 100644 Tests/Complex/Library/ExtraSources/file1.cxx create mode 100644 Tests/Complex/Library/ExtraSources/file1.h create mode 100644 Tests/Complex/Library/SystemDir/testSystemDir.h create mode 100644 Tests/Complex/Library/TestLink.c create mode 100644 Tests/Complex/Library/create_file.cxx create mode 100644 Tests/Complex/Library/dummy create mode 100644 Tests/Complex/Library/empty.h create mode 100644 Tests/Complex/Library/file2.cxx create mode 100644 Tests/Complex/Library/file2.h create mode 100644 Tests/Complex/Library/notInAllLib.cxx create mode 100644 Tests/Complex/Library/sharedFile.cxx create mode 100644 Tests/Complex/Library/sharedFile.h create mode 100644 Tests/Complex/Library/testConly.c create mode 100644 Tests/Complex/Library/testConly.h create mode 100644 Tests/Complex/Library/test_preprocess.cmake create mode 100644 Tests/Complex/VarTests.cmake create mode 100644 Tests/Complex/cmTestConfigure.h.in create mode 100644 Tests/Complex/cmTestConfigureEscape.h.in create mode 100644 Tests/Complex/cmTestGeneratedHeader.h.in create mode 100644 Tests/ComplexOneConfig/CMakeLists.txt create mode 100644 Tests/ComplexOneConfig/Cache/CMakeCache.txt create mode 100644 Tests/ComplexOneConfig/Executable/A.cxx create mode 100644 Tests/ComplexOneConfig/Executable/A.h create mode 100644 Tests/ComplexOneConfig/Executable/A.hh create mode 100644 Tests/ComplexOneConfig/Executable/A.txt create mode 100644 Tests/ComplexOneConfig/Executable/CMakeLists.txt create mode 100644 Tests/ComplexOneConfig/Executable/Included.cmake create mode 100644 Tests/ComplexOneConfig/Executable/Sub1/NameConflictTest.c create mode 100644 Tests/ComplexOneConfig/Executable/Sub2/NameConflictTest.c create mode 100644 Tests/ComplexOneConfig/Executable/Temp/CMakeLists.txt create mode 100644 Tests/ComplexOneConfig/Executable/cmVersion.h.in create mode 100644 Tests/ComplexOneConfig/Executable/complex.cxx create mode 100644 Tests/ComplexOneConfig/Executable/complex.file.cxx create mode 100644 Tests/ComplexOneConfig/Executable/complex_nobuild.c create mode 100644 Tests/ComplexOneConfig/Executable/complex_nobuild.cxx create mode 100644 Tests/ComplexOneConfig/Executable/notInAllExe.cxx create mode 100644 Tests/ComplexOneConfig/Executable/testSystemDir.cxx create mode 100644 Tests/ComplexOneConfig/Executable/testcflags.c create mode 100644 Tests/ComplexOneConfig/Library/CMakeLists.txt create mode 100644 Tests/ComplexOneConfig/Library/ExtraSources/file1.cxx create mode 100644 Tests/ComplexOneConfig/Library/ExtraSources/file1.h create mode 100644 Tests/ComplexOneConfig/Library/SystemDir/testSystemDir.h create mode 100644 Tests/ComplexOneConfig/Library/TestLink.c create mode 100644 Tests/ComplexOneConfig/Library/create_file.cxx create mode 100644 Tests/ComplexOneConfig/Library/dummy create mode 100644 Tests/ComplexOneConfig/Library/empty.h create mode 100644 Tests/ComplexOneConfig/Library/file2.cxx create mode 100644 Tests/ComplexOneConfig/Library/file2.h create mode 100644 Tests/ComplexOneConfig/Library/notInAllLib.cxx create mode 100644 Tests/ComplexOneConfig/Library/sharedFile.cxx create mode 100644 Tests/ComplexOneConfig/Library/sharedFile.h create mode 100644 Tests/ComplexOneConfig/Library/testConly.c create mode 100644 Tests/ComplexOneConfig/Library/testConly.h create mode 100644 Tests/ComplexOneConfig/Library/test_preprocess.cmake create mode 100644 Tests/ComplexOneConfig/VarTests.cmake create mode 100644 Tests/ComplexOneConfig/cmTestConfigure.h.in create mode 100644 Tests/ComplexOneConfig/cmTestConfigureEscape.h.in create mode 100644 Tests/ComplexOneConfig/cmTestGeneratedHeader.h.in create mode 100644 Tests/Contracts/Trilinos-10-6/CMakeLists.txt create mode 100644 Tests/Contracts/Trilinos-10-6/Dashboard.cmake.in create mode 100644 Tests/Contracts/Trilinos-10-6/EnvScript.cmake create mode 100644 Tests/Contracts/Trilinos-10-6/Patch.cmake create mode 100644 Tests/Contracts/Trilinos-10-6/RunTest.cmake create mode 100644 Tests/Contracts/Trilinos-10-6/ValidateBuild.cmake.in create mode 100644 Tests/Contracts/cse-snapshot/CMakeLists.txt create mode 100644 Tests/Contracts/cse-snapshot/Dashboard.cmake.in create mode 100644 Tests/Contracts/cse-snapshot/RunTest.cmake create mode 100644 Tests/Contracts/vtk542/CMakeLists.txt create mode 100644 Tests/Contracts/vtk542/RunTest.cmake create mode 100644 Tests/CrossCompile/CMakeLists.txt create mode 100644 Tests/CrossCompile/main.c create mode 100644 Tests/CustComDepend/CMakeLists.txt create mode 100644 Tests/CustComDepend/bar.h create mode 100644 Tests/CustComDepend/foo.cxx create mode 100644 Tests/CustomCommand/CMakeLists.txt create mode 100644 Tests/CustomCommand/GeneratedHeader/CMakeLists.txt create mode 100644 Tests/CustomCommand/GeneratedHeader/generated.h.in create mode 100644 Tests/CustomCommand/GeneratedHeader/main.cpp create mode 100644 Tests/CustomCommand/GeneratorInExtraDir/CMakeLists.txt create mode 100644 Tests/CustomCommand/check_command_line.c.in create mode 100644 Tests/CustomCommand/check_mark.cmake create mode 100644 Tests/CustomCommand/config.h.in create mode 100644 Tests/CustomCommand/doc1.tex create mode 100644 Tests/CustomCommand/foo.h.in create mode 100644 Tests/CustomCommand/foo.in create mode 100644 Tests/CustomCommand/gen_redirect_in.c create mode 100644 Tests/CustomCommand/generator.cxx create mode 100644 Tests/CustomCommand/main.cxx create mode 100644 Tests/CustomCommand/tcat.cxx create mode 100644 Tests/CustomCommand/wrapped.h create mode 100644 Tests/CustomCommand/wrapper.cxx create mode 100644 Tests/CustomCommandWorkingDirectory/CMakeLists.txt create mode 100644 Tests/CustomCommandWorkingDirectory/customTarget.c create mode 100644 Tests/CustomCommandWorkingDirectory/working.c.in create mode 100644 Tests/CxxOnly/CMakeLists.txt create mode 100644 Tests/CxxOnly/cxxonly.cxx create mode 100644 Tests/CxxOnly/libcxx1.cxx create mode 100644 Tests/CxxOnly/libcxx1.h create mode 100644 Tests/CxxOnly/libcxx2.cxx create mode 100644 Tests/CxxOnly/libcxx2.h create mode 100644 Tests/CxxOnly/test.CPP create mode 100644 Tests/CxxOnly/testCxxModule.cxx create mode 100644 Tests/Dependency/1/CMakeLists.txt create mode 100644 Tests/Dependency/1/OneSrc.c create mode 100644 Tests/Dependency/CMakeLists.txt create mode 100644 Tests/Dependency/Case1/CMakeLists.txt create mode 100644 Tests/Dependency/Case1/a.c create mode 100644 Tests/Dependency/Case1/b.c create mode 100644 Tests/Dependency/Case1/b2.c create mode 100644 Tests/Dependency/Case1/c.c create mode 100644 Tests/Dependency/Case1/c2.c create mode 100644 Tests/Dependency/Case1/d.c create mode 100644 Tests/Dependency/Case1/main.c create mode 100644 Tests/Dependency/Case2/CMakeLists.txt create mode 100644 Tests/Dependency/Case2/bar1.c create mode 100644 Tests/Dependency/Case2/bar2.c create mode 100644 Tests/Dependency/Case2/bar3.c create mode 100644 Tests/Dependency/Case2/foo1.c create mode 100644 Tests/Dependency/Case2/foo1b.c create mode 100644 Tests/Dependency/Case2/foo1c.c create mode 100644 Tests/Dependency/Case2/foo2.c create mode 100644 Tests/Dependency/Case2/foo2b.c create mode 100644 Tests/Dependency/Case2/foo2c.c create mode 100644 Tests/Dependency/Case2/foo3.c create mode 100644 Tests/Dependency/Case2/foo3b.c create mode 100644 Tests/Dependency/Case2/foo3c.c create mode 100644 Tests/Dependency/Case2/zot.c create mode 100644 Tests/Dependency/Case3/CMakeLists.txt create mode 100644 Tests/Dependency/Case3/bar.c create mode 100644 Tests/Dependency/Case3/foo1.c create mode 100644 Tests/Dependency/Case3/foo1b.c create mode 100644 Tests/Dependency/Case3/foo2.c create mode 100644 Tests/Dependency/Case4/CMakeLists.txt create mode 100644 Tests/Dependency/Case4/bar.c create mode 100644 Tests/Dependency/Case4/foo.c create mode 100644 Tests/Dependency/Eight/CMakeLists.txt create mode 100644 Tests/Dependency/Eight/EightSrc.c create mode 100644 Tests/Dependency/Exec/CMakeLists.txt create mode 100644 Tests/Dependency/Exec/ExecMain.c create mode 100644 Tests/Dependency/Exec2/CMakeLists.txt create mode 100644 Tests/Dependency/Exec2/ExecMain.c create mode 100644 Tests/Dependency/Exec3/CMakeLists.txt create mode 100644 Tests/Dependency/Exec3/ExecMain.c create mode 100644 Tests/Dependency/Exec4/CMakeLists.txt create mode 100644 Tests/Dependency/Exec4/ExecMain.c create mode 100644 Tests/Dependency/Five/CMakeLists.txt create mode 100644 Tests/Dependency/Five/FiveSrc.c create mode 100644 Tests/Dependency/Four/CMakeLists.txt create mode 100644 Tests/Dependency/Four/FourSrc.c create mode 100644 Tests/Dependency/NoDepA/CMakeLists.txt create mode 100644 Tests/Dependency/NoDepA/NoDepASrc.c create mode 100644 Tests/Dependency/NoDepB/CMakeLists.txt create mode 100644 Tests/Dependency/NoDepB/NoDepBSrc.c create mode 100644 Tests/Dependency/NoDepC/CMakeLists.txt create mode 100644 Tests/Dependency/NoDepC/NoDepCSrc.c create mode 100644 Tests/Dependency/Seven/CMakeLists.txt create mode 100644 Tests/Dependency/Seven/SevenSrc.c create mode 100644 Tests/Dependency/Six/CMakeLists.txt create mode 100644 Tests/Dependency/Six/SixASrc.c create mode 100644 Tests/Dependency/Six/SixBSrc.c create mode 100644 Tests/Dependency/Three/CMakeLists.txt create mode 100644 Tests/Dependency/Three/ThreeSrc.c create mode 100644 Tests/Dependency/Two/CMakeLists.txt create mode 100644 Tests/Dependency/Two/TwoCustomSrc.c create mode 100644 Tests/Dependency/Two/TwoSrc.c create mode 100644 Tests/Dependency/Two/two-test.h.in create mode 100644 Tests/DocTest/CMakeLists.txt create mode 100644 Tests/DocTest/DocTest.cxx create mode 100644 Tests/DoubleProject/CMakeLists.txt create mode 100644 Tests/DoubleProject/silly.c create mode 100644 Tests/EmptyLibrary/CMakeLists.txt create mode 100644 Tests/EmptyLibrary/subdir/CMakeLists.txt create mode 100644 Tests/EmptyLibrary/subdir/test.h create mode 100644 Tests/EnforceConfig.cmake.in create mode 100644 Tests/Environment/CMakeLists.txt create mode 100644 Tests/Environment/main.cxx create mode 100644 Tests/ExportImport/CMakeLists.txt create mode 100644 Tests/ExportImport/Export/CMakeLists.txt create mode 100644 Tests/ExportImport/Export/testExe1.c create mode 100644 Tests/ExportImport/Export/testExe1lib.c create mode 100644 Tests/ExportImport/Export/testExe2.c create mode 100644 Tests/ExportImport/Export/testExe2lib.c create mode 100644 Tests/ExportImport/Export/testExe2libImp.c create mode 100644 Tests/ExportImport/Export/testExe3.c create mode 100644 Tests/ExportImport/Export/testLib1.c create mode 100644 Tests/ExportImport/Export/testLib2.c create mode 100644 Tests/ExportImport/Export/testLib3.c create mode 100644 Tests/ExportImport/Export/testLib3Imp.c create mode 100644 Tests/ExportImport/Export/testLib3ImpDep.c create mode 100644 Tests/ExportImport/Export/testLib4.c create mode 100644 Tests/ExportImport/Export/testLib4lib.c create mode 100644 Tests/ExportImport/Export/testLib4libdbg.c create mode 100644 Tests/ExportImport/Export/testLib4libdbg1.c create mode 100644 Tests/ExportImport/Export/testLib4libopt.c create mode 100644 Tests/ExportImport/Export/testLib4libopt1.c create mode 100644 Tests/ExportImport/Export/testLib5.c create mode 100644 Tests/ExportImport/Export/testLib6.cxx create mode 100644 Tests/ExportImport/Export/testLib6c.c create mode 100644 Tests/ExportImport/Export/testLibCycleA1.c create mode 100644 Tests/ExportImport/Export/testLibCycleA2.c create mode 100644 Tests/ExportImport/Export/testLibCycleA3.c create mode 100644 Tests/ExportImport/Export/testLibCycleB1.c create mode 100644 Tests/ExportImport/Export/testLibCycleB2.c create mode 100644 Tests/ExportImport/Export/testLibCycleB3.c create mode 100644 Tests/ExportImport/Import/A/CMakeLists.txt create mode 100644 Tests/ExportImport/Import/A/imp_lib1.c create mode 100644 Tests/ExportImport/Import/A/imp_mod1.c create mode 100644 Tests/ExportImport/Import/A/imp_testExe1.c create mode 100644 Tests/ExportImport/Import/CMakeLists.txt create mode 100644 Tests/ExportImport/Import/imp_testTransExe1.c create mode 100644 Tests/ExportImport/InitialCache.cmake.in create mode 100644 Tests/ExportImport/main.c create mode 100644 Tests/ExternalOBJ/CMakeLists.txt create mode 100644 Tests/ExternalOBJ/Object/CMakeLists.txt create mode 100644 Tests/ExternalOBJ/Object/external_main.cxx create mode 100644 Tests/ExternalOBJ/Object/external_object.cxx create mode 100644 Tests/ExternalOBJ/Sub/CMakeLists.txt create mode 100644 Tests/ExternalOBJ/executable.cxx create mode 100644 Tests/ExternalProject/CMakeLists.txt create mode 100644 Tests/ExternalProject/Example/CMakeLists.txt create mode 100644 Tests/ExternalProject/Step1.tar create mode 100644 Tests/ExternalProject/Step1.tar.bz2 create mode 100644 Tests/ExternalProject/Step1.tgz create mode 100644 Tests/ExternalProject/Step1.zip create mode 100644 Tests/ExternalProject/Step1NoDir.tar create mode 100644 Tests/ExternalProject/Step1NoDir.tar.bz2 create mode 100644 Tests/ExternalProject/Step1NoDir.tgz create mode 100644 Tests/ExternalProject/Step1NoDir.zip create mode 100644 Tests/ExternalProject/Step1Patch.cmake create mode 100644 Tests/ExternalProject/TryCheckout.cmake create mode 100644 Tests/ExternalProject/cvsrepo.tgz create mode 100644 Tests/ExternalProject/gitrepo.tgz create mode 100644 Tests/ExternalProject/svnrepo.tgz create mode 100644 Tests/FindModulesExecuteAll/CMakeLists.txt create mode 100644 Tests/FindModulesExecuteAll/main.c create mode 100644 Tests/FindPackageModeMakefileTest/CMakeLists.txt create mode 100644 Tests/FindPackageModeMakefileTest/FindFoo.cmake.in create mode 100644 Tests/FindPackageModeMakefileTest/Makefile.in create mode 100644 Tests/FindPackageModeMakefileTest/foo.cpp create mode 100644 Tests/FindPackageModeMakefileTest/foo.h create mode 100644 Tests/FindPackageModeMakefileTest/main.cpp create mode 100644 Tests/FindPackageTest/A/wibble-config.cmake create mode 100644 Tests/FindPackageTest/B/wibble-config.cmake create mode 100644 Tests/FindPackageTest/Baz 1.1/BazConfig.cmake create mode 100644 Tests/FindPackageTest/Baz 1.1/BazConfigVersion.cmake create mode 100644 Tests/FindPackageTest/Baz 1.2/CMake/BazConfig.cmake create mode 100644 Tests/FindPackageTest/Baz 1.2/CMake/BazConfigVersion.cmake create mode 100644 Tests/FindPackageTest/CMakeLists.txt create mode 100644 Tests/FindPackageTest/Exporter/CMakeLists.txt create mode 100644 Tests/FindPackageTest/Exporter/CMakeTestExportPackageConfig.cmake.in create mode 100644 Tests/FindPackageTest/Exporter/CMakeTestExportPackageConfigVersion.cmake.in create mode 100644 Tests/FindPackageTest/Exporter/dummy.c create mode 100644 Tests/FindPackageTest/FindLotsOfComponents.cmake create mode 100644 Tests/FindPackageTest/FindPackageHandleStandardArgs.cmake create mode 100644 Tests/FindPackageTest/FindPackageTest.cxx create mode 100644 Tests/FindPackageTest/FindRecursiveA.cmake create mode 100644 Tests/FindPackageTest/FindRecursiveB.cmake create mode 100644 Tests/FindPackageTest/FindRecursiveC.cmake create mode 100644 Tests/FindPackageTest/FindVersionTestA.cmake create mode 100644 Tests/FindPackageTest/FindVersionTestB.cmake create mode 100644 Tests/FindPackageTest/FindVersionTestC.cmake create mode 100644 Tests/FindPackageTest/FindVersionTestD.cmake create mode 100644 Tests/FindPackageTest/RelocatableConfig.cmake.in create mode 100644 Tests/FindPackageTest/SystemPackage/CMakeTestSystemPackageConfig.cmake create mode 100644 Tests/FindPackageTest/TApp.app/Contents/Resources/TAppConfig.cmake create mode 100644 Tests/FindPackageTest/TApp.app/Contents/Resources/cmake/tapp-config.cmake create mode 100644 Tests/FindPackageTest/TFramework.framework/Versions/A/Resources/CMake/TFrameworkConfig.cmake create mode 100644 Tests/FindPackageTest/TFramework.framework/Versions/A/Resources/tframework-config.cmake create mode 100644 Tests/FindPackageTest/cmake/SetFoundFALSEConfig.cmake create mode 100644 Tests/FindPackageTest/cmake/SetFoundTRUEConfig.cmake create mode 100644 Tests/FindPackageTest/include/foo.h create mode 100644 Tests/FindPackageTest/lib/Bar/BarConfig.cmake create mode 100644 Tests/FindPackageTest/lib/Bar/cmake/bar-config.cmake create mode 100644 Tests/FindPackageTest/lib/Blub/BlubConfig.cmake create mode 100644 Tests/FindPackageTest/lib/RecursiveA/recursivea-config.cmake create mode 100644 Tests/FindPackageTest/lib/TApp/TAppConfig.cmake create mode 100644 Tests/FindPackageTest/lib/arch/Bar/BarConfig.cmake create mode 100644 Tests/FindPackageTest/lib/arch/cmake/zot-4.0/zot-config-version.cmake create mode 100644 Tests/FindPackageTest/lib/arch/cmake/zot-4.0/zot-config.cmake create mode 100644 Tests/FindPackageTest/lib/arch/foo-1.2/CMake/FooConfig.cmake create mode 100644 Tests/FindPackageTest/lib/arch/zot-3.1/zot-config-version.cmake create mode 100644 Tests/FindPackageTest/lib/arch/zot-3.1/zot-config.cmake create mode 100644 Tests/FindPackageTest/lib/cmake/zot-3.1/zot-config-version.cmake create mode 100644 Tests/FindPackageTest/lib/cmake/zot-3.1/zot-config.cmake create mode 100644 Tests/FindPackageTest/lib/cmake/zot-4.0/zot-config-version.cmake create mode 100644 Tests/FindPackageTest/lib/cmake/zot-4.0/zot-config.cmake create mode 100644 Tests/FindPackageTest/lib/foo-1.2/CMake/FooConfig.cmake create mode 100644 Tests/FindPackageTest/lib/foo-1.2/foo-config.cmake create mode 100644 Tests/FindPackageTest/lib/suffix/test/SuffixTestConfig.cmake create mode 100644 Tests/FindPackageTest/lib/suffix/test/SuffixTestConfigVersion.cmake create mode 100644 Tests/FindPackageTest/lib/zot-1.0/zot-config.cmake create mode 100644 Tests/FindPackageTest/lib/zot-2.0/zot-config-version.cmake create mode 100644 Tests/FindPackageTest/lib/zot-2.0/zot-config.cmake create mode 100644 Tests/FindPackageTest/lib/zot-3.0/zot-config-version.cmake create mode 100644 Tests/FindPackageTest/lib/zot-3.0/zot-config.cmake create mode 100644 Tests/FindPackageTest/lib/zot-3.1/zot-config-version.cmake create mode 100644 Tests/FindPackageTest/lib/zot-3.1/zot-config.cmake create mode 100644 Tests/FindPackageTest/lib/zot/zot-config-version.cmake create mode 100644 Tests/FindPackageTest/lib/zot/zot-config.cmake create mode 100644 Tests/ForceInclude/CMakeLists.txt create mode 100644 Tests/ForceInclude/foo.c create mode 100644 Tests/ForceInclude/foo1.h create mode 100644 Tests/ForceInclude/foo2.h create mode 100644 Tests/Fortran/CMakeLists.txt create mode 100644 Tests/Fortran/Executable/CMakeLists.txt create mode 100644 Tests/Fortran/Executable/main.f90 create mode 100644 Tests/Fortran/External/CMakeLists.txt create mode 100644 Tests/Fortran/External/a.f90 create mode 100644 Tests/Fortran/Library/CMakeLists.txt create mode 100644 Tests/Fortran/Library/a.f90 create mode 100644 Tests/Fortran/Library/b.f90 create mode 100644 Tests/Fortran/Library/main.f90 create mode 100644 Tests/Fortran/foo.f create mode 100644 Tests/Fortran/hello.f create mode 100644 Tests/Fortran/in_interface/main.f90 create mode 100644 Tests/Fortran/in_interface/module.f90 create mode 100644 Tests/Fortran/include/test_preprocess.h create mode 100644 Tests/Fortran/mainc.c create mode 100644 Tests/Fortran/maincxx.c create mode 100644 Tests/Fortran/myc.c create mode 100644 Tests/Fortran/mycxx.cxx create mode 100644 Tests/Fortran/mysub.f create mode 100644 Tests/Fortran/test_module_implementation.f90 create mode 100644 Tests/Fortran/test_module_interface.f90 create mode 100644 Tests/Fortran/test_module_main.f90 create mode 100644 Tests/Fortran/test_preprocess.F90 create mode 100644 Tests/Fortran/test_use_in_comment_fixedform.f create mode 100644 Tests/Fortran/test_use_in_comment_freeform.f90 create mode 100644 Tests/Fortran/testf.f create mode 100644 Tests/Fortran/world.f create mode 100644 Tests/Fortran/world_gnu.def create mode 100644 Tests/Fortran/world_icl.def create mode 100644 Tests/FortranC/CMakeLists.txt create mode 100644 Tests/FortranC/Flags.cmake.in create mode 100755 Tests/FortranC/test_opt.sh.in create mode 100644 Tests/FortranOnly/CMakeLists.txt create mode 100644 Tests/FortranOnly/checksayhello.cmake create mode 100644 Tests/FortranOnly/checktestf2.cmake create mode 100644 Tests/FortranOnly/hello.f create mode 100644 Tests/FortranOnly/testf.f create mode 100644 Tests/FortranOnly/world.f create mode 100644 Tests/Framework/CMakeLists.txt create mode 100644 Tests/Framework/bar.cxx create mode 100644 Tests/Framework/foo.cxx create mode 100644 Tests/Framework/foo.h create mode 100644 Tests/Framework/foo2.h create mode 100644 Tests/Framework/fooBoth.h create mode 100644 Tests/Framework/fooDeepPublic.h create mode 100644 Tests/Framework/fooExtensionlessResource create mode 100644 Tests/Framework/fooNeither.h create mode 100644 Tests/Framework/fooPrivate.h create mode 100644 Tests/Framework/fooPrivateExtensionlessHeader create mode 100644 Tests/Framework/fooPublic.h create mode 100644 Tests/Framework/fooPublicExtensionlessHeader create mode 100644 Tests/Framework/test.lua create mode 100644 Tests/FunctionTest/CMakeLists.txt create mode 100644 Tests/FunctionTest/SubDirScope/CMakeLists.txt create mode 100644 Tests/FunctionTest/Util.cmake create mode 100644 Tests/FunctionTest/functionTest.c create mode 100644 Tests/IPO/CMakeLists.txt create mode 100644 Tests/IncludeDirectories/CMakeLists.txt create mode 100644 Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt create mode 100644 Tests/IncludeDirectories/TargetIncludeDirectories/main.cpp create mode 100644 Tests/IncludeDirectories/main.cpp create mode 100644 Tests/JCTest/CMakeLists.txt create mode 100644 Tests/JCTest/TestTime.cxx create mode 100644 Tests/Java/A.java create mode 100644 Tests/Java/CMakeLists.txt create mode 100644 Tests/Java/HelloWorld.java create mode 100644 Tests/Jump/CMakeLists.txt create mode 100644 Tests/Jump/Executable/CMakeLists.txt create mode 100644 Tests/Jump/Executable/jumpExecutable.cxx create mode 100644 Tests/Jump/Library/CMakeLists.txt create mode 100644 Tests/Jump/Library/Shared/CMakeLists.txt create mode 100644 Tests/Jump/Library/Shared/jumpShared.cxx create mode 100644 Tests/Jump/Library/Static/CMakeLists.txt create mode 100644 Tests/Jump/Library/Static/jumpStatic.cxx create mode 100755 Tests/KDE4StableBranchTest/test_kde4.sh.in create mode 100644 Tests/LibName/CMakeLists.txt create mode 100644 Tests/LibName/bar.c create mode 100644 Tests/LibName/foo.c create mode 100644 Tests/LibName/foobar.c create mode 100644 Tests/LinkDirectory/CMakeLists.txt create mode 100644 Tests/LinkDirectory/External/CMakeLists.txt create mode 100644 Tests/LinkDirectory/External/myexe.c create mode 100644 Tests/LinkDirectory/mylibA.c create mode 100644 Tests/LinkDirectory/mylibB.c create mode 100644 Tests/LinkFlags/CMakeLists.txt create mode 100644 Tests/LinkFlags/LinkFlags.c create mode 100644 Tests/LinkFlags/LinkFlagsExe.c create mode 100644 Tests/LinkFlags/LinkFlagsLib.c create mode 100644 Tests/LinkLanguage/CMakeLists.txt create mode 100644 Tests/LinkLanguage/LinkLanguage.c create mode 100644 Tests/LinkLanguage/foo.cxx create mode 100644 Tests/LinkLine/CMakeLists.txt create mode 100644 Tests/LinkLine/Exec.c create mode 100644 Tests/LinkLine/One.c create mode 100644 Tests/LinkLine/Two.c create mode 100644 Tests/LinkLineOrder/CMakeLists.txt create mode 100644 Tests/LinkLineOrder/Exec1.c create mode 100644 Tests/LinkLineOrder/Exec2.c create mode 100644 Tests/LinkLineOrder/NoDepA.c create mode 100644 Tests/LinkLineOrder/NoDepB.c create mode 100644 Tests/LinkLineOrder/NoDepC.c create mode 100644 Tests/LinkLineOrder/NoDepE.c create mode 100644 Tests/LinkLineOrder/NoDepF.c create mode 100644 Tests/LinkLineOrder/NoDepX.c create mode 100644 Tests/LinkLineOrder/NoDepY.c create mode 100644 Tests/LinkLineOrder/NoDepZ.c create mode 100644 Tests/LinkLineOrder/One.c create mode 100644 Tests/LinkLineOrder/Two.c create mode 100644 Tests/LinkStatic/CMakeLists.txt create mode 100644 Tests/LinkStatic/LinkStatic.c create mode 100644 Tests/LoadCommand/CMakeCommands/CMakeLists.txt create mode 100644 Tests/LoadCommand/CMakeCommands/cmTestCommand.c create mode 100644 Tests/LoadCommand/CMakeLists.txt create mode 100644 Tests/LoadCommand/LoadedCommand.cxx.in create mode 100644 Tests/LoadCommand/LoadedCommand.h.in create mode 100644 Tests/LoadCommandOneConfig/CMakeCommands/CMakeLists.txt create mode 100644 Tests/LoadCommandOneConfig/CMakeCommands/cmTestCommand.c create mode 100644 Tests/LoadCommandOneConfig/CMakeLists.txt create mode 100644 Tests/LoadCommandOneConfig/LoadedCommand.cxx.in create mode 100644 Tests/LoadCommandOneConfig/LoadedCommand.h.in create mode 100644 Tests/MFC/CMakeLists.txt create mode 100644 Tests/MFC/CMakeLists.txt.in create mode 100644 Tests/MFC/ValidateBuild.cmake.in create mode 100644 Tests/MFC/mfc1/.gitattributes create mode 100644 Tests/MFC/mfc1/ChildFrm.cpp create mode 100644 Tests/MFC/mfc1/ChildFrm.h create mode 100644 Tests/MFC/mfc1/MainFrm.cpp create mode 100644 Tests/MFC/mfc1/MainFrm.h create mode 100644 Tests/MFC/mfc1/ReadMe.txt create mode 100644 Tests/MFC/mfc1/Resource.h create mode 100644 Tests/MFC/mfc1/mfc1.cpp create mode 100644 Tests/MFC/mfc1/mfc1.h create mode 100644 Tests/MFC/mfc1/mfc1.rc create mode 100644 Tests/MFC/mfc1/mfc1.reg create mode 100644 Tests/MFC/mfc1/mfc1.sln create mode 100644 Tests/MFC/mfc1/mfc1.vcproj create mode 100644 Tests/MFC/mfc1/mfc1Doc.cpp create mode 100644 Tests/MFC/mfc1/mfc1Doc.h create mode 100644 Tests/MFC/mfc1/mfc1View.cpp create mode 100644 Tests/MFC/mfc1/mfc1View.h create mode 100644 Tests/MFC/mfc1/res/Toolbar.bmp create mode 100644 Tests/MFC/mfc1/res/mfc1.ico create mode 100644 Tests/MFC/mfc1/res/mfc1.manifest create mode 100644 Tests/MFC/mfc1/res/mfc1.rc2 create mode 100644 Tests/MFC/mfc1/res/mfc1Doc.ico create mode 100644 Tests/MFC/mfc1/stdafx.cpp create mode 100644 Tests/MFC/mfc1/stdafx.h create mode 100644 Tests/MFC/try_compile/CMakeLists.txt create mode 100644 Tests/MacroTest/CMakeLists.txt create mode 100644 Tests/MacroTest/context.cmake create mode 100644 Tests/MacroTest/macroTest.c create mode 100644 Tests/MakeClean/CMakeLists.txt create mode 100644 Tests/MakeClean/ToClean/CMakeLists.txt create mode 100644 Tests/MakeClean/ToClean/ToCleanFiles.cmake.in create mode 100644 Tests/MakeClean/ToClean/toclean.cxx create mode 100644 Tests/MakeClean/check_clean.c.in create mode 100644 Tests/MathTest/CMakeLists.txt create mode 100644 Tests/MathTest/MathTestExec.cxx create mode 100644 Tests/MathTest/MathTestTests.h.in create mode 100644 Tests/MissingSourceFile/CMakeLists.txt create mode 100644 Tests/Module/CheckTypeSize/CMakeLists.txt create mode 100644 Tests/Module/CheckTypeSize/CheckTypeSize.c create mode 100644 Tests/Module/CheckTypeSize/config.h.in create mode 100644 Tests/Module/GenerateExportHeader/CMakeLists.txt create mode 100644 Tests/Module/GenerateExportHeader/exportheader_test.cpp create mode 100644 Tests/Module/GenerateExportHeader/lib_shared_and_static/CMakeLists.txt create mode 100644 Tests/Module/GenerateExportHeader/lib_shared_and_static/libshared_and_static.cpp create mode 100644 Tests/Module/GenerateExportHeader/lib_shared_and_static/libshared_and_static.h create mode 100644 Tests/Module/GenerateExportHeader/lib_shared_and_statictest/CMakeLists.txt create mode 100644 Tests/Module/GenerateExportHeader/libshared/CMakeLists.txt create mode 100644 Tests/Module/GenerateExportHeader/libshared/libshared.cpp create mode 100644 Tests/Module/GenerateExportHeader/libshared/libshared.h create mode 100644 Tests/Module/GenerateExportHeader/libsharedtest/CMakeLists.txt create mode 100644 Tests/Module/GenerateExportHeader/libstatic/CMakeLists.txt create mode 100644 Tests/Module/GenerateExportHeader/libstatic/libstatic.cpp create mode 100644 Tests/Module/GenerateExportHeader/libstatic/libstatic.h create mode 100644 Tests/Module/GenerateExportHeader/libstatictest/CMakeLists.txt create mode 100644 Tests/Module/GenerateExportHeader/nodeprecated/CMakeLists.txt create mode 100644 Tests/Module/GenerateExportHeader/nodeprecated/CMakeLists.txt.in create mode 100644 Tests/Module/GenerateExportHeader/nodeprecated/src/main.cpp create mode 100644 Tests/Module/GenerateExportHeader/nodeprecated/src/someclass.cpp create mode 100644 Tests/Module/GenerateExportHeader/nodeprecated/src/someclass.h create mode 100644 Tests/Module/GenerateExportHeader/override_symbol/CMakeLists.txt create mode 100644 Tests/Module/GenerateExportHeader/override_symbol/main.cpp create mode 100644 Tests/Module/GenerateExportHeader/override_symbol/someclass.cpp create mode 100644 Tests/Module/GenerateExportHeader/override_symbol/someclass.h create mode 100644 Tests/Module/GenerateExportHeader/prefix/CMakeLists.txt create mode 100644 Tests/Module/GenerateExportHeader/prefix/main.cpp create mode 100644 Tests/Module/GenerateExportHeader/prefix/useprefixclass.cpp create mode 100644 Tests/Module/GenerateExportHeader/prefix/useprefixclass.h create mode 100644 Tests/ModuleDefinition/CMakeLists.txt create mode 100644 Tests/ModuleDefinition/example_dll.c create mode 100644 Tests/ModuleDefinition/example_dll.def create mode 100644 Tests/ModuleDefinition/example_dll_2.c create mode 100644 Tests/ModuleDefinition/example_dll_2.def create mode 100644 Tests/ModuleDefinition/example_dll_gen.c create mode 100644 Tests/ModuleDefinition/example_dll_gen.def.in create mode 100644 Tests/ModuleDefinition/example_exe.c create mode 100644 Tests/ModuleDefinition/example_exe.def create mode 100644 Tests/ModuleDefinition/example_mod_1.c create mode 100644 Tests/NewlineArgs/CMakeLists.txt create mode 100644 Tests/NewlineArgs/cxxonly.cxx create mode 100644 Tests/NewlineArgs/libcxx1.cxx create mode 100644 Tests/NewlineArgs/libcxx1.h create mode 100644 Tests/NewlineArgs/libcxx2.h.in create mode 100644 Tests/ObjC++/CMakeLists.txt create mode 100644 Tests/ObjC++/objc++.mm create mode 100644 Tests/ObjectLibrary/A/CMakeLists.txt create mode 100644 Tests/ObjectLibrary/A/a.h create mode 100644 Tests/ObjectLibrary/A/a1.c.in create mode 100644 Tests/ObjectLibrary/A/a2.c create mode 100644 Tests/ObjectLibrary/AB.def create mode 100644 Tests/ObjectLibrary/B/CMakeLists.txt create mode 100644 Tests/ObjectLibrary/B/b.h create mode 100644 Tests/ObjectLibrary/B/b1.c create mode 100644 Tests/ObjectLibrary/B/b1_vs6.c create mode 100644 Tests/ObjectLibrary/B/b2.c create mode 100644 Tests/ObjectLibrary/B/b2_vs6.c create mode 100644 Tests/ObjectLibrary/CMakeLists.txt create mode 100644 Tests/ObjectLibrary/c.c create mode 100644 Tests/ObjectLibrary/dummy.c create mode 100644 Tests/ObjectLibrary/dummy.obj create mode 100644 Tests/ObjectLibrary/main.c create mode 100644 Tests/ObjectLibrary/mainAB.c create mode 100644 Tests/OutDir/CMakeLists.txt create mode 100644 Tests/OutDir/OutDir.c create mode 100644 Tests/OutDir/OutDir.cmake create mode 100644 Tests/OutOfBinary/CMakeLists.txt create mode 100644 Tests/OutOfBinary/outlib.c create mode 100644 Tests/OutOfSource/CMakeLists.txt create mode 100644 Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt create mode 100644 Tests/OutOfSource/OutOfSourceSubdir/simple.cxx create mode 100644 Tests/OutOfSource/OutOfSourceSubdir/simple.cxx.in create mode 100644 Tests/OutOfSource/OutOfSourceSubdir/testlib.cxx create mode 100644 Tests/OutOfSource/OutOfSourceSubdir/testlib.h create mode 100644 Tests/OutOfSource/SubDir/CMakeLists.txt create mode 100644 Tests/OutOfSource/simple.cxx create mode 100644 Tests/OutOfSource/testdp.h.in create mode 100644 Tests/PerConfig/CMakeLists.txt create mode 100644 Tests/PerConfig/pcShared.c create mode 100644 Tests/PerConfig/pcShared.h create mode 100644 Tests/PerConfig/pcStatic.c create mode 100644 Tests/PerConfig/perconfig.c create mode 100644 Tests/PerConfig/perconfig.cmake create mode 100644 Tests/Plugin/CMakeLists.txt create mode 100644 Tests/Plugin/include/example.h create mode 100644 Tests/Plugin/src/example_exe.cxx create mode 100644 Tests/Plugin/src/example_exe.h.in create mode 100644 Tests/Plugin/src/example_mod_1.c create mode 100644 Tests/Policy0002/A/CMakeLists.txt create mode 100644 Tests/Policy0002/CMakeLists.txt create mode 100644 Tests/Policy0002/policy0002.c create mode 100644 Tests/PolicyScope/Bar.cmake create mode 100644 Tests/PolicyScope/CMakeLists.txt create mode 100644 Tests/PolicyScope/FindFoo.cmake create mode 100644 Tests/PolicyScope/main.c create mode 100644 Tests/PreOrder/CMakeLists.txt create mode 100644 Tests/PreOrder/Library/CMakeLists.txt create mode 100644 Tests/PreOrder/Library/simpleLib.cxx create mode 100644 Tests/PreOrder/simple.cxx create mode 100644 Tests/PrecompiledHeader/CMakeLists.txt create mode 100644 Tests/PrecompiledHeader/foo1.c create mode 100644 Tests/PrecompiledHeader/foo2.c create mode 100644 Tests/PrecompiledHeader/foo_precompile.c create mode 100644 Tests/PrecompiledHeader/include/foo.h create mode 100644 Tests/PrecompiledHeader/include/foo_precompiled.h create mode 100644 Tests/Preprocess/CMakeLists.txt create mode 100644 Tests/Preprocess/file_def.h create mode 100644 Tests/Preprocess/preprocess.c create mode 100644 Tests/Preprocess/preprocess.cxx create mode 100644 Tests/Preprocess/preprocess.h.in create mode 100644 Tests/Preprocess/preprocess_vs6.cxx create mode 100644 Tests/Preprocess/target_def.h create mode 100644 Tests/Properties/CMakeLists.txt create mode 100644 Tests/Properties/SubDir/properties3.cxx create mode 100644 Tests/Properties/properties.h.in create mode 100644 Tests/Properties/properties2.h create mode 100644 Tests/Qt4Deploy/CMakeLists.txt create mode 100644 Tests/Qt4Deploy/testdeploy.cpp create mode 100644 Tests/QtAutomoc/CMakeLists.txt create mode 100644 Tests/QtAutomoc/abc.cpp create mode 100644 Tests/QtAutomoc/abc.h create mode 100644 Tests/QtAutomoc/abc_p.h create mode 100644 Tests/QtAutomoc/bar.cpp create mode 100644 Tests/QtAutomoc/blub.cpp create mode 100644 Tests/QtAutomoc/blub.h create mode 100644 Tests/QtAutomoc/calwidget.cpp create mode 100644 Tests/QtAutomoc/calwidget.h create mode 100644 Tests/QtAutomoc/codeeditor.cpp create mode 100644 Tests/QtAutomoc/codeeditor.h create mode 100644 Tests/QtAutomoc/foo.cpp create mode 100644 Tests/QtAutomoc/foo.h create mode 100644 Tests/QtAutomoc/main.cpp create mode 100644 Tests/QtAutomoc/private_slot.cpp create mode 100644 Tests/QtAutomoc/private_slot.h create mode 100644 Tests/QtAutomoc/sub/bar.h create mode 100644 Tests/QtAutomoc/xyz.cpp create mode 100644 Tests/QtAutomoc/xyz.h create mode 100644 Tests/QtAutomoc/yaf.cpp create mode 100644 Tests/QtAutomoc/yaf.h create mode 100644 Tests/QtAutomoc/yaf_p.h create mode 100644 Tests/README create mode 100644 Tests/ReturnTest/CMakeLists.txt create mode 100644 Tests/ReturnTest/include_return.cmake create mode 100644 Tests/ReturnTest/returnTest.c create mode 100644 Tests/ReturnTest/subdir/CMakeLists.txt create mode 100644 Tests/RunCMake/CMakeLists.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadObjSource1-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadObjSource1-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadObjSource1.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/BadObjSource2-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadObjSource2-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadObjSource2.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/BadSourceExpression1-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadSourceExpression1-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadSourceExpression1.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/BadSourceExpression2-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadSourceExpression2-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadSourceExpression2.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/BadSourceExpression3-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadSourceExpression3-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/BadSourceExpression3.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/CMakeLists.txt create mode 100644 Tests/RunCMake/ObjectLibrary/Export-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/Export-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/Export.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/ExportLanguages.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/Import-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/Import-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/Import.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/Install-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/Install-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/Install.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/LinkObjLHS-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/LinkObjLHS-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/LinkObjLHS.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/LinkObjRHS1-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/LinkObjRHS1-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/LinkObjRHS1.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/LinkObjRHS2-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/LinkObjRHS2-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/LinkObjRHS2.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/ObjWithObj-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/ObjWithObj-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/ObjWithObj.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/PostBuild-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/PostBuild-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/PostBuild.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/PreBuild-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/PreBuild-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/PreBuild.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/PreLink-result.txt create mode 100644 Tests/RunCMake/ObjectLibrary/PreLink-stderr.txt create mode 100644 Tests/RunCMake/ObjectLibrary/PreLink.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/RunCMakeTest.cmake create mode 100644 Tests/RunCMake/ObjectLibrary/a.c create mode 100644 Tests/RunCMake/ObjectLibrary/a.cxx create mode 100644 Tests/RunCMake/ObjectLibrary/bad.def create mode 100644 Tests/RunCMake/ObjectLibrary/bad.obj create mode 100644 Tests/RunCMake/RunCMake.cmake create mode 100644 Tests/RunCMake/build_command/CMakeLists.txt create mode 100644 Tests/RunCMake/build_command/ErrorsOFF-stderr.txt create mode 100644 Tests/RunCMake/build_command/ErrorsOFF-stdout.txt create mode 100644 Tests/RunCMake/build_command/ErrorsOFF.cmake create mode 100644 Tests/RunCMake/build_command/ErrorsON-result.txt create mode 100644 Tests/RunCMake/build_command/ErrorsON-stderr.txt create mode 100644 Tests/RunCMake/build_command/ErrorsON-stdout.txt create mode 100644 Tests/RunCMake/build_command/ErrorsON.cmake create mode 100644 Tests/RunCMake/build_command/RunCMakeTest.cmake create mode 100644 Tests/RunCMake/find_package/CMakeLists.txt create mode 100644 Tests/RunCMake/find_package/ComponentRequiredAndOptional-result.txt create mode 100644 Tests/RunCMake/find_package/ComponentRequiredAndOptional-stderr.txt create mode 100644 Tests/RunCMake/find_package/ComponentRequiredAndOptional.cmake create mode 100644 Tests/RunCMake/find_package/MissingConfig-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingConfig.cmake create mode 100644 Tests/RunCMake/find_package/MissingConfigOneName-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingConfigOneName.cmake create mode 100644 Tests/RunCMake/find_package/MissingConfigRequired-result.txt create mode 100644 Tests/RunCMake/find_package/MissingConfigRequired-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingConfigRequired.cmake create mode 100644 Tests/RunCMake/find_package/MissingConfigVersion-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingConfigVersion.cmake create mode 100644 Tests/RunCMake/find_package/MissingModule-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingModule.cmake create mode 100644 Tests/RunCMake/find_package/MissingModuleRequired-result.txt create mode 100644 Tests/RunCMake/find_package/MissingModuleRequired-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingModuleRequired.cmake create mode 100644 Tests/RunCMake/find_package/MissingNormal-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingNormal.cmake create mode 100644 Tests/RunCMake/find_package/MissingNormalRequired-result.txt create mode 100644 Tests/RunCMake/find_package/MissingNormalRequired-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingNormalRequired.cmake create mode 100644 Tests/RunCMake/find_package/MissingNormalVersion-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingNormalVersion.cmake create mode 100644 Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew.cmake create mode 100644 Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld-stderr.txt create mode 100644 Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld.cmake create mode 100644 Tests/RunCMake/find_package/MixedModeOptions-result.txt create mode 100644 Tests/RunCMake/find_package/MixedModeOptions-stderr.txt create mode 100644 Tests/RunCMake/find_package/MixedModeOptions.cmake create mode 100644 Tests/RunCMake/find_package/RunCMakeTest.cmake create mode 100644 Tests/RunCMake/find_package/SetFoundFALSE-stderr.txt create mode 100644 Tests/RunCMake/find_package/SetFoundFALSE.cmake create mode 100644 Tests/RunCMake/find_package/SetFoundFALSEConfig.cmake create mode 100644 Tests/RuntimePath/CMakeLists.txt create mode 100644 Tests/RuntimePath/bar1.c create mode 100644 Tests/RuntimePath/bar2.c create mode 100644 Tests/RuntimePath/foo1.c create mode 100644 Tests/RuntimePath/foo2.c create mode 100644 Tests/RuntimePath/main.c create mode 100644 Tests/SBCS/CMakeLists.txt create mode 100644 Tests/SBCS/SBCS.cxx create mode 100644 Tests/SameName/CMakeLists.txt create mode 100644 Tests/SameName/Exe1/CMakeLists.txt create mode 100644 Tests/SameName/Exe1/conly.c create mode 100644 Tests/SameName/Lib1/CMakeLists.txt create mode 100644 Tests/SameName/Lib1/libc1.c create mode 100644 Tests/SameName/Lib1/libc1.h create mode 100644 Tests/SetLang/CMakeLists.txt create mode 100644 Tests/SetLang/bar.c create mode 100644 Tests/SetLang/foo.c create mode 100644 Tests/Simple/CMakeLists.txt create mode 100644 Tests/Simple/simple.cxx create mode 100644 Tests/Simple/simpleCLib.c create mode 100644 Tests/Simple/simpleLib.cxx create mode 100644 Tests/Simple/simpleWe.cpp create mode 100644 Tests/SimpleCOnly/CMakeLists.txt create mode 100644 Tests/SimpleCOnly/bar.c create mode 100644 Tests/SimpleCOnly/foo.c create mode 100644 Tests/SimpleCOnly/main.c create mode 100644 Tests/SimpleExclude/CMakeLists.txt create mode 100644 Tests/SimpleExclude/dirC/CMakeLists.txt create mode 100644 Tests/SimpleExclude/dirC/dirA/CMakeLists.txt create mode 100644 Tests/SimpleExclude/dirC/dirA/t1.c create mode 100644 Tests/SimpleExclude/dirC/dirA/t2.c create mode 100644 Tests/SimpleExclude/dirC/dirA/t3.c create mode 100644 Tests/SimpleExclude/dirC/dirA/t4.c create mode 100644 Tests/SimpleExclude/dirC/dirA/t5.c create mode 100644 Tests/SimpleExclude/dirC/dirB/CMakeLists.txt create mode 100644 Tests/SimpleExclude/dirC/dirB/t6.c create mode 100644 Tests/SimpleExclude/dirC/dirB/t7.c create mode 100644 Tests/SimpleExclude/dirD/CMakeLists.txt create mode 100644 Tests/SimpleExclude/dirD/t8.c create mode 100644 Tests/SimpleExclude/dirD/t9.c create mode 100644 Tests/SimpleExclude/run.cmake.in create mode 100644 Tests/SimpleInstall/CMakeLists.txt create mode 100644 Tests/SimpleInstall/InstallScript1.cmake create mode 100644 Tests/SimpleInstall/InstallScript2.cmake create mode 100644 Tests/SimpleInstall/InstallScript3.cmake create mode 100644 Tests/SimpleInstall/InstallScript4.cmake create mode 100644 Tests/SimpleInstall/PackageScript.cmake create mode 100644 Tests/SimpleInstall/PostInstall.cmake create mode 100644 Tests/SimpleInstall/PreInstall.cmake create mode 100644 Tests/SimpleInstall/TestSubDir/CMakeLists.txt create mode 100644 Tests/SimpleInstall/TestSubDir/TSD.cxx create mode 100644 Tests/SimpleInstall/TestSubDir/TSD.h create mode 100644 Tests/SimpleInstall/TestSubDir/TSD_utils.cxx create mode 100644 Tests/SimpleInstall/foo.c create mode 100644 Tests/SimpleInstall/foo.h create mode 100644 Tests/SimpleInstall/inst.cxx create mode 100644 Tests/SimpleInstall/inst2.cxx create mode 100644 Tests/SimpleInstall/lib1.cxx create mode 100644 Tests/SimpleInstall/lib1.h create mode 100644 Tests/SimpleInstall/lib2.cxx create mode 100644 Tests/SimpleInstall/lib2.h create mode 100644 Tests/SimpleInstall/lib3.cxx create mode 100644 Tests/SimpleInstall/lib3.h create mode 100644 Tests/SimpleInstall/lib4.cxx create mode 100644 Tests/SimpleInstall/lib4.h create mode 100644 Tests/SimpleInstall/scripts/.gitattributes create mode 100644 Tests/SimpleInstall/scripts/CMakeLists.txt create mode 100755 Tests/SimpleInstall/scripts/sample_script create mode 100755 Tests/SimpleInstall/scripts/sample_script.bat create mode 100644 Tests/SimpleInstallS2/CMakeLists.txt create mode 100644 Tests/SimpleInstallS2/InstallScript1.cmake create mode 100644 Tests/SimpleInstallS2/InstallScript2.cmake create mode 100644 Tests/SimpleInstallS2/InstallScript3.cmake create mode 100644 Tests/SimpleInstallS2/InstallScript4.cmake create mode 100644 Tests/SimpleInstallS2/PackageScript.cmake create mode 100644 Tests/SimpleInstallS2/PostInstall.cmake create mode 100644 Tests/SimpleInstallS2/PreInstall.cmake create mode 100644 Tests/SimpleInstallS2/TestSubDir/CMakeLists.txt create mode 100644 Tests/SimpleInstallS2/TestSubDir/TSD.cxx create mode 100644 Tests/SimpleInstallS2/TestSubDir/TSD.h create mode 100644 Tests/SimpleInstallS2/TestSubDir/TSD_utils.cxx create mode 100644 Tests/SimpleInstallS2/foo.c create mode 100644 Tests/SimpleInstallS2/foo.h create mode 100644 Tests/SimpleInstallS2/inst.cxx create mode 100644 Tests/SimpleInstallS2/inst2.cxx create mode 100644 Tests/SimpleInstallS2/lib1.cxx create mode 100644 Tests/SimpleInstallS2/lib1.h create mode 100644 Tests/SimpleInstallS2/lib2.cxx create mode 100644 Tests/SimpleInstallS2/lib2.h create mode 100644 Tests/SimpleInstallS2/lib3.cxx create mode 100644 Tests/SimpleInstallS2/lib3.h create mode 100644 Tests/SimpleInstallS2/lib4.cxx create mode 100644 Tests/SimpleInstallS2/lib4.h create mode 100644 Tests/SimpleInstallS2/scripts/.gitattributes create mode 100644 Tests/SimpleInstallS2/scripts/CMakeLists.txt create mode 100755 Tests/SimpleInstallS2/scripts/sample_script create mode 100755 Tests/SimpleInstallS2/scripts/sample_script.bat create mode 100644 Tests/SourceGroups/CMakeLists.txt create mode 100644 Tests/SourceGroups/README.txt create mode 100644 Tests/SourceGroups/bar.c create mode 100644 Tests/SourceGroups/baz.c create mode 100644 Tests/SourceGroups/foo.c create mode 100644 Tests/SourceGroups/main.c create mode 100644 Tests/SourceGroups/sub1/foo.c create mode 100644 Tests/SourceGroups/sub1/foobar.c create mode 100644 Tests/StringFileTest/CMakeLists.txt create mode 100644 Tests/StringFileTest/InputFile.h.in create mode 100644 Tests/StringFileTest/StringFile.cxx create mode 100644 Tests/StringFileTest/main.ihx create mode 100644 Tests/StringFileTest/main.srec create mode 100644 Tests/StringFileTest/test.bin create mode 100644 Tests/SubDir/AnotherSubdir/pair+int.int.c create mode 100644 Tests/SubDir/AnotherSubdir/pair_int.int.c create mode 100644 Tests/SubDir/AnotherSubdir/secondone.c create mode 100644 Tests/SubDir/AnotherSubdir/testfromsubdir.c create mode 100644 Tests/SubDir/CMakeLists.txt create mode 100644 Tests/SubDir/Examples/CMakeLists.txt create mode 100644 Tests/SubDir/Examples/example1/CMakeLists.txt create mode 100644 Tests/SubDir/Examples/example1/example1.cxx create mode 100644 Tests/SubDir/Examples/example2/CMakeLists.txt create mode 100644 Tests/SubDir/Examples/example2/example2.cxx create mode 100644 Tests/SubDir/Executable/CMakeLists.txt create mode 100644 Tests/SubDir/Executable/test.cxx create mode 100644 Tests/SubDir/ThirdSubDir/pair+int.int1.c create mode 100644 Tests/SubDir/ThirdSubDir/pair_int.int1.c create mode 100644 Tests/SubDir/ThirdSubDir/pair_p_int.int1.c create mode 100644 Tests/SubDir/ThirdSubDir/testfromauxsubdir.c create mode 100644 Tests/SubDir/ThirdSubDir/thirdone.c create mode 100644 Tests/SubDir/vcl_algorithm+vcl_pair+double.foo.c create mode 100644 Tests/SubDir/vcl_algorithm_vcl_pair_double.foo.c create mode 100644 Tests/SubDirSpaces/Another Subdir/pair+int.int.c create mode 100644 Tests/SubDirSpaces/Another Subdir/pair_int.int.c create mode 100644 Tests/SubDirSpaces/Another Subdir/secondone.c create mode 100644 Tests/SubDirSpaces/Another Subdir/testfromsubdir.c create mode 100644 Tests/SubDirSpaces/CMakeLists.txt create mode 100644 Tests/SubDirSpaces/Executable Sources/CMakeLists.txt create mode 100644 Tests/SubDirSpaces/Executable Sources/test.cxx create mode 100644 Tests/SubDirSpaces/Executable/CMakeLists.txt create mode 100644 Tests/SubDirSpaces/Executable/test.cxx create mode 100644 Tests/SubDirSpaces/Some Examples/CMakeLists.txt create mode 100644 Tests/SubDirSpaces/Some Examples/example1/CMakeLists.txt create mode 100644 Tests/SubDirSpaces/Some Examples/example1/example1.cxx create mode 100644 Tests/SubDirSpaces/Some Examples/example2/CMakeLists.txt create mode 100644 Tests/SubDirSpaces/Some Examples/example2/example2.cxx create mode 100644 Tests/SubDirSpaces/Some(x86) Sources/CMakeLists.txt create mode 100644 Tests/SubDirSpaces/Some(x86) Sources/test.c create mode 100644 Tests/SubDirSpaces/ThirdSubDir/pair+int.int1.c create mode 100644 Tests/SubDirSpaces/ThirdSubDir/pair_int.int1.c create mode 100644 Tests/SubDirSpaces/ThirdSubDir/pair_p_int.int1.c create mode 100644 Tests/SubDirSpaces/ThirdSubDir/testfromauxsubdir.c create mode 100644 Tests/SubDirSpaces/ThirdSubDir/thirdone.c create mode 100644 Tests/SubDirSpaces/vcl_algorithm+vcl_pair+double.foo.c create mode 100644 Tests/SubDirSpaces/vcl_algorithm_vcl_pair_double.foo.c create mode 100644 Tests/SubProject/CMakeLists.txt create mode 100644 Tests/SubProject/bar.cxx create mode 100644 Tests/SubProject/car.cxx create mode 100644 Tests/SubProject/foo/CMakeLists.txt create mode 100644 Tests/SubProject/foo/foo.cxx create mode 100644 Tests/SwigTest/CMakeLists.txt create mode 100644 Tests/SwigTest/example.cxx create mode 100644 Tests/SwigTest/example.h create mode 100644 Tests/SwigTest/example.i create mode 100644 Tests/SwigTest/runme.php4 create mode 100755 Tests/SwigTest/runme.pike create mode 100644 Tests/SwigTest/runme.pl create mode 100644 Tests/SwigTest/runme.py create mode 100644 Tests/SwigTest/runme.rb create mode 100644 Tests/SwigTest/runme.tcl create mode 100644 Tests/SwigTest/runme2.tcl create mode 100644 Tests/SystemInformation/CMakeLists.txt create mode 100644 Tests/SystemInformation/DumpInformation.cxx create mode 100644 Tests/SystemInformation/DumpInformation.h.in create mode 100644 Tests/SystemInformation/SystemInformation.in create mode 100644 Tests/TarTest/CMakeLists.txt create mode 100644 Tests/TarTest/TestTarExec.cxx create mode 100644 Tests/TargetName/CMakeLists.txt create mode 100644 Tests/TargetName/executables/CMakeLists.txt create mode 100644 Tests/TargetName/executables/hello_world.c create mode 100644 Tests/TargetName/scripts/.gitattributes create mode 100644 Tests/TargetName/scripts/CMakeLists.txt create mode 100755 Tests/TargetName/scripts/hello_world create mode 100644 Tests/TestDriver/CMakeLists.txt create mode 100644 Tests/TestDriver/subdir/test3.cxx create mode 100644 Tests/TestDriver/test1.cxx create mode 100644 Tests/TestDriver/test2.cxx create mode 100644 Tests/TestDriver/testArgs.h create mode 100644 Tests/TestDriver/testExtraStuff.cxx create mode 100644 Tests/TestDriver/testExtraStuff2.cxx create mode 100644 Tests/TestDriver/testExtraStuff3.cxx create mode 100755 Tests/TestInstall.sh.in create mode 100644 Tests/Testing/CMakeLists.txt create mode 100644 Tests/Testing/DartConfig.cmake create mode 100644 Tests/Testing/Sub/Sub2/CMakeLists.txt create mode 100644 Tests/Testing/Sub/Sub2/testing2.cxx create mode 100644 Tests/Testing/testing.cxx create mode 100644 Tests/TestsWorkingDirectory/CMakeLists.txt create mode 100644 Tests/TestsWorkingDirectory/main.c create mode 100644 Tests/TestsWorkingDirectory/subdir/CMakeLists.txt create mode 100644 Tests/TryCompile/CMakeLists.txt create mode 100644 Tests/TryCompile/Inner/CMakeLists.txt create mode 100644 Tests/TryCompile/Inner/innerexe.c create mode 100644 Tests/TryCompile/Inner/innerlib.c create mode 100644 Tests/TryCompile/exit_success.c create mode 100644 Tests/TryCompile/exit_with_error.c create mode 100644 Tests/TryCompile/expect_arg.c create mode 100644 Tests/TryCompile/fail.c create mode 100644 Tests/TryCompile/pass.c create mode 100644 Tests/Tutorial/Step1/CMakeLists.txt create mode 100644 Tests/Tutorial/Step1/TutorialConfig.h.in create mode 100644 Tests/Tutorial/Step1/tutorial.cxx create mode 100644 Tests/Tutorial/Step2/CMakeLists.txt create mode 100644 Tests/Tutorial/Step2/MathFunctions/CMakeLists.txt create mode 100644 Tests/Tutorial/Step2/MathFunctions/MathFunctions.h create mode 100644 Tests/Tutorial/Step2/MathFunctions/mysqrt.cxx create mode 100644 Tests/Tutorial/Step2/TutorialConfig.h.in create mode 100644 Tests/Tutorial/Step2/tutorial.cxx create mode 100644 Tests/Tutorial/Step3/CMakeLists.txt create mode 100644 Tests/Tutorial/Step3/MathFunctions/CMakeLists.txt create mode 100644 Tests/Tutorial/Step3/MathFunctions/MathFunctions.h create mode 100644 Tests/Tutorial/Step3/MathFunctions/mysqrt.cxx create mode 100644 Tests/Tutorial/Step3/TutorialConfig.h.in create mode 100644 Tests/Tutorial/Step3/tutorial.cxx create mode 100644 Tests/Tutorial/Step4/CMakeLists.txt create mode 100644 Tests/Tutorial/Step4/MathFunctions/CMakeLists.txt create mode 100644 Tests/Tutorial/Step4/MathFunctions/MathFunctions.h create mode 100644 Tests/Tutorial/Step4/MathFunctions/mysqrt.cxx create mode 100644 Tests/Tutorial/Step4/TutorialConfig.h.in create mode 100644 Tests/Tutorial/Step4/tutorial.cxx create mode 100644 Tests/Tutorial/Step5/CMakeLists.txt create mode 100644 Tests/Tutorial/Step5/MathFunctions/CMakeLists.txt create mode 100644 Tests/Tutorial/Step5/MathFunctions/MakeTable.cxx create mode 100644 Tests/Tutorial/Step5/MathFunctions/MathFunctions.h create mode 100644 Tests/Tutorial/Step5/MathFunctions/mysqrt.cxx create mode 100644 Tests/Tutorial/Step5/TutorialConfig.h.in create mode 100644 Tests/Tutorial/Step5/tutorial.cxx create mode 100644 Tests/Tutorial/Step6/CMakeLists.txt create mode 100644 Tests/Tutorial/Step6/License.txt create mode 100644 Tests/Tutorial/Step6/MathFunctions/CMakeLists.txt create mode 100644 Tests/Tutorial/Step6/MathFunctions/MakeTable.cxx create mode 100644 Tests/Tutorial/Step6/MathFunctions/MathFunctions.h create mode 100644 Tests/Tutorial/Step6/MathFunctions/mysqrt.cxx create mode 100644 Tests/Tutorial/Step6/TutorialConfig.h.in create mode 100644 Tests/Tutorial/Step6/tutorial.cxx create mode 100644 Tests/Tutorial/Step7/CMakeLists.txt create mode 100644 Tests/Tutorial/Step7/CTestConfig.cmake create mode 100644 Tests/Tutorial/Step7/License.txt create mode 100644 Tests/Tutorial/Step7/MathFunctions/CMakeLists.txt create mode 100644 Tests/Tutorial/Step7/MathFunctions/MakeTable.cxx create mode 100644 Tests/Tutorial/Step7/MathFunctions/MathFunctions.h create mode 100644 Tests/Tutorial/Step7/MathFunctions/mysqrt.cxx create mode 100644 Tests/Tutorial/Step7/TutorialConfig.h.in create mode 100644 Tests/Tutorial/Step7/build1.cmake create mode 100644 Tests/Tutorial/Step7/build2.cmake create mode 100644 Tests/Tutorial/Step7/tutorial.cxx create mode 100644 Tests/Unset/CMakeLists.txt create mode 100644 Tests/Unset/unset.c create mode 100644 Tests/VSExternalInclude/CMakeLists.txt create mode 100644 Tests/VSExternalInclude/Lib1/CMakeLists.txt create mode 100644 Tests/VSExternalInclude/Lib1/lib1.cpp create mode 100644 Tests/VSExternalInclude/Lib1/lib1.h create mode 100644 Tests/VSExternalInclude/Lib2/CMakeLists.txt create mode 100644 Tests/VSExternalInclude/Lib2/lib2.cpp create mode 100644 Tests/VSExternalInclude/Lib2/lib2.h create mode 100644 Tests/VSExternalInclude/main.cpp create mode 100644 Tests/VSGNUFortran/CMakeLists.txt create mode 100644 Tests/VSGNUFortran/c_code/CMakeLists.txt create mode 100644 Tests/VSGNUFortran/c_code/main.c create mode 100644 Tests/VSGNUFortran/runtest.cmake.in create mode 100644 Tests/VSGNUFortran/subdir/CMakeLists.txt create mode 100644 Tests/VSGNUFortran/subdir/fortran/CMakeLists.txt create mode 100644 Tests/VSGNUFortran/subdir/fortran/hello.f create mode 100644 Tests/VSGNUFortran/subdir/fortran/world.f create mode 100644 Tests/VSMidl/CMakeLists.txt create mode 100644 Tests/VSMidl/src/CMakeLists.txt create mode 100644 Tests/VSMidl/src/main.cpp create mode 100644 Tests/VSMidl/src/test.idl create mode 100644 Tests/VSResource/CMakeLists.txt create mode 100644 Tests/VSResource/main.cpp create mode 100644 Tests/VSResource/test.rc create mode 100644 Tests/VSResource/test.txt create mode 100644 Tests/VariableUnusedViaSet/CMakeLists.txt create mode 100644 Tests/VariableUnusedViaUnset/CMakeLists.txt create mode 100644 Tests/VariableUsage/CMakeLists.txt create mode 100644 Tests/Wrapping/CMakeLists.txt create mode 100644 Tests/Wrapping/Wrap.c create mode 100644 Tests/Wrapping/dummy create mode 100644 Tests/Wrapping/fakefluid.cxx create mode 100644 Tests/Wrapping/fltk1.fl create mode 100644 Tests/Wrapping/foo.ui.in create mode 100644 Tests/Wrapping/hints create mode 100644 Tests/Wrapping/itkWrapperConfig.cxx create mode 100644 Tests/Wrapping/qtnoqtmain.cxx create mode 100644 Tests/Wrapping/qtwrapping.ui create mode 100644 Tests/Wrapping/qtwrappingmain.cxx create mode 100644 Tests/Wrapping/vtkExcluded.cxx create mode 100644 Tests/Wrapping/vtkExcluded.h create mode 100644 Tests/Wrapping/vtkIncluded.cxx create mode 100644 Tests/Wrapping/vtkIncluded.h create mode 100644 Tests/Wrapping/vtkTestMoc.h create mode 100644 Tests/Wrapping/wrapping.cxx create mode 100644 Tests/X11/CMakeLists.txt create mode 100644 Tests/X11/HelloWorldX11.cxx create mode 100644 Tests/X11/X11.c create mode 100644 Tests/bootstrap.bat.in create mode 100644 Tests/iOSNavApp/CMakeLists.txt create mode 100644 Tests/iOSNavApp/Classes/NavApp3AppDelegate.h create mode 100644 Tests/iOSNavApp/Classes/NavApp3AppDelegate.m create mode 100644 Tests/iOSNavApp/Classes/RootViewController.h create mode 100644 Tests/iOSNavApp/Classes/RootViewController.m create mode 100644 Tests/iOSNavApp/Info.plist.in create mode 100644 Tests/iOSNavApp/MainWindow.xib create mode 100644 Tests/iOSNavApp/NavApp3_Prefix.pch create mode 100644 Tests/iOSNavApp/RootViewController.xib create mode 100644 Tests/iOSNavApp/TotalFunction.c create mode 100644 Tests/iOSNavApp/TotalFunction.h create mode 100644 Tests/iOSNavApp/main.m create mode 100644 Tests/test_clean.cmake.in create mode 100644 Utilities/.NoDartCoverage create mode 100644 Utilities/CMakeLists.txt create mode 100644 Utilities/Doxygen/CMakeLists.txt create mode 100644 Utilities/Doxygen/authors.txt create mode 100755 Utilities/Doxygen/doc_makeall.sh.in create mode 100644 Utilities/Doxygen/doxyfile.in create mode 100755 Utilities/Git/commit-msg create mode 100755 Utilities/Git/pre-commit create mode 100755 Utilities/Git/prepare-commit-msg create mode 100644 Utilities/KWIML/ABI.h.in create mode 100644 Utilities/KWIML/CMakeLists.txt create mode 100644 Utilities/KWIML/Copyright.txt create mode 100644 Utilities/KWIML/INT.h.in create mode 100644 Utilities/KWIML/README.txt create mode 100644 Utilities/KWIML/test/CMakeLists.txt create mode 100644 Utilities/KWIML/test/test.c create mode 100644 Utilities/KWIML/test/test.cxx create mode 100644 Utilities/KWIML/test/test.h create mode 100644 Utilities/KWIML/test/test_ABI_C.c create mode 100644 Utilities/KWIML/test/test_ABI_CXX.cxx create mode 100644 Utilities/KWIML/test/test_ABI_endian.h.in create mode 100644 Utilities/KWIML/test/test_INT_C.c create mode 100644 Utilities/KWIML/test/test_INT_CXX.cxx create mode 100644 Utilities/KWIML/test/test_INT_format.h.in create mode 100644 Utilities/KWIML/test/test_include_C.c create mode 100644 Utilities/KWIML/test/test_include_CXX.cxx create mode 100644 Utilities/KWStyle/CMake.kws.xml.in create mode 100644 Utilities/KWStyle/CMakeFiles.txt.in create mode 100644 Utilities/KWStyle/CMakeLists.txt create mode 100644 Utilities/KWStyle/CMakeMoreChecks.kws.xml.in create mode 100644 Utilities/KWStyle/CMakeOverwrite.txt create mode 100644 Utilities/KWStyle/Headers/CMakeHeader.h create mode 100644 Utilities/Release/CMakeInstall.bmp create mode 100644 Utilities/Release/CMakeLogo.ico create mode 100644 Utilities/Release/Cygwin/CMakeLists.txt create mode 100644 Utilities/Release/Cygwin/README.cygwin.in create mode 100755 Utilities/Release/Cygwin/cygwin-package.sh.in create mode 100644 Utilities/Release/Cygwin/cygwin-patch.diff.in create mode 100644 Utilities/Release/Cygwin/cygwin-setup.hint.in create mode 100644 Utilities/Release/README create mode 100644 Utilities/Release/create-cmake-release.cmake create mode 100644 Utilities/Release/dash2win64_cygwin.cmake create mode 100644 Utilities/Release/dash2win64_release.cmake create mode 100644 Utilities/Release/dashmacmini2_release.cmake create mode 100644 Utilities/Release/dashmacmini5_release.cmake create mode 100644 Utilities/Release/ferrari_sgi64_release.cmake create mode 100644 Utilities/Release/ferrari_sgi_release.cmake create mode 100644 Utilities/Release/hythloth_release.cmake create mode 100644 Utilities/Release/magrathea_release.cmake create mode 100644 Utilities/Release/release_cmake.cmake create mode 100755 Utilities/Release/release_cmake.sh.in create mode 100644 Utilities/Release/upload_release.cmake create mode 100644 Utilities/Release/v20n250_aix_release.cmake create mode 100644 Utilities/cmThirdParty.h.in create mode 100644 Utilities/cm_bzlib.h create mode 100644 Utilities/cm_curl.h create mode 100644 Utilities/cm_expat.h create mode 100644 Utilities/cm_libarchive.h create mode 100644 Utilities/cm_xmlrpc.h create mode 100644 Utilities/cm_zlib.h create mode 100644 Utilities/cmake.m4 create mode 100644 Utilities/cmbzip2/CHANGES create mode 100644 Utilities/cmbzip2/CMakeLists.txt create mode 100644 Utilities/cmbzip2/LICENSE create mode 100644 Utilities/cmbzip2/Makefile-libbz2_so create mode 100644 Utilities/cmbzip2/README create mode 100644 Utilities/cmbzip2/README.COMPILATION.PROBLEMS create mode 100644 Utilities/cmbzip2/README.XML.STUFF create mode 100644 Utilities/cmbzip2/blocksort.c create mode 100644 Utilities/cmbzip2/bz-common.xsl create mode 100644 Utilities/cmbzip2/bz-fo.xsl create mode 100644 Utilities/cmbzip2/bz-html.xsl create mode 100644 Utilities/cmbzip2/bzdiff create mode 100644 Utilities/cmbzip2/bzdiff.1 create mode 100644 Utilities/cmbzip2/bzgrep create mode 100644 Utilities/cmbzip2/bzgrep.1 create mode 100644 Utilities/cmbzip2/bzip.css create mode 100644 Utilities/cmbzip2/bzip2.1 create mode 100644 Utilities/cmbzip2/bzip2.1.preformatted create mode 100644 Utilities/cmbzip2/bzip2.c create mode 100644 Utilities/cmbzip2/bzip2.txt create mode 100644 Utilities/cmbzip2/bzip2recover.c create mode 100644 Utilities/cmbzip2/bzlib.c create mode 100644 Utilities/cmbzip2/bzlib.h create mode 100644 Utilities/cmbzip2/bzlib_private.h create mode 100644 Utilities/cmbzip2/bzmore create mode 100644 Utilities/cmbzip2/bzmore.1 create mode 100644 Utilities/cmbzip2/compress.c create mode 100644 Utilities/cmbzip2/crctable.c create mode 100644 Utilities/cmbzip2/decompress.c create mode 100644 Utilities/cmbzip2/dlltest.c create mode 100644 Utilities/cmbzip2/dlltest.dsp create mode 100644 Utilities/cmbzip2/entities.xml create mode 100755 Utilities/cmbzip2/format.pl create mode 100644 Utilities/cmbzip2/huffman.c create mode 100644 Utilities/cmbzip2/libbz2.def create mode 100644 Utilities/cmbzip2/libbz2.dsp create mode 100644 Utilities/cmbzip2/libbz2.lib create mode 100644 Utilities/cmbzip2/makefile.msc create mode 100644 Utilities/cmbzip2/manual.html create mode 100644 Utilities/cmbzip2/manual.pdf create mode 100644 Utilities/cmbzip2/manual.ps create mode 100644 Utilities/cmbzip2/manual.xml create mode 100644 Utilities/cmbzip2/mk251.c create mode 100644 Utilities/cmbzip2/randtable.c create mode 100644 Utilities/cmbzip2/sample1.bz2 create mode 100644 Utilities/cmbzip2/sample1.rb2 create mode 100644 Utilities/cmbzip2/sample1.ref create mode 100644 Utilities/cmbzip2/sample1.tst create mode 100644 Utilities/cmbzip2/sample2.bz2 create mode 100644 Utilities/cmbzip2/sample2.rb2 create mode 100644 Utilities/cmbzip2/sample2.ref create mode 100644 Utilities/cmbzip2/sample2.tst create mode 100644 Utilities/cmbzip2/sample3.bz2 create mode 100644 Utilities/cmbzip2/sample3.rb2 create mode 100644 Utilities/cmbzip2/sample3.ref create mode 100644 Utilities/cmbzip2/sample3.tst create mode 100644 Utilities/cmbzip2/spewG.c create mode 100644 Utilities/cmbzip2/unzcrash.c create mode 100644 Utilities/cmbzip2/words0 create mode 100644 Utilities/cmbzip2/words1 create mode 100644 Utilities/cmbzip2/words2 create mode 100644 Utilities/cmbzip2/words3 create mode 100755 Utilities/cmbzip2/xmlproc.sh create mode 100644 Utilities/cmcompress/CMakeLists.txt create mode 100644 Utilities/cmcompress/Copyright.txt create mode 100644 Utilities/cmcompress/cmcompress.c create mode 100644 Utilities/cmcompress/cmcompress.h create mode 100644 Utilities/cmcompress/compress.c.original create mode 100644 Utilities/cmcurl/CMake/CMakeConfigurableFile.in create mode 100644 Utilities/cmcurl/CMake/CurlCheckCSourceCompiles.cmake create mode 100644 Utilities/cmcurl/CMake/CurlCheckCSourceRuns.cmake create mode 100644 Utilities/cmcurl/CMake/CurlTests.c create mode 100644 Utilities/cmcurl/CMake/OtherTests.cmake create mode 100644 Utilities/cmcurl/CMakeLists.txt create mode 100644 Utilities/cmcurl/COPYING create mode 100644 Utilities/cmcurl/Platforms/WindowsCache.cmake create mode 100644 Utilities/cmcurl/Platforms/config-aix.h create mode 100644 Utilities/cmcurl/Testing/CMakeLists.txt create mode 100644 Utilities/cmcurl/Testing/curlgtk.c create mode 100644 Utilities/cmcurl/Testing/curltest.c create mode 100644 Utilities/cmcurl/Testing/ftpget.c create mode 100644 Utilities/cmcurl/Testing/ftpgetresp.c create mode 100644 Utilities/cmcurl/Testing/ftpupload.c create mode 100644 Utilities/cmcurl/Testing/getinmemory.c create mode 100644 Utilities/cmcurl/Testing/http-post.c create mode 100644 Utilities/cmcurl/Testing/httpput.c create mode 100644 Utilities/cmcurl/Testing/multithread.c create mode 100644 Utilities/cmcurl/Testing/persistant.c create mode 100644 Utilities/cmcurl/Testing/postit2.c create mode 100644 Utilities/cmcurl/Testing/sepheaders.c create mode 100644 Utilities/cmcurl/Testing/simple.c create mode 100644 Utilities/cmcurl/Testing/simplessl.c create mode 100644 Utilities/cmcurl/Testing/testconfig.h.in create mode 100644 Utilities/cmcurl/Testing/win32sockets.c create mode 100644 Utilities/cmcurl/amigaos.c create mode 100644 Utilities/cmcurl/amigaos.h create mode 100644 Utilities/cmcurl/arpa_telnet.h create mode 100644 Utilities/cmcurl/base64.c create mode 100644 Utilities/cmcurl/base64.h create mode 100644 Utilities/cmcurl/ca-bundle.h create mode 100644 Utilities/cmcurl/config.h.in create mode 100644 Utilities/cmcurl/connect.c create mode 100644 Utilities/cmcurl/connect.h create mode 100644 Utilities/cmcurl/content_encoding.c create mode 100644 Utilities/cmcurl/content_encoding.h create mode 100644 Utilities/cmcurl/cookie.c create mode 100644 Utilities/cmcurl/cookie.h create mode 100644 Utilities/cmcurl/curl/curl.h create mode 100644 Utilities/cmcurl/curl/curlver.h create mode 100644 Utilities/cmcurl/curl/easy.h create mode 100644 Utilities/cmcurl/curl/mprintf.h create mode 100644 Utilities/cmcurl/curl/multi.h create mode 100644 Utilities/cmcurl/curl/stdcheaders.h create mode 100644 Utilities/cmcurl/curl/types.h create mode 100644 Utilities/cmcurl/curlx.h create mode 100644 Utilities/cmcurl/dict.c create mode 100644 Utilities/cmcurl/dict.h create mode 100644 Utilities/cmcurl/easy.c create mode 100644 Utilities/cmcurl/easyif.h create mode 100644 Utilities/cmcurl/escape.c create mode 100644 Utilities/cmcurl/escape.h create mode 100644 Utilities/cmcurl/file.c create mode 100644 Utilities/cmcurl/file.h create mode 100644 Utilities/cmcurl/formdata.c create mode 100644 Utilities/cmcurl/formdata.h create mode 100644 Utilities/cmcurl/ftp.c create mode 100644 Utilities/cmcurl/ftp.h create mode 100644 Utilities/cmcurl/getenv.c create mode 100644 Utilities/cmcurl/getinfo.c create mode 100644 Utilities/cmcurl/getinfo.h create mode 100644 Utilities/cmcurl/gtls.c create mode 100644 Utilities/cmcurl/gtls.h create mode 100644 Utilities/cmcurl/hash.c create mode 100644 Utilities/cmcurl/hash.h create mode 100644 Utilities/cmcurl/hostares.c create mode 100644 Utilities/cmcurl/hostasyn.c create mode 100644 Utilities/cmcurl/hostip.c create mode 100644 Utilities/cmcurl/hostip.h create mode 100644 Utilities/cmcurl/hostip4.c create mode 100644 Utilities/cmcurl/hostip6.c create mode 100644 Utilities/cmcurl/hostsyn.c create mode 100644 Utilities/cmcurl/hostthre.c create mode 100644 Utilities/cmcurl/http.c create mode 100644 Utilities/cmcurl/http.h create mode 100644 Utilities/cmcurl/http_chunks.c create mode 100644 Utilities/cmcurl/http_chunks.h create mode 100644 Utilities/cmcurl/http_digest.c create mode 100644 Utilities/cmcurl/http_digest.h create mode 100644 Utilities/cmcurl/http_negotiate.c create mode 100644 Utilities/cmcurl/http_negotiate.h create mode 100644 Utilities/cmcurl/http_ntlm.c create mode 100644 Utilities/cmcurl/http_ntlm.h create mode 100644 Utilities/cmcurl/if2ip.c create mode 100644 Utilities/cmcurl/if2ip.h create mode 100644 Utilities/cmcurl/inet_ntoa_r.h create mode 100644 Utilities/cmcurl/inet_ntop.c create mode 100644 Utilities/cmcurl/inet_ntop.h create mode 100644 Utilities/cmcurl/inet_pton.c create mode 100644 Utilities/cmcurl/inet_pton.h create mode 100644 Utilities/cmcurl/krb4.c create mode 100644 Utilities/cmcurl/krb4.h create mode 100644 Utilities/cmcurl/ldap.c create mode 100644 Utilities/cmcurl/ldap.h create mode 100644 Utilities/cmcurl/llist.c create mode 100644 Utilities/cmcurl/llist.h create mode 100644 Utilities/cmcurl/md5.c create mode 100644 Utilities/cmcurl/md5.h create mode 100644 Utilities/cmcurl/memdebug.c create mode 100644 Utilities/cmcurl/memdebug.h create mode 100644 Utilities/cmcurl/memory.h create mode 100644 Utilities/cmcurl/mprintf.c create mode 100644 Utilities/cmcurl/multi.c create mode 100644 Utilities/cmcurl/multiif.h create mode 100644 Utilities/cmcurl/netrc.c create mode 100644 Utilities/cmcurl/netrc.h create mode 100644 Utilities/cmcurl/nwlib.c create mode 100644 Utilities/cmcurl/parsedate.c create mode 100644 Utilities/cmcurl/parsedate.h create mode 100644 Utilities/cmcurl/progress.c create mode 100644 Utilities/cmcurl/progress.h create mode 100644 Utilities/cmcurl/security.c create mode 100644 Utilities/cmcurl/select.c create mode 100644 Utilities/cmcurl/select.h create mode 100644 Utilities/cmcurl/sendf.c create mode 100644 Utilities/cmcurl/sendf.h create mode 100644 Utilities/cmcurl/setup.h create mode 100644 Utilities/cmcurl/setup_once.h create mode 100644 Utilities/cmcurl/share.c create mode 100644 Utilities/cmcurl/share.h create mode 100644 Utilities/cmcurl/sockaddr.h create mode 100644 Utilities/cmcurl/socks.c create mode 100644 Utilities/cmcurl/socks.h create mode 100644 Utilities/cmcurl/speedcheck.c create mode 100644 Utilities/cmcurl/speedcheck.h create mode 100644 Utilities/cmcurl/splay.c create mode 100644 Utilities/cmcurl/splay.h create mode 100644 Utilities/cmcurl/ssh.c create mode 100644 Utilities/cmcurl/ssh.h create mode 100644 Utilities/cmcurl/sslgen.c create mode 100644 Utilities/cmcurl/sslgen.h create mode 100644 Utilities/cmcurl/ssluse.c create mode 100644 Utilities/cmcurl/ssluse.h create mode 100644 Utilities/cmcurl/strdup.c create mode 100644 Utilities/cmcurl/strdup.h create mode 100644 Utilities/cmcurl/strequal.c create mode 100644 Utilities/cmcurl/strequal.h create mode 100644 Utilities/cmcurl/strerror.c create mode 100644 Utilities/cmcurl/strerror.h create mode 100644 Utilities/cmcurl/strtok.c create mode 100644 Utilities/cmcurl/strtok.h create mode 100644 Utilities/cmcurl/strtoofft.c create mode 100644 Utilities/cmcurl/strtoofft.h create mode 100644 Utilities/cmcurl/telnet.c create mode 100644 Utilities/cmcurl/telnet.h create mode 100644 Utilities/cmcurl/tftp.c create mode 100644 Utilities/cmcurl/tftp.h create mode 100644 Utilities/cmcurl/timeval.c create mode 100644 Utilities/cmcurl/timeval.h create mode 100644 Utilities/cmcurl/transfer.c create mode 100644 Utilities/cmcurl/transfer.h create mode 100644 Utilities/cmcurl/url.c create mode 100644 Utilities/cmcurl/url.h create mode 100644 Utilities/cmcurl/urldata.h create mode 100644 Utilities/cmcurl/version.c create mode 100644 Utilities/cmexpat/.NoDartCoverage create mode 100644 Utilities/cmexpat/CMakeLists.txt create mode 100644 Utilities/cmexpat/COPYING create mode 100644 Utilities/cmexpat/ascii.h create mode 100644 Utilities/cmexpat/asciitab.h create mode 100644 Utilities/cmexpat/cm_expat_mangle.h create mode 100644 Utilities/cmexpat/expat.h create mode 100644 Utilities/cmexpat/expatConfig.h.in create mode 100644 Utilities/cmexpat/expatDllConfig.h.in create mode 100644 Utilities/cmexpat/iasciitab.h create mode 100644 Utilities/cmexpat/latin1tab.h create mode 100644 Utilities/cmexpat/nametab.h create mode 100644 Utilities/cmexpat/utf8tab.h create mode 100644 Utilities/cmexpat/xmlparse.c create mode 100644 Utilities/cmexpat/xmlrole.c create mode 100644 Utilities/cmexpat/xmlrole.h create mode 100644 Utilities/cmexpat/xmltok.c create mode 100644 Utilities/cmexpat/xmltok.h create mode 100644 Utilities/cmexpat/xmltok_impl.c create mode 100644 Utilities/cmexpat/xmltok_impl.h create mode 100644 Utilities/cmexpat/xmltok_ns.c create mode 100644 Utilities/cmlibarchive/.gitattributes create mode 100644 Utilities/cmlibarchive/CMakeLists.txt create mode 100644 Utilities/cmlibarchive/COPYING create mode 100644 Utilities/cmlibarchive/CTestConfig.cmake create mode 100644 Utilities/cmlibarchive/README-CMake.txt create mode 100644 Utilities/cmlibarchive/build/cmake/CheckFileOffsetBits.c create mode 100644 Utilities/cmlibarchive/build/cmake/CheckFileOffsetBits.cmake create mode 100644 Utilities/cmlibarchive/build/cmake/CheckFuncs.cmake create mode 100644 Utilities/cmlibarchive/build/cmake/CheckFuncs_stub.c.in create mode 100644 Utilities/cmlibarchive/build/cmake/CheckHeaderDirent.cmake create mode 100644 Utilities/cmlibarchive/build/cmake/CheckStructMember.cmake create mode 100644 Utilities/cmlibarchive/build/cmake/CheckTypeExists.cmake create mode 100644 Utilities/cmlibarchive/build/cmake/FindLZMA.cmake create mode 100644 Utilities/cmlibarchive/build/cmake/config.h.in create mode 100644 Utilities/cmlibarchive/build/pkgconfig/libarchive.pc.in create mode 100644 Utilities/cmlibarchive/build/utils/gen_archive_string_composition_h.sh create mode 100644 Utilities/cmlibarchive/build/version create mode 100644 Utilities/cmlibarchive/libarchive/CMakeLists.txt create mode 100644 Utilities/cmlibarchive/libarchive/archive.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_acl.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_acl_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_check_magic.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_crc32.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_crypto.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_crypto_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_endian.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_acl.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_copy_bhfi.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_copy_stat.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_link_resolver.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_linkify.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_locale.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_paths.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_perms.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_sparse.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_stat.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_stat.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_strmode.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_time.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_entry_xattr.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_options.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_options_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_platform.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_ppmd7.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_ppmd7_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_ppmd_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_rb.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_rb.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_read.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_data.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_data_into_fd.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_disk.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_disk_entry_from_file.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_disk_posix.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_disk_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_disk_set_standard_lookup.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_disk_windows.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_extract.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_extract.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_filter.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_format.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_free.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_header.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_new.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_open.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_open_fd.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_open_file.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_open_filename.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_open_memory.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_set_options.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_set_options.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_filter_all.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_filter_bzip2.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_filter_compress.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_filter_gzip.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_filter_none.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_filter_program.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_filter_rpm.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_filter_uu.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_filter_xz.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_7zip.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_all.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_ar.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_by_code.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_cab.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_cpio.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_empty.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_iso9660.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_lha.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_mtree.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_rar.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_raw.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_tar.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_xar.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_read_support_format_zip.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_string.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_string.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_string_composition.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_string_sprintf.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_util.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_util.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_virtual.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_windows.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_windows.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_write.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_add_filter_bzip2.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_add_filter_compress.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_add_filter_gzip.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_add_filter_none.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_add_filter_program.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_add_filter_xz.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_blocksize.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_data.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_disk.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_disk_posix.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_disk_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_disk_set_standard_lookup.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_disk_windows.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_filter.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_finish_entry.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_format.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_free.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_header.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_new.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_open.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_open_fd.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_open_file.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_open_filename.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_open_memory.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_private.h create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_7zip.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_ar.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_by_name.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_cpio.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_cpio_newc.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_gnutar.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_iso9660.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_mtree.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_pax.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_ustar.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_xar.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_format_zip.c create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_options.3 create mode 100644 Utilities/cmlibarchive/libarchive/archive_write_set_options.c create mode 100644 Utilities/cmlibarchive/libarchive/config_freebsd.h create mode 100644 Utilities/cmlibarchive/libarchive/cpio.5 create mode 100644 Utilities/cmlibarchive/libarchive/filter_fork.c create mode 100644 Utilities/cmlibarchive/libarchive/filter_fork.h create mode 100644 Utilities/cmlibarchive/libarchive/filter_fork_windows.c create mode 100644 Utilities/cmlibarchive/libarchive/libarchive-formats.5 create mode 100644 Utilities/cmlibarchive/libarchive/libarchive.3 create mode 100644 Utilities/cmlibarchive/libarchive/libarchive_changes.3 create mode 100644 Utilities/cmlibarchive/libarchive/libarchive_internals.3 create mode 100644 Utilities/cmlibarchive/libarchive/mtree.5 create mode 100644 Utilities/cmlibarchive/libarchive/tar.5 create mode 100644 Utilities/cmzlib/.NoDartCoverage create mode 100644 Utilities/cmzlib/CMakeLists.txt create mode 100644 Utilities/cmzlib/ChangeLog create mode 100644 Utilities/cmzlib/Copyright.txt create mode 100644 Utilities/cmzlib/FAQ create mode 100644 Utilities/cmzlib/INDEX create mode 100644 Utilities/cmzlib/README create mode 100644 Utilities/cmzlib/README.Kitware.txt create mode 100644 Utilities/cmzlib/adler32.c create mode 100644 Utilities/cmzlib/cm_zlib_mangle.h create mode 100644 Utilities/cmzlib/compress.c create mode 100644 Utilities/cmzlib/crc32.c create mode 100644 Utilities/cmzlib/crc32.h create mode 100644 Utilities/cmzlib/deflate.c create mode 100644 Utilities/cmzlib/deflate.h create mode 100644 Utilities/cmzlib/gzio.c create mode 100644 Utilities/cmzlib/inffast.c create mode 100644 Utilities/cmzlib/inffast.h create mode 100644 Utilities/cmzlib/inffixed.h create mode 100644 Utilities/cmzlib/inflate.c create mode 100644 Utilities/cmzlib/inflate.h create mode 100644 Utilities/cmzlib/inftrees.c create mode 100644 Utilities/cmzlib/inftrees.h create mode 100644 Utilities/cmzlib/trees.c create mode 100644 Utilities/cmzlib/trees.h create mode 100644 Utilities/cmzlib/uncompr.c create mode 100644 Utilities/cmzlib/zconf.h create mode 100644 Utilities/cmzlib/zlib.def create mode 100644 Utilities/cmzlib/zlib.h create mode 100644 Utilities/cmzlib/zlib.rc create mode 100644 Utilities/cmzlib/zlibDllConfig.h.in create mode 100644 Utilities/cmzlib/zutil.c create mode 100644 Utilities/cmzlib/zutil.h create mode 100644 Utilities/xml/xhtml-lat1.ent create mode 100644 Utilities/xml/xhtml-special.ent create mode 100644 Utilities/xml/xhtml-symbol.ent create mode 100644 Utilities/xml/xhtml1-strict.dtd create mode 100755 bootstrap create mode 100644 cmake_uninstall.cmake.in create mode 100755 configure create mode 100644 doxygen.config create mode 100644 packaging/cmake.changes create mode 100644 packaging/cmake.spec create mode 100644 packaging/macros.cmake create mode 100644 packaging/tinfo.patch diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d21f1dd --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +.gitattributes export-ignore +.hooks* export-ignore + +bootstrap crlf=input +configure crlf=input +*.[1-9] crlf=input +*.sh crlf=input +*.sh.in crlf=input + +*.bat -crlf +*.bat.in -crlf +*.dsp -crlf +*.dsptemplate -crlf +*.dsw -crlf +*.sln -crlf +*.vcproj -crlf + +*.c whitespace=tab-in-indent +*.h whitespace=tab-in-indent +*.cxx whitespace=tab-in-indent +*.txt whitespace=tab-in-indent +*.cmake whitespace=tab-in-indent diff --git a/.hooks-config.bash b/.hooks-config.bash new file mode 100644 index 0000000..97152f6 --- /dev/null +++ b/.hooks-config.bash @@ -0,0 +1,18 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2011 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. +#============================================================================= + +# Loaded by .git/hooks/(pre-commit|commit-msg|prepare-commit-msg) +# during git commit after local hooks have been installed. + +hooks_chain_pre_commit="Utilities/Git/pre-commit" +hooks_chain_commit_msg="Utilities/Git/commit-msg" +hooks_chain_prepare_commit_msg="Utilities/Git/prepare-commit-msg" diff --git a/CMakeCPack.cmake b/CMakeCPack.cmake new file mode 100644 index 0000000..c3c25f5 --- /dev/null +++ b/CMakeCPack.cmake @@ -0,0 +1,123 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If the cmake version includes cpack, use it +IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") + IF(EXISTS "${CMAKE_ROOT}/Modules/InstallRequiredSystemLibraries.cmake") + OPTION(CMAKE_INSTALL_DEBUG_LIBRARIES + "Install Microsoft runtime debug libraries with CMake." FALSE) + MARK_AS_ADVANCED(CMAKE_INSTALL_DEBUG_LIBRARIES) + + # By default, do not warn when built on machines using only VS Express: + IF(NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS) + SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON) + ENDIF() + + INCLUDE(${CMake_SOURCE_DIR}/Modules/InstallRequiredSystemLibraries.cmake) + ENDIF(EXISTS "${CMAKE_ROOT}/Modules/InstallRequiredSystemLibraries.cmake") + + SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CMake is a build tool") + SET(CPACK_PACKAGE_VENDOR "Kitware") + SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt") + SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt") + SET(CPACK_PACKAGE_VERSION "${CMake_VERSION}") + SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") + SET(CPACK_SOURCE_PACKAGE_FILE_NAME "cmake-${CMake_VERSION}") + + # Make this explicit here, rather than accepting the CPack default value, + # so we can refer to it: + SET(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}") + + # Installers for 32- vs. 64-bit CMake: + # - Root install directory (displayed to end user at installer-run time) + # - "NSIS package/display name" (text used in the installer GUI) + # - Registry key used to store info about the installation + IF(CMAKE_CL_64) + SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") + SET(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} (Win64)") + SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION} (Win64)") + ELSE() + SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") + SET(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") + SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}") + ENDIF() + + IF(NOT DEFINED CPACK_SYSTEM_NAME) + # make sure package is not Cygwin-unknown, for Cygwin just + # cygwin is good for the system name + IF("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN") + SET(CPACK_SYSTEM_NAME Cygwin) + ELSE("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN") + SET(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}) + ENDIF("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN") + ENDIF(NOT DEFINED CPACK_SYSTEM_NAME) + IF(${CPACK_SYSTEM_NAME} MATCHES Windows) + IF(CMAKE_CL_64) + SET(CPACK_SYSTEM_NAME win64-x64) + ELSE(CMAKE_CL_64) + SET(CPACK_SYSTEM_NAME win32-x86) + ENDIF(CMAKE_CL_64) + ENDIF(${CPACK_SYSTEM_NAME} MATCHES Windows) + + IF(NOT DEFINED CPACK_PACKAGE_FILE_NAME) + # if the CPACK_PACKAGE_FILE_NAME is not defined by the cache + # default to source package - system, on cygwin system is not + # needed + IF(CYGWIN) + SET(CPACK_PACKAGE_FILE_NAME "${CPACK_SOURCE_PACKAGE_FILE_NAME}") + ELSE(CYGWIN) + SET(CPACK_PACKAGE_FILE_NAME + "${CPACK_SOURCE_PACKAGE_FILE_NAME}-${CPACK_SYSTEM_NAME}") + ENDIF(CYGWIN) + ENDIF(NOT DEFINED CPACK_PACKAGE_FILE_NAME) + + SET(CPACK_PACKAGE_CONTACT "cmake@cmake.org") + + IF(UNIX) + SET(CPACK_STRIP_FILES "bin/ccmake;bin/cmake;bin/cpack;bin/ctest") + SET(CPACK_SOURCE_STRIP_FILES "") + SET(CPACK_PACKAGE_EXECUTABLES "ccmake" "CMake") + ENDIF(UNIX) + + # cygwin specific packaging stuff + IF(CYGWIN) + # setup the cygwin package name + SET(CPACK_PACKAGE_NAME cmake) + # setup the name of the package for cygwin cmake-2.4.3 + SET(CPACK_PACKAGE_FILE_NAME + "${CPACK_PACKAGE_NAME}-${CMake_VERSION}") + # the source has the same name as the binary + SET(CPACK_SOURCE_PACKAGE_FILE_NAME ${CPACK_PACKAGE_FILE_NAME}) + # Create a cygwin version number in case there are changes for cygwin + # that are not reflected upstream in CMake + SET(CPACK_CYGWIN_PATCH_NUMBER 1) + # These files are required by the cmCPackCygwinSourceGenerator and the files + # put into the release tar files. + SET(CPACK_CYGWIN_BUILD_SCRIPT + "${CMake_BINARY_DIR}/@CPACK_PACKAGE_FILE_NAME@-@CPACK_CYGWIN_PATCH_NUMBER@.sh") + SET(CPACK_CYGWIN_PATCH_FILE + "${CMake_BINARY_DIR}/@CPACK_PACKAGE_FILE_NAME@-@CPACK_CYGWIN_PATCH_NUMBER@.patch") + # include the sub directory cmake file for cygwin that + # configures some files and adds some install targets + # this file uses some of the package file name variables + INCLUDE(Utilities/Release/Cygwin/CMakeLists.txt) + ENDIF(CYGWIN) + + # Set the options file that needs to be included inside CMakeCPackOptions.cmake + SET(QT_DIALOG_CPACK_OPTIONS_FILE ${CMake_BINARY_DIR}/Source/QtDialog/QtDialogCPack.cmake) + CONFIGURE_FILE("${CMake_SOURCE_DIR}/CMakeCPackOptions.cmake.in" + "${CMake_BINARY_DIR}/CMakeCPackOptions.cmake" @ONLY) + SET(CPACK_PROJECT_CONFIG_FILE "${CMake_BINARY_DIR}/CMakeCPackOptions.cmake") + + # include CPack model once all variables are set + INCLUDE(CPack) +ENDIF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") diff --git a/CMakeCPackOptions.cmake.in b/CMakeCPackOptions.cmake.in new file mode 100644 index 0000000..69a1508 --- /dev/null +++ b/CMakeCPackOptions.cmake.in @@ -0,0 +1,53 @@ +# This file is configured at cmake time, and loaded at cpack time. +# To pass variables to cpack from cmake, they must be configured +# in this file. + +if(CPACK_GENERATOR MATCHES "NSIS") + SET(CPACK_NSIS_INSTALL_ROOT "@CPACK_NSIS_INSTALL_ROOT@") + + # set the install/unistall icon used for the installer itself + # There is a bug in NSI that does not handle full unix paths properly. + SET(CPACK_NSIS_MUI_ICON "@CMake_SOURCE_DIR@/Utilities/Release\\CMakeLogo.ico") + SET(CPACK_NSIS_MUI_UNIICON "@CMake_SOURCE_DIR@/Utilities/Release\\CMakeLogo.ico") + # set the package header icon for MUI + SET(CPACK_PACKAGE_ICON "@CMake_SOURCE_DIR@/Utilities/Release\\CMakeInstall.bmp") + # tell cpack to create links to the doc files + SET(CPACK_NSIS_MENU_LINKS + "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake-gui.html" "cmake-gui Help" + "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake.html" "CMake Help" + "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake-properties.html" + "CMake Properties and Variables Help" + "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/ctest.html" "CTest Help" + "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake-modules.html" "CMake Modules Help" + "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake-commands.html" "CMake Commands Help" + "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cpack.html" "CPack Help" + "http://www.cmake.org" "CMake Web Site" + ) + # Use the icon from cmake-gui for add-remove programs + SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\cmake-gui.exe") + + SET(CPACK_NSIS_PACKAGE_NAME "@CPACK_NSIS_PACKAGE_NAME@") + SET(CPACK_NSIS_DISPLAY_NAME "@CPACK_NSIS_PACKAGE_NAME@, a cross-platform, open-source build system") + SET(CPACK_NSIS_HELP_LINK "http://www.cmake.org") + SET(CPACK_NSIS_URL_INFO_ABOUT "http://www.kitware.com") + SET(CPACK_NSIS_CONTACT @CPACK_PACKAGE_CONTACT@) + SET(CPACK_NSIS_MODIFY_PATH ON) +endif(CPACK_GENERATOR MATCHES "NSIS") + +# include the cpack options for qt dialog if they exisit +# they might not if qt was not enabled for the build +INCLUDE("@QT_DIALOG_CPACK_OPTIONS_FILE@" OPTIONAL) + +if(CPACK_GENERATOR MATCHES "CygwinSource") + # when packaging source make sure the .build directory is not included + SET(CPACK_SOURCE_IGNORE_FILES + "/CVS/" "/\\.build/" "/\\.svn/" "\\.swp$" "\\.#" "/#" "~$") +endif(CPACK_GENERATOR MATCHES "CygwinSource") + +if("${CPACK_GENERATOR}" STREQUAL "PackageMaker") + if(CMAKE_PACKAGE_QTGUI) + set(CPACK_PACKAGE_DEFAULT_LOCATION "/Applications") + else(CMAKE_PACKAGE_QTGUI) + set(CPACK_PACKAGE_DEFAULT_LOCATION "/usr") + endif(CMAKE_PACKAGE_QTGUI) +endif("${CPACK_GENERATOR}" STREQUAL "PackageMaker") diff --git a/CMakeGraphVizOptions.cmake b/CMakeGraphVizOptions.cmake new file mode 100644 index 0000000..038f17e --- /dev/null +++ b/CMakeGraphVizOptions.cmake @@ -0,0 +1 @@ +SET(GRAPHVIZ_IGNORE_TARGETS "tartest;testSystemTools;testRegistry;testProcess;testIOS;testHashSTL;testFail;testCommandLineArguments;xrtest;LIBCURL;foo") diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..4795fe0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,645 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2011 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. +#============================================================================= +CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR) +SET(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required +PROJECT(CMake) + +IF(CMAKE_BOOTSTRAP) + # Running from bootstrap script. Set local variable and remove from cache. + SET(CMAKE_BOOTSTRAP 1) + UNSET(CMAKE_BOOTSTRAP CACHE) +ENDIF() + +SET(CMake_BIN_DIR ${CMake_BINARY_DIR}/bin) + +IF("${CMake_SOURCE_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") + # Disallow architecture-specific try_run. It may not run on the host. + MACRO(TRY_RUN) + IF(CMAKE_TRY_COMPILE_OSX_ARCHITECTURES) + MESSAGE(FATAL_ERROR "TRY_RUN not allowed with CMAKE_TRY_COMPILE_OSX_ARCHITECTURES=[${CMAKE_TRY_COMPILE_OSX_ARCHITECTURES}]") + ELSE() + _TRY_RUN(${ARGV}) + ENDIF() + ENDMACRO() +ENDIF() + +#----------------------------------------------------------------------- +# a macro to deal with system libraries, implemented as a macro +# simply to improve readability of the main script +#----------------------------------------------------------------------- +MACRO(CMAKE_HANDLE_SYSTEM_LIBRARIES) + # Options have dependencies. + INCLUDE(CMakeDependentOption) + + # Optionally use system xmlrpc. We no longer build or use it by default. + OPTION(CTEST_USE_XMLRPC "Enable xmlrpc submission method in CTest." OFF) + MARK_AS_ADVANCED(CTEST_USE_XMLRPC) + + # Allow the user to enable/disable all system utility library options by + # defining CMAKE_USE_SYSTEM_LIBRARIES or CMAKE_USE_SYSTEM_LIBRARY_${util}. + SET(UTILITIES BZIP2 CURL EXPAT LIBARCHIVE ZLIB) + FOREACH(util ${UTILITIES}) + IF(NOT DEFINED CMAKE_USE_SYSTEM_LIBRARY_${util} + AND DEFINED CMAKE_USE_SYSTEM_LIBRARIES) + SET(CMAKE_USE_SYSTEM_LIBRARY_${util} "${CMAKE_USE_SYSTEM_LIBRARIES}") + ENDIF() + IF(DEFINED CMAKE_USE_SYSTEM_LIBRARY_${util}) + IF(CMAKE_USE_SYSTEM_LIBRARY_${util}) + SET(CMAKE_USE_SYSTEM_LIBRARY_${util} ON) + ELSE() + SET(CMAKE_USE_SYSTEM_LIBRARY_${util} OFF) + ENDIF() + IF(CMAKE_BOOTSTRAP) + UNSET(CMAKE_USE_SYSTEM_LIBRARY_${util} CACHE) + ENDIF() + STRING(TOLOWER "${util}" lutil) + SET(CMAKE_USE_SYSTEM_${util} "${CMAKE_USE_SYSTEM_LIBRARY_${util}}" + CACHE BOOL "Use system-installed ${lutil}" FORCE) + ELSE() + SET(CMAKE_USE_SYSTEM_LIBRARY_${util} OFF) + ENDIF() + ENDFOREACH(util) + IF(CMAKE_BOOTSTRAP) + UNSET(CMAKE_USE_SYSTEM_LIBRARIES CACHE) + ENDIF() + + # Optionally use system utility libraries. + OPTION(CMAKE_USE_SYSTEM_LIBARCHIVE "Use system-installed libarchive" "${CMAKE_USE_SYSTEM_LIBRARY_LIBARCHIVE}") + CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_CURL "Use system-installed curl" + "${CMAKE_USE_SYSTEM_LIBRARY_CURL}" "NOT CTEST_USE_XMLRPC" ON) + CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_EXPAT "Use system-installed expat" + "${CMAKE_USE_SYSTEM_LIBRARY_EXPAT}" "NOT CTEST_USE_XMLRPC" ON) + CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_ZLIB "Use system-installed zlib" + "${CMAKE_USE_SYSTEM_LIBRARY_ZLIB}" "NOT CMAKE_USE_SYSTEM_LIBARCHIVE;NOT CMAKE_USE_SYSTEM_CURL" ON) + CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_BZIP2 "Use system-installed bzip2" + "${CMAKE_USE_SYSTEM_LIBRARY_BZIP2}" "NOT CMAKE_USE_SYSTEM_LIBARCHIVE" ON) + + # Mention to the user what system libraries are being used. + FOREACH(util ${UTILITIES}) + IF(CMAKE_USE_SYSTEM_${util}) + MESSAGE(STATUS "Using system-installed ${util}") + ENDIF(CMAKE_USE_SYSTEM_${util}) + ENDFOREACH(util) + + # Inform utility library header wrappers whether to use system versions. + CONFIGURE_FILE(${CMake_SOURCE_DIR}/Utilities/cmThirdParty.h.in + ${CMake_BINARY_DIR}/Utilities/cmThirdParty.h + @ONLY) + +ENDMACRO(CMAKE_HANDLE_SYSTEM_LIBRARIES) + + + + +SET(CMAKE_BUILD_ON_VISUAL_STUDIO 0) +IF(WIN32 AND NOT UNIX AND NOT BORLAND AND NOT MINGW ) + SET(CMAKE_BUILD_ON_VISUAL_STUDIO 1) +ENDIF(WIN32 AND NOT UNIX AND NOT BORLAND AND NOT MINGW ) + + +#----------------------------------------------------------------------- +# a macro to determine the generator and ctest executable to use +# for testing. Simply to improve readability of the main script. +#----------------------------------------------------------------------- +MACRO(CMAKE_SETUP_TESTING) + IF (NOT DART_ROOT) + SET(MAKEPROGRAM ${CMAKE_MAKE_PROGRAM}) + ENDIF (NOT DART_ROOT) + + IF(BUILD_TESTING) + SET(CMAKE_TEST_GENERATOR "" CACHE STRING + "Generator used when running tests") + SET(CMAKE_TEST_MAKEPROGRAM "" CACHE FILEPATH + "Generator used when running tests") + IF(NOT CMAKE_TEST_GENERATOR) + SET(CMAKE_TEST_GENERATOR "${CMAKE_GENERATOR}") + SET(CMAKE_TEST_MAKEPROGRAM "${MAKEPROGRAM}") + ELSE(NOT CMAKE_TEST_GENERATOR) + SET(CMAKE_TEST_DIFFERENT_GENERATOR TRUE) + ENDIF(NOT CMAKE_TEST_GENERATOR) + + # Are we testing with the MSVC compiler? + SET(CMAKE_TEST_MSVC 0) + IF(MSVC AND NOT CMAKE_TEST_DIFFERENT_GENERATOR) + SET(CMAKE_TEST_MSVC 1) + ELSE(MSVC AND NOT CMAKE_TEST_DIFFERENT_GENERATOR) + IF("${CMAKE_TEST_GENERATOR}" MATCHES "NMake" OR + "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio") + SET(CMAKE_TEST_MSVC 1) + ENDIF("${CMAKE_TEST_GENERATOR}" MATCHES "NMake" OR + "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio") + ENDIF(MSVC AND NOT CMAKE_TEST_DIFFERENT_GENERATOR) + + SET(CMAKE_TEST_SYSTEM_LIBRARIES 0) + FOREACH(util CURL EXPAT XMLRPC ZLIB) + IF(CMAKE_USE_SYSTEM_${util}) + SET(CMAKE_TEST_SYSTEM_LIBRARIES 1) + ENDIF(CMAKE_USE_SYSTEM_${util}) + ENDFOREACH(util) + + # This variable is set by cmake, however to + # test cmake we want to make sure that + # the ctest from this cmake is used for testing + # and not the ctest from the cmake building and testing + # cmake. + SET(CMAKE_CTEST_COMMAND "${CMake_BIN_DIR}/ctest") + SET(CMAKE_CMAKE_COMMAND "${CMake_BIN_DIR}/cmake") + SET(CMAKE_CPACK_COMMAND "${CMake_BIN_DIR}/cpack") + ENDIF(BUILD_TESTING) + + # configure some files for testing + CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/Templates/CTestScript.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/CTestScript.cmake" + @ONLY) + CONFIGURE_FILE(${CMake_SOURCE_DIR}/Tests/.NoDartCoverage + ${CMake_BINARY_DIR}/Tests/.NoDartCoverage) + CONFIGURE_FILE(${CMake_SOURCE_DIR}/Tests/.NoDartCoverage + ${CMake_BINARY_DIR}/Modules/.NoDartCoverage) + CONFIGURE_FILE(${CMake_SOURCE_DIR}/CTestCustom.cmake.in + ${CMake_BINARY_DIR}/CTestCustom.cmake @ONLY) + CONFIGURE_FILE(${CMake_SOURCE_DIR}/CTestCustom.ctest.in + ${CMake_BINARY_DIR}/CTestCustom.ctest @ONLY) + IF(BUILD_TESTING AND DART_ROOT) + CONFIGURE_FILE(${CMake_SOURCE_DIR}/CMakeLogo.gif + ${CMake_BINARY_DIR}/Testing/HTML/TestingResults/Icons/Logo.gif COPYONLY) + ENDIF(BUILD_TESTING AND DART_ROOT) + MARK_AS_ADVANCED(DART_ROOT) + MARK_AS_ADVANCED(CURL_TESTING) +ENDMACRO(CMAKE_SETUP_TESTING) + + +# Provide a way for Visual Studio Express users to turn OFF the new FOLDER +# organization feature. Default to ON for non-Express users. Express users must +# explicitly turn off this option to build CMake in the Express IDE... +# +OPTION(CMAKE_USE_FOLDERS "Enable folder grouping of projects in IDEs." ON) +MARK_AS_ADVANCED(CMAKE_USE_FOLDERS) + + +#----------------------------------------------------------------------- +# a macro that only sets the FOLDER target property if it's +# "appropriate" +#----------------------------------------------------------------------- +MACRO(CMAKE_SET_TARGET_FOLDER tgt folder) + IF(CMAKE_USE_FOLDERS) + SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) + + # Really, I just want this to be an "if(TARGET ${tgt})" ... + # but I'm not sure that our min req'd., CMake 2.4.5 can handle + # that... so I'm just activating this for now, with a version + # compare, and only for MSVC builds. + IF(MSVC) + IF(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.8) + SET_PROPERTY(TARGET "${tgt}" PROPERTY FOLDER "${folder}") + ENDIF() + ENDIF() + ELSE() + SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS OFF) + ENDIF() +ENDMACRO(CMAKE_SET_TARGET_FOLDER) + + +#----------------------------------------------------------------------- +# a macro to build the utilities used by CMake +# Simply to improve readability of the main script. +#----------------------------------------------------------------------- +MACRO (CMAKE_BUILD_UTILITIES) + #--------------------------------------------------------------------- + # Create the KWIML library for CMake. + SET(KWIML cmIML) + SET(KWIML_HEADER_ROOT ${CMake_BINARY_DIR}/Utilities) + ADD_SUBDIRECTORY(Utilities/KWIML) + + #--------------------------------------------------------------------- + # Create the kwsys library for CMake. + SET(KWSYS_NAMESPACE cmsys) + SET(KWSYS_USE_SystemTools 1) + SET(KWSYS_USE_Directory 1) + SET(KWSYS_USE_RegularExpression 1) + SET(KWSYS_USE_Base64 1) + SET(KWSYS_USE_MD5 1) + SET(KWSYS_USE_Process 1) + SET(KWSYS_USE_CommandLineArguments 1) + SET(KWSYS_HEADER_ROOT ${CMake_BINARY_DIR}/Source) + SET(KWSYS_INSTALL_DOC_DIR "${CMake_DOC_DEST}") + ADD_SUBDIRECTORY(Source/kwsys) + SET(kwsys_folder "Utilities/KWSys") + CMAKE_SET_TARGET_FOLDER(${KWSYS_NAMESPACE} "${kwsys_folder}") + CMAKE_SET_TARGET_FOLDER(${KWSYS_NAMESPACE}_c "${kwsys_folder}") + CMAKE_SET_TARGET_FOLDER(${KWSYS_NAMESPACE}EncodeExecutable "${kwsys_folder}") + CMAKE_SET_TARGET_FOLDER(${KWSYS_NAMESPACE}ProcessFwd9x "${kwsys_folder}") + if(BUILD_TESTING) + CMAKE_SET_TARGET_FOLDER(${KWSYS_NAMESPACE}TestDynload "${kwsys_folder}") + CMAKE_SET_TARGET_FOLDER(${KWSYS_NAMESPACE}TestProcess "${kwsys_folder}") + CMAKE_SET_TARGET_FOLDER(${KWSYS_NAMESPACE}TestsC "${kwsys_folder}") + CMAKE_SET_TARGET_FOLDER(${KWSYS_NAMESPACE}TestsCxx "${kwsys_folder}") + CMAKE_SET_TARGET_FOLDER(${KWSYS_NAMESPACE}TestSharedForward "${kwsys_folder}") + endif() + + #--------------------------------------------------------------------- + # Setup third-party libraries. + # Everything in the tree should be able to include files from the + # Utilities directory. + INCLUDE_DIRECTORIES( + ${CMake_BINARY_DIR}/Utilities + ${CMake_SOURCE_DIR}/Utilities + ) + + # check for the use of system libraries versus builtin ones + # (a macro defined in this file) + CMAKE_HANDLE_SYSTEM_LIBRARIES() + + #--------------------------------------------------------------------- + # Build zlib library for Curl, CMake, and CTest. + SET(CMAKE_ZLIB_HEADER "cm_zlib.h") + IF(CMAKE_USE_SYSTEM_ZLIB) + FIND_PACKAGE(ZLIB) + IF(NOT ZLIB_FOUND) + MESSAGE(FATAL_ERROR + "CMAKE_USE_SYSTEM_ZLIB is ON but a zlib is not found!") + ENDIF(NOT ZLIB_FOUND) + SET(CMAKE_ZLIB_INCLUDES ${ZLIB_INCLUDE_DIR}) + SET(CMAKE_ZLIB_LIBRARIES ${ZLIB_LIBRARIES}) + ELSE(CMAKE_USE_SYSTEM_ZLIB) + SET(CMAKE_ZLIB_INCLUDES ${CMake_SOURCE_DIR}/Utilities) + SET(CMAKE_ZLIB_LIBRARIES cmzlib) + ADD_SUBDIRECTORY(Utilities/cmzlib) + CMAKE_SET_TARGET_FOLDER(cmzlib "Utilities/3rdParty") + ENDIF(CMAKE_USE_SYSTEM_ZLIB) + + #--------------------------------------------------------------------- + # Build Curl library for CTest. + IF(CMAKE_USE_SYSTEM_CURL) + FIND_PACKAGE(CURL) + IF(NOT CURL_FOUND) + MESSAGE(FATAL_ERROR + "CMAKE_USE_SYSTEM_CURL is ON but a curl is not found!") + ENDIF(NOT CURL_FOUND) + SET(CMAKE_CURL_INCLUDES ${CURL_INCLUDE_DIRS}) + SET(CMAKE_CURL_LIBRARIES ${CURL_LIBRARIES}) + ELSE(CMAKE_USE_SYSTEM_CURL) + SET(CURL_SPECIAL_ZLIB_H ${CMAKE_ZLIB_HEADER}) + SET(CURL_SPECIAL_LIBZ_INCLUDES ${CMAKE_ZLIB_INCLUDES}) + SET(CURL_SPECIAL_LIBZ ${CMAKE_ZLIB_LIBRARIES}) + OPTION(CMAKE_BUILD_CURL_SHARED "Should curl be built shared" FALSE) + IF(NOT CMAKE_BUILD_CURL_SHARED) + ADD_DEFINITIONS(-DCURL_STATICLIB) + ENDIF(NOT CMAKE_BUILD_CURL_SHARED) + SET(CMAKE_CURL_INCLUDES) + SET(CMAKE_CURL_LIBRARIES cmcurl) + IF(CMAKE_TESTS_CDASH_SERVER) + SET(CMAKE_CURL_TEST_URL "${CMAKE_TESTS_CDASH_SERVER}/user.php") + ENDIF(CMAKE_TESTS_CDASH_SERVER) + ADD_SUBDIRECTORY(Utilities/cmcurl) + CMAKE_SET_TARGET_FOLDER(cmcurl "Utilities/3rdParty") + CMAKE_SET_TARGET_FOLDER(LIBCURL "Utilities/3rdParty") + ENDIF(CMAKE_USE_SYSTEM_CURL) + + #--------------------------------------------------------------------- + # Build Compress library for CTest. + SET(CMAKE_COMPRESS_INCLUDES + "${CMAKE_CURRENT_BINARY_DIR}/Utilities/cmcompress") + SET(CMAKE_COMPRESS_LIBRARIES "cmcompress") + ADD_SUBDIRECTORY(Utilities/cmcompress) + CMAKE_SET_TARGET_FOLDER(cmcompress "Utilities/3rdParty") + IF(CMAKE_USE_SYSTEM_BZIP2) + FIND_PACKAGE(BZip2) + ELSE() + SET(BZIP2_INCLUDE_DIR + "${CMAKE_CURRENT_SOURCE_DIR}/Utilities/cmbzip2") + SET(BZIP2_LIBRARIES cmbzip2) + ADD_SUBDIRECTORY(Utilities/cmbzip2) + CMAKE_SET_TARGET_FOLDER(cmbzip2 "Utilities/3rdParty") + ENDIF() + + #--------------------------------------------------------------------- + # Build or use system libarchive for CMake and CTest. + IF(CMAKE_USE_SYSTEM_LIBARCHIVE) + IF(EXISTS ${CMAKE_ROOT}/Modules/FindLibArchive.cmake) + FIND_PACKAGE(LibArchive) + ELSE() + CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR) + INCLUDE(${CMake_SOURCE_DIR}/Modules/FindLibArchive.cmake) + ENDIF() + IF(NOT LibArchive_FOUND) + MESSAGE(FATAL_ERROR "CMAKE_USE_SYSTEM_LIBARCHIVE is ON but LibArchive is not found!") + ENDIF() + SET(CMAKE_TAR_INCLUDES ${LibArchive_INCLUDE_DIRS}) + SET(CMAKE_TAR_LIBRARIES ${LibArchive_LIBRARIES}) + ELSE(CMAKE_USE_SYSTEM_LIBARCHIVE) + SET(ZLIB_INCLUDE_DIR ${CMAKE_ZLIB_INCLUDES}) + SET(ZLIB_LIBRARY ${CMAKE_ZLIB_LIBRARIES}) + ADD_DEFINITIONS(-DLIBARCHIVE_STATIC) + SET(ENABLE_NETTLE OFF CACHE INTERNAL "Enable use of Nettle") + SET(ENABLE_OPENSSL ${CMAKE_USE_OPENSSL} CACHE INTERNAL "Enable use of OpenSSL") + SET(ENABLE_XATTR OFF CACHE INTERNAL "Enable extended attribute support") + SET(ENABLE_ACL OFF CACHE INTERNAL "Enable ACL support") + SET(ENABLE_ICONV OFF CACHE INTERNAL "Enable iconv support") + ADD_SUBDIRECTORY(Utilities/cmlibarchive) + CMAKE_SET_TARGET_FOLDER(cmlibarchive "Utilities/3rdParty") + SET(CMAKE_TAR_LIBRARIES cmlibarchive ${BZIP2_LIBRARIES}) + ENDIF(CMAKE_USE_SYSTEM_LIBARCHIVE) + + #--------------------------------------------------------------------- + # Build expat library for CMake and CTest. + IF(CMAKE_USE_SYSTEM_EXPAT) + FIND_PACKAGE(EXPAT) + IF(NOT EXPAT_FOUND) + MESSAGE(FATAL_ERROR + "CMAKE_USE_SYSTEM_EXPAT is ON but a expat is not found!") + ENDIF(NOT EXPAT_FOUND) + SET(CMAKE_EXPAT_INCLUDES ${EXPAT_INCLUDE_DIRS}) + SET(CMAKE_EXPAT_LIBRARIES ${EXPAT_LIBRARIES}) + ELSE(CMAKE_USE_SYSTEM_EXPAT) + SET(CMAKE_EXPAT_INCLUDES) + SET(CMAKE_EXPAT_LIBRARIES cmexpat) + ADD_SUBDIRECTORY(Utilities/cmexpat) + CMAKE_SET_TARGET_FOLDER(cmexpat "Utilities/3rdParty") + ENDIF(CMAKE_USE_SYSTEM_EXPAT) + + #--------------------------------------------------------------------- + # Build XMLRPC library for CMake and CTest. + IF(CTEST_USE_XMLRPC) + FIND_PACKAGE(XMLRPC QUIET REQUIRED libwww-client) + IF(NOT XMLRPC_FOUND) + MESSAGE(FATAL_ERROR + "CTEST_USE_XMLRPC is ON but xmlrpc is not found!") + ENDIF(NOT XMLRPC_FOUND) + SET(CMAKE_XMLRPC_INCLUDES ${XMLRPC_INCLUDE_DIRS}) + SET(CMAKE_XMLRPC_LIBRARIES ${XMLRPC_LIBRARIES}) + ENDIF(CTEST_USE_XMLRPC) + + #--------------------------------------------------------------------- + # Use curses? + IF (UNIX) + # there is a bug in the Syllable libraries which makes linking ccmake fail, Alex + IF(NOT "${CMAKE_SYSTEM_NAME}" MATCHES syllable) + SET(CURSES_NEED_NCURSES TRUE) + FIND_PACKAGE(Curses QUIET) + IF (CURSES_LIBRARY) + OPTION(BUILD_CursesDialog "Build the CMake Curses Dialog ccmake" ON) + ELSE (CURSES_LIBRARY) + MESSAGE("Curses libraries were not found. Curses GUI for CMake will not be built.") + SET(BUILD_CursesDialog 0) + ENDIF (CURSES_LIBRARY) + ELSE(NOT "${CMAKE_SYSTEM_NAME}" MATCHES syllable) + SET(BUILD_CursesDialog 0) + ENDIF(NOT "${CMAKE_SYSTEM_NAME}" MATCHES syllable) + ELSE (UNIX) + SET(BUILD_CursesDialog 0) + ENDIF (UNIX) + IF(BUILD_CursesDialog) + ADD_SUBDIRECTORY(Source/CursesDialog/form) + ENDIF(BUILD_CursesDialog) +ENDMACRO (CMAKE_BUILD_UTILITIES) + +#----------------------------------------------------------------------- +IF(CMAKE_CXX_PLATFORM_ID MATCHES "OpenBSD") + EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} + ${CMAKE_CXX_COMPILER_ARG1} -dumpversion + OUTPUT_VARIABLE _GXX_VERSION + ) + STRING(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2" + _GXX_VERSION_SHORT ${_GXX_VERSION}) + IF(_GXX_VERSION_SHORT EQUAL 33) + MESSAGE(FATAL_ERROR + "GXX 3.3 on OpenBSD is known to cause CPack to Crash.\n" + "Please use GXX 4.2 or greater to build CMake on OpenBSD\n" + "${CMAKE_CXX_COMPILER} version is: ${_GXX_VERSION}") + ENDIF() +ENDIF() + +#----------------------------------------------------------------------- +# The main section of the CMakeLists file +# +#----------------------------------------------------------------------- +# The CMake version number. +SET(CMake_VERSION_MAJOR 2) +SET(CMake_VERSION_MINOR 8) +SET(CMake_VERSION_PATCH 8) +SET(CMake_VERSION_TWEAK 0) +#SET(CMake_VERSION_RC 2) + +# Releases define a tweak level. +IF(DEFINED CMake_VERSION_TWEAK) + SET(CMake_VERSION_IS_RELEASE 1) + SET(CMake_VERSION_SOURCE "") +ELSE() + SET(CMake_VERSION_IS_RELEASE 0) + + # Use the date as the tweak level. + INCLUDE(${CMake_SOURCE_DIR}/Source/kwsys/kwsysDateStamp.cmake) + SET(CMake_VERSION_TWEAK + "${KWSYS_DATE_STAMP_YEAR}${KWSYS_DATE_STAMP_MONTH}${KWSYS_DATE_STAMP_DAY}" + ) + + INCLUDE(${CMake_SOURCE_DIR}/Source/CMakeVersionSource.cmake) +ENDIF() + +# Compute the full version string. +SET(CMake_VERSION ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATCH}) +IF(${CMake_VERSION_TWEAK} GREATER 0) + SET(CMake_VERSION ${CMake_VERSION}.${CMake_VERSION_TWEAK}) +ENDIF() +IF(CMake_VERSION_RC) + SET(CMake_VERSION ${CMake_VERSION}-rc${CMake_VERSION_RC}) +ENDIF() +IF(CMake_VERSION_SOURCE) + SET(CMake_VERSION ${CMake_VERSION}-${CMake_VERSION_SOURCE}) +ENDIF() + +# Include the standard Dart testing module +ENABLE_TESTING() +INCLUDE (${CMAKE_ROOT}/Modules/Dart.cmake) + +# Set up test-time configuration. +SET_DIRECTORY_PROPERTIES(PROPERTIES + TEST_INCLUDE_FILE "${CMake_BINARY_DIR}/Tests/EnforceConfig.cmake") + +# where to write the resulting executables and libraries +SET(BUILD_SHARED_LIBS OFF) +SET(EXECUTABLE_OUTPUT_PATH "" CACHE INTERNAL "No configurable exe dir.") +SET(LIBRARY_OUTPUT_PATH "" CACHE INTERNAL + "Where to put the libraries for CMake") + +# The CMake executables usually do not need any rpath to run in the build or +# install tree. +SET(CMAKE_SKIP_RPATH ON CACHE INTERNAL "CMake does not need RPATHs.") + +SET(CMAKE_DATA_DIR "/share/cmake-${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}" CACHE STRING + "Install location for data (relative to prefix).") +SET(CMAKE_DOC_DIR "/doc/cmake-${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}" CACHE STRING + "Install location for documentation (relative to prefix).") +SET(CMAKE_MAN_DIR "/man" CACHE STRING + "Install location for man pages (relative to prefix).") +MARK_AS_ADVANCED(CMAKE_DATA_DIR CMAKE_DOC_DIR CMAKE_MAN_DIR) +IF(CYGWIN AND EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake") + # Force doc, data and man dirs to conform to cygwin layout. + SET(CMAKE_DOC_DIR "/share/doc/cmake-${CMake_VERSION}") + SET(CMAKE_DATA_DIR "/share/cmake-${CMake_VERSION}") + SET(CMAKE_MAN_DIR "/share/man") + # let the user know we just forced these values + MESSAGE(STATUS "Setup for Cygwin packaging") + MESSAGE(STATUS "Override cache CMAKE_DOC_DIR = ${CMAKE_DOC_DIR}") + MESSAGE(STATUS "Override cache CMAKE_DATA_DIR = ${CMAKE_DATA_DIR}") + MESSAGE(STATUS "Override cache CMAKE_MAN_DIR = ${CMAKE_MAN_DIR}") +ENDIF() +STRING(REGEX REPLACE "^/" "" CMake_DATA_DEST "${CMAKE_DATA_DIR}") +STRING(REGEX REPLACE "^/" "" CMake_DOC_DEST "${CMAKE_DOC_DIR}") + +IF(BUILD_TESTING) + INCLUDE(${CMake_SOURCE_DIR}/Tests/CMakeInstall.cmake) +ENDIF() + +# include special compile flags for some compilers +INCLUDE(CompileFlags.cmake) + +# no clue why we are testing for this here +INCLUDE(CheckSymbolExists) +CHECK_SYMBOL_EXISTS(unsetenv "stdlib.h" HAVE_UNSETENV) +CHECK_SYMBOL_EXISTS(environ "stdlib.h" HAVE_ENVIRON_NOT_REQUIRE_PROTOTYPE) + +# CMAKE_TESTS_CDASH_SERVER: CDash server used by CMake/Tests. +# +# If not defined or "", this variable defaults to the server at +# http://www.cdash.org/CDash. +# +# If set explicitly to "NOTFOUND", curl tests and ctest tests that use +# the network are skipped. +# +# If set to something starting with "http://localhost/", the CDash is +# expected to be an instance of CDash used for CDash testing, pointing +# to a cdash4simpletest database. In these cases, the CDash dashboards +# should be run first. +# +IF("x${CMAKE_TESTS_CDASH_SERVER}" STREQUAL "x") + SET(CMAKE_TESTS_CDASH_SERVER "http://www.cdash.org/CDash") +ENDIF("x${CMAKE_TESTS_CDASH_SERVER}" STREQUAL "x") + +# build the utilities (a macro defined in this file) +CMAKE_BUILD_UTILITIES() + +# On NetBSD ncurses is required, since curses doesn't have the wsyncup() +# function. ncurses is installed via pkgsrc, so the library is in /usr/pkg/lib, +# which isn't in the default linker search path. So without RPATH ccmake +# doesn't run and the build doesn't succeed since ccmake is executed for +# generating the documentation. +IF(BUILD_CursesDialog) + GET_FILENAME_COMPONENT(_CURSES_DIR "${CURSES_LIBRARY}" PATH) + SET(CURSES_NEED_RPATH FALSE) + IF(NOT "${_CURSES_DIR}" STREQUAL "/lib" AND NOT "${_CURSES_DIR}" STREQUAL "/usr/lib" AND NOT "${_CURSES_DIR}" STREQUAL "/lib64" AND NOT "${_CURSES_DIR}" STREQUAL "/usr/lib64") + SET(CURSES_NEED_RPATH TRUE) + ENDIF(NOT "${_CURSES_DIR}" STREQUAL "/lib" AND NOT "${_CURSES_DIR}" STREQUAL "/usr/lib" AND NOT "${_CURSES_DIR}" STREQUAL "/lib64" AND NOT "${_CURSES_DIR}" STREQUAL "/usr/lib64") +ENDIF(BUILD_CursesDialog) + +IF(BUILD_QtDialog) + IF(APPLE) + SET(CMAKE_BUNDLE_NAME + "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}-${CMake_VERSION_PATCH}") + SET(CMAKE_BUNDLE_LOCATION "${CMAKE_INSTALL_PREFIX}") + # make sure CMAKE_INSTALL_PREFIX ends in / + STRING(LENGTH "${CMAKE_INSTALL_PREFIX}" LEN) + MATH(EXPR LEN "${LEN} -1" ) + STRING(SUBSTRING "${CMAKE_INSTALL_PREFIX}" ${LEN} 1 ENDCH) + IF(NOT "${ENDCH}" STREQUAL "/") + SET(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/") + ENDIF(NOT "${ENDCH}" STREQUAL "/") + SET(CMAKE_INSTALL_PREFIX + "${CMAKE_INSTALL_PREFIX}${CMAKE_BUNDLE_NAME}.app/Contents") + ENDIF(APPLE) + + SET(QT_NEED_RPATH FALSE) + IF(NOT "${QT_LIBRARY_DIR}" STREQUAL "/lib" AND NOT "${QT_LIBRARY_DIR}" STREQUAL "/usr/lib" AND NOT "${QT_LIBRARY_DIR}" STREQUAL "/lib64" AND NOT "${QT_LIBRARY_DIR}" STREQUAL "/usr/lib64") + SET(QT_NEED_RPATH TRUE) + ENDIF(NOT "${QT_LIBRARY_DIR}" STREQUAL "/lib" AND NOT "${QT_LIBRARY_DIR}" STREQUAL "/usr/lib" AND NOT "${QT_LIBRARY_DIR}" STREQUAL "/lib64" AND NOT "${QT_LIBRARY_DIR}" STREQUAL "/usr/lib64") +ENDIF(BUILD_QtDialog) + + +# The same might be true on other systems for other libraries. +# Then only enable RPATH if we have are building at least with cmake 2.4, +# since this one has much better RPATH features than cmake 2.2. +# The executables are then built with the RPATH for the libraries outside +# the build tree, which is both the build and the install RPATH. +IF (UNIX) + IF( CMAKE_USE_SYSTEM_CURL OR CMAKE_USE_SYSTEM_ZLIB + OR CMAKE_USE_SYSTEM_EXPAT OR CTEST_USE_XMLRPC OR CURSES_NEED_RPATH OR QT_NEED_RPATH) + SET(CMAKE_SKIP_RPATH OFF CACHE INTERNAL "CMake built with RPATH.") + SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + ENDIF(CMAKE_USE_SYSTEM_CURL OR CMAKE_USE_SYSTEM_ZLIB + OR CMAKE_USE_SYSTEM_EXPAT OR CTEST_USE_XMLRPC OR CURSES_NEED_RPATH OR QT_NEED_RPATH) +ENDIF (UNIX) + + +# add the uninstall support +CONFIGURE_FILE( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + @ONLY) +ADD_CUSTOM_TARGET(uninstall + "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") + +INCLUDE (CMakeCPack.cmake) + +# setup some Testing support (a macro defined in this file) +CMAKE_SETUP_TESTING() +CONFIGURE_FILE( + "${CMAKE_CURRENT_SOURCE_DIR}/DartLocal.conf.in" + "${CMAKE_CURRENT_BINARY_DIR}/DartLocal.conf" + COPYONLY) + +OPTION(CMAKE_STRICT + "Perform strict testing to record property and variable access. Can be used to report any undefined properties or variables" OFF) +MARK_AS_ADVANCED(CMAKE_STRICT) + + +# build the remaining subdirectories +ADD_SUBDIRECTORY(Source) +ADD_SUBDIRECTORY(Utilities) +ADD_SUBDIRECTORY(Tests) + +if(BUILD_TESTING) + CMAKE_SET_TARGET_FOLDER(CMakeLibTests "Tests") +endif() +CMAKE_SET_TARGET_FOLDER(cmw9xcom "Utilities/Win9xCompat") +CMAKE_SET_TARGET_FOLDER(documentation "Documentation") + +# add a test +ADD_TEST(SystemInformationNew "${CMAKE_CMAKE_COMMAND}" + --system-information -G "${CMAKE_TEST_GENERATOR}" ) + +# Install license file as it requires. +INSTALL(FILES Copyright.txt DESTINATION ${CMake_DOC_DEST}) + +# Install script directories. +INSTALL( + DIRECTORY Modules Templates + DESTINATION "${CMake_DATA_DEST}" + FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ + DIRECTORY_PERMISSIONS OWNER_READ OWNER_EXECUTE OWNER_WRITE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + PATTERN "*.sh*" PERMISSIONS OWNER_READ OWNER_EXECUTE OWNER_WRITE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + ) + +#----------------------------------------------------------------------- +# End of the main section of the CMakeLists file +#----------------------------------------------------------------------- + +# As a special case when building CMake itself, CMake 2.8.0 and below +# look up EXECUTABLE_OUTPUT_PATH in the top-level CMakeLists.txt file +# to compute the location of the "cmake" executable. We set it here +# so that those CMake versions can find it. We wait until after all +# the add_subdirectory() calls to avoid affecting the subdirectories. +SET(EXECUTABLE_OUTPUT_PATH ${CMake_BIN_DIR}) diff --git a/CMakeLogo.gif b/CMakeLogo.gif new file mode 100644 index 0000000000000000000000000000000000000000..8426402a7264672715a35bd0e0f879452843acc5 GIT binary patch literal 4481 zcmWlYc|4T)1INEJ^UP(Kd1f4Gh;imB&mdP}#yPo`*b=G{>+Be^5!KF&yC|Y4R^uL$ z#u3q0Ba&2_E=$KYWLxQ?)fOwyZ-4)MUZ1}{f4pDskI!arN2jPWzy*8-05k$4qig2o z1E}@3f`Wq6XxhTU0$2vAsj27>d%$ZD6BF~$(lSz8yRZ-~D=W*)%uGs3^7MT4;lqc2 zLql3KF7)>P+xop=bhK?iSNG39|GaXdcjHDy?#N#72+YsVkC>Re_3-E-5)Yu;H*ek? z5)yLx^8I;#zh}0#WHu=>GBWLW$<#)di}?jG4BOh?pPZbWn3%YB?YFF~4AZ@8PoF+* zvEP73?wp;S?bFZ@i^aaaV>Z5xFJHctN~H}A4SjvRpbsoBFM|<4E`&ThJRYX)-Lc~Z zkw_dG8Uh2r($cc6t!;F4)X8bqDe(5ggut+^({XVtwzjs152Fmmtw|5|$jC@_b#=nl zy_YXv*46C+9iXPB=Czq=La@Qo(o%TD+@-eDhK7dy{qnB3ZRk&NU;;c|y~^3yd5BDs z0x%xnGd_+EkB@^tKzVuj*RNk8jK7Y~nuiY`Uc9*C?K4{%TN)ZV;p8;>)ycV3D(y)V zZ1qd-=;*k1?X6vz&7C`FaPaTq-9Ld3K!x;MQsVofB5`SH?pm`Kc~(~6{rqz9_%Q_e z8XO!DFy@3>p>8{umXsfPyg%JIFC82J5LC#-_FhLfkVpWu0#I7@Yh!uL&hH)`EiK(O zH5a0zUxlGQJNaJ&L*Km#^J>u2y3*UOrFF5o`n0`+pNaD|gdFO|oz%l%c$THJ>s>1= zD_6p{efc49Wo6~YjT=|5UVS4Fyieo5Mv(pc7oR@8*V)C+n<&hvnLmzL?{)pGH@ z=cuNp=2TQv)!Awe=OI<5`Y!3mo}Ttw_wKDl*T5)c%+}<>g$o0NgVxr=#v6b2@p*FM z(rnv4izPpAh7gj@w^O7Uzr3H#axr zS5@6-vt8C9W9CdFM`2jl#CTKHmduc#A13G)*^Qf=YMPsm9!SXMKT2OIfT@!I*9H~L#7z8G$=^EqZ|AG5^ksJ~OH_MP2WMyzgEc@J0r!@GKo#@P#tZC`vCdSpSevcfV)f);)oR=d{S!Tqysq-`S z-q2`Ud`)Abheg@AjiGF|H~|n<)zqh08jQTLo!4|;56)mGJ;Ft%FJu<5C z%FWJxu?QSwC5)fcHf*>waqjt-BlZ26H`dWHSbF{B1Km^@%1vLfO4j3!E^F=b8d=o3 z8}-B`WzE6*@vdCbALPjrjMuXLZJhdwQ8q11BXnT@z~J0!(aN4MI&|G2$}c=0+I=r? zJm(=%$M{@rt~n-Uux@|!@{FQ%E;^us^I4ro4z6g}gbaJJ*P`t=1_1$a^L zfbHhO?Wf3n?_n?Jw~-Di&OwD{?$lGF{$Ta+C0l=Q>S|+?y0rDu+-HhM|_DXsuql9^2P0sJJ4F6pt`4 zKJ?{oP-(6?Te%fGQQPWvPh|lko$f`NIm}H>;+-wuw|c4{C6_@b z%F*g;rp*Lqn`~_f;W+agqKyBeKb_DR{_`7GntbZ>3!q0r_|o-NuOfSgB_!bQ4jCq5Fdva&sY65 zbw<{?f4%Pa2gK=rz9nQumdFMpu*fq)n*j(NZ%<=bqU+9Z@wtr6Lc7-#V&dG6O*jemY2W;=53ZeJ3dJjfy1JW=|=Ct20x`;So)89~zcfC*3^orkFcr z)o%EU0BiS|vxO=vJ#(lmcg-^qC1Wf^+@JcV`y9T?&cBZG*o-?=QQGj+2Gu0>E%Ap| zO1eJF`B-*(quXItF&Q>ft8ULZWbxiS=8t z!vmB-=dGpHPqYszi5iMIzsqf>F&V?z{;ROW6Gg;q=FHB=@utOJrJTK=?*6W^P#ao= zYT71k`BLPDmeg4MoXUKc^b9ew!6k-rJ4%0jANDu@(e|+c#^E_E^T~*C)<&ZH%8W=h z-GYPsqqKQKO)^UXsqYX$#%A0P1cu1WiG-Q)5=Kpdysc^jsWAw^=C(sv(lOPyCZd^t zn4$%(nh^AgJ9Gvi2AmxwCe`M{E5#%X$Ea7kagSc%B;?e}S@V46ecXlTBo{mRZkWxX zB?jTN1O+pm|U&yO`%& z-)|6|ep>1iFuSF4>4`M(a?7^8vnHHr+%GfU0OGt0U%P}a7|*sarf0=%8c=hUcoIfL z2^ukdjMIG4TBiJF&hVEB#fk2&rhpG8xG{uKGtY|&Me!KrGX|x2P&1KBu(6w5vuE79 zJy?>UWqg%U&F^m_2Ye!jNpvD$d27#y5Br8E;Zul6m9UTU(|eJ2{BT!e$@hJ}GCuuY zqeD&mMe>n|-^P;vNU=`GKzmaobsmfltm{sGAJeIvrlL*RYu%BYTqVF%uKwU@8YD*5 zrg7?t?#$^hy1tzmd6W|i>19|`LZc`cUf=c76>Pvg4DRZ;Z2iW-pCjJ)lb-V(I$j=0 z(F!tzcIACjr+pUL`HKKaK1qZ$i7`i5k%9XjF!Pf2#@BNU2o+eYw$>)GwlFp$YH#Kl zB|}pxw@y4hpzRt9)G?n7Y!x}Crvex2H*$a1mgdl^`WHtx8tH9Ahi+aS#abSAfuy?z zjU$WTHHF;0`e7g=c`nPm-hj-AxM^o9IGcAAya}nGXoXYrOo~~AQRWcM)ZQv?{JIvw zOh9h~uYP?+%Ol&D6N-b*PwDFu4k!SM?V4J)12qPSjAIZ)2lXMY^fSX)*9t|B{u6ZN zpRfITA7AV%4VhXfg|Vdw`MUzVj)9{E>r#af4CDL}VvGc93{wuwsWK%vKb9#0;2agW z0Ypup#Ihy0=Uzltga8+>69{oILfF8k8~_jn!L#K@Qk6&;2kWOqIt*b*Nh1k@2Dbb+ zNN^V5{Ulf~Ar3Lakr09!{ZQ#&M?1&V&dgEP$S^u{`QC?7=*Crhwj*n|hHbzVW(gdivZ#xP~T3sDsWsa-Fjn;=B#cnT#L zrzIgr2#)t?gB%vIpHIt{Ktcqk$)etx14HqJ0vUFll5D2FgxMVT@d?Wq8ey3P8{N-Tu~s(9FATPV)OgtuR4gwLv%<&LCeQXT*J73uL50p{);K}7(vCE&Jz zmL|hY&4I^=8cl}HQ_y15Go)*a9y=DT>+u2b}kwNnSv+O~5 zF^#=MBJvTUzl={2LQjD!9l`j?3}A$4q7>7E0^B)R5{L54$ou`%lQ~kH30y`|Vq=1^ z5Mq?75L?J12wdW#ge;Ze(c1RdD+bmkj%^EbIm@NAgq3KKUdT~Q@5E~O}dPgyk#xhZgKJSlDx|8{_hL3{~Z z5XC=!sFys3D$2!oO7_nY;^ZaS0>W(>H4Q0r7E*da5poFoPr}(wC8>i&IUr>45dzyV zS#@6Z=K__q?f5f*X2cmP&1flN&Zs z1LCM0?8WEs$>l5+;bN_*pnArXV%y!)I-TEbL+%qLo& zQ>$1aq=q-y9&4)ZYdZX_seS|xIITySkXVIMQVe|hr2i%mPC8#eN>u$Vi0haYNMEz9 zb4|ulbB%LLB-}Qr0;a=Txx$u@2q4Q_|23z``go5L8CA;t!7bHDc!SOCg$$LJev6hV z-`3aRZPUIj;+B>Zv(i{4c0Q5OgwR%-H+^N+!M=5eW-s2Hy)~TNQ&?&}{mgzC)>I zBmmx-UA&~OY-NewosQ7i3lSEbzLL(m@XK4THVmua_pr*j8|g~|Rdcx84(>Kbx??iC b<14!puXgXr?2b*M?$GH;p{QdpVB`M)0Qz7} literal 0 HcmV?d00001 diff --git a/CTestConfig.cmake b/CTestConfig.cmake new file mode 100644 index 0000000..3903222 --- /dev/null +++ b/CTestConfig.cmake @@ -0,0 +1,25 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +set(CTEST_PROJECT_NAME "CMake") +set(CTEST_NIGHTLY_START_TIME "1:00:00 UTC") + +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=CMake") +set(CTEST_DROP_SITE_CDASH TRUE) +set(CTEST_CDASH_VERSION "1.6") +set(CTEST_CDASH_QUERY_VERSION TRUE) + +# use old trigger stuff so that cmake 2.4 and below will not +# get errors on trigger +SET (TRIGGER_SITE + "http://public.kitware.com/cgi-bin/Submit-CMake-TestingResults.cgi") diff --git a/CTestCustom.cmake.in b/CTestCustom.cmake.in new file mode 100644 index 0000000..9829191 --- /dev/null +++ b/CTestCustom.cmake.in @@ -0,0 +1,85 @@ +SET(CTEST_CUSTOM_ERROR_MATCH + ${CTEST_CUSTOM_ERROR_MATCH} + "ERROR:") + +SET(CTEST_CUSTOM_WARNING_EXCEPTION + ${CTEST_CUSTOM_WARNING_EXCEPTION} + "xtree.[0-9]+. : warning C4702: unreachable code" + "warning LNK4221" + "warning LNK4204" # Occurs by race condition with objects in small libs + "variable .var_args[2]*. is used before its value is set" + "jobserver unavailable" + "warning: \\(Long double usage is reported only once for each file" + "warning: To disable this warning use" + "could not be inlined" + "libcmcurl.*has no symbols" + "not sorted slower link editing will result" + "stl_deque.h:479" + "Utilities.cmzlib." + "Utilities.cmbzip2." + "Source.CTest.Curl" + "Source.CursesDialog.form" + "Utilities.cmcurl" + "Utilities.cmexpat." + "Utilities.cmlibarchive" + "/usr/include.*warning.*shadowed declaration is here" + "/usr/bin/ld.*warning.*-..*directory.name.*bin.*does not exist" + "Redeclaration of .send..... with a different storage class specifier" + "is not used for resolving any symbol" + "Clock skew detected" + "remark\\(1209" + "remark: .*LOOP WAS VECTORIZED" + "warning .980: wrong number of actual arguments to intrinsic function .std::basic_" + "LINK : warning LNK4089: all references to.*ADVAPI32.dll.*discarded by /OPT:REF" + "LINK : warning LNK4089: all references to.*USER32.dll.*discarded by /OPT:REF" + "Warning: library was too large for page size.*" + "Warning: public.*_archive_.*in module.*archive_*clashes with prior module.*archive_.*" + "Warning: public.*BZ2_bz.*in module.*bzlib.*clashes with prior module.*bzlib.*" + "Warning: public.*_archive.*clashes with prior module.*" + "Warning: LINN32: Last line.*is less.*" + "warning.*directory name.*CMake-Xcode.*/bin/.*does not exist.*" + "stl_deque.h:1051" + "(Lexer|Parser).*warning.*conversion.*may (alter its value|change the sign)" + "(Lexer|Parser).*warning.*statement is unreachable" + "PGC-W-0095-Type cast required for this conversion.*ProcessUNIX.c" + "[Qq]t([Cc]ore|[Gg]ui).*warning.*conversion.*may alter its value" + "warning:.*is.*very unsafe.*consider using.*" + "warning:.*is.*misused, please use.*" + "CMakeSetupManifest.xml.*manifest authoring warning.*Unrecognized Element" + "cc-3968 CC: WARNING File.*" # "implicit" truncation by static_cast + "ld: warning: directory not found for option .-(F|L)" + "warning.*This version of Mac OS X is unsupported" + "clang.*: warning: argument unused during compilation: .-g" + + # Ignore clang's summary warning, assuming prior text has matched some + # other warning expression: + "[0-9,]+ warnings? generated." + ) + +IF(NOT "@CMAKE_GENERATOR@" MATCHES "Xcode") + SET(CTEST_CUSTOM_COVERAGE_EXCLUDE + ${CTEST_CUSTOM_COVERAGE_EXCLUDE} + "XCode" + ) +ENDIF (NOT "@CMAKE_GENERATOR@" MATCHES "Xcode") + +IF(NOT "@CMAKE_GENERATOR@" MATCHES "KDevelop") + SET(CTEST_CUSTOM_COVERAGE_EXCLUDE + ${CTEST_CUSTOM_COVERAGE_EXCLUDE} + "Kdevelop" + ) +ENDIF (NOT "@CMAKE_GENERATOR@" MATCHES "KDevelop") + +SET(CTEST_CUSTOM_COVERAGE_EXCLUDE + ${CTEST_CUSTOM_COVERAGE_EXCLUDE} + + # Exclude kwsys files from coverage results. They are reported + # (with better coverage results) on kwsys dashboards... + "/Source/(cm|kw)sys/" + + # Exclude try_compile sources from coverage results: + "/CMakeFiles/CMakeTmp/" + + # Exclude Qt source files from coverage results: + "[A-Za-z]./[Qq]t/qt-.+-opensource-src" + ) diff --git a/CTestCustom.ctest.in b/CTestCustom.ctest.in new file mode 100644 index 0000000..6127843 --- /dev/null +++ b/CTestCustom.ctest.in @@ -0,0 +1,3 @@ +# This file is provided for compatibility with CMake 2.2 and lower. +# Just include the custom file by its new name. +INCLUDE("CTestCustom.cmake") diff --git a/ChangeLog.manual b/ChangeLog.manual new file mode 100644 index 0000000..691ff94 --- /dev/null +++ b/ChangeLog.manual @@ -0,0 +1,3071 @@ +Changes in CMake 2.8.8 (since 2.8.8-rc2) +---------------------------------------- +Brad King (1): + CheckIncludeFiles: Shorten check description message + +David Cole (3): + CPackNSIS: Rewrite variable documentation to make it more readable. + OS X: Use correct extra path when searching for applicaton bundles (#13066) + OS X: Mark find_program results as advanced + +Eric NOULARD (1): + Fix some doc typo and add an undocumented var. + +Kashif Rasul (1): + OS X: Use OSX_DEVELOPER_ROOT for app search path (#13066) + +Rolf Eike Beer (1): + FindBoost: add support for 1.49 and 1.50 + +Changes in CMake 2.8.8-rc2 (since 2.8.8-rc1) +-------------------------------------------- +Alex Neundorf (4): + make cmLocalGenerator::EscapeForCMake() static + automoc: fix #13018, proper cmake escaping to avoid false rebuilds + automoc: add define to test which caused bug #13018 + fix #13054: support OBJECT libraries in Eclipse + +Ben Boeckel (1): + Create granular targets for Ninja generators too + +Brad King (6): + CTest.UpdateHG: Fix repo URL for leading slash + Always compile sources with known language + Classify known header file extensions as headers + VS: Add CMakeLists.txt re-run rules at start of generation + Test generated module .def files + Ninja: Fix module .def file path conversion + +David Cole (2): + CMake: Clarify SUFFIX target property documentation. + Xcode: Pay attention to custom configuration types (#13082) + +Peter Collingbourne (1): + Ninja: Substitute and in depfile flags + +Rolf Eike Beer (2): + FILE: mention that TO_CMAKE_PATH also handles list delimiters + FIND_LIBRARY: document FIND_LIBRARY_USE_LIB64_PATHS + +Sean McBride (1): + automoc: include on Apple to get pathconf + +Tom Hughes (1): + Override topdir from rpm command line seems necessary on Amazon linux. + +Changes in CMake 2.8.8-rc1 (since 2.8.7) +---------------------------------------- +Aaron C. Meadows (1): + Visual Studio: Allow setting Single Byte Character Set (#12189) + +Alex Neundorf (34): + GNUInstallDirs: add support for Debian multiarch + FindRuby: fix usage of RUBY_VERSION_MAJOR (#12172) + FindRuby: add more possible library names (for ubuntu, #12172) + FindRuby.cmake: add more debug output + fix FeatureSummary for REQUIRED packages, they were reported as OPTIONAL + FindGetText: fix multiple targets with the same name problem (CMP0002) + fix #6976: FindX11 also searches for X11_Xxf86vm_LIB + GenerateExportHeader: use double quotes around _gcc_version + -remove trailing whitespace + -don't pull in CheckTypeSize.cmake from the cmake which is being built + bootstrap: move while() and endwhile() into the bootstrap build + Check*.cmake: Expand imported targets in CMAKE_REQUIRED_LIBRARIES + find_package: print error if an invalid CONFIGS name is used + find_package: rename NoModule to UseFindModules + find_package: improve error message when no Find module is present + find_package: add MODULE mode to use only Find-modules + find_package: add CONFIG mode keyword alias for NO_MODULE + find_package: mention requested version number in error message + add CMakePackageConfigHelpers: configure_package_config_file() + wrap write_basic_config_version_file as write_basic_package_version_file() + find_package: error out if REQUIRED Config has not been found + write_basic_package_version_file(): improve documentation + write_basic_package_version_file: add ExactVersion mode + WriteBasicConfigVersionFile: add test for ExactVersion mode + find_package: allow Config.cmake to set _FOUND to FALSE + find_package: add test for setting Foo_FOUND to FALSE in a Config file + find_package: additional test for checking the error message + find_package: add OPTIONAL_COMPONENTS keyword + FPHSA(): add missing "]" to documentation + find_package: add documentation for OPTIONAL_COMPONENTS + FPHSA(): add HANDLE_COMPONENTS option + add macro check_required_components() to configure_package_config_file() + Eclipse: fix #13036, make version detection work with symlinks + guard eCos.cmake against multiple inclusion (#12987) + +Alexandru Ciobanu (2): + CTest: Detect Xcode error "Command ... failed with exit code" + CTest: Match valgrind errors with "points to" (#12922) + +Alexey Ozeritsky (1): + FindBLAS/FindLAPACK: Work with MKL version 10.3 (#12924, #12925) + +Artur Kedzierski (1): + Add CURL_CA_BUNDLE option for SSL support (#12946) + +Bill Hoffman (12): + Add CMakeAddFortranSubdirectory to use MinGW gfortran in VS + VSGNUFortran: Add special case for SunPro Fortran runtime library + VSGNUFortran: Disable test in special cases + CMakeAddFortranSubdirectory: Make IMPORTED targets GLOBAL + Use upgraded qt on linux build machine. + Teach CTest what a ninja error looks like. + Allow two cmake_add_fortran_subdirectory calls in the same project. + Add ability to include a file in a project via a cache variable. + Fix typo in error message, and remove redundent test. + Ninja: Add a cache option CMAKE_ENABLE_NINJA to enable the ninja generator. + Ninja: Fix for PDB files with spaces in the path. + Fix FindMPI for the intel compiler on linux by looking in implict directories. + +Bjoern Ricks (1): + Fix crash if app bundle executeable couldn't be found + +Brad King (138): + CheckCCompilerFlag: Generalize "but not for C" case (#12633) + complex: Remove ancient unused ComplexRelativePaths test + complex: Sync Tests/ComplexOneConfig with Tests/Complex + complex: Remove dynamic loader tests + complex: Move GeneratedFileStream test to CMakeLibTests + complex: Simplify test for single-character exe name + complex: Move cmSystemTools::UpperCase test to CMakeLibTests + complex: Remove test dependence on cmSystemTools + complex: Remove unused option to test CMakeLib + Intel: Fix Windows per-config Fortran flags (#12642) + libarchive: Remove our copy to make room for new import + libarchive: Add .gitattributes for indentation with tab + libarchive: Add README-CMake.txt + libarchive: Do not build subdirectories not in reduced snapshot + libarchive: Remove -Wall -Werror from build with GNU + libarchive: Build one static cmlibarchive for CMake + libarchive: Include cm_zlib.h to get zlib used by CMake + Handle libarchive API change in archive_read_data_block + Configure libarchive build within CMake + libarchive: Install COPYING with CMake documentation + libarchive: Port to OSF operating system + libarchive: Fix typo in CheckFileOffsetBits + libarchive: Implement custom lseek for Borland + libarchive: Declare mbstate_t and wcrtomb for Borland + libarchive: Cast constants to int64_t instead of using LL suffix + libarchive: Workaround case-insensitive symbols on Borland + libarchive: Clean up configuration within CMake build + libarchive: Cast mode constants to mode_t in case it is signed + libarchive: Fix Windows NT API usage in VS 6 + libarchive: Suppress compiler warnings + libarchive: Fix var decl after statement in archive_string.c + libarchive: Do not use ST_NOATIME if not defined + libarchive: Check for 'struct statvfs' member 'f_iosize' + libarchive: Do not use MNT_NOATIME if not defined + libarchive: Use Apple copyfile.h API only if available + libarchive: Remove hard-coded build configuration + libarchive: Cleanup after ZLIB_WINAPI check + libarchive: Define _XOPEN_SOURCE=500 on HP-UX + libarchive: Include linux/types.h before linux/fiemap.h + libarchive: Rename isoent_rr_move_dir parameter isoent => curent + libarchive: Suppress PathScale compiler warnings + libarchive: Avoid bogus conversion warning from PGI compiler + libarchive: Set .gitattributes to allow trailing whitespace + libarchive: Update README-CMake.txt for new snapshot + libarchive: Restore CMake 2.6.3 as minimum version + bootstrap: Update copyright year in version report + bootstrap: Re-implement command line option processing + bootstrap: Forward options after '--' to cmake + VS10: Fix /pdb option vcxproj element name (#12328) + Add framework to detect compiler version with its id (#12408) + Detect GNU compiler version with its id (#6251) + Detect MSVC compiler version with its id + Detect Intel compiler version with its id (#11937) + Detect Borland compiler version with its id + Detect IBM XL compiler version with its id + Detect PGI compiler version with its id + Detect Clang compiler version with its id + Detect Watcom compiler version with its id + Detect SunPro compiler version with its id + Detect HP compiler version with its id + Document compiler version macro formats used for detection + Detect SGI MIPSpro compiler version with its id + ExternalProject: Fix git.cmd version detection + ExternalProject: Update copyright year + Include bzlib.h consistently across CMake build (#10950) + FindMPI: Append MPI C++ library correctly in non-compiler case (#12874) + Add infrastructure for CMake-only tests + Tolerate cycles in shared library link interfaces (#12647) + cmInstallCommand: Fix line length for style + cmake-mode.el: Indent after multiline argument (#12908) + Clarify IMPORTED_ target property documentation + Optionally allow IMPORTED targets to be globally visible + Add test covering imported target scope rules + VS: Simplify ;-separated attribute value parsing + Fix CXX/Fortran MODULE flags when enabled before C (#12929) + Remove unused test code + Allow directory names containing '=' and warn if necessary (#12934) + Add CheckLanguage module + CMakeAddFortranSubdirectory: Allow full paths to directories + CMakeAddFortranSubdirectory: Fix documentation format and typos + CMakeAddFortranSubdirectory: Find gfortran in PATH + CMakeAddFortranSubdirectory: Validate gfortran architecture + CMakeAddFortranSubdirectory: Always parse arguments + CMakeAddFortranSubdirectory: Add NO_EXTERNAL_INSTALL option + libarchive: Workaround mbsnrtowcs assertion failure on old glibc + Recognize OpenBSD versioned .so names (#12954) + try_compile: Use random executable file name (#12957) + Rename Modules/Platform/Windows-{Borland => Embarcadero}.cmake + Recognize Embarcadero compiler (#12604) + Factor cmInstallType out of cmTarget::TargetType + Add infrastructure for CMakeCommands tests + find_package: Reject mixed use of MODULE- and CONFIG-only options + find_package: Optionally warn when implicitly using Config mode + find_package: Test error and warning messages in failure cases + bootstrap: Convert MSYS paths to Windows format (#13001) + CTest.UpdateHG: Fix repo URL for local filesystem (#13001) + cmcurl: Do not hard-coded Windows check results for MinGW (#13001) + CheckSourceTree: Remove CVS checkout support (#13001) + Fix MSYS CVS local test repo path format (#13001) + find_package: Test that REQUIRED aborts processing correctly + Remove unused partial OBJECT_FILES property implementation + VS: Simplify object name computation + Hide Makefile local object info inside local generator + KWIML: Make test_INT robust to #define-d int#_t and INT#_C + Add stronger infrastructure for CMake-only tests + Use generalized RunCMake test infrastrucure for find_package test + Use generalized RunCMake test infrastrucure for build_command test + Document Fortran_MODULE_DIRECTORY as OUTPUT only (#13034) + Ninja: Constify use of cmCustomCommand + Ninja: Avoid using 'this' in member initializers + Write CMakeCache.txt atomically (#13040) + Add cmGeneratorTarget to represent a target during generation + Create a cmGeneratorTarget for each cmTarget during generation + Simplify cmMakefileTargetGenerator using cmGeneratorTarget + Simplify cmVisualStudio10TargetGenerator using cmGeneratorTarget + Pre-compute object file names before Makefile generation + Pre-compute object file names before VS project generation + Remove unused cmSourceGroup method + Rename/constify build-time config placeholder lookup + Pre-compute and store target object directory in cmGeneratorTarget + Add OBJECT_LIBRARY target type + Build object library targets in Makefiles + Build object library targets in VS + Add $ expression to use an object library + Test OBJECT library success cases + Test OBJECT library failure cases + Test OBJECT library language propagation + Test OBJECT library use without other sources + Document OBJECT library type in add_library command + Simplify cmNinjaTargetGenerator using cmGeneratorTarget + Pre-compute object file names before Ninja generation + Build object library targets in Ninja + Ninja: Honor $ source expressions + find_package: Test rejection of required+optional components + Simplify cmVisualStudio10TargetGenerator source classification + VS10: Fix external objects generated outside target (#13047) + Fix ObjectLibrary test on Watcom + KWIML: Avoid conflict with C++11 user-defined literals + +Christian Andersson (1): + FindPythonLibs: Search for single-user installs on Windows + +Christopher Sean Morrison (1): + cmake-mode.el: Make indentation case-insensitive (#12995) + +Clinton Stimpson (14): + GetPrerequisites: Add support for @rpath on Mac OS X. + GetPrerequisites: Add support for @rpath on Mac OS X. + GetPrerequisites: Add test for @rpath support. + Fix new BundleUtilities test failure on Mac 10.4.x + Fix BundleUtilities test failure with space in build path. + cmake-gui: Improve interrupt granularity to fix bug 12649. + FindQt4: clarify warning message about incorrect Qt installation. + FindQt4: Add include directories for lupdate. + Fix paths/hints for finding qtmain. + DragNDrop: Fix problem with relocated files in Xcode 4.3 + Add test for DeployQt4.cmake + Fix for Qt4Deploy on some test machines. + Remove QtGui dependency in Qt4Deploy test and verify QtSql existance. + DeployQt4: Add path to Qt dlls on Windows. + +Daniel Nelson (1): + CPack Add top level directory in component install for Archive Generators + +David Cole (33): + Begin post-2.8.7 development + Release: Increase timeout for slow-testing cygwin build + Update dashmacmini2 release script to use Qt 4.6.3 + Update dashmacmini2 release script to use Qt 4.8.0 + Tests: Update drop site value for the Trilinos contract test + Update version of Qt for dashmacmini5 produced release binaries + CTestCustom: Suppress clang warning on the dashboard + CMake: Eliminate cmMakefile::IncludeDirectories + Remove cmMakefile::GetIncludeDirectories + Make search paths ordered and unique + Call ExpandVariablesInString for each target's INCLUDE_DIRECTORIES + Update the documentation regarding INCLUDE_DIRECTORIES. + Fix compiler error reported on older Borland dashboard. + Fix compiler warning reported on older Borland dashboard. + Fix shadowed variable warning on dashboard results + Remove trailing white space + Use correct "requires" line in cygwin setup hint file + VS6: Avoid _MBCS define when _SBCS is defined (#12189) + VS6: Avoid SBCS test on VS6 (#12189) + Suppress warnings occurring on the dashboards using the PGI compiler. + CPack: Fix retry logic when calls to hdiutil fail + Ninja: CMake: Adapt Ninja generator for per-target include dirs + Ninja: Add friend struct so it can access the private ConvertToNinjaPath. + Xcode: Detect new default locations of Xcode 4.3 bits and pieces (#12621) + CPack: Use real path to PackageMaker to find its version file (#12621) + Xcode: Re-factor code into GetObjectsNormalDirectory method + Xcode: Re-factor some existing methods into "FromPath" variants + Add a default source group for object files. + Allow txt files as ExtraSources in object library targets + Pre-compute object file names before Xcode generation + Build object library targets in Xcode + Xcode: Honor $ source expressions + Tests: Relax restrictions on version variable contents + +Deborah Pickett (1): + CPackRPM flag direcories with %dir in the generated spec file + +Droscy (1): + FindCxxTest: Add support for CxxTest 4 (#13022) + +Eric NOULARD (41): + Document undocumented (but existing) cpack options (fix #0010134) + Enhance bash completion file for cmake and ctest + Do not add the content of a file if it's a symlink. + CPackArchive restore default behavior and provide new variable. + CPackNSIS fix #0012935 switch from LOG_WARNING to avoid final error. + CPack begin the implementation of --help-command* and --help-variables* + Implement simple CMake script comment markup language. + CPack Documentation extraction from CMake script begins to work + Update bash completion file in order to handle new CPack doc options. + Suppress unused var, beautify code, avoid 1 extra newline. + Fix potential bad memory access, thanks to Eike + Calm down compiler warning about unused var + Really avoid compiler warning about unused vars + Fix another compiler warning due to a typo + Make the load of script documentation more efficient and dynamic. + Example of builtin variable documentation (i.e. only used in C++ source code). + Add missing section markup for CPackComponent + Create getDocumentedModulesListInDir which may be used in other context. + Fix non existent std::string::clear on VS6 + Avoid discovering system infos for documentation. Adding some path is enough. + Dynamically add documentation section specified in documented script. + Add structured documentation for NSIS + Add structure documentation for CPack Bundle generator + Suppress unecessary (now empty) doc sections + Correct copy/paste section name mistake + Put CPack DMG and PackageMaker doc in separate files + More documentation concerning CPack Components + Fix typo in end markup + Try to fix compile error on Win32-vs70 + Do not build RPM if path of the build tree contains space + Fix layout of the CPack Bundle documentation + Fix CPack Drag and Drop generator documentation layout. + Review and update CPack variable documentation. + Update CPackConfig template. + Provide template for CPack Cygwin generator specific variables. + Update CPack PackageMaker variable doc layout + Typo: Add missing ##end for ##module + Fix some typos in CPACK_SET_DESTDIR doc + Add some missing CPACK_NSIS_xxx doc and move some to common CPack section. + CPack STGZ put execute permission on all packages files (component case) + Handle CPACK_MONOLITHIC_INSTALL in some rare use cases. + +Eugene Golushkov (1): + VS: Add support for WinRT project properties (#12930) + +James Bigler (1): + Added support for curand, cusparse, npp, nvcuenc and nvcuvid libraries. + +Jason Erb (1): + FindwxWidgets: Add webview library (#12636) + +LibArchive Upstream (2): + libarchive 3.0.1-r3950 (reduced) + libarchive 3.0.2-r4051 (reduced) + +Matthias Kretz (1): + Improve checks for Open64 and g++ incompatible flags (#12119) + +Mattias Helsing (1): + CPack: Fix NSIS handling of privileged users (#12923) + +Michael Wild (1): + GenerateExportHeader: Fix wrong use of IS_ABSOLUTE (#12645) + +Mike McQuaid (5): + Don't use QT_LIBRARIES_PLUGINS by default. + Fix mismatched arguments. + Fix bad plugin paths. + Ensure libs are passed to BundleUtilities. + Fix plugin installation issues. + +Modestas Vainius (3): + various typo and formatting fixes in manual pages (#12975) + KWIML: Teach ABI.h that MIPS is biendian + Tests: Escape metachars before embedding paths into the regex (#12999) + +Nicolas Despres (5): + ccmake: Factor clear line. + ccmake: Extend clear line. + java: Factor jar output path. + java: Add CMAKE_JAVA_TARGET_OUTPUT_DIR optional variable. + java: Add CMAKE_JAVA_JAR_ENTRY_POINT optional variable. + +Peter Collingbourne (19): + Add cmSystemTools::TrimWhitespace function + Add executable with exports flag support to cmLocalGenerator::GetTargetFlags + Provide dependency file flags to generator + Ninja: Add the Ninja generator + Ninja: Fix a 79-col violation + Ninja: Remove some default arguments + Ninja: Appease various compilers + Ninja: Partially revert "win fixes: escape back slash/colon, use cd. as cmd.exe nop" + Ninja: Identifier encoding rules for ' ' and ':' + Ninja: Backslash rules for Windows + Ninja: Shell encode paths used in "cd" commands + Ninja: Shell encode various CMake invocations + Ninja: Shell encode the command used in custom commands + Ninja: Import library support for Windows + Ninja: Add a missed license header + Ninja: Use cmSystemTools::ExpandListArgument to split compile/link commands + Ninja: Remove an unnecessary variable + Ninja: add support for OBJECT_OUTPUTS, fix PrecompiledHeader test case + Ninja: shell escape $(CMAKE_SOURCE_DIR) and $(CMAKE_BINARY_DIR) + +Peter Kuemmel (12): + Find VC Express during default generator selection (#12917) + Ninja: win fixes: escape back slash/colon, use cd. as cmd.exe nop + Ninja: don't define MSVC_IDE when using the ninja generator + Ninja: also build ninja support on Windows + Ninja: add some hacks for Windows + Ninja: disable unfinished Windows ninja support + Ninja: mark the Windows specific hacks with a comment only + Ninja: windows msvc: create for each target a .pdb file + Ninja: ensure the output dir exists at compile time + Ninja: add .def file support + Ninja: add /DEF: flag to linker call + Ninja: Fix substitution + +Philip Lowman (5): + FindProtobuf: Merge patch that allows extra import dirs + FindProtobuf: Update documentation comment for 2.8.8 + Findosg: New modules for osgQt and osgPresentation + FindALSA: Fix incorrect include path detection + FindALSA: Fix version detection after last commit + +Rolf Eike Beer (95): + remove reference to CVS directory when installing files + CheckSymbolExists: force the compiler to keep the referenced symbol + add a test for Check{,CXX}SymbolExists + FindOpenSSL: improve version number handling + FindOpenSSL: only try to parse opensslv.h if it exists + FindOpenSSL: also parse version number define with uppercase letters + GenerateExportHeader test: add newlines before end of file + add a test that loops through most Find* modules + AllFindModules test: keep complete output + AllFindModules test: also check Qt3 modules if Qt4 is not found + FindPythonInterp: make version selectable + FindPythonInterp: fix version parsing + LoadCommand test: cleanup + FindThreads: Try pthreads with no special option first (#11333) + fix uninitialized var in if(NOT foo bar STREQUAL "foo bar") + use pkg_check_modules() quiet in other modules + FindLibXml2: support version selection + FindGnuTLS: partly support version selection + FindGit: support version number + FindCups: major overhaul + FindEXPAT: support version number + FindCURL: support version selection + FindFLEX: fix version parsing for old flex versions + FindFLEX: fix version parsing when the executable is quoted + FindJasper: find debug libraries + FindJasper: support version number + FindBZip2: add support for version checking + FindBZip2: add support for debug libraries (#12867) + FindImageMagick: make use of more FPHSA features + FindPNG: support version selection + FindRuby: do not blindly set version to 1.8.0 + FindTclsh: support version selection + SelectLibraryConfigurations: do not output identical configurations + FindLua51: add version support + FindTIFF: support version selection + FindCURL: detect version number also for older versions + FindLibXml2: detect version when PkgConfig is not used + FindPostgreSQL: support version selection + FindOpenSSL: properly parse the hex version components + FindBISON: add a version expression for GNU Bison 1.x + FindPythonInterp: try harder to get a version number + FindJasper: fix library name + FindGnuplot: add version selection + FindALSA: support version selection + FindGettext: support version selection + CheckCXXCompilerFlag test: make it a CMakeOnly test + CMakeOnly.AllFindModules: clean up the Qt3/Qt4 code + CMakeOnly.AllFindModules: always check FindQt + CMakeOnly.AllFindModules: suppress two modules from testing + CMakeOnly.AllFindModules: require version for some modules + CheckIncludeFiles: fix status output + FindPerl{,Libs}: move version detection into FindPerl + FindLibArchive: support version selection + FindX11: also search for Xmu (#12447) + detect "pgfortran" as PGI Fortran compiler (#12425) + FindSDL*: use FPHSA (#12467) + AllFindModules test: do not enforce GNUPLOT version + FindPerlLibs: properly detect libperl on Windows (#12224) + CTest: mark all gcov covered files as covered + FindGLUT: honor REQUIRED (#12466) + FindRuby: clean up querying variables from Ruby + FindLibXslt: support version selection + Tests: document where to put tests + FindPkgConfig: support version selection of pkg-config itself + fix the same typos as found by Debian in other places, too + Find_library(): allow searching for versioned shared objects + FindFreetype: support version selection + AllFindModules test: expect more modules to have a version number available + FindOpenMP: do not fail if only C or CXX is enabled (#11910) + FindOpenMP: try the most likely flags first + FindOpenMP: simplify check for enabled languages + UseSWIG: clean up string compares + FindPython{Interp,Libs}: document Python_ADDITIONAL_VERSIONS as input + FindPythonLibs: make the version selection work as for PythonInterp + FindPythonLibs: get the exact version of the found library (#3080) + FindPythonLibs: put debug libraries into PYTHON_LIBRARIES + FindPythonLibs: stop scanning when libraries are found + Check{C,CXX}CompilerFlag: detect ICC error messages + GenerateExportHeader: remove unneeded code + GenerateExportHeader: improve compiler identification + FindOpenSceneGraph: give every message() with an explicit level + FindHSPELL: set HSPELL_VERSION_STRING + FindImageMagick: fix fail if no components were given + FindPythonInterp: rework the version detection + document when version detection will not work + AllFindModules test: once again expand version checking + improve error message on a stray "endwhile()" + add testcases for while()/endwhile() errors + reflect that the QtAutomoc depends on QtGui + FindQt3: fix warning when Qt3 is not found + FindQt3: fix version extraction for versions with letters + FindQt3: let FPHSA handle the version selection + FindQt3: fix detection of Qt3 include directory + AllFindModules test: do not require TCLSH version + add test for get_property() errors + +Stephen Kelly (13): + Fix typos arguement -> argument. + Exit the loop when we have determined the language. + Add whitespace after '.' in CMAKE_SKIP_RPATH docs. + Fix documented function signature to match reality. + Add default initializers for WIN32_EXECUTABLE and MACOSX_BUNDLE + Add an option to skip RPATH during installation. + Refactor GetIncludeFlags to take includes instead of fetching them + Make it safe to call this method without creating duplicates. + Remove include flags memoization. + Add API to get the ordered includes for a target. + Keep the INCLUDE_DIRECTORIES target property up to date. + Extract and use the INCLUDE_DIRECTORIES target properties. + Fix some typos in the docs comments. + +Yury G. Kudryashov (23): + FindDoxygen: add DOXYGEN_VERSION variable + cmInstallCommand: Fix indentation error + cmInstallCommand: Remove duplicated sentence from docs + FindPkgConfig: respect REQUIRED (#12620) + FindPackageHandleStandardArgs: fix documentation + Remove unused file cmake.1 + Fix typo in documentation + Drop if(...) check because condition is always true + CMakeFindPackageMode: fix 32/64bit detection if 'file' is a symlink + Run vim spellcheck on some files + cmPropertyDefinition::IsChained is const + Add 'const' qualifier to some cmCommand members + doxygen: cmPropertyDefinition + doxygen: Improve API docs of GetRealDependency + doxygen: Use proper syntax to document enum + doxygen: Small fixes in cmake.h apidocs + doxygen: fix some comments in cmPolicies.h + doxygen: remove a few comments + doxygen: review cmake.h + doxygen: MathCommand is not about string operators + Rename UsedCommands to FinalPassCommands + Remove UnionsAvailable member from 2 classes + Remove cmExprParserHelper::SetLineFile() + +Changes in CMake 2.8.7 (since 2.8.7-rc2) +-------------------------------------------- +None + +Changes in CMake 2.8.7-rc2 (since 2.8.7-rc1) +-------------------------------------------- +Alex Neundorf (5): + automoc: default to strict mode, use CMAKE_AUTOMOC_RELAXED_MODE + automoc: improved warning message in relaxed mode + Remove trailing whitespace + Add comment about one more problem of the C depency scanner. + fix #12262: dependency scanning for ASM files + +Bill Hoffman (1): + Fix the case where cmake --build failed with two project cmds in one file. + +Brad King (11): + KWSys: Correctly handle empty environment variables + FortranCInterface: Work around mingw32-make trouble with parens + Xcode: Create separate rerun dependencies for subprojects (#12616) + Fix Intel Fortran .vfproj files for VS 10 + HP: Drive shared library linking with compiler front end + Follow all dependencies of shared library private dependencies + Do not link private dependent shared libraries on OS X > 10.4 + Avoid clobbering variable 'OUTPUT' in compiler tests (#12628) + Fix and simplify Fortran test compiler compatibility check + CTest: Recognize Intel errors without space before colon (#12627) + Windows-GNU: Remove extra quotes in GNUtoMS rule variable + +David Cole (4): + Release: Increase timeout for slow-testing cygwin build + Modules: Use "windres" as rc compiler base name for cross-compiles (#12480) + Tests: Only really run MFC test if we can build MFC apps (#11213) + FindBoost: Quote possibly empty string argument (#12273) + +Eric NOULARD (1): + CPackRPM fix #0012608 and unoticed related bug + +Johan Fänge (1): + CMake: Fix progress reporting for custom targets (#12441) + +Mike McQuaid (2): + Unset configurations variable when no build type. + Improve component support and output indentation. + +Raphael Kubo da Costa (2): + Remove the apparently outdated README in Source/QtDialog. + QtDialog: Set Ctrl+Q as the shortcut for quitting the program. + +Tim Gallagher (2): + FindLAPACK: Correct CMAKE_FIND_LIBRARY_SUFFIXES spelling (#12624) + FindLAPACK: List thread libs to avoid link errors (#12625) + +Valat Sébastien (1): + CTest: Do not get CDash version without drop site (#12618) + +Changes in CMake 2.8.7-rc1 (since 2.8.6) +---------------------------------------- +Aaron Ten Clay (1): + VS: Add support for three new project properties (#12586) + +Alex Neundorf (60): + fix #12392: handle CMAKE_CXX_COMPILER_ARG1 for Eclipse projects + fix #12262: use the C dependency scanner also for ASM files + fix #12465: detect the masm compiler ID ("MSVC") + Silence make on OpenBSD in FindPackageModeTest(#12508) + Remove trailing whitespace + Find Ruby on OpenBSD when installed from ports (#12507) + Eclipse generator: detect Eclipse version + Detect whether the current Eclipse version supports VirtualFolders + Eclipse: don't create VirtualFolders if not supported + Eclipse: better message when Eclipse version could not be determined + automoc:run moc on the header if the source file contains include "foo.moc" + Add copyright notices + automoc: always run moc on the cpp file if there is a foo.moc included + Eclipse: add virtual folder for each target + Eclipse: move code for generating links to projects into separate function + Eclipse: move code for generating links to targets into separate function + Eclipse: add Build and Clean targets to targets + Eclipse: detect number of CPUs, set CMAKE_ECLIPSE_MAKE_ARGUMENTS accordigly + Eclipse: fix #12417, don't create wrong src pathentries + FindLibXslt: also search libexslt and xsltproc + don't crash in automoc with empty COMPILE_DEFINITIONS property + Automoc: fix the fix, need to use std::string, not just char* pointer + automoc: fix #12541, support moc options + add documentation for the AUTOMOC_MOC_OPTIONS property + Eclipse: warn if CMAKE_BINARY_DIR is subdir of CMAKE_SOURCE_DIR + Eclipse: make targets work from any directory + Eclipse: quote the build dir (to make it work with spaces) + make automoc work when using ccmake via PATH (#12551) + Strip trailing whitespace + -make GETTEXT_PROCESS_PO_FILES() work with files with multiple dots + FindGettext: two more fixes for files with multiple dots + FindPNG: provide PNG_INCLUDE_DIRS, as the readme.txt says (#11312) + Eclipse: create links to subprojects also in the source-project (#12579) + Eclipse: use new variable CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT + install(EXPORT): Enforce existence of imported target files + Remove trailing whitespace + cmake-gui: add completion for the names when adding cache entries + automoc: stricter checking for what file is included + automoc: rework the checking for the matching header, to give better warnings + automoc: handle the case when the developer includes the wrong mocfile + automoc: add more test cases + automoc: improved diagnostics + automoc: minor optimization + automoc: another runtime optimization + Automoc: modified handling of included .moc files + automoc: add a test for including both abc.moc and moc_abc.cpp + automoc: add test for including the moc file from another header + automoc: add test for including a moc_abc_p.cpp file + automoc: move some code from the big parsing loop into separate functions + automoc: add special handling for including basename_p.moc, with test + automoc: add extra check whether the header contains Q_PRIVATE_SLOT + automoc: some more linebreaks for the warnings for better readability + automoc: fix handling of included _p.moc files + automoc: move the code for finding headers into separate function + automoc: add a StrictParseCppFile(), which is only qmake-compatible + automoc: also accept other files when .moc is included in non-strict mode + automoc: accept even more .moc files in non-strict mode + automoc: add variable CMAKE_AUTOMOC_STRICT_MODE, to enable strict parsing + automoc: fix line length + automoc: add documentation for CMAKE_AUTOMOC_STRICT_MODE + +Alexey Ozeritsky (1): + FindLAPACK: Fix linking to static LAPACK on Unix (#12477) + +Bernhard Walle (1): + Source/cmCTest.cxx: Add missing newline (#12538) + +Brad King (65): + Refactor find_* command final path list computation + Constify XCode generator getters to match cmGlobalGenerator + Fix line-too-long style violations + KWSys: Fix Doxygen warnings + Add pre-commit|commit-msg|prepare-commit-msg hook placeholders + pre-commit: Reject changes to KWSys through Git + Fix CTest.UpdateSVN with Subversion 1.7 (#12535) + Teach CTest.UpdateSVN to detect svn add --depth before using it + KWSys: Address Intel compiler remarks + Fix linking to OS X Frameworks named with spaces (#12550) + Watcom: Use shortpath to CMake if full path has parens (#12548) + KWSys: Remove trailing whitespace in SystemTools.cxx + KWSys: Fix wrong spelling of __INTEL_COMPILER + Update main Copyright.txt year range for 2011 + KWIML: The Kitware Information Macro Library + Configure KWIML inside CMake as cmIML + KWIML: Avoid redefining _CRT_SECURE_NO_DEPRECATE in test.h + KWIML: Suppress printf/scanf format warnings in test + KWIML: No INT_SCN*8 on SunPro compiler + KWIML: No INT_SCN*8 on Intel for Windows + KWIML: Create test output dir for Xcode + Order VS local generator Version ivar values consistently + Enumerate VS11 version explicitly in local generators + KWIML: Test header inclusion after system headers + KWIML: Ignore _LONGLONG on MS compiler + KWIML: Teach ABI.h about PGI compiler + KWIML: Avoid MSVC linker warning about not using C++ runtime + Factor Compute(File|String)MD5 into cmCryptoHash helper + Add file(MD5) command to compute cryptographic hash + Import sha2 implementation 1.0 from Aaron D. Gifford + Import sha2 implementation 1.1 from Aaron D. Gifford + sha2: Use KWIML fixed-size integer types and endian-ness + sha2: Build as part of CMakeLib + Add file(SHA*) commands to compute cryptographic hashes + sha2: Use "static const" instead of "const static" declarations + cmCryptoHash: Provide factory "New" method + Add string(MD5) and string(SHA*) commands to compute hashes + sha2: Use KWIML fixed-size integer constant macros + sha2: Suppress Borland warnings in third-party code + Disable file() and string() hash commands during bootstrap + sha2: Wrap long lines in third-party declarations + Fix CMake.File hash test for CRLF checkouts + cmCryptoHash: Add virtual destructor + sha2: Cast safe conversions to smaller integer types + sha2: Suppress -Wcast-align warning from Clang + sha2: Zero entire SHA_CTX structure during cleanup + target_link_libraries: Add missing space in documentation + target_link_libraries: Simplify argument processing state tests + install(EXPORT): Improve target import failure message format + Remove trailing whitespace from cmLocalGenerator + bootstrap: Include cmNewLineStyle in build + cmNewLineStyle: Remove trailing comma in enum + cmNewLineStyle: Use cmStandardIncludes.h + Provide std::ios_base typedef on GCC < 3 + FindZLIB: Search under ZLIB_ROOT if it is set + Factor out target location undefined behavior helper macro + export(): Document undefined behavior of location properties + Recognize the Tiny C Compiler (#12605) + TinyCC: Add compiler info for shared libs on Linux (#12605) + Fortran: Detect pointer size in gfortran on MinGW + Load platform files that need to know the ABI when possible + Factor makefile generator link rule lookup into helper function + Add CMAKE_GNUtoMS option to convert GNU .dll.a to MS .lib + Test CMAKE_GNUtoMS option in ExportImport on MinGW and MSys + cmTarget: Create helper method for versioned library names + +Clinton Stimpson (2): + Fix XML safety issue with adding preprocessor defines in CodeBlocks project. + Qt4: Fix dependencies of QtDeclartive. + +Dan Kegel (1): + Modules: Add XRes to FindX11.cmake + +David Cole (17): + Begin post-2.8.6 development + CTest: Fix crash when variables are not defined + VS11: Fix comment generated at the top of *.sln files + CTest: Add COVERAGE_EXTRA_FLAGS cache variable (#12490) + CTest: Clear custom vectors before populating (#12383) + Tests: Add the MFC test (#11213) + Tests: Avoid MFC test automatically for VCExpress builds (#11213) + Tests: Fix MFC test w/ Make-based generators (#11213) + Tests: Fix MFC test for old vs6 dashboards (#11213) + Tests: Avoid MFC test automatically for Watcom WMake builds (#11213) + Tests: Fix MFC test to work with VS 10 and later (#11213) + VS10: Use expected values for UseOfMfc (#11213) + Tests: Add environment logging to the MFC test (#11213) + VS11: Update InstallRequiredSystemLibraries.cmake for VS11 (#11213) + Tests: Nudge MFC test to pass on VS 6 dashboards (#11213) + VS: Use "call " keyword with .cmd and .bat file custom commands (#12445) + CTest: Disallow problem chars in build and site names (#11792) + +Eric NOULARD (3): + CPackRPM support component specific variables for spec files + Fix old reference to CMAKE_MAKE_PROGRAM inside CMAKE_BUILD_TOOL doc. + CPackRPM fix #12556 and enhance documentation + +James Bigler (6): + Added support for CUDA_PATH which is present in the CUDA toolkit 3.2 onward. + Reset dependency file list when a dependency disappeared. + Add work around for CUDA in UNC paths. + Fixes for handling quotes in args and other places (Fix Bug 11726 and 12099). + Make CUDA working directory unique for each target. + Miscellaneous fixes. + +Jean-Christophe Fillion-Robin (1): + CTest: Look for CTestConfig.cmake in build dir first, then source dir + +Johan Bjork (1): + Xcode: Avoid spewing the environment on every script run (#12522) + +Mateusz Loskot (1): + FindBoost: Use MSVC11 to find Boost on Windows (#12568) + +Mathieu Malaterre (1): + TinyCC: Add default compilation flags (#12605) + +Mike McQuaid (6): + Add QT_LIBRARIES_PLUGINS variable to UseQt4. + Add DeployQt4 module. + Match fixup_qt4_executable with documentation. + Don't resolve directories; are never relative. + Check plugin variables are defined before warning. + Check QtCore without warning. + +Nicolas Despres (17): + Refactor TargetTypeNames. + Add const versions of some getters. + Constify many getters of cmGlobalGenerator. + Remove trailing white-spaces. + Fix typo. + Doxygen: Improve code documentation. + Doxygen: Generate call graph and relationships. + Doxygen: Fix warnings. + Doxygen: Remove dependency on VTK when building doxygen. + Usage: Document -j|--parallel option in help message. + Usage: Document all options printing usage information. + Usage: Document all options printing the version number. + Usage: Print help, version and copyright options in usage information. + Usage: Add missing exepath argument in get_prerequisites documentation. + ccmake: Align 'g' and 'q' key instructions. + ccmake: Document '/' key. + ccmake: Factor toggle key help instructions. + +Niels Dekker (1): + Fix CMAKE_VERBOSE_MAKEFILE for VS10 vcxproj files (#12504) + +Ondrej Balaz (1): + FindBISON: Fix bison++ version parsing to avoid "Offending entry" + +Peter Collingbourne (4): + Make cmLocalGenerator::ConvertToLinkReference virtual + Introduce a cmLocalGenerator::ConvertToIncludeReference function + Introduce a cmGlobalGenerator::ResolveLanguageCompiler function + Fix configuration-dependent flag lookup in cmLocalGenerator::GetTargetFlags + +Peter Kuemmel (1): + Add NEWLINE_STYLE option to configure_file (#3957) + +Philip Lowman (1): + FindProtoBuf: Documented limitation of the public macro + +Pierre-Francois Laquerre (1): + Fix path quoting in Qt4 macros + +Robert Dailey (1): + VS: Add VS_SCC_AUXPATH target property (#12549) + +Rolf Eike Beer (4): + libarchive: fix typo in CheckFileOffsetBits.cmake + Tell people that link_directories() is not what they are searching for + FindBISON: Fix matching output of "bison --version" + Tests: ExternalProject: Remove unnecessary 'svn --version' call + +Stephen Kelly (13): + Add features from KDE for arguments to qdbusxml2cpp. + Remove unused define. + Build each library only once instead of once for each test. + Initialize LINK_INTERFACE_LIBRARIES target property with a variable + Also run moc automatically with Qt5. + Fix typo. + Don't assume the existence of QT_MAJOR_VERSION. + Update comments and method names to not be Qt4 specific. + Fix style. + target_link_libraries: Trim trailing whitespace + target_link_libraries: Add LINK_(PUBLIC|PRIVATE) options + moc is now part of the Qt5Core module + Add a test case for the use of Q_PRIVATE_SLOT. + +Changes in CMake 2.8.6 (since 2.8.6-rc4) +---------------------------------------- +Alex Neundorf (5): + Remove trailing whitespace + Minor improvements to the UsePkgConfig.cmake docs + Remove trailing whitespace + Improve behaviour of --find-package mode with try_run/try_compile + Use makefile->IssueMessage() for better error messages + +Bill Hoffman (2): + Use version 11.0 for 12.x and 9.10 for 10.x intel versions to fix 12.1 vsIDE. + Also, check for 11.x as an intel fortran version. + +Brad King (2): + Add Visual Studio 11 generator for x86 and x64 tools + Teach our tests about special cases for VS 11 + +David Cole (1): + CTestCustom.cmake: Ignore clang's summary warning + +Philip Lowman (1): + FindBullet: Also search for _Debug postfixed library names + +Raphael Kubo da Costa (1): + Fix typo in set_target_properties' documentation. + +Rolf Eike Beer (1): + Fix typo in UsePkgConfig.cmake + +Changes in CMake 2.8.6-rc4 (since 2.8.6-rc3) +-------------------------------------------- +Alex Neundorf (3): + FindFLEX.cmake: also search the include dir + Fix typos in FeatureSummary.cmake (#12462) + Don't warn when setting a property multiple times to the same value #12464 + +Bill Hoffman (2): + For VS Intel Fortran IDE builds, add a check to find the Fortran library PATH. + Enable Fortran tests for IDE builds. + +Brad King (5): + FortranCInterface: Compile separate Fortran lib in VerifyC[XX] + Move IntelVSImplicitPath project to better location + Simplify IntelVSImplicitPath detection project + libarchive: Fix ssize_t detection with mingwrt 3.20 + Make file(DOWNLOAD) fail on http error + +David Cole (8): + Tests: Add a KWStyle test, equivalent to the make StyleCheck target + KWStyle Test: Activate by default if KWStyle is found + Xcode: Use EFFECTIVE_PLATFORM_NAME reference in ComputeOutputDir + Xcode: Add test to demonstrate iOS project in Xcode + CMake: Reference test targets only when BUILD_TESTING is ON + Tests: Add the more modern Mac64 nightly build + Release Scripts: Use Qt 4.7.4 on dashmacmini5 (#12460) + Revert "FindThreads: Try pthreads with no special option first (#11333)" + +Eric NOULARD (4): + CPack fix #12449 doc mispelled + CPack fix template too + CPackDeb fix #10325 automagically use fakeroot for DEB if fakeroot is found + CPackRPM authorize per-component pre/post-[un]install scripts (#0012063) + +Marcus D. Hanwell (4): + Just code style changes. + Don't warn when nothing to do in visibility function. + Made ADD_COMPILER_EXPORT_FLAGS into a macro. + Make add_compiler_export_flags a function again. + +Rolf Eike Beer (1): + remove stray brace in CPackDeb documentation + +Changes in CMake 2.8.6-rc3 (since 2.8.6-rc2) +-------------------------------------------- +Alexey Ozeritsky (2): + FindBLAS/LAPACK fixes + FindBLAS/LAPACK fixes + +Andreas Schneider (1): + Modules: Add support for more java archives in add_jar(). + +Björn Ricks (4): + Search for the installed python interpreter first + Determine python version + Update documentation of FindPythonInterp.cmake + Use FIND_PACKAGE_HANDLE_STANDARD_ARGS second mode + +Brad King (5): + VS: Map per-source Fortran flags to IDE options + VS: Map Fortran free- and fixed-format flags to IDE options + Fortran: Add support for free- and fixed-form flags + Xcode: Honor Fortran_FORMAT target and source file property + Set CMAKE__COMPILER_ID for VS generators + +David Cole (8): + KWSys: Remove always-true dir_only parameter + KWSys: Add symlinks to directories as files (#12284) + FindPackageMessage: Eliminate new lines in cache entries + FindPackageMessage: Eliminate new lines using REGEX REPLACE + CMake: Add SaveCache at the end of successful Generate calls + Suppress Qt warning for dashmacmini5 builds + Suppress Qt warning for dashmacmini5 builds + Tests: Look for "Illegal" or "SegFault" in the output + +Eric NOULARD (2): + CPack fix #12366 components RPM packages have the same package name + CPackRPM fix #12305, include directories in RPM package + +Johan Björk (5): + Xcode: No spaces in makefile target names (#12370) + CMake: Write symlinks to directories as files in archives (#12284) + CPack: Do not recurse through directory symlinks (#12284) + Xcode: Do not emit the ZERO_CHECK target more than once + Xcode: Honor -g0 to disable debugging (#12377) + +Johannes Stallkamp (1): + CTest: Fixed valgrind output parsing (#12260) + +Matt McCormick (1): + CMake: Remove documentation for -E build (#12446) + +Stephen Kelly (2): + Add some more unit tests. + Don't put what some compilers consider junk at the end of the line. + +Thomas Jarosch (3): + CTest: Fix memory leaks on error + Fix file() command descriptor leak on error + ccmake: Fix off-by-one memory access error + +Changes in CMake 2.8.6-rc2 (since 2.8.6-rc1) +-------------------------------------------- +Brad King (2): + KWSys: Add hash function for std::string + KWSys: Fix std::string hash function for Borland + +Clinton Stimpson (1): + qt4: also find QtUiTools when cross compiling with mingw. + +David Cole (3): + Xcode4: Requires more quoting of single quote char + cmake.m4: Use modern signature of install(FILES ...) + CMake Release Scripts: Changes for next release candidate... + +David Faure (1): + Don't use a variable name that might be used in other files. + +Stephen Kelly (73): + Create moc files in the current binary dir, not the top level. + Make the formatting of feature_summary output a little better. + Add the GenerateExportMacro with unit tests. + Handle the case where the user changes the DEFINE_SYMBOL property. + Add a newline at the end of the file. + Add a newline at the end of the file. + Add missing licence header. + Remove the fatal_warnings option which is no longer used. + Test for features, not specific compilers. + Simplify. We already know we have hidden visibility at this point. + Simplify the compiler feature check + Add some debug output. + Short-circuit the tests on unsupported compilers. + Test expected no-op instead of aborting the build. + Fix tests with clang. + Fix typo and tests failing as a result. + Only run the failure tests with gcc >= 4.2 + Set the CMAKE_RUNTIME_OUTPUT_DIRECTORY for windows builds. + Only set the COMPILER_HAS_HIDDEN_VISIBILITY if GCC >= 4.2 + Disable all export macros on Borland. + Another attempt to fix the tests on Borland. + Use the correct project name compiletest not compilefail + Fix off-by-not in test for Borland. + Another attempt at fixing Borland. + Add some debug output to narrow down deprecation test issues + Export deprecated free methods too. + Remember to surround the other deprecated test in the Borland check. + Only set the deprecated attribute if hidden visibilty is enabled. + Make sure the hidden visibility variables never get set on MINGW. + Don't use hidden visibility on non-mingw windows either. + Don't export methods on already exported classes. + Split the deprecated available check from setting macro values. + Test for compiler features, instead of for specific platforms. + Exclude the XL compiler from the hidden-visibility test. + Add the COMPILER_HAS_DEPRECATED only if it has a declspec variant + Don't change the expected build result based on the platform. + Expect the tests to pass if hidden visibilty is not enabled. + Test -Werror instead of enabling it per compiler. + Add some messaging output to make remaining issues findable. + Perform the -Werror test only once. + Test for deprecated attribute before declspec. + Try to error on deprecated on Intel and SunCC. + Borland can't do deprecated. + Fixup forgotten part of aed84517c942a4c40f493fcf997cdf6a047349f8 + Disable testing of deprecated macros. + Don't enable deprecated on HP. + Don't enable deprecated on old GCC + Exclude cygwin from the hidden visibility feature. + Exclude PGI from exports and deprecated. + Start testing expected values for compiler flags. + Exclude win32 from hidden visibility checks. + Comment the test assertion for now + Test the correct cxx variable. + Fix the version extraction regex for clang. + Hopefully add version extraction for Intel. + Add some settings for non-truncation of test output. + Fix up the regex command for Intel. + Test for too-old-intel compilers. + Possibly fix test on HPUX. + Possibly fix configuration test on AIX. + Try to make the macros do almost nothing for Watcom. + More consistency in the macro options. + Add missing NO_EXPORT macro variant. + Look for errors reported by PGI too. + Quote paths in case there is a space in one of them. + Disable the tests for Watcom. + Fix Compiler id variable name. + Add quotes in case cmake is installed in a prefix with a space. + Fix the feature of using a specific prefix for macros. + Add documentation about the prefix and no_deprecated options. + Remove blank line at the start of the file. + Don't start a line with a dash(-) + Fix up verbatim code sections of the dox. + +Todd Gamblin (3): + FindBoost: Call find_package with NO_MODULE first + Fix XL compilers on non-AIX machines. + Fixed link bugs in BlueGeneP build. + +Changes in CMake 2.8.6-rc1 (since 2.8.5) +-------------------------------------------- +Aaron C. Meadows (1): + FindSubversion: Invoke svn non-interactively (#12304) + +Alex Neundorf (92): + Add a switch to disable a find_package() call completely + Add documentation for the CMAKE_DISABLE_FIND_PACKAGE_ switch + Add a basic test for CMAKE_DISABLE_FIND_PACKAGE_ + Add macros cmake_push/pop_check_state() as discussed on the list. + Fix copyright notice test + Add CheckCXXSymbolExists.cmake, so this can be used also for C++ + Minor fix to try_compile() docs (#12333) + Fix #12342: Add APPEND_STRING option to set_property() + Extend FeatureSummary: add PURPOSE of package and TYPE + FeatureSummary.cmake: remove "comment" field + FeatureSummary.cmake: add INCLUDE_QUIET_PACKAGES keyword + FeatureSummary.cmake: error out when a REQUIRED package is missing + FeatureSummary.cmake: only higher TYPEs can override previous TYPEs + FeatureSummary.cmake: cosmetics + FeatureSummary.cmake: update documentation + Remove debug output from CheckSymbolExists + Don't put files from CMAKE_ROOT into CodeBlocks projects (#12110) + More PATH_SUFFIXES for finding Postgresql and also search catalog/pg_type.h + Use FPHSA(), remove unnecessary stuff and don't recommend link_directories() + Mark the results from find() as advanced + FindPostgreSQL: fix PATH_SUFFIXES, better output for FPHSA + Strip trailing whitespace + FindGIF/FindFreetype.cmake: remove standard search paths from find-calls + FindGif: add giflib4 as one more name for the library under Windows + Add basic version check for giflib + Patch by Campbell Barton: puts definitions into C::B project file + Remove useless line of code + Also put builtin include dirs into CodeBlocks project file + Remove trailing whitespace + Also search for libxkbfile, XSync and SM include dir + Provide macro write_basic_config_version_file() + Add example to documentation + Add some tests for write_basic_config_version_file() + Fix copyright notice + Really fix copyright notice + Set UNSUITABLE instead of not COMPATIBLE + Improve documentation for WriteBasicConfigVersionFile.cmake + Add macros GETTEXT_PROCESS_POT() and GETTEXT_PROCESS_PO_FILES() + Support REQUIRED in FindGettext.cmake (using FPHSA.cmake) + Fix #12358: make optionally enabling ASM work again + Start work on automoc: add empty cmQtAutomoc class + Start implementing skeleton for automoc in cmake + Add actual automoc code from automoc + Remove the need to check for .h/.cxx during buildtime + Add the cmake module required currently for automoc + Add AUTOMOC to the add_library() command + Fix line lengths + Move code for parsing a cpp-file from the big loop to separate function + Initialize verbose based onb the env.var. + Color output when running moc + Add the generated automoc.cpp file to the cleaned files + Use cout instead of printf() + Remove trailing whitespace + Refactor SetupAutomocTarget() so it can be run after creating the target + Remove trailing whitespace + Move automoc processing from add_executable/library to cmGlobalGenerator + Nicer progress message for the automoc target + Add a test for automoc + Add documentation for AUTOMOC, add initialization via CMAKE_AUTOMOC + Fix logic which decides when to execute automoc test + Automoc.cmake is not needed anymore + Fix build: non-void function must return a value + Fix warnings + Fix bootstrap test with automoc + Only enable the automoc test after checking that Qt4 works + Fix build: use std::ios::out|ios::trunc instead of std::ios_base::out + Silence warning in automoc: use long instead of int + Fix automoc with VS builds: apply patch from Bill + Make clLocalGenerator::GetTargetFlags() public + Add find-package mode, which does nothing yet + Implement find-package mode of cmake + Replace cmake::GetScriptMode() with GetWorkingMode() + Fix copyright notice in new CMakeFindPackageMode.cmake + Better support for lib64 and Debian multiarch + Use the file-utility to test for 64bit if there is no /usr/lib64 + Add a cmake.m4 for using cmake in autoconf projects instead of pkgconfig + Improve documentation for --find-package mode + Add a test for the new --find-package mode + Only run the test if we are using a makefile generator under UNIX + The makefile for the test was kindof wrong + Fix test on OpenBSD with BSD make + Rename helper macros print_compile_flags() to set_compile_flags_var() + Dont check for -isysroot and -mmacosx-version on OSX in --find-package mode + Disable any STATUS output in --find-package mode + Much improved test, should now be executed on all UNIXes + Make the --find-package test harder + Make the test harder by always having a space in the include dirs + Only enable the test when using GNU make + Fix line length + Use $(CXXFLAGS) and $(LDFLAGS) in the --find-package test Makefile + Require the current cmake version in --find-package mode + Fix --find-package mode on Cygwin, where enable_language(RC) is called + +Alexey Ozeritsky (5): + fixed: search of acml libraries + gotoblas supported + ACML-GPU supported + ACML-GPU supportede + fixed: search of ATLAS library for C/C++-only projects + +Andreas Schneider (6): + FindJava: Find missing java development executables. + Modules: Added CMake Java support. + Tests: Java tests should test UseJava.cmake + Tests: Check for the new Java exeutable variables. + Java: Use set_property/get_property for target variables. + Java: Fix documentation format and indentation + +Arnaud Gelas (1): + Search for the ASPELL executable + +Bill Hoffman (5): + Only pay for unused variable checking if it is on. + Initial support for Intel Fortran VS2010. + Fix custom commands in VS2010 Fortran projects using CFG_INTDIR and test. + Use MSBuild when devenv is not around, since VCExpress seems broken. + Fix for bug #12413, nmake did not handle targets with + in the name. + +Brad King (13): + MinGW: Remove old workaround and use native echo (#12283) + Document caveat of custom commands in multiple targets (#12311) + cmSystemTools: Remove trailing whitespace + RunSingleCommand: Fix indentation + RunSingleCommand: Avoid assignment in condition + Documentation: WIN32 not defined on Cygwin (#12334) + KWSys: Simplify SystemTools::GetTime implementation (#12261) + KWSys: Avoid conversion warning in SystemTools::GetTime + KWSys: Fix using long long and __int64 with hash_(set|map) + KWSys: __int64 and long long may be same type in specialization + XL: Fix old VisualAge branding of Fortran compiler + Do not crash when an imported target depends on a missing target + Fix CHECK_(C|CXX)_COMPILER_FLAG for Clang (#12394) + +Clinton Stimpson (5): + Add -DQT_NO_DEBUG if no build type is specified so Qt plugins will work. + Add qt4/QtCore to help find Qt headers when cross-compiling. + Qt4: Fix reference of undefined variable when detecting frameworks on Mac OS X + Remove C compiler requirement from FindQt4.cmake + CPack/NSIS: Fix reinstall and multiple install issues when using components. + +David Cole (26): + Begin post-2.8.5 development + Fix Architecture test to work with Xcode 4 + Fix BuildDepends test to work with Xcode 4 + Base architecture choice logic on Xcode version + Use correct default multiple architecture values in test + Add use of EFFECTIVE_PLATFORM_NAME to generated Xcode projects. + Correct KWStyle line too long error + Add fail regex to detect supported warning flags correctly. + Add support for Visual Studio project-specific globals (#8707) + Fix machine-specific UpdateGIT test failures + Ensure libgmp-10.dll is in the PATH for CMakeTestAllGenerators + Watcom: Add -c flag to wlib calls (#12245) + Add Watcom support to InstallRequiredSystemLibraries (#11866) + Watcom: Use correct args for execute_process call (#11866) + CTest: print failed tests in index order (#11746) + Fix line too long style violation + Documentation: Fix comments in the source code (#10941) + Add more find_path locations for DCMTK header files (#12323) + VS9: Add include_directories to midl command lines + KWSys: Remove translation path for "/tmp_mnt/" (#10595) + VS10: Avoid unnecessary rebuilds for custom commands + QtAutomoc test: Pass QT_QMAKE_EXECUTABLE + QtAutomoc: Eliminate compiler warning + CheckSymbolExists: Use IMMEDIATE flag for configure_file (#11333) + Xcode: Suppress same-old warning again. + Xcode: Save object id values in CMakeCache.txt (#11690) + +Johan Björk (5): + Xcode: Remove PREBINDING attribute for Xcode 4 and above + RunSingleCommand: Replace verbose boolean with enum + RunSingleCommand: Add a OUTPUT_NORMAL flag. + Xcode: Quote ',' in Xcode string values (#12259) + Xcode: Rearrange CMakeReRun to enable parallel builds + +Matej Hribernik (2): + VS: Factor Find64BitTools out of Win64 generator to parent + Add VisualStudio 9 and 10 generators for Itanium platform + +Modestas Vainius (1): + multiarch: Treat lib/ as implicit link dir (#12326) + +Oliver Buchtala (3): + Java: Create java_class_filelist only if it does't exist. + Java: Added some dependency magic to avoid recompilations. + Java: Create correct jar archive dependencies. + +Rolf Eike Beer (2): + remove extra output message from FindJava.cmake + FindThreads: Try pthreads with no special option first (#11333) + +Steven Velez (1): + VS10: Add SCC support + +Todd Gamblin (2): + Try regular compiler when no MPI compiler. + Fix issues with removing try_compile input file. + +Will Dicharry (1): + Added HDF5 high level Fortran bindings to available components. + +Changes in CMake 2.8.5 (since 2.8.5-rc3) +-------------------------------------------- +Brad King (1): + Revert "Add a new function SWIG_GET_WRAPPER_DEPENDENCIES to UseSWIG.cmake" + (this revert means that issue #4147 has been re-opened) + +Changes in CMake 2.8.5-rc3 (since 2.8.5-rc2) +-------------------------------------------- +Bill Hoffman (4): + Use devenv instead of msbuild for vs2010. + Revert "With very long file names, VS 2010 was unable to compile files." + Use relative paths for custom command inputs. + Look for VCExpress as a possible build tool as well as devenv. + +Brad King (3): + KWSys: Recognize color TERM=screen-256color-bce (#12287) + find_library: Use lib->lib64 conversion in CXX-only projects (#12247,#12248) + libarchive: Install COPYING with CMake documentation + +Christoph Höger (1): + FindJNI: Search in Fedora arch-specific JVM location (#12276) + +Julien Malik (1): + FindSWIG: Use NAMES in find_program directives (#12280) + +Modestas Vainius (1): + Documentation: Fix spelling / formatting errors (#12287) + +Philip Lowman (3): + FindBoost: Fixes #12188 + FindBoost: Also search for 1.46.1 + Detect VS 2010 SP1, faster and more robust detection + +Changes in CMake 2.8.5-rc2 (since 2.8.5-rc1) +-------------------------------------------- +Bill Hoffman (6): + Fix a memory leak. + Fix for bug#10798. VS10 did not append -I flags with COMPILE_FLAGS prop. + Append and do not clobber CMAKE_CXX_FLAGS in the test. + Use bin tree for inclues to avoid -I with spaces in the path. + One more try. Use full path by default, and relative on broken compilers. + Fix for bug #11927, external project git clone step always runs vs10. + +Brad King (9): + XL: Place Fortran modules with -qmoddir= flag (#12246) + Teach file(DOWNLOAD|UPLOAD) to timeout after inactivity + Xcode: Fix parallel build depends with universal binaries (#11844) + Fix style errors added by parent and grandparent + Use cascading-if for per-config test and install code + CTest: Report tests not run due to unknown configuration + GNU: Fix CMAKE_INCLUDE_SYSTEM_FLAG_ value (#12258) + Teach find_(library|package) about Linux multiarch (#12037) + Test find_package multiarch support (#12037) + +Clinton Stimpson (11): + BundleUtilities: Work w/ non .app exes on Mac (#12034) + BundleUtilities: Fix regex to extract dependents from ldd (#12034) + BundleUtilities: Fix test when using xcode (#12034) + BundleUtilities: Fix issues with custom target DEPENDS in test (#12034) + BundleUtilities: Disable running test on Windows unless using MSVC. + BundleUtilities: Run test on Windows if either MSVC or dumpbin was found. + BundleUtilities: Print reason for not loading module.so + BundleUtilities: Add rpath to loadable modules in test. + Revert "BundleUtilities: Run test on Windows if either MSVC or dumpbin was found." + Qt4: complete module dependencies in UseQt4.cmake + Add imported targets support for frameworks on Mac. + +Daniel R. Gomez (1): + Fix plugin API for gcc 2.9-aix51-020209 (#12233) + +David Cole (3): + BundleUtilities: Avoid a cryptic and unhelpful error message + BundleUtilities: Avoid test on Watcom dashboards (#12034) + CMake: eliminate use of cvs in the Release scripts + +Eric NOULARD (2): + CPackRPM: Enhance documentation + Add some more Specs file tag handling. + +Johan Björk (3): + CMake: Move tokenize to cmSystemTools + Xcode: Support multiple level nesting of XCode folders (#10039) + XCode: Support target folders on XCode. + +Modestas Vainius (1): + multiarch: Set CMAKE_LIBRARY_ARCHITECTURE_REGEX for Linux|Hurd|kFreeBSD + +Philip Lowman (3): + FindProtobuf: Better MSVC support, Searching for protobuf lite + Fix , to - in Copyright message so it passes CMake.ModuleNotices test + 10997: PROTOBUF_GENERATE_CPP now supports proto files outside current dir + +Rolf Eike Beer (1): + CMake: Update documentation of STRING(SUBSTRING) for length -1 (#10740) + +Sean McBride (1): + Fix XCode -> Xcode typos, notably in man page (#12231) + +Tim Gallagher (1): + Modified the FindHDF5.cmake file to locate the Fortran bindings. + +Will Dicharry (7): + HDF5 high level library is a find COMPONENT now. + Add logic for CMake built HDF5 install. + Use CMAKE_CURRENT_LIST_DIR to locate FindPackageHandleStandardArgs. + Use HDF5_FOUND to control autoconf and CMake built FindHDF5. + Fix for bug 11752, mixed debug and release libraries. + FindHDF5 ensures good link lines when libraries are duplicated. + Remove unnecessary mark_as_advanced from FindHDF5. + +Zach Mullen (3): + Dynamic analysis test output should not be compressed. + We will actually compress memcheck output if the server supports it. + Fix type conversion warning + +Changes in CMake 2.8.5-rc1 (since 2.8.4) +---------------------------------------- +Alex Neundorf (33): + Rework the way assembler is handled, use the C/CXX compiler by default + Make it possible to exlude external libs from dot files + GRAPHVIZ_IGNORE_TARGETS is now a list of regular expressions + Also generate dependers-graphviz files. + Fix XML escaping for the project() name in Eclipse projects (#11658) + Fix XML escaping for target names in Eclipse project files (#11658) + Add XML escaping for directory name in Eclipse projects (#11658) + Eclipse projects: created one linked resource for each subproject + Also add the SOURCES from add_custom_target() to CodeBlocks projects (#11736) + Add ASM support for the Intel compiler + Actually use CMAKE_ASM_COMPILER for asm, instead of CMAKE_C_COMPILER + Add support for ASM for the SunPro compiler + Add suport for ASM for the IBM XL compiler + Add support for ASm for the HP compiler. + Set the HP asm file suffix + Change the default rules so they fit better to the new ASM handling + Fix the default CMAKE_ASM_COMPILE_OBJECT, make XL-ASM use it + Add assemble- and preprocess commands for HP + The Assembler test now tests ASM for GNU, Intel, HP, XL and SunPro + Use a regexp instead a lot of ORs for checking the compiler ID + Only try assembler support for Makefile-based generators + Fix bad comparison in the detect assembler-code + It's ELSEIF(), not ELSIF() + Add temporary debug output for compiler ID detection for ASM + Add more regex for gcc, always print the ASM compiler ID + Add support for the Intel compiler used for ASM under Windows + -use CMAKE_C_FLAGS when generating the assembler file + -only enable the asm test for the Intel compiler if we are under UNIX + Remove trailing whitespace + Make use_mangled_mesa() available in cmake script mode (#11926) + Fix parsing include dirs and builtin macros for CXX-only projects + Don't skip the last builtin include dir for the Eclipse project file + -fix VirtualFolders in Eclipse under Windows + +Alexey Ozeritsky (1): + ACML search improvement + +Andreas Schneider (6): + Modules: Added CheckPrototypeDefinition module. + Tests: Added test for check_prototype_definition. + FindOpenSSL: Added support for pkg-config. + FindOpenSSL: We should only use hints to find OpenSSL. + FindOpenSSL: Fixed crypto und ssl variable names. + FindOpenSSL: Use find_package_handle_standard_args for version check. + +Bill Hoffman (2): + With very long file names, VS 2010 was unable to compile files. + Fix for bug where VS2010 did not use .obj files as part of the build. + +Brad King (94): + Reject directory names containing '=' (#11689) + FindQt4: Include builtin FindPackageHandleStandardArgs directly + Handle trailing slashes on add_custom_command DEPENDS + Handle relative WORKING_DIRECTORY in add_custom_(command|target) + Pass -o after -c for Fortran to avoid mpif77 ordering bug + Add link flag table entries for VS 7,8,9 + VS: Create a Fortran DLL's import library directory + Fix linker flag initialization from LDFLAGS (#11840) + ccmake: Remove extra parens around comparison + Avoid direct use of std::stringstream + Honor module .def files with MinGW tools (#9997) + CTest: Update Git submodules with --recursive + libarchive: Remove unused build/windows directory (#11885) + Pass .def files directly to MinGW tools (#9997) + Fix Fortran test .def file symbol mangling + Require at least CMake 2.6.3 to build current CMake + GNUInstallDirs: Simplify and clarify documentation + KWSys: Require at least CMake 2.6.3 + Remove unused CMAKE_BACKWARDS_COMPATIBILITY mark + Factor AIX and XL compiler flags into common module + Move RPATH flags to AIX per-compiler information files + Initialize ASM rpath flags for executables with those for shared libs + Add ASM platform information for XL compiler on AIX + Factor HP compiler flags into per-platform/per-compiler files + Add ASM platform information for HP compiler on HP + Add target property LINK_SEARCH_START_STATIC to aid static linking + Test static linking with LINK_SEARCH_START_STATIC + Fix Assembler test to parse C flags string before using + Teach Assembler test to generate main.s at build time + Do not bother enabling C++ in Assembler test + The link interface of MODULE libraries is empty (#11945) + CTest: Do not fail with submodules and Git < 1.6.5.0 + Remove trailing whitespace + Add parens in cmTarget::ComputeLinkInterface logic + Validate custom command arguments (#11963) + Factor old-style -D flags out from -I flag generation + FindMPI: Fix documentation formatting + Generate target-wide flags before individual build rules + Optionally pass include directories with response files + Pass include directories with response files to GNU on Windows + Enable Java test more carefully on Apple + Disable Java test with Xcode generator + Allow '.' in target names in generator expressions (#12002) + GNUInstallDirs: Propagate DATAROOTDIR changes to dependent defaults + KWSys: Do not trust EXECUTABLE_OUTPUT_PATH for ProcessFwd9x encoding + Refine unused cache variable warning + Fix unused cache warning after multiple configure iterations + FortranCInterface: Fix mangling detection with Cray Fortran >= 7.3.2 + Fix typo in include_directories documentation (#12020) + KWSys: Recognize rxvt-unicode-256color terminal (#12013) + Normalize slashes of add_custom_(command|target) DEPENDS (#11973) + COMP: Fix build against non-standard outside libarchive + Modules: Add comment and copyright notice validation to readme.txt + cmArchiveWrite: Clear xattr and acl from entries (#11958) + find_package: Forward component list for recursive calls in modules + XL: Set C++ and Fortran flags consistently with C + XL: Consolidate compiler flag information + XL: Avoid copying archives into shared libraries that link them + VS10: Fix working directory of consecutive custom commands (#11938) + Fix working drive of make rules on Windows + Change working drive only in MinGW Makefiles + VS: Use setlocal/endlocal only in VS 10 custom commands + VS10: Fix exit code of custom commands with setlocal/endlocal (#11938) + KWSys: Remove unused CheckCXXSourceRuns cmake module + find_package: Rename implementation of user package registry + find_package: Cleanup user package registry less aggressively + find_package: Document user package registry locations + find_package: Search a "system package registry" + find_package: Check both 32-bit and 64-bit registry views + find_package: Test system package registry when possible + find_package: Fix system package registry test path conversion + FindITK: Use passthru find_package config mode for messages + OpenBSD: Use 'arch -s' for host processor (#12143) + Fix case typo in CMAKE_BUILD_TYPE docs (#12148) + KWSys: Fix leaked FILE in EncodeExecutable error case + ENH: Fix Intel 12 plugin project generation for VS < 10 + Revert "Honor RULE_MESSAGES property for build target messages" (#12190) + Fix signed/unsigned comparison in EscapeJSON + Fix run_compile_commands build on Apple GCC 3.3 + Make std::map usage more portable in language=>flags/defines maps + Provide std::map<>::at for use in run_compile_commands + run_compile_commands: Avoid shadow in std::map<>::at workaround + Improve string(RANDOM) default seed + run_compile_commands: Avoid extra stl vector conversion + VS 6: Define _WIN32_WINNT to load wincrypt.h correctly + run_compile_commands: Cast istream::get() result to char + Fix CompileCommandOutput test for Make tools not supporting spaces + Explicitly cast time value in cmSystemTools::RandomSeed + Fix CompileCommandOutput test build on Windows + Add Absoft Fortran compiler id and basic flags + Absoft: Detect implicit link libraries on Linux and Mac + Absoft: Enable FortranCInterface check in Fortran test + Document status of output_required_files command (#12214) + Fix forced-seed argument type in string(RANDOM) + +Clement Creusot (2): + Add new module Armadillo + Corrected copyright format in FindArmadillo.cmake + +Clinton Stimpson (8): + Change to use fphsa to check required variables and version. + Fix grouping bug where "Ungrouped Entries" showed up as a child. + When checking find_package() components, special case qtmain. + Fix issues with find_path() for QtCore include dir on Mac. Fixes 11868. + Fix regression in 43cb9b8. + Speed up creation of parameters file for moc custom command. + Combine component packaging methods into an enum. + Add component support to DragNDrop generator. + +David Cole (34): + ExternalProject Test: Increase test timeout value + CFBundle Test: Add PATHS for finding Rez (#11295) + CTest: Mark DART_TESTING_TIMEOUT as advanced (#10150) + Xcode: Allow override of CMAKE_CONFIGURATION_TYPES (#8914) + Tests: Eliminate unnecessary files and variables. + VS9: Map enable/disable PREfast flags (#10638) + Strip trailing space from xcode-select output (#10723) + CTest: Add alias for make test target (#4564) + Add CMAKE_SCRIPT_MODE_FILE variable (#2828) + Add CMAKE_ARGC and CMAKE_ARGV0..N-1 variables (#2828) + Fix KWStyle line-too-long complaint (#2828) + Documentation: Sync two differing copies of -E docs (#10446) + Clarify list subcommand documentation (#8154) + VS2010: Fixed GenerateManifest flag (#10704) + VS: Only use /MANIFEST if hasManifest is true (#11216) + Make file DOWNLOAD less noisy (#11761) + Begin post-2.8.4 development + Use stable_sort to preserve test order (#11877) + Implement file(UPLOAD (#11286) + Fix KWStyle line too long error (#11286) + ExternalProject: Extract file names from more urls + InstallRequiredSystemLibraries: Read reg values with get_filename_component + Add correct module notice header. + If getconf returns empty output, try cpuinfo. (#11302) + Add ProcessorCount support for QNX via pidin. (#11302) + Compare ProcessorCount to SystemInformation count. (#11302) + ProcessorCount test: more output, do not fail. (#11302) + ProcessorCount: Add support for remaining platforms (#11302) + ProcessorCount: Test fails if count is 0 (#11302) + ProcessorCount: Use ERROR_QUIET with execute_process (#11302) + ExternalProject: Add SVN_TRUST_CERT argument + CMake: Clarify the --debug-trycompile help text + ExternalProject: Always use --non-interactive with svn + VS10: Write header-only files in correct xml element (#11925) + +Eric NOULARD (25): + CPackRPM honors all the different ways of packaging components + CPackRPM fix IRIX compiler warning (variable never used) + CPack remove "-ALL" suffix for ALL-IN-ONE packages + CPack Authorize DISPLAY_NAME usage in component package + CPack fix KWStyle warning + CPack remove previously CPack generated files (if any) before running CPack + CPackRPM Replace space in some CPACK_ vars (Fix bug 9932) + CPackRPM activate CPackRPM test on Linux systems where rpmbuild is found + CPackArchive package all components specified in CPACK_COMPONENTS_ALL + CPack more robust way to collect files belonging to a component + CPackRPM do not run test if build dir contains space + CPack fix compile error on VS70 and avoid KWStyle warnings + CPackRPM add more trace output in order to help failing diagnostics + CPackRPM even more trace in debug mode or in case of failure + CPackRPM non matching ENDIF + CPack try to please SUSE 64 bits and install lib in lib64 and not lib. + Remove debbuging typo + CPack fix CPackDeb crash when CPackDeb.cmake ends with a FATAL_ERROR + CPack fix #11930 and simplifies component packaging options + Fix #11964 Handle lib64 library on Linux + Fix KWStyle warnings + Split CPack.cmake in more manageable parts + Fix KWStyle warnings + CPackRPM Fix #12096: handle absolute install path with component install + CPack make RPM work on AIX. fix #0012183 merge patch from Pasi Valminen + +James Bigler (1): + Add FloatingPointModel to the list of known VS7 generator flags. + +Johan Björk (1): + XCode: Also qoute [] as needed to set build-configurations. + +Kovarththanan Rajaratnam (1): + Documentation: document platform specific -E commands (#10446) + +M. Konrad (1): + CPackDeb add Component Support to DEB generator fix #0011655 + +Manuel Klimek (6): + refactor flags and defines + cache flags and defines + implement cxx command output + make compile command output optional + Adds a test for the compile command line output. + Only offer the compile command output feature on unix systems + +Marco Craveiro (1): + CTest: Use the gcov --preserve-paths flag (#11717) + +Markus Rathgeb (1): + When cross compiling, don't double-root paths when using find_*. + +Martin Konrad (2): + CPackDeb: Fix #12006 broken package names + CPackDeb: Handle dirs for CONTROL_EXTRA correctly when packaging components + +Mathieu Malaterre (8): + This commit fixes bug #0010316 + Add a new function SWIG_GET_WRAPPER_DEPENDENCIES to UseSWIG.cmake + Add support for Java on HP + Add support for java on fedora + UseSWIG.cmake does not expand $(OutDir) + Add support for new swig 2.0 application + UseSWIG.cmake did not support multiple modules and parallel builds + Add support for FindJava on HP-UX and alpha + +Michael Wild (1): + Add module ProcessorCount.cmake (#11302) + +Modestas Vainius (1): + Documentation: Fix a few typos (#11883) + +Nikita Krupen'ko (1): + Add GNUInstallDirs module to define GNU layout (#3976) + +Philip Lowman (1): + VS7/8/9: Map whole program optimization flags (#10263) + +Richard Bateman (1): + Add support for CFBundle targets on the Mac (#11295) + +Rolf Eike Beer (2): + CTest: catch warning output of Apache Maven + FindZLIB: print library instead of include directory + +Sean McBride (1): + Removed most usage of Carbon in favour of CoreFoundation + +Sebastian Herbst (2): + VS8/9: Add flag map entries for /Zc:wchar_t (#10397) + VS7/8/9: Add flag map for string pooling option (#10397) + +Tim Hütz (1): + Add a string(FIND) sub-command (#11795) + +Todd Gamblin (2): + FindMPI: Handle multiple languages + Added backward compatibility for input as well as output vars. + +Wesley Turner (1): + Ensure executable files have executable permissions. + +Zach Mullen (5): + Implement ctest_upload command + Change 'Files' tag to 'Upload' in Upload.xml + Don't tar/gz ctest_upload() files + Add the FILES keyword to ctest_upload command + cmCTestUploadCommand::CheckArgumentKeyword should return false if not FILES + +Changes in CMake 2.8.4 (since 2.8.4-rc2) +---------------------------------------- +Alex Neundorf (1): + Fix crash in GraphVizWriter when GRAPHVIZ_TARGET_IGNORE_REGEX is used + +Andreas Schneider (1): + FindPerlLibs: Add notice of copyright + +Brad King (3): + libarchive: Define major/minor/makedev only where needed (#11648) + libarchive: Use OpenSSL only if CMAKE_USE_OPENSSL (#11815) + Fix documentation of MSVC_VERSION (#11833) + +David Cole (1): + Silence the may be used uninitialized warnings: initialize stuff. + +Eric NOULARD (2): + CPack Tests the different ways of packaging components + Avoid foreach IN LISTS syntax which is not supported by CMake 2.6 + +Changes in CMake 2.8.4-rc2 (since 2.8.4-rc1) +-------------------------------------------- +Alex Neundorf (3): + Make cmake build again with cmake < 2.6.3 + Strip trailing whitespace. + Fix parsing of compiler name with a version number + +Ben Boeckel (86): + ... 86 commit messages summarized as: + Fix ADD_TEST regression when WORKING_DIRECTORY not given + Add new "strict-mode" CMake variable checking + Activate / avoid using new command line arguments: + --warn-uninitialized + --warn-unused-vars + --no-warn-unused-cli + --check-system-vars + +Bill Hoffman (3): + For macros make sure the FilePath points to a valid pointer in the args. + Add a warning when variables are used uninitialized. + Make --strict-mode option, and integrate with cmake-gui + +Brad King (34): + bootstrap: Granular system library selection (#11431) + bootstrap: Clarify --init flag documentation (#11431) + bootstrap: --verbose implies verbose Makefiles (#11708) + Combine duplicate COMPILE_DEFINITIONS disclaimer + Document COMPILE_DEFINITIONS known limitations (#11660, #11712) + Document try_compile behavior more clearly (#11688) + Document Check(C|CXX)SourceCompiles behavior more clearly (#11688) + Fix get_(cmake|test)_property documentation (#11703) + Reference get_property() from old get_*_property() commands + Replace misleading example in the if() documentation (#10773) + Clarify auto-dereference cases in if() command (#11701) + Document CheckFunctionExists more clearly (#10044) + Document CheckSymbolExists more clearly (#11685) + Update CheckSymbolExists copyright year + Report directory with missing source file (#11677) + Test that missing source mentions directory (#11677) + Teach Simple_Mingw_Linux2Win test to use windres + Disable SubDirSpaces parens with GNU Make 3.82 (#11654) + libarchive: Fix major() check for LSB 4.0 (#11648) + Xcode: Make generation depend on all input directories + Recognize SCO UnixWare C/C++ compilers (#11700) + Factor SCO compiler info out of platform file (#11700) + Honor CMAKE_TRY_COMPILE_CONFIGURATION in Makefile generators (#10809) + Document CMAKE_TRY_COMPILE_CONFIGURATION variable + Honor VS_SCC_* properties in Fortran targets (#10237) + Normalize slashes in scanned #include lines (#10281) + Improve try_compile and try_run error messages + Use shortest extension to verify try_compile language (#11731) + Modules: Include builtin FindPackageHandleStandardArgs directly + Fix relative CMAKE_USER_MAKE_RULES_OVERRIDE (#11725) + Clarify CMAKE_USER_MAKE_RULES_OVERRIDE documentation (#11724) + Always place try_compile executables predictably (#11724) + try_compile: Allow only languages loaded in caller (#11469) + Fix ArgumentExpansion test expected results + +Clinton Stimpson (1): + Replace exec_program with execute_process for qmake queries. + +David Cole (16): + Update script with new machine name + VS10: Fix problems with InstallRequiredSystemLibraries. + Add CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS variable + Add CPACK_NSIS_INSTALL_ROOT for CMake's own installer (#9148) + Xcode: Disable implicit make rules in custom rules makefiles. + Add freeglut as library name (#10031) + Add new names for PNG and ZLIB libraries + Avoid exceptions when ccmake terminal window is too small (#11668) + VS10: Load projects with obj "source" files (#11147) + VS10: Enable using devenv as CMAKE_MAKE_PROGRAM (#11459) + Xcode: Fix crash: avoid strlen call on NULL char * + CTestTest2: Avoid running purify unless requested + VS10: Escape double quote chars in defines for rc files (#11695) + Fix line too long KWStyle issue (#11695) + Avoid space in rc /D values for VS6 and Cygwin (#11695) + VSResource: Avoid windres /D with quoted spaces (#11695) + +Marcus D. Hanwell (1): + Bug #11715 - generate header in the build tree. + +Nicolas Despres (1): + bootstrap: Add --enable-ccache option (#11707) + +Changes in CMake 2.8.4-rc1 (since 2.8.3) +---------------------------------------- +Alex Neundorf (32): + Add support for nasm assembler, patch by Peter Collingbourne (see #10069) + Improve misleading comments. + Add missing copyright headers + We already have 2010, fix copyright year. + Make FindBISON work properly with non-C locales (#11326) + Add support for yasm, a nasm compatible assembler + Use CMAKE_ASM_NASM_FLAGS for nasm instead of FLAGS + Remove trailing whitespace and minor formatting changes for the dot-code + Move the code for collecting targets and libraries into separate functions + Properly insert all targets, also those which don't link to anything. + Generate separate dot files for each target, and a big one with everything. + Move the code for generating dot-files into separate class cmGraphVizWriter + Fix #11421: FindQt3.cmake doesn't honor the REQUIRED keyword + Remove trailing whitespace + Don't enforce VERBOSE makefiles for the CodeBlocks generator + Remove the "early alpha stage" comments about Eclipse and C::B + Don't disable colors in the CodeBlocks generator and minor cleanup. + Some more fixes for nasm support, from Etienne (#10069) + Enable/disable generating graphs depending on the target type + Use std::cout instead of fprintf + Collect targets and libs on demand instead of in the ctor + Exclude targets from the graphviz file based on a regex + Include CMakeDetermineCompilerId in CMakeDetermineASMCompiler.cmake (#11467) + Fix typos in the doc + Add cache var CMAKE_ECLIPSE_MAKE_ARGUMENTS when using the Eclipse generator + Add ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT as a ADVANCED cache variable (#9631) + Fix crash in Eclipse generator with empty project (#11616) + Fix indentation in cmPolicies::ApplyPolicyVersion() + Remove trailing whitespace + Prefer files from CMAKE_ROOT when including from CMAKE_ROOT + Improve documentation and messages for the new CMP0017 + Remove usage of CMAKE_CURRENT_LIST_DIR now that we have CMP0017 + +Alexey Ozeritsky (5): + FindBLAS works in C/C++ projects without Fortran + ACML find fixes (issue 0011219) + find ACML fixes + fix for Fortran-only projects + FindLAPACK works with C/C++ only projects (issue 0009976) + +Andrius Štikonas (1): + Modules: Fix spelling 'becase' -> 'because'. + +Ben Boeckel (25): + Fix parsing of cache variables without a type + Use cmCacheManager to load entries from the cache + Support manual cache entries + Condense parsing of cache entries + Use FPHSA in FindOpenGL + Ignore strerror_r since CMake isn't threaded + Use _POLL_EMUL_H_ instead of HAVE_POLL_FINE + Rename WorkingDirectory test + Add WORKING_DIRECTORY argument to add_test + Add tests for WORKING_DIRECTORY arg to add_test + Rename the project to match the test + Fix header includes for C++ and Visual Studio + Add ctype.h include for toupper() + Flip slashes around on Windows + Use --><-- markers to denote the path + Simplify the _default_cwd derivation + Only test the default cwd with Makefiles + Group adding tests with its properties + Fully specify the path to old-signature add_test + Use iostream to make Borland happy + Check for poll when looking for _POLL_EMUL_H_ + Toss out strerror_r macros + Fix missed _POLL_EMUL_H_ and HAVE_POLL combo + Make TestsWorkingDirectory test a C file + Pass the expected value as the first argument + +Bill Hoffman (17): + Fixes for the OSF operating system build. + Add a fix for the inline keyword on the osf os. + Add a "Contract" test for VTK. The test downloads and builds VTK. + Fix contract test so it is not hard coded to the vtk542 test. + Fix incremental linking for VS2010 with nmake or make. + Change cpack run and verify script to work with multi-config generators. + Fix vs2010 project generation error when HEADER_FILE_ONLY is set. + Add more documentation for LANGUAGE property. + Add flags to resource builds on vs 2010 with a test. + Disable incremental testing for this test, it crashes vs9 linker. + Only run resource test for MSVC compilers. + Add support for windows resources with mingw/msys. + Add support for windres to cygwin. + Add testing for windows resources for mingw/msys/cygwin and remove for watcom. + Enable resource building with the intel compiler on windows. + Add support for source files in custom targets for VS 10 (Bug#11330). + Change the nightly tests to build from the nightly branch and not next. + +Brad King (90): + Store direct dependencies in solutions for VS >= 8 + BUG: Fix compiler flag test for non-English MSVC (#11336) + Document custom command behavior without DEPENDS (#11407) + Consolidate duplicate link rule make dependency code + Define LINK_DEPENDS target property (#11406) + KWSys: Teach SystemInformation about WinXP Pro and Win7 + Fix Intel .vfproj SubSystem attribute values + Set Intel .vfproj RuntimeLibrary attribute + Create Fortran info variables for .mod behavior + Teach CMake about Cray C, C++, and Fortran compilers + Speedup find_* commands (#11412) + Prefer non-empty prefixes when matching lib names (#11468) + Record edge type in global dependency graph + Use modern global dependency graph for VS < 8 deps + Allow add_dependencies() on imported targets (#10395) + Pass Mac linker flag through PGI compiler using "-Wl," + Modernize FindITK module (#11494) + Fix find_* argument parsing crash (#11513) + Skip VS <= 7.1 dependency analysis for VS >= 8 + Enable 64-bit tools with VS 2010 Express (#9981, #10722) + KWSys: Associate installed library with an EXPORT + Fix try_compile RemoveFile anti-virus loop (#11503) + Fix Fortran .mod timestamps with Cray compiler + Make Fortran $obj.provides.build targets not .PHONY + Honor custom command dependencies on imported targets (#10395) + Improve signature of cmLocalGenerator::GetRealDependency + Skip file-level dependencies on custom targets (#11332) + Simplify VS generator ConstructScript interface + Factor out common custom command generator + Remove cmLocalGenerator::GetRealLocation + KWSys: Remove realpath from SystemTools::GetPath (#10335) + Fix parallel "make install" of CMake itself + CTest: Fix ctest_sleep documentation (#11554) + Fix soname in cross-compiled targets with Mac host (#11547) + Detect object files in implicit link information + Allow Fortran platform files to set empty values + Recognize the NAG Fortran compiler + Add NAG Fortran compiler information files + FortranCInterface: Recognize NAG Fortran module symbols + Remove unused variable "rootdir" in VS generators + Avoid msbuild idiosyncrasy that builds multiple configs (#11594) + Remove unused parameter "root" in some VS generator methods + Fix dependency tracing of INSTALL and PACKAGE (#11598) + Remove unused GLOBAL_TARGET generation code + KWSys: Use EXPORT name only if installing library + Write full version into try_compile CMakeLists + KWSys: Do not mangle UNC paths in ConvertToUnixOutputPath (#10206) + Normalize add_custom_command OUTPUT names (#10485) + Make link rule depend on ".def" file (#11014) + Document target_link_libraries target scope (#11058) + Record backtrace in cmCustomCommand + Factor generator expression docs out of add_test + Factor per-config sample targets out of 'Testing' test + Optionally suppress errors in cmGeneratorExpression + Record set of targets used in cmGeneratorExpression + Introduce "generator expression" syntax to custom commands (#11209) + CTest: Fix test DEPEND cycle detection + Make Intel defines consistent with MSVC on Windows (#9904) + CTest: Fix line-too-long style in DEPEND cycle error + Detect Fortran target architecture on Windows + Modernize Intel compiler info on Windows + Remove unused old-style g++ info file + CheckCCompilerFlag: Strict signature of 'main' (#11615) + Warn in find(GLOB) docs about bad use case (#11617) + Remove call to SystemTools::GetMaximumFilePathLength + Xcode: Generate native 3.2 projects + Declare min CMake version in --system-information project + Cygwin: Fix tests to check CYGWIN instead of WIN32 + Cygwin: Do not define 'WIN32' (#10122) + Revert "Remove unused parameter "root" in some VS generator methods" + Revert "Avoid msbuild idiosyncrasy that builds multiple configs" (#11633) + Avoid msbuild ".\" idiosyncrasy that builds multiple configs (#11594) + Mark CustomCommand test perconfig.out as SYMBOLIC + CTest: Factor out duplicate Git author/committer code + KWSys: Avoid buffer overflow in SystemInformation (#11018) + Fix sentence break in add_test documentation + Pass Mac linker flag through all compilers with -Wl, + KWSys: Avoid passing string literal as char* + Avoid passing string literal to char* type + Fix constness in compiler id detection + Build enable_language command during bootstrap + Map multiple /FI flags for VS < 10 (#11649) + KWSys: Remove useless include (#11648) + Allow users to specify defaults for unset policies + ccmake: Use LSB 4.0 curses API conditionally + CTest: Do not truncate UTF-8 test output too early (#10656) + ccmake: Use LSB 4.0 getmaxyx conditionally + Allow platform files to set large archive rules (#11674) + Document reading LOCATION early as undefined (#11671) + Document reading LOCATION_ early as undefined (#11671) + +Brian Bassett (1): + VS: Fix linking of Fortran-only DLL projects (#10803) + +Campbell Barton (1): + Honor RULE_MESSAGES property for build target messages + +Chuck Atkins (1): + CTest: Teach launcher to ignore empty/no-op make commands + +Clinton Stimpson (11): + Fix regex for moc includes when looking for frameworks. + cmake-gui: use BundleUtilities in place of custom script. + Fix regression in 2dae2f1 which added find of Qt imports dir. + Force cmake to run again when qrc dependency scanning needs to happen. + Fix regression to allow specifying a CMakeCache.txt file on the command line. + BundleUtilities: only do rpath strip on copied prerequisites. + Fix build issues cross compiling with static Qt. + CTest: multiple ctest_test calls w/LABEL regexs (#11487) + cmake-gui: always enable generate button. + allow absolute paths for dbus interface. + Add support for using static/dynamic Qt plugins. + +Craig Scott (1): + ccmake: Port for LSB 4.0 (#11648) + +Dave Abrahams (1): + FindPerlLibs: Fix for Mac locally applied patches + +David Cole (31): + Add a contract test for building the CSE. + Enable overriding contract test timeout values. + Update tag in the Contracts/cse-snapshot test. + Make HTML test fail when --nonet arg is not available. + Begin post-2.8.3 development + No CMake.HTML test if xmllint has no --nonet. + Suppress "loop was vectorized" "warnings." + Add contract test for Trilinos 10.6.1 snapshot. + Honor FOLDER on include_external_msproject targets (#11436) + Correct misspelling in error message text. + BundleUtilities: error if fixup_bundle_item called on non-embedded item + VS10: stop build on custom command error (#11533) + CPack: look for makensis in the PATH (#8210) + VS10: avoid warning, no nologo when verbose (#10587) + Use m prefix in shorttag value to indicate "md5 of tarball" + Establish pass criteria for the Trilinos contract test. + Suppress erroneous warnings from Intel compiler + Avoid running CMake.Install test simultaneously with other tests + VS10: Finish Midl support (#11461) + Prohibit space in HOME value for VSMidl test. + KWSys: Fix CPU speed calculations (#9963) + KWSys: Retrieve QNX specific memory and processor info (#11329) + Improve build error detection. + VSMidl Test: Use correct include_directories with VS6 (#11461) + Add PATH_SUFFIXES for finding git. + ExternalProject: Avoid bleed-through output when logging. + Fix WOW64 registry mode on Windows 2000 (#10759) + ExternalProject: Replace location tags in CMAKE_CACHE_ARGS + CPack: Detect more URLs in CPACK_NSIS_MENU_LINKS (#10644) + KWSys: Fix WOW64 registry mode on Windows 2000 (#10759) + CPack: Add CPACK_NSIS_INSTALL_ROOT variable (#9148) + +Eric NOULARD (13): + CPackRPM add basic component support to CPackRPM + CPack fix kwstyle breakage and make CPackRPM backward compatible + CPack backward compatibility fix 2.8.3-2.8.2 (bug 11452) + CPack Fix KWStyle error + CPack Honor CPACK_MONOLITHIC_INSTALL at CPack time too + CPack use IsOn when it's better than IsSet + CPackRPM fix bug 0011595 : Can't generate RPMs (on FC11...) + CPack new tests for component install + CPack Default component test for ZIP should be OK + CPackTest spit out more output in case of failure + Arrange output in a better way + Precise the project config type when invoking cpack + CPackSTGZ quote here-doc, fix bug10518 + +Kai Wasserbäch (1): + FindTCL: Fix TCL and TK version variable references (#11528) + +Marcus D. Hanwell (5): + BUG 11451 - pass CMAKE_EXTRA_GENERATOR down. + Added CMAKE_CACHE_ARGS to ExternalProject. + Escape file write expansion, and build up lists. + Fixed bug where last entry would be lost. + Python additional version support, bug #10279. + +Matthias Kretz (1): + Inline help in vim with vertical split. + +Mike McQuaid (6): + Fix incorrect variable documentation (#11127) + Add variable for InstallRequiredSystemLibraries dir (#11140) + InstallRequiredSystemLibraries debug-only (#11141) + Allow NSIS package or uninstall icon (#11143) + Add CPACK_NSIS_EXECUTABLES_DIRECTORY (#7828) + Add CPack NSIS MUI_FINISHPAGE_RUN support (#11144) + +Philip Lowman (8): + 11363: FindBoost.cmake fails to find debug libraries in tagged layout install + 11429: FindGTK2 does not find libraries built for Visual Studio 2010 + 11430: FindBullet doesn't find header files installed by Bullet >= 2.77 + 11384: FindCxxTest now includes test code in VS project + [patch] Add Boost 1.45 to search, simplify a check removing VERSION_LESS + Add Boost 1.46 + Fix spelling BOOST_LIBRARYDIR message. Add error for common misspellings. + Lowercase all function names and improve consistency + +Rolf Eike Beer (2): + allow STRING(SUBSTRING) work with length -1 as "rest of the string" + Add the WORKING_DIRECTORY property to tests + +Wojciech Migda (1): + Recognize the Texas Instruments DSP compiler (#11645) + +Yaakov Selkowitz (2): + Cygwin: Use 'cyg' prefix for module DLLs (#10122) + Cygwin: Fix release script libncurses search patterns (#10766) + +Zach Mullen (4): + Remove debugging message from parallel ctest + CTest git update should pass the committer as well as the author + Support explicitly set test costs in non-parallel testing. + Test TIMEOUT property explicitly set to zero should be honored + +No changes in CMake 2.8.3 since 2.8.3-rc4. + +Changes in CMake 2.8.3-rc4 (since 2.8.3-rc3) +-------------------------------------------- +Bill Hoffman (1): + When processing DartMeasurements use the tests working directory. + +David Cole (2): + ExternalProject: No svn --username if empty (#11173) + Avoid problem reading jni.h on Macs. + +David Partyka (5): + Fixed appending PATH to dumpbin tool from growing without bounds. + Switch to CMAKE_PATH when doing PATH comparisons on Windows. + Remove unecessary TO_CMAKE_PATH for gp_cmd_dir. + Append the gp_tool path to the system PATH using native slashes. + Fixes to GetPrerequisites for cygwin + +Eric NOULARD (1): + CPackDeb Added several optional debian binary package fields + +Marcus D. Hanwell (2): + ENH: Added case for Python 2.7. + Fixed parallel build for generators with EXTRA. + +Changes in CMake 2.8.3-rc3 (since 2.8.3-rc2) +-------------------------------------------- +Alex Neundorf (4): + Remove trailing whitespace + Add automatic variable CMAKE_CURRENT_LIST_DIR(dir of CMAKE_CURRENT_LIST_FILE) + Use absolute path to FindPackageHandleStandardArgs.cmake everywhere + CodeBlocks Generator: Do not omit files in the project file listing. + +Brad King (4): + VS10: Order .vcxproj dependencies deterministically (#10502) + Document ENABLE_EXPORTS behavior on Mac (#11295) + FindHDF5: Fix typo in parallel-IO support check (#11291) + Xcode: Recognize .hh as C++ (#11307) + +Clinton Stimpson (1): + Find imports dir in Qt 4.7 + +David Partyka (1): + Update module to locate newely released MS MPI HPC Pack R2. + +Philip Lowman (1): + Remove superfluous variable Boost_COMPAT_STATIC_RUNTIME. + +Rolf Eike Beer (2): + FindSubversion: Fix for German localized client (#11273) + FindSubversion: Use C locale to detect version (#11273) + +Changes in CMake 2.8.3-rc2 (since 2.8.3-rc1) +-------------------------------------------- +Alex Neundorf (5): + APPEND and not-APPEND mode of feature_summary() were swapped + Set a default DESCRIPTION if none is given for ALL mode of feature_summary() + Close ENDFUNCTION() properly with the same name as FUNCTION() + Make cmake-gui remember whether the "Advanced" checkbox was checked or not + Also store the required version number in the details message. + +Ben Boeckel (3): + Add test that CMake errors with empty libs + Fix which string is checked for in the test + XCode generation should fail if lang isn't known + +Bill Hoffman (5): + Fix the name of the variable being tested. + Fix KWStyle line length issues. + Add a delay after untar on windows to make external project work on windows 7 + Add a new line to the end of the generated main.cxx for the hpux compiler. + Fix for bug #11274, VS10 custom commands that create files in INTDIR fix. + +Brad King (12): + Evaluate rule variable for executables + ccmake: Fix search with '/' + MinGW: Support long object file lists + Document IMPORTED_NO_SONAME target property + FindMPI: Recoginze -f flags from mpicc (#10771) + Add module-dir flag for Compaq Visual Fortran (#11248) + FindPythonInterp: Look for python2.7 interpreter + VS10: Use $(IntDir) for per-source output directory (#11270) + Reset platform/compiler info status for each language + Remove trailing whitespace from Xcode generator source + VS10: Skip targets with no linker language (#11230) + VS10: Encode custom command comments for echo (#11283) + +Clinton Stimpson (1): + Fix regression in cross-compile patches with finding Qt libs. + +David Cole (7): + Enable calling commands with : in argv[1] (#9963) + No extra spaces in CustomCommand test (#9963) + Avoid CustomCommand test failure on VS71 (#9963) + Update release scripts. + Avoid CustomCommand test failure on VS71 (#9963) + Honor MAKECOMMAND value saved in cache (#11026) + New USE_FOLDERS property OFF by default. (#3796) + +David Gobbi (1): + Set the module prefix, updated Windows suffix. + +Eric NOULARD (2): + InstallGen/CPack fix handling absolute installed file regression + CPackRPM Handle parenthesis in CPACK_SYSTEM_NAME (fix bug 10737) + +James Bigler (2): + Fix for bug 0011263. + Allow -g3 for CUDA v3.0+. + +Mikkel Krautz (2): + Xcode: Avoid trailing space in ARCHS list (#11244) + Xcode: Quote string values containing '$' (#11244) + +Philip Lowman (12): + FindBoost.cmake fixes for issues 11204 & 8529 + FindBoost.cmake: Miscellaneous changes and refactoring + FindBoost.cmake: Add Boost_NO_SYSTEM_PATHS option + FindBoost.cmake: Fix compiling against a boost source tree + FindBoost.cmake: Fixes 11246 + FindBoost.cmake: Fixes 11121 + FindBoost.cmake: Fixes 10436 + FindBoost.cmake: Implements 11160 + Fix 11136: [patch] FindThreads.cmake documents the wrong variable + FindBoost.cmake: Fix library search path glitch introduced in earlier commit + FindFLEX.cmake: Fix issue 11249 + Fixes issue 11279: CMakeDetermineVSServicePack support for VS10 + +Yaakov Selkowitz (2): + FindFLTK*: Use Cygwin fltk on Cygwin (#11290) + Use 'uname -m' for processor on Cygwin (#10774) + +Changes in CMake 2.8.3-rc1 (since 2.8.2) +---------------------------------------- +Alex Neundorf (39): + fix build on SUSE 11.2 in cmcurl due to ssize_t + -add an additional name for finding libtiff on Windows + -fix typo in docs of deprecated MacroAddFileDependencies.cmake + add 2nd, more powerful mode to find_package_handle_standard_args() + -fix indentation of the documentation + Add version checking support to FindFlex and FindPerlLibs + FindSquish doesn't detect the version, remove that from the documentation + Improved version checking for FindRuby using the new mode of FPHSA() + Improved version checking for FindJava using the new FPHSA() mode + Fix DETAILS string with version number in FHPSA() + Improved version checking for FindSubversion using the new mode of FPHSA() + Improved version checking for FindCUDA using the new mode of FPHSA + Use FPHSA() in FindSWIG, including version checking. + Change documentation of Subversion_FOUND and SUBVERSION_FOUND. + Add macro CMakeParseArguments() and use it in FPHSA() + Fix ZLIB version parsing if no TWEAK version exists + Fix EclipseCDT include path parsing with spaces (#10868) + Fix EclipseCDT parsing of builtin macros with spaces (#10868) + Remove trailing spaces + Detect a COMPILER_ID also for ASM. + Add timeout to execute_process() in CMAKE_DETERMINE_COMPILER_ID(). + Fix parsing of builtin macros so Eclipse handles them properly (#10868) + Log the required package version and major improvement to FeatureSummary + Improve documentation. + Improve wording of the documentation. + Add macro ADD_FEATURE_INFO() and improve docs. + Remove trailing whitespace + Make target_link_libraries() complain if bad target name is used + Just warn in case of a bad target as only argument for t_l_l() + Remove trailing whitespace + New CMP0016 for deciding whether an unknown target in TLL() is an error. + Record all considered Config files and their versions. + Improve error message in Config-mode when no appropriate version was found + Replace the two vector with one vector + Small cleanup of FindPackageHandleStandardArgs.cmake + Don't create an empty element at the end of Foo_CONSIDERED_CONFIGS/VERSIONS + Add option CONFIG_MODE to FPHSA() + Improve version notice in the generated message + Improve wording of the error message of find_package() in config-mode + +Andrew Maclean (3): + Adding a FindPostgreSQL.cmake module + Forgot the copyright notice. + Changed ADDITIONAL_SEARCH_PATHS to PostgreSQL_ADDITIONAL_SEARCH_PATHS. + +Arjen Verweij (1): + Pass objects to Intel linker using a response file + +Bill Hoffman (9): + Disable gcc 33 on OpenBSD because it crashes CPack by default. + Fix for bug#10483, INCLUDE_EXTERNAL_MSPROJECT: ProjectGUID now ProjectGuid + Remove the ctest submit larget output test. + Let CMake recognize .CPP .CXX and .C++ as c++ files. + Fix for bug 10388, fix various default flags. + Only use .CPP .CXX and .C++ do not work by default with g+++. + Fix targets with . in the name for VS 10 IDE. + Only test for .CPP on Microsoft compilers which will handle .CPP as c++. + Allow testing of .CPP on WIN32 as it is a case insensitive OS and should work. + +Brad King (69): + ExternalProject: Add LOG_* options to hide step output + FindMPI: Do not parse -l in middle of library name + FindMPI: Parse mpicc flags more carefully (#9093) + Fix or cast integer conversions in cmake + Begin post-2.8.2 development + FindMPI: Failure is not an error if not REQUIRED + FindMPI: Trust mpicc -showme on BlueGene/L + VS: Always separate preprocessor defs by semicolon (#10902) + KWSys: Cleanup putenv leak option implementation + KWSys: Pass ptrdiff_t check result to System.c + Fix or cast more integer conversions in cmake + Use same type in both cases of '?:' operator + FindMPI: Fix parsing of mpicc -Wl,-L link flags (#9093) + Fix signed/unsigned comparison warnings in ccmake + Fix integer conversions in cpack + bootstrap: Detect known C/C++ compiler toolchains + KWSys: Use short fallback timeout for Process tests + KWSys: Optionally suppress consistent test failures + KWSys: Avoid Clang optimizer bug in testProcess-[45] + Poison GCC 3.3 on OpenBSD a bit later + KWSys: Avoid undefined behavior in Process crash tests + Optionally use system bzip2 library (#10932) + ctest_update: Abort if Git FETCH_HEAD has no candidates + ctest_update: Support ".git file" work trees + ctest_update: Run 'git submodule' at top level + FindBoost: Search for Boost 1.42 + Add FindLibArchive module (#10923) + Add option CMAKE_USE_SYSTEM_LIBARCHIVE (#10923) + Refer to self with CMake_(SOURCE|BINARY)_DIR (#10046) + ExternalProject: Fix $(MAKE) with cygpath on Windows + FindBoost: Search for Boost 1.43 and 1.44 + Include headers from chosen libarchive (#10923) + No response files with GNU ld <= 2.16 (#10913) + Create class cmArchiveWrite to wrap libarchive (#11020) + Include entries for directories in tarballs (#11020) + cmArchiveWrite: Fix signed/unsigned compare/convert + cmArchiveWrite: Fix signed/unsigned again + CPack: Avoid member shadowing after API refactor + KWSys: Fix SplitPath for leading '\' on Windows + KWSys: Fix GetActualCaseForPath for UNC paths + ModuleNoticesTest: Do not require "Kitware" copyright + Modules: Fix CMakeParseArguments copyright notice + FortranCInterface: Fix doc typo FC.h -> FCMangle.h + CTest: Avoid use of old EscapeSpaces method + Remove cmSystemTools::EscapeSpaces method + Clarify install(TARGETS) docs for EXPORT option + Factor out global generator ComputeTargetDepends method + Factor out duplicate VS target dependency code + Refactor VS <= 7.1 utility-depends workaround + Restore GetTargetDirectDepends const return + Split notion of node lists and edge lists + Distinguish "strong" and "weak" target dependency edges + Honor strong intra-component target dependencies + libarchive: Remove SCHILY dev,ino,nlink attributes (#11176) + Fix unused parameter warning in VS 7.1 generator + KWSys: Avoid empty string dereference in SplitString + KWSys: Improve SplitPath method documentation + KWSys: Use SplitPath in GetActualCaseForPath + Add whitespace=tab-in-indent attribute for sources + Search MacPorts /opt/local prefix on Mac + HP-UX: Always add /usr/lib to rpath (#10571) + No CMAKE_CONFIGURATION_TYPES in single-config generators (#10202) + KWSys: Suppress -Wcast-align warning in MD5.c + Suppress -Wcast-align in curl and bzip2 + libarchive: Fix purposeful crash + bootstrap: Honor CFLAGS during "make" test (#10545) + file(DOWNLOAD): Fix error message formatting + Fix line-too-long style errors + Report missing source files with context of target + +Clinton Stimpson (10): + Fix performance issue with getting version from zlib.h + Fix bug 10418 - GetPrerequisites returning "not" as a dependency. + Fix regression in 5e6634fd77969433a87c150a2fb3f2079131484f for Windows. + Change Qt4ConfigDependentSettings to use more standard find modules. + Add cross-compiling support to FindQt4.cmake + Tweak for cygwin, don't convert : to ; + Fix some issues with refinding when qmake executable is changed. + Find correct Qt plugins for cross-compiling. + Fix mingw/VS warning message with cross compile re-org. + Make sure moc parameters file goes in binary directory. + +David Cole (20): + CheckSourceTree test: read UpdateCommand from Update.xml. + Eliminate -Wconversion warnings. + Detect CMake warnings and errors in build output. + Activate retry code on any curl submit failure. + Add another expected output for the failed submit tests. + ExternalProject: Use $(MAKE) whenever possible. + Copy Resources in Frameworks during fixup_bundle (#10020) + Update path to git. dashmacmini2 was "upgraded." + ExternalProject: Remove 'unknown keyword' warning (#11034) + Add documentation for CPACK_PROJECT_CONFIG_FILE. + Add STEP_TARGETS to ExternalProject module. + Refine formatting for cmake --help-module output. + Improve documentation of OPTION command. + Add FOLDER target property, for IDEs (#3796) + Avoid adding self as prerequisite. (#10417) + Correct CMAKE_INSTALL_PREFIX value for Win64 apps (#9992) + Preserve timestamps on files on tar extract. + Use QUIET to avoid Java status messages. + VS2010: Honor PROJECT_LABEL target property (#10611) + VS2010: Set IntDir for utility and global targets. + +David Genest (1): + Honor CMAKE_USER_MAKE_RULES_OVERRIDE in try_compile (#10902) + +Eric NOULARD (20): + CPackRPM:: Replace - with _ in RPM Version (fix bug 0010934) + Provides default changelog if no file is provided + CPackRPM:: Quote every filenames in %file section (see bugs 10701,10871,10345) + CPackRPM:: [partially] support relocatable package + CPackDEB: merge wrong installed size patch. see bugs 10296 (and 10292) + CPackDeb optionally generates auto-dependency list part fix of bug 10292 + Proposal for bash-completion support file + CPack: Refactor API in order to handle multi-file packages + CPack: Avoid member shadowing after API refactor (part2) + Improve cmake-completion (install doc, ctest -R completion) + Add ZIP archive format and LZMA compress support to libarchive-wrapper + Add XZ compress support to libarchive-wrapper + Add Compress compress support to libarchive-wrapper + CPack Backward-compatibly enforce DESTDIR for DEB and RPM + CPack Enable better handling of absolute installed files + CPackArchiveGenerator use cmArchiveWrite wrapper + CPackArchiveGenerator add component supports + CPackArchiveGenerator improve usability and robustness + CPack fix broken compilation for CygwinSource generator + CPack handle symlinks in CPACK_INSTALLED_DIRECTORIES fix for bug5430 + +James Bigler (1): + Added CUDA 3.2 directory changes. Disable emulation mode for CUDA 3.1+. + +Kai Wasserbäch (1): + Fix spelling errors reported by Lintian. + +Kovarththanan Rajaratnam (4): + FindZLIB: optimize zlib.h version parsing + FindCygwin: add new registry entry for Cygwin 1.7 (#10951) + FindZLIB: use the FPHSA version mode + FindSubversion: set compatibility variables based on FPHSA() + +Marcel Loose (1): + Issue 10199: Fixed code documentation and now set _WC_ROOT + +Marcus D. Hanwell (1): + Bug with default library type of Python modules. + +Mathieu Malaterre (3): + Add missing PATHS to find_path commands to fix openssl searching + BUG: 0009611 Fix Arch independent FindJNI.cmake on Linux + Fix 11035 : debug/release library configuration mistake + +Michael Wild (2): + Improve documentation of BundleUtilities.cmake + Improve documentation of GetPrerequisites.cmake + +Miguel A. Figueroa-Villanueva (7): + ENH: #9775 Added support for new wxWidgets 2.9 libraries. + BUG: #9775 Fixed patch FindwxWidgets-fixed-bug-9775. + BUG #10658: FindwxWidgets USE_FILE should not include .cmake extension. + STYLE: Clarified/Fixed documentation of UsewxWidgets. + BUG #11123: Generic include dir should come after config specific one. + BUG #8184: Fixed FindwxWidgets wrong order of default libs for MinGW. + ENH #8993: FindwxWidgets add support for wx-config custom options. + +Mike McQuaid (1): + Make bundle items writable before fixup (#9284) + +Modestas Vainius (1): + CTestTestFailedSubmit-xmlrpc: Pass with "Submission problem" + +Patrick Gansterer (4): + VS: Convert PlatformName member to a virtual method + VS: Add more TargetMachine option values + VS: Map /ENTRY linker option to EntryPointSymbol + VS: Add ArchitectureId to VS 8 and 9 generators + +Philip Lowman (7): + Fixes problem finding libraries under Boost (#9510) + Add detection for new pangommconfig.h header file + Several fixes needed to improve Windows support + 11041: Improve FindCxxTest to use Python or Perl automatically; custom flags + 10241: FindBISON.cmake clears wrong variable + 10688: FindGTK2.cmake doesn't auto-detect macports + Merge patch for detecting gdk-pixbuf library + +Pino Toscano (1): + GNU/Hurd platform support fixes (#9873) + +Robert Goulet (1): + VS2010: Disable PDBs when there is no debug info + +Rolf Eike Beer (2): + clean up some stuff in CPack RPM script + Set MSVC_VERSION for MSVC 6, 7, 7.1 (#7944) + +Todd Gamblin (3): + Modules: Fix spelling 'To distributed' -> 'To distribute' + Teach find_* commands to ignore some paths + Add platform files for BlueGene/P systems + +Zach Mullen (12): + Checksums on CTest submit files, and retry timed out submissions. + Cross-platform fixes for checksum/retry code + Fix subscript out of range crash + CTest should resubmit in the checksum failed case + Testing for CTest checksum + Mock checksum failure output for old CDash versions + Checksum test should use CMAKE_TESTS_CDASH_SERVER + Fix cycle detection for test dependencies + More robust cost-based scheduling impl + Fix hard-coded CDash URI in version query + Added CTest command --print-labels + We shouldn't ask CDash for its version info until/unless we actually need it. + +No changes in CMake 2.8.2 since 2.8.2-rc4. + +Changes in CMake 2.8.2-rc4 (since 2.8.2-rc3) +-------------------------------------------- +Bill Hoffman (1): + Fix for bug #10859, ctest exit exception incorrectly reported. + +Brad King (3): + Run CMake.HTML test without net access (#10857) + Run CMake.HTML test with older xmllint (#10857) + CTest: Parse empty Git commits correctly + +David Cole (2): + Qualify name of extraction location with ExternalProject name. + For VS10: Really use full path file names. + +James Bigler (1): + Add support for the emulation version of the cudart library. + +Mathieu Malaterre (1): + Cleanup FindOpenSSL. Add support for win64 installation. + +Zach Mullen (1): + Parallel CTest hangs if serial test has depends + +Changes in CMake 2.8.2-rc3 (since 2.8.2-rc2) +-------------------------------------------- +Brad King (1): + Preserve ENV{MAKEFLAGS} in CMake script mode + +David Cole (4): + Remove "Microsoft Visual Studio .NET" from VS8 and VS9 find modules. + Use full path file names in generate.stamp.list. + Use full path file names to express dependencies. + Look in the ctest ini file for GitCommand. + +James Bigler (2): + Fixed: CUDA_VERSION_MAJOR/MINOR now computed after first run. + CUDA_VERSION variable passed to REGEX needs quotes to work when not defined. + +Mathieu Malaterre (1): + Cleanup FindDCMTK (using foreach). Fix linking on win32 static libs. + +Zach Mullen (2): + Do not exit if stoptime is passed. + Document ctest_build() TARGET option + +Changes in CMake 2.8.2-rc2 (since 2.8.2-rc1) +-------------------------------------------- + +Bill Hoffman (1): + Make sure libarchive uses cmzlib and not the system libz if found. + +Brad King (12): + Use forward slashes for objects in response files + Use platform variable for response file flag + Use response file for objects on MinGW and MSYS + Generalize CTest.Update* test dashboard script helpers + ctest_update: Support custom Git update command + ctest_update: Support Git upstream branch rewrites + Fix CMake data and doc paths in Cygwin package + Document scope of source file properties + Run CTest.NoNewline test using built CMake + Tru64: Place cmOStringStream vtable uniquely (#10541) + Enable BootstrapTest on MSYS + Tru64: Use full-path include directives in Makefiles (#10569) + +Christoph Watzl (1): + Fix nested source groups with VS 10 (#9863) + +Clinton Stimpson (2): + Support pthreads on irix. + Remove macro for querying qmake for qmake variables. + +David Cole (2): + Fix issue #10346. Error if SOURCE_DIR is empty. + Remove CTestTest3. + +Zach Mullen (1): + Extra coverage glob should subtract the explicitly defined excluded files + +Changes in CMake 2.8.2-rc1 (since 2.8.1): +- Build on Tru64 (#10542) +- Build on mingw-w64 +- Build on old Sun (#10550, #10543) +- CPack: Add native BZip2 support +- CPack: Set compression type in RPM spec (#10363) +- CPack: Try harder to initialize staging directory (#10793) +- CTest: Add --stop-time argument +- CTest: Cost data with '-j' +- CTest: Fix memory report +- CTest: Glob for uncovered files during coverage tests +- CTest: Option to specify cdash server +- CTest: PHP Coverage support +- CTest: Process tree kill for OpenBSD, FreeBSD, kFreeBSD, GNU/Hurd +- CTest: Report failure in Update.xml +- CTest: Submit author email in Update.xml +- CTest: Teach ctest_update about Git submodules +- CTest: Teach ctest_update to handle Git upstream branch rewrites +- Cygwin: Export all symbols with ENABLE_EXPORTS (#10122) +- Do not list file names during 'cmake -E tar xz' +- Documentation: Comply with "XHTML 1.0 Strict" +- Documentation: Fix typo in CMAKE_LIBRARY_PATH (#10291) +- Documentation: Fix typo in HAS_CXX docs (#10578) +- Documentation: More consistent command signatures +- Eclipse: Do not add INCLUDE to environment twice +- Enable extra CodeBlocks generator on Cygwin +- ExternalProject: Support .zip and .bz2 archives, MD5 verification +- ExternalProject: Reconfigure when args change (#10258) +- ExternalProject: Support Git, SVN username/password +- FindCurses: Fix for cygwin ncurses package +- FindHSPELL: Version support +- FindJava: Error if version is not found only when REQUIRED +- FindJava: Support runtime and development components (#9840) +- FindKDE4: Prefer kdeconfig results over system paths +- FindMPEG: Check for 'vo' library +- FindPNG: Support png 1.4 versioned lib names (#10551) +- FindPkgConfig: Add QUIET keyword to pkgconfig macros (see #10469) +- FindZLIB: GnuWin32 support, version support (#5588) +- FindwxWidget: Fix CXX flag parsing (#10209) +- Fix .pdb name attribute in VS project files (#10614) +- Fix CodeBlocks to work with Fortran-only +- Fix VS 2010 custom commands (#10503) +- Fix VS 6 support for COMPILE_DEFINITIONS_MINSIZEREL (#10700) +- Fix cross-compiling from Linux to iPhone (#10526) +- Fix documentation typos +- Fix g95 Fortran compiler support +- Fix uname masking in file(WRITE) and write_file (#10789) +- GetPrerequisites: Provide an override hook +- Handle non-ASCII terminators in file(STRINGS) +- Module fixes: FindPythonLibs, FindQt4, FindX11, FindwxWidgets +- PathScale Fortran compiler tool detection +- Qt4 OpenGL framework fix +- Qt4ConfigDependentSettings.cmake Qt4Macros.cmake UseQt4.cmake +- Recognize ARM ABI/EABI with GNU compilers +- Recognize Clang compiler +- Search basic directories on "Generic" platform +- Set MSVC* variables consistently on all generators, and test +- Support SunPro C++ 5.11 on Linux (new compiler) +- Support VS 10 Express (related to #10670) +- Support compression with 'cmake -E tar' +- Support multiple arguments in CC,CXX,FC environment variables +- Support per-configuration librarian flags (#10768) +- Support per-platform initial ASM language flags (#10577) +- Use Fortran ABI detection results conservatively +- Use libarchive to replace the unmaintained libtar +- UseQt4: Support QtMultimedia (#10675) +- bootstrap: Fix make tool detection (#10544) +- cmake-gui: Add simple grouped view +- cmake-gui: Support build tree under symlink (#9975) +- Cleanup modules FindASPELL, FindAVIFile, FindBZip2, FindDart, + FindEXPAT, FindGCCXML, FindGLU, FindHSPELL, FindJasper, FindLibXml2, + FindLibXslt, FindMPEG, FindOpenAL, FindPhysFS, FindQuickTime, + FindSubversion, FindZLIB. + +Changes in CMake 2.8.1 +- Fix failing test on cygwin +- Add a new serach path for MPICH2 + +Changes in CMake 2.8.1 RC 5 +- Fix FindQt4 to work with OpenGL on the mac +- Add .git .bzr and .hg to the list of default CPack ignore directories. + +Changes in CMake 2.8.1 RC 4 +- CTest: Do not hide test GUI windows (fixes 2.8.0 regression) +- Documentation: Clarify CMAKE_MODULE_PATH variable +- FindQt4: Add support for QtDeclartive module +- FortranCInterface: Fix PathScale detection +- Suppress GNU flag -fPIC on Windows (fixes 2.8.1-rc1 regression) + +Changes in CMake 2.8.1 RC 3 +- Add CMAKE_XCODE_ATTRIBUTE_ interface to set compiler (#9125) +- Fix Eclipse files for targets in subdirectories (#9978) +- Fix custom command rule hashes to avoid extra rebuilds +- Print non-make generator name in initial compiler test + +Changes in CMake 2.8.1 RC 2 +- CPack: Avoid deleting long PATH values with NSIS (#10257) +- CTest: Fix and test cost-based test scheduler +- CTest: Fix and test git updates for case of out-dated index +- CTest: Fix regression caused by fix for (#2336) in rc1 +- CTest: Setup command-line dashboard support with Git +- FindCUDA: Improve docs, use -rpath on Apple, fix dependency scanning +- Fix OS X deployment-target and sysroot defaults (#9959,#9898,#10155) +- Recognize the Compaq Fortran compiler + +Changes in CMake 2.8.1 RC 1 +- Add "NMake Makefiles JOM" generator +- Add PathScale compiler support +- Add per-configuration OUTPUT_DIRECTORY properties +- Add per-target OSX_ARCHITECTURES property +- check_type_size(): Handle mixed-size universal binaries +- CPack: Document Mac generators +- CPack: Improve RPM spec files +- Create CMAKE_FORCE_Fortran_COMPILER for cross-compiling +- CTest: Add --http1.0 command-line option +- CTest: Add --timeout command-line option +- CTest: Do not munge UTF-8 output in XML files +- CTest: Document CTEST_USE_LAUNCHERS option +- CTest: Fix killing of whole test process trees +- CTest: Handle failure of running invalid executables +- CTest: Honor the -C arg to ctest (#2336) +- CTest: Improve host system introspection +- CTest: Optionally randomize test order (--schedule-random) +- CTest: Skip tests with unsatisfied REQUIRED_FILES test property +- CTest: Submit arbitrary results with ATTACHED_FILES test property +- ctest_build(): Enhance signature +- ctest_start(): Add APPEND option +- ctest_start(): Move CTEST_CHECKOUT_COMMAND from ctest_update +- ctest_update(): Submit global tree revision in Update.xml +- Cygwin: Do not export all symbols from DLLs (#10122) +- Cygwin: Name DLLs with SOVERSION, not VERSION (#10122) +- Detect 32/64-bit Windows with Intel compiler +- Eclipse generator enhancements +- ExternalProject: Add TIMEOUT parameter +- FindCUDA: Respect CUDA version differences +- FindCURL: Find import libraries on Windows +- FindDCMTK: Look in more places +- FindGTest: Handle spaces better (#10065) +- FindGTK2: Look in fink locations on Mac OS X +- FindHDF5: Follow find-module API conventions +- FindJava: Support for versioned find +- FindJNI: Honor find_package() REQUIRED and QUIET options +- FindMPI: Improve Windows support +- FindOpenSSL: Fix MinGW support +- FindPythonLibs: Look in config for static library +- FindQt4: Misc enhancements, sync with KDE vesion +- FindRuby: Fix version convention on Windows +- FindX11: Improve documentation +- Fortran: Detect address size (#10119) +- FortranCInterface: Honor user flags +- Improve VS 2010 beta2 support +- link_directories(): Treat relative paths consistently (CMP0015) +- Modernize FindLibXslt and FindLibXml.cmake +- Refactor platform info to simplify adding new compilers +- Support cross-compiling versioned DLLs +- UseQt4: Provide dependencies only for static Qt (#10021) +- Address issues: + #2336, #3571, #5041, #7541, #8725, #9011, #9042, #9054, #9163, + #9171, #9450, #9697, #9764, #9782, #9792, #9862, #9894, #9913, + #9916, #9917, #9918, #9949, #9965, #9970, #9982, #9985, #10003, + #10014, #10021, #10032, #10055, #10060, #10065, #10114, #10119, + #10122, #10126, #10136. + +Changes in CMake 2.8.0 Release +- CPack: Honor CPACK_NSIS_DISPLAY_NAME (fixes regression) + +Changes in CMake 2.8.0 RC 7 +- Partially sync FindQt4 with KDE version +- Improve implementation of fix for #9090 +- Fix CTest infinite loop when test executable could not be found +- Fix #9833: Document ctest --help-command +- FindCUDA: Fix -fPIC from being used on executable object files +- Fix #9654: %files section in spec file should not list directories +- Fix #9851: Better STRING(RANDOM) seeding +- Fix double bootstrap build for in source builds +- Fix CTest to use allowed value for valgrind --num-callers +- Remove non-language implicit link dependencies +- Implement LINK_FLAGS_ property on Xcode + +Changes in CMake 2.8.0 RC 6 +- Partially sync FindQt4 with KDE version +- Fix #9090: Teach CTest subdirs() command to handle absolute paths +- Fix CTest bug that could start a test twice + +Changes in CMake 2.8.0 RC 5 +- CTest now detects cycles in test dependency graph +- Warn on set(PARENT_SCOPE) at top scope +- Fix Xcode <= 2.0 projects with CMAKE_BUILD_TYPE +- Fix flags for Intel Fortran on Windows +- Fix #2199: UseSWIG documentation for swig_generated_file_fullname +- Fix #7915: UseSWIG interaction with JNI +- Fix #8971: FindOpenSSL now works on windows +- Fix #9124: CPackDeb documentation +- Fix #9722: cmake-gui reports error when not able to create build directory +- Fix #9767: Match more valgrind-reported leaks in CTest memcheck +- Fix #9777: Sync CMakeDetermineJavaCompiler paths with FindJava +- Fix #9793: FindJNI should find matching jni.h and jni_md.h +- Fix #9817: FindJNI on Solaris +- Fix FindHDF5 when hdf5.h exists without H5pubconf.h +- Fix FindZLIB to follow variable name conventions +- Fix invalid use of auto_ptr on array +- Mention temp var convention in Modules/readme.txt documentation + +Changes in CMake 2.8.0 RC 4 +- Fix try_compile when file cannot be found +- Add new module to test manifest installation issues on windows. +- Add more test coverage +-Improvements in finding MPI on windows. ENH: reorganized searching mpi for mpi components (include,lib,bin) using a single set of search paths instead of seperately mainted lists of paths for each. +- Look for nvcc in the 32 bit bin directory before the 64 bin directory. +- BUG: hardcore some values so output matches cmVS10CLFlagTable.h (addresses bug #9753) +- Avoid Intel linker crash in BuildDepends test +- Fix Intel Fortran SHARED libraries on Linux +- Fix working dir issue for ctest +- Fix if() command and CMP0012 OLD/NEW behavior +- Allow for /D to change install directory on the command line for NSIS +- Move SetErrorMode around calls to generate and configure instead of setting it for the whole application for cmake-gui on windows. Allows for bad installs of windows shell programs to not break file completion. +- Fix Intel and MinGW Fortran DLL import libraries +- Fix Xcode dylib version default +- Fix the showing of non-cpp files in the IDE for VS 10 +- Fix optionally-valued booleans in VS 10 flag table +- Detect and set Unicode character set in VS 10 +- Add support for the g95 Fortran compiler +- Test all target types in Fortran +- Add Xcode file association for Fortran +- Fix VS 10 flag table for precompiled headers +- Fix VS 10 .sln files for Windows Explorer +- Fix Microsoft.Cpp.$(Platform).user.props in VS10b2 +- Fix up file(DOWNLOAD ) a bit, better error checking and uses of long not double for timeout as curl needs, bug# 9748 +- Add a VS 10 Win64 generator +- Fix for bug#9686 convert java_home to a cmake path before using. +- fix for bug# 9751, add check for MSVC10 +- Fix for bugs #9756, #9690 and #9755, header files were not included, and link_directories we incorrect +- Add a module to test an install tree to verify that the MS CRT version is correct. +- Fix seg fault for empty ENV{} call bug #9747 +- Better fix for finding the MSBuild that matches the VS 10 install. +- make testing the CodeBlocks and Eclipse generators easier by not requiring the CMAKE_EDIT_COMMAND variable +- Do not link library dependencies in VS solutions +- Ctest was broken for subdirs. Restored working directory state for tests so that their executables could be found. +- Fixes version detection using osg/Version on Mac OSX when OSG is installed as a framework +- Avoid C++ linker language in VS Fortran project +- Avoid duplicate ZERO_CHECK in VS solutions +- Fixed bug 8319, search for the Python shared library in the standard locations. +- Fix bug#9714, should not crash when version file is not where it should be... +- Fix ctest output alignment for cases where total tests run is not the same width as max test index. +- make it more robust wrt. #9621 +- Add another possible error message that curl might emit with an empty drop location. +- Fix issue #5668 - use CollapseFullPath when determining if covered file is within source or binary tree. Allows gcc/gcov coverage analysis using MinGW on Windows. +- CTest-side support for compiler name and compiler version information. Requires CDash update to show on CDash. +- Add a bunch more testing coverage. + +Changes in CMake 2.8.0 RC 3 +- CTest Added OS Platform (cpu architecture) detection support to windows system +- Several minor FindBoost changes to address posts on mailing list +- Resolve #9685: Fix include dir to be correct path for gnutils +- Fix color check for dependency scanning +- Remove CMP00015 for now as it breaks more things than it fixes +- Reduce duration of ctest_sleep arguments. Add SmallAndFast project. Replace kwsys with SmallAndFast to make CTestTest faster. (I will keep an eye on coverage results after this commit and make sure we still have equivalent ctest coverage.) +- Do not use -fPIC to link executables +- Split Borland compiler information files +- Trimmed off the newline from sw_vers output on mac, it could cause xml parsing errors if left in +- Check for openssl-linked option with Qt 4.4+ before making ssl a dependency. +- Make Complex test of CMakeLib more optional +- Modernize FindVTK module +- Fix find_package() when _DIR is wrong +- Do not collapse path of NOTFOUND values +- More robust implicit link line detection regex +- fix Xcode 30 generator +- Use the correct CMake (the freshly built one) to drive the CMakeWizardTest. +- Support more special characters in file(STRINGS) +- Log implicit link line detection regex +- speedup C dependency scanning even more +- Avoid non-root copies of root-only targets +- Added better OS information for Mac OS X +- Use work-around from bug 4772 for C++ and Fortran +- FortranCInterface: Mangling for Intel on Windows +- cmake-gui don't allow consecutive generates without a configure. +- Fix Preprocess test for Intel on Windows +- Teach intel compiler on windows to place .lib files and .pdb files. +- CPack: Fix bash-isms in launch script +- BUG: #0009648 Change "The following tests FAILED" message to print on stdout rather than stderr +- Avoid (Unix|Windows)Paths.cmake multiple include +- When getting include dirs for moc, also watch for framework includes and use -F instead of -I. +- Find locally installed software first +- Add '#!/bin/sh' to cygwin-package.sh +- Fix permsissions of installed SquishRunTestCase.sh +- Fix module docs to be manpage (groff) friendly +- Support GNU/kFreeBSD +- Remove old Encoding field from CMake.desktop +- FindQt3: Prefer (moc|uic)-qt3 names over (moc|uic) +- Match width of ctest "Start xx: " line to line up with the end test line +- Remove old license from FindPkgConfig.cmake module +- Test target link information invalidation +- Invalidate target link info when necessary +- Use new style header generation and get rid of OBJECT_DEPENDS in tutorial +- Fix issue #8649 - move the location of CPACK_NSIS_EXTRA_INSTALL_COMMANDS so that it is not excluded from execution when 'Do not create shortcuts' is checked. +- add the additional features for the dbus macros from KDE's FindQt4.cmake +fc9f7a5 Fix warnings in CMake source code. +- Correct some typos in error messages in the string command. Add a test that covers more of the code implemented in cmStringCommand.cxx, especially the error handlers. +- Create INTERPROCEDURAL_OPTIMIZATION build feature +- Document CMAKE_CURRENT_LIST_FILE more precisely +- Fix the documentation to say what it really does. Bug #9638 +- document how the minimum version can be specified +- Fix warnings in CMake source code. Suppress rampant warnings emanating from Qt files. +- Add documentation for Cocoa flag and move Motif under X11 flag. + +Changes in CMake 2.8.0 RC 2 +- Fix FindQt4 so that QtHelp depends on QtNetwork +- Add missing copyright notice to CMake.cmake module +- Add alternative _UTILITY targets to all VS solutions +- FindGTest.cmake some bugfixes, also added public function for closer integration btwn GoogleTest & CTest, contributed by Dan Blezek. +- Eliminate ExternalProject's use of CMAKE_CFG_INTDIR subdir for Makefile generators. It was causing problems with parallel make -j invocations. Keep it for multi-configuration build systems so that Debug and Release stamp files remain separate. +- Fix for bug #9611, some more paths for OpenJDK. +- Fix get_filename_component() registry view with wow64 +- Fix warnings in CMake source code. +- Fix module definition file reference for VS6 NMake +- Fix for bug #9611 do not hard code archs for search paths of java, look at the machine type. +- Fix bug#9619 add a link to module maintainers page in readme.txt for Modules +- Add cmake-help-command function to emacs-mode +- Add initial XL C compiler flags for safer builds +- Split XL compiler information files +- Fix default install prefix on Haiku +- Fix use of module .def files for MS tools +- Add StringProperty options includeing /def: for VS 10 flag table +- Convert copyright to OSI BSD and clean up licenses +- ENH: Added ctest test coverage for a test timeout +- CTest honors test timeouts again. +- Remove ctest_submit from CTestTestParallel +- Fix shared library creation flag for XL on Linux +- Fix BUG: 0009612: --output-on-failure option doesn't work with + the new parallel CTest handler +- Removed support for cutil library and header file. +- Fixed CUDA_PROPAGATE_HOST_FLAGS, added path for Mac SDK. +- Make sure LINK_FLAGS are seen by generator, fix for part of bug#9613 +- Fix issue #9412 - remove RPATH from files copied by + BundleUtilities.cmake on Linux. Thank +- Fix support for OLD behavior of policy CMP0002 +- Fix issue #8818 - escape quotes in the license file when using the + DragNDrop cpack genera +- Fix .vfproj file version for Intel Fortran 10.1 +- Use BeAPI for per-user package registry on Haiku +- Correct comments and use ASM${ASM_DIALECT} env. var instead of ASM + env. var to initialize +- Fix bug #9529. +- Fix Windows GUI implib and image version in VS 6 +- Convert newlines from CRLF to LF +- Oops. Last commit did not create subdir before doing a touch on a + file in it. So it fails of a type that is expected to have a + location... +- Policies 14 and 15 will be first released in 2.8.0 +- Document full version number with policy default +- Simplify bootstrap script source dir detection +- Documentation fixes, new CUDA_PROPAGATE_HOST_FLAGS, changed output + directory. + +Changes in CMake 2.8.0 RC 1 + +- Qt based GUI cmake-gui is now the default GUI, MFC CMakeSetup is no + longer included in CMake. ccmake is still supported. +- cmake-gui supports multi-state values options. +- CMake now has cmake --build command that can build any CMake generated + project from the command line. +- Visual Studio 2010 beta support has been added. +- KDevelop generator now has color output for builds. +- CTest supports running tests in parallel with a -j N option. +- A new CTest CTEST_USE_LAUNCHERS option can be used to get better + dashboard error reports with make based tools. +- CTest has support for sub-projects and labels which can interact + with CDash. +- CTest now supports Git, Mercurial, and Bazaar. +- It is now possible to use DESTDIR in CPack for any CMake based projects + giving more flexibility on the final path names. +- The CPack Deb generator now computes the arch instead of hard coding it. +- Fortran/C mixed language projects made much easier. CMake now + automatically can compute the run time libraries for a compiler. In + addition, a new FortranCInterface module can determine the correct + name mangling needed to mix C and Fortran. +- Intel compiler support added to OSX, and support for embedded + manifests in the windows intel compiler was added. +- Depend scanning is now much faster with makefiles. +- Many FindQt4 improvements to stay working with current Qt releases +- FindMPI has improvements for windows. +- FindBoost has been updated to work with the most recent boost releases. +- New External Project Module. The 'ExternalProject_Add' function + creates a custom target to drive download, update/patch, configure, + build, install and test steps of an external project. +- xmlrpc dependancy has been removed +- CMAKE_OSX_DEPLOYMENT_TARGET cache variable has been created to set the + deployment OS for a build on OSX. +- Several new policies were added: + CMP0012 + The if() command can recognize named boolean constants. + CMP0013 + Duplicate binary directories are not allowed. + CMP0014 + Input directories must have CMakeLists.txt. + CMP0015 + The set() CACHE mode and option() command make the cache value + visible. +- Lots of bug fixes. diff --git a/ChangeLog.txt b/ChangeLog.txt new file mode 100644 index 0000000..81b90e0 --- /dev/null +++ b/ChangeLog.txt @@ -0,0 +1,86670 @@ +2009-09-23 14:13 zach.mullen + + * Tests/CMakeLists.txt: Uncommented the dependency of + CTestTestNoExe on CTestTestNoBuild so that it will work in + parallel now. + +2009-09-23 14:10 king + + * Source/cmGlobalXCodeGenerator.cxx: Add Xcode SYMROOT setting for + custom targets + + Xcode 1.5 writes helper scripts at the projectDirPath location + for targets that do not set SYMROOT. We now add SYMROOT to + custom targets so that all targets set it. This prevents Xcode + 1.5 from touching the source directory now that we always set + projectDirPath. + + See issue #8481. + +2009-09-23 14:07 zach.mullen + + * Tests/CTestTestParallel/lockFile.c: Make portable c for Parallel + test + +2009-09-23 14:01 alex + + * Source/: cmDepends.cxx, cmDepends.h, cmDependsC.cxx, + cmDependsC.h, cmDependsJava.cxx, cmDependsJava.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: Major optimization of C/C++ + dependency scanning. + + Now only the dependencies for the file where the dependencies + actually may have changed are rescanned, before that this was + done for all source files even if only one source file had + changed. This reduces e.g. on my machine the time for scanning + the dependencies of kdelibs/khtml/ when only one file + (khtml_global.cpp) has changed from around 7.5 seconds to 1.2 + seconds. + + The tests succeed, it does what I expected it to do on kdelibs, + and Brad also reviewed the patch, so I think it should be ok. + + Alex + +2009-09-23 13:09 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, QCMakeCacheView.cxx, + QCMakeCacheView.h: fix compile warnings + +2009-09-23 12:46 hoffman + + * Utilities/Release/: magrathea_release.cmake, release_cmake.cmake: + Handle older cvs clients that do not allow for the password to be + in the CVSROOT. + +2009-09-23 12:45 hoffman + + * Tests/CMakeLists.txt: Add nightly builds for linux windows and + mac. + +2009-09-23 11:38 zach.mullen + + * Tests/: CMakeLists.txt, CTestTestParallel/CMakeLists.txt, + CTestTestParallel/lockFile.c, CTestTestParallel/lockFile.cxx: Set + new ctest tests to always run, whether CTEST_TEST_CTEST is + enabled or not. Changed parallel test to be portable. + +2009-09-23 10:45 king + + * Source/kwsys/SystemTools.cxx: Fix KWSys SystemTools build on + cygwin with -mwin32 + + Commit "Optimize KWSys SystemTools::FileExists on Windows" + accidentally added "#undef _WIN32" when including on + cygwin, which breaks builds using the -mwin32 flag. This commit + removes that line and fixes the real error it was intended to + avoid. + +2009-09-23 09:00 zach.mullen + + * Tests/CTestTestParallel/test.cmake.in: CTestTestParallel now + submits to public dashboard for easier debugging + +2009-09-23 08:48 king + + * Source/cmDocumentVariables.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, + Tests/SystemInformation/SystemInformation.in: Teach Xcode + generator to set XCODE_VERSION + + We set the variable 'XCODE_VERSION' in the CMake language to the + Xcode version string (e.g. "3.1.2"). Platform config files may + use it later. + +2009-09-23 01:01 bigler + + * Modules/FindCUDA.cmake: Updated formatting of documentation plus + a little reorganization. + +2009-09-23 00:50 bigler + + * Modules/FindCUDA/run_nvcc.cmake: Added a command to make the + output directory. This is to fix the XCode build that uses a + different output directory than other systems, and rather than + try to match that we'll just make it. + +2009-09-23 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-22 18:44 clinton + + * Modules/FindQt4.cmake: add support for finding + qcollectiongenerator executable. fixes #9248. + +2009-09-22 18:29 clinton + + * Source/QtDialog/: CMakeSetup.cxx, CMakeSetupDialog.cxx: fix issue + 9346. add binary directory to window title to make it easier to + deal with multiple cmake-gui instances + +2009-09-22 17:08 hoffman + + * Utilities/Release/dash2win64_release.cmake: new windows build + machine for cmake + +2009-09-22 17:07 hoffman + + * Utilities/Release/vogon_cygwin.cmake: disable svn + +2009-09-22 16:28 clinton + + * Modules/FindQt4.cmake: Add support for Qt configured with custom + qtlibinfix (see issue 9571). Also fix CMP 15 warnings. + +2009-09-22 16:18 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + Fix Xcode project references to the source tree + + Xcode project source file references need to always be relative + to the top of the source tree in order for SCM and debug symbols + to work right. We must even allow the relative paths to cross + outside of the top source or build directories. + + For subdirectory project() command Xcode projects we use the + source directory containing the project() command as the top. + Relative paths are generated accordingly for each subproject. + + See issue #8481. + +2009-09-22 16:16 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: Optionally + force conversion to relative path + + In cmLocalGenerator::ConvertToRelativePath we normally convert to + relative path only if the local and remote paths both lie inside + the source tree or both lie inside the build tree. This commit + adds an optional 'force' argument to allow conversion even when + this rule is violated. + +2009-09-22 16:12 hoffman + + * bootstrap: Make sure KWSYS_DO_NOT_CLEAN_PUTENV is defined at + bootstrap time for cmake in the bootstrap script. + +2009-09-22 16:02 king + + * Modules/CMakeDetermineCompilerABI.cmake: Skip implicit link info + for multiple OS X archs + + Implicit link information contains architecture-specific + libraries and directories. The link information cannot be + explicitly specified safely when CMAKE_OSX_ARCHITECTURES contains + more than one architecture. + + As a result, we currently cannot support mixed-language + C++/Fortran targets and OS X universal binaries simultaneously. + In order to avoid conflicts for simple C/C++ cases, we now simply + skip detection of implicit link information in this case. + +2009-09-22 15:58 hoffman + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in: Can not use + cmakedefine in kwsys because bootstrap of cmake does not support + it. + +2009-09-22 14:56 hoffman + + * Source/kwsys/: Configure.hxx.in, SystemTools.cxx: Put a flag in + that will stop system tools from deleting system environment + memory on exit, as it can cause gcov to crash the programs. + +2009-09-22 14:40 alex + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: Rescan dependencies also if + CMakeDirectoryInformation.cmake has changed. + + If CMakeDirectoryInformation.cmake is newer than depend.internal + the include directories may have changed, so dependencies need to + be scanned again. Ok by Brad. + + Alex + +2009-09-22 13:02 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: Optimize + KWSys SystemTools::FileExists on Windows + + We optimize this method by using the GetFileAttributesExA native + Windows API to check for file existence when possible. For real + Windows builds we always use it. For Cygwin we use + cygwin_conv_to_win32_path to get a native Windows path if + possible and otherwise fall back to 'access'. + + Cygwin-to-Windows path conversion and cache by Wojciech Migda. + See issue #8826. + +2009-09-22 12:05 zach.mullen + + * Tests/: CMakeLists.txt, CTestTestParallel/CMakeLists.txt, + CTestTestParallel/CTestConfig.cmake, + CTestTestParallel/lockFile.cxx, CTestTestParallel/test.cmake.in: + Added tests for ctest parallel options (PARALLEL_LEVEL, + PROCESSORS, RUN_SERIAL) + +2009-09-22 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-21 23:42 lowman + + * Modules/FindBoost.cmake: Make Boost easier to find + +2009-09-21 23:07 clinton + + * Modules/FindQt4.cmake: Fix issue 9581. Qt 4.5+ needs + gobject-2.0. + +2009-09-21 22:38 lowman + + * Modules/: FindCxxTest.cmake, FindGTK2.cmake, + FindOpenSceneGraph.cmake, FindProtobuf.cmake: Add a blank line to + my contributed find modules to prevent copyright info from + showing up in CMake docs + +2009-09-21 22:21 lowman + + * Modules/FindBoost.cmake: Fix Bug #9158: FindBoost.cmake does not + work properly with nmake and icl + +2009-09-21 17:22 hoffman + + * Utilities/Release/release_cmake.sh.in: Use ctest -j to speed up + tests for release builds. + +2009-09-21 17:19 hoffman + + * Utilities/Release/release_cmake.cmake: Do not require a cvs login + for checkout. + +2009-09-21 15:29 zach.mullen + + * Source/CTest/cmCTestBatchTestHandler.cxx: More SLURM + experimentation (ctest batch mode) + +2009-09-21 15:26 hoffman + + * Tests/CMakeLists.txt: For the complex tests since they link to + the CMake library make sure that they are built with the type of + build. + +2009-09-21 14:58 zach.mullen + + * Source/CTest/cmCTestBatchTestHandler.cxx: Fixed a slurm batch + argument identifier. + +2009-09-21 14:21 zach.mullen + + * Source/CTest/: cmCTestBatchTestHandler.cxx, + cmCTestBatchTestHandler.h: Need to quote args when generating + batch scripts from ctest + +2009-09-21 13:40 zach.mullen + + * Source/CTest/cmCTestBuildHandler.cxx, Tests/CMakeLists.txt: + Re-enabled failing tests; fixed ctest_build output to be + consistent in the error condition across different make programs + so that these tests would pass. + +2009-09-21 13:18 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: Fix Bug #8332, add support for + .pch files for Xcode. + +2009-09-21 13:15 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: Fix Bug #8928, add support for + .xib files for Xcode. + +2009-09-21 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-20 23:55 lowman + + * Modules/FindProtobuf.cmake: Fix glitch where we were accidently + unsetting CMAKE_FIND_LIBRARY_PREFIXES + +2009-09-20 21:15 lowman + + * Modules/FindProtobuf.cmake: Forgot to mark Protobuf cache + variables as advanced + +2009-09-20 20:20 lowman + + * Modules/FindALSA.cmake: [NEW Module] FindAlsa audio library + (Advanced Linux Sound Architecture) + +2009-09-20 20:12 lowman + + * Modules/FindProtobuf.cmake: [NEW Module] Find and use Google's + Protocol Buffers library & compiler + +2009-09-20 11:33 lowman + + * Modules/FindBoost.cmake: Fix boost library detection with Sun + Studio compiler (Issue #9153) + +2009-09-20 09:42 hoffman + + * Tests/CMakeLists.txt: Disable test as it fails on every system. + +2009-09-20 08:03 lowman + + * Modules/FindThreads.cmake: Improve readability + +2009-09-20 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-19 13:02 alex + + * Source/cmDepends.cxx: Minor optimization in dependency checking. + + When reading the depend.internal file, check only once for every + depender whether it exists, instead of repeatedly in a loop for + each dependee. Within that function it can only change of the + depender is removed. This is taken care of. This reduces the + number of access() calls in kdelibs/khtml from 180000 to 90000 + (i.e. 50%), and reduces the time for that (without the actual + scanning) from 0.3 s to 0.21 s on my system. + + Alex + +2009-09-19 12:00 king + + * Source/: CMakeLists.txt, cmGlobalXCode21Generator.cxx, + cmGlobalXCode21Generator.h, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h: Remove cmGlobalXCode21Generator + subclass + + This subclass of cmGlobalXCodeGenerator only provided two virtual + method overrides, and it made construction of the Xcode generator + instance complicated. This commit removes it and replaces the + virtual methods with tests of the Xcode version. The change + removes duplicate code. + +2009-09-19 10:14 king + + * Modules/CMakeCCompiler.cmake.in, + Modules/CMakeCXXCompiler.cmake.in, + Modules/Platform/Darwin-GNU-C.cmake, + Modules/Platform/Darwin-GNU-CXX.cmake, + Modules/Platform/Darwin-GNU.cmake, Modules/Platform/Darwin.cmake, + Source/cmLocalGenerator.cxx: Fix check for -isysroot on OS X + + Previously we checked for this flag by parsing the version number + of GCC out of 'gcc --version', but this is not reliable because + the format can vary greatly. Now we run 'gcc -v --help' and look + for '-isysroot' in the list of options. + + We also now store the result on a per-language basis in the + per-compiler info file "CMakeCompiler.cmake". This is + necessary to make it accessible from try-compile projects so that + they generate correctly. + +2009-09-19 04:33 alex + + * Modules/Compiler/: Intel-C.cmake, Intel-CXX.cmake: The + preprocessing and assembly rules also need the , + otherwise different reults are created. + + Alex + +2009-09-19 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-18 15:16 hoffman + + * Source/cmLocalGenerator.cxx: Only do the OSX arch stuff on OSX. + +2009-09-18 15:01 zach.mullen + + * Tests/CMakeLists.txt: Disabling CTestTestNoBuild pending + investigation of odd g++ output issues. + +2009-09-18 14:22 hoffman + + * Modules/Platform/Darwin.cmake, Source/cmLocalGenerator.cxx: Add + detection of gcc versions that do not support isysroot option and + do not use it for them. + +2009-09-18 14:02 zach.mullen + + * Tests/CMakeLists.txt: Apparently, on FarAway the presence of + errors during ctest_build does not cause the calling ctest to + return an error condition. + +2009-09-18 13:34 zach.mullen + + * Tests/CMakeLists.txt: Cosmetic change to test CMakeLists + +2009-09-18 12:56 david.cole + + * Modules/ExternalProject.cmake: Better error message tells user + possible ways to resolve the error. + +2009-09-18 12:16 zach.mullen + + * Tests/: CMakeLists.txt, CTestTestCrash/CMakeLists.txt, + CTestTestCrash/CTestConfig.cmake, CTestTestCrash/crash.cxx, + CTestTestCrash/test.cmake.in, CTestTestFailure/CMakeLists.txt, + CTestTestFailure/CTestConfig.cmake, CTestTestFailure/badCode.cxx, + CTestTestFailure/testNoBuild.cmake.in, + CTestTestFailure/testNoExe.cmake.in: Added test coverage for + ctest. Covers WILL_FAIL condition, tests that do not build, + tests that segfault, and test executable not found (bad command), + as well as some pass and fail regular expressions. + +2009-09-18 10:28 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: Fix the build for version 2.5 + of Xcode. + +2009-09-18 09:49 king + + * Tests/TryCompile/CMakeLists.txt: Fix CHECK_(C|CXX)_COMPILER_FLAG + macro test + + The flag "-_this_is_not_a_flag_" was not rejected by GCC 4.0 on + older Mac OS X. We now use "---_this_is_not_a_flag_" instead, + which will hopefully be rejected by all compilers. + +2009-09-18 09:49 king + + * Modules/: CheckCCompilerFlag.cmake, CheckCXXCompilerFlag.cmake: + Fix CHECK_(C|CXX)_COMPILER_FLAG for XL and SunPro + + These compilers warn and return 0 for unrecognized flags. We fix + the compiler flag check macros by looking for a warning in the + output. We also update the regex for GNU on older Macs. See + issue #9516. + +2009-09-18 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-17 17:16 king + + * Modules/: CheckCCompilerFlag.cmake, CheckCXXCompilerFlag.cmake: + Fix CHECK_(C|CXX)_COMPILER_FLAG for HP + + This compiler warns and returns 0 for unrecognized flags. We fix + the compiler flag check macros by looking for a warning in the + output. See issue #9516. + +2009-09-17 16:09 hoffman + + * Source/cmLocalGenerator.cxx: Fix case where no archs are found on + older macs. + +2009-09-17 15:33 king + + * Tests/TryCompile/CMakeLists.txt: Test CHECK_(C|CXX)_COMPILER_FLAG + macros + + This teaches the TryCompile test to check that the compiler flag + check macros correctly reject a bad flag. See issue #9516. + +2009-09-17 15:32 king + + * Modules/: CheckCCompilerFlag.cmake, CheckCXXCompilerFlag.cmake: + Fix CHECK_(C|CXX)_COMPILER_FLAG for GNU and MSVC + + These compilers warn and return 0 for unrecognized flags. We fix + the compiler flag check macros by looking for a warning in the + output. See issue #9516. + +2009-09-17 15:29 king + + * Modules/: CheckCSourceCompiles.cmake, + CheckCXXSourceCompiles.cmake: Add FAIL_REGEX to + CHECK_(C|CXX)_SOURCE_COMPILES + + This teaches the CHECK_C_SOURCE_COMPILES and + CHECK_CXX_SOURCE_COMPILES macros to recognize a FAIL_REGEX + option. If they see the regular expression in the output of the + test compilation, the check fails. + +2009-09-17 15:28 king + + * Modules/: CheckCCompilerFlag.cmake, CheckCSourceCompiles.cmake, + CheckCSourceRuns.cmake, CheckCXXCompilerFlag.cmake, + CheckCXXSourceCompiles.cmake, CheckCXXSourceRuns.cmake: Cleanup + generic compiler check macro documentation + + This commit improves formatting and style of the documentation + for the general-purpose compiler check macros: + + CHECK_C_COMPILER_FLAG + CHECK_C_SOURCE_COMPILES + CHECK_C_SOURCE_RUNS + CHECK_CXX_COMPILER_FLAG + CHECK_CXX_SOURCE_COMPILES + CHECK_CXX_SOURCE_RUNS + + This sytle is more consistent with CMake command documentation. + It also looks nicer in the generated documentation text files. + +2009-09-17 13:08 alex + + * Modules/CMakeFindEclipseCDT4.cmake: The check for include dirs + and builtin macros also works with the Intel compiler + + Alex + +2009-09-17 11:52 hoffman + + * Modules/Platform/Darwin.cmake, Source/cmGlobalXCodeGenerator.cxx, + Source/cmLocalGenerator.cxx: Fix for bug #9466. Change the + implementation of OSX arch lists. If no ARCHs are specified by + the user then no flags are set. We no longer use + CMAKE_OSX_ARCHITECTURES_DEFAULT. + +2009-09-17 09:18 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: Bug #9430, recognize + the FR flag + +2009-09-17 08:42 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx: Do not call CollapseFullPath for + PDB file names + + Some vendor tools convert PDB file names given on the command + line to lower-case before creating the file. When CMake places a + mixed-case PDB file name into the build system, the file does not + exist the first time and it is written with mixed case. After + the first build though the native tool has created a lower-case + version of the file. If CMake does CollapseFullPath again, the + file exists so the actual-case lookup gets the lower-case name. + This causes the build files to change so the project rebuilds. + + The solution is to avoid calling CollapseFullPath for files + generated by the build. In the case of PDB files we already + construct them from paths that have been collapsed, so we can + just skip the call altogether. See issue #9350. + +2009-09-17 08:25 king + + * Source/cmMakefile.cxx: Remove old check for duplicate + subdirectories + + In cmMakefile::AddSubDirectory we were checking for addition of + the same source directory multiple times. However, the check + code was incorrect because it compared pointers instetad of + pointed-to strings. Since the check was written, a better check + was added right after it to enforce unique binary directories (in + which case duplicate sources are fine). This commit simply + removes the old-style check code. + +2009-09-17 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-16 21:02 hoffman + + * Source/cmake.cxx: Fix typo in name + +2009-09-16 18:01 alex + + * Source/: cmExtraEclipseCDT4Generator.h, + cmExtraEclipseCDT4Generator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: Major improvement of the + generated targets in Eclipse. + + Before this change all targets were displayed in the top level + directory of the project. Now the targets are displayed in the + correct directory. The targets "clean" and "all" are now created + in every subdirectory. Also now the targets for just compiling + one file, preprocessing one file, assembling one file are are + created for Eclipse. Additionally all targets get a prefix now + in eclipse, so that they are sorted in a way which makes sense + (global targets first, then executable and libraries, then object + files, then preprocessed, then assembly). Also this prefix gives + the user a hint what the target is, i.e. whether it's a library + or an executable or something else. + + Alex + +2009-09-16 15:09 king + + * Tests/CMakeTests/: CMakeLists.txt, ConfigureFile-BadArg.cmake, + ConfigureFile-DirInput.cmake, ConfigureFile-DirOutput.cmake, + ConfigureFile-Relative.cmake, ConfigureFileTest.cmake.in: Create + CMake.ConfigureFile test for configure_file + + This test checks that configure_file() handles input and output + file arguments as documented. + +2009-09-16 15:09 king + + * Source/: cmConfigureFileCommand.cxx, cmConfigureFileCommand.h: + Teach configure_file to handle directory names + + This commit teaches configure_file how to handle directories for + input and output. It is an error if the input is a directory. + If the output is a directory we put the configured copy of the + input file in it with the same name. See issue #9537. + +2009-09-16 15:09 king + + * Source/: cmConfigureFileCommand.cxx, cmConfigureFileCommand.h: + Teach configure_file to handle relative paths + + The configure_file() command now converts relative output paths + to full paths using the current binary directory. Input relative + paths were already converted using the current source directory, + but this behavior was not previously documented. + +2009-09-16 15:09 king + + * Source/: cmConfigureFileCommand.cxx, cmConfigureFileCommand.h: + Fix typo in cmConfigureFileCommand ivar name + + Rename 'OuputFile' to 'OutputFile'. + +2009-09-16 15:09 king + + * Tests/CMakeTests/: CheckCMakeTest.cmake, FileTest.cmake.in: + Factor out CMake.File test result check for re-use + + The CMake.File test runs several scripts through "cmake -P" and + checks the output and result against known good values. This + commit factors out the checking code into a separate + CMakeCheckTest module. The module may be used by new tests. + +2009-09-16 14:37 alex + + * Source/cmExtraEclipseCDT4Generator.cxx, + Modules/CMakeFindEclipseCDT4.cmake: Put compiler defined macros + into eclipse project files + + Now gcc is queried also for the builtin definitions, and they are + then added to the .cproject file. This should make the + preprocessor highlighting in eclipse work better (#9272) Patch + mostly from Miguel. + + Alex + +2009-09-16 14:20 hoffman + + * Modules/FindJNI.cmake: Bug #09476, add more search paths for jni. + +2009-09-16 12:40 hoffman + + * Modules/UsePkgConfig.cmake: Fix for bug#9553, print a warning if + pkg-config is not found. + +2009-09-16 12:33 king + + * Modules/Platform/: Linux-VisualAge-CXX.cmake, Linux-XL-CXX.cmake: + Fix XL C++ compiler flags on Linux + + In Platform/Linux.cmake we add GNU flags as default for the + platform which breaks non-GNU compilers. Later we should + refactor these flag files to put compiler-specific flags only in + files loaded for each compiler. Until then this commit fixes the + XL C++ compiler flags on Linux by erasing the GNU flags. See + issue #9469. + +2009-09-16 11:49 hoffman + + * Source/CTest/cmCTestRunTest.cxx: Fix uninitialized errors. + +2009-09-16 11:44 king + + * Source/cmLocalVisualStudio7Generator.cxx: Generate proper Intel + Fortran project version + + The Intel Visual Fortran compiler plugin for MS Visual Studio may + be one of several versions of the Intel compiler. This commit + teaches CMake to detect the plugin version and set the version + number in .vfproj files. See issue #9169. + +2009-09-16 11:44 king + + * Source/: cmGlobalVisualStudio10Generator.h, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Generator.h, + cmGlobalVisualStudio9Generator.h, + cmGlobalVisualStudioGenerator.cxx, + cmGlobalVisualStudioGenerator.h: Create VS generator + GetRegistryBase method + + This method returns the registry key + + HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\ + + A protected GetIDEVersion method retrieves the version-specific + part of the key name. + +2009-09-16 09:52 king + + * Tests/FunctionTest/CMakeLists.txt: Test add_subdirectory inside + function + + This commit teaches the FunctionTest to check variable scope + behavior when a subdirectory is added inside a function call. + Any PARENT_SCOPE sets in the subdirectory should affect only the + function scope which called add_subdirectory and not its parent + scope. + +2009-09-16 09:51 king + + * Source/cmMakefile.cxx: Initialize directory scope with closure of + parent + + The commit "Improve dynamic variable scope implementation" + optimized function scopes using an efficient parent scope + pointer. However, the parent scope used to initialize a new + directory might not exist later (like add_subdirectory called + inside a function of the parent scope). This caused CMake to + crash when following the dangling pointer to the original parent + scope. + + We fix the problem in this commit by always computing the closure + of the parent scope at directory initialization time so that no + parent scope pointer is needed. See issue #9538. + +2009-09-16 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-15 02:38 bigler + + * Modules/: FindCUDA.cmake, FindCUDA/make2cmake.cmake, + FindCUDA/parse_cubin.cmake, FindCUDA/run_nvcc.cmake: Initial + version of FindCUDA script. Still needs documentation + formatting. + +2009-09-15 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-14 22:16 hoffman + + * Source/cmake.cxx: Fix for bug #8969, pick a better default + version for VS, and make it easier to add new versions of VS to + look for. + +2009-09-14 20:54 hoffman + + * Source/cmDocumentationFormatterHTML.cxx: Fix for bug# 5373, + include CMake verison in generated docs. + +2009-09-14 15:53 alex + + * Modules/FindPNG.cmake: fix #9152: find ZLIB quietly if PNG is + searched QUIETLY + + Alex + +2009-09-14 15:20 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: Bug #8356, add support for + image types in Xcode files. + +2009-09-14 14:59 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: Fix for bug #8807, add support + for CMAKE_EXE_LINKER_FLAGS_(config) to Xcode generator. + +2009-09-14 13:45 hoffman + + * Source/: cmake.cxx, kwsys/Glob.cxx, kwsys/Glob.hxx.in: Fix for + Bug #9190, -U did not work on case insensitive file systems + because of call to glob convert to regex that expected to work + with files. + +2009-09-14 13:42 hoffman + + * Source/cmIfCommand.h: Clarify documentation for if. + +2009-09-14 11:23 zach.mullen + + * Source/CTest/: cmCTestBatchTestHandler.cxx, cmCTestRunTest.cxx: + Removed fork-and-continue option from ctest generated batch + script entries + +2009-09-14 10:31 hoffman + + * Source/: cmDependsJavaParserHelper.cxx, + cmDependsJavaParserHelper.h: Fix open solaris build issue with + concept checking that breaks std vector for a class of itself. + Bug #9523. + +2009-09-14 09:34 hoffman + + * Modules/FindPythonLibs.cmake: Change FindPythonLibs to use the + standard _DIR instead of _PATH but stay backwards compatible + +2009-09-14 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-13 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-12 10:20 king + + * Source/CTest/cmProcess.cxx: Avoid shadowing std::vector member + + The cmProcess::Buffer class derives from std::vector. We were + using local variable 'data' in the GetLine method but this name + shadowed a member of vector with GNU. This renames it to 'text'. + +2009-09-12 06:25 alex + + * Modules/FindRuby.cmake: major improvement of FindRuby.cmake + + -now supports specifying minimum required version -now supports + ruby 1.8 and 1.9 -uses find_package_handle_standard_args() now + -fix #6212 and using a lot of ideas from the file attached there + + Alex + +2009-09-12 04:38 alex + + * Modules/FindRuby.cmake: use HINTS instead of PATHS and also look + for libruby-static.a (which is built by default) + + Alex + +2009-09-12 02:15 alex + + * Modules/CMakeASM-ATTInformation.cmake: Don't pass *.S files to + the assembler, they must go through gcc, because they must be + preprocessed + + Alex + +2009-09-12 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-11 17:15 hoffman + + * Source/CTest/cmCTestHandlerCommand.cxx: Fix for bug#9442, ctest + crash if CTEST_SOURCE_DIRECTORY was not set. + +2009-09-11 16:39 king + + * Tests/CMakeLists.txt: Test that CTest can handle missing newlines + + We create test 'CTest.NoNewline' to print output with no newline. + This tests CTest's ability to handle a missing newline. + +2009-09-11 16:20 king + + * Source/CTest/cmProcess.cxx: Fix new CTest output handling for no + newline + + When we clear the buffer for an output pipe after returning the + last partial line (without a newline) we need to set the partial + line range to empty. Otherwise the buffer object is left in an + inconsistent state. + +2009-09-11 13:34 hoffman + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx, + CTest/cmCTestTestHandler.cxx: Add label summary times to ctest + default output. Also, remove parallel time output. Add flag to + disable label summary. + +2009-09-11 12:26 king + + * Source/CTest/: cmCTestMultiProcessHandler.cxx, + cmCTestRunTest.cxx, cmCTestRunTest.h, cmProcess.cxx, cmProcess.h: + Rewrite CTest child output handling + + This commit fixes cmCTestRunTest and cmProcess to more + efficiently handle child output. We now use the buffer for each + child output pipe to hold at most a partial line plus one new + block of data at a time. All complete lines are scanned + in-place, and then only the partial line at the end of the buffer + is moved back to the beginning before appending new data. + + We also simplify the cmProcess interface by making + GetNextOutputLine the only method that needs to be called while + the process is running. This simplifies cmCTestRunTest so that + CheckOutput can be called until it returns false when the process + is done. + +2009-09-11 10:09 king + + * Source/CTest/: cmCTestMultiProcessHandler.cxx, + cmCTestRunTest.cxx, cmCTestRunTest.h: Initialize cmCTestRunTest + instances robustly + + All instances of this class need a cmCTestTestHandler, so we now + require one to construct it. The instance also provides the + cmCTest instance too. + +2009-09-11 10:04 king + + * Source/: cmCacheManager.cxx, cmCacheManager.h, cmake.cxx: Remove + barely-used cmCacheManager::AddCacheEntry + + The commit "Remove barely-used cmMakefile::AddCacheDefinition" + removed all but one use of the cmCacheManager method 'bool' + overload. This commit removes the other use and the entire + method, thus reducing code duplication. + +2009-09-11 10:03 king + + * Source/cmOptionCommand.cxx: Fix option() interpretation of + non-boolean values + + The commit "Remove barely-used cmMakefile::AddCacheDefinition" + broke option() calls that pass a non-boolean default value. We + restore the old behavior by always coercing the value to 'ON' or + 'OFF'. + +2009-09-11 08:17 king + + * Source/: CPack/cpack.cxx, CTest/cmCTestBuildHandler.cxx, + CursesDialog/cmCursesMainForm.cxx, cmCMakeMinimumRequired.cxx, + cmExecuteProcessCommand.cxx, cmFileCommand.cxx, + cmFindPackageCommand.cxx, cmPolicies.cxx, cmSetCommand.cxx, + cmSystemTools.cxx, cmUtilitySourceCommand.cxx: Add parentheses + around '&&' between '||' for gcc + + The GNU compiler warns about possible operator precedence + mistakes and asks for explicit parentheses (-Wparentheses). We + add the parentheses to silence the warning. This also fixes one + real logic error in the find_package() implementation by + correcting expression evaluation order. + +2009-09-11 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-10 16:59 king + + * Source/: cmMakefile.cxx, cmMakefile.h, cmOptionCommand.cxx, + cmPolicies.cxx, cmPolicies.h, cmSetCommand.cxx, cmSetCommand.h: + Create CMake Policy CMP0015 to fix set(CACHE) + + The set(CACHE) and option() commands should always expose the + cache value. Previously we failed to expose the value when it + was already set if a local variable definition hid it. When set + to NEW, this policy tells the commands to always remove the local + variable definition to expose the cache value. See issue #9008. + +2009-09-10 16:59 king + + * Source/: cmMakefile.cxx, cmMakefile.h, cmOptionCommand.cxx: + Remove barely-used cmMakefile::AddCacheDefinition + + The boolean overload of this method was used only to implement + option(). We re-implement option() in terms of the main method + and removes the now-unused signature. This removes some + duplicate code that had already fallen behind on changes (it was + not removing the local definition instead of setting it). + +2009-09-10 13:49 alex + + * Source/: cmExtraEclipseCDT4Generator.cxx, + cmExtraEclipseCDT4Generator.h: sync target generation with the + CodeBlocks generator + + Basically the code is now a copy of the one from the CodeBlocks + generator, maybe this could move into a common helper function + somewhere: -only insert GLOBAL targets from the toplevel + directory -don't insert the edit_cache target if it calls ccmake, + since this doesn't work in the output tab of Eclipse -add the + /fast targets + + Alex + +2009-09-10 13:44 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: As in the Eclipse + generator: don't insert the edit_cache target if it is ccmake, + since this doesn't work in the output tab of the IDE + +2009-09-10 11:18 zach.mullen + + * Source/CTest/: cmCTestBatchTestHandler.cxx, + cmCTestBatchTestHandler.h: Added some ctest batch capabilities + +2009-09-10 11:16 zach.mullen + + * Source/: CMakeLists.txt, CTest/cmCTestMultiProcessHandler.cxx, + CTest/cmCTestMultiProcessHandler.h, CTest/cmCTestRunTest.cxx, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestTestHandler.h: BUG: + Fixed segfault and bad reporting if a ctest executable could not + be found. Also added some batch testing code that is not yet + complete. + +2009-09-10 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-09 16:39 king + + * Tests/Fortran/CMakeLists.txt: Enable C and C++ first in Fortran + test + + CMake now looks for a Fortran compiler matching any C or C++ + compiler already enabled. We test this by enabling C and C++ + first in the Fortran test, which is what user projects will + likely do. + +2009-09-09 16:39 king + + * Modules/CMakeDetermineFortranCompiler.cmake: Bias Fortran + compiler search with C/C++ compilers + + When CMAKE_Fortran_COMPILER and ENV{FC} are not defined CMake + searches for an available Fortran compiler. This commit teaches + the search code to look for compiler executables next to the C + and C++ compilers if they are already found. Furthermore, we + bias the compiler executable name preference order based on the + vendor of the C and C++ compilers, which increases the chance of + finding a compatible compiler by default. + +2009-09-09 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-08 17:28 david.cole + + * Modules/ExternalProject.cmake: Missed another CMAKE_CFG_INTDIR + reference in the previously previous commit. + +2009-09-08 17:10 zach.mullen + + * Source/CTest/: cmCTestMultiProcessHandler.cxx, + cmCTestMultiProcessHandler.h, cmCTestTestHandler.cxx: ENH: ctest + now writes time cost data to a file after a test set is run, and + uses these time costs to schedule the processes the next time + ctest is run in that build tree. + +2009-09-08 16:11 david.cole + + * Modules/ExternalProject.cmake: Missed a CMAKE_CFG_INTDIR + reference in the previous commit. + +2009-09-08 15:55 king + + * Modules/: CMakeBuildSettings.cmake.in, + CMakeExportBuildSettings.cmake, CMakeImportBuildSettings.cmake, + UseVTK40.cmake: Drop old CMake "build settings" export/import + + The CMakeExportBuildSettings and CMakeImportBuildSettings modules + used to export compiler paths and flags from one project and + import them into another. The import process would force the + settings on the including project. + + Forcing settings helped long ago when compiler ABIs changed + frequently but is now just a nuisance. We've deemed the behavior + harmful so this commit simply removes it. The modules and macros + now error out if included or called from a project that requires + CMake 2.8 or higher. + +2009-09-08 15:37 david.cole + + * Modules/ExternalProject.cmake, + Tests/ExternalProject/CMakeLists.txt: Use more + verbose/descriptive names for the "public API" functions in the + ExternalProject.cmake module. Follow the cmake function naming + convention, using a ModuleFileName_ prefix. Locate stamp files + under a CMAKE_CFG_INTDIR subdir of the stamp dir so that debug + and release builds have separate stamp files for Visual Studio + builds. If no CMAKE_GENERATOR argument is given to + ExternalProject_Add, default to using the parent project's cmake + generator. + +2009-09-08 14:48 zach.mullen + + * Source/CTest/: cmCTestMultiProcessHandler.cxx, cmProcess.cxx: + BUG: Fixed extraneous newlines from ctest process output + +2009-09-08 13:39 zach.mullen + + * Source/: CTest/cmCTestMultiProcessHandler.cxx, + cmSetTestsPropertiesCommand.h, + CTest/cmCTestMultiProcessHandler.h, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h: ENH: Replaced the EXPENSIVE test + property with a COST test property taking a floating point value. + Tests are now started in descending order of their cost, which + defaults to 0 if none is specified. + +2009-09-08 10:16 zach.mullen + + * Source/CTest/: cmCTestRunTest.cxx, cmProcess.cxx, cmProcess.h: + BUG: Fixed issue where ctest would hang if a process terminated + with output in its buffers but no newline + +2009-09-08 09:12 zach.mullen + + * Source/CTest/cmCTestRunTest.h: Fixed warning + +2009-09-08 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-07 10:26 zach.mullen + + * Source/: CTest/cmCTestMultiProcessHandler.cxx, + CTest/cmCTestMultiProcessHandler.h, CTest/cmCTestRunTest.cxx, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestTestHandler.h, + cmSetTestsPropertiesCommand.h: ENH: Added ctest test options + PROCESSORS and RUN_SERIAL. These allow specification of resource + allocation for given tests running with the ctest -j N option. + RUN_SERIAL ensures that a given test does not run in parallel + with any other test. Also forced appending of "..." to the + longest test name in ctest. + +2009-09-07 10:12 king + + * Source/cmVisualStudio10TargetGenerator.cxx, + Source/cmVisualStudio10TargetGenerator.h, Tests/CMakeLists.txt: + Put custom commands in topological order for VS 10 + + Visual Studio 10 uses MSBuild to drive the build. Custom + commands appear in MSBuild files inside CustomBuild elements, + which appear inside ItemGroup elements. The Outputs and + AdditionalInputs elements of each CustomBuild element are + evaluated according to timestamps on disk. + + MSBuild does not use inputs/outputs to order CustomBuild steps + within a single ItemGroup or across multiple ItemGroup elements. + Instead we must put only unrelated CustomBuild elements in a + single ItemGroup and order the item groups from top to bottom + using a topological order of the custom command dependency graph. + + This fixes CustomCommand and ExternalProject test failures, so we + remove the expectation of these failures. + +2009-09-07 10:11 king + + * Source/: cmTarget.cxx, cmTarget.h: Save source dependencies from + custom command trace + + In each target we trace dependencies among custom commands to + pull in all source files and build rules necessary to complete + the target. This commit teaches cmTarget to save the + inter-source dependencies found during its analysis. Later this + can be used by generators that need to topologically order custom + command rules. + +2009-09-07 10:11 king + + * Source/: cmLocalVisualStudio10Generator.cxx, + cmLocalVisualStudioGenerator.cxx, cmLocalVisualStudioGenerator.h, + cmVisualStudio10TargetGenerator.cxx: Do Windows command line + escapes for VS 10 too + + Until now the VS 10 generator did no Windows command-line + escaping and just did XML escapes. This commit teaches the + generator to use the same command-line escape addition code used + by other generators. The script construction method + cmLocalVisualStudioGenerator::ConstructScript need not do XML + escapes. Each VS generator version adds the XML escapes + necessary for that version. + +2009-09-07 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-06 13:24 alex + + * Source/cmFileCommand.cxx: Try to fix the failing new + StringFileTest on HP-UX + + It seems that while(i=file.get(), file) iterates one character + too much on HP-UX, let's see whether while(file.get(c)) works, at + least this is given as example on + http://h30097.www3.hp.com/cplus/ifstream_3c__std.htm + + Alex + +2009-09-06 10:26 alex + + * Tests/StringFileTest/: CMakeLists.txt, test.bin: Add a test for + FILE(READ ... HEX) together with a tiny binary file. + + Alex + +2009-09-06 09:49 alex + + * Source/cmFileCommand.cxx: fix #9316: when converting binary data + to hex, also print the leading 0's + + Alex + +2009-09-06 05:43 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: Improve the algorithm + which skips targets so they are not added to the codeblocks GUI. + + -add all global targets from CMAKE_BINARY_DIR to the menu, but + not from the subdirs -add all utility targets to the menu, except + the Nightly/Experimental/Continuous-"sub"targets as e. + + Alex + +2009-09-06 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-05 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-04 18:19 david.cole + + * Modules/FindMPI.cmake: Oops. Close strings with double quotes. + Where they're supposed to be. + +2009-09-04 18:02 david.cole + + * Modules/FindMPI.cmake: Add MPICH2 and Microsoft HPC paths, add + paths to find mpiexec. Now it works better automatically on + Windows. Thanks to Dave Partyka for developing the patch. + +2009-09-04 17:01 hoffman + + * Source/CTest/cmCTestScriptHandler.cxx: Fix memory and process + leak in ctest_run_script. + +2009-09-04 16:43 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h: fix + focus fighting between search field and cache value editors + +2009-09-04 14:00 david.cole + + * Source/CTest/cmCTestSubmitHandler.cxx: Increase curl submit + timeout. A submit will timeout if there are 120 seconds of very + little activity. 30 seconds was too short. + +2009-09-04 13:50 zach.mullen + + * Source/CTest/: cmCTestRunTest.cxx, cmProcess.cxx, cmProcess.h: + Fixed ctest output processing. Should now display output as it + occurs, as well as be able to consume multiple lines if they + exist within the timeout. + +2009-09-04 13:24 hoffman + + * Source/CTest/: cmCTestRunScriptCommand.cxx, + cmCTestRunScriptCommand.h, cmCTestScriptHandler.cxx, + cmCTestScriptHandler.h: Change run_ctest_script in ctest to not + stop processing when there is an error in the script being run. + Also, add a RETURN_VALUE option so that you can find out if the + script failed + +2009-09-04 12:39 king + + * Source/cmTarget.cxx: Cleanup source file dependency tracing logic + + In cmTarget we trace the dependencies of source files in the + target to bring in all custom commands needed to generate them. + We clean up the implementation to use simpler logic and better + method names. The new approach is based on the observation that + a source file is actually an input (dependency) of the rule that + it runs (compiler or custom) even in the case that it is + generated (another .rule file has the rule to generate it). + +2009-09-04 12:39 king + + * Source/: cmTarget.cxx, cmTarget.h: Cleanup cmTarget source file + list representation + + This teaches cmTarget to use a set of cmSourceFile pointers to + guarantee unique insertion of source files in a target. The + order of insertion is still preserved in the SourceFiles vector. + +2009-09-04 12:38 king + + * Source/cmake.cxx: Simplify VS CMake re-run check + + When CMake is invoked by the VS IDE re-run rule we compute + whether or not CMake really needs to re-run based on some + timestamp helper files. Previously we assumed that if the main + generate.stamp file exists then VS has correctly detected that + the file is out of date. However, this assumption is too + aggressive and re-runs CMake unnecessarily sometimes. + + This commit removes the assumption and always checks timestamps + itself. The change breaks the explicit user re-run request + (R-click -> Compile) but only in cases when the build system is + already up to date. + +2009-09-04 12:37 king + + * Source/: cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio8Generator.h: Simplify VS generator + ZERO_CHECK dependency + + The VS generators use a ZERO_CHECK target on which all other + targets depend to check whether CMake needs to re-run. This + commit simplifies the addition of a dependency on the target to + all other targets. + + We also move addition of dependencies to the beginning of the + Generate step. This allows the dependency on ZERO_CHECK to be + included in the global inter-target dependency analysis. + +2009-09-04 11:23 zach.mullen + + * Source/CTest/cmProcess.cxx: Fixed output as-it-happens issue. + Now displays output as it receives each newline. + +2009-09-04 10:16 zach.mullen + + * Source/CTest/: cmCTestMultiProcessHandler.cxx, + cmCTestMultiProcessHandler.h, cmCTestTestHandler.cxx, + cmProcess.cxx: Added the test property EXPENSIVE, which denotes + that the given test(s) should be started prior to tests that are + not marked as such. Also fixed test dependencies, and a few + uninitialized variables in cmProcess. + +2009-09-04 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-03 17:01 hoffman + + * CMakeCPackOptions.cmake.in, CMakeLists.txt, + Source/CMakeLists.txt, Source/cmDocumentVariables.cxx, + Source/cmake.cxx: Remove CMakeSetup. Long live cmake-gui, start + building Qt now. + +2009-09-03 15:58 martink + + * Source/cmSubdirCommand.h: some white space fixes for the book + +2009-09-03 15:50 zach.mullen + + * Source/CTest/cmProcess.cxx: Fixed 2 unused variable warnings + +2009-09-03 15:33 zach.mullen + + * Source/CTest/: cmCTestMultiProcessHandler.cxx, + cmCTestRunTest.cxx, cmCTestRunTest.h, cmProcess.cxx, cmProcess.h: + Allowed tests to pull more than one line of output in their + quantum. Fixed uninitialized variables in the case that the test + process could not start. + +2009-09-03 15:29 martink + + * Modules/CPack.cmake, Modules/FeatureSummary.cmake, + Source/cmAddExecutableCommand.h, Source/cmAddLibraryCommand.h, + Source/cmDefinePropertyCommand.h, Source/cmDocumentVariables.cxx, + Source/cmEnableLanguageCommand.h, Source/cmFindCommon.cxx, + Source/cmListCommand.h, Source/cmSetCommand.h, + Source/cmSetDirectoryPropertiesCommand.h, + Source/cmSubdirCommand.h, Source/cmTryRunCommand.h: some white + space fixes for the book + +2009-09-03 12:11 david.cole + + * Modules/ExternalProject.cmake, + Tests/ExternalProject/CMakeLists.txt: Add test step to + ExternalProject builds. Rename SVN_TAG to SVN_REVISION since it + is a more accurate name. + +2009-09-03 11:14 zach.mullen + + * Source/: CTest/cmCTestMultiProcessHandler.cxx, + CTest/cmCTestTestCommand.h, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h, cmSetTestsPropertiesCommand.h: Fixed + warnings + +2009-09-03 11:10 king + + * Source/kwsys/RegularExpression.hxx.in: COMP: Silence useless + Borland inlining warning + + KWSys tries not to force anything on source files that include + its headers, but Borland warning 8027 leaves us no choice when we + want to have inline function definitions. This commit disables + the warning for the RegularExpression header and any file that + includes it. + +2009-09-03 10:47 zach.mullen + + * Source/cmSetTestsPropertiesCommand.h, + Source/CTest/cmCTestMemCheckCommand.h, + Source/CTest/cmCTestMultiProcessHandler.cxx, + Source/CTest/cmCTestRunTest.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestTestHandler.h, + Tests/CTestTest3/test.cmake.in: ENH: Added PARALLEL_LEVEL option + for ctest_memcheck(). Added PROCESSORS option to + set_tests_properties (implementation to come). + +2009-09-03 08:27 king + + * Source/: cmLocalGenerator.cxx, cmPolicies.cxx, cmPolicies.h: + Create CMP0014 to require CMakeLists.txt files + + Until now CMake accidentally accepted add_subdirectory() and + subdirs() calls referring to directories that do not contain a + CMakeLists.txt file. We introduce CMake Policy CMP0014 to make + this case an error. + +2009-09-03 08:26 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: Factor + cmLocalGenerator::Configure input file read + + This method tells the cmMakefile to read the input CMakeLists.txt + file. We factor out the call into a ReadInputFile method so it + can be extended without polluting the Configure method. + +2009-09-03 08:26 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: Factor + cmLocalGenerator::Configure object max path + + Much of the code in this method was dedicated to computing + ObjectMaxPath after configuring the directory. We move this last + step into its own ComputeObjectMaxPath method for better + organization. + +2009-09-03 08:26 king + + * Source/cmLocalGenerator.cxx: Manage current local generator with + automatic var + + The cmLocalGenerator::Configure method sets its cmLocalGenerator + instance as the global generator's current local generator during + configuration. This commit refactors management of the current + local generator to use an automatic variable. This will allow + early returns from the method. + +2009-09-03 08:26 king + + * Source/cmPolicies.cxx: Fix typo in REQUIRED_ALWAYS policy error + message + +2009-09-03 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-02 16:32 zach.mullen + + * Source/CTest/cmCTestMultiProcessHandler.cxx: STYLE: line length + +2009-09-02 16:07 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: Silence VS generator for + missing CMakeLists.txt + + CMake Makefile generators silently ignore missing CMakeLists.txt + files and just treat the source directory as if it had an empty + input file. This will be addressed with a new CMake Policy, but + for now we make the VS generator consistent with the Makefile + generator behavior. The VS generator will need to handle the OLD + behavior of the policy anyway. + +2009-09-02 16:06 king + + * Source/cmGlobalGenerator.cxx: Speed up graph traversal for + project->targets map + + The cmGlobalGenerator::AddTargetDepends method traces the + dependencies of targets recursively to collect the complete set + of targets needed for a given project (for VS .sln files). This + commit teaches the method to avoid tracing its dependencies more + than once. Otherwise the code does an all-paths walk needlessly. + +2009-09-02 12:35 zach.mullen + + * Source/CTest/: cmCTestTestCommand.cxx, cmCTestTestCommand.h, + cmCTestTestHandler.cxx: ENH: Added PARALLEL_LEVEL option to + ctest_test() command. + +2009-09-02 10:08 zach.mullen + + * Modules/CTest.cmake, Modules/DartConfiguration.tcl.in, + Source/cmCTest.cxx, Source/CTest/cmCTestMultiProcessHandler.cxx, + Source/CTest/cmCTestMultiProcessHandler.h, + Source/CTest/cmCTestRunTest.cxx, Source/CTest/cmCTestRunTest.h, + Source/CTest/cmCTestTestHandler.h, Source/cmCTest.h: Fixed ctest + output where max test index is not the same width as the total + number of tests. Also some preliminary changes for batching + ctest jobs + +2009-09-02 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-09-01 17:23 david.cole + + * Source/CTest/cmCTestSubmitHandler.cxx: Add curl timeout options + to the SubmitUsingHTTP method. They were only in the + SubmitUsingFTP method. + +2009-09-01 16:33 hoffman + + * Modules/Platform/: Windows-icl.cmake, Windows-ifort.cmake: Add + support for embeded manifests for Intel C/C++/Fortran compilers + +2009-09-01 16:23 hoffman + + * Modules/Platform/Windows-Intel.cmake: Add a module to determine + if the intel linker supports manifest creation + +2009-09-01 15:41 king + + * Tests/CTestUpdateGIT.cmake.in: Make CTest.UpdateGIT robust to + user git config + + Part of this test does "git pull" on a dirty work tree. We need + to make sure that 'branch.master.rebase' is false for the test + repository. Otherwise if it is true in the user configuration + then pull will refuse to rebase and the test will fail. + +2009-09-01 15:21 clinton + + * Modules/FindQt4.cmake: use -o flag instead of > for qdbuscpp2xml + +2009-09-01 15:08 hoffman + + * Source/cmake.cxx: Use the MANIFEST flag for non incremental + linking as well. + +2009-09-01 14:33 hoffman + + * Modules/Platform/Windows-cl.cmake, Source/cmake.cxx: Move + /MANIFEST flag into -E vs_link. This is so it can be used by the + intel compilers without having to specifiy it in the intel + compiler files + +2009-09-01 14:10 hoffman + + * Source/cmake.cxx: Handle embeded manifests with ifort. + +2009-09-01 14:05 king + + * Tests/FindPackageTest/: CMakeLists.txt, Exporter/CMakeLists.txt, + Exporter/CMakeTestExportPackageConfig.cmake.in, + Exporter/CMakeTestExportPackageConfigVersion.cmake.in, + Exporter/dummy.c: Test the user package registry + + We teach the FindPackageTest to build a sample project that + stores its build tree in the user package registry using + export(PACKAGE), and then find it with find_package. + +2009-09-01 14:04 king + + * Source/: cmExportCommand.cxx, cmExportCommand.h: Teach + export(PACKAGE) to fill the package registry + + We define the export(PACKAGE) command mode to store the location + of the build tree in the user package registry. This will help + find_package locate the package in the build tree. It simplies + user workflow for manually building a series of dependent + projects. + +2009-09-01 14:04 king + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: Teach + find_package to search a "package registry" + + A common user workflow is to build a series of dependent projects + in order. Each project locates its dependencies with + find_package. We introduce a "user package registry" to help + find_package locate packages built in non-standard search + locations. + + The registry explicitly stores locations of build trees providing + instances of a given package. There is no defined order among + the locations specified. These locations should provide package + configuration files (-config.cmake) and package version + files (-config-version.cmake) so that find_package will + recognize the packages and test version numbers. + +2009-09-01 13:55 king + + * Modules/: Compiler/Intel-C.cmake, Compiler/Intel-CXX.cmake, + Compiler/Intel-Fortran.cmake, Compiler/Intel.cmake, + Platform/Linux-Intel-C.cmake, Platform/Linux-Intel-CXX.cmake, + Platform/Linux-Intel-Fortran.cmake, Platform/Linux-Intel.cmake: + Use Intel for Linux flags only on Linux + + The commit "Split Intel compiler information files" moved some + Linux specific flags into the platform-independent Intel compiler + info files. This moves them back. + +2009-09-01 13:03 king + + * Modules/FortranCInterface/Verify/CMakeLists.txt: Fix + FortranCInterface_VERIFY for non-C++ case + + The verification program entry point (main) is defined in a C + source file, so the C compiler should be used to link when only + Fortran and C are involved. The C++ compiler should still be + used when the CXX option is enabled. + +2009-09-01 11:58 zach.mullen + + * Source/CTest/cmCTestRunTest.cxx: ENH: Improved test reporting + output + +2009-09-01 10:38 king + + * Tests/ExportImport/: Export/CMakeLists.txt, + Export/testLibCycleA1.c, Export/testLibCycleA2.c, + Export/testLibCycleA3.c, Export/testLibCycleB1.c, + Export/testLibCycleB2.c, Export/testLibCycleB3.c, + Import/A/CMakeLists.txt, Import/A/imp_testExe1.c: Test link + multiplicity export/import + + We test that LINK_INTERFACE_MULTIPLICITY propagates through + export() and install(EXPORT) into dependent projects. A simple + cycle of two archives that need to be scanned three times ensures + that the importing project uses the multiplicity correctly. + +2009-09-01 10:38 king + + * Tests/Dependency/Case2/: CMakeLists.txt, foo1c.c, foo2c.c, + foo3b.c, foo3c.c: Test link multiplicity + + This tests the LINK_INTERFACE_MULTIPLICITY property for a cycle + of three static libraries that must be scanned three times to + link properly. + +2009-09-01 10:37 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h, + cmExportFileGenerator.cxx, cmTarget.cxx, cmTarget.h: Define + 'multiplicity' for cyclic dependencies + + We create target property "LINK_INTERFACE_MULTIPLICITY" and a + per-config version "LINK_INTERFACE_MULTIPLICITY_". It + sets the number of times a linker should scan through a mutually + dependent group of static libraries. The largest value of this + property on any target in the group is used. This will help + projects link even for extreme cases of cyclic inter-target + dependencies. + +2009-09-01 08:52 king + + * Modules/FortranCInterface.cmake: Make FortranCInterface_VERIFY + verbose on failure + + We enable verbose build output in the try_compile of the simple + project. This makes valuable information available in the case + of failure. + +2009-09-01 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-31 18:18 wdicharry + + * Modules/FindHDF5.cmake: Fixed link order dependence in FindHDF5 + module for static link. + +2009-08-31 13:25 king + + * bootstrap: Test KWSYS_IOS_HAVE_BINARY during bootstrap + + We need to do this KWSys configuration test in the CMake + bootstrap script to create a proper cmsys/Configure.hxx file. + This fixes the bootstrap script which was broken by the addition + of the test to KWSys. + +2009-08-31 13:00 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, + kwsysPlatformTestsCXX.cxx, testIOS.cxx: Define kwsys_ios_binary + macro for std::ios::binary + + The 'binary' openmode does not exist on all compilers. We define + macro _ios_binary, where is the KWSys namespace, + to refer to std::ios::binary if it exists and 0 otherwise. + Sample usage: + + kwsys_ios::ifstream fin(fn, kwsys_ios::ios::in | + kwsys_ios_binary); + +2009-08-31 11:32 zach.mullen + + * Source/CTest/cmCTestMemCheckCommand.h: Fixed ctest_memcheck docs + (http://www.cmake.org/Bug/view.php?id=9242) + +2009-08-31 10:32 wdicharry + + * Modules/FindHDF5.cmake: In FindHDF5, added C library names to CXX + search libraries. + +2009-08-31 10:28 zach.mullen + + * Source/CTest/cmCTestTestHandler.cxx: Fixed Dart time recording + for ctest + +2009-08-31 09:50 zach.mullen + + * Source/CTest/: cmCTestMultiProcessHandler.h, cmCTestRunTest.cxx, + cmCTestRunTest.h, cmCTestTestHandler.cxx: Fixed conversion + warning on 64 bit machines + +2009-08-31 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-30 10:57 zach.mullen + + * Source/CTest/cmCTestRunTest.cxx: Fixed line length issue + +2009-08-30 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-29 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-28 15:08 zach.mullen + + * Source/CTest/: cmCTestMemCheckHandler.cxx, + cmCTestMemCheckHandler.h, cmCTestMultiProcessHandler.cxx, + cmCTestRunTest.cxx, cmCTestRunTest.h, cmCTestTestHandler.cxx, + cmCTestTestHandler.h: MemCheck should now work again in ctest + +2009-08-28 11:40 zach.mullen + + * Source/CTest/cmCTestRunTest.cxx: Replaced std::stringstream with + cmOStringStream + +2009-08-28 11:08 zach.mullen + + * Source/CTest/cmCTestMemCheckHandler.cxx, + Source/CTest/cmCTestMultiProcessHandler.cxx, + Source/CTest/cmCTestMultiProcessHandler.h, + Source/CTest/cmCTestRunTest.cxx, Source/CTest/cmCTestRunTest.h, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestTestHandler.h, Tests/CMakeLists.txt: Added + ctest -N test. Fixed ctest working directory bug. MemCheck fix + coming soon... + +2009-08-28 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-27 10:37 zach.mullen + + * Source/: CTest/cmCTestGenericHandler.cxx, + CTest/cmCTestMultiProcessHandler.cxx, + CTest/cmCTestMultiProcessHandler.h, CTest/cmCTestRunTest.cxx, + CTest/cmCTestRunTest.h, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h, cmCTest.cxx, cmCTest.h, ctest.cxx: + Fixed ctest -N segfault issue. Further refactored ctest. + Enabled failover for ctest + +2009-08-27 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-26 12:09 zach.mullen + + * Source/: CTest/cmCTestMultiProcessHandler.cxx, + CTest/cmCTestMultiProcessHandler.h, CTest/cmCTestRunTest.cxx, + cmCTest.cxx, cmCTest.h, CTest/cmCTestRunTest.h, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestTestHandler.h: ENH: + refactored ctest. All testing is now parallel. If no -j option + is specified, defaults to a MP level of 1 (non parallel) + +2009-08-26 06:52 david.cole + + * Modules/ExternalProject.cmake: Add missing argument to + _ep_write_downloadfile_script. + +2009-08-26 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-25 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-24 13:24 wdicharry + + * Modules/FindHDF5.cmake: Fixed HDF5 Find module error that caused + no list to be passed into remove duplicates when HDF5 is not + found. + +2009-08-24 13:15 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h: Factor implicit link info addition + into methods + + In cmComputeLinkInformation::Compute we add implicit link + information from languages other than the linker language to the + end of the link line. This factors out that code into separate + methods to improve readability and organization. + +2009-08-24 13:07 king + + * Tests/Fortran/CMakeLists.txt: Enforce FortranCInterface_VERIFY in + Fortran test + + This removes the QUIET option from FortranCInterface_VERIFY in + the Fortran test to really test the detected interface + everywhere. + +2009-08-24 12:04 wdicharry + + * Modules/: SelectLibraryConfigurations.cmake, FindHDF5.cmake: Add + HDF5 find module and select_library_configurations module. + +2009-08-24 09:54 king + + * Source/: cmComputeTargetDepends.cxx, cmComputeTargetDepends.h, + cmake.cxx: Create GLOBAL_DEPENDS_NO_CYCLES property + + This global property disallows cycles in the inter-target + dependency graph even among STATIC libraries. See issue #9444. + +2009-08-24 08:49 king + + * Modules/FortranCInterface.cmake, + Modules/FortranCInterface/Detect.cmake, + Modules/FortranCInterface/Verify/CMakeLists.txt, + Modules/FortranCInterface/Verify/VerifyC.c, + Modules/FortranCInterface/Verify/VerifyCXX.cxx, + Modules/FortranCInterface/Verify/VerifyFortran.f, + Modules/FortranCInterface/Verify/main.c, + Tests/Fortran/CMakeLists.txt: Create FortranCInterface_VERIFY + function + + This function builds a simple test project using a combination of + Fortran and C (and optionally C++) to verify that the compilers + are compatible. The idea is to help projects report very early + to users that the compilers specified cannot mix languages. + +2009-08-24 08:49 king + + * Modules/: FortranCInterface.cmake, + FortranCInterface/Detect.cmake: Teach FortranCInterface to load + outside results + + We split the main detection logic into a Detect.cmake support + module and load it only when detection results are not already + available. This allows results computed by the main project to + be used in try-compile projects without recomputing them. The + call to try_compile() need only to pass + FortranCInterface_BINARY_DIR through the CMAKE_FLAGS option. + +2009-08-24 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-23 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-22 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-21 10:32 king + + * Modules/: Compiler/SunPro-C.cmake, Compiler/SunPro-CXX.cmake, + Compiler/SunPro-Fortran.cmake, Platform/Linux-SunPro-C.cmake, + Platform/Linux-SunPro-CXX.cmake, + Platform/Linux-SunPro-Fortran.cmake, + Platform/SunOS-SunPro-Fortran.cmake, Platform/SunOS.cmake: Split + SunPro compiler information files + + This moves platform-independent SunPro compiler flags into + separate "Compiler/SunPro-.cmake" modules. + Platform-specific flags are left untouched. + +2009-08-21 09:54 king + + * Modules/: Compiler/Intel-C.cmake, Compiler/Intel-CXX.cmake, + Compiler/Intel-Fortran.cmake, Compiler/Intel.cmake, + Platform/Linux-Intel-C.cmake, Platform/Linux-Intel-CXX.cmake, + Platform/Linux-Intel-Fortran.cmake: Split Intel compiler + information files + + This moves platform-independent Intel compiler flags into + separate "Compiler/Intel-.cmake" modules. + Platform-specific flags are left untouched. + +2009-08-21 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-20 16:21 king + + * Modules/FortranCInterface.cmake: Teach FortranCInterface to + verify languages + + This module requires both C and Fortran to be enabled, so + error-out if they are not. + +2009-08-20 16:21 king + + * Source/cmDocumentVariables.cxx: Document + CMAKE__COMPILER_LOADED variable + +2009-08-20 09:46 zach.mullen + + * Source/CTest/cmCTestRunTest.cxx: Fixed line length over 80 + +2009-08-20 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-19 22:28 lowman + + * Modules/FindBoost.cmake: Add Boost 1.39 & 1.40. Move + ${Boost_INCLUDE_DIR}/lib to front of library search. + +2009-08-19 12:19 david.cole + + * Modules/: DownloadFile.cmake, ExternalProject.cmake, + UntarFile.cmake: Remove DownloadFile.cmake and UntarFile.cmake + from the Modules directory. Put functionality directly into + ExternalProject.cmake itself so that these modules do not end up + in the upcoming release of CMake. + +2009-08-19 09:24 zach.mullen + + * Source/: cmCTest.cxx, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h: Fixed overwriting of a previous + change set + +2009-08-19 08:58 zach.mullen + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + CTest/cmCTestRunTest.cxx, CTest/cmCTestRunTest.h, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestTestHandler.h: ENH: + Refactored CTest test execution code into an object + +2009-08-19 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-18 14:03 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: Add test times to log file + as well as the stdout. + +2009-08-18 13:34 hoffman + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: If + labels are found on the tests, then print a time summary for all + the tests run with each label. + +2009-08-18 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-17 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-16 23:07 lowman + + * Modules/FindBullet.cmake: Find module for the Bullet physics + engine + +2009-08-16 22:12 lowman + + * Modules/FindGTest.cmake: A find module for the Google C++ Testing + Framework + +2009-08-16 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-15 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-14 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-13 00:11 lowman + + * Modules/: FindBISON.cmake, FindFLEX.cmake: Checking in the + FindFLEX.cmake & FindBISON.cmake attached to Issue #4018 after + some minor improvements + + * Improved examples * Switched to FindPackageHandleStandardArgs * + Cleaned up indentation * Sanitized else()/endif() blocks + +2009-08-13 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-12 22:40 lowman + + * Modules/FindDevIL.cmake: Fixes Issue #8994 + +2009-08-12 22:25 lowman + + * Modules/FindGnuTLS.cmake: Find module for GnuTLS, the GNU + Transport Layer Security library (Issue #9228) + +2009-08-12 21:58 lowman + + * Modules/FindOpenSceneGraph.cmake: Improved error output and + documentation + + * Fixed errant output when version number not found * Improved + error output when REQUIRED is passed * Improved docs and example + +2009-08-12 09:09 king + + * Modules/Platform/Windows-bcc32.cmake: Quote the target name for + Borland tlib tool + + The Borland librarian tool "tlib" requires that the output target + name be quoted if it contains the character '-' (and perhaps a + few others). This commit restores the use of the TARGET_QUOTED + rule variable replacement for this purpose. Otherwise no static + library can have a '-' in its name. + + This problem was exposed by the 'Testing' test when it builds the + pcStatic library with the '-dbg' suffix. + +2009-08-12 08:06 king + + * Source/CTest/cmCTestSVN.cxx: Fix classification of externals in + svn status + + CTest runs 'svn status' to identify modified and conflicting + files in the working directory. This commit fixes the + interpretation of the 'X' status, which corresponds to svn + eXternals. This status should be ignored rather than treated as + a local modification. + +2009-08-12 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-11 22:02 hoffman + + * Source/CTest/: cmCTestMultiProcessHandler.cxx, + cmCTestTestHandler.cxx, cmProcess.h: Output total time when using + -j N + +2009-08-11 22:01 hoffman + + * Tests/CTestUpdateCommon.cmake: Output command that failed, if it + fails. + +2009-08-11 16:25 hoffman + + * Source/CTest/cmCTestCVS.cxx: Fix failing test on release build + for VS 10 cmSystemTools::GetLineFromStream crashes if the stream + is not open in that case. + +2009-08-11 09:55 king + + * Tests/Testing/: CMakeLists.txt, driver.cmake, pcShared.c, + pcShared.h, pcStatic.c, perconfig.c: Test add_test() generator + expressions + + This teaches the 'testing' test to try generator expressions in + arguments to add_test(NAME). This test case mimics a common + use-case of passing executables to test driver scripts. We + excercise the syntax for per-configuration target file names. + +2009-08-11 09:54 king + + * Source/CMakeLists.txt, Source/cmAddTestCommand.h, + Source/cmGeneratorExpression.cxx, Source/cmGeneratorExpression.h, + Source/cmTestGenerator.cxx, bootstrap: Introduce "generator + expressions" to add_test() + + This introduces a new syntax called "generator expressions" to + the test COMMAND option of the add_test(NAME) command mode. + These expressions have a syntax like $ and + are evaluated during build system generation. This syntax allows + per-configuration target output files to be referenced in test + commands and arguments. + +2009-08-11 09:07 king + + * Source/: cmTarget.cxx, cmTarget.h: Create cmTarget DLL query + methods + + We creates methods IsDLLPlatform() and HasImportLibrary(). The + former returns true on Windows. The latter returns whether the + target has a DLL import library. It is true on Windows for + shared libraries and executables with exports. + +2009-08-11 09:07 king + + * Source/: cmMakefile.cxx, cmTest.cxx, cmTest.h: Record backtrace + for every add_test command + + We teach cmTest to hold a backtrace for the add_test command that + created it. This will be used later to report context for errors + at generate time. + +2009-08-11 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-10 14:32 clinton + + * Source/QtDialog/QCMake.cxx: ENH: Patch from Alexander Neundorf + to remove "KDevelop3" from list of generators. "KDevelop3 - Unix + Makefiles" should be used instead. + +2009-08-10 13:25 clinton + + * Source/QtDialog/: QCMakeCacheView.cxx, QCMakeCacheView.h: ENH: + Allow edit on single click. Fixes #9393. Also fix row heights + to be consistent. + +2009-08-10 09:07 king + + * Source/cmTestGenerator.cxx: Cleanup test property script code + generation + + We teach cmTestGenerator::GenerateScriptConfigs to use the + general cmLocalGenerator::EscapeForCMake method to write escaped + test property values into test scripts. This eliminates the + previous hand-coded escaping implementation. + +2009-08-10 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-09 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-08 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-07 10:13 king + + * Modules/: CMakeCCompilerId.c.in, CMakeCXXCompilerId.cpp.in, + CMakeFortranCompilerId.F.in, Compiler/VisualAge-C.cmake, + Compiler/VisualAge-CXX.cmake, Compiler/VisualAge-Fortran.cmake, + Compiler/XL-C.cmake, Compiler/XL-CXX.cmake, + Compiler/XL-Fortran.cmake, Platform/Linux-VisualAge-C.cmake, + Platform/Linux-VisualAge-Fortran.cmake, + Platform/Linux-XL-C.cmake, Platform/Linux-XL-Fortran.cmake: Teach + compiler id about VisualAge -> XL rebranding + + IBM rebranded its VisualAge compiler to XL starting at version + 8.0. We use the compiler id "XL" for newer versions and + "VisualAge" for older versions. We now also recognize the "z/OS" + compiler, which is distinct from XL. + +2009-08-07 10:12 king + + * Modules/: Compiler/VisualAge-Fortran.cmake, + Platform/AIX-VisualAge-Fortran.cmake, + Platform/Linux-VisualAge-Fortran.cmake, Platform/xlf.cmake: Move + flag to Compiler/VisualAge-Fortran module + + The CMAKE_Fortran_DEFINE_FLAG value applies to the IBM Fortran + compilers on all platforms. This moves the setting to the + platform-independent compiler information file. + +2009-08-07 09:56 king + + * Modules/Platform/OpenBSD.cmake: Use NetBSD to initialize OpenBSD + configuration + + We teach Modules/Platform/OpenBSD.cmake to load NetBSD first + since the platforms are so similar. This enables RPATH support + on OpenBSD. + +2009-08-07 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-06 19:01 partyd + + * Source/kwsys/SystemTools.cxx: COMP: attempt to fix more 'hidden + by' warnings. + +2009-08-06 07:53 king + + * Modules/FortranCInterface/CMakeLists.txt: Teach FortranCInterface + about g77 mangling + + The old GNU g77 Fortran compiler uses the suffix '__' for symbols + containing an underscore in their name. + +2009-08-06 07:53 king + + * Modules/FortranCInterface/CMakeLists.txt: Sort FortranCInterface + global mangling symbols + + This just cleans up the list ordering so more entries can be + added while keeping everything organized. + +2009-08-06 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-05 17:07 king + + * Modules/FortranCInterface/: CMakeLists.txt, my_module_.c, + mymodule_.c: Cleanup FortranCInterface for PGI and GCC 4.2 + + This documents the purpose of the extra my_module_.c and + mymodule.c source files, and sorts the symbols. + +2009-08-05 16:55 hoffman + + * Modules/FortranCInterface/: CMakeLists.txt, my_module_.c, + mymodule_.c: Teach FortranC interface for Intel, PGI, and gcc 4.2 + +2009-08-05 15:39 david.cole + + * Modules/AddExternalProject.cmake: Remove + AddExternalProject.cmake. ExternalProject.cmake + supercedes/replaces it. + +2009-08-05 14:59 david.cole + + * Modules/: BundleUtilities.cmake, GetPrerequisites.cmake: Overhaul + GetPrerequisites and BundleUtilities: make fixup_bundle do + something useful on Windows and Linux. + + Formerly, fixup_bundle was useful only on the Mac for making + standalone bundle applications that could be drag-n-drop moved to + anyplace in the file system. fixup_bundle is not just for the Mac + any more. It will now analyze executable files on Windows and + Linux, too, and copy necessary non-system dlls to the same folder + that the executable is in. This should work with dlls that you + build as part of your build and also with 3rd-party dlls as long + as you give fixup_bundle the right list of directories to search + for those dlls. Many thanks to Clinton Stimpson for his help in + ironing out the details involved in making this work. + +2009-08-05 13:40 king + + * Modules/FortranCInterface.cmake, Modules/FortranCInterface.h.in, + Modules/FortranCInterface/CMakeLists.txt, + Modules/FortranCInterface/Input.cmake.in, + Modules/FortranCInterface/Macro.h.in, + Modules/FortranCInterface/Output.cmake.in, + Modules/FortranCInterface/call_mod.f90, + Modules/FortranCInterface/call_sub.f, + Modules/FortranCInterface/main.F, + Modules/FortranCInterface/my_module.f90, + Modules/FortranCInterface/my_sub.f, + Modules/FortranCInterface/mymodule.f90, + Modules/FortranCInterface/mysub.f, + Modules/FortranCInterface/symbol.c.in, + Tests/Fortran/CMakeLists.txt, Tests/Fortran/myc.c: Rewrite + FortranCInterface module + + This is a new FortranCInterface.cmake module to replace the + previous prototype. All module support files lie in a + FortranCInterface directory next to it. + + This module uses a new approach to detect Fortran symbol + mangling. We build a single test project which defines symbols + in a Fortran library (one per object-file) and calls them from a + Fortran executable. The executable links to a C library which + defines symbols encoding all known manglings (one per + object-file). The C library falls back to the Fortran library + for symbols it cannot provide. Therefore the executable will + always link, but prefers the C-implemented symbols when they + match. These symbols store string literals of the form + INFO:symbol[] so we can parse them out of the executable. + + This module also provides a simpler interface. It always detects + the mangling as soon as it is included. A single macro is + provided to generate mangling macros and optionally pre-mangled + symbols. + +2009-08-05 10:45 hoffman + + * Source/cmVisualStudio10TargetGenerator.cxx: Allow for static + libraries to depend on other targets so that the MSBuild runs + build things in the correct order + +2009-08-05 10:14 king + + * Source/CMakeLists.txt, Tests/CMakeLists.txt, + Utilities/Doxygen/doxyfile.in: Remove WXDialog source code + + The QtDialog is our supported cross-platform GUI, so the WXDialog + source is no longer needed. + +2009-08-05 10:13 king + + * Source/CMakeLists.txt: Remove FLTKDialog source code + + The QtDialog is our supported cross-platform GUI, so the + FLTKDialog source is no longer needed. + +2009-08-05 09:56 king + + * Source/cmFindPackageCommand.cxx: Fix find_package for cmake-gui + registry entry + + The find_package commands looks at the "WhereBuild" registry + entries created by CMakeSetup and cmake-gui hoping that the + project was recently built. CMakeSetup created + WhereBuild1..WhereBuild10 but cmake-gui creates + WhereBuild0-WhereBuild9. + + This fixes find_package to look at WhereBuild0 so that the most + recently configured project can be found. It is important in the + case that the package to be found was the last one configured in + cmake-gui but the current project that is finding it is + configured from the command line. + +2009-08-05 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-04 15:41 martink + + * Source/cmLocalGenerator.cxx: ENH: minor cleanup of test + +2009-08-04 14:37 king + + * Source/cmCoreTryCompile.cxx, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Tests/TryCompile/CMakeLists.txt, + Tests/TryCompile/Inner/CMakeLists.txt, + Tests/TryCompile/Inner/innerexe.c, + Tests/TryCompile/Inner/innerlib.c: No /fast targets in + try_compile project mode + + The try_compile command builds the cmTryCompileExec executable + using the cmTryCompileExec/fast target with Makefile generators + in order to save time since dependencies are not needed. + However, in project mode the command builds an entire source tree + that may have dependencies. Therefore we can use the /fast + target approach only in one-source mode. + +2009-08-04 14:06 king + + * Tests/Fortran/: CMakeLists.txt, foo.c, foo.cxx, mainc.c, + maincxx.c, myc.c, mycxx.cxx: Test C, C++, Fortran interface + combinations + + Previously the Fortran test created a single executable + containing C, C++, and Fortran sources. This commit divides the + executable into three libraries corresponding to each language, + and two executables testing Fortran/C only and Fortran/C/C++ + together. The result tests more combinations of using the + languages together, and that language requirements propagate + through linking. + +2009-08-04 13:16 martink + + * Source/cmTest.cxx: ENH: change to CDASH + +2009-08-04 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-03 13:37 king + + * Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Tests/TryCompile/Inner/CMakeLists.txt: Fix recursive try_compile + calls + + When building an entire source tree with try_compile instead of + just a single source file, it is possible that the CMakeLists.txt + file in the try-compiled project invokes try_compile. This + commit fixes propagation of language-initialization results from + the outer-most project into any number of try-compile levels. + +2009-08-03 13:37 king + + * Tests/TryCompile/: CMakeLists.txt, Inner/CMakeLists.txt: Test + try_compile project mode + + The try_compile command project mode builds an entire source tree + instead of one source file. It uses an existing CMakeLists.txt + file in the given source tree instead of generating one. This + commit creates a test for the mode in the TryCompile test. + +2009-08-03 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-02 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-08-01 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-07-31 16:11 alex + + * Source/cmake.cxx: DOCS: fix typo (#9231) + + Alex + +2009-07-31 09:19 king + + * Source/CTest/cmCTestScriptHandler.cxx: Set current directory + variables in CTest scripts + + The commit "Fix get_filename_component ABSOLUTE mode" broke the + code + + get_filename_component(cwd . ABSOLUTE) + + because CTest scripts did not make + cmMakefile::GetCurrentDirectory() available. This commit fixes + the problem by setting the proper information on CTest script + instances of cmMakefile. + + This also makes CMAKE_CURRENT_SOURCE_DIR and + CMAKE_CURRENT_BINARY_DIR available to CTest scripts. They are + set to the working directory at script startup. + +2009-07-31 08:27 king + + * CMakeLists.txt, Source/QtDialog/CMakeLists.txt: Fix installation + when built by CMake 2.4 + + CMake 2.4 generates old-style cmake_install.cmake code including + calls to the file(INSTALL) command with the COMPONENTS argument. + We need to set CMAKE_INSTALL_SELF_2_4 for the whole install tree + to prevent the command from complaining in this special case. + Previously this was needed only in the QtDialog directory, but + now it is needed in the entire tree. + +2009-07-31 06:22 alex + + * Source/: cmFunctionCommand.h, cmMacroCommand.h: DOCS: fix typo + (see #9308) + + Alex + +2009-07-31 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: KWSys Nightly Date Stamp + +2009-07-30 13:46 king + + * Modules/: CMakeFortranCompiler.cmake.in, + CMakeTestFortranCompiler.cmake: Pass Fortran90 test result to + try-compile + + This stores CMAKE_Fortran_COMPILER_SUPPORTS_F90 in the Fortran + compiler information file CMakeFiles/CMakeFortranCompiler.cmake + instead of in CMakeCache.txt. This file makes the result + available to try-compile projects. + +2009-07-30 10:59 king + + * Modules/CMakeCXXCompiler.cmake.in, + Source/cmDocumentVariables.cxx, Source/cmTarget.cxx: Do not + always propagate linker language preference + + The commit "Consider link dependencies for link language" taught + CMake to propagate linker language preference from languages + compiled into libraries linked by a target. It turns out this + should only be done for some languages, such as C++, because + normally the language of the program entry point (main) should be + used. + + We introduce variable CMAKE__LINKER_PREFERENCE_PROPAGATES + to tell CMake whether a language should propagate its linker + preference across targets. Currently it is true only for C++. + +2009-07-30 10:59 king + + * Source/cmTarget.cxx: Refactor target linker language selection + + This factors the decision logic out of + cmTarget::ComputeLinkClosure into dedicated class + cmTargetSelectLinker. We replace several local variables with a + single object instance, and organize code into methods. + +2009-07-30 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-29 16:40 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + Separate Xcode flag escaping code from defines + + Generalize the core Xcode generator preprocessor flag escaping + code to be useful for escaping all flags. + +2009-07-29 16:39 king + + * Source/cmGlobalXCodeGenerator.cxx: Re-order + cmGlobalXCodeGenerator implementation + + This defines class + cmGlobalXCodeGenerator::BuildObjectListOrString early in the + source file so it can be used in more places. + +2009-07-29 16:38 king + + * Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in: Check PGI linker + lines in ImplicitLinkInfo test + + This adds sample linker invocation lines for the PGI compiler on + Linux. + +2009-07-29 16:38 king + + * Modules/Compiler/: PGI-C.cmake, PGI-CXX.cmake, PGI-Fortran.cmake: + Set CMAKE__VERBOSE_FLAG variables for PGI + + We set the variables to contain "-v", the verbose front-end + output option for PGI compilers. This enables detection of + implicit link libraries and directories for these compilers. + +2009-07-29 16:07 king + + * Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in: Check Intel + linker lines in ImplicitLinkInfo test + + This adds sample linker invocation lines for the Intel compiler + on Linux. In particular, this exercises the case when "ld" + appears without a full path. + +2009-07-29 16:07 king + + * Modules/Compiler/: Intel-C.cmake, Intel-CXX.cmake, + Intel-Fortran.cmake: Set CMAKE__VERBOSE_FLAG variables for + Intel + + We set the variables to contain "-v", the verbose front-end + output option for Intel compilers. This enables detection of + implicit link libraries and directories for these compilers. + +2009-07-29 16:07 king + + * Modules/CMakeParseImplicitLinkInfo.cmake: Recognize linker + commands without paths + + This teaches the implicit link line parsing code to recognize + link lines that do not have a full path to the linker executable. + At least one version of the Intel compiler on Linux invokes the + linker as just "ld" instead of "/usr/bin/ld". + +2009-07-29 11:29 king + + * Source/: CMakeLists.txt, cmIDEOptions.cxx, cmIDEOptions.h, + cmVisualStudioGeneratorOptions.cxx, + cmVisualStudioGeneratorOptions.h: ENH: Separate option mapping + from VS generators + + Split cmVisualStudioGeneratorOptions core functionality out into + a base class cmIDEOptions. It will be useful for other + generators. + +2009-07-29 11:28 king + + * Source/: CMakeLists.txt, cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio8Generator.h, cmIDEFlagTable.h, + cmLocalVisualStudio7Generator.h, + cmVisualStudioGeneratorOptions.h: ENH: Separate VS flag table + type + + Move the cmVS7FlagTable type out of the VS generators and rename + it to cmIDEFlagTable. It will be useful for other generators. + +2009-07-29 08:39 king + + * Tests/Properties/CMakeLists.txt: Test cache entry property + "STRINGS" + + The STRINGS property tells cmake-gui to create a drop-down + selection list. This teaches the Properties test to set and + verify its value. + +2009-07-29 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-28 14:30 hoffman + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: ENH: remove code duplication and + use cmVisualStudioGeneratorOptions for all versions of vs 7 and + greater. + +2009-07-28 10:46 king + + * Source/: CPack/cmCPackGenerator.cxx, + CTest/cmCTestScriptHandler.cxx, CTest/cmCTestTestHandler.cxx, + cmCTest.cxx, cmake.cxx: BUG: Do not double-initialize local + generators + + All global generator CreateLocalGenerator methods automatically + initialize the local generator instances with SetGlobalGenerator. + In several places we were calling SetGlobalGenerator again after + receiving the return value from CreateLocalGenerator. The + double-initializations leaked the resources allocated by the + first call to SetGlobalGenerator. This fix removes the + unnecessary calls. + +2009-07-28 08:36 king + + * Source/cmComputeLinkInformation.cxx: BUG: Do not filter + non-library implicit link items + + We list implicit link items of languages linked into a target but + filter them by the implicit libraries known to be passed by the + main linker language. Implicit link flags like "-z..." should + not be filtered out because they are not libraries. + +2009-07-28 08:36 king + + * Modules/CMakeParseImplicitLinkInfo.cmake, + Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in: BUG: Parse + implicit link editor -z*extract options + + The Sun Fortran compiler passes -zallextract and -zdefaultextract + to the linker so that all objects from one of its archives are + included in the link. This teaches the implicit options parser + to recognize the flags. We need to pass them explicitly on C++ + link lines when Fortran code is linked. + +2009-07-28 08:08 king + + * Source/cmComputeLinkInformation.cxx: BUG: Always pass linker + flags untouched + + In cmComputeLinkInformation we recognize link options that look + like library file names, but pass flags starting in '-' through + untouched. This fixes the ordering of the check to recognize '-' + flags first in case the rest of the option looks like a library + file name, as in the case of "-l:libfoo.a". + +2009-07-28 08:07 king + + * Source/cmComputeLinkInformation.cxx: BUG: Do not recognize ':' in + a library name + + In cmComputeLinkInformation we construct regular expressions to + recognize library file names. This fixes the expressions to not + allow a colon (':') in the file name so that "-l:libfoo.a" is + left alone. + +2009-07-28 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-27 16:45 king + + * Source/kwsys/: CMakeLists.txt, kwsysPlatformTestsCXX.cxx: BUG: + Enable large files only if works + + Some AIX/gcc version combinations the header breaks when + large file support is enabled. See this GCC issue for details: + + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20366 + + We work around the problem by enhancing the configuration check + for large file support to include when available. This + will cause LFS to be disabled when the above problem occurs. + +2009-07-27 14:17 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: ENH: add test times and a + total time to the output of command line ctest + +2009-07-27 12:43 king + + * Tests/Fortran/: CMakeLists.txt, foo.c, foo.cxx: ENH: Test Fortran + and C++ in one executable + + This extends the Fortran-to-C interface test to add a C++ source + file. The executable can only link with the C++ linker and with + the proper Fortran runtime libraries. These libraries should be + detected by CMake automatically, so this tests verifies the + detection functionality. + +2009-07-27 12:43 king + + * Tests/Fortran/CMakeLists.txt: ENH: Remove EXTRA_FORTRAN_C_LIBS + Fortran test hack + + This hack was created to help the Fortran test executables link + to the implicit C libraries added by BullsEye. Now that implicit + libraries from all languages are detected and included + automatically the hack is no longer needed. + +2009-07-27 12:43 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h, cmOrderDirectories.cxx, + cmOrderDirectories.h: ENH: Link runtime libraries of all + languages + + This adds implicit libraries and search directories for languages + linked into a target other than the linker language to its link + line. For example, when linking an executable containing both + C++ and Fortran code the C++ linker is used but we need to add + the Fortran libraries. + + The variables + + CMAKE__IMPLICIT_LINK_LIBRARIES + CMAKE__IMPLICIT_LINK_DIRECTORIES + + contain the implicit libraries and directories for each language. + Entries for the linker language are known to be implicit in the + generated link line. Entries for other languages that do not + appear in the known implicit set are listed explicitly at the end + of the link line. + +2009-07-27 12:35 king + + * Tests/SystemInformation/DumpInformation.cxx: ENH: Report CMake + logs in SystemInformation test + + This teaches the SystemInformation test to report the CMake log + files CMakeOutput.log and CMakeError.log from the CMake build + tree and from the SystemInformation test build tree. These logs + may help diagnose dashboard problems remotely. + +2009-07-27 12:04 david.cole + + * Tests/CMakeTests/: CMakeLists.txt, CheckSourceTreeTest.cmake.in: + ENH: Make the CheckSourceTree test emit a warning (but pass + instead of fail) when there is an in-source build on a dashboard + machine. + +2009-07-27 11:56 king + + * Tests/Fortran/mysub.f: ENH: Require language libs in Fortran/C + test + + This extends the Fortran/C interface test to require that the + executable link to the fortran language runtime libraries. We + must verify that the proper linker is chosen. + +2009-07-27 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-26 01:01 partyd + + * Source/kwsys/SystemTools.cxx: ENH: try and see if using + string.append instead of += will make valgrind not complaing that + JoinPath is leaking. + +2009-07-26 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-25 13:32 david.cole + + * Tests/CMakeTests/CheckSourceTreeTest.cmake.in: ENH: Improvements + to the new CheckSourceTree test: ignore Thumbs.db and .DS_Store + files. Force all output to stderr by not using STATUS with + message. Better error text. + +2009-07-25 08:11 king + + * Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in: BUG: Further + avoid ImplicitLinkInfo case change + + The commit "Avoid case change in ImplicitLinkInfo test" did not + change all of the paths to mingw, so some case change still + occurs. This changes more of them. + +2009-07-25 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-24 18:30 david.cole + + * Tests/CMakeLists.txt: BUG: One last attempt for today to get the + new CheckSourceTree test running on dashboards driven by CMake + 2.4... Good night now. + +2009-07-24 17:33 king + + * CMakeLists.txt: ENH: Allow empty endif() and such with CMake 2.4 + + This allows us to use empty endif() and similar block terminators + when building with CMake 2.4. It is allowed by default with 2.6 + already. + +2009-07-24 17:28 david.cole + + * Tests/CMakeTests/CMakeLists.txt: BUG: Close endif statements with + same string as if so that it still configures with CMake 2.4. One + more time. Encore, encore. + +2009-07-24 17:12 david.cole + + * Tests/CMakeTests/CheckSourceTreeTest.cmake.in: BUG: Improve + CheckSourceTree test so that it ignores 'U ' output from cvs + update. Also: improve failure logic for dashboard runs and + developer runs. + +2009-07-24 16:57 king + + * Tests/CMakeTests/VariableWatchTest.cmake.in: BUG: Teach + VariableWatch test to check results + + Previously this test was only a smoke test for manual + verification. This teaches the test to actually check that the + variable watch succeeds. + +2009-07-24 16:53 king + + * Source/cmVariableWatchCommand.h: BUG: Keep variable_watch() + commands in memory + + The "Keep only FinalPass commands in memory" commit caused + instances of this command to be deleted after the InitialPass. + Even though the variable_watch command does not have a final + pass, it does need to stay alive because it owns the callback + information. + +2009-07-24 16:31 david.cole + + * Tests/CMakeLists.txt: BUG: Close endif statements with same + string as if so that it still configures with CMake 2.4 -- also + check for existence of FindCVS.cmake before doing + find_package(CVS QUIET) also for CMake 2.4 sake... + +2009-07-24 16:15 david.cole + + * Tests/CMakeLists.txt: BUG: Oops. Left chunk of junk at the bottom + of the main Tests CMakeLists.txt file with the last commit... + Sorry. + +2009-07-24 15:58 david.cole + + * Source/cmGlobalXCodeGenerator.cxx, Tests/CMakeLists.txt, + Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/CheckSourceTreeTest.cmake.in: BUG: Additional + fix necessary for issue #8481 so that Xcode builds do not write + files into the source tree. Also add a test that runs last to + check for local modifications in CMake_SOURCE_DIR based on + whether 'cvs -q -n up -dP' output is empty. Test fails on + dashboard runs when there are local modifications. Test passes on + non-dashboard runs with local modifications so that CMake + developers may have mods when running the test locally. + +2009-07-24 13:31 king + + * Source/: cmCommand.h, cmConfigureFileCommand.h, + cmExportLibraryDependencies.h, cmFLTKWrapUICommand.h, + cmInstallFilesCommand.h, cmInstallProgramsCommand.h, + cmLoadCommandCommand.cxx, cmMakefile.cxx: ENH: Keep only + FinalPass commands in memory + + In cmMakefile we save all invoked commands so that FinalPass can + be called on them later. Most commands have no final pass, so we + should keep only the few that do. + +2009-07-24 13:17 king + + * CMakeLists.txt, Modules/CMakeLists.txt, + Modules/Platform/CMakeLists.txt, Templates/CMakeLists.txt: ENH: + Install all Modules and Templates + + This removes the file-wise installation rules for Modules and + Templates and instead installs the whole directories. This + approach is much less error-prone. The old approach was left + from before CMake had the install(DIRECTORY) command. + +2009-07-24 12:55 king + + * Modules/CMakeLists.txt: BUG: Install new fortran compiler id + source. + + The extension of the id source file was changed from .F90 to .F + so this fixes the install rule. + +2009-07-24 12:15 malaterre + + * Source/kwsys/SharedForward.h.in: COMP: Fix compilation of VTK on + debian/sparc (sparc is a CPU not an OS) + +2009-07-24 07:34 king + + * Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in: BUG: Avoid case + change in ImplicitLinkInfo test + + Since "get_filename_component(... ABSOLUTE)" retrieves the actual + case for existing paths on windows, we need to use an obscure + path for mingw. Otherwise the test can fail just because the + case of the paths changes. + +2009-07-24 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-23 16:19 king + + * Modules/CMakeDetermineCompilerABI.cmake: BUG: Skip implicit link + information on Xcode + + Xcode adds extra link directories that point at the build tree, + so detection of implicit link directories is not reliable. Since + Fortran is not supported in Xcode we will not need implicit link + information yet anyway. + +2009-07-23 10:07 king + + * Tests/CMakeTests/: CMakeLists.txt, ImplicitLinkInfoTest.cmake.in: + ENH: Create ImplicitLinkInfo test + + This tests the internal CMakeParseImplicitLinkInfo.cmake module + to ensure that implicit link information is extracted correctly. + The test contains many manually verified examples from a variety + of systems. + +2009-07-23 10:07 king + + * Modules/CMakeCCompiler.cmake.in, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeDetermineCompilerABI.cmake, + Modules/CMakeFortranCompiler.cmake.in, + Modules/CMakeParseImplicitLinkInfo.cmake, + Modules/Compiler/GNU-C.cmake, Modules/Compiler/GNU-CXX.cmake, + Modules/Compiler/GNU-Fortran.cmake, Modules/Compiler/HP-C.cmake, + Modules/Compiler/HP-CXX.cmake, Modules/Compiler/HP-Fortran.cmake, + Modules/Compiler/MIPSpro-C.cmake, + Modules/Compiler/MIPSpro-CXX.cmake, + Modules/Compiler/MIPSpro-Fortran.cmake, + Modules/Compiler/SunPro-C.cmake, + Modules/Compiler/SunPro-CXX.cmake, + Modules/Compiler/SunPro-Fortran.cmake, + Modules/Compiler/VisualAge-C.cmake, + Modules/Compiler/VisualAge-CXX.cmake, + Modules/Compiler/VisualAge-Fortran.cmake, + Source/cmDocumentVariables.cxx, + Tests/SystemInformation/SystemInformation.in: ENH: Implicit link + info for C, CXX, and Fortran + + This teaches CMake to detect implicit link information for C, + C++, and Fortran compilers. We detect the implicit linker search + directories and implicit linker options for UNIX-like + environments using verbose output from compiler front-ends. We + store results in new variables called + + CMAKE__IMPLICIT_LINK_LIBRARIES + CMAKE__IMPLICIT_LINK_DIRECTORIES + + The implicit libraries can contain linker flags as well as + library names. + +2009-07-23 10:06 king + + * Modules/: CMakeCInformation.cmake, CMakeCXXInformation.cmake, + CMakeFortranInformation.cmake: ENH: Load platform-independent + per-compiler files + + This teaches the language configuration modules to load + per-compiler information for each language using the compiler id + but no system name. They look for modules named + "Compiler/-.cmake". Such modules may specify compiler + flags that do not depend on the platform. + +2009-07-23 08:10 king + + * Source/cmGetFilenameComponentCommand.cxx: BUG: Fix + get_filename_component ABSOLUTE mode + + This teaches the command to recognize full windows paths when + built on UNIX. CollapseFullPath knows when the input path is + relative better than FileIsFullPath because the latter is only + meant for paths from the host platform. + +2009-07-23 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-22 14:22 king + + * bootstrap, Source/CMakeLists.txt, Source/cmDefinitions.cxx, + Source/cmDefinitions.h, Source/cmMakefile.cxx, + Source/cmMakefile.h: ENH: Improve dynamic variable scope + implementation + + Previously each new variable scope (subdirectory or function + call) in the CMake language created a complete copy of the + key->value definition map. This avoids the copy using transitive + lookups up the scope stack. Results of queries answered by + parents are stored locally to maintain locality of reference. + + The class cmDefinitions replaces cmMakefile::DefinitionsMap, and + is aware of its enclosing scope. Each scope stores only the + definitions set (or unset!) inside it relative to the enclosing + scope. + +2009-07-22 13:42 king + + * Tests/FunctionTest/SubDirScope/CMakeLists.txt: ENH: Improve + strictness of Function test + + The command "set(... PARENT_SCOPE)" should never affect the + calling scope. This improves the Function test to check that + such calls in a subdirectory scope affect the parent but not the + child. + +2009-07-22 12:06 david.cole + + * Source/cmCTest.cxx: BUG: Fix typo pointed out by Monsieur + Francois Bertel. Merci, Francois. + +2009-07-22 11:14 david.cole + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Fix issue #8481 - + generate Xcode projects such that breakpoints may be used from + the Xcode debugger without adjusting any settings within the + Xcode GUI first... Thanks to Doug Gregor for the patch. + +2009-07-22 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-21 12:45 martink + + * Modules/FindPNG.cmake: ENH: just converted case to lower for the + book + +2009-07-21 11:58 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Disable color + makefile inside try-compile + + Generated makefiles for try-compile projects should never use + color output. On MSYS the color escapes end up in the + try-compile output text because there is no way to identify + whether the output is going to a color-capable terminal. Instead + we should just always skip color for try-compile projects. + +2009-07-21 10:56 king + + * Tests/SystemInformation/DumpInformation.h.in: BUG: Fix + SystemInformation dump output + + When this test was renamed from DumpInformation to + SystemInformation the configured header that points the dump + executable to the directory containing information files was + broken. No information has been dumped by this test for 2 years! + This fixes it. + +2009-07-21 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-20 12:08 david.cole + + * CMakeCPackOptions.cmake.in: BUG: Add CPACK_NSIS_PACKAGE_NAME to + the list of CPack variables that CMake overrides. We use the same + value as the CPack-provided default, but do it here such that + configuring with an older CMake will still give us this new + variable. Necessary so that the CMake release process works with + the new variable: CMake is configured with a previous CMake, but + packaged with the freshly built CPack. (This fix is necessary + because the fix for issue #8682 caused the side effect of having + an empty CPACK_NSIS_PACKAGE_NAME for the CMake nightly package.) + +2009-07-20 10:58 hoffman + + * Tests/CMakeLists.txt: ENH: set expected failure for tests + +2009-07-20 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-19 13:40 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: ENH: fix warning + +2009-07-19 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-18 01:05 lowman + + * Modules/FindSDL.cmake: BUG: Fix include path detection with + SDLDIR env var (issue #9086). Also removed some superfluous + search paths. + +2009-07-18 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-17 23:51 lowman + + * Modules/FindPerlLibs.cmake: ENH: Also add ARCHLIB/CORE to include + search paths so perl.h can be found on non-standard install + prefixes + +2009-07-17 23:31 lowman + + * Modules/FindPerlLibs.cmake: ENH: Improve detection of + perl.h/libperl, issue #7898 + +2009-07-17 16:15 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: ENH: fix warning + +2009-07-17 14:51 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: ENH: Edit button label for + new changes dialog. + +2009-07-17 14:38 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + QCMakeCacheView.cxx, QCMakeCacheView.h: + ENH: Add a "Show my changes" to the Tools menu. Changes + by the user are recorded and when requested, it shows -D + arguments for commandline or contents for a cache file. + +2009-07-17 10:06 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: ENH: compute the max test + name width based on the length of the tests + +2009-07-17 10:05 hoffman + + * Source/: cmGlobalGenerator.h, cmGlobalVisualStudioGenerator.h, + cmLocalGenerator.cxx, cmMakefile.cxx: ENH: make sure GUIDs for + filters are cached + +2009-07-17 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-16 18:53 clinton + + * Modules/FindQt4.cmake: BUG: fix relative paths from different + drives on Windows + +2009-07-16 11:48 david.cole + + * Modules/: CPack.cmake, NSIS.template.in: BUG: Re-fix issue #8682. + Use new variable CPACK_NSIS_PACKAGE_NAME in appropriate places + rather than CPACK_NSIS_DISPLAY_NAME. CPACK_NSIS_DISPLAY_NAME is + the Add/Remove control panel's description string for the + installed package. Using it as the "Name" of the NSIS installer + package made the CMake installer itself use really long strings + in the installer GUI. This fix still allows for the original + intent of the first fix for #8682 -- the ability to separate the + installer name from the default install directory, but it uses a + new/different variable to achieve the separation. + +2009-07-16 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-15 12:43 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: remove debug message + +2009-07-15 12:18 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: do not use + /INCREMENTAL:YES with VS 10 compiler + +2009-07-15 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-14 19:34 clinton + + * Source/QtDialog/CMakeSetup.cxx: + BUG: Don't let Qt suppress error dialogs. Add call to + SetErrorMode(0); See #9258. + +2009-07-14 16:06 hoffman + + * Source/cmIncludeExternalMSProjectCommand.cxx: ENH: fix vsexternal + test on vs 71 + +2009-07-14 15:17 king + + * Modules/: CMakeCCompilerId.c.in, CMakeCXXCompilerId.cpp.in, + CMakeFortranCompilerId.F.in: ENH: Check _SGI_COMPILER_VERSION for + compiler id + + Some SGI compilers define _SGI_COMPILER_VERSION in addition to + the old _COMPILER_VERSION preprocessor symbol. It is more + distinctive, so we should check it in case the old one is ever + removed. + +2009-07-14 15:16 king + + * Modules/CMakeFortranCompilerId.F.in: BUG: Avoid SGI preprocessor + bug for Fortran Id + + The SGI preprocessor /usr/lib/cpp produces bad output on this + code: + + #if 1 + A + #elif 1 + B + #else + C + #endif + + Both 'A' and 'C' appear in the output! We work around the + problem by using '#elif 1' instead of '#else'. + + This fixes detection of the SGI Fortran compiler id in -o32 mode. + +2009-07-14 14:44 alex + + * Modules/MacroAddFileDependencies.cmake: STYLE: add documentation + for MACRO_ADD_FILE_DEPENDENCIES() + + Alex + +2009-07-14 14:16 hoffman + + * Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio6Generator.h, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio71Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalVisualStudioGenerator.cxx, + Source/cmGlobalVisualStudioGenerator.h, + Source/cmIncludeExternalMSProjectCommand.cxx, + Source/cmLocalGenerator.cxx, + Source/cmLocalVisualStudio10Generator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmVisualStudio10TargetGenerator.cxx, + Tests/VSExternalInclude/CMakeLists.txt: ENH: remove + INCLUDE_EXTERNAL_MSPROJECT name hack, and use target properties + instead, fix VXExternalInclude test for VS10 + +2009-07-14 10:15 king + + * Source/cmSeparateArgumentsCommand.cxx, + Source/cmSeparateArgumentsCommand.h, + Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/SeparateArgumentsTest.cmake.in: ENH: Teach + separate_arguments() to parse commands + + This adds UNIX_COMMAND and WINDOWS_COMMAND modes to the command. + These modes parse unix- and windows-style command lines. + +2009-07-14 10:14 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h: STYLE: Factor + cmComputeLinkInformation constructor + + This factors some code out of the constructor into a new method + cmComputeLinkInformation::LoadImplicitLinkInfo for readability. + +2009-07-14 10:14 king + + * Source/: cmOrderDirectories.cxx, cmOrderDirectories.h: STYLE: + Factor CollectOriginalDirectories code + + This factors code out of + cmOrderDirectories::CollectOriginalDirectories into + cmOrderDirectories::AddOriginalDirectories. Later a new call + will be added, and this is more readable anyway. + +2009-07-14 08:38 king + + * Tests/ExportImport/: CMakeLists.txt, InitialCache.cmake.in: COMP: + Shorten ExportImport test command lines + + The ExportImport test drives its Export and Import projects using + the same compiler and flags. This converts the ctest + --build-and-test command lines to use an initial cache file + instead of passing all settings on the command line. + + We need a shorter command line to pass through VS 6 on Win98. + This approach reduces duplicate code anyway. + +2009-07-14 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-13 17:35 king + + * Source/kwsys/System.c: BUG: Parse escapes in single-quoted unix + arguments + + This fixes KWSys's unix-style command-line parsing to interpret + backslash escapes inside single-quoted strings. + +2009-07-13 17:08 king + + * Source/cmSystemTools.cxx: COMP: Include for 'free' on + QNX + +2009-07-13 16:58 hoffman + + * Source/cmLocalVisualStudio10Generator.cxx, + Source/cmLocalVisualStudio10Generator.h, + Source/cmLocalVisualStudio7Generator.h, + Source/cmVisualStudio10TargetGenerator.cxx, + Source/cmVisualStudio10TargetGenerator.h, + Source/cmVisualStudioGeneratorOptions.cxx, + Tests/PrecompiledHeader/CMakeLists.txt, + Tests/Preprocess/CMakeLists.txt, + Tests/VSExternalInclude/CMakeLists.txt: ENH: almost all tests + passing in vs 10, commit fixes preprocess and starts vs external + project + +2009-07-13 16:46 king + + * Source/cmSystemTools.cxx: COMP: Include for 'free' + +2009-07-13 16:22 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Add + cmSystemTools::ParseUnixCommandLine + + This method is a C++ wrapper around the KWSys System library + function to parse unix-style command lines. + +2009-07-13 16:22 king + + * Source/kwsys/: ProcessUNIX.c, System.c, System.h.in: ENH: Provide + unix-sytle command line parsing + + Add System_Parse_CommandForUnix to the KWSys System interface as + a utility to parse a unix-style command line. Move the existing + implementation out of ProcessUNIX. Add a flags argument reserved + for future use in providing additional behavior. + +2009-07-13 11:24 king + + * Modules/: CMakeFortranCompilerABI.F, + CMakeTestFortranCompiler.cmake: ENH: Create Fortran ABI detection + framework + + This invokes CMakeDetermineCompilerABI.cmake for Fortran at the + same place it is already done for C and CXX. + +2009-07-13 10:46 king + + * Modules/ExternalProject.cmake: ENH: Check tarball filename in + ep_add + + This teaches the ExternalProject module to check the download URL + file name. If it is not a tarball (.tar, .tgz, .tar.gz) it is an + error because UntarFile does not yet understand other archive + formats. + +2009-07-13 10:46 king + + * Modules/UntarFile.cmake: BUG: Teach UntarFile to delete dir on + error + + When tarball extraction fails we should still cleanup the + temporary extraction directory. Otherwise the next attempt will + create a new directory and the first one will never be removed. + +2009-07-13 10:40 king + + * Modules/Platform/Linux-SunPro-CXX.cmake: BUG: Fix rpath-link flag + for SunPro C++ on Linux + + This teaches Modules/Platform/Linux-SunPro-CXX.cmake the + -rpath-link flag. The SunPro C++ compiler does not have a '-Wl,' + option, so we just pass the flag directly. + + This problem was exposed by the ExportImport test now that it + links an executable through the C++ compiler with the -rpath-link + flag. + +2009-07-13 09:20 king + + * Tests/ExportImport/Export/: CMakeLists.txt, testLib6.c, + testLib6c.c: COMP: Fix ExportImport testLib6 on VS6 + + The compiler does not support multiple source files differing + only by extension in one target. This renames the C source file + in the test. + +2009-07-13 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-12 14:52 alex + + * Tests/CMakeLists.txt: BUG: disable the test for now, will make it + work correctly later + + Alex + +2009-07-12 04:51 alex + + * Source/CTest/cmCTestScriptHandler.cxx, Tests/CMakeLists.txt, + Modules/CTestScriptMode.cmake, + Tests/CTestScriptMode/CTestTestScriptMode.cmake.in: STYLE: don't + load CMakeDetermineSystem and CMakeSystemSpecific directly from + cmCTestScriptHandler, but have it load the new script + CTestScriptMode.cmake -> that makes it more flexible, also add a + simple test that the system name has been determined correctly + + Alex + +2009-07-12 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-11 16:30 alex + + * Source/CTest/: cmCTestScriptHandler.cxx, cmCTestScriptHandler.h: + STYLE: move the code for writing the initial cache into its own + separate function, makes the long ProcessHandler() a little bit + shorter + + Alex + +2009-07-11 16:27 alex + + * Source/CTest/: cmCTestScriptHandler.cxx, cmCTestScriptHandler.h: + STYLE: rename InitCache to InitialCache, since it contains the + contents for the initial cache and is not e.g. a flag which shows + whether the cache should be initialized + + Alex + +2009-07-11 10:12 king + + * Source/: cmExportFileGenerator.cxx, cmTarget.cxx: ENH: Export and + import link interface languages + + Now that languages are part of the link interface of a target we + need to export/import the information. A new + IMPORTED_LINK_INTERFACE_LANGUAGES property and per-config + IMPORTED_LINK_INTERFACE_LANGUAGES_ property specify the + information for imported targets. The export() and + install(EXPORT) commands automatically set the properties. + +2009-07-11 10:10 king + + * Tests/ExportImport/: CMakeLists.txt, Export/CMakeLists.txt, + Export/testLib6.c, Export/testLib6.cxx, Import/CMakeLists.txt, + Import/A/CMakeLists.txt, Import/A/imp_testExe1.c: ENH: Test + export/import of link interface languages + + This extends the ExportImport test. The Export project creates a + C++ static library and exports it. Then the Import project links + the library into a C executable. On most platforms the + executable will link only if the C++ linker is chosen correctly. + +2009-07-11 00:05 hoffman + + * Source/cmLocalGenerator.h, Source/cmMakefile.cxx, + Source/cmSourceGroup.cxx, Source/cmSourceGroup.h, + Source/cmVisualStudio10TargetGenerator.cxx, + Source/cmVisualStudio10TargetGenerator.h, + Tests/SourceGroups/CMakeLists.txt, Tests/SourceGroups/README.txt: + ENH: add group support and fix borland error + +2009-07-11 00:01 kwrobot + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-10 16:51 king + + * Source/: cmGlobalGenerator.h, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h: BUG: Fix Xcode linker language + + Xcode does not seem to support direct requests for using the + linker for a particular language. It always infers the linker + using the languages in the source files. When no user source + files compile with target's linker language we add one to help + Xcode pick the linker. + + A typical use case is when a C executable links to a C++ archive. + The executable has no C++ source files but we need to use the + C++ linker. + +2009-07-10 13:53 king + + * Source/cmTarget.cxx: ENH: Update LINKER_LANGUAGE and HAS_CXX docs + + This updates the documentation of these properties to account for + the new automatic linker language computation. + +2009-07-10 13:53 king + + * Tests/: CMakeLists.txt, LinkLanguage/CMakeLists.txt, + LinkLanguage/LinkLanguage.c, LinkLanguage/foo.cxx: ENH: Test + transitive link languages + + This test creates a C executable that links to a C++ static + library. On most platforms the executable will not link unless + the C++ linker is chosen correctly. + +2009-07-10 13:53 king + + * Source/: cmTarget.cxx, cmTarget.h: ENH: Consider link + dependencies for link language + + This teaches cmTarget to account for the languages compiled into + link dependencies when determining the linker language for its + target. + + We list the languages compiled into a static archive in its link + interface. Any target linking to it knows that the runtime + libraries for the static archive's languages must be available at + link time. For now this affects only the linker language + selection, but later it will allow CMake to automatically list + the language runtime libraries. + +2009-07-10 13:08 king + + * Source/CTest/cmCTestHG.cxx: COMP: Fix cmCTestHG for old HP + compiler + + The compiler does not have a fully compliant std::string. + +2009-07-10 12:26 hoffman + + * Source/cmVisualStudio10TargetGenerator.cxx: ENH: change so rules + show up in GUI, must be windows path + +2009-07-10 11:07 king + + * Modules/CTest.cmake, Source/CMakeLists.txt, + Source/CTest/cmCTestHG.cxx, Source/CTest/cmCTestHG.h, + Source/CTest/cmCTestUpdateCommand.cxx, + Source/CTest/cmCTestUpdateHandler.cxx, + Source/CTest/cmCTestUpdateHandler.h, Tests/CMakeLists.txt, + Tests/CTestUpdateHG.cmake.in: ENH: Teach CTest to handle + Mercurial repositories + + This creates cmCTestHG to drive CTest Update handling on hg-based + work trees. Currently we always update to the head of the remote + tracking branch (hg pull), so the nightly start time is ignored + for Nightly builds. A later change will address this. + + See issue #7879. Patch from Emmanuel Christophe. I modified the + patch slightly for code style, to finish up some parsing details, + and to fix the test. + +2009-07-10 11:07 king + + * Source/cmProcessTools.h: ENH: New OutputParser::Process() + signature + + This overload accepts a null-terminated string instead of + requiring a length. It is useful to pass some fake process + output before and after the real process output. + +2009-07-10 09:53 david.cole + + * CTestCustom.cmake.in: COMP: Mask out shadowed declaration + warnings that always follow already masked Utilities/cmtar + warnings. + +2009-07-10 09:12 hoffman + + * Modules/CMakeVS10FindMake.cmake, Source/cmCTest.cxx, + Source/cmGlobalVisualStudio10Generator.cxx, + Source/cmGlobalVisualStudio10Generator.h, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalVisualStudioGenerator.cxx, + Source/cmLocalVisualStudio10Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/cmLocalVisualStudioGenerator.h, Source/cmTarget.cxx, + Source/cmVisualStudio10TargetGenerator.cxx, + Source/cmVisualStudio10TargetGenerator.h, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt: ENH: only 5 + failing tests for VS 10 + +2009-07-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-09 14:15 king + + * Source/kwsys/SharedForward.h.in: COMP: More KWSys SharedForward + pointer const-ness + + This adds another cast to avoid pointer conversion warnings. + Unfortunately C does not recognize implicit conversions that add + cv-qualifiers as well as C++ does. + +2009-07-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-08 16:18 david.cole + + * Source/kwsys/MD5.c: COMP: Eliminate "conversion may change sign + of result" warnings by using size_t where appropriate. (Missed + one warning with last commit: add a cast to md5_word_t.) + +2009-07-08 16:15 david.cole + + * Source/kwsys/MD5.c: COMP: Eliminate "conversion may change sign + of result" warnings by using size_t where appropriate. + +2009-07-08 15:09 king + + * Source/kwsys/SharedForward.h.in: COMP: Fix KWSys SharedForward + sign conversion + + This uses size_t where necessary to avoid size_t/int conversion + warnings. + +2009-07-08 15:09 king + + * Source/kwsys/SharedForward.h.in: COMP: Fix KWSys SharedForward + pointer const-ness + + This adds const-ness and casts where necessary to avoid pointer + conversion warnings. + +2009-07-08 14:43 david.cole + + * CTestCustom.cmake.in: COMP: Suppress warnings from the + Utilities/cmtar code in dashboard results. + +2009-07-08 14:33 king + + * Source/: cmDocumentVariables.cxx, cmTarget.cxx: BUG: Use link + language for target name computation + + The commit "Do not compute link language for LOCATION" was wrong. + The variables + + CMAKE_STATIC_LIBRARY_PREFIX_Java + CMAKE_STATIC_LIBRARY_SUFFIX_Java + + are used for building Java .jar files. This commit re-enables + the feature and documents the variables: + + CMAKE_EXECUTABLE_SUFFIX_ + CMAKE_IMPORT_LIBRARY_PREFIX_ + CMAKE_IMPORT_LIBRARY_SUFFIX_ + CMAKE_SHARED_LIBRARY_PREFIX_ + CMAKE_SHARED_LIBRARY_SUFFIX_ + CMAKE_SHARED_MODULE_PREFIX_ + CMAKE_SHARED_MODULE_SUFFIX_ + CMAKE_STATIC_LIBRARY_PREFIX_ + CMAKE_STATIC_LIBRARY_SUFFIX_ + + Instead of making separate, repetitive entries for the _ + variable documentation, we just mention the per-language name in + the text of the platform-wide variable documentation. Internally + we keep undocumented definitions of these properties to satisfy + CMAKE_STRICT mode. + +2009-07-08 13:03 king + + * Source/: cmComputeLinkInformation.cxx, + cmGlobalXCodeGenerator.cxx, cmLocalVisualStudio7Generator.cxx, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, cmTarget.cxx, cmTarget.h, + cmVisualStudio10TargetGenerator.cxx: ENH: Pass config to + cmTarget::GetLinkerLanguage + + This passes the build configuration to most GetLinkerLanguage + calls. In the future the linker language will account for + targets linked in each configuration. + +2009-07-08 13:03 king + + * Source/: cmComputeLinkInformation.cxx, + cmGlobalUnixMakefileGenerator3.cxx, cmInstallTargetGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, cmTarget.cxx, cmTarget.h: + ENH: Pass config to cmTarget RPATH install methods + + This passes the build configuration to cmTarget methods + IsChrpathUsed and NeedRelinkBeforeInstall. Later these methods + will use the value. + +2009-07-08 13:03 king + + * Source/cmGlobalXCodeGenerator.cxx: ENH: Use fixed header file + type mapping for Xcode + + This simplifies computation of the lastKnownFileType attribute + for header files in Xcode projects. We now use a fixed mapping + from header file extension to attribute value. The value is just + a hint to the Xcode editor, so computing the target linker + language is overkill. + +2009-07-08 13:03 king + + * Source/: cmDocumentVariables.cxx, cmTarget.cxx: ENH: Do not + compute link language for LOCATION + + The LOCATION property requires the full file name of a target to + be computed. Previously we computed the linker language for a + target to look up variables such as + CMAKE_SHARED_LIBRARY_SUFFIX_. This led to locating all the + source files immediately instead of delaying the search to + generation time. In the future even more computation will be + needed to get the linker language, so it is better to avoid it. + + The _ versions of these variables are undocumented, not set + in any platform file we provide, and do not produce hits in + google. This change just removes the unused feature outright. + +2009-07-08 12:04 king + + * Source/: cmComputeLinkDepends.cxx, cmTarget.cxx, cmTarget.h: ENH: + Introduce cmTarget::LinkImplementation API + + The new method centralizes loops that process raw + OriginalLinkLibraries to extract the link implementation + (libraries linked into the target) for each configuration. + Results are computed on demand and then cached. This simplifies + link interface computation because the default case trivially + copies the link implementation. + +2009-07-08 11:41 king + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt, + Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt, + CustomCommand/CMakeLists.txt, Dependency/CMakeLists.txt, + Dependency/Case4/CMakeLists.txt, + ExportImport/Export/CMakeLists.txt, + ExportImport/Import/CMakeLists.txt, FunctionTest/CMakeLists.txt, + LoadCommand/CMakeCommands/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/CMakeLists.txt, + MacroTest/CMakeLists.txt, MakeClean/CMakeLists.txt, + Plugin/CMakeLists.txt, Preprocess/CMakeLists.txt, + ReturnTest/CMakeLists.txt, RuntimePath/CMakeLists.txt, + SourceGroups/CMakeLists.txt: ENH: Remove CMAKE_ANSI_CFLAGS from + tests + + As of CMake 2.6 this variable is not defined, and the ANSI flags + for the HP compiler are simply hard-coded in the default C flags. + +2009-07-08 09:14 king + + * Modules/CMakeDetermineCCompiler.cmake: ENH: Identify HP C + compiler + + This compiler does not enable ANSI mode by default. When + identifying the C compiler we try passing -Aa in case it is the + HP compiler. + +2009-07-08 08:31 king + + * Source/: cmTarget.cxx, cmTarget.h: COMP: Pimplize cmTarget + ImportInfo and OutputInfo + + These member structures are accessed only in the cmTarget + implementation so they do not need to be defined in the header. + This cleanup also aids Visual Studio 6 in compiling them. + +2009-07-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-07 14:02 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: ENH: get the build type + specific location + + Alex + +2009-07-07 11:30 king + + * Source/cmTarget.cxx: BUG: Do not recompute link interfaces + + The config-to-interface map in cmTarget should use + case-insensitive configuration names. The change avoids + repeating work if the given configuration has a different case + than one already computed. + +2009-07-07 10:57 king + + * Source/cmTarget.cxx: BUG: Fix CMP0003 wrong-config link dir + support + + This fixes a dumb logic error introduced by the centralization of + link interface computation. It prevented link directories from + alternate configurations from getting listed by the OLD behavior + of CMP0003 for targets linked as transitive dependencies. + +2009-07-07 10:56 king + + * Source/cmTarget.h: STYLE: Fix comment on cmTarget::LinkInterface + + The comment had a typo and was longer than necessary. + +2009-07-07 09:45 king + + * Source/: cmComputeLinkDepends.cxx, cmExportFileGenerator.cxx, + cmTarget.cxx, cmTarget.h: ENH: Simplify cmTarget link interface + storage + + This makes the LinkInterface struct a member of cmTarget, + pimplizes the config-to-interface map, and stores interface + instances by value. + +2009-07-07 07:44 king + + * Source/: cmComputeLinkInformation.cxx, + cmGlobalXCodeGenerator.cxx, cmLocalGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, cmTarget.cxx, cmTarget.h, + cmVisualStudio10TargetGenerator.cxx: ENH: Simpler + cmTarget::GetLinkerLanguage signature + + This method previously required the global generator to be + passed, but that was left from before cmTarget had its Makefile + member. Now the global generator can be retrieved automatically, + so we can drop the method argument. + +2009-07-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-06 16:25 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h, + cmExportFileGenerator.cxx, cmExportFileGenerator.h, cmTarget.cxx, + cmTarget.h: ENH: Centralize default link interface computation + + When LINK_INTERFACE_LIBRARIES is not set we use the link + implementation to implicitly define the link interface. These + changes centralize the decision so that all linkable targets + internally have a link interface. + +2009-07-06 16:24 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h, + cmTarget.cxx, cmTarget.h: ENH: Move CMP0004 check into cmTarget + + This moves code implementing policy CMP0004 into + cmTarget::CheckCMP0004. The implementation is slightly simpler + and can be re-used outside of cmComputeLinkDepends. + +2009-07-06 16:24 king + + * Source/: cmTarget.cxx, cmTarget.h: ENH: Exception safe link + interface computation + + This fixes cmTarget::GetLinkInterface to compute and return the + link interface in an exception-safe manner. We manage the link + interface returned by cmTarget::ComputeLinkInterface using + auto_ptr. + +2009-07-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-03 10:34 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx: ENH: Pass config to + cmTarget::GetDirectory() + + This teaches the makefile generators to always pass the + configuration name to the cmTarget::GetDirectory method. Later + this will allow per-configuration target output directories, and + it cleans up use of the current API. + +2009-07-03 10:33 king + + * Source/: cmTarget.cxx, cmTarget.h: ENH: Refactor target output + dir computation + + This creates cmTarget::GetOutputInfo to compute, cache, and + lookup target output directory information on a per-configuration + basis. It avoids re-computing the information every time it is + needed. + +2009-07-03 10:33 king + + * Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Templates/UtilityHeader.dsptemplate: BUG: Avoid + cmTarget::GetDirectory for utilities + + Since utility targets have no main output files like executables + or libraries, they do not define an output directory. This + removes a call to cmTarget::GetDirectory from + cmLocalVisualStudio{6,7}Generator for such targets. + +2009-07-03 10:33 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: STYLE: Replace large if() with + named boolean + + In cmLocalVisualStudio{6,7}Generator this replaces a large if() + test with a re-usable result stored in a boolean variable named + accordingly. + +2009-07-03 08:41 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h: ENH: + Create cmMakefileTargetGenerator::ConfigName + + This member stores the build configuration for which Makefiles + are being generated. It saves repeated lookup of the equivalent + member from cmLocalUnixMakefileGenerator3, making code shorter + and more readable. + +2009-07-03 08:40 king + + * Source/: cmInstallTargetGenerator.cxx, + cmInstallTargetGenerator.h: ENH: Cleanup per-config target + install generation + + This cleans up cmInstallTargetGenerator's code that computes the + build tree location of a target under each configuration. + +2009-07-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-02 17:38 david.cole + + * Modules/ExternalProject.cmake: BUG: Allow arbitrary text in + values for some keywords. (And avoid warning that the arbitrary + text is an unknown keyword.) + +2009-07-02 16:13 king + + * Source/CTest/cmCTestTestHandler.cxx: ENH: Reports "Passed" for + WILL_FAIL tests + + Previously tests marked with WILL_FAIL have been reported by + CTest as + + ...............***Failed - supposed to fail + + when they correctly failed. Now we just report ".....Passed" + because there is no reason to draw attention to something that + works as expected. + +2009-07-02 14:14 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + BUG: Do not generate "global" Xcode config + + Xcode 2.0 and below supported only one configuration, but 2.1 and + above support multiple configurations. In projects for the + latter version we have been generating a "global" set of + buildSettings for each target in addition to the + per-configuration settings. These global settings are not used + by Xcode 2.1 and above, so we should not generate them. + +2009-07-02 14:13 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: Simplify Xcode CreateBuildSettings method + + The cmGlobalXCodeGenerator::CreateBuildSettings had the three + arguments productName, productType, and fileType that returned + information used by only one of the call sites. This change + refactors that information into separate methods named + accordingly. + +2009-07-02 14:13 king + + * Source/cmGlobalXCodeGenerator.cxx: ENH: Use logical target names + in Xcode projects + + Previously we named Xcode targets using the output file name from + one of the configurations. This is not very friendly, especially + because it changes with CMAKE_BUILD_TYPE. Instead we should use + the original logical target names for the Xcode target names. + This is also consistent with the way the other IDE generators + work. + +2009-07-02 13:17 david.cole + + * Modules/ExternalProject.cmake: BUG: cmd_set logic was missing + from update and patch steps. Fix it so that UPDATE_COMMAND "" + means "no update step even though this is a CVS/SVN + repository..." + +2009-07-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-07-01 14:29 king + + * Tests/CMakeLists.txt: BUG: Skip CTest.Update* for cygwin tools on + Windows + + These tests cannot run with cygwin tools unless testing cygwin + CTest. The version control tools do not understand all Windows + paths. + +2009-07-01 13:48 david.cole + + * Tests/ExternalProject/CMakeLists.txt: BUG: Exclude svn portions + of ExternalProject test when: svn client version is less than 1.2 + or cygwin/non-cygwin mismatch detected -- avoids ExternalProject + test failures on dash5 and dash22-cygwin. Also, non-code change: + allow cvslock through Windows firewall to prevent ExternalProject + test failure on dash1vista32. + +2009-07-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-30 09:10 king + + * Source/cmVS10CLFlagTable.h: STYLE: Fix line-too-long style + violation. + +2009-06-30 09:05 king + + * Source/cmDocumentVariables.cxx: BUG: Fix documentation of + CMAKE_CFG_INTDIR + + The documentation of this variable was out-dated and misleading. + See issue #9219. + +2009-06-30 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-29 14:27 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: COMP: don't use + vector::at(), this doesn't seem to exist everyhwere + (http://www.cdash.org/CDash/viewBuildError.php?buildid=366375) + + Alex + +2009-06-29 13:02 king + + * Source/: cmGlobalXCode21Generator.cxx, + cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: ENH: + Generate native Xcode 3.0 and 3.1 projects + + CMake previously generated Xcode project files labeled as + 2.4-compatible by recent versions of Xcode (3.0 and 3.1). It is + better to generate native Xcode 3.0 and 3.1 projects. In + particular, this can improve build times by using the "Build + independent targets in parallel" feature. + + Patch from Doug Gregor. See issue #9216. + +2009-06-29 10:46 david.cole + + * Tests/ExternalProject/CMakeLists.txt: BUG: Avoid running the cvs + portions of the ExternalProject test on non-cygwin builds that + are using cygwin cvs.exe. + +2009-06-29 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-28 09:46 hoffman + + * Source/cmVisualStudio10TargetGenerator.h: ENH: add rest of lib + check + +2009-06-28 08:59 hoffman + + * Source/cmVisualStudio10TargetGenerator.cxx: ENH: fix line length + +2009-06-28 08:06 alex + + * Source/cmConfigureFileCommand.h: STYLE: document #cmakedefine01 + (see #9189 , there's also a test for it in Tests/Complex/ ) + + Alex + +2009-06-28 08:05 alex + + * Source/cmDocumentationFormatterText.cxx: STYLE: don't print the + section name "SingleItem" if the documentation for just a single + item is printed + + Alex + +2009-06-28 05:59 alex + + * Modules/CMakeFindEclipseCDT4.cmake: BUG: recognize system include + paths also when the languages are set to something different from + "C", by resetting them to "C" (#9122) + + Alex + +2009-06-28 04:58 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: ENH: create a "Virtual + Folder" in CodeBlocks, which contains all the cmake files of the + project, i.e. there is now a "CMake Files" folder additionally to + the "Sources", "Headers" and "Others" folders which already + existed. Patch by Daniel Teske. + + Alex + +2009-06-28 04:30 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: ENH: also support nmake + and msvc for use with CodeBlocks under Windows, patch by Daniel + Teske + + Alex + +2009-06-28 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-27 11:17 alex + + * Source/cmDocumentVariables.cxx: STYLE: document + CMAKE_SKIP_INSTALL_ALL_DEPENDENCY variable + + Alex + +2009-06-27 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-26 13:00 david.cole + + * Tests/ExternalProject/: CMakeLists.txt, svnrepo.tgz: BUG: + Downgrade svn repository to be created with an svn 1.2 + installation (rather than 1.4) so that it works (hopefully) with + more svn clients in the wild. Change time stamps of test projects + in CMakeLists.txt to reflect times available in newly created + repository. Add UPDATE_COMMAND "" for checkouts that are + tag-based or date-stamp-based to avoid unnecessary update steps. + +2009-06-26 11:50 hoffman + + * Source/: cmGlobalVisualStudio10Generator.h, cmVS10CLFlagTable.h, + cmVS10LibFlagTable.h, cmVS10LinkFlagTable.h, + cmVisualStudio10TargetGenerator.cxx, cmparseMSBuildXML.py: ENH: + fix line length issues + +2009-06-26 11:32 david.cole + + * Tests/ExternalProject/CMakeLists.txt: ENH: Do not unzip the local + repositories unless CVS and SVN executables are available. Add + 'configure' step to the repository extraction 'projects' to print + the version number of CVS and SVN in the dashboard test/build + output. + +2009-06-26 10:18 hoffman + + * CMakeCPackOptions.cmake.in, + Source/QtDialog/QtDialogCPack.cmake.in: ENH: do not create a + desktop link for CMakeSetup + +2009-06-26 10:00 hoffman + + * Utilities/KWStyle/CMake.kws.xml.in: ENH: 80 is fine, i guess not + +2009-06-26 09:59 hoffman + + * Utilities/KWStyle/CMake.kws.xml.in: ENH: 80 is fine + +2009-06-26 09:55 david.cole + + * Tests/ExternalProject/CMakeLists.txt: ENH: Revise the + ExternalProject test to use local CVS and SVN repositories to + avoid network activity. Also: stop building KWStyle and kwsys as + part of this test to reduce the amount of time spent running the + test. Instead, build TutorialStep1 as retrieved from the new + local repositories with various tags, date stamps and revision + numbers. + +2009-06-26 00:07 hoffman + + * Source/cmVisualStudio10TargetGenerator.cxx: ENH: remove debug + print + +2009-06-26 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-25 22:53 hoffman + + * Source/: cmVisualStudio10TargetGenerator.cxx, + cmVisualStudio10TargetGenerator.h: ENH: add obj file support and + remove a warning + +2009-06-25 16:41 hoffman + + * CompileFlags.cmake, Modules/CMakeVS10FindMake.cmake, + Source/CMakeLists.txt, Source/cmGlobalGenerator.cxx, + Source/cmGlobalVisualStudio10Generator.cxx, + Source/cmGlobalVisualStudio10Generator.h, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmListFileLexer.c, Source/cmLocalGenerator.h, + Source/cmLocalVisualStudio10Generator.cxx, + Source/cmLocalVisualStudio10Generator.h, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.h, Source/cmMakefile.cxx, + Source/cmVS10CLFlagTable.h, Source/cmVS10LibFlagTable.h, + Source/cmVS10LinkFlagTable.h, + Source/cmVisualStudio10TargetGenerator.cxx, + Source/cmVisualStudio10TargetGenerator.h, + Source/cmVisualStudioGeneratorOptions.cxx, + Source/cmVisualStudioGeneratorOptions.h, Source/cmake.cxx, + Source/cmparseMSBuildXML.py, Source/kwsys/ProcessWin32.c: ENH: + first pass at VS 10, can bootstrap CMake, but many tests still + fail + +2009-06-25 16:39 hoffman + + * Source/CTest/cmCTestScriptHandler.cxx: ENH: add reminder comment + +2009-06-25 16:38 hoffman + + * Source/CTest/cmCTestSubmitHandler.cxx: ENH: set an upload speed + limit for ctest + +2009-06-25 12:03 david.cole + + * Tests/ExternalProject/: cvsrepo.tgz, svnrepo.tgz: ENH: Add *.tgz + files of cvs and svn repositories containing the TutorialStep1 + project to test cvs and svn capabilities of ExternalProject + without requiring network activity. + +2009-06-25 10:51 king + + * Tests/CMakeLists.txt: BUG: Fix CTest.UpdateBZR tests to run in + parallel + + The UpdateBZR and UpdateBZR.CLocale tests should run in different + directories so that they can be executed in parallel. + +2009-06-25 09:58 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmMakefileTargetGenerator.cxx, + cmMakefileTargetGenerator.h: ENH: Cleanup make progress rule + generation code + + This cleans up the Makefile generator's progress rule code. + Instead of keeping every cmMakefileTargetGenerator instance alive + to generate progress, we keep only the information necessary in a + single table. This approach keeps most of the code in + cmGlobalUnixMakefileGenerator3, thus simplifying its public + interface. + +2009-06-25 09:43 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: STYLE: Remove unused + variable + +2009-06-25 08:45 king + + * Modules/: CMakeDetermineFortranCompiler.cmake, + CMakeFortranCompilerId.F.in, CMakeFortranCompilerId.F90.in: ENH: + Identify Fortran compilers with fixed format + + This enhances the Fortran compiler id detection by using a source + that can compile either as free or fixed format. As long as the + compiler knows it should preprocess the source file (.F) the + identification can work. Even free-format compilers may try + fixed-format parsing if the user specifies certain flags, so we + must support both. + +2009-06-25 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-24 16:50 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: + ENH: Save/restore splitter sizes. Fixes #9070. + +2009-06-24 15:09 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Remove unused + cmSystemTools::RemoveEscapes + + The RemoveEscapes method is no longer used anywhere. All uses of + it have been replaced by a real lexer. We can remove the method. + +2009-06-24 15:03 king + + * Modules/ExternalProject.cmake, + Tests/ExternalProject/CMakeLists.txt: ENH: New + ExternalProject.cmake module interface + + This creates new module ExternalProject.cmake to replace the + prototype AddExternalProject.cmake module. The interface is more + refined, more flexible, and better documented than the prototype. + + This also converts the ExternalProject test to use the new + module. The old module will be removed (it was never in a CMake + release) after projects using it have been converted to the new + module. + +2009-06-24 14:48 king + + * Tests/CMakeLists.txt: BUG: Extend timeout of ExternalProject test + + This test requires a long time on slower machines, so we need to + extend its timeout. It is an important test, so it does not fall + under the CMAKE_RUN_LONG_TESTS option. In the future we should + try to shorten the test by building simpler external projects. + +2009-06-24 13:24 king + + * Source/cmTargetLinkLibrariesCommand.h: ENH: Mention cycles in + target_link_libraries docs + + This documents CMake's support for cycles in the dependency graph + of STATIC libraries. + +2009-06-24 09:36 king + + * Source/: cmMakefile.cxx, cmSourceFile.cxx, cmTarget.cxx: ENH: + Clarify COMPILE_DEFINITIONS separator in docs + + The COMPILE_DEFINITIONS properties are semicolon-separated lists. + Make this clear in the documentation. See issue #9199. + +2009-06-24 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-23 16:40 hoffman + + * Modules/FindBoost.cmake: ENH: boost lib is often found under the + boost include dir + +2009-06-23 16:31 hoffman + + * Modules/FindBoost.cmake: ENH: add additional place to look for + boost so it works out of the box on windows + +2009-06-23 12:58 martink + + * Tests/Tutorial/: Step5/MathFunctions/MakeTable.cxx, + Step6/MathFunctions/MakeTable.cxx, + Step7/MathFunctions/MakeTable.cxx: ENH: fix spelling mistake + +2009-06-23 09:06 king + + * Source/CTest/cmCTestCVS.cxx: BUG: Fix CVS update parsing for + TortoiseCVS + + The TortoiseCVS version of cvs.exe includes the '.exe' in cvs + update messages for files removed from the repository. This + change accounts for it in the regular expressions that match such + lines. Now removed files are properly reported by ctest_update() + when using TortoiseCVS. + +2009-06-23 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-22 16:25 king + + * Tests/: CMakeLists.txt, CTestUpdateCVS.cmake.in: ENH: Auto-enable + CTest.UpdateCVS test on Windows + + The test needs to create a cvs repository with 'cvs init', but + the CVSNT client on Windows needs 'cvs init -n' to avoid + administrator access. Previously we required users to explicitly + enable CTEST_TEST_UPDATE_CVS to activate the test on Windows. + + This teaches the test to use the '-n' option when necessary. Now + we can enable the test in all cases except when trying to use a + cygwin cvs.exe without cygwin paths. + +2009-06-22 14:19 king + + * Source/kwsys/Configure.h.in: COMP: Quiet aggressive Borland + warnings in KWSys + + This disables Borland warning 8027 while compiling KWSys source + files. It provides no useful information. + +2009-06-22 14:19 king + + * Source/kwsys/SystemTools.cxx: COMP: Remove useless variable + assignment + + This removes an assignment whose result is never used, thus + quieting a warning from Borland. + +2009-06-22 10:02 hoffman + + * Modules/CMakeTestCCompiler.cmake: BUG: remove warning in test of + compiler so -Werror does not fail + +2009-06-22 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-21 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-20 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-19 17:09 king + + * Modules/Platform/HP-UX.cmake: BUG: Look in arch-specific HPUX + implicit link dirs + + On HP-UX machines some system libraries appear in + architecture-specific implicit linker search paths. We need to + add these paths to our system library search path. However, at + the time we construct the search path we do not know the target + architecture. + + A full solution requires re-organizing platform configuration + files so that the target architecture can be known when needed. + Until that happens we can avoid the problem by searching in both + 32-bit and 64-bit implicit link directories. By telling CMake + that they are implicit directories the generated link lines will + never pass the paths, leaving the linker free to find the library + of the proper architecture even if the find_library call finds + the wrong one. + +2009-06-19 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-18 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-17 14:18 king + + * Source/cmPolicies.cxx: ENH: Improve CMP0012 doc and message + formatting + + This fixes the CMP0012 description to have a one-line summary in + the 'brief' section and the rest of the explanation in the 'full' + section. It makes the warning message shorter and improves + formatting of the policy documentation, especially in the HTML + pages. The convention is already used by all other policies. + +2009-06-17 14:18 king + + * Source/cmIfCommand.cxx: ENH: Improve format of if() command + messages + + Errors and warnings from the if() command always display the + argument list given to the command followed by an explanation of + the problem. This moves the argument list into a pre-formatted + block and follows it with a paragraph-form explanation. The + result looks cleaner. + +2009-06-17 13:40 king + + * Source/: cmMakefile.cxx, cmMakefile.h, cmPolicies.cxx, + cmPolicies.h: ENH: Create CMP0013 to disallow duplicate dirs + + In CMake 2.6.3 and below we silently accepted duplicate build + directories whose build files would then conflict. At first this + was considured purely a bug that confused beginners but would not + be used in a real project. In CMake 2.6.4 we explicitly made it + an error. + + However, some real projects took advantage of this as a "feature" + and got lucky that the subtle build errors it can cause did not + occur. Therefore we need a policy to deal with the case more + gracefully. See issue #9173. + +2009-06-17 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-16 11:57 king + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: Create an exe's + implib output dir for VS 6 + + VS 6 forgets to create the output directory for an executable's + import library in case the exe dllexport-s symbols. We work + around this VS bug by creating a pre-link event on the executable + target to make the directory. + +2009-06-16 11:57 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h: ENH: Refactor VS 6 build event + generation + + In cmLocalVisualStudio6Generator we generate pre-build, pre-link, + and post-build events into project files. This refactors the + generation code for the three event types into a private + EventWriter class to avoid duplicate code. + +2009-06-16 11:44 king + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: Create exe implib + dir in VS pre-link rule + + This moves creation of an executable's import library directory + in VS projects from the pre-build step to the pre-link step. It + makes sense to create the directory at the last moment. + +2009-06-16 11:44 king + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, + cmLocalVisualStudioGenerator.cxx, cmLocalVisualStudioGenerator.h: + ENH: Generalize exe implib dir creation for VS + + In VS 7,8,9 executable targets we generate a build event to + create the output directory for the import library in case the + executable marks symbols with dllexport (VS forgets to create + this directory). This generalizes computation of the custom + command line to support future use with other VS versions. + +2009-06-16 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-15 16:12 king + + * Source/: cmDefinePropertyCommand.cxx, cmDefinePropertyCommand.h: + ENH: Simplify docs args for define_property + + This teaches the define_property command signature to accept + multiple arguments after the BRIEF_DOCS and FULL_DOCS keywords. + We append the arguments together, making specification of long + documentation easier. + +2009-06-15 14:22 hoffman + + * Source/CTest/cmCTestBuildAndTestHandler.cxx: STYLE: fix warning + +2009-06-15 13:51 hoffman + + * Source/CTest/cmCTestBuildAndTestHandler.cxx: BUG: fix crash when + running ctest coverage for VTK + +2009-06-15 13:22 hoffman + + * Modules/FindOpenGL.cmake: ENH: add path for 64 bit on old hp + +2009-06-15 13:17 hoffman + + * Modules/Platform/HP-UX.cmake: ENH: put the 64 bit paths first + +2009-06-15 12:39 hoffman + + * Modules/: Platform/HP-UX.cmake, FindOpenGL.cmake: ENH: add more + search paths on HPUX + +2009-06-15 12:33 martink + + * Source/cmPolicies.cxx: COMP: fix line length + +2009-06-15 10:55 king + + * Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Tests/Plugin/CMakeLists.txt: BUG: Create an exe's implib output + dir for VS + + If an executable marks symbols with __declspec(dllexport) then VS + creates an import library for it. However, it forgets to create + the directory that will contain the import library if it is + different from the location of the executable. We work around + this VS bug by creating a pre-build event on the executable + target to make the directory. + +2009-06-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-12 15:44 king + + * Source/kwsys/ProcessUNIX.c: COMP: Do not compile VMS-specific + code on non-VMS + + This helps avoid fixing VMS-specific code for non-VMS compilers + where it isn't needed anyway. + +2009-06-12 15:28 king + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: ENH: Refactor VS 7,8,9 build + event generation + + In cmLocalVisualStudio7Generator we generate pre-build, pre-link, + and post-build events into project files. This refactors the + generation code for the three event types into a private + EventWriter class to avoid duplicate code. + +2009-06-12 13:33 fbertel + + * Source/kwsys/ProcessUNIX.c: COMP:Fixed warning with gcc 4.3.3: + passing argument 1 of kwsysProcessSetVMSFeature discards + qualifiers from pointer target type. + +2009-06-12 13:25 martink + + * Source/: cmIfCommand.h, cmPolicies.cxx: ENH: clean up some help + text + +2009-06-12 11:10 martink + + * Source/cmIfCommand.cxx: ENH: warning fix + +2009-06-12 11:05 king + + * Source/cmStandardIncludes.h: COMP: Block warnings in Borland + system headers + + In Release builds the Borland compiler warns about code in its + own system headers. This blocks the warnings by disabling them + where the headers are included. + +2009-06-12 10:46 king + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y, + cmDependsFortranParserTokens.h: ENH: Use KWSys String strcasecmp + to parse Fortran + + This replaces the Fortran dependency parser source's custom + strcasecmp implementation with one from KWSys String. It removes + duplicate code and avoids a Borland warning about inlining + functions with 'while'. + +2009-06-12 10:46 king + + * Source/kwsys/String.c: COMP: Avoid double-initialization in KWSys + String + + The KWSys String implementation of strcasecmp initialized + 'result' immediately before assigning to it. Borland produces a + warning in this case, so this commit removes the extra + initialization. + +2009-06-12 10:46 king + + * Source/: cmDependsFortranLexer.cxx, cmDependsFortranLexer.in.l: + COMP: Remove useless assignment in Fortran lexer + + The generated Fortran dependency scanning lexer includes an + assignment to a local variable that is unused. Borland warns, so + we remove the assignment. + +2009-06-12 10:07 martink + + * Source/: cmIfCommand.cxx, cmIfCommand.h, cmPolicies.cxx, + cmPolicies.h, cmWhileCommand.cxx: ENH: modified the if command to + address bug 9123 some + +2009-06-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-11 15:25 hoffman + + * Modules/Platform/OpenVMS.cmake, Source/kwsys/SystemTools.cxx: + ENH: use .exe on vms + +2009-06-11 15:18 king + + * CMakeLists.txt: COMP: We now require CMake 2.4.5 or higher to + build + + We use the CMakeDependentOption module unconditionally, so we + must require a version of CMake new enough to provide it. + +2009-06-11 14:57 king + + * Source/cmComputeLinkInformation.cxx: BUG: Do not create empty + build-tree RPATH + + The fix for issue #9130 appends ':' to the end of the build-tree + RPATH unconditionally. This changes the fix to add ':' only when + the RPATH is not empty so that we do not create a build-tree + RPATH with just ':'. An empty RPATH produces no string at all, + so there is no chance of merging with a symbol name anyway. + +2009-06-11 11:24 king + + * CMakeLists.txt, CTestCustom.cmake.in, + Source/CTest/cmCTestSubmitHandler.cxx, + Utilities/cmThirdParty.h.in, Utilities/cm_xmlrpc.h: ENH: Disable + the xmlrpc drop method by default + + We've chosen to drop our default dependence on xmlrpc. Thus we + disable the corresponding CTest submission method and remove the + sources for building xmlrpc locally. Users can re-enable the + method by setting the CTEST_USE_XMLRPC option to use a + system-installed xmlrpc library. + +2009-06-11 09:04 king + + * CMakeLists.txt, Utilities/cmThirdParty.h.in, Utilities/cm_curl.h: + ENH: Remove option to build cmcurl-7.19.0 + + This version of curl was added experimentally but does not + address the problem we were hoping it fixed (an occasional upload + hang). Importing a new curl can wait until the problem is fully + diagnosed and addressed. + +2009-06-11 09:04 king + + * CMakeLists.txt: ENH: Simplify decision to use system libraries + + Previously we disallowed use of system libraries if + FindXMLRPC.cmake was not available. Now that CMake 2.4 is + required to build, the module is always available. This change + simplifies the logic accordingly. + +2009-06-11 09:03 king + + * Source/cmXMLParser.cxx: COMP: Fix build with system-installed + expat 2.0.1 + + In cmXMLParser::ReportXmlParseError we were accidentally passing + a value of type 'XML_Parser*' to expat methods instead of + 'XML_Parser'. It was not caught because XML_Parser was just + 'void*' in the cmexpat version. Newer system-installed expat + versions catch the error because XML_Parser is now a pointer to a + real type. This correct the type. + +2009-06-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-10 14:11 king + + * Source/cmComputeLinkInformation.cxx: BUG: Do not mangle symbols + when editing RPATHs + + In ELF binaries the .dynstr string table is used both for the + RPATH string and for program symbols. If a symbol name happens + to match the end of the build-tree RPATH string the linker is + allowed to merge the symbols. + + We must not allow this when the RPATH string will be replaced + during installation because it will mangle the symbol. Therefore + we always pad the end of the build-tree RPATH with ':' if it will + be replaced. Tools tend not to use ':' at the end of symbol + names, so it is unlikely to conflict. See issue #9130. + +2009-06-10 14:11 king + + * Source/cmDocumentVariables.cxx: ENH: Document variable + CMAKE_NO_BUILTIN_CHRPATH + + This adds documentation for the variable which was previously + missing. See issue #9130. + +2009-06-10 13:39 king + + * bootstrap: BUG: Fix bootstrap for Debian Almquist Shell + + The Debian Almquist Shell (dash) provides minimal POSIX + compliance instead of the power of bash. It converts literal + '\n' to a real newline even in a single-quoted string. This + works around the problem by avoiding the literal. We can no + longer use HEREDOC. + +2009-06-10 13:04 king + + * bootstrap: ENH: Make bootstrap script work on VMS bash + + A few sweeping changes were needed: + + - Avoid use of HEREDOC, which does not seem to work. + - Avoid extra '.' in paths by using '_cmk' and '_tmp' + instead of '.cmk' and '.tmp'. + +2009-06-10 13:04 king + + * Modules/Platform/OpenVMS.cmake, + Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: Enable basic + OpenVMS platform support + + This adds the Modules/Platform/OpenVMS.cmake platform file for + OpenVMS. We just use Unix-like rules to work with the GNV + compiler front-end. + + A problem with process execution currently prevents CMake link + scripts from working, so we avoid using them. + +2009-06-10 13:03 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: Skip 'SHELL = + /bin/sh' in Makefiles on VMS + + This shell does not exist on VMS, so we leave it out. + +2009-06-10 13:03 king + + * Source/: cmGeneratedFileStream.cxx, + cmLocalUnixMakefileGenerator3.cxx, cmTarget.cxx: ENH: On VMS use + _dir and _tmp, not .dir and .tmp + + The VMS posix path emulation does not handle multiple '.' + characters in file names in all cases. This avoids adding extra + '.'s to file and directory names for target directories and + generated files. + +2009-06-10 13:02 king + + * Source/kwsys/SystemTools.cxx: ENH: Teach KWSys SystemTools about + VMS paths + + This teaches ConvertToUnixSlashes to convert VMS paths into + posix-style paths. We also set the DECC$FILENAME_UNIX_ONLY + feature so the process always sees posix-style paths on disk. + +2009-06-10 13:02 king + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: Avoid std::unique + algorithm on VMS + + The Compaq compiler's std::unique algorithm followed by deletion + of the extra elements seems to crash. For now we'll accept the + duplicate dependencies on this platform. + +2009-06-10 11:49 king + + * Utilities/cmtar/extract.c: COMP: Fix cmtar build on VMS + + The mknod and mkfifo functions are not available on VMS. + +2009-06-10 11:49 king + + * Utilities/cmcurl/setup.h: COMP: Fix cmcurl build on VMS + + This defines IOCTL_3_ARGS in 'cmcurl/setup.h' to teach curl + sources about the three-argument ioctl() on VMS. + +2009-06-10 11:49 king + + * Utilities/cmtar/: append.c, decode.c, extract.c, libtar.c, + util.c, wrapper.c: COMP: Use HAVE_SYS_PARAM_H properly in libtar + + The value is computed by a try-compile for libtar. This teaches + the sources to actually use the result. + +2009-06-10 11:48 king + + * Source/kwsys/ProcessUNIX.c: ENH: Teach KWSys Process basic VMS + support + + This achieves basic process execution on OpenVMS. We use + work-arounds for different fork()/exec() behavior and a lack of + select(). + + VMS emulates fork/exec using setjmp/longjmp to evaluate the child + and parent return cases from fork. Therefore both must be + invoked from the same function. + + Since select() works only for sockets we use the BeOS-style + polling implementation. However, non-blocking reads on empty + pipes cannot be distinguished easily from the last read on a + closed pipe. Therefore we identify end of data by an empty read + after the child terminates. + +2009-06-10 11:46 king + + * Source/kwsys/ProcessUNIX.c: BUG: Fix non-select process impl + without timeout + + This avoids use of an uninitialized value in the KWSys + ProcessUNIX polling implementation when no timeout is given. + +2009-06-10 11:46 king + + * Source/kwsys/CMakeLists.txt, bootstrap, Source/kwsys/String.c, + Source/kwsys/kwsysPrivate.h: COMP: Avoid String.c inclusion by + Compaq templates + + The Compaq compiler (on VMS) includes 'String.c' in source files + that use the stl string while looking for template definitions. + This was the true cause of double-inclusion of the + 'kwsysPrivate.h' header. We work around the problem by + conditionally compiling the entire source file on a condition + only true when really building the source. + +2009-06-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-09 15:58 hoffman + + * Source/cmStandardIncludes.h: STYLE: suppress warnings for borland + +2009-06-09 15:44 hoffman + + * Source/kwsys/testAutoPtr.cxx: STYLE: suppress warnings for + borland + +2009-06-09 15:18 hoffman + + * Source/: cmStandardIncludes.h, kwsys/hashtable.hxx.in, + kwsys/testAutoPtr.cxx: STYLE: suppress warnings for borland + +2009-06-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-05 14:59 partyd + + * Source/kwsys/hashtable.hxx.in: COMP: Hopefully fix hashmap on + VS6, Thanks Brad K! + +2009-06-05 13:17 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: fix warning on borland + +2009-06-05 12:01 hoffman + + * Source/: cmSystemTools.cxx, cmSystemTools.h, + kwsys/SystemTools.hxx.in, kwsys/SystemTools.cxx: ENH: move PutEnv + to SystemTools + +2009-06-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-03 15:08 king + + * Modules/Platform/HP-UX.cmake, + Source/cmComputeLinkInformation.cxx, + Source/cmDocumentVariables.cxx: BUG: Recognize .so shared + libraries on HP-UX + + HP-UX uses both .sl and .so as extensions for shared libraries. + This teaches CMake to recognize .so shared libraries so they are + treated properly during link dependency analysis. + +2009-06-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-06-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-31 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-30 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-29 16:09 alex + + * Modules/CPackRPM.cmake: BUG: fix #9031: newer rpm versions + complain about the "#%" lines + + Alex + +2009-05-29 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-28 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-27 11:33 king + + * Modules/Platform/CYGWIN.cmake, bootstrap: ENH: Auto-import + symbols for cygwin executables + + This enables the --enable-auto-import linker flag on Cygwin when + linking executables. It works with the old gcc 3.x compiler and + is necessary for the new gcc 4.x compiler. See issue #9071. + +2009-05-27 11:14 hoffman + + * Source/CTest/cmCTestMemCheckHandler.cxx: BUG: fix for bug #8153 + add purify suppression file and fix output to not be one big line + +2009-05-27 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-26 09:55 david.cole + + * Modules/: CMakeVS8FindMake.cmake, CMakeVS9FindMake.cmake: BUG: + Rearrange paths to find correct installations of Visual Studio. + Patch devenv.modified_search_order.patch came from issue #7919. + +2009-05-26 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-25 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-24 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-23 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-22 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-21 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-20 09:50 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: make this work for older + versions of OSX + +2009-05-20 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-19 21:50 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: revert back because it + does not build on older macs for now + +2009-05-19 16:56 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: remove warning + +2009-05-19 16:46 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: make this build on other + machines besides the mac + +2009-05-19 16:35 hoffman + + * Source/kwsys/: SystemInformation.cxx, testSystemInformation.cxx: + ENH: fix system info for mac + +2009-05-19 11:38 clinton + + * Modules/FindQt4.cmake: ENH: Better error message for those who + switch from Qt3 to Qt4 and don't clean their cache file. + +2009-05-19 11:25 hoffman + + * Source/cmCoreTryCompile.cxx: BUG: fix for #0009051 CMake does not + pass CMAKE_OSX_SYSROOT and CMAKE_OSX_DEPLOYMENT_TARGET when + running TRY_COMPILE + +2009-05-19 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-18 15:27 alex + + * Source/cmFindFileCommand.cxx: STYLE: fix docs: it must replace + "find_path" instead of "FIND_PATH" with "find_file", otherwise + the docs talk about find_path() instead of find_file (patch from + Michael Wild, #9047) + + Alex + +2009-05-18 10:34 king + + * Source/CTest/cmCTestBZR.cxx, Tests/CMakeLists.txt: BUG: Parse + more bzr xml output encodings + + The BZR xml output plugin can use some encodings that are not + recognized by expat, which leads to "Error parsing bzr log xml: + unknown encoding". This works around the problem by giving expat + a mapping, and adds a test. Patch from Tom Vercauteren. See + issue #6857. + +2009-05-18 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-17 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-16 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-15 15:39 king + + * Modules/CTest.cmake, Source/CTest/cmCTestSubmitCommand.cxx: ENH: + Remove CTest public.kitware.com drop default + + Previously CTest would drop dashboard submissions at + public.kitware.com on the PublicDashboard project if there was no + configuration. The server no longer supports forwarding to + cdash.org, so there is no point in this default. Furthermore, + there should be no default at all because it could leak + information about proprietary projects that are not configured + correctly. + +2009-05-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-14 16:13 king + + * Modules/CTest.cmake, Source/CMakeLists.txt, + Source/CTest/cmCTestBZR.cxx, Source/CTest/cmCTestBZR.h, + Source/CTest/cmCTestUpdateCommand.cxx, + Source/CTest/cmCTestUpdateHandler.cxx, + Source/CTest/cmCTestUpdateHandler.h, Tests/CMakeLists.txt, + Tests/CTestUpdateBZR.cmake.in: ENH: Teach CTest to handle Bazaar + repositories + + This creates cmCTestBZR to drive CTest Update handling on + bzr-based work trees. Currently we always update to the head of + the remote tracking branch (bzr pull), so the nightly start time + is ignored for Nightly builds. A later change will address this. + Patch from Tom Vercauteren. See issue #6857. + +2009-05-14 15:31 alex + + * Modules/CPackRPM.cmake: STYLE: add documentation for CPackRPM + (#9029) + + Alex + +2009-05-14 09:27 king + + * Source/cmDocumentVariables.cxx: ENH: Make + CMAKE__SIZEOF_DATA_PTR public + + The variable was previously documented for internal-use only. + This officially documents it for general use by projects. + +2009-05-14 09:27 king + + * Source/kwsys/kwsysPrivate.h: STYLE: Simplify and document VMS + workarounds + + The kwsysPrivate header double-inclusion check hits a false + positive on VMS for an undetermined reason. This simplifies the + workaround and documents it. + +2009-05-14 09:26 king + + * Source/kwsys/kwsysPrivate.h: STYLE: Remove trailing whitespace + +2009-05-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-13 11:08 hoffman + + * Source/: cmForEachCommand.cxx, cmWhileCommand.cxx: BUG: fix for + #9014, FATAL_ERROR not ending loops + +2009-05-13 10:30 king + + * Source/kwsys/SystemTools.cxx: BUG: Fix removal of read-only + directories + + Read-only directories must be given write permission before we + can remove files and subdirectories from them. + +2009-05-13 10:30 king + + * Tests/StringFileTest/CMakeLists.txt: BUG: file(COPY) test should + not make read-only dir + + CMake directory removal code cannot remove content from read-only + directories (a separate bug which will be fixed). Therefore we + should not create them in the StringFileTest. This tweaks the + file(COPY) call to test not giving OWNER_WRITE to files rather + than directories. + +2009-05-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-12 15:17 alex + + * Modules/: CMakeEclipseCDT4.cmake, CMakeCodeBlocks.cmake, + CMakeKDevelop3.cmake: STYLE: remove these files now that I added + them with a more consistent name as CMakeFind.cmake + (should have been in the same commit...) + + Alex + +2009-05-12 15:13 alex + + * Modules/CPackRPM.cmake: BUG: apply patch from Eric Noulard, so + cpack works with rpmbuild 4.6.0, #8967 + + Alex + +2009-05-12 15:11 alex + + * Modules/: CMakeFindCodeBlocks.cmake, CMakeFindEclipseCDT4.cmake, + CMakeFindKDevelop3.cmake, CMakeLists.txt, + CMakeSystemSpecificInformation.cmake: STYLE: rename the files + from CMake.cmake to CMakeFind.cmake, so it + is more consistent e.g. with CMakeFindXcode.cmake + + Alex + +2009-05-12 15:06 king + + * Readme.txt: STYLE: Remove trailing whitespace + +2009-05-12 15:03 king + + * cmake.1: BUG: Remove manual man-page from CMake-SourceFile2-b + branch + +2009-05-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-11 13:58 king + + * Source/cmCTest.cxx: COMP: Avoid operator precedence warning + + GCC warns that parens should be used for nested and/or operators. + +2009-05-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-10 16:07 alex + + * Source/cmSetCommand.cxx: STYLE: cacheStart is used only locally + in the if-branch + + Alex + +2009-05-10 06:01 alex + + * Modules/CTest.cmake: STYLE: first lower-casing the string makes + comparing its contents easier + + Alex + +2009-05-10 06:00 alex + + * Modules/: CMakeCodeBlocks.cmake, CMakeEclipseCDT4.cmake, + CMakeKDevelop3.cmake, CMakeSystemSpecificInformation.cmake: ENH: + move the code which queries gcc for the system include dirs from + CMakeSystemSpecificInformation.cmake into a separate file, + CMakeEclipseCDT4.cmake -if CMAKE_EXTRA_GENERATOR is set, i.e. + either CodeBlocks or KDevelop3 or EclipseCDT4, load a matching + cmake script file, which can do things specific for this + generator - added such files for Eclipse, KDevelop and + CodeBlocks, one thing they all do is they try to find the + respective IDE and store it in the + CMAKE_(KDEVELOP3|CODEBLOCKS|ECLIPSE)_EXECUTABLE variable. This + could be used by cmake-gui to open the project it just generated + with the gui (not sure this is possible with eclipse). + + Alex + +2009-05-10 05:29 alex + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: don't report + changed compiler variables if the path to the compiler differs + only e.g. a double slash somewhere instead only one slash as + directory separator (#8890) + + Alex + +2009-05-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-09 17:25 alex + + * Source/cmDocumentVariables.cxx: STYLE: document + CMAKE_INCLUDE_CURRENT_DIR + + Alex + +2009-05-09 08:15 alex + + * Modules/: CMakeVS8FindMake.cmake, CMakeVS9FindMake.cmake: ENH: + when cross compiling, e.g. for WinCE, don't use VCExpress, since + this doesn't support it This is the first patch to add support + for WinCE to cmake (#7919) + + Alex + +2009-05-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-07 18:22 hoffman + + * Source/ctest.cxx: ENH: add docs for command line ctest + +2009-05-07 18:20 hoffman + + * Source/cmCTest.cxx: BUG: 8898 fix date in ctest nightly time + +2009-05-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-06 11:21 clinton + + * Modules/FindQt4.cmake: BUG: Fix spaces in file paths for lupdate + command + +2009-05-06 09:42 clinton + + * Modules/: FindQt4.cmake, UseQt4.cmake: + ENH: Add support for QtScriptTools in Qt 4.5. + +2009-05-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-05-01 10:39 king + + * Source/: cmTarget.cxx, cmTarget.h: ENH: Remove cmTarget internal + type arguments + + Internally cmTarget was passing the target type in several name + computation signatures to support computation of both shared and + static library names for one target. We no longer need to + compute both names, so this change simplifies the internals by + using the GetType method and dropping the type from method + signatures. + +2009-05-01 10:39 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, cmTarget.cxx, + cmTarget.h: ENH: Remove cmTarget::GetExecutableCleanNames + + This method was redundant with GetExecutableNames. + +2009-05-01 10:38 king + + * Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmSetTargetPropertiesCommand.h, Source/cmTarget.cxx, + Source/cmTarget.h, Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt: ENH: Always + imply CLEAN_DIRECT_OUTPUT target prop + + This property was left from before CMake always linked using full + path library names for targets it builds. In order to safely + link with "-lfoo" we needed to avoid having both shared and + static libraries in the build tree for targets that switch on + BUILD_SHARED_LIBS. This meant cleaning both shared and static + names before creating the library, which led to the creation of + CLEAN_DIRECT_OUTPUT to disable the behavior. + + Now that we always link with a full path we do not need to clean + old library names left from an alternate setting of + BUILD_SHARED_LIBS. This change removes the CLEAN_DIRECT_OUTPUT + property and instead uses its behavior always. It removes some + complexity from cmTarget internally. + +2009-05-01 09:45 king + + * Source/cmTarget.cxx, Source/cmTarget.h, + Tests/ExportImport/Export/CMakeLists.txt, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Allow more + specification of target file names + + This creates target properties ARCHIVE_OUTPUT_NAME, + LIBRARY_OUTPUT_NAME, and RUNTIME_OUTPUT_NAME, and + per-configuration equivalent properties + ARCHIVE_OUTPUT_NAME_, LIBRARY_OUTPUT_NAME_, and + RUNTIME_OUTPUT_NAME_. They allow specification of target + output file names on a per-type, per-configuration basis. For + example, a .dll and its .lib import library may have different + base names. + + For consistency and to avoid ambiguity, the old + _OUTPUT_NAME property is now also available as + OUTPUT_NAME_. + + See issue #8920. + +2009-05-01 09:45 king + + * Source/: cmTarget.cxx, cmTarget.h: ENH: Refactor target output + file type computation + + This creates method cmTarget::GetOutputTargetType to compute the + output file type 'ARCHIVE', 'LIBRARY', or 'RUNTIME' from the + platform and target type. It factors out logic from the target + output directory computation code for later re-use. + +2009-05-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-30 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-29 15:07 king + + * Modules/UntarFile.cmake: ENH: Teach UntarFile to preserve file + timestamps + + After extracting the tarball in a temporary directory we copy the + tree to the destination directory. The 'cmake -E copy_directory' + command does not preserve file timestamps, so we use file(COPY) + instead. + +2009-04-29 14:50 king + + * Source/cmFileCommand.cxx: COMP: Avoid unused arg warnings in + cmFileCommand + + The default cmFileCopier::ReportCopy implementation is empty, so + we should leave out the argument names. + +2009-04-29 14:20 king + + * Source/CTest/cmCTestCVS.cxx: BUG: Remove '-d )" to rename + a file or directory within a single disk volume. + +2009-04-15 09:57 king + + * Source/: cmGeneratedFileStream.cxx, cmSystemTools.cxx, + cmSystemTools.h: ENH: Move RenameFile to cmSystemTools + + This moves the cmGeneratedFileStream::RenameFile method + implementation into cmSystemTools. It works only within a single + filesystem volume, but is atomic when the operating system + permits. + +2009-04-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-14 09:35 king + + * Source/kwsys/: Base64.h.in, Configure.h.in, Configure.hxx.in, + FundamentalType.h.in, MD5.h.in, Process.h.in, String.h.in, + System.h.in, Terminal.h.in: ENH: Skip KWSys name maros in case of + identity + + All KWSys C symbol names begin with the KWSYS_NAMESPACE defined + at configuration time. For ease of editing we write canonical + names with the prefix 'kwsys' and use macros to map them to the + configured prefix at preprocessing time. In the case of + standalone KWSys, the prefix is 'kwsys', so the macros were + previously defined to their own names. + + We now skip defining the macros in the identity case so that the + final symbol names are never themselves macros. This will allow + the symbols to be further transformed behind the scenes to help + linkers in special cases on some platforms. + +2009-04-14 00:50 lowman + + * Modules/CMakeDetermineVSServicePack.cmake: ENH: New function for + determining Visual Studio service pack + +2009-04-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-11 09:29 hoffman + + * Source/CTest/cmCTestSubmitHandler.cxx: ENH: remove warning and + improve message + +2009-04-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-10 13:00 hoffman + + * Source/CTest/cmCTestSubmitHandler.cxx: ENH: remove cerr call + +2009-04-10 12:15 hoffman + + * Modules/DartConfiguration.tcl.in, + Source/CTest/cmCTestSubmitHandler.cxx: ENH: add ability to + control ssl cert checking + +2009-04-10 11:59 hoffman + + * CMakeLists.txt, Utilities/cmcurl/CMakeLists.txt: ENH: allow for + shared build of libcurl and fix build with openssl option (ssl + tested on linux and windows + +2009-04-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-09 13:56 king + + * Modules/AddExternalProject.cmake, + Tests/ExternalProject/CMakeLists.txt, + Tests/ExternalProject/Step1Patch.cmake: ENH: Allow lists in + AddExternalProject arguments + + The add_external_project function separates its arguments with + ';' separators, so previously no command line argument could + contain one. When specifying CMAKE_ARGS, some -D argument values + may need to contain a semicolon to form lists in the external + project cache. + + This adds add_external_project argument LIST_SEPARATOR to specify + a list separator string. The separator is replaced by ';' in + arguments to any command created to drive the external project. + For example: + + add_external_project(... + LIST_SEPARATOR :: + CMAKE_ARGS -DSOME_LIST:STRING=A::B::C + ...) + + passes "-DSOME_LIST:STRING=A;B;C" to CMake for the external + project. + +2009-04-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-08 16:29 king + + * Source/cmTarget.cxx, Tests/ExportImport/Export/CMakeLists.txt, + Tests/ExportImport/Export/testLib5.c, + Tests/ExportImport/Import/A/CMakeLists.txt, + Tests/ExportImport/Import/A/imp_testExe1.c: ENH: Allow + IMPORTED_IMPLIB w/o IMPORTED_LOCATION + + Linking to a Windows shared library (.dll) requires only its + import library (.lib). This teaches CMake to recognize SHARED + IMPORTED library targets that set only IMPORTED_IMPLIB and not + IMPORTED_LOCATION. + +2009-04-08 16:28 king + + * Source/cmTarget.cxx: BUG: Fix imported target config guess + + When an IMPORTED target provides no generic configuration and no + match for a desired configuration then we choose any available + configuration. This change corrects the choice when the first + listed available configuration does not really have a location. + +2009-04-08 09:22 king + + * Tests/: CTestUpdateCVS.cmake.in, CTestUpdateSVN.cmake.in: ENH: + Teach Update* tests to report local mod step + + The CTest.UpdateCVS/SVN tests report every step with a message. + This adds a message for the local modification step. + +2009-04-08 09:21 king + + * Tests/CTestUpdateCVS.cmake.in: ENH: Make UpdateCVS test robust to + 1s file time res + + CVS clients recognize file modifications only if a file's + timestamp is newer than its CVS/Entries line. This fixes + intermittent failure of the test on filesystems with low + timestamp resolution by delaying before creating a local + modification. + +2009-04-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-07 15:32 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Source/cmAddCustomCommandCommand.h, + Source/cmAddCustomTargetCommand.h, + Source/cmComputeLinkDepends.cxx, Source/cmComputeLinkDepends.h, + Source/kwsys/SystemInformation.cxx, + Tests/ExportImport/Import/CMakeLists.txt, + Tests/ExportImport/Import/imp_mod1.c, + Tests/ExportImport/Import/imp_testExe1.c, + Tests/ExportImport/Import/imp_testTransExe1.c, + Tests/ExportImport/Import/A/CMakeLists.txt, + Tests/ExportImport/Import/A/imp_lib1.c, + Tests/ExportImport/Import/A/imp_mod1.c, + Tests/ExportImport/Import/A/imp_testExe1.c: ENH: merge in changes + for RC 4 + +2009-04-07 15:31 david.cole + + * Modules/NSIS.template.in: BUG: Fix issue #8682. Use + CPACK_NSIS_DISPLAY_NAME in appropriate places rather than + CPACK_PACKAGE_INSTALL_DIRECTORY. Clean separation of these two + variables (which have the same value by default) allows an easy + workaround for issue #7881, too. + +2009-04-07 15:13 david.cole + + * Source/cmLocalGenerator.cxx: BUG: Fix invalid array access + discovered during investigation of issue #7832. + +2009-04-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-06 14:55 king + + * Source/kwsys/SystemInformation.cxx: BUG: Fix parsing of linux 2.6 + /proc/meminfo format + + Previously KWSys SystemInformation parsed this file assuming a + strict order and set of fields, but the order is not reliable. + This generalizes the implementation to support any order and + extra fields. + +2009-04-06 11:11 hoffman + + * Tests/ExportImport/Import/imp_testTransExe1.c: file + imp_testTransExe1.c was added on branch CMake-2-6 on 2009-04-07 + 19:32:08 +0000 + +2009-04-06 11:11 hoffman + + * Tests/ExportImport/Import/A/imp_testExe1.c: file imp_testExe1.c + was added on branch CMake-2-6 on 2009-04-07 19:32:08 +0000 + +2009-04-06 11:11 hoffman + + * Tests/ExportImport/Import/A/imp_mod1.c: file imp_mod1.c was added + on branch CMake-2-6 on 2009-04-07 19:32:08 +0000 + +2009-04-06 11:11 hoffman + + * Tests/ExportImport/Import/A/imp_lib1.c: file imp_lib1.c was added + on branch CMake-2-6 on 2009-04-07 19:32:08 +0000 + +2009-04-06 11:11 hoffman + + * Tests/ExportImport/Import/A/CMakeLists.txt: file CMakeLists.txt + was added on branch CMake-2-6 on 2009-04-07 19:32:08 +0000 + +2009-04-06 11:11 king + + * Tests/ExportImport/Import/: A/CMakeLists.txt, A/imp_lib1.c, + A/imp_mod1.c, A/imp_testExe1.c, CMakeLists.txt, imp_mod1.c, + imp_testExe1.c, imp_testTransExe1.c: ENH: Test transitive link to + subdir-imported lib + + This tests linking to an imported target that is not visible but + is a transitive dependency of a target that is visible. See + issue #8843. + +2009-04-06 11:10 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h: BUG: + Lookup transitive link deps in depender scope + + The transitive link dependencies of a linked target must be + followed in its own scope, not in the scope of the original + target that depends on it. This is necessary since imported + targets do not have global scope. See issue #8843. + +2009-04-06 03:39 malaterre + + * Source/kwsys/testIOS.cxx: BUG: comment out faulty seekp which + make kwsys::*stringstream fails on platform with no + std::*stringstream implementation + +2009-04-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-05 06:55 malaterre + + * Source/kwsys/testIOS.cxx: ENH: hopefully seekp is the call making + kwsys::stringstream behaves oddly on sunos + +2009-04-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-03 13:12 david.cole + + * Source/CPack/cmCPackDragNDropGenerator.cxx: BUG: Fix issue #8759 + - add support for setting dmg volume name and compression type by + CPack variables. Also add custom .DS_Store and background image + support. Thanks to Mike Arthur for the patches. + +2009-04-03 11:41 david.cole + + * Source/cmTest.cxx: BUG: Fix documentation deficiency noted in + issue #7885. Thanks to Philip Lowman for the gist of the patch. + +2009-04-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-02 06:12 malaterre + + * Source/kwsys/testIOS.cxx: ENH: trying to reproduce issue on sunos + +2009-04-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-04-01 10:31 king + + * Source/: cmAddCustomCommandCommand.h, cmAddCustomTargetCommand.h: + ENH: Clarify VERBATIM option documentation + + The previous wording of the VERBATIM option documentation in the + add_custom_command and add_custom_target commands was confusing. + It could be interpreted as the opposite of what the option means + (no escaping instead of escaping). This clarifies the + documentation to explicitly state that it escapes. + +2009-04-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-31 16:15 david.cole + + * Modules/FindVTK.cmake: BUG: Fix issue #8804. Add vtk-5.4 lib path + to the FindVTK.cmake module. + +2009-03-31 15:30 hoffman + + * Source/CTest/cmCTestSubmitHandler.cxx: ENH: use 0 not FALSE + +2009-03-31 15:24 hoffman + + * Source/CTest/: cmCTestSubmitHandler.cxx, cmCTestSubmitHandler.h: + ENH: add submit via cp mode + +2009-03-31 13:50 david.cole + + * Tests/CMakeTests/GetPrerequisitesTest.cmake.in: STYLE: White + space only change to see if continuous is working on new + dashboard machine... + +2009-03-31 13:16 david.cole + + * Tests/CMakeTests/GetPrerequisitesTest.cmake.in: STYLE: White + space only change to see if continuous is working on new + dashboard machine... + +2009-03-31 10:28 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindQt4.cmake, + Source/cmAddCustomCommandCommand.h, + Source/cmAddCustomTargetCommand.h, + Source/CTest/cmCTestSubmitCommand.cxx, + Source/QtDialog/CMakeSetupDialog.cxx, + Source/QtDialog/QCMakeCacheView.cxx: ENH: next RC + +2009-03-31 10:27 hoffman + + * Utilities/Release/vogon_release.cmake: ENH: use a newer cmake + +2009-03-31 10:13 king + + * Modules/AddExternalProject.cmake: BUG: Fix AddExternalProject + config command id + + This fixes the get_configure_command_id function to not mistake + CONFIGURE_COMMAND values that run "cmake -P" or "cmake -E" for a + CMake project configuration. These values just help run scripts. + +2009-03-31 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-30 16:34 clinton + + * Source/QtDialog/QCMake.cxx: + BUG: Fix inconsistency with lowercase drive letters on Windows. + +2009-03-30 11:38 king + + * Modules/AddExternalProject.cmake: ENH: Simpler AddExternalProject + install step + + This simplifies the implementation with + add_external_project_step. + +2009-03-30 11:38 king + + * Modules/AddExternalProject.cmake: ENH: Simpler AddExternalProject + build step + + This simplifies the implementation with + add_external_project_step. + +2009-03-30 11:38 king + + * Modules/AddExternalProject.cmake: ENH: Simpler AddExternalProject + configure step + + This simplifies the implementation with + add_external_project_step. + +2009-03-30 11:37 king + + * Modules/AddExternalProject.cmake: ENH: Simpler AddExternalProject + patch step + + This simplifies the implementation with + add_external_project_step. + +2009-03-30 11:37 king + + * Modules/AddExternalProject.cmake: ENH: Simpler AddExternalProject + update step + + This simplifies the implementation with + add_external_project_step. + +2009-03-30 11:37 king + + * Modules/AddExternalProject.cmake: ENH: Simpler AddExternalProject + download step + + This simplifies the implementation with + add_external_project_step. + +2009-03-30 11:36 king + + * Modules/AddExternalProject.cmake, + Tests/ExternalProject/CMakeLists.txt: ENH: Generalize + AddExternalProject step creation + + This creates function 'add_external_project_step' to centralize + creation of external project steps. Users may call it to add + custom steps to external project builds. + +2009-03-30 11:35 king + + * Modules/AddExternalProject.cmake: ENH: Factor argument parsing in + AddExternalProject + + The add_external_project function parses its arguments and puts + them in properties of the target it creates. This factors out + implementation of the behavior for use by other functions in the + module. + +2009-03-30 11:35 king + + * Modules/AddExternalProject.cmake: ENH: Teach AddExternalProject a + 'complete' step + + This separates creation of the project completion sentinel file + from the 'install' step to allow more steps to be added in + between later. + +2009-03-30 10:56 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: + ENH: Add version info to about dialog, including Qt version. + +2009-03-30 08:27 malaterre + + * Source/kwsys/testIOS.cxx: COMP: missing string.h header for + strlen. + +2009-03-30 08:27 king + + * Source/: cmAddCustomCommandCommand.h, cmAddCustomTargetCommand.h: + ENH: Document scope of add_custom_command outputs + + This explicitly states the scope of add_custom_command rules in + the documentation of add_custom_command and add_custom_target. + See issue #8815. + +2009-03-30 04:10 malaterre + + * Source/kwsys/testIOS.cxx: ENH: remote debugging of sunos + +2009-03-30 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-29 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-28 13:02 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: STYLE: fix line lenght + +2009-03-28 10:23 hoffman + + * Utilities/Release/: vogon_release.cmake, vogon_release_qt.cmake: + ENH: change qt to 4.5 + +2009-03-28 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-27 21:57 hoffman + + * Tests/MacroTest/context.cmake: ENH: add missing file to branch + +2009-03-27 17:11 alex + + * Modules/FindAVIFile.cmake: ENH: mark the two variables as + advanced -remove unnecessary deault search dirs + + Alex + +2009-03-27 12:33 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for #8686 add + some more compiler flags + +2009-03-27 11:55 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CheckCSourceCompiles.cmake, + Modules/CheckCSourceRuns.cmake, + Modules/CheckCXXSourceCompiles.cmake, + Modules/CheckCXXSourceRuns.cmake, Modules/FindBoost.cmake, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmExtraCodeBlocksGenerator.cxx, + Source/cmExtraEclipseCDT4Generator.cxx, + Source/cmExtraEclipseCDT4Generator.h, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmIncludeDirectoryCommand.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio6Generator.cxx, Source/cmMakefile.cxx, + Source/cmProjectCommand.h, Source/cmSourceFile.cxx, + Source/cmStringCommand.h, Source/cmTarget.cxx, + Tests/MacroTest/CMakeLists.txt, Tests/Preprocess/CMakeLists.txt, + Tests/Preprocess/preprocess.c, Tests/Preprocess/preprocess.cxx: + ENH: merge in from main tree to create RC 2 + +2009-03-27 11:18 hoffman + + * Source/cmGlobalNMakeMakefileGenerator.cxx: ENH: LIBPATH is not + required for cl to work + +2009-03-27 10:49 hoffman + + * Utilities/Release/vogon_release.cmake: ENH: fix spaces in path + escape + +2009-03-27 10:37 hoffman + + * Utilities/Release/vogon_release.cmake: ENH: use a different cmake + +2009-03-27 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-26 11:42 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: + BUG: Don't return checkable flag for item when in the middle of + configure/generate. + +2009-03-26 11:04 clinton + + * Modules/FindQt4.cmake: + ENH: Do a recheck of QT_MAC_USE_COCOA when qmake executable + changes. + +2009-03-26 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-25 15:29 clinton + + * Modules/FindQt4.cmake: + ENH: Support OUTPUT_LOCATION property for qm files. Fixes + #8492. + +2009-03-25 10:37 hoffman + + * Tests/MacroTest/context.cmake: file context.cmake was added on + branch CMake-2-6 on 2009-03-28 01:57:34 +0000 + +2009-03-25 10:36 king + + * Source/cmCommandArgumentParserHelper.cxx, + Tests/MacroTest/CMakeLists.txt, Tests/MacroTest/context.cmake: + BUG: Fix CMAKE_CURRENT_LIST_FILE in macros + + The value of CMAKE_CURRENT_LIST_FILE is supposed to be the list + file currently being executed. Before macros were introduced + this was always the context of the argument referencing the + variable. + + Our original implementation of macros replaced the context of + command arguments inside the macro with that of the arguments of + the calling context. This worked recursively, but only worked + when macros had at least one argument. Furthermore, it caused + parsing errors of the arguments to report the wrong location + (calling context instead of line with error). + + The commit "Improve context for errors in macros" fixed the + latter bug by keeping the lexical context of command arguments in + macros. It broke evaluation of CMAKE_CURRENT_LIST_FILE because + the calling context was no longer preserved in the argument + referencing the variable. However, since our list file + processing now maintains the proper value of + CMAKE_CURRENT_LIST_FILE with dynamic scope we no longer need the + context of the argument and can just evaluate the variable + normally. + +2009-03-25 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-24 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-23 15:46 hoffman + + * CMakeLists.txt: ENH: put an rc number other than 0 in + +2009-03-23 14:48 king + + * Source/cmLocalVisualStudio6Generator.cxx, Source/cmMakefile.cxx, + Source/cmSourceFile.cxx, Source/cmTarget.cxx, + Tests/Preprocess/CMakeLists.txt, Tests/Preprocess/preprocess.c, + Tests/Preprocess/preprocess.cxx: ENH: Support preprocessor def + values in VS6 + + The add_definitions() command and COMPILE_DEFINITIONS dir/tgt/src + properties support preprocessor definitions with values. + Previously values were not supported in the VS6 generator even + though the native tool supports them. It is only values with + spaces that VS6 does not support. This enables support and + instead complains only for values with spaces. See issue #8779. + +2009-03-23 14:04 hoffman + + * Tests/: CMakeTests/GetFilenameComponentRealpathTest.cmake.in, + Fortran/include/test_preprocess.h: ENH: add missing files + +2009-03-23 13:58 hoffman + + * CMakeLists.txt, ChangeLog.manual, Docs/cmake-mode.el, + Modules/CMakeASMInformation.cmake, + Modules/Platform/Darwin-icc.cmake, Modules/Platform/Darwin.cmake, + Modules/Platform/UnixPaths.cmake, Source/cmCPluginAPI.cxx, + Source/cmDependsFortran.cxx, Source/cmDependsFortranParser.cxx, + Source/cmDependsFortranParser.y, Source/cmDocumentVariables.cxx, + Source/cmDocumentationFormatterMan.cxx, Source/cmFileCommand.cxx, + Source/cmGetFilenameComponentCommand.cxx, + Source/cmGetFilenameComponentCommand.h, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmMakeDepend.cxx, Source/cmMakeDepend.h, + Source/cmMakefile.cxx, Source/cmMakefileTargetGenerator.cxx, + Source/cmSourceFile.cxx, Source/cmTarget.cxx, Source/cmake.cxx, + Source/CTest/cmCTestUpdateHandler.cxx, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in, + Tests/CMakeTests/CMakeLists.txt, Tests/Fortran/CMakeLists.txt, + Tests/Fortran/test_preprocess.F90: ENH: check in changes to + branch, most importantly the header file do not compile fix + +2009-03-23 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-22 17:13 lowman + + * Modules/FindGTK2.cmake: ENH: NEW: FindGTK2 module + +2009-03-22 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-21 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-20 23:52 lowman + + * Modules/FindBoost.cmake: BUG: LIST(REMOVE_ITEM...) was being + called on a variable that could be empty. + +2009-03-20 14:19 king + + * Source/CTest/: cmCTestUpdateCommand.h, cmCTestUpdateHandler.cxx: + BUG: Fix return value of ctest_update + + The CTest version control refactoring broke the value returned + for the ctest_update command's RETURN_VALUE argument. The value + is supposed to be the number of files updated, but the + refactoring accidentally made it the number of locally modified + files after the update. + +2009-03-20 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-19 22:48 fbertel + + * Source/kwsys/: SystemInformation.cxx, SystemInformation.hxx.in: + COMP:Fixed warnings with gcc 4.3.2. + +2009-03-19 15:44 clinton + + * Modules/FindQt4.cmake: + BUG: Need to fix find of qtmain library when qmake executable is + changed. + +2009-03-19 11:48 fbertel + + * Source/kwsys/CommandLineArguments.cxx: COMP:Try to fix error on + HP. + +2009-03-19 10:53 king + + * Source/cmTarget.cxx: ENH: Mention CMAKE_* variables in RPATH + properties + + The RPATH target properties are initialized by CMAKE_ + variables at target creation time. This notes the feature in the + property documentation. It is already noted in the variable + documentation. + +2009-03-19 10:03 fbertel + + * Source/kwsys/RegularExpression.hxx.in: COMP:try to fix error on + qnx-V3.3.5-gcc_ntox86. + +2009-03-19 09:20 fbertel + + * Source/kwsys/CommandLineArguments.cxx: COMP:Fixed warnings. + +2009-03-19 09:09 fbertel + + * Source/kwsys/RegularExpression.hxx.in: COMP:Fixed VS 64-bit + warning C4267 line 432 of RegularExpression.cxx + +2009-03-19 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-18 11:01 king + + * Modules/AddExternalProject.cmake: STYLE: Reminder note for + add_external_project work + +2009-03-18 11:00 king + + * Modules/AddExternalProject.cmake, + Tests/ExternalProject/CMakeLists.txt, + Tests/ExternalProject/Step1Patch.cmake: ENH: Add patch step for + add_external_project + + The patch step runs parallel to the update step since it does not + make sense to have both. Configuration of the step requires + specification of a PATCH_COMMAND argument to + add_external_project. + +2009-03-18 11:00 king + + * Modules/AddExternalProject.cmake, + Tests/ExternalProject/CMakeLists.txt: ENH: Improve + add_external_project interface + + This rewrites the keyword/argument parsing and handling in the + AddExternalProject module to use arguments more literally: + + - The strict keyword-value pairing is gone in favor of keywords + with + arbitrary non-keyword values. This avoids requiring users to + escape + spaces and quotes in command lines. + + - Customized step command lines are now specified with a single + keyword _COMMAND instead of putting the arguments in a + separate entry (previously called _ARGS). + + - Build step custom commands now use VERBATIM mode so that + arguments + are correctly escaped on the command line during builds. + +2009-03-18 08:50 fbertel + + * Source/kwsys/SystemTools.cxx: COMP:Fixed warnings. + +2009-03-18 07:57 fbertel + + * Source/kwsys/RegularExpression.cxx: STYLE:Empty commit just add + information about rev 1.15: the reason is that long is 64-bit on + gcc on Linux because it uses the LP64 data model whereas long is + 32-bit on VS 64-bit because it uses the LLP64 model (ref: + http://en.wikipedia.org/wiki/64-bit#64-bit_data_models ) + +2009-03-18 07:32 fbertel + + * Source/kwsys/RegularExpression.cxx: COMP:Fix warning on VS 64bit. + Don't why gcc 4.3.2 didn't catch this one on a 64bit machine with + -Wconversion on. + +2009-03-18 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-17 15:11 king + + * Source/cmLocalGenerator.cxx: BUG: Allow more shell ops in custom + commands + + This extends the set of common shell operators to include "||", + "&&", "1>", and "2>". See issue #6868. + +2009-03-17 15:10 king + + * Source/cmForEachCommand.cxx, Source/cmForEachCommand.h, + Tests/StringFileTest/CMakeLists.txt: ENH: New foreach( IN + ...) mode + + This creates a new mode of the foreach command which allows + precise iteration even over empty elements. This mode may be + safely extended with more keyword arguments in the future. The + cost now is possibly breaking scripts that iterate over a list of + items beginning with 'IN', but there is no other way to extend + the syntax in a readable way. + +2009-03-17 10:48 fbertel + + * Source/kwsys/: Glob.cxx, RegularExpression.cxx, + RegularExpression.hxx.in: COMP:Fixed warnings. + +2009-03-17 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-16 22:28 lowman + + * Modules/FindBoost.cmake: BUG: Eliminates detection of Boost + system library prior to 1.35 (see issue #8734) + +2009-03-16 17:38 fbertel + + * Source/kwsys/ProcessUNIX.c: COMP:Try to fix compile error with + qnx gcc. + +2009-03-16 17:13 fbertel + + * Source/kwsys/ProcessUNIX.c: COMP:Fixed gcc 4.3.2 warning with -O1 + and above: ignoring return value of read'), declared with + attribute warn_unused_result + +2009-03-16 16:55 king + + * Modules/CMakeGenericSystem.cmake, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, Source/cmake.cxx, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: Allow projects to + disable per-rule echo lines + + This creates global property RULE_MESSAGES which can be set to + disbale per-rule progress and action reporting. On Windows, + these reports may cause a noticable delay due to the cost of + starting extra processes. This feature will allow scripted + builds to avoid the cost since they do not need detailed + information anyway. This replaces the RULE_PROGRESS property + created earlier as it is more complete. See issue #8726. + +2009-03-16 16:55 king + + * Source/cmMakefileLibraryTargetGenerator.cxx: STYLE: Separate + unrelated logic + + This separates unrelated uses of a library-type switch into + separate switches. An upcoming commit will conditionally enter + one of the switches. + +2009-03-16 16:22 king + + * Modules/CMakeGenericSystem.cmake, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, Source/cmake.cxx, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: Allow projects to + disable per-rule progress + + This creates global property RULE_PROGRESS which can be set to + disbale per-rule progress reporting. On Windows, progress + reports may cause a noticable delay due to the cost of starting + an extra process. This feature will allow scripted builds to + avoid the cost since they do not need detailed progress anyway. + See issue #8726. + +2009-03-16 16:22 king + + * Source/: cmMakefileTargetGenerator.cxx, + cmMakefileTargetGenerator.h: ENH: Factor out makefile progress + rule commands + + This factors duplicate progress rule code into a common method. + +2009-03-16 15:02 fbertel + + * Source/kwsys/ProcessUNIX.c: COMP:Fixed warnings. + +2009-03-16 14:30 king + + * Source/: cmCPluginAPI.cxx, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h, cmSourceFile.cxx: BUG: Do not + automatically set HEADER_FILE_ONLY + + Long ago the native build system generators needed + HEADER_FILE_ONLY to be set on header files to stop them from + building. The modern generators correctly handle headers without + the help of this property. This removes automatic setting of the + property so that it can be used reliably as an indicator of + project author intention. It fixes VS IDE project files to show + header files normally instead of excluded (broken by the fix for + issue #7845). + +2009-03-16 14:30 king + + * Source/: cmMakeDepend.cxx, cmMakeDepend.h: ENH: Remove unused + code from cmMakeDepend + + This class is the old-style dependency scanner. It is needed + only to implement the output_required_files command. This change + removes some code not needed for that purpose, including a + reference to the HEADER_FILE_ONLY property. + +2009-03-16 10:51 king + + * Source/cmAddTestCommand.cxx, Source/cmAddTestCommand.h, + Source/cmTest.cxx, Source/cmTest.h, Source/cmTestGenerator.cxx, + Source/cmTestGenerator.h, Tests/Testing/CMakeLists.txt, + Tests/Testing/perconfig.c: ENH: Add NAME mode to ADD_TEST command + + This creates command mode add_test(NAME ...). This signature is + extensible with more keyword arguments later. The main purpose + is to enable automatic replacement of target names with built + target file locations. A side effect of this feature is support + for tests that only run under specific configurations. + +2009-03-16 10:42 king + + * Source/: cmAddTestCommand.cxx, cmTest.cxx, cmTest.h, + cmTestGenerator.cxx: ENH: Refactor storage of test command lines + + We used to separate the command executable from its argument + vector. It is simpler to just store the whole command line in + one vector. + +2009-03-16 10:40 king + + * Source/CMakeLists.txt, Source/cmAddTestCommand.cxx, + Source/cmLocalGenerator.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmTestGenerator.cxx, + Source/cmTestGenerator.h, bootstrap: ENH: Refactor generation of + CTestTestfile content + + This moves code which generates ADD_TEST and SET_TESTS_PROPERTIES + calls into CTestTestfile.cmake files out of cmLocalGenerator and + into a cmTestGenerator class. This will allow more advanced + generation without cluttering cmLocalGenerator. The + cmTestGenerator class derives from cmScriptGenerator to get + support for per-configuration script generation (not yet + enabled). + +2009-03-16 10:39 king + + * Source/CMakeLists.txt, Source/cmInstallGenerator.cxx, + Source/cmInstallGenerator.h, Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, Source/cmScriptGenerator.cxx, + Source/cmScriptGenerator.h, bootstrap: ENH: Refactor + cmInstallGenerator for re-use + + A new cmScriptGenerator base class factors out the + non-install-specific part of cmInstallGenerator. This will be + useful for other generators that want per-configuration + functionality. + +2009-03-16 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-13 17:04 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: ENH: don't enforce + VERBOSE Makefiles, but set the env. var VERBOSE to 1 in when make + is executed from within Eclipse. This way when building from the + command line one can build also in non-verbose mode. + + Alex + +2009-03-13 16:52 alex + + * Modules/CMakeSystemSpecificInformation.cmake, + Source/cmExtraEclipseCDT4Generator.cxx, + Source/cmExtraEclipseCDT4Generator.h: ENH: when using the Eclipse + project generator, run gcc so that it tells us its system include + directories. These are catched in + CMakeSystemSpecificInformation.cmake (only with the Eclipse + generator) and then written by the Eclipse generator in the + Eclipse project file. This way Eclipse can find the standard + headers (#7585) Not sure CMakeSystemSpecificInformation.cmake is + the best place to do this. + + Alex + +2009-03-13 14:58 alex + + * Source/cmStringCommand.h: STYLE: add line breaks to the + documentation for CMAKE_MATCH_(0..9), otherwise one might miss + this information + + Alex + +2009-03-13 10:53 king + + * Source/cmCacheManager.cxx: BUG: Document internal cache property + MODIFIED + + All cmake-defined properties should be documented, even if they + are internal. This fixes the DocTest when CMAKE_STRICT is + enabled. + +2009-03-13 10:53 king + + * Source/: cmCacheManager.cxx, cmCacheManager.h, cmake.cxx: BUG: + Fix cache properties for CMAKE_STRICT build + + All cmPropertyMap instances must have CMakeInstance set. This + teaches cmCacheManager to set it on cache entries. + +2009-03-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-12 21:06 lowman + + * Modules/FindBoost.cmake: STYLE: Moved functions/macros to top of + file so main is more readable. + +2009-03-12 19:24 alex + + * Source/cmIncludeDirectoryCommand.cxx: BUG: fix #8704, sometimes + crash if include_directories() is called with a whitespace string + + Alex + +2009-03-12 18:43 alex + + * Source/cmProjectCommand.h: STYLE: document NONE for disabling any + languages, slightly change wording of the rest of the + documentation, so it is more similar to ENABLE_LANGUAGE() (#8718) + + Alex + +2009-03-12 14:54 hoffman + + * Source/CTest/cmCTestSubmitHandler.cxx: ENH: allow for https + submission if ctest is built with a curl that supports it + +2009-03-12 13:11 king + + * Source/cmCacheManager.cxx: COMP: Do not use void returns + + VS 6 does not support the C++ void returns feature. This removes + an accidental use of it. + +2009-03-12 11:19 clinton + + * Source/QtDialog/: QCMake.cxx, QCMake.h, QCMakeCacheView.cxx, + QCMakeCacheView.h, QCMakeWidgets.h: + ENH: Add support for showing combo box for choosing from a list + of strings that a cache property can have. + +2009-03-12 10:52 king + + * Source/: cmCacheManager.cxx, cmSetPropertyCommand.cxx: ENH: + Define STRINGS cache entry property + + This property defines a list of values for a cache entry of type + STRING. A CMake GUI may optionally use a drop-down selection + widget for the entry instead of a generic text entry field. We + do not enforce that the value of the entry match one of the + strings listed. + +2009-03-12 10:49 king + + * Source/: cmCacheManager.cxx, cmCacheManager.h: ENH: Refactor + cache entry writing and reading + + This factors out duplicated code into reusable methods, thus + simplifying writing and reading of cache entry help strings, + keys, values, and properties. + +2009-03-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-11 18:13 alex + + * Modules/: CheckCSourceCompiles.cmake, CheckCSourceRuns.cmake, + CheckCXXSourceCompiles.cmake, CheckCXXSourceRuns.cmake: STYLE: + fix documentation: the second short description discarded the + first one, but the first one was the correct one (i.e. the one + which mentioned that CheckC[XX]SourceRuns.cmake also tries to run + the executable) + + Alex + +2009-03-11 13:31 king + + * Source/CTest/cmCTestCoverageHandler.cxx: BUG: Do not produce + empty coverage log files + + This moves the filtering of source files to before the production + of coverage log files in order to avoid producing a + CoverageLog-*.xml file for 100 filtered-out files. The change + greatly reduces the number of submitted coverage files when using + label filters. + +2009-03-11 13:31 king + + * Source/: CTest/cmCTestCoverageHandler.cxx, cmCTest.h: BUG: Do not + carry over file list between coverage + + When performing multiple ctest_coverage() commands in a single + CTest instance we need to clear the list of CoverageLog-*.xml + files for submission. Otherwise if the current coverage run + produces fewer log files than the previous run CTest will attempt + to submit non-existing files. + +2009-03-11 12:03 king + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: BUG: Avoid duplicate CTest coverage + submission + + This teaches ctest_coverage() to remove any existing + CoverageLog-*.xml when it creates new coverage results. + Otherwise the next ctest_submit() may submit old coverage log + files which unnecessarily. + +2009-03-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-10 17:34 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: ENH: only check for the + existance of a header file if: -the original file is a C/C++ + implementation file -the header file is not already part of the + sources + + Alex + +2009-03-10 11:11 king + + * Source/: cmCacheManager.cxx, cmCacheManager.h, + cmDocumentation.cxx, cmake.cxx: ENH: Document CACHE entry + properties + + This adds a property documentation section for CACHE properties. + We document the ADVANCED, HELPSTRING, TYPE, and VALUE properties. + +2009-03-10 11:10 king + + * Source/cmCacheManager.cxx, Source/cmCacheManager.h, + Source/cmGetPropertyCommand.cxx, Source/cmGetPropertyCommand.h, + Source/cmSetPropertyCommand.cxx, Source/cmSetPropertyCommand.h, + Tests/Properties/CMakeLists.txt: ENH: Teach set/get_property + about CACHE properties + + This adds the CACHE option to set_property and get_property + commands. This allows full control over cache entry information, + so advanced users can tweak their project cache as desired. The + set_property command allows only pre-defined CACHE properties to + be set since others would not persist anyway. + +2009-03-10 11:10 king + + * Source/: cmCacheManager.cxx, cmCacheManager.h, cmProperty.h, + cmPropertyDefinitionMap.cxx: ENH: Use cmPropertyMap for cache + properties + + This re-implements cache entry property storage in cmCacheManager + to use cmPropertyMap so it can share the standard property + implementation. + +2009-03-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-09 17:57 king + + * Source/cmGetPropertyCommand.cxx: BUG: Fix get_property result for + bad property + + When a property does not exist we are supposed to return an empty + value. Previously if a property did not exist we just left the + value of the output variable unchanged. This teaches CMake to + remove the definition of the output variable in this case. + +2009-03-09 12:19 king + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: ENH: Efficiently filter CTest coverage + by label + + This teaches CTest to process coverage information only for + object files in targets containing labels of interest. This + change also improves loading of global coverage information by + globbing only in each target support directory instead of the + entire build tree. + +2009-03-09 12:19 king + + * Source/: CTest/cmCTestCoverageHandler.cxx, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, CTest/cmCTestCoverageHandler.h: ENH: + Generate a central list of target directories + + This generalizes the previous CMakeFiles/LabelFiles.txt created + at the top of the build tree to a + CMakeFiles/TargetDirectories.txt file. It lists the target + support directories for all targets in the project. Labels can + still be loaded by looking for Labels.txt files in each target + directory. + +2009-03-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-08 15:33 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: + ENH: automatically add headers of implementation file to the + codeblocks project file + + Alex + +2009-03-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-06 14:29 david.cole + + * Tests/CMakeTests/GetPrerequisitesTest.cmake.in: STYLE: White + space only change to see if continuous is working on new + dashboard machine... + +2009-03-06 12:06 king + + * Source/: cmMessageCommand.cxx, cmMessageCommand.h: BUG: Fix + message(SEND_ERROR) to continue + + During testing of the new message() signatures I mistakenly + concluded that SEND_ERROR stops processing. The corresponding + commit enforced this wrong behavior. This restores the correct + behavior and fixes the documentation accordingly. + +2009-03-06 10:04 king + + * Source/cmMessageCommand.cxx, Source/cmMessageCommand.h, + Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/MessageTest.cmake.in, + Tests/CMakeTests/MessageTestScript.cmake: ENH: Teach message() + how to display warnings + + This adds message(WARNING) and message(AUTHOR_WARNING) command + modes and fully documents the command behavior in all modes. + +2009-03-06 10:01 king + + * Source/cmDocumentationFormatterMan.cxx: BUG: Fix man-page + preformatted text paragraphing + + Man page preformatted text needs an extra newline after the + ending marker to create a paragraph break. This bug was + introduced by the patch from issue #7797 to place explicit ".nf" + and ".fi" markers around preformatted blocks. + +2009-03-06 09:14 king + + * Source/cmFileCommand.cxx: ENH: Teach file(REMOVE) how to use + relative paths + + This teaches the command to interpret relative paths with respect + to the location of the invoking CMakeLists.txt file. The + convention is already used by most commands and won't change the + behavior in script mode. + +2009-03-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-05 15:17 king + + * CMakeCPack.cmake, CMakeLists.txt, bootstrap, + Source/CMakeLists.txt, Source/cmCTest.cxx, + Source/cmCacheManager.cxx, Source/cmConfigure.cmake.h.in, + Source/cmDocumentVariables.cxx, Source/cmLocalGenerator.cxx, + Source/cmStandardIncludes.h, Source/cmVersion.cxx, + Source/cmVersion.h, Source/cmVersionConfig.h.in, + Source/cmVersionMacros.h, Source/cmake.cxx, + Source/CursesDialog/cmCursesLongMessageForm.cxx, + Source/CursesDialog/cmCursesMainForm.cxx, + Source/QtDialog/CMakeSetup.cxx, Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/VersionTest.cmake.in: ENH: Overhaul CMake + version numbering + + This moves the version numbers into an isolated configured header + so that not all of CMake needs to rebuild when the version + changes. + + Previously we had spaces, dashes and/or the word 'patch' randomly + chosen before the patch number. Now we always report version + numbers in the traditional format + "..[-rc]". + + We still use odd minor numbers for development versions. Now we + also use the CCYYMMDD date as the patch number of development + versions, thus allowing tests for exact CMake versions. + +2009-03-05 13:57 king + + * Source/: cmake.cxx, cmake.h: STYLE: Remove unused + cmake::CacheVersionMatches + + This remove the method completely since nothing uses it. + +2009-03-05 10:17 king + + * Source/CTest/: cmCTestCoverageCommand.cxx, + cmCTestCoverageCommand.h: BUG: Initialize ctest_coverage command + ivar + + This initializes the LabelsMentioned ivar in + cmCTestCoverageCommand. + +2009-03-05 10:08 david.cole + + * Modules/CPack.cmake: STYLE: Use $ style variable dereference + instead of @ style. + +2009-03-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-04 15:39 king + + * Source/cmake.cxx, Source/cmake.h, Source/cmakemain.cxx, + Tests/CMakeBuildTest.cmake.in: ENH: Cleanup cmake --build + interface. + + This cleans up the 'cmake --build' command-line interface: - + Rename --clean to --clean-first to better describe it. - + Replace --extra-options with a -- separator to simplify passing + of multiple native build tool options. - Document the + options in the main CMake man page description of the + --build option, and shares this with the usage message. - + Require --build to be the first argument when present. - Move + implementation into cmakemain where it belongs. + +2009-03-04 15:38 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: ENH: Extend + GG::Build method for pre-parsed args + + This adds an argument to the cmGlobalGenerator::Build method to + pass a vector of arguments for the native build tool + programatically. + +2009-03-04 12:30 hoffman + + * Modules/CPack.background.png.in: ENH: add file back bug use cmake + image + +2009-03-04 11:45 king + + * Modules/AddExternalProject.cmake, + Tests/ExternalProject/CMakeLists.txt: ENH: Better recursive make + in AddExternalProject + + This teaches AddExternalProject to run "$(MAKE)" for build and + install steps of CMake-based external projects when using a + Makefile generator. It allows the external project to + participate in a parallel make invoked on the superproject. + +2009-03-04 11:24 hoffman + + * Source/CTest/cmCTestScriptHandler.cxx: BUG: make sure error + condition is reset before loading scripts + +2009-03-04 09:21 king + + * Modules/AddExternalProject.cmake: ENH: Allow empty arguments in + external project API + + This uses the get_property command to simplify property lookup in + the AddExternalProject module. It distinguishes for build and + install argument properties the cases of unset and set to empty. + +2009-03-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-03 07:56 hoffman + + * Modules/CPack.background.png.in: ENH: remove unused file + +2009-03-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-02 21:09 lowman + + * Modules/FindBoost.cmake: STYLE: Fix documentation bug regarding + Boost__LIBRARY (COMPONENT should be uppercase). + +2009-03-02 20:29 lowman + + * Modules/FindCxxTest.cmake: ENH: Detect perl & python scripts + based on CXXTEST_INCLUDE_DIR (patch from Tyler Roscoe on mailing + list). + +2009-03-02 16:27 king + + * Source/cmXMLSafe.cxx: BUG: Avoid encoding invalid XML chars in + CTest + + CTest encodes test and tool output in XML for dashboard + submission. This fixes the XML encoding implementation to not + encode an invalid character and instead put a human-readable tag + in its place. See issue #8647. + +2009-03-02 16:02 king + + * Source/cmake.cxx: BUG: Gracefully handle broken version symlinks + + This teaches the helper commands 'cmake -E + cmake_symlink_executable' and 'cmake -E cmake_symlink_library' to + remove broken symlinks before creating a symlink and report an + error when the symlink cannot be created. See issue #8654. + +2009-03-02 15:33 king + + * Source/CTest/: cmCTestCoverageCommand.cxx, + cmCTestCoverageCommand.h, cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: ENH: Teach ctest_coverage to filter + with LABELS + + This teaches ctest_coverage() to report only coverage of files + labeled with at least one label given by a new LABELS option. + +2009-03-02 15:33 king + + * Source/CTest/cmCTestCoverageHandler.cxx: BUG: Fix coverage label + reports for Bullseye + + This teaches CTest to report Labels elements in the Coverage.xml + file for Bullseye coverage results. + +2009-03-02 15:32 king + + * Source/CTest/cmCTestCoverageHandler.cxx: BUG: Fix coverage + handler initialization + + This resets coverage handler internal state on initialization so + that multiple coverage runs are independent. + +2009-03-02 09:59 king + + * Source/cmXMLSafe.cxx: BUG: Hack for issue #8647 + +2009-03-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-03-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-28 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-27 16:28 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: BUG: #8611 add pass fail + reasons into log file + +2009-02-27 13:08 king + + * Modules/CMakeASMInformation.cmake: BUG: Fix ASM source file + extension default list + + This replaces @ASM_DIALECT@ syntax with ${ASM_DIALECT} syntax so + it will be replaced correctly. Patch from Derek Bruening. See + issue #8639. + +2009-02-27 12:59 king + + * Source/cmMakefileTargetGenerator.cxx: BUG: Pass shared library + export symbol in DEFINES + + The _EXPORTS macro defined for object files when built in + a shared library should be put in the make + rule replacement and not . Also, it should honor the + platform variable CMAKE__DEFINE_FLAG. See issue #8107. + +2009-02-27 11:23 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmMakefile.cxx: ENH: Enforce unique binary directories + + The second argument of add_subdirectory must name a unique binary + directory or the build files will clobber each other. This + enforces uniqueness with an error message. + +2009-02-27 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-26 13:28 king + + * Docs/cmake-mode.el: BUG: Fix cmake-mode.el indentation cursor + motion + + This makes cursor motion in the indent function consistent with + emacs conventions. Patch from Mike Wittman. See issue #8625. + +2009-02-26 09:22 king + + * Source/CTest/: cmCTestUpdateHandler.cxx, cmCTestVC.cxx, + cmCTestVC.h: ENH: Refactor initial checkout into cmCTestVC + + This adds cmCTestVC::InitialCheckout and uses it in + cmCTestUpdateHandler to run the initial checkout command. The + new implementation logs the command in the update log + consistently with the rest of the new update implementation. + +2009-02-26 09:22 king + + * Tests/: CTestUpdateCVS.cmake.in, CTestUpdateCommon.cmake, + CTestUpdateSVN.cmake.in: ENH: Extend CTest.UpdateSVN to test + local mods + + This teaches the test to create local modifications in the work + tree before updating. + +2009-02-26 09:16 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: BUG: Use new + include dir suppresson for all gens + + This fixes CMAKE__IMPLICIT_INCLUDE_DIRECTORIES to be used + for all generators instead of just those that construct their own + compiler command lines directly. See issue #8598. + +2009-02-26 08:49 king + + * Source/cmLocalGenerator.cxx: ENH: Simplify reverse + cmLocalGenerator::Convert + + It does not make sense to call the reverse Convert signature (for + remote paths corresponding to CMake-managed directories) with + NONE or FULL since they have no path. Patch from Modestas + Vainius. See issue #7779. + +2009-02-26 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-25 17:17 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Fix copy/paste error in + previous commit that references wrong variable + (wxWidgets_INCLUDE_DIRS instead of wxWidgets_DEFINITIONS). + +2009-02-25 16:29 alex + + * Modules/FindQt4.cmake: ENH: add patch from Debian, which adds + support lrelease-qt4 and lupdate-qt4 + http://patch-tracking.debian.net/patch/series/view/cmake/2.6.3-1/FindQt4_qt4_lupdate_lrelease.diff + + Alex + +2009-02-25 15:45 king + + * Source/CTest/: cmCTestSVN.cxx, cmCTestVC.h: COMP: Fix cmCTestVC + member access for HP compiler + + The HP C++ compiler needs some help to allow access to some + member classes of cmCTestVC. + +2009-02-25 14:42 king + + * Source/CTest/: cmCTestCVS.cxx, cmCTestCVS.h, cmCTestSVN.cxx, + cmCTestSVN.h, cmCTestUpdateHandler.cxx, cmCTestVC.cxx, + cmCTestVC.h: ENH: Rewrite CTest Update implementation + + This adds a new VCS update implementation to the cmCTestVC + hierarchy and removes it from cmCTestUpdateHandler. The new + implementation has the following advantages: + + - Factorized implementation instead of monolithic function + - Logs vcs tool output as it is parsed (less memory, inline + messages) + - Uses one global svn log instead of one log per file + - Reports changes on cvs branches (instead of latest trunk + change) + - Generates simpler Update.xml (only one Directory element per + dir) + + Shared components of the new implementation appear in cmCTestVC + and may be re-used by subclasses for other VCS tools in the + future. + +2009-02-25 11:44 king + + * Modules/Platform/UnixPaths.cmake, Source/cmDocumentVariables.cxx, + Source/cmLocalGenerator.cxx: ENH: Re-enable system include dir + suppression + + This creates variable CMAKE__IMPLICIT_INCLUDE_DIRECTORIES + to specify implicit include directories on a per-language basis. + This replaces the previous platform-wide variable. It is + necessary to avoid explicit specification of -I/usr/include on + some compilers (such as HP aCC) because: + + 1.) It may break ordering among system include directories + defined + internally by the compiler, thus getting wrong system + headers. + 2.) It tells the compiler to treat the system include directory + as a user include directory, enabling warnings in the + headers. + + See issue #8598. + +2009-02-25 09:20 king + + * Source/CTest/cmCTestVC.cxx: COMP: Fix cmCTestVC char[]->string + Borland warning + + The Borland compiler warns about returning a char[] from a + function with return type std::string without an explicit + construction. + +2009-02-25 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-24 17:23 hoffman + + * Source/CTest/: cmCTestMultiProcessHandler.cxx, + cmCTestTestHandler.cxx, cmCTestTestHandler.h: ENH: add a CDash + measured value showing the reason for passed and failed tests + based on regular expressions + +2009-02-24 17:07 king + + * Utilities/CMakeLists.txt: BUG: Fix cmake-gui docs generation PATH + feature + + Automatic addition of the Qt DLL location to PATH can be done + only for generators that use a Windows shell. + +2009-02-24 16:49 miguelf + + * Modules/: FindwxWidgets.cmake, UsewxWidgets.cmake: BUG: Using + PROPERTY COMPILE_DEFINITIONS_DEBUG to support Debug only + preprocessor options (e.g., _DEBUG __WXDEBUG__). + +2009-02-24 15:43 king + + * Source/: cmXMLParser.cxx, cmXMLParser.h: ENH: Added + cmXMLParser::FindAttribute method + + This method will help subclasses look for element attributes in + their StartElement methods. + +2009-02-24 15:43 king + + * Source/: cmXMLParser.cxx, cmXMLParser.h: ENH: Allow cmXMLParser + subclasses to report errors + + This tells cmXMLParser to report error messages through virtual + method cmXMLParser::ReportError so that subclasses can override + the default report. + +2009-02-24 15:43 king + + * Source/CTest/: cmCTestSVN.cxx, cmCTestSVN.h: ENH: Teach + cmCTestSVN to load repo/tree relation + + This teaches cmCTestSVN::NoteNewRevision to save the repository + URL checked out in the work tree, the repository root, and the + path below the root to reach the full URL. + +2009-02-24 15:43 king + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add cmCTest::DecodeURL + method + + This new method decodes the "percent-encoding" used in URL + syntax. + +2009-02-24 15:37 king + + * Modules/Platform/Darwin-icc.cmake, Modules/Platform/Darwin.cmake, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Remove implicit + include dir suppression + + We used to suppress generation of -I/usr/include (and on OSX also + -I/usr/local/include). This behavior seems to cause more trouble + than it's worth, so I'm removing it until someone encounters the + original problem it fixed. See issue #8598. + +2009-02-24 14:32 hoffman + + * Tests/Fortran/include/test_preprocess.h: file test_preprocess.h + was added on branch CMake-2-6 on 2009-03-23 18:04:12 +0000 + +2009-02-24 14:32 king + + * Tests/Fortran/: CMakeLists.txt, test_preprocess.F90, + include/test_preprocess.h: ENH: Test included header in Fortran + preprocessing + + This extends the Fortran preprocessing test to include a header + file through a preprocessor directive. + +2009-02-24 14:32 king + + * Source/cmDependsFortran.cxx: BUG: Fix Fortran implicit dependency + include path + + The previous change to Source/cmDependsFortran.cxx while + refactoring implicit dependency scanning configuration rules + completely broke loading of the include file search path while + scanning Fortran dependencies. This adds the line that should + have been added during the previous change to load the include + path correctly. + +2009-02-24 12:52 king + + * Source/CTest/: cmCTestSVN.cxx, cmCTestSVN.h, + cmCTestUpdateHandler.cxx, cmCTestVC.cxx, cmCTestVC.h: ENH: Factor + out VCS work tree revision checks + + This moves checks of the work tree revision before and after + update from cmCTestUpdateHandler::ProcessHandler into the + cmCTestVC hierarchy. + +2009-02-24 12:50 king + + * Source/CTest/: cmCTestUpdateHandler.cxx, cmCTestVC.cxx, + cmCTestVC.h: ENH: Factor out nightly start time computation + + Move generation of the nightly start time string from + cmCTestUpdateHandler::ProcessHandler into cmCTestVC. + +2009-02-24 12:50 king + + * Source/CTest/: cmCTestSVN.cxx, cmCTestSVN.h, + cmCTestUpdateHandler.cxx, cmCTestVC.cxx, cmCTestVC.h: ENH: Factor + out svn work tree cleanup + + This removes work tree cleanup from cmCTestUpdateHandler and adds + an interface for it in cmCTestVC with an implementation in + cmCTestSVN. + +2009-02-24 12:49 king + + * Source/CTest/: cmCTestVC.cxx, cmCTestVC.h: ENH: Create + cmCTestVC::RunChild and parse helpers + + This method will help VCS tool subclasses run child processes and + log the output while parsing it. + +2009-02-24 11:41 king + + * Source/cmInstallCommand.cxx, Source/cmInstallCommand.h, + Source/cmInstallDirectoryGenerator.cxx, + Source/cmInstallDirectoryGenerator.h, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Add install(DIRECTORY) + option 'OPTIONAL' + + This adds the OPTIONAL option to the install(DIRECTORY) command. + It tells the installation rule that it is not an error if the + source directory does not exist. See issue #8394. + +2009-02-24 11:41 king + + * Source/cmInstallCommand.cxx: ENH: Refactor install(DIRECTORY) + argument parsing + + We previously used several booleans with at most one set to true + at a time to track argument parsing state. This refactors it to + use one enumeration. + +2009-02-24 11:08 king + + * Source/cmProcessTools.h: COMP: cmProcessTools::OutputParser + virtual dtor + + This class has virtual methods and therefore should have a + virtual destructor. + +2009-02-24 10:40 king + + * Source/: CMakeLists.txt, cmProcessTools.cxx, cmProcessTools.h: + ENH: Create cmProcessTools to parse child output + + This class provides a RunProcess method to run a child process + and send its output to an abstract parsing interface. This also + provides a simple line parser and logger implementing the parsing + interface. + +2009-02-24 10:39 king + + * Source/: CMakeLists.txt, CTest/cmCTestCVS.cxx, + CTest/cmCTestCVS.h, CTest/cmCTestSVN.cxx, CTest/cmCTestSVN.h, + CTest/cmCTestUpdateHandler.cxx: ENH: Add cmCTestCVS and + cmCTestSVN + + These cmCTestVC subclasses will implement interaction with CVS + and SVN tools. + +2009-02-24 10:39 king + + * Source/: CMakeLists.txt, CTest/cmCTestVC.cxx, CTest/cmCTestVC.h: + ENH: Create cmCTestVC for VCS interaction + + This creates cmCTestVC, the base for a forthcoming class + hierarchy to interact with version control systems. + +2009-02-24 09:34 david.cole + + * Source/CPack/cmCPackDragNDropGenerator.cxx: STYLE: Fix line + length violation. + +2009-02-24 09:09 king + + * Source/CTest/: cmCTestUpdateHandler.cxx, cmCTestUpdateHandler.h: + ENH: Factor out VCS tool detection + + In cmCTestUpdateHandler, this factors out version control tool + detection from the monolithic + cmCTestUpdateHandler::ProcessHandler to separate methods. This + also places priority on detection of the tool managing the source + tree since using any other tool will cause errors. + +2009-02-24 09:09 king + + * Source/CTest/: cmCTestUpdateHandler.cxx, cmCTestUpdateHandler.h: + ENH: Factor out initial checkout method + + This moves the initial checkout code from the monolithic + cmCTestUpdateHandler::ProcessHandler to a separate method + cmCTestUpdateHandler::InitialCheckout. + +2009-02-24 09:00 king + + * Utilities/CMakeLists.txt: ENH: Help cmake-gui docs generation on + Windows + + We use a custom command to run 'cmake-gui --help...' to generate + the documentation for the application. Since this is a Qt + application, the executable must find the Qt DLLs in order to + run. As a convenience, if QtCore4.dll appears next to qmake.exe, + we put its location in the PATH environment variable when running + the custom command on Windows. + +2009-02-24 00:49 lowman + + * Modules/FindBoost.cmake: BUG: Fix issue #8576 FindBoost + regression finding static libs, impacts MinGW and Intel/Windows + compilers. + +2009-02-24 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-23 16:54 king + + * Tests/CTestUpdateCommon.cmake: BUG: Fix CTest.UpdateCVS/SVN tests + for win slashes + + This fixes the tests to allow windows slashes in reported file + names in the generated Update.xml file. + +2009-02-23 15:59 king + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: Refactor quoting of + VCS tool command + + Previously we pre-quoted the command line tool path. This avoids + it by quoting the command everywhere it is used, thus preserving + access to the original, unquoted command. + +2009-02-23 15:59 king + + * Tests/CTestUpdateSVN.cmake.in: ENH: Test svn updates with space + in author name + + This enhances the CTest.UpdateSVN test with a space in the test + author name. It will check that author name parsing works + correctly. + +2009-02-23 15:59 king + + * Tests/: CTestUpdateCVS.cmake.in, CTestUpdateCommon.cmake, + CTestUpdateSVN.cmake.in: ENH: Enhance CTest.UpdateCVS/SVN tests + + This adds a source tree subdirectory to the content of the test + projects. It also smoke tests more than one revision worth of + changes. + +2009-02-23 15:58 king + + * Tests/CTestUpdateCommon.cmake: ENH: Better failure output from + CTest.Update* + + This teaches CTestUpdateCommon to report the process exit + condition from failed child processes executed during tests. + +2009-02-23 13:25 david.cole + + * Source/CPack/cmCPackDragNDropGenerator.cxx: ENH: Add license file + presentation to the Drag-N-Drop dmg file CPack generator. Fixes + issue #8442. Thanks to Clinton Stimpson for the patch. + +2009-02-23 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-22 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-21 14:43 hoffman + + * Source/QtDialog/CMakeSetup.cxx: BUG: make sure you can build + cmake without an X server + +2009-02-21 14:38 hoffman + + * Source/QtDialog/CMakeSetup.cxx: BUG: make sure the gui still + runs... + +2009-02-21 14:23 hoffman + + * Source/QtDialog/CMakeSetup.cxx: BUG: make sure an x server is not + required for the build + +2009-02-21 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-20 15:51 king + + * Source/CTest/: cmCTestBuildCommand.h, cmCTestConfigureCommand.h, + cmCTestCoverageCommand.h, cmCTestHandlerCommand.h, + cmCTestMemCheckCommand.h, cmCTestTestCommand.h: ENH: Document + APPEND option in ctest_* commands + + This adds documentation of the APPEND option to the configure, + build, test, memcheck, and coverage commands. The docs leave + specific semantics for the dashboard server to define. + +2009-02-20 15:50 king + + * Source/CTest/: cmCTestBuildCommand.h, cmCTestConfigureCommand.h, + cmCTestCoverageCommand.h, cmCTestMemCheckCommand.h, + cmCTestTestCommand.h, cmCTestUpdateCommand.h: ENH: Improve + ctest_* command documentation + + This corrects the terse documentation and adds detail to the full + documentation of some commands. It also normalizes the layout of + the documentation string endings to make adding lines easier. + +2009-02-20 15:50 king + + * Source/CTest/cmCTestSubmitCommand.h: ENH: More documentation for + ctest_submit command + + This clarifies the terse documentation and lists valid values for + PARTS. + +2009-02-20 14:03 king + + * Source/cmDocumentVariables.cxx: ENH: Clarify docs of old + *_OUTPUT_PATH vars + + This clarifies the documentation of EXECUTABLE_OUTPUT_PATH and + LIBRARY_OUTPUT_PATH to sound less like deprecation. + +2009-02-20 11:10 hoffman + + * CMakeLists.txt, ChangeLog.manual: ENH: final 2.6.3 commit remove + RC and clean changelog a bit + +2009-02-20 10:14 david.cole + + * Source/CPack/: cmCPackDragNDropGenerator.cxx, + cmCPackDragNDropGenerator.h: STYLE: Fix style line-too-long + violations. + +2009-02-20 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-19 16:04 clinton + + * Modules/FindQt4.cmake: + ENH: Support COMPONENTS argument to find_package(). See + bug #8542. + +2009-02-19 16:02 hoffman + + * Tests/BuildDepends/Project/CMakeLists.txt: ENH: merge in fix for + test on older macs + +2009-02-19 15:51 clinton + + * Modules/FindQt4.cmake: + ENH: Support version argument in find_package(). See bug + #8542. + +2009-02-19 15:24 hoffman + + * Tests/BuildDepends/Project/CMakeLists.txt: ENH: make sure + multiple archs are only tested when the work + +2009-02-19 11:53 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Source/cmGlobalXCodeGenerator.cxx, + Tests/BuildDepends/Project/CMakeLists.txt: BUG: fix xcode depend + issue again with a test + +2009-02-19 11:51 hoffman + + * Source/cmGlobalXCodeGenerator.cxx, + Tests/BuildDepends/Project/CMakeLists.txt: BUG: fix xcode depend + issue and add a test for it + +2009-02-19 11:20 david.cole + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Fix issue #8253 - handle + xib file extension in Xcode projects so that double clicking on + xib files opens them up in Interface Builder. Thanks to + baron_roberts for the patch. + +2009-02-19 11:17 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Source/cmGlobalXCodeGenerator.cxx: BUG: fix xcode depend issue + again on branch + +2009-02-19 10:39 david.cole + + * Source/CPack/: cmCPackBundleGenerator.cxx, + cmCPackDragNDropGenerator.cxx, cmCPackDragNDropGenerator.h: BUG: + A little bit more refactoring from BundleGenerator to + DragNDropGenerator. See issue #8556. Thanks for Clinton Stimpson + for the patch. + +2009-02-19 10:31 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: BUG: fix depend bug again for + Xcode + +2009-02-19 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-18 12:40 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Source/cmGlobalXCodeGenerator.cxx: ENH: put in fix for Xcode + rebuild issue on branch + +2009-02-18 12:09 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: BUG: use the top level project + name for the xcode depend helper directory names + +2009-02-18 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-17 16:59 david.cole + + * Modules/Platform/Darwin.cmake: BUG: Allow third component of Mac + OSX sw_vers output to be empty. Mac OSX 10.5 was recently + reinstalled on dashmacmini3 and pointed out the fact that this + expression is faulty when the reported version is simply 10.5 + rather than 10.5.x... for example. This fixes it. + +2009-02-17 11:53 king + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y: + BUG: Do not use 'char' type as array subscript + + This converts uses of 'char' as an array subscript to 'unsigned + char' to heed the warning from gcc. The subscript must be an + unsigned type to avoid indexing before the beginning of the + array. This change avoids a potential crash if input text + contains a byte value beyond 0x7f. + +2009-02-17 11:37 king + + * Source/CTest/: cmCTestUpdateHandler.cxx, cmCTestUpdateHandler.h: + ENH: Remove generation of unused Update.xml parts + + This removes generation of some Update.xml content that is not + used by any Dart1, Dart2, or CDash servers: - Revisions + elements - Directory attribute of File elements - File + elements within Author elements The content was generated only + because the original Dart1 Tcl client generated it, but the + content was never used. + +2009-02-17 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-16 18:09 hoffman + + * Utilities/CMakeLists.txt: ENH: add missiong install docs for + cmake-gui + +2009-02-16 14:06 hoffman + + * CMakeCPackOptions.cmake.in, CMakeLists.txt, ChangeLog.manual, + Source/QtDialog/CMakeLists.txt, + Source/QtDialog/QtDialogCPack.cmake.in: ENH: merge in a few more + changes for installer on windows and cmake-gui + +2009-02-16 13:56 martink + + * Source/cmIfCommand.h: ENH: fix style + +2009-02-16 11:17 hoffman + + * Source/QtDialog/QtDialogCPack.cmake.in: ENH: change name for + start menu entry + +2009-02-16 10:33 king + + * Modules/readme.txt: STYLE: Note find_package COMPONENTS in + modules doc + + This mentions the COMPONENTS option of find_package in the module + author documentation file "Modules/readme.txt". See issue #8539. + +2009-02-16 10:01 king + + * Source/CTest/cmCTestUpdateHandler.cxx: BUG: Fix svn update logic + for modified files + + The main svn update parsing loop in cmCTestUpdateHandler + previously had a logic error because the variable 'res' was not + reset for each iteration. For a locally modified file it would + report the update info for the previous non-modified file, or + nothing if there was no previous file. This fixes the logic by + setting variable 'res' in both control paths for each iteration. + See issue #8168. + +2009-02-16 10:00 king + + * Source/CTest/cmCTestUpdateHandler.cxx: STYLE: Fix spelling in + cmCTestUpdateHandler + + This renames the variable 'numModiefied' to 'numModified' to fix + its spelling. It also renames 'modifiedOrConflict' to + 'notLocallyModified' to describe its purpose (rather than the + opposite of its purpose). See issue #8168. + +2009-02-16 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-13 21:51 hoffman + + * Utilities/CMakeLists.txt, CMakeCPackOptions.cmake.in: ENH: add + cmake gui docs + +2009-02-13 18:52 clinton + + * Modules/FindQt4.cmake: + ENH: Allowing finding a relocated Qt installation which contains + a qt.conf to override the hardcoded paths in qmake. Fixes + #8532. + +2009-02-13 16:29 hoffman + + * CMakeCPackOptions.cmake.in: ENH: deprecate CMakeSetup + +2009-02-13 16:28 hoffman + + * Source/QtDialog/: CMakeLists.txt, QtDialogCPack.cmake.in: ENH: + take cmake-gui out of beta + +2009-02-13 15:49 king + + * Source/kwsys/CMakeLists.txt: ENH: Optionally label KWSys targets + and tests + + This provides an API for parent projects to use to specify values + to be set in the LABELS properties of KWSys libraries, + executables, and tests. + +2009-02-13 15:49 king + + * Source/kwsys/CMakeLists.txt: ENH: Add KWSys header files to + library targets + + This adds the configured KWSys header files to the library + targets that implement their APIs so that they show up in IDE + project files. + +2009-02-13 15:17 king + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: ENH: Teach CTest to put labels in + coverage results + + This teaches CTest to include source file labels in coverage + dashboard submissions. The labels for each source are the union + of the LABELS property from the source file and all the targets + in which it is built. + +2009-02-13 15:16 king + + * Source/CTest/cmCTestCoverageHandler.cxx: STYLE: Remove unused + variable + +2009-02-13 11:49 king + + * Source/CTest/cmCTestBuildCommand.cxx: BUG: Fix + CTEST_USE_LAUNCHERS in dashboard scripts + + Since CTest does not currently load configuration settings + computed at CMake Configure time while running dashboard scripts, + the ctest_build command must honor the CTEST_USE_LAUNCHERS option + directly. + +2009-02-13 11:49 king + + * Source/cmCTest.h: STYLE: Add TODO comment about CTest + configuration + + Currently CTest does not load configuration settings computed at + CMake Configure time when running a dashboard script. This adds + a comment describing refactoring that might help resolve the + problem. + +2009-02-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-12 13:25 king + + * Source/cmGlobalGenerator.cxx: BUG: Fix logic of LabelFiles.txt + generation + + This fixes a dumb logic error which causes generation of + LabelFiles.txt to try to open the file once for every target with + labels. + +2009-02-12 13:00 king + + * Source/CTest/: cmCTestBuildHandler.cxx, cmCTestLaunch.cxx, + cmCTestLaunch.h: ENH: Report file names relative to source dir + + This teaches cmCTestLaunch to report source files that lie under + the top source directory relative to the top. + +2009-02-12 12:50 martink + + * Source/cmIfCommand.h: ENH: fix documentation and add docs on + parenthetical expressions + +2009-02-12 10:08 hoffman + + * Source/kwsys/SystemInformation.cxx: BUG: #8496 add support for + system info on haiku + +2009-02-12 10:01 king + + * Source/CTest/cmCTestBuildHandler.cxx: BUG: Do not drop build + fragments with same time + + When we collect Build.xml fragments generated by 'ctest + --launch', this lexicographically orders fragments with the same + time stamp on disk instead of incorrectly dropping duplicates. + +2009-02-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-11 15:18 king + + * Modules/: CTest.cmake, DartConfiguration.tcl.in: ENH: Create + include(CTest) launcher interface + + This defines a new CTest configuration variable + CTEST_USE_LAUNCHERS. When set to true it puts 'ctest --launch' + in RULE_LAUNCH_* properties and enables the CTest configuration + option 'UseLaunchers'. Currently this works only for Makefile + generators. + +2009-02-11 15:18 king + + * Source/CTest/: cmCTestBuildHandler.cxx, cmCTestBuildHandler.h: + ENH: Teach CTest dashboard builds to use launchers + + This defines a 'UseLaunchers' CTest configuration option. When + enabled, CTest skips log scraping from the Build step output. + Instead it defines the environment variable CTEST_LAUNCH_LOGS to + a log directory during the build. After the build it looks for + error-*.xml and warning-*.xml files containing fragments for + inclusion in Build.xml and submission. + + This is useful in conjuction with 'ctest --launch' and the + RULE_LAUNCH_* properties to get reliable, highly-granular build + failure reports. + +2009-02-11 13:05 hoffman + + * Utilities/Release/: ferrari_sgi64_release.cmake, + release_cmake.sh.in: ENH: add FFLAGS back into release script + +2009-02-11 11:57 king + + * Source/CTest/cmCTestLaunch.cxx: COMP: Do not use modern empty + init list syntax + + cmCTestLaunch first used an empty initializer list to + zero-initialize a buffer, but this is not supported on older + compilers. Instead we avoid the need for initialization + altogether. + +2009-02-11 11:31 king + + * Source/: CMakeLists.txt, ctest.cxx, CTest/cmCTestLaunch.cxx, + CTest/cmCTestLaunch.h: ENH: Create internal 'ctest --launch' tool + + This creates an undocumented 'ctest --launch' mode. It launches + a specified command and optionally records a failure in an xml + fragment. We will optionally use this in CTest's Build stage to + record per-rule build failure information when using Makefile + generators. + +2009-02-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-10 18:13 clinton + + * Modules/FindQt4.cmake: + ENH: Change FILEPATH to STRING for a list of libraries. + +2009-02-10 17:28 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindBoost.cmake, + Modules/FindQt4.cmake, Source/cmCacheManager.cxx, + Source/cmSystemTools.cxx: ENH: merge in some more fixes for RC 13 + +2009-02-10 17:25 hoffman + + * Source/cmCacheManager.cxx: ENH: fix fix for unc paths + +2009-02-10 16:08 hoffman + + * Source/cmCTest.cxx: ENH: add label global property to ctest + scripts + +2009-02-10 14:24 hoffman + + * Source/: cmCTest.cxx, CTest/cmCTestTestCommand.cxx, + CTest/cmCTestTestCommand.h, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h: ENH: add the ability to run tests by + labels + +2009-02-10 14:19 hoffman + + * Source/CTest/cmCTestMultiProcessHandler.cxx: BUG: partial fix for + 8056 -W now works with -j + +2009-02-10 12:56 hoffman + + * Modules/FindFLTK.cmake: ENH: change include command + +2009-02-10 08:52 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: Add rule substitutions + useful for launchers + + This defines make rule substitutions , , + , and . They will be useful for + RULE_LAUNCH_* property values. + +2009-02-10 08:51 king + + * Modules/CTestTargets.cmake, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, Source/cmMakefile.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, Source/cmTarget.cxx, + Source/cmake.cxx: ENH: Define RULE_LAUNCH_* properties + + This defines global, directory, and target properties + RULE_LAUNCH_COMPILE, RULE_LAUNCH_LINK, and RULE_LAUNCH_CUSTOM. + Their values specify 'launcher' command lines which are prefixed + to compile, link, and custom build rules by Makefile generators. + +2009-02-10 08:50 king + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, + cmMakefileUtilityTargetGenerator.cxx: ENH: Give target in which + custom commands build + + This gives the cmTarget instance for which custom command rules + are being generated to + cmLocalUnixMakefileGenerator3::AppendCustomCommands. It will be + useful in the future. + +2009-02-10 08:50 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmSourceFile.cxx, cmTarget.cxx: ENH: Define target and source + property LABELS + + This creates a new LABELS property for targets and source files. + We write the labels of each target and its source files in + target-specific locations in the build tree for future use. + +2009-02-10 08:50 king + + * Source/: cmTarget.cxx, cmTarget.h: ENH: Define target-specific + support directories + + This creates method cmTarget::GetSupportDirectory to compute a + target-specific support directory in the build tree. It uses the + "CMakeFiles/.dir" convention already used by the Makefile + generators. The method will be useful for any code that needs to + generate per-target information into the build tree for use by + CMake tools that do not run at generate time. + +2009-02-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-09 23:05 lowman + + * Modules/FindCxxTest.cmake: STYLE: Clarified example to illustrate + need to call target_link_libraries() in response to Issue #8485. + Changed CMake commands to lowercase. Added licensing info to + copyright + +2009-02-09 22:39 lowman + + * Modules/FindBoost.cmake: BUG: Resolves Issue #8393, Remove + workarounds in FindBoost once UNC-Path bug is fixed + +2009-02-09 22:34 lowman + + * Modules/FindBoost.cmake: STYLE: Improved examples, spelling & + grammar in documentation + +2009-02-09 16:45 alex + + * Source/cmGlobalUnixMakefileGenerator3.h: COMP: remove unused + variable TargetSourceFileCount, it seems it is unused since + version 1.88 of cmGlobalUnixMakefileGenerator3.cxx patch by + Daniel DOT Teske AT Nokia DOT com + + Alex + +2009-02-09 16:45 king + + * Source/kwsys/SystemTools.cxx: BUG: Work around broken + GetLongPathName case + + On Windows the GetLongPathName API function does not work on some + filesystems even if the file exists. In this case we should just + use the original long path name and not the GetShortPathName + result. See issue #8480. + +2009-02-09 16:42 clinton + + * Modules/FindQt4.cmake: + ENH: Support .hpp with automoc. + +2009-02-09 16:36 alex + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: STYLE: fix two typos in the + comments, patch from Daniel DOT Teske AT Nokia DOT com, QtCreator + developer + + Alex + +2009-02-09 16:25 chris + + * Modules/FindDevIL.cmake: ENH: Made the documentation for + FindDevIL.cmake cleaner. Changed the XXX_LIBRARYs to + XXX_LIBRARIES. + +2009-02-09 09:23 hoffman + + * Tests/CMakeTests/GetFilenameComponentRealpathTest.cmake.in: file + GetFilenameComponentRealpathTest.cmake.in was added on branch + CMake-2-6 on 2009-03-23 18:04:12 +0000 + +2009-02-09 09:23 king + + * Source/cmGetFilenameComponentCommand.cxx, + Source/cmGetFilenameComponentCommand.h, + Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/GetFilenameComponentRealpathTest.cmake.in: ENH: + Add get_filename_component(... REALPATH) + + This patch from Philip Lowman creates a REALPATH mode in the + get_filename_component command. It is like ABSOLUTE, but will + also resolve symlinks (which ABSOLUTE once did but was broken + long ago). See issue #8423. + +2009-02-09 09:23 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: BUG: Fix + GetRealPath when realpath fails + + This patch from Philip Lowman teaches SystemTools::GetRealPath to + deal with paths that do not exist by dealing with the case that + realpath returns NULL. See issue #8423. + +2009-02-09 08:25 hoffman + + * Source/cmCacheManager.cxx: BUG: fix for 0008378, lists with + FILEPATH and UNC //server/path fail + +2009-02-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-07 12:23 clinton + + * Modules/FindQt4.cmake: + BUG: When detecting if qmake executable is changed, don't error + if path contains regex chars. + +2009-02-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-06 16:16 hoffman + + * ChangeLog.manual: ENH: fix comment + +2009-02-06 16:15 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindQt4.cmake, + Modules/UseQt4.cmake, Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, Source/cmake.cxx: + ENH: fix osx bundle re-config issue on branch RC 12 + +2009-02-06 11:49 king + + * Source/cmake.cxx: BUG: Fix OS X FW symlink byproduct dependencies + + When testing whether to re-run CMake, a byproduct may be a + symlink. If so, the existence of the link is important rather + than the link's target. See issue #8465. + +2009-02-06 11:18 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, cmake.cxx: BUG: Fix + OS X AppBundle/FW byproducts dependencies + + App Bundle and Framework directories, symlinks, and Info.plist + files we create during generation are byproducts, not outputs. + We should re-run CMake only when they are missing, not when they + are old. See issue #8465. + +2009-02-06 09:08 king + + * Source/: cmXMLSafe.cxx, cmXMLSafe.h: COMP: Avoid parameter/member + shadow in cmXMLSafe + + A cmXMLSafe constructor named its parameter 'str' which shadowed + the name of the 'str' method. This renames the parameter to + avoid the conflict warning. + +2009-02-06 09:03 king + + * Source/cmMakefileExecutableTargetGenerator.cxx: BUG: Do not + re-generate after a AppBundle build + + A previous change accidentally added the MacOS content directory + and Info.plist files created for MACOSX_BUNDLE executables to the + list of CMake input files. This causes CMake to re-generate the + project too often. These items should be added to the list of + CMake output files. + +2009-02-06 08:33 king + + * Source/cmGetFilenameComponentCommand.cxx, + Source/cmGetFilenameComponentCommand.h, + Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/GetFilenameComponentSymlinksTest.cmake.in: BUG: + Alternative fix to bug #8423 + + The patch used to fix this bug used SystemTools::GetRealPath + which works only for existing files. It broke the case of using + the command get_filename_component for a non-existing file. + Also, it changed long-standing behavior in a possibly + incompatible way even for existing files. This reverts the + original fix and instead updates the documentation to be + consistent with the behavior. + +2009-02-06 08:15 king + + * Source/cmCMakePolicyCommand.h: ENH: Clarify cmake_policy(VERSION) + documentation + + The previous documentation could be interpreted as setting + policies newer than the given version to OLD instead of unset. + This clarifies it. + +2009-02-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-05 23:01 clinton + + * Modules/: FindQt4.cmake, UseQt4.cmake: + ENH: Add support for building with Qt's ActiveX support on + Windows. + +2009-02-05 17:09 king + + * Source/cmXMLSafe.cxx: COMP: Avoid warning about signed-char + comparison + + On some compilers 'char' is signed and is therefore always equal + to or less than 0x7f. In order to avoid the compiler warning we + perform the comparison with an unsigned char type. + +2009-02-05 16:31 king + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + cmSystemTools.cxx, cmSystemTools.h, cmXMLSafe.cxx, cmXMLSafe.h, + CPack/cmCPackGenerator.cxx, CTest/cmCTestBuildHandler.cxx, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestCoverageHandler.cxx, + CTest/cmCTestMemCheckHandler.cxx, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestUpdateHandler.cxx: ENH: Create cmXMLSafe to help + escapes in XML + + This class provides easy syntax to efficiently insert blocks of + data into XML documents with proper escapes. It replaces the old + cmCTest::MakeXMLSafe and cmSystemTools::MakeXMLSafe methods which + allocated extra memory instead of directly streaming the data. + +2009-02-05 11:04 hoffman + + * Source/CMakeLists.txt: ENH: merge in cmakelist file that uses + drag n drop + +2009-02-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-04 22:04 hoffman + + * Source/CPack/: cmCPackDragNDropGenerator.cxx, + cmCPackDragNDropGenerator.h: ENH: add missing files + +2009-02-04 18:24 david.cole + + * Modules/UntarFile.cmake: BUG: Add debug message calls to figure + out ExternalProject test failure on AIX dashboard. + +2009-02-04 17:04 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindDoxygen.cmake, + Modules/FindGDAL.cmake, Modules/FindLua50.cmake, + Modules/FindLua51.cmake, Modules/FindMPEG2.cmake, + Modules/FindOpenSceneGraph.cmake, Modules/FindOpenThreads.cmake, + Modules/FindProducer.cmake, Modules/FindQt4.cmake, + Modules/Findosg.cmake, Modules/FindosgAnimation.cmake, + Modules/FindosgDB.cmake, Modules/FindosgFX.cmake, + Modules/FindosgGA.cmake, Modules/FindosgIntrospection.cmake, + Modules/FindosgManipulator.cmake, Modules/FindosgParticle.cmake, + Modules/FindosgProducer.cmake, Modules/FindosgShadow.cmake, + Modules/FindosgSim.cmake, Modules/FindosgTerrain.cmake, + Modules/FindosgText.cmake, Modules/FindosgUtil.cmake, + Modules/FindosgViewer.cmake, Modules/FindosgVolume.cmake, + Modules/FindosgWidget.cmake, Modules/Findosg_functions.cmake, + Modules/Platform/Darwin.cmake, Modules/Platform/Haiku.cmake, + Source/cmInstallFilesCommand.cxx, + Source/cmInstallProgramsCommand.cxx, + Source/cmLinkDirectoriesCommand.h, Source/cmLocalGenerator.cxx, + Source/kwsys/DynamicLoader.cxx, + Source/kwsys/DynamicLoader.hxx.in: ENH: merge in a few more + changes for RC 11 + +2009-02-04 14:34 king + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Re-order generation of + build summary and xml + + This moves the error/warning count summary printed by + cmCTestBuildHandler to after Build.xml is generated. Later we + will compute the counts during generation of the xml. + +2009-02-04 14:34 king + + * Source/CTest/: cmCTestBuildHandler.cxx, cmCTestBuildHandler.h: + ENH: Refactor Build.xml generation + + This divides cmCTestBuildHandler::GenerateDartBuildOutput into + three methods to generate the header, content, and footer + components of Build.xml files. It will allow the content + generation to be replaced later. + +2009-02-04 12:38 david.cole + + * Source/CTest/cmCTestSubmitHandler.cxx: COMP: Iterator version of + std::set not available with vs6 implementation of STL. Use + explicit iteration to insert individual elements one at a time. + Sigh. + +2009-02-04 11:44 hoffman + + * CMakeLists.txt, CTestConfig.cmake, CTestCustom.cmake.in, + ChangeLog.manual, Modules/CPack.OSXX11.Info.plist.in, + Modules/CPack.RuntimeScript.in, Modules/CPack.cmake, + Modules/FindBoost.cmake, Modules/FindCxxTest.cmake, + Modules/FindDevIL.cmake, Modules/FindDoxygen.cmake, + Modules/FindFLTK.cmake, Modules/FindKDE3.cmake, + Modules/FindKDE4.cmake, Modules/FindOpenMP.cmake, + Modules/FindOpenThreads.cmake, Modules/FindQt4.cmake, + Modules/FindRTI.cmake, Modules/Findosg.cmake, + Modules/FindosgAnimation.cmake, Modules/FindosgDB.cmake, + Modules/FindosgFX.cmake, Modules/FindosgGA.cmake, + Modules/FindosgIntrospection.cmake, + Modules/FindosgManipulator.cmake, Modules/FindosgParticle.cmake, + Modules/FindosgProducer.cmake, Modules/FindosgShadow.cmake, + Modules/FindosgSim.cmake, Modules/FindosgTerrain.cmake, + Modules/FindosgText.cmake, Modules/FindosgUtil.cmake, + Modules/FindosgViewer.cmake, Modules/FindosgVolume.cmake, + Modules/FindosgWidget.cmake, Modules/Findosg_functions.cmake, + Modules/UseQt4.cmake, Source/cmBootstrapCommands.cxx, + Source/cmCMakePolicyCommand.cxx, Source/cmCMakePolicyCommand.h, + Source/cmCoreTryCompile.cxx, + Source/cmExportBuildFileGenerator.cxx, + Source/cmFindPackageCommand.cxx, Source/cmFindPackageCommand.h, + Source/cmForEachCommand.cxx, Source/cmForEachCommand.h, + Source/cmFunctionBlocker.h, Source/cmFunctionCommand.cxx, + Source/cmFunctionCommand.h, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalXCodeGenerator.cxx, Source/cmIfCommand.cxx, + Source/cmIfCommand.h, Source/cmIncludeCommand.cxx, + Source/cmIncludeCommand.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMacroCommand.cxx, Source/cmMacroCommand.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmPolicies.cxx, Source/cmPolicies.h, Source/cmTarget.cxx, + Source/cmUnsetCommand.cxx, Source/cmUnsetCommand.h, + Source/cmWhileCommand.cxx, Source/cmWhileCommand.h, + Source/CPack/cmCPackBundleGenerator.cxx, + Source/CPack/cmCPackBundleGenerator.h, + Source/CPack/cmCPackGeneratorFactory.cxx, + Source/CPack/cmCPackLog.cxx, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackOSXX11Generator.cxx, Source/CPack/cpack.cxx, + Tests/CMakeLists.txt, Tests/PolicyScope/Bar.cmake, + Tests/PolicyScope/CMakeLists.txt, + Tests/PolicyScope/FindFoo.cmake, Tests/PolicyScope/main.c, + Tests/Unset/CMakeLists.txt, Tests/Unset/unset.c: ENH: merge in + changes to 2.6 RC 10 + +2009-02-04 10:34 king + + * Source/: cmInstallFilesCommand.cxx, cmInstallProgramsCommand.cxx, + cmLocalGenerator.cxx: BUG: Fix old-style install to prefix top + + The old install_files, install_programs, and install_targets + commands used to permit installation to the top of the prefix by + specifying destination '/'. This was broken in 2.6.0 to 2.6.2 by + changes to enforce valid destinations that did not account for + this case. This change fixes the case by converting the install + destination to '.' which is the new-style way to specify the top + of the installation prefix. + +2009-02-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-03 11:52 david.cole + + * Source/CTest/: cmCTestSubmitCommand.cxx, cmCTestSubmitCommand.h, + cmCTestSubmitHandler.cxx, cmCTestSubmitHandler.h: ENH: Add FILES + arg to the ctest_submit command. BUG: Propagate the IsCDash + setting properly to the ctest configuration during a submit. + Also, do not propagate TriggerSite for projects submitting to + CDash. No triggers are necessary with CDash. + +2009-02-03 11:27 hoffman + + * Source/kwsys/: DynamicLoader.cxx, DynamicLoader.hxx.in: ENH: fix + dynamic loading on haiku + +2009-02-03 08:38 hoffman + + * Modules/FindKDE3.cmake: BUG: fix potential issue with empty + strings + +2009-02-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-02 16:30 hoffman + + * Modules/FindMPEG2.cmake: BUG: include should not have .cmake + +2009-02-02 14:36 king + + * Source/cmMakefileTargetGenerator.cxx: BUG: Fix preprocess and + assembly rule expansion + + The recent change to avoid expanding rule variables in + informational and 'cd' commands broke the logical order in + generation of preprocess and assembly rules. This corrects the + order. + +2009-02-02 14:36 king + + * Source/cmGlobalGenerator.cxx: COMP: Fix rule hash code during + bootstrap + + During bootstrap we do not bother with rule hashing. This + updates the dummy implementation to account for the recent change + in rule hash method signatures. + +2009-02-02 13:28 king + + * Source/cmMakefileTargetGenerator.cxx: BUG: Do not expand rule + variables in info rules + + Previously the makefile generator would expand rule variables + even on its progress and echo commands for object compilation + rules (but not for link rules). This fixes the implementation to + only expand rule variables on user-specified rules. + +2009-02-02 13:28 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmMakefileTargetGenerator.cxx: + ENH: Refactor custom command rule hashing + + This simplifies computation of custom command rule hashes to hash + content exactly chosen as the custom commands are generated. + Unfortunately this will change the hashes of existing build trees + from earlier CMake versions, but this is not a big deal. The + change is necessary so that in the future we can make optional + adjustments to custom command lines at generate time without + changing the hashes every time the option is changed. + +2009-02-02 13:27 king + + * Source/: cmMakefile.cxx, cmake.cxx: ENH: More robust property + lookup + + This teaches cmMakefile::GetProperty and cmake::GetProperty + methods to return NULL when the property name is NULL, making + them more robust and consistent with the behavior of + cmTarget::GetProperty. + +2009-02-02 13:24 king + + * Source/CTest/: cmCTestMemCheckHandler.cxx, + cmCTestTestHandler.cxx, cmCTestTestHandler.h: ENH: Put test + labels in MemCheck results + + This refactors generation of element headers and footers + in cmCTestTestHandler and re-uses it in cmCTestMemCheckHandler. + The change removes duplicate code and enables the new + element for MemCheck results. + +2009-02-02 09:42 king + + * Source/cmTargetLinkLibrariesCommand.h: ENH: Clarify + target_link_libraries docs + + The target_link_libraries command supports flags as well as + libraries. This makes the support explicit in the documentation. + +2009-02-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-02-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-31 13:57 hoffman + + * Modules/FindOpenSceneGraph.cmake: file FindOpenSceneGraph.cmake + was added on branch CMake-2-6 on 2009-02-04 22:04:48 +0000 + +2009-01-31 13:57 lowman + + * Modules/FindOpenSceneGraph.cmake: BUG: Fixes configure error if + you don't specify a version with find_package() + +2009-01-31 01:50 lowman + + * Modules/FindGDAL.cmake: BUG: Fix library detection for GDAL on + most Linux distributions (Issue #7445) + +2009-01-31 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-30 20:09 hoffman + + * Modules/Findosg_functions.cmake: file Findosg_functions.cmake was + added on branch CMake-2-6 on 2009-02-04 16:44:16 +0000 + +2009-01-30 20:09 lowman + + * Modules/: FindOpenSceneGraph.cmake, Findosg.cmake, + Findosg_functions.cmake: ENH: Added FindOpenSceneGraph.cmake + which is intended to wrap any of the existing Findosg* modules + (or even user specified modules in CMAKE_MODULE_PATH) and + aggregate the include dirs & libraries while providing a + COMPONENT frontend and version checking (Fixes Issue #6973). + Also added a note to Findosg.cmake to refer new users to the + module. + +2009-01-30 16:55 lowman + + * Modules/: FindOpenThreads.cmake, Findosg_functions.cmake: ENH: + Added OSG_ROOT as supported env var (it's in the wild already). + Cleaned up FindOpenThreads to support PATH_SUFFIXES. Removed + superfluous WIN32 registry checks which should have been $ENV{} + checks. + +2009-01-30 15:13 lowman + + * Modules/: FindDoxygen.cmake, FindOpenThreads.cmake, + FindProducer.cmake: BUG: Fix other modules not respecting QUIET + and REQUIRED + +2009-01-30 14:33 hoffman + + * Modules/FindosgVolume.cmake: file FindosgVolume.cmake was added + on branch CMake-2-6 on 2009-02-04 16:44:16 +0000 + +2009-01-30 14:33 hoffman + + * Modules/FindosgWidget.cmake: file FindosgWidget.cmake was added + on branch CMake-2-6 on 2009-02-04 16:44:16 +0000 + +2009-01-30 14:33 hoffman + + * Modules/FindosgAnimation.cmake: file FindosgAnimation.cmake was + added on branch CMake-2-6 on 2009-02-04 16:44:13 +0000 + +2009-01-30 14:33 lowman + + * Modules/: Findosg.cmake, FindosgAnimation.cmake, FindosgDB.cmake, + FindosgFX.cmake, FindosgGA.cmake, FindosgIntrospection.cmake, + FindosgManipulator.cmake, FindosgParticle.cmake, + FindosgProducer.cmake, FindosgShadow.cmake, FindosgSim.cmake, + FindosgTerrain.cmake, FindosgText.cmake, FindosgUtil.cmake, + FindosgViewer.cmake, FindosgVolume.cmake, FindosgWidget.cmake: + BUG: The QUIET and REQUIRED find attributes on each Findosg* + module were not being respected. + +2009-01-30 14:29 lowman + + * Modules/Findosg_functions.cmake: ENH: Added a mark_as_advanced() + wrapper function. + +2009-01-30 03:02 lowman + + * Modules/: FindLua50.cmake, FindLua51.cmake: BUG: Fixes detection + of lua libraries installed from FreeBSD ports (Issue #8421) + +2009-01-30 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-29 15:23 david.cole + + * Source/cmCoreTryCompile.cxx: ENH: Emit a little more information + in the error message when the output file is not found during a + core try compile. + +2009-01-29 14:57 david.cole + + * Modules/Platform/Darwin.cmake: BUG: Remove unnecessary double + quotes from SET statements. Hopefully resolves the strange and + difficult to diagnose (or reproduce) test failures on the + dashmacmini2 Continuous dashboard. + +2009-01-29 14:31 hoffman + + * Source/cmake.cxx: BUG: fix for #8418 -E chdir should return fail + of dir does not exist + +2009-01-29 14:14 king + + * Source/cmLinkDirectoriesCommand.h: ENH: Docs for relative paths + in link_directories + + The link_directories command treats relative paths differently + from most CMake commands. This notes the difference in the + documentation. See issue #8377. + +2009-01-29 13:41 king + + * Modules/Platform/Darwin.cmake: BUG: Fix OS X dylib version flags + for more linkers + + Some OS X linkers want a 'dylib_' prefix on the + -compatiblity_version and -current_version flags while others do + not. This passes the flags through gcc instead since it never + wants the prefix and translates the flags for the linker + correctly. + +2009-01-29 13:26 clinton + + * Modules/FindQt4.cmake: + ENH: Also find .moc files if there are spaces between # and + include. Fixes #8433. + +2009-01-29 11:57 hoffman + + * Tests/CMakeTests/GetFilenameComponentSymlinksTest.cmake.in: ENH: + add missing file + +2009-01-29 11:42 hoffman + + * Modules/Platform/Haiku.cmake: BUG: fix for # 8413 add more haiku + searching + +2009-01-29 11:39 hoffman + + * Source/cmGetFilenameComponentCommand.cxx, + Tests/CMakeTests/CMakeLists.txt: BUG: fix for #8423 + +2009-01-29 09:26 hoffman + + * Source/CTest/cmCTestCoverageHandler.cxx: STYLE: fix warning + +2009-01-29 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-28 22:56 lowman + + * Modules/FindDoxygen.cmake: STYLE: Reworded some of the OS-X code + comments + +2009-01-28 16:56 hoffman + + * Source/CTest/cmCTestCoverageHandler.cxx: STYLE: fix warning + +2009-01-28 15:04 clinton + + * Modules/UseQt4.cmake: + ENH: Better way to add framework includes. + +2009-01-28 12:55 hoffman + + * Modules/FindOpenMP.cmake: ENH: clean up status and change order + for more common compilers first + +2009-01-28 12:55 hoffman + + * Modules/FindOpenMP.cmake: file FindOpenMP.cmake was added on + branch CMake-2-6 on 2009-02-04 16:44:02 +0000 + +2009-01-28 12:45 hoffman + + * Modules/FindOpenMP.cmake: ENH: add openmp support + +2009-01-28 06:10 david.cole + + * Modules/Platform/Darwin.cmake: BUG: Fix careless typo that only + caused test failures on clean builds... + +2009-01-28 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-27 15:51 david.cole + + * Modules/Platform/Darwin.cmake: BUG: Try to fix the universal + binary continuous dashboard on dashmacmini2. I am deducing that + the value of CMAKE_OSX_ARCHITECTURES_DEFAULT is responsible for + the failure, although I cannot reproduce it on other builds or + even by running the test via ctest interactively *on* the + continuous dashboard's build... + +2009-01-27 11:50 david.cole + + * Modules/Platform/Darwin.cmake: BUG: Only set + CMAKE_OSX_DEPLOYMENT_TARGET on Mac OSX 10.4 or later. The gcc + that runs on 10.3 and earlier does not understand the compiler + flag it maps to... + +2009-01-27 11:35 david.cole + + * Source/cmCoreTryCompile.cxx: STYLE: Emit filenames in try_compile + error message to get more information from the Continuous + dashboard test that is failing. + +2009-01-27 10:58 king + + * Source/: cmCTest.cxx, cmCTest.h: BUG: Reset file submission list + on test restart + + When running in script mode it is possible to run multiple + separate dashboard submissions in one cmCTest instance. The + recent refactoring of file submission lists into parts failed to + clear the submission lists when starting a new dashboard + (ctest_start or ctest_update). Only the unused old submission + set was cleared. This fixes the refactored version to remove the + old submission set completely and also clear the part-wise lists. + +2009-01-27 10:58 king + + * Source/CTest/cmCTestSubmitHandler.cxx: BUG: Fix CTest submit-only + operation + + We need to initialize cmCTestSubmitHandler on construction to + make sure all parts get enabled by default. The recent fix to + re-enable all parts on initialization broke submit-only + operations because the handler did not initialize on + construction. This also removes duplicate initialization code. + +2009-01-27 10:34 hoffman + + * Utilities/Release/README, + Utilities/Release/create-cmake-release.cmake, + Utilities/Release/release_cmake.cmake, + Utilities/Release/release_cmake.sh.in, Tests/CMakeLists.txt: ENH: + change to use CMAKE_CREATE_VERSION from CMAKE_VERSION as + CMAKE_VERSION is auto-defined now + +2009-01-27 10:30 david.cole + + * Modules/Platform/Darwin.cmake, Source/cmGlobalXCodeGenerator.cxx, + Source/cmLocalGenerator.cxx: BUG: Fix issue #6195. Add + CMAKE_OSX_DEPLOYMENT_TARGET cache variable to specify the target + deployment runtime OS version of the built executables on Mac + OSX. Thanks to Mike Jackson for the patch. + +2009-01-27 10:26 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for 7845, idl + files compile even with headerfile only on + +2009-01-27 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-26 10:12 clinton + + * Modules/FindQt4.cmake: + BUG: Fixed recent regression when finding some includes. + +2009-01-26 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-25 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-24 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-23 17:37 clinton + + * Modules/UseQt4.cmake: + ENH: Should have a -F for framework includes on Mac. Fixes + ParaView build with Qt 4.5 on Mac. + +2009-01-23 16:52 clinton + + * Modules/FindQt4.cmake: + ENH: Add convenience for identifying Cocoa based Qt. + +2009-01-23 13:36 david.cole + + * Modules/CPack.cmake: ENH: Turn off CPACK_BINARY_TBZ2 and + CPACK_BINARY_ZIP by default. Strictly speaking, this changes + behavior from cpack 2.6, but now that cpack returns a non-zero + exit code when it encounters an error, and it is an error to try + to use a generator that is not available... It makes sense to + turn these off by default since not everybody has these + generators installed. It is easy for a project to turn these + options back on if they need to: simply set(CPACK_BINARY_TBZ2 ON) + or set(CPACK_BINARY_ZIP ON) before include(CPack) in your + CMakeLists.txt... + +2009-01-23 12:20 hoffman + + * Source/cmPolicies.h: ENH: try to fix vs6 build + +2009-01-23 00:30 lowman + + * Modules/FindFLTK.cmake: ENH: Better support for "fltk-config" + binary, added options so the user doesn't have to have everything + in order for FLTK_FOUND to be true. #7809 + +2009-01-23 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-22 14:23 david.cole + + * Source/CPack/cmCPackBundleGenerator.h: BUG: Forgot to change + parent class in cmCPackTypeMacro when I added + cmCPackDragNDropGenerator. Fix it now that it really matters. + (The BundleGenerator test started failing after the last commit. + This fixes it.) + +2009-01-22 13:56 david.cole + + * Source/CPack/: cmCPackBundleGenerator.cxx, + cmCPackBundleGenerator.h, cmCPackLog.cxx, cpack.cxx: BUG: Fix + issue #8383. Avoid crashing when using the Bundle CPack generator + and CPACK_BUNDLE_NAME is not set. Instead, fail gracefully giving + an informative error message and non-zero exit code. + +2009-01-22 13:18 hoffman + + * Tests/PolicyScope/Bar.cmake: file Bar.cmake was added on branch + CMake-2-6 on 2009-02-04 16:44:18 +0000 + +2009-01-22 13:18 hoffman + + * Tests/PolicyScope/CMakeLists.txt: file CMakeLists.txt was added + on branch CMake-2-6 on 2009-02-04 16:44:18 +0000 + +2009-01-22 13:18 hoffman + + * Tests/PolicyScope/FindFoo.cmake: file FindFoo.cmake was added on + branch CMake-2-6 on 2009-02-04 16:44:19 +0000 + +2009-01-22 13:18 king + + * Source/cmCMakePolicyCommand.h, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h, Source/cmIncludeCommand.cxx, + Source/cmIncludeCommand.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmPolicies.cxx, Source/cmPolicies.h, + Tests/PolicyScope/Bar.cmake, Tests/PolicyScope/CMakeLists.txt, + Tests/PolicyScope/FindFoo.cmake: ENH: Isolate policy changes in + included scripts + + Isolation of policy changes inside scripts is important for + protecting the including context. This teaches include() and + find_package() to imply a cmake_policy(PUSH) and + cmake_policy(POP) around the scripts they load, with a + NO_POLICY_SCOPE option to disable the behavior. This also + creates CMake Policy CMP0011 to provide compatibility. See issue + #8192. + +2009-01-22 13:16 hoffman + + * Tests/PolicyScope/main.c: file main.c was added on branch + CMake-2-6 on 2009-02-04 16:44:19 +0000 + +2009-01-22 13:16 king + + * Source/cmCMakePolicyCommand.h, Source/cmFunctionCommand.cxx, + Source/cmFunctionCommand.h, Source/cmMacroCommand.cxx, + Source/cmMacroCommand.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Tests/CMakeLists.txt, + Tests/PolicyScope/CMakeLists.txt, Tests/PolicyScope/main.c: ENH: + Better policies for functions and macros + + This teaches functions and macros to use policies recorded at + creation time when they are invoked. It restores the policies as + a weak policy stack entry so that any policies set by a function + escape to its caller as before. + +2009-01-22 13:16 king + + * Source/cmCMakePolicyCommand.h: ENH: Improve stack discussion in + cmake_policy + + This re-organizes the discussion of the policy stack in + documentation of the cmake_policy() command. The new + organization clearer and easier to extend with new information. + +2009-01-22 13:16 king + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Create notion of a + 'weak' policy stack entry + + A 'weak' poilcy stack entry responds normally to queries. + However, setting a policy in a weak entry will recursively set + the policy in the next entry too. This also gives the internal + interface to create a weak entry the option to provide an initial + PolicyMap for it. + +2009-01-22 12:12 hoffman + + * Source/CPack/cmCPackDragNDropGenerator.cxx: file + cmCPackDragNDropGenerator.cxx was added on branch CMake-2-6 on + 2009-02-05 03:04:09 +0000 + +2009-01-22 12:12 hoffman + + * Source/CPack/cmCPackDragNDropGenerator.h: file + cmCPackDragNDropGenerator.h was added on branch CMake-2-6 on + 2009-02-05 03:04:18 +0000 + +2009-01-22 12:12 david.cole + + * Modules/CPack.cmake, Source/CMakeLists.txt, + Source/CPack/cmCPackBundleGenerator.cxx, + Source/CPack/cmCPackBundleGenerator.h, + Source/CPack/cmCPackDragNDropGenerator.cxx, + Source/CPack/cmCPackDragNDropGenerator.h, + Source/CPack/cmCPackGeneratorFactory.cxx, Tests/CMakeLists.txt: + BUG: Fix issue #8402. Add a drag and drop bundle generator to the + Mac build of CPack. Add a test of it in the CPackComponents test. + Thanks to Clinton Stimpson for the patch. + +2009-01-22 10:57 king + + * Source/: cmCMakePolicyCommand.cxx, cmMakefile.cxx, cmMakefile.h: + ENH: Create policy scope barriers + + This creates a barrier mechanism to prevent user code from using + cmake_policy(POP) to pop a scope it didn't push with + cmake_policy(PUSH). + +2009-01-22 10:57 king + + * Source/cmMakefile.h: ENH: Make policy push/pop methods private + + This makes cmMakefile::PushPolicy and cmMakefile::PopPolicy + private so that any outside place that uses them needs to use the + PolicyPushPop helper in an automatic variable. We grant an + exception to cmCMakePolicyCommand so it can implement + cmake_policy(PUSH) and cmake_policy(POP). + +2009-01-22 10:56 king + + * Source/cmFindPackageCommand.cxx: ENH: Refactor find_package + version file scoping + + This converts the variable and policy scope protection + find_package() uses when loading version files to use automatic + variables. + +2009-01-22 10:56 king + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Create automatic + policy push/pop helper + + This creates cmMakefile::PolicyPushPop to push and pop policy + scope automatically. It also enforces balanced push/pop pairs + inside the scope it handles. + +2009-01-22 10:56 king + + * Source/: cmMakefile.cxx, cmMakefile.h, cmPolicies.h: ENH: + Refactor policy stack representation + + This defines PolicyMap as a public member of cmPolicies. Its + previous role as a policy stack entry is now called + PolicyStackEntry and represented as a class to which more + information can be added later. + +2009-01-22 10:22 david.cole + + * Tests/CMakeLists.txt: BUG: Avoid trying to package the X11 test + on Windows when there is no NSIS installer available. + +2009-01-22 07:16 david.cole + + * Source/CTest/cmCTestTestHandler.cxx: BUG: Fix issue #8363. Wrap + output with MakeXMLSafe calls so that the generated XML files are + valid, parse-able XML. + +2009-01-22 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-21 23:52 lowman + + * Modules/FindFLTK.cmake: BUG: Fixes detection of FLTK on Gentoo + (Issue #7809) + +2009-01-21 22:43 lowman + + * Modules/FindFLTK.cmake: BUG: Fixes #8376: FindFLTK fails because + include file can be FL/Fl.H and CMake only looks for FL/Fl.h. + Verified: all FLTK header files in 1.1.9 are .H ... how bizarre. + +2009-01-21 17:36 king + + * Source/cmGlobalVisualStudio7Generator.h: BUG: Fix VS IDE solution + files order again + + The previous change to order projects in the VS IDE did not + account for duplicate target names (such as ALL_BUILD and + ZERO_CHECK) among the input set. While we suppress generation of + the duplicate project entries, we need to use a multiset to store + ordered duplicates. + +2009-01-21 17:24 king + + * Source/cmGlobalVisualStudio7Generator.cxx: BUG: Fix ALL_BUILD + ordering enforcement + + The previous change to make ALL_BUILD come first among targets + did not account for comparing the target name against itself. + This led to an invalid ordering of the target set. This change + fixes it. + +2009-01-21 17:06 king + + * Source/cmGlobalVisualStudio7Generator.cxx: ENH: Make ALL_BUILD + always the default project + + This teaches the VS IDE generators to write ALL_BUILD into + solution files first so that it is always the default active + project. Previously it was first only if no target name sorted + lexicographically earlier. See issue #8172. + +2009-01-21 16:39 king + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h: BUG: Fix VS IDE project order + + Our implementation of the feature to pull in dependent targets in + VS solution files for subprojects caused the order of project + files in the solution to be arbitrary (based on pointer value in + the representation). Target ordering in solution files is + important to prevent unnecessary changing of the files and + because the VS IDE selects the first project listed as the + default active target. This change restores lexicographic order + by target name. + +2009-01-21 13:39 david.cole + + * Source/CPack/cmCPackBundleGenerator.cxx, + Source/CPack/cmCPackBundleGenerator.h, + Tests/BundleGeneratorTest/CMakeLists.txt, + Tests/BundleGeneratorTest/CustomVolumeIcon.icns: BUG: Fix issue + #7523: Analyze output of 'hdiutil attach' to get the name of the + volume that was mounted. Eliminates the need to use the + -mountpoint arg of hdiutil which has a silly 90 character limit + on the name of the mount point. Also add a custom volume icon to + the BundleGeneratorTest to cover this code. + +2009-01-21 13:20 david.cole + + * Source/QtDialog/CMakeSetup.icns: ENH: Use the latest + CMake-logo-triangle-high-res.png to improve the look of + CMakeSetup.icns on the Mac. + +2009-01-21 11:54 hoffman + + * Modules/CPack.OSXScriptLauncher.rsrc.in: file + CPack.OSXScriptLauncher.rsrc.in was added on branch CMake-2-6 on + 2009-04-21 20:48:54 +0000 + +2009-01-21 11:54 hoffman + + * Modules/CPack.OSXX11.main.scpt.in: file CPack.OSXX11.main.scpt.in + was added on branch CMake-2-6 on 2009-04-21 18:12:47 +0000 + +2009-01-21 11:54 david.cole + + * Modules/CPack.OSXScriptLauncher.in, + Modules/CPack.OSXScriptLauncher.rsrc.in, + Modules/CPack.OSXX11.Info.plist.in, + Modules/CPack.OSXX11.main.scpt.in, + Modules/CPack.RuntimeScript.in, + Source/CPack/OSXLauncherScript.scpt, + Source/CPack/cmCPackOSXX11Generator.cxx, Tests/CMakeLists.txt, + Tests/X11/CMakeLists.txt: BUG: Fix issue #7833: Add file + extension handling to CPack generated installers for OSXX11 + applications. Also modify the X11 test to build such an installer + on Mac builds that test CPack and have X11 available. Thanks to + Wes Turner for the patch. + +2009-01-21 09:49 king + + * Modules/FindKDE4.cmake: STYLE: Fix if/endif mismatch in FindKDE4 + +2009-01-21 09:49 king + + * Source/: cmFunctionCommand.cxx, cmMacroCommand.cxx: ENH: Enforce + logical blocks in functions/macros + + This teaches function() and macro() to enforce matching logical + blocks inside the recorded bodies. This makes the error message + more specific. + +2009-01-21 09:49 king + + * Source/: cmForEachCommand.cxx, cmFunctionCommand.cxx, + cmIfCommand.cxx, cmMacroCommand.cxx, cmMakefile.cxx, + cmMakefile.h, cmWhileCommand.cxx: ENH: Better handling of + mismatched blocks + + If a logical block terminates with mismatching arguments we + previously failed to remove the function blocker but replayed the + commands anyway, which led to cases in which we failed to report + the mismatch (return shortly after the ending command). The + recent refactoring of function blocker deletion changed this + behavior to produce an error on the ending line by not blocking + the command. Furthermore, the function blocker would stay in + place and complain at the end of every equal-level block of the + same type. + + This teaches CMake to treat the begin/end commands (if/endif, + etc.) as correct and just warns when the arguments mismatch. The + change allows cases in which CMake 2.6.2 silently ignored a + mismatch to run as before but with a warning. + +2009-01-21 09:48 king + + * Source/: cmForEachCommand.cxx, cmForEachCommand.h, + cmFunctionBlocker.h, cmFunctionCommand.cxx, cmFunctionCommand.h, + cmIfCommand.cxx, cmIfCommand.h, cmMacroCommand.cxx, + cmMacroCommand.h, cmMakefile.cxx, cmMakefile.h, + cmWhileCommand.cxx, cmWhileCommand.h: ENH: Better error message + for unclosed blocks + + This centralizes construction of the error message for an + unclosed logical block (if, foreach, etc.). We record the line + at which each block is opened so it can be reported in the error + message. + +2009-01-21 09:48 king + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Refactor logical + block enforcement + + This uses a stack of 'barriers' to efficiently divide function + blockers into groups corresponding to each input file. It + simplifies detection of missing block close commands and factors + it out of ReadListFile. + +2009-01-21 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-20 15:49 king + + * Source/: cmExportBuildFileGenerator.cxx, + cmGlobalXCodeGenerator.cxx, cmTarget.cxx: BUG: Fix LOCATION + property for Mac AppBundles + + Previously cmTarget::GetLocation and cmTarget::GetFullPath would + return for Mac AppBundles the top-level bundle directory but + without the .app extension. We worked around this at the call + sites. This fixes the methods and removes the work-arounds. See + issue #8406. + +2009-01-20 14:36 king + + * Source/: cmForEachCommand.cxx, cmForEachCommand.h, + cmIfCommand.cxx, cmIfCommand.h, cmMakefile.cxx, cmMakefile.h, + cmWhileCommand.cxx, cmWhileCommand.h: ENH: Refactor function + blocker deletion + + When a function blocker decides to remove itself we previously + removed it at every return point from the C++ scope in which its + removal is needed. This teaches function blockers to transfer + ownership of themselves from cmMakefile to an automatic variable + for deletion on return. Since this removes blockers before they + replay their commands, we no longer need to avoid running + blockers on their own commands. + +2009-01-20 14:35 king + + * Source/: cmIfCommand.cxx, cmMakefile.cxx, cmMakefile.h: ENH: + Improve response to bad if or elseif + + Previously bad arguments to an if() or elseif() would cause some + subsequent statements in the corresponding block to execute. + This teaches CMake to stop processing commands with a fatal + error. It also provides context to bad elseif() error messages. + +2009-01-20 14:29 david.cole + + * Source/CPack/cmCPackNSISGenerator.cxx, + Tests/CPackComponents/CMakeLists.txt, Tests/CPackComponents/Issue + 7470.html: BUG: Fix for issue #7470. Allow spaces in the path + names of installed files with the NSIS CPack generator and + component-based installs. Add an installed file to the + CPackComponents test: it failed before the fix; now it passes. + +2009-01-20 10:06 hoffman + + * Source/cmSystemTools.cxx: BUG: fix crash with cmd.exe shell and + cmake in the path + +2009-01-20 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-19 22:51 lowman + + * Modules/FindBoost.cmake: BUG: Fix detection of boost libraries + without any compiler encoding (e.g. Gentoo 1.37 system installed + boost). Fixes issue #8404 reported on mailing list. + +2009-01-19 22:28 lowman + + * Modules/FindDoxygen.cmake: BUG: Fixes Issue #8054 and more. + DOXYGEN_DOT_FOUND now exists, errant mark_as_advanced variables + removed, documentation cleaned up and OSX stuff isolated to it's + own section, support added for DOXYGEN_SKIP_DOT, support added to + call FindPackageHandleStandardArgs to avoid output on every CMake + run. + +2009-01-19 21:30 lowman + + * Modules/FindBoost.cmake: BUG: Missing "icpc" as a possible CXX + compiler for Intel C++. Also refactored gcc -dumpversion code + and regex to a function. + +2009-01-19 19:21 lowman + + * Modules/FindBoost.cmake: BUG: Switch FindBoost.cmake to use + CMAKE_COMPILER_IS_GNUCXX (Issue #8398) + +2009-01-19 13:33 lowman + + * Modules/: FindOpenThreads.cmake, Findosg.cmake, + FindosgAnimation.cmake, FindosgDB.cmake, FindosgFX.cmake, + FindosgGA.cmake, FindosgIntrospection.cmake, + FindosgManipulator.cmake, FindosgParticle.cmake, + FindosgProducer.cmake, FindosgShadow.cmake, FindosgSim.cmake, + FindosgTerrain.cmake, FindosgText.cmake, FindosgUtil.cmake, + FindosgViewer.cmake, FindosgVolume.cmake, FindosgWidget.cmake, + Findosg_functions.cmake: BUG: Fixed Issue #7331 Bugs in + Findosg*.cmake. Also added OPENTHREADS_LIBRARIES. + +2009-01-19 05:14 lowman + + * Modules/FindBoost.cmake: BUG: Reverted change made in 1.27, + should be unnecessary (Issue #7508) + +2009-01-19 02:35 lowman + + * Modules/FindBoost.cmake: BUG: Resolve Issue #7508, FindBoost + fails to find boost on SuSE 10.3 + +2009-01-19 02:27 lowman + + * Modules/FindBoost.cmake: ENH: Added 1.38 since it'll be out soon. + More documentation and clarified examples, addressed autolinking + issue on MSVC + +2009-01-19 01:02 lowman + + * Modules/FindBoost.cmake: BUG: Do not check for GCC version + encoding in filenames on Boost libraries prior to 1.35. + Eliminate "lib" prefix except on MSVC. + +2009-01-19 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-18 17:19 lowman + + * Modules/FindBoost.cmake: BUG: Fixed additional issues with + autodetecting compiler tags properly including Issue #6926 + +2009-01-18 16:40 lowman + + * Modules/FindBoost.cmake: BUG: Fixes problem with _boost_ABI_TAG + appending to itself if FindBoost is called more than once (Issue + #7460) + +2009-01-18 15:53 lowman + + * Modules/FindBoost.cmake: STYLE: minor cleanup + +2009-01-18 15:41 lowman + + * Modules/FindBoost.cmake: BUG: Removed some code which was + squashing Boost_LIBRARIES on WIN32 under the auspices of forcing + the user to use autolinking, but it only did this squashing on + the first call to FindBoost. Subsequent calls to FindBoost would + not have Boost_LIBRARIES squashed so this code was doing nothing. + If you link your target_link_libraries() against dynamic boost + libraries it appears from tools like Dependency Walker that the + pragma calls to autolink to the static boost libraries are + ignored. It's therefore too late to make this squash apply to + all calls to FindBoost because that would break users that have + not setup autolinking properly. For now this fix is largely + cosmetic since the original code never worked anyways (see + version 1.5 introduced on 4/22/08). + +2009-01-18 15:17 lowman + + * Modules/FindBoost.cmake: BUG: Fixed documentation bug with + Boost_USE_MULTITHREADED, removed OPTION() call since it would be + useless and confusing after an initial configure. + +2009-01-18 14:40 lowman + + * Modules/FindBoost.cmake: BUG: Fixed superfluous and duplicate + dirs in Boost_LIBRARY_DIR. Employed workaround for Issue #8378. + Resolves Issue #8099 + +2009-01-18 13:03 hoffman + + * Source/: cmCTest.h, cmCTest.cxx, ctest.cxx: BUG: add output on + failure to ctest #8255 + +2009-01-18 12:05 hoffman + + * Source/cmMakefile.cxx: BUG: fix crash with empty properties + +2009-01-18 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-17 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-16 04:07 lowman + + * Modules/FindBoost.cmake: BUG: Fixed issues using FindBoost with + BoostPro packaged releases. Fixed regression for bjam users on + Win32 introduced in 1.4.2.4 (7/13/08). This commit partially or + completely resolves Issues #8173, #8326, #7943, #7725! + +2009-01-16 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-15 16:16 king + + * Source/cmFindPackageCommand.cxx: BUG: Fix find_package docs for + refind feature + + Recently we taught find_package to re-find a package + configuration file if it is given a wrong answer. This fixes the + documentation to reflect the change. + +2009-01-15 14:37 king + + * Source/: cmMakefile.cxx, cmMakefile.h: BUG: Enforce matching + policy PUSH/POP in all files + + The documentation of cmake_policy PUSH and POP states that they + must always match. Previously we enforced this only for the top + scope of each CMakeLists.txt file. This enforces the requirement + for all files. + +2009-01-15 13:24 hoffman + + * Source/CTest/: cmCTestGenericHandler.cxx, + cmCTestSubmitHandler.cxx: ENH: fix part submission to not have + memory of the last part submission + +2009-01-15 10:32 hoffman + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: BUG: + fix for bug #8174 + +2009-01-15 09:17 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmDocumentVariables.cxx, + Source/cmExtraEclipseCDT4Generator.cxx, + Source/cmFunctionCommand.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Tests/FindPackageTest/CMakeLists.txt: ENH: + merge in changes from main tree, fix borland build + +2009-01-15 08:57 king + + * Source/: cmDocumentVariables.cxx, cmMakefile.cxx: ENH: Provide + variable CMAKE_VERSION + + This creates the variable CMAKE_VERSION containing the full + version of cmake in "major.minor.patch" format. It is + particularly useful with the component-wise version comparison + provided by the if() command. + +2009-01-15 08:57 king + + * Source/cmDocumentVariables.cxx: ENH: Document variable + CMAKE_PATCH_VERSION + + This adds documentation of CMAKE_PATCH_VERSION to the generated + variables documentation. + +2009-01-15 02:07 lowman + + * Modules/FindBoost.cmake: BUG: fixed bug #7529: FindBoost fails to + find boost on SuSE 11.0 due to GCC reporting version x.y and not + x.y.z + +2009-01-15 01:22 lowman + + * Modules/FindBoost.cmake: BUG: Fixes bug #8059. Also added + Boost_DEBUG variable for troubleshooting. + +2009-01-15 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-14 15:14 king + + * Source/: cmFunctionCommand.cxx, cmMakefile.h: BUG: Pop a function + scope even on error + + This uses an automatic variable to push and pop variable scope + inside a function call. Previously if the function failed its + scope would not be popped. This approach guarantees a balanced + push/pop. + +2009-01-14 13:48 hoffman + + * Source/CTest/: cmCTestBuildHandler.cxx, cmProcess.cxx: ENH: fix + return value to ctest_build and remove debug print in cmProcess + +2009-01-14 13:01 hoffman + + * Source/CTest/: cmCTestBuildCommand.cxx, cmCTestBuildCommand.h, + cmCTestBuildHandler.cxx, cmCTestBuildHandler.h, cmProcess.cxx: + ENH: allow ctest_build to return error and warning counts + +2009-01-14 09:51 king + + * Source/: cmExtraEclipseCDT4Generator.cxx, + CTest/cmCTestSubmitHandler.cxx: COMP: Fix const set find for + Borland 5.5 + + The Borland 5.5 compiler's STL set does not define correct + signatures for its find() members, leading to build errors. This + works around the problem. + +2009-01-14 09:34 king + + * Tests/FindPackageTest/CMakeLists.txt: ENH: Test find_package + re-find feature + + Recently we taught find_package to re-find a package if its + _DIR result variable was set to a location not + containing the package (instead of reporting an error as before). + This tests the feature. + +2009-01-14 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-13 13:03 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeGenericSystem.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/FindGettext.cmake, Modules/FindPythonInterp.cmake, + Source/cmCMakeMinimumRequired.cxx, + Source/cmCMakeMinimumRequired.h, Source/cmComputeLinkDepends.cxx, + Source/cmComputeLinkDepends.h, Source/cmDocumentVariables.cxx, + Source/cmDocumentationFormatterDocbook.cxx, + Source/cmExportFileGenerator.cxx, + Source/cmExportInstallFileGenerator.cxx, + Source/cmExportInstallFileGenerator.h, + Source/cmExtraCodeBlocksGenerator.cxx, + Source/cmExtraEclipseCDT4Generator.cxx, + Source/cmExtraEclipseCDT4Generator.h, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h, + Source/cmGetTargetPropertyCommand.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmInstallExportGenerator.cxx, + Source/cmInstallExportGenerator.h, Source/cmInstallGenerator.cxx, + Source/cmInstallTargetGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmSetCommand.cxx, Source/cmTarget.cxx, Source/cmTarget.h, + Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTargetLinkLibrariesCommand.h, Source/cmake.cxx, + Source/cmake.h, Source/CTest/cmCTestBuildAndTestHandler.cxx, + Source/CTest/cmCTestBuildHandler.cxx, + Source/CTest/cmCTestUpdateHandler.cxx, + Source/QtDialog/CMakeLists.txt, Source/QtDialog/CrossCompiler.ui, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in, + Source/kwsys/testProcess.c, Templates/DLLHeader.dsptemplate, + Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate, + Tests/CustomCommand/CMakeLists.txt, + Tests/ExportImport/Export/CMakeLists.txt, + Tests/ExportImport/Import/CMakeLists.txt, + Tests/FindPackageTest/CMakeLists.txt, Tests/FindPackageTest/Baz + 1.1/BazConfig.cmake, Tests/FindPackageTest/Baz + 1.1/BazConfigVersion.cmake, Tests/FindPackageTest/Baz + 1.2/CMake/BazConfig.cmake, Tests/FindPackageTest/Baz + 1.2/CMake/BazConfigVersion.cmake, + Tests/FindPackageTest/lib/cmake/zot-4.0/zot-config-version.cmake, + Tests/FindPackageTest/lib/cmake/zot-4.0/zot-config.cmake, + Tests/StringFileTest/CMakeLists.txt: ENH: merge in changes from + CVS to branch for 2.6.3 RC 8 + +2009-01-13 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-12 11:10 king + + * Source/cmCTest.cxx: COMP: Remove unused variable + +2009-01-12 10:38 king + + * Source/CTest/cmCTestSubmitCommand.cxx, + Source/CTest/cmCTestSubmitCommand.h, + Source/CTest/cmCTestSubmitHandler.cxx, + Source/CTest/cmCTestSubmitHandler.h, + Tests/CTestTest2/test.cmake.in: ENH: Teach ctest_submit about + parts + + This adds a PARTS option to the ctest_submit command which tells + it to submit only parts whose names are listed with the option. + +2009-01-12 10:37 king + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestBuildHandler.cxx, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestCoverageHandler.cxx, + CTest/cmCTestGenericHandler.cxx, CTest/cmCTestGenericHandler.h, + CTest/cmCTestSubmitHandler.cxx, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestUpdateHandler.cxx: ENH: Divide CTest file submission + list by part + + This splits the list of files for CTest to submit into those + belonging to each part. The set is recombined just before + submission. Later this will allow piecewise submissions. + +2009-01-12 10:37 king + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Refactor cmCTest test part + representation + + This introduces the name "part" to denote a portion of the + testing and submission process performed by ctest. We generalize + the boolean indicating whether each part is enabled into a + structure to which more information can be added later. We + provide bi-directional mapping between part id and part names. + +2009-01-12 09:11 king + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestBuildHandler.cxx, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestCoverageHandler.cxx, + CTest/cmCTestGenericHandler.cxx, CTest/cmCTestGenericHandler.h, + CTest/cmCTestHandlerCommand.cxx, CTest/cmCTestHandlerCommand.h, + CTest/cmCTestMemCheckHandler.cxx, CTest/cmCTestTestHandler.cxx: + ENH: Teach ctest_* to create appending XML files + + This adds an APPEND option to the ctest_* commands which tells + them to put the Append="true" attribute in the Site element of + their XML file. + +2009-01-12 09:10 king + + * Source/CTest/: cmCTestHandlerCommand.cxx, + cmCTestHandlerCommand.h: ENH: Refactor CTest command argument + handling + + The previous approach to handling of arguments to ctest_* + commands worked only for keyword/value arguments with a single + value. This refactors the approach to allow some commands to + define alternative argument forms. + +2009-01-12 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-11 12:18 alex + + * Source/: cmExtraEclipseCDT4Generator.cxx, + cmExtraEclipseCDT4Generator.h: ENH: patch from Miguel, As it is + today the generator creates linked resources to + LIBRARY_OUTPUT_PATH and EXECUTABLE_OUTPUT_PATH if they are not a + subdirectory of the binary dir, so that the IDE can detect the + Binaries (this was addressed previously as a result of a bug + report). + + Reduces code redundancy by encapsulating common behaviour for + LIBRARY_OUTPUT_PATH and EXECUTABLE_OUTPUT_PATH in + AppendLinkedResource. + + Addresses the two new variable names for these locations, + CMAKE_LIBRARY_OUTPUT_DIRECTORY and CMAKE_RUNTIME_OUTPUT_DIRECTORY + respectively. + + Finally, it is addressing a bug in the current code for relative + paths in these variables. If it is a relative path to the binary + dir, the IsSubdirectory call returns false and so it creates the + linked resource. The created linked resource produces an error in + the Eclipse IDE because the IDE expects it to be a full path. The + patch now addresses this by concatenating the binary dir if it is + a relative path. + +2009-01-11 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-10 09:01 alex + + * Source/cmDocumentationFormatterDocbook.cxx: BUG: don't create + empty s (#7289), dblatex didn't like that + + Alex + +2009-01-10 08:46 alex + + * Modules/FindPythonInterp.cmake: ENH: fix #7913: find also python + 2.6 on windows + + Alex + +2009-01-10 08:39 alex + + * Modules/FindGettext.cmake: BUG: fix #8122, _firstPoFile was not + empty because it was no real variable but just a macro argument + -> make it a real variable + + Alex + +2009-01-10 08:16 alex + + * Source/cmDocumentVariables.cxx: STYLE: document + CMAKE_COLOR_MAKEFILE (#7878) + + Alex + +2009-01-10 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-09 20:35 alex + + * Source/cmExtraEclipseCDT4Generator.h: COMP: forgot to commit this + file + + Alex + +2009-01-09 20:26 alex + + * Modules/CMakeSystemSpecificInformation.cmake: STYLE: fix typo + + Alex + +2009-01-09 20:18 alex + + * Modules/CMakeGenericSystem.cmake: STYLE: this is not necessary + anymore for kdevelop, the kdevelop generator now generates the + project so that the environment variable VERBOSE is set to 1 when + make is executed by kdevelop (and additionally this didn't work, + since CMAKE_GENERATOR never matches KDevelop3, this is now in + CMAKE_EXTRA_GENERATOR) + + Alex + +2009-01-09 20:09 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: STYLE: remove debug + output + + Alex + +2009-01-09 19:52 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: BUG: fix #8073: also show + targets created using add_custom_targets() -additionally also + create the target/fast targets for Eclipse -skip preinstall and + install/local, they should be only rarely used + + Alex + +2009-01-09 19:08 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: BUG: remove the call to + EnableInstallTarget(), don't know why it was there. This caused + that always an install target was created which installed + nothing, even if there was no install rule in the project. + + Alex + +2009-01-09 18:58 alex + + * Source/: cmExtraEclipseCDT4Generator.cxx, + cmExtraEclipseCDT4Generator.h: BUG: fix #8105: don't hardcode + "gcc" and "make" but use CMAKE_C_COMPILER and CMAKE_MAKE_PROGRAM + instead + + Alex + +2009-01-09 18:04 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: BUG: fix #8203: codeblocks + + mingw doesn't like the extra quotes around the path to the + makefile if it contains spaces, under Linux it works with spaces + + Alex + +2009-01-09 16:44 king + + * Source/cmCTest.cxx: ENH: Add missing newline to CTest-generated + xml + + The Generator="ctest..." attribute of Site elements in + CTest-generated XML files was missing a newline, causing the next + attribute to appear on the same line. This adds the newline. + +2009-01-09 12:56 hoffman + + * Source/cmCTest.cxx: ENH: fix crash for old style scripts + +2009-01-09 12:32 hoffman + + * Source/cmCTest.h: ENH: fix return type + +2009-01-09 12:05 hoffman + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestScriptHandler.h: + ENH: add subproject tag property for ctest + +2009-01-09 11:44 king + + * Source/kwsys/testProcess.c: ENH: Extend kwsys.testProcess-4 + timeout + + The test is supposed to terminate quickly when its child crashes, + but that seems to take over 10s on busy systems. This extends + the test's timeout to 30s to help it pass when running on a busy + system. + +2009-01-09 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-08 18:09 alex + + * Source/: cmExtraEclipseCDT4Generator.h, + cmExtraEclipseCDT4Generator.cxx: BUG: apply patch from #8205, + also fixes #8212: escape characters for XML when writing the + eclipse project files + + Alex + +2009-01-08 17:57 alex + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: ENH: + when trying to find a FooConfig.cmake file, if in the directory + pointed to by the Foo_DIR variable there is no FooConfig.cmake + file, then instead of abort and complain that the user should set + or clear the Foo_DIR variables, just search for the file and + discard the old Foo_DIR contents + + The tests succeed, ok by Brad. + + Alex + +2009-01-08 04:47 hoffman + + * Modules/FindCxxTest.cmake: file FindCxxTest.cmake was added on + branch CMake-2-6 on 2009-02-04 16:44:01 +0000 + +2009-01-08 04:47 lowman + + * Modules/FindCxxTest.cmake: BUG: Fixed CXXTEST_INCLUDE_DIRS so it + will work properly with NOTFOUND. + + Also eliminated superfluous CXXTEST_FOUND assignment and cleaned + up the code and added additional documentation. Tagged v1.0. + +2009-01-08 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-07 17:28 clinton + + * Source/QtDialog/CrossCompiler.ui: + ENH: Tweak System Name field for cross compiling, so it doesn't + have a file chooser button. + +2009-01-07 14:16 king + + * Source/cmInstallExportGenerator.cxx: ENH: Clean per-config export + files during install + + When installing the main export file the install tree may be + dirty. If out-dated per-config files exist they may break the + newly installed main file which when it globs them. This teaches + the installation script to detect when it is about to replace the + main export file with a different one and cleans out any existing + per-config files. + +2009-01-07 14:16 king + + * Source/: cmFileCommand.cxx, cmFileCommand.h: ENH: Add + undocumented file(DIFFERENT) command + + This new command will be used by generated installation scripts + to determine whether an already-installed export file has + changed. + +2009-01-07 14:16 king + + * Source/: cmExportInstallFileGenerator.cxx, + cmExportInstallFileGenerator.h: ENH: Refactor computation of + import file glob + + New method cmExportInstallFileGenerator::GetConfigImportFileGlob + computes the globbing expression that an installed export file + uses to load its per-configuration support files. + +2009-01-07 10:41 king + + * Source/: cmTest.cxx, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h: ENH: Teach CTest to submit test + property LABELS + + This teaches CTest to send the test property "LABELS" in Test.xml + dashboard submissions as Label elements inside a Labels element. + +2009-01-07 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-06 15:05 king + + * CTestCustom.cmake.in: COMP: Ignore warning LNK4204 for CMake + dashboard + + This warning appears for libtar.obj, curltest.obj, and + synch_client.obj regularly on CMake dashboard submissions from VS + builds. They seem to occur due to some kind of race condition + for objects in small targets. There is nothing wrong with the + code, so this just suppresses the warnings. + +2009-01-06 14:58 king + + * Source/CTest/cmCTestUpdateHandler.cxx: BUG: Manage LC_MESSAGES + with an object + + This moves management of the LC_MESSAGES environment variable + into an automatic variable. Previously if an error occurred the + original environment value was not restored. This makes the fix + to issue #5936 more robust. + +2009-01-06 14:41 king + + * Source/CTest/cmCTestUpdateHandler.cxx: STYLE: Remove trailing + whitespace + +2009-01-06 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-05 15:00 king + + * Source/: cmGetPropertyCommand.cxx, cmMakefile.cxx, cmMakefile.h, + cmSetPropertyCommand.cxx, cmSetTestsPropertiesCommand.cxx: ENH: + Improve test property speed with a map + + Previously we stored a vector of tests to preserve their order. + Property set/get operations would do a linear search for matching + tests. This uses a map to efficiently look up tests while + keeping the original order with a vector for test file + generation. + +2009-01-05 14:14 king + + * Tests/: CMakeLists.txt, EnforceConfig.cmake, + EnforceConfig.cmake.in: ENH: Re-enable new 'testing' test mode + + This fixes selection of a configuration when none is specified to + find an available configuration of the ctest test-command. + +2009-01-05 14:14 king + + * Source/: cmCTest.cxx, cmCTest.h: BUG: Capture cout and cerr from + internal ctest + + When CTest detects that a test is running its own executable it + optimizes the test by using an internal instance of cmCTest + instead of creating a new process. However, the internal + instance was using cout and cerr directly. This redirects the + output to a string stream to avoid direct display of the internal + test's output. + +2009-01-05 11:05 king + + * Source/: cmFileCommand.cxx, QtDialog/CMakeLists.txt: COMP: Fix + installation of cmake-gui by CMake 2.4 + + When CMake 2.4 generates the build tree for CMake itself it asks + the built CMake to install itself using the rules that 2.4 + generated. Since the install rules use undocumented commands + that are not compatible from 2.4 to 2.6 we need a special case to + avoid failure. This sets a special indicator variable in the + install rules that enables a compatibility hack to support the + old install rule format. + +2009-01-05 11:03 king + + * Source/cmFileCommand.cxx: ENH: Refactor internal file(INSTALL) + arg parsing + + The internal file(INSTALL) command argument parsing used several + booleans with at most one set to true at a time to track argument + parsing state. This refactors it to use one enumeration. + +2009-01-05 09:53 king + + * Source/cmGetTargetPropertyCommand.h: BUG: Remove old + get_target_property docs + + The get_target_property command contained some outdated + documentation of the LOCATION and TYPE properties. This removes + it since they are now documented in the properties list section + of the documentation. + +2009-01-05 09:53 king + + * Source/cmTarget.cxx: ENH: Enable LOCATION property for imported + targets + + Previously we left the LOCATION property undefined for imported + targets since it should no longer be used for non-imported + targets. However, in the case we do not know the name of an + available imported configuration, it is more readable to get the + LOCATION property than LOCATION_ for a bogus + configuration . This enables LOCATION for imported + targets and returns an unspecified available imported + configuration. + +2009-01-05 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-04 04:12 alex + + * Source/cmCMakeMinimumRequired.h: STYLE: changed "one may" into + "it should" to make it stronger + + Alex + +2009-01-04 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-03 15:48 king + + * Source/cmCMakeMinimumRequired.h: ENH: Clarify FATAL_ERROR option + to min-req command + + The FATAL_ERROR to cmake_minimum_required is useful for projects + that require 2.6 to convince CMake 2.4 to error out. This + clarifies its usefulness in the documentation. + +2009-01-03 15:47 king + + * Source/: cmCMakeMinimumRequired.cxx, cmCMakeMinimumRequired.h: + ENH: Ignore unknown cmake_minimum_required args + + When cmake_minimum_required is called with an unknown argument it + should not complain about it if the version specified is in the + future. This allows the proper error to be shown about the + current CMake being too old. + +2009-01-03 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-02 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2009-01-01 12:49 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmCTest.cxx, + Source/cmCommandArgumentLexer.cxx, + Source/cmCommandArgumentLexer.h, + Source/cmCommandArgumentLexer.in.l, + Source/cmCommandArgumentParser.cxx, + Source/cmCommandArgumentParser.y, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmCommandArgumentParserHelper.h, + Source/cmCommandArgumentParserTokens.h: ENH: RC 7 merge fix + missing stuff from RC 6 and fix change log + +2009-01-01 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-31 10:14 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeASM_MASMInformation.cmake, + Modules/CMakeDetermineASM_MASMCompiler.cmake, + Modules/CMakeTestASM_MASMCompiler.cmake, Modules/CPackRPM.cmake, + Modules/FindCurses.cmake, Modules/FindDoxygen.cmake, + Modules/FindEXPAT.cmake, Modules/FindLibXml2.cmake, + Modules/FindQt4.cmake, Modules/FindSquish.cmake, + Modules/FindwxWidgets.cmake, Modules/GetPrerequisites.cmake, + Modules/SquishRunTestCase.bat, Modules/SquishRunTestCase.sh, + Modules/SquishTestScript.cmake, Modules/Platform/Darwin.cmake, + Modules/Platform/Haiku.cmake, + Modules/Platform/WindowsPaths.cmake, Source/cmFileCommand.h, + Source/cmFindPackageCommand.cxx, Source/cmFindPackageCommand.h, + Source/cmGlobalMSYSMakefileGenerator.cxx, + Source/cmOrderDirectories.cxx, + Source/CPack/cmCPackBundleGenerator.cxx, + Source/QtDialog/CMake.desktop, Source/QtDialog/CMakeLists.txt, + Source/QtDialog/CMakeSetupDialog.cxx, + Source/QtDialog/Compilers.h, Source/QtDialog/Compilers.ui, + Source/QtDialog/CrossCompiler.ui, + Source/QtDialog/FirstConfigure.cxx, + Source/QtDialog/FirstConfigure.h, + Source/QtDialog/QCMakeWidgets.cxx, Source/kwsys/ProcessUNIX.c, + Source/kwsys/System.c, Source/kwsys/SystemInformation.cxx, + Templates/TestDriver.cxx.in: ENH: merge fixes for RC 6 + +2008-12-31 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-30 09:13 david.cole + + * Source/CTest/: cmCTestConfigureCommand.cxx, + cmCTestConfigureCommand.h, cmCTestConfigureHandler.cxx, + cmCTestGenericHandler.cxx: ENH: Add OPTIONS argument to the + ctest_configure command so that you can pass -D arguments to the + cmake configure step from a ctest -S script. Also clarify/correct + some not so helpful error messages. + +2008-12-30 09:11 david.cole + + * Modules/Platform/Darwin.cmake: BUG: Fix install_name_tool problem + on the Mac when a PROJECT(... NONE) is followed by multiple calls + to ENABLE_LANGUAGE. Use find_program to set the + CMAKE_INSTALL_NAME_TOOL variable so it gets saved in the cache as + a full path to the install_name_tool executable rather than a + simple set which eventually goes out of scope. + +2008-12-30 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-29 18:11 hoffman + + * Tests/JCTest/CMakeLists.txt: ENH: make it take longer + +2008-12-29 17:49 hoffman + + * Source/CTest/: cmProcess.cxx, cmProcess.h: ENH: add start end + time for procs + +2008-12-29 17:43 hoffman + + * Tests/JCTest/: CMakeLists.txt, TestTime.cxx: ENH: add test for -j + N ctest stuff + +2008-12-29 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-28 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-27 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-26 15:27 david.cole + + * Source/CTest/cmCTestHandlerCommand.cxx: STYLE: Fix line length + violation. + +2008-12-26 13:28 king + + * Source/cmOrderDirectories.cxx: BUG: Fix same-file check for + directory ordering + + When computing runtime search path ordering a constraint exists + when a file that may be found by the runtime search exists in a + directory other than that containing the desired file. We test + whether a potential conflict is really the same due to a symlink. + Recently the change to cmFindLibraryCommand to load directory + content created a case in which the same-file check would be + incorrectly skipped. This avoids skipping the check. + +2008-12-26 12:06 david.cole + + * Modules/FindDoxygen.cmake: ENH: New location to look for "dot" + +2008-12-26 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-25 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-24 10:10 david.cole + + * Modules/AddExternalProject.cmake, + Tests/ExternalProject/CMakeLists.txt: ENH: Re-work of fix + committed yesterday for the Watcom WMake dashboard. Fix it + properly by using the SYMBOLIC source file property to indicate + to WMake when the sentinel file is not actually written by the + update step. + +2008-12-24 04:31 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Fixed placement of initial + wxWidgets_FOUND=TRUE statement, which allowed some cases to + breakaway from tests without resetting to FALSE (BUG: 8188). + +2008-12-24 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-23 10:01 david.cole + + * Tests/ExternalProject/CMakeLists.txt: BUG: Workaround for Watcom + WMake not handling "always out of date" custom commands to fix + the failing ExternalProject test on the CMake nightly dashboard. + +2008-12-23 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-22 03:00 alex + + * Modules/FindLibXml2.cmake: BUG: use FindPkgConfig.cmake instead + of UsePkgConfig.cmake, sync with KDE svn and fix bug #8290 + + Alex + +2008-12-22 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-21 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-20 00:04 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-19 10:35 david.cole + + * Modules/AddExternalProject.cmake: ENH: Add the update step in + between download and build. Add UPDATE_ARGS and UPDATE_COMMAND + handling. Output a -complete sentinel in synch with the -install + sentinel, but do not list it as an OUTPUT of the custom command. + That breaks the chaining of add_custom_commands between custom + targets, but allows for a file-level dependency expression that + will cause proper incremental rebuilds. When earlier targets + rebuild, subsequent dependent targets will also rebuild. CVS and + SVN update commands are always out-of-date so that they always + run to get the latest source. To suppress that behavior on a + per-external project basis use an explicit empty string for + UPDATE_COMMAND. The source will still be checked out from the + repository prior to the update step by the download step. + +2008-12-19 10:19 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: STYLE: fix shadow warning + +2008-12-19 00:04 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-18 21:59 hoffman + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: BUG: + partial fix for #8056 + +2008-12-18 21:57 hoffman + + * Source/CTest/: cmCTestHandlerCommand.cxx, + cmCTestScriptHandler.cxx: BUG: fix for bug #8224 fix crash + +2008-12-18 21:53 hoffman + + * Modules/FindEXPAT.cmake: BUG: fix for #8298 look for libexpat as + well + +2008-12-18 21:52 hoffman + + * Source/cmFileCommand.h: BUG: fix spelling + +2008-12-18 17:15 king + + * Tests/CMakeLists.txt: BUG: Disable new 'testing' test mode for + now + + The new 'testing' test behavior of actually running the tests + generated by the project still fails when the test script guesses + the Debug configuration but the CMake build tree was only built + Release. The inner ctest needs to find the ctest executable but + is given the wrong configuration. + +2008-12-18 14:56 king + + * Source/: cmBootstrapCommands.cxx, cmCommands.cxx: COMP: Add + set_directory_properties to bootstrap + + We now need this command in the Tests/CMakeLists.txt file. + +2008-12-18 14:26 king + + * Tests/: CMakeLists.txt, EnforceConfig.cmake: BUG: Fix new + 'testing' test for CMake releases + + The recent change of the 'testing' test to actually drive the + tests within it does not work on Windows with released CMakes + 2.6.2 and lower if no configuration is given to ctest with a -C + option. This works around the problem by detecting the case and + changing the empty configuration to Debug. + +2008-12-18 13:36 king + + * Source/kwsys/System.c, Tests/CustomCommand/CMakeLists.txt: BUG: + Fix windows command line escape for empty arg + + On Windows the KWSys System package generates escapes for + command-line arguments. This fix enables quoting of the empty + string as an argument. This also adds a test to pass an empty + argument to a custom command. + +2008-12-18 12:28 king + + * Tests/: CMakeLists.txt, Testing/CMakeLists.txt, + Testing/Sub/Sub2/CMakeLists.txt: ENH: Improve 'testing' test to + actually test + + The 'testing' CMake test builds a project that uses add_test. + This strengthens the test to actually run CTest on the project + build tree after building it. + +2008-12-18 12:27 king + + * Source/CTest/cmCTestBuildAndTestHandler.cxx: ENH: Minor + readability improvement in CTest output + + When ctest --build-and-test runs the --test-command its output + did not quote the arguments of the command being tested making it + difficult to read. This adds the quotes. This also changes the + wording of the failure case to not sound like CTest could not run + the executable when in fact it ran and returned failure. + +2008-12-18 12:27 king + + * Source/cmCTest.cxx: BUG: Fix crash when running internal CTest + + When CTest encounters a test whose executable is the ctest + executable iteslf, it just invokes code inside itself to avoid + starting a new process. This fixes a null-pointer dereference in + the logging code of that case. + +2008-12-18 10:43 david.cole + + * Source/: cmFileCommand.cxx, kwsys/SystemTools.cxx, + kwsys/SystemTools.hxx.in: BUG: Do not copy permissions of files + when making the copy in an install rule. If the source file was + read-only, this prevents the subsequent set of the destination + file's modification time, making the copied file always different + in time-stamp than the original and always installing a new file + with a new time stamp (but the same content) causing unnecessary + downstream incremental rebuilds. As part of this fix, add an + optional copyPermissions parameter to the SystemTools routines + CopyFileIfDifferent, CopyFileAlways, CopyAFile and + CopyADirectory. The copyPermissions parameter defaults to true to + preserve the behavior of these routines for existing callers. + +2008-12-18 10:06 king + + * Source/: cmInstallDirectoryGenerator.h, + cmInstallExportGenerator.h, cmInstallFilesGenerator.h, + cmInstallTargetGenerator.h: STYLE: Remove useless install + generator typedefs + + The cmInstall*Generator classes all derive from + cmInstallGenerator which provides the Indent typedef so they do + not need to provide it + +2008-12-18 09:58 king + + * Source/: cmCommandArgumentLexer.cxx, cmCommandArgumentLexer.in.l: + COMP: Restore fixes to generated lexer + + The command argument lexer was recently regenerated which erased + some fixes that had been applied directly to the output. This + restores the fixes and adds reminder notes in the generation + instructions. + +2008-12-18 09:58 king + + * Source/: cmCommandArgumentParser.cxx, cmCommandArgumentParser.y: + BUG: Move previous parser bugfixes into input file + + The command argument parser code is generated by bison. This + change restores some fixes previously applied to the generated + output that were destroyed by regenerating the parser source. + This time the fixes have been put in the input file so + regenerating the parser will not destroy them again. + +2008-12-18 09:37 clinton + + * Source/QtDialog/CMake.desktop: + ENH: Remove Application category. See #8151. + +2008-12-18 00:04 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-17 09:33 king + + * Source/: cmCommandArgumentLexer.cxx, cmCommandArgumentLexer.in.l: + COMP: Fix unused yyunput warning in lexer + + This adds the "nounput" option to the flex input file so that + yyunput is not generated. The function is static but not used so + some compilers warn. + +2008-12-17 09:24 hoffman + + * Tests/FindPackageTest/Baz 1.1/BazConfig.cmake: file + BazConfig.cmake was added on branch CMake-2-6 on 2009-01-13 + 18:03:55 +0000 + +2008-12-17 09:24 hoffman + + * Tests/FindPackageTest/Baz 1.2/CMake/BazConfig.cmake: file + BazConfig.cmake was added on branch CMake-2-6 on 2009-01-13 + 18:03:56 +0000 + +2008-12-17 09:24 hoffman + + * Tests/FindPackageTest/Baz 1.1/BazConfigVersion.cmake: file + BazConfigVersion.cmake was added on branch CMake-2-6 on + 2009-01-13 18:03:55 +0000 + +2008-12-17 09:24 hoffman + + * Tests/FindPackageTest/Baz 1.2/CMake/BazConfigVersion.cmake: file + BazConfigVersion.cmake was added on branch CMake-2-6 on + 2009-01-13 18:03:56 +0000 + +2008-12-17 09:24 king + + * Source/cmFindPackageCommand.cxx, + Tests/FindPackageTest/CMakeLists.txt, Tests/FindPackageTest/Baz + 1.1/BazConfig.cmake, Tests/FindPackageTest/Baz + 1.1/BazConfigVersion.cmake, Tests/FindPackageTest/Baz + 1.2/CMake/BazConfig.cmake, Tests/FindPackageTest/Baz + 1.2/CMake/BazConfigVersion.cmake: ENH: Teach find_package about + more install dirs + + We now search in + + /*/ + /*/(cmake|CMake) + + when looking for package configuration files. This is useful on + Windows since the Program Files folder is in + CMAKE_SYSTEM_PREFIX_PATH. These paths are the Windows equivalent + to the Apple convention application and framework paths we + already search. See issue #8264. + +2008-12-17 09:23 king + + * Modules/Platform/WindowsPaths.cmake: ENH: Use 32-bit and 64-bit + Program Files folders + + On 64-bit Windows there may be two Program Files folders, one for + 32-bit binaries and one for 64-bit binaries. When we compute + CMAKE_SYSTEM_PREFIX_PATH we should put both folders in the path. + +2008-12-17 08:24 king + + * Source/cmCommandArgumentLexer.cxx, + Source/cmCommandArgumentLexer.h, + Source/cmCommandArgumentLexer.in.l, + Source/cmCommandArgumentParser.cxx, + Source/cmCommandArgumentParser.y, + Source/cmCommandArgumentParserTokens.h, + Tests/StringFileTest/CMakeLists.txt: ENH: Allow most characters + in ENV variable refs + + The $ENV{VAR} syntax permits access to environment variables. + This teaches CMake to recognize most characters in the VAR name + since some environments may have variables with non-C-identifier + characters. + +2008-12-17 00:04 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-16 15:15 clinton + + * Source/QtDialog/QCMakeWidgets.cxx: + ENH: Improve performance with file completion. Fix for #8292. + +2008-12-16 15:00 hoffman + + * Source/QtDialog/Compilers.h: file Compilers.h was added on branch + CMake-2-6 on 2008-12-31 15:14:30 +0000 + +2008-12-16 15:00 hoffman + + * Source/QtDialog/Compilers.ui: file Compilers.ui was added on + branch CMake-2-6 on 2008-12-31 15:14:30 +0000 + +2008-12-16 15:00 hoffman + + * Source/QtDialog/CrossCompiler.ui: file CrossCompiler.ui was added + on branch CMake-2-6 on 2008-12-31 15:14:30 +0000 + +2008-12-16 15:00 hoffman + + * Source/QtDialog/FirstConfigure.cxx: file FirstConfigure.cxx was + added on branch CMake-2-6 on 2008-12-31 15:14:30 +0000 + +2008-12-16 15:00 hoffman + + * Source/QtDialog/FirstConfigure.h: file FirstConfigure.h was added + on branch CMake-2-6 on 2008-12-31 15:14:30 +0000 + +2008-12-16 15:00 clinton + + * Source/QtDialog/: CMakeFirstConfigure.cxx, CMakeFirstConfigure.h, + CMakeFirstConfigure.ui, CMakeLists.txt, CMakeSetupDialog.cxx, + Compilers.h, Compilers.ui, CrossCompiler.ui, FirstConfigure.cxx, + FirstConfigure.h: + ENH: + + For bug #7191. Improvements to the dialog that sets up the first + configure. Fixing the large size of it by breaking it up into a + wizard. Also incorporated suggestions from bug report. + +2008-12-16 09:23 king + + * Source/cmFindPackageCommand.cxx: BUG: find_package must push/pop + policies + + When the find_package command loads a -version.cmake file + to test the package version it must prevent the version file from + affecting policy settings. Therefore the policy settings must be + pushed and popped. + +2008-12-16 09:20 king + + * Source/cmInstallGenerator.cxx: BUG: Fix component-name test on + installation + + Generated cmake_install.cmake script code used MATCHES to compare + component names. This does not support characters considered + special by regular expression syntax in component names. This + change uses STREQUAL instead. See issue #8256. + +2008-12-16 09:15 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: ENH: Warn if + build dir is too long for filesystem + + When an object file directory is too deep to place an object file + without exceeding CMAKE_OBJECT_PATH_MAX, this issues a warning. + Previously we silently ignored the problem. See issue #7860. + +2008-12-16 09:14 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: ENH: Refactor passing of max + length object dir + + When computing the maximum length full path to the build + directory under which object files will be placed, pass the + actual path instead of just its length. This will be useful for + error message generation. + +2008-12-16 09:13 hoffman + + * Tests/FindPackageTest/lib/cmake/zot-4.0/zot-config-version.cmake: + file zot-config-version.cmake was added on branch CMake-2-6 on + 2009-01-13 18:03:56 +0000 + +2008-12-16 09:13 hoffman + + * Tests/FindPackageTest/lib/cmake/zot-4.0/zot-config.cmake: file + zot-config.cmake was added on branch CMake-2-6 on 2009-01-13 + 18:03:56 +0000 + +2008-12-16 09:13 king + + * Tests/FindPackageTest/: CMakeLists.txt, + lib/cmake/zot-4.0/zot-config-version.cmake, + lib/cmake/zot-4.0/zot-config.cmake, + lib/zot-3.1/zot-config-version.cmake, + lib/zot-3.1/zot-config.cmake: ENH: Strengthen FindPackageTest + version check + + The previous change to test finding in lib/cmake/* weakened + the versioned find tests. Since the lib/cmake paths are searched + before lib/* paths the previous change skipped requiring + the command to ignore zot-3.0 when finding zot-3.1. This change + restores that and adds zot-4.0 to test the lib/cmake path. + +2008-12-16 00:04 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-15 18:48 clinton + + * Modules/FindQt4.cmake: + BUG: Fix for #8247. Add QT_TRANSLATIONS_DIR pointing to + the Qt translation files, and docs for it. Also add docs + for QT_BINARY_DIR. + +2008-12-15 17:19 fbertel + + * Source/kwsys/: ProcessUNIX.c, SystemInformation.cxx: COMP:Fixed + warnings. + +2008-12-15 13:30 king + + * Source/: cmDocumentVariables.cxx, cmTarget.cxx: BUG: Fix + _POSTFIX property/variable docs + + The CMAKE__POSTFIX variable and _POSTFIX property + were not documented. This updates the CMAKE_DEBUG_POSTFIX and + DEBUG_POSTFIX documentation to refer to the more general + variable/property. It also clarifies that the variable is used + as the property default only for non-executable targets. See + issue #7868. + +2008-12-14 00:04 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-12 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-11 22:05 lowman + + * Modules/FindCxxTest.cmake: ENH: Added FindCxxTest module to + assist others in using the CxxTest unit testing framework within + CTest + +2008-12-11 15:55 david.cole + + * Tests/ExternalProject/CMakeLists.txt: BUG: One more conditional + in the ExternalProject test to prevent build errors of Tutorial + Step5 on Win98 using Visual Studio 6 when the path length of its + build tree exceeds 72 characters. Crazy, perhaps. But this fixes + the last real dashboard failure of the ExternalProject test. + +2008-12-11 14:35 hoffman + + * Tests/CMakeLists.txt: ENH: remove some verbosity to reduce test + time + +2008-12-11 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-10 11:30 david.cole + + * Tests/ExternalProject/CMakeLists.txt: BUG: Prevent KWStyle + portion of ExternalProject test from configuring, building, + installing and testing on WATCOM dashboards. WATCOM STL support + is still under development. + +2008-12-10 10:50 david.cole + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.cxx: STYLE: Fix line length style + violations. + +2008-12-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-09 16:07 david.cole + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.cxx, cmake.cxx: COMP: Fix the + ExternalProject test for Visual Studio 6. Visual Studio 6 *.dsp + files cannot have hyphens in them. Add utility function + GetVS6TargetName to replace hyphens with underscores when + generating *.dsp file names. Use the function everywhere + necessary in the VS6 generators. And, a workaround: VS6 uses + ".\Debug" (for example) as an "$(IntDir)" value - strip any + leading ".\" when processing a --config argument in the cmake + --build handling code. + +2008-12-09 15:31 david.cole + + * Modules/AddExternalProject.cmake: ENH: Default to the same cmake + used for configuring when building and installing. If none + specified default to the cmake used to configure the + outer/aggregating project. + +2008-12-09 14:07 king + + * Source/cmFindPackageCommand.cxx, + Tests/FindPackageTest/CMakeLists.txt, + Tests/FindPackageTest/lib/zot-3.1/zot-config-version.cmake, + Tests/FindPackageTest/lib/zot-3.1/zot-config.cmake: ENH: Add + useful search locations to find_package + + This teaches find_package to search + + /(share|lib)/cmake/*/ + + for package configuration files. Packages that do not already + have files in a /lib/* directory can use this + location to avoid cluttering the lib directory. + +2008-12-09 14:07 king + + * Source/cmFindPackageCommand.cxx: STYLE: Remove old TODO comment + in find_package + + Versioning has been introduced to find_package, so the comment + about it is out of date. + +2008-12-09 10:56 david.cole + + * Templates/TestDriver.cxx.in: COMP: Don't emit old style cast + warning when configured as C++ but still allow being configured + as C. Thanks to Monsieur Francois Bertel for the patch. + +2008-12-09 10:08 king + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: ENH: + Preserve _FIND_XXX vars in find_package + + When the find_package command loads a module it sets several + _FIND_XXX variables to communicate information about the + command invocation to the module. This restores the original + state of the variables when the command returns. This behavior + is useful when a find-module recursively calls find_package with + NO_MODULE so that the inner call does not change the values in + the find-module. + +2008-12-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-08 17:39 hoffman + + * Modules/FindSquish.cmake: file FindSquish.cmake was added on + branch CMake-2-6 on 2008-12-31 15:14:25 +0000 + +2008-12-08 17:39 hoffman + + * Modules/SquishRunTestCase.bat: file SquishRunTestCase.bat was + added on branch CMake-2-6 on 2008-12-31 15:14:28 +0000 + +2008-12-08 17:39 hoffman + + * Modules/SquishRunTestCase.sh: file SquishRunTestCase.sh was added + on branch CMake-2-6 on 2008-12-31 15:14:29 +0000 + +2008-12-08 17:39 hoffman + + * Modules/SquishTestScript.cmake: file SquishTestScript.cmake was + added on branch CMake-2-6 on 2008-12-31 15:14:29 +0000 + +2008-12-08 17:39 davisb + + * Modules/: FindSquish.cmake, SquishRunTestCase.bat, + SquishRunTestCase.sh, SquishTestScript.cmake: ENH: adding + functionality for finding Squish, adding Squish tests from CMake, + and running Squish tests from ctest + +2008-12-08 14:58 david.cole + + * Modules/AddExternalProject.cmake: BUG: Make sure all directories + used as working directories exist at CMake configure time as well + as having custom commands that create them. Necessary for the + Borland Makefiles generator to generate short path names in the + makefile build rules. Also, make sure all custom commands chain + together properly through the use of the sentinel files. + +2008-12-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-07 19:36 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: STYLE: fix link length + issues + +2008-12-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-05 17:54 david.cole + + * Tests/ExternalProject/CMakeLists.txt: COMP: No-op. White space + only change to trigger a re-run of the ExternalProject test on + the QNX continuous dashboard to pick up the latest KWStyle + changes. + +2008-12-05 17:18 david.cole + + * Tests/ExternalProject/CMakeLists.txt: COMP: No-op. White space + only change to trigger a re-run of the ExternalProject test on + the QNX continuous dashboard to pick up the latest KWStyle + changes. + +2008-12-05 16:46 david.cole + + * Tests/ExternalProject/CMakeLists.txt: COMP: No-op. White space + only change to trigger a re-run of the ExternalProject test on + the QNX continuous dashboard to pick up the latest KWStyle + changes. + +2008-12-05 16:13 david.cole + + * Tests/ExternalProject/CMakeLists.txt: COMP: No-op. White space + only change to trigger a re-run of the ExternalProject test on + the QNX continuous dashboard to pick up the latest KWStyle + changes. + +2008-12-05 15:18 david.cole + + * Modules/AddExternalProject.cmake, + Tests/ExternalProject/CMakeLists.txt: ENH: Make it easier to use + configure/make/make-install as the build steps for an external + project. Add capability of customizing the download step. Add + tests of empty projects. Better comments and error checking in + AddExternalProject.cmake. In tests, use KWStyle from CVSHEAD to + see if QNX continuous can build the latest KWStyle. Make KWStyle + test depend on all previous test external projects so it builds + last to catch other issues before any KWStyle compile errors. + +2008-12-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-04 15:30 david.cole + + * Tests/ExternalProject/: CMakeLists.txt, TryCheckout.cmake: ENH: + Use a TryCheckout technique to decide whether or not to attempt + building the projects that depend on a cvs or svn download + method. + +2008-12-04 13:27 david.cole + + * Modules/AddExternalProject.cmake, Modules/DownloadFile.cmake, + Modules/RepositoryInfo.txt.in, Modules/UntarFile.cmake, + Tests/CMakeLists.txt, Tests/ExternalProject/CMakeLists.txt, + Tests/ExternalProject/Step1.tar, Tests/ExternalProject/Step1.tgz, + Tests/ExternalProject/Step1NoDir.tar, + Tests/ExternalProject/Step1NoDir.tgz: ENH: First draft of + add_external_project functionality. Tweaks, dashboard fixing, + more tests and documentation certain to follow as it gets used by + others... + +2008-12-04 10:51 hoffman + + * Source/kwsys/SystemInformation.cxx: BUG: fix cpu info string + +2008-12-04 09:12 hoffman + + * Modules/GetPrerequisites.cmake: BUG: make sure list is not size 0 + before sort + +2008-12-04 09:09 hoffman + + * Source/CPack/cmCPackBundleGenerator.cxx: ENH: allow startup + command to be optional + +2008-12-04 08:57 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: fix for bug #8216 + +2008-12-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-03 16:13 hoffman + + * Modules/: FindCurses.cmake, Platform/Haiku.cmake: ENH: fix curses + on haiku + +2008-12-03 15:35 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: BUG: fix for rc and vs6 + +2008-12-03 14:37 hoffman + + * Modules/CPackRPM.cmake: BUG: #7904 add rpm package depend + +2008-12-03 11:21 hoffman + + * Utilities/cmcurl/Testing/curltest.c: ENH: disable ftp test on + branch + +2008-12-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-02 21:44 hoffman + + * Tests/Fortran/: foo.c, foo.f, mysub.f: ENH: add missing files + +2008-12-02 16:40 hoffman + + * Utilities/cmcurl/Testing/curltest.c: ENH: disable ftp check + because it is no longer active on public + +2008-12-02 07:07 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeASM-ATTInformation.cmake, + Modules/CMakeDetermineASM-ATTCompiler.cmake, + Modules/CMakeDetermineASMCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeTestASM-ATTCompiler.cmake, Modules/CTest.cmake, + Modules/FindQt4.cmake, Modules/FortranCInterface.cmake, + Modules/FortranCInterface.h.in, + Modules/InstallRequiredSystemLibraries.cmake, + Modules/Platform/SunOS-SunPro-Fortran.cmake, + Modules/Platform/Windows-g77.cmake, + Source/cmIncludeExternalMSProjectCommand.h, + Source/cmInstallTargetGenerator.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmake.cxx, + Source/CTest/cmCTestScriptHandler.cxx, + Source/CTest/cmCTestTestCommand.cxx, + Source/CTest/cmCTestTestCommand.h, + Source/kwsys/CTestConfig.cmake, Templates/TestDriver.cxx.in, + Tests/Fortran/CMakeLists.txt, Utilities/cmcurl/CMakeLists.txt: + ENH: merge in RC 5 + +2008-12-02 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-12-01 14:41 david.cole + + * Source/cmGlobalMSYSMakefileGenerator.cxx: BUG: Do not require + CMAKE_AR in the MSYS Makefiles generator when enabling language + "NONE". + +2008-12-01 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-30 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-29 00:05 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-28 10:50 david.cole + + * Source/cmCTest.h: STYLE: Fix line length style violation. + +2008-11-28 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-27 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-26 16:19 hoffman + + * Utilities/cmcurl/CMakeLists.txt: ENH: fix warning on HPUX + +2008-11-26 15:41 david.cole + + * Source/cmSystemTools.cxx: COMP: Using the proper type for local + variables can eliminate compiler warnings. + +2008-11-26 14:38 david.cole + + * Source/cmCTest.cxx, Source/cmCTest.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, + Source/CTest/cmCTestBuildAndTestHandler.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestTestHandler.h, Tests/CMakeLists.txt, + Tests/Environment/CMakeLists.txt, Tests/Environment/main.cxx: + ENH: Implement feature request from issue 7885. Allow setting + environment variables on a per-test basis for ctest using + set_test_properties ENVIRONMENT. + +2008-11-26 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-25 16:56 clinton + + * Modules/FindQt4.cmake: + BUG: Revert 1.138. + +2008-11-25 16:50 king + + * Source/cmInstallTargetGenerator.cxx: BUG: Do not map install_name + of imported targets + + When we install a target on Mac, we generate a call to + install_name_tool to fix install_name entries in the target for + shared libraries it links. This change makes the step ignore + entries for imported targets since their install_name will not + change and cmTarget cannot produce a mapping for them. This + fixes the error + + GetLibraryNamesInternal called on imported target: kdelibs + + seen by kde folks. + +2008-11-25 09:52 perera + + * Templates/TestDriver.cxx.in: BUG: the return value of scanf + should not be ignored + +2008-11-25 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-24 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-23 22:07 hoffman + + * Source/kwsys/CTestConfig.cmake: ENH: make it submit to cdash + +2008-11-23 10:49 hoffman + + * Source/cmCTest.cxx, Source/CTest/cmCTestCoverageHandler.cxx, + Source/CTest/cmCTestScriptHandler.cxx, Tests/CMakeLists.txt: ENH: + add more debug stuff to CTestCTest2 so I can figure out redwall + +2008-11-23 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-22 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-21 16:37 hoffman + + * Tests/CMakeLists.txt: ENH: make ctest more verbose so that we can + see failure on redwall + +2008-11-21 16:32 hoffman + + * Source/: cmMakefile.cxx, cmMakefile.h, cmSetCommand.cxx: BUG: fix + issue with -D and cache force + +2008-11-21 16:10 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: make this + test pass if new curl is on + +2008-11-21 14:57 hoffman + + * Source/cmIncludeExternalMSProjectCommand.h: BUG: fix for 8123 + documentation issue + +2008-11-21 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-20 14:06 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: only link in + curl directories that exist, this will help with vs6 nmake + +2008-11-20 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-19 01:15 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: make it work + if new curl is on + +2008-11-19 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-18 09:37 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: make it work + if new curl is on + +2008-11-18 09:37 hoffman + + * Tests/CMakeLists.txt: ENH: add gfortran-4 + +2008-11-18 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-17 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-16 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-14 17:45 hoffman + + * Modules/CMakeDetermineFortranCompiler.cmake: BUG: fix for #8089, + fix rebuild with fortran and -D + +2008-11-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-13 17:12 david.cole + + * Modules/InstallRequiredSystemLibraries.cmake: BUG: Because of + Windows registry madness, we could not find the redistributables + directory on Win64 builds... Add a search directory based on + devenv (CMAKE_MAKE_PROGRAM) location so we can find it despite + the madness. + +2008-11-13 16:46 hoffman + + * Modules/FindDevIL.cmake: file FindDevIL.cmake was added on branch + CMake-2-6 on 2009-02-04 16:44:01 +0000 + +2008-11-13 16:46 alex + + * Modules/FindDevIL.cmake: BUG: the modules shipped with cmake + don't need CMAKE_MINIMUM_REQUIRED(VERSION), because the cmake + they are shipped with is always ok. Additionally, if a + Find-module does CMAKE_MINIMUM_REQUIRED(), it changes the + policies as they may be set up by the project. So this shouldn't + be done in a Find-module (or surrounded by policy-push/pop + commands) + + Alex + +2008-11-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-12 12:26 chris + + * Modules/FindDevIL.cmake: ENH: Added First revision of + FindDevIL.cmake + +2008-11-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-11 16:52 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/GetPrerequisites.cmake, + Modules/UseQt4.cmake, Source/cmGlobalGenerator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/kwsys/DynamicLoader.hxx.in: ENH: merge in fixes from head + RC 4 + +2008-11-11 14:03 hoffman + + * Tests/Fortran/CMakeLists.txt: ENH: fix gcc sun fortran mix + +2008-11-11 13:58 hoffman + + * Modules/Platform/Windows-g77.cmake: ENH: fix fortran flags on g77 + windows + +2008-11-11 13:58 hoffman + + * Modules/Platform/SunOS-SunPro-Fortran.cmake: ENH: fix fortran + flags on sun + +2008-11-11 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-10 13:42 hoffman + + * Source/cmGlobalGenerator.cxx: BUG: fix package_source target + +2008-11-10 10:53 hoffman + + * Tests/Fortran/CMakeLists.txt: ENH: put a check in for the gnu + sunpro case + +2008-11-10 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-09 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-08 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-07 16:40 hoffman + + * Source/kwsys/DynamicLoader.hxx.in: BUG: fix for bug 8060 Haiku + build + +2008-11-07 15:56 alex + + * Source/CTest/cmCTestScriptHandler.cxx: ENH: load + CMakeDetermineSystem and CMakeSystemSpecificInformation when + executing a ctest script so the search paths are fully set up and + variables like CMAKE_SYSTEM are available. This is useful e.g. + for new-style ctest scripting. (these files are also loaded on + startup by cpack, so now they behave similar). Hmmm, maybe they + should be also loaded by cmake -P ? + + Alex + +2008-11-07 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-06 17:33 hoffman + + * Tests/Fortran/CMakeLists.txt: ENH: make the test pass when + fortran is gnu and c is cl + +2008-11-06 10:54 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Utilities/cmcurl/CMakeLists.txt: ENH: merge in haiku build change + from head, again... + +2008-11-06 09:41 hoffman + + * Tests/Fortran/CMakeLists.txt: ENH: add a way to fix bullseye link + with fortran + +2008-11-06 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-05 18:51 alex + + * Modules/CMakeASM-ATTInformation.cmake: STYLE: add some comment, + so it says at least a bit what it is good for + + Alex + +2008-11-05 17:56 clinton + + * Modules/FindQt4.cmake: + BUG: Fix #7969. Fix moc output files if source dir contains + regex characters. + +2008-11-05 17:27 hoffman + + * Modules/CMakeASM_MASMInformation.cmake: file + CMakeASM_MASMInformation.cmake was added on branch CMake-2-6 on + 2008-12-31 15:14:18 +0000 + +2008-11-05 17:27 hoffman + + * Modules/CMakeDetermineASM_MASMCompiler.cmake: file + CMakeDetermineASM_MASMCompiler.cmake was added on branch + CMake-2-6 on 2008-12-31 15:14:18 +0000 + +2008-11-05 17:27 hoffman + + * Modules/CMakeTestASM_MASMCompiler.cmake: file + CMakeTestASM_MASMCompiler.cmake was added on branch CMake-2-6 on + 2008-12-31 15:14:19 +0000 + +2008-11-05 17:27 alex + + * Modules/: CMakeASM_MASMInformation.cmake, + CMakeDetermineASM-ATTCompiler.cmake, + CMakeDetermineASMCompiler.cmake, + CMakeDetermineASM_MASMCompiler.cmake, + CMakeTestASM-ATTCompiler.cmake, CMakeTestASM_MASMCompiler.cmake: + ENH: add support for the MS masm and masm64 assemblers, works + with nmake, not (yet) with the Visual Studio generators + + Alex + +2008-11-05 16:54 clinton + + * Modules/UseQt4.cmake: + BUG: Fix #7934. phonon doesn't always depend on QtDBus. + +2008-11-05 10:20 hoffman + + * Tests/Fortran/CMakeLists.txt: ENH: only call the fortran c + interface test when compilers match + +2008-11-05 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-04 15:16 hoffman + + * CMakeLists.txt, ChangeLog.manual, Utilities/cmcurl/select.c, + Utilities/cmcurl/CMake/CurlTests.c, Utilities/cmcurl/curl/curl.h, + Utilities/cmtar/util.c, Utilities/cmzlib/zconf.h, + Utilities/cmzlib/zutil.h: ENH: merge in the rest of the haiku + changes + +2008-11-04 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-03 16:23 alex + + * Modules/CTest.cmake: STYLE: mention cdash (not only dart) + + Alex + +2008-11-03 12:15 hoffman + + * Tests/Fortran/CMakeLists.txt: ENH: only allow matching fortran a + c compilers to be used + +2008-11-03 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-02 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-11-01 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-31 16:08 hoffman + + * Tests/Fortran/: CMakeLists.txt: ENH: do not error when sunpro or + mipspro fortran used + +2008-10-31 07:50 hoffman + + * Modules/FortranCInterface.cmake: ENH: fix for intel module on + linux + +2008-10-31 07:50 hoffman + + * Modules/FortranCInterface.cmake: file FortranCInterface.cmake was + added on branch CMake-2-6 on 2008-12-02 12:07:37 +0000 + +2008-10-31 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-30 17:48 hoffman + + * Modules/FortranCInterface.cmake: ENH: better output if module + linkage is not found + +2008-10-30 17:32 hoffman + + * Tests/Fortran/CMakeLists.txt: ENH: add some debug stuff for the + dashboards + +2008-10-30 16:50 hoffman + + * Modules/FortranCInterface.cmake: ENH: fix uppercase version so + defines are not upper as well + +2008-10-30 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-29 19:49 hoffman + + * Modules/FortranCInterface.cmake: ENH: fix check for intel windows + module mangling + +2008-10-29 19:34 hoffman + + * Modules/FortranCInterface.cmake: ENH: fix check for intel windows + module mangling + +2008-10-29 17:40 hoffman + + * Modules/: FortranCInterface.cmake: ENH: add check for intel + windows module mangling + +2008-10-29 17:37 hoffman + + * Modules/FortranCInterface.cmake: ENH: fix upper case + +2008-10-29 12:27 david.cole + + * Tests/: CMakeLists.txt, CPackComponents/CMakeLists.txt: ENH: Use + settings for CPackComponents test to make it fail if the recent + fix of cmCPackGenerator.cxx revision 1.16 ever encounters another + regression. + +2008-10-29 12:24 hoffman + + * Modules/FortranCInterface.cmake: ENH: only check for module + linkage if f90 is available + +2008-10-29 11:50 hoffman + + * Modules/FortranCInterface.cmake: ENH: fix for xlf module linkage + +2008-10-29 10:58 hoffman + + * Modules/FortranCInterface.cmake, Tests/Fortran/CMakeLists.txt, + Tests/Fortran/foo.c, Tests/Fortran/foo.f, Tests/Fortran/mysub.f: + ENH: add test for FortranCInterface + +2008-10-29 10:58 hoffman + + * Tests/Fortran/foo.c: file foo.c was added on branch CMake-2-6 on + 2008-12-03 02:44:25 +0000 + +2008-10-29 10:58 hoffman + + * Tests/Fortran/foo.f: file foo.f was added on branch CMake-2-6 on + 2008-12-03 02:44:25 +0000 + +2008-10-29 10:58 hoffman + + * Tests/Fortran/mysub.f: file mysub.f was added on branch CMake-2-6 + on 2008-12-03 02:44:25 +0000 + +2008-10-29 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-28 19:53 hoffman + + * Modules/FortranCInterface.cmake: ENH: add support for g77 extra _ + at the end of functions that have an _ in the name... + +2008-10-28 00:03 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-27 21:42 hoffman + + * Modules/FortranCInterface.cmake: ENH: add support for module + functions + +2008-10-27 15:31 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: make the scc + optional + +2008-10-27 15:23 hoffman + + * Modules/: FortranCInterface.cmake, FortranCInterface.h.in: ENH: + add fortran link discovery module + +2008-10-27 15:23 hoffman + + * Modules/FortranCInterface.h.in: file FortranCInterface.h.in was + added on branch CMake-2-6 on 2008-12-02 12:07:37 +0000 + +2008-10-27 13:51 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for 7839 and + 4524 + +2008-10-27 05:23 hoffman + + * Modules/FindRTI.cmake: file FindRTI.cmake was added on branch + CMake-2-6 on 2009-02-04 16:44:12 +0000 + +2008-10-27 05:23 gotthardp + + * Modules/FindRTI.cmake: BUG: Fixed CMAKE_FIND_LIBRARY_PREFIXES + related error on Win32 systems. + +2008-10-25 14:25 gotthardp + + * Modules/FindRTI.cmake: BUG: removed unused CMakeFindFrameworks + include + +2008-10-25 12:20 gotthardp + + * Modules/FindRTI.cmake: ENH: added a module to find M&S HLA RTI + +2008-10-24 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-24 17:48 clinton + + * Modules/FindQt4.cmake: + BUG: Fix find of assistant on Mac. + +2008-10-24 11:39 david.cole + + * Modules/GetPrerequisites.cmake, Tests/CMakeTests/CMakeLists.txt: + ENH: Activate GetPrerequisites code on Linux. Thanks to Mike + Arthur for finishing it off. + +2008-10-24 11:18 hoffman + + * CMakeLists.txt, ChangeLog.manual, bootstrap, + Modules/CMakeASMInformation.cmake, + Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeFortranCompilerId.F90.in, + Modules/CMakeFortranInformation.cmake, + Modules/CMakePlatformId.h.in, Modules/CMakeRCInformation.cmake, + Modules/CheckForPthreads.c, Modules/FindBoost.cmake, + Modules/FindGLUT.cmake, Modules/FindMFC.cmake, + Modules/FindPerlLibs.cmake, Modules/FindQt4.cmake, + Modules/FindTclStub.cmake, Modules/FindwxWidgets.cmake, + Modules/Platform/Linux.cmake, Modules/Platform/OpenBSD.cmake, + Modules/Platform/Windows-gcc.cmake, Source/CMakeLists.txt, + Source/cmAddCustomTargetCommand.cxx, + Source/cmAddCustomTargetCommand.h, Source/cmCTest.cxx, + Source/cmCallVisualStudioMacro.cxx, Source/cmCommand.h, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, Source/cmDependsJavaLexer.cxx, + Source/cmDependsJavaLexer.h, Source/cmDocumentation.cxx, + Source/cmDocumentation.h, Source/cmDocumentationFormatter.cxx, + Source/cmDocumentationFormatter.h, + Source/cmDocumentationFormatterDocbook.cxx, + Source/cmDocumentationFormatterDocbook.h, + Source/cmDocumentationFormatterHTML.cxx, + Source/cmDocumentationFormatterHTML.h, + Source/cmDocumentationFormatterMan.cxx, + Source/cmDocumentationFormatterMan.h, + Source/cmEnableLanguageCommand.cxx, Source/cmFindBase.cxx, + Source/cmFindCommon.cxx, Source/cmFindLibraryCommand.cxx, + Source/cmFindPackageCommand.cxx, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmIfCommand.cxx, + Source/cmIfCommand.h, Source/cmInstallCommand.cxx, + Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, Source/cmListFileCache.cxx, + Source/cmListFileCache.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMacroCommand.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, + Source/cmOutputRequiredFilesCommand.cxx, Source/cmPolicies.cxx, + Source/cmPolicies.h, Source/cmSetTargetPropertiesCommand.h, + Source/cmSourceFile.cxx, Source/cmSystemTools.cxx, + Source/cmTarget.cxx, Source/cmWhileCommand.cxx, Source/cmake.cxx, + Source/cmakemain.cxx, Source/CPack/cmCPackBundleGenerator.cxx, + Source/CPack/cmCPackGenerator.cxx, + Source/CPack/cmCPackGenerator.h, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.h, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CTest/cmCTestUpdateHandler.cxx, + Source/CursesDialog/cmCursesMainForm.cxx, + Source/kwsys/DynamicLoader.cxx, + Source/kwsys/DynamicLoader.hxx.in, Source/kwsys/ProcessUNIX.c, + Source/kwsys/SystemInformation.cxx, Source/kwsys/SystemTools.cxx, + Source/kwsys/testDynamicLoader.cxx, Source/kwsys/testProcess.c, + Tests/CMakeLists.txt, Tests/CTestUpdateCVS.cmake.in, + Tests/CTestUpdateCommon.cmake, Tests/CTestUpdateSVN.cmake.in, + Tests/Complex/CMakeLists.txt, Tests/Complex/cmTestConfigure.h.in, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/cmTestConfigure.h.in, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/cmTestConfigure.h.in, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/CustomCommand/CMakeLists.txt, + Tests/FindPackageTest/CMakeLists.txt, + Tests/FindPackageTest/lib/RecursiveA/recursivea-config.cmake, + Tests/FindPackageTest/lib/zot/zot-config-version.cmake, + Tests/FindPackageTest/lib/zot/zot-config.cmake, + Modules/FindCoin3D.cmake, Modules/Platform/Haiku.cmake, + Tests/FindPackageTest/FindRecursiveA.cmake, + Tests/FindPackageTest/FindRecursiveB.cmake, + Tests/FindPackageTest/FindRecursiveC.cmake: ENH: merge in changes + for 2.6.3 RC 1 + +2008-10-23 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-22 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-21 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-20 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-20 13:31 clinton + + * Modules/FindQt4.cmake: + BUG: Fix regression in finding QtAssistant + +2008-10-20 11:50 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Fix to find wxWidgets_LIB_DIR + for windows platform more generally; supports gcc, nmake, + and visual studio in all configurations. + +2008-10-19 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-19 21:14 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Added unicode paths for + wxWidgets_LIB_DIR search and the 2.8.9 suffix for + wxWidgets_ROOT_DIR search. + +2008-10-19 16:16 king + + * Tests/CMakeLists.txt: ENH: Enable cvs update test with CMake + before 2.6 + + When CMake is built by CMake 2.4 or lower the FindCVS module is + not available. In that case we activiate CTest.UpdateCVS by + searching for the cvs command directly. + +2008-10-19 11:53 hoffman + + * Tests/CTestUpdateCVS.cmake.in: file CTestUpdateCVS.cmake.in was + added on branch CMake-2-6 on 2008-10-24 15:18:56 +0000 + +2008-10-19 11:53 hoffman + + * Tests/CTestUpdateCommon.cmake: file CTestUpdateCommon.cmake was + added on branch CMake-2-6 on 2008-10-24 15:18:56 +0000 + +2008-10-19 11:53 hoffman + + * Tests/CTestUpdateSVN.cmake.in: file CTestUpdateSVN.cmake.in was + added on branch CMake-2-6 on 2008-10-24 15:18:56 +0000 + +2008-10-19 11:53 king + + * Tests/: CMakeLists.txt, CTestUpdateCVS.cmake.in, + CTestUpdateCommon.cmake, CTestUpdateSVN.cmake.in: ENH: Test CTest + update logic with VCS tools + + This creates new tests "CTest.UpdateSVN" and "CTest.UpdateCVS". + They test that the Update.xml produced by CTest for a + version-controlled project contains entries for files added, + changed, and removed. + +2008-10-19 10:44 hoffman + + * Source/CTest/cmCTestUpdateHandler.cxx: BUG: use LC_MESSAGES = C + instead of en_EN + +2008-10-18 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-18 12:07 king + + * Source/CTest/cmCTestUpdateHandler.cxx: BUG: Fix recognition of + files deleted from CVS + + The output of "cvs update" contains a line such as one of + + cvs update: `foo.txt' is no longer in the repository + cvs update: foo.txt is no longer in the repository + cvs update: warning: foo.txt is not (any longer) pertinent + + when file "foo.txt" has been removed in the version to which the + update occurs. Previously only the first case would be + recognized. This fixes the regular expression to match all these + cases. + +2008-10-18 10:31 hoffman + + * Tests/CMakeBuildTest.cmake.in: ENH: fix test to work with + in-source testing of CMake + +2008-10-17 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-17 12:52 king + + * Source/kwsys/CMakeLists.txt: BUG: Fix KWSys SystemInformation + dependencies + + The SystemInformation component of KWSys requires Process and + FundamentalType. + +2008-10-17 12:51 king + + * Source/kwsys/CMakeLists.txt: BUG: Enforce KWSys component + dependencies early + + KWSys component dependencies must be enforced before any tests + for enabled components are done. This moves the dependency + enforcement code to be as early as possible. + +2008-10-17 11:29 barre + + * Source/kwsys/: SystemInformation.cxx: ENH: fix for VS6 and Cygwin + +2008-10-16 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-16 19:30 barre + + * Source/kwsys/: SystemInformation.cxx, SystemTools.cxx, + SystemTools.hxx.in: ENH: fix for Vista + +2008-10-16 11:34 barre + + * Source/kwsys/: SystemTools.cxx: ENH: oops + +2008-10-15 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-15 23:24 barre + + * Source/kwsys/: SystemTools.cxx: ENH: fix for Windows Vista + +2008-10-15 18:05 clinton + + * Modules/FindQt4.cmake: + ENH: better way to find uic and moc. + +2008-10-15 16:56 hoffman + + * Tests/CMakeBuildTest.cmake.in: ENH: run the right cmake + +2008-10-15 16:50 hoffman + + * Tests/CMakeBuildTest.cmake.in: ENH: run the right cmake + +2008-10-15 15:13 hoffman + + * Source/cmake.cxx: ENH: fix bootstrap test and warning + +2008-10-15 13:56 hoffman + + * Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmProjectCommand.cxx, Source/cmake.cxx, Source/cmake.h, + Source/cmakemain.cxx, Tests/CMakeBuildTest.cmake.in, + Tests/CMakeLists.txt: BUG: 4244, add a --build option to cmake + that can build projects configured by CMake + +2008-10-15 10:49 hoffman + + * Modules/CMakeDetermineRCCompiler.cmake: ENH: remove extra set + +2008-10-15 10:40 king + + * Source/: cmLocalUnixMakefileGenerator3.h, + cmMakefileTargetGenerator.cxx: BUG: Fix color check for + dependency scanning + + Generation of color rules for dependency scanning messages did + not account for disabling color at generation time. See issue + #7814. + +2008-10-15 10:21 king + + * Source/cmMakefileTargetGenerator.cxx: ENH: Support object lists + longer than 128K on MSVC + + We use response files to list object files for the MSVC linker. + The linker complains if any response file is greater than 128K, + so we split the object file lists into multiple response files. + +2008-10-15 10:21 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h: ENH: + Factor out listing of objects on command line + + Previously generation of object file lists for linker and + cleaning command lines was duplicated for library and executable + target generators. This combines the implementations. + +2008-10-15 10:21 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx: STYLE: Remove computed but + unused variable. + + An old list of object files for cleaning seems to have been left + behind. This removes it. + +2008-10-15 09:35 david.cole + + * Source/CPack/cmCPackGenerator.cxx: BUG: Use the DESTDIR prefix + when creating the directory in CPack when CPACK_SET_DESTDIR is + ON. Thanks to Petri Hodju for reporting this regression to the + CMake mailing list: + http://www.cmake.org/pipermail/cmake/2008-October/024563.html. + +2008-10-14 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-14 16:07 hoffman + + * Modules/: CMakeASMInformation.cmake, CMakeCInformation.cmake, + CMakeCXXInformation.cmake, CMakeDetermineRCCompiler.cmake, + CMakeFortranInformation.cmake, CMakeRCInformation.cmake, + Platform/Windows-cl.cmake: ENH: fix problem where rc language + recursively included itself because CMAKE_BASE_NAME was used from + c compiler, do the same fix for other uses of CMAKE_BASE_NAME + +2008-10-14 13:56 hoffman + + * Source/cmEnableLanguageCommand.cxx: ENH: revert last change, as + it fails tests + +2008-10-14 11:42 hoffman + + * Modules/Platform/Windows-cl.cmake, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmEnableLanguageCommand.cxx: ENH: better error message for + mis-configured nmake environment + +2008-10-14 08:43 king + + * Source/cmFindBase.cxx: ENH: Clarify PATH_SUFFIXES documentation + + This clarifies documentation of the find_* commands' + PATH_SUFFIXES option. The option adds paths with the suffixes + but does not remove the paths without the suffixes. + +2008-10-13 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-13 22:12 clinton + + * Modules/FindQt4.cmake: + ENH: When changing the qmake pointed to, re-find all of Qt's + includes, libraries, etc... This makes it much easier to + switch between Qt versions. + +2008-10-13 19:39 clinton + + * Modules/FindQt4.cmake: + BUG: Fix find of dbus dependency in Qt 4.4 + +2008-10-13 09:58 king + + * Source/cmFindBase.cxx: BUG: Fix find_* search order with path + suffixes + + In cmFindBase we were searching all path suffixes appended to all + paths before considering the paths without any suffixes. Instead + we should consider each path with and without suffixes before + moving to the next path. See issue #7783. + +2008-10-12 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-11 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-11 15:35 king + + * Source/cmDocumentation.cxx: COMP: Fix assignment inside condition + +2008-10-11 12:02 king + + * Source/cmListFileCache.h: BUG: Make sure context info is always + initialized + + This adds a missing default constructor to cmListFileContext that + makes sure the line number is initialized to zero. A zero line + number will indicate a generated context. + +2008-10-10 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-10 17:43 david.cole + + * Modules/FindMFC.cmake: BUG: Fix for issue #5193. Base result of + FindMFC.cmake mostly on a TRY_COMPILE result. Gives accurate + answer about whether MFC is available. + +2008-10-10 17:08 david.cole + + * Source/CPack/cmCPackNSISGenerator.cxx: BUG: Fix issue #7800. + Enable CPack to find the NSIS installer on Windows 2000. + +2008-10-10 11:23 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h, + cmDocumentationFormatter.cxx, cmDocumentationFormatter.h, + cmDocumentationFormatterDocbook.cxx, + cmDocumentationFormatterDocbook.h, + cmDocumentationFormatterHTML.cxx, cmDocumentationFormatterHTML.h, + cmDocumentationFormatterMan.cxx, cmDocumentationFormatterMan.h: + ENH: Improve generated documentation formatting + + Applying patch provided in issue #7797. + + Fixes to man-pages: - Character '-' must be espaced as '\-' - + Surround preformatted text with '.nf' and '.fi' to adjust filling + - Give every page a NAME section for indexing by mandb - Pass + the man page filename without extension to .TH in its header + + Also added a title to the HTML header. + +2008-10-10 11:23 king + + * Source/cmDocumentation.cxx: BUG: Fix help type for filenames with + many dots + + The help page type should be determined using only the extension + after the last dot. See issue #7797. + +2008-10-10 11:23 king + + * Source/kwsys/SystemTools.cxx: STYLE: Fix typo in + GetFilenameLastExtension docs + + See issue #7797. + +2008-10-10 10:48 hoffman + + * Source/cmOutputRequiredFilesCommand.cxx: BUG: fix for 5071, + report error if output file can not be opened + +2008-10-10 10:20 hoffman + + * Source/cmakemain.cxx: BUG: fix for 3778, better docs for -E + +2008-10-10 09:36 hoffman + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: play it safe and + restore the value of LC_MESSAGES + +2008-10-10 09:23 hoffman + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: make sure LC_MESSAGES + is en_EN so that we can parse the output of svn and cvs + +2008-10-10 08:11 king + + * Source/cmGlobalXCodeGenerator.h: STYLE: Fix line-too-long + +2008-10-09 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-09 17:04 king + + * Modules/FindBoost.cmake: BUG: Avoid boost versions less than + required + + Construction of a list of candidate versions used to produce + search paths now discards versions less than requested by the + user. See issue #7783. + +2008-10-09 15:30 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx: ENH: Fix optional use of relative + paths. + + These changes refactor cmLocalGenerator methods Convert and + ConvertToOutputForExisting to support references inside the build + tree using relative paths. After this commit, all tests pass + with Makefile generators when relative paths are enabled by + default. See issue #7779. + +2008-10-09 15:08 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: Simplify makefile + ref to interactive editor + + The CMAKE_EDIT_COMMAND make variable need not be constructed with + ConvertToOutputForExisting. The CMAKE_COMMAND variable works + fine without it. + +2008-10-09 15:07 king + + * Source/: cmLocalGenerator.cxx, cmMakefileTargetGenerator.cxx: + ENH: Simplify framework -F flag generation + + This removes an unnecessary use of ConvertToOutputForExisting + which is needed only on Windows to consider short-pathing. + +2008-10-09 13:52 king + + * Modules/CMakeRCInformation.cmake: BUG: Pass definitions to rc + with Makefiles + + The build rule to run the resource compiler on Windows with a + Makefiles generator should include the placeholder to add the + definition flags. See issue #7769. + +2008-10-09 13:52 king + + * Source/cmMakefile.cxx: BUG: Finish fix to old DEFINITIONS + property + + The cmMakefile::DefineFlagsOrig ivar was created to help preserve + the old DEFINITIONS property behavior now that definitions are + moved from DefineFlags to the COMPILE_DEFINITIONS directory + property. This fixes propagation of the original value into + subdirectories. + +2008-10-09 13:00 hoffman + + * Source/CTest/cmCTestBuildHandler.cxx: BUG: fix for 5218 Error + message pattern match for VS8 + +2008-10-09 12:49 hoffman + + * Source/CursesDialog/cmCursesMainForm.cxx: BUG: fix for 4026, + display a message if ccmake has errors + +2008-10-09 11:01 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: Put custom target sources in Xcode projects + + Source files in custom targets are now placed in the Xcode + project for convenient editing. See issue #5848. + +2008-10-09 11:01 king + + * Source/cmAddCustomTargetCommand.cxx, + Source/cmAddCustomTargetCommand.h, + Tests/CustomCommand/CMakeLists.txt: ENH: Allow custom sources in + custom targets + + This adds a SOURCES option to ADD_CUSTOM_TARGET, enabling users + to specify extra sources for inclusion in the target. Such + sources may not build, but will show up in the IDE project files + for convenient editing. See issue #5848. + +2008-10-09 11:00 king + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Return utility target + after creation + + After creating a utility target with AddUtilityCommand, return a + pointer to the cmTarget instance so the caller may further modify + the target as needed. + +2008-10-08 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-08 17:58 alex + + * Source/CTest/cmCTestTestCommand.h: STYLE: lowercase ctest_test() + in the documentation + + Alex + +2008-10-08 14:19 david.cole + + * Source/: CMakeLists.txt, cmCallVisualStudioMacro.cxx: BUG: Fix + issue #7533. Revise fix for issue #7058 to use pragma comment + libs in the source file rather than using TARGET_LINK_LIBRARIES + in CMakeLists.txt because of the complex ifdef logic used in + correct copies of comdef.h. + +2008-10-08 10:56 hoffman + + * Tests/FindPackageTest/FindRecursiveA.cmake: file + FindRecursiveA.cmake was added on branch CMake-2-6 on 2008-10-24 + 15:20:35 +0000 + +2008-10-08 10:56 king + + * Source/cmFindPackageCommand.cxx, + Tests/FindPackageTest/FindRecursiveA.cmake: ENH: Remove implicit + NO_MODULE when recursing + + Recently we taught find_package that the NO_MODULE option is + implied when it is recursively invoked in a find-module. This + behavior may be confusing because two identical calls may enter + different modes depending on context. It also disallows the + possibility that one find-module defers to another find-module by + changing CMAKE_MODULE_PATH and recursively invoking find_package. + This change reverts the feature. + +2008-10-07 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-07 16:46 hoffman + + * Source/cmTarget.cxx: ENH: add missing property definitions + +2008-10-07 16:23 hoffman + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmSetTargetPropertiesCommand.h: BUG: fix for 4524, add support + for target properties to set vs source code control information + +2008-10-07 10:35 clinton + + * Modules/FindQt4.cmake: + ENH: Fix #7784. Fix link of glib when needed. + +2008-10-06 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-06 11:04 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fix convenience + rule working directory + + We generate convenience rules to build object files, preprocessed + outputs, and assembly outputs of source files individually with + make rules. This removes a redundant working directory change + when more than one target builds the same source file. + +2008-10-05 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-04 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-03 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-03 10:41 hoffman + + * Tests/FindPackageTest/lib/zot/zot-config-version.cmake: file + zot-config-version.cmake was added on branch CMake-2-6 on + 2008-10-24 15:19:03 +0000 + +2008-10-03 10:41 hoffman + + * Tests/FindPackageTest/lib/zot/zot-config.cmake: file + zot-config.cmake was added on branch CMake-2-6 on 2008-10-24 + 15:19:06 +0000 + +2008-10-03 10:41 king + + * Source/cmFindPackageCommand.cxx, + Tests/FindPackageTest/lib/zot/zot-config-version.cmake, + Tests/FindPackageTest/lib/zot/zot-config.cmake: ENH: Add + UNSUITABLE result to package version test + + Package version test files may now declare that they are + unsuitable for use with the project testing them. This is + important when the version being tested does not provide a + compatible ABI with the project target environment. + +2008-10-03 10:40 hoffman + + * Tests/FindPackageTest/lib/RecursiveA/recursivea-config.cmake: + file recursivea-config.cmake was added on branch CMake-2-6 on + 2008-10-24 15:19:01 +0000 + +2008-10-03 10:40 hoffman + + * Tests/FindPackageTest/FindRecursiveB.cmake: file + FindRecursiveB.cmake was added on branch CMake-2-6 on 2008-10-24 + 15:20:35 +0000 + +2008-10-03 10:40 hoffman + + * Tests/FindPackageTest/FindRecursiveC.cmake: file + FindRecursiveC.cmake was added on branch CMake-2-6 on 2008-10-24 + 15:20:35 +0000 + +2008-10-03 10:40 king + + * Source/cmFindPackageCommand.cxx, + Tests/FindPackageTest/CMakeLists.txt, + Tests/FindPackageTest/FindRecursiveA.cmake, + Tests/FindPackageTest/FindRecursiveB.cmake, + Tests/FindPackageTest/FindRecursiveC.cmake, + Tests/FindPackageTest/lib/RecursiveA/recursivea-config.cmake: + ENH: Help recursive find_package calls in modules + + These changes teach find_package to behave nicely when invoked + recursively inside a find-module for the same package. The + module will never be recursively loaded again. Version arguments + are automatically forwarded. + +2008-10-03 10:39 king + + * Source/cmFindPackageCommand.cxx: ENH: Warn and ignore EXACT + without version + + If the find_package command is invoked with the EXACT option but + without a version, warn and ignore the option. + +2008-10-03 10:11 king + + * Source/: cmInstallTargetGenerator.cxx, + cmInstallTargetGenerator.h: BUG: Fix config test for target + install rules + + In single-configuration generators a target installation rule + should apply to all configurations for which the INSTALL command + was specified. The configuration in which the target is built + does not matter. + + In multi-configuration generators each installation rule must be + associated with a particular build configuration to install the + proper file. The set of configurations for which rules are + generated is the intersection of the build configurations and + those for which the INSTALL command was specified. + +2008-10-03 08:16 hoffman + + * Source/cmFindCommon.cxx: ENH: undo bad checkin + +2008-10-02 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-02 18:48 alex + + * Source/cmTarget.cxx: STYLE: add documentation for the "TYPE" + target property + + Alex + +2008-10-02 13:49 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: BUG: 7763 fix, OPTIMIZATION + was not set right. Also fix for BUG 7764, put XCODE_ATTRIBUTES_ + last + +2008-10-02 12:11 hoffman + + * Modules/Platform/Windows-gcc.cmake: BUG: fix for 5705, link in + standard libs for mingw + +2008-10-02 09:18 hoffman + + * Source/: cmFindCommon.cxx, CPack/cmCPackBundleGenerator.cxx, + CPack/cmCPackGenerator.cxx, CTest/cmProcess.cxx: STYLE: fix line + length issues + +2008-10-01 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-10-01 16:16 hoffman + + * Source/cmake.cxx: BUG: fix for 6280, -E time was not sending back + return value + +2008-10-01 16:10 hoffman + + * Modules/FindPerlLibs.cmake: ENH: find perl with FindPerl not + find_program, bug: 6243 + +2008-10-01 14:19 hoffman + + * Modules/FindTclStub.cmake: BUG: fix for 7451 + +2008-10-01 13:24 hoffman + + * Modules/: CMakeCInformation.cmake, Platform/Linux.cmake: BUG: fix + for bug 4772, enable_language should now work on linux with + correct flags + +2008-10-01 13:13 hoffman + + * Utilities/Release/: ferrari_sgi64_release.cmake, + ferrari_sgi_release.cmake: ENH: add new sgi release scripts + +2008-10-01 12:46 hoffman + + * Source/CTest/cmCTestUpdateHandler.cxx: BUG: undo fix for 7292 + because a switched file should show up as an odd thing on the + dashbaord + +2008-10-01 12:45 hoffman + + * Source/cmGlobalGenerator.cxx: STYLE: fix hidden variable warning + +2008-10-01 09:50 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: BUG: fix for + 7738, allow for spaces in the package target path to CPackConfig + files + +2008-10-01 09:04 hoffman + + * Source/: cmCTest.cxx, cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, cmIfCommand.cxx, + cmInstallCommand.cxx, cmLocalVisualStudio7Generator.cxx, + cmMakefile.cxx, cmake.cxx, CPack/cmCPackBundleGenerator.cxx, + CPack/cmCPackGenerator.cxx, CPack/cmCPackGenerator.h, + CPack/cmCPackNSISGenerator.cxx, CPack/cmCPackNSISGenerator.h, + CPack/cmCPackPackageMakerGenerator.cxx, + CTest/cmCTestTestHandler.cxx: STYLE: fix line length stuff for + KWStyle + +2008-09-30 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-29 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-29 16:09 hoffman + + * Utilities/cm_curl.h: ENH: fix syntax error + +2008-09-29 15:47 hoffman + + * CMakeLists.txt, Utilities/cmThirdParty.h.in, Utilities/cm_curl.h: + ENH: check in ability to build with new curl -f + -DCMAKE_USE_NEW_CURL is set + +2008-09-28 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-27 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-27 08:04 king + + * Source/kwsys/SharedForward.h.in: COMP: Avoid incompatible pointer + warning + + In SharedForward, the call to execvp warned on MinGW because the + signature declared in process.h has an extra const. We use an + explicit cast to convert the pointer type. + +2008-09-26 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-26 20:09 hoffman + + * Modules/FindGLUT.cmake: BUG: fix for 7746 + +2008-09-26 12:08 barre + + * Source/kwsys/SharedForward.h.in: ENH: fix bug where sharedforward + would not work if there was a space in the path (it would but + would interpret the space as the separation between two + arguments, and would therefore pass an extra arg that would throw + some apps off). Thanks to Brad King. + +2008-09-26 08:24 king + + * Source/kwsys/: CMakeLists.txt, testSharedForward.c.in: ENH: Add + test for KWSys SharedForward + + This tests the basic capability of running another executable + from the build tree. + +2008-09-26 08:24 king + + * Source/kwsys/SharedForward.h.in: BUG: Fix SharedForward with + spaces on windows + + The windows execvp function does not re-escape arguments + correctly. Instead we generate the escape sequences before + calling it. + +2008-09-26 08:24 king + + * Source/kwsys/SharedForward.h.in: BUG: Fix SharedForward in-tree + detection + + To detect when the launcher is running from the build tree we now + test if the directory containing it is the same as the build-tree + directory using an inode test instead of string comparison. This + makes it more robust on case-insensitive filesystems and other + quirky situations. + +2008-09-26 08:24 king + + * Source/kwsys/SharedForward.h.in: COMP: Avoid 64-to-32-bit integer + conversion warning + + In SharedForward we are only dealing with command-line-length + strings so we need not worry about integer overflow. + +2008-09-25 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-25 17:02 hoffman + + * Modules/Platform/Windows-gcc.cmake: BUG: fix for 7704 + +2008-09-25 16:52 hoffman + + * Source/cmakemain.cxx: BUG: fix for bug 7733, document that debug + try compile may break the build + +2008-09-25 10:21 hoffman + + * Tests/Unset/CMakeLists.txt: file CMakeLists.txt was added on + branch CMake-2-6 on 2009-02-04 16:44:19 +0000 + +2008-09-25 10:21 king + + * Source/cmCommandArgumentParserHelper.cxx, + Tests/Unset/CMakeLists.txt: ENH: Create $CACHE{VAR} syntax + + This syntax allows reading of cache entries even when variables + of the same name have been defined in the local scope. See issue + #7715. + +2008-09-24 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-24 13:53 hoffman + + * Utilities/Release/README: ENH: add comment about fixing RC + +2008-09-24 13:52 hoffman + + * CMakeLists.txt: ENH: remove RC 2.6.2 is ready + +2008-09-24 10:07 hoffman + + * Source/CPack/: cmCPackGenerator.cxx, cmCPackGenerator.h, + cpack.cxx: STYLE: remove warning from branch + +2008-09-24 10:01 hoffman + + * Source/CPack/cpack.cxx: ENH: missed one + +2008-09-24 09:57 hoffman + + * Source/CPack/: cmCPackGenerator.cxx, cmCPackGenerator.h: STYLE: + fix compiler warning + +2008-09-24 08:51 king + + * Source/: cmCommand.h, cmMakefile.cxx, cmMakefile.h: BUG: Skip a + command if its arguments fail to parse + + If the arguments to a command fail to parse correctly due to a + syntax error, the command should not be invoked. This avoids + problems created by processing of commands with bad arguments. + Even though the build system will not be generated, the command + may affect files on disk that persist across CMake runs. + +2008-09-24 08:51 king + + * Source/cmMacroCommand.cxx: ENH: Improve context for errors in + macros + + We now properly report the source location of command arguments + inside macros instead of using the macro invocation site. No + information is lost because full call-stack information is + already reported. + +2008-09-24 08:51 king + + * Source/: cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserHelper.h, cmMakefile.cxx, cmPolicies.cxx, + cmPolicies.h: ENH: Improve argument parsing error messages + + Previously error messages produced by parsing of command argument + variable references, such as bad $KEY{VAR} syntax or a bad escape + sequence, did not provide good context information. Errors + parsing arguments inside macro invocations gave no context at + all. Furthermore, some errors such as a missing close curly + "${VAR" would be reported but build files would still be + generated. + + These changes teach CMake to report errors with good context + information for all command argument parsing problems. Policy + CMP0010 is introduced so that existing projects that built + despite such errors will continue to work. + +2008-09-23 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-23 13:34 king + + * Source/cmFindLibraryCommand.cxx: BUG: Fix lib/ to lib/64/ search + path conversion + + Automatic generation of 64-bit library search paths must preserve + trailing slashes. This fixes a failure case exposed by the + recent rewrite of find_library, which assumes trailing slashes + occur on all search paths. + +2008-09-23 12:04 hoffman + + * Source/kwsys/testDynamicLoader.cxx: ENH: one more fix for HAIKU + +2008-09-23 11:32 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Source/CPack/cmCPackGenerator.cxx, + Source/CPack/cmCPackGenerator.h: ENH: merge in changes for RC 6, + fix cpack working from symlink is the only change + +2008-09-23 10:15 hoffman + + * Source/CPack/: cmCPackGenerator.cxx, cmCPackGenerator.h: STYLE: + fix warning and rename method + +2008-09-22 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-22 18:12 hoffman + + * Source/CPack/cmCPackGenerator.cxx: BUG: fix 7669, cpack did not + work with symlinks + +2008-09-22 15:00 clinton + + * Modules/FindQt4.cmake: + ENH: Fix #7433. Put list of files in a .pro file and call + lupdate on it, instead of putting the list of + files on the command line. + +2008-09-22 14:05 hoffman + + * Source/kwsys/: DynamicLoader.hxx.in, ProcessUNIX.c, + testProcess.c: ENH: a few more haiku fixes, stop the debugger + from coming up for tests + +2008-09-22 14:04 hoffman + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx, + CTest/cmCTestTestHandler.cxx: ENH: add max width option to ctest + ouptut + +2008-09-22 14:00 clinton + + * Modules/FindQt4.cmake: + BUG: remove debug statements. + +2008-09-22 11:08 king + + * Modules/Platform/OpenBSD.cmake, Source/cmFindLibraryCommand.cxx, + Source/cmake.cxx: ENH: Teach find_library to find OpenBSD-style + libs + + OpenBSD shared libraries use a ".so.." extension + and do not have a symlink with just a ".so" extension. Its "ld" + is capable of finding the library with the best version. This + change adds support for finding such libraries. See issue #3470. + +2008-09-22 10:59 king + + * Source/cmFindLibraryCommand.cxx: ENH: Refactor find_library + search logic + + Previously we searched for library files by enumerating every + possible combination of prefix and suffix. Now we load (and + cache) directory content from disk and search for matching file + names. This should reduce disk access. It will also allow more + advanced matching rules in the future. See issue #3470. + +2008-09-22 10:56 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: ENH: Make + dir content cache work during configure + + Previously the cmGlobalGenerator::GetDirectoryContent method + would work safely only during build system generation. These + changes make it safe to use during each configure step by + flushing it at the beginning. + +2008-09-22 10:05 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/BundleUtilities.cmake, + Modules/CPackRPM.cmake, Modules/FindBoost.cmake, + Modules/FindCurses.cmake, Modules/FindQt4.cmake, + Modules/GetPrerequisites.cmake: ENH: merge in changes for RC 5 + +2008-09-22 09:56 hoffman + + * Modules/CPackRPM.cmake: BUG: 7435, remove warning for not setting + DESTDIR + +2008-09-22 09:42 king + + * Source/cmSourceFile.cxx: ENH: Improve docs of OBJECT_DEPENDS + property + + Specify exactly what the value of the property should contain and + the resulting behavior. Note alternatives for a common out-dated + usage. + +2008-09-21 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-20 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-19 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-19 17:45 hoffman + + * Modules/CPackRPM.cmake: BUG: 7435 fixes to add optional + post-install + +2008-09-18 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-18 15:23 hoffman + + * Modules/FindCurses.cmake: ENH: try to make this work if ncurses + lib is found bug not the ncurses header + +2008-09-18 10:56 clinton + + * Modules/FindQt4.cmake: + ENH: For #7433, add a bit more documentation and add ability + to specify extra flags to lupdate. + +2008-09-17 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-17 14:29 hoffman + + * Modules/FindCoin3D.cmake: file FindCoin3D.cmake was added on + branch CMake-2-6 on 2008-10-24 15:20:35 +0000 + +2008-09-17 14:29 mleotta + + * Modules/FindCoin3D.cmake: ENH: added a module to find Coin3D + +2008-09-16 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-16 17:40 barre + + * Utilities/cmtar/util.c: ENH: wow. On some Windows machine, trying + to mkdir("C:") would fail miserably. WHy not in debug mode? Why + not on other win32 machines. Who knows. + +2008-09-16 10:30 king + + * Modules/FindBoost.cmake: BUG: Fix FindBoost versioned find + + To locate the boost include directory, all search paths and + versioned path suffixes should be passed to one call of + FIND_PATH. Previously the test for one version would find an + unversioned system boost even when the user set BOOST_ROOT (since + the NO_DEFAULT_PATH option is not used). See issue #7456. + +2008-09-15 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-15 18:23 hoffman + + * Utilities/cmcurl/select.c: ENH: missed this one, cmake now + bootstraps on HAIKU + +2008-09-15 17:53 hoffman + + * bootstrap, Modules/CMakeFortranCompilerId.F90.in, + Modules/CMakePlatformId.h.in, Modules/CheckForPthreads.c, + Modules/Platform/Haiku.cmake, Source/cmCTest.cxx, + Source/cmDependsJavaLexer.cxx, Source/cmDependsJavaLexer.h, + Source/cmSystemTools.cxx, Source/CTest/cmCTestTestHandler.cxx, + Source/kwsys/DynamicLoader.cxx, Source/kwsys/ProcessUNIX.c, + Source/kwsys/SystemTools.cxx, Source/kwsys/testDynamicLoader.cxx, + Source/kwsys/testProcess.c, Utilities/cmcurl/CMakeLists.txt, + Utilities/cmcurl/CMake/CurlTests.c, Utilities/cmcurl/curl/curl.h, + Utilities/cmzlib/zconf.h, Utilities/cmzlib/zutil.h: ENH: add + initial support for HAIKU OS from bug# 7425 + +2008-09-15 17:53 hoffman + + * Modules/Platform/Haiku.cmake: file Haiku.cmake was added on + branch CMake-2-6 on 2008-10-24 15:20:35 +0000 + +2008-09-15 13:46 king + + * Source/cmGlobalGenerator.cxx: ENH: Simplify NOTFOUND variable + check + + When looking for NOTFOUND libraries, use the direct dependencies + of a target instead of all dependencies. At least one target + will trigger the NOTFOUND error anyway because at least one must + directly link it. This removes another use of the old-style link + line computation. + +2008-09-15 13:30 king + + * Source/cmMakefileTargetGenerator.cxx: ENH: Use new link info + during dependency scanning + + This removes another use of the old-style link line computation. + +2008-09-15 13:30 king + + * Source/cmTarget.cxx: ENH: Allow link line computation for static + libs + + In some cases it may be useful to compute a "link" line for a + static library even though it will not be put in the generated + build system. This removes the assertion which previously + diallowed the case. + +2008-09-15 13:30 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h: ENH: Keep target information in final + link line + + In cmComputeLinkInformation items in the final link line returned + by GetItems now contain a pointer to their corresponding cmTarget + if they were produced by a target. This makes available the set + of all targets linked. + +2008-09-15 09:51 king + + * Source/cmGlobalXCodeGenerator.cxx: ENH: Use improved target + dependencies for Xcode + + In cmGlobalGenerator we use cmComputeTargetDepends to construct a + safe, non-circular set of inter-target dependencies. This change + enables use of the results by the Xcode generator. It also + removes a lot of old code and another use of the old-style + linking logic. See issue #7652. + +2008-09-14 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-13 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-12 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-12 13:29 hoffman + + * Tests/CMakeTests/ToolchainTest.cmake.in: ENH: merge in from main + tree + +2008-09-12 10:56 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CheckCCompilerFlag.cmake, Modules/FindThreads.cmake, + Modules/readme.txt, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h, Source/cmGlobalXCodeGenerator.cxx, + Source/cmIfCommand.cxx, Source/cmIfCommand.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmPolicies.cxx, + Source/cmPolicies.h, Source/CPack/cmCPackDebGenerator.cxx, + Source/kwsys/Glob.cxx, Source/kwsys/Glob.hxx.in, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Tests/FindPackageTest/CMakeLists.txt, + Tests/FindPackageTest/FindVersionTestA.cmake, + Tests/FindPackageTest/FindVersionTestB.cmake, + Tests/FindPackageTest/FindVersionTestC.cmake, + Tests/FindPackageTest/FindVersionTestD.cmake, + Tests/Framework/CMakeLists.txt, + Tests/Framework/fooExtensionlessResource, + Tests/Framework/fooPrivateExtensionlessHeader, + Tests/Framework/fooPublicExtensionlessHeader: ENH: 2.6.2 RC 4 + merge into main tree + +2008-09-11 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-11 14:50 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: BUG: make sure flag is found + even with extra spaces at the start + +2008-09-11 14:34 david.cole + + * Source/: cmFileCommand.cxx, cmFileCommand.h, cmPolicies.cxx, + cmPolicies.h, kwsys/Glob.cxx, kwsys/Glob.hxx.in: ENH: Improve + FILE GLOB_RECURSE handling of symlinks with a new CMake policy. + CMP0009 establishes NEW default behavior of not recursing through + symlinks. OLD default behavior or explicit FOLLOW_SYMLINKS + argument to FILE GLOB_RECURSE will still recurse through + symlinks. + +2008-09-11 11:41 hoffman + + * Modules/FindThreads.cmake: BUG: fix for 6586, set THREADS_FOUND + +2008-09-11 10:48 hoffman + + * Source/CPack/cmCPackDebGenerator.cxx: ENH: add installed size to + deb package + +2008-09-10 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-10 11:58 king + + * Source/cmIfCommand.cxx, Source/cmIfCommand.h, + Tests/FindPackageTest/CMakeLists.txt: ENH: Add version comparison + to if() command + + Provide VERSION_LESS, VERSION_EQUAL, and VERSION_GREATER + operators in the if() command. This simplifies component-wise + comparison of version numbers in the form + "major[.minor[.patch[.tweak]]]". + +2008-09-10 10:36 hoffman + + * Templates/DLLHeader.dsptemplate: ENH: fix failing tests + +2008-09-10 10:11 hoffman + + * Tests/FindPackageTest/FindVersionTestD.cmake: file + FindVersionTestD.cmake was added on branch CMake-2-6 on + 2008-09-12 14:56:21 +0000 + +2008-09-10 10:11 king + + * Modules/readme.txt, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h, + Tests/FindPackageTest/CMakeLists.txt, + Tests/FindPackageTest/FindVersionTestA.cmake, + Tests/FindPackageTest/FindVersionTestB.cmake, + Tests/FindPackageTest/FindVersionTestC.cmake, + Tests/FindPackageTest/FindVersionTestD.cmake: ENH: Improve + find_package version numbering + + Make the number of version components specified explicitly + available. Set variables for unspecified version components to + "0" instead of leaving them unset. This simplifies version + number handling for find- and config-modules. Also support a + fourth "tweak" version component since some packages use them. + +2008-09-10 10:10 hoffman + + * Templates/: DLLHeader.dsptemplate, EXEWinHeader.dsptemplate: BUG: + fix bug OUTPUT_LIBNAME_EXPORTS done differently now + +2008-09-09 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-09 14:12 hoffman + + * Modules/CheckCCompilerFlag.cmake: ENH: fix docs, bug 7590 + +2008-09-09 13:12 hoffman + + * Source/CTest/cmCTestUpdateHandler.cxx: BUG: fix for bug 7292, svn + parsing flagged errors or conflicts for switched or locked files + +2008-09-09 13:04 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx, + Templates/EXEHeader.dsptemplate: BUG: fix empty /D option for + vs6, fix for 7580 + +2008-09-09 13:01 hoffman + + * CTestConfig.cmake: ENH: support old cmake for dashboards + +2008-09-09 12:48 david.cole + + * Tests/CMakeTests/GetPrerequisitesTest.cmake.in: PERF: Test takes + too long when recursing for executable files and when doing + recursive prerequisite analysis. Put it back the way it was. Add + another test later to do the recursive prerequisite analysis. + +2008-09-09 11:44 hoffman + + * Source/CTest/: cmCTestTestCommand.cxx, cmCTestTestCommand.h: BUG: + 0007569 add ability to do -R/-E in ctest_test command + +2008-09-08 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-08 20:21 hoffman + + * Tests/CMakeTests/ToolchainTest.cmake.in: BUG: fix test to work + with new restrictions that cross compiling must be on + +2008-09-08 17:53 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for 7624, vs7 + flag table missing /MAP + +2008-09-08 17:43 alex + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: BUG: only check for a toolchain + prefix (e.g. "arm-linux-" in "arm-linux-gcc") if we are cross + compiling and the compiler is gcc + + Alex + +2008-09-08 11:23 hoffman + + * Modules/GetPrerequisites.cmake: ENH: do not add the same thing to + the PATH again and again + +2008-09-08 10:08 king + + * Source/cmFindPackageCommand.cxx: ENH: Improve message for bad + find_package call + + Use the new-style error reporting mechanism to provide more + context information for a find_package call with a bad package + name. When the package is not required, issue a warning instead + of an error. + +2008-09-07 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-07 16:54 alex + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: BUG: #7359 make llvm-gcc work, + by explicitely excluding "llvm-" from _CMAKE_TOOLCHAIN_PREFIX + (use the (relatively) new CMAKE_MATCH_x variables set by all + regex operations) + + Alex + +2008-09-07 06:52 alex + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: COMP: + fix compile warning/error (non-void function returning void) + + Alex + +2008-09-06 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-06 19:10 alex + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: ENH: + provide the xxx_FIND_QUIETLY, xxx_FIND_REQUIRED and + xxx_FIND_VERSION_ variables also in Config mode, so the + xxxConfig.cmake files can e.g. test the QUIETLY parameter and + print something or not + + Alex + +2008-09-06 12:20 hoffman + + * Modules/BundleUtilities.cmake: file BundleUtilities.cmake was + added on branch CMake-2-6 on 2008-09-22 14:05:16 +0000 + +2008-09-06 12:20 david.cole + + * Modules/BundleUtilities.cmake, Modules/GetPrerequisites.cmake, + Tests/CMakeTests/GetPrerequisitesTest.cmake.in: ENH: Add + BundleUtilities.cmake and supporting changes to + GetPrerequisites.cmake. Function copy_and_fixup_bundle in + BundleUtilities helps to make standalone bundle applications on + the Mac by pulling in prerequisite non-system libraries and + frameworks as needed. Uses otool and install_name_tool to do + analysis and fixups. Project-specific hooks for deciding where to + embed libraries and for resolving item names into full path file + names are also provided. + +2008-09-05 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-05 15:51 hoffman + + * Tests/Framework/fooExtensionlessResource: file + fooExtensionlessResource was added on branch CMake-2-6 on + 2008-09-12 14:56:21 +0000 + +2008-09-05 15:51 hoffman + + * Tests/Framework/fooPrivateExtensionlessHeader: file + fooPrivateExtensionlessHeader was added on branch CMake-2-6 on + 2008-09-12 14:56:21 +0000 + +2008-09-05 15:51 hoffman + + * Tests/Framework/fooPublicExtensionlessHeader: file + fooPublicExtensionlessHeader was added on branch CMake-2-6 on + 2008-09-12 14:56:21 +0000 + +2008-09-05 15:51 david.cole + + * Source/cmGlobalXCodeGenerator.cxx, + Tests/Framework/CMakeLists.txt, + Tests/Framework/fooExtensionlessResource, + Tests/Framework/fooPrivateExtensionlessHeader, + Tests/Framework/fooPublicExtensionlessHeader: BUG: Fix issue + #7046 - make sure extensionless headers and resource files work + with the Xcode generator. Also fix incorrect mappings in the + lastKnownFileType code. Add some extensionless files to the + Framework test. + +2008-09-04 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-04 17:34 king + + * Source/cmComputeLinkDepends.cxx, Source/cmComputeLinkDepends.h, + Source/cmExportFileGenerator.cxx, Source/cmTarget.cxx, + Source/cmTarget.h, Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTargetLinkLibrariesCommand.h, Source/cmake.cxx, + Source/cmake.h, Tests/ExportImport/Export/CMakeLists.txt, + Tests/ExportImport/Import/CMakeLists.txt: ENH: Allow a custom + list of debug configurations + + Create a DEBUG_CONFIGURATIONS global property as a way for + projects to specify which configuration names are considered to + be 'debug' configurations. + +2008-09-04 17:10 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmGetPropertyCommand.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmWin32ProcessExecution.cxx, Source/cmake.cxx, + Source/CTest/cmCTestBuildAndTestHandler.cxx: ENH: 2.6.2 RC 3, + merge in changes from main tree + +2008-09-04 17:02 hoffman + + * Source/cmWin32ProcessExecution.cxx: BUG: fix extra close that + killed cmake when being debugged + +2008-09-04 13:15 king + + * Source/cmGetPropertyCommand.h: BUG: Fix typo in get_property + documentation + + Add some missing whitespace to fix formatting of the + documentation. + +2008-09-04 13:15 king + + * Source/cmake.cxx: BUG: Fix unsetting of global properties + + The set_property command unsets a property if it is given no + value. In the case of GLOBAL properties, the cmake::SetProperty + method would replace a NULL value with "NOTFOUND". Instead it + should be left as NULL so that the property is unset as expected. + Once it is unset the get_cmake_property command will still + report NOTFOUND while the get_property command will return the + empty string as documented. + +2008-09-04 11:31 king + + * Source/CTest/cmCTestBuildAndTestHandler.cxx: BUG: Make CTest + honor user-specified config + + When the -C or --build-config option is used to specify the + configuration to be tested by CTest, do not override it with the + configuration in which CTest is built. + +2008-09-03 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-03 16:22 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for 7519 extra + closing > in fortran projects + +2008-09-03 09:43 hoffman + + * CMakeLists.txt, ChangeLog.manual, Docs/cmake-syntax.vim, + Modules/CMakeCCompilerABI.c, Modules/CMakeCCompilerId.c.in, + Modules/CMakeCXXCompilerABI.cpp, + Modules/CMakeCXXCompilerId.cpp.in, Modules/CheckTypeSizeC.c.in, + Modules/FindKDE3.cmake, Modules/FindKDE4.cmake, + Modules/FindLibXml2.cmake, Modules/FindLua50.cmake, + Modules/FindLua51.cmake, Modules/FindOpenGL.cmake, + Modules/FindPHP4.cmake, Modules/FindPNG.cmake, + Modules/FindQt3.cmake, Modules/FindQt4.cmake, + Modules/FindTIFF.cmake, Modules/FindX11.cmake, + Modules/MacOSXFrameworkInfo.plist.in, Modules/NSIS.template.in, + Modules/TestEndianess.c.in, Modules/UsePkgConfig.cmake, + Modules/Platform/Darwin.cmake, + Modules/Platform/Windows-icl.cmake, + Source/cmAddLibraryCommand.cxx, Source/cmAddLibraryCommand.h, + Source/cmAddSubDirectoryCommand.h, + Source/cmCMakePolicyCommand.cxx, Source/cmCMakePolicyCommand.h, + Source/cmCacheManager.cxx, Source/cmComputeLinkDepends.cxx, + Source/cmComputeLinkDepends.h, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeTargetDepends.cxx, + Source/cmComputeTargetDepends.h, Source/cmDocumentVariables.cxx, + Source/cmDocumentation.cxx, Source/cmDocumentation.h, + Source/cmExtraCodeBlocksGenerator.cxx, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h, Source/cmGlobalGenerator.cxx, + Source/cmGlobalKdevelopGenerator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalXCodeGenerator.cxx, Source/cmIfCommand.cxx, + Source/cmIfCommand.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.h, Source/cmPolicies.cxx, + Source/cmPolicies.h, Source/cmReturnCommand.h, + Source/cmSetPropertyCommand.cxx, + Source/cmSetTargetPropertiesCommand.cxx, + Source/cmStringCommand.cxx, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTarget.cxx, Source/cmTarget.h, + Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTargetLinkLibrariesCommand.h, Source/cmXCodeObject.cxx, + Source/cmXCodeObject.h, Source/cmake.cxx, Source/cmakemain.cxx, + Source/CTest/cmCTestCoverageHandler.cxx, + Source/CursesDialog/cmCursesStringWidget.cxx, + Source/kwsys/Glob.cxx, Source/kwsys/Glob.hxx.in, + Source/kwsys/ProcessUNIX.c, Tests/BundleTest/BundleLib.cxx, + Tests/BundleTest/BundleTest.cxx, Tests/BundleTest/CMakeLists.txt, + Tests/BundleTest/BundleSubDir/CMakeLists.txt, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Tests/CustomCommand/CMakeLists.txt, + Tests/Dependency/CMakeLists.txt, + Tests/Dependency/Case4/CMakeLists.txt, + Tests/Dependency/Case4/bar.c, Tests/Dependency/Case4/foo.c, + Tests/ExportImport/Export/CMakeLists.txt, + Tests/ExportImport/Export/testLib4lib.c, + Tests/ExportImport/Export/testLib4libdbg.c, + Tests/ExportImport/Export/testLib4libdbg1.c, + Tests/ExportImport/Export/testLib4libopt.c, + Tests/ExportImport/Export/testLib4libopt1.c, + Tests/ExportImport/Import/CMakeLists.txt, + Tests/ExportImport/Import/imp_testExe1.c, + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt, + Tests/ReturnTest/CMakeLists.txt, + Tests/ReturnTest/include_return.cmake, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: 2.6.2 rc 2 merge from + main tree + +2008-09-02 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-09-02 14:47 hoffman + + * Modules/Platform/Windows-icl.cmake: BUG: make sure the intel + compiler uses the intel linker + +2008-09-02 14:46 hoffman + + * Modules/NSIS.template.in: BUG: remove Catalan as 2.29 does not + have it + +2008-09-02 12:43 david.cole + + * Source/cmMakefileExecutableTargetGenerator.cxx: BUG: Fix issue + #3648 - make sure CMake reruns if a Bundle application's + directory is removed or if it's Info.plist file disappears since + those elements are put in place at CMake configure time. + +2008-09-02 12:06 hoffman + + * Modules/MacOSXFrameworkInfo.plist.in: file + MacOSXFrameworkInfo.plist.in was added on branch CMake-2-6 on + 2008-09-03 13:43:16 +0000 + +2008-09-02 12:06 king + + * Modules/MacOSXFrameworkInfo.plist.in, + Source/cmGlobalXCodeGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.h, Source/cmTarget.cxx: + ENH: Create Info.plist files in OS X Frameworks + + A Mac OS X Framework should provide a Resources/Info.plist file + containing meta-data about the framework. This change generates + a default Info.plist for frameworks and provides an interface for + users to customize it. + +2008-09-02 11:06 david.cole + + * Tests/BundleTest/: BundleLib.cxx, BundleTest.cxx, CMakeLists.txt: + ENH: Add indirect dependency to Carbon and call a Carbon function + from executable. This will allow detecting broken dependency + chaining for '-framework blah' style lib dependencies. + +2008-09-02 10:27 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmXCodeObject.cxx, + cmXCodeObject.h: ENH: Simplify string attributes in Xcode + generator + + This change cleans up the implementation of cmXCodeObject to + avoid un-escaping and re-escaping string values. There is no + need to store the string in escaped form. It can be escaped once + when it is printed out to the generated project file. + +2008-09-01 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-31 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-30 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-30 10:32 hoffman + + * Tests/Unset/unset.c: file unset.c was added on branch CMake-2-6 + on 2009-02-04 16:44:19 +0000 + +2008-08-30 10:32 king + + * Tests/Unset/: CMakeLists.txt, unset.c, unset.cc: BUG: Fix Unset + test on VS 6 + + Visual Studio 6 does not recognize .cc as a C++ extension by + default. Simplify the test to be C-only and use a .c extension. + +2008-08-30 09:39 clinton + + * Modules/FindQt4.cmake: + ENH: For #7433, add documentation that directories also can be + specified to update the translation files. + +2008-08-29 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-29 13:22 king + + * Source/cmComputeLinkDepends.cxx: BUG: Link flags should still be + chained + + The recent fix to avoid including flags in dependency inferral + also dropped them from chaining of dependencies through targets. + This fix restores chaining of flags through known dependency + lists while still leaving them out of inferred dependency lists. + +2008-08-28 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-28 22:25 king + + * Source/cmComputeLinkDepends.cxx: BUG: A -framework Foo is also a + lib + +2008-08-28 22:12 king + + * Source/cmComputeLinkDepends.cxx: BUG: Fix previous fix. + +2008-08-28 22:07 king + + * Source/cmComputeLinkDepends.cxx: BUG: When recognizing flags on + link lines, we must still treat -l as a library. + +2008-08-27 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-27 12:53 david.cole + + * Tests/BundleTest/: CMakeLists.txt, BundleSubDir/CMakeLists.txt: + ENH: Changes that allow configuring/building BundleTest test + separately from the main CMake build. (Eliminate reference to + CMake_SOURE_DIR.) + +2008-08-27 10:35 king + + * Source/cmComputeLinkDepends.h: COMP: Do not use private typedef + from outside class. + +2008-08-27 10:21 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h: ENH: + New link line item ordering algorithm + + This change introduces a new algorithm for link line + construction. The order it computes always begins with the exact + link line specified by the user. Dependencies of items specified + by the user are tracked, and those that are not already + satisified by the line are appended to it at the end with minimal + repeats. This restores the behavior of CMake 2.4 and below while + still fixing some of its bugs. See issue #7546. + +2008-08-27 10:21 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h: BUG: + Do not infer dependencies of link flags + + In cmComputeLinkDepends link items that look like flags (starting + in '-') should not be included in dependency inferral. They are + not libraries and therefore have no dependencies. They should + just be passed through to the final link line unchanged. See + issue #7546. + +2008-08-27 10:21 king + + * Source/cmComputeLinkDepends.cxx: BUG: Treat empty config name as + no configuration + + In cmComputeLinkDepends we should treat an empty configuration + name as equivalent to no specific configuration at all. + +2008-08-26 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-26 16:43 david.cole + + * Modules/NSIS.template.in: BUG: Do not use "Default" as a + language, remove 2nd occurence of "English", and remove three + other languages not supported by older versions of NSIS. Tested + with version 2.18 of NSIS on gaia.kitware. + +2008-08-26 16:04 clinton + + * Modules/FindQt4.cmake: + ENH: Add comments about pre-processor defines and moc. + +2008-08-26 12:54 david.cole + + * Source/cmStringCommand.cxx: BUG: Correct typo in error message. + +2008-08-26 11:50 clinton + + * Modules/FindQt4.cmake: + ENH: Use COMPILE_DEFINTIONS instead of DEFINITIONS. + +2008-08-26 11:22 clinton + + * Modules/FindQt4.cmake: + ENH: Add -DWIN32 for moc on Windows. Final fix for #7465. + +2008-08-25 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-25 19:41 clinton + + * Modules/FindQt4.cmake: + ENH: Add -D preprocessor defines to the moc commands. + Needed to fix #7465. + +2008-08-25 10:31 hoffman + + * Source/cmUnsetCommand.cxx: file cmUnsetCommand.cxx was added on + branch CMake-2-6 on 2009-02-04 16:44:17 +0000 + +2008-08-25 10:31 hoffman + + * Source/cmUnsetCommand.h: file cmUnsetCommand.h was added on + branch CMake-2-6 on 2009-02-04 16:44:17 +0000 + +2008-08-25 10:31 king + + * Docs/cmake-syntax.vim, Source/cmBootstrapCommands.cxx, + Source/cmCacheManager.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmSetCommand.h, + Source/cmUnsetCommand.cxx, Source/cmUnsetCommand.h, + Tests/CMakeLists.txt, Tests/Unset/CMakeLists.txt, + Tests/Unset/unset.cc: ENH: Add unset() command. + + This introduces the unset() command to make it easy to unset + CMake variables, environment variables, and CMake cache + variables. Previously it was not even possible to unset ENV or + CACHE variables (as in completely remove them). Changes based on + patch from Philip Lowman. See issue #7507. + +2008-08-24 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-23 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-23 13:47 david.cole + + * Source/cmFileCommand.h: BUG: Correct typo in documentation: or -> + of + +2008-08-23 13:33 david.cole + + * Source/: cmFileCommand.cxx, cmFileCommand.h: ENH: Add the + RECURSE_SYMLINKS_OFF flag to the FILE GLOB_RECURSE command. + Exposes the recently added kwsys capability that prevents + recursing through symlinks to CMake scripts. + +2008-08-22 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-22 06:56 hoffman + + * Modules/NSIS.template.in: BUG: remove extension from inserts + +2008-08-22 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-21 15:13 hoffman + + * Modules/NSIS.template.in: ENH: sort languages and use list from + NSIS 2.22 + +2008-08-21 13:55 hoffman + + * Modules/NSIS.template.in: BUG: remove some languages that are not + supported in older versions of NSIS + +2008-08-21 09:54 king + + * Source/cmDocumentVariables.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt: ENH: Allow + custom limit on object file path length + + Some native build tools, particularly those for cross compiling, + may have a limit on the length of the full path to an object file + name that is lower than the platform otherwise supports. This + change allows the limit to be set by the project toolchain file + through the variable CMAKE_OBJECT_PATH_MAX. + +2008-08-21 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-20 18:00 hoffman + + * Modules/NSIS.template.in: ENH: try to fix error + +2008-08-20 13:24 david.cole + + * Source/: CTest/cmCTestCoverageHandler.cxx, kwsys/Glob.cxx, + kwsys/Glob.hxx.in: ENH: Add RecurseThroughSymlinks data member to + kwsys::Glob. Allows recursive globs to skip symlinks when + necessary. Default to true for backwards compatible behavior. + Used from the ctest coverage handler to avoid recursing through + the '/Applications' directory on the Mac looking for *.da + files... Should fix the hangs reported recently by Mac CMake + dashboard submitters. + +2008-08-20 11:45 king + + * Source/cmIfCommand.cxx, Source/cmIfCommand.h, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt: ENH: Add + if(TARGET) command + + It is useful to be able to test if a target has been created. + Often targets are created only inside conditions. Rather than + storing the result of the condition manually for testing by other + parts of the project, it is much easier for the other parts to + just test for the target's existence. This will also be useful + when find-modules start reporting results with IMPORTED targets + and projects want to test if a certain target is available. + +2008-08-20 09:57 king + + * Source/kwsys/ProcessUNIX.c: BUG: Handle case when select() lies + + According to "man select" on Linux it is possible that select() + lies about data being ready on a pipe in some subtle cases. We + deal with this by switching to non-blocking i/o and checking for + EAGAIN. See issue #7180. + +2008-08-20 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-19 16:40 hoffman + + * Source/CursesDialog/cmCursesStringWidget.cxx: BUG: fix for 6462, + delete key should delete the current char + +2008-08-19 15:59 hoffman + + * Modules/FindOpenGL.cmake: BUG: fix for bug 7104 look for GL in + X11R6 dirs + +2008-08-19 15:55 hoffman + + * Source/cmSystemTools.cxx: BUG: fix for 7045, use gcc for .m + +2008-08-19 15:42 hoffman + + * Source/: cmDocumentation.cxx, cmDocumentation.h, cmakemain.cxx: + BUG: fix 6647 arguments after -E should not be parsed by CMake + +2008-08-19 15:07 hoffman + + * Source/cmGlobalVisualStudio7Generator.cxx: BUG: fix for 6794 + support for LTCG WholeProgramOptimization, which is not available + in VS 8 and newer. + +2008-08-19 14:28 hoffman + + * Modules/FindPHP4.cmake: BUG: fix for bug 6775, FindPHP4 did not + honor required + +2008-08-19 14:23 hoffman + + * Modules/Platform/Darwin.cmake: BUG: fix for 6710 + CMAKE_OSX_SYSROOT should be a PATH + +2008-08-19 14:07 hoffman + + * Modules/NSIS.template.in: BUG: fix for 7446 NSIS support for + other languages + +2008-08-19 13:59 hoffman + + * Utilities/Release/: create-cmake-release.cmake, + magrathea_release.cmake, upload_release.cmake, + v20n17_aix_release.cmake: ENH: check in current build scripts + +2008-08-19 13:48 hoffman + + * Source/cmGlobalGenerator.cxx: BUG: fix for 7496, do not just + report configure done when there is an error during configure + +2008-08-19 13:31 hoffman + + * Source/cmake.cxx: BUG: 7448 fix crash in ccmake when compiler is + changed + +2008-08-19 11:43 king + + * Tests/: CMakeLists.txt, test_clean.cmake.in: ENH: Add test_clean + target to wipe out tests + + We frequently need to wipe out all the CMake test build + directories in order to run tests from scratch. This change adds + a test_clean custom target to remove all these directories for + out-of-source builds. + +2008-08-19 11:43 king + + * Source/: cmSetPropertyCommand.cxx, + cmSetTargetPropertiesCommand.cxx, cmTarget.cxx, cmTarget.h: ENH: + Disallow link-type keywords in link interface + + The LINK_INTERFACE_LIBRARIES target property may not contain the + "debug", "optimized", or "general" keywords. These keywords are + supported only by the target_link_libraries (and link_libraries) + command and are not a generic library list feature in CMake. + When a user attempts to add one of these keywords to the property + value, we now produce an error message that refers users to + alternative means. + +2008-08-19 10:29 king + + * Source/cmTarget.cxx: ENH: Clarify link interface documentation + + The LINK_INTERFACE_LIBRARIES property does not apply for STATIC + libraries. The IMPORTED_LINK_INTERFACE_LIBRARIES property does + apply for STATIC libraries. State both explicitly in the + documentation. Also, clarify that the per-configuration version + of these properties completely overrids the generic version. + +2008-08-19 10:28 king + + * Source/cmMakefile.cxx: BUG: Linking to modules is for 2.2 compat + only + + The compatibility check to allow linking to modules should test + for CMake 2.2, not the unreleased 2.3. See issue #7500. + Furthermore, the message should be more clear about fixing the + code instead of setting CMAKE_BACKWARDS_COMPATIBILITY unless one + is just trying to build an existing project. + +2008-08-19 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-18 16:29 king + + * Source/: cmMakefile.cxx, cmMakefile.h, cmPolicies.cxx, + cmPolicies.h: ENH: Improve errors when a policy is REQUIRED + + In the future some policies may be set to REQUIRED_IF_USED or + REQUIRED_ALWAYS. This change clarifies the error messages users + receive when violating the requirements. + +2008-08-18 11:39 king + + * Source/cmAddLibraryCommand.cxx, Source/cmAddLibraryCommand.h, + Source/cmComputeLinkDepends.cxx, + Source/cmComputeLinkInformation.cxx, Source/cmLocalGenerator.cxx, + Source/cmTarget.cxx, Source/cmTarget.h, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Add UNKNOWN type for + IMPORTED libraries + + When creating an IMPORTED target for a library that has been + found on disk, it may not be known whether the library is STATIC + or SHARED. However, the library may still be linked using the + file found from disk. Use of an IMPORTED target is still + important to allow per-configuration files to be specified for + the library. + + This change creates an UNKNOWN type for IMPORTED library targets. + The IMPORTED_LOCATION property (and its per-config equivalents) + specifies the location of the library. CMake makes no + assumptions about the library that cannot be inferred from the + file on disk. This will help projects and find-modules import + targets found on disk or specified by the user. + +2008-08-18 11:26 king + + * Source/: cmLocalGenerator.cxx, cmTarget.cxx: STYLE: Convert + unused target type cases to default + + In switch statements that deal with only a few target types, use + a 'default' case for the remaining target types instead of + listing them explicitly. This will make it easier to add more + types in the future. + +2008-08-18 10:11 king + + * Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTargetLinkLibrariesCommand.h, + Tests/ExportImport/Export/CMakeLists.txt: ENH: Make link + interface mode more distinct + + Rename the recently added INTERFACE mode of the + target_link_libraries() command to LINK_INTERFACE_LIBRARIES. + This makes it much more distinct from a normal call to the + command, and clearly states its connection to the property of the + same name. Also require the option to appear immediately after + the target name to make it a mode rather than an option. + +2008-08-18 09:53 king + + * Source/cmCMakePolicyCommand.cxx, Source/cmCMakePolicyCommand.h, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: Add + cmake_policy(GET) command mode + + It is likely that projects or CMake modules in the future will + need to check the value of a policy setting. For example, if we + add a policy that affects the results of FindXYZ.cmake modules, + the module code will need to be able to check the policy. + +2008-08-18 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-17 05:38 alex + + * Modules/FindKDE4.cmake: BUG: fix closing ENDIF() + + Alex + +2008-08-17 05:11 alex + + * Modules/FindQt4.cmake: BUG: fix closing IF() + + Alex + +2008-08-17 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-16 19:11 alex + + * Modules/: FindKDE3.cmake, FindKDE4.cmake, FindQt3.cmake, + FindQt4.cmake: BUG: fix #7447, FindModulesExecuteAll test fails + if both Qt3 and KDE4 can be found in the system + + Qt3 and Qt4 cannot be used together in one project. Now Qt3/KDE3 + and Qt4/KDE4 handle the case that this is done nevertheless + properly, i.e. they fail with FATAL_ERROR if it was REQUIRED and + they fail with just MESSAGE(STATUS ...) and RETURN() if it was + not REQUIRED + + BUG: make FindQt4 error out with FATAL_ERROR also if it was + searched QUIET + + Alex + +2008-08-16 18:06 hoffman + + * Tests/ReturnTest/include_return.cmake: file include_return.cmake + was added on branch CMake-2-6 on 2008-09-03 13:43:31 +0000 + +2008-08-16 18:06 alex + + * Source/cmReturnCommand.h, Tests/ReturnTest/CMakeLists.txt, + Tests/ReturnTest/include_return.cmake: STYLE: extend + documentation for RETURN() a bit ENH: add a test for calling + RETURN() in an included file + + Alex + +2008-08-16 17:14 alex + + * Modules/FindQt3.cmake: STYLE: remove some unnecessary lines + STYLE: everything uppercase in this file + + Alex + +2008-08-16 16:58 alex + + * Source/cmGlobalKdevelopGenerator.cxx: BUG: fix #7477, set + VERBOSE=1 in the kdevelop setting for the environment, not + together with the make executable + + Alex + +2008-08-16 16:48 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: STYLE: remove some + commented code + + Alex + +2008-08-16 16:33 alex + + * Source/cmGlobalKdevelopGenerator.cxx: BUG: fix #7471, only put + build directories and CMakeFiles/ in the blacklist + + Alex + +2008-08-16 07:38 alex + + * Modules/FindX11.cmake: ENH: also search in /usr/X11R7, remove + /usr/lib and /usr/local/lib, they are part of the standard search + paths (partly sync wih KDE) + + Alex + +2008-08-16 07:29 alex + + * Modules/FindTIFF.cmake: ENH: add more names for libtiff, mark + TIFF_INCLUDE_DIR and TIFF_LIBRARY as advanced (sync with KDE) + + Alex + +2008-08-16 07:22 alex + + * Modules/FindLibXml2.cmake: ENH: also search for xmllint, which + comes with libxml2 (sync with FindLibXml2.cmake from KDE) + + Alex + +2008-08-16 07:10 alex + + * Modules/FindPNG.cmake: ENH: add more names of linpng (sync with + the KDE version) + + Alex + +2008-08-16 07:01 alex + + * Modules/UsePkgConfig.cmake: STYLE: /usr/local/bin is in the path + anyway STYLE: this file is mostly uppercase commands, so make all + commands uppercase ENH: add a status message in case pkgconfig + didn't find the package (sync with the one from KDE) + + Alex + +2008-08-16 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-15 15:07 hoffman + + * Modules/Platform/Windows-NMcl.cmake: ENH: add platform file for + bounds checker + +2008-08-15 09:47 king + + * Source/cmSystemTools.cxx: COMP: Work-around bogus compiler + warning. + +2008-08-15 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-14 15:34 alex + + * Modules/: FindLua50.cmake, FindLua51.cmake: BUG: fix + documentation, the variables are named LUA50_FOUND and + LUA51_FOUND (in all released versions) + + Alex + +2008-08-14 09:53 king + + * Source/: cmFileCommand.cxx, cmSystemTools.cxx, cmSystemTools.h: + ENH: Inform user when RPATH or RUNPATH is removed + +2008-08-14 09:53 king + + * Source/cmSystemTools.cxx: BUG: Update both RPATH and RUNPATH + entries + + During installation the RPATH and RUNPATH entries of ELF binaries + are edited to match the user specification. Usually either one + entry is present or both entries refer to the same string + literal. In the case that they are both present and refer to + separate string literals we need to update both. I have never + seen this case in practice, but we should do this just in case. + +2008-08-14 09:53 king + + * Source/cmSystemTools.cxx: BUG: Remove both RPATH and RUNPATH + entries + + Removal of the RPATH and RUNPATH from ELF binaries must work when + both entries are present. Both entries should be removed. + Previously only one would be removed and the other would be + blanked because it pointed at the same string which was zeroed. + This fixes gentoo bug number 224901. + +2008-08-14 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-13 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-12 19:01 king + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: ENH: + Teach find_package about lib64 paths + + When find_package is about to look in /lib, search first + in /lib64 in cases that find_library would use lib64 + paths. + +2008-08-12 17:27 hoffman + + * Tests/ExportImport/Export/testLib4libdbg1.c: file + testLib4libdbg1.c was added on branch CMake-2-6 on 2008-09-03 + 13:43:28 +0000 + +2008-08-12 17:27 hoffman + + * Tests/ExportImport/Export/testLib4libopt1.c: file + testLib4libopt1.c was added on branch CMake-2-6 on 2008-09-03 + 13:43:28 +0000 + +2008-08-12 17:27 king + + * Tests/ExportImport/Export/: CMakeLists.txt, testLib4libdbg1.c, + testLib4libopt1.c: BUG: Fix ExportImport test on VS6 + + Visual Studio 6 does not support per-target object files, so just + use two separate source file names in this case. + +2008-08-12 07:01 alex + + * Source/cmakemain.cxx: STYLE: one ifdef block less, the + documentation object can be created a bit later + + Alex + +2008-08-12 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-11 16:23 hoffman + + * Tests/ExportImport/Export/testLib4lib.c: file testLib4lib.c was + added on branch CMake-2-6 on 2008-09-03 13:43:28 +0000 + +2008-08-11 16:23 hoffman + + * Tests/ExportImport/Export/testLib4libdbg.c: file testLib4libdbg.c + was added on branch CMake-2-6 on 2008-09-03 13:43:28 +0000 + +2008-08-11 16:23 hoffman + + * Tests/ExportImport/Export/testLib4libopt.c: file testLib4libopt.c + was added on branch CMake-2-6 on 2008-09-03 13:43:28 +0000 + +2008-08-11 16:23 king + + * Tests/ExportImport/: Export/CMakeLists.txt, Export/testLib4lib.c, + Export/testLib4libdbg.c, Export/testLib4libopt.c, + Import/CMakeLists.txt, Import/imp_testExe1.c: ENH: Test + target_link_libraries INTERFACE option + +2008-08-11 16:23 king + + * Source/: cmTargetLinkLibrariesCommand.cxx, + cmTargetLinkLibrariesCommand.h: ENH: Simple specification of link + interfaces + + Create an INTERFACE option to the target_link_libraries command + to help set the LINK_INTERFACE_LIBRARIES and + LINK_INTERFACE_LIBRARIES_DEBUG properties. This will help users + specify link interfaces using variables from Find*.cmake modules + that include the 'debug' and 'optimized' keywords. + +2008-08-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-07 17:51 king + + * Source/: cmTargetLinkLibrariesCommand.cxx, + cmTargetLinkLibrariesCommand.h: ENH: Tolerate repeated link + library types + + The "debug", "optimized", and "general" link library type + specifier arguments to the target_link_library commands are + sometimes repeated in user code due to variable expansion and + other complications. Instead of silently accepting the + duplicates and trying to link to a bogus library like + "optimized.lib", warn and ignore the earlier specifiers. + +2008-08-07 17:12 king + + * Source/cmAddSubDirectoryCommand.h: ENH: Clarify documentation of + EXCLUDE_FROM_ALL + + The add_subdirectory() command's EXCLUDE_FROM_ALL option does not + override inter-target dependencies. This change clarifies the + documentation accordingly. + +2008-08-07 10:13 hoffman + + * Tests/Dependency/Case4/CMakeLists.txt: file CMakeLists.txt was + added on branch CMake-2-6 on 2008-09-03 13:43:27 +0000 + +2008-08-07 10:13 hoffman + + * Tests/Dependency/Case4/bar.c: file bar.c was added on branch + CMake-2-6 on 2008-09-03 13:43:27 +0000 + +2008-08-07 10:13 hoffman + + * Tests/Dependency/Case4/foo.c: file foo.c was added on branch + CMake-2-6 on 2008-09-03 13:43:27 +0000 + +2008-08-07 10:13 king + + * Tests/Dependency/: CMakeLists.txt, Case4/CMakeLists.txt, + Case4/bar.c, Case4/foo.c: ENH: Test fake circular dependency case + + A recent change fixed a case in which CMake incorrectly diagnosed + a circular dependency involving a non-linkable executable target. + This adds a test for that case. + +2008-08-07 09:09 king + + * Modules/: CMakeCCompilerABI.c, CMakeCCompilerId.c.in, + CMakeCXXCompilerABI.cpp, CMakeCXXCompilerId.cpp.in, + CheckTypeSizeC.c.in, TestEndianess.c.in: ENH: Improve robustness + of compiler INFO strings + + Compiler INFO strings built at preprocessing time encode + information that must appear as a string literal in the resulting + binary. We must make sure the strings appear in the final binary + no matter what compiler and flags are used. The previous + implementation worked in most places but failed with the GNU + linker's --gc-sections option which managed to discard the + string. Instead we make the program return value depend on an + element of the string indexed by a runtime program parameter, + which absolutely requires the string to be present. + +2008-08-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-06 17:48 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h, + cmComputeTargetDepends.cxx, cmComputeTargetDepends.h: BUG: Avoid + bogus dependency on executable targets + + When an executable target within the project is named in + target_link_libraries for another target, but the executable does + not have the ENABLE_EXPORTS property set, then the executable + cannot really be linked. This is probably a case where the user + intends to link to a third-party library that happens to have the + same name as an executable target in the project (or else will + get an error at build time). We need to avoid making the other + target depend on the executable target incorrectly, since the + executable may actually want to link to that target and this is + not a circular depenency. + +2008-08-06 17:48 king + + * Source/cmComputeTargetDepends.cxx: ENH: Improve readability of + circular depends error + + When reporting the dependencies in a strongly connected component + quote the target names to make the message more readable no + matter the target name. + +2008-08-06 17:48 king + + * Source/cmGlobalGenerator.cxx: BUG: Fix crash on circular target + dependencies + + After reporting an error about circular target dependencies do + not try to continue generation because the dependency computation + object is not in a useful state. + +2008-08-06 17:43 alex + + * Tests/CMakeLists.txt: BUG: fix endif() + + Alex + +2008-08-06 17:04 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/FindImageMagick.cmake, Modules/FindKDE3.cmake, + Modules/Platform/Darwin.cmake, + Modules/Platform/Linux-Intel-C.cmake, + Modules/Platform/Linux-Intel-CXX.cmake, Source/CMakeLists.txt, + Source/cmELF.cxx, Source/cmExtraEclipseCDT4Generator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalXCodeGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.h, + Source/cmSourceFileLocation.cxx, Source/cmSourceFileLocation.h, + Source/cmTarget.cxx, Source/cmTarget.h, Source/cmake.cxx, + Source/cmake.h, Source/cmakemain.cxx, + Source/CTest/cmCTestCoverageHandler.cxx, + Tests/CustomCommand/CMakeLists.txt: ENH: merge in fixes from main + tree 2.6.2 RC 1 + +2008-08-06 16:16 alex + + * Tests/CMakeLists.txt: ENH: add simple tests to test that the + extra generators don't crash + + Alex + +2008-08-06 16:05 king + + * Modules/Platform/: Linux-Intel-C.cmake, Linux-Intel-CXX.cmake: + ENH: Add preprocessor and assembly rules for Intel + +2008-08-06 15:35 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: BUG: don't crash in the + generator is EXECUTABLE_OUTPUT_PATH or LIBRARY_OUTPUT_PATH are + empty + + Alex + +2008-08-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-05 16:06 alex + + * Modules/FindKDE3.cmake: BUG: fix #7452, bad closing ENDIF() + statement + + Alex + +2008-08-05 13:27 king + + * Tests/CustomCommand/CMakeLists.txt: ENH: Test relative path + custom command output + + As of CMake 2.6 a custom command output specified by relative + path is placed in the build tree. This adds a test to make sure + other references to the output are hooked up correctly, fixing a + bug in CMake 2.6.1. + +2008-08-05 13:27 king + + * Source/cmLocalGenerator.cxx: BUG: Custom command depends may + match sources + + Custom command dependencies that are not full paths or targets + may also match source files. When one does, the full information + about the source file's location and name may be used. This + fixes the case when a custom commands depends by relative path on + a source file generated by another custom command specifying its + output by relative path. + +2008-08-05 13:27 king + + * Source/: cmSourceFileLocation.cxx, cmSourceFileLocation.h: BUG: + Fix matching of ambiguous sf extensions. + + A name with an ambiguous extension may only match an unambiguous + name that is extended by one of the fixed set of extensions tried + when finding the source file on disk. This rule makes matching + of source files with ambiguous extensions much less aggressive + but still sufficient. + +2008-08-05 09:55 king + + * Source/cmLocalGenerator.cxx: BUG: Do not convert RPATH entries to + full path. + + When generating RPATH entries on the link line using a repeated + linker flag (-R ... -R ... style) do not convert individual + entries to a full path. We need to preserve what the user + requested. + +2008-08-05 09:55 king + + * Source/cmLocalGenerator.cxx: BUG: Fix escaping in link scripts + + When generating escape sequences for the native build tool do not + put in Makefile escapes for paths generated into link scripts. + This fixes putting "$ORIGIN" into the RPATH, and probably some + other subtle problems. + +2008-08-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-04 11:37 king + + * Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeFortranInformation.cmake, + Source/cmMakefileLibraryTargetGenerator.cxx: ENH: Build large + archives incrementally + + Creation of archive libraries with the unix 'ar' tool should be + done incrementally when the number of object files is large. + This avoids problems with the command line getting too many + arguments. + +2008-08-04 09:38 king + + * Source/cmELF.cxx: BUG: Fix operator precedence error in cmELF + + When attempting to load the RPATH out of a non-ELF file cmELF + would crash because the check for a valid file was done with in + correct operator precedence. See bug#7392. + +2008-08-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-08-01 20:38 miguelf + + * Modules/FindImageMagick.cmake: STYLE: Fixed module list in + documentation; Magick should be MagickCore. + +2008-08-01 12:10 david.cole + + * Source/CMakeLists.txt: BUG: Improve fix for issue #7058 - + comsuppd did not yet exist in VC6. + +2008-08-01 11:03 hoffman + + * CMakeLists.txt: ENH: final 2.6.1 + +2008-08-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-31 14:16 david.cole + + * Source/CTest/cmCTestCoverageHandler.cxx: BUG: Fix issue#4792 - + improve verbose and log output when ctest cannot find a file + during coverage analysis. + +2008-07-31 13:46 david.cole + + * Source/CMakeLists.txt: BUG: Fix issue #7058 - link the commsup + lib explicitly for use on some Visual Studio + SDK combinations + +2008-07-31 13:36 hoffman + + * Source/cmake.cxx: BUG: fix for 7426 bad check for cpack + +2008-07-31 12:54 david.cole + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Fix issue #5773 - + add table entry to map /W0 to WarningLevel="0" + +2008-07-31 12:00 hoffman + + * Tests/BundleGeneratorTest/CMakeLists.txt: ENH: fix for branch + +2008-07-31 11:52 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/InstallRequiredSystemLibraries.cmake, + Source/cmCallVisualStudioMacro.cxx, + Source/cmCallVisualStudioMacro.h, Source/cmGlobalGenerator.cxx, + Source/cmGlobalVisualStudioGenerator.cxx, Source/cmake.cxx, + Tests/CMakeLists.txt, Tests/BundleGeneratorTest/BundleIcon.icns, + Tests/BundleGeneratorTest/CMakeLists.txt, + Tests/BundleGeneratorTest/Executable.cxx, + Tests/BundleGeneratorTest/Info.plist, + Tests/BundleGeneratorTest/Library.cxx, + Tests/BundleGeneratorTest/StartupCommand: ENH: merge in stuff + from cvs head RC 16 + +2008-07-31 11:28 david.cole + + * Source/CTest/cmCTestCoverageHandler.cxx: BUG: Fix issue #4971 - + use lower case when comparing file names from gcov output on + _WIN32 since sometimes the drive letters have different case. + +2008-07-31 10:54 hoffman + + * Tests/CMakeLists.txt: ENH: fix build with Xcode project was + missing + +2008-07-31 10:33 hoffman + + * Source/: cmMakefile.cxx, cmake.cxx, cmake.h, cmakemain.cxx: ENH: + add a --trace option + +2008-07-31 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-30 16:36 hoffman + + * Tests/BundleGeneratorTest/BundleIcon.icns: file BundleIcon.icns + was added on branch CMake-2-6 on 2008-07-31 15:52:24 +0000 + +2008-07-30 16:36 hoffman + + * Tests/BundleGeneratorTest/CMakeLists.txt: file CMakeLists.txt was + added on branch CMake-2-6 on 2008-07-31 15:52:25 +0000 + +2008-07-30 16:36 hoffman + + * Tests/BundleGeneratorTest/Executable.cxx: file Executable.cxx was + added on branch CMake-2-6 on 2008-07-31 15:52:25 +0000 + +2008-07-30 16:36 hoffman + + * Tests/BundleGeneratorTest/Info.plist: file Info.plist was added + on branch CMake-2-6 on 2008-07-31 15:52:25 +0000 + +2008-07-30 16:36 hoffman + + * Tests/BundleGeneratorTest/Library.cxx: file Library.cxx was added + on branch CMake-2-6 on 2008-07-31 15:52:25 +0000 + +2008-07-30 16:36 hoffman + + * Tests/BundleGeneratorTest/StartupCommand: file StartupCommand was + added on branch CMake-2-6 on 2008-07-31 15:52:25 +0000 + +2008-07-30 16:36 david.cole + + * Tests/: CMakeLists.txt, BundleGeneratorTest/BundleIcon.icns, + BundleGeneratorTest/CMakeLists.txt, + BundleGeneratorTest/Executable.cxx, + BundleGeneratorTest/Info.plist, BundleGeneratorTest/Library.cxx, + BundleGeneratorTest/StartupCommand: ENH: Add test for the new + CPack BundleGenerator. Thanks to Tim Shead for the patch. See + issue #7170 for more details. + +2008-07-30 15:43 david.cole + + * Modules/InstallRequiredSystemLibraries.cmake: BUG: Fix issue + #6610. Use 64-bit system binaries when using the 64-bit MSVC + compiler. Thanks to Clinton Stimpson for the patch. + +2008-07-30 15:26 david.cole + + * Source/: cmCallVisualStudioMacro.cxx, cmCallVisualStudioMacro.h, + cmGlobalVisualStudioGenerator.cxx, cmake.cxx: BUG: Fix issue + #7088 - do not emit error messages when attempts to run Visual + Studio macros fail. You can still get the error output as + messages if you want using --debug-output from the cmake command + line. + +2008-07-30 15:18 hoffman + + * Source/cmGlobalGenerator.cxx: BUG: fix for bug 7427, preinstall + target name hard coded + +2008-07-30 14:54 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindBoost.cmake, + Modules/FindImageMagick.cmake, Modules/FindJPEG.cmake, + Source/cmComputeLinkDepends.cxx, Source/cmComputeLinkDepends.h, + Source/cmComputeLinkInformation.cxx, Source/cmLocalGenerator.cxx, + Source/cmOrderDirectories.cxx, Source/cmOrderDirectories.h, + Source/cmSourceFileLocation.cxx, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.h: ENH: merge in from + main tree RC 15 + +2008-07-30 13:28 david.cole + + * Source/CPack/: cmCPackPackageMakerGenerator.cxx, + cmCPackPackageMakerGenerator.h: BUG: Fix issue #7414 - do not + crash when given components with circular dependencies. Thanks to + Doug Gregor for the patch. + +2008-07-30 11:06 king + + * Source/cmSourceFileLocation.cxx: ENH: Recognize src extensions of + all enabled langs + + For historical reasons we still support naming of source files + without their extension. Sources without known extensions are + located on disk by iterating through a fixed set of possible + extensions. We now want users to always specify the extension, + so the fixed set will not be expanded and is preserved for + compatibility with older projects. + + This change adds recognition of extensions of all enabled + languages to avoid checking the disk for files whose extensions + are unambiguous but not in the original fixed set. + +2008-07-30 11:06 king + + * Source/cmSourceFileLocation.cxx: BUG: Avoid double-slash in check + for source file + +2008-07-30 10:44 hoffman + + * Source/cmLocalGenerator.cxx: BUG: fix for bug 7421, fortran did + not get arch flags on the mac + +2008-07-30 10:23 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h, + cmComputeLinkInformation.cxx: BUG: Preserve all non-targets on + user link lines + + In CMake 2.4 the generated link line for a target always + preserved the originally specified libraries in their original + order. Dependencies were satisfied by inserting extra libraries + into the line, though it had some bugs. In CMake 2.6.0 we + preserved only the items on the link line that are not known to + be shared libraries. This reduced excess libraries on the link + line. However, since we link to system libraries (such as + /usr/lib/libm.so) by asking the linker to search (-lm), some + linkers secretly replace the library with a static library in + another implicit search directory (developers can override this + by using an imported target to force linking by full path). When + this happens the order still matters. + + To avoid this and other potential subtle issues this commit + restores preservation of all non-target items and static library + targets. This will create cases of unnecessary, duplicate shared + libraries on the link line if the user specifies them, but at + least it will work. In the future we can attempt a more advanced + analysis to safely remove duplicate shared libraries from the + link line. + +2008-07-30 09:25 king + + * Source/cmComputeLinkDepends.cxx: BUG: Preserve shared lib order + for 2.4 compatibility + + We preserve the order and multiplicity of libraries directly + linked by a target as specified by the user. Items known to be + shared libraries may be safely skipped because order preservation + is only needed for static libraries. However, CMake 2.4 did not + skip shared libs, so we do the same when in 2.4 compatibility + mode. + +2008-07-30 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-29 16:41 hoffman + + * Modules/FindJPEG.cmake: BUG: #7416 fix error when jpeg is not + found + +2008-07-29 14:57 king + + * Source/: cmComputeLinkInformation.cxx, cmOrderDirectories.cxx, + cmOrderDirectories.h: ENH: Warn when system libraries may be + hidden. + + We never explicitly specify system library directories in linker + or runtime search paths. Furthermore, libraries in these + directories are always linked by asking the linker to search for + them. We need to generate a warning when explicitly specified + search directories contain files that may hide the system + libraries during the search. + +2008-07-29 14:01 king + + * Source/: cmComputeLinkInformation.cxx, cmOrderDirectories.cxx, + cmOrderDirectories.h: ENH: Provide context in path ordering + warnings + +2008-07-29 14:00 king + + * Source/cmOrderDirectories.cxx: STYLE: Fix typo in comment in + cmOrderDirectories + +2008-07-29 10:51 hoffman + + * Source/cmComputeLinkInformation.cxx: ENH: do not depend on files + that do not exist + +2008-07-29 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-28 15:40 dgregor + + * Modules/FindBoost.cmake: BUG: Be more careful with + Boost_MINOR_VERSION in FindBoost module + +2008-07-28 14:33 dgregor + + * Modules/FindBoost.cmake: BUG: Work around Boost 1.36.0 bug fix on + Darwin by setting the mangled compiler name to -xgccVERSION + +2008-07-28 11:31 hoffman + + * CMakeLists.txt, CTestConfig.cmake, ChangeLog.manual, + DartConfig.cmake, Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, Source/cmPolicies.cxx, + Source/cmPolicies.h, Source/cmTarget.cxx, Source/cmTarget.h: ENH: + merge in policy 0008 and cdash direct submission + +2008-07-28 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-27 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-26 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-25 23:23 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindJNI.cmake, + Source/cmSourceFileLocation.cxx: ENH: merge in from main tree and + fix bug for flex and yacc stuff in SecondLife + +2008-07-25 18:00 hoffman + + * Source/cmSourceFileLocation.cxx: BUG: fix source file extension + bug that broke Second life build + +2008-07-25 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-24 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-23 12:59 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h, cmPolicies.cxx, cmPolicies.h, + cmTarget.cxx, cmTarget.h: ENH: Support full-path libs w/out valid + names. + + This change introduces policy CMP0008 to decide how to treat full + path libraries that do not appear to be valid library file names. + Such libraries worked by accident in the VS IDE and Xcode + generators with CMake 2.4 and below. We support them in CMake + 2.6 by introducing this policy. See policy documentation added + by this change for details. + +2008-07-23 12:19 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h: ENH: Skip libs in known dirs for + CMP0003 warnings. + + Sometimes we ask the linker to search for a library for which the + path is known but for some reason cannot be specified by full + path. In these cases do not include the library in CMP0003 + warnings because we know the extra paths are not needed for it. + +2008-07-23 02:47 miguelf + + * Modules/FindImageMagick.cmake: ENH: Updated FindImageMagick to: - + Find newer additions such as animate, compare, etc. - Find + development api: Magick++, MagickCore, MagickWand - Use + FindPackageHandleStandardArgs to output standard messages. + +2008-07-23 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-22 14:04 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CheckFortranFunctionExists.cmake, Modules/FindBLAS.cmake, + Modules/FindLAPACK.cmake, Modules/FindMPI.cmake, + Modules/FindwxWidgets.cmake, Source/cmComputeLinkInformation.cxx, + Source/cmDocumentVariables.cxx, Source/cmDocumentation.cxx, + Source/cmDocumentationFormatter.cxx, + Source/cmDocumentationFormatterHTML.cxx, + Source/cmLocalGenerator.cxx, + Source/CPack/cmCPackBundleGenerator.cxx: ENH: merge in changes + from main tree for RC12 + +2008-07-22 13:34 hoffman + + * Modules/: FindBLAS.cmake, FindLAPACK.cmake, FindOpenSSL.cmake: + ENH: change to correct line feed + +2008-07-22 13:32 hoffman + + * Source/cmLocalGenerator.cxx: COMP: fix compiler warning and + follow style + +2008-07-22 07:15 alin.elena + + * Modules/: CheckFortranFunctionExists.cmake, FindBLAS.cmake, + FindLAPACK.cmake: + ENH: FindBLAS.cmake, FindLAPACK.cmake modules were redesigned so + now you have three new variables BLA_VENDOR (you can specify the + VENDOR), BLA_STATIC (gets the static version of libs), BLA_F95 + (gets the fortran 95 interface). BLA_VENDOR can be specified as + an environment variable. Intel mkls libs need FindThreads to be + found correctly so you will need to enable the C/CXX + +2008-07-22 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-21 17:52 alex + + * Source/: cmDocumentation.cxx, cmDocumentationFormatter.cxx, + cmDocumentationFormatterHTML.cxx: ENH: handle HTML documentation + for single items better: no warning about + ComputeSectionLinkPrefix, don't create an index for only one item + + Alex + +2008-07-21 15:44 hoffman + + * CTestConfig.cmake, DartConfig.cmake: ENH: switch to using cdash + for submissions + +2008-07-21 15:34 hoffman + + * Modules/: FindBLAS.cmake, FindLAPACK.cmake: ENH: get out of + module if no fortran + +2008-07-21 15:11 hoffman + + * Modules/: FindBLAS.cmake, FindLAPACK.cmake: ENH: this should fail + only if required is sent to find package + +2008-07-21 13:40 alin.elena + + * Modules/: FindBLAS.cmake, FindLAPACK.cmake: + ENH: checks if Fortran is enbaled. If not an error message is + produced. + +2008-07-21 10:07 king + + * Source/cmComputeLinkInformation.cxx: ENH: Support full-path libs + w/out extension in VS IDE. + + - This case worked accidentally in CMake 2.4, though not in + Makefiles. + - Some projects build only with the VS IDE on windows and have + this + mistake. + - Support them when 2.4 compatibility is enabled by adding the + extension. + +2008-07-21 04:56 alin.elena + + * Modules/: CheckFortranFunctionExists.cmake, FindLAPACK.cmake: + ENH: Modules/CheckFortranFunctionExists.cmake helps gfortran to + check the existence of a file ENH: Modules/FindLAPACK.cmake + returns the full list of libraries required to link against + Lapack + +2008-07-21 00:02 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-20 17:14 alex + + * Source/cmDocumentVariables.cxx: STYLE: fix #7146, add + documentation for + CMAKE[_SYSTEM]_(LIBRARY|PROGRAM|INCLUDE|PREFIX)_PATH variables + -moved CMAKE_CROSSCOMPILING from "Variables that modify + behaviour" to "variables that Provide Information", since it + should be used only for testing whether we are currently in cross + compiling mode, not for switching between the modes. + + Alex + +2008-07-20 15:50 alex + + * Modules/FindJNI.cmake: BUG: #7333, search dirs for Fedora + + Alex + +2008-07-20 15:45 alex + + * Modules/FindJNI.cmake: BUG: #7360: add support for FreeBSD BUG: + #7345: add support for ppc + + Alex + +2008-07-20 15:39 alex + + * Modules/FindJNI.cmake: BUG: fix #6416: provide JNI_LIBRARIES and + JNI_INCLUDE_DIRS + + Alex + +2008-07-19 23:52 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-18 23:52 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-18 16:12 david.cole + + * Source/CPack/cmCPackBundleGenerator.cxx: ENH: Improvements to the + bundle cpack generator from second patch attached to feature + request #7170. Thanks to Tim Shead. + +2008-07-18 11:24 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Utilities/cmcurl/CMakeLists.txt, + Utilities/cmcurl/CMake/CheckCSourceCompiles.cmake, + Utilities/cmcurl/CMake/CheckCSourceRuns.cmake, + Utilities/cmcurl/CMake/CurlCheckCSourceCompiles.cmake, + Utilities/cmcurl/CMake/CurlCheckCSourceRuns.cmake, + Utilities/cmcurl/CMake/OtherTests.cmake: ENH: merge in fix for + xcode 3.1 build from main tree + +2008-07-18 08:17 dgregor + + * Modules/FindMPI.cmake: ENH: Use the HINTS feature of find_library + to find the right libraries for MPI, and act a bit more + intelligently when MPI cannot be found. + +2008-07-17 23:52 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-17 15:19 king + + * Utilities/cmcurl/CMakeLists.txt: COMP: Check for -Wno-long-double + before using + + Older GCC on the Mac warns for use of long double, so we use + -Wno-long-double. Newer GCC on the Mac does not have this flag + and gives an error. We now check for the flag before using it. + See bug #7357. + +2008-07-17 15:19 hoffman + + * Utilities/cmcurl/CMake/CurlCheckCSourceCompiles.cmake: file + CurlCheckCSourceCompiles.cmake was added on branch CMake-2-6 on + 2008-07-18 15:24:26 +0000 + +2008-07-17 15:19 hoffman + + * Utilities/cmcurl/CMake/CurlCheckCSourceRuns.cmake: file + CurlCheckCSourceRuns.cmake was added on branch CMake-2-6 on + 2008-07-18 15:24:26 +0000 + +2008-07-17 15:19 king + + * Utilities/cmcurl/CMake/: CheckCSourceCompiles.cmake, + CheckCSourceRuns.cmake, CurlCheckCSourceCompiles.cmake, + CurlCheckCSourceRuns.cmake, OtherTests.cmake: ENH: Avoid cmcurl + CMake macro name conflicts + + Utilities/cmcurl/CMake provides macros with the same file names + and macro names as others in Modules, but with different + interfaces. We rename the curl ones to avoid conflict. + +2008-07-17 10:14 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, Tests/TryCompile/CMakeLists.txt: ENH: + merge in two bug fixes to 26 + +2008-07-16 23:52 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-16 11:03 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: BUG: Fix + try_compile during EnableLanguage + + - The source-file signature of try_compile looks up the + language + of the source file using the extension-to-language map so + that + it knows what language to enable in the generated project. + - This map needs to be filled before loading a file specified + by + CMAKE_USER_MAKE_RULES_OVERRIDE + CMAKE_USER_MAKE_RULES_OVERRIDE_ + so that the user file may call the try_compile() source-file + signature. + - It must still be re-filled after loading + CMakeInformation.cmake + in case the compiler- or platform-specific files added + anything. + - See bug #7340. + +2008-07-16 09:29 hoffman + + * Tests/TryCompile/CMakeLists.txt: ENH: remove test that does not + work on all compilers + +2008-07-15 23:52 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-15 11:35 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindBoost.cmake, + Source/cmGlobalXCodeGenerator.cxx, + Tests/TryCompile/CMakeLists.txt: ENH: merge in fix for xcode and + new version of find boost + +2008-07-15 10:04 hoffman + + * Tests/TryCompile/CMakeLists.txt: ENH: add a test for bug 7316 + +2008-07-14 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-14 18:51 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: BUG: fix for bug 7316 + +2008-07-14 13:52 dgregor + + * Modules/FindBoost.cmake: ENH: FindBoost can now find the upcoming + Boost 1.46 + +2008-07-14 12:24 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/CMakeLists.txt: ENH: add + cmCPackComponentGroup to build + +2008-07-14 09:22 hoffman + + * Source/CPack/cmCPackComponentGroup.cxx: ENH: add missing merged + file + +2008-07-13 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-13 18:06 miguelf + + * Modules/FindwxWidgets.cmake: ENH: Improved support for finding + wxWidgets in MinGW environment. + +2008-07-13 17:55 hoffman + + * CMakeCPackOptions.cmake.in, CMakeLists.txt, ChangeLog.manual, + Modules/CPack.Info.plist.in, Modules/CPack.cmake, + Modules/FindBoost.cmake, Modules/FindQt4.cmake, + Modules/FindwxWidgets.cmake, Modules/NSIS.template.in, + Source/cmBootstrapCommands.cxx, Source/cmCommands.cxx, + Source/cmGetCMakePropertyCommand.cxx, + Source/cmGetCMakePropertyCommand.h, Source/cmGlobalGenerator.h, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmInstallCommand.cxx, + Source/cmInstallFilesCommand.cxx, + Source/cmInstallProgramsCommand.cxx, + Source/cmInstallTargetGenerator.h, + Source/cmInstallTargetsCommand.cxx, Source/cmake.cxx, + Source/CPack/cmCPackComponentGroup.h, + Source/CPack/cmCPackGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.h, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.h, + Source/QtDialog/CMakeSetupDialog.cxx, + Source/QtDialog/CMakeSetupDialog.h, + Source/QtDialog/CMakeSetupDialog.ui, + Source/QtDialog/QCMakeCacheView.cxx, + Source/kwsys/RegularExpression.cxx, + Tests/CPackComponents/CMakeLists.txt: ENH: Merge from head create + RC7 + +2008-07-12 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-11 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-10 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-10 17:20 hoffman + + * Source/kwsys/RegularExpression.cxx: COMP: remove warning and + check for assignment to itself in operator= + +2008-07-09 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-09 17:45 king + + * Modules/Platform/Darwin.cmake: BUG: Fix dylib versioning flags + for old OSX. + + - ld flags -dylib_compatibility_version and + -dylib_current_version + are libtool flags -compatibility_version and -current_version + - OSX 10.3 does not like the dylib_ prefixes. + +2008-07-09 16:30 david.cole + + * Source/CPack/cmCPackComponentGroup.h: COMP: Fix HP continuous. + Pull stl headers into CMake header files using + cmStandardIncludes.h + +2008-07-09 13:38 hoffman + + * Source/CPack/cmCPackComponentGroup.cxx: file + cmCPackComponentGroup.cxx was added on branch CMake-2-6 on + 2008-07-14 13:22:45 +0000 + +2008-07-09 13:38 david.cole + + * Modules/CPack.Info.plist.in, Modules/CPack.cmake, + Source/CMakeLists.txt, Source/CPack/cmCPackComponentGroup.cxx, + Source/CPack/cmCPackComponentGroup.h, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.h: ENH: One more patch + from Doug Gregor including PackageMaker functionality for + componentized-for-the-end-user and download-some-bit-on-demand + installers. + +2008-07-09 11:46 hoffman + + * Source/kwsys/RegularExpression.cxx: ENH: fix memory leak + +2008-07-09 10:09 king + + * Modules/Platform/Darwin.cmake, Source/cmGlobalXCodeGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.h: ENH: Set version info + for shared libs on OSX. + + - Map SOVERSION major.minor.patch to compatibility_version + - Map VERSION major.minor.patch to current_version + - See issue #4383. + +2008-07-09 10:09 king + + * Source/: cmTarget.cxx, cmTarget.h: ENH: Add full target version + signature cmTarget::GetTargetVersion. + +2008-07-08 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-08 17:47 david.cole + + * Tests/CPackComponents/CMakeLists.txt: ENH: Use new + cpack_add_component macro (and friends) from the CPackComponents + test. Thanks again to Doug Gregor! + +2008-07-08 11:52 david.cole + + * Modules/CPack.cmake, Modules/NSIS.template.in, + Source/CPack/cmCPackComponentGroup.h, + Source/CPack/cmCPackGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.h, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/cmGetCMakePropertyCommand.cxx, + Source/cmGetCMakePropertyCommand.h, Source/cmGlobalGenerator.h, + Source/cmInstallCommand.cxx, Source/cmInstallFilesCommand.cxx, + Source/cmInstallProgramsCommand.cxx, + Source/cmInstallTargetGenerator.h, + Source/cmInstallTargetsCommand.cxx: ENH: Further refinement of + the CPack components functionality from Doug Gregor. + + Details: ========== + + - New cpack_add_component, cpack_add_component_group, and + cpack_add_install_type "commands" defined as macros in the CPack + module. - Documentation for all of the variables and commands + in the CPack module. - Added get_cmake_property(... COMPONENTS) + to CMake to ask for the names of all components. Used in the + CPack module to automatically build component-based installers. + (Set CPACK_MONOLITHIC_INSTALL to turn off component-based + installation). - A group can declare its PARENT_GROUP, to build + an arbitrary hierarchy of groups. - New CPack command + cpack_configure_downloads, which creates an installer that + downloads only the selected components on-the-fly. Those + components marked DOWNLOADED will be separate packages downloaded + on-the-fly (or, all packages can be marked as such with the ALL + option to cpack_configure_downloads). Individual components are + compressed with ZIP at installer-creation time and + downloaded/uncompressed by the installer as needed. This feature + is only available on Windows with NSIS at the moment. - NSIS + installers can install themselves and enable the "Change" button + in Add/Remove programs, allowing users to go back and install or + remove components. This can be disabled through + cpack_configure_downloads, because it's only really useful is + most of the application's functionality is in downloaded + components. - Bug fix: automatically install everything whose + COMPONENT was not specified (it's a hidden, required group) - + Bug fix: fixed removal of components when re-running the NSIS + installer and unchecking components - Bug fix: NSIS installers + now only install/remove the minimal number of files when re-run + to update the installation (or by clicking "Change" in Add/Remove + programs) + +2008-07-07 23:53 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-07 15:07 hoffman + + * Source/cmBootstrapCommands.cxx, Source/cmCommands.cxx, + Tests/CMakeLists.txt: ENH: add get_test_property to bootstrap so + bootstrap builds test the same as non-bootstrap builds + +2008-07-07 13:12 king + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Do not build + human-reference files in Xcode + + - The Info.plist file in app bundles should not be built. + - User-specified files such as foo.txt should not be built. + - Only files with a recognized language should be built, + just as in the Makefiles generators. + - See bug #7277. + +2008-07-07 10:57 king + + * Source/cmGlobalXCodeGenerator.cxx: ENH: Add projectRoot to Xcode + projects + + - This attribute points Xcode at the source tree. + - Xcode 3 wants this to be set always. + - See bug #7044. + +2008-07-07 10:05 king + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Fix AppBundle=>Library + depends in Xcode + + - The Xcode generator xcode-depend-helper needs to account + for the paths of executables within application bundles. + - See bug #7278. + +2008-07-06 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-06 22:06 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: COMP: fix warning + +2008-07-06 20:03 hoffman + + * Source/CTest/cmCTestMultiProcessHandler.h: COMP: fix some more + warnings + +2008-07-06 19:58 hoffman + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: + COMP: fix a few more warnings + +2008-07-06 04:57 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Add new library richtext. + Reported in #7284 thanks to earith. + +2008-07-05 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-05 13:25 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + CMakeSetupDialog.ui: + ENH: Replace Advanced checkbox and group option in menu with a + combo box to choose view type. + +2008-07-05 11:57 clinton + + * Modules/FindQt4.cmake: + BUG: Watch for empty qconfig.pri files. Fixes #7287. + +2008-07-05 09:29 hoffman + + * Source/cmGlobalGenerator.cxx: COMP: fix warning + +2008-07-04 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-04 10:28 hoffman + + * Source/CTest/: cmCTestMultiProcessHandler.cxx, + cmCTestMultiProcessHandler.h, cmCTestTestHandler.cxx: COMP: try + to fix sgi compiler problem with set and also shorten symbol + lengths for set class + +2008-07-04 10:10 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: COMP: fix more warnings + +2008-07-04 09:55 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: COMP: fix warning + +2008-07-04 09:50 hoffman + + * Source/: cmCTest.cxx, CTest/cmCTestTestHandler.cxx: COMP: fix + some warnings + +2008-07-03 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-03 18:19 dgregor + + * Modules/FindBoost.cmake: COMP: Find Boost as installed by the + BoostPro/Boost Consulting installers on Windows + +2008-07-03 16:26 hoffman + + * Source/CTest/cmCTestMultiProcessHandler.cxx: ENH: one more fix + for the old hp c++ compiler + +2008-07-03 15:49 dgregor + + * Modules/FindBoost.cmake: ENH: Cleanup FindBoost module, fixing + several small bugs and providing better diagnostic information + when things go wrong + +2008-07-03 15:46 king + + * Tests/CMakeLists.txt: BUG: Replace non-bootstrap command with + macro + + - The GET_TEST_PROPERTY command does not exist during + bootstrap. + - Instead of lots of conditionals, replace it with a macro. + +2008-07-03 15:02 hoffman + + * Source/CTest/cmProcess.cxx: ENH: one more fix for hp + +2008-07-03 14:38 king + + * Tests/CMakeLists.txt: ENH: Remove condition on use of CMake 2.4 + commands + + - Commands SET_TESTS_PROPERTIES and GET_TEST_PROPERTY exist + in CMake 2.4, which is now required. + - Therefore we need not check before using them. + +2008-07-03 14:34 king + + * Tests/CMakeLists.txt: COMP: Don't set properties on a + non-existing test + + - Test SubProject-Stage2 is conditionally created. + - Set properties on it only if it exists. + +2008-07-03 13:55 hoffman + + * Source/CTest/cmProcess.h: ENH: fix for old hp compiler + +2008-07-03 13:55 king + + * Source/cmake.cxx: ENH: Do not auto-create out-dated cache + variables + + - We used to always put LIBRARY_OUTPUT_PATH and + EXECUTABLE_OUTPUT_PATH + in the cache if the project did not. + - In CMake 2.6 these variables should no longer be used. + - Now add them only if CMAKE_BACKWARDS_COMPATIBILITY is also + cached. + - This happens only when CMP0001 is set to OLD or WARN or if + the user or project sets it. In any case compatibility is + needed. + - Reported by Miguel A. Figueroa-Villanueva and Philip Lowman. + +2008-07-03 13:28 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + BUG: Fix Xcode reference to Info.plist resource + + - Generated Xcode projects for application bundles list the + CMake-generated Info.plist input file as a resource. + - The location of the input file was moved by a previous + commit, + but the reference to it as a resource file was not updated. + - This change moves the file to CMakeFiles/.dir/Info.plist + to give it a more intuitive name in the Xcode project. + - We also update the reference to point at the correct + location. + - See bug #7277. + +2008-07-03 13:28 king + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Fix Xcode per-config + bundle name in Info.plist + + - The Xcode generator creates one Info.plist input file which + is + converted at build time by Xcode and placed in the final + bundle. + - The _OUTPUT_NAME target property can place different + content + for the exe name in Info.plist on a per-configuration basis. + - Instead of generating a per-config Info.plist input file just + let + Xcode put the name in at build time using the + $(EXECUTABLE_NAME) var. + +2008-07-03 09:49 hoffman + + * Source/CTest/: cmProcess.cxx, cmProcess.h: ENH: add missing file + +2008-07-03 09:31 hoffman + + * Source/CMakeLists.txt, Source/cmCTest.cxx, Source/cmCTest.h, + Source/cmGlobalGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/CTest/cmCTestGenericHandler.cxx, + Source/CTest/cmCTestMultiProcessHandler.cxx, + Source/CTest/cmCTestMultiProcessHandler.h, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestTestHandler.h, Tests/CMakeLists.txt: ENH: add + initial ctest -j feature + +2008-07-02 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-01 23:54 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-07-01 10:58 hoffman + + * CMakeCPackOptions.cmake.in: ENH: fix install in add/remove + programs, again... + +2008-06-30 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-30 16:10 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindGettext.cmake, + Modules/FindKDE4.cmake, Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMakefile.cxx, Source/cmMakefile.h: ENH: check in RC 6 + merges from trunk + +2008-06-30 14:29 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: + BUG: Fix column widths on some systems. + +2008-06-30 09:57 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Do not escape make + variable references in VS additional options. + +2008-06-29 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-29 18:58 alex + + * Modules/FindGettext.cmake: BUG: fix 7230: don't ignore first + parameter if it's not ALL + + Alex + +2008-06-28 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-28 11:16 martink + + * Source/: cmIfCommand.cxx, cmIfCommand.h, cmWhileCommand.cxx: BUG: + fix memory leak and cleanup error string code + +2008-06-27 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-26 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-26 13:30 king + + * Source/: cmMakefile.cxx, cmMakefile.h: BUG: Fix computed + directory property DEFINITIONS. + + - The property tracks the value formed by add_definitions + and remove_definitions command invocations. + - The string should be maintained for use in returning for the + DEFINITIONS property value. + - It is no longer used for any other purpose. + - The DEFINITIONS property was recently documented as + deprecated. + - See bug #7239. + +2008-06-26 13:14 hoffman + + * Modules/FindKDE4.cmake: BUG: don't run KDE4_KDECONFIG_EXECUTABLE + if it is notfound + +2008-06-26 13:01 martink + + * Source/cmIfCommand.cxx, Source/cmListFileCache.cxx, + Tests/Complex/CMakeLists.txt, Tests/Complex/cmTestConfigure.h.in, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/cmTestConfigure.h.in, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/cmTestConfigure.h.in, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: support + parenthesis as arguments and in conditionals feature request + #6191 + +2008-06-26 10:58 king + + * Source/: cmGetDirectoryPropertyCommand.h, cmMakefile.cxx: ENH: + Update documentation of computed directory properites. + + - Fix documentation of get_directory_property command. + - Convert its list of computed directory properties to be + defined/documented directory properties. + +2008-06-26 10:58 king + + * Source/cmMakefile.cxx: BUG: Fix PARENT_DIRECTORY property in + top-level to not crash. + +2008-06-25 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-25 09:51 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/CPack.Info.plist.in, + Modules/CPack.cmake, Modules/CPack.distribution.dist.in, + Modules/FindBLAS.cmake, Modules/FindFLTK.cmake, + Modules/FindKDE3.cmake, Modules/FindMatlab.cmake, + Modules/FindOpenSSL.cmake, Modules/FindQt3.cmake, + Modules/FindSWIG.cmake, Modules/FindwxWidgets.cmake, + Modules/NSIS.template.in, Source/CMakeLists.txt, + Source/cmFLTKWrapUICommand.cxx, Source/cmFindPackageCommand.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmake.cxx, + Source/cmake.h, Source/CPack/cmCPackBundleGenerator.cxx, + Source/CPack/cmCPackBundleGenerator.h, + Source/CPack/cmCPackComponentGroup.h, + Source/CPack/cmCPackGenerator.cxx, + Source/CPack/cmCPackGenerator.h, + Source/CPack/cmCPackGeneratorFactory.cxx, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.h, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.h, + Source/CTest/cmCTestBuildAndTestHandler.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/QtDialog/CMakeSetupDialog.cxx, + Source/QtDialog/CMakeSetupDialog.h, + Source/QtDialog/CMakeSetupDialog.ui, + Source/QtDialog/QCMakeCacheView.cxx, + Source/QtDialog/QCMakeCacheView.h, Tests/CMakeLists.txt, + Tests/CPackComponents/CMakeLists.txt, + Tests/CPackComponents/VerifyResult.cmake, + Tests/CPackComponents/mylib.cpp, Tests/CPackComponents/mylib.h, + Tests/CPackComponents/mylibapp.cpp, + Tests/FindModulesExecuteAll/CMakeLists.txt, + Tests/FindModulesExecuteAll/main.c, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: merge in changes from + main tree + +2008-06-25 09:44 hoffman + + * Source/cmMakefile.cxx: BUG: fix for bug 7239, DEFINITIONS + property not backwards compatible to 2.4 + +2008-06-24 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-24 16:47 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: undo optional because we + need it + +2008-06-24 15:50 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: rc is not so optional at + least with 2005 and newer, as it is used to embed the manifest + files + +2008-06-24 00:00 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: + BUG: Don't create empty property. Fixes bug #7193. + +2008-06-23 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-23 13:37 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: make rc optional + +2008-06-23 11:08 hoffman + + * Source/cmFLTKWrapUICommand.cxx: BUG: fix for bug 7228 + FLTK_WRAP_UI segfault fixed + +2008-06-22 23:55 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-21 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-20 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-20 16:25 hoffman + + * Source/: cmake.h, cmake.cxx: BUG: fix for bug 7222 manifest:no + not working for makefiles + +2008-06-19 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-19 11:08 david.cole + + * Tests/CMakeLists.txt: BUG: Avoid running the new CPackComponents + test on Windows unless the NSIS installer is available. + +2008-06-19 06:17 hoffman + + * Source/CPack/cmCPackBundleGenerator.cxx: file + cmCPackBundleGenerator.cxx was added on branch CMake-2-6 on + 2008-06-25 13:51:32 +0000 + +2008-06-19 06:17 david.cole + + * Source/CPack/cmCPackBundleGenerator.cxx: COMP: Eliminate + unreferenced variable warning + +2008-06-18 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-18 19:02 alex + + * Modules/FindKDE3.cmake: BUG: modify the compiler flags only if + KDE3 has actually been found + + Alex + +2008-06-18 18:57 alex + + * Modules/FindKDE3.cmake: STYLE: use uppercase to be consistent + with the rest of the file + + Alex + +2008-06-18 16:39 alex + + * Modules/FindKDE3.cmake: BUG: the variable is _KDE4_USE_FLAGS ENH: + I guess this is also true for gcc 2.95 ? + + Alex + +2008-06-18 16:00 david.cole + + * Source/CPack/cmCPackGenerator.cxx: COMP: Eliminate compiler + warning on 64-bit build. + +2008-06-18 14:25 david.cole + + * Source/CPack/cmCPackNSISGenerator.cxx: BUG: Always look for the + NSIS reg value in the 32-bit hive even in 64-bit builds of CPack. + +2008-06-18 13:28 hoffman + + * Source/cmake.cxx: ENH: support large object file lists with + incremental visual studio linking + +2008-06-18 12:23 hoffman + + * Modules/FindKDE3.cmake: ENH: use correct variable + +2008-06-18 09:53 hoffman + + * Source/CPack/cmCPackBundleGenerator.h: file + cmCPackBundleGenerator.h was added on branch CMake-2-6 on + 2008-06-25 13:51:33 +0000 + +2008-06-18 09:53 david.cole + + * Modules/CPack.cmake, Source/CMakeLists.txt, + Source/CPack/cmCPackBundleGenerator.cxx, + Source/CPack/cmCPackBundleGenerator.h, + Source/CPack/cmCPackGeneratorFactory.cxx: ENH: Apply patch for + feature request #7170. Thanks to Tim Shead for contributing... + +2008-06-18 09:28 hoffman + + * Tests/CPackComponents/VerifyResult.cmake: file VerifyResult.cmake + was added on branch CMake-2-6 on 2008-06-25 13:51:58 +0000 + +2008-06-18 09:28 david.cole + + * Tests/CPackComponents/VerifyResult.cmake: BUG: Be more specific + about the expected file name of the installer. (So we don't get + mylibapp.exe in our GLOB results in make based build trees where + the built exes end up in the same directory as the CPack + installers...) + +2008-06-18 09:22 hoffman + + * Modules/FindKDE3.cmake: ENH: fix for findall + +2008-06-18 09:07 hoffman + + * Source/CTest/cmCTestBuildAndTestHandler.cxx: BUG: make sure ctest + sees the output of the cmake run in build and test cases, it was + not... + +2008-06-18 08:42 hoffman + + * Modules/FindKDE3.cmake: ENH: try to module run test + +2008-06-18 08:37 hoffman + + * Modules/: FindKDE3.cmake, FindQt3.cmake: ENH: try to module run + test + +2008-06-18 07:08 hoffman + + * Modules/CPack.distribution.dist.in: file + CPack.distribution.dist.in was added on branch CMake-2-6 on + 2008-06-25 13:51:31 +0000 + +2008-06-18 07:08 david.cole + + * Modules/CPack.distribution.dist.in, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.h: BUG: Workaround + PackageMaker 3.0 issue for new CPack components feature. Thanks + again to Doug Gregor for the patch. + +2008-06-17 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-17 21:46 hoffman + + * Modules/FindSWIG.cmake: ENH: no fatal error if not required + +2008-06-17 18:02 miguelf + + * Modules/FindwxWidgets.cmake: ENH: Added support for MSYS as a + unix style search. + +2008-06-17 14:07 david.cole + + * Source/CPack/cmCPackNSISGenerator.cxx: COMP: Use cmOStringStream + instead of std::ostringstream for the HP compiler. + +2008-06-17 14:03 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: BUG: fix for bug 7136 + +2008-06-17 13:27 hoffman + + * Modules/FindBLAS.cmake: ENH: make find blas work if there is no + fortran compiler + +2008-06-17 13:13 hoffman + + * Source/cmake.cxx: ENH: add an enabled language property + +2008-06-17 12:44 david.cole + + * Source/CPack/: cmCPackGenerator.cxx, cmCPackNSISGenerator.cxx: + COMP: Fix errors and warnings from continuous dashboards running + different compilers... + +2008-06-17 12:09 david.cole + + * Source/CPack/cmCPackGenerator.h: COMP: Include full class + definitions of classes used in std::map data members. + +2008-06-17 11:39 hoffman + + * Tests/CPackComponents/CMakeLists.txt: file CMakeLists.txt was + added on branch CMake-2-6 on 2008-06-25 13:51:58 +0000 + +2008-06-17 11:39 hoffman + + * Source/CPack/cmCPackComponentGroup.h: file + cmCPackComponentGroup.h was added on branch CMake-2-6 on + 2008-06-25 13:51:35 +0000 + +2008-06-17 11:39 hoffman + + * Tests/CPackComponents/mylib.cpp: file mylib.cpp was added on + branch CMake-2-6 on 2008-06-25 13:51:58 +0000 + +2008-06-17 11:39 hoffman + + * Tests/CPackComponents/mylib.h: file mylib.h was added on branch + CMake-2-6 on 2008-06-25 13:51:58 +0000 + +2008-06-17 11:39 hoffman + + * Tests/CPackComponents/mylibapp.cpp: file mylibapp.cpp was added + on branch CMake-2-6 on 2008-06-25 13:51:58 +0000 + +2008-06-17 11:39 david.cole + + * Modules/CPack.Info.plist.in, Modules/CPack.distribution.dist.in, + Modules/NSIS.template.in, Source/CPack/cmCPackGenerator.cxx, + Source/CPack/cmCPackGenerator.h, + Source/CPack/cmCPackComponentGroup.h, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.h, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.h, + Tests/CMakeLists.txt, Tests/CPackComponents/CMakeLists.txt, + Tests/CPackComponents/VerifyResult.cmake, + Tests/CPackComponents/mylib.cpp, Tests/CPackComponents/mylib.h, + Tests/CPackComponents/mylibapp.cpp, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Add patch for feature + request #6847 - CPack components for NSIS and PackageMaker + installers. Thanks to Doug Gregor for all the hard work involved + with implementing this patch! Also added new test CPackComponents + that is conditionally executed only when NSIS or PackageMaker + installer builders are available. + +2008-06-17 11:29 hoffman + + * Modules/FindBLAS.cmake: STYLE: fix indent for file + +2008-06-17 10:58 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for bug 6619 + +2008-06-17 10:51 hoffman + + * Tests/CMakeLists.txt: ENH: try turning this on again + +2008-06-16 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-16 20:10 hoffman + + * Tests/CMakeLists.txt: ENH: turn this off until it passes on all + systems + +2008-06-16 20:05 hoffman + + * Tests/FindModulesExecuteAll/CMakeLists.txt: ENH: add a project + name + +2008-06-16 20:05 hoffman + + * Tests/FindModulesExecuteAll/CMakeLists.txt: file CMakeLists.txt + was added on branch CMake-2-6 on 2008-06-25 13:51:58 +0000 + +2008-06-16 18:37 alex + + * Modules/FindOpenSSL.cmake: BUG: don't fail with FATAL_ERROR if + REQUIRED was not used + + Alex + +2008-06-16 15:19 hoffman + + * Modules/FindFLTK.cmake, Modules/FindKDE3.cmake, + Modules/FindMatlab.cmake, + Tests/FindModulesExecuteAll/CMakeLists.txt: ENH: fix find module + stuff for test + +2008-06-16 14:15 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Fix so that MinGW use + win32_find_style (6478). Also, consolidated search styles + selection into a single variable, so that they are mutually + exclusive. + +2008-06-16 14:03 hoffman + + * Tests/FindModulesExecuteAll/main.c: file main.c was added on + branch CMake-2-6 on 2008-06-25 13:52:00 +0000 + +2008-06-16 14:03 alex + + * Tests/: CMakeLists.txt, FindModulesExecuteAll/CMakeLists.txt, + FindModulesExecuteAll/main.c: ENH: add test which executes all + FindXXX.cmake modules + + Alex + +2008-06-15 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-14 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-13 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-13 16:57 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: + ENH: remove red blending. It didn't look good on some systems. + +2008-06-13 16:33 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Fixed incorrectly matched + FOREACH (7008). + +2008-06-13 15:29 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: + ENH: instead of solid red for new entries, blend it with the + alternating white/gray (depending on style). + +2008-06-13 11:19 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + QCMakeCacheView.cxx, QCMakeCacheView.h: + ENH: Make original flat view the default. Add option to + switch to grouped view (and remember it). + +2008-06-13 10:15 hoffman + + * Source/cmVersion.cxx: ENH: remove beta stuff from version + +2008-06-13 08:55 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeFindBinUtils.cmake, Modules/CPack.RuntimeScript.in, + Modules/FindCurses.cmake, Modules/FindFreetype.cmake, + Modules/FindGDAL.cmake, Modules/FindGIF.cmake, + Modules/FindKDE3.cmake, Modules/FindKDE4.cmake, + Modules/FindLua50.cmake, Modules/FindLua51.cmake, + Modules/FindOpenAL.cmake, Modules/FindOpenThreads.cmake, + Modules/FindPhysFS.cmake, Modules/FindProducer.cmake, + Modules/FindQt3.cmake, Modules/FindQt4.cmake, + Modules/FindQuickTime.cmake, Modules/FindSDL.cmake, + Modules/FindSDL_image.cmake, Modules/FindSDL_mixer.cmake, + Modules/FindSDL_net.cmake, Modules/FindSDL_sound.cmake, + Modules/FindSDL_ttf.cmake, Modules/FindTCL.cmake, + Modules/FindTclsh.cmake, Modules/FindWish.cmake, + Modules/FindXMLRPC.cmake, Modules/Findosg.cmake, + Modules/FindosgDB.cmake, Modules/FindosgFX.cmake, + Modules/FindosgGA.cmake, Modules/FindosgIntrospection.cmake, + Modules/FindosgManipulator.cmake, Modules/FindosgParticle.cmake, + Modules/FindosgProducer.cmake, Modules/FindosgShadow.cmake, + Modules/FindosgSim.cmake, Modules/FindosgTerrain.cmake, + Modules/FindosgText.cmake, Modules/FindosgUtil.cmake, + Modules/FindosgViewer.cmake, + Source/cmAddCustomCommandCommand.cxx, + Source/cmAddCustomCommandCommand.h, Source/cmCustomCommand.cxx, + Source/cmCustomCommand.h, Source/cmFindBase.cxx, + Source/cmFindBase.h, Source/cmFindCommon.cxx, + Source/cmFindCommon.h, Source/cmFindLibraryCommand.cxx, + Source/cmFindLibraryCommand.h, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h, Source/cmFindPathCommand.cxx, + Source/cmFindPathCommand.h, Source/cmFindProgramCommand.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmGlobalXCodeGenerator.cxx, Source/cmMakefile.cxx, + Source/cmMakefileTargetGenerator.cxx, Source/cmake.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/kwsys/DynamicLoader.cxx, + Source/kwsys/SystemInformation.cxx, Source/kwsys/Terminal.c, + Tests/CMakeTests/FindBaseTest.cmake.in, + Tests/CMakeTests/A/include/cmake_i_do_not_exist_in_the_system.h, + Tests/CustomCommand/CMakeLists.txt, Tests/CustomCommand/foo.in, + Tests/CustomCommand/gen_once.c.in, + Tests/CustomCommand/wrapper.cxx, + Tests/FindPackageTest/CMakeLists.txt, + Tests/FindPackageTest/A/wibble-config.cmake, + Tests/FindPackageTest/B/wibble-config.cmake: ENH: merge in + changes from head + +2008-06-12 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-11 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-11 15:08 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: ENH: better name for + ungrouped entries. + +2008-06-11 14:47 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: + BUG: need to invalidate filtering when using Qt 4.3+. + +2008-06-10 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-10 22:19 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: + ENH: Add items under the Options menu for collapsing and + expanding the variable tree. + +2008-06-10 20:17 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: ENH: Give a label for the + group of properties that didn't get put into another group. + +2008-06-10 18:53 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: + ENH: group together items with no prefix and items that won't be + grouped with others. + +2008-06-10 18:28 alex + + * Source/cmGlobalGenerator.cxx: BUG: -fail with error if the + CMakeInformation.cmake file wasn't found ENH: -if no + compiler has been found, don't test it, and also remove the + compiler information file again. This makes optionally enabling a + language work better. + + Alex + +2008-06-10 13:22 king + + * Source/cmFindBase.cxx: BUG: In find_* commands support NO_* + options in short-hand + + - The short-hand forms do not document the NO_* options. + - CMake 2.4 and 2.6.0 accepted them accidentally, but also + treated the options as paths. + - Now the options are accepted but do not become paths. + +2008-06-10 00:17 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.ui, + QCMakeCacheView.cxx, QCMakeCacheView.h: + ENH: Use a tree view of the properties instead of a flat list + view. Properties are grouped by a prefix (up to first "_") + and can be expanded or collapsed. + + Fixes #6359. + +2008-06-09 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-09 16:04 king + + * Modules/: CMakeFindBinUtils.cmake, FindCurses.cmake, + FindFreetype.cmake, FindGDAL.cmake, FindGIF.cmake, + FindKDE3.cmake, FindKDE4.cmake, FindLua50.cmake, FindLua51.cmake, + FindOpenAL.cmake, FindOpenThreads.cmake, FindPhysFS.cmake, + FindProducer.cmake, FindQt3.cmake, FindQuickTime.cmake, + FindSDL.cmake, FindSDL_image.cmake, FindSDL_mixer.cmake, + FindSDL_net.cmake, FindSDL_sound.cmake, FindSDL_ttf.cmake, + FindTCL.cmake, FindTclsh.cmake, FindWish.cmake, FindXMLRPC.cmake, + Findosg.cmake, FindosgDB.cmake, FindosgFX.cmake, FindosgGA.cmake, + FindosgIntrospection.cmake, FindosgManipulator.cmake, + FindosgParticle.cmake, FindosgProducer.cmake, + FindosgShadow.cmake, FindosgSim.cmake, FindosgTerrain.cmake, + FindosgText.cmake, FindosgUtil.cmake, FindosgViewer.cmake: ENH: + Cleanup Find* modules with new HINTS feature + + - The find_* commands now provide a HINTS option. + - The option specifies paths to be preferred over the system + paths. + - Many Find* modules were using two find calls with + NO_DEFAULT_PATH + to approximate the behavior, but that blocked users from + overriding + things with CMAKE_PREFIX_PATH. + - This commit uses the HINTS feature to get desired behavior in + only one find command call. + +2008-06-09 15:50 alex + + * Modules/CPack.RuntimeScript.in: STYLE: apply patch from Thomas + Klausner (NetBSD): use "=" for testing strings for equality + instead of "==" + + This also matches what the man page for test says "s1 = s2 + True if the strings s1 and s2 are identical." + + Alex + +2008-06-09 15:22 king + + * Source/: cmFindBase.cxx, cmFindPackageCommand.cxx: ENH: Make + find_* command search order more intuitive. + + - The CMAKE_PREFIX_PATH and similar variables have both + environment and CMake cache versions. + - Previously the environment value was checked before the + cache value. + - Now the cache value is favored because it is more specific. + +2008-06-09 15:09 hoffman + + * Tests/FindPackageTest/: A/wibble-config.cmake, + B/wibble-config.cmake: file wibble-config.cmake was added on + branch CMake-2-6 on 2008-06-13 12:55:19 +0000 + +2008-06-09 15:09 hoffman + + * Tests/CMakeTests/A/include/cmake_i_do_not_exist_in_the_system.h: + file cmake_i_do_not_exist_in_the_system.h was added on branch + CMake-2-6 on 2008-06-13 12:55:18 +0000 + +2008-06-09 15:09 king + + * Tests/: + CMakeTests/A/include/cmake_i_do_not_exist_in_the_system.h, + CMakeTests/FindBaseTest.cmake.in, FindPackageTest/CMakeLists.txt, + FindPackageTest/A/wibble-config.cmake, + FindPackageTest/B/wibble-config.cmake: ENH: Add test for new + find_* command HINTS option. + +2008-06-09 15:08 king + + * Source/: cmFindBase.cxx, cmFindBase.h, cmFindCommon.cxx, + cmFindCommon.h, cmFindPackageCommand.cxx, cmFindPackageCommand.h: + ENH: Add HINTS option to find_* commands. + + - Hints are searched after user locations but before system + locations + - The HINTS option should have paths provided by system + introspection + - The PATHS option should have paths that are hard-coded + guesses + +2008-06-09 12:51 king + + * Source/cmFindPathCommand.cxx: ENH: Improve framework search speed + for find_file and find_path + + - Locating a header inside a framework often requires globbing + - Previously the glob was /*/Headers/ + - Now the glob is /*.framework/Headers/ + - This is much faster when is not really a framework dir + +2008-06-09 11:58 king + + * Source/: cmFindBase.cxx, cmFindBase.h, cmFindLibraryCommand.cxx, + cmFindLibraryCommand.h, cmFindPathCommand.cxx, + cmFindPathCommand.h, cmFindProgramCommand.cxx: ENH: Refactor + find_* command framework/appbundle search order impl. + + - CMAKE_FIND_FRAMEWORK and CMAKE_FIND_APPBUNDLE are supposed to + specify + whether to find frameworks/appbundles FIRST, LAST, ONLY, or + NEVER. + - Previously this affected only the placement of + CMAKE_FRAMEWORK_PATH + and CMAKE_APPBUNDLE_PATH with respect to the other path + specifiers. + - Now it behaves as documented. The entire search path is + inspected for + each kind of program, library, or header before trying the + next kind. + - Additionally the ONLY mode is now honored for headers so that + users + do not end up with a library in framework and a header from + elsewhere. + +2008-06-09 11:57 king + + * Source/: cmFindBase.cxx, cmFindCommon.cxx, cmFindCommon.h, + cmFindLibraryCommand.cxx, cmFindPackageCommand.cxx, + cmFindPathCommand.cxx: ENH: In find_* implementation centralize + addition of trailing slashes + + - Create cmFindCommon::AddTrailingSlashes + - Use it in cmFindBase and cmFindPackageCommand + - Remove duplication from other find commands + +2008-06-08 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-08 11:41 king + + * Source/cmake.cxx: ENH: Whenever CMake re-runs from inside the VS + IDE inform the user why. + +2008-06-08 11:41 king + + * Tests/CMakeTests/FindBaseTest.cmake.in: BUG: Fix CMake.FindBase + test to normalize paths before comparing. + + - Previously the find_* commands did not normalize the search + paths + - The recent refactoring enabled such normalization + - The FindBase test must also normalize before comparing paths + +2008-06-08 11:41 king + + * Source/cmFindBase.cxx: BUG: Fix find_* command calls with no + PATHS but new-style options. + + - In cmFindBase when CheckCommonArgument returns true, set + newStyle + - Otherwise if there are no PATHS then the ancient-style + compatibility + mode is enabled and the common argument is treated as a path. + +2008-06-07 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-06 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-06 11:52 king + + * Source/kwsys/Terminal.c: ENH: Recognize more color terminals. + + - Patch from Matthew McCormick, slightly tweaked + - See issue #6833 + +2008-06-06 11:49 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix for flags that have + sub-string matches + +2008-06-06 10:22 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: fix for bug 6364, + extra help targets when there are subdirectories of the top level + +2008-06-06 09:06 king + + * Source/cmFindBase.cxx: BUG: Fix cmFindBase::AddMacPath to + actually use its arguments after previous refactoring commit. + +2008-06-06 01:36 clinton + + * Modules/FindQt4.cmake: + BUG: Fix for #7118. Relative paths going outside the + current source dir resulted in badly placed moc source + files in the build dir (or out of the build dir). + +2008-06-05 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-05 18:20 king + + * Source/: cmFindBase.cxx, cmFindBase.h, cmFindCommon.cxx, + cmFindCommon.h, cmFindPackageCommand.cxx, cmFindPackageCommand.h: + ENH: Refactor cmFindCommon, cmFindBase, and cmFindPackageCommand + + - Add each part of the search order in a separate method. + - Collect added paths in an ivar in cmFindCommon. + - Move user path storage up to cmFindCommon and share + between cmFindBase and cmFindPackageCommand. + - Expand user path registry values up in cmFindCommon + - Enables 32-/64-bit registry view for find_package + - Disables registry expansion for paths not specified + with the PATHS argument, which is not expected. + +2008-06-05 10:01 king + + * Tests/CustomCommand/wrapper.cxx: BUG: Fix new custom command with + make-var expansion test on VS6. The VS6 IDE adds some extra + characters to the variable value during expansion. + +2008-06-05 09:54 king + + * Source/cmFindBase.cxx: BUG: Fix 64-bit build of CMake so it can + find 32-bit VS install. + + - cmFindBase should search both 32-bit and 64-bit registry + views + for FIND_PROGRAM even if CMAKE_SIZEOF_VOID_P is not set. + - Needed because the variable is not available when + CMAKE_MAKE_PROGRAM + is to be found. + +2008-06-04 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-04 12:10 king + + * Tests/CustomCommand/: CMakeLists.txt, wrapper.cxx: ENH: Add test + for make variable replacement in a custom command with the + VERBATIM option. + +2008-06-04 12:10 king + + * Source/cmMakefile.cxx: ENH: Allow custom commands with VERBATIM + option to have $(SomeVar) make variable replacement. + +2008-06-03 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-03 10:29 clinton + + * Modules/FindQt4.cmake: + ENH: Some Linux distros don't install xorg-devel, png-devel, + etc... when qt4-devel is installed. Finding them was + required to support building against static Qt. Changing + it so they are ignored if not found. + +2008-06-03 10:02 king + + * Source/cmGlobalGenerator.cxx: COMP: Fix bootstrap build after + previous change to signature of AddRuleHash. + +2008-06-03 09:55 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmMakefileTargetGenerator.cxx: BUG: Include less content as input + to "rule hash" computation. + + - The rule hash should use only commands specified by the user. + - No make output (echo and progress) rules should be included. + - No outputs or dependencies need be included. The native + build tool + will take care of them. + +2008-06-02 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-02 19:44 clinton + + * Source/kwsys/DynamicLoader.cxx: + BUG: FormatMessage can return a NULL message. Add check for + NULL pointer. + +2008-06-02 16:45 king + + * Source/cmAddCustomCommandCommand.cxx, + Source/cmAddCustomCommandCommand.h, Source/cmCustomCommand.cxx, + Source/cmCustomCommand.h, Tests/CustomCommand/CMakeLists.txt, + Tests/CustomCommand/foo.in, Tests/CustomCommand/gen_once.c.in: + ENH: Remove SKIP_RULE_DEPENDS option from add_custom_command() + + - Option was recently added but never released. + - Custom commands no longer depend on build.make so we do + not need the option. + - Rule hashes now take care of rebuilding when rules change + so the dependency is not needed. + +2008-06-02 16:44 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmMakefileTargetGenerator.cxx: ENH: Introduce "rule hashes" to + help rebuild files when rules change. + + - In CMake 2.4 custom commands would not rebuild when rules + changed. + - In CMake 2.6.0 custom commands have a dependency on + build.make + which causes them to rebuild when changed, but also when any + source is added or removed. This is too often. + - We cannot have a per-rule file because Windows filesystems + do not deal well with lots of small files. + - Instead we add a persistent CMakeFiles/CMakeRuleHashes.txt + file + at the top of the build tree that is updated during each + CMake Generate step. It records a hash of the build rule for + each file to be built. When the hash changes the file is + removed so that it will be rebuilt. + +2008-06-02 14:53 ewing + + * Modules/FindLua51.cmake: BUG: fixed Lua50 to be Lua51 in + FIND_PACKAGE_HANDLE_STANDARD_ARGS call. + +2008-06-02 09:39 martink + + * Source/cmMakefile.cxx: COMP: fix warning + +2008-06-01 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-06-01 23:40 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix crash on dash17 + linux where the parsing of the proc file must not have worked + right + +2008-06-01 16:11 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix crash on cygwin + +2008-06-01 14:40 fbertel + + * Source/kwsys/SystemInformation.cxx: BUG:cpuinfo format are + different between Linux and Cygwin. Cygwin does not have physical + id tag or cpu cores tag. + +2008-06-01 11:23 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: avoid divide by zero, + temporary fix until cygwin cpu file is read better, bad cpu info + is better than a crash + +2008-05-31 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-31 11:23 fbertel + + * Source/kwsys/SystemInformation.cxx: BUG:Fixed NumberOfLogicalCPU, + NumberOfPhysicalCPU and LogicalProcessorsPerPhysical under Linux. + Some part was just wrong. Some other part missed to take the + multicore value into account. + +2008-05-31 08:15 martink + + * Source/cmMakefile.cxx: ENH: make end of file checking for close + if, foreach, macro, functions etc enabled. Not sure why it was + disabled to start with, but I suspect I will find out. In reponse + to Bill email about a ctest -S script with a function that waqs + not closed. Closure was only checked for regular listfiles not + other files. + +2008-05-30 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-30 09:14 martink + + * Source/CTest/cmCTestTestHandler.cxx: ENH: make tes test finding + logic also try full paths as relative paths because some folks + have been doing that and 2.4 handled it + +2008-05-29 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-29 11:50 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: BUG: improve progress reporting + when there are multiple targets with the same name, bug# 7042 + +2008-05-29 09:15 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindQt4.cmake, + Source/cmFileCommand.cxx, Source/cmFindBase.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmInstallTargetGenerator.cxx, Source/cmSourceFile.cxx, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in: + ENH: merge in changes from head for RC 3 + +2008-05-28 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-27 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-27 16:50 king + + * Source/cmFindBase.cxx: BUG: Fix previous registry lookup change + for executables. + + - The target platform does not matter for finding executables + so find_program should expand to both 32-bit and 64-bit + registry + values. + - See issue #7095. + +2008-05-27 14:47 king + + * Source/cmFindBase.cxx: BUG: Fix registry lookups for FIND + commands to use view of target platform. + + - See issue #7095. + +2008-05-27 14:46 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h, + kwsys/SystemTools.cxx, kwsys/SystemTools.hxx.in: ENH: Added WOW64 + key view support to KWSys SystemTools' windows registry API. + + - Add an argument to registry read/write/delete methods to + specify + a 32-bit or 64-bit view. + - Default is the bit-ness of the running program. + - See issue #7095. + +2008-05-27 13:10 king + + * Source/cmSourceFile.cxx: ENH: Catch missing source files + specified by full path earlier. + + - Revert previous change to trust user-provided full paths. + - Instead trust them only far enough to determine the source + language + but still check for existence for non-generated sources. + +2008-05-27 11:18 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: BUG: Fix + crash on repeated configure steps and exported targets. + + - In cmGlobalGenerator the ExportSets ivar must be cleared at + the beginning of each Configure. + - See issue #7101. + +2008-05-27 10:22 king + + * Source/: cmFileCommand.cxx, cmSystemTools.cxx, cmSystemTools.h: + ENH: Inform user when RPATH is set during installation. + + - Original patch from Alex. + - Modified to print only when RPATH is actually set. + +2008-05-27 10:21 king + + * Source/cmInstallTargetGenerator.cxx: BUG: RPATH adjustment of + versioned executables should operate on the file and not the + symlink. + +2008-05-26 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-26 11:17 clinton + + * Modules/FindQt4.cmake: + ENH: Find debug libs from static Qt on Windows. + +2008-05-25 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-24 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-23 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-23 16:09 hoffman + + * CMakeCPack.cmake, CMakeLists.txt, ChangeLog.manual, + Modules/CMakeDetermineASMCompiler.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeFortranCompilerId.F90.in, + Modules/CMakeImportBuildSettings.cmake, Modules/FindQt4.cmake, + Modules/FindSubversion.cmake, Modules/MacOSXBundleInfo.plist.in, + Modules/UseQt4.cmake, Modules/Platform/Linux-PGI-Fortran.cmake, + Source/cmFileCommand.cxx, Source/cmFindBase.cxx, + Source/cmListCommand.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMakefileTargetGenerator.cxx, Source/cmSourceGroup.cxx, + Source/cmSourceGroup.h, Source/cmTarget.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/QtDialog/AddCacheEntry.cxx, + Source/QtDialog/AddCacheEntry.h, + Source/QtDialog/AddCacheEntry.ui, + Source/QtDialog/CMakeFirstConfigure.cxx, + Source/QtDialog/CMakeFirstConfigure.h, + Source/QtDialog/CMakeFirstConfigure.ui, + Source/QtDialog/CMakeLists.txt, + Source/QtDialog/CMakeSetupDialog.cxx, + Source/QtDialog/CMakeSetupDialog.h, Source/QtDialog/QCMake.cxx, + Source/QtDialog/QCMake.h, Source/QtDialog/QCMakeCacheView.cxx, + Source/QtDialog/QCMakeCacheView.h, + Source/QtDialog/QCMakeWidgets.cxx, + Source/QtDialog/QCMakeWidgets.h, + Source/kwsys/RegularExpression.cxx, + Source/kwsys/RegularExpression.hxx.in: ENH: push in changes from + head + +2008-05-23 15:52 hoffman + + * Source/cmFindBase.cxx: ENH: better fix for not adding / + +2008-05-23 15:25 hoffman + + * Modules/FindQt4.cmake: ENH: use PATHS keyword + +2008-05-23 15:25 hoffman + + * Source/cmFindBase.cxx: BUG: 7011 findqt hangs because of glob + with find_path and framework header serach + +2008-05-23 11:47 hoffman + + * CMakeCPack.cmake: ENH: do not put system name into cygwin package + +2008-05-23 11:28 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: BUG: fix for bug 7077 handle + DartMeasurement tags with tyep text/html + +2008-05-22 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-21 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-21 19:57 king + + * Source/cmMakefileTargetGenerator.cxx: BUG: Fix makefile generator + to have link rules depend on all full path libraries that appear + on the link line. This allows projects to relink when imported + targets have changed. + +2008-05-21 14:02 king + + * Modules/CMakeImportBuildSettings.cmake: ENH: Extend previous + patch from Mathieu Malaterre to apply override to the build tool + also. + +2008-05-21 13:36 clinton + + * Modules/FindQt4.cmake: + ENH: Make Qt not found if the QtCore library can't be found. + Also report an error when trying to use MSVC with Qt built by + mingw. + +2008-05-21 10:50 hoffman + + * Source/cmVersion.cxx: ENH: fix version to not report beta for 1 + +2008-05-21 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-20 12:35 hoffman + + * CMakeCPack.cmake: ENH: make sure Cygwin-Unknown is not the name + for the package + +2008-05-20 12:15 hoffman + + * Source/cmListCommand.cxx: BUG: fix failing test + +2008-05-20 11:30 hoffman + + * Source/cmListCommand.cxx: BUG: fix bugs in new style list command + that handles empty stuff + +2008-05-20 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-19 18:07 clinton + + * Modules/UseQt4.cmake: + ENH: Similar to how qmake does it... Don't add compile + flags for dependent modules the user didn't specify. But + still add the link libs. This reduces the number of + unecessary compile flags. + +2008-05-19 10:03 king + + * Modules/FindSubversion.cmake: BUG: Fixes for FindSubversion + + - Split log out from Subversion_WC_INFO into Subversion_WC_LOG + - Fix report of log info to be in + _WC_LAST_CHANGED_LOG + as documented (instead of Subversion_LAST_CHANGED_LOG) + - Fix setting of LC_ALL environment variable to be inside macro + - Patch from Tanguy Krotoff + - See issue #7047 + +2008-05-19 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-18 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-17 17:35 hoffman + + * Modules/Platform/Linux-PGI-Fortran.cmake: file + Linux-PGI-Fortran.cmake was added on branch CMake-2-6 on + 2008-05-23 20:09:35 +0000 + +2008-05-17 17:35 king + + * Modules/Platform/Linux-PGI-Fortran.cmake: ENH: Add basic flags + for Portland Group fortran compiler. + +2008-05-17 12:53 hoffman + + * Modules/MacOSXBundleInfo.plist.in: file MacOSXBundleInfo.plist.in + was added on branch CMake-2-6 on 2008-05-23 20:09:35 +0000 + +2008-05-17 12:53 king + + * Modules/MacOSXBundleInfo.plist.in, Source/cmLocalGenerator.cxx, + Source/cmTarget.cxx: ENH: Allow users to specify a custom + Info.plist template + + - Create MACOSX_BUNDLE_INFO_PLIST target property to specify + template. + - Look for MacOSXBundleInfo.plist.in in CMAKE_MODULE_PATH by + default. + - See issue #6983. + +2008-05-17 11:42 king + + * Source/cmFileCommand.cxx: BUG: Fix previous change to + file(STRINGS) command. + + - Previous change added form-feed as a string terminator. + - Instead it should just be recognized as a valid string + character. + +2008-05-17 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-16 17:56 king + + * Modules/Platform/Linux-PGI-Fortran.cmake: ENH: Add + Linux-PGI-Fortran platform file to support the Portland Group + Fortran compiler (PGI). + +2008-05-16 17:50 king + + * Modules/CMakeFortranCompilerId.F90.in, Source/cmFileCommand.cxx: + ENH: Teach Fortran compiler identification about the Portland + Group compiler (PGI). + +2008-05-16 16:56 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmSourceGroup.cxx, + cmSourceGroup.h: COMP: Fix build with concept checking of STL. + + - Fix cmSourceGroup to not use std::vector with an incomplete + type. + +2008-05-16 11:06 king + + * Source/kwsys/: RegularExpression.cxx, RegularExpression.hxx.in: + ENH: Add assignment operator to KWSys RegularExpression. + +2008-05-16 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-15 19:21 hoffman + + * Source/QtDialog/CMakeFirstConfigure.cxx: file + CMakeFirstConfigure.cxx was added on branch CMake-2-6 on + 2008-05-23 20:09:42 +0000 + +2008-05-15 19:21 hoffman + + * Source/QtDialog/CMakeFirstConfigure.h: file CMakeFirstConfigure.h + was added on branch CMake-2-6 on 2008-05-23 20:09:43 +0000 + +2008-05-15 19:21 hoffman + + * Source/QtDialog/CMakeFirstConfigure.ui: file + CMakeFirstConfigure.ui was added on branch CMake-2-6 on + 2008-05-23 20:09:43 +0000 + +2008-05-15 19:21 hoffman + + * Source/QtDialog/QCMakeWidgets.cxx: file QCMakeWidgets.cxx was + added on branch CMake-2-6 on 2008-05-23 20:09:44 +0000 + +2008-05-15 19:21 hoffman + + * Source/QtDialog/QCMakeWidgets.h: file QCMakeWidgets.h was added + on branch CMake-2-6 on 2008-05-23 20:09:44 +0000 + +2008-05-15 19:21 clinton + + * Source/QtDialog/: AddCacheEntry.cxx, AddCacheEntry.h, + AddCacheEntry.ui, CMakeFirstConfigure.cxx, CMakeFirstConfigure.h, + CMakeFirstConfigure.ui, CMakeLists.txt, CMakeSetupDialog.cxx, + CMakeSetupDialog.h, QCMake.cxx, QCMake.h, QCMakeCacheView.cxx, + QCMakeCacheView.h, QCMakeWidgets.cxx, QCMakeWidgets.h: + ENH: Add cross compiling support in the GUI in the same dialog + that prompts for the generator on the first configure. It + either ask for a toolchain file or asks for all the + information a toolchain file might contain. + + Also added option for setting non-default compilers if not + cross compiling. + Fixes #6849. + + Also a bit of code cleanup and re-organizing. + +2008-05-15 15:39 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeTestFortranCompiler.cmake, Modules/FindBoost.cmake, + Modules/FindCurses.cmake, + Modules/FindPackageHandleStandardArgs.cmake, + Modules/FindQt4.cmake, Modules/NSIS.template.in, + Source/cmAddCustomCommandCommand.cxx, + Source/cmAddCustomCommandCommand.h, Source/cmCustomCommand.cxx, + Source/cmCustomCommand.h, Source/cmDepends.cxx, + Source/cmDepends.h, Source/cmDependsC.cxx, Source/cmDependsC.h, + Source/cmDependsFortran.cxx, Source/cmDependsFortran.h, + Source/cmDocumentationFormatterDocbook.cxx, Source/cmELF.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmListCommand.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, Source/cmMakefile.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmSetSourceFilesPropertiesCommand.cxx, + Source/cmTarget.cxx, Source/cmTarget.h, Source/cmXCodeObject.cxx, + Source/cmake.cxx, Source/cmakemain.cxx, + Source/CTest/cmCTestBuildCommand.h, + Source/CTest/cmCTestConfigureCommand.h, + Source/CTest/cmCTestCoverageCommand.h, + Source/CTest/cmCTestCoverageHandler.cxx, + Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h, + Source/CTest/cmCTestMemCheckCommand.h, + Source/CTest/cmCTestReadCustomFilesCommand.h, + Source/CTest/cmCTestRunScriptCommand.h, + Source/CTest/cmCTestSleepCommand.h, + Source/CTest/cmCTestStartCommand.h, + Source/CTest/cmCTestSubmitCommand.h, + Source/CTest/cmCTestUpdateCommand.h, Source/kwsys/CMakeLists.txt, + Source/kwsys/CPU.h.in, Source/kwsys/ProcessUNIX.c, + Source/kwsys/ProcessWin32.c, Source/kwsys/SystemInformation.cxx, + Source/kwsys/SystemTools.cxx, Tests/BuildDepends/CMakeLists.txt, + Tests/BuildDepends/Project/CMakeLists.txt, + Tests/BuildDepends/Project/zot.cxx, + Tests/BuildDepends/Project/zot_macro_dir.cxx, + Tests/BuildDepends/Project/zot_macro_tgt.cxx, + Tests/CustomCommand/CMakeLists.txt, Tests/CustomCommand/foo.in, + Tests/CustomCommand/gen_once.c.in, Utilities/CMakeLists.txt, + Utilities/cmtar/CMakeLists.txt: ENH: merge in from main tree + +2008-05-15 12:07 alex + + * Modules/: CMakeDetermineASMCompiler.cmake, + CMakeDetermineCCompiler.cmake, CMakeDetermineCXXCompiler.cmake: + BUG: make the toolchain-prefix recognition work with prefixes + which contain dots (as in arm-unknown-nto-qnx6.3.0-gcc.exe), + NAME_WE returns only up to the 6, instead of everything in front + of the .exe + + Alex + +2008-05-15 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-14 11:55 king + + * Source/kwsys/CMakeLists.txt: ENH: In KWSys set the + IMPLICIT_DEPENDS_INCLUDE_TRANSFORM property. + + - Tells CMake about the KWSYS_HEADER macro. + - Enables implicit dependencies of private source files. + - When a CMake new enough to support the property is required + the "#if 0" hack can be removed from the source files. + +2008-05-14 11:55 hoffman + + * Tests/BuildDepends/Project/zot_macro_dir.cxx: file + zot_macro_dir.cxx was added on branch CMake-2-6 on 2008-05-15 + 19:40:01 +0000 + +2008-05-14 11:55 hoffman + + * Tests/BuildDepends/Project/zot_macro_tgt.cxx: file + zot_macro_tgt.cxx was added on branch CMake-2-6 on 2008-05-15 + 19:40:01 +0000 + +2008-05-14 11:55 king + + * Tests/BuildDepends/: CMakeLists.txt, Project/CMakeLists.txt, + Project/zot.cxx, Project/zot_macro_dir.cxx, + Project/zot_macro_tgt.cxx: ENH: Update BuildDepends test to check + #include lines with macros. + + - Tests IMPLICIT_DEPENDS_INCLUDE_TRANSFORM properties. + - See issue #6648. + - Works without help in VS IDEs due to native dependency + handling. + - Xcode needs help to rebuild correctly. + +2008-05-14 11:54 king + + * Source/: cmLocalUnixMakefileGenerator3.cxx, cmMakefile.cxx, + cmTarget.cxx: ENH: Allow users to specify macro-like #include + line transforms for dependency scanning. + + - Define IMPLICIT_DEPENDS_INCLUDE_TRANSFORM property on targets + and directories. + - Make the directory version inherited. + - See issue #6648. + +2008-05-14 11:54 king + + * Source/: cmDependsC.cxx, cmDependsC.h: ENH: Teach cmDependsC + about user-configured macro transformations. + + - Syntax is SOME_MACRO(%)=value-with-% + - Later we will configure these with target and directory + properties. + - See issue #6648. + +2008-05-14 11:38 hoffman + + * Tests/CustomCommand/gen_once.c.in: file gen_once.c.in was added + on branch CMake-2-6 on 2008-05-15 19:40:01 +0000 + +2008-05-14 11:38 king + + * Source/cmAddCustomCommandCommand.cxx, + Source/cmAddCustomCommandCommand.h, Source/cmCustomCommand.cxx, + Source/cmCustomCommand.h, Source/cmMakefileTargetGenerator.cxx, + Tests/CustomCommand/CMakeLists.txt, Tests/CustomCommand/foo.in, + Tests/CustomCommand/gen_once.c.in: ENH: Add SKIP_RULE_DEPENDS + option for add_custom_command() + + - Allows make rules to be created with no dependencies. + - Such rules will not re-run even if the commands themselves + change. + - Useful to create rules that run only if the output is + missing. + +2008-05-14 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-13 16:57 hoffman + + * Modules/NSIS.template.in: BUG: if CPACK_NSIS_MODIFY_PATH was OFF + then the PATH was automatically modified + +2008-05-13 15:43 alex + + * Source/cmakemain.cxx, Utilities/CMakeLists.txt: STYLE: add + "--help-policy" and "--help-policies" to the documentation + -generate and install the policy documentation files -generate + and install the docbook files for cmake, ctest, cpack, ccmake + (cmake-gui not yet ?) + + Alex + +2008-05-13 10:34 king + + * Source/cmELF.cxx: BUG: When byte order is not known at compile + time make sure NeedSwap in cmELF is still initialized. + +2008-05-13 10:24 king + + * Source/cmELF.cxx: ENH: In cmELF it is okay if the byte order is + not known at compile time. + + - We perform a runtime check of the input file anyway. + +2008-05-13 10:24 king + + * Source/kwsys/CPU.h.in: ENH: Add ARM support to KWSys CPU header. + + - Patch from Pierre Habouzit + +2008-05-13 05:18 malaterre + + * Source/kwsys/ProcessUNIX.c: ENH: all ctype function have the same + issue: char can be signed or unsigned, since isspace only deal + with >=0 value (except EOF) one has to first cast it to unsigned + char + +2008-05-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-12 18:33 alex + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: make + ENABLE_LANGUAGE(ASM-ATT OPTIONAL) work again: if it didn't work + but was optional, don't delete the cache + + Alex + +2008-05-12 18:11 alex + + * Modules/CMakeTestFortranCompiler.cmake: STYLE: use IF(NOT ...) + instead of IF() ELSE() ... ENDIF() + + Alex + +2008-05-12 17:43 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmTarget.cxx, cmTarget.h: BUG: Make sure all source files are + found before generating. + + - Previously this was done implicitly by the check for a target + link language which checked all source full paths. + - The recent change to support computing a link language + without + finding all the source files skipped the implicit check. + - This change adds an explicit check to find all source files. + +2008-05-12 16:54 alex + + * Source/cmake.cxx: BUG: make "cmake -Wno-dev ../srcdir" work, + advancing i had the effect that the argument after -Wno-dev was + skipped, which happened to be the source directory, and so the + current working directory was assumed as source directory, + although it was the build directory (maybe this didn't have an + effect if there was already a CMakeCache.txt in the build dir) + + Alex + +2008-05-12 12:01 lorensen + + * Source/kwsys/ProcessUNIX.c: COMP: warning, isprint and isspace + take int args. + +2008-05-12 09:11 alex + + * Source/CTest/: cmCTestBuildCommand.h, cmCTestConfigureCommand.h, + cmCTestCoverageCommand.h, cmCTestEmptyBinaryDirectoryCommand.h, + cmCTestMemCheckCommand.h, cmCTestReadCustomFilesCommand.h, + cmCTestRunScriptCommand.h, cmCTestSleepCommand.h, + cmCTestStartCommand.h, cmCTestSubmitCommand.h, + cmCTestUpdateCommand.h: STYLE: use lower case also for the + ctest-specific commands, as in cmake + + I hope I didn't make a typo anywhere, at least the tests still + succeed + + Alex + +2008-05-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-11 05:12 alex + + * Modules/FindPackageHandleStandardArgs.cmake: BUG: fix #6375: + print the variables which were not found, so it's easier to see + what went wrong + + Alex + +2008-05-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-10 22:48 lorensen + + * Source/kwsys/: ProcessWin32.c, SystemInformation.cxx, + SystemTools.cxx: COMP: sprintf warnings. DWORD should use %ld + rather than %d. Also, const char *p, a shadowed variable warning. + +2008-05-10 19:07 alex + + * Modules/FindCurses.cmake: BUG: fix #6993 FindCurses.cmake is now + almost exactly reverted back to the state when CURSES_LIBRARY and + CURSES_INCLUDE_PATH where set for compatibility but not in the + cache. It is important that CURSES_CURSES_LIBRARY and + CURSES_NCURSES_LIBRARY really contain the path to these files. + Later on CURSES_LIBRARY is set to the one of the two which will + be used as curses library. This is now done in the cache, without + FORCE. So preloading the cache still seems to work (at least + what I tested). + + Alex + +2008-05-10 18:39 king + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmMakefileTargetGenerator.cxx: BUG: Fix generation of some paths + into .cmake files in the build tree to escape strings for the + CMake language. This fix allows users to put double quotes in + the SOVERSION of a shared library. + +2008-05-10 18:39 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fix logic that + loops over multiple output pairs to not loop beyond the vector + when there are an odd number of entries. + +2008-05-10 11:12 hoffman + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: make sure english + is used for output of gcov + +2008-05-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-09 21:26 dgregor + + * Modules/FindBoost.cmake: BUG: Fix FindBoost version variable + names to correct bug in Boost version detection + +2008-05-09 17:50 alex + + * Source/cmDocumentationFormatterDocbook.cxx: STYLE: insert + newlines after listitem so the generated lines don't get several + thousand characters long + + Alex + +2008-05-09 11:50 clinton + + * Modules/FindQt4.cmake: + ENH: Qt/Mac binary install puts QtCLucene library in a different + place than the normal Qt frameworks. Let's find it. + +2008-05-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-08 21:14 hoffman + + * Source/cmXCodeObject.cxx: ENH: fix for 64 bit cmake on mac + +2008-05-08 15:49 hoffman + + * Source/cmSetSourceFilesPropertiesCommand.cxx: BUG:6990 fix crash + with set_source_files_properties + +2008-05-08 12:47 hoffman + + * Source/CTest/cmCTestCoverageHandler.cxx: BUG: 0006988 do not set + coverage to false when it is not + +2008-05-08 10:09 king + + * Source/: cmDepends.cxx, cmDepends.h, cmDependsC.cxx, + cmDependsC.h, cmDependsFortran.cxx, cmDependsFortran.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: Light refactoring of + implicit dependency scanning configuration implementation. + + - Move lookup of config variables from + cmLocalUnixMakefileGenerator3 to cmDepends hierarchy. + +2008-05-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-07 17:25 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fix repeated + re-scanning of dependencies when the results do not change. + + - We re-scan deps when DependInfo.cmake is newer than + depend.internal + - Therefore depend.internal should not be copy-if-different + +2008-05-07 14:57 hoffman + + * Source/cmListCommand.cxx: ENH: fix sort to work with CMP0007 + +2008-05-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-06 12:56 barre + + * Utilities/cmtar/CMakeLists.txt: ENH: update for CMake 2.6 + +2008-05-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-05 13:38 hoffman + + * ChangeLog.manual, Source/cmDocumentationFormatter.cxx, + Source/cmDocumentationFormatter.h, + Source/cmDocumentationFormatterDocbook.cxx, + Source/cmDocumentationFormatterHTML.cxx: ENH: merge in changes + for generated docs + +2008-05-05 12:38 hoffman + + * CMakeLists.txt: ENH: try for 2.6.0 + +2008-05-05 12:02 king + + * Source/: cmDocumentationFormatter.cxx, + cmDocumentationFormatter.h, cmDocumentationFormatterDocbook.cxx, + cmDocumentationFormatterHTML.cxx: ENH: Fix generated + documentation internal links. + + - Previously all links started in 'command_' which led to + conflicts + and was confusing for non-command items. + - Use a per-section name that is meaningful to humans. + - Fix link id names to be valid HTML. + +2008-05-05 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-04 18:07 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/CTest.cmake, + Modules/FindQt4.cmake, Modules/FindX11.cmake, + Modules/GetPrerequisites.cmake, + Source/kwsys/SystemInformation.cxx: ENH: merge from main tree + +2008-05-04 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-03 17:55 clinton + + * Modules/FindQt4.cmake: + ENH: Allow finding phonon and QtDBus on Mac. Fixes #6950. + +2008-05-03 15:27 barre + + * Modules/FindX11.cmake: ENH: X11_SM_LIB should be advanced as well + +2008-05-03 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-02 17:36 hoffman + + * Source/kwsys/SystemInformation.cxx: BUG: really fix build on vs6 + +2008-05-02 17:22 hoffman + + * Source/kwsys/SystemInformation.cxx: BUG: fix build on vs6 + +2008-05-02 11:44 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: use GlobalMemoryStatusEx + as it is able to report more than 2gigs + +2008-05-02 11:25 hoffman + + * Modules/CTest.cmake: ENH: recognize vs 9 and possible 10 or + greater when they come out... + +2008-05-02 09:14 king + + * Source/kwsys/SystemInformation.cxx: COMP: Fix warnings in KWSys + SystemInformation on Borland compiler. + + - Remove two unused variables. + - Replace dynamically allocated array with static. + +2008-05-02 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-05-01 18:49 king + + * Modules/GetPrerequisites.cmake: ENH: When GetPrerequisites.cmake + runs dumpbin while running inside the VS IDE environment make + sure the tool does not produce extra output. + +2008-05-01 12:35 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/CheckTypeSize.cmake, + Modules/FindBoost.cmake, Modules/FindCurses.cmake, + Modules/FindKDE.cmake, Modules/FindSDL.cmake, + Modules/FindSDL_sound.cmake, Modules/FindVTK.cmake, + Modules/Platform/Darwin.cmake, + Modules/Platform/Linux-Intel-C.cmake, + Modules/Platform/Linux-Intel-CXX.cmake, + Modules/Platform/Linux-Intel-Fortran.cmake, + Modules/Platform/SunOS.cmake, + Modules/Platform/Windows-ifort.cmake, + Source/cmAuxSourceDirectoryCommand.cxx, + Source/cmComputeLinkDepends.cxx, Source/cmComputeLinkDepends.h, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, + Source/cmExportFileGenerator.cxx, + Source/cmExportLibraryDependencies.cxx, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmGlobalGenerator.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudioGenerator.cxx, + Source/cmGlobalVisualStudioGenerator.h, + Source/cmGlobalXCodeGenerator.cxx, Source/cmListFileCache.cxx, + Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmSourceFile.cxx, + Source/cmSourceFile.h, Source/cmWriteFileCommand.cxx, + Source/cmake.cxx, Source/cmake.h, Source/kwsys/System.c, + Source/kwsys/SystemInformation.cxx, + Tests/CustomCommand/CMakeLists.txt, + Tests/CustomCommand/gen_redirect_in.c, + Tests/CustomCommand/generator.cxx, Tests/CustomCommand/tcat.cxx, + Tests/CustomCommand/GeneratorInExtraDir/CMakeLists.txt: ENH: + merge from cvs create yikes RC 10! (I hope this is the last + RC...) + +2008-05-01 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-30 22:17 hoffman + + * Source/cmGlobalVisualStudioGenerator.cxx: STYLE: fix warning + +2008-04-30 18:04 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h, + cmComputeLinkInformation.cxx, cmComputeLinkInformation.h: ENH: + When preserving potentially static portions of original user link + lines recognize shared library names by their extension and skip + them. + +2008-04-30 15:58 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: For Watcom WMake + use the short path to avoid quoting problems in custom commands + with shell redirections. + +2008-04-30 15:58 king + + * Source/kwsys/System.c, Tests/CustomCommand/CMakeLists.txt: BUG: + Fix escaping of more characters on Windows shells. + +2008-04-30 15:53 hoffman + + * Modules/FindCurses.cmake: BUG: remove typo + +2008-04-30 15:42 hoffman + + * Modules/FindCurses.cmake: BUG: fix for 6918 ncurses should work + without curses + +2008-04-30 14:13 king + + * Modules/Platform/SunOS.cmake: ENH: Make /opt/SUNWspro/lib, + /opt/SUNWspro/prod/lib, and /usr/ccs/lib implicit link + directories on the Sun when using the SunPro compiler. + +2008-04-30 13:42 king + + * Source/: cmFileCommand.cxx, cmFileCommand.h, + cmGlobalGenerator.cxx, cmMakefile.cxx, cmMakefile.h, + cmWriteFileCommand.cxx, cmake.cxx, cmake.h: BUG: Remove check for + files written by file(WRITE) being loaded. + + - CMake 1.8 and below did not do the check but could get in + infinite loops due to the local generate step. + - CMake 2.0 added the check but failed to perform it in + directories + with no targets (see bug #678). + - CMake 2.2 removed the local generate which fixed the problem + but + did not remove the check. + - Between CMake 2.4 and 2.6.0rc6 the check was fixed to work + even + when no targets appear in a directory (see bug #6923). + - Bottom line: the check is no longer needed. + +2008-04-30 13:26 hoffman + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudioGenerator.cxx, + cmGlobalVisualStudioGenerator.h, cmLocalGenerator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmMakefile.cxx: ENH: add support + for Intel Fortran Visual studio IDE + +2008-04-30 11:33 hoffman + + * Modules/Platform/Windows-ifort.cmake: ENH: add more fortran flags + +2008-04-30 10:02 king + + * Source/kwsys/System.c: BUG: Fix + kwsysSystem_Shell_GetArgumentForWindows to reset the windows + trailing backslash count to zero when a make variable reference + is encountered. + +2008-04-30 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-29 15:34 hoffman + + * Tests/CustomCommand/tcat.cxx: file tcat.cxx was added on branch + CMake-2-6 on 2008-05-01 16:35:40 +0000 + +2008-04-29 15:34 hoffman + + * Tests/CustomCommand/gen_redirect_in.c: file gen_redirect_in.c was + added on branch CMake-2-6 on 2008-05-01 16:35:40 +0000 + +2008-04-29 15:34 king + + * Source/cmLocalGenerator.cxx, Tests/CustomCommand/CMakeLists.txt, + Tests/CustomCommand/gen_redirect_in.c, + Tests/CustomCommand/generator.cxx, Tests/CustomCommand/tcat.cxx, + Tests/CustomCommand/GeneratorInExtraDir/CMakeLists.txt: BUG: Do + not escape shell operators when generating command lines. + + - See bug#6868. + - Update CustomCommand test to check. + +2008-04-29 14:17 king + + * Source/: cmSourceFile.cxx, cmSourceFile.h: ENH: In + cmSourceFile::GetLanguage use the file extension (if not + ambiguous) to determine the language without requiring the source + file to exist. + +2008-04-29 14:17 king + + * Source/cmSourceFile.cxx: ENH: Add context information when a + source file cannot be found. + +2008-04-29 14:17 king + + * Source/cmMakefile.cxx: ENH: In cmMakefile::IssueMessage report + the directory-level context even if no list file is currently + being processed. + +2008-04-29 12:10 hoffman + + * Source/cmLocalGenerator.cxx: BUG: move this back out of the if + statemtn + +2008-04-29 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-28 13:53 hoffman + + * Modules/Platform/Darwin.cmake, Source/cmGlobalXCodeGenerator.cxx, + Source/cmLocalGenerator.cxx: ENH: allow users to set sysroot + +2008-04-28 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-27 11:41 alex + + * Modules/FindKDE.cmake: ENH: remove FindKDE.cmake, which was + obsolete (i.e. disabled using SEND_ERROR) since cmake 2.4.0, + agreed by Bill + + Alex + +2008-04-27 07:35 alex + + * Modules/FindVTK.cmake: BUG: don't fail with FATAL_ERROR if + REQUIRED was not used + + Alex + +2008-04-27 07:30 alex + + * Source/cmExportFileGenerator.cxx: ENH: protect the export files + against inclusion with cmake 2.4 + + Alex + +2008-04-27 07:01 alex + + * Source/: cmExportLibraryDependencies.cxx, cmListFileCache.cxx: + ENH: write the cmake version into the file created by + EXPORT_LIBRARY_DEPENDENCIES() to help with debugging later on. + The same should be done in the import target files (but I didn't + have time to do it yet). STYLE: fix line length in + cmListFileCache.cxx + + Alex + +2008-04-27 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-26 13:25 alex + + * Modules/FindBoost.cmake: BUG: don't use CMAKE_MINIMUM_REQUIRED() + in find modules, it can change the policy settings done in the + projects cmake files (and it doesn't make sense since it is + always part of the correct cmake version) + + Alex + +2008-04-26 08:39 hoffman + + * Source/cmAuxSourceDirectoryCommand.cxx: BUG: fix for bug 6911, + aux source dir was broken from a previous fix + +2008-04-26 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-25 15:30 king + + * Source/cmSourceFile.cxx: BUG: Trust user-provided source file + full paths. + +2008-04-25 10:47 hoffman + + * Modules/CheckTypeSize.cmake: ENH: allow users to turn off extra + checks + +2008-04-25 09:49 hoffman + + * Modules/Platform/Linux-Intel-CXX.cmake: ENH: remove c flags from + cxx config file + +2008-04-25 09:49 hoffman + + * Modules/Platform/Linux-Intel-CXX.cmake: file + Linux-Intel-CXX.cmake was added on branch CMake-2-6 on 2008-05-01 + 16:35:39 +0000 + +2008-04-25 09:43 hoffman + + * Modules/Platform/: Linux-Intel-Fortran.cmake, Linux-ifort.cmake: + ENH: rename Linux-ifort to Linux-Intel-Fortran + +2008-04-25 09:43 hoffman + + * Modules/Platform/Linux-Intel-Fortran.cmake: file + Linux-Intel-Fortran.cmake was added on branch CMake-2-6 on + 2008-05-01 16:35:39 +0000 + +2008-04-25 09:09 hoffman + + * Modules/CheckTypeSize.cmake: ENH: make sure all required headers + are checked before checking type size + +2008-04-25 09:07 hoffman + + * Modules/: FindSDL.cmake, FindSDL_sound.cmake: ENH: do not clear + find variables + +2008-04-25 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-24 22:00 hoffman + + * Modules/Platform/Linux-Intel-CXX.cmake: ENH: do not force the + intel ar on C from CXX + +2008-04-24 21:54 hoffman + + * Modules/Platform/: Linux-Intel-C.cmake, Linux-Intel-CXX.cmake, + Linux-icpc.cmake: ENH: support intel compiler on linux + +2008-04-24 21:54 hoffman + + * Modules/Platform/Linux-Intel-C.cmake: file Linux-Intel-C.cmake + was added on branch CMake-2-6 on 2008-05-01 16:35:38 +0000 + +2008-04-24 15:47 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: remove odd chars from + file + +2008-04-24 14:57 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: merge in changes from main + tree, fortran mod stuff + +2008-04-24 12:56 hoffman + + * ChangeLog.manual, Source/cmDependsFortranLexer.cxx, + Source/cmDependsFortranLexer.in.l, + Source/cmDependsFortranParser.cxx, + Source/cmDependsFortranParser.y, + Source/cmDependsFortranParserTokens.h: ENH: merge in changes from + main tree, fortran mod stuff + +2008-04-24 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-23 23:53 king + + * Source/: cmDependsFortranLexer.cxx, cmDependsFortranLexer.in.l, + cmDependsFortranParser.cxx, cmDependsFortranParser.y, + cmDependsFortranParserTokens.h: ENH: Patch from Maik to add + Fortran03 USE syntax support. + + - I tweaked the patch to add 'other' production rules for COMMA + and DCOLON + - See issue #6884. + +2008-04-23 15:02 hoffman + + * CMakeLists.txt, ChangeLog.manual: ENH: rc9 ready + +2008-04-23 12:51 jeff + + * Source/kwsys/SystemTools.cxx: ENH: Allow numbers in username in + URL regex. + +2008-04-23 12:14 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmInstallCommand.cxx, + Source/cmListCommand.cxx, Source/QtDialog/QMacInstallDialog.cxx: + ENH: merge in some fixes from head + +2008-04-23 11:13 king + + * Source/cmInstallCommand.cxx: BUG: Fix implementation of CMP0006 + to not override the BUNDLE destination with the RUNTIME + destination. + +2008-04-23 09:58 hoffman + + * Source/QtDialog/QMacInstallDialog.cxx: ENH: add better error + checks to symlink create stuff + +2008-04-23 09:56 hoffman + + * Source/cmListCommand.cxx: ENH: handle empty lists correctly + +2008-04-23 08:50 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Source/cmComputeLinkDepends.cxx, Source/cmComputeLinkDepends.h, + Tests/Dependency/CMakeLists.txt, + Tests/Dependency/Case3/CMakeLists.txt, + Tests/Dependency/Case3/bar.c, Tests/Dependency/Case3/foo1.c, + Tests/Dependency/Case3/foo1b.c, Tests/Dependency/Case3/foo2.c: + ENH: merge from main tree + +2008-04-23 00:40 hoffman + + * Tests/Dependency/Case3/CMakeLists.txt: file CMakeLists.txt was + added on branch CMake-2-6 on 2008-04-23 12:50:37 +0000 + +2008-04-23 00:40 hoffman + + * Tests/Dependency/Case3/bar.c: file bar.c was added on branch + CMake-2-6 on 2008-04-23 12:50:37 +0000 + +2008-04-23 00:40 hoffman + + * Tests/Dependency/Case3/foo1.c: file foo1.c was added on branch + CMake-2-6 on 2008-04-23 12:50:37 +0000 + +2008-04-23 00:40 hoffman + + * Tests/Dependency/Case3/foo1b.c: file foo1b.c was added on branch + CMake-2-6 on 2008-04-23 12:50:37 +0000 + +2008-04-23 00:40 hoffman + + * Tests/Dependency/Case3/foo2.c: file foo2.c was added on branch + CMake-2-6 on 2008-04-23 12:50:37 +0000 + +2008-04-23 00:40 king + + * Tests/Dependency/: CMakeLists.txt, Case3/CMakeLists.txt, + Case3/bar.c, Case3/foo1.c, Case3/foo1b.c, Case3/foo2.c: ENH: Add + test of preservation of static libraries on original link lines. + +2008-04-23 00:40 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h: BUG: + Fix preservation of static libraries on original link lines. + +2008-04-23 00:40 king + + * Source/cmComputeLinkDepends.cxx: ENH: Simplify link lines in some + cases by not allowing targets to be inferred dependees of items + with unknown dependencies. + +2008-04-23 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-22 22:05 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeDetermineASMCompiler.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/CMakeRCInformation.cmake, Modules/FindBoost.cmake, + Modules/FindMPI.cmake, Modules/Platform/Linux-icpc.cmake, + Source/cmListCommand.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmMakefileTargetGenerator.cxx, Source/cmPolicies.cxx, + Source/cmPolicies.h: ENH: merge into main tree + +2008-04-22 13:32 dgregor + + * Modules/FindBoost.cmake: ENH: FindBoost always sets + Boost_LIBRARY_DIRS when it finds the Boost libraries + +2008-04-22 13:14 dgregor + + * Modules/FindBoost.cmake: ENH: Integrated FindBoost improvements + changes from Andreas Pakulat, Mike Jackson, and myself + +2008-04-22 11:10 hoffman + + * Modules/CMakeRCInformation.cmake, + Source/cmMakefileTargetGenerator.cxx: BUG: fix for bug 6834 RC + should not get all COMPILE_FLAGS from a target and should work + the same way as it does in the vs ide + +2008-04-22 09:54 dgregor + + * Modules/FindMPI.cmake: BUG: As a last resort, FindMPI will look + for mpi.h in the path + +2008-04-22 09:41 dgregor + + * Modules/FindMPI.cmake: BUG: Use -showme:incdirs and + -showme:libdirs when we need them + +2008-04-22 09:35 hoffman + + * Modules/CMakeFortranInformation.cmake: ENH: fix FFFLAGS to be + FLAGS + +2008-04-22 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-21 18:51 alex + + * Modules/CMakeDetermineASMCompiler.cmake: BUG: fix handling of + assembler executable (with path) #6858 + + Alex + +2008-04-21 18:26 hoffman + + * Modules/Platform/Linux-icpc.cmake: ENH: use xiar for the intel + compiler + +2008-04-21 18:24 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: fix for 6720, + source groups on vs6 not working + +2008-04-21 16:57 hoffman + + * Source/: cmListCommand.cxx, cmPolicies.cxx, cmPolicies.h: ENH: + fix list command with empty elements + +2008-04-21 15:21 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeFortranInformation.cmake, + Source/cmComputeLinkInformation.cxx, Source/cmDependsFortran.cxx, + Source/cmDependsFortranLexer.cxx, Source/cmDependsFortranLexer.h, + Source/cmDependsFortranLexer.in.l, + Source/cmDependsFortranParser.cxx, + Source/cmDependsFortranParser.y, Tests/CMakeLists.txt: ENH: merge + in from main tree + +2008-04-21 13:04 hoffman + + * Modules/: CMakeCInformation.cmake, CMakeCXXInformation.cmake, + CMakeFortranInformation.cmake: ENH: fix init flags getting + stuffed into the compile line by force. + +2008-04-21 11:28 king + + * Source/: cmDependsFortranLexer.cxx, cmDependsFortranLexer.in.l, + cmDependsFortranParser.cxx, cmDependsFortranParser.y: STYLE: Fix + reference to makedepf90 project. + +2008-04-21 11:15 king + + * Source/: cmDependsFortran.cxx, cmDependsFortranLexer.cxx, + cmDependsFortranLexer.h, cmDependsFortranLexer.in.l: BUG: Fix + Fortran dependency parser preprocessor handling crash. + + - Do not crash if a #elseif occurs out of order + - Recognize preprocessor directives only at the beginning of + lines. + - See issue #6855 + +2008-04-21 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-20 20:44 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeDetermineCompilerABI.cmake, + Modules/CPack.RuntimeScript.in, Modules/CPack.cmake, + Modules/FindMPI.cmake, Modules/FindwxWidgets.cmake, + Source/cmELF.cxx, Source/cmELF.h, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmInstallCommand.cxx, + Source/cmInstallCommand.h, Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMessageCommand.cxx, Source/cmPolicies.cxx, + Source/cmPolicies.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTarget.cxx, + Source/CPack/cpack.cxx, Source/QtDialog/CMakeSetupDialog.cxx, + Source/QtDialog/CMakeSetupDialog.h, + Tests/Framework/CMakeLists.txt, + Tests/Tutorial/Step7/CMakeLists.txt, Tests/X11/CMakeLists.txt, + Tests/X11/HelloWorldX11.cxx: ENH: merge in from main tree + +2008-04-20 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-19 13:37 david.cole + + * Tests/CMakeLists.txt: BUG: Allow timeouts larger than 1500 for + tests that may take longer than 25 minutes on really slow/busy + machines. bootstrap has been timing out on tiamat, a very old + machine, this should help it... + +2008-04-19 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-18 17:32 hoffman + + * Source/cmComputeLinkInformation.cxx: ENH: only complain about -l + stuff for CMP0003 + +2008-04-18 10:55 david.cole + + * Source/CPack/cpack.cxx: COMP: auto_ptr will not compile without + including memory on some platforms + +2008-04-18 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-17 17:23 alex + + * Modules/CPack.cmake, Tests/Tutorial/Step7/CMakeLists.txt: ENH: + use a common CPACK_BINARY_ prefix for the binary package + generators + + Alex + +2008-04-17 12:06 david.cole + + * Source/CPack/cpack.cxx: BUG: Fix mem leak. Thanks, Mathieu. + +2008-04-17 11:16 david.cole + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Fix for issue + #6440. Use 0 instead of FALSE for ExceptionHandling with Visual + Studio 2005 and later. + +2008-04-17 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-16 11:31 david.cole + + * Modules/FindwxWidgets.cmake: BUG: There are compiler problems + with wxWidgets and INCLUDE_DIRECTORIES(SYSTEM ...) use on the + Mac. Set variable wxWidgets_INCLUDE_DIRS_NO_SYSTEM on the Mac in + FindwxWidgets.cmake to avoid these problems. + +2008-04-16 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-15 09:00 king + + * Source/cmELF.cxx: COMP: Fix signed/unsigned comparison warning in + cmELF. + +2008-04-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-14 18:03 king + + * Source/cmInstallCommand.h: ENH: Clarify documentation of + install(TARGETS) command to refer to install target types by the + upper-case keywords used when invoking the command. + +2008-04-14 17:53 king + + * Source/: cmInstallCommand.cxx, cmInstallCommand.h, + cmPolicies.cxx, cmPolicies.h: BUG: Fix compatibility with CMake + 2.4 for installation of MACOSX_BUNDLE targets + + - Add policy CMP0006 to decide whether to use compatibility + - OLD behavior is to fall back to RUNTIME rules + - NEW behavior is to produce an error + +2008-04-14 16:15 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h: + BUG: Fix issue when non-error messages were incorrectly colored + red. + +2008-04-14 15:27 king + + * Source/cmTarget.cxx, Tests/Framework/CMakeLists.txt: BUG: A + per-config target name postfix should be ignored for Mac bundle + and framework names. + +2008-04-14 15:25 king + + * Modules/CMakeDetermineCompilerABI.cmake: ENH: Clarify message + about checking for compiler ABI information. + +2008-04-14 15:02 king + + * Source/: cmFileCommand.cxx, cmFileCommand.h, + cmInstallTargetGenerator.cxx, cmInstallTargetGenerator.h: ENH: + Improve RPATH behavior during installation. + + - If new RPATH is empty then remove the entry completely + - Preserve file modification time so installation is not + repeated + - If installed file already exists remove it if its RPATH + does not match that expected + +2008-04-14 15:02 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added RPATH + methods to cmSystemTools + + - RemoveRPath to remove the RPATH from a binary + - CheckRPath to check for an existing RPATH in a binary + +2008-04-14 15:02 king + + * Source/: cmELF.cxx, cmELF.h: ENH: Added cmELF methods to get + information about DYNAMIC section entries. + +2008-04-14 12:44 king + + * Source/cmSystemTools.cxx: COMP: Fix new cmSystemTools file time + methods on Windows. + +2008-04-14 11:43 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added methods + to cmSystemTools to save and restore file modification times. + +2008-04-14 09:20 king + + * Source/cmMessageCommand.cxx: ENH: Make message(SEND_ERROR) report + context. + +2008-04-14 09:08 king + + * Source/cmMakefileTargetGenerator.cxx: BUG: When + MACOSX_PACKAGE_LOCATION specifies Headers/foo we must still + create the Headers symlink. + +2008-04-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-11 13:13 hoffman + + * Source/: cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx: BUG: make sure OBJECT_DIR is in + the path of the SHELL + +2008-04-11 10:41 hoffman + + * Modules/CPack.RuntimeScript.in: ENH: fix x11 launch script for + leopord x11 is auto-started for us on that os. + +2008-04-11 10:23 hoffman + + * Tests/X11/: CMakeLists.txt, HelloWorldX11.cxx: ENH: add a simple + x11 test for packaging + +2008-04-11 10:23 hoffman + + * Tests/X11/HelloWorldX11.cxx: file HelloWorldX11.cxx was added on + branch CMake-2-6 on 2008-04-21 00:44:59 +0000 + +2008-04-11 09:52 hoffman + + * Tests/X11/HelloWorldX11.cxx: ENH: add a simple x11 program + +2008-04-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-10 16:54 dgregor + + * Modules/FindMPI.cmake: ENH: Deal with 32-bit and 64-bit variants + of Microsoft's MPI properly + +2008-04-10 12:50 hoffman + + * ChangeLog.manual: ENH: change to RC 8 + +2008-04-10 12:43 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindQt4.cmake, + Source/cmLocalUnixMakefileGenerator3.cxx: ENH: merge in from main + tree + +2008-04-10 11:55 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: the sun make goes + into some odd n squared thing with this sccs and rcs stuff for + gmake, so I am removing them. + +2008-04-10 10:01 clinton + + * Modules/FindQt4.cmake: BUG: Fix typo reported in #6790. + +2008-04-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-09 14:57 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindJNI.cmake, + Source/cmSystemTools.cxx: ENH: merge from head for RC7 + +2008-04-09 08:41 hoffman + + * Tests/Framework/fooDeepPublic.h, + Modules/Platform/Darwin-icc.cmake, + Modules/Platform/Darwin-icpc.cmake: ENH: add missing file + +2008-04-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-08 17:37 hoffman + + * Source/cmSystemTools.cxx: BUG: undo change as it breaks + preprocess test for some reason?? + +2008-04-08 16:26 hoffman + + * Source/cmTarget.h: ENH: merge from main tree + +2008-04-08 16:13 hoffman + + * Source/cmTarget.h: ENH: remove qualifier from .h file + +2008-04-08 16:09 hoffman + + * Modules/FindJNI.cmake: ENH: have jni look more places on linux + +2008-04-08 16:06 hoffman + + * Source/cmSystemTools.cxx: BUG: half fix for 6688, expand registry + stuff on unix just like it was not found on windows + +2008-04-08 16:05 hoffman + + * Source/cmSystemTools.cxx: ENH: half fix for 6688, don't let [ + count go negative + +2008-04-08 13:42 king + + * Source/cmSystemTools.cxx: ENH: Update cmSystemTools::ChangeRPath + to support replacing rpath values from the middle of the string. + +2008-04-08 12:22 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindQt4.cmake, + Modules/InstallRequiredSystemLibraries.cmake, + Source/cmComputeLinkInformation.cxx, + Source/cmExtraEclipseCDT4Generator.cxx, Source/cmFileCommand.cxx, + Source/cmFindBase.cxx, Source/cmGlobalXCodeGenerator.cxx, + Source/cmInstallTargetGenerator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.h, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, Source/cmSystemTools.cxx, + Source/cmTarget.cxx, Source/cmTarget.h, Source/cmake.cxx, + Source/cmake.h, Source/QtDialog/CMakeLists.txt, + Source/QtDialog/CMakeSetup.cxx, + Source/QtDialog/CMakeSetupDialog.cxx, + Source/QtDialog/CMakeSetupDialog.h, + Source/QtDialog/CMakeSetupDialog.ui, Source/QtDialog/QCMake.cxx, + Source/QtDialog/QCMake.h, Source/QtDialog/QCMakeCacheView.cxx, + Source/QtDialog/QCMakeCacheView.h, + Source/QtDialog/QMacInstallDialog.cxx, + Source/QtDialog/postflight.sh.in, Tests/Framework/CMakeLists.txt: + ENH: merge in changes from main tree + +2008-04-08 11:30 hoffman + + * Source/QtDialog/CMakeLists.txt: ENH: make sure cmake-gui builds + with cmake 2.4.X + +2008-04-08 00:06 hoffman + + * Tests/Framework/fooDeepPublic.h: file fooDeepPublic.h was added + on branch CMake-2-6 on 2008-04-09 12:41:34 +0000 + +2008-04-08 00:06 king + + * Source/cmComputeLinkInformation.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmInstallTargetGenerator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.h, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, Source/cmTarget.cxx, + Source/cmTarget.h, Tests/Framework/CMakeLists.txt, + Tests/Framework/fooDeepPublic.h: BUG: Correct Mac OS X framework + behavior + + - Place the built library in foo.framework/Versions/A/foo + - Do not create unused content symlinks (like PrivateHeaders) + - Do not use VERSION/SOVERSION properties for frameworks + - Make cmTarget::GetDirectory return by value + - Remove the foo.framework part from cmTarget::GetDirectory + - Correct install_name construction and conversion on install + - Fix MACOSX_PACKAGE_LOCATION under Xcode to use the + Versions/ directory for frameworks + - Update the Framework test to try these things + +2008-04-07 23:56 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-07 19:43 clinton + + * Modules/FindQt4.cmake: + BUG: Fix problem with last patch when trying to take substr of + shorter strings than expected. Fixes #6730. + +2008-04-07 19:19 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + QCMake.cxx, QCMake.h: BUG: Fix #6733. Always convert "\" to "/" + in source & binary directory fields on Windows. + +2008-04-07 13:39 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, cmTarget.cxx, cmTarget.h: + BUG: Do not create target output directory in cmTarget. Let the + generators do it. + +2008-04-07 11:23 clinton + + * Modules/FindQt4.cmake: BUG: Fix 6726. Create correct moc rule + for configured headers in binary dir. + +2008-04-07 10:55 king + + * Source/: cmFileCommand.cxx, cmSystemTools.cxx: ENH: Improve error + message when installation file(CHRPATH) cannot change the RPATH. + +2008-04-06 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-06 22:19 hoffman + + * Source/cmFindBase.cxx: BUG: fix network path by mistake in search + +2008-04-05 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-04 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-04 16:02 hoffman + + * CMakeLists.txt, Source/cmFileCommand.cxx, Source/cmake.cxx, + Source/QtDialog/CMakeLists.txt, Source/QtDialog/CMakeSetup.cxx, + Source/QtDialog/QMacInstallDialog.cxx, + Source/QtDialog/postflight.sh.in: ENH: install the mac + application bundle into /Applications directly with no enclosing + folder + +2008-04-03 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-03 18:43 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: ENH: add edit_cache + target for Eclipse (if it's not ccmake, because this doesn't work + inside the log view) + + Alex + +2008-04-03 18:35 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.ui: ENH: + Fix exit shortcut to be more standard, and add shortcut for + advanced checkbox. + +2008-04-03 17:02 hoffman + + * Source/QtDialog/QMacInstallDialog.cxx: ENH: do not link . and .. + during install + +2008-04-03 16:49 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.ui: ENH: + Add more shortcuts. Fixes 6357. + +2008-04-03 16:18 hoffman + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + QMacInstallDialog.cxx: ENH: add ability to create symlinks for + command line on mac from gui + +2008-04-03 12:29 hoffman + + * Modules/InstallRequiredSystemLibraries.cmake: ENH: add vs9 mfc + libraries + +2008-04-03 11:11 hoffman + + * Source/cmMakefileTargetGenerator.cxx: BUG: response file must be + a copy if different or you get relinks every time you run cmake + +2008-04-02 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-02 17:41 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + QCMake.cxx, QCMake.h: + ENH: Add debug output option to a new Options menu. Move + dev warnings option to the new Options menu. Fixes #6335. + +2008-04-02 17:29 alex + + * Source/: cmake.cxx, cmake.h: ENH: make it possible to disable + debug output again + + Alex + +2008-04-02 15:28 clinton + + * Source/QtDialog/: QCMakeCacheView.cxx, QCMakeCacheView.h: + BUG: Keep editor alive when file dialog comes up to pick another + file or path. The editor going away prematurely Seems to + only happen on Mac OS X. + +2008-04-02 14:01 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h: + ENH: Allow cancelling the dialog that prompts for the generator. + +2008-04-02 11:07 hoffman + + * ChangeLog.manual, Modules/FindQt4.cmake: ENH: merge in findqt + change from main tree + +2008-04-02 11:05 hoffman + + * Modules/FindQt4.cmake: BUG: make sure all paths extracted from + qmake are converted to cmake paths because on windows they will + have \ instead of / and you can get odd escaping errors + +2008-04-02 09:16 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/CPackDeb.cmake, + Modules/FindQt4.cmake, Source/cmGetPropertyCommand.cxx, + Source/cmGetPropertyCommand.h, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmSetPropertyCommand.cxx, Source/cmSetPropertyCommand.h, + Source/cmSourceFile.cxx, Source/cmTarget.cxx, Source/cmTest.cxx, + Source/CPack/cmCPackDebGenerator.cxx, Source/kwsys/Process.h.in, + Source/kwsys/ProcessUNIX.c, Tests/Properties/CMakeLists.txt: ENH: + merge in main tree for RC 6 + +2008-04-02 08:36 malaterre + + * Source/kwsys/: Process.h.in, ProcessUNIX.c: STYLE: minor comments + +2008-04-01 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-04-01 17:59 alex + + * Modules/FindQt4.cmake: STYLE: add documentation for + QT4_CREATE_MOC and QT4_AUTOMOC (#6687) + + Alex + +2008-04-01 17:51 hoffman + + * Source/CPack/cmCPackDebGenerator.cxx, Modules/CPackDeb.cmake: + ENH: add CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA variable + +2008-04-01 17:39 hoffman + + * Source/cmGlobalVisualStudio8Generator.cxx: BUG: fix location of + tmp file to use the full path, caused error on vista not running + as admin + +2008-04-01 15:22 martink + + * Source/cmGetPropertyCommand.cxx: COMP: fix warning + +2008-04-01 14:22 martink + + * Source/cmGetPropertyCommand.cxx, Source/cmGetPropertyCommand.h, + Source/cmSetPropertyCommand.cxx, Source/cmSetPropertyCommand.h, + Source/cmSourceFile.cxx, Source/cmTarget.cxx, Source/cmTest.cxx, + Tests/Properties/CMakeLists.txt: ENH: support unset of properties + +2008-04-01 09:56 hoffman + + * Modules/CPackDeb.cmake: ENH: remove trailing space + +2008-03-31 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-31 17:57 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindMPI.cmake, + Source/cmComputeLinkDepends.cxx, Source/cmComputeLinkDepends.h, + Source/cmComputeLinkInformation.cxx, + Source/cmExportFileGenerator.cxx, Source/cmListFileCache.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmPolicies.cxx: ENH: merge changes + from head to 26 branch + +2008-03-31 13:48 king + + * Source/cmExportFileGenerator.cxx: BUG: Generated target export + files should set the policy version to 2.6 instead of the + currently running version because they are 2.6 compatible. + +2008-03-31 13:33 king + + * Source/: cmListFileCache.cxx, cmMakefile.cxx, cmMakefile.h, + cmPolicies.cxx: ENH: Allow policy CMP0000 to be set explicitly + + - Message for missing cmake_minimum_required is not issued + until the end of processing the top CMakeLists.txt file + - During processing a cmake_policy command may set behavior + - OLD behavior is to silently ignore the problem + - NEW behavior is to issue an error instead of a warning + +2008-03-31 12:47 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h, + cmComputeLinkInformation.cxx: BUG: Fix bug 6605 more completely + + - CMake 2.4 added link directories for targets linked + in the optimized configuration even when building debug + - Old behavior for policy CMP0003 must account for this + +2008-03-31 10:59 king + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: Improve speed of + manifest tool on VS8 and VS9. + + - Detect filesystem type where target will be linked + - Use FAT32 workaround only when fs is FAT or FAT32 + +2008-03-31 10:55 dgregor + + * Modules/FindMPI.cmake: ENH: Enhance FindMPI module by properly + handling backward compatibility with the older module, adding + documentation, and coping with multiple include and linker paths + +2008-03-31 08:04 hoffman + + * Modules/Platform/Darwin-icpc.cmake: file Darwin-icpc.cmake was + added on branch CMake-2-6 on 2008-04-09 12:41:47 +0000 + +2008-03-31 08:04 hoffman + + * Modules/Platform/Darwin-icc.cmake: file Darwin-icc.cmake was + added on branch CMake-2-6 on 2008-04-09 12:41:46 +0000 + +2008-03-31 08:04 david.cole + + * Modules/Platform/: Darwin-icc.cmake, Darwin-icpc.cmake: ENH: Add + Intel compiler module files for the Mac. Thanks to Mike Jackson + for contributing. + +2008-03-30 23:57 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-30 09:08 hoffman + + * CMakeLists.txt, ChangeLog.manual, ChangeLog.txt, + Modules/CMakeImportBuildSettings.cmake, Modules/CPackDeb.cmake, + Modules/FindCurses.cmake, Modules/FindQt4.cmake, + Source/CMakeLists.txt, Source/cmGlobalKdevelopGenerator.cxx, + Source/cmGlobalKdevelopGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmSystemTools.cxx, Source/cmTarget.cxx, Source/cmake.cxx, + Source/cmake.h, Source/CPack/cmCPackDebGenerator.cxx, + Source/QtDialog/CMakeSetupDialog.cxx, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in, + Tests/Fortran/test_use_in_comment_fixedform.f: ENH: merge from + main tree + +2008-03-29 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-29 13:16 hoffman + + * Source/cmake.h: ENH: make sure gui no-dev workis + +2008-03-28 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-28 20:23 alex + + * Source/CPack/cmCPackDebGenerator.cxx: BUG: fix packaging of files + installed to absolute paths, works only when used with + SET(CPACK_SET_DESTDIR "ON") + + Alex + +2008-03-28 19:09 alex + + * Modules/CPackDeb.cmake: STYLE: add a comma to make it better + understandable, also use STATUS as the other MESSAGE() calls do + + Alex + +2008-03-28 15:59 hoffman + + * Source/cmake.h: ENH: remove dangerous access to ivar that should + not be used + +2008-03-28 15:54 hoffman + + * Source/cmLocalGenerator.cxx: ENH: fix for the correct path to + cmake + +2008-03-28 14:29 hoffman + + * Source/: cmSystemTools.cxx, cmake.cxx: ENH: try to fix mac + symlinks to the executable + +2008-03-28 14:08 hoffman + + * Modules/CPackDeb.cmake: ENH: allow deb to work without dpkg + +2008-03-28 14:07 king + + * Modules/CMakeImportBuildSettings.cmake: ENH: Patch from Mathieu + Malaterre to add documentation for his previous patch for + CMakeImportBuildSettings. + +2008-03-28 14:04 king + + * Tests/Fortran/test_use_in_comment_fixedform.f: BUG: Fix Fortran + test to use more portable comment syntax in fixed format source. + +2008-03-28 13:26 king + + * Modules/CMakeImportBuildSettings.cmake: ENH: Patch from Mathieu + Malaterre to allow users to tell CMakeImportBuildSettings to not + force compiler settings. + +2008-03-28 13:22 king + + * Source/CMakeLists.txt: COMP: Add missing module for + CHECK_INCLUDE_FILE macro. + +2008-03-28 13:07 king + + * Source/cmTarget.cxx: ENH: Add note to Fortran_MODULE_DIRECTORY + property documentation about using CMAKE_Fortran_MODULE_DIRECTORY + to initialize it. + +2008-03-28 12:53 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: ENH: Better default size + for help dialog. + +2008-03-28 11:47 hoffman + + * Modules/: CPackDeb.cmake: ENH: remove hard codeded arch + +2008-03-28 10:12 hoffman + + * Modules/FindCurses.cmake: ENH: make this backwards compatible + with older FindCurses + +2008-03-28 10:08 hoffman + + * Modules/FindCurses.cmake: ENH: make this backwards compatible + with older FindCurses + +2008-03-27 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-27 22:00 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for 6619 + +2008-03-27 21:54 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for bug 6660 + +2008-03-27 21:51 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for bug 6661 + +2008-03-27 17:40 alex + + * Source/: cmGlobalKdevelopGenerator.cxx, + cmGlobalKdevelopGenerator.h: COMP: fix warning about unused mf + -"make VERBOSE=1 " should be more portable than + "VERBOSE=1 make ", since it doesn't rely on the shell, + shouldn't it ? + + Alex + +2008-03-27 17:05 hoffman + + * Source/: cmake.cxx, kwsys/SystemTools.cxx, + kwsys/SystemTools.hxx.in: BUG: fix install problem on make and + allow symlinks to cmake bin directory + +2008-03-27 15:33 alex + + * Source/cmGlobalKdevelopGenerator.cxx: ENH: -enable colored output + with the kdevelop generator -create non-verbose makefiles and + have kdevelop call "VERBOSE=1 make" instead + + Alex + +2008-03-27 15:18 clinton + + * Modules/FindQt4.cmake: + ENH: Add QT_VERSION_MAJOR, QT_VERSION_MINOR, QT_VERSION_PATCH + variables. + +2008-03-27 13:30 hoffman + + * ChangeLog.txt: ENH: remove DashboardScripts and CMakeWeb from the + change log + +2008-03-27 13:27 hoffman + + * ChangeLog.txt: ENH: check in new change log for 2.6 + +2008-03-27 11:16 hoffman + + * CMakeLists.txt, Modules/CPack.cmake, + Source/cmInstallCommandArguments.cxx, Source/cmake.cxx: ENH: + merge in from main tree + +2008-03-26 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-26 22:34 hoffman + + * Source/cmake.cxx: ENH: clean up annoying output from rc tool in + VS9 + +2008-03-26 20:12 alex + + * Modules/CPack.cmake: ENH: use CPACK_PACKAGE_VERSION instead of + CPACK_PACKAGE_VERSION_MAJOR.CPACK_PACKAGE_VERSION_MINOR.CPACK_PACKAGE_VERSION_PATCH + for creating the package file name + + Alex + +2008-03-26 18:30 alex + + * Source/cmInstallCommandArguments.cxx: BUG: fix the default + "Unspecified" component when only the generic (i.e. not RUNTIME, + ARCHIVE, LIBRARY, etc.) arguments are given. + + If the component of a part of a target is queried, return the + specific one, if a specific one hasn't been set, return the + generic one, if that hasn't been set, return "Unspecified". + + Alex + +2008-03-26 15:55 hoffman + + * Utilities/Release/: v20n17_aix_release.cmake, + vogon_release_qt.cmake: ENH: + +2008-03-26 14:08 hoffman + + * CMakeLists.txt, Modules/CMakeJavaInformation.cmake, + Modules/FindSubversion.cmake, Source/cmCoreTryCompile.cxx: ENH: + merge in from main tree + +2008-03-26 13:50 hoffman + + * Source/cmCoreTryCompile.cxx: ENH: make sure numAttempts is + incremented + +2008-03-26 13:14 hoffman + + * Source/cmCoreTryCompile.cxx: ENH: try to fix dashboard issue with + not being able to remove try compile code + +2008-03-25 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-25 19:58 hoffman + + * CMakeLists.txt, Source/cmLocalUnixMakefileGenerator3.cxx, + Tests/Assembler/CMakeLists.txt, + Tests/BuildDepends/CMakeLists.txt, + Tests/BundleTest/CMakeLists.txt, Tests/COnly/CMakeLists.txt, + Tests/CTestTest/CMakeLists.txt, Tests/CTestTest2/CMakeLists.txt, + Tests/CommandLineTest/CMakeLists.txt, + Tests/ConvLibrary/CMakeLists.txt, + Tests/CustComDepend/CMakeLists.txt, + Tests/CustomCommand/CMakeLists.txt, + Tests/CustomCommandWorkingDirectory/CMakeLists.txt, + Tests/Dependency/CMakeLists.txt, Tests/DocTest/CMakeLists.txt, + Tests/ExportImport/CMakeLists.txt, + Tests/ExportImport/Export/CMakeLists.txt, + Tests/ExportImport/Import/CMakeLists.txt, + Tests/ExternalOBJ/CMakeLists.txt, + Tests/ExternalOBJ/Object/CMakeLists.txt, + Tests/FindPackageTest/CMakeLists.txt, + Tests/Fortran/CMakeLists.txt, Tests/Framework/CMakeLists.txt, + Tests/FunctionTest/CMakeLists.txt, Tests/Java/CMakeLists.txt, + Tests/Jump/CMakeLists.txt, Tests/LoadCommand/CMakeLists.txt, + Tests/LoadCommandOneConfig/CMakeLists.txt, + Tests/LoadCommand/CMakeCommands/CMakeLists.txt, + Tests/LoadCommandOneConfig/CMakeCommands/CMakeLists.txt, + Tests/MacroTest/CMakeLists.txt, Tests/MakeClean/CMakeLists.txt, + Tests/MathTest/CMakeLists.txt, Tests/NewlineArgs/CMakeLists.txt, + Tests/OutOfSource/CMakeLists.txt, Tests/Plugin/CMakeLists.txt, + Tests/PrecompiledHeader/CMakeLists.txt, + Tests/Properties/CMakeLists.txt, Tests/ReturnTest/CMakeLists.txt, + Tests/RuntimePath/CMakeLists.txt, Tests/SameName/CMakeLists.txt, + Tests/SetLang/CMakeLists.txt, Tests/SimpleExclude/CMakeLists.txt, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SourceGroups/CMakeLists.txt, + Tests/StringFileTest/CMakeLists.txt, Tests/SubDir/CMakeLists.txt, + Tests/SubDir/Examples/CMakeLists.txt, + Tests/SubDir/Examples/example1/CMakeLists.txt, + Tests/SubDirSpaces/CMakeLists.txt, Tests/SubDirSpaces/Some + Examples/CMakeLists.txt, Tests/SubDirSpaces/Some + Examples/example1/CMakeLists.txt, + Tests/SubProject/CMakeLists.txt, Tests/SwigTest/CMakeLists.txt, + Tests/SystemInformation/CMakeLists.txt, + Tests/TarTest/CMakeLists.txt, Tests/TargetName/CMakeLists.txt, + Tests/TestDriver/CMakeLists.txt, Tests/Testing/CMakeLists.txt, + Tests/TryCompile/CMakeLists.txt, + Tests/Tutorial/Step1/CMakeLists.txt, + Tests/Tutorial/Step2/CMakeLists.txt, + Tests/Tutorial/Step3/CMakeLists.txt, + Tests/Tutorial/Step4/CMakeLists.txt, + Tests/Tutorial/Step5/CMakeLists.txt, + Tests/Tutorial/Step6/CMakeLists.txt, + Tests/Tutorial/Step7/CMakeLists.txt, + Tests/VSExternalInclude/CMakeLists.txt, + Tests/Wrapping/CMakeLists.txt, Tests/X11/CMakeLists.txt: ENH: + merge in from main tree + +2008-03-25 14:37 martink + + * Tests/ExternalOBJ/CMakeLists.txt: BUG: make test more robust + +2008-03-25 14:15 martink + + * Tests/ExternalOBJ/CMakeLists.txt: BUG: add debugging into to + check out a problem + +2008-03-25 11:26 martink + + * Tests/: Assembler/CMakeLists.txt, BuildDepends/CMakeLists.txt, + BundleTest/CMakeLists.txt, COnly/CMakeLists.txt, + CTestTest/CMakeLists.txt, CTestTest2/CMakeLists.txt, + CommandLineTest/CMakeLists.txt, ConvLibrary/CMakeLists.txt, + CustComDepend/CMakeLists.txt, CustomCommand/CMakeLists.txt, + CustomCommandWorkingDirectory/CMakeLists.txt, + Dependency/CMakeLists.txt, DocTest/CMakeLists.txt, + ExportImport/CMakeLists.txt, ExportImport/Export/CMakeLists.txt, + ExportImport/Import/CMakeLists.txt, ExternalOBJ/CMakeLists.txt, + ExternalOBJ/Object/CMakeLists.txt, + FindPackageTest/CMakeLists.txt, Fortran/CMakeLists.txt, + Framework/CMakeLists.txt, FunctionTest/CMakeLists.txt, + Java/CMakeLists.txt, Jump/CMakeLists.txt, + LoadCommand/CMakeLists.txt, LoadCommandOneConfig/CMakeLists.txt, + LoadCommand/CMakeCommands/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/CMakeLists.txt, + MacroTest/CMakeLists.txt, MakeClean/CMakeLists.txt, + MathTest/CMakeLists.txt, NewlineArgs/CMakeLists.txt, + OutOfSource/CMakeLists.txt, Plugin/CMakeLists.txt, + PrecompiledHeader/CMakeLists.txt, Properties/CMakeLists.txt, + ReturnTest/CMakeLists.txt, RuntimePath/CMakeLists.txt, + SameName/CMakeLists.txt, SetLang/CMakeLists.txt, + SimpleExclude/CMakeLists.txt, SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt, SourceGroups/CMakeLists.txt, + StringFileTest/CMakeLists.txt, SubDir/CMakeLists.txt, + SubDir/Examples/CMakeLists.txt, + SubDir/Examples/example1/CMakeLists.txt, + SubDirSpaces/CMakeLists.txt, SubDirSpaces/Some + Examples/CMakeLists.txt, SubDirSpaces/Some + Examples/example1/CMakeLists.txt, SubProject/CMakeLists.txt, + SwigTest/CMakeLists.txt, SystemInformation/CMakeLists.txt, + TarTest/CMakeLists.txt, TargetName/CMakeLists.txt, + TestDriver/CMakeLists.txt, Testing/CMakeLists.txt, + TryCompile/CMakeLists.txt, Tutorial/Step1/CMakeLists.txt, + Tutorial/Step2/CMakeLists.txt, Tutorial/Step3/CMakeLists.txt, + Tutorial/Step4/CMakeLists.txt, Tutorial/Step5/CMakeLists.txt, + Tutorial/Step6/CMakeLists.txt, Tutorial/Step7/CMakeLists.txt, + VSExternalInclude/CMakeLists.txt, Wrapping/CMakeLists.txt, + X11/CMakeLists.txt: ENH: preclean some warnings + +2008-03-25 10:11 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: fix for watcom + can't use phony + +2008-03-24 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-24 18:23 hoffman + + * CMakeLists.txt, Modules/FindBLAS.cmake, Modules/FindKDE4.cmake, + Modules/FindLAPACK.cmake, Modules/FindMPI.cmake, + Modules/FindQt4.cmake, Modules/FindSubversion.cmake, + Source/cmCMakeMinimumRequired.cxx, + Source/cmCMakePolicyCommand.cxx, + Source/cmComputeLinkInformation.cxx, Source/cmCoreTryCompile.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmIfCommand.cxx, Source/cmIfCommand.h, + Source/cmListFileCache.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, Source/cmPolicies.cxx, + Source/cmake.cxx, Source/cmake.h, + Source/CTest/cmCTestBuildHandler.cxx, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/MakeClean/ToClean/CMakeLists.txt, + Tests/Preprocess/CMakeLists.txt: ENH: merge in from CVS + +2008-03-24 15:41 hoffman + + * Modules/FindMPI.cmake: ENH: remove use of undefined cdr + +2008-03-24 15:40 hoffman + + * Modules/FindQt4.cmake: ENH: fix if + +2008-03-24 11:49 alin.elena + + * Modules/: FindBLAS.cmake, FindLAPACK.cmake: ENH: + FindBLAS.cmake&FindLAPACK updated to support intel mkl 10 + +2008-03-24 10:56 king + + * Source/: cmCMakeMinimumRequired.cxx, cmCMakePolicyCommand.cxx, + cmPolicies.cxx: ENH: Cleanup policy version interface presented + to user. + + - In cmake_minimum_required do not set policy version if + current + CMake is too old + - In cmPolicies::ApplyPolicyVersion report error if version is + too + new or cannot be parsed + +2008-03-24 10:26 hoffman + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: add PHONY targets + +2008-03-23 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-22 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-22 10:24 hoffman + + * Source/: cmake.h, cmake.cxx: ENH: make sure -Wno-dev sticks so + make rebuild_cache will work + +2008-03-21 23:58 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-20 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-20 21:11 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h, cmPolicies.cxx: ENH: Yet another + attempt at warning for CMP0003. + + - Give example code to avoid the warning + - Make explanation more consise + - Explicitly state this is for compatibility + - Issue the warning for at most one target + +2008-03-20 18:25 king + + * Source/cmIfCommand.cxx, Source/cmIfCommand.h, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: Add "if(POLICY + policy-id)" option for IF command. + + - This will help projects support multiple CMake versions. + - In order to set a policy when using a newer CMake but still + working with an older CMake one may write + if(POLICY CMP1234) + cmake_policy(SET CMP1234 NEW) + endif(POLICY CMP1234) + - Note that since CMake 2.4 does not have if(POLICY) supporting + it will also require using "if(COMMAND cmake_policy)" + +2008-03-20 18:25 king + + * Tests/: MakeClean/ToClean/CMakeLists.txt, + Preprocess/CMakeLists.txt: BUG: Convert cmake_policy(VERSION) to + cmake_minimum_required(VERSION) in + Tests/MakeClean/ToClean/CMakeLists.txt and + Tests/Preprocess/CMakeLists.txt. CMP0000 now requires the + cmake_minimum_required command. + +2008-03-20 11:44 david.cole + + * Modules/FindSubversion.cmake: BUG: Remove reference to + PROJECT_SOURCE_DIR so that the Subversion_WC_INFO macro may be + called from a ctest or cmake script. + +2008-03-20 10:46 martink + + * Source/cmListFileCache.cxx: ENH: tiny performance improvement + +2008-03-20 10:40 martink + + * Source/cmListFileCache.cxx: ENH: small simple projects do not + need to specify cmake minimum required + +2008-03-20 10:11 king + + * Source/cmake.cxx: ENH: Clarify end of (dev) warnings to + explicitly state they are meant for project developers. + +2008-03-19 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-19 16:14 clinton + + * Modules/FindQt4.cmake: + BUG: Fix issue when Qt from Linux distro is used and glib + and dbus development packages aren't installed. + +2008-03-19 15:44 king + + * Source/cmCoreTryCompile.cxx: BUG: Change generated try-compile + projects to use cmake_minimum_required instead of cmake_policy to + set the version now that CMP0000 requires it. + +2008-03-19 15:27 clinton + + * Modules/FindQt4.cmake: BUG: Don't clear output strings before + using. + +2008-03-19 15:18 king + + * Source/: cmListFileCache.cxx, cmPolicies.cxx: ENH: Improve + warning about specifying a cmake version + + - Update policy CMP0000 to require use of the command + cmake_minimum_required and not cmake_policy + so there is only one way to avoid it. + - Explicitly specify the line users should add. + - Reference policy CMP0000 only at the end. + - Fix policy CMP0000 documentation to not suggest + use of the cmake_policy command. + +2008-03-19 14:32 king + + * Source/cmComputeLinkInformation.cxx: ENH: Clarify warning for + policy CMP0003 further. + +2008-03-19 11:18 david.cole + + * Source/CTest/cmCTestBuildHandler.cxx: BUG: Missing a linker + crashed error matching string. + +2008-03-19 09:14 hoffman + + * Source/cmComputeLinkInformation.cxx: ENH: do not warn about + frameworks as they are not affected by -L anyway + +2008-03-18 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-18 21:22 hoffman + + * CMakeLists.txt: ENH: forgot to check this in, need to change the + version in CVS + +2008-03-18 18:37 clinton + + * Modules/FindQt4.cmake: + STYLE: Improve documentation by expanding on how UseQt4.cmake + fits in. + +2008-03-18 17:54 alex + + * Modules/FindQt4.cmake: STYLE: fix documentation again: + QT_LIBRARIES exists if you use Qt4 via UseQt4.cmake + + Alex + +2008-03-18 17:32 hoffman + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h: ENH: try to reduce the number of + CMP0003 warnings that people see. Only report them for unique + sets of libraries with no full path. Also add a message + explaining the course of action that should be taken + +2008-03-18 17:26 alex + + * Modules/FindQt4.cmake: STYLE: fix documentation, QT_LIBRARIES + doesn't exist, and also didn't exist in cmake 2.4.3, the first + stable cmake 2.4.x release + + Alex + +2008-03-18 16:30 clinton + + * Modules/FindQt4.cmake: + ENH: Satisfy QtDBus dependencies for builds with static Qt. + Finish fix for #6607. + +2008-03-18 11:51 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: exclude borland + make as well + +2008-03-18 11:28 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: turn off extra + rules for nmake and wmake + +2008-03-18 11:11 hoffman + + * CMakeLists.txt: ENH: set the version on 2.6 + +2008-03-18 10:23 hoffman + + * CMakeLists.txt, Modules/CTest.cmake, Modules/FindKDE4.cmake, + Modules/FindPackageHandleStandardArgs.cmake, + Modules/FindPackageMessage.cmake, Modules/FindQt4.cmake, + Modules/FindX11.cmake, Modules/UseQt4.cmake, + Modules/VTKCompatibility.cmake, + Modules/Platform/Linux-GNU-Fortran.cmake, + Modules/Platform/Linux-ifort.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmCMakeMinimumRequired.h, Source/cmCMakePolicyCommand.h, + Source/cmComputeLinkDepends.cxx, Source/cmComputeLinkDepends.h, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, + Source/cmDocumentVariables.cxx, Source/cmExportFileGenerator.cxx, + Source/cmListCommand.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, Source/cmMakefile.cxx, + Source/cmPolicies.cxx, Source/cmPolicies.h, + Source/cmSourceFileLocation.cxx, Source/cmTarget.cxx, + Source/cmTarget.h, Source/QtDialog/CMakeSetup.cxx, + Source/QtDialog/CMakeSetupDialog.cxx, + Source/kwsys/CMakeLists.txt, Source/kwsys/kwsysDateStamp.cmake, + Utilities/cmcurl/CMakeLists.txt: ENH: move head to branch + +2008-03-18 10:02 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: try to improve + make speed by getting rid of some implicit rules that were still + around. + +2008-03-17 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-17 20:30 king + + * Source/cmCMakePolicyCommand.h: ENH: Improve documentation of + cmake_policy command. + + - Add a paragraph introducing the policy mechanism + - Explicitly introduce the CMP, OLD, and NEW notation + - Note that setting policies by CMake version is preferred + - Fix SET signature to use CMP notation + - Add more details about the policy stack + +2008-03-17 16:22 king + + * CMakeLists.txt, Source/kwsys/CMakeLists.txt, + Utilities/cmcurl/CMakeLists.txt: ENH: Set CMake Policy CMP0003 to + NEW behavior to build without warnings with the upcoming CMake + 2.6 release. + +2008-03-17 14:53 clinton + + * Modules/FindQt4.cmake: + ENH: For Mac OS X, remove QuickTime link for Qt 4.3+ and add + AppKit link for Qt 4.2+. + +2008-03-17 11:10 hoffman + + * Modules/FindPackageMessage.cmake: file FindPackageMessage.cmake + was added on branch CMake-2-6 on 2008-03-18 14:23:52 +0000 + +2008-03-17 11:10 king + + * Modules/: FindPackageHandleStandardArgs.cmake, + FindPackageMessage.cmake, FindQt4.cmake, FindX11.cmake: ENH: + Added FindPackageMessage module + + - Defines FIND_PACKAGE_MESSAGE function to help display + find result messages only once + - Added use of it to FindPackageHandleStandardArgs + - Added use of it to FindQt4, and FindX11 + - This cleans up repeated messages in big projects + +2008-03-17 11:10 king + + * Modules/CTest.cmake: ENH: Avoid printing message about unknown + repository type repeatedly in CTest. + +2008-03-17 08:55 king + + * Modules/Platform/: Linux-GNU-Fortran.cmake, Linux-ifort.cmake: + ENH: Patch from Maik to add per-configuration default flags to + GCC and Intel Fortran compilers on Linux. + +2008-03-16 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-15 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-15 20:10 david.cole + + * Modules/CMakeJavaInformation.cmake: BUG: Go back to using "." so + the Java test passes on the nightly nmake dashboards again. Still + need a solution that works with both nmake and Visual Studio + builds. + +2008-03-15 10:00 king + + * Source/cmComputeLinkInformation.cxx: COMP: Fix unreachable code + warning for break after return in switch in CMP0003 impl. + +2008-03-15 10:00 king + + * Source/: cmTarget.cxx, cmSourceFileLocation.cxx: STYLE: Fix + line-too-long for new INTERNAL_ERROR messages. + +2008-03-14 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-14 18:16 alex + + * Modules/FindKDE4.cmake: ENH: preparations for cross compiling + KDE4 + + Alex + +2008-03-14 16:39 barre + + * Source/cmListCommand.cxx: STYLE: yeah yeah. + +2008-03-14 15:18 clinton + + * Source/QtDialog/CMakeSetup.cxx: + ENH: Prevent loading standard qt plugins at runtime (which we + dont' care about). This can cause problems if a Mac bundle + doesn't contain the plugins. + +2008-03-14 14:28 clinton + + * Modules/FindQt4.cmake: BUG: Fix typo to find QAssistantClient + header. + +2008-03-14 14:21 king + + * Source/cmComputeLinkInformation.cxx: ENH: Improve CMP0003 to + provide more compatibility + + - Targets built in the tree now add compatibility paths too + - The warning message's first list includes at most one item + for each unique compatibility path + - Clarified error message further + +2008-03-14 13:29 clinton + + * Modules/FindQt4.cmake: + ENH: Satisfy QtNetwork and QtOpenGL dependencies for builds with + static Qt. Partial fix for #6607. + +2008-03-14 13:16 clinton + + * Modules/: FindQt4.cmake, UseQt4.cmake: + ENH: Automatically add dependent modules. For example, if + QT_USE_QTXMLPATTERNS is on, QT_USE_QTNETWORK is turned on. + The equivalent happens in a qmake .pro file when QT += + xmlpatterns is specified. + +2008-03-14 12:11 clinton + + * Modules/FindQt4.cmake: + ENH: Support static Qt 4.4 builds using QtHelp module. + +2008-03-13 19:12 clinton + + * Modules/: FindQt4.cmake, UseQt4.cmake: + ENH: Add support for Qt 4.4's phonon module. Add new Qt + 4.4 modules in UseQt4.cmake + +2008-03-13 17:38 king + + * Source/cmMakefile.cxx: BUG: Fix impl of CMP0005 regex to match + value-less definitions. + +2008-03-13 17:32 king + + * Source/: cmCMakeMinimumRequired.h, cmPolicies.cxx: ENH: Clarify + documentation of policy CMP0000 and its relationship with + cmake_minimum_required. + +2008-03-13 17:11 king + + * Source/: cmMakefile.cxx, cmPolicies.cxx, cmPolicies.h: ENH: Add + policy CMP0005 to decide whether add_definitions should escape + defs. + +2008-03-13 17:04 king + + * Source/cmExportFileGenerator.cxx: ENH: Add cmake_policy + push/version/pop to import/export files. + +2008-03-13 16:42 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: fix c flags for 2003 free + command line tools + +2008-03-13 16:35 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h, + cmPolicies.cxx, cmPolicies.h, cmTarget.cxx, cmTarget.h: ENH: Add + policy CMP_0004 to require library names to have no leading or + trailing whitespace. Replace previous check of + CMAKE_BACKWARDS_COMPATIBILITY against version 2.4 with the + policy. + +2008-03-13 16:23 king + + * Modules/VTKCompatibility.cmake, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, + Source/cmDocumentVariables.cxx, Source/cmPolicies.cxx, + Source/cmPolicies.h, Source/cmTarget.cxx, Source/cmTarget.h: ENH: + Convert CMAKE_LINK_OLD_PATHS to policy CMP0003. + + - Policy is WARN by default so projects will build + as they did in 2.4 without user intervention + - Remove CMAKE_LINK_OLD_PATHS variable since it was + never in a release and the policy supercedes it + - Report target creation backtrace in warning message + since policy should be set by that point + +2008-03-13 16:21 hoffman + + * Source/QtDialog/CMakeSetupDialog.cxx: ENH: make menu item match + -Wno-dev command line + +2008-03-13 16:13 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: ENH: Preserve white spaces + when printing messages. + +2008-03-13 15:34 hoffman + + * Source/cmake.cxx: ENH: move the clear to before things are added + to the maps + +2008-03-13 15:29 clinton + + * Modules/FindQt4.cmake: + ENH: Add support for new modules in Qt 4.4. Fixes #6316. + Simplify and clarify some documentation. + + BUG: Fix order of include paths (from KDE's FindQt4) Fix + find of Designer components debug library on Windows. + +2008-03-13 15:06 king + + * Source/cmake.cxx: ENH: Make (dev) warnings show note about + -Wno-dev option. Fix -Wdev and -Wno-dev options to not be + mistaken for the source directory specification. + +2008-03-13 15:03 david.cole + + * Modules/CMakeJavaInformation.cmake: COMP: Conditionalize the last + change so that the fix only applies to WIN32. Leave it the way it + was elsewhere, the new way does not work on the Mac continuous + dashboard... + +2008-03-13 15:01 king + + * Source/cmPolicies.cxx: ENH: Reduce whitespace in policy + warning/error messages. + +2008-03-13 14:29 david.cole + + * Modules/CMakeJavaInformation.cmake: BUG: Fix the Java test for + Visual Studio builds. Before this, it had been trying to include + "BuildLog.htm" in the .jar file because it was using "." as the + list of files to include in the .jar file. Use "*.class" instead + of "." to prevent this silliness. + +2008-03-13 14:13 king + + * Source/cmMakefile.cxx: ENH: Improve error message when invalid + policy is given. + +2008-03-13 13:52 king + + * Source/cmSetCommand.cxx: ENH: Simplify error message for invalid + set(... CACHE) calls to make it look nicer with new message + format. + +2008-03-13 13:48 king + + * Source/: cmListFileCache.cxx, cmListFileCache.h, cmMakefile.cxx, + cmMakefile.h, cmTarget.cxx, cmTarget.h, cmake.cxx, cmake.h: ENH: + Improve new error/warning message generation + + - Add cmListFileBacktrace to record stack traces + - Move main IssueMessage method to the cmake class instance + (make the backtrace an explicit argument) + - Change cmMakefile::IssueMessage to construct a backtrace + and call the cmake instance version + - Record a backtrace at the point a target is created + (useful later for messages issued by generators) + +2008-03-13 11:38 martink + + * Source/: cmCMakePolicyCommand.h, cmListFileCache.cxx, + cmLocalGenerator.cxx, cmMakefile.cxx, cmPolicies.cxx, + cmPolicies.h, cmake.cxx: ENH: change CMP_ to CMP + +2008-03-13 10:56 hoffman + + * Modules/FindGLUT.cmake: BUG: fix bug 6594 look for glut in more + places on windows + +2008-03-13 09:28 barre + + * Source/cmFileCommand.cxx: BUG: the directory the FILE DOWNLOAD + command is writing to might not exist. + +2008-03-12 23:59 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-12 21:54 hoffman + + * CMakeCPackOptions.cmake.in, + Source/CPack/cmCPackCygwinBinaryGenerator.cxx, + Source/CPack/cmCPackCygwinSourceGenerator.cxx, + Source/CPack/cmCPackGenerator.cxx: ENH: fix crash in cpack when + CPACK_CYGWIN_PATCH_NUMBER not specified + +2008-03-12 21:06 hoffman + + * Source/: cmLocalUnixMakefileGenerator3.cxx, cmMakefile.cxx, + cmSourceFileLocation.cxx, cmTarget.cxx, cmake.h: ENH: remove + abort calls and replace with an IssueMessage INTERANL_ERROR, + better to not crash on the end user. + +2008-03-12 17:02 hoffman + + * Source/: cmake.cxx, cmake.h: ENH: make sure properties are re-set + on each configure + +2008-03-12 17:02 barre + + * Source/cmListCommand.cxx, Source/cmListCommand.h, + Tests/CMakeTests/ListTest.cmake.in: ENH: add REMOVE_DUPLICATES + subcommand to LIST command (and test). Remove duplicates from a + list (keep the ordering) + +2008-03-12 14:37 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: fix some bad + changes in progress calc + +2008-03-12 09:25 hoffman + + * Source/cmMakefile.cxx: STYLE: fix line len + +2008-03-12 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-11 22:52 hoffman + + * Source/QtDialog/CMakeSetupDialog.cxx: ENH: remove iostream, not + used + +2008-03-11 22:50 hoffman + + * Source/: cmake.cxx, cmake.h, QtDialog/CMakeSetupDialog.cxx, + QtDialog/CMakeSetupDialog.h, QtDialog/QCMake.cxx, + QtDialog/QCMake.h: ENH: add ability to suppress dev warnings to + gui code + +2008-03-11 17:53 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fix subtle bug + that prevented Makefile generators from rescanning dependencies + when a new source file is added but no other sources are touched. + +2008-03-11 17:37 king + + * Source/kwsys/SystemInformation.hxx.in: COMP: Fix shared lib build + on windows for KWSys's SystemInformation by adding export macro. + +2008-03-11 17:27 hoffman + + * Source/QtDialog/: CMake.desktop, CMakeLists.txt, cmakecache.xml: + ENH: add KDE desktop stuff + +2008-03-11 17:27 hoffman + + * Source/cmMakefile.cxx: ENH: fix warning message a bit + +2008-03-11 17:25 king + + * Source/: cmGlobalVisualStudio8Generator.cxx, cmake.cxx, cmake.h: + BUG: Fixes to VS8/VS9 project regeneration rules + + - ZERO_CHECK should check all stamps in case + of parallel build (fixes complex test failure) + - ZERO_CHECK should not appear when + CMAKE_SUPPRESS_REGENERATION is on (fixes bug 6490) + +2008-03-11 16:02 hoffman + + * Source/: cmake.h, cmakemain.cxx: ENH: fix -Wno-dev for ccmake + +2008-03-11 15:17 hoffman + + * Source/: cmMakefile.cxx, cmake.cxx, cmakemain.cxx: ENH: add a way + to suppress the new policy warnings, still need ccmake and gui's + +2008-03-11 10:54 barre + + * Docs/cmake-mode.el: ENH: add simple function to convert all CMake + commands to lowercase + +2008-03-11 10:29 hoffman + + * Source/: cmListFileCache.cxx, cmMakefile.cxx, cmMakefile.h, + cmPolicies.cxx, cmake.h: ENH: add enum to IssueMessage + +2008-03-11 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-10 18:48 barre + + * Modules/: FindCVS.cmake: ENH: for some reasons there was never a + FindCVS module? + +2008-03-10 15:41 king + + * Source/cmMakefile.cxx: ENH: Enforce matching PUSH/POP calls for + cmake_policy. + +2008-03-10 15:40 king + + * Source/cmMakefile.cxx: ENH: Add directory-level context + information to error/warning messages when no call stack is + present. + +2008-03-10 13:26 alex + + * Modules/: FindLua50.cmake, FindLua51.cmake: ENH: use the standard + find_package_handle_standard_args() for lua 5.0 and 5.1 + + Alex + +2008-03-10 09:32 king + + * Modules/: CMakeCCompilerId.c.in, CMakeCXXCompilerId.cpp.in, + CMakePlatformId.h.in: ENH: Make compiler id detection more robust + + - Split INFO strings in source into multiple pieces + to make sure assembly or other listings produced + by the compiler are never matched by the regex + - Store INFO strings via pointer instead of array + to convince some compilers to store the string + literally in the binary + - This should help make it work for sdcc 2.8.0 RC1 + +2008-03-10 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-09 19:20 alex + + * Modules/CMakeDetermineCompilerId.cmake: BUG: make compiler id + detection (almost) work again with sdcc 2.8.0 RC1, mail sent to + Brad for the remaining issue don't match INFO:compiler[" + COMPILER_ID "] which appears in the assembler file generated from + the C file by sdcc, but make sure the first character after the [ + is no double quote + + Alex + +2008-03-09 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-08 09:50 king + + * Source/cmIncludeDirectoryCommand.cxx: BUG: Fix + include_directories command to produce an immediately whether or + not 2.4 compatibility is enabled. CMake 2.4 already produced an + error, just not immediately. + +2008-03-08 09:27 king + + * Source/cmIncludeCommand.cxx: ENH: Improve formatting of include + command error message. + +2008-03-08 09:21 king + + * Source/cmMakefile.cxx: COMP: Avoid using operator-> on + const_reverse_iterator to help old compilers. + +2008-03-08 09:13 king + + * Source/: cmMakefile.cxx, cmPolicies.cxx: ENH: Cleanup policy + generic documentation. Cleanup some policy error/warning + messages. + +2008-03-08 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-07 19:58 hoffman + + * Modules/FindMPI.cmake: ENH: add new version of FindMPI, fix it to + work with MPICH2 on windows + +2008-03-07 17:05 king + + * Source/cmAddCustomTargetCommand.cxx: COMP: Fix unused parameter + warning in cmAddCustomTargetCommand. + +2008-03-07 16:36 king + + * Source/: cmMakefile.cxx, cmPolicies.cxx, cmPolicies.h, cmake.cxx: + ENH: Finish creating, documenting, and enforcing policy CMP_0002. + +2008-03-07 16:32 hoffman + + * Source/CursesDialog/: cmCursesCacheEntryComposite.cxx, + cmCursesMainForm.cxx: ENH: fix it for working with an empty cache + +2008-03-07 16:26 king + + * bootstrap: COMP: Fix bootstrap build after using + cmDocumentationFormatterText in cmMakefile. + +2008-03-07 16:01 king + + * Source/: cmDocumentationFormatterText.cxx, cmMakefile.cxx: ENH: + In cmMakefile::IssueMessage use cmDocumentationFormatterText to + format the message nicely. + +2008-03-07 15:30 king + + * Source/cmAddCustomTargetCommand.cxx, + Source/cmCMakeMinimumRequired.h, Source/cmCMakePolicyCommand.h, + Source/cmConfigureFileCommand.cxx, Source/cmFindBase.cxx, + Source/cmListFileCache.cxx, Source/cmLocalGenerator.cxx, + Source/cmMakefile.cxx, Source/cmPolicies.cxx, + Source/cmPolicies.h, Source/cmake.cxx, + Tests/MakeClean/ToClean/CMakeLists.txt, + Tests/Preprocess/CMakeLists.txt: ENH: Improve handling of + old-style compatibility. + + - Remove CMP_0001 (no slash in target name) and restore + old CMAKE_BACKWARDS_COMPATIBILITY check for it + - Replace all checks of CMAKE_BACKWARDS_COMPATIBILITY + with cmLocalGenerator::NeedBackwardsCompatibility calls + - Create new CMP_0001 to determine whether or not + CMAKE_BACKWARDS_COMPATIBILITY is used. + (old = use, new = ignore) + - Show CMAKE_BACKWARDS_COMPATIBILITY in cache only when + CMP_0001 is set to OLD or WARN + - Update documentation of cmake_policy and + cmake_minimum_required + to indicate their relationship and the 2.4 version boundary + - When no cmake policy version is set in top level makefile + implicitly call cmake_policy(VERSION 2.4) which restores + CMAKE_BACKWARDS_COMPATIBILITY and other 2.4 compatibility + - Fix tests MakeClean and Preprocess to call + cmake_policy(VERSION 2.6) because they depend on new policies + +2008-03-07 14:03 hoffman + + * Utilities/Release/: create-cmake-release.cmake, + dashmacmini2_release.cmake, magrathea_release.cmake, + release_cmake.sh.in: ENH: qtgui stuff + +2008-03-07 11:50 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: ENH: Use fixed pitch font + in output window. + +2008-03-07 11:43 martink + + * Source/: cmCMakeMinimumRequired.cxx, cmCacheManager.h, + cmListFileCache.cxx, cmPolicies.cxx, cmake.cxx: ENH: clean up + some policy stuff and interactions with + CMAKE_BACKWARDS_COMPATIBILITY and CMAKE_MINIMUM_REQUIRED + +2008-03-07 11:06 hoffman + + * Source/CPack/: cmCPackCygwinBinaryGenerator.cxx, + cmCPackGenerator.cxx: ENH: fix crash in cygwin package stuff + +2008-03-07 09:41 martink + + * Source/cmListFileCache.cxx: STYLE: fix line length issue + +2008-03-07 09:09 king + + * Source/cmMakefile.cxx: BUG: Do not produce whitespace-only lines + when indenting messages in new error/warning format. + +2008-03-07 08:53 king + + * Source/cmCoreTryCompile.cxx: BUG: Generated try-compile + CMakeLists.txt file should call cmake_policy with the current + version of CMake, not just 2.6. + +2008-03-07 08:40 king + + * Source/: cmAddCustomTargetCommand.cxx, cmExecutionStatus.h, + cmFunctionCommand.cxx, cmListFileCache.cxx, cmListFileCache.h, + cmMacroCommand.cxx, cmMakefile.cxx, cmMakefile.h, cmPolicies.cxx: + ENH: New format for warning and error messages + + - Add cmMakefile methods IssueError and IssueWarning + - Maintain an explicit call stack in cmMakefile + - Include context/call-stack info in messages + - Nested errors now unwind the call stack + - Use new mechanism for policy warnings and errors + - Improve policy error message + - Include cmExecutionStatus pointer in call stack + so that errors deeper in the C++ stack under + a command invocation will become errors for the + command + +2008-03-07 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-06 16:03 martink + + * Source/cmListFileCache.cxx: BUG: keep CMAKE_BACKWARDS_COMP as + internal + +2008-03-06 15:51 martink + + * Source/cmListFileCache.cxx: BUG: make default + CMAKE_BACKWARDS_COMPATIBILITY 2.5 + +2008-03-06 15:20 hoffman + + * Source/cmCoreTryCompile.cxx: ENH: make sure policy is set in + generated cmakelist files + +2008-03-06 15:08 martink + + * Source/: cmConfigureFileCommand.cxx, cmListFileCache.cxx, + cmPolicies.cxx: BUG: change in handling of cmake_minimum_required + +2008-03-06 11:34 hoffman + + * Source/cmDocumentationFormatterHTML.cxx: STYLE: fix line length + +2008-03-06 10:57 martink + + * Source/: cmCMakeMinimumRequired.cxx, cmConfigureFileCommand.cxx, + cmListFileCache.cxx, cmListFileCache.h, cmMakefile.cxx, + cmPolicies.cxx: BUG: change the handling of + CMAKE_MINIMUM_REQUIRED and BACKWARDS_COMPATIBILITY and extend the + documentaiton quite a bit + +2008-03-06 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-05 18:42 king + + * Source/cmPolicies.cxx: ENH: Fix policy warning message to not + give wrong code as example. + +2008-03-05 18:21 king + + * Source/: cmCMakePolicyCommand.cxx, cmCMakePolicyCommand.h, + cmMakefile.cxx, cmMakefile.h: ENH: Improve cmake_policy command + signature + + - Replace NEW and OLD modes with a SET mode for clarity + - Enforce VERSION argument validity (major.minor[.patch]) + +2008-03-05 18:20 king + + * Source/cmPolicies.cxx: BUG: Require policy version to specify at + least major.minor. Do not store CMAKE_BACKWARDS_COMPATIBILITY + with an invalid version value. + +2008-03-05 17:26 king + + * Source/cmPolicies.cxx: BUG: Fix parsing of policy version number + in cmPolicies. + +2008-03-05 15:55 king + + * Modules/CMakeFortranCompiler.cmake.in: ENH: Patch from Maik to + add more fortran extensions. + +2008-03-05 12:53 clinton + + * Modules/FindQt4.cmake: + ENH: Allow users to recover from trying to use an improperly + installed Qt without removing their cache, fixing their + environment and trying again. + +2008-03-05 11:41 martink + + * Source/: cmConfigureFileCommand.cxx, cmMakefile.cxx, + cmPolicies.cxx, cmPolicies.h: BUG: some fixes, still a few to go + +2008-03-05 11:05 hoffman + + * Source/: cmDocumentation.cxx, cmDocumentationFormatter.h, + cmDocumentationFormatterHTML.cxx, cmDocumentationFormatterHTML.h: + ENH: add master index into html full help + +2008-03-05 03:11 ewing + + * Modules/FindOpenAL.cmake: BUG: Fixed PATH_SUFFIXES copy/paste bug + (0006201) + +2008-03-05 00:00 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-04 18:57 king + + * Source/cmMakefile.cxx: BUG: Make sure at least one policy stack + entry is created for every cmMakefile instance. + +2008-03-04 18:42 king + + * Source/: cmCMakeMinimumRequired.cxx, cmCMakeMinimumRequired.h: + ENH: Make CMAKE_MINIMUM_REQUIRED command FATAL_ERROR option + implicit (always on). Accept but ignore the existing option. + +2008-03-04 18:41 king + + * Source/: cmGlobalGenerator.cxx, cmIncludeDirectoryCommand.cxx: + BUG: Fix crash when CMAKE_BACKWARDS_COMPATIBILITY is not set. + +2008-03-04 14:51 martink + + * Source/: cmCMakeMinimumRequired.cxx, cmPolicies.cxx, cmake.cxx: + ENH: more policy changes + +2008-03-04 13:51 king + + * Source/cmTarget.cxx: BUG: Fix memory leak when cmTarget instances + are assigned. We really need to get rid of global targets and + their associated assignments. + +2008-03-04 13:34 hoffman + + * Source/CTest/cmCTestSubmitHandler.cxx: STYLE: fix line len + +2008-03-04 09:40 king + + * Source/cmDocumentVariables.cxx: BUG: Fix typo in documentation of + LIBRARY_OUTPUT_PATH. + +2008-03-04 09:16 martink + + * Source/: cmDocumentation.cxx, cmDocumentation.h, + cmDocumentationFormatter.h, cmPolicies.cxx, cmPolicies.h, + cmake.cxx, cmake.h, cmakemain.cxx: ENH: add --help-policies and + --help-policy command line options + +2008-03-04 09:10 martink + + * CMakeLists.txt: BUG: undo accidental commit + +2008-03-04 08:18 david.cole + + * Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/GetPrerequisitesTest.cmake.in, + Modules/GetPrerequisites.cmake: ENH: Add script + GetPrerequisites.cmake to help analyze what shared libraries + executable files depend on. Primary uses are to determine what + shared libraries should be copied into Mac OSX bundle + applications to create standalone bundles apps and to determine + what shared library files need to be installed for an executable + to run on any platform. Requires native platform tools dumpbin, + otool and ldd to generate results. + +2008-03-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-03 20:31 king + + * Modules/UsewxWidgets.cmake: STYLE: Remove trailing whitespace. + +2008-03-03 20:24 king + + * Modules/CMakeASMInformation.cmake: STYLE: Remove trailing + whitespace. + +2008-03-03 15:56 king + + * Modules/Use_wxWindows.cmake: STYLE: Remove trailing whitespace. + +2008-03-03 11:57 king + + * Modules/VTKCompatibility.cmake: STYLE: Remove trailing + whitespace. + +2008-03-03 11:28 hoffman + + * Source/cmAddCustomTargetCommand.cxx: ENH: fix ICE with gcc in + dash8 + +2008-03-03 11:18 king + + * Modules/CMakeForceCompiler.cmake: STYLE: Fixed docs of new + CMakeForceCompiler + +2008-03-03 11:16 king + + * Modules/CMakeForceCompiler.cmake: ENH: Restore + CMAKE_FORCE_C_COMPILER and CMAKE_FORCE_CXX_COMPILER macros in + CMakeForceCompiler module. + +2008-03-03 08:48 king + + * Source/cmELF.cxx: COMP: Fix cmELF to build when ET_LOOS, ET_HIOS, + ET_LOPROC, ET_HIPROC may not be defined. + +2008-03-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-02 16:48 king + + * Source/cmInstallTargetGenerator.cxx: ENH: During installation do + not use builtin chrpath if the rpath will not change. + +2008-03-02 16:37 king + + * Source/cmTarget.cxx: ENH: Allow users to work around problems + with the builtin chrpath by setting CMAKE_NO_BUILTIN_CHRPATH. + +2008-03-02 16:31 king + + * Source/cmELF.cxx: BUG: Fix bug introduced by workaround to + warning. + +2008-03-02 16:19 king + + * Source/: cmELF.cxx, cmELF.h: BUG: A few more corrections for + cmELF + + - Add os-specific and processor-specific file types + - Add more error strings for invalid files. + - Byte order of header fields does not always match encoding + +2008-03-02 16:19 king + + * Source/cmSystemTools.cxx: ENH: In cmSystemTools::ChangeRPath + check for the RUNPATH if RPATH does not exist. + +2008-03-02 14:35 king + + * Source/: cmComputeLinkInformation.cxx, cmFileCommand.cxx, + cmInstallTargetGenerator.cxx, cmLocalGenerator.cxx, + cmSystemTools.cxx, cmSystemTools.h, cmTarget.cxx: ENH: Cleanup + builtin chrpath support + + - Move computation of extended build-tree rpath + to cmComputeLinkInformation + - Only enable the extended build-tree rpath if + the target will be installed + - Generalize the interface of file(CHRPATH) + - When changing the rpath on installation only + replace the part generated by CMake because + the native tools (ex SunCC on Linux) might have + added their own part to the rpath + +2008-03-02 14:35 king + + * CMakeLists.txt: ENH: Simplify tests for building CMake itself + with rpath support now that 2.4 is required to build. + +2008-03-02 09:12 martink + + * Source/cmPolicies.h: COMP: possible fix for VS6, but probably + not, probably need tomake it internal + +2008-03-02 09:11 martink + + * Source/cmMakefile.cxx: COMP: fix warning + +2008-03-02 09:03 martink + + * Source/: cmPolicies.cxx, cmPolicies.h: ENH: revert dumb change + +2008-03-02 08:36 martink + + * Source/: cmAddCustomTargetCommand.cxx, cmPolicies.cxx, + cmPolicies.h: COMP: fix compile errors on vs6 and a warning + +2008-03-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-03-01 16:21 martink + + * Source/cmMakefile.cxx: BUG: bad loop index unsigned compared to + zero + +2008-03-01 15:44 martink + + * Source/: cmAddCustomTargetCommand.cxx, cmMakefile.cxx: COMP: fix + some warnings + +2008-03-01 15:26 martink + + * Source/: cmPolicies.cxx, cmPolicies.h: STYLE: fix some line + lengths + +2008-03-01 15:20 martink + + * CMakeLists.txt, bootstrap, Source/CMakeLists.txt, + Source/cmAddCustomTargetCommand.cxx, + Source/cmBootstrapCommands.cxx, Source/cmCommand.h, + Source/cmIncludeDirectoryCommand.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmake.cxx, Source/cmake.h: ENH: add + first cut and policies still need to add the doc support + +2008-03-01 15:16 king + + * Source/cmSystemTools.cxx: COMP: Fix unused parameter warning when + cmSystemTools::ChangeRPath is built without ELF support. + +2008-03-01 13:17 king + + * Source/cmSystemTools.cxx: BUG: Fix cmSystemTools::ChangeRPath to + not complain if there is no RPATH entry in the file but the + requested new rpath is empty. + +2008-03-01 13:02 king + + * Source/cmTarget.cxx: BUG: Do not try to change the RPATH when + installing a target if CMAKE_SKIP_RPATH is on or the path does + not need to be changed. + +2008-03-01 12:51 king + + * Modules/CMakeFindBinUtils.cmake, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmInstallTargetGenerator.cxx, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/cmTarget.cxx, Source/cmTarget.h: ENH: Use builtin chrpath + instead of relinking ELF targets + + - Add cmSystemTools::ChangeRPath method + - Add undocumented file(CHRPATH) command + - When installing use file(CHRPATH) to change the rpath + instead of relinking + - Remove CMAKE_CHRPATH lookup from CMakeFindBinUtils + - Remove CMAKE_USE_CHRPATH option since this should + always work + +2008-03-01 12:50 king + + * Source/: cmELF.cxx, cmELF.h: ENH: Add Size member to + cmELF::StringEntry to return the amount of space in the string + entry. + +2008-03-01 10:56 king + + * Tests/Preprocess/CMakeLists.txt: BUG: Fix typo XCode -> Xcode in + Preprocess test. + +2008-03-01 09:08 king + + * Tests/Preprocess/CMakeLists.txt: ENH: Update Preprocess test to + distinguish between the make tool or compiler tool that is at + fault for not supporting a particular character in definitions. + Make it skip the % character when the compiler is MSVC and it is + a non-nmake tool. + +2008-03-01 09:08 king + + * Modules/Platform/Windows-cl.cmake, Source/cmLocalGenerator.cxx: + BUG: Do not place $(CMAKE_COMMAND) in link scripts. + +2008-03-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-29 21:33 hoffman + + * Source/: cmIfCommand.cxx, cmWhileCommand.cxx: ENH: fix warnings + +2008-02-29 21:33 hoffman + + * Source/cmSetSourceFilesPropertiesCommand.h: ENH: fix docs + +2008-02-29 15:42 martink + + * Source/cmCMakePolicyCommand.cxx: ENH: just getting somethng + checked in, still work to do + +2008-02-29 15:41 martink + + * Source/cmCmakePolicyCOmmand.cxx: ENH: case + +2008-02-29 15:28 martink + + * Source/: cmCMakePolicyCommand.h, cmCmakePolicyCOmmand.cxx, + cmPolicies.cxx, cmPolicies.h: ENH: just getting somethng checked + in, still work to do + +2008-02-29 14:58 hoffman + + * Modules/DartConfiguration.tcl.in, + Source/CTest/cmCTestSubmitHandler.cxx, + Source/CTest/cmCTestSubmitHandler.h: ENH: allow cdash not to + trigger + +2008-02-29 14:36 hoffman + + * Modules/InstallRequiredSystemLibraries.cmake: ENH: add vs9 stuff, + still need msvc9 mfc + +2008-02-29 12:18 hoffman + + * Source/: cmForEachCommand.cxx, cmFunctionCommand.cxx, + cmIfCommand.cxx, cmMacroCommand.cxx, cmMakefile.cxx, + cmWhileCommand.cxx: ENH: make CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS + the default and remove the property. If any value is specified + in an endif, endforeach, endwhile, etc then make sure it matches + the start string. If no values are given then it is no longer an + error. + +2008-02-29 11:12 king + + * Source/: cmELF.cxx, cmELF.h: ENH: Make cmELF parser more general + and powerful + + - Add support to get RPATH and RUNPATH entries. + - Add support to get file offsets to strings. + - Add more DT_* tags to byte swapping. + +2008-02-29 09:15 king + + * Source/cmComputeLinkInformation.cxx: BUG: + cmComputeLinkInformation::CheckImplicitDirItem needs to extract + the filename portion of the link item to test against the library + regex. + +2008-02-29 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-28 08:43 king + + * Source/cmELF.cxx: COMP: cmELF needs to include sys/link.h to get + dynamic section structures on the Sun. + +2008-02-28 08:32 king + + * Source/cmELF.cxx: COMP: Fix warnings in cmELF. + +2008-02-28 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-27 17:10 king + + * Modules/Platform/Windows-ifort.cmake, Modules/Platform/cl.cmake, + Source/cmDocumentVariables.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h: ENH: Handle large object file + lists on some platforms + + - Use a response file when enabled by + CMAKE__USE_RESPONSE_FILE_FOR_OBJECTS + - Enable for C and CXX with cl (MSVC) + - Enable for Fortran with ifort (Intel Fortran) + +2008-02-27 16:26 king + + * Source/: CMakeLists.txt, cmConfigure.cmake.h.in, cmELF.cxx, + cmELF.h, cmSystemTools.cxx: ENH: Add ELF file parsing + + - Enabled when system provides elf.h + - Introduce cmELF class to parse ELF files + - Use in cmSystemTools::GuessLibrarySOName to really get soname + +2008-02-27 16:11 king + + * Source/kwsys/CPU.h.in: BUG: Fixed typo in previous commit of + kwsys/CPU.h.in + +2008-02-27 16:07 king + + * Source/kwsys/: CMakeLists.txt, CPU.h.in: ENH: Added CPU.h to + KWSys to identify the target CPU and its byte order. + +2008-02-27 14:31 king + + * Modules/Platform/: HP-UX.cmake, IRIX64.cmake, Linux-PGI-C.cmake, + Linux-PGI-CXX.cmake, SunOS.cmake, Windows-bcc32.cmake, gcc.cmake: + BUG: Apply patch from bug#6445. Add preprocessor definitions to + assembly and preprocessing build rules. + +2008-02-27 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-26 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-25 18:47 king + + * Modules/CMakeCCompilerId.c.in: ENH: Add support to C compiler + identification for void return type from main. Cross-compilers + for embedded platforms may require it. + +2008-02-25 15:07 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: + ENH: Adjust when log is cleared. Its kept doing generate, + and cleared when changing the source directory. #6358. + +2008-02-25 14:23 alex + + * Modules/CPackRPM.cmake: BUG: fix rpmbuild bug, which expands + variables in comments :-/ apparently rpmbuild can't handle paths + with spaces and can't handle variables in comments... + + Alex + +2008-02-25 10:17 david.cole + + * CTestCustom.cmake.in: BUG: Exclude try_compile sources and kwsys + files from CMake coverage results. + +2008-02-25 09:23 king + + * Modules/: CMakeCCompilerId.c, CMakeCCompilerId.c.in, + CMakeCXXCompilerId.cpp, CMakeCXXCompilerId.cpp.in, + CMakeDetermineCCompiler.cmake, CMakeDetermineCXXCompiler.cmake, + CMakeDetermineCompilerId.cmake, + CMakeDetermineFortranCompiler.cmake, CMakeFortranCompilerId.F90, + CMakeFortranCompilerId.F90.in, CMakePlatformId.h, + CMakePlatformId.h.in: ENH: Improvied compiler identification + robustness + + - Write a single source file into the compiler id directory + - This avoid requiring the compiler to behave correctly with + respect to include rules and the current working directory + - Helps to identify cross-compiling toolchains with unusual + default behavior + +2008-02-25 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-24 14:05 king + + * Modules/Platform/Windows-bcc32.cmake, + Source/cmMakefileTargetGenerator.cxx: ENH: Simplify make build + rule generation by removing use of OBJECTS_QUOTED and + TARGET_QUOTED rule variables and updating the generation of + OBJECTS to always use the newer cmLocalGenerator::Convert method. + +2008-02-24 14:05 king + + * Source/: cmComputeLinkDepends.cxx, cmExportFileGenerator.cxx, + cmStandardIncludes.h, cmTarget.cxx: COMP: Fix Borland 5.5 build + + - Its header includes windows.h which + defines GetCurrentDirectory + - It defines 'interface' so we cannot use it as + a variable name. + +2008-02-24 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-23 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-22 09:44 king + + * Source/cmOrderDirectories.cxx: COMP: Fix unreachable code warning + in cmOrderDirectories. + +2008-02-22 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-21 13:59 king + + * Source/cmOrderDirectories.cxx: COMP: Remove unused local variable + from cmOrderDirectories. + +2008-02-21 13:58 king + + * Source/: cmComputeLinkInformation.cxx, cmOrderDirectories.cxx, + cmSystemTools.cxx, cmSystemTools.h: ENH: Improve linking to + third-party shared libraries on soname platforms + + - Reduce false positives in cases of unknown soname + - Make library extension regular expressions match only at end + of string + - When linking to libraries in implicit dirs convert to the -l + option + only if the file name is one that can be found by the linker + (ex. /usr/lib/libfoo.so.1 should be linked by full path) + - Add cmSystemTools::GuessLibrarySOName to guess the soname of + a + library based on presence of a symlink + - In cmComputeLinkInformation try to guess an soname before + assuming + that a third-party library is built without an soname + - In cmOrderDirectories guess the soname of shared libraries in + cases + it is otherwise unknown + +2008-02-21 11:41 king + + * bootstrap, Modules/Platform/FreeBSD.cmake, + Modules/Platform/HP-UX.cmake, Modules/Platform/Linux.cmake, + Modules/Platform/QNX.cmake, Modules/Platform/SunOS.cmake, + Source/CMakeLists.txt, Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, Source/cmOrderDirectories.cxx, + Source/cmOrderDirectories.h, + Source/cmOrderRuntimeDirectories.cxx, + Source/cmOrderRuntimeDirectories.h, Source/cmTarget.cxx, + Source/cmTarget.h: ENH: Better linker search path computation. + + - Use linker search path -L.. -lfoo for lib w/out soname + when platform sets CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME + - Rename cmOrderRuntimeDirectories to cmOrderDirectories + and generalize it for both soname constraints and link + library constraints + - Use cmOrderDirectories to order -L directories based + on all needed constraints + - Avoid processing implicit link directories + - For CMAKE_OLD_LINK_PATHS add constraints from libs + producing them to produce old ordering + +2008-02-21 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-20 14:56 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h: BUG: + Link scripts should be generated with copy-if-different and + included as a dependency of the link rule. + +2008-02-20 13:36 king + + * Source/: cmExportLibraryDependencies.cxx, + cmExportLibraryDependencies.h: ENH: Deprecate + export_library_dependencies + + - Reference export() and install(EXPORT) + - Fix to support OUTPUT_NAME in simple cases + +2008-02-20 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-19 18:50 ibanez + + * Source/kwsys/testSystemInformation.cxx: ENH: Missing copyright + header. + +2008-02-19 16:34 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: STYLE: patch part 3 from + Miguel: follow naming style for variables + + Alex + +2008-02-19 16:27 alex + + * Source/: cmExtraEclipseCDT4Generator.cxx, + cmExtraEclipseCDT4Generator.h: ENH: patch from Miguel part 2: if + ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT is true, then the generator + additionally generates eclipse project files in the source dir, + since this is the only way to get cvs/svn working with eclipse + + This is off by default and the user has to enable it explicitely. + If cmake can't write there it still continues. + + Alex + +2008-02-19 15:07 alex + + * Source/: cmExtraEclipseCDT4Generator.cxx, + cmExtraEclipseCDT4Generator.h: ENH: patch part 1 from Miguel: use + the cmake project name for the eclipse project name + + Alex + +2008-02-19 14:47 hoffman + + * Source/QtDialog/MacInstallDialog.ui: ENH: better ui + +2008-02-19 14:33 alex + + * Source/: CMakeLists.txt, cmDocumentation.cxx, cmDocumentation.h, + cmDocumentationFormatter.h, cmDocumentationFormatterDocbook.cxx, + cmDocumentationFormatterDocbook.h, + cmDocumentationFormatterHTML.cxx, cmakemain.cxx: ENH: add support + for creating the documentation in docbook format + (http://www.oasis-open.org/docbook/xml/4.2/), which users can + then convert to other formats. Tested with meinproc from KDE, + which generates HTML pages which look good. + + Alex + +2008-02-19 14:26 hoffman + + * Source/: CPack/cmCPackPackageMakerGenerator.cxx, + CPack/cmCPackPackageMakerGenerator.h, QtDialog/CMakeLists.txt, + QtDialog/QtDialogCPack.cmake.in, QtDialog/postflight.sh.in, + QtDialog/postupgrade.sh.in: ENH: install working with symlink qt + tool + +2008-02-19 14:06 hoffman + + * Source/QtDialog/: CMakeLists.txt, CMakeSetup.cxx, + MacInstallDialog.ui, QMacInstallDialog.cxx, QMacInstallDialog.h: + ENH: add mac install symlink option to dialog + +2008-02-19 09:09 king + + * Source/cmTarget.cxx: COMP: Fix HP warning about + cmTargetInternalPointer::operator= checking for self-assignment. + +2008-02-19 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-18 16:38 king + + * Source/: cmGlobalXCodeGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileExecutableTargetGenerator.h, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.h, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h, + cmMakefileUtilityTargetGenerator.cxx, + cmMakefileUtilityTargetGenerator.h, cmSourceFile.cxx, + cmTarget.cxx, cmTarget.h: ENH: Cleanup impl of PUBLIC_HEADER, + PRIVATE_HEADER, and RESOURCE properties + +2008-02-18 15:50 hoffman + + * CMakeCPackOptions.cmake.in, CMakeLists.txt: ENH: install seems to + be working for cmake-gui + +2008-02-18 15:42 hoffman + + * Source/cmFileCommand.cxx: ENH: add more information to message + +2008-02-18 14:51 hoffman + + * Source/QtDialog/CMakeIngestOSXBundleLibraries.cmake: ENH: make + sure fixup has right paths + +2008-02-18 13:11 hoffman + + * Source/QtDialog/CMakeIngestOSXBundleLibraries.cmake: STYLE: use + lowercase + +2008-02-18 13:03 hoffman + + * Source/: cmConfigure.cmake.h.in, cmake.cxx: ENH: remove + CMAKE_PREFIX so changing it does not rebuild all + +2008-02-18 12:01 king + + * Modules/Platform/HP-UX.cmake: BUG: Fix passing of nodefaultrpath + flag to linker through c++ compiler. + +2008-02-18 11:10 hoffman + + * CMakeLists.txt: ENH: require 2.4 to build cmake + +2008-02-18 10:26 hoffman + + * Modules/CMakeIngestOSXBundleLibraries.cmake, + Source/CPack/cmCPackGenerator.cxx, + Source/QtDialog/CMakeIngestOSXBundleLibraries.cmake, + Source/QtDialog/CMakeLists.txt: ENH: have cpack work with DESTDIR + install and ingest qt framework libs into cmake-gui + +2008-02-18 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-17 17:40 hoffman + + * Modules/CheckIncludeFiles.cmake: BUG: fix double cmakefiles + directory + +2008-02-17 14:04 alex + + * Source/cmDocumentation.cxx: BUG: actually print the docs for + custom modules if this was requested + + Alex + +2008-02-17 12:31 alex + + * Source/cmDocumentationFormatterHTML.cxx: PERF: reduce time for + full docs as HTML from 1.4 s to 0.2 s, the map is now created and + filled only once instead for every character I guess a simple + case-switch would be still faster. + + Alex + +2008-02-17 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-16 16:33 hoffman + + * Modules/CMakeIngestOSXBundleLibraries.cmake: ENH: add script to + ingest library depends into a bundle + +2008-02-16 13:05 hoffman + + * CMakeLists.txt, bootstrap, Source/cmBootstrapCommands.cxx, + Source/cmCommands.cxx, Source/cmInstallProgramsCommand.cxx, + Source/QtDialog/CMakeLists.txt, Source/QtDialog/QCMake.cxx, + Source/QtDialog/QtDialogCPack.cmake.in: ENH: support for cpack + and install of cmake-gui as mac app bundle + +2008-02-16 13:02 hoffman + + * Source/CPack/cmCPackGenerator.cxx: ENH: fix DESTDIR install + +2008-02-16 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-15 18:26 alex + + * Modules/FindPythonLibs.cmake: STYLE: use global property instead + of helper target to collect all python modules from a source tree + + Alex + +2008-02-15 15:36 clinton + + * Source/QtDialog/QCMake.cxx: ENH: remove unused code. + +2008-02-15 12:12 hoffman + + * Source/QtDialog/QCMake.cxx: ENH: use package name on mac for edit + cache + +2008-02-15 11:56 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Apply patch from + bug #6180 to make CMAKE_ADDITIONAL_MAKE_CLEAN_FILES work for + directories. + +2008-02-15 11:49 david.cole + + * Source/cmCallVisualStudioMacro.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio71Generator.h, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmGlobalVisualStudio9Generator.cxx, + Source/cmGlobalVisualStudio9Generator.h, + Source/cmGlobalVisualStudioGenerator.cxx, + Source/cmGlobalVisualStudioGenerator.h, + Templates/CMakeVSMacros2.vsmacros: ENH: Add code to support + calling the VS reload macro from Visual Studio 7.1 and 9.0 in + addition to 8.0 sp1... Make new macros file with VS 7.1 so that + it can be read by 7.1 and later. VS 7.1 does not appear to run + the macros while a build is in progress, but does not return any + errors either, so for now, the reload macro is not called when + using 7.1. If I can figure out how to get 7.1 to execute the + macro, I will uncomment the code in + cmGlobalVisualStudio71Generator::GetUserMacrosDirectory() to + activate executing the macros in VS 7.1, too. + +2008-02-15 11:22 king + + * Modules/Platform/Darwin.cmake, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, + Source/cmSetPropertyCommand.cxx, + Source/cmSetSourceFilesPropertiesCommand.cxx, + Source/cmSourceFile.cxx: ENH: Cleanup building of OS X bundle + content + + - Fixes repeated rebuild of bundles by Makefile generators + - Add special rules to copy sources to their + MACOSX_PACKAGE_LOCATION bundle directory + - Remove MacOSX_Content language hack + - Remove EXTRA_CONTENT property + - Remove MACOSX_CONTENT + - Remove corresponding special cases in object names + +2008-02-15 10:40 hoffman + + * Source/CPack/cmCPackNSISGenerator.cxx: BUG: fix for bug 6294, + correct url for nsis + +2008-02-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-14 20:18 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: ENH: enable color in the + eclipse generator, there doesn't seem to be problems + + Alex + +2008-02-14 19:58 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, QCMakeCacheView.cxx, + QCMakeCacheView.h: + ENH: Convert native paths from QFileDialog and + QDirModel/QCompleter. BUG: Block possible completion loop. + +2008-02-14 18:18 clinton + + * Source/QtDialog/: CMakeSetup.cxx, CMakeSetupDialog.cxx, + CMakeSetupDialog.h, QCMake.cxx, QCMakeCacheView.cxx: + ENH: Add shortcut to start search/filter. A bit of + cleanup. Disable tab navigation in cache variable list. + Enable home/end keys. + + BUG: Ensure currently edited values are saved before doing + configure. + +2008-02-14 16:42 king + + * Source/: cmAddCustomTargetCommand.cxx, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmGlobalUnixMakefileGenerator3.h, + cmMakefile.cxx, cmMakefile.h, cmake.cxx: ENH: Add global property + ALLOW_DUPLICATE_CUSTOM_TARGETS to help existing projects that + depend on having duplicate custom targets. It is allowed only + for Makefile generators. See bug#6348. + +2008-02-14 15:31 king + + * Modules/MacOSXBundleInfo.plist.in, + Modules/MacOSXFrameworkInfo.plist.in, + Source/cmGlobalXCodeGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, Source/cmTarget.cxx: + ENH: Allow multiple OS X applications bundles to be created in a + single build directory. Converted Info.plist files to be + generated directly instead of configured with make variables. + The MACOSX_BUNDLE_* variables are now properties (and vars for + compatibility). + +2008-02-14 15:06 hoffman + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h: ENH: + make sure html < > & stuff is escaped for the output window + +2008-02-14 13:36 king + + * Modules/CTestTargets.cmake, Source/cmDefinePropertyCommand.cxx, + Source/cmDefinePropertyCommand.h, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Tests/Properties/CMakeLists.txt: ENH: Updated DEFINE_PROPERTY + command to be more extendible and more consistent with new + SET_PROPERTY and GET_PROPERTY signatures. + +2008-02-14 11:58 king + + * Modules/CTestTargets.cmake, Source/cmBootstrapCommands.cxx, + Source/cmCommands.cxx, Source/cmMakefile.cxx: ENH: Re-enable + diagnosis of non-unique target names. + + - Re-enable enforcement in cmMakefile::EnforceUniqueName + - Improve error message to help user resolve the problem + - Fix Modules/CTestTargets.cmake to not duplicate testing + targets + - Move commands used by the changes to + Modules/CTestTargets.cmake + to build during bootstrap: DEFINE_PROPERTY, GET_PROPERTY + +2008-02-14 10:50 king + + * Modules/: CMakeForceCompiler.cmake, CMakeTestCCompiler.cmake, + CMakeTestCXXCompiler.cmake: ENH: Remove unnecessary compiler + force macros. The compiler ID can now be detected without + linking an executable. + +2008-02-14 09:14 hoffman + + * Source/QtDialog/CMakeSetupDialog.cxx: ENH: add a check before + delete cache + +2008-02-14 08:55 hoffman + + * Source/QtDialog/QCMake.cxx: ENH: do not show unititialized + entries + +2008-02-14 01:11 clinton + + * Modules/FindQt4.cmake: + BUG: Fix error when paths have + in them. (special regex + characters) + +2008-02-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-13 17:00 barre + + * Modules/FindTCL.cmake: ENH: fix advanced bug + +2008-02-13 15:29 king + + * Source/: cmComputeLinkDepends.cxx, cmComputeLinkDepends.h: BUG: + Update cmComputeLinkDepends to support leading/trailing + whitespace stripping off link items for compatibility. + +2008-02-13 14:47 king + + * bootstrap, Source/cmBootstrapCommands.cxx, Source/cmCommands.cxx: + ENH: Add option to bootstrap script to enable Qt dialog. + + - Add --qt-gui and --no-qt-gui options + - Add --qt-qmake= option to help locate Qt + - Build more commands during bootstrap to help FindQt4.cmake: + MATH, GET_DIRECTORY_PROPERTY, EXECUTE_PROCESS, + SEPARATE_ARGUMENTS + - Bootstrapping with the cmake-gui is now possible in MSys + +2008-02-13 14:35 king + + * Modules/FindQt4.cmake: BUG: Fix FindQt4.cmake + QT4_CREATE_MOC_COMMAND macro to work with spaces in the path + while using the @ syntax on MSYS builds. + +2008-02-13 13:58 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, QCMakeCacheView.cxx: + ENH: Remove CurrentChanged from the table view's edit triggers. + It results in editor issues when modifying the view. + Remove workarounds for some of those issues. + +2008-02-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-12 17:22 hoffman + + * Source/QtDialog/CMakeLists.txt: ENH: do not expand regular vars + here + +2008-02-12 10:19 king + + * Source/cmMakefile.cxx: BUG: Disable enforcement of unique target + names until CTestTargets can be fixed. + +2008-02-12 09:49 hoffman + + * Source/: cmake.cxx, cmake.h, CursesDialog/cmCursesMainForm.cxx, + QtDialog/CMakeSetup.cxx, QtDialog/QCMake.cxx: ENH: fix make + edit_cache for cmake-gui + +2008-02-12 09:18 king + + * Source/cmExportLibraryDependencies.cxx: STYLE: Fix line-too-long + in cmExportLibraryDependencies. + +2008-02-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-11 20:13 king + + * Source/cmDocumentVariables.cxx: ENH: Update documentation of + EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH to reference their + replacements. + +2008-02-11 17:33 king + + * Source/: cmAddCustomTargetCommand.cxx, + cmAddExecutableCommand.cxx, cmAddLibraryCommand.cxx: COMP: Fix + shadowed local variable warning. + +2008-02-11 17:01 king + + * Modules/Platform/eCos.cmake: ENH: Fix eCos.cmake to not require a + forced compiler + + - Search for libtarget.a explicitly + - Do not complain about compiler id during try-compile + +2008-02-11 17:00 king + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, + CMakeDetermineFortranCompiler.cmake: ENH: When detecting the + compiler id try compiling only to an object file. + +2008-02-11 17:00 king + + * Source/cmFindLibraryCommand.cxx: BUG: FIND_LIBRARY should not + require CMAKE_SIZEOF_VOID_P to be set. + +2008-02-11 17:00 king + + * Source/cmake.cxx: ENH: Add global computed property + IN_TRY_COMPILE. + +2008-02-11 15:31 king + + * Modules/Platform/HP-UX.cmake: ENH: Remove CMAKE_ANSI_CFLAGS + variable and instead always add ansi flags to + CMAKE_C_COMPILE_OBJECT. We should not require every project to + reference CMAKE_ANSI_CFLAGS. + +2008-02-11 13:35 king + + * Source/: cmAddCustomTargetCommand.cxx, + cmAddExecutableCommand.cxx, cmAddExecutableCommand.h, + cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, cmMakefile.cxx, + cmMakefile.h, cmTarget.cxx: ENH: Enforce global target name + uniqueness. + + - Error if imported target is involved in conflict + - Error for non-imported target conflict unless + CMAKE_BACKWARDS_COMPATIBILITY <= 2.4 + - Include OUTPUT_NAME property in error message + - Update add_executable and add_library command documentation + +2008-02-11 13:35 king + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Add + cmMakefile::NeedBackwardsCompatibility method to pass through to + cmLocalGenerator::NeedBackwardsCompatibility for convenience. + +2008-02-11 10:31 king + + * Source/cmExportLibraryDependencies.cxx: BUG: Fix + export_library_dependencies command to produce a file that is + compatible with CMake 2.4. + +2008-02-11 10:31 king + + * Source/cmComputeLinkDepends.cxx: BUG: Fix + cmComputeLinkDepends::AddVarLinkEntries + + - Track link type correctly + - Use _LINK_TYPE variables exported by CMake 2.4 + +2008-02-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-10 17:19 alex + + * Source/cmIfCommand.h: STYLE: document that if(COMMAND) works also + for macros and functions + + Alex + +2008-02-10 11:37 king + + * Source/cmFindLibraryCommand.cxx: BUG: Fix recent find_library + change to look for user-specified name first to do so only if the + name matches a valid library extension. + +2008-02-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-09 10:05 hoffman + + * Utilities/Release/vogon_release.cmake: ENH: build the qt gui + +2008-02-09 09:53 hoffman + + * CMakeCPack.cmake, CMakeCPackOptions.cmake.in, + Source/QtDialog/CMakeLists.txt, + Source/QtDialog/QtDialogCPack.cmake.in: ENH: make it so cmake-gui + only installs if qt is static on windows + +2008-02-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-08 13:47 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: BUG: Make sure editor + closes when deleting cache entries. + +2008-02-08 12:01 clinton + + * Modules/FindQt4.cmake: ENH: Better way to have escaping done + correctly for all generators. + +2008-02-08 11:26 clinton + + * Source/QtDialog/QCMake.cxx: ENH: Need to pick up the + PreLoad.cmake files. + +2008-02-08 10:42 clinton + + * Source/QtDialog/: CMakeSetup.cxx, QCMakeCacheView.cxx: COMP: Fix + build with Qt 4.2. BUG: Fix new editors stealing focus while + typing search text. ENH: Look for translation in data dir, not + bin dir. + +2008-02-08 09:24 king + + * Tests/Dependency/CMakeLists.txt: BUG: Need ANSI C. + +2008-02-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-07 23:26 clinton + + * Modules/FindQt4.cmake: + BUG: Fix arg for moc parameter file so it works with unix + makefiles, when the build dir has a space in it. + +2008-02-07 18:24 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: patch from Miguel BUG: + fix #5496: eclipse can't load projects where the build dir is a + subdir of the src dir + + Alex + +2008-02-07 17:58 clinton + + * Source/QtDialog/: QCMakeCacheView.cxx, QCMakeCacheView.h: + ENH: Show cache variable name in title of file dialogs. + +2008-02-07 16:49 king + + * Source/: cmGlobalXCodeGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, cmTarget.cxx: ENH: Avoid + computing link information for static library targets. They do + not link. + +2008-02-07 16:26 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: two patches from Miguel: + BUG: fix #5819: put compile definitions into the eclipse project + files so eclipse handles ifdef blcoks correctly STYLE: make the + code for filtering some global targets out nicer + + Alex + +2008-02-07 16:24 king + + * Source/cmComputeLinkDepends.cxx: COMP: Add missing assert + include. + +2008-02-07 16:22 alex + + * Source/cmInstallCommand.cxx: STYLE: add some comments + + Alex + +2008-02-07 16:14 king + + * Tests/Dependency/Case2/: CMakeLists.txt, foo1.c, foo1b.c, + foo2b.c, foo3.c, foo3b.c: ENH: Make Dependency test Case2 require + two traversals of a static library loop. + +2008-02-07 16:14 king + + * bootstrap, Source/CMakeLists.txt, + Source/cmComputeComponentGraph.cxx, + Source/cmComputeComponentGraph.h, + Source/cmComputeLinkDepends.cxx, Source/cmComputeLinkDepends.h, + Source/cmComputeTargetDepends.cxx, + Source/cmComputeTargetDepends.h, Source/cmGraphAdjacencyList.h: + ENH: Improve link line generation for static library cycles. + + - Move Tarjan algorithm from cmComputeTargetDepends + into its own class cmComputeComponentGraph + - Use cmComputeComponentGraph to identify the component DAG + of link dependencies in cmComputeLinkDepends + - Emit non-trivial component members more than once but always + in a contiguous group on the link line + +2008-02-07 13:26 hoffman + + * Source/: cmFileCommand.cxx, cmFileCommand.h: ENH: make sure files + are binary for download and make status a pair of value string + +2008-02-07 13:19 hoffman + + * Modules/FindPkgConfig.cmake: BUG: fix for bug 6117 pkgconfig + +2008-02-07 11:43 hoffman + + * CMakeCPackOptions.cmake.in, Source/QtDialog/CMakeLists.txt: ENH: + for windows only allow a static qt for install and NSIS of + cmake-gui + +2008-02-07 08:55 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: complex must + link to curl now + +2008-02-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-06 20:14 king + + * Source/cmComputeLinkInformation.cxx: BUG: Fix + cmComputeLinkInformation to include the target's user link + directories in the runtime path computation. This bug was + introduced when cmOrderRuntimeDirectories was introduced. + +2008-02-06 17:02 alex + + * Modules/FindPackageHandleStandardArgs.cmake: STYLE: use a + function instead of a macro, to keep FAIL_MESSAGE local patch + from Miguel + + Alex + +2008-02-06 15:26 king + + * Source/cmFindLibraryCommand.cxx: ENH: Make find_library test for + the library file as named before trying prefixes and suffixes. + This will allow users to explicitly search for static libraries + on unix. See bug #1643. + +2008-02-06 15:23 king + + * Source/cmTargetLinkLibrariesCommand.h: STYLE: Improve + documentation of target_link_libraries command to make + target-level dependency explicit. See bug #6043. + +2008-02-06 15:10 clinton + + * Source/QtDialog/CMakeSetup.cxx: ENH: Update some strings to + match program name. + +2008-02-06 14:52 king + + * Tests/: CMakeLists.txt, Dependency/CMakeLists.txt, + Dependency/Case1/CMakeLists.txt, Dependency/Case1/a.c, + Dependency/Case1/b.c, Dependency/Case1/b2.c, + Dependency/Case1/c.c, Dependency/Case1/c2.c, + Dependency/Case1/d.c, Dependency/Case1/main.c, + Dependency/Case2/CMakeLists.txt, Dependency/Case2/bar1.c, + Dependency/Case2/bar2.c, Dependency/Case2/bar3.c, + Dependency/Case2/foo1.c, Dependency/Case2/foo2.c, + Dependency/Case2/foo3.c, Dependency/Case2/zot.c: ENH: Combine all + dependency* tests into one Dependency test. Add more difficult + test cases. + +2008-02-06 14:45 clinton + + * Source/QtDialog/CMakeSetup.cxx: BUG: On Mac OS X, give the CMake + library the correct path to the cmake exectuables. Fixes + #6286. + +2008-02-06 14:20 king + + * Source/cmExportBuildFileGenerator.cxx, + Source/cmExportCommand.cxx, + Source/cmExportInstallFileGenerator.cxx, + Source/cmInstallCommand.cxx, Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, + Tests/ExportImport/Export/CMakeLists.txt: ENH: Improve + exporting/importing of targets + + - Use real name instead of link for location of versioned + targets + - Error when a target is exported multiple times + +2008-02-06 14:19 king + + * Source/cmTarget.cxx: BUG: Make sure linking to a shared lib on + windows uses import library and not the new realname. + +2008-02-06 14:06 king + + * Source/cmTarget.cxx: BUG: Do not create versioned executable + names on Xcode where they are not supported. + +2008-02-06 13:34 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h, cmTarget.cxx, cmTarget.h: ENH: When + linking to versioned targets whose real file name is known pass + the real name to the linker instead of the symlink name. + +2008-02-06 09:46 hoffman + + * Source/cmFileCommand.cxx: ENH: remove debug print stuff + +2008-02-06 09:35 hoffman + + * Source/: CMakeLists.txt, cmFileCommand.cxx, cmFileCommand.h: ENH: + add DOWNLOAD option to FILE command + +2008-02-06 09:17 hoffman + + * Source/QtDialog/CMakeLists.txt: ENH: change name of qt-dialog + +2008-02-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-05 23:10 king + + * bootstrap, Source/CMakeLists.txt, + Source/cmComputeTargetDepends.cxx, + Source/cmComputeTargetDepends.h, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, Source/cmake.cxx: ENH: Analyze + inter-target dependencies to safely fix cycles + + - Cycles may be formed among static libraries + - Native build system should not have cycles in target deps + - Create cmComputeTargetDepends to analyze dependencies + - Identify conneced components and use them to fix deps + - Diagnose cycles containing non-STATIC targets + - Add debug mode property GLOBAL_DEPENDS_DEBUG_MODE + - Use results in cmGlobalGenerator as target direct depends + +2008-02-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-04 19:00 king + + * Source/cmInstallTargetGenerator.cxx: COMP: Add missing include + for assert. + +2008-02-04 17:03 king + + * Source/: cmInstallCommand.cxx, cmInstallCommand.h, + cmInstallCommandArguments.cxx, cmInstallCommandArguments.h, + cmInstallTargetGenerator.cxx, cmInstallTargetGenerator.h: ENH: + Allow separate installation of shared libs and their links. + + - Add NAMELINK_ONLY and NAMELINK_SKIP to INSTALL command + - Options select a \"namelink\" mode + - cmInstallTargetGenerator selects files/link based on mode + - See bug #4419 + +2008-02-04 16:05 hoffman + + * Source/cmGlobalVisualStudio7Generator.cxx: ENH: make sure + ALL_BUILD only shows up once + +2008-02-04 15:22 king + + * Modules/Platform/AIX.cmake, Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, Source/cmake.cxx: BUG: Added + TARGET_ARCHIVES_MAY_BE_SHARED_LIBS global property to help + compute proper rpath information on AIX when shared libraries + have names like "libfoo.a". + +2008-02-04 10:04 king + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, + CMakeDetermineFortranCompiler.cmake, CMakeTestCCompiler.cmake, + CMakeTestCXXCompiler.cmake: BUG: When configuring compiler + information files into the CMakeFiles directory in the project + build tree, use IMMEDIATE option for CONFIGURE_FILE explicitly. + It is needed in case the user sets CMAKE_BACKWARDS_COMPATIBILITY + to 2.0 or lower. + +2008-02-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-03 17:24 king + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, + CMakeDetermineFortranCompiler.cmake, CMakeForceCompiler.cmake, + CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake: BUG: When + forcing the C and CXX compilers do not try to detect the ABI + information. Cleanup configured language compiler info files by + always using @ONLY. This addresses bug#6297. + +2008-02-03 08:58 king + + * Source/kwsys/IOStream.cxx: COMP: Avoid warning in kwsys + IOStream.cxx when the helper functions are not needed. Define + one public symbol to avoid complaints from archivers about empty + object files. + +2008-02-03 08:57 king + + * Tests/ExportImport/Export/: testExe1.c, testExe1lib.c, + testLib1.c, testLib2.c: COMP: Convert C function prototypes to + use (void) instead of (). + +2008-02-03 08:57 king + + * Source/: cmCTest.cxx, cmCTest.h: BUG: cmCTest::GetConfigType + should return the string by reference-to-const so that callers + may use .c_str() safely. + +2008-02-03 08:20 king + + * Source/kwsys/SystemInformation.cxx: COMP: Fix warning in + SystemInformation.cxx about possibly incorrect assignment in if + condition. + +2008-02-03 08:14 king + + * Source/kwsys/SystemInformation.cxx: COMP: Fix unreachable code + warning. Remove runtime test of constant information. + +2008-02-03 08:07 king + + * Source/kwsys/hash_set.hxx.in: COMP: Remove inline keyword from + forward declaration for VS9. + +2008-02-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-02 16:18 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix infinite loop from + size_t change + +2008-02-02 08:58 king + + * Modules/Platform/: NetBSD.cmake, kFreeBSD.cmake: ENH: Enable + dependent library search paths on more platforms + + - NetBSD needs dependent library paths in -rpath-link option. + - kFreeBSD needs dependent library paths in -rpath-link option. + +2008-02-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-02-01 16:17 martink + + * Tests/CMakeLists.txt: ENH: disable test for vs 70 as devenv + randomly segfaults when building the sub-project + +2008-02-01 16:05 martink + + * Source/cmGlobalGenerator.cxx: ENH: really Bill, using Ken's + checkout, fix output in ctest so clean output in build and test + is not lost, also display the command lines used + +2008-02-01 14:35 king + + * Source/cmExportInstallFileGenerator.cxx: BUG: Fixed typo + resulting in confusing error message from + cmExportInstallFileGenerator. + +2008-02-01 13:52 clinton + + * Modules/FindQt4.cmake: + BUG: When preserving relative paths for moc generated files, + also consider paths to headers in the build directory. + +2008-02-01 13:18 david.cole + + * Source/kwsys/CMakeLists.txt: ENH: Merge changes from main tree + into VTK-5-0 branch. (cvs -q up -j1.135 -j1.136 + Utilities/kwsys/CMakeLists.txt) + +2008-02-01 13:08 king + + * Source/cmInstallTargetGenerator.cxx, Source/cmTarget.h, + Tests/ExportImport/Export/CMakeLists.txt: BUG: Remove + InstallNameFixupPath from cmTarget and cmInstallTargetGenerator. + + - Motivation: + - It depended on the order of installation + - It supported only a single destination for each target + - It created directory portions of an install name without + user request + - Updated ExportImport test to install targets in an order that + expoed + this bug + +2008-02-01 12:35 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix warnings + +2008-02-01 12:02 clinton + + * Modules/UseQt4.cmake: ENH: Use new COMPILE_DEFINITIONS_* with + set_property to add Qt release/debug defines. + +2008-02-01 11:48 clinton + + * Source/QtDialog/: CMakeSetup.cxx, CMakeSetupDialog.cxx: ENH: + Show version number in window title. + +2008-02-01 11:40 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix more warnings + +2008-02-01 11:33 hoffman + + * Source/kwsys/: SystemInformation.cxx: ENH: fix more warnings + +2008-02-01 11:30 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix some warnings and 64 + bit build windows + +2008-02-01 11:09 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix win64 build and a + warning + +2008-02-01 10:41 clinton + + * Source/QtDialog/: CMakeSetup.cxx, CMakeSetupDialog.cxx, + CMakeSetupDialog.h, QCMake.cxx: ENH: Use translation file if it + exists for the locale. Consolidate some strings. + + More responsive interrupting. Prompt user if they try to + close during + configure, and allow them to close. + +2008-02-01 09:57 king + + * Tests/ExportImport/: CMakeLists.txt, Export/CMakeLists.txt: ENH: + Update ExportImport test to enforce dependent library paths + + - Build without rpaths + - Place implementation libs in separate directories + +2008-02-01 09:57 king + + * Modules/Platform/: FreeBSD.cmake, HP-UX.cmake, IRIX.cmake, + IRIX64.cmake, SunOS.cmake: ENH: Enable dependent library search + paths on more platforms + + - HP-UX needs dependent library paths as -L options. + - IRIX needs dependent library paths as -L options. + - Sun needs dependent library paths as -L options. + - FreeBSD needs dependent library paths in -rpath-link option. + +2008-02-01 09:36 king + + * Tests/CMakeLists.txt: BUG: Fix commit 1.41 of + Tests/CMakeLists.txt to place fake target before --version flag + instead of after. + +2008-02-01 08:56 king + + * bootstrap, Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/Platform/Darwin.cmake, Modules/Platform/Linux.cmake, + Modules/Platform/QNX.cmake, Source/CMakeLists.txt, + Source/cmComputeLinkDepends.cxx, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, + Source/cmDocumentVariables.cxx, + Source/cmExportBuildFileGenerator.cxx, + Source/cmExportBuildFileGenerator.h, + Source/cmExportFileGenerator.cxx, Source/cmExportFileGenerator.h, + Source/cmExportInstallFileGenerator.cxx, + Source/cmExportInstallFileGenerator.h, + Source/cmLocalGenerator.cxx, + Source/cmOrderRuntimeDirectories.cxx, + Source/cmOrderRuntimeDirectories.h, Source/cmTarget.cxx: ENH: + Pass dependent library search path to linker on some platforms. + + - Move runtime path ordering out of cmComputeLinkInformation + into its own class cmOrderRuntimeDirectories. + - Create an instance of cmOrderRuntimeDirectories for runtime + path ordering and another instance for dependent library + path ordering. + - Replace CMAKE_DEPENDENT_SHARED_LIBRARY_MODE with explicit + CMAKE_LINK_DEPENDENT_LIBRARY_FILES boolean. + - Create CMAKE_LINK_DEPENDENT_LIBRARY_DIRS boolean. + - Create variables to specify -rpath-link flags: + CMAKE_SHARED_LIBRARY_RPATH_LINK__FLAG + CMAKE_EXECUTABLE_RPATH_LINK__FLAG + - Enable -rpath-link flag on Linux and QNX. + - Documentation and error message updates + +2008-02-01 08:55 king + + * Source/cmTarget.cxx: COMP: Fix shadowed local warning. + +2008-02-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-31 21:33 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: try to fix hp and vs 6, + again... + +2008-01-31 16:38 hoffman + + * Source/: CTest/cmCTestUpdateHandler.cxx, + cmGlobalVisualStudio7Generator.h: STYLE: line length + +2008-01-31 16:37 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fixes for borland + +2008-01-31 16:33 martink + + * Source/CTest/cmCTestTestHandler.cxx: BUG: minor fix for ctest + +2008-01-31 16:10 hoffman + + * Source/cmCTest.cxx: ENH: remove extra junk + +2008-01-31 15:45 king + + * Modules/Platform/Darwin.cmake, Source/cmComputeLinkDepends.cxx, + Source/cmComputeLinkDepends.h, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, + Source/cmDocumentVariables.cxx, Source/cmExportFileGenerator.cxx, + Source/cmExportFileGenerator.h, Source/cmTarget.cxx, + Source/cmTarget.h, Tests/ExportImport/Export/CMakeLists.txt: ENH: + Support linking to shared libs with dependent libs + + - Split IMPORTED_LINK_LIBRARIES into two parts: + IMPORTED_LINK_INTERFACE_LIBRARIES + IMPORTED_LINK_DEPENDENT_LIBRARIES + - Add CMAKE_DEPENDENT_SHARED_LIBRARY_MODE to select behavior + - Set mode to LINK for Darwin (fixes universal binary problem) + - Update ExportImport test to account for changes + +2008-01-31 15:34 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix for qnx, I hope, and + fix indent stuff + +2008-01-31 15:10 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix build errors with + asm stuff on mingw and hopefully win64 + +2008-01-31 14:50 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix build for mingw + +2008-01-31 14:34 hoffman + + * Source/kwsys/: SystemInformation.cxx, SystemInformation.hxx.in: + ENH: split into implementation and interface class to clean up + namespace issues with #define stuff + +2008-01-31 13:23 martink + + * Modules/Dart.cmake: ENH: use ctest to drive dashboards for make + targets as opposed to tclsh + +2008-01-31 12:56 king + + * Source/kwsys/CMakeLists.txt: BUG: Need to install cstddef header. + +2008-01-31 12:19 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: remove a const cast + +2008-01-31 11:43 martink + + * Source/: ctest.cxx, CTest/cmCTestTestHandler.cxx: ENH: read in + old file formats Dart as well + +2008-01-31 08:32 king + + * Source/kwsys/kwsysPlatformTestsCXX.cxx: STYLE: Work-around std:: + check since this is a platform test. + +2008-01-31 08:21 king + + * Source/kwsys/: String.hxx.in, SystemTools.hxx.in, + kwsys_ios_sstream.h.in: STYLE: Remove references to std:: inside + KWSys, even in comments. This will allow a commit check to be + added. + +2008-01-31 08:21 king + + * Source/kwsys/SystemInformation.cxx: COMP: Replace kwsys_stl:: + with kwsys_ios:: for streams access. + +2008-01-31 08:05 king + + * Source/: cmComputeLinkInformation.cxx, cmTarget.cxx: ENH: Add + target property LINK_SEARCH_END_STATIC to help people building + static binaries on some platforms. + +2008-01-31 07:50 king + + * Modules/Platform/IRIX.cmake, Modules/Platform/IRIX64.cmake, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, + Source/cmFindLibraryCommand.cxx, Source/cmFindLibraryCommand.h: + BUG: Move decision to switch library paths found in implicit link + directories to use -l options from cmFindLibraryCommand to + cmComputeLinkInformation. Existing projects may depend on + find_library returning a full path. This slightly weakens + cmComputeLinkInformation but is necessary for compatibility. + +2008-01-31 06:51 king + + * Source/: cmExportFileGenerator.cxx, cmExportFileGenerator.h: + COMP: Remove unused parameter. + +2008-01-31 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-30 22:56 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: ENH: remove const + +2008-01-30 21:40 hoffman + + * Source/kwsys/: SystemInformation.cxx, SystemInformation.hxx.in: + COMP: use kwsys_stl and not std:: + +2008-01-30 17:57 king + + * Source/cmExportFileGenerator.cxx: BUG: Fixed previous commit in + cmExportFileGenerator to separate libraries correctly in the + import link list. + +2008-01-30 17:26 king + + * Tests/ExportImport/: CMakeLists.txt, Export/CMakeLists.txt, + Export/testExe2lib.c, Export/testExe2libImp.c, Export/testLib3.c, + Export/testLib3Imp.c, Import/imp_mod1.c: ENH: Updated + ExportImport test to try LINK_INTERFACE_LIBRARIES. + +2008-01-30 17:25 king + + * Source/: cmComputeLinkDepends.cxx, + cmExportBuildFileGenerator.cxx, cmExportBuildFileGenerator.h, + cmExportCommand.cxx, cmExportCommand.h, + cmExportFileGenerator.cxx, cmExportFileGenerator.h, + cmExportInstallFileGenerator.cxx, cmTarget.cxx, cmTarget.h: ENH: + Implemented link-interface specification feature. + + - Shared libs and executables with exports may now have + explicit transitive link dependencies specified + - Created LINK_INTERFACE_LIBRARIES and related properties + - Exported targets get the interface libraries as their + IMPORTED_LINK_LIBRARIES property. + - The export() and install(EXPORT) commands now give + an error when a linked target is not included since + the user can change the interface libraries instead + of adding the target. + +2008-01-30 16:22 hoffman + + * Source/cmGlobalVisualStudio7Generator.cxx: ENH: make sure global + targets are in the right projects + +2008-01-30 13:02 hoffman + + * Tests/SubProject/foo/: CMakeLists.txt, foo.cxx: ENH: add missing + files + +2008-01-30 12:55 hoffman + + * Source/kwsys/SystemInformation.hxx.in: ENH: fix for vs 70 + +2008-01-30 12:15 king + + * Source/cmComputeLinkDepends.cxx: BUG: cmComputeLinkDepends should + not follow the dependencies of executables. + +2008-01-30 12:04 hoffman + + * Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio71Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Tests/CMakeLists.txt, + Tests/SubProject/CMakeLists.txt, Tests/SubProject/bar.cxx, + Tests/SubProject/car.cxx: ENH: fix for bug 3218 dependant + projects are written out automatically if they are in the + project. Also fix bug 5829, remove hard coded + CMAKE_CONFIGURATION_TYPES from vs 7 generator + +2008-01-30 11:54 hoffman + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestUpdateHandler.cxx: + ENH: remove warnings + +2008-01-30 11:22 king + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomCommandCommand.h: ENH: Make add_custom_command + interpret relative OUTPUT locations with respect to the build tre + instead of the source tree. This can greatly simplify user code + since generating a file will not need to reference + CMAKE_CURRENT_BINARY_DIR. The new behavior is what users expect + 99% of the time. + +2008-01-30 11:21 king + + * Source/: cmGetPropertyCommand.cxx, + cmGetSourceFilePropertyCommand.cxx, cmSourceFile.cxx, + cmSourceFile.h: BUG: Add cmSourceFile::GetPropertyForUser to + centralize the LOCATION property hack. This fixes the LOCATION + property when retrieved via the get_property command. + +2008-01-30 11:17 hoffman + + * Source/: cmCTest.cxx, CTest/cmCTestBuildHandler.cxx, + CTest/cmCTestBuildHandler.h, CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestCoverageHandler.cxx, + CTest/cmCTestMemCheckHandler.cxx, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h, CTest/cmCTestUpdateHandler.cxx, + kwsys/CMakeLists.txt, kwsys/SystemInformation.hxx.in: ENH: + enhancements for cdash, include system information and better + time entries + +2008-01-30 08:37 king + + * Source/cmMakefile.cxx: BUG: Fix misuse of stl vector that caused + definitions to be dropped by cmMakefile::PushScope. + +2008-01-30 07:44 king + + * CompileFlags.cmake, Source/kwsys/hash_map.hxx.in: COMP: Fix + warnings on VS9. + +2008-01-30 07:17 king + + * Utilities/cmtar/CMakeLists.txt: COMP: Fix warning about tolower + by making sure ctype.h is included in cmtar. + +2008-01-30 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-29 21:16 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx: ENH: Enable use of link + script whenever incremental archive construction rules are + available. Enable use of archive construction rules on MSYS. + +2008-01-29 20:46 king + + * Modules/Platform/Windows-gcc.cmake, + Source/cmDocumentVariables.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h: ENH: Added build rule + variables CMAKE__ARCHIVE_CREATE, + CMAKE__ARCHIVE_APPEND, and CMAKE__ARCHIVE_FINISH to + support creation of static archive libraries out of a large + number of objects. See bug #6284. + +2008-01-29 17:30 king + + * Source/: cmCacheManager.cxx, cmCacheManager.h: BUG: Fix + uninitialzed members of cmCacheManager. + +2008-01-29 17:30 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmTarget.cxx, cmTarget.h: BUG: + cmTarget instances should not be copied. Removed pass-by-value + arguments from cmLocalVisualStudio7Generator::WriteGroup and + cmLocalVisualStudio6Generator::WriteGroup. Updated cmTarget to + make this easier to find. + +2008-01-29 17:01 clinton + + * Modules/FindQt4.cmake: ENH: Make lupdate and lrelease + executables advanced variables. + +2008-01-29 15:54 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: ENH: Correctly format + multi-line error messages. + +2008-01-29 15:47 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h, cmInstallTargetGenerator.cxx: ENH: + Update cmInstallTargetGenerator to get the shared libraries + linked by a target from cmComputeLinkInformation instead of + duplicating the computation. + +2008-01-29 15:10 barre + + * Modules/FindHTMLHelp.cmake: ENH: need quotes + +2008-01-29 15:07 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h, cmGlobalXCodeGenerator.cxx, + cmInstallTargetGenerator.cxx, cmInstallTargetGenerator.h, + cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmTarget.cxx, cmTarget.h: ENH: + Add cmTarget::GetLinkInformation method to allow several places + in the generators to share link information while only computing + it once per configuration for a target. Use it to simplify the + chrpath feature. + +2008-01-29 13:07 clinton + + * Modules/FindQt4.cmake: + ENH: Allow QT4_WRAP_CPP to work with dir1/myobject.h + dir2/myobject.h Fixes #5067. + +2008-01-29 09:57 king + + * Source/cmFindPackageCommand.cxx: ENH: Added not to find_package + documentation about unspecified choice among multiple versions. + +2008-01-29 08:03 king + + * Tests/ExportImport/CMakeLists.txt: BUG: Custom command driver + outputs must be SYMBOLIC since no corresponding file is created. + +2008-01-29 07:57 king + + * Tests/ExportImport/CMakeLists.txt: BUG: Make sure + CMAKE_INSTALL_PREFIX stays in subproject caches. + +2008-01-29 07:48 king + + * Modules/Platform/Linux-SunPro-C.cmake: BUG: Fix dynamic exports + executable link option for Sun C compiler on Linux. + +2008-01-29 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-28 20:38 king + + * Modules/readme.txt, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h, + Tests/FindPackageTest/CMakeLists.txt, + Tests/FindPackageTest/lib/suffix/test/SuffixTestConfigVersion.cmake, + Tests/FindPackageTest/lib/zot-1.0/zot-config.cmake, + Tests/FindPackageTest/lib/zot-2.0/zot-config-version.cmake, + Tests/FindPackageTest/lib/zot-2.0/zot-config.cmake, + Tests/FindPackageTest/lib/zot-3.0/zot-config-version.cmake, + Tests/FindPackageTest/lib/zot-3.0/zot-config.cmake, + Tests/FindPackageTest/lib/zot-3.1/zot-config-version.cmake, + Tests/FindPackageTest/lib/zot-3.1/zot-config.cmake: ENH: Added + version support to Config mode of find_package command. + + - Added EXACT option to request an exact version. + - Enforce version using check provided by package. + - Updated FindPackageTest to test versioning in config mode. + +2008-01-28 19:20 clinton + + * Modules/FindQt4.cmake: + ENH: Improve find for glib/gthread when Qt is configured to use + it. Fixes #6220. + +2008-01-28 15:22 king + + * Source/: cmExportBuildFileGenerator.cxx, + cmExportInstallFileGenerator.cxx: STYLE: Updated TODO comment for + PUBLIC_HEADER_LOCATION export. + +2008-01-28 15:12 king + + * Source/: cmInstallCommand.h, cmTarget.cxx: ENH: Document + PRIVATE_HEADER, PUBLIC_HEADER, and RESOURCE target properties and + corresponding arguments to INSTALL(TARGETS). + +2008-01-28 14:46 king + + * Tests/Framework/CMakeLists.txt: BUG: Fix Framework test after + fixing FRAMEWORK targets to not install like frameworks on + non-Apple systems. + +2008-01-28 14:46 king + + * Source/cmExportBuildFileGenerator.cxx, + Source/cmExportFileGenerator.cxx, + Source/cmExportInstallFileGenerator.cxx, + Source/cmInstallCommand.cxx, Source/cmInstallCommand.h, + Source/cmInstallTargetGenerator.cxx, Source/cmTarget.cxx, + Source/cmTarget.h, Tests/ExportImport/Export/CMakeLists.txt, + Tests/ExportImport/Export/testExe3.c, + Tests/ExportImport/Import/CMakeLists.txt, + Tests/ExportImport/Import/imp_testExe1.c: ENH: Support + exporting/importing of AppBundle targets. + + - Imported bundles have the MACOSX_BUNDLE property set + - Added cmTarget::IsAppBundleOnApple method to simplify checks + - Document BUNDLE keyword in INSTALL command + - Updated IMPORTED_LOCATION property documentation for bundles + - Updated ExportImport test to test bundles + +2008-01-28 13:37 king + + * Source/cmExportFileGenerator.cxx, Source/cmExportFileGenerator.h, + Tests/ExportImport/Export/CMakeLists.txt, + Tests/ExportImport/Export/testExe1.c, + Tests/ExportImport/Export/testExe1lib.c: BUG: Fix export/import + file generation to not store link dependencies of executables or + modules. + +2008-01-28 13:21 king + + * Source/cmExportBuildFileGenerator.h, Source/cmExportCommand.cxx, + Source/cmExportCommand.h, Source/cmExportFileGenerator.cxx, + Source/cmExportFileGenerator.h, + Tests/ExportImport/Export/CMakeLists.txt: ENH: Restored APPEND + option to EXPORT() command in new implementation. + +2008-01-28 13:06 king + + * Tests/ExportImport/: Export/CMakeLists.txt, Export/testLib4.c, + Import/CMakeLists.txt, Import/imp_testExe1.c: ENH: Added + framework to ExportImport test. + +2008-01-28 13:05 king + + * Source/: cmComputeLinkInformation.cxx, cmExportFileGenerator.cxx, + cmExportInstallFileGenerator.cxx, cmGlobalGenerator.cxx, + cmGlobalXCodeGenerator.cxx, cmInstallCommand.cxx, + cmInstallCommand.h, cmInstallTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, cmTarget.cxx, cmTarget.h: + ENH: Support exporting/importing of Framework targets. + + - Imported frameworks have the FRAMEWORK property set + - Added cmTarget::IsFrameworkOnApple method to simplify checks + - Also remove separate IMPORTED_ENABLE_EXPORTS property and + just use ENABLE_EXPORTS since, like FRAMEWORK, it just represents + the target type. + - Document FRAMEWORK keyword in INSTALL command. + - Updated IMPORTED_LOCATION property documentation for + Frameworks + +2008-01-28 09:53 king + + * Source/cmExportFileGenerator.h: COMP: Add virtual destructor to + cmExportFileGenerator to avoid warnings about other virtual + functions. + +2008-01-28 08:40 king + + * Tests/: CMakeLists.txt, ExportImport/CMakeLists.txt, + ExportImport/main.c, ExportImport/Export/CMakeLists.txt, + ExportImport/Export/testExe1.c, ExportImport/Export/testExe2.c, + ExportImport/Export/testLib1.c, ExportImport/Export/testLib2.c, + ExportImport/Export/testLib3.c, + ExportImport/Import/CMakeLists.txt, + ExportImport/Import/imp_mod1.c, + ExportImport/Import/imp_testExe1.c: ENH: Added ExportImport test + to test new export/import features. + +2008-01-28 08:39 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Updated SimpleInstall tests + for new export/import interface. + +2008-01-28 08:38 king + + * Source/: CMakeLists.txt, cmAddDependenciesCommand.cxx, + cmAddExecutableCommand.cxx, cmAddExecutableCommand.h, + cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, + cmComputeLinkDepends.cxx, cmComputeLinkDepends.h, + cmComputeLinkInformation.cxx, cmExportBuildFileGenerator.cxx, + cmExportBuildFileGenerator.h, cmExportCommand.cxx, + cmExportCommand.h, cmExportFileGenerator.cxx, + cmExportFileGenerator.h, cmExportInstallFileGenerator.cxx, + cmExportInstallFileGenerator.h, cmGetPropertyCommand.cxx, + cmGetTargetPropertyCommand.cxx, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudioGenerator.cxx, cmGlobalXCodeGenerator.cxx, + cmIncludeExternalMSProjectCommand.cxx, cmInstallCommand.cxx, + cmInstallCommand.h, cmInstallCommandArguments.cxx, + cmInstallCommandArguments.h, cmInstallDirectoryGenerator.cxx, + cmInstallExportGenerator.cxx, cmInstallExportGenerator.h, + cmInstallFilesCommand.cxx, cmInstallFilesGenerator.cxx, + cmInstallGenerator.cxx, cmInstallGenerator.h, + cmInstallProgramsCommand.cxx, cmInstallTargetGenerator.cxx, + cmInstallTargetGenerator.h, cmLocalGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, cmMakefile.cxx, cmMakefile.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmSetPropertyCommand.cxx, + cmSetTargetPropertiesCommand.cxx, cmTarget.cxx, cmTarget.h: ENH: + Updated exporting and importing of targets to support libraries + and configurations. + + - Created cmExportFileGenerator hierarchy to implement export + file generation + - Installed exports use per-config import files loaded by a + central one. + - Include soname of shared libraries in import information + - Renamed PREFIX to NAMESPACE in INSTALL(EXPORT) and EXPORT() + commands + - Move addition of CMAKE_INSTALL_PREFIX to destinations to + install generators + - Import files compute the installation prefix relative to + their location when loaded + - Add mapping of importer configurations to importee + configurations + - Rename IMPORT targets to IMPORTED targets to distinguish from + windows import libraries + - Scope IMPORTED targets within directories to isolate them + - Place all properties created by import files in the IMPORTED + namespace + - Document INSTALL(EXPORT) and EXPORT() commands. + - Document IMPORTED signature of add_executable and add_library + - Enable finding of imported targets in cmComputeLinkDepends + +2008-01-28 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-27 15:09 king + + * bootstrap, Source/cmComputeLinkDepends.cxx: COMP: Use kwsys to + get STL set_intersection algorithm. + +2008-01-27 13:42 king + + * bootstrap, Source/CMakeLists.txt, + Source/cmComputeLinkDepends.cxx, Source/cmComputeLinkDepends.h, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, Source/cmTarget.cxx: ENH: + Created cmComputeLinkDepends to compute link dependencies. + + - This will be useful for imported library dependencies + - Replaces old cmTarget analyze-lib-depends stuff for linking + - Formalizes graph construction and dump + - Explicitly represents dependency inferral sets + - Use BFS of initial dependencies to preserve order + +2008-01-27 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-26 01:11 barre + + * Modules/: FindTCL.cmake, FindTclStub.cmake, FindTclsh.cmake, + FindWish.cmake: ENH: Update Tcl/Tk 8.5 + +2008-01-26 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-25 13:07 barre + + * Modules/: FindPerl.cmake, FindTCL.cmake, FindTclStub.cmake, + FindTclsh.cmake, FindWish.cmake: ENH: update for Tcl/Tk 8.5 + +2008-01-25 08:11 king + + * Source/cmSystemTools.cxx: COMP: Need to return a value from fake + MD5 method under bootstrap. + +2008-01-25 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-24 19:42 barre + + * Modules/FindTclsh.cmake: ENH: typo + +2008-01-24 19:31 barre + + * Modules/: FindTCL.cmake, FindTclsh.cmake, FindWish.cmake: ENH: + update for Tcl/Tk 8.5 + +2008-01-24 16:11 king + + * Source/cmSystemTools.cxx: COMP: Cannot do MD5 from KWSys during + CMake bootstrap. + +2008-01-24 14:41 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Add + cmSystemTools::ComputeStringMD5 method. + +2008-01-24 14:37 king + + * Source/cmake.cxx: BUG: Make cmake -E remove_directory work when + directory is not present. + +2008-01-24 07:37 king + + * Source/cmFindLibraryCommand.cxx: ENH: Apply new implicit link + directory find_library policy when loading a cache from an + earlier CMake. + +2008-01-24 07:37 king + + * Source/: cmCacheManager.cxx, cmCacheManager.h, cmMakefile.cxx, + cmMakefile.h: ENH: Added cmMakefile::NeedCacheCompatibility + method and support for it in cmCacheManager. This will allow + commands to modify their behavior when running with a cache + loaded from an earlier CMake version. + +2008-01-24 07:31 king + + * Source/CPack/cmCPackDebGenerator.cxx: COMP: Add include of + to get USHRT_MAX constant. + +2008-01-24 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-23 18:34 alex + + * Source/cmReturnCommand.h: STYLE: fix typo + + Alex + +2008-01-23 17:53 king + + * Modules/CMakeCompilerABI.h, Source/cmFindLibraryCommand.cxx: ENH: + Remove sparcv9 architecture subdir added earlier. The new + implicit link directory policy takes care of the problem. + +2008-01-23 17:43 king + + * bootstrap: BUG: Do not have variable and function of the same + name. Old shells do not likeit. + +2008-01-23 16:53 king + + * Source/CursesDialog/CMakeLists.txt: ENH: Simplify code by + removing unnecessary LINK_DIRECTORIES call. + +2008-01-23 16:35 king + + * Modules/CMakeCXXInformation.cmake: BUG: + CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG should get its default value + from CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG, not + CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG. + +2008-01-23 16:27 barre + + * Modules/: FindTCL.cmake, FindTclStub.cmake, FindTclsh.cmake, + FindWish.cmake: ENH: update for Tcl/Tk 8.5 + +2008-01-23 16:21 king + + * Source/: cmFindLibraryCommand.cxx, cmFindLibraryCommand.h: ENH: + Teach find_library to avoid returning library paths in system + directories that may be converted to architecture-specific + directories by the compiler when it invokes the linker. + +2008-01-23 15:56 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h: BUG: Fix cmComputeLinkInformation + cycle detection. + +2008-01-23 15:22 king + + * Modules/VTKCompatibility.cmake, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, + Source/cmDocumentVariables.cxx: ENH: Added CMAKE_LINK_OLD_PATHS + compatibility mode for linker search paths. + +2008-01-23 14:07 barre + + * Modules/: FindTCL.cmake, FindTclStub.cmake: ENH: keep cleaning up + Tcl/Tk modules + +2008-01-23 13:37 king + + * Source/cmComputeLinkInformation.cxx: COMP: Fix build on Borland + 5.5. + +2008-01-23 13:30 king + + * Modules/Platform/Windows-wcl386.cmake, + Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, + Source/cmDocumentVariables.cxx, Source/cmLocalGenerator.cxx: BUG: + Fix generation of Watcom link lines. + + - Work-around bug in Watcom command line parsing for spaces in + paths. + - Add 'library' option before libraries specified by file path. + +2008-01-23 13:03 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: BUG: + Work-around bug in MSVC 6 command line parsing. + +2008-01-23 12:51 martink + + * Source/cmCTest.cxx: ENH: look for CTestConfiguration.ini first + +2008-01-23 10:29 martink + + * Tests/: CMakeLists.txt, ReturnTest/CMakeLists.txt, + ReturnTest/returnTest.c, ReturnTest/subdir/CMakeLists.txt: ENH: + add testing for return and break commands + +2008-01-23 10:27 martink + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomCommandCommand.h, cmAddCustomTargetCommand.cxx, + cmAddCustomTargetCommand.h, cmAddDefinitionsCommand.cxx, + cmAddDefinitionsCommand.h, cmAddDependenciesCommand.cxx, + cmAddDependenciesCommand.h, cmAddExecutableCommand.cxx, + cmAddExecutableCommand.h, cmAddLibraryCommand.cxx, + cmAddLibraryCommand.h, cmAddSubDirectoryCommand.cxx, + cmAddSubDirectoryCommand.h, cmAddTestCommand.cxx, + cmAddTestCommand.h, cmAuxSourceDirectoryCommand.cxx, + cmAuxSourceDirectoryCommand.h, cmBootstrapCommands.cxx, + cmBuildCommand.cxx, cmBuildCommand.h, cmBuildNameCommand.cxx, + cmBuildNameCommand.h, cmCMakeMinimumRequired.cxx, + cmCMakeMinimumRequired.h, cmCPluginAPI.cxx, cmCommand.h, + cmConfigureFileCommand.cxx, cmConfigureFileCommand.h, + cmCreateTestSourceList.cxx, cmCreateTestSourceList.h, + cmDefinePropertyCommand.cxx, cmDefinePropertyCommand.h, + cmElseCommand.cxx, cmElseCommand.h, cmElseIfCommand.cxx, + cmElseIfCommand.h, cmEnableLanguageCommand.cxx, + cmEnableLanguageCommand.h, cmEnableTestingCommand.cxx, + cmEnableTestingCommand.h, cmEndForEachCommand.cxx, + cmEndForEachCommand.h, cmEndFunctionCommand.cxx, + cmEndFunctionCommand.h, cmEndIfCommand.cxx, cmEndIfCommand.h, + cmEndMacroCommand.cxx, cmEndMacroCommand.h, + cmEndWhileCommand.cxx, cmEndWhileCommand.h, + cmExecProgramCommand.cxx, cmExecProgramCommand.h, + cmExecuteProcessCommand.cxx, cmExecuteProcessCommand.h, + cmExportCommand.cxx, cmExportCommand.h, + cmExportLibraryDependencies.cxx, cmExportLibraryDependencies.h, + cmFLTKWrapUICommand.cxx, cmFLTKWrapUICommand.h, + cmFileCommand.cxx, cmFileCommand.h, cmFindLibraryCommand.cxx, + cmFindLibraryCommand.h, cmFindPackageCommand.cxx, + cmFindPackageCommand.h, cmFindPathCommand.cxx, + cmFindPathCommand.h, cmFindProgramCommand.cxx, + cmFindProgramCommand.h, cmForEachCommand.cxx, cmForEachCommand.h, + cmFunctionBlocker.h, cmFunctionCommand.cxx, cmFunctionCommand.h, + cmGetCMakePropertyCommand.cxx, cmGetCMakePropertyCommand.h, + cmGetDirectoryPropertyCommand.cxx, + cmGetDirectoryPropertyCommand.h, + cmGetFilenameComponentCommand.cxx, + cmGetFilenameComponentCommand.h, cmGetPropertyCommand.cxx, + cmGetPropertyCommand.h, cmGetSourceFilePropertyCommand.cxx, + cmGetSourceFilePropertyCommand.h, cmGetTargetPropertyCommand.cxx, + cmGetTargetPropertyCommand.h, cmGetTestPropertyCommand.cxx, + cmGetTestPropertyCommand.h, cmIfCommand.cxx, cmIfCommand.h, + cmIncludeCommand.cxx, cmIncludeCommand.h, + cmIncludeDirectoryCommand.cxx, cmIncludeDirectoryCommand.h, + cmIncludeExternalMSProjectCommand.cxx, + cmIncludeExternalMSProjectCommand.h, + cmIncludeRegularExpressionCommand.cxx, + cmIncludeRegularExpressionCommand.h, cmInstallCommand.cxx, + cmInstallCommand.h, cmInstallFilesCommand.cxx, + cmInstallFilesCommand.h, cmInstallProgramsCommand.cxx, + cmInstallProgramsCommand.h, cmInstallTargetsCommand.cxx, + cmInstallTargetsCommand.h, cmLinkDirectoriesCommand.cxx, + cmLinkDirectoriesCommand.h, cmLinkLibrariesCommand.cxx, + cmLinkLibrariesCommand.h, cmListCommand.cxx, cmListCommand.h, + cmLoadCacheCommand.cxx, cmLoadCacheCommand.h, + cmLoadCommandCommand.cxx, cmLoadCommandCommand.h, + cmMacroCommand.cxx, cmMacroCommand.h, cmMakeDirectoryCommand.cxx, + cmMakeDirectoryCommand.h, cmMakefile.cxx, cmMakefile.h, + cmMarkAsAdvancedCommand.cxx, cmMarkAsAdvancedCommand.h, + cmMathCommand.cxx, cmMathCommand.h, cmMessageCommand.cxx, + cmMessageCommand.h, cmOptionCommand.cxx, cmOptionCommand.h, + cmOutputRequiredFilesCommand.cxx, cmOutputRequiredFilesCommand.h, + cmProjectCommand.cxx, cmProjectCommand.h, cmQTWrapCPPCommand.cxx, + cmQTWrapCPPCommand.h, cmQTWrapUICommand.cxx, cmQTWrapUICommand.h, + cmRemoveCommand.cxx, cmRemoveCommand.h, + cmRemoveDefinitionsCommand.cxx, cmRemoveDefinitionsCommand.h, + cmSeparateArgumentsCommand.cxx, cmSeparateArgumentsCommand.h, + cmSetCommand.cxx, cmSetCommand.h, + cmSetDirectoryPropertiesCommand.cxx, + cmSetDirectoryPropertiesCommand.h, cmSetPropertyCommand.cxx, + cmSetPropertyCommand.h, cmSetSourceFilesPropertiesCommand.cxx, + cmSetSourceFilesPropertiesCommand.h, + cmSetTargetPropertiesCommand.cxx, cmSetTargetPropertiesCommand.h, + cmSetTestsPropertiesCommand.cxx, cmSetTestsPropertiesCommand.h, + cmSiteNameCommand.cxx, cmSiteNameCommand.h, + cmSourceGroupCommand.cxx, cmSourceGroupCommand.h, + cmStringCommand.cxx, cmStringCommand.h, cmSubdirCommand.cxx, + cmSubdirCommand.h, cmSubdirDependsCommand.cxx, + cmSubdirDependsCommand.h, cmTargetLinkLibrariesCommand.cxx, + cmTargetLinkLibrariesCommand.h, cmTryCompileCommand.cxx, + cmTryCompileCommand.h, cmTryRunCommand.cxx, cmTryRunCommand.h, + cmUseMangledMesaCommand.cxx, cmUseMangledMesaCommand.h, + cmUtilitySourceCommand.cxx, cmUtilitySourceCommand.h, + cmVariableRequiresCommand.cxx, cmVariableRequiresCommand.h, + cmVariableWatchCommand.cxx, cmVariableWatchCommand.h, + cmWhileCommand.cxx, cmWhileCommand.h, cmWriteFileCommand.cxx, + cmWriteFileCommand.h, + CTest/cmCTestEmptyBinaryDirectoryCommand.cxx, + CTest/cmCTestEmptyBinaryDirectoryCommand.h, + CTest/cmCTestHandlerCommand.cxx, CTest/cmCTestHandlerCommand.h, + CTest/cmCTestReadCustomFilesCommand.cxx, + CTest/cmCTestReadCustomFilesCommand.h, + CTest/cmCTestRunScriptCommand.cxx, + CTest/cmCTestRunScriptCommand.h, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestSleepCommand.cxx, CTest/cmCTestSleepCommand.h, + CTest/cmCTestStartCommand.cxx, CTest/cmCTestStartCommand.h, + CTest/cmCTestTestHandler.cxx, cmBreakCommand.cxx, + cmBreakCommand.h, cmExecutionStatus.h, cmReturnCommand.cxx, + cmReturnCommand.h: ENH: add return and break support to cmake, + also change basic command invocation signature to be able to + return extra informaiton via the cmExecutionStatus class + +2008-01-23 10:21 king + + * Source/cmComputeLinkInformation.cxx: BUG: Be less aggressive + about finding conflicts in the runtime path when the real soname + is not known. + +2008-01-23 09:53 king + + * Modules/CMakeCompilerABI.h, Source/cmFindLibraryCommand.cxx, + Source/cmFindLibraryCommand.h: ENH: Enable library search path + suffix for sparcv9 architecture. This should be generalized to a + platform file later. + +2008-01-23 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-22 10:11 clinton + + * Modules/FindQt4.cmake: ENH: Add macros to handle translations. + Fixes #6229. + +2008-01-22 10:05 king + + * Source/: cmComputeLinkInformation.cxx, + cmComputeLinkInformation.h: BUG: When a library file name is + linked without a path make sure the link type is restored after + the -l option. + +2008-01-22 09:15 king + + * Tests/: CMakeLists.txt, RuntimePath/CMakeLists.txt, + RuntimePath/bar1.c, RuntimePath/bar2.c, RuntimePath/foo1.c, + RuntimePath/foo2.c, RuntimePath/main.c: ENH: Added RuntimePath + test to make sure rpath gets correct order. + +2008-01-22 09:13 king + + * bootstrap, Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/Platform/AIX.cmake, Modules/Platform/HP-UX.cmake, + Source/CMakeLists.txt, Source/cmComputeLinkInformation.cxx, + Source/cmComputeLinkInformation.h, + Source/cmDocumentVariables.cxx, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, Source/cmGlobalXCodeGenerator.cxx, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, Source/cmTarget.cxx, + Source/cmTarget.h, Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: Implement + linking with paths to library files instead of -L and -l + separation. See bug #3832 + + - This is purely an implementation improvement. No interface + has changed. + - Create cmComputeLinkInformation class + - Move and re-implement logic from: + cmLocalGenerator::ComputeLinkInformation + cmOrderLinkDirectories + - Link libraries to targets with their full path (if it is + known) + - Dirs specified with link_directories command still added with + -L + - Make link type specific to library names without paths + (name libfoo.a without path becomes -Wl,-Bstatic -lfoo) + - Make directory ordering specific to a runtime path + computation feature + (look for conflicting SONAMEs instead of library names) + - Implement proper rpath support on HP-UX and AIX. + +2008-01-22 08:52 king + + * Source/kwsys/hash_map.hxx.in: COMP: Remove inline keyword from + forward declaration for VS9. + +2008-01-22 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-21 22:48 king + + * Source/cmFindPackageCommand.cxx: ENH: Updated find_package + documentation to describe common usage first. + +2008-01-21 20:57 king + + * Modules/: CMakeDetermineCompilerId.cmake, + CMakeFindBinUtils.cmake: ENH: Cleanup chrpath feature by not + displaying exe format or placing non-advanced options in cache. + +2008-01-21 18:30 king + + * Source/: cmFindLibraryCommand.cxx, cmFindLibraryCommand.h: ENH: + Add support to find_library to transform /lib to /lib32 on some + architectures. + +2008-01-21 18:30 king + + * Modules/CMakeCCompiler.cmake.in, Modules/CMakeCCompilerABI.c, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeCXXCompilerABI.cpp, Modules/CMakeCompilerABI.h, + Modules/CMakeDetermineCompilerABI.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, + Source/cmDocumentVariables.cxx: ENH: Generalize the check for + sizeof void* to detect more ABI information. + +2008-01-21 17:29 king + + * Tests/CMakeLists.txt: BUG: Do not get in infinite loop when + checking make tool version in cmake build tree. + +2008-01-21 13:59 king + + * Source/cmTarget.cxx: BUG: Added missing documentation of + LINK_FLAGS_ property. + +2008-01-21 13:04 king + + * Source/cmFindPackageCommand.cxx: COMP: snprintf is not portable. + +2008-01-21 12:56 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-cl.cmake.in, + Source/cmGlobalVisualStudio9Generator.cxx, + Source/cmGlobalVisualStudio9Generator.h: ENH: final 2.4.8 + +2008-01-21 08:48 king + + * Modules/readme.txt, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h, + Tests/FindPackageTest/CMakeLists.txt, + Tests/FindPackageTest/FindVersionTestA.cmake, + Tests/FindPackageTest/FindVersionTestB.cmake, + Tests/FindPackageTest/FindVersionTestC.cmake: ENH: Implement + version support in the find_package command module mode. Version + numbers provided to the command are converted to variable + settings to tell the FindXXX.cmake module what version is + requested. This addresses issue #1645. + +2008-01-21 08:01 king + + * Source/kwsys/SystemTools.cxx: COMP: Fix VS6 and old HP build. + This source does not have the #define for hack. + +2008-01-21 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-20 19:29 king + + * Source/: cmFindLibraryCommand.cxx, cmFindPathCommand.cxx, + kwsys/SystemTools.cxx: BUG: Fix previous commit to not access + empty strings out of bounds. + +2008-01-20 17:41 king + + * Source/cmFindLibraryCommand.cxx: BUG: Make sure search paths + never have double-slashes. Leading with two slashes (//) on + cygwin looks like a network path and delays while waiting for a + non-existent machine. This file was left out of the previous + checkin for this problem. + +2008-01-20 17:24 king + + * Source/: cmFindPathCommand.cxx, kwsys/SystemTools.cxx: BUG: Make + sure search paths never have double-slashes. Leading with two + slashes (//) on cygwin looks like a network path and delays while + waiting for a non-existent machine. + +2008-01-20 16:02 king + + * Modules/FindX11.cmake: BUG: FindX11 module should search for SM + library instead of returning -lSM. + +2008-01-20 13:36 king + + * Source/cmake.cxx: COMP: Fix build during bootstrap on MSys. + +2008-01-20 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-19 15:09 martink + + * Source/: cmLocalGenerator.cxx, CTest/cmCTestTestHandler.cxx: ENH: + improve backwards compatibility + +2008-01-19 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-18 19:02 barre + + * Modules/: FindTCL.cmake, FindTclsh.cmake, FindWish.cmake: ENH: + Tcl/Tk 8.6 alpha schedule for May 2008. + +2008-01-18 18:40 king + + * Source/cmDependsFortran.cxx: COMP: Fix build on Borland 5.5. + +2008-01-18 17:11 alex + + * Source/cmMakefile.cxx: BUG: don't crash if + cmMakefile::RaiseScope() is called from a cmake file in the top + level directory in normal code (i.e. not within a function) + + Alex + +2008-01-18 16:06 hoffman + + * Modules/Platform/Windows-cl.cmake.in: ENH: make sure msvc90 gets + set + +2008-01-18 15:52 alex + + * Modules/CMakeDetermineCompilerId.cmake, + Modules/FindwxWidgets.cmake, Source/cmBootstrapCommands.cxx, + Source/cmRaiseScopeCommand.cxx, Source/cmRaiseScopeCommand.h, + Source/cmSetCommand.cxx, Source/cmSetCommand.h, + Tests/FunctionTest/CMakeLists.txt, Tests/FunctionTest/Util.cmake, + Tests/FunctionTest/SubDirScope/CMakeLists.txt: ENH: remove + RAISE_SCOPE() again and instead add SET( + PARENT_SCOPE) + + Alex + +2008-01-18 15:19 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: make sure MSVC90 is set + +2008-01-18 14:34 hoffman + + * Source/: cmGlobalVisualStudio9Generator.cxx, + cmGlobalVisualStudio9Generator.h: ENH: add MSVC90 define to vs9 + ide + +2008-01-18 14:02 barre + + * Modules/: FindTCL.cmake, FindTclsh.cmake, FindWish.cmake: ENH: + cleanup FindPerl and FindTcl (use ActiveState CurrentVersion, and + support Tcl/Tk 8.5) + +2008-01-18 13:51 barre + + * Modules/: FindTclsh.cmake, FindWish.cmake: ENH: cleanup FindPerl + and FindTcl (use ActiveState CurrentVersion, and support Tcl/Tk + 8.5) + +2008-01-18 13:46 barre + + * Modules/: FindTCL.cmake, FindTclsh.cmake, FindWish.cmake: ENH: + cleanup FindPerl and FindTcl (use ActiveState CurrentVersion, and + support Tcl/Tk 8.5) + +2008-01-18 13:15 barre + + * Modules/: FindPerl.cmake, FindTCL.cmake, FindTclsh.cmake, + FindWish.cmake: ENH: cleanup FindPerl and FindTcl (use + ActiveState CurrentVersion, and support Tcl/Tk 8.5) + +2008-01-18 12:26 martink + + * Source/cmMacroCommand.h: STYLE: fix bug 5682 + +2008-01-18 10:25 martink + + * Source/: cmLocalGenerator.cxx, cmLocalUnixMakefileGenerator3.cxx, + cmake.cxx, CTest/cmCTestTestHandler.cxx: BUG: fix bugs 5539 + (progress going beyond 100% when new files are added) and 5889 + (tests are not found in some cases when using add_subdirectory to + .. etc) + +2008-01-18 08:35 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Construction of + COMPILE_DEFINITIONS_ property name must use upper-case + config name. + +2008-01-18 08:19 king + + * Source/cmFindPackageCommand.cxx: STYLE: Fix line-too-long. + +2008-01-18 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-17 20:59 king + + * Source/cmFindPackageCommand.cxx: ENH: Clarify documentation of + find_package command. + +2008-01-17 20:34 king + + * Source/cmMakefile.cxx, Tests/Complex/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: Make + per-configuration COMPILE_DEFINITIONS_ directory property + initialized from parent. + +2008-01-17 19:58 king + + * Modules/CMakeFortranInformation.cmake, + Modules/Platform/Windows-ifort.cmake, + Source/cmDependsFortran.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx: ENH: Enable use of + COMPILE_DEFINITIONS property for Fortran sources. + +2008-01-17 19:50 king + + * Source/cmMakefile.cxx: BUG: COMPILE_DEFINITIONS directory + property needs to be inherited from parent when a directory is + created. + +2008-01-17 19:29 king + + * Source/cmAddDefinitionsCommand.h, + Source/cmGlobalXCodeGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmMakefileTargetGenerator.cxx, + Source/cmRemoveDefinitionsCommand.h, + Tests/Preprocess/CMakeLists.txt, Tests/Preprocess/preprocess.c, + Tests/Preprocess/preprocess.cxx: ENH: Converted cmMakefile + DefineFlags added by ADD_DEFINITIONS command into a + COMPILE_DEFINITIONS directory property. + +2008-01-17 18:13 king + + * Source/: cmMakefile.cxx, cmMakefile.h, cmProperty.cxx, + cmProperty.h, cmPropertyMap.cxx, cmPropertyMap.h, + cmSetPropertyCommand.cxx, cmSetPropertyCommand.h, + cmSourceFile.cxx, cmSourceFile.h, cmTarget.cxx, cmTarget.h, + cmTest.cxx, cmTest.h, cmake.cxx, cmake.h: ENH: Add AppendProperty + methods for use by C++ code in CMake. Simplify implementation of + SET_PROPERTY command by using them. + +2008-01-17 17:49 alex + + * Source/cmFindBase.cxx: STYLE: PATHS is optional (#6253) + + Alex + +2008-01-17 17:43 alex + + * Source/cmFindBase.cxx: STYLE: fix typo (#6252) + + Alex + +2008-01-17 17:34 king + + * Tests/Preprocess/CMakeLists.txt: ENH: Use new set_property + signature to set COMPILE_DEFINITIONS properties in Preprocess + test. + +2008-01-17 17:19 king + + * Modules/CPackDeb.cmake, Modules/FeatureSummary.cmake, + Modules/FindPythonLibs.cmake, Source/cmGetPropertyCommand.cxx, + Source/cmGetPropertyCommand.h, Tests/Properties/CMakeLists.txt: + ENH: Changed signature of GET_PROPERTY command to be more + powerful and extendible. + +2008-01-17 16:24 king + + * Source/cmSetPropertyCommand.cxx: COMP: Fix VS build. + +2008-01-17 15:54 king + + * Modules/CMakeGenericSystem.cmake, Modules/FeatureSummary.cmake, + Modules/Platform/BlueGeneL.cmake, + Modules/Platform/Catamount.cmake, Modules/Platform/Generic.cmake, + Modules/Platform/Linux.cmake, Modules/Platform/UnixPaths.cmake, + Modules/Platform/eCos.cmake, Source/cmBootstrapCommands.cxx, + Source/cmSetPropertiesCommand.cxx, + Source/cmSetPropertiesCommand.h, Source/cmSetPropertyCommand.cxx, + Source/cmSetPropertyCommand.h, Tests/DocTest/CMakeLists.txt, + Tests/Properties/CMakeLists.txt: ENH: Rename SET_PROPERITES + command to SET_PROPERTY and give it a more powerful signature. + +2008-01-17 12:44 martink + + * Source/: cmLocalGenerator.cxx, ctest.cxx, + CTest/cmCTestTestHandler.cxx: ENH: use CTestTestfile.txt + +2008-01-17 12:35 martink + + * Source/cmEnableTestingCommand.h: ENH: remove unused prototype + +2008-01-17 10:35 king + + * bootstrap: COMP: The find_package command needs more of kwsys. + Added String.h, String.c, and auto_ptr.hxx to bootstrapping + kwsys. + +2008-01-17 10:32 king + + * Source/cmFindPackageCommand.cxx: COMP: Fix warning about missing + virtual destructor. + +2008-01-17 10:26 martink + + * Tests/Tutorial/Step7/: CMakeLists.txt, CTestConfig.cmake: STYLE: + change case to match book + +2008-01-17 10:00 king + + * Modules/Platform/xlf.cmake, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmMakefileTargetGenerator.cxx: ENH: Enable + CMAKE__DEFINE_FLAG for COMPILE_DEFINITIONS property + implementation. + +2008-01-17 09:06 king + + * Tests/FindPackageTest/: CMakeLists.txt, + TApp.app/Contents/Resources/TAppConfig.cmake, + TApp.app/Contents/Resources/cmake/tapp-config.cmake, + TFramework.framework/Versions/A/Resources/tframework-config.cmake, + TFramework.framework/Versions/A/Resources/CMake/TFrameworkConfig.cmake, + lib/Bar/BarConfig.cmake, lib/Bar/cmake/bar-config.cmake, + lib/TApp/TAppConfig.cmake, lib/foo-1.2/foo-config.cmake, + lib/foo-1.2/CMake/FooConfig.cmake, + lib/suffix/test/SuffixTestConfig.cmake: ENH: Updated + FindPackageTest to test new find_package command features. + +2008-01-17 09:02 king + + * Source/: cmBootstrapCommands.cxx, cmFindBase.cxx, cmFindBase.h, + cmFindCommon.cxx, cmFindCommon.h, cmFindLibraryCommand.cxx, + cmFindPackageCommand.cxx, cmFindPackageCommand.h, + cmFindPathCommand.cxx, cmFindProgramCommand.cxx: ENH: Major + improvements to the FIND_PACKAGE command. See bug #3659. + + - Use CMAKE_PREFIX_PATH and CMAKE_SYSTEM_PREFIX_PATH among + other means + to locate package configuration files. + - Create cmFindCommon as base for cmFindBase and + cmFindPackageCommand + - Move common functionality up to cmFindCommon + - Improve documentation of FIND_* commands. + - Fix FIND_* commands to not add framework/app paths in wrong + place. + +2008-01-17 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-16 11:53 karthik + + * Docs/: cmake-indent.vim, cmake-syntax.vim: ENH: + + + ~/CMake/src/Docs * Additions for cmake-command + highligting. * Additions for operator-highlighting + +2008-01-16 11:24 king + + * Source/cmListCommand.cxx: ENH: Allow LIST(APPEND) command to + append nothing. + +2008-01-16 10:04 david.cole + + * Modules/FindJNI.cmake: BUG: Eliminate message - it pops up an + annoying dialog whenever you run CMakeSetup in a project with + java wrapping turned on. + +2008-01-16 09:51 king + + * Modules/Platform/: Darwin.cmake, UnixPaths.cmake, + WindowsPaths.cmake, syllable.cmake: ENH: Convert Modules/Platform + specification of system search paths to use + CMAKE_SYSTEM_PREFIX_PATH when possible. + +2008-01-16 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-15 21:20 king + + * Modules/: FindFreetype.cmake, FindGDAL.cmake, FindGIF.cmake, + FindLua50.cmake, FindLua51.cmake, FindOpenAL.cmake, + FindOpenThreads.cmake, FindPhysFS.cmake, FindProducer.cmake, + FindQuickTime.cmake, FindSDL.cmake, FindSDL_image.cmake, + FindSDL_mixer.cmake, FindSDL_net.cmake, FindSDL_ttf.cmake, + Findosg.cmake, FindosgDB.cmake, FindosgFX.cmake, FindosgGA.cmake, + FindosgIntrospection.cmake, FindosgManipulator.cmake, + FindosgParticle.cmake, FindosgProducer.cmake, + FindosgShadow.cmake, FindosgSim.cmake, FindosgTerrain.cmake, + FindosgText.cmake, FindosgUtil.cmake, FindosgViewer.cmake: BUG: + Remove references to CMAKE_PREFIX_PATH variable. It should not + be referenced directly by FIND_* command calls. The commands + search it automatically. + +2008-01-15 21:02 king + + * Source/cmGlobalXCodeGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMakefileTargetGenerator.cxx, Source/cmSourceFile.cxx, + Source/cmTarget.cxx, Tests/Preprocess/CMakeLists.txt: ENH: + Renamed _COMPILE_DEFINITIONS to + COMPILE_DEFINITIONS_ for better documentation clarity. + +2008-01-15 19:56 alex + + * Modules/CMakeFindBinUtils.cmake: STYLE: fix infinished comment + + Alex + +2008-01-15 17:02 hoffman + + * CMakeCPackOptions.cmake.in: ENH: fix add/remove program name + +2008-01-15 16:02 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudioGenerator.cxx: ENH: move more stuff + over and get vs 9 working + +2008-01-15 14:19 hoffman + + * Modules/Platform/SunOS.cmake: BUG: fix for bug 6231, bad regex + for sunos, worked by chance, but better to have it right + +2008-01-15 14:00 hoffman + + * Source/: cmGlobalVisualStudio7Generator.cxx, + cmLocalVisualStudioGenerator.cxx, QtDialog/README: ENH: remove + patch as directory change was already fixed + +2008-01-15 11:56 hoffman + + * Source/cmLocalVisualStudioGenerator.cxx: BUG: fix for bug 6234, + use cd /d so that drives can be changed. + +2008-01-15 10:49 king + + * Source/cmake.cxx: ENH: Added partial implementation of + recognizing per-configration properties. + +2008-01-15 10:49 king + + * Source/: cmSourceFile.cxx, cmTarget.cxx: ENH: Add explicit + documentation entry for configuration-specific + _COMPILE_DEFINITIONS. + +2008-01-15 10:38 king + + * Tests/DocTest/DocTest.cxx: BUG: Add newline between properties. + +2008-01-15 09:09 king + + * Tests/Preprocess/CMakeLists.txt: BUG: Test needs ansi C code + support. + +2008-01-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-14 19:20 alex + + * Docs/: cmake-indent.vim, cmake-syntax.vim: BUG: fix vim + highlighting, see #6238 + + Alex + +2008-01-14 19:02 alex + + * Modules/CMakeFindBinUtils.cmake: BUG: according to the binutils + mailing list chrpath doesn't work when cross compiling + + Alex + +2008-01-14 17:19 alex + + * Modules/FindSubversion.cmake: BUG: set LC_ALL to C, so message + from svn are not translated, which can lead to problems (since + the output is parsed, which fails then) + + Brad, Bill, can you think of any reasons this change might create + problems ? + + Alex + +2008-01-14 17:05 alex + + * Source/cmDocumentation.cxx: BUG: make -help-module-list work by + filling the modules section first, also for custom modules + + Alex + +2008-01-14 11:21 king + + * Tests/Preprocess/CMakeLists.txt: BUG: Disable semicolon test on + VS 7.0. + +2008-01-14 11:07 king + + * Source/cmGlobalXCodeGenerator.cxx: COMP: Fix warning about + backslash at end of c++ comment. + +2008-01-14 09:20 king + + * Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, Modules/Platform/AIX.cmake, + Modules/Platform/Generic-SDCC-C.cmake, + Modules/Platform/QNX.cmake, Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-icl.cmake, + Modules/Platform/Windows-wcl386.cmake, Modules/Platform/cl.cmake, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmMakefileTargetGenerator.cxx, Source/cmSourceFile.cxx, + Source/cmTarget.cxx, Tests/CMakeLists.txt, + Tests/Preprocess/CMakeLists.txt, Tests/Preprocess/file_def.h, + Tests/Preprocess/preprocess.c, Tests/Preprocess/preprocess.cxx, + Tests/Preprocess/preprocess.h.in, + Tests/Preprocess/preprocess_vs6.cxx, + Tests/Preprocess/target_def.h: ENH: Create COMPILE_DEFINITIONS + property for targets and source files. Create + _COMPILE_DEFINITIONS property as per-configuration + version. Add Preprocess test to test the feature. Document + limitations on Xcode and VS6 generators. + +2008-01-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-13 16:59 king + + * Source/cmLocalGenerator.cxx: BUG: Removed stray debugging + statement. + +2008-01-13 16:36 king + + * Source/: cmGlobalNMakeMakefileGenerator.cxx, + cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.h, + cmLocalVisualStudio7Generator.cxx, kwsys/System.c, + kwsys/System.h.in: ENH: Improved escaping in kwsys/System. Added + escape of % for NMake. Added escape of ; for the VS IDE. + +2008-01-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-12 09:52 king + + * Source/kwsys/SystemTools.cxx: COMP: Fix build on borland. + +2008-01-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-11 17:37 hoffman + + * Modules/Platform/: AIX-VisualAge-Fortran.cmake, + Linux-VisualAge-Fortran.cmake, xlf.cmake: ENH: add support for + xlf with -WF,-D for -D + +2008-01-11 13:00 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: ENH: add + CMAKE_DEFINE_FLAG_(LANG) that can replace -D flags with what the + compiler actually uses + +2008-01-11 12:40 clinton + + * Modules/FindQt4.cmake: ENH: For moc commands on Windows, use + @param_file method to allow arguments longer than Windows' + command length limitation. Fixes #6221. + +2008-01-11 10:36 david.cole + + * Source/kwsys/SystemTools.cxx: ENH: Merge changes from main tree + into VTK-5-0 branch. (Selected Utilities/kwsys/SystemTools.cxx + fixes for KWWidgets file browser dialog) + +2008-01-11 08:33 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Add + SystemTools::SplitPathRootComponent and re-implement SplitPath to + use it. Add better treatment of user home directory paths. + +2008-01-11 08:30 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/CMakeVS9FindMake.cmake, + Source/cmInstallTargetGenerator.cxx: ENH: push a few more changes + to 2.4.8 + +2008-01-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-10 21:42 david.cole + + * Source/kwsys/SystemTools.cxx: ENH: Merge changes from main tree + into VTK-5-0 branch. (cvs -q up -j1.205 -j1.206 + Utilities/kwsys/SystemTools.cxx) + +2008-01-10 18:52 alex + + * Modules/FindBoost.cmake: BUG: it seems on some installations + boost is installed under boost-1_34 , see #5030 + + FindBoost.cmake recommends using LINK_DIRECTORIES(), is this + really good ? + + Alex + +2008-01-10 18:32 king + + * Source/kwsys/ProcessUNIX.c: BUG: Fix hang in Process_Kill on OS X + caused by an OS bug in which a pipe read end cannot be closed if + the pipe write end is open, the pipe is full, and another process + is blocking waiting to write. Work around the problem by killing + the children before closing the pipes. + +2008-01-10 16:22 hoffman + + * Modules/FindSWIG.cmake: BUG: fix for bug 4145 much better + findSwig + +2008-01-10 15:17 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, + cmInstallTargetGenerator.cxx: BUG: fix for bug 6193, fix xcode + depend helper + +2008-01-10 14:47 king + + * Modules/Platform/Linux-VisualAge-C.cmake: BUG: Removed stray + debugging message. + +2008-01-10 14:47 king + + * Modules/CMakeLists.txt: BUG: Need to install fortran compiler id + source. + +2008-01-10 11:58 king + + * Modules/CMakeFortranCompilerId.F90: STYLE: Move VisualAge id + macro to correct block. + +2008-01-10 10:50 hoffman + + * Modules/: CMakeFortranCompilerId.F90, + Platform/Linux-VisualAge-C.cmake, + Platform/Linux-VisualAge-Fortran.cmake: ENH: add support for + visual age fortran on linux + +2008-01-10 09:46 king + + * Source/cmDependsFortran.cxx: COMP: Fix build on VS6. + +2008-01-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-09 22:09 perera + + * Source/: cmAddExecutableCommand.h, cmConfigureFileCommand.h, + cmDocumentation.cxx, cmEnableLanguageCommand.h, cmFindBase.cxx, + cmMakefile.cxx, cmSourceFile.cxx, cmStringCommand.h, + cmTarget.cxx, cmTest.cxx, cmTryCompileCommand.h, + cmVariableWatchCommand.h, cmWhileCommand.h: STYLE: Spelling fixes + on documentation + +2008-01-09 16:59 alex + + * Source/cmDocumentation.cxx: ENH: sort the module files + alphabetically when generating the documentation of rht modules + + Alex + +2008-01-09 10:30 king + + * Modules/Platform/Windows-ifort.cmake, + Source/cmDependsFortran.cxx, Source/cmDependsFortran.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Tests/Fortran/CMakeLists.txt, Tests/Fortran/test_preprocess.F90: + ENH: Patch from Maik to add preprocessor directive handling to + Fortran dependency scanning. Also added -fpp flag to Intel + Fortran compiler on Windows by default. + +2008-01-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-08 17:51 hoffman + + * Source/kwsys/: SystemInformation.cxx, SystemInformation.hxx.in: + ENH: figure out long long value + +2008-01-08 17:20 hoffman + + * Source/kwsys/SystemInformation.cxx: ENH: fix lots of warnings + +2008-01-08 16:40 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/CPack.cmake: ENH: + remove relocate option in mac installer as it is broken + +2008-01-08 16:28 hoffman + + * Source/kwsys/CMakeLists.txt: ENH: turn off for now + +2008-01-08 14:59 hoffman + + * Source/kwsys/: CMakeLists.txt, SystemInformation.cxx, + SystemInformation.hxx.in: ENH: fix leaks and turn on by default + +2008-01-08 11:43 hoffman + + * Source/kwsys/: CMakeLists.txt, testSystemInformation.cxx: ENH: + add missing file + +2008-01-08 11:38 hoffman + + * Source/kwsys/: CMakeLists.txt, SystemInformation.cxx, + SystemInformation.hxx.in: ENH: add new system information class + for use in ctest + +2008-01-08 11:06 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindQt4.cmake: ENH: + last change for 2.4.8 branch, I hope, fix for findqt + +2008-01-08 08:25 hoffman + + * Source/cmDependsFortran.cxx: BUG: make it compile on vs 6 + +2008-01-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-07 23:08 king + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y: + BUG: Fix parsing of fortran include directives during dependency + scanning. Previously only #include worked but not just include. + +2008-01-07 16:12 king + + * Modules/CMakeJavaCompiler.cmake.in, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmMakefileTargetGenerator.cxx: BUG: Restore old interface + of "make foo.o" and "make foo.i" even though object file names + now include source extensions. For Java we also need to always + remove the source extension (.java -> .class). This fixes the + re-opening of bug #6169. + +2008-01-07 14:52 alex + + * Source/cmFileCommand.cxx: BUG: with cmake 2.4 INSTALL_FILES() + with no files was accepted by cmake, with cmake cvs without this + patch an invalid cmake_install.cmake script was generated in this + case, it failed with an error if no files were given. So just do + nothing if no files are listed to make it compatible. + + http://lists.kde.org/?l=kde-commits&m=119965185114478&w=2 + + Alex + +2008-01-07 11:36 king + + * Source/cmDependsFortran.cxx: ENH: Changes based on patch from + Maik for better cmDependsFortran::ModulesDiffer. + +2008-01-07 10:27 king + + * Modules/: CMakeDetermineCompilerId.cmake, + CMakeDetermineFortranCompiler.cmake: ENH: Add support to + CMAKE_DETERMINE_COMPILER_ID macro to try building the id source + more than once with different extra flags added to the compiler. + Use the support to correctly identify the Intel Fortran compiler + on windows which does not preprocess by default without special + flags. + +2008-01-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-06 17:18 alex + + * Source/cmFindBase.cxx: BUG: fix #6105, if a directory inside + CMAKE_FIND_ROOT_PATH is given to a FIND_XXX() command, don't + prepend the root to it (since it is already in this root) + + Alex + +2008-01-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-05 20:37 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Support cross-compiling; + wx-config should be searched for in target platform ONLY (bug + 6187). + +2008-01-05 11:19 miguelf + + * Modules/FindwxWidgets.cmake: ENH: Generalized the + WXWIDGETS_ADD_RESOURCES to support header generation, xrs file + generation, and other options (BUG: 6162). + +2008-01-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-04 14:22 king + + * Source/cmFileCommand.cxx: BUG: File installation should overwrite + the destination if the file times differ at all rather than only + if the source file is newer. Users expect installation to + overwrite destination files. This addresses the re-opening of + bug#3349. + +2008-01-04 12:38 alex + + * Modules/: FindFreetype.cmake, FindGIF.cmake: ENH: rename + variables from GIFLIB_* to GIF_* -add standard QUIET and REQUIRED + handling -add GIF_LIBRARIES variable as readme.txt says -add name + giflib to the names for the gif library -remove some unnecessary + search paths for the lib (they are already part of the standard + search paths, see Modules/Platform/UnixPaths.cmake) + -FindFreetype.cmake: use PATH_SUFFIXES include again for the + headers with the CMAKE_PREFIX_PATH variable + + Alex + +2008-01-04 12:29 alex + + * Modules/: FindGIF.cmake, FindGIFLIB.cmake: STYLE: rename + FindGIFLIB.cmake to FindGIF.cmake, as discussed with Eric + + Alex + +2008-01-04 11:56 alex + + * Modules/FindX11.cmake: BUG: fix spelling of the xf86misc and + xf86vmode variables + + Alex + +2008-01-04 11:42 ewing + + * Modules/FindOpenAL.cmake: ENH: Added all lowercase 'openal' to + library search names in hopes of addressing bug 6201 (won't + detect on Gentoo). + +2008-01-04 07:29 alex + + * Modules/FindFreetype.cmake: STYLE: use + FIND_PACKAGE_HANDLE_STANDARD_ARGS() to handle QUIET and REQUIRED + -remove some unnecessary search paths (they are part of the + default paths) -don't use PATH_SUFFIXES for include/ when + searching for a header, that's very uncommon style -add + FREETYPE_LIBRARIES as the variable which should be used by the + user (as documented in readme.txt) + + Alex + +2008-01-04 07:25 alex + + * Modules/: FindFreeType.cmake, FindFreetype.cmake: STYLE: renamed + FindFreeType.cmake to FindFreetype.cmake to make it more + compatible with the one in KDE4 + + Alex + +2008-01-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-03 11:21 martink + + * Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmRaiseScopeCommand.cxx, Source/cmRaiseScopeCommand.h, + Tests/FunctionTest/CMakeLists.txt, + Tests/FunctionTest/SubDirScope/CMakeLists.txt, + Tests/FunctionTest/Util.cmake: ENH: change raise_scope signature + to be safer for returned varuables + +2008-01-03 09:40 king + + * Source/cmFileCommand.cxx: STYLE: Fix line-too-long. + +2008-01-03 07:28 hoffman + + * Source/cmake.cxx: BUG: fix resource file with a full path + +2008-01-03 04:19 alex + + * Source/cmFileCommand.cxx: COMP: fix build on Windows with gcc, + patch from Maik Beckmann + + Alex + +2008-01-03 00:01 king + + * Source/: cmFileTimeComparison.cxx, cmFileTimeComparison.h: ENH: + Add method cmFileTimeComparison::FileTimesDiffer to check if file + times differ by 1 second or more. + +2008-01-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-02 18:30 king + + * Source/cmDependsFortran.cxx: ENH: Cleanup Fortran build + directories by placing module stamp files in the target directory + that builds them. This is actually a simpler implementation + anyway. + +2008-01-02 18:00 king + + * Tests/StringFileTest/CMakeLists.txt: ENH: Add test for FILE(READ + ...HEX). + +2008-01-02 17:49 king + + * Source/cmMakefile.cxx, Tests/FunctionTest/CMakeLists.txt, + Tests/FunctionTest/SubDirScope/CMakeLists.txt: BUG: Make + RAISE_SCOPE function work when variable is not defined. + +2008-01-02 17:32 king + + * Docs/cmake-mode.el: ENH: Enable indentation of + FUNCTION/ENDFUNCTION blocks in emacs. + +2008-01-02 17:12 hoffman + + * Modules/UseSWIG.cmake: BUG: fix for bug 6151 + +2008-01-02 16:53 alex + + * Source/cmTarget.cxx: ENH: only allow usage of chrpath if the + executable file format is ELF + + Alex + +2008-01-02 16:52 alex + + * Modules/: CMakeDetermineCompilerId.cmake, + CMakeFindBinUtils.cmake: ENH: check the magic code of the + executable file to determine the executable file format. Tested + for ELF on x86 Linux, COFF and Mach-O prepared but commented out + since I don't have such systems available. Please have a look a + CMakeDetermineCompilerId.cmake and enable the test for them too. + + Only add the option for using chrpath if the executable format is + ELF + + Alex + +2008-01-02 16:46 alex + + * Source/: cmFileCommand.cxx, cmFileCommand.h: ENH: add the + keywords OFFSET and HEX to the FILE() command, using OFFSET an + offset can be specified where the reading starts, and using HEX + the data can be converted into a hex string, so binary data can + be compared with text functions -add docs for LIMIT, OFFSET and + HEX + + Alex + +2008-01-02 15:55 king + + * Source/cmGlobalVisualStudio8Generator.cxx: STYLE: Fixed + line-too-long. + +2008-01-02 15:53 king + + * Source/cmGlobalVisualStudio8Generator.cxx: BUG: Do not use + VSMacros stuff for VS8sp0 because macros do not work in that + version. + +2008-01-02 15:17 king + + * Source/cmFileCommand.cxx, Source/cmInstallCommand.cxx, + Source/cmInstallCommand.h, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Added FILES_MATCHING + option to INSTALL(DIRECTORY). This will help install a tree of + header files while ignoring non-headers. + +2008-01-02 12:32 alex + + * Modules/FindRuby.cmake: ENH: add more ruby paths: sitearch, + sitelib, vendorarch, vendorlib (#5531) -make these variables + cached and ADVANCED -remove unused QUIETLY code -document + RUBY_LIBRARY + + Alex + +2008-01-02 11:43 alex + + * Modules/FindRuby.cmake: BUG: make FindRuby work with the libs for + MSVC, which can have additional pre- and suffixes (#5642) + + Alex + +2008-01-02 11:08 hoffman + + * Source/cmAuxSourceDirectoryCommand.cxx: BUG: fix for bug 6197, + absolute paths were not supported + +2008-01-02 11:04 king + + * Source/: cmDependsFortran.cxx, cmDependsFortran.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: Make the Fortran compiler + id available to cmDependsFortran at scanning and module timestamp + copy time. + +2008-01-02 10:56 hoffman + + * Source/cmListCommand.h: BUG: fix for bug 6207 explain list index + values better + +2008-01-02 09:32 hoffman + + * Source/cmake.cxx: ENH: fix new incremental link stuff to work + with nmake @ files + +2008-01-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2008-01-01 17:19 hoffman + + * Source/cmake.cxx: ENH: remove warning + +2008-01-01 15:13 hoffman + + * Modules/CMakeVCManifest.cmake, Modules/CMakeVCManifestExe.cmake, + Modules/Platform/Windows-cl.cmake, Source/cmMakefile.cxx, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/cmake.cxx, Source/cmake.h: ENH: add ability to have + manifest files and incremental linking with make and nmake + +2008-01-01 10:54 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Fix SimpleInstall test to + work with new dependency of package on all. + +2008-01-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-31 17:29 david.cole + + * Source/cmGlobalGenerator.cxx: ENH: Add a dependency from the + PACKAGE target to the ALL target so that "make package" will + first (essentially) do a "make all"... A similar chunk of code + already existed for the make install target. This change makes it + easy to build an installer package as part of a dashboard run + simply by setting CTEST_BUILD_TARGET to "package". + +2007-12-31 11:25 king + + * Source/: cmDependsFortran.cxx, cmDependsFortran.h: ENH: Changes + based on patch from Maik Beckmann to copy fortran modules to + timestamps only if they have really changed. This optimization + should reduce extra rebuilds caused by dependencies on modules + whose providers have recompiled but whose interfaces have not + changed. + +2007-12-31 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-30 16:34 king + + * Modules/Platform/SunOS-SunPro-Fortran.cmake: ENH: Add SunPro + fortran module flags on SunOS. + +2007-12-30 16:11 king + + * Modules/Platform/Linux-GNU-Fortran.cmake, + Modules/Platform/Linux-SunPro-Fortran.cmake, + Modules/Platform/Linux-ifort.cmake, Source/cmDependsFortran.cxx, + Source/cmDependsFortran.h, Source/cmDocumentVariables.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, Source/cmTarget.cxx, + Tests/Fortran/CMakeLists.txt, + Tests/Fortran/Executable/CMakeLists.txt, + Tests/Fortran/Library/CMakeLists.txt: ENH: Implemented Fortran + module output directory and search path flags. + +2007-12-30 12:23 king + + * Source/cmDependsFortran.cxx: ENH: Simplify Fortran module proxy + dependency implementation by removing unnecessary target. + +2007-12-30 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-29 11:53 alex + + * Source/cmDocumentation.cxx: BUG: create modules documentation not + only for the first documentation creation step in cmake (the set + ModulesFound wasn't cleared at the beginning of each + PrintDocumentation() function, so when documentation for modules + was executed the second time, ModulesFound already contained all + modules and so no module was documented) + + Alex + +2007-12-29 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-28 23:07 king + + * Source/cmLocalGenerator.cxx, Tests/ExternalOBJ/CMakeLists.txt, + Tests/MakeClean/ToClean/CMakeLists.txt: BUG: Do not remove the + source file extension when computing an object file name. This + addresses bug #6169. If CMAKE_BACKWARDS_COMPATIBILITY is 2.4 or + lower maintain the old behavior so that existing build trees and + old project releases are not affected. + +2007-12-28 23:07 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmStandardIncludes.h: ENH: Added method + cmLocalGenerator::GetBackwardsCompatibility to reduce parsing of + CMAKE_BACKWARDS_COMPATIBILITY variable. Add + cmLocalGenerator::NeedBackwardsCompatibility to simplify checks + for compatibility requirements. + +2007-12-28 22:53 king + + * Tests/Fortran/CMakeLists.txt: BUG: Disable test of fortran module + dependencies except on GNU for now. A module path feature is + needed for Sun support because it uses -M instead of -I for the + module search path. + +2007-12-28 22:29 king + + * Source/cmDependsFortran.cxx: COMP: Fix uninitialized variable and + unused parameter warnings. + +2007-12-28 14:59 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h: ENH: + Simplified and moved link script implementation up from + cmMakefileLibraryTargetGenerator to cmMakefileTargetGenerator and + use for cmMakefileExecutableTargetGenerator too. This addresses + bug #6192. + +2007-12-28 13:20 hoffman + + * CMakeLists.txt, ChangeLog.manual, MacInstallReadme.txt: ENH: add + some descriptive text for mac installer + +2007-12-28 12:01 king + + * Source/cmFindBase.cxx: ENH: Make FIND_* commands look in the + CMAKE_PREFIX_PATH directories directly after looking in each + command's specific subdirectory (/include, /lib, or /bin). This + may be useful on Windows where projects could be installed in a + single directory. See issue #4947. + +2007-12-28 11:50 king + + * Tests/Fortran/: CMakeLists.txt, Executable/CMakeLists.txt, + Executable/main.f90, External/CMakeLists.txt, External/a.f90: + ENH: Add tests of Fortran module dependencies across directories + and on external modules. Tests based on cases provided by Maik + in issue #5809. + +2007-12-28 11:50 king + + * Source/: cmDependsFortran.cxx, cmLocalUnixMakefileGenerator3.cxx: + ENH: Add per-language clean rule generation to cmake_clean.cmake + files to include cmake_clean_.cmake files generated by + dependency scanning. Add Fortran module file and timestamp + cleaning rules. + +2007-12-28 11:49 king + + * Source/: cmDepends.cxx, cmDepends.h, cmDependsFortran.cxx, + cmDependsFortran.h: ENH: Implement Fortran module dependencies + across targets and directories. - See issue #5809 - Keep + information about all sources in the target until deps are + written - Create a fortran.internal file after scanning that + lists modules provided - Load fortran.internal files from + linked targets to find modules - Search the include path for + external modules - Create file-level deps on in-project module + timestamps or external mods + +2007-12-28 11:49 king + + * Source/cmMakefileTargetGenerator.cxx: ENH: Store in + DependInfo.cmake files a list of the corresponding files for the + targets to which a target links. This is useful for locating + Fortran modules provided by linked targets. See issue #5809. + +2007-12-28 09:49 hoffman + + * ChangeLog.manual, Modules/CPack.Info.plist.in, + Modules/CPack.cmake: ENH: move over mac package change + +2007-12-28 09:34 hoffman + + * CMakeLists.txt, ChangeLog.manual: ENH: ooppss there is no 2.4.9 + +2007-12-28 09:11 hoffman + + * CMakeLists.txt, ChangeLog.manual: ENH: make a new version number + +2007-12-28 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-27 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-26 16:57 david.cole + + * CMakeCPackOptions.cmake.in, Modules/CPack.Info.plist.in, + Modules/CPack.cmake: ENH: Give Mac installers package relocation + capability. Default location is still the same for backwards + compatibility, but packages will now be relocatable by default + like they are on Windows via the NSIS installer. New CPack + variables for controlling this functionality are + CPACK_PACKAGE_DEFAULT_LOCATION and CPACK_PACKAGE_RELOCATABLE. + +2007-12-26 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-25 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-24 11:15 king + + * Source/cmGlobalGenerator.cxx: COMP: Fix build on VS6. + +2007-12-24 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-23 19:03 king + + * Source/cmLinkDirectoriesCommand.h: ENH: Clarify documentation of + link_directories command for bug#6199. + +2007-12-23 15:03 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmTarget.h: ENH: Moved global + inter-target dependency analysis and cycle-prevention code up + from cmGlobalUnixMakefileGenerator3 to cmGlobalGenerator. + Simplified cmGlobalUnixMakefileGenerator3 to use it. Later other + generators may be modified to use it also. + +2007-12-23 13:16 king + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Revert previous change + until it works on all OSX versions. + +2007-12-23 13:13 king + + * Source/cmGlobalVisualStudio71Generator.cxx: BUG: Disable static + lib deps until a global cycle removal can be done. + +2007-12-23 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-22 22:41 king + + * Source/: cmDepends.cxx, cmDepends.h, cmDependsFortran.cxx, + cmDependsFortran.h, cmLocalUnixMakefileGenerator3.cxx: ENH: + Convert cmDepends object interface to scan an entire target at + once. + +2007-12-22 14:17 king + + * Source/cmGlobalXCodeGenerator.cxx: ENH: Simplify target-level + dependencies by depending only on directly linked targets instead + of those chained. + +2007-12-22 13:08 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: BUG: Support cyclic + dependencies among STATIC libraries by removing one from the + generated Makefile rules. + +2007-12-22 10:15 miguelf + + * Modules/FindwxWidgets.cmake: STYLE: Refactored common libs into a + variable, modified comments, and cleaned use of monolithic build. + +2007-12-22 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-21 20:19 king + + * Tests/BuildDepends/CMakeLists.txt: BUG: Enable + CMAKE_SUPPRESS_REGENERATION because the entire test runs during + the inital configuration. + +2007-12-21 18:32 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: COMP: Remove unused parameter + of method. + +2007-12-21 16:46 ibanez + + * Source/kwsys/SystemTools.cxx: BUG: Fix bug#5590. When + converting a relative path between two full paths on different + windows drive letters do not create a ../../d:/foo/bar path + and just return the full path to the destination. + +2007-12-21 15:04 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio8Generator.h, + cmGlobalVisualStudioGenerator.cxx, + cmGlobalVisualStudioGenerator.h, cmGlobalXCodeGenerator.cxx: ENH: + Make static library targets depend on targets to which they + "link" for the purpose of build ordering. This makes the build + order consistent for static and shared library builds. It is + also useful when custom command inputs of one library are + generated as custom commands outputs of another. It may be + useful in the future for Fortran module dependencies. + Implemented for Makefiles, Xcode, and VS 8 and above. Added + sample code to do it for VS 7.1 and below, but left it disabled + with comments explaining why. Likely it will never be needed on + VS 7.1 or below anyway. + +2007-12-21 13:10 king + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: Now that custom + targets have dependencies their DependInfo files should be listed + in Makefile.cmake. + +2007-12-21 12:22 king + + * Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, + Source/cmMakefileUtilityTargetGenerator.cxx, Source/cmake.cxx, + Tests/BuildDepends/CMakeLists.txt, + Tests/BuildDepends/Project/CMakeLists.txt, + Tests/BuildDepends/Project/dep_custom.cxx, + Tests/BuildDepends/Project/zot.cxx: ENH: Add a depends check step + to custom targets. Add support for the IMPLICIT_DEPENDS feature + of custom commands when building in custom targets. Convert + multiple-output pair checks to be per-target instead of global. + +2007-12-21 11:00 king + + * Source/cmMakefileTargetGenerator.cxx: BUG: The dependency + scanning target should be symbolic. + +2007-12-21 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-20 20:59 ewing + + * Modules/: FindFreeType.cmake, FindGDAL.cmake, FindGIFLIB.cmake, + FindLua50.cmake, FindLua51.cmake, FindOpenAL.cmake, + FindOpenThreads.cmake, FindPhysFS.cmake, FindProducer.cmake, + FindQuickTime.cmake, FindSDL.cmake, FindSDL_image.cmake, + FindSDL_mixer.cmake, FindSDL_net.cmake, FindSDL_sound.cmake, + FindSDL_ttf.cmake, Findosg.cmake, FindosgDB.cmake, + FindosgFX.cmake, FindosgGA.cmake, FindosgIntrospection.cmake, + FindosgManipulator.cmake, FindosgParticle.cmake, + FindosgProducer.cmake, FindosgShadow.cmake, FindosgSim.cmake, + FindosgTerrain.cmake, FindosgText.cmake, FindosgUtil.cmake, + FindosgViewer.cmake: BUG: Fixed modules to set FOO_FOUND when + both headers and libraries are found. BUG: FindSDL now has flag + it responds to so it will not find/link against SDLmain. This is + required to build libraries instead of applications since they + don't have main(). ENH: All modules have a predictable search + order, where environmental variables are searched before system + paths. This is designed to make automation easier for those that + need to automatically build projects without intervention but may + be using alternative install locations for isolated testing. + ENH: New modules for OpenSceneGraph, Freetype, GDAL, Lua, + QuickTime, GIFLIB, Producer, OpenThreads. STYLE: Added + documentation explaining peculuar SDL_LIBRARY_TEMP variable in + SDL module when library find is incomplete. + +2007-12-20 17:49 alex + + * Source/: cmAuxSourceDirectoryCommand.h, cmBuildCommand.h, + cmCreateTestSourceList.h, cmExportCommand.h, + cmExportLibraryDependencies.h, cmOptionCommand.h, cmSetCommand.h: + STYLE: make formatting of help a bit more consistent + + Alex + +2007-12-20 10:05 martink + + * Source/cmFunctionCommand.cxx: BUG: fix issue with + CMAKE_CURENT_LIST_FILE reporting in funcitons + +2007-12-20 09:35 king + + * Source/cmSystemTools.h: COMP: Fixed error on HP due to newline + macro. + +2007-12-20 09:27 king + + * Source/cmLocalGenerator.cxx: COMP: Fixed data loss warning. + +2007-12-20 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-19 17:54 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fix make depend + target in subdirectory Makefile interface. + +2007-12-19 17:15 king + + * Source/: cmLocalGenerator.h, cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmMakefileTargetGenerator.cxx, + cmSystemTools.cxx, cmSystemTools.h, cmake.cxx: ENH: Enabled color + printing of "Scanning dependencies of target ..." message. + +2007-12-19 16:53 alex + + * Source/cmOptionCommand.h: ENH: options() is now scriptable, set() + is scriptable too, I don't see a big difference + + Alex + +2007-12-19 16:48 clinton + + * Modules/FindQt4.cmake: ENH: Better QT4_EXTRACT_OPTIONS macro. + +2007-12-19 16:46 alex + + * Source/cmMakefile.cxx: STYLE: nicer error message: "Command + options() is not scriptable" is IMO better to understand than + "Command options not scriptable" (with all uppercase commands it + was easier to see) + + Alex + +2007-12-19 16:36 king + + * Source/: cmDepends.cxx, cmDepends.h, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmMakefileTargetGenerator.cxx, + cmake.cxx: ENH: Moved dependency integrity check from + CheckBuildSystem over to a per-target UpdateDependencies step. + This greatly reduces the startup time for make processes and + allows individual targets to be built without a global dependency + check. + +2007-12-19 16:35 king + + * Source/cmDependsFortran.cxx: BUG: cmDependsFortran should store + the source file as a dependency of the object file when scanning + for dependencies. + +2007-12-19 14:28 king + + * Source/: cmDependsFortran.cxx, cmDependsFortran.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: Pass target directory to + cmDependsFortran scanning instances. + +2007-12-19 11:51 king + + * Source/cmake.cxx: ENH: Improved speed of cmake::CheckBuildSystem + when checking build system outputs versus dependencies. Instead + of doing an O(m*n) comparison of every pair, just locate the + oldest output and the newest input and compare them which is now + O(m+n). + +2007-12-19 11:06 king + + * Source/cmFindBase.cxx, Tests/FindPackageTest/CMakeLists.txt: ENH: + Renamed CMAKE_FIND_PREFIX_PATH to CMAKE_PREFIX_PATH for brevity + and consistency with other find path variable names. + +2007-12-19 10:43 hoffman + + * Source/: cmListCommand.cxx, cmListCommand.h: ENH: merge in list + find to support Findqt + +2007-12-19 10:34 king + + * Source/cmFindBase.cxx: ENH: Added CMAKE_SYSTEM_PREFIX_PATH + variable. + +2007-12-19 03:56 alex + + * Source/: cmInstallTargetGenerator.cxx, + cmInstallTargetGenerator.h, cmLocalGenerator.cxx, + cmLocalGenerator.h: + STYLE: fix warnings: comparison signed/unsigned, unused variable + + Alex + +2007-12-19 03:55 alex + + * Modules/CMakeFindBinUtils.cmake: + BUG: make CMAKE_USE_CHRPATH a simple variable instead an option, + since an option is not scriptable and so breaks the toolchain + test or maybe option() should be made scriptable ? + + Alex + +2007-12-19 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-18 17:50 alex + + * Modules/CMakeFindBinUtils.cmake, + Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, Source/cmTarget.cxx, + Source/cmTarget.h: ENH: add support for chrpath, so the RPATH in + ELF files can be changed when installing without having to link + the target again -> can save a lot of time + + chrpath is handled very similar to install_name_tool on the mac. + If the RPATH in the build tree file is to short, it is padded + using the separator character. This is currently disabled by + default, it can be enabled using the option CMAKE_USE_CHRPATH. + There are additional checks whether it is safe to enable it. I + will rework them and use FILE(READ) instead to detect whether the + binaries are actually ELF files. + + chrpath is available here + http://www.tux.org/pub/X-Windows/ftp.hungry.com/chrpath/ or kde + svn (since a few days): + http://websvn.kde.org/trunk/kdesupport/chrpath/ + + Alex + +2007-12-18 15:58 hoffman + + * Source/: cmGlobalVisualStudio9Generator.cxx, + cmGlobalVisualStudio9Generator.h, + cmGlobalVisualStudio9Win64Generator.cxx, + cmGlobalVisualStudio9Win64Generator.h: ENH: merge from main tree + +2007-12-18 15:02 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindPkgConfig.cmake, + Modules/Platform/Linux-ifort.cmake, Source/CMakeLists.txt, + Source/cmLocalVisualStudio7Generator.h, Source/cmake.cxx, + Utilities/cmtar/encode.c: ENH: merge in from main tree + +2007-12-18 14:50 clinton + + * Modules/FindQt4.cmake: ENH: should define QT_DLL instead of + QT_SHARED + +2007-12-18 13:05 clinton + + * Modules/FindQt4.cmake: ENH: Improve documentation of new + features. + +2007-12-18 10:02 hoffman + + * Modules/FindBoost.cmake: BUG: fix for bug 5464 better find boost + for windows + +2007-12-18 09:57 hoffman + + * Source/cmGetSourceFilePropertyCommand.cxx, + Tests/COnly/CMakeLists.txt: BUG: fix for bug 6172 add get source + file prop LANGUAGE + +2007-12-18 09:50 king + + * Source/cmGlobalXCodeGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio7Generator.cxx, + Tests/CustomCommand/CMakeLists.txt: ENH: Implemented generation + of display for pre-build, pre-link, and post-build custom command + comments during the build. This addresses issue #5353. + +2007-12-18 08:53 hoffman + + * Source/cmGlobalVisualStudio8Generator.cxx: STYLE: fix line len + +2007-12-18 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-17 21:37 hoffman + + * Modules/FindPkgConfig.cmake: BUG: fix for 5722 + +2007-12-17 19:48 king + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Remove stray debugging + message. + +2007-12-17 18:38 king + + * Source/cmLocalVisualStudioGenerator.cxx: BUG: When the working + directory for a custom command is on another drive letter we need + to change to that drive letter after changing its working + directory. Fixes issue #6150. + +2007-12-17 17:57 hoffman + + * Modules/TestForANSIForScope.cmake: STYLE: fix doc string + +2007-12-17 17:55 king + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y: + BUG: Fixed memory-leaks in fortran parser. + +2007-12-17 17:55 king + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y: + BUG: Fix parsing of #include preprocessor directives. + +2007-12-17 17:54 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: Fortran include + path is the same as C and CXX include paths. + +2007-12-17 17:50 hoffman + + * Utilities/cmtar/encode.c: BUG: fix for bug 5837, libtar and long + path names + +2007-12-17 17:40 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindPkgConfig.cmake, + Modules/FindQt3.cmake, Modules/FindQt4.cmake, + Modules/UseQt4.cmake, Source/cmDependsFortran.cxx, + Source/cmInstallCommand.cxx, Source/cmMakefile.cxx, + Source/cmake.cxx, Source/kwsys/SystemTools.cxx, + Source/kwsys/SystemTools.hxx.in, + Source/kwsys/SystemTools.hxx.in.bak: ENH: move changes from main + tree + +2007-12-17 17:28 hoffman + + * Source/cmGlobalVisualStudio8Generator.cxx: BUG: fix for bug 5931 + add some more flags for the gui + +2007-12-17 17:22 hoffman + + * Modules/FindJNI.cmake: BUG: fix for 5933, look for java in more + reg entries + +2007-12-17 17:05 alex + + * Modules/CTest.cmake: STYLE: use IF(NOT ) instead of IF() ELSE() + with empty IF() branch + + Alex + +2007-12-17 16:15 alex + + * Docs/cmake-syntax.vim: STYLE: apply patch from #6166, better + cmake syntax highlighting in vim, seems to fix the issues + mentioned in the bug report and the rest also still seems to be + ok + + Alex + +2007-12-17 15:27 hoffman + + * Source/CPack/cmCPackPackageMakerGenerator.cxx: ENH: try to fix + dashboard + +2007-12-17 15:20 king + + * Source/cmInstallCommand.cxx: BUG: Apply patch from issue #6006. + +2007-12-17 14:43 hoffman + + * Source/: CMakeLists.txt, cmGlobalVisualStudio9Win64Generator.cxx, + cmGlobalVisualStudio9Win64Generator.h, cmake.cxx: ENH: add + support for vs 9 win64 + +2007-12-17 12:04 hoffman + + * Modules/: CMakeCInformation.cmake, CMakeCXXInformation.cmake, + CMakeFortranInformation.cmake: BUG: fix for bug 6167 get rid of + extra space in flags + +2007-12-17 10:12 king + + * Source/cmTarget.cxx, Tests/Properties/CMakeLists.txt: ENH: Added + SOURCES property to targets. This is based on patch from issues + #6137. + +2007-12-17 10:12 king + + * Source/: cmSourceFile.cxx, cmSourceFile.h: ENH: Added + cmSourceFile::GetLocation method to get a read-only reference to + the Location ivar. This partially addresses issue #6137. + +2007-12-17 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-16 07:56 alex + + * Source/cmStringCommand.cxx: BUG: fix STRING(STRIP ...) if no + non-space is contained in the input string, this should fix the + dashboard + + Alex + +2007-12-16 05:49 alex + + * Modules/FindQt4.cmake: STYLE: some whitespace syncing with + FindQt4.cmake in KDE svn + + Alex + +2007-12-16 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-15 16:03 king + + * Modules/CMakeDetermineCompilerId.cmake: BUG: Need to strip + leading and trailing whitespace off the compiler 'ARG1'. This + fixes bug#6141. + +2007-12-15 15:36 king + + * Tests/Fortran/: CMakeLists.txt, Library/CMakeLists.txt, + Library/a.f90, Library/b.f90, Library/main.f90: ENH: Added test + for Fortran90 modules in subdirectories. + +2007-12-15 15:35 king + + * Source/cmDependsFortran.cxx: ENH: Make module timestamps work for + modules in subdirectories. Make sure timestamps for all modules + provided by a target are created when the target is done + building. + +2007-12-15 14:16 king + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: STYLE: + Removed trailing whitespace. + +2007-12-15 14:14 king + + * Source/cmFindBase.cxx: STYLE: Fixed terminology to avoid + confusion between roots and prefixes. + +2007-12-15 14:13 king + + * Source/cmake.cxx: STYLE: Fixed line-too-long. + +2007-12-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-14 20:46 hoffman + + * Source/: cmFindLibraryCommand.cxx, cmFindPathCommand.cxx: BUG: + fix for bug 6039 LIB and INCLUDE not used for find stuff + +2007-12-14 20:31 hoffman + + * Source/: cmDependsC.cxx, cmDependsFortran.cxx, cmMakeDepend.cxx, + kwsys/SystemTools.cxx, kwsys/SystemTools.hxx.in: BUG: fix for bug + 6136 make sure includes are not directories + +2007-12-14 16:56 clinton + + * Modules/FindQt4.cmake: ENH: Add OPTIONS argument to some Qt4 + macros. Addresses #6125. + +2007-12-14 15:50 hoffman + + * Source/cmListCommand.h: BUG: fix bug 6081 + +2007-12-14 14:58 hoffman + + * Source/CPack/cmCPackNSISGenerator.cxx: BUG: fix for 6086 + uninstall icon not set right + +2007-12-14 12:51 hoffman + + * Modules/FindPkgConfig.cmake: BUG: fix for 6117, fix for second + run + +2007-12-14 12:49 hoffman + + * Source/cmCreateTestSourceList.h: STYLE: line length + +2007-12-14 11:00 hoffman + + * Utilities/cmcurl/curl/mprintf.h: BUG: fix for bug 6054 remove + some warnings + +2007-12-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-13 18:30 king + + * Source/cmake.cxx: COMP: Add missing return value from Bill's + change. + +2007-12-13 17:56 king + + * Source/: cmCTest.cxx, cmCTest.h, cmDumpDocumentation.cxx, + cmSystemTools.cxx, cmSystemTools.h, cmake.cxx, cmake.h, + cmakemain.cxx, ctest.cxx, CPack/cpack.cxx, + CTest/cmCTestScriptHandler.cxx, CursesDialog/ccmake.cxx, + QtDialog/CMakeSetup.cxx: ENH: Centralized and globalized + computation of CMake program locations. This eliminates startup + paths that failed to produce this information. + +2007-12-13 17:39 king + + * Source/cmake.cxx: BUG: Fixed typo introduced by previous commit. + +2007-12-13 15:54 hoffman + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmMakefileTargetGenerator.cxx, cmake.cxx, cmake.h: ENH: fix for + bug 6102, allow users to change the compiler + +2007-12-13 15:42 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: STYLE: fix indent + +2007-12-13 15:41 hoffman + + * Source/cmCreateTestSourceList.h: ENH: fix docs + +2007-12-13 15:11 hoffman + + * Source/cmakemain.cxx: ENH: fix docs + +2007-12-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-12 13:25 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: BUG: Fix logic to accept + drop events. + +2007-12-12 07:26 hoffman + + * Modules/FindPerlLibs.cmake: BUG: Fix bug 6106 FindPerlLibs.cmake + missing escaped $ + +2007-12-12 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-11 22:28 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindJNI.cmake, + Modules/FindPerlLibs.cmake, + Modules/InstallRequiredSystemLibraries.cmake, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmTryCompileCommand.cxx: ENH: changes for RC5 + +2007-12-11 12:57 clinton + + * Modules/FindQt4.cmake: ENH: Correctly find UiTools library on + Mac w/ binary install of Qt. Fixes #4554. + +2007-12-11 11:36 king + + * Source/kwsys/: CMakeLists.txt, String.c, String.h.in: ENH: Added + C String utilities to KWSys. Implemented strcasecmp and + strncasecmp. + +2007-12-11 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-10 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-09 19:58 hoffman + + * Source/cmLocalVisualStudio7Generator.h: STYLE: fix line len error + +2007-12-09 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-08 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-07 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-06 22:38 hoffman + + * Tests/COnly/CMakeLists.txt: ENH: change to libs that are not real + +2007-12-06 16:43 pppebay + + * Source/kwsys/SystemTools.cxx: BUG: fixed an incomplete regexp + +2007-12-06 14:07 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: BUG: Prevent mapping of + Configure to Preferences when Qt merges menu items with the + standard Mac OS X application menu. + +2007-12-06 09:56 hoffman + + * Source/cmCoreTryCompile.cxx: ENH: for try compile do not put the + rules to rebuild the project with cmake inside it. This has + caused infinite loops of builds in some cases, and it is just a + waste of time anyway. + +2007-12-06 08:40 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Tests/COnly/CMakeLists.txt: BUG: fix for bug 5455, handle + nodefaultlib with more than one lib + +2007-12-06 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-05 13:13 king + + * Source/kwsys/SystemTools.cxx: COMP: Remove reference to vtksys. + The unmangled kwsys name should be used in this source. + +2007-12-05 12:24 pppebay + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: added + two functions for URL parsing: 1. an "abridged" version that + separates protocol from dataglom in an expression with + the form protocol://dataglom 2. a "full" version that parses + protocol, username, password, hostname, port, and path in + a standard URL (all of these variables are optional, + except for protocol and hostname). + +2007-12-05 10:40 hoffman + + * CMakeLists.txt: ENH: move up to rc 4 + +2007-12-05 10:40 hoffman + + * ChangeLog.manual, Modules/NSIS.template.in: ENH: move fix for + nsis to branch + +2007-12-05 09:17 hoffman + + * Source/cmDependsFortran.cxx: STYLE: fix line len + +2007-12-05 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-04 17:14 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmCTest.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmTarget.cxx: + ENH: merge in fixes from main tree + +2007-12-04 17:00 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: remove warning + +2007-12-04 16:09 hoffman + + * Source/cmDependsFortran.cxx: ENH: do not depend on touch being on + the system + +2007-12-04 16:03 hoffman + + * Source/: cmake.cxx, kwsys/SystemTools.cxx, + kwsys/SystemTools.hxx.in: ENH: add a touch -E command to cmake + +2007-12-04 10:43 martink + + * Source/: cmFunctionCommand.cxx, cmFunctionCommand.h: COMP: fix + style and work around old compilers + +2007-12-04 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-03 20:44 hoffman + + * DartLocal.conf.in: ENH: remove superior dean i, no longer uses + borland + +2007-12-03 13:35 martink + + * Source/cmBootstrapCommands.cxx, Source/cmCommands.cxx, + Source/cmMakefile.cxx, Source/cmMakefile.h, Source/cmake.cxx, + Tests/CMakeLists.txt: ENH: add functions and raise scope + +2007-12-03 12:47 martink + + * Source/: cmEndFunctionCommand.cxx, cmEndFunctionCommand.h: ENH: + add functions + +2007-12-03 12:43 martink + + * Source/cmFunctionCommand.cxx, Source/cmFunctionCommand.h, + Source/cmRaiseScopeCommand.cxx, Source/cmRaiseScopeCommand.h, + Tests/FunctionTest/CMakeLists.txt, + Tests/FunctionTest/functionTest.c: ENH: add functions and raise + scope to cmake + +2007-12-03 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-02 11:51 hoffman + + * DartLocal.conf.in: ENH: fix up some stuff + +2007-12-02 09:15 miguelf + + * Modules/FindwxWidgets.cmake: STYLE: Clarified usage documentation + for cmake --help-module FindwxWidgets. + +2007-12-02 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-12-01 22:51 miguelf + + * Modules/FindwxWidgets.cmake: STYLE: Use LIST(APPEND ...) instead + of SET(...) + +2007-12-01 20:58 miguelf + + * Modules/FindwxWidgets.cmake: ENH: Added search entry for the new + release: wxWidgets-2.8.7. + +2007-12-01 20:35 miguelf + + * Modules/FindwxWidgets.cmake: ENH: Added support for selecting + different configurations in UNIX_STYLE: debug/release, + static/shared, unicode/ansi, and regular/universal. + +2007-12-01 19:30 miguelf + + * Modules/FindwxWidgets.cmake: ENH: Added macro support for + compiling xrc resources to cpp code. + +2007-12-01 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-30 19:11 clinton + + * Modules/UseQt4.cmake: ENH: Define QT_NO_DEBUG when building with + release Qt libs. Fixes #6104. + +2007-11-30 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-29 10:23 martink + + * Source/cmDocumentation.cxx: BUG: fix single module generation + +2007-11-29 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-28 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-27 15:59 hoffman + + * Source/cmDocumentationFormatterHTML.cxx: ENH: better output for + qt assistant + +2007-11-27 01:04 clinton + + * Source/QtDialog/CMakeSetup.cxx: ENH: Add handling of --help and + related arguments. + +2007-11-27 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-26 17:57 alex + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: STYLE: + restructure OutputLinkLibraries() a bit, so that new there is a + function which returns the RPATH, so e.g. the install rpath can + be queried when the command for the build rpath is created. This + is a first step for supporting chrpath. + + Alex + +2007-11-26 13:21 barre + + * CMakeLogo.gif: ENH: fancier logo + +2007-11-26 10:01 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fixed computation + of 'object' name for MACOSX_PACKAGE_LOCATION source files. + +2007-11-26 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-25 17:11 hoffman + + * Tests/CMakeLists.txt: BUG: try to fix configure error on + dashboard + +2007-11-25 08:20 alex + + * Modules/FindEXPAT.cmake: BUG: use the correct variable for + checking the success (#6062) + + Alex + +2007-11-25 07:45 alex + + * Source/: cmExtraCodeBlocksGenerator.cxx, + cmExtraCodeBlocksGenerator.h: STYLE: move the code for generating + the XML for one target in a separate function AppendTarget() -add + "all" target -some syncing with the Eclipse generator + + Alex + +2007-11-25 07:40 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: ENH: add the "clean" + target don't add *all existing* targets as Eclipse targets, but + only a subset (the same as for CodeBlocks), e.g. exclude the + subtargets of Experimental, and also edit_cache, ccmake doesn't + work from within an IDE + + Alex + +2007-11-25 07:34 alex + + * Source/: cmGlobalGenerator.h, cmGlobalUnixMakefileGenerator3.h: + ENH: add GetCleanTargetName() which returns "clean" for + makefiles, so it can be used by the eclipse generator + + Alex + +2007-11-25 06:21 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: ENH: also add the + experimental, nightly, package_source, preinstall and + rebuild_cache targets + + Alex + +2007-11-25 05:26 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: STYLE: add some comments + + Alex + +2007-11-25 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-24 03:51 alex + + * Source/: cmQTWrapCPPCommand.h, cmQTWrapUICommand.h: STYLE: QT -> + Qt in the docs + + Alex + +2007-11-24 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-23 20:45 alex + + * CMakeLists.txt, Modules/Platform/syllable.cmake, + Source/kwsys/SystemTools.cxx, Source/kwsys/testDynamicLoader.cxx, + Tests/CMakeLists.txt, Utilities/cmtar/CMakeLists.txt: ENH: add + support for the Syllable OS (http://www.syllable.org) major + issues: -access() doesn't return false for an empty string + (#ifdefed in cmake) -dlopen() doesn't return 0 on failure + (#ifdefed in cmake and fixed now in Syllable) -the kwsys and + Bootstrap tests fail with timeout due to the fact that I'm doing + all that in qemu, which is quite slow -RPATH is now supported, so + without modifying the test adapting DLL_PATH in Syllable is + required for the tests to succeed -the Plugin test fails with an + undefined reference to example_exe_function() in example_mod_1, + it seems this isn't supported under Syllable + + Alex + +2007-11-23 14:53 king + + * Source/cmMakefileTargetGenerator.cxx: STYLE: Fixed line-too-long. + +2007-11-23 11:30 alex + + * Source/cmQTWrapCPPCommand.cxx: STYLE: QT is quicktime, Qt is Qt, + as pointed out by David Faure + + Alex + +2007-11-23 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-22 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-21 17:09 david.cole + + * DartLocal.conf.in: STYLE: Updated and alphabetized expected + builds list. Many new Mac Leopard entries from Rogue -- thanks + guys! + +2007-11-21 15:33 david.cole + + * Templates/CMakeLists.txt: BUG: Install the vsmacros file. + +2007-11-21 13:37 king + + * Source/cmMakefileTargetGenerator.cxx: ENH: Change compiler + working directory to the local build tree location when compiling + object files. This simplifies the compiler command line and the + usage of the .s and .i targets. It also helps + fortran compilers put their modules in the correct place. + +2007-11-21 12:55 king + + * CMakeLists.txt: BUG: Fixed construction of CMake_VERSION_DATE to + use KWSys DateStamp feature now that cmVersion.cxx is not updated + nightly anymore. + +2007-11-21 10:07 king + + * Source/cmCTest.cxx: BUG: Do not require a nightly start time for + an experimental or continuous test model. + +2007-11-21 08:59 king + + * Source/cmTarget.cxx: BUG: For imported target directory, do not + return pointer to freed memory. + +2007-11-21 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-20 11:18 king + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: Need to honor + HEADER_FILE_ONLY source file property and exclude the source from + the build. + +2007-11-20 11:10 king + + * Source/: cmCallVisualStudioMacro.cxx, cmGlobalGenerator.cxx, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio9Generator.cxx, + cmGlobalVisualStudioGenerator.cxx: STYLE: Fixed line-too-long. + COMP: Fixed warnings about lossy conversions. + +2007-11-20 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-19 14:27 king + + * Tests/: Complex/Executable/CMakeLists.txt, + Complex/Executable/complex_nobuild.cxx, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex_nobuild.cxx, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex_nobuild.cxx: ENH: Adding + test for using HEADER_FILE_ONLY to avoid building a .cxx file. + +2007-11-19 14:27 king + + * Source/cmSourceFile.cxx: BUG: Do not force HEADER_FILE_ONLY off + if the user has already set it on. + +2007-11-19 14:22 king + + * Source/cmake.cxx: COMP: Do not build VS-specific code when + generators are not included. + +2007-11-19 14:08 clinton + + * Source/QtDialog/CMakeLists.txt: ENH: Add install command for + executable. + +2007-11-19 13:45 king + + * Source/: cmake.cxx, cmake.h: ENH: Added call to StopBuild VS + macro when projects fail to regenerate during a build. + +2007-11-19 13:44 king + + * Source/: cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudioGenerator.cxx, + cmGlobalVisualStudioGenerator.h: ENH: Renamed + cmGlobalVisualStudioGenerator::CallVisualStudioReloadMacro method + to CallVisualStudioMacro and added arguments to select which + macro to call and optionally pass the solution file name. Added + option to call to new StopBuild macro. Updated logic for + replacing the macro file in user directories when the distributed + version is newer. + +2007-11-19 13:44 king + + * Templates/CMakeVSMacros1.vsmacros: ENH: Added StopBuild macro. + +2007-11-19 13:42 king + + * Source/cmakemain.cxx: BUG: Always return positive integers to the + OS on error. Windows error encoding is confused by negative + return values. + +2007-11-19 13:42 king + + * Source/cmListFileCache.cxx: BUG: ParseFile should return false if + there was a parse error. + +2007-11-19 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-18 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-17 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-16 21:18 clinton + + * Source/QtDialog/AddCacheEntry.cxx: ENH: Remove debug printf + +2007-11-16 13:54 david.cole + + * Source/cmGlobalVisualStudioGenerator.cxx: ENH: Add more + conditions for attempting to call the new Visual Studio macros. + Only try to call them if the vsmacros file exists and is + registered. Count VS instances again after warning about running + instances. If user closed them in response to the warning, it's + OK to register the macros now rather than waiting till the next + CMake generate. + +2007-11-16 11:32 hoffman + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: add support for + CDash bullseye coverage + +2007-11-16 11:01 king + + * Source/: cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio8Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: Fix exception handling + flag translation to be specific to each VS version. This allows + /EHa to be handled correctly for VS 2003. + +2007-11-16 10:40 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: ENH: more robust search + filter. + +2007-11-16 07:01 david.cole + + * Source/CMakeLists.txt, Source/cmCallVisualStudioMacro.cxx, + Source/cmCallVisualStudioMacro.h, + Source/cmGeneratedFileStream.cxx, Source/cmGeneratedFileStream.h, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmGlobalVisualStudio9Generator.cxx, + Source/cmGlobalVisualStudio9Generator.h, + Source/cmGlobalVisualStudioGenerator.cxx, + Source/cmGlobalVisualStudioGenerator.h, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmake.cxx, + Source/kwsys/SystemTools.cxx, Templates/CMakeVSMacros1.vsmacros: + ENH: Add ability to call Visual Studio macros from CMake. Add a + CMake Visual Studio macro to reload a solution file automatically + if CMake makes changes to .sln files or .vcproj files. Add code + to call the macro automatically for any running Visual Studio + instances with the .sln file open at the end of the Visual Studio + Generate call. Only call the macro if some .sln or .vcproj file + changed during Generate. Also, add handling for REG_EXPAND_SZ + type to SystemTools::ReadRegistryValue - returned string has + environment variable references expanded. + +2007-11-16 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-15 13:14 hoffman + + * Modules/Platform/Darwin.cmake: ENH: add support for env var and + better default for CMAKE_OSX_SYSROOT + +2007-11-15 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: STYLE: Nightly Date Stamp + +2007-11-14 23:30 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: COMP: Fix warning. + +2007-11-14 21:17 king + + * bootstrap, Source/cmVersion.cxx: ENH: Simplified CMake version + information using KWSys DateStamp feature. Reduced duplicate + code in bootstrap script. + +2007-11-14 18:08 clinton + + * Modules/FindQt4.cmake: ENH: Fix case of windows library names to + support cross compiling w/ Qt on case sensitive platforms. + +2007-11-14 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: daily version number + +2007-11-13 23:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-13 16:25 alex + + * Source/QtDialog/CMakeSetupDialog.cxx: ENH: add completer for the + source and binary dir lineedits + + Clinton: do I actually have to create separate models for each + completer, and a separate completer for each widget, or could the + models/completers be used for multiple widgets ? + + Alex + +2007-11-13 12:53 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: ENH: single click can start + editing cache values. + +2007-11-13 11:21 martink + + * Tests/Tutorial/Step6/CMakeLists.txt: ENH: switch to new install + commands to match book text + +2007-11-13 11:18 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: BUG: The search is set to + apply to all columns, but in Qt 4.2, that breaks the search + entirely. Search on the first column only when using Qt 4.2. + +2007-11-13 11:11 martink + + * Tests/Tutorial/: Step3/CMakeLists.txt, + Step3/MathFunctions/CMakeLists.txt, Step4/CMakeLists.txt, + Step4/MathFunctions/CMakeLists.txt, Step5/CMakeLists.txt, + Step5/MathFunctions/CMakeLists.txt, Step6/CMakeLists.txt, + Step6/MathFunctions/CMakeLists.txt, Step7/CMakeLists.txt, + Step7/MathFunctions/CMakeLists.txt: ENH: switch to new install + commands to match book text + +2007-11-13 00:33 clinton + + * Source/QtDialog/: CMakeSetup.cxx, CMakeSetupDialog.cxx: ENH: + support specifying build or source directory at command line. + +2007-11-13 00:17 clinton + + * Source/QtDialog/: QCMakeCacheView.cxx, QCMakeCacheView.h: ENH: + Allow clicking anywhere in field to toggle check boxes. + +2007-11-13 00:01 king + + * Source/kwsys/kwsysDateStamp.cmake: daily version number + +2007-11-12 23:59 clinton + + * Source/QtDialog/: AddCacheEntry.cxx, AddCacheEntry.h: STYLE: add + license. + +2007-11-12 23:54 clinton + + * Source/QtDialog/: AddCacheEntry.cxx, AddCacheEntry.h, + AddCacheEntry.ui, CMakeLists.txt, CMakeSetup.qrc, + CMakeSetupDialog.cxx, CMakeSetupDialog.h, CMakeSetupDialog.ui, + Plus16.png, QCMake.cxx, QCMakeCacheView.cxx, QCMakeCacheView.h: + ENH: Add ability to add cache entries (even before first + configure). + +2007-11-12 23:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-12 22:36 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: add f stuff to avoid warnings + +2007-11-12 22:33 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: ENH: add + guess progress for first time configuring a project. + +2007-11-12 18:22 king + + * Source/kwsys/kwsysDateStamp.cmake: daily version number + +2007-11-12 18:22 king + + * Source/kwsys/: DateStamp.h.in, kwsysDateStamp.py: ENH: Created + better names and a more convenient set of version date stamp + macros. + +2007-11-12 18:06 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.ui: ENH: + Fix layout with Qt 4.2. BUG: Fix help comments to match what + this GUI does. + +2007-11-12 17:51 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: BUG: Fix prompt for + changes if they haven't been saved. + +2007-11-12 17:41 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + CMakeSetupDialog.ui: + BUG: Fix pause at shutdown. ENH: Remove interrupt button and + make configure/generate turn to stop during runs. ENH: Add text + to remove cache entry button. + +2007-11-12 17:38 king + + * Source/kwsys/CMakeLists.txt: BUG: Fixed typo in previous commit. + +2007-11-12 17:34 king + + * Source/kwsys/: CMakeLists.txt, DateStamp.h.in, + kwsysDateStamp.cmake, kwsysDateStamp.py: ENH: Adding DateStamp + feature to KWSys. This provides a header file giving + preprocessor access to a dated version. The 'datestamp' will be + updated automatically every day by a script. + +2007-11-12 16:58 king + + * Source/cmake.cxx: BUG: Fix messages for time stamp file + recreation. + +2007-11-12 15:42 king + + * Source/: cmGlobalVisualStudio8Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: BUG: Converted per-vcproj + timestamp to a single directory-level CMakeFiles/generate.stamp + file shared by all targets in each directory. This avoids having + all targets overwrite each others timestamp check rules and + instead has one single rule. + +2007-11-12 13:54 clinton + + * Source/QtDialog/: CMakeLists.txt, CMakeSetupDialog.ui: ENH: + Allow build with Qt 4.2. + + 4.3 dependence fell out when errors go to output + window instead of message box blocking cmake thread. + +2007-11-12 13:52 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Fix to support arch and + isysroot compilation options on MAC (Bug 5007). + +2007-11-12 12:04 martink + + * Source/cmCPluginAPI.cxx: BUG: better setup of properties for + loaded commands + +2007-11-11 23:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-10 23:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-10 17:31 king + + * Tests/Wrapping/: CMakeLists.txt, fakefluid.cxx: BUG: Fixed fake + generation of files to behave more like fluid. + +2007-11-10 11:36 clinton + + * Source/QtDialog/: CMakeSetup.qrc, CMakeSetupDialog.cxx, + CMakeSetupDialog.h, CMakeSetupDialog.ui, Delete16.png, + QCMakeCacheView.cxx, QCMakeCacheView.h: + ENH: Re-arrange UI a bit. BUG: Properly update when values + that changed since the last configure. + +2007-11-10 08:15 king + + * Source/: cmGlobalVisualStudio8Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmake.cxx, cmake.h: ENH: Allow + VS 7 project Rebuild and Solution Rebuild to work without + re-running CMake for every project during the rebuild. + +2007-11-10 08:14 king + + * Source/cmDocumentVariables.cxx: STYLE: Fixed line-too-long for + undocumented variable entries. + +2007-11-10 06:54 david.cole + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Need extra regex to parse + sw_vers output on Mac OSX 10.2 (and presumably earlier) to avoid + running PackageMaker during the SimpleInstall* tests. See comment + in CMake/Tests/SimpleInstall/CMakeLists.txt for more info. + +2007-11-09 23:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-09 15:18 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + QCMake.cxx, QCMake.h, QCMakeCacheView.cxx, QCMakeCacheView.h: + BUG: Don't prompt for unsaved changes if no changes were made. + ENH: Error messages go to output window instead of message + boxes. + +2007-11-09 15:08 king + + * Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Templates/CMakeWindowsSystemConfig.cmake: ENH: Removed dependency + on Templates/CMakeWindowsSystemConfig.cmake which is no longer + used. Also removed the file itself. + +2007-11-09 12:18 hoffman + + * Modules/InstallRequiredSystemLibraries.cmake: ENH: change name + +2007-11-09 12:05 king + + * Source/: cmGlobalVisualStudio8Generator.cxx, + cmLocalVisualStudio7Generator.cxx: ENH: Converted vcproj file + generation to use cmGeneratedFileStream for atomic replacement. + Replaced the vcproj.cmake copy of the file with a simple + vcproj.stamp timestamp file to preserve previous + rerun-without-reload behavior. + +2007-11-09 01:14 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: ENH: Add completion to + editor for files and file paths. + +2007-11-08 23:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-08 20:37 hoffman + + * Modules/InstallRequiredSystemLibraries.cmake: ENH: add ability to + use your own install directories + +2007-11-08 16:47 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, QCMake.cxx: BUG: Don't + enable generate if configure completed with errors. ENH: Allow + build w/ Qt configured with no STL support. + +2007-11-08 15:54 david.cole + + * Source/QtDialog/CMakeSetup.ico, Utilities/Release/CMakeLogo.ico: + ENH: Put black outline around all resolutions of the new ico + files. Looks better on a dark background than the lighter + outline... + +2007-11-08 14:31 hoffman + + * Modules/Platform/Darwin.cmake: ENH: fix bug in default arch, it + was using the environment variable which is not a default + +2007-11-08 13:03 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: BUG: try to fix crash + +2007-11-08 12:27 clinton + + * Modules/FindQt4.cmake: BUG: handle qmake returning multiple + paths for mkspecs. Fixes #5935 + +2007-11-08 10:56 clinton + + * Modules/FindQt4.cmake: ENH: Add support for static Qt 4.3 + builds. + +2007-11-08 10:38 david.cole + + * Tests/: CMakeLists.txt, Tutorial/Step6/CMakeLists.txt, + Tutorial/Step6/License.txt, Tutorial/Step6/TutorialConfig.h.in, + Tutorial/Step6/tutorial.cxx, + Tutorial/Step6/MathFunctions/CMakeLists.txt, + Tutorial/Step6/MathFunctions/MakeTable.cxx, + Tutorial/Step6/MathFunctions/MathFunctions.h, + Tutorial/Step6/MathFunctions/mysqrt.cxx, + Tutorial/Step7/CMakeLists.txt, Tutorial/Step7/CTestConfig.cmake, + Tutorial/Step7/License.txt, Tutorial/Step7/TutorialConfig.h.in, + Tutorial/Step7/build1.cmake, Tutorial/Step7/build2.cmake, + Tutorial/Step7/tutorial.cxx, + Tutorial/Step7/MathFunctions/CMakeLists.txt, + Tutorial/Step7/MathFunctions/MakeTable.cxx, + Tutorial/Step7/MathFunctions/MathFunctions.h, + Tutorial/Step7/MathFunctions/mysqrt.cxx: ENH: Add new Tutorial + steps. Diff between Step5 and Step6 shows how to add a cpack + driven installer to your project. Diff between Step6 and Step7 + shows how to add ctest dashboard scripting capability. + +2007-11-08 10:22 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: COMP: Fix warnings. + +2007-11-08 10:17 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.ui, + QCMake.cxx, QCMakeCacheView.cxx, QCMakeCacheView.h: + ENH: add context menu for deleting, ignoring, and getting help + for cache entries. ENH: add delete cache button ENH: add + information string above configure/generate buttons ENH: change + search to search both columns, and from regex to plain string + search ENH: add buddy info in cache entry view, so double + clicking in the left column starts editing the associated + value. BUG: fix file path editor so it goes away when focus is + lost + +2007-11-08 09:09 david.cole + + * Modules/Platform/Darwin.cmake: BUG: Do not us the + search_paths_first flag on older Mac OSX (10.2 and earlier) + systems. + +2007-11-07 23:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-07 17:43 hoffman + + * Utilities/Release/vogon_release.cmake: ENH: add mt to vogon + release + +2007-11-07 14:35 hoffman + + * Utilities/cmcurl/CMakeLists.txt: ENH: remove memdebug.c from list + +2007-11-07 13:11 hoffman + + * CMakeCPack.cmake, CMakeCPackOptions.cmake.in, + Source/CPack/cmCPackNSISGenerator.cxx: ENH: change + CPACK_CREATE_DESKTOP_LINKS to something that can handle spaces in + the name of the exectuable + +2007-11-07 11:31 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + CMakeSetupDialog.ui: + ENH: remove status bar and move interrupt/progress next to + configure/generate. + +2007-11-07 10:09 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + CMakeSetupDialog.ui, QCMakeCacheView.cxx, QCMakeCacheView.h: + BUG: Fix behavior of + CMakeSetupDialog::set{Binary|Source}Directory so they work + right when called externally. Disable the generate button + when one hits configure again. ENH: Some UI tweaks for spacing. + Allow viewing cache values while configure/generate (but + not edit). + +2007-11-07 09:12 king + + * Source/CTest/cmCTestSubmitHandler.cxx: COMP: Fix check for + file-too-big to avoid warnings. + +2007-11-07 08:59 king + + * Source/kwsys/SystemTools.cxx: COMP: Fix warning when gcount + stream method does not really return std::streamsize. + +2007-11-06 23:00 clinton + + * Source/QtDialog/: CMakeLists.txt, CMakeSetup.icns, QCMake.cxx: + ENH: For Mac OSX -- add app icon, and implement find of cmake + executable. + +2007-11-06 22:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-06 22:27 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: BUG: disable drag & drop + while busy. + +2007-11-06 21:51 clinton + + * Source/QtDialog/CMakeSetupDialog.cxx: BUG: only handle drop + events if they'll really change something. + +2007-11-06 21:27 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h: + BUG: Put back read/write of original WhereBuild* settings. ENH: + Make public a couple functions to support command line args. + Try removing exit after generate to see if others like it. + COMP: Fix warnings. + +2007-11-06 19:25 clinton + + * Source/QtDialog/: CMakeSetup.cxx, CMakeSetupDialog.cxx, + CMakeSetupDialog.h, CMakeSetupDialog.ui, QCMake.cxx, + QCMakeCacheView.cxx, QCMakeCacheView.h: + ENH: Disable menu/buttons when doing configure. Also + disable generate until configure is done. Save more + settings (last 10 binary directories, exit after generate, + last generator) Some UI tweaks for + better layout. Support drag & drop of + CMakeLists.txt/CMakeCache.txt files. + +2007-11-06 14:16 martink + + * Source/: cmDocumentVariables.cxx, cmMakefile.cxx, + cmPropertyMap.cxx, cmake.cxx, cmake.h: ENH: different way of + testing properties + +2007-11-06 14:14 martink + + * CMakeLists.txt, Source/CMakeLists.txt: ENH: move CMAKE_STRICT + option to the top + +2007-11-06 14:11 martink + + * Tests/CMakeLists.txt: ENH: add doc test for strict builds + +2007-11-06 14:10 martink + + * Tests/DocTest/: CMakeLists.txt, DocTest.cxx: ENH: add a etst to + verify props are documented + +2007-11-06 08:28 hoffman + + * Source/CPack/: cmCPackGenerator.cxx, cmCPackGenerator.h, + cpack.cxx: ENH: changne ProcessGenertor to DoPackage + +2007-11-06 08:27 hoffman + + * Source/CPack/cmCPackDebGenerator.cxx: STYLE: fix line length + issue + +2007-11-06 01:16 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + CMakeSetupDialog.ui, QCMake.cxx, QCMake.h: ENH: Add menus in + menu bar. Add reload & delete cache options. Add + option to quit after generation step (not yet remembered between + sessions). Add Help -> About Remove Help button (in + menu now) Remove Cancel button (File -> Exit and the + Window 'X' button exist) + +2007-11-06 00:04 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.ui: ENH: + clarify label for current generator. + +2007-11-06 00:02 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + CMakeSetupDialog.ui, QCMakeCacheView.cxx: ENH: search is case + insensitive ENH: put back prompt for generator, and change combo + to label showing current generator. + +2007-11-05 22:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-05 19:26 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + CMakeSetupDialog.ui, QCMakeCacheView.cxx, QCMakeCacheView.h: + ENH: Replace prompt for generator with combobox in UI. ENH: + Make "Show Advanced" toggle work. ENH: Add regex search + capabilities. ENH: Read existing registry entries from MFC + CMakeSetup.exe (will save later). + +2007-11-05 18:06 alex + + * CMakeLists.txt: COMP: use RPATH is building QtDialog and the Qt + libs are not in /lib or /usr/lib (same logic as for ccmake) + + Alex + +2007-11-05 17:44 king + + * Source/kwsys/kwsys_ios_iostream.h.in: COMP: Add streamsize and + streamoff to kwsys_ios namespace for ancient streams. + +2007-11-05 16:57 david.cole + + * DartLocal.conf.in: STYLE: Trade in expected arrakis dashboards + for resurrected equivalent ones on dash14. + +2007-11-05 16:55 hoffman + + * Source/: CMakeLists.txt, CPack/cmCPackDebGenerator.h, + CPack/cmCPackGenerator.cxx, CPack/cmCPackGenerator.h, + CPack/cmCPackGeneratorFactory.cxx, + CPack/cmCPackGeneratorFactory.h, + CPack/cmCPackGenericGenerator.cxx, + CPack/cmCPackGenericGenerator.h, CPack/cmCPackNSISGenerator.h, + CPack/cmCPackOSXX11Generator.h, + CPack/cmCPackPackageMakerGenerator.h, + CPack/cmCPackRPMGenerator.h, CPack/cmCPackTGZGenerator.h, + CPack/cmCPackZIPGenerator.h, CPack/cpack.cxx: ENH: change name + +2007-11-05 16:33 hoffman + + * Source/: CMakeLists.txt, CPack/cmCPackGeneratorFactory.cxx, + CPack/cmCPackGeneratorFactory.h, CPack/cmCPackGenerators.cxx, + CPack/cmCPackGenerators.h, CPack/cpack.cxx: ENH: change name of + class + +2007-11-05 14:34 king + + * Source/cmake.cxx, Source/CPack/cmCPackDebGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.h, + Source/CTest/cmCTestCoverageHandler.cxx, + Source/CTest/cmCTestSubmitHandler.cxx, + Source/kwsys/SystemTools.cxx, Utilities/cmcurl/ftp.c: COMP: Fix + warnings on 64-bit Mac OS X build. Patch from issue #3697. + +2007-11-05 13:20 clinton + + * Source/QtDialog/: CMakeSetup.cxx, CMakeSetupDialog.cxx, + CMakeSetupDialog.h, QCMake.cxx, QCMake.h, QCMakeCacheView.cxx, + QCMakeCacheView.h: + ENH: Prompt user for generator when there is none. Many + minor improvements, bug fixes, and style fixes. + +2007-11-04 22:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-04 01:20 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Fixed error related to missing + quotes around variable. + +2007-11-03 23:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-03 19:48 clinton + + * Source/QtDialog/: CMakeSetupDialog.cxx, CMakeSetupDialog.h, + CMakeSetupDialog.ui, QCMake.cxx, QCMake.h, QCMakeCacheView.cxx, + QCMakeCacheView.h: + ENH: Allow working with empty build directories. Make + output window a bit smaller compared to cache view. Prompt + on X'ing window as well as hitting cancel. Color new cache + values red, and put them first. + +2007-11-03 13:28 clinton + + * Source/QtDialog/QCMakeCacheView.cxx: COMP: Fix some compile + warnings. STYLE: Make style a bit more consistent. + +2007-11-03 12:50 hoffman + + * Source/QtDialog/: CMakeSetup.cxx, CMakeSetupDialog.h, QCMake.h, + QCMakeCacheView.h: ENH: remove qt warnings from qt with MS + compiler + +2007-11-03 12:07 hoffman + + * Source/QtDialog/QCMakeCacheView.h: ENH: fix compile error on + windows + +2007-11-03 10:30 clinton + + * Source/QtDialog/: CMakeLists.txt, CMakeSetup.cxx, CMakeSetup.ico, + CMakeSetup.png, CMakeSetup.qrc, CMakeSetup.rc, + CMakeSetupDialog.cxx, CMakeSetupDialog.h, CMakeSetupDialog.png, + CMakeSetupDialog.ui, QCMake.cxx, QCMake.h, QCMakeCacheView.cxx, + QCMakeCacheView.h: + ENH: Add interrupt button near progress bar. Implement + help button. Implement cancel button. Add + scrollable output window. Replace ON/OFF & combobox + editors with checkboxes. Tab/backtab in cache table jumps + between values (not names and values) Add tooltips to show + help strings. Add application icon and qtmain for Windows. + + BUG: Fix save of cache values on configure. + +2007-11-02 23:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-02 14:12 clinton + + * Source/QtDialog/CMakeLists.txt: COMP: Fix build on Windows. + +2007-11-02 12:03 hoffman + + * Source/CMakeLists.txt: ENH: add option for qt dialog + +2007-11-02 11:55 clinton + + * Source/QtDialog/: CMakeSetup.cxx, CMakeSetupDialog.cxx, + CMakeSetupDialog.h, QCMake.cxx, QCMake.h, QCMakeCacheView.cxx, + QCMakeCacheView.h: STYLE: Add license info to code. + +2007-11-02 11:50 clinton + + * Source/QtDialog/: CMakeLists.txt, CMakeSetup.cxx, CMakeSetup.qrc, + CMakeSetupDialog.cxx, CMakeSetupDialog.h, CMakeSetupDialog.png, + CMakeSetupDialog.ui, QCMake.cxx, QCMake.h, QCMakeCacheView.cxx, + QCMakeCacheView.h: ENH: Beginnings of a Qt UI for CMake. + +2007-11-02 10:46 hoffman + + * Tests/: CMakeLists.txt, Wrapping/CMakeLists.txt, + Wrapping/qtnoqtmain.cxx: ENH: remove findqt3 from cmake's + cmakelist files + +2007-11-01 22:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-11-01 16:21 hoffman + + * Source/QtDialog/README: ENH: create a directory for qt interface + to cmake + +2007-11-01 09:52 hoffman + + * Modules/CPackRPM.cmake: ENH: fix for RPM generator from Eric + +2007-11-01 08:36 david.cole + + * Utilities/Release/CMakeLogo.ico: ENH: Add more resolutions for + CMake icons to avoid that bloated chunky blown up icon look... + +2007-10-31 22:48 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-31 13:57 martink + + * Source/cmDocumentVariables.cxx: ENH: minor fix + +2007-10-31 13:38 martink + + * Source/cmDocumentVariables.cxx: ENH: added documentation for more + variables + +2007-10-31 12:55 hoffman + + * CMakeCPack.cmake, CMakeCPackOptions.cmake.in, + CPackConfig.cmake.in, CPackSourceConfig.cmake.in, + Source/CPack/cmCPackGenericGenerator.cxx: ENH: add + CPACK_PROJECT_CONFIG_FILE option to CPack + +2007-10-31 10:49 hoffman + + * Utilities/Release/CMakeLogo.ico: ENH: add icon for installer + +2007-10-31 09:39 king + + * Source/kwsys/SystemTools.cxx: BUG: Merge changes from 1.205-1.207 + from trunk to gccxml-gcc42 branch. + +2007-10-31 09:37 king + + * Source/kwsys/SystemTools.hxx.in: STYLE: Fix documentation (merge + from trunk) + +2007-10-31 09:03 hoffman + + * Source/CPack/cmCPackNSISGenerator.cxx: ENH: fix line length + +2007-10-31 08:50 david.cole + + * Modules/CPack.cmake, + Source/CPack/cmCPackCygwinBinaryGenerator.cxx, + Source/CPack/cmCPackCygwinBinaryGenerator.h, + Source/CPack/cmCPackCygwinSourceGenerator.cxx, + Source/CPack/cmCPackCygwinSourceGenerator.h, + Source/CPack/cmCPackDebGenerator.cxx, + Source/CPack/cmCPackDebGenerator.h, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, + Source/CPack/cmCPackOSXX11Generator.cxx, + Source/CPack/cmCPackOSXX11Generator.h, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.h, + Source/CPack/cmCPackRPMGenerator.cxx, + Source/CPack/cmCPackRPMGenerator.h: ENH: Add CPACK_SET_DESTDIR + handling to enable packaging of installed files in absolute + locations. With this setting on, cpack will set the DESTDIR env + var when building the package so that files end up in their + intended locations. Default behavior is not to set DESTDIR for + backwards compatibility. Helps address issue #4993 and issue + #5257. Also, remove unused CPACK_USE_DESTDIR variable. ENH: Add + variable CPACK_PACKAGING_INSTALL_PREFIX to allow overriding the + CPack GetPackagingInstallPrefix from a project's CMakeLists file + if necessary. Could be used to remove the annoying /usr prefix + still used by default in the Mac PackageMaker generator. + +2007-10-30 23:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-30 23:02 hoffman + + * CMakeCPack.cmake, CPackConfig.cmake.in, + CPackSourceConfig.cmake.in, Modules/CPack.cmake, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackRPMGenerator.cxx: ENH: cpack changes, remove + the escape variable stuff as it is not needed if you provide a + config file for cpack + +2007-10-30 11:03 martink + + * Source/cmTarget.cxx: BUG: fix undefined property FRAMEWORK + +2007-10-30 10:57 martink + + * Source/cmake.cxx: BUG: fix bad set property code in cmake + +2007-10-30 10:16 hoffman + + * Modules/CPackRPM.cmake: ENH: use cpack generic variable if rpm + one is not set + +2007-10-30 10:16 hoffman + + * CMakeCPack.cmake: ENH: fix for cygwin package + +2007-10-29 22:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-29 21:10 hoffman + + * Templates/cygwin-package.sh.in: ENH: add package script for cmake + project + +2007-10-29 12:21 hoffman + + * Source/: cmBootstrapCommands.cxx, cmCommands.cxx: ENH: move list + command to bootstrap commands + +2007-10-29 08:11 hoffman + + * CMakeCPack.cmake, Modules/CPack.cmake, Modules/NSIS.template.in, + Source/CPack/cmCPackNSISGenerator.cxx: ENH: add ability to set + installer icons, links to web pages, nsis code in the icon + section of the template, and ability to escape variables + correctly + +2007-10-28 22:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-27 23:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-26 23:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-26 22:57 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmSystemTools.cxx, + Source/CPack/cmCPackTGZGenerator.cxx, + Source/CPack/cmCPackTarCompressGenerator.cxx, + Source/kwsys/SystemTools.cxx: ENH: move changes from head + +2007-10-26 13:36 alex + + * Source/cmFindBase.cxx: STYLE: change wording of FIND_XXX() docs + to be more correct + + Alex + +2007-10-26 12:13 seanmcbride + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: STYLE: fixed + misspellings of Mac OS X + +2007-10-26 09:55 alex + + * Source/cmFindBase.cxx, Source/cmFindBase.h, + Source/cmFindLibraryCommand.cxx, Source/cmFindPathCommand.cxx, + Source/cmFindProgramCommand.cxx, + Tests/FindPackageTest/CMakeLists.txt, + Tests/FindPackageTest/include/foo.h: ENH: add support for + CMAKE_FIND_PREFIX_PATH as discussed with Brad. + CMAKE_FIND_PREFIX_PATH is both an environment variable and a + cmake variable, which is a list of base directories where + FIND_PATH, FIND_FILE, FIND_PROGRAM and FIND_LIBRARY will search + in the respective subdirectories + + Alex + +2007-10-25 22:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-25 14:03 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CPack.STGZ_Header.sh.in, Modules/FindKDE3.cmake, + Modules/FindKDE4.cmake, Modules/FindPythonInterp.cmake, + Modules/KDE3Macros.cmake, Modules/Platform/DragonFly.cmake, + Modules/Platform/GNU.cmake, Modules/Platform/NetBSD.cmake, + Modules/Platform/UnixPaths.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows.cmake, + Modules/Platform/WindowsPaths.cmake, Source/cmDependsFortran.cxx, + Source/cmFileCommand.h, Source/cmFindPackageCommand.h, + Source/cmIfCommand.cxx, Source/cmIfCommand.h, + Source/cmInstallCommand.cxx, Source/cmInstallCommand.h, + Source/cmMakefile.cxx, Source/cmRemoveDefinitionsCommand.h, + Source/cmSystemTools.cxx, Source/cmTryRunCommand.h, + Source/cmake.cxx, Source/cmakemain.cxx, + Source/CPack/cmCPackTGZGenerator.cxx, + Source/CPack/cmCPackTarCompressGenerator.cxx, + Source/CPack/cpack.cxx: ENH: merge in stuff from head + +2007-10-25 13:29 king + + * Source/kwsys/SystemTools.cxx: BUG: Fix bug#5590. When converting + a relative path between two full paths on different windows drive + letters do not create a ../../d:/foo/bar path and just return the + full path to the destination. + +2007-10-25 13:26 alex + + * Modules/CPackDeb.cmake, Source/CPack/cmCPackDebGenerator.cxx: + BUG: rename DEBIAN_PACKAGE_* variables to CPACK_DEBIAN_PACKAGE_* + variables to make them actually work + + Alex + +2007-10-24 23:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-24 14:43 martink + + * Source/: cmGetPropertyCommand.cxx, cmGetPropertyCommand.h, + cmPropertyDefinition.h, cmake.cxx, cmake.h: ENH: add ability to + get documentaiton of a property from a script + +2007-10-24 11:36 martink + + * Source/cmDocumentation.cxx, Source/cmDocumentation.h, + Source/cmDocumentationFormatter.h, + Source/cmDocumentationFormatterHTML.cxx, + Source/cmDocumentationSection.h, Source/cmakemain.cxx, + Utilities/CMakeLists.txt: ENH: some more cleanup, fixes, and + patch for HTML output + +2007-10-23 23:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-23 10:40 martink + + * Source/: cmMakefile.cxx, cmPropertyDefinitionMap.cxx: COMP: fix + for when STRICT is defined, and fix for props that have no docs + +2007-10-23 10:08 martink + + * Source/cmDocumentVariables.cxx: STYLE: fix some long lines + +2007-10-23 10:07 martink + + * Source/cmDocumentation.cxx: COMP: fix a problem with a shadowed + var + +2007-10-22 23:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-22 17:16 hoffman + + * Modules/CPack.cmake: ENH: fix bitmap escapes + +2007-10-22 16:41 martink + + * Source/: cmDocumentation.cxx, cmakemain.cxx: COMP: fix some + warnings and add some doc strings back in + +2007-10-22 15:33 martink + + * Source/: cmDocumentation.cxx, cmDocumentation.h, + cmDocumentationSection.cxx, cmDocumentationSection.h, + cmakemain.cxx: COMP: fix some warnings and add some doc strings + back in + +2007-10-22 14:01 hoffman + + * Modules/Platform/Darwin.cmake, Source/cmLocalGenerator.cxx: ENH: + fix spelling error + +2007-10-22 13:28 martink + + * Source/: cmGlobalKdevelopGenerator.cxx, + cmGlobalXCodeGenerator.cxx: ENH: change to make the documentation + class more generic, about halfway there, also provides secitons + for Variables now + +2007-10-22 12:48 martink + + * Source/: CMakeLists.txt, cmDocumentVariables.cxx, + cmDocumentation.cxx, cmDocumentation.h, + cmDocumentationFormatter.h, cmDocumentationFormatterHTML.cxx, + cmDocumentationFormatterHTML.h, cmDocumentationFormatterMan.cxx, + cmDocumentationFormatterMan.h, cmDocumentationFormatterText.cxx, + cmDocumentationFormatterText.h, + cmDocumentationFormatterUsage.cxx, + cmDocumentationFormatterUsage.h, cmDumpDocumentation.cxx, + cmExtraCodeBlocksGenerator.cxx, cmExtraEclipseCDT4Generator.cxx, + cmGlobalBorlandMakefileGenerator.cxx, cmGlobalGenerator.cxx, + cmGlobalMSYSMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio8Win64Generator.cxx, + cmGlobalVisualStudio9Generator.cxx, + cmGlobalWatcomWMakeGenerator.cxx, cmMakefile.cxx, + cmPropertyDefinition.cxx, cmPropertyDefinition.h, + cmPropertyDefinitionMap.cxx, cmPropertyDefinitionMap.h, + cmStandardIncludes.h, cmake.cxx, cmake.h, cmakemain.cxx, + ctest.cxx, CPack/cpack.cxx, CursesDialog/ccmake.cxx, + cmDocumentationSection.cxx, cmDocumentationSection.h: ENH: change + to make the documentation class more generic, about halfway + there, also provides secitons for Variables now + +2007-10-22 11:40 hoffman + + * Modules/: CPack.cmake, NSIS.template.in: ENH: allow + CPACK_PACKAGE_ICON to be not set + +2007-10-22 10:17 hoffman + + * Modules/Platform/Darwin.cmake: ENH: try to fix boostrap on 10.5 + +2007-10-21 23:39 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-20 23:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-19 23:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-19 22:24 hoffman + + * Modules/Platform/Darwin.cmake, Source/cmLocalGenerator.cxx: ENH: + do not always add -arch flags + +2007-10-19 12:03 hoffman + + * Source/CPack/cmCPackNSISGenerator.cxx: ENH: fix line length error + +2007-10-18 22:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-18 11:11 king + + * Source/kwsys/SystemTools.cxx: BUG: Merge bug fixes from HEAD. + +2007-10-18 09:40 hoffman + + * CMakeCPack.cmake, Modules/NSIS.template.in, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.h: ENH: add ability to create + links on the start menu + +2007-10-18 09:39 hoffman + + * bootstrap: ENH: add new file + +2007-10-18 09:38 hoffman + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx: ENH: do not remove + executables and dll's before linking them so that incremental + links work, incremental links are still broken for vs 2005 and + greater because of the manifest stuff + +2007-10-18 09:10 hoffman + + * Source/: CMakeLists.txt, cmDocumentVariables.cxx, + cmDocumentVariables.h, cmake.cxx: ENH: add docs for variables + +2007-10-17 22:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-17 09:38 miguelf + + * Modules/FindwxWidgets.cmake: ENH: Added support for finding + wxWidgets-2.9. Thanks to Joshua Jensen and Steven. + +2007-10-16 22:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-16 14:27 martink + + * Source/: CMakeLists.txt, cmConfigure.cmake.h.in, + cmPropertyMap.cxx: ENH: added CMAKE_STRICT option for var and + property checking + +2007-10-16 10:19 king + + * Source/: cmDependsFortran.cxx, cmInstallCommand.cxx: STYLE: Fixed + line-too-long. + +2007-10-15 22:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-15 17:38 king + + * Source/cmExecuteProcessCommand.cxx: BUG: Work around bug when + calling insert on an empty vector of char on midworld. Should + eliminate the sporadic failure of EXECUTE_PROCESS during the + SimpleInstall-Stage2 test. (david.cole from Brad's checkout on + midworld) + +2007-10-15 14:50 martink + + * Modules/TestForSSTREAM.cmake, Source/cmForEachCommand.h, + Source/cmWhileCommand.h, Source/cmake.cxx: ENH: minor doc + cleanups and an example of documenting a variable + +2007-10-15 07:08 david.cole + + * Source/cmInstallCommand.cxx, Source/cmInstallScriptGenerator.cxx, + Source/cmInstallScriptGenerator.h, Source/cmLocalGenerator.cxx, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstall/InstallScript3.cmake, + Tests/SimpleInstall/InstallScript4.cmake, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/InstallScript3.cmake, + Tests/SimpleInstallS2/InstallScript4.cmake: BUG: Fix #5868 - add + COMPONENT handling to the SCRIPT and CODE signatures of the + INSTALL command. + +2007-10-14 22:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-14 08:15 alex + + * Source/cmExportCommand.cxx: + BUG: fix #5806, wrong quotes used in the exported file + + Alex + +2007-10-13 22:48 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-12 22:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-12 21:30 miguelf + + * Modules/FindwxWidgets.cmake: BUG: Added support for the AUI + library module (bug 4338). Also applied some STYLE changes + including: deprecation of wxWidgets_USE_LIBS in favor of using + standard FIND_PACKAGE COMPONENTS, removed some CMake 2.4.2 + compatibility patches, use of execute_process instead of + exec_program, etc. + +2007-10-12 19:33 hoffman + + * Modules/CPackRPM.cmake: BUG: fix for bug 5878 + +2007-10-12 11:43 david.cole + + * Source/cmTarget.cxx: BUG: Fix the dashboards! Put it back the way + it was so it always creates the target directory at configure + time. Figure out how to avoid it for the framework case on the + Mac/Xcode later... + +2007-10-12 11:34 hoffman + + * Modules/FindFLTK2.cmake: ENH: add from bug 0004219 + +2007-10-12 11:00 hoffman + + * Modules/FindASPELL.cmake: BUG: fix for bug 0005871 + +2007-10-12 10:58 hoffman + + * Source/cmLocalGenerator.cxx: BUG: fix for bug 0003618 , allow one + arch in OSX_ARCHS to work + +2007-10-12 09:58 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: fix for bug 0005767 hang for + replace string with empty + +2007-10-12 09:51 king + + * Source/cmDependsFortran.cxx: ENH: When an object file requires a + module add the file-level dependency between the object file and + the module timestamp file. Create a dummy timestamp file in case + nothing in the project actually creates the module. See + bug#5809. + +2007-10-12 09:32 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Dependency + scanners should have local generators set always. + +2007-10-11 22:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-10 22:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-10 17:47 alin.elena + + * Modules/: CheckFortranFunctionExists.cmake, FindBLAS.cmake, + FindLAPACK.cmake, Platform/Linux-ifort.cmake: + ENH: FindBLAS.cmake and FindLAPACK.cmake modules added. They + locate various implementations of blas and lapack libraries. + CheckFortranFunctionExists.cmake provides a test function to + check if the library is usabale. I have also changed the -KPIC + flag to -fPIC in Linux-ifort.cmake. + +2007-10-10 11:47 martink + + * Source/cmAddCustomCommandCommand.h, + Source/cmAddCustomTargetCommand.h, + Source/cmAddDefinitionsCommand.h, + Source/cmAddDependenciesCommand.h, + Source/cmAddExecutableCommand.h, Source/cmAddLibraryCommand.h, + Source/cmAddSubDirectoryCommand.h, Source/cmAddTestCommand.h, + Source/cmAuxSourceDirectoryCommand.h, Source/cmBuildCommand.h, + Source/cmBuildNameCommand.h, Source/cmCMakeMinimumRequired.h, + Source/cmConfigureFileCommand.h, Source/cmCreateTestSourceList.h, + Source/cmDefinePropertyCommand.h, Source/cmDocumentation.cxx, + Source/cmElseCommand.h, Source/cmElseIfCommand.h, + Source/cmEnableLanguageCommand.h, + Source/cmEnableTestingCommand.h, Source/cmEndForEachCommand.h, + Source/cmEndIfCommand.h, Source/cmEndMacroCommand.h, + Source/cmEndWhileCommand.h, Source/cmExecProgramCommand.h, + Source/cmExecuteProcessCommand.h, Source/cmExportCommand.h, + Source/cmExportLibraryDependencies.h, + Source/cmFLTKWrapUICommand.h, Source/cmFileCommand.h, + Source/cmFindFileCommand.cxx, Source/cmFindFileCommand.h, + Source/cmFindLibraryCommand.cxx, Source/cmFindLibraryCommand.h, + Source/cmFindPackageCommand.h, Source/cmFindPathCommand.cxx, + Source/cmFindPathCommand.h, Source/cmFindProgramCommand.cxx, + Source/cmFindProgramCommand.h, Source/cmForEachCommand.h, + Source/cmGetCMakePropertyCommand.h, + Source/cmGetDirectoryPropertyCommand.h, + Source/cmGetFilenameComponentCommand.h, + Source/cmGetPropertyCommand.h, + Source/cmGetSourceFilePropertyCommand.h, + Source/cmGetTargetPropertyCommand.h, + Source/cmGetTestPropertyCommand.h, Source/cmIfCommand.h, + Source/cmIncludeCommand.h, Source/cmIncludeDirectoryCommand.h, + Source/cmIncludeExternalMSProjectCommand.h, + Source/cmIncludeRegularExpressionCommand.h, + Source/cmInstallCommand.h, Source/cmInstallFilesCommand.h, + Source/cmInstallProgramsCommand.h, + Source/cmInstallTargetsCommand.h, + Source/cmLinkDirectoriesCommand.h, + Source/cmLinkLibrariesCommand.h, Source/cmListCommand.h, + Source/cmLoadCacheCommand.h, Source/cmLoadCommandCommand.h, + Source/cmMacroCommand.h, Source/cmMakeDirectoryCommand.h, + Source/cmMarkAsAdvancedCommand.h, Source/cmMathCommand.h, + Source/cmMessageCommand.h, Source/cmOptionCommand.h, + Source/cmOutputRequiredFilesCommand.h, Source/cmProjectCommand.h, + Source/cmQTWrapCPPCommand.h, Source/cmQTWrapUICommand.h, + Source/cmRemoveCommand.h, Source/cmRemoveDefinitionsCommand.h, + Source/cmSeparateArgumentsCommand.h, Source/cmSetCommand.h, + Source/cmSetDirectoryPropertiesCommand.h, + Source/cmSetPropertiesCommand.h, + Source/cmSetSourceFilesPropertiesCommand.h, + Source/cmSetTargetPropertiesCommand.h, + Source/cmSetTestsPropertiesCommand.h, Source/cmSiteNameCommand.h, + Source/cmSourceGroupCommand.h, Source/cmStringCommand.h, + Source/cmSubdirCommand.h, Source/cmSubdirDependsCommand.h, + Source/cmTargetLinkLibrariesCommand.h, + Source/cmTryCompileCommand.h, Source/cmTryRunCommand.h, + Source/cmUseMangledMesaCommand.h, + Source/cmUtilitySourceCommand.h, + Source/cmVariableRequiresCommand.h, + Source/cmVariableWatchCommand.h, Source/cmWhileCommand.h, + Source/cmWriteFileCommand.h, + Tests/CommandLineTest/CMakeLists.txt: ENH: make commands lower + case by default + +2007-10-10 11:06 david.cole + + * Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalXCodeGenerator.cxx, Source/cmInstallCommand.cxx, + Source/cmInstallTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmOrderLinkDirectories.cxx, Source/cmTarget.cxx, + Source/cmTarget.h, Tests/CMakeLists.txt, + Tests/Framework/CMakeLists.txt: ENH: Finish up the Framework + creation code restructuring. Frameworks build and install now. + More work needed on the packaging step. See Tests/Framework for + example use. + +2007-10-10 09:09 king + + * Tests/Fortran/: CMakeLists.txt, test_use_in_comment_fixedform.f, + test_use_in_comment_freeform.f90, in_interface/main.f90, + in_interface/module.f90: ENH: Added test for 'use' keyword in a + comment. Patch from Maik Beckmann. See bug#5809. + +2007-10-10 09:07 king + + * Source/cmDependsFortran.cxx: BUG: Fix in-interface mode. Patch + from Maik Beckmann. See bug#5809. + +2007-10-09 22:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-09 15:20 barre + + * Source/kwsys/SystemTools.cxx: ENH: bad bug bad + +2007-10-09 14:35 martink + + * Source/: cmDocumentation.cxx, cmDocumentationFormatterHTML.cxx, + cmDocumentationFormatterMan.cxx, + cmDocumentationFormatterText.cxx, + cmDocumentationFormatterUsage.cxx, cmDumpDocumentation.cxx, + cmPropertyDefinition.cxx, cmPropertyDefinitionMap.cxx, + cmStandardIncludes.h, cmake.cxx, cmake.h, cmakemain.cxx, + ctest.cxx, CPack/cpack.cxx: BUG: revert doc changes since VS7 + cannot compile them, will implement them in a different manner + +2007-10-09 09:55 martink + + * Source/: cmDocumentation.cxx, cmDocumentationFormatterHTML.cxx, + cmDocumentationFormatterMan.cxx, + cmDocumentationFormatterText.cxx, + cmDocumentationFormatterUsage.cxx, cmDumpDocumentation.cxx, + cmPropertyDefinition.cxx, cmPropertyDefinitionMap.cxx, + cmStandardIncludes.h, cmake.cxx, cmake.h, cmakemain.cxx, + ctest.cxx, CPack/cpack.cxx: ENH: make documentation entries + actually store their data + +2007-10-08 22:39 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-08 10:05 king + + * Source/cmSystemTools.cxx: STYLE: Fixed line-too-long. + +2007-10-08 10:03 king + + * Source/cmSystemTools.cxx: COMP: Added inadvertantly removed + include. + +2007-10-07 22:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-07 16:22 king + + * Source/cmSystemTools.cxx: COMP: Simplified include file logic. + The windows.h header should be included for all compilers on + windows. + +2007-10-06 22:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-05 22:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-05 15:51 martink + + * Source/cmSystemTools.cxx: COMP: fix to compile on VS 8 + +2007-10-05 13:15 hoffman + + * Modules/Platform/Windows-bcc32.cmake: ENH: add support for + preprocessed files in borland + +2007-10-05 13:14 hoffman + + * Utilities/KWStyle/CMakeFiles.txt.in: ENH: add more exclusions for + kwstyle + +2007-10-05 10:03 king + + * Source/cmSystemTools.cxx: BUG: Fix call to SetFileTime to set it + on the proper file. + +2007-10-05 10:02 king + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y: + COMP: Disable some warnings in generated code. Disable + compilation of unused goto block. + +2007-10-05 09:46 king + + * Source/: cmFileCommand.cxx, cmSystemTools.cxx, cmSystemTools.h: + ENH: During file installation treat the source file as a + dependency of the installed file. Install the file only if the + destination is older than the source. Set the file times on the + installed file to match those of the source file. This should + greatly improve the speed of repeated installations because it + removes the comparison of file contents. This addresses + bug#3349. + +2007-10-04 22:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-04 15:31 hoffman + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y: + ENH: update .y file with borland fix, and use a table based + strcasecmp + +2007-10-04 14:47 david.cole + + * Source/cmDependsFortranParser.cxx: COMP: Get it to compile on + Borland 5.5, too. Including stl headers here does not work, + because with Borland 5.5 stl headers pull in windef.h which + typedefs WORD which is in the fortran tokens list... + +2007-10-04 09:49 king + + * Source/cmDependsFortranParser.cxx: STYLE: Removed reference to my + home directory from #line calls. + +2007-10-03 22:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-03 17:01 king + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y: + COMP: Do not use non-portable strcasecmp. + +2007-10-03 16:19 king + + * Source/cmDependsFortran.cxx: BUG: When requiring a module through + a .proxy rule add an empty .proxy rule in case no other source in + the target provides it. Since it is not a file-level dependency + there does not need to be a rule to create the .proxy as a file. + This addresses bug#3984. + +2007-10-03 15:41 king + + * Source/: cmDependsFortran.cxx, cmDependsFortranLexer.cxx, + cmDependsFortranLexer.h, cmDependsFortranLexer.in.l, + cmDependsFortranParser.cxx, cmDependsFortranParser.h, + cmDependsFortranParser.y, cmDependsFortranParserTokens.h: BUG: + Fix for bug#5809. Applied patch supplied in the bug report. + Updated pre-generated lexer and parser sources. This updates the + makedepf90 version to 2.8.8. The parser actions have been + updated to ignore "use" in comments properly. + +2007-10-03 15:23 king + + * Source/CMakeLists.txt: ENH: Updated CMAKE_REGENERATE_YACCLEX + option to support cmDependsFortran. Fixed to work with spaces in + path. + +2007-10-02 22:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-02 15:48 hoffman + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: speed up + actual path name by cache on windows + +2007-10-01 22:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-10-01 15:57 david.cole + + * Tests/: CMakeLists.txt, SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: COMP: Rename the executables for + the SimpleInstall tests so that the executable files that run + during the test do not have the word install in their file names. + This allows running the tests on Windows Vista without admin + privileges and without adding a manifest containing the asInvoker + requestedExecutionLevel element. + +2007-09-30 22:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-29 22:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-28 22:49 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-27 23:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-27 14:44 hoffman + + * Source/cmGeneratedFileStream.cxx, Source/cmSystemTools.cxx, + Source/CPack/cmCPackTGZGenerator.cxx, Utilities/cmtar/libtar.c: + COMP: remove warnings + +2007-09-27 14:20 hoffman + + * Modules/FindQt4.cmake: ENH: set QT_EDITION_DESKTOPLIGHT and do + not disable modules + +2007-09-27 14:18 hoffman + + * DartLocal.conf.in: ENH: fix space + +2007-09-27 14:16 hoffman + + * Source/cmWin32ProcessExecution.cxx: ENH: remove junk from output + +2007-09-27 08:53 hoffman + + * Utilities/cmcurl/CMakeLists.txt: ENH: add a check for basename to + cmcurl + +2007-09-26 22:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-26 20:53 hoffman + + * Modules/FindQt4.cmake: ENH: look for qt in a beter registry place + and disable modules that won't work with DesktopLight, also set + QT_EDITION variable + +2007-09-25 23:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-25 10:57 hoffman + + * Source/cmSystemTools.cxx: BUG: fix problem with stdout and stderr + not showing up in ms dos shells + +2007-09-25 08:36 hoffman + + * Tests/CMakeLists.txt: ENH: increase timeout + +2007-09-25 08:30 hoffman + + * DartLocal.conf.in: ENH: remove extra space + +2007-09-24 23:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-24 13:19 hoffman + + * DartLocal.conf.in, Source/cmSystemTools.cxx: ENH: add new + machines + +2007-09-24 11:18 hoffman + + * CTestCustom.cmake.in: COMP: exclude some warnings on hp + +2007-09-24 11:16 hoffman + + * Source/: cmCommandArgumentLexer.cxx, cmDependsJavaLexer.cxx, + cmExprLexer.cxx: COMP: fix warnings on hp + +2007-09-24 11:10 hoffman + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: ENH: + fix line length issues + +2007-09-24 09:53 king + + * Modules/FindThreads.cmake: BUG: Enable CMAKE_HP_PTHREADS only + when the old CMA threads are available. Modern HP pthreads are + just normal pthreads. + +2007-09-23 23:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-22 22:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-21 22:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-21 13:37 alex + + * Source/CPack/cmCPackDebGenerator.cxx: + STYLE: use %-10lld instead of %-10qd for printing a 64bit int, + maybe this silences the warning of the HP compiler + + Alex + +2007-09-21 11:42 alex + + * Source/cmFindPackageCommand.cxx: + STYLE: improved error message for the case that neither + FindFoo.cmake nor FooConfig.cmake were found + + Alex + +2007-09-21 11:42 hoffman + + * Modules/InstallRequiredSystemLibraries.cmake: ENH: remove message + +2007-09-20 22:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-20 17:21 king + + * Modules/FindThreads.cmake: BUG: Do not use CMA threads on HP if + they do not exist. + +2007-09-20 16:48 hoffman + + * Tests/CMakeLists.txt: ENH: VV make too much data for the + dashboard + +2007-09-20 11:57 hoffman + + * Source/kwsys/testRegistry.cxx: COMP: remove warning on new HPUX + compiler + +2007-09-20 10:56 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Disable package test only on + OSX < 10.4. Added comment explaining reason for timeout. + +2007-09-20 10:47 king + + * Tests/CMakeLists.txt: ENH: Restore shorter timeout for + SimpleInstall-Stage2. + +2007-09-20 09:36 alex + + * Source/kwsys/SystemTools.cxx: + COMP: TIOCGWINSZ and struct winsize also doesn't exist on Cray + Catamount + + Alex + +2007-09-20 09:30 alex + + * Source/kwsys/SystemTools.cxx: + COMP: make SystemTools.cxx build on Cray Xt3 + + Alex + +2007-09-20 08:33 alex + + * Source/cmDocumentation.cxx: + STYLE: fix line lengths + + Alex + +2007-09-19 22:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-19 13:14 alex + + * Source/: cmDocumentation.cxx, cmDocumentation.h, + cmDocumentationFormatter.h, cmakemain.cxx: + ENH: add new help option --help-custom-modules, which generates + documentation for all modules found in CMAKE_MODULE_PATH, which + currently has to be specified via -D, this can later on be + improved e.g. by reading a special (to-be-created) file like + CMakeFiles/ModulePath.cmake in the build tree so that running + cmake help in the build tree of a project will always give you + the current module path. (This could actually also help IDEs + which would like to support cmake for projects...) + + Alex + +2007-09-19 11:42 hoffman + + * Utilities/cmcurl/CMakeLists.txt: ENH: add test for HAVE_BASENAME + since it is used + +2007-09-19 11:16 hoffman + + * Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestTestHandler.h, Source/kwsys/CMakeLists.txt, + Tests/CMakeLists.txt: ENH: fix failing test when valgrind is on + +2007-09-19 11:10 king + + * Tests/: CMakeLists.txt, SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Re-enable packaging part of + SimpleInstall-Stage2 test on Apple. Give it a long timeout to + see what is going on. + +2007-09-19 10:46 alex + + * Source/: cmDocumentationFormatter.h, + cmDocumentationFormatterHTML.cxx: + COMP: fix warning about unused parameters + + Alex + +2007-09-19 09:59 alex + + * Source/cmDocumentationFormatterMan.cxx: + BUG: correct name for the man page + + Alex + +2007-09-19 09:35 alex + + * Modules/FindQt4.cmake: + BUG: if Qt is installed as a framework, add -F to the command + line so Q_WS_MAC can be detected correctly + + Alex + +2007-09-19 09:05 alex + + * Source/: CMakeLists.txt, cmDocumentation.cxx, cmDocumentation.h, + cmDocumentationFormatter.cxx, cmDocumentationFormatter.h, + cmDocumentationFormatterHTML.cxx, cmDocumentationFormatterHTML.h, + cmDocumentationFormatterMan.cxx, cmDocumentationFormatterMan.h, + cmDocumentationFormatterText.cxx, cmDocumentationFormatterText.h, + cmDocumentationFormatterUsage.cxx, + cmDocumentationFormatterUsage.h: + STYLE: move the code for the different formats of the generated + help into their own classes, making cmDocumentation smaller and + also making it easier to eventually add another format + + Alex + +2007-09-19 09:04 alex + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: + COMP: reenable the installation of the PUBLIC_HEADERs + + Alex + +2007-09-18 22:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-18 17:05 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: + STYLE: fix line lengths + + Alex + +2007-09-18 15:16 hoffman + + * CMakeCPack.cmake, Modules/NSIS.InstallOptions.ini.in, + Modules/NSIS.template.in, Source/CPack/cmCPackNSISGenerator.cxx: + ENH: allow for desktop link to be created and fix chop of last + char in PATH on uninstall + +2007-09-18 15:13 alex + + * Modules/FindPythonLibs.cmake: + BUG: make the string static, otherwise the contents are gone when + we exit the function (same fix as in VTK/CMake/) + + Alex + +2007-09-18 11:35 hoffman + + * Tests/CMakeLists.txt: ENH: increase timeout for long test + +2007-09-18 11:34 hoffman + + * Source/cmCTest.cxx: ENH: allow test properties to set a timeout + that is longer than the default timeout, but not longer than + CTEST_TIME_LIMIT for a script + +2007-09-18 09:54 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: + ENH: use the oubject_output option to try to tell CodeBlocks + where the object files are located (to make "compile file" work). + Doesn't work yet, but at least the .objs/ is now removed from the + path. + + Alex + +2007-09-17 22:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-17 16:21 alex + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: + COMP: disable packaging test on Apple, see if this fixes the + timeouts + + Alex + +2007-09-17 15:59 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: fix for vs 8 + +2007-09-17 15:55 alex + + * CMakeLists.txt, Modules/CMakeCCompilerId.c, + Modules/CMakeCXXCompilerId.cpp, + Modules/Platform/Linux-PGI-C.cmake, + Modules/Platform/Linux-PGI-CXX.cmake, Source/kwsys/Directory.cxx: + + ENH: add support for the Portland Compiler to CMake, can build + cmake and the tests pass (except the wrapping tests, which fail + to link to the g++-compiled Qt) + + Alex + +2007-09-17 15:40 alex + + * Utilities/cmtar/libtar.c: + COMP: use C-style comments in C code + + Alex + +2007-09-17 15:27 hoffman + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: test install of debug libs + +2007-09-17 15:26 hoffman + + * Modules/InstallRequiredSystemLibraries.cmake: ENH: allow for + installation of debug libs + +2007-09-17 15:20 hoffman + + * Modules/CMakeVS8FindMake.cmake, + Modules/Platform/Windows-cl.cmake, Source/CMakeLists.txt, + Source/cmGlobalVisualStudio9Generator.cxx, + Source/cmGlobalVisualStudio9Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmake.cxx, + Utilities/cmcurl/select.h, Utilities/cmcurl/CMake/CurlTests.c, + Utilities/cmcurl/Platforms/WindowsCache.cmake, + Modules/CMakeVS9FindMake.cmake: ENH: add support for vs 2008 beta + 2 + +2007-09-17 15:18 alex + + * Utilities/cmtar/: CMakeLists.txt, config.h.in, internal.h: + COMP: add a check for makedev, which isn't available with the PGI + compiler on Cray XT3 + + Alex + +2007-09-17 11:17 hoffman + + * Source/cmSystemTools.cxx: ENH: fix warning + +2007-09-17 10:53 alex + + * Source/cmTryRunCommand.cxx: + STYLE: copy the executables from TRY_RUN() to + ${CMAKE_BINARY_DIR}/CMakeFiles/ instead to ${CMAKE_BINARY_DIR} + + Alex + +2007-09-17 10:51 king + + * Tests/BuildDepends/: CMakeLists.txt, Project/CMakeLists.txt, + Project/dep.cxx, Project/zot.cxx: ENH: Adding test for + ADD_CUSTOM_COMMAND's new IMPLICIT_DEPENDS feature. + +2007-09-17 10:50 king + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomCommandCommand.h, cmCustomCommand.cxx, + cmCustomCommand.h, cmMakefileTargetGenerator.cxx: ENH: Added + IMPLICIT_DEPENDS option to ADD_CUSTOM_COMMAND. It currently + works only for Makefile generators. It allows a custom command + to have implicit dependencies in the form of C or CXX sources. + +2007-09-17 10:40 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, + CTest/cmCTestBuildAndTestHandler.cxx, + CTest/cmCTestBuildCommand.cxx, CTest/cmCTestTestHandler.cxx: ENH: + fix build issue with config type not being specified by ctest + +2007-09-16 22:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-15 22:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-14 22:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-13 22:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-13 13:37 king + + * Source/cmMakefileTargetGenerator.cxx, Source/cmSourceFile.cxx, + Tests/PrecompiledHeader/CMakeLists.txt: ENH: Added OBJECT_OUTPUTS + source file property. Updated PrecompiledHeader test to use it + (making the test simpler). + +2007-09-13 09:14 king + + * Source/cmGlobalXCodeGenerator.cxx: COMP: Fix shadowed local + warning by scoping the previous decl properly. + +2007-09-12 22:54 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-11 22:49 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-11 15:21 david.cole + + * CTestCustom.cmake.in: ENH: Avoid prompting for admin privileges + when running CMakeSetup.exe on Vista by adding a + requestedExecutionLevel element to its manifest. + +2007-09-11 14:43 hoffman + + * Source/CTest/cmCTestBuildAndTestHandler.cxx: ENH: for build and + test default the config type to the one that ctest was built + with, it is good for the current ctest setup, and other projects + can always specify a value on the command line + +2007-09-11 12:23 hoffman + + * Source/cmSystemTools.cxx: ENH: opps + +2007-09-11 11:22 david.cole + + * Utilities/cmzlib/: CMakeLists.txt, ChangeLog, FAQ, INDEX, README, + README.Kitware.txt, adler32.c, cm_zlib_mangle.h, compress.c, + crc32.c, crc32.h, deflate.c, deflate.h, example.c, gzio.c, + infblock.c, infblock.h, infcodes.c, infcodes.h, inffast.c, + inffast.h, inffixed.h, inflate.c, inflate.h, inftrees.c, + inftrees.h, infutil.c, infutil.h, maketree.c, minigzip.c, + trees.c, uncompr.c, zconf.h, zlib.def, zlib.h, zlib.rc, zutil.c, + zutil.h: ENH: Update zlib to 1.2.3. Addresses bugs #5445 and + #3473. + +2007-09-11 11:21 hoffman + + * Source/: cmCTest.cxx, cmSystemTools.cxx, cmSystemTools.h, + ctest.cxx, CTest/cmCTestTestHandler.cxx: ENH: fix 2 ctest issues, + do not use the build type of ctest to look for config types, do + not inherit pipes in child procs for ctest so it can kill them + +2007-09-11 10:01 hoffman + + * Source/cmMathCommand.h: ENH: improve docs + +2007-09-10 22:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-10 17:39 hoffman + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: turn this stuff off to see + if it fixes the dashboard on midworld + +2007-09-10 17:10 hoffman + + * Tests/Plugin/src/example_exe.cxx: ENH: fix memory leak + +2007-09-10 10:49 hoffman + + * Tests/CMakeLists.txt, Utilities/Release/README, + Utilities/Release/create-cmake-release.cmake, + Utilities/Release/upload_release.cmake: ENH: add test that builds + a nightly windows cmake binary + +2007-09-10 10:22 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmTarget.cxx: ENH: Added + XCODE_ATTRIBUTE_ property to allow direct setting + of Xcode target attributes in generated projects. For example, + one may set the prefix header property and the corresponding + precompiled option to do precompiled headers. + +2007-09-09 23:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-09 13:18 hoffman + + * CMakeLists.txt: ENH: remove debug print + +2007-09-08 23:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-07 22:49 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-07 17:00 hoffman + + * CMakeLists.txt: ENH: MATH is not in bootstrap cmake + +2007-09-07 14:20 hoffman + + * CMakeCPack.cmake, CMakeLists.txt: ENH: for CVS CMake have cpack + use the version date in the name of the package + +2007-09-07 11:10 hoffman + + * Source/cmCacheManager.cxx: ENH: fix spelling error + +2007-09-06 22:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-06 17:47 david.cole + + * Utilities/Release/CMakeInstall.bmp: BUG: Put back + CMakeInstall.bmp in order to build a package with NSIS on + Windows. It was inadvertently removed. + +2007-09-06 10:06 hoffman + + * DartLocal.conf.in: ENH: acdc is dead + +2007-09-05 23:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-09-04 11:45 zack.galbreath + + * Source/temp.txt: ENH: removing temporary testing file + +2007-09-04 11:05 zack.galbreath + + * Source/temp.txt: ENH: testing branchRestrict + +2007-08-31 16:52 alex + + * Source/: cmInstallCommand.cxx, cmInstallCommandArguments.h: + STYLE: fix line lengths + + Alex + +2007-08-31 16:27 alex + + * Modules/CPack.cmake: + STYLE: mark the generator options as advanced + + Alex + +2007-08-31 15:05 alex + + * Utilities/KWStyle/CMake.kws.xml.in: + STYLE: disable header check + + Alex + +2007-08-31 14:51 king + + * CMakeLists.txt, CTestCustom.cmake.in, CTestCustom.ctest.in: ENH: + Create CTestCustom.cmake instead of CTestCustom.ctest. Create + the old file to include the new one for compatibility. This + should prevent the long delays of CTest traversing the whole tree + looking for CTestCustom.ctest files. + +2007-08-31 14:07 alex + + * Utilities/KWStyle/: CMakeLists.txt, CMakeMoreChecks.kws.xml.in: + STYLE: add makefile target MoreStyleChecks, which runs KWStyle + with more checks enabled and creates the html files. + + Alex + +2007-08-31 13:45 alex + + * Source/cmGlobalGenerator.cxx: + STYLE: the temporary variable is not necessary + + Alex + +2007-08-31 13:42 alex + + * Source/: cmExtraCodeBlocksGenerator.cxx, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmGlobalKdevelopGenerator.cxx: + ENH: add support for Fortran to the KDevelop generator -minor + optimization for GetLanguageEnabled() + + Alex + +2007-08-31 09:14 king + + * Source/CPack/cmCPackDebGenerator.cxx: BUG: Another space-in-path + fix. + +2007-08-31 09:09 king + + * Source/cmake.cxx: BUG: Fix path to CMake executables when run + from bootstrap build. + +2007-08-30 16:23 alex + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: + STYLE: adapt the test to the change from FILENAME to FILE -add a + call to the EXPORT() command + + Alex + +2007-08-30 16:22 alex + + * Source/: cmInstallCommand.cxx, cmInstallExportGenerator.cxx: + STYLE: rename FILENAME keyword to FILE, because FILENAME is used + in no other place + + Alex + +2007-08-30 13:35 alex + + * Modules/: FindPythonInterp.cmake, FindPythonLibs.cmake: + ENH: add support for the next python release, python 2.6 + + Alex + +2007-08-30 11:36 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: + STYLE: "Build file" still doesn't work, but now it is at least a + bit closer, it needs some more support from CB + + Alex + +2007-08-30 10:26 alex + + * Source/cmStringCommand.h: + STYLE: add the | to the docs + + Alex + +2007-08-29 16:32 alex + + * Source/CPack/cmCPackDebGenerator.cxx: + BUG: work if there are spaces in the path to cmake + + Alex + +2007-08-29 16:31 alex + + * Modules/CPackRPM.cmake: + ENH: fail with error if trying to create a RPM stating that + rpmbuild can't handle spaces + + Alex + +2007-08-29 15:19 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: + BUG: make paths with spaces work in CodeBlocks -gcc is always gcc + and not mingw + + Alex + +2007-08-29 14:35 alex + + * Source/cmIfCommand.cxx: BUG: this seems to fix the regexp + result-storage problem, now it seems the actual result is tored + instead of "1" , as it happened for StringFileTest on Windows + + Alex + +2007-08-29 14:05 alex + + * Source/cmStringCommand.h: + STYLE: add docs about the supported regexp characters and + CMAKE_MATCH_(0..9) + + Alex + +2007-08-29 12:01 alex + + * Tests/StringFileTest/CMakeLists.txt: + ENH: added tests for the CMAKE_MATCH_(0..9) variables, which get + set by regex matches (STRING(REGEX), IF(MATCHES)) + + Alex + +2007-08-29 11:58 alex + + * Source/: cmIfCommand.cxx, cmIfCommand.h, cmStringCommand.cxx, + cmStringCommand.h: + ENH: also store the group matches from IF( MATCHES) in + CMAKE_MATCH_(0..9) + + Alex + +2007-08-29 11:30 king + + * Source/cmDependsFortran.cxx: BUG: Do not write symbolic make + dependencies into depends.internal. + +2007-08-29 10:12 alex + + * Source/: cmExtraCodeBlocksGenerator.cxx, + cmExtraCodeBlocksGenerator.h: + ENH: don't hardcode gcc -put the include dirs in the project file + to enable autocompletion -prepare for nmake + + Alex + +2007-08-28 16:27 alex + + * Source/cmMakefile.cxx: + COMP: explicitely cast to int to silence warning with msvc8 + + Alex + +2007-08-28 16:19 alex + + * Modules/CMakeGenericSystem.cmake, Source/cmLocalGenerator.cxx: + ENH: add flag so a terminating slash for the link path can be + specified (needed by the Digital Mars D compiler) + + Alex + +2007-08-28 15:13 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: + STYLE: add links to docs + + Alex + +2007-08-28 13:46 alex + + * Source/CTest/cmCTestGenericHandler.cxx: + STYLE: fix typo + + Alex + +2007-08-28 11:02 alex + + * CMakeLists.txt: + COMP: enable RPATH if any of the CMAKE_USE_SYSTEM_XXX variables + is enabled or if the curses library is neither in /lib nor in + /usr/lib . This makes it build on NetBSD. For more comments see + CMakeLists.txt + + Alex + +2007-08-28 10:59 alex + + * Tests/SourceGroups/: CMakeLists.txt, main.c: + COMP: enable ANSI C, this should make it work with the HP-UX + compiler + + Alex + +2007-08-28 10:52 alex + + * Modules/: CheckCSourceRuns.cmake, CheckCXXSourceRuns.cmake: + ENH: use the same CMAKE_SKIP_RPATH setting in + CHECK_C/CXX_SOURCE_RUNS as in the main project. I think it + doesn't make sense if a project disables RPATH, uses + CHECK_C_SOURCE_RUNS() to see if something is able to run, and + this succeeds because it has been built with RPATH, but an + executable built within the project won't be able to run since it + has been built without RPATH. + + Alex + +2007-08-28 08:36 alex + + * Tests/SourceGroups/main.c: + COMP: maybe it compiles this way with the HP-UX compiler + + Alex + +2007-08-27 23:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-27 17:05 alex + + * Source/: cmLocalVisualStudioGenerator.cxx, + cmLocalVisualStudioGenerator.h: BUG: fix #5326: source files with + the same name in different groups lead to colliding object file + names + + Alex + +2007-08-27 16:05 alex + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: + ENH: add test for installing a header marked as PUBLIC_HEADER of + a library + + Alex + +2007-08-27 16:04 alex + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmInstallCommand.cxx, cmInstallCommand.h, + cmInstallExportGenerator.cxx, cmInstallExportGenerator.h: + ENH: add install files generators for targets which have + PUBLIC_HEADER, PRIVATE_HEADER or RESOURCE_FILES property, use the + destination for the public headers as include directory property + for exported libraries + + Alex + +2007-08-27 15:15 alex + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: + COMP: add a test for exporting and importing targets + + Alex + +2007-08-27 14:44 alex + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: + COMP: the SimpleInstall test also succeeds on the Mac, so maybe + Andys comment is not valid anymore + + Alex + +2007-08-27 14:17 alex + + * Tests/: CMakeLists.txt, SourceGroups/CMakeLists.txt: + ENH: add the source_group() demo to the tests + + Alex + +2007-08-27 13:23 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: + COMP: disable nmake support until somebody tests it + + Alex + +2007-08-27 09:01 alex + + * Modules/FindCurses.cmake, Source/CursesDialog/CMakeLists.txt, + Source/CursesDialog/ccmake.cxx, + Source/CursesDialog/cmCursesStandardIncludes.h, + Source/CursesDialog/form/CMakeLists.txt, + Source/CursesDialog/form/cmFormConfigure.h.in, + Source/CursesDialog/form/form.h: + COMP: make it build on NetBSD, which has separate curses and + ncurses, so it has to be detected that curses isn't good enough, + but ncurses is, and that ncurses.h instead of curses.h is + included + + Alex + +2007-08-27 08:49 alex + + * Source/cmGlobalKdevelopGenerator.cxx: + COMP: remove unused variable + + Alex + +2007-08-26 23:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-26 19:27 alex + + * Source/: cmGlobalKdevelopGenerator.cxx, + cmGlobalKdevelopGenerator.h: + ENH: add all subdirs of the project to the kdevelop blacklist, so + kdevelop doesn't watch these dirs for added or remved files + everytime it is started + + Alex + +2007-08-26 03:29 alex + + * Modules/FindKDE4.cmake: + BUG: KDEDIRS contains the kde install locations, not the binary + dirs, so make KDEDIRS actually work in FindKDE4.cmake + + Alex + +2007-08-26 03:17 alex + + * Source/: cmMakefile.cxx, cmMakefile.h, cmSourceGroupCommand.cxx: + COMP: parent is not used anymore with this patch, since now the + name is given as a vector of components + + Alex + +2007-08-26 02:42 alex + + * Modules/FindPkgConfig.cmake: + STYLE: fix typo + + Alex + +2007-08-25 23:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-24 23:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-24 14:39 alex + + * Tests/SourceGroups/: CMakeLists.txt, baz.c, main.c: BUG: demo + (not really test) for the source_group() command + + Alex + +2007-08-24 14:27 alex + + * Source/: cmInstallCommand.cxx, cmInstallCommandArguments.cxx, + cmInstallCommandArguments.h: + STYLE: fix MSVC warnings by making the cmCommandArgumentsHelper a + member of cmInstallCommandArguments instead of deriving from it + + Alex + +2007-08-24 14:21 alex + + * Source/: cmMakefile.cxx, cmMakefile.h, cmSourceGroup.cxx, + cmSourceGroupCommand.cxx: BUG: fix #4057 (which had several + duplicates): handle recursivew source groups better, i.e. + multiple sourcegroups with the same end component work now + + Alex + +2007-08-24 13:30 david.cole + + * Source/cmInstallCommand.cxx, Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, Source/cmTarget.h, + Tests/CMakeLists.txt, Tests/BundleTest/CMakeLists.txt, + Tests/BundleTest/BundleSubDir/CMakeLists.txt, + Tests/Framework/CMakeLists.txt: ENH: Add InstallNameFixupPath to + support installing built frameworks on the Mac. Change + Application to Applications in the BundleTest. Also correct small + typo (tcl->Tcl) noted in bug 4572. + +2007-08-24 10:58 alex + + * Source/cmSourceGroupCommand.cxx: BUG: handle source_group names + which consist only of the delimiter the same was as empty source + group names + + Alex + +2007-08-24 10:39 alex + + * Tests/SourceGroups/: CMakeLists.txt, bar.c, foo.c, main.c, + sub1/foo.c, sub1/foobar.c: + ENH: add test for source_group + + Alex + +2007-08-24 08:55 alex + + * Source/cmInstallCommand.cxx: + ENH: use cmCommandArgumentHelper for INSTALL(TARGETS, FILES, + PROGRAMS, EXPORTS), saves a lot of code. INSTALL(DIRECTORY) is + still done the old way, since this seems to be quite complicated + -for INSTALL(TARGETS ): also parse PUBLIC_HEADER, PRIVATE_HEADER, + RESOURCE + + Alex + +2007-08-24 08:40 alex + + * Modules/CMakeForceCompiler.cmake: + STYLE: fix typo in the docs + + Alex + +2007-08-23 23:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-23 16:14 alex + + * Source/: cmCommands.cxx, cmInstallCommandArguments.cxx, + cmInstallCommandArguments.h: + ENH: class for parsing the arguments for INSTALL() + + Alex + +2007-08-23 16:13 alex + + * Source/: cmCommandArgumentsHelper.cxx, + cmCommandArgumentsHelper.h: + ENH: add support for a default value, fix case when there is no + item except the own group + + Alex + +2007-08-22 23:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-22 11:32 david.cole + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmInstallCommand.cxx, cmInstallExportGenerator.cxx, + cmInstallExportGenerator.h: ENH: Handle FRAMEWORK and BUNDLE + arguments in the INSTALL TARGETS command. Work in progress... + More to come. + +2007-08-22 09:25 alex + + * Source/kwsys/RegularExpression.hxx.in: + BUG: if there is no match, don't construct the stl string from a + NULL pointer + + Alex + +2007-08-21 23:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-21 16:51 alex + + * Modules/UseQt4.cmake: + ENH: support QtScript + + Alex + +2007-08-21 16:50 alex + + * Modules/FindQt4.cmake: + ENH: support QtScript (since Qt 4.3), #4632 + + Alex + +2007-08-21 16:22 alex + + * Source/cmLocalGenerator.cxx: + STYLE: more space in the cmake_install.cmake script (easier to + read) + + Alex + +2007-08-21 16:21 alex + + * Source/CMakeLists.txt: + COMP: make it build on Linux + + Alex + +2007-08-21 15:30 alex + + * Source/kwsys/Glob.cxx: + BUG: fix segfault if FindFiles() is called without actual match + pattern (e.g. FILE(GLOB /usr/include) instead of FILE(GLOB + /usr/include/* ) #4620 + + Alex + +2007-08-21 13:47 alex + + * Source/cmGlobalKdevelopGenerator.cxx: + ENH: also check for .hpp and .cxx files + + Alex + +2007-08-21 12:34 alex + + * Source/cmStringCommand.h: + COMP: header was missing... + + Alex + +2007-08-21 12:31 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: fix leak + +2007-08-21 11:30 alex + + * Source/cmStringCommand.cxx: + ENH: store the matches for paren-delimited subexpression in + CMAKE_MATCH_[0..9] variables, so to get multiple subexpressions + from one string STRING(REGEX MATCH) has to be executed only once + + Alex + +2007-08-21 10:56 alex + + * Source/cmStringCommand.h: + STYLE: fix documentation for STRING(REPLACE) #5536 + + Alex + +2007-08-20 23:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-20 16:59 alex + + * Source/: cmFindLibraryCommand.cxx, cmInstallGenerator.cxx, + cmInstallTargetGenerator.cxx: + STYLE: add some newlines to cmake_install.cmake, so it's easier + to read -move the array behind the if, it's unused before it + + Alex + +2007-08-20 11:03 david.cole + + * Source/cmGlobalXCodeGenerator.cxx: STYLE: Fix line length style + errors introduced last week. + +2007-08-20 08:49 alex + + * Source/cmFindPackageCommand.cxx: + ENH: also process "~" and paths relative to + CMAKE_CURRENT_SOURCE_DIR in Foo_DIR + + Alex + +2007-08-19 23:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-18 23:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-17 23:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-17 10:41 alex + + * Modules/Platform/BlueGeneL.cmake: + COMP: also use -Wl,-relax and -lc -lnss etc. when using the IBM + compiler + + Alex + +2007-08-17 10:14 alex + + * Source/cmGlobalGenerator.cxx: + COMP: include windows.h first, as it is done in the other source + files + + Alex + +2007-08-17 10:05 alex + + * Source/: cmExtraEclipseCDT4Generator.cxx, + cmExtraEclipseCDT4Generator.h: + ENH: patch from Miguel - cleaning up a bit: static helper + functions, remove unused scanner profiles, remove unused + variables, etc. - correct entry in .project file - + converts the make command and other paths obtained from cygwin + cmake to windows style paths - provide environment setup for + compiling with nmake - create linked resources and path entries + for executable/library_output_path's not subdirs of binary path - + fixes incorrect exclusions of output dirs when named the same as + source dir - excludes the CMakeFiles subdirs from the directories + to scan for output targets - removes possible redundant entries + in - adds the all and preinstall targets + to the target list - removes the linked resources for non + out-of-source builds and conflicting dirs + + Alex + +2007-08-17 09:33 alex + + * Source/CPack/: cmCPackRPMGenerator.cxx, cmCPackRPMGenerator.h: + STYLE: InitializeInternal() is unused + + Alex + +2007-08-17 09:13 alex + + * Modules/CPackRPM.cmake, Source/CPack/cmCPackRPMGenerator.cxx, + Source/CPack/cmCPackRPMGenerator.h: + ENH: patch from Eric Noulard for an RPM package generator It + seems rpmbuild can't handle paths with spaces, it complains that + Buildroot takes only one tag (or something like this), quoting + and escaping don't seem to help. + + Alex + +2007-08-17 09:00 hoffman + + * Modules/Platform/Darwin.cmake: ENH: use the correct flag for the + linker + +2007-08-16 23:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-16 16:50 alex + + * Source/cmGlobalGenerator.cxx: COMP: quick windows name mangling + fix (otherwise the compiler complains about + cmMakefile::GetCurrentDirectoryA(), which doesn't exist) + + Alex + +2007-08-16 15:33 alex + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: + ENH: move the code for the NOTFOUND checking into its own + function, so Configure() gets easier to overview -improve the + error message, now it also says in which directories and for + which targets the missing variables are used -minor speedup: the + include directories don't have to be checked per target, per + directory is enough + + Alex + +2007-08-16 15:03 alex + + * Modules/FindPythonLibs.cmake: + STYLE: this wasn't intended to be committed + + Alex + +2007-08-16 15:02 alex + + * Modules/: FindPythonLibs.cmake, Platform/BlueGeneL.cmake: + ENH: add -Wl,-relax to the default linker flags for BlueGene, + otherwise you can get "relocation truncated to fit" errors + + Alex + +2007-08-16 10:14 king + + * DartLocal.conf.in: ENH: Added dash1win98 expected nightly. + +2007-08-16 09:22 hoffman + + * Modules/Platform/Darwin.cmake: ENH: make sure osx searches static + and shared libs like other platforms + +2007-08-16 08:37 alex + + * Modules/Platform/Generic-SDCC-C.cmake: + COMP: fix arguments + + Alex + +2007-08-16 07:38 malaterre + + * Source/kwsys/: Directory.hxx.in, Glob.hxx.in: COMP: Directory and + Glob have pointer data members + +2007-08-15 23:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-15 14:26 alex + + * Modules/: CMakeDetermineSystem.cmake, CMakeFindBinUtils.cmake, + CMakeSystem.cmake.in, CMakeSystemWithToolchainFile.cmake.in: + STYLE: don't use an extra file to generate CMakeSystem.cmake but + instead configure the toolchain file into it if required -also + search for nm, objdump and objcpy, so these can be used in macros + + Alex + +2007-08-15 14:22 alex + + * Modules/Platform/Generic-SDCC-C.cmake: + STYLE: explicitely set default options for sdcc, so it is visible + for which processor it currently compiles, use --out-fmt-ihx to + enforce .ihx files + + Alex + +2007-08-15 11:38 david.cole + + * Source/kwsys/: CMakeLists.txt, Configure.h.in: COMP: Second try + getting rid of Microsoft deprecation warnings. This time tested + from KWStyle with vs8 to make sure the warnings are really gone. + Remove the deprecation defs from CMakeLists and guard the defs in + the header so we do not redefine them if they are already + defined. + +2007-08-15 10:26 alex + + * Source/cmListCommand.cxx, Source/cmListCommand.h, + Tests/CMakeTests/ListTest.cmake.in: + ENH: change LIST(CONTAINS ...) TO LIST(FIND ...), which returns + the index and which is more useful, because then you can also + access the item behind the one you were looking, useful for + writing macros with optional keywords with parameters + + Alex + +2007-08-15 09:43 alex + + * CMakeLists.txt, Modules/FindCurses.cmake: + COMP: ccmake requires ncurses, according to Berk and since it + doesn't build on NetBSD where there are separate curses and + ncurses libraries, and where the curses library is found, which + doesn't work for ccmake while the existing ncurses library would + work. With this change it should be possible to test whether the + found curses lib provides ncurses functionality. + + Alex + +2007-08-15 09:25 david.cole + + * Source/kwsys/Configure.h.in: COMP: Suppress Microsoft deprecation + warnings when building kwsys .c and .cxx files. This way, other + projects that include kwsys will not see the warnings in kwsys .c + and .cxx files, but they can still see the warnings in their own + source files if they want to... + +2007-08-15 08:47 alex + + * Source/CPack/cmCPackDebGenerator.cxx: + COMP: fix warning about comparison signed - unsigned + + Alex + +2007-08-15 08:28 alex + + * Source/CPack/cmCPackDebGenerator.cxx: + COMP: fix build on HPUX, snprintf apparently doesn't work there + + Alex + +2007-08-14 23:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-14 14:12 david.cole + + * Source/: cmMakefileLibraryTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.h: ENH: Improve framework + support in the makefile generator to match the support just added + to the Xcode generator. BUG: Remove spurious warning and + eliminate empty Libraries subdir inside built framework. + +2007-08-14 11:58 alex + + * Source/cmUtilitySourceCommand.h: + STYLE: document the behaviour of UTILITY_SOURCE in cross + compiling mode + + Alex + +2007-08-14 11:45 david.cole + + * Source/cmGlobalXCode21Generator.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalXCodeGenerator.cxx, Source/cmXCode21Object.cxx, + Source/cmXCode21Object.h, Source/cmXCodeObject.cxx, + Tests/Framework/CMakeLists.txt, Tests/Framework/fooBoth.h, + Tests/Framework/fooNeither.h, Tests/Framework/fooPrivate.h, + Tests/Framework/fooPublic.h, Tests/Framework/test.lua: ENH: + Improvements to the Xcode generator. Build frameworks using + native Copy Headers and Copy Bundle Resources phases. Fix bugs: + eliminate folders with no names, ensure source files show up in + multiple targets, remove empty utility targets from Sources + subtrees, ensure that fileRefs only show up once in each grouping + folder. + +2007-08-14 10:27 alex + + * Source/cmSystemTools.cxx: + COMP: patch from Mathieu: fix warning about unused variables in + bootstrap mode + + Alex + +2007-08-14 10:25 alex + + * Source/CPack/cmCPackDebGenerator.cxx: + STYLE: another patch from Mathieu with some comments + + Alex + +2007-08-14 10:20 alex + + * Modules/CPackDeb.cmake: + BUG: fix typo + + Alex + +2007-08-14 08:40 alex + + * Modules/CPackDeb.cmake, Source/CMakeLists.txt, + Source/CPack/cmCPackDebGenerator.cxx, + Source/CPack/cmCPackDebGenerator.h: + ENH: deb generator: don't use the system provided ar, but do it + yourself using the code from OpenBSD ar COMP: don't build all + package generators on all platforms + + Alex + +2007-08-13 23:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-13 11:04 alex + + * Modules/TestBigEndian.cmake: + ENH: for universal binaries return the endianess based on the + processor + + Alex + +2007-08-12 23:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-12 21:08 alex + + * Modules/TestBigEndian.cmake: + COMP: turn error into warning for now + + Alex + +2007-08-11 23:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-10 23:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-10 16:28 hoffman + + * Source/CTest/cmCTestMemCheckHandler.cxx: ENH: fix output and + valgrind truncation issue + +2007-08-10 15:02 alex + + * Source/cmUtilitySourceCommand.cxx: + ENH: print a warning if UTILITY_SOURCE is used in cross compiling + mode -make it possible to preload the cache with the command in + cross compiling mode + + Alex + +2007-08-10 13:14 alex + + * Modules/: CheckTypeSize.c.in, CheckTypeSize.cmake, + TestBigEndian.c, TestBigEndian.cmake, TestEndianess.c.in: + STYLE: remove unused CheckTypeSize.c.in ENH: change test for + endianess from TRY_RUN() to TRY_COMPILE() by testing the binary + image of a 16bit integer array, tested on Linux x86, Intel Mac + and Sun (big endian) + + Alex + +2007-08-10 13:02 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h: BUG: Fixed passing of + configuration names to GetRealDependency and ConstructScript. + Added GetConfigName helper method to do this. + +2007-08-10 11:37 alex + + * Modules/FindOpenGL.cmake: + STYLE: remove unnecessary default search paths + + Alex + +2007-08-10 11:15 hoffman + + * Source/cmake.cxx: ENH: fix memory leak + +2007-08-10 09:20 alex + + * Modules/CMakeDetermineCompilerId.cmake: + BUG: fix compiler id test on cygwin + + Alex + +2007-08-10 09:07 alex + + * Source/cmMakefile.cxx, Modules/CMakeDetermineSystem.cmake, + Modules/CMakeSystemSpecificInformation.cmake: + ENH: set UNIX, WIN32 and APPLE in cmMakefile.cxx as it was + before, so it works for scripts, then reset them in + CMakeSystemSpecificInformation.cxx, so the platform modules can + set them again for the target system + + Alex + +2007-08-10 08:54 alex + + * Modules/Platform/: AIX.cmake, BSDOS.cmake, BeOS.cmake, + MP-RAS.cmake, QNX.cmake, RISCos.cmake: + BUG: also include UnixPaths.cmake on these platforms, this also + sets UNIX to 1 + + Alex + +2007-08-09 23:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-09 16:54 alex + + * Tests/CMakeLists.txt: + STYLE: mark these variables as advanced, they are only used for + testing whether the tests should be added or not + + Alex + +2007-08-09 16:47 alex + + * Modules/CMakeGenericSystem.cmake: + BUG: use CMAKE_HOST_UNIX here instead of UNIX + + Alex + +2007-08-09 15:57 alex + + * Source/: cmExportCommand.cxx, cmGlobalMSYSMakefileGenerator.h, + cmGlobalMinGWMakefileGenerator.h, + cmGlobalNMakeMakefileGenerator.h, cmGlobalWatcomWMakeGenerator.h: + + STYLE: use correct case for cmGlobalUnixMakefileGenerator3 make + export() work with spaces in the path + + Alex + +2007-08-09 15:31 hoffman + + * Source/cmSetSourceFilesPropertiesCommand.h: ENH: merge in doc + change from head + +2007-08-09 14:55 alex + + * Utilities/cmcurl/: CMakeLists.txt, CMake/CurlTests.c, + CMake/OtherTests.cmake: + STYLE: HAVE_LONG_LONG_CONST was completely unused here (it was + used in the (unused) copy of curl under CMake/CTest/Curl/ ) + + Alex + +2007-08-09 14:45 alex + + * Modules/CMakeDetermineCompilerId.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/Platform/BeOS.cmake, Modules/Platform/CYGWIN.cmake, + Modules/Platform/Darwin.cmake, Modules/Platform/QNX.cmake, + Modules/Platform/UnixPaths.cmake, Modules/Platform/Windows.cmake, + Source/cmMakefile.cxx: + ENH: UNIX, CYGWIN, WIN32, APPLE, QNXNTO and BEOS are not longer + set in cmMakefile.cxx, but now in the platform files and are now + valid for the target platform, not the host platform. New + variables CMAKE_HOST_WIN32, CMAKE_HOST_UNIX, CMAKE_HOST_APPLE and + CMAKE_HOST_CYGWIN have been added in cmMakefile.cxx (...and have + now to be used in all cmake files which are executed before + CMakeSystemSpecificInformation.cmake is loaded). For + compatibility the old set is set to the new one in + CMakeDetermineSystem.cmake and reset before the system platform + files are loaded, so custom language or compiler modules which + use these should still work. + + Alex + +2007-08-09 14:26 alex + + * Source/: CMakeLists.txt, CTest/CMakeLists.txt: + COMP: this copy of curl is unused, the one in Utilities/cmcurl/ + is used + + Alex + +2007-08-09 11:05 alex + + * Modules/CMakeSystemWithToolchainFile.cmake.in: + BUG: work with spaces in the path + + Alex + +2007-08-09 09:57 alex + + * Tests/CMakeLists.txt: + COMP: lets see if this sets the timeout back to 5400 + + Alex + +2007-08-09 09:03 alex + + * Source/kwsys/CommandLineArguments.hxx.in: + STYLE: fix typo + + Alex + +2007-08-09 08:49 alex + + * Source/cmTarget.cxx: + STYLE: fix typo + + Alex + +2007-08-09 08:48 alex + + * Source/cmDocumentation.cxx: + BUG: properties and module names are case sensitive + + Alex + +2007-08-08 23:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-08 15:44 alex + + * Source/CPack/cmCPackRPMGenerator.cxx: + COMP: silence warnings + + Alex + +2007-08-08 14:44 alex + + * Source/CPack/cmCPackGenerators.cxx: + BUG: register the rpm generator for RPM + + Alex + +2007-08-08 14:18 alex + + * Modules/CPackDeb.cmake, Source/CPack/cmCPackDebGenerator.cxx: + ENH: patch from Mathieu: more entries in the debian control file + + Alex + +2007-08-08 13:05 alex + + * Source/cmFindPackageCommand.cxx, + Tests/FindPackageTest/CMakeLists.txt: + ENH: remove the watch for the upper case variable name, it breaks + the feature summary, which needs to check for both the upper case + and original case _FOUND variables + + Alex + +2007-08-08 11:33 alex + + * Source/CMakeLists.txt, Modules/CPack.cmake, + Modules/CPackRPM.cmake, Source/CPack/cmCPackGenerators.cxx, + Source/CPack/cmCPackRPMGenerator.cxx, + Source/CPack/cmCPackRPMGenerator.h: + ENH: add empty RPM package generator, Eric Noulard wants to work + on it + + Alex + +2007-08-08 10:05 alex + + * Tests/CMakeLists.txt: + COMP: change the order of the tests, so maybe the timeout works + + Alex + +2007-08-08 09:32 alex + + * Tests/CMakeLists.txt: + ENH: also specify the C++ compiler for mingw + + Alex + +2007-08-08 08:41 malaterre + + * Source/kwsys/CommandLineArguments.cxx: ENH: Remove extra ; + +2007-08-07 23:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-07 18:02 alex + + * Tests/FindPackageTest/CMakeLists.txt: + BUG: disable this test temporarily + + Alex + +2007-08-07 16:26 alex + + * Source/cmFindPackageCommand.h: + COMP: also commit the header... + + Alex + +2007-08-07 15:42 alex + + * Modules/Dart.cmake: + STYLE: find Dart quietly (so it doesn't go in the feature log) + + Alex + +2007-08-07 15:41 alex + + * Modules/FeatureSummary.cmake, Source/cmFindPackageCommand.cxx, + Source/cmake.cxx: + ENH: add global properties for collecting enabled/disabled + features during the cmake run and add macros + print_enabled/disabled_features() and set_feature_info(), so + projects can get a nice overview at the end of the cmake run what + has been found and what hasn't FIND_PACKAGE() automatically adds + the packages to these global properties, except when used with + QUIET Maybe this can also be useful for packagers to find out + dependencies of projects. + + Alex + +2007-08-07 15:36 hoffman + + * DartLocal.conf.in: ENH: change ibm machine again + +2007-08-07 15:09 alex + + * Source/cmGlobalGenerator.cxx: + STYLE: I think the comment (and the book) were wrong about the + naming of this file + + Alex + +2007-08-07 13:57 king + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmMakefileTargetGenerator.cxx: + ENH: Replaced dependency integrity map with an explicit map from + object file to source file for each language in each target. + This simplifies creation of implicit dependency scanning rules + and allows more than one object file in a target to start + dependency scanning with the same source file. + +2007-08-07 10:13 alex + + * Tests/CMakeLists.txt: + BUG: the test for chicken should be named Chicken, not plplot + + Alex + +2007-08-07 00:00 alex + + * Source/cmExtraCodeBlocksGenerator.cxx: + ENH: don't create a CodeBlocks workspace, the CodeBlocks projects + cover everything what's needed + + Alex + +2007-08-06 23:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-06 22:08 alex + + * Modules/FindPackageHandleStandardArgs.cmake: + STYLE: fix typo + + Alex + +2007-08-06 17:09 hoffman + + * Source/cmCTest.cxx: ENH: change error to warning so ctesttest3 + passes + +2007-08-06 14:45 alex + + * Tests/CMakeLists.txt: + ENH: add plplot and Chicken Scheme build tests + + Alex + +2007-08-06 13:31 alex + + * Source/CPack/cmCPackDebGenerator.cxx: + ENH: another fix for the deb generator by Mathieu + + Alex + +2007-08-06 13:24 alex + + * Source/: cmExtraCodeBlocksGenerator.cxx, + cmExtraCodeBlocksGenerator.h, cmExtraEclipseCDT4Generator.cxx: + STYLE: fix line lengths + + Alex + +2007-08-06 11:02 alex + + * Modules/: FindMPI.cmake, FindThreads.cmake: + STYLE: use FIND_PACKAGE_HANDLE_STANDARD_ARGS() also in + FindMPI.cmake -remove unnecessary ELSE() in FindThreads.cmake + + Alex + +2007-08-06 10:42 hoffman + + * Modules/FLTKCompatibility.cmake: ENH: threads used to include + this + +2007-08-06 09:03 alex + + * Source/CPack/cmCPackDebGenerator.cxx: + BUG: patch from Mathieu: the md5sums were not correct + + Alex + +2007-08-05 23:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-04 23:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-03 23:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-03 16:44 hoffman + + * Source/CTest/cmCTestGenericHandler.cxx: ENH: make sure there is + an error and notify user if nightly start time not set + +2007-08-03 16:44 hoffman + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: show files as + untested if no lines are covered + +2007-08-03 16:42 hoffman + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: fatal error if cvs + update fails + +2007-08-03 16:41 hoffman + + * Source/cmCTest.cxx: ENH: add a check to make sure nightly start + time was specified + +2007-08-03 16:35 hoffman + + * Source/CTest/cmCTestMemCheckHandler.cxx: ENH: add another + valgrind error type + +2007-08-03 16:31 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, cmInstallCommand.h, + cmInstallTargetGenerator.cxx, cmLocalUnixMakefileGenerator3.cxx, + cmTarget.cxx: ENH: Added warning when an install rule is created + from an EXCLUDE_FROM_ALL target. Added a foo/preinstall version + of targets that need relinking so that exclude-from-all targets + can be manually relinked for installation. + +2007-08-03 15:44 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, cmMakefile.cxx, cmTarget.cxx: + BUG: Target exclusion-from-all tests should always use the root + local generator associated with the all target being tested. + +2007-08-03 15:43 seanmcbride + + * Source/kwsys/CommandLineArguments.cxx: COMP: fixed compiler + warning in sprintf usage + +2007-08-03 15:26 alex + + * Modules/CPack.cmake, Modules/CPackDeb.cmake, + Source/CPack/cmCPackGenericGenerator.cxx, Source/CPack/cpack.cxx: + + ENH: better error messages from the debian package generator + -don't display the cpack help if a generator failed with some + problem -check for cmSystemTools::GetErrorOccuredFlag() + + Alex + +2007-08-03 09:39 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: ENH: Added + cmTarget::GetLanguages method to centralize computation of the + list of languages compiled in a target. Transformed + NeedRequiresStep to use it. + +2007-08-02 23:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-02 15:48 alex + + * Modules/FindPythonLibs.cmake: + ENH: make the python modules usable for C and C++ and only write + the header if it has changed + + Alex + +2007-08-02 14:28 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: BUG: Removing accidental + commit. + +2007-08-02 14:28 king + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: Quick-fix for + accidental commit. + +2007-08-02 14:23 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: ENH: Added + cmTarget::GetLanguages method to centralize computation of the + list of languages compiled in a target. + +2007-08-02 13:38 king + + * Source/: cmMakefileTargetGenerator.cxx, cmTarget.cxx, cmTarget.h: + ENH: Added cmTarget::GetLanguages method to centralize + computation of the list of languages compiled in a target. + +2007-08-02 11:17 alex + + * Modules/Platform/: Windows-cl.cmake, Windows.cmake, + WindowsPaths.cmake: + ENH: use WindowsPaths.cmake on all Windows platforms, not only + for cl, makes the mingw cross compiler work out of the box and + should help mingw users on windows with a common install dir + + Alex + +2007-08-02 09:37 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx: ENH: Simplify makefile target + generator listing of object files to clean. + +2007-08-02 08:24 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: + COMP: fix warning + + Alex + +2007-08-01 23:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-08-01 17:10 alex + + * Source/: cmInstallCommand.cxx, cmTryRunCommand.cxx: + ENH: if no COMPONENT is specified, make this install item part of + the "Unspecified" component -> if no components are used at all, + no change in behaviour, if components are used completely, no + change in behaviour, since this default will be overridden + everywhere, if components where used partly, it is now possible + to install only the unspecified items (e.g. everything which + wasn't marked as "Development") + + Alex + + Alex + +2007-08-01 16:15 david.cole + + * Tests/Framework/: bar.cxx, foo.cxx: BUG: Fix test that broke on + Windows - sharing sources between SHARED and STATIC libraries + requires correct export and import decorations in the source + code... + +2007-08-01 15:25 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmLocalXCodeGenerator.cxx, + cmLocalXCodeGenerator.h: ENH: Moved GetTargetDirectory method up + to cmLocalGenerator. This provides a common interface to + something that was implemented in most local generators anyway. + +2007-08-01 14:58 alex + + * Source/: cmExtraCodeBlocksGenerator.cxx, cmake.cxx: BUG: also + offer the extra generators in CMakeSetup + + Alex + +2007-08-01 13:04 david.cole + + * Source/cmGlobalXCodeGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, Source/cmTarget.cxx, + Tests/Framework/CMakeLists.txt: BUG: Only pay attention to the + FRAMEWORK target property for SHARED library targets + +2007-08-01 11:59 alex + + * Source/cmTryRunCommand.cxx: + STYLE: some more tuning for the comment text + + Alex + +2007-08-01 11:50 alex + + * Source/cmExtraEclipseCDT4Generator.cxx: + ENH: works also with nmake, tested by Jeff + + Alex + +2007-08-01 11:39 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Do not recognize + preprocessor definition flags for the linker which has no + preprocessor but does have flags starting with /D. + +2007-08-01 11:36 king + + * Source/cmTarget.cxx: BUG: _LOCATION property should use + the config name in the directory and not $(OutDir). This + addresses bug#5363. + +2007-08-01 10:53 king + + * Source/cmGeneratedFileStream.h: COMP: Fix warning about not being + able to automatically generate a copy constructor. + +2007-08-01 10:07 alex + + * Source/kwsys/DynamicLoader.cxx: + COMP: also build the static dummy loader on Cray Catamount + + Alex + +2007-08-01 09:18 alex + + * Source/: CMakeLists.txt, cmExtraEclipseCDT4Generator.cxx, + cmExtraEclipseCDT4Generator.h, cmake.cxx: + ENH: add Eclipse CDT4 generator, patch from Miguel A. + Figueroa-Villanueva + + Alex + +2007-08-01 09:14 alex + + * Modules/Platform/Catamount.cmake: + ENH: add support for Catamount, the OS running on the compute + nodes of Cray super computers + + Alex + +2007-07-31 23:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-31 14:52 alex + + * Source/cmTryRunCommand.cxx, Tests/TryCompile/CMakeLists.txt: + ENH: add tests for check_c_source_runs(), + check_cxx_source_runs(), check_c_source_compiles() and + check_cxx_source_compiles() -TRY_RUN in crosscompiling mode: copy + the created executables to CMAKE_BINARY_DIR so the user can run + them manually on the target + + Alex + +2007-07-31 13:30 alex + + * Modules/: CheckCSourceRuns.cmake, CheckCXXSourceRuns.cmake, + FindThreads.cmake: + STYLE: don't use FIND_INCLUDE_FILE() but only + FIND_INCLUDE_FILES() in FindThreads.h + + BUG: improve CheckC(XX)SourceRuns.cmake so that it works with + cross compiling, the return value has to go in the cache but + shouldn't overwrite the actual return value, and it should go + only in the cache if we have a result from try_run() otherwise we + won't get here again if we have a result later on + + Alex + +2007-07-31 11:23 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix DLL and DEF + being lost and add real support for /DEF: /DLL does not have an + entry so just let it pass to advanced command line + +2007-07-30 23:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-30 22:51 hoffman + + * Source/: cmSystemTools.cxx, CPack/cmCPackTGZGenerator.cxx, + CPack/cmCPackTarCompressGenerator.cxx: ENH: use gnu tar for + cygwin + +2007-07-30 21:38 hoffman + + * Source/cmXMLParser.cxx: STYLE: fix warning + +2007-07-30 15:52 alex + + * Source/kwsys/DynamicLoader.cxx: + COMP: add a dynamic loader for systems which don't support + dynamic loading, so this is handled in kwsys and not every + project using this has to care for it + + Alex + +2007-07-30 14:46 alex + + * Source/cmTryRunCommand.cxx: + ENH: FORCE the values in the cache, otherwise the file is useless + + Alex + +2007-07-29 23:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-28 23:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-28 00:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-27 13:12 alex + + * Source/CPack/cmCPackDebGenerator.cxx: + STYLE: fix line length + + Alex + +2007-07-27 11:57 alex + + * Modules/Platform/: UnixPaths.cmake, WindowsPaths.cmake: + ENH: -add /usr/openwin/include and /usr/openwin/lib to the + default search paths -add + /${CMAKE_INSTALL_PREFIX}/(lib|bin|include) to the default cmake + search paths -> this should help users who install stuff in their + home + + Alex + +2007-07-27 10:55 hoffman + + * Source/: cmCommandArgumentLexer.h, cmCommandArgumentParser.cxx, + cmCommandArgumentParserTokens.h, cmConfigure.cmake.h.in, + cmCoreTryCompile.cxx, cmDependsFortranLexer.h, + cmDependsJavaLexer.h, cmExprLexer.h, cmXCodeObject.cxx, + cmXCodeObject.h, cmaketest.h.in, cmakexbuild.cxx, + CPack/OSXScriptLauncher.cxx, CPack/cmCPackConfigure.h.in, + CPack/cmCPackGenerators.cxx, CPack/cmCPackZIPGenerator.cxx, + CPack/cpack.cxx, CTest/cmCTestCoverageHandler.cxx, + CTest/cmCTestMemCheckHandler.cxx: STYLE: fix some kwstyle errors + +2007-07-27 08:59 alex + + * CMakeCPack.cmake, Source/cmSetPropertiesCommand.h, + Source/cmake.cxx, Source/cmake.h, Modules/CPackDeb.cmake, + Modules/FindPythonLibs.cmake, + Source/CPack/cmCPackDebGenerator.cxx, Source/CPack/cpack.cxx, + Source/CTest/cmCTestScriptHandler.cxx: + ENH: deb generator can now generate deb packages -remove the + unscriptable commands also from the cpack cmake -use + CPACK_PACKAGE_CONTACT in CMakeCPack.cmake, it's used in the nsis + and the deb generator -make set_properties() scriptable -use a + non-const char array for adding the python modules + + Alex + +2007-07-27 04:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-26 16:38 hoffman + + * Source/CTest/cmCTestMemCheckHandler.cxx: ENH: add test output to + valgrind output and truncate output for valgrind + +2007-07-26 14:36 hoffman + + * Source/: cmXMLParser.cxx, cmXMLParser.h: ENH: fix warning on + win64 + +2007-07-26 11:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-26 08:40 alex + + * Source/: cmTryRunCommand.cxx, CPack/cmCPackGenerators.cxx, + CPack/cmCPackZIPGenerator.cxx, CPack/cpack.cxx: + STYLE: fix line lengths + + Alex + +2007-07-26 00:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-25 16:37 hoffman + + * Source/CTest/cmCTestTestHandler.cxx: ENH: fix bug with valgrind + output being truncated + +2007-07-25 15:08 alex + + * Modules/FindPythonLibs.cmake: + COMP: same as in VTK, build modules by default as shared if the + platform supports this, don't include shared modules in the + generated header + + Alex + +2007-07-25 13:08 alex + + * Source/CPack/: cmCPackDebGenerator.cxx, cmCPackGenerators.cxx: + ENH: apply patch from Mathieu which creates a deb file (not + finishsed yet) + + Alex + +2007-07-25 11:41 alex + + * Source/CPack/cmCPackDebGenerator.cxx: + COMP: silence warnings + + Alex + +2007-07-25 10:57 alex + + * Modules/CPackDeb.cmake, Source/CMakeLists.txt, Source/cmake.cxx, + Source/CPack/cmCPackDebGenerator.cxx, + Source/CPack/cmCPackDebGenerator.h, + Source/CPack/cmCPackGenerators.cxx: + ENH: add an empty debian package generator, Mathieu volunteered + to fill it :-) + + Alex + +2007-07-25 09:22 hoffman + + * Source/: cmXMLParser.cxx, cmXMLParser.h: STYLE: fix compiler + warning + +2007-07-25 04:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-24 15:55 hoffman + + * Source/cmWin32ProcessExecution.cxx: ENH: fix resource leak + +2007-07-24 15:27 hoffman + + * DartLocal.conf.in: ENH: clean up some missing dashboards + +2007-07-24 14:50 alex + + * Source/kwsys/ProcessUNIX.c: + COMP: sync with HEAD + + Alex + +2007-07-24 14:43 hoffman + + * Source/CTest/: cmCTestMemCheckHandler.cxx, + cmCTestMemCheckHandler.h, cmCTestTestHandler.h: ENH: add support + for bounds checker + +2007-07-24 14:14 alex + + * Source/kwsys/DynamicLoader.cxx: + ENH: disable dynamic loader if shared libraries are not supported + instead of hacking around it + + Alex + +2007-07-24 12:52 alex + + * Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, + Source/CPack/cmCPackZIPGenerator.cxx, + Source/CPack/cmCPackZIPGenerator.h, Modules/CPackZIP.cmake, + Modules/Platform/BlueGeneL.cmake: + ENH: add ReadListFile() to cmCPackGenericGenerator, so cmMakefile + can be private again -convert the ZIP generator to use a cmake + script instead of hardcoding everything (CPackZIP.cmake) + + Alex + +2007-07-24 10:05 hoffman + + * Source/kwsys/ProcessWin32.c: ENH: fix resource leak + +2007-07-24 10:00 alex + + * Modules/CMakeDetermineSystem.cmake, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, Source/CPack/cpack.cxx: + ENH: determine the current system also in cpack, so the search + paths are loaded Additionally the makefile in + cmCPackGenericGenerator is now protected instead of private, so + with these two changes the cpack generators should now be able to + find their tools and how to call these tools from cmake scripts, + instead of hardcoding the search order and command line (as done + e.g. in cmCPackZIPGenerator.cxx) + + Alex + +2007-07-24 02:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-23 13:13 alex + + * Source/cmTryRunCommand.cxx: + STYLE: put a lot of comments into the generated cmake-cache + preloading file to aid the user with using it + + Alex + +2007-07-23 11:22 alex + + * Modules/FindPythonInterp.cmake: + STYLE: mark the variable as advanced + + Alex + +2007-07-23 10:47 alex + + * Source/cmTryRunCommand.cxx: + ENH: try to create a file which can be used for presetting the + cache values of the TRY_RUN() results when crosscompiling + + Alex + +2007-07-23 09:49 alex + + * Modules/: FindASPELL.cmake, FindBZip2.cmake, FindBoost.cmake, + FindCURL.cmake, FindCurses.cmake, FindEXPAT.cmake, + FindGnuplot.cmake, FindHSPELL.cmake, FindJPEG.cmake, + FindJasper.cmake, FindLibXml2.cmake, FindLibXslt.cmake, + FindMPEG.cmake, FindMPEG2.cmake, FindMotif.cmake, + FindOpenAL.cmake, FindPNG.cmake, + FindPackageHandleStandardArgs.cmake, FindPerl.cmake, + FindPerlLibs.cmake, FindPhysFS.cmake, FindPythonInterp.cmake, + FindPythonLibs.cmake, FindSDL.cmake, FindTCL.cmake, + FindTIFF.cmake, FindTclsh.cmake, FindWget.cmake, FindZLIB.cmake: + ENH: add second failure message parameter to + FIND_PACKAGE_HANDLE_STANDARD_ARGS(), so cmake modules can specify + their own better failure messages. If the default is ok use + "DEFAULT_MSG". Do this also for FindBoost.cmake (#5349) + + Alex + +2007-07-23 09:06 alex + + * Source/: cmLocalGenerator.cxx, kwsys/SystemTools.cxx: + PERF: micro optimization: the (*pos1) && (*pos1=='/') were + redundant, and hasDoubleSlash is false in most cases, so in most + cases 3 comparisons were done, now only one + + Alex + +2007-07-23 00:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-21 23:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-20 22:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-20 16:31 alex + + * Utilities/KWStyle/CMakeFiles.txt.in: + ENH: add quotes around the file names, so kwstyle can handle it + if there are spaces in the path + + Alex + +2007-07-20 14:08 hoffman + + * Source/cmCommandArgumentParser.cxx, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: user more memory + for parser and add test to complex that sets a huge string + +2007-07-20 13:03 hoffman + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: fix div by 0 + +2007-07-20 12:25 hoffman + + * Utilities/cmcurl/CMake/OtherTests.cmake: ENH: change order so + windows functions are found first since try compile is slow on + windows + +2007-07-20 10:07 hoffman + + * DartLocal.conf.in: ENH: change name + +2007-07-20 08:48 alex + + * Source/cmMakefile.cxx: + STYLE: even more output when --debug-output is used + + Alex + +2007-07-20 08:36 alex + + * Source/: cmDocumentation.cxx, cmExportCommand.h, + cmExtraCodeBlocksGenerator.cxx, cmExtraCodeBlocksGenerator.h, + cmFileCommand.cxx, cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmHexFileConverter.cxx, cmIncludeExternalMSProjectCommand.cxx, + cmMakefile.cxx, cmMakefile.h, cmTryCompileCommand.h, + cmTryRunCommand.h, cmake.h, CTest/cmCTestScriptHandler.cxx: + STYLE: fix line lengths + + Alex + +2007-07-19 21:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-19 15:39 alex + + * Modules/CPack.STGZ_Header.sh.in: + ENH: try if tail works with the -n + syntax, if not use + only "+" (GNU tail warns that this is deprecated) + + Alex + +2007-07-19 13:40 alex + + * Modules/FindTCL.cmake: + ENH: add TK_FOUND and TCLTK_FOUND TCL_FOUND is now TRUE if Tcl + was found, before it was only TRUE if Tcl and Tk were found + + Alex + +2007-07-19 11:59 alex + + * Modules/FindPythonLibs.cmake: + BUG: fix typo + + Alex + +2007-07-19 11:47 alex + + * Modules/FindPythonLibs.cmake: + ENH: make the list of modules global + + Alex + +2007-07-19 11:13 alex + + * Source/: cmFindPackageCommand.h, cmMakefile.cxx, cmakemain.cxx, + CPack/cpack.cxx: + STYLE: fix some typos, nicer debug output + + Alex + +2007-07-19 10:20 alex + + * Modules/FindPythonLibs.cmake: + ENH: only load the static modules in the LoadAll function + + Alex + +2007-07-19 09:42 alex + + * Modules/: CPack.STGZ_Header.sh.in, FindPHP4.cmake: + BUG: fix #5329, if /usr/xpg4/bin/tail exists, use this one -> on + SunOS /usr/bin/tail doesn't understand the -n + syntax + -remove standard searchd dirs from FindPHP4.cmake + + Alex + +2007-07-19 09:00 alex + + * Modules/: FindASPELL.cmake, FindCURL.cmake, FindCurses.cmake, + FindDCMTK.cmake, FindEXPAT.cmake, FindGLUT.cmake, FindGTK.cmake, + FindGnuplot.cmake, FindHSPELL.cmake, FindMPEG.cmake, + FindMPEG2.cmake, FindMotif.cmake, FindPerl.cmake, + FindPhysFS.cmake, FindPike.cmake, FindPythonLibs.cmake, + FindSDL.cmake, FindTCL.cmake, FindTclsh.cmake, FindWget.cmake, + readme.txt: + ENH: use the new FIND_PACKAGE_HANDLE_STANDARD_ARGS() macro in + most of the not-too-complicated modules -remove unnecessary + default search paths used in the FIND_XXX() calls + + Alex + +2007-07-18 14:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-18 13:56 alex + + * Modules/: FindBZip2.cmake, FindCups.cmake, FindJPEG.cmake, + FindJasper.cmake, FindLibXslt.cmake, FindOpenAL.cmake, + FindPNG.cmake, FindPerlLibs.cmake, FindPythonInterp.cmake, + FindTCL.cmake, FindTIFF.cmake, FindZLIB.cmake: + ENH: use the new FIND_PACKAGE_HANDLE_STANDARD_ARGS in some of the + FindXXX modules, remove some of the extra search paths which are + also searched by default + + Alex + +2007-07-18 13:26 alex + + * Modules/: CMakeLists.txt, FindLibXml2.cmake, + FindPackageHandleStandardArgs.cmake, FindPythonLibs.cmake: + ENH: add a macro FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 + LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIR) which handles the required + and QUIET arguments and sets _FOUND + + Alex + +2007-07-18 10:52 alex + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: + ENH: if CMAKE_(C|CXX)_COMPILER is preset to a list of two + elements, use the first one as the compiler and the second one as + ARG1 for the compiler + + Alex + +2007-07-18 10:19 alex + + * Source/: CMakeLists.txt, cmExtraCodeBlocksGenerator.cxx, + cmake.cxx: + ENH: build codeblocks generator also on Windows + + Alex + +2007-07-17 13:43 hoffman + + * Source/cmAddCustomCommandCommand.h: STYLE: add more docs + +2007-07-17 13:10 alex + + * Source/cmakemain.cxx: + COMP: fix warning about unused variable + + Alex + +2007-07-17 12:01 alex + + * Source/: cmake.cxx, cmakemain.cxx: + COMP: fix build on Windows, where GetCurrentDirecty() is + redefined to GetCurrentDirectoryA() -correct return value for + md5sum + + Alex + +2007-07-17 10:44 alex + + * Source/: cmLocalGenerator.cxx, cmake.cxx, cmakemain.cxx: + STYLE: fix line lengths and add "remove -f" to the docs + + Alex + +2007-07-17 09:25 alex + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmLocalGenerator.cxx, cmMakefile.cxx, cmMessageCommand.cxx, + cmakemain.cxx: + ENH: produce a lot more output when running with --debug-output + -try to fix build error on HPUX + + Alex + +2007-07-17 08:51 alex + + * Modules/Platform/WindowsPaths.cmake: + ENH: also look in the include/, lib/ and bin/ directories in the + cmake install dir under windows, this will help e.g. people using + kdewininstaller and similar setups + + Alex + +2007-07-17 08:41 alex + + * Modules/: KDE3Macros.cmake, FindKDE3.cmake: + ENH: don't hardcode the /lib/kde3/ directory for the libtool + files, but make it adjustable and detect if libkdecore.so is a + 64bit library + + Alex + +2007-07-16 15:10 alex + + * Source/cmSystemTools.cxx: + BUG: fix bootstrapping, md5sum disabled in bootstrapping mode + + Alex + +2007-07-16 13:29 alex + + * Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt: + STYLE: remove debug output + +2007-07-16 13:26 alex + + * Source/cmMakefile.cxx, + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt: + BUG: GET_DIRECTORY_PROPERTY(INCLUDE_DIRECTORIES|LINK_DIRECTORIES) + wasn't working, for both the result was always empty, since + cmMakefile::GetProperty() recognized it as a special property, + constructed a correct return value and called + cmMakefile::SetProperty() with this list of directories, which + then didn't actually set the property, but applied it to the + internal vector of include/link directories. The following + getPropertyValue in cmMakefile::GetProperty() then still didn't + find it and returned nothing. Now for all special property the + static string output is used and its content is returned. I'm not + sure it is the right way to fix this problem but at least it + seems to work and it fixes the Paraview3 build + + Alex + +2007-07-16 10:59 hoffman + + * CMakeLists.txt, Readme.txt: ENH: final 2.4.7 commit + +2007-07-16 10:54 alex + + * Source/: cmake.cxx, cmSystemTools.h, cmSystemTools.cxx: + ENH: apply patch from Mathieu, add argument -E md5sum to compute + md5sums of files, compatible to md5sum output + + Alex + +2007-07-16 10:54 hoffman + + * Readme.txt: ENH: + +2007-07-16 10:53 hoffman + + * Readme.txt: ENH: clean up a bit + +2007-07-16 10:13 alex + + * Modules/Platform/NetBSD.cmake: + BUG: the Plugin test fails on NetBSD, let's see if this fixes it + + Alex + +2007-07-16 09:08 alex + + * Modules/Platform/UnixPaths.cmake: + ENH: also add the install base dir of the running cmake to the + search directories for the FIND_XXX() commands, for the case that + somebody has its own install tree + + Alex + +2007-07-13 12:03 alex + + * Source/cmAddLibraryCommand.cxx, Utilities/CMakeLists.txt: + STYLE: better error message, name the new manpages cmakecommands, + cmakecompat, cmakeprops and cmakemodules + + Alex + +2007-07-13 11:20 alex + + * Modules/Platform/DragonFly.cmake: + ENH: add DragonFly BSD, which is very close to FreeBSD (#4500) + + Alex + +2007-07-13 10:29 alex + + * Modules/: CheckCSourceRuns.cmake, CheckCXXSourceRuns.cmake: + BUG: the SET( ... CACHE INTERNAL) didn't work as expected, since + the variable is already added to the cache inside + cmTryRunCommand.cxx, so the value used here was ignored. + Additionally the INTERNAL made it internal, which shouldn't be + done when cross compiling, since here the user is required to + edit this variable manually e.g. using ccmake. + + Alex + +2007-07-13 00:58 alex + + * Source/: CMakeLists.txt, cmExtraCodeBlocksGenerator.cxx, + cmExtraCodeBlocksGenerator.h, cmake.cxx: + ENH: add a simple CodeBlocks extra generator, early alpha stage, + there seems to be interest in it + + Alex + +2007-07-12 16:15 alex + + * Modules/Platform/BlueGeneL.cmake: + ENH: add the static libs always to the link libs, if they are not + used it shouldn't hurt + + Alex + +2007-07-12 15:00 alex + + * Modules/: CMakeLists.txt, CheckStructHasMember.cmake: + ENH: add macro to test if a member has specified struct, e.g. + check_struct_has_member("struct stat" st_rdev "${CFG_HEADERS}" + HAVE_STRUCT_STAT_ST_RDEV) + + Alex + +2007-07-12 13:41 alex + + * Modules/: CMakeCCompilerId.c, CMakeCXXCompilerId.cpp, + Platform/Generic-ADSP-ASM.cmake, Platform/Generic-ADSP-C.cmake, + Platform/Generic-ADSP-CXX.cmake, + Platform/Generic-ADSP-Common.cmake: + ENH: add support for the ADSP toolchains for Blackfin, Shark and + TigerShark DSPs, patch from Raphael Cotty + + Alex + +2007-07-12 11:56 alex + + * Source/cmListCommand.cxx, Source/cmListCommand.h, + Tests/CMakeTests/ListTest.cmake.in: + ENH: add LIST(CONTAINS ...) patch from "Miguel A. + Figueroa-Villanueva, miguelf (AT) ieee.org added tests for + LIST(CONTAINS, SORT, REVERSE) + + Alex + +2007-07-12 11:05 alex + + * Modules/FindCURL.cmake: + BUG: honor REQUIRED and QUIETLY (#5312) + + Alex + +2007-07-12 10:38 alex + + * Readme.txt: + STYLE: add Readme.txt with instructions how to build cmake, fix + #5296 + + Alex + +2007-07-12 10:17 martink + + * Source/cmGetDirectoryPropertyCommand.cxx: BUG: fix screwup in + GetDirectoryProp... + +2007-07-12 08:37 alex + + * Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmTarget.cxx, Modules/CMakeASMCompiler.cmake.in, + Modules/CMakeCCompiler.cmake.in, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeForceCompiler.cmake, + Modules/CMakeFortranCompiler.cmake.in, + Modules/CMakeJavaCompiler.cmake.in: ENH: second try for handling + the linker language with integer priority values (returning a + pointer to a string on the stack is no good idea) + + Alex + +2007-07-11 17:29 alex + + * Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmTarget.cxx, Modules/CMakeASMCompiler.cmake.in, + Modules/CMakeCCompiler.cmake.in, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeForceCompiler.cmake, + Modules/CMakeFortranCompiler.cmake.in, + Modules/CMakeJavaCompiler.cmake.in: COMP: revert last commit for + now, broke Visual Studio + + Alex + +2007-07-11 16:22 alex + + * Modules/CMakeASMCompiler.cmake.in, + Modules/CMakeCCompiler.cmake.in, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeForceCompiler.cmake, + Modules/CMakeFortranCompiler.cmake.in, + Modules/CMakeJavaCompiler.cmake.in, Modules/CMakeLists.txt, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmTarget.cxx: + ENH: CMAKE__LINKER_PREFERENCE is now an integer priority, + not a two-step priority (None or Prefered) Current order: ASM 0, + C 10, Fortran 20, CXX 30, Java 40 This is the same order as + automake choses: + http://www.gnu.org/software/automake/manual/html_node/How-the-Linker-is-Chosen.html + + This change should be backward compatible: if there is a project + using fortran and CXX, they had to set the LINKER_LANGUAGE + explicitely, otherwise cmake complained (but still generated the + project files). Explicitely setting the linker language still + overrides automatic detection. If somebody has a custom language + for cmake and the PREFERENCE starts with "P", its changed to 100, + which gives it preference over all other languages (except the + other custom languages which have also "Prefered"). "None" is + converted to 0. + + Alex + +2007-07-11 15:53 alex + + * Source/: cmDocumentation.cxx, cmDocumentation.h, + cmPropertyDefinition.cxx, cmPropertyDefinition.h, cmake.cxx, + cmake.h, cmakemain.cxx: + STYLE: sort the property documentation into + global/directory/target/test/sourcefile and variable sections + + Alex + +2007-07-11 15:50 alex + + * Source/cmMakefile.cxx: + ENH: change the way #cmakedefine is changed to #undef, so it is + similar to what autoconf does. This makes porting software from + autoconf to cmake easier, since it's easier to diff the resulting + config headers. + + Now the following #cmakedefine HAVE_STRING_H 1 #cmakedefine + HAVE_STRLCAT 1 + + produce: + + #define HAVE_STRING_H 1 /* #undef HAVE_STRLCAT */ + + whereas before they produced: + + #define HAVE_STRING_H 1 /* #undef HAVE_STRLCAT 1 */ + + Since it's commented out anyway, it's now change in behaviour. + + Alex + +2007-07-11 13:39 alex + + * Modules/CMakeASMInformation.cmake: + ENH: add CMAKE_INCLUDE_FLAG_ASM${ASM_DIALECT} and don't allow + preset CMAKE_xxx_INFORMATION files + + Alex + +2007-07-10 21:38 alex + + * Modules/FindKDE4.cmake: + STYLE: use EXECUTE_PROCESS() instead of EXEC_PROGRAM() + + Alex + +2007-07-10 17:11 alex + + * Modules/Platform/eCos.cmake: + ENH: add the ecos include dir and the ecos definitions by default + + Alex + +2007-07-10 14:05 martink + + * Source/cmGetSourceFilePropertyCommand.cxx: ENH: added some + documentation to explain a section of code a bit better + +2007-07-10 13:52 martink + + * Source/: cmMakefile.cxx, cmGetDirectoryPropertyCommand.cxx: ENH: + some cleanup of get property commands + +2007-07-09 14:30 king + + * Source/cmLocalVisualStudioGenerator.h: STYLE: Removed stray + comment. + +2007-07-09 13:07 alex + + * Modules/Platform/eCos.cmake: + ENH: add support for building eCos applications natively + + Alex + +2007-07-09 08:16 alex + + * Tests/Assembler/main.c: COMP: hopefully fix test, finally + + Alex + +2007-07-09 05:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-09 00:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-08 22:06 alex + + * Tests/Assembler/main.c: COMP: fix test + + Alex + +2007-07-07 17:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-06 19:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-06 14:02 alex + + * Tests/Assembler/CMakeLists.txt: + BUG: fix test + + Alex + +2007-07-06 13:08 alex + + * Utilities/CMakeLists.txt: + BUG: the cmake deps depend on cmake + + Alex + +2007-07-06 08:53 alex + + * Tests/Assembler/: CMakeLists.txt, main.c: + COMP: OPTIONAL was missing in ENABLE_LANGUAGE() -the assembler + file seems to work for Linux and FreeBSD -try to fix main() for + HP-UX compiler + + Alex + +2007-07-05 16:38 alex + + * Tests/Assembler/CMakeLists.txt: + STYLE: some more output + + Alex + +2007-07-05 16:32 alex + + * Tests/Assembler/: CMakeLists.txt, main-linux-x86-gas.s: + COMP: skip APPLE, since there with universal binaries the + assembler file would be built for both architectures + + Alex + +2007-07-05 16:11 alex + + * Tests/Assembler/CMakeLists.txt: + COMP: let's see if this assembler file works also on other + platforms than linux... + + Alex + +2007-07-05 15:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-05 09:05 alex + + * Tests/: CMakeLists.txt, Assembler/CMakeLists.txt, + Assembler/main-linux-x86-gas.s, Assembler/main.c: + ENH: add a simple assembler test + + Alex + +2007-07-04 08:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-03 16:10 alex + + * Source/: cmCommandArgumentsHelper.cxx, + cmExternalMakefileProjectGenerator.cxx, cmake.cxx: + STYLE: name the external generator "KDevelop3 - Unix Makefiles" + instead of "Unix Makefiles - KDevelop3" -initialize Ignore to 0, + crashes otherwise + + Alex + +2007-07-03 11:41 alex + + * Modules/FindOpenGL.cmake: + STYLE: don't test twice for APPLE + + Alex + +2007-07-03 09:45 king + + * DartLocal.conf.in: ENH: Adding hythloth expected nightly + submissions. + +2007-07-03 08:26 alex + + * Source/: cmDocumentation.cxx, cmDocumentation.h: + COMP: fix compile on HP-UX with aCC, reusing the same identifier + for a variable as for the enum type doesn't work here + + Alex + +2007-07-03 03:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-07-02 16:46 alex + + * Source/: cmCommandArgumentsHelper.cxx, cmExportCommand.cxx: + COMP: fix warnings + + Alex + +2007-07-02 16:04 king + + * Source/: cmFileCommand.cxx, cmFileCommand.h: COMP: Remove unused + argument. + +2007-07-02 16:04 king + + * Source/cmInstallTargetGenerator.cxx: COMP: Remove shadowed local. + +2007-07-02 15:54 alex + + * Modules/CMakeFindBinUtils.cmake: + COMP: with visual studio it's no error if link isn't found + + Alex + +2007-07-02 15:43 alex + + * Source/: cmBootstrapCommands.cxx, cmCommand.h, + cmCommandArgumentsHelper.cxx, cmCommandArgumentsHelper.h, + cmExportCommand.cxx, cmExportCommand.h: + ENH: add framework for unified handling of arguments to cmake + commands, example see cmExportCommand.cxx + + Alex + +2007-07-02 14:56 king + + * Source/: cmFileCommand.cxx, cmFileCommand.h, + cmInstallCommand.cxx, cmInstallDirectoryGenerator.cxx, + cmInstallDirectoryGenerator.h, cmInstallExportGenerator.cxx, + cmInstallExportGenerator.h, cmInstallFilesGenerator.cxx, + cmInstallFilesGenerator.h, cmInstallGenerator.cxx, + cmInstallGenerator.h, cmInstallScriptGenerator.cxx, + cmInstallTargetGenerator.cxx, cmInstallTargetGenerator.h: ENH: + Further cleanup of installation script generation. The + per-component and per-configuration testing is now done in cmake + code instead of in the FILE(INSTALL) command. The generation of + the cmake code to do these tests is centralized in + cmInstallGenerator. Old-style shared library versioning and + component/config support code has been removed from + FILE(INSTALL). This commit is surrounded by the tags + CMake-InstallGeneratorCleanup2-pre and + CMake-InstallGeneratorCleanup2-post. + +2007-07-02 14:18 alex + + * Modules/CMakeForceCompiler.cmake: + ENH: make supporting embedded compilers need a user specific + linker file for compiling an executable (amd thus cannot build + the compiler-id program) easier by providing CMAKE_FORCE_XXX() + macros which force cmake to use the given compilers anyway + + Alex + +2007-07-02 13:32 king + + * Source/: cmTarget.cxx, cmTarget.h: STYLE: Fixed line-too-long, + fixed indentation, removed trailing whitespace, added function + separator comment lines. + +2007-07-02 13:29 alex + + * Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Tests/CMakeTests/DummyToolchain.cmake, + Tests/CMakeTests/ToolchainTest.cmake.in: + ENH: remove support for presetting CMAKE_SYSTEM_INFO_FILE, + CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE, + CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE, + CMAKE_SYSTEM_AND_C_COMPILER_AND_PROCESSOR_INFO_FILE and + CMAKE_SYSTEM_AND_CXX_COMPILER_AND_PROCESSOR_INFO_FILE + + Instead of presetting these variables to arbitrary filenames, + users should set up CMAKE_SYSTEM_NAME and the compilers correctly + and also create a Platform/ directory so these files will all + follow the official cmake style, which should make it easier to + understand and debug project which have their own + platform/toolchain support files. + + -remove support for a suffix to MS crosscompilers, since this is + not (yet) supported by cmake and might confuse users + + Alex + +2007-07-02 12:46 alex + + * Modules/CMakeFindBinUtils.cmake: + BUG: with MS Visual Studio currently there is no compiler id, so + check the generator too + + Alex + +2007-07-02 11:31 king + + * Source/cmInstallTargetGenerator.cxx: BUG: Fix install_name_tool + update of the executable in an installed bundle on OSX. This + addresses bug#4534. + +2007-07-02 11:24 alex + + * Source/cmDocumentation.h: + COMP: fix build with msvc 6, the enums are now part of a class + which is already completely parsed + + Alex + +2007-07-02 11:05 alex + + * Utilities/CMakeLists.txt: + BUG: fix build with cmake < 2.4 + + Alex + +2007-07-02 11:02 king + + * Source/: cmInstallGenerator.cxx, cmInstallGenerator.h, + cmInstallTargetGenerator.cxx, cmInstallTargetGenerator.h: ENH: + Improved indentation of generated cmake_install.cmake code. + +2007-07-02 09:58 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Enable versioned executable + test everywhere but XCode. + +2007-07-01 22:55 hoffman + + * Source/: cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserHelper.h: COMP: fix warning in release + branch + +2007-07-01 16:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-30 22:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-30 21:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-29 16:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-29 12:58 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/Platform/Linux.cmake, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmCommandArgumentParserHelper.h, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmLocalGenerator.cxx, + Source/cmMakefile.cxx, Source/cmMakefile.h, Source/cmake.cxx, + Tests/StringFileTest/InputFile.h.in, + Tests/StringFileTest/StringFile.cxx: ENH: RC 11 + +2007-06-29 11:30 hoffman + + * DartLocal.conf.in: ENH: remove more machines + +2007-06-29 11:18 hoffman + + * CMakeLists.txt, DartLocal.conf.in: ENH: make DartLocal.conf part + of project + +2007-06-28 16:11 king + + * Source/: cmInstallDirectoryGenerator.cxx, + cmInstallExportGenerator.cxx, cmInstallFilesGenerator.cxx, + cmInstallGenerator.cxx, cmInstallGenerator.h, + cmInstallTargetGenerator.cxx, cmInstallTargetGenerator.h: ENH: + First step of install script generator cleanup. Each + configuration to be installed is now separately handled instead + of using variables to store per-configuration names. For targets + the component and configuration install-time tests are now done + in the install script instead of in the FILE(INSTALL) command. + This cleans things up like not trying to strip a file that was + optionally not installed. It also simplifies the code for + install_name adjustment on OSX. This commit is surrounded by the + tags CMake-InstallGeneratorCleanup1-pre and + CMake-InstallGeneratorCleanup1-post. + +2007-06-28 15:28 alex + + * Source/cmGlobalGenerator.cxx: + COMP: fix warning about unused parameter + + Alex + +2007-06-28 15:04 alex + + * Source/cmDocumentation.cxx, Source/cmDocumentation.h, + Source/cmakemain.cxx, Utilities/CMakeLists.txt: + ENH: generate separate documentation for the commands, + compatiblity commands, modules and properties as html, text and + man pages. The names of the man pages are cmcommands, cmcompat, + cmprops and cmmodules, so they are easy to type. + + Alex + +2007-06-28 13:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-28 11:00 alex + + * Source/cmDocumentation.cxx, Source/cmDocumentation.h, + Source/cmDumpDocumentation.cxx, Source/cmakemain.cxx, + Source/CursesDialog/ccmake.cxx, Utilities/CMakeLists.txt: + ENH: -in the full documentation there is now an extra section for + compatibility commands, so users see which commands they + shouldn't use -cmake -h now also works with lower case + commands --help-fullm --help-command, --help-module and + --help-property now determine the output format from the + extension of the given filename + + Let me know if there are some things I overlooked. + + Alex + +2007-06-28 10:22 alex + + * Source/cmGlobalVisualStudio6Generator.cxx: + COMP: fix typo + + Alex + +2007-06-28 09:14 alex + + * Modules/: CMakeASM-ATTInformation.cmake, + CMakeASMCompiler.cmake.in, CMakeASMInformation.cmake, + CMakeDetermineASM-ATTCompiler.cmake, + CMakeDetermineASMCompiler.cmake, CMakeTestASM-ATTCompiler.cmake, + CMakeTestASMCompiler.cmake, Platform/gas.cmake: + ENH: initial support for assembler in cmake, needs testing by our + users + + Alex + +2007-06-28 09:09 alex + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmEnableLanguageCommand.cxx, cmEnableLanguageCommand.h, + cmGlobalBorlandMakefileGenerator.h, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmGlobalMSYSMakefileGenerator.cxx, + cmGlobalMSYSMakefileGenerator.h, + cmGlobalMinGWMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.h, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Win64Generator.cxx, + cmGlobalVisualStudio8Win64Generator.h, + cmGlobalWatcomWMakeGenerator.cxx, cmGlobalWatcomWMakeGenerator.h, + cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h, + cmLocalVisualStudio6Generator.cxx, cmMakefile.cxx, cmMakefile.h, + cmProjectCommand.cxx: + ENH: add OPTIONAL keyword to ENABLE_LANGUAGE, so it will be + possible to do something like this: + + ENABLE_LANGUAGE(ASM-ATT) IF(CMAKE_ASM-ATT_COMPILER_WORKS) ... + do assembler stufff ELSE(CMAKE_ASM-ATT_COMPILER_WORKS) ... + fallback to generic C/C++ ENDIF(CMAKE_ASM-ATT_COMPILER_WORKS) + + Alex + +2007-06-27 16:28 alex + + * Source/kwsys/: DynamicLoader.cxx, ProcessUNIX.c: + ENH: build on BlueGene/L: -add static resolv, nss_files and + nss_dns libs to the default set of libs, otherwise we get + undefined references out of libc to several functions -add a + dummy DynamicLoader in kwsys for systems without shared libs + -BlueGene doesn't have SA_SIGINFO + + Alex + +2007-06-27 16:14 king + + * Source/cmInstallCommand.cxx: BUG: Do not install the import + library for an executable that does not have ENABLE_EXPORTS set. + +2007-06-27 16:10 king + + * Source/: cmFileCommand.cxx, cmFileCommand.h: BUG: Need to compute + the correct versioned name for executables on cygwin. This + addresses bug#5238. + +2007-06-27 15:42 alex + + * Source/cmTarget.cxx: + ENH: here we really want only non-imported targets, as discussed + with Brad + + Alex + +2007-06-27 14:55 alex + + * Modules/CMakeDetermineCompilerId.cmake: + BUG: use ${LANG}_COMPILER_ARG1 also here, otherwise some + compilers won't be able to compile e.g. the C++ source file (e.g. + the ADSP compiler needs -c++ for compiling C++ files) + + Alex + +2007-06-27 13:22 king + + * Tests/Java/CMakeLists.txt: BUG: For in-source version do not use + a custom command output and custom target with the same name. + This accidentally worked before but with a circular dependency. + +2007-06-27 12:07 king + + * Modules/Platform/Linux.cmake, Modules/Platform/UnixPaths.cmake, + Source/cmFindLibraryCommand.cxx, Source/cmake.cxx: ENH: Added + global property FIND_LIBRARY_USE_LIB64_PATHS to allow lib64 paths + to be searched optionally. Turn off the feature on debian + systems. This addresses debian report 419007. + +2007-06-27 12:05 king + + * Source/cmPropertyDefinition.cxx: BUG: Fixed spelling of globally + in global property names. + +2007-06-27 11:42 king + + * Modules/Platform/GNU.cmake: ENH: Added GNU/Hurd platform. Taken + from debian patch 407155. + +2007-06-27 11:39 king + + * Source/kwsys/ProcessUNIX.c: COMP: Fix for platforms that do not + have siginfo on their signal handlers. + +2007-06-27 08:43 alex + + * Tests/CMakeLists.txt: + COMP: fix tests where the building cmake doesn't have + GET_TEST_PROPERTY + + Alex + +2007-06-27 04:49 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-26 19:54 alex + + * Source/cmGlobalGenerator.cxx: + ENH: use CMAKE_SYSTEM instead of CMAKE_SYSTEM_NAME, since + CMAKE_SYSTEM_NAME may already have been set when crosscompiling + + Alex + +2007-06-26 17:14 alex + + * Source/cmGlobalGenerator.cxx: + COMP: fix broken tests for now + + Alex + +2007-06-26 17:08 alex + + * Source/: cmBootstrapCommands.cxx, cmCommands.cxx: + COMP: fix bootstrapping + + Alex + +2007-06-26 15:30 alex + + * Tests/: CMakeLists.txt, SimpleCOnly/CMakeLists.txt, + SimpleCOnly/bar.c, SimpleCOnly/foo.c, SimpleCOnly/main.c: + ENH: add a SimpleCOnly test, this is needed e.g. for testing sdcc + since this doesn't support C++ and also doesn't have a printf() + implementation by default -add a test for mingw cross compiler + + Alex + +2007-06-26 15:15 alex + + * Tests/CMakeLists.txt, Modules/Platform/Generic-SDCC-C.cmake: + ENH: + +2007-06-26 14:48 martink + + * Source/: cmBootstrapCommands.cxx, cmCommands.cxx: ENH: add + SetProperties into bootstrap + +2007-06-26 13:50 alex + + * Source/: cmDefinePropertyCommand.h, cmGetPropertyCommand.h, + cmSetPropertiesCommand.h: + STYLE: rename chain to inherit in the docs + + Alex + +2007-06-26 13:19 alex + + * Modules/: CMakeCCompilerId.c, Platform/Generic-SDCC-C.cmake: + ENH: add basic support for sdcc (http://sdcc.sourceforge.net), + needs sdcc (sdcclib) cvs for creating libraries) + + Alex + +2007-06-26 13:05 alex + + * Modules/Platform/Generic.cmake, Source/cmAddLibraryCommand.cxx, + Source/cmake.cxx, Source/cmake.h, + Modules/CMakeGenericSystem.cmake, + Modules/Platform/BlueGeneL.cmake: + STYLE: change global cmake variable + CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS to the first global cmake + property TARGET_SUPPORTS_SHARED_LIBS + + Alex + +2007-06-26 13:00 alex + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Source/cmGlobalGenerator.cxx: + ENH: check for CMAKE_HOST_SYSTEM_NAME to decide whether to load + CMakeDetermineSystem.cmake, since CMAKE_SYSTEM_NAME might already + be preset when using cmake for cross compiling use type STRING + instead of FILEPATH since otherwise a strange filename was + generated + + Alex + +2007-06-26 04:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-25 12:50 martink + + * Source/: cmGetPropertyCommand.cxx, cmSetPropertiesCommand.cxx: + COMP: fix warnings + +2007-06-25 12:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-25 10:34 martink + + * Source/: cmDefinePropertyCommand.cxx, cmDefinePropertyCommand.h, + cmProperty.h, cmPropertyDefinition.cxx, cmPropertyMap.cxx, + cmake.cxx, cmake.h: ENH: added the ability to document variables + and cached_variables + +2007-06-25 10:33 martink + + * Source/: cmGetPropertyCommand.cxx, cmGetPropertyCommand.h: ENH: + added cmGetPropertyCommand + +2007-06-25 09:51 martink + + * Source/cmCommands.cxx, Source/cmGetCMakePropertyCommand.cxx, + Source/cmMakefile.cxx, + Source/cmSetDirectoryPropertiesCommand.cxx, + Source/cmSetPropertiesCommand.cxx, Source/cmake.cxx, + Tests/Properties/CMakeLists.txt: ENH: some property cleanup and + added GetProperty + +2007-06-24 06:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-23 01:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-22 11:31 hoffman + + * CMakeLists.txt, Utilities/Release/CMake.nsi.in, + Utilities/Release/CMakeInstall.bmp, + Utilities/Release/MakeRelease.cmake.in, Utilities/Release/README, + Utilities/Release/Release.cmake, Utilities/Release/cmake_login, + Utilities/Release/cmake_release.sh.in, + Utilities/Release/config_AIX, + Utilities/Release/config_CYGWIN_NT-5.1, + Utilities/Release/config_Darwin, Utilities/Release/config_HP-UX, + Utilities/Release/config_IRIX64, Utilities/Release/config_Linux, + Utilities/Release/config_OSF1, Utilities/Release/config_SunOS, + Utilities/Release/cygwin-package.sh.in, + Utilities/Release/release_dispatch.sh: ENH: remove old style + release stuff + +2007-06-22 10:22 alex + + * Modules/: CMakeLists.txt, FindMPI.cmake, + Platform/BlueGeneL.cmake: + ENH: add support for BlueGene/L + + Alex + +2007-06-22 09:58 alex + + * Source/: cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, + cmCPluginAPI.cxx, cmMakefile.cxx, cmMakefile.h: + ENH: add IMPORT keyword to ADD_LIBRARY, dependencies are not yet + working STYLE: fix line lengths and indentation, use enum as + argument to AddLibrary() instead of int (which was initialized + from a bool in some cases) + + Alex + +2007-06-22 08:44 alex + + * Source/: cmDocumentation.cxx, cmDocumentation.h, cmake.cxx, + cmake.h: + ENH: put compatibility commands in extra section and prepare for + creating separate man pages for properties, modules, commands and + compatibility commands + + Alex + +2007-06-21 16:23 alex + + * Modules/CMakeGenericSystem.cmake, Modules/Platform/Generic.cmake, + Source/cmAddLibraryCommand.cxx: + ENH: print a warning if ADD_LIBRARY( SHARED/MODULE ) is used and + the target platform doesn't support shared libraries + + Alex + +2007-06-21 14:06 alex + + * Tests/Java/CMakeLists.txt: + STYLE: add some more output, so it is easier to understand + + Alex + +2007-06-21 13:08 alex + + * Source/: cmLocalGenerator.cxx, cmTarget.cxx: + BUG: handle dependencies to imported targets better: don't create + a dependency if the target name was not listed in DEPENDS, if it + was listed in DEPENDS, create a dependency to the file + + Seems to work, but have to check with Brad. + + Alex + +2007-06-21 06:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-21 04:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-20 23:01 alex + + * Source/cmMakefile.h: + STYLE: GetProjectName() is const + + Alex + +2007-06-20 03:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-19 14:57 alex + + * Source/cmInstallExportGenerator.cxx: + COMP: fix build under windows + + Alex + +2007-06-19 13:10 alex + + * Source/: CMakeLists.txt, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmInstallCommand.cxx, cmInstallCommand.h, + cmInstallExportGenerator.cxx, cmInstallExportGenerator.h: + ENH: add INSTALL(EXPORT ...) mode and INSTALL( TARGETS ... EXPORT + ) , tests still have to be added + + Alex + +2007-06-19 11:11 alex + + * Source/: cmInstallCommand.cxx, cmInstallCommand.h, + cmInstallDirectoryGenerator.cxx, cmInstallDirectoryGenerator.h, + cmInstallFilesGenerator.cxx, cmInstallFilesGenerator.h, + cmInstallGenerator.h, cmInstallTargetGenerator.cxx, + cmInstallTargetGenerator.h: + STYLE: preparations for the INSTALL(EXPORT ...) generator -move + std::string Destination to cmInstallGenerator, since all (except + the script one) have it and add a const accessor so it can be + queried -use temporary variables in cmInstallCommand for the + generators so they can be reused easier -some more const + + Alex + +2007-06-19 09:18 king + + * Source/cmCPluginAPI.cxx: COMP: Work-around warning about static + specifier on HP compiler. + +2007-06-18 18:01 alex + + * Modules/CMakeDetermineJavaCompiler.cmake: + STYLE: use IF(NOT ...) and remove MARK_AS_ADVANCED() for + variables which are not defined here + + Alex + +2007-06-18 17:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-18 11:59 king + + * bootstrap, Source/CMakeLists.txt, + Source/cmAuxSourceDirectoryCommand.cxx, Source/cmCPluginAPI.cxx, + Source/cmCommands.cxx, Source/cmCreateTestSourceList.cxx, + Source/cmFLTKWrapUICommand.cxx, + Source/cmGetSourceFilePropertyCommand.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalXCodeGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/cmLocalXCodeGenerator.cxx, Source/cmLocalXCodeGenerator.h, + Source/cmMakeDepend.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmOutputRequiredFilesCommand.cxx, + Source/cmQTWrapCPPCommand.cxx, Source/cmQTWrapCPPCommand.h, + Source/cmQTWrapUICommand.cxx, Source/cmQTWrapUICommand.h, + Source/cmSourceFile.cxx, Source/cmSourceFile.h, + Source/cmSourceFileLocation.cxx, Source/cmSourceFileLocation.h, + Source/cmTarget.cxx, Source/cmTarget.h: ENH: Merging changes from + branch CMake-SourceFile2-b between tags CMake-SourceFile2-bp and + CMake-SourceFile2-b-mp1 to trunk. This commit is surrounded by + tags CMake-SourceFile2-b-mp1-pre and CMake-SourceFile2-b-mp1-post + on the trunk. + + The changes re-implement cmSourceFile and the use of it to allow + instances to be created much earlier. The use of + cmSourceFileLocation allows locating a source file referenced by + a user to be much simpler and more robust. The two SetName + methods are no longer needed so some duplicate code has been + removed. The strange "SourceName" stuff is gone. Code that + created cmSourceFile instances on the stack and then sent them to + cmMakefile::AddSource has been simplified and converted to + getting cmSourceFile instances from cmMakefile. The CPluginAPI + has preserved the old API through a compatibility interface. + + Source lists are gone. Targets now get real instances of + cmSourceFile right away instead of storing a list of strings + until the final pass. + + TraceVSDependencies has been re-written to avoid the use of + SourceName. It is now called TraceDependencies since it is not + just for VS. It is now implemented with a helper object which + makes the code simpler. + +2007-06-18 09:00 alex + + * Source/CPack/: cmCPackGenerators.cxx, cmCPackNSISGenerator.cxx: + ENH: NSIS exists also for Linux, not only Windows, so enable it + there too patch by Michal Čihař + + Alex + +2007-06-17 20:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-17 08:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-16 17:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-15 16:09 alex + + * Source/cmake.cxx: + COMP: include cmExternalMakefileProjectGenerator.h + + Alex + +2007-06-15 16:07 alex + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmMakefile.h, cmake.cxx: + STYLE: minor fixes + + Alex + +2007-06-15 15:33 alex + + * Source/cmInstallTargetGenerator.h: + COMP: forgot to commit this one + + Alex + +2007-06-15 14:27 alex + + * Source/cmInstallTargetGenerator.cxx: + STYLE: remove code duplication between PrepareScriptReference and + GetScriptReference, and make the logic for getting the filename + public, so it can be used e.g. for exporting + + Alex + +2007-06-15 13:00 alex + + * Source/: cmInstallTargetGenerator.cxx, + cmInstallTargetGenerator.h: + BUG: don't strip static libraries, it removes their symbol table, + dynamic libs have an extra symbol table so they still work + stripped + + Alex + +2007-06-15 11:12 alex + + * Source/: cmInstallTargetGenerator.h, + cmInstallTargetGenerator.cxx: + BUG: don't run strip on OPTIONAL install targets if the file + doesn't exist + + Alex + +2007-06-15 10:34 alex + + * Source/cmInstallCommand.h: + STYLE: add some more line breaks so it should be easier to read + + Alex + +2007-06-15 10:10 alex + + * Source/: cmExportLibraryDependencies.cxx, + cmExportLibraryDependencies.h, cmGlobalGenerator.h, + cmLocalGenerator.h, cmMakefile.h, cmTarget.h, cmake.cxx, cmake.h: + + STYLE: remove duplicate non-const accessors + GetLocalGenerator(int) and GetLocaGenerators(cmLocalGenerators) + from cmGlobalGenerator(). Now there is one const accessor which + is even faster since it returns a reference (instead of copying a + vector) -more const to ensure that this the returned local + generators don't actually get modified -removed duplicated code + in GetCTestCommand() and GetCPackCommand() -added some const + accessors + + Alex + +2007-06-15 08:53 alex + + * Utilities/CMakeLists.txt: + STYLE: use a macro for generating the documentation + + Alex + +2007-06-15 08:42 alex + + * Tests/CMakeLists.txt: + COMP: big timeout for building kdelibs + + Alex + +2007-06-15 08:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-14 13:57 alex + + * Source/CPack/cmCPackZIPGenerator.cxx: + STYLE: fix typo + + Alex + +2007-06-14 13:55 alex + + * Tests/CMakeLists.txt: + ENH: add test for buildingn kdelibs alpha1 + (http://websvn.kde.org/tags/KDE/3.90.1) with cmake requires Qt >= + 4.3.0, DBus, kdesupport (http://websvn.kde.org/trunk/kdesupport/) + and the EasyDashboard scripts. + + Alex + +2007-06-14 13:05 hoffman + + * Source/: cmCTest.cxx, CTest/cmCTestBuildCommand.cxx, + CTest/cmCTestBuildHandler.cxx: ENH: add more verbose output + +2007-06-14 12:03 alex + + * Source/CPack/: cmCPackZIPGenerator.cxx, cmCPackZIPGenerator.h: + ENH: support 7zip for creating zip files (not 7z files) + + Alex + +2007-06-14 11:17 alex + + * Utilities/CMakeLists.txt: + STYLE: add man page for cpack + + Alex + +2007-06-14 08:49 alex + + * Source/: cmRemoveDefinitionsCommand.h, cmakemain.cxx: + STYLE: add comment about the -D -P order and fix typo in doc + + Alex + +2007-06-14 08:33 alex + + * Tests/BuildDepends/CMakeLists.txt: + COMP: removing the directory at the beginning breaks the test for + in-source builds + + Alex + +2007-06-14 07:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-14 01:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-13 17:06 king + + * Source/: cmSourceFile.cxx, cmSourceFile.h: ENH: Make sure + FindFullPath does not complain more than once about not finding + the file if it fails. + +2007-06-13 16:58 king + + * Source/: cmSourceFile.cxx, cmSourceFile.h: ENH: Use + non-const==>locate policy for GetLanguage() method. + +2007-06-13 16:33 king + + * Source/cmSourceFileLocation.h: STYLE: Added interface + documentation. + +2007-06-13 16:26 alex + + * Tests/BuildDepends/: CMakeLists.txt, Project/bar.cxx: + COMP: fix test, in some cases stdout from bar was not captured + correctly, probably because the process was killed before the + fflush() worked because the busy loop blocked the processor + (failing midworld test) + + Alex + +2007-06-13 16:22 king + + * Source/cmSourceFile.cxx: BUG: Do not abort when file cannot be + found. + +2007-06-13 16:12 king + + * Source/: cmGetSourceFilePropertyCommand.cxx, cmSourceFile.cxx, + cmSourceFile.h: ENH: Improved const-correctness of cmSourceFile + API. On-demand computation of the full path is now done only for + non-const cmSourceFile instances. + +2007-06-13 15:32 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmLocalGenerator.cxx, + cmLocalVisualStudio7Generator.cxx, cmMakeDepend.cxx, + cmMakefileLibraryTargetGenerator.cxx, cmSourceFile.cxx, + cmSourceFile.h: ENH: Changed signature of + cmSourceFile::GetFullPath() back to returning a reference to a + string. + +2007-06-13 15:21 king + + * Source/: cmMakefile.cxx, cmMakefile.h, cmSourceFile.h: STYLE: + Removed commented-out code that is no longer needed. + +2007-06-13 15:21 king + + * Source/cmGlobalXCodeGenerator.cxx: COMP: Fixed for new + cmSourceFile interface. + +2007-06-13 15:20 king + + * Source/cmSourceFile.cxx: BUG: Never return a null pointer from + GetFullPath. Too many places construct a string with the result. + +2007-06-13 14:36 alex + + * Source/cmFileCommand.h: + STYLE: add documentation for FILE(REMOVE ...) and + FILE(REMOVE_RECURSE ...) FILE(REMOVE ...) works only for files, + not for directories, REMOVE_RECURSE works for both, it seems + having both is not necessary + + Alex + +2007-06-13 13:44 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudioGenerator.cxx: COMP: Fix for new cmSourceFile + interface. + +2007-06-13 13:44 king + + * Source/cmMakefile.cxx: COMP: Fix for build on VS. + +2007-06-13 12:52 alex + + * Source/cmExternalMakefileProjectGenerator.h: + COMP: include cmStandardIncludes.h instead of and + , this should fix the build problem on AIX + + Alex + +2007-06-13 11:55 king + + * Source/cmSourceFileLocation.cxx: BUG: When updating the directory + or extension from an unambiguous location we need to mark the new + copy as unambiguous too. + +2007-06-13 11:17 king + + * Source/: cmCPluginAPI.cxx, cmCommands.cxx: ENH: Implemented + compatibility interface in cmCPluginAPI to preserve old API for + loaded commadns. + +2007-06-13 10:54 alex + + * Source/cmMarkAsAdvancedCommand.h: + BUG: make MARK_AS_ADVANCED() scriptable, because this is the only + reason many cmake FindXXX.cmake modules can't be used in script + mode and also FindUnixMake.cmake, which is required by the + CTEST_BUILD() command + + Alex + +2007-06-12 17:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-12 16:41 alex + + * Modules/: CMakeCInformation.cmake, CMakeCXXInformation.cmake: + ENH: first include the processor specific file, then the compiler + file, this way the specific hardware file can set variables which + can be used in the toolchain rules (like CMAKE_C_COMPILE_OBJECT + etc.) + + Alex + +2007-06-12 11:11 david.cole + + * Source/cmCTest.cxx: BUG: Never return a string containing a space + " " from cmCTest::GetShortPathToFile - replace them with "_". + DART cannot construct valid file names during dashboard rollup + with space " " in the short path. + +2007-06-12 10:56 alex + + * Source/: cmake.cxx, cmake.h, CTest/cmCTestScriptHandler.cxx: + ENH: remove non/scriptable cmake commands from the script handler + in ctest, as discussed with David. This also gives a better ctest + man page with just the commands you should actually use in ctest + scripts. Until now these commands were more or less executed, + but e.g. add_executable() didn't create an executable, project() + failed with an error. Now you get an error instantly if using one + of these commands. + + Alex + +2007-06-12 10:19 hoffman + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: make sure working + directory is set + +2007-06-12 09:40 alex + + * Source/: cmCTest.cxx, cmCTest.h: + STYLE: remove argument bool fast, it was unused + + Alex + +2007-06-12 08:23 alex + + * Source/cmGlobalGenerator.cxx: + COMP: remove warning about unused variable + + Alex + +2007-06-11 18:23 king + + * bootstrap, Source/CMakeLists.txt, + Source/cmAuxSourceDirectoryCommand.cxx, Source/cmCommands.cxx, + Source/cmCreateTestSourceList.cxx, + Source/cmFLTKWrapUICommand.cxx, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalXCodeGenerator.cxx, Source/cmLocalXCodeGenerator.h, + Source/cmMakeDepend.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmOutputRequiredFilesCommand.cxx, + Source/cmQTWrapCPPCommand.cxx, Source/cmQTWrapCPPCommand.h, + Source/cmQTWrapUICommand.cxx, Source/cmQTWrapUICommand.h, + Source/cmSourceFile.cxx, Source/cmSourceFile.h, + Source/cmSourceFileLocation.cxx, Source/cmSourceFileLocation.h, + Source/cmTarget.cxx, Source/cmTarget.h: ENH: Initial sweep for + new-sytle creation of cmSourceFile instances. Committing on + branch CMake-SourceFile2-b. + +2007-06-11 17:15 hoffman + + * Tests/CMakeLists.txt: ENH: remove test + +2007-06-11 17:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-11 15:47 alex + + * Modules/Platform/Generic.cmake, Source/cmGlobalGenerator.cxx: + STYLE: add a comment about SetLanguageEnabled() -add a + Generic.cmake for target platforms without operating system + + Alex + +2007-06-11 15:36 david.cole + + * Source/: cmCTest.cxx, CTest/cmCTestCoverageHandler.cxx: BUG: + Never return a string containing a ":" from + cmCTest::GetShortPathToFile - replace them with "_". DART cannot + construct valid file names during dashboard rollup with ":" in + the short path. Also, fix the Bullseye coverage handler so that + the file names and paths match in both the coverage summary and + the individual coverage logs. + +2007-06-11 15:31 alex + + * Modules/CMakeCCompiler.cmake.in, Modules/CMakeCInformation.cmake, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h: + ENH: split cmGlobalGenerator::SetLanguageEnabled() in two parts, + where the second part copies the values from the cmake variables + into internal maps. So this can now be done after the + compiler-specific information has been loaded, which can now + overwrite more settings. + + Alex + +2007-06-11 15:02 king + + * Modules/FindQt3.cmake: BUG: Fixed name of variable used to check + version of uic executable. + +2007-06-11 15:00 hoffman + + * Tests/CMakeLists.txt: ENH: add ConvLib test back for some time + +2007-06-11 14:28 alex + + * Source/cmGlobalGenerator.cxx: + STYLE: determineLanguageCalled removed, now the conditional code + is directly called in the only place where it could be set to + true + + Alex + +2007-06-11 13:22 king + + * Tests/CustomCommand/CMakeLists.txt: ENH: Re-arranged code to test + adding a custom command to generate a source file after the file + has been added to a target. This is supported by the current + implementation because of the use of source lists in the target + implementation. When we later convert to creating cmSourceFile + instances immediately for the target we need to make sure the + mentioned case still works. + +2007-06-11 12:40 king + + * Source/: cmIncludeRegularExpressionCommand.h, + cmLocalUnixMakefileGenerator3.h, cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.h, cmMakefileTargetGenerator.h: + STYLE: Removed unused reference to cmMakeDepend. + +2007-06-11 10:25 king + + * Source/: cmMakefile.cxx, cmMakefile.h: BUG: More problems with + cmMakefile copy-constructor. It seems the regular expression + class cannot be assigned but does not enforce this limitation at + compile time. + +2007-06-10 19:51 alex + + * Source/cmGlobalKdevelopGenerator.cxx: + ENH: enable cvs or svn support if the source has the CVS/.svn + subdirs + + Alex + +2007-06-10 15:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-09 02:39 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-08 17:44 king + + * Source/cmMakefile.cxx: BUG: Copy constructor needs to copy + regular expression members. + +2007-06-08 16:19 alex + + * Source/cmExportCommand.cxx: + ENH: fail if an unknown target is listed + + Alex + +2007-06-08 16:06 alex + + * Source/: cmDocumentation.cxx, ctest.cxx, + CTest/cmCTestScriptHandler.cxx, CTest/cmCTestScriptHandler.h: + STYLE: create command documentation for ctest + + I think some of the cmake commands should be removed from ctest + if possible, like add_executable etc. + + Alex + +2007-06-08 14:16 martink + + * Source/cmCTest.cxx: BUG: fix timeout bug with global timeouts + such as DART_TESTING_TIMEOUT + +2007-06-08 13:43 king + + * Source/cmFindBase.cxx: BUG: Fixed spelling and formatting of new + documentation. + +2007-06-08 12:42 alex + + * Source/: cmExternalMakefileProjectGenerator.h, + cmGlobalGenerator.h: + COMP: less warnings + + Alex + +2007-06-08 12:29 hoffman + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: ENH: use new covbr that does not stop + on error + +2007-06-08 11:57 alex + + * Source/: cmBootstrapCommands.cxx, cmCommands.cxx, + cmExportCommand.cxx, cmExportCommand.h, + cmExternalMakefileProjectGenerator.cxx, + cmExternalMakefileProjectGenerator.h, cmFindLibraryCommand.cxx, + cmFindPathCommand.cxx, cmFindProgramCommand.cxx, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalKdevelopGenerator.cxx, cmGlobalKdevelopGenerator.h, + cmMakefile.cxx, cmake.cxx, cmake.h: + ENH: add cmExternalMakefileProjectGenerator, which should make it + easier to write generators for IDE projects, which use already + existing makefiles (current the kdevelop generator) -first stept + of the export interface, iniitial export() command -more + replacements for the FIND_XXX docs + + Alex + +2007-06-08 10:28 alex + + * Modules/FindX11.cmake: + ENH: more consistence among the X11 components + + Alex + +2007-06-08 09:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-08 09:28 alex + + * Modules/FindQt4.cmake: + ENH: patch from #5054: also search for QtUitoolsd lib + + Alex + +2007-06-08 09:19 alex + + * Source/cmExecProgramCommand.h: + STYLE: fix typo (bug #5115) + + Alex + +2007-06-07 14:57 alex + + * Source/cmFindBase.cxx: + STYLE: add documentation for CMAKE_FIND_ROOT_PATH + + Alex + +2007-06-07 14:31 alex + + * Source/: cmBootstrapCommands.cxx, cmCommands.cxx: + BUG: fix Bootstrap test + + Alex + +2007-06-07 13:51 alex + + * Modules/CMakeDetermineCompilerId.cmake, + Modules/CheckTypeSize.cmake, Source/cmFileCommand.cxx, + Source/cmFileCommand.h: + STYLE: remove out commented code + + Alex + +2007-06-07 13:05 alex + + * Utilities/CMakeLists.txt: + STYLE: use GET_TARGET_PROPERTY(LOCATION) instead of manually + building the path to the executables (tested with cmake 2.2.3) + + Alex + +2007-06-07 10:41 alex + + * Source/cmake.cxx: + ENH: also remove uninitialized from the cache + + Alex + +2007-06-07 09:37 alex + + * Source/cmGlobalGenerator.cxx: + BUG: fix #5137, now with the modified CMakeDetermineSystem.cmake + the CMAKE_HOST_SYSTEM_xxx variables have to be preset, not the + CMAKE_SYSTEM_xxx ones + + Alex + +2007-06-07 08:29 alex + + * Source/cmExportLibraryDependencies.cxx: + STYLE: remove wrong comments + + Alex + +2007-06-06 16:20 king + + * Source/cmCommandArgumentParserHelper.cxx, + Source/cmCommandArgumentParserHelper.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Tests/StringFileTest/InputFile.h.in, + Tests/StringFileTest/StringFile.cxx: BUG: Fixed @ONLY + configuration to not try to parse ${} syntax at all. This fixes + the original fix to bug#4393 and adds a test. + +2007-06-06 15:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-06 13:43 hoffman + + * Tests/CMakeTests/: IncludeTest.cmake.in, ToolchainTest.cmake.in: + ENH: fix it + +2007-06-06 13:32 hoffman + + * Tests/CMakeTests/: IncludeTest.cmake.in, ToolchainTest.cmake.in: + ENH: use lower case for file compare on windows + +2007-06-06 11:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-06 11:26 hoffman + + * Source/kwsys/: DynamicLoader.cxx, DynamicLoader.hxx.in: ENH: + remove some stuff to improve coverage + +2007-06-06 11:02 martink + + * Source/: cmCTest.cxx, CTest/cmCTestBuildAndTestHandler.cxx: BUG: + better passing of global TIMEOUT to internal ctest invocaitons + +2007-06-06 10:44 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: fix case problem with drive + letters and cmake vs CMakeSetup build.make changing + +2007-06-06 10:41 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/kwsys/SystemTools.cxx: + ENH: move to RC 10 + +2007-06-06 08:49 alex + + * Source/: cmIfCommand.cxx, cmIfCommand.h: + ENH: add IF(IS_ABSOLUTE path), so no regex matching is required + in the cmake scripts + + Alex + +2007-06-05 16:37 alex + + * Source/cmGlobalUnixMakefileGenerator3.h: + STYLE: fix comment + + Alex + +2007-06-05 16:35 alex + + * Source/: cmGlobalKdevelopGenerator.cxx, + cmGlobalKdevelopGenerator.h, cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: + STYLE: move ForceVerboseMakefiles to + cmGlobalUnixMakefileGenerator3, so the kdevelop generator doesn't + need its own CreateLocalGenerator() anymore + + Alex + +2007-06-05 10:28 alex + + * Modules/: CMakeCCompilerId.c, CMakeCInformation.cmake, + CMakeCXXInformation.cmake, CMakeDetermineSystem.cmake, + CMakeSystemWithToolchainFile.cmake.in: + ENH: also load a processor-specific file if exists -also try the + basename file if the compiler id file doesn't exist -don't rely + so much on the CMAKE_TOOLCHAIN_FILE + + Alex + +2007-06-05 10:20 alex + + * Modules/CheckTypeSizeC.c.in: + COMP: don't use stdio, it can fail on some embedded targets + (sdcc) + + Alex + +2007-06-05 09:30 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Source/cmCommandArgumentLexer.cxx, + Source/cmCommandArgumentLexer.h, + Source/cmCommandArgumentLexer.in.l, + Source/cmCommandArgumentParserHelper.cxx: ENH: merge in changes + from main tree that fix at only parsing + +2007-06-05 09:19 hoffman + + * Source/: cmCommandArgumentLexer.cxx, cmCommandArgumentLexer.in.l: + ENH: fix for aix + +2007-06-05 09:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-05 08:30 alex + + * Modules/CheckTypeSizeC.c.in: + COMP: make the new check_type_size work with the HPUX cc + compiler: const doesn't exist there + + Alex + +2007-06-04 17:18 hoffman + + * Tests/Framework/test.lua: ENH: add missing file + +2007-06-04 17:17 hoffman + + * Source/cmMakefileLibraryTargetGenerator.cxx: ENH: prevent crash + +2007-06-04 17:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-04 17:08 alex + + * Modules/CheckTypeSize.cmake, Modules/CheckTypeSizeC.c.in, + Modules/Platform/Darwin.cmake, Source/cmCoreTryCompile.cxx, + Source/cmLocalGenerator.cxx: ENH: determine typesize by compiling + a file and reading strings from the compiled output. Tested with + various gcc, XCode, MSVC7, sdcc For OSX when doing TRY_COMPILE() + CMAKE_OSX_ARCHITECTURES is used, if there are different results + an error is generated. CMAKE_OSX_ARCHITECTURES can be overwritten + for the TRY_COMPILES with CMAKE_TRY_COMPILE_OSX_ARCHITECTURES. + + Alex + +2007-06-04 15:57 king + + * Source/: cmCommandArgumentLexer.cxx, cmCommandArgumentLexer.h, + cmCommandArgumentLexer.in.l, cmCommandArgumentParserHelper.cxx: + BUG: Fixed cmCommandArgumentLexer no-escape mode to not match + backslash-escape sequences as lexical tokens at all. Needed to + configure files with backslashes preceding an @VAR@ replacement. + This fixes bug#5130. + +2007-06-04 15:28 hoffman + + * Tests/Framework/CMakeLists.txt: ENH: add one of the headers to + the regular sources + +2007-06-04 13:50 alex + + * Source/cmake.cxx: + STYLE: fix typo: now double space after -D + + Alex + +2007-06-04 13:48 alex + + * Source/: cmCacheManager.cxx, cmake.cxx, cmake.h: + ENH: -U for removing variables now uses globbing expressions + -cmCacheManager: now also variables with type UNINITIALIZED are + saved in CMakeCache.txt, these are the vars defined using + -DFOO=foo but without type + + Alex + +2007-06-04 13:39 martink + + * Source/: cmCTest.cxx, CTest/cmCTestBuildAndTestHandler.cxx: ENH: + fix passing of time limit to some ctest invocations that also use + build-options + +2007-06-03 10:48 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-02 16:15 hoffman + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: remove debug that + caused tests to fail + +2007-06-02 06:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-06-01 23:06 hoffman + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: opps + +2007-06-01 15:40 hoffman + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: ENH: initial bullseye stuff + +2007-06-01 14:16 alex + + * Source/: cmake.cxx, cmake.h: + BUG: also put a variable into the cache when defined using -D if + no type is given, then STRING is used. Also add command line + option -U as suggested for undefining cache variables. This fixes + #4896 and #4264. + + Alex + +2007-06-01 13:17 alex + + * Modules/FindX11.cmake: + COMP: fix warnings on some machines where some X libs apparently + don't really work by reverting X11_LIBRARIES back to the old + version -add some more X11_xxx_FOUND variables -reformat comments + at the top -always use IF(INCLUDE_DIR and LIB) for setting FOUND + to TRUE + + Alex + +2007-06-01 11:18 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmAddLibraryCommand.cxx, + Source/cmGlobalGenerator.cxx: ENH: merge in a few more fixes from + the main tree + +2007-06-01 11:16 alex + + * Modules/CheckCSourceRuns.cmake, Modules/CheckCXXSourceRuns.cmake, + Modules/FindThreads.cmake, Modules/TestBigEndian.cmake, + Source/cmTryRunCommand.cxx, Source/cmTryRunCommand.h, + Tests/TryCompile/CMakeLists.txt, Tests/TryCompile/exit_success.c, + Tests/TryCompile/exit_with_error.c: + ENH: improve TRY_RUN() for crosscompiling: instead of just + failing, it now creates two cache variables, one for the + RUN_RESULT, one for the RUN_OUTPUT (if required), which can be + set or preset by the user. It has now also two new arguments: + RUN_OUTPUT_VARIABLE and COMPILE_OUTPUT_VARIABLE (the old + OUTPUT_VARIABLE merges both), so if only COMPILE_OUTPUT_VARIABLE + is used the run time output of the TRY_RUN is unused and the user + doesn't have to care about the output when crosscompiling. This + is now used in FindThreads.cmake, CheckC/CXXSourceRuns.cmake and + TestBigEndian.cmake, which used the output only for the logfile + (compile output is still there). Test/TryCompile/ now also tests + the behaviour of OUTPUT_VARIABLE, RUN_OUTPUT_VARIABLE and + COMPILE_OUTPUT_VARIABLE. + + Alex + +2007-06-01 11:06 alex + + * Source/cmCacheManager.cxx: + ENH: also handle comments for variables which contain newlines + + Alex + +2007-06-01 09:18 hoffman + + * Source/cmGlobalGenerator.cxx: BUG: fix crash, bug 5121 + +2007-05-31 22:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-31 16:18 alex + + * Source/kwsys/kwsysPlatformTests.cmake: + COMP: revert some of the changes for crosscompiling, not required + anymore with recent changes in cmake + + Alex + +2007-05-31 12:03 alex + + * Source/cmGetTargetPropertyCommand.cxx: + ENH: if get_target_property() doesn't find a target with the + given name, it returns now "-NOTFOUND" instead of + just "NOTFOUND", which can help in finding problems + + Alex + +2007-05-31 10:29 martink + + * Tests/: CMakeLists.txt, Properties/CMakeLists.txt, + Properties/properties.h.in, Properties/properties2.h, + Properties/SubDir/properties3.cxx: ENH: added new test for + SourceFile objects and properties + +2007-05-30 12:09 alex + + * Modules/FindX11.cmake: + ENH: mostly synced with FindX11.cmake from KDE svn: now also + searches for a lot of additional X11 libs, like Xv, Xau, Xrandr + and others + + Alex + +2007-05-30 10:40 alex + + * Source/kwsys/kwsysPlatformTests.cmake: + COMP: start crosscompiling Paraview3 (requires cmake cvs, + currently to scratchbox) + + Alex + +2007-05-30 05:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-29 11:36 alex + + * Modules/CMakeDetermineSystem.cmake, Modules/CMakeSystem.cmake.in, + Modules/CMakeSystemWithToolchainFile.cmake.in, + Tests/CMakeTests/ToolchainTest.cmake.in: + ENH: always provide CMAKE_SYSTEM_XXX() and MAKE_HOST_SYSTEM_XXX() + variables, so when cross compiling the build host platform can be + tested + + Alex + +2007-05-29 08:42 alex + + * Source/cmHexFileConverter.cxx: + COMP: less warnings with msvc8 + + Alex + +2007-05-29 05:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-28 17:49 king + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Finished previous fix. + +2007-05-28 13:46 king + + * Source/cmGlobalXCodeGenerator.cxx: COMP: Fixed shadowed local + warning. + +2007-05-28 13:32 king + + * Source/cmSourceFile.h: ENH: Removed unused methods that should + never be used anyway. + +2007-05-28 12:23 king + + * Source/cmake.h: STYLE: Fixed comment for Generate() method. + +2007-05-28 12:05 king + + * Source/cmTarget.cxx: ENH: Moved link library related code from + GenerateSourceFilesFromSourceLists to AnalyzeLibDependencies to + make the former do no more than what its name says. + +2007-05-28 11:41 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Added more install rules to + increase coverage of the command. + +2007-05-28 11:18 king + + * Source/: cmCustomCommand.cxx, cmCustomCommand.h, cmTarget.cxx: + ENH: Removed "Used" mark from custom commands. It is no longer + needed or checked by any generators. + +2007-05-28 11:16 king + + * Source/cmGlobalXCodeGenerator.cxx: ENH: Remove unused build rules + from Xcode. This change was made in the VS generators on + 2006-03-23 and should have been made for the Xcode generator too. + Also commented out some debug print statements. + +2007-05-28 11:03 king + + * Source/cmMakefileExecutableTargetGenerator.cxx: COMP: Fix build + on mac after change to GetSourceFiles signature. + +2007-05-28 11:02 king + + * Source/cmGlobalXCodeGenerator.cxx: COMP: Fix build of XCode + generator after change to GetSourceFiles signature. + +2007-05-28 11:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-28 11:00 king + + * Source/: cmGlobalVisualStudio8Generator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: COMP: Fix build for + windows-only generators after change to GetSourceFiles signature. + +2007-05-28 10:25 king + + * Source/: cmFLTKWrapUICommand.cxx, cmLocalGenerator.cxx, + cmTarget.cxx, cmTarget.h: ENH: Made cmTarget::GetSourceFiles + method return reference to const so addition of cmSourceFile + pointers must be done with an access method in cmTarget. + +2007-05-28 10:11 king + + * Source/: cmCPluginAPI.cxx, cmFLTKWrapUICommand.cxx, + cmQTWrapCPPCommand.cxx, cmQTWrapUICommand.cxx, cmSourceFile.h: + ENH: Made cmSourceFile::GetDepends return reference to const so + dependencies can be added only by an access method in + cmSourceFile. + +2007-05-28 10:07 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindPkgConfig.cmake, + Modules/UsePkgConfig.cmake, Modules/UseSWIG.cmake, + Modules/Platform/UnixPaths.cmake, Source/cmFileCommand.cxx, + Source/cmListCommand.h, Source/cmLocalGenerator.cxx, + Source/cmTryCompileCommand.h, Source/cmXCodeObject.cxx, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in: + ENH: merge in changes from branch RC 7 + +2007-05-28 09:59 king + + * Source/: cmFLTKWrapUICommand.cxx, cmMakefile.cxx, cmTarget.h: + ENH: Made cmTarget::GetSourceLists return a reference to const so + that all additions of sources must go through access methods in + cmTarget. + +2007-05-28 08:31 alex + + * Source/cmHexFileConverter.cxx: + COMP: fix warning on MSVC 8: conversion from 'size_t' to + 'unsigned int', possible loss of data + + Alex + +2007-05-27 18:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-27 10:32 hoffman + + * Source/cmXCodeObject.cxx: ENH: @ must be escaped in xcode + projects + +2007-05-27 04:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-26 14:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-25 16:46 alex + + * Modules/CMakeDetermineCompilerId.cmake, Source/cmFileCommand.cxx, + Source/cmFileCommand.h: + ENH: add option to FILE(STRINGS NO_HEX_CONVERSION) to disable + automatic conversion of hex and srec files to binary. Without + this automatic conversion, everywhere where a compiled file is + parsed for strings the a file(HEX2BIN somefile binfile) command + has to be added otherwise it will not work for these compilers. I + tried this with DetermineCompiler and CheckTypeSize and nobody + will do this except the users who work with such compilers. For + them it will break if they don't add this conversion command in + all these places. If FILE(STRINGS) is used with a text file, it + will in most cases still work as expected, since it will only + convert hex and srec files. If a user actually wants to get text + out of hex files, he knows what he's doing and will see the hint + in the documentation. + + Anyway, it should work without having to create a temporary file, + will work on this later. + + Alex + +2007-05-25 16:23 alex + + * Source/cmHexFileConverter.cxx: + COMP: less warnings (signed vs. unsigned) + + Alex + +2007-05-25 15:51 king + + * Source/cmGlobalGenerator.cxx: BUG: Need to create global targets + before AddHelperCommands is called. We should investigate + creating global targets at the beginning of the configure step + even if their commands are not populated or if they will not + actually be generated later. + +2007-05-25 15:22 alex + + * Modules/CMakeCCompilerId.c, + Modules/CMakeDetermineCompilerId.cmake, Modules/CMakeLists.txt, + Source/cmBootstrapCommands.cxx, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmHexFileConverter.cxx, + Source/cmHexFileConverter.h, Tests/StringFileTest/CMakeLists.txt, + Tests/StringFileTest/main.ihx, Tests/StringFileTest/main.srec: + ENH: make the compiler id detection work, even if the output file + name of the compiler is completely unknown and even if it + produces intel hex or motorola s-record files, with test + + Alex + +2007-05-25 12:05 alex + + * Source/cmTryRunCommand.cxx: + BUG: remove debug output + + Alex + +2007-05-25 11:41 king + + * Tests/: SimpleInstall/CMakeLists.txt, SimpleInstall/inst.cxx, + SimpleInstall/scripts/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt, SimpleInstallS2/inst.cxx, + SimpleInstallS2/scripts/CMakeLists.txt: ENH: Added testing of + REGEX option to INSTALL(DIRECTORY). Added tests to cover all + forms of old-style install commands. + +2007-05-25 11:09 king + + * Tests/: SimpleInstall/inst.cxx, SimpleInstallS2/inst.cxx: ENH: + Add test to see if INSTALL_FILES actually worked. + +2007-05-25 11:08 king + + * Source/: cmInstallFilesCommand.cxx, cmInstallFilesCommand.h: BUG: + Fix FILES mode after recent changes. + +2007-05-25 11:01 king + + * Source/: cmInstallFilesCommand.cxx, cmInstallProgramsCommand.cxx: + BUG: Fixed INSTALL_FILES and INSTALL_PROGRAMS commands to install + under the prefix like they did before the recent changes. + +2007-05-25 06:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-24 17:06 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: add copy header stuff + +2007-05-24 16:03 alex + + * Modules/CMakeCCompilerId.c, Modules/CheckTypeSize.cmake, + Source/cmTryRunCommand.cxx: + STYLE: remove debug output, fix indentation the tests run again + successfully, but since CheckTypeSize will switch to a + TRY_COMPILE soon I will look at it again after this change + + Alex + +2007-05-24 14:30 alex + + * Modules/CheckTypeSize.cmake, Source/cmTryRunCommand.cxx: + COMP: try to fix the test failures on dash2 + + Alex + +2007-05-24 12:06 alex + + * Source/cmCoreTryCompile.cxx, Source/cmTryCompileCommand.h, + Source/cmTryRunCommand.cxx, Tests/TryCompile/CMakeLists.txt: + ENH: add COPY_FILE argument to TRY_COMPILE, so the compiled + executable can be used e.g. for getting strings out of it. + + Alex + +2007-05-24 11:27 alex + + * Source/cmBootstrapCommands.cxx, Source/cmCoreTryCompile.cxx, + Source/cmCoreTryCompile.h, Source/cmTryCompileCommand.cxx, + Source/cmTryCompileCommand.h, Source/cmTryRunCommand.cxx, + Source/cmTryRunCommand.h, Tests/TryCompile/CMakeLists.txt, + Tests/TryCompile/exit_success.c, + Tests/TryCompile/exit_with_error.c: + ENH: add two simple tests for TRY_RUN() STYLE: create a new base + class cmCoreTryCompile, from which cmTryCompileCommand and + cmTryRunCommand are derived, so there are no public static + functions with lots of arguments anymore + + Alex + +2007-05-24 09:35 alex + + * Modules/CMakeCCompilerId.c: + ENH: add compiler id for sdcc + + Alex + +2007-05-24 08:56 alex + + * Source/: cmTryCompileCommand.cxx, cmTryCompileCommand.h, + cmTryRunCommand.cxx: + ENH: move output file search to cmTryCompileCommand.cxx, so it + can be used there too... many public static functions with lots + of arguments... :-/ + + Alex + +2007-05-24 08:43 alex + + * Source/: cmLocalGenerator.cxx, cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmTarget.cxx: + BUG: don't use non-imported target when cross compiling as + commands in custom commands STYLE: remove now invalid comments, + use this-> + + Alex + +2007-05-24 08:33 alex + + * Modules/: CMakeCCompilerId.c, CMakeDetermineCCompiler.cmake, + TestBigEndian.cmake: + ENH: add compiler id for IAR compiler (http://www.iar.com/) ENH: + don't run endian test again if the variable is already set + + Alex + +2007-05-24 08:18 alex + + * Source/cmListCommand.h: + STYLE: use "items" instead od "item" + + Alex + +2007-05-24 05:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-23 18:22 king + + * Source/: cmLocalGenerator.cxx: ENH: Removed unused code now that + INSTALL_FILES and INSTALL_PROGRAMS are not targets. + +2007-05-23 17:58 king + + * Tests/BuildDepends/CMakeLists.txt: BUG: Report proper error + message when project does not build the first time. Also added + hack to rebuild subproject several times for Xcode. The + generator should be fixed and the hack removed. + +2007-05-23 17:21 king + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Need to use + GetRealDependency for custom command file-level dependencies. + +2007-05-23 17:01 king + + * Tests/BuildDepends/Project/CMakeLists.txt: ENH: Executable bar + should rebuild when its generated header changes. It does not + need to link to the foo library anymore. + +2007-05-23 15:40 king + + * Source/: cmExportLibraryDependencies.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, cmGlobalXCodeGenerator.cxx, + cmInstallFilesCommand.cxx, cmInstallFilesCommand.h, + cmInstallProgramsCommand.cxx, cmInstallProgramsCommand.h, + cmLocalGenerator.cxx, cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmMakefile.cxx, cmTarget.cxx: + ENH: Fixed INSTALL_FILES and INSTALL_PROGRAMS commands to not + create targets. No targets of type cmTarget::INSTALL_FILES or + cmTarget::INSTALL_PROGRAMS are created, so we do not need to + check for them everywhere anymore. + +2007-05-23 13:30 king + + * Tests/BuildDepends/Project/generator.cxx: BUG: Target names in + the COMMAND part of a custom command should not create a + file-level dependency that forces the command to rerun when the + executable target rebuilds, but the target-level dependency + should still be created. Target names in a DEPENDS should do + both a target-level and file-level dependency. Updated the + BuildDepends test to check that this works. + +2007-05-23 13:27 king + + * Source/cmAddCustomCommandCommand.h, Source/cmTarget.cxx, + Source/cmTarget.h, Tests/BuildDepends/CMakeLists.txt, + Tests/BuildDepends/Project/CMakeLists.txt, + Tests/BuildDepends/Project/bar.cxx: BUG: Target names in the + COMMAND part of a custom command should not create a file-level + dependency that forces the command to rerun when the executable + target rebuilds, but the target-level dependency should still be + created. Target names in a DEPENDS should do both a target-level + and file-level dependency. Updated the BuildDepends test to + check that this works. + +2007-05-23 12:05 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Add ./ to custom + command executables in the top of the build tree even when the + path is generated by target name replacement. + +2007-05-23 11:00 king + + * Modules/: CMakeCCompilerId.c, CMakeCXXCompilerId.cpp, + CMakePlatformId.h: ENH: Unify design of CMakeCCompilerId.c, + CMakeCXXCompilerId.cpp, and CMakePlatformId.h. BUG: Do not + violate system-reserved symbol namespace _[A-Z]. + +2007-05-23 08:24 alex + + * Source/cmTarget.cxx: + COMP: don't user string::clear(), fix warnings about unused + variables + + Alex + +2007-05-22 17:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-22 12:48 alex + + * Modules/: CMakeCCompilerId.c, CMakeDetermineSystem.cmake, + CMakePlatformId.h, CMakeSystemWithToolchainFile.cmake.in: + BUG: now the toolchain file is configured into the buildtree, + otherwise e.g. CMAKE_SOURCE_DIR can't be used there ENH: modify + CMakeCCompilerId.c and .h so that sdcc can compile them. As they + were the preprocessor produced: + + 9 "test.c" + static char const info_compiler[] = "INFO:compiler[" # 40 + "test.c" "" + + "]"; + + and the mixing of the preprocessing directives and the string + constants didn't work. + + Alex + +2007-05-22 11:05 alex + + * Source/cmIncludeExternalMSProjectCommand.cxx: COMP: compile fix + + Alex + +2007-05-22 10:42 alex + + * Source/: cmAddExecutableCommand.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: + COMP: compile fix and remove warning + + Alex + +2007-05-22 10:24 alex + + * Source/: cmAddDependenciesCommand.cxx, + cmAddExecutableCommand.cxx, cmGetTargetPropertyCommand.cxx, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudioGenerator.cxx, cmGlobalXCodeGenerator.cxx, + cmIncludeExternalMSProjectCommand.cxx, cmInstallCommand.cxx, + cmInstallTargetGenerator.cxx, cmLocalGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalVisualStudio6Generator.cxx, cmMakefile.cxx, cmMakefile.h, + cmMakefileTargetGenerator.cxx, cmSetTargetPropertiesCommand.cxx, + cmTarget.cxx, cmTarget.h: + ENH: add the IMPORT keyword to ADD_EXECUTABLE(), which generates + an "imported" executable target. This can then be used e.g. with + ADD_CUSTOM_COMMAND() to generate stuff. It adds a second + container for "imported" targets, and FindTarget() now takes an + additional argument bool useImportedTargets to specify whether + you also want to search in the imported targets or only in the + "normal" targets. + + Alex + +2007-05-22 09:15 alex + + * Modules/: CMakeGenericSystem.cmake, Platform/gcc.cmake: + STYLE: move the two CMAKE_SHARED_LIBRARYC/CXX_FLAGS for gcc from + CMakeGenericSystem.cmake to gcc.cmake + + Alex + +2007-05-22 04:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-21 11:26 alex + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineSystem.cmake, CMakeLists.txt, CMakeSystem.cmake.in, + CMakeSystemWithToolchainFile.cmake.in: + STYLE: use a separate source file for generating + CMakeSystem.cmake if CMAKE_TOOLCHAIN_FILE is used + + Alex + +2007-05-21 10:58 alex + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: + BUG: don't fail if a compiler is given in CMAKE_C/CXX_COMPILER + but it can't be found in the path + + Alex + +2007-05-21 10:15 alex + + * Modules/CMakeFindBinUtils.cmake, Tests/CMakeLists.txt: + BUG: always search for ar, ranlib, etc. except under MSVC -> this + should fix the mingw fortran test -also generate the fortran test + with the kdevelop generator + + Alex + +2007-05-21 05:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-20 10:11 king + + * Tests/CMakeLists.txt: BUG: Fix name of project to build for + LoadCommandOneConfig now that it has been renamed for new name of + LoadCommand test. + +2007-05-20 10:08 king + + * Modules/CMakeDetermineSystem.cmake: BUG: Use @ONLY substitution + to configure CMakeSystem.cmake. + +2007-05-20 02:39 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-19 10:15 king + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommandOneConfig/CMakeLists.txt: BUG: Finish fixing test for + new name. + +2007-05-19 10:11 hoffman + + * Utilities/KWStyle/CMake.kws.xml.in: ENH: try to tone down kwstyle + +2007-05-19 10:10 hoffman + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommandOneConfig/CMakeLists.txt: BUG: fix project name for + test + +2007-05-19 09:55 king + + * Source/cmFileCommand.cxx: COMP: Fix for borland now that + components list check is const. + +2007-05-18 20:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-18 15:11 martink + + * Tests/: CMakeLists.txt, ExternalOBJ/CMakeLists.txt, + LinkLine/CMakeLists.txt, MacroTest/CMakeLists.txt: ENH: some + cleanup, condensing some tests, removing arguments that were not + needed but rather were cut and paste copies etc + +2007-05-18 14:41 alex + + * Source/CPack/: bills-comments.txt, cmCPackGenericGenerator.cxx: + ENH: 2nd try to move stripping out of cpack and to install time, + now if CPACK_STRIP_FILES is true (or contains a list of files), + everything will be stripped, if it's empty or false they won't be + stripped + + Alex + +2007-05-18 13:43 alex + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx: + ENH: add install/strip target for makefile generators if strip + was found + + Alex + +2007-05-18 11:57 alex + + * Modules/Platform/Darwin.cmake, + Source/cmInstallTargetGenerator.cxx: ENH: move hack to fix "new + cmake on old build tree on OSX doesn't have + CMAKE_INSTALL_NAME_TOOL in the cache" from + cmInstallTargetGenerator.cxx to Darwin.cmake + + Alex + +2007-05-18 11:45 alex + + * Source/CPack/cpack.cxx: + COMP: force a recompile on VS71 + + Alex + +2007-05-18 11:36 king + + * Modules/Platform/UnixPaths.cmake, Source/cmLocalGenerator.cxx: + ENH: Use CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES from platform + files to block link directories. + +2007-05-18 10:55 alex + + * Modules/: CMakeFindBinUtils.cmake, Platform/cl.cmake: COMP: if a + new cmake runs on an old build tree, set CMAKE_LINKER to link to + make it link + + Alex + +2007-05-18 10:32 alex + + * Modules/Platform/cl.cmake, Source/cmLocalGenerator.cxx: COMP: fix + link rules with nmake, the linker command has to be converted to + shortpath form for nmake + + Alex + +2007-05-18 09:33 king + + * Tests/CustomCommand/CMakeLists.txt: BUG: Replace "with space" in + custom command argument tests with "w s" to still have whitespace + but be shorter. The test was failing because the custom command + line length was simply too long for the VS IDE. + +2007-05-18 09:30 hoffman + + * Source/cmTryCompileCommand.h: STYLE: fix documentation for + command + +2007-05-18 09:18 king + + * Tests/CustomCommand/: CMakeLists.txt, check_command_line.c.in: + ENH: Added quick means to turn on verbose output for debugging + this test. + +2007-05-18 09:17 king + + * Source/kwsys/System.c: BUG: Added carrot (^) to characters that + need quoting. The solaris shell needs it. + +2007-05-18 09:16 alex + + * Modules/CMakeDetermineFortranCompiler.cmake: STYLE: fdcorrect + comments about FC/CC + + Alex + +2007-05-18 09:08 king + + * Modules/: CMakeDetermineCompilerId.cmake, + CMakeDetermineFortranCompiler.cmake: BUG: If the Fortran + CompilerId source fails to compile it should not be a failure. + It is only expected to work for Fortran90 compilers. + +2007-05-18 08:49 alex + + * Source/: cmFileCommand.cxx, cmFindBase.cxx, cmFindBase.h, + cmInstallTargetGenerator.cxx, cmTryRunCommand.cxx: + STYLE: fix line lengths + + Alex + +2007-05-17 17:43 king + + * Source/cmInstallTargetGenerator.cxx: BUG: Need to use + GetSafeDefinition when assigning to a string. + +2007-05-17 17:40 king + + * Source/: cmIfCommand.cxx, cmMakefile.cxx, cmMakefile.h, + cmVariableWatch.h: BUG: All variable accesses should produce + watch callbacks, including IF(DEFINED ) ones. Instead we + define a new access type for IF(DEFINED) so that the error does + not show up for backward compatibility variables. + +2007-05-17 17:21 alex + + * Source/cmInstallTargetGenerator.cxx: STYLE: fix indentation ENH: + add hack to make new cmake work with older existing cmake build + trees + + Alex + +2007-05-17 16:50 alex + + * Source/cmGlobalKdevelopGenerator.cxx: + STYLE: use braces + + Alex + +2007-05-17 16:49 alex + + * Modules/CMakeFindBinUtils.cmake: ENH: fail if install_name_tool + wasn't found + + Alex + +2007-05-17 15:17 king + + * Modules/CheckTypeSize.cmake, + Utilities/cmcurl/CMake/CheckTypeSize.cmake: ENH: Use IF(NOT + DEFINED) check to short-circuit size test. + +2007-05-17 15:12 king + + * Source/: cmIfCommand.cxx, cmMakefile.cxx, cmMakefile.h: BUG: Do + not complain about missing watched variables when they are + accessd with IF(DEFINED VAR). + +2007-05-17 14:47 king + + * Source/cmMakefile.cxx: COMP: GCC 2.95 does not have + std::string::clear() method. + +2007-05-17 14:41 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmCTest.cxx, + Source/cmIfCommand.h, Source/cmListFileCache.h, + Source/cmLocalGenerator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/CPack/cmCPackTarCompressGenerator.cxx: ENH: merge in + changes from main tree + +2007-05-17 14:32 king + + * Tests/CustomCommand/CMakeLists.txt: ENH: Add testing of * and / + character arguments except on MinGW. + +2007-05-17 14:03 king + + * Tests/CustomCommand/CMakeLists.txt: ENH: Added test for custom + command lines with special single-character arguments. + +2007-05-17 14:01 king + + * Source/kwsys/System.c: BUG: Some single-character arguments need + quoting on windows. + +2007-05-17 13:28 king + + * Tests/CustomCommand/CMakeLists.txt: BUG: Disable test of angle + bracket escapes until it works everywhere. + +2007-05-17 13:20 alex + + * Modules/CMakeCCompiler.cmake.in, Modules/CMakeCInformation.cmake, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakeFindBinUtils.cmake, Modules/CMakeLists.txt, + Modules/CMakeSystem.cmake.in, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestCCompiler.cmake, Modules/CTest.cmake, + Modules/CheckTypeSize.cmake, Modules/Platform/Windows-cl.cmake, + Modules/Platform/cl.cmake, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmFindBase.cxx, + Source/cmFindBase.h, Source/cmIncludeCommand.cxx, + Source/cmIncludeCommand.h, Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmTryRunCommand.cxx, + Source/cmUtilitySourceCommand.cxx, + Source/cmUtilitySourceCommand.h, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestTestHandler.h, + Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/DummyToolchain.cmake, + Tests/CMakeTests/FindBaseTest.cmake.in, + Tests/CMakeTests/IncludeTest.cmake.in, + Tests/CMakeTests/ToolchainTest.cmake.in, + Tests/CMakeTests/include/cmake_i_do_not_exist_in_the_system.h: + ENH: merge CMake-CrossCompileBasic to HEAD -add a RESULT_VARIABLE + to INCLUDE() -add CMAKE_TOOLCHAIN_FILE for specifiying your + (potentially crosscompiling) toolchain -have TRY_RUN() complain + if you try to use it in crosscompiling mode (which were compiled + but cannot run on this system) -use CMAKE_EXECUTABLE_SUFFIX in + TRY_RUN(), probably TRY_RUN won't be able to run the executables + if they have a different suffix because they are probably + crosscompiled, but nevertheless it should be able to find them + -make several cmake variables presettable by the user: + CMAKE_C/CXX_COMPILER, CMAKE_C/CXX_OUTPUT_EXTENSION, + CMAKE_SYSTEM_NAME, CMAKE_SYSTEM_INFO_FILE -support prefix for GNU + toolchains (arm-elf-gcc, arm-elf-ar, arm-elf-strip etc.) -move + ranlib on OSX from the file command to a command in executed in + cmake_install.cmake -add support for stripping during install in + cmake_install.cmake -split out cl.cmake from Windows-cl.cmake, + first (very incomplete) step to support MS crosscompiling tools + -remove stdio.h from the simple C program which checks if the + compiler works, since this may not exist for some embedded + platforms -create a new CMakeFindBinUtils.cmake which collects + the search fro ar, ranlib, strip, ld, link, install_name_tool and + other tools like these -add support for CMAKE_FIND_ROOT_PATH for + all FIND_XXX commands, which is a list of directories which will + be prepended to all search directories, right now as a cmake + variable, turning it into a global cmake property may need some + more work -remove cmTestTestHandler::TryExecutable(), it's unused + -split cmFileCommand::HandleInstall() into slightly smaller + functions + + Alex + +2007-05-17 11:27 king + + * Source/cmSystemTools.cxx: BUG: Fix ExpandListArgument when the + string ends in a backslash. + +2007-05-17 11:18 king + + * Source/cmTarget.cxx: BUG: An empty configuration name is + equivalent to no configuration. + +2007-05-17 11:12 alex + + * Source/: cmFileCommand.h, cmIncludeCommand.cxx, + cmInstallTargetGenerator.cxx: COMP: less warnings with msvc7 + + Alex + +2007-05-17 11:09 alex + + * Tests/CMakeTests/: FindBaseTest.cmake.in, ToolchainTest.cmake.in: + BUG: correct quoting in the tests so that the new tests pass + + Alex + +2007-05-17 10:53 king + + * Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalMinGWMakefileGenerator.cxx, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Tests/CustomCommand/CMakeLists.txt: ENH: Added testing for custom + command line arguments containing all special characters on the + US keyboard. Fixed curly brace arguments on borland and % + arguments in mingw32-make. + +2007-05-17 10:53 king + + * Source/kwsys/: System.c, System.h.in: ENH: Added more special + unix shell characters that require quoting. Added escaping of % + as %% for shells inside mingw32-make. + +2007-05-17 10:24 alex + + * Modules/CMakeCCompiler.cmake.in, Modules/CMakeCCompilerId.c, + Modules/CMakeCInformation.cmake, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeCXXCompilerId.cpp, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineCompilerId.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakeFindBinUtils.cmake, + Modules/CMakeFortranCompiler.cmake.in, + Modules/CMakeFortranInformation.cmake, + Modules/CMakeGenericSystem.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CPack.cmake, Modules/CTest.cmake, Modules/Dart.cmake, + Modules/DartConfiguration.tcl.in, Modules/Platform/Darwin.cmake, + Modules/Platform/Linux.cmake, Modules/Platform/Windows-cl.cmake, + Modules/Platform/cl.cmake, Source/CMakeLists.txt, + Source/cmBootstrapCommands.cxx, Source/cmCommands.cxx, + Source/cmCustomCommand.h, Source/cmFindBase.cxx, + Source/cmFindBase.h, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalWatcomWMakeGenerator.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmIncludeCommand.cxx, + Source/cmIncludeCommand.h, Source/cmListFileCache.h, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/cmLocalVisualStudioGenerator.h, Source/cmMakefile.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.h, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, + Source/cmMakefileUtilityTargetGenerator.cxx, Source/cmTarget.cxx, + Source/cmTarget.h, Source/cmTryRunCommand.cxx, + Source/cmTryRunCommand.h, Source/cmVersion.cxx, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CTest/cmCTestTestHandler.cxx, Source/kwsys/ProcessUNIX.c, + Source/kwsys/System.c, Templates/DLLHeader.dsptemplate, + Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/UtilityHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate, + Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/DummyToolchain.cmake, + Tests/CMakeTests/FindBaseTest.cmake.in, + Tests/CMakeTests/IncludeTest.cmake.in, + Tests/CMakeTests/ToolchainTest.cmake.in, + Tests/CMakeTests/include/cmake_i_do_not_exist_in_the_system.h: + ENH: merge changes from HEAD into the branch -change INCLUDE(file + [OPTIONAL] [VAR]) to INCLUDE(file [OPTIONAL] [RESULT_VARIABLE + VAR]) -add tests for INCLUDE(), CMAKE_TOOLCHAIN_FILE and + FIND_XXX() -keep the stripping in CPack for now -support a MS + toolchain suffix + + Alex + +2007-05-17 10:07 hoffman + + * Modules/: CMakeCCompilerId.c, CMakeCXXCompilerId.cpp, + CMakeDetermineCompilerId.cmake: ENH: fix up compiler id to be + more robust + +2007-05-17 08:38 hoffman + + * Modules/CMakeCXXCompilerId.cpp: BUG: make sure this thing + compiles on 64 bit machines + +2007-05-17 07:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-16 19:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-16 16:19 king + + * Source/kwsys/System.c: BUG: Shell escaping needs to write % as %% + for VS IDE. + +2007-05-16 13:26 king + + * Modules/Platform/Windows-wcl386.cmake: ENH: Enabled preprocessor + make rules for Watcom. + +2007-05-16 13:24 king + + * Source/: cmGlobalUnixMakefileGenerator3.h, + cmGlobalWatcomWMakeGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, cmMakefileTargetGenerator.cxx: + BUG: Watcom WMake needs empty rule commands even for symbolic + targets. This fixes the cmake_force target. + +2007-05-16 13:10 king + + * Source/kwsys/ProcessUNIX.c: BUG: Do not send both SIGSTOP and + SIGKILL when killing a process. The SIGSTOP seems to be able to + block the SIGKILL occasionally. Also the SIGKILL is sufficient + since the process table entry will still exist until it is reaped + with waitpid. + +2007-05-16 11:40 king + + * Tests/: Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx: BUG: Disable test of + feature that is not documented or implemented everywhere. + +2007-05-16 10:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-16 09:07 king + + * Source/cmLocalGenerator.cxx: BUG: Do not emit /usr/lib32 or + /usr/lib64 as linker paths. Submitted by David Faure. + +2007-05-16 07:56 andy + + * Tests/BuildDepends/Project/CMakeLists.txt: BUG: check in the rest + of the changes to move from c to cxx + +2007-05-16 07:54 andy + + * Tests/BuildDepends/: CMakeLists.txt, Project/bar.c, + Project/bar.cxx: BUG: fix test for hp move to c++ to avoid ansi + issues and produce a message if the compile fails, (really + checked in by Bill H.) + +2007-05-15 16:55 alex + + * Modules/Platform/Windows-cl.cmake: BUG: let INCLUDE() actually + find cl.cmake + + Alex + +2007-05-15 16:53 alex + + * Modules/Platform/: Windows-cl.cmake, cl.cmake: + ENH: create a separate cl.cmake as preparation for supporting the + cross-compiling cl's + + Alex + +2007-05-15 16:06 alex + + * Source/cmTarget.cxx: + BUG: fix segfault when trying to get the object file for a + sourcefile in an unknown language via GET_TARGET_PROPERTY(), as + reported by Trevor Kellaway + + Alex + +2007-05-15 13:30 alex + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeFindBinUtils.cmake, + Modules/CMakeGenericSystem.cmake, + Modules/Platform/Windows-cl.cmake, Modules/Platform/gcc.cmake, + Source/cmIncludeCommand.cxx, Source/cmIncludeCommand.h, + Source/cmInstallTargetGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h: + ENH: some adjustments as suggested by Brad: only check for the + various "binutils" on the respective platform, hardcode the strip + command, make the return variable of include() available also + without OPTIONAL, honor DESTDIR for strip and ranlib -use + FIND_PROGRAM(CMAKE_LINKER link) for the MSVC linker + + Alex + +2007-05-15 10:23 king + + * Modules/: CTest.cmake, Dart.cmake: STYLE: Added basic usage + documentation. + +2007-05-15 03:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-14 17:02 alex + + * Source/: cmFileCommand.cxx, cmInstallTargetGenerator.cxx, + cmInstallTargetGenerator.h: + ENH: move ranlib handling on _APPLE_CC_ from the file command to + the InstallTargetGenerator + + Alex + +2007-05-14 16:28 alex + + * CMakeLists.txt, Modules/CMakeGenericSystem.cmake, + Modules/CPack.cmake, Modules/Platform/gcc.cmake, + Source/cmGlobalGenerator.cxx, + Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/CPack/cmCPackGenericGenerator.cxx: + ENH: move stripping from cpack to cmake/install time, fully + configurable via the CMAKE_STRIP_FILE rule, currently only + implemented for the GNU toolchain. Now cpack should work also + for cross compiling (since it doesn't have to know the executable + suffix anymore). + + stripping can be enabled/disabled via the cache variable + CMAKE_INSTALL_DO_STRIP. + + Even if this is disabled, the cmake_install.cmake files still + contain the strip rules, so by running cmake + -DCMAKE_INSTALL_DO_STRIP=1 cmake_install.cmake you can install + with stripping also in this case. + + Alex + +2007-05-14 13:46 alex + + * Source/: cmFileCommand.cxx, cmFileCommand.h: + STYLE: split the HandleInstallCommand() into shorter functions + (which are still quite long) + + Alex + +2007-05-14 11:23 alex + + * Source/: cmGlobalXCodeGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, cmTarget.cxx: + STYLE: fix line lengths + + Alex + +2007-05-14 11:07 alex + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeFindBinUtils.cmake, Modules/CMakeLists.txt, + Source/cmInstallTargetGenerator.cxx: + ENH: -added new CMakeFindBinUtils.cmake to have less code + duplication in CMakeDetermineC/C++?FortranCompiler.cmake, -added + CMAKE_INSTALL_NAME_TOOL variable, only run install_name_tool + handling if this was found + + Alex + +2007-05-14 09:46 alex + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: + ENH: use GetCTestConfiguration("ExecutableSuffix") instead + instead of cmSystemTools::GetExecutableExtension() -rmove the + unused TryExecutable() + + Alex + +2007-05-14 08:59 martink + + * Tests/CMakeLists.txt: ENH: revert back to SUBDIRS so that CMake + can be built with 2.2 + +2007-05-14 08:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-13 10:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-13 09:11 hoffman + + * CMakeLists.txt: ENH: revert to SUBDIRS to make sure cmake can be + built with 2.2 + +2007-05-13 07:16 king + + * CMakeLists.txt, Source/cmBootstrapCommands.cxx, + Source/cmCommands.cxx: COMP: Need CMake 2.4 or a bootstrap cmake + that has ADD_SUBDIRECTORY to build. + +2007-05-12 02:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-11 16:25 alex + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, Source/cmFindBase.cxx, + Source/cmIncludeCommand.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h: + ENH: -search CMAKE_TOOLCHAIN_FILE at first relative to the + CMAKE_BINARY_DIR -if in CMAKE_C_COMPILER only the basename of the + compiler without path was given then find the path + -CMAKE_FIND_PREFIX can now be a list of directories -via + CMAKE_PROGRAM_FIND_PREFIX_MODE, CMAKE_LIBRARY_FIND_PREFIX_MODE + and CMAKE_INCLUDE_FIND_PREFIX_MODE the default behaviour for + these 3 types can be adjusted: *at first the directories with the + prefixes, then without prefixes (default, unset) *only the + prefixes (useful for libs and headers, "ONLY") *only without the + prefixes (useful for programs, "NEVER") + + Alex + +2007-05-11 14:03 alex + + * Source/: cmListFileCache.h, cmTryRunCommand.cxx, + cmUtilitySourceCommand.cxx: + BUG: same as HEAD: use a std::string instead a const char* for + storing the filename + + ENH: use CMAKE_EXECUTABLE_SUFFIX() in try_run and utility_source, + although usually they won't be able to run the executables (but + IMO they shouldn't complain they can't find the executables) + + ENH: try_run now fails with "cant run executables if used with + this toolchain" if used with a user defined toolchain which + didn't reset the CMAKE_ALIEN_EXECUTABLES flag + + Alex + +2007-05-11 13:52 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + BUG: Fixed generation of XCODE_DEPEND_HELPER.make into proper + directory. Cleaned up duplicate code created by recent changes. + +2007-05-11 13:46 alex + + * Modules/CTest.cmake, Modules/DartConfiguration.tcl.in, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CTest/cmCTestTestHandler.cxx: + ENH: allow it to set UPDATE_TYPE via CTEST_UPDATE_TYPE from + CTestConfig.cmake -add EXECUTABLE_SUFFIX to DartConfig.tcl so it + can be used in ctest -use CPACK_EXECUTABLE_SUFFIX for cpack + (strip, which doesn't work because of the install dir) + + Alex + +2007-05-11 13:06 alex + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, + CMakeSystemSpecificInformation.cmake, CPack.cmake: + ENH: also use the target platform strip and executable suffix in + cpack use the new include() parameter to handle both full-path + and module-name-only SYSTEM_INFO files + + Alex + +2007-05-11 12:17 martink + + * CMakeLists.txt, Tests/CMakeLists.txt: ENH: minor fixes + +2007-05-11 11:55 alex + + * Source/: cmIncludeCommand.cxx, cmIncludeCommand.h: + ENH: if OPTIONAL is used, give the user a way to check whether + the file was included or not (by setting a variable to the full + path or NOTFOUND) Additionally now fail if a second argument is + used and this is not "OPTIONAL" + + Alex + +2007-05-11 10:34 alex + + * Modules/: CMakeDetermineSystem.cmake, CMakeSystem.cmake.in, + CMakeSystemSpecificInformation.cmake, CheckTypeSize.cmake: + ENH: only check for the type size if it hasn't already been set, + put a bit more information in the CMakeSystemInformation.cmake + file if it has been used with a toolchain file, use the file + given in the toolchain file as CMake_SYSTEM_INFO_FILE + + Alex + +2007-05-11 10:22 martink + + * CMakeLists.txt, Tests/CMakeLists.txt, Tests/COnly/CMakeLists.txt, + Tests/CxxOnly/CMakeLists.txt, Tests/MathTest/CMakeLists.txt, + Tests/NewlineArgs/CMakeLists.txt, Tests/ObjC++/CMakeLists.txt, + Tests/PreOrder/CMakeLists.txt, Tests/SetLang/CMakeLists.txt, + Tests/Simple/CMakeLists.txt, + Tests/SystemInformation/CMakeLists.txt, + Tests/TarTest/CMakeLists.txt: ENH: some more CMakeList cleanups + +2007-05-11 09:02 martink + + * CMakeLists.txt, Source/CMakeLists.txt, Tests/CMakeLists.txt: ENH: + more cleanup of some CMakeLists files + +2007-05-11 08:36 alex + + * Source/cmListFileCache.h: + BUG: const char* FilePath could point to a non-existent + std::string for commands used in a macro, using a std::string + instead copies the contents so this works (correct error message) + + Alex + +2007-05-11 08:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-10 15:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-10 15:13 hoffman + + * Utilities/: CMakeLists.txt, KWStyle/CMake.kws.xml.in, + KWStyle/CMakeFiles.txt.in, KWStyle/CMakeLists.txt, + KWStyle/CMakeOverwrite.txt, KWStyle/Headers/CMakeHeader.h: ENH: + add KWStyle support + +2007-05-10 14:43 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: BUG: fix -D escaped quotes for + watcom + +2007-05-10 14:08 martink + + * CMakeCPack.cmake, CMakeLists.txt, CompileFlags.cmake: ENH: start + trying to cleanup CMakeLists files + +2007-05-10 13:03 alex + + * Source/: cmTarget.cxx, cmTarget.h: + ENH: return the default location for imported targets if the + config-dependent locations are not set + + Alex + +2007-05-10 11:41 alex + + * Source/: cmAddDependenciesCommand.cxx, + cmAddExecutableCommand.cxx, cmGetTargetPropertyCommand.cxx, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudioGenerator.cxx, cmGlobalXCodeGenerator.cxx, + cmIncludeExternalMSProjectCommand.cxx, cmInstallCommand.cxx, + cmInstallFilesCommand.cxx, cmInstallTargetGenerator.cxx, + cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmMakefile.cxx, cmMakefile.h, + cmMakefileTargetGenerator.cxx, cmSetTargetPropertiesCommand.cxx, + cmTarget.cxx, cmTarget.h: + ENH: first try at "importing" targets (from other build trees), + now done using a separate container for the imported targets -as + in HEAD: move TraceVSDependencies() to one central place, + GlobalGenerator::Generate() + + Alex + +2007-05-10 11:38 alex + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h, + cmLocalVisualStudio7Generator.cxx, cmTarget.cxx: + STYLE: fix line length + + Alex + +2007-05-10 11:16 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: make sure escaping is + done for strings on the command line + +2007-05-10 10:31 hoffman + + * Source/CMakeLists.txt: ENH: add test for a simple depend test, + does an exe re-link if a library that it uses changes + +2007-05-10 10:05 hoffman + + * Tests/BuildDepends/: CMakeLists.txt, Project/bar.c: ENH: add test + for build depends + +2007-05-10 10:05 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix for move of trace + depends + +2007-05-09 15:10 hoffman + + * Tests/BuildDepends/: CMakeLists.txt, Project/CMakeLists.txt, + Project/bar.c: ENH: add a test to make sure Xcode does not break + again + +2007-05-09 14:41 alex + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmLocalGenerator.h, cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: + BUG: fix problem for non-C/CXX languages with Visual Studio, the + dependencies for the custom commands added for java were not + handled correctly. Needs more work. + + Alex + +2007-05-09 11:44 alex + + * Source/: cmAddExecutableCommand.cxx, + cmGlobalUnixMakefileGenerator3.cxx, + cmIncludeExternalMSProjectCommand.cxx, + cmLocalUnixMakefileGenerator3.cxx, cmMakefile.cxx, cmMakefile.h, + cmMakefileTargetGenerator.cxx, cmTarget.cxx, cmTarget.h: + ENH: initial try for support for "importing" targets into cmake, + so e.g. the support for libs in release- and debug mode can be + done much better and importeed executable targets can be used in + custom commands (-> cross compiling) + + Alex + +2007-05-09 10:28 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix for older xcode and + framework create + +2007-05-09 10:18 king + + * Source/cmLocalVisualStudio7Generator.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx: BUG: Fixed + cmLocalVisualStudio7Generator to deal with quotes in macro + definitions properly. This addresses bug#4983. + +2007-05-09 09:35 alex + + * Source/: cmTarget.cxx, cmTarget.h: + STYLE: functions use upper case for the first letter + + Alex + +2007-05-09 09:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-09 08:25 alex + + * Source/cmCustomCommand.h, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/cmLocalVisualStudioGenerator.h, Source/cmMakefile.cxx, + Source/cmTarget.cxx, Source/cmTarget.h, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/UtilityHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate, + Tests/CustomCommand/CMakeLists.txt, Tests/CustomCommand/main.cxx, + Tests/CustomCommand/GeneratorInExtraDir/CMakeLists.txt: + ENH: now target names can be used in add_custom_command() and + add_custom_target() as COMMAND, and cmake will recognize them and + replace them with the actual output path of these executables. + Also the dependency will be added automatically. Test included. + ENH: moved TraceVSDependencies() to the end of + GlobalGenerator::Configure(), so it is done now in one central + place + + Alex + +2007-05-08 16:58 alex + + * Tests/CustomCommand/: CMakeLists.txt, + GeneratorInExtraDir/CMakeLists.txt: + ENH: also test if the dependency to a target works with POSTBUILD + + Alex + +2007-05-08 16:37 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: getting closer + +2007-05-08 15:49 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: add initial xcode + framework stuff + +2007-05-08 15:29 alex + + * Source/cmLocalVisualStudio7Generator.cxx: COMP: a closing brace + was missing + + Alex + +2007-05-08 14:47 alex + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, cmGlobalXCodeGenerator.cxx, + cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: + ENH: move TraceVSDependencies() from every generator to the end + of GlobalGenerator::Configure(), removes some code duplication + and makes it easier to add support for "importing" targets + + Alex + +2007-05-08 14:28 alex + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalGenerator.cxx, cmGlobalVisualStudio7Generator.cxx, + cmGlobalXCodeGenerator.cxx: + STYLE: standard for-loop-initialization in the MSVC generator, + one level less deep if-statement in XCode generator, one level + less deep function call in the global generator -> makes it + easier to understand IMO + + Alex + +2007-05-08 14:10 alex + + * Source/cmTarget.h: + STYLE: GetName() is const, comment updated + + Alex + +2007-05-08 12:43 hoffman + + * Tests/Framework/: bar.cxx, foo.cxx: ENH: make it work on non + windows + +2007-05-08 11:53 hoffman + + * Source/cmLocalGenerator.cxx, Tests/Framework/CMakeLists.txt, + Tests/Framework/bar.cxx, Tests/Framework/foo.cxx: ENH: fix it so + that the FRAMEWORK property does not break the building of normal + shared libs on non-mac platforms + +2007-05-08 11:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-08 10:58 hoffman + + * Source/CMakeLists.txt, Tests/Framework/CMakeLists.txt, + Tests/Framework/bar.cxx, Tests/Framework/foo.cxx, + Tests/Framework/foo.h, Tests/Framework/foo2.h: ENH: add a very + simple framework test + +2007-05-08 10:32 hoffman + + * Modules/MacOSXFrameworkInfo.plist.in, + Modules/Platform/Darwin.cmake, Source/cmLocalGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.h, Source/cmTarget.cxx: + ENH: initial support for creation of frameworks on Mac + +2007-05-08 10:05 alex + + * Source/: cmMakefile.cxx, cmTarget.cxx: + ENH: also detect targetnames-used-as-commands for + PREBUILD/PRELINK/POSTBUILD custom commands + + Alex + +2007-05-07 18:17 king + + * Modules/Platform/Linux.cmake: BUG: Detect debian with existence + of /etc/debian_version so things work in a chroot install. This + is suggested in bug#4805. + +2007-05-07 14:50 alex + + * Tests/CustomCommand/: CMakeLists.txt, + GeneratorInExtraDir/CMakeLists.txt: + ENH: also test the automatic dependency. To make it a bit harder + also use SET_TARGET_PROPERTIES(OUTPUT_NAME) for the generator + executable + + Alex + +2007-05-07 14:42 alex + + * Source/: cmLocalUnixMakefileGenerator3.cxx, cmTarget.cxx: + ENH: if a target name is used as command in add_custom_command, + automatically add the dependency to this target + + Alex + +2007-05-07 14:27 alex + + * Source/cmCustomCommand.h: + STYLE: IsUsed() is const, semicolons are not required + + Alex + +2007-05-07 11:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-07 09:48 alex + + * Tests/CustomCommand/CMakeLists.txt: + ENH: add test for the target-to-location translation for + ADD_CUSTOM_TARGET + + Alex + +2007-05-07 08:48 alex + + * Source/cmLocalVisualStudio6Generator.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/UtilityHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: + ENH: also support target-as-command with the MSVC6 generator + + Alex + +2007-05-06 09:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-05 08:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-04 17:17 alex + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h: + ENH: add configName argument to CreateTargetRules so it can + create the rules correctly for the different configtypes. Has to + be used for configuring the project file templates. + + Alex + +2007-05-04 17:09 alex + + * Source/cmLocalVisualStudio7Generator.cxx: + STYLE: remove the commented code, wasn't intended to be committed + + Alex + +2007-05-04 16:43 alex + + * Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/cmLocalVisualStudioGenerator.h, Source/cmTarget.cxx, + Tests/CustomCommand/CMakeLists.txt, Tests/CustomCommand/main.cxx, + Tests/CustomCommand/GeneratorInExtraDir/CMakeLists.txt: + ENH: you can now use the target name of a executable target in + cmake as command in add_custom_command, it should also honor the + buildtypes. A testcase in Tests/CustomCommand/ is also coming + soon. Tested on Linux with Makefiles, OSX with XCode and MSVC 7. + MSVC 6 and 8 are not tested. Next will be to also automatically + add the dependencies to this target automatically. + + Alex + +2007-05-04 14:08 alex + + * Source/cmLocalVisualStudio7Generator.cxx: COMP: removed unused + variable temp + + Alex + +2007-05-04 09:50 alex + + * Source/cmMakefile.cxx: + COMP: fix warning on VS8: conversion unsigned int -> size_t + + Alex + +2007-05-03 20:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-03 15:25 martink + + * Source/cmTryRunCommand.cxx: ENH: look at + CMAKE_TRY_COMPILE_CONFIGURATION var for TryRun as well + +2007-05-03 13:03 king + + * Source/kwsys/ProcessUNIX.c, Utilities/cmcurl/url.c: COMP: Fix + code-not-reached warnings for SunCC. + +2007-05-03 08:24 king + + * Modules/: CMakeCInformation.cmake, CMakeCXXInformation.cmake, + CMakeDetermineCCompiler.cmake, CMakeDetermineCXXCompiler.cmake, + CMakeDetermineCompilerId.cmake, + CMakeDetermineFortranCompiler.cmake, + CMakeFortranCompiler.cmake.in, CMakeFortranCompilerId.F90, + CMakeFortranInformation.cmake, Platform/Linux-SunPro-C.cmake, + Platform/Linux-SunPro-CXX.cmake, + Platform/Linux-SunPro-Fortran.cmake: ENH: Merging CompilerId + updates from branch CMake-Modules-CompilerId to the main tree. + Changes between CMake-Modules-CompilerId-mp1 and + CMake-Modules-CompilerId-mp2 are included. + +2007-05-03 07:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-02 14:13 alex + + * Modules/CMakeDetermineCCompiler.cmake: + BUG: fix typo, use TOOLCHAIN_PREFIX as prefix instead of location + + Alex + +2007-05-02 11:56 alex + + * Modules/: CMakeCCompiler.cmake.in, CMakeCXXCompiler.cmake.in, + CMakeDetermineCCompiler.cmake, CMakeDetermineCXXCompiler.cmake: + ENH: make it possible to set the object file extension + independent from the build platform at build time + + Alex + +2007-05-02 01:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-05-01 18:28 king + + * Modules/: CMakeDetermineFortranCompiler.cmake, + CMakeFortranCompiler.cmake.in, CMakeFortranCompilerId.F90, + CMakeFortranInformation.cmake: ENH: Using + CMAKE_DETERMINE_COMPILER_ID to determine the Fortran compiler. + This works only for Fortran90+ compilers that run the + preprocessor. Otherwise we fall back to the old behavior. + +2007-05-01 18:27 king + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, CMakeDetermineCompilerId.cmake: + ENH: Added flagvar argument to CMAKE_DETERMINE_COMPILER_ID to + choose the environment variable from which to get flags. Made + parsing of INFO blocks robust to having more than one in a single + string. + +2007-05-01 18:26 king + + * Modules/: CMakeCInformation.cmake, CMakeCXXInformation.cmake: + ENH: Added code to load CompilerId version of platform file if it + exists. Set CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS only if it is + not already defined. + +2007-05-01 18:24 king + + * Modules/Platform/: Linux-SunPro-C.cmake, Linux-SunPro-CXX.cmake, + Linux-SunPro-Fortran.cmake: ENH: Adding platform file for Sun + Studio Express on Linux. + +2007-05-01 18:22 king + + * Modules/: CMakeCCompilerId.c, CMakeCXXCompilerId.cpp, + CMakeDetermineCompilerId.cmake, CMakeLists.txt, FindMPI.cmake, + Platform/UnixPaths.cmake: ENH: Merging modules changes in range + CMake-Modules-CompilerId-mp1-post to + CMake-Modules-CompilerId-trunk-mp1 from trunk to + CMake-Modules-CompilerId branch. + +2007-05-01 17:02 alex + + * Source/cmTryRunCommand.h: + STYLE: fix typo + + Alex + +2007-05-01 17:00 alex + + * Source/cmUtilitySourceCommand.h: + STYLE: according to Brad this one is ancient and shouldn't be + used for any new stuff + + Alex + +2007-05-01 16:37 alex + + * Modules/CMakeTestCCompiler.cmake: + BUG: don't use stdio in the test for a simple executable, for + some embedded targets/toolchains/platforms this might already be + too much + + Alex + +2007-05-01 16:25 alex + + * Source/: cmFindBase.cxx, cmFindBase.h: + ENH: add support for CMAKE_FIND_PREFIX, for prepending a prefix + before all directories searched by FIND_XXX(), useful for + defining a different root directory for the base directory of the + target platform + + Alex + +2007-05-01 14:35 king + + * Modules/: CMakeCCompilerId.c, CMakeCXXCompilerId.cpp: ENH: + Changed GNUC compiler id name to GNU. + +2007-05-01 14:23 alex + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: + ENH: add two new variables: CMAKE_TOOLCHAIN_PREFIX: will be + prepended to gcc, ar, g++, cc, c++ and ranlib if defined (gives + e.g. arm-elf-gcc etc.) CMAKE_TOOLCHAIN_LOCATION: if defined, the + compilers will be searched only there, the other tools at first + there, after that in other locations + + If not already defined, both of them will be set by + CMakeDetermineXXXCompiler.cmake and used by the other one. If + mixing the environment variable CC/CXX and these variables this + can give weird mixtures. + + change order of compiler names for CXX: from c++, g++ to g++, c++ + (same order as for C) + + Alex + +2007-05-01 14:12 king + + * Tests/CustomCommand/: CMakeLists.txt, check_mark.cmake: ENH: + Added test to make sure custom commands are not built more than + once in a single build. This tests for a bug introduced by one + fix and fixed by another fix for bug#4377. + +2007-05-01 13:51 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h, + cmMakefileUtilityTargetGenerator.cxx: BUG: A utility target + should not run the custom commands from its source files + directly. The target-level rule must add dependencies on the + file-level custom commands to drive them. This bug was + introduced by the "fix" to bug 4377. This also restores the + documented behavior that PRE_BUILD rules are treated as PRE_LINK + rules on non-VS generators. Also fixed custom command + dependencies on the rule file build.make so that custom commands + re-run when the commands themselves change. + +2007-05-01 13:13 alex + + * Modules/CMakeDetermineSystem.cmake: + STYLE: the second check for uname wasn't intended to be committed + + Alex + +2007-05-01 13:11 alex + + * Modules/CMakeDetermineSystem.cmake: + ENH: new variable CMAKE_TOOLCHAIN_FILE which can be used to + specify a cmake file which will be loaded even before cmake tries + to detect the system, so people can set e.g. CMAKE_SYSTEM to the + value for their target platform. Only detect CMAKE_SYSTEM if it + isn't set yet. + + Alex + +2007-05-01 13:07 alex + + * Modules/: CMakeCInformation.cmake, CMakeCXXInformation.cmake: + ENH: use CMAKE_SYSTEM_AND_C[XX]_COMPILER_INFO_FILE for loading + the file info file, but don't overwrite it if it has already been + specified. This is needed for cross compiling so people can + explicitely say which file to use depending on their target + platform + + Alex + +2007-05-01 11:46 alex + + * Source/cmMakefile.cxx: + BUG: fix cmake listfile stack: if a file could not be opened, + remove it from the stack (usually CMakeCInformation.cmake and + CMakeCXXInformation.cmake which both put Linux-gcc.cmake on the + stack without removing it again: INCLUDE(... OPTIONAL) ) STYLE: + better readable output formatting of the listfile stack, now in + the same order as in gdb or with include files + + Alex + +2007-05-01 04:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-30 18:10 king + + * Modules/CMakeCXXCompilerId.cpp: STYLE: Added comment explaining + choice of file extension. + +2007-04-30 18:09 king + + * Modules/CMakeLists.txt: BUG: Need to install + CMakeCXXCompilerId.cpp so that C++ compiler identification works + in an install tree. + +2007-04-30 17:05 alex + + * Modules/CMakeDetermineCompilerId.cmake: + STYLE: comment which says which variables this macro sets + + Alex + +2007-04-30 17:03 alex + + * Modules/FindMPI.cmake: + STYLE: use the newer FIND_XXX syntax, which should find MPI in + even more directories and doesn't require to list standard + directories like /usr/lib, etc. + + Alex + +2007-04-30 16:05 alex + + * Modules/CMakeLists.txt: + BUG: also install CMakePlatformId.h, otherwise the check for the + compiler id works only when building cmake itself, but not with + an installed cmake + + Alex + +2007-04-30 10:57 alex + + * Modules/Platform/UnixPaths.cmake: + BUG: if /opt/lib and /opt/csw/lib are searched for libs, then + /opt/include and /opt/csw/include should also be searched for + headers (according to google they also exist) + + Alex + +2007-04-29 23:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-29 03:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-28 12:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-28 09:35 king + + * Modules/: CMakeCCompiler.cmake.in, CMakeCCompilerId.c, + CMakeCXXCompiler.cmake.in, CMakeCXXCompilerId.cpp, + CMakeDetermineCCompiler.cmake, CMakeDetermineCXXCompiler.cmake, + CMakeDetermineCompilerId.cmake, CMakePlatformId.h: ENH: Merging + CompilerId implementation from branch CMake-Modules-CompilerId to + the main tree. Changes between CMake-Modules-CompilerId-bp and + CMake-Modules-CompilerId-mp1 are included. + +2007-04-28 08:25 king + + * Source/CTest/cmCTestCoverageHandler.cxx: STYLE: Fixed line too + long. + +2007-04-27 10:44 king + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: ENH: Hard-coded platform for + Visual Studio generators. Added TODO comment about setting the + compiler id. + +2007-04-27 10:29 king + + * Modules/CMakeDetermineCompilerId.cmake: BUG: When passing the + compiler id source file to the compiler, the native file path + format should be used on the command line. + +2007-04-27 10:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-27 10:19 king + + * Modules/: CMakeCCompilerId.c, CMakeCXXCompilerId.cpp: ENH: Added + Watcom compiler identifier. + +2007-04-27 09:46 king + + * Modules/: CMakeCCompilerId.c, CMakeCXXCompilerId.cpp: BUG: Fixed + for HP compilers. + +2007-04-27 09:20 king + + * Modules/CMakeDetermineCompilerId.cmake: BUG: Need to strip all + text before and after the INFO block because the binary may + contain string data leading up to the beginning of the strings. + +2007-04-27 09:09 king + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: BUG: Still need to identify + compiler using command line for Xcode generator. + +2007-04-27 09:01 andy + + * Source/CTest/cmCTestCoverageHandler.h: STYLE: Add somme comments + +2007-04-27 08:57 king + + * Modules/: CMakeCCompiler.cmake.in, CMakeCCompilerId.c, + CMakeCXXCompiler.cmake.in, CMakeCXXCompilerId.cpp, + CMakeDetermineCCompiler.cmake, CMakeDetermineCXXCompiler.cmake, + CMakeDetermineCompilerId.cmake, CMakePlatformId.h: ENH: Initial + checkin of CompilerId feature on CMake-Modules-CompilerId branch. + This helps identify compilers and platforms by actually building + a source file and using the preprocessor definitions to recognize + known compilers. + +2007-04-26 23:20 andy + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: ENH: Initial attempt to do python + coverage. Hopefully will not break coverage on GCov + +2007-04-26 21:50 andy + + * Source/cmStringCommand.cxx, Source/cmStringCommand.h, + Tests/StringFileTest/CMakeLists.txt: ENH: Add STRING STRIP + command + +2007-04-26 09:56 king + + * Source/cmFileCommand.cxx: COMP: Avoid warning. + +2007-04-26 07:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-25 17:48 king + + * Source/cmStringCommand.h: STYLE: Fixed line-too-long. + +2007-04-25 17:22 king + + * Source/cmFileCommand.cxx, Source/cmFileCommand.h, + Tests/StringFileTest/CMakeLists.txt: ENH: Added FILE(STRINGS) + command. + +2007-04-25 16:22 alex + + * Modules/CMakeDetermineCXXCompiler.cmake: + STYLE: fix typo "CCC" -> "CC", add comments which variables it + sets + + Alex + +2007-04-25 05:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-24 14:03 hoffman + + * Source/cmEnableLanguageCommand.h: ENH: fix docs + +2007-04-24 12:30 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: fix seg fault in ccmake when + hitting configure twice + +2007-04-24 01:52 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-23 16:48 king + + * Source/cmStringCommand.cxx: COMP: Added missing include for time. + +2007-04-23 11:04 martink + + * Source/: cmStringCommand.cxx, cmStringCommand.h: ENH: Add command + to generate random strings + +2007-04-22 23:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-21 18:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-20 11:53 king + + * Source/kwsys/kwsysPlatformTestsCXX.cxx: COMP: Make sure gcc 2.96 + sstream header is not used. + +2007-04-20 09:50 king + + * Source/kwsys/kwsys_ios_sstream.h.in: COMP: Added + istringstream::clear() method to disambiguate the call from using + string::clear or istrstream::clear. + +2007-04-20 09:49 king + + * Source/cmLoadCommandCommand.cxx: BUG: Reverting previous change. + It did not account for the possibility that the loaded command + was built with a different compiler. + +2007-04-20 04:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-19 12:56 king + + * Source/kwsys/testIOS.cxx: BUG: Need to clear read failure when + string is reset. + +2007-04-19 12:53 king + + * Source/kwsys/testIOS.cxx: ENH: Added testing for istringstream + and stringstream. + +2007-04-19 12:44 king + + * Source/kwsys/kwsys_stl_string.hxx.in: BUG: Fix stream state on + successfully reading a string. + +2007-04-19 12:12 king + + * Source/kwsys/: String.hxx.in, kwsys_ios_sstream.h.in: COMP: Fixes + for Watcom. + +2007-04-19 12:11 king + + * Source/kwsys/CMakeLists.txt: COMP: Skip testAutoPtr and + testHashSTL on Watcom. They are hopeless. + +2007-04-19 12:11 king + + * Source/kwsys/EncodeExecutable.c: COMP: Need to include header for + unlink function. + +2007-04-19 11:32 king + + * Tests/Plugin/src/: example_exe.cxx, example_mod_1.c: ENH: Added + function call argument to module function to make sure calling + convention matches on lookup. Fixed for Watcom. + +2007-04-19 11:31 king + + * Source/kwsys/DynamicLoader.cxx: ENH: Added support for Watcom + compiler. Added TODO comment about calling conventions. + +2007-04-19 11:23 king + + * Source/cmLoadCommandCommand.cxx: ENH: Removed code unnecessary + now that DynamicLoader is implemented better. + +2007-04-19 11:21 king + + * Source/kwsys/: CMakeLists.txt, kwsys_stl_string.hxx.in: ENH: + Fixed stl string streaming operators for Watcom. + +2007-04-19 04:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-18 09:56 king + + * Source/cmLocalGenerator.cxx: BUG: Fix ComputeLinkInformation. + When using a loader_flag link item the full per-configuration + path should be used. The fullPathLibs returned should refer to + the import library if it was used. Since the full paths are used + for dependencies the executable used with loader_flag should be + returned also. + +2007-04-18 04:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-18 00:12 king + + * Source/CMakeLists.txt: ENH: Plugin test should now work on QNX. + +2007-04-18 00:11 king + + * Modules/Platform/QNX.cmake: ENH: Add CMAKE_EXE_EXPORTS_C_FLAG and + CMAKE_EXE_EXPORTS_CXX_FLAG to support executables that export + symbols. + +2007-04-18 00:04 king + + * Source/cmLocalGenerator.cxx: BUG: Cannot escape link items + because some need the spaces to separate arguments. Instead just + escape the argument to the loader flag. + +2007-04-17 23:40 king + + * Modules/Platform/: Linux.cmake, FreeBSD.cmake: ENH: Added + CMAKE_EXE_EXPORTS_C_FLAG and CMAKE_EXE_EXPORTS_CXX_FLAG to + support executables that export symbols. + +2007-04-17 23:39 king + + * Source/cmMakefileExecutableTargetGenerator.cxx: ENH: Added + platform variable CMAKE_EXE_EXPORTS__FLAG to add a linker + flag when building executables that have the ENABLE_EXPORTS + property set. + +2007-04-17 23:27 king + + * Tests/Plugin/CMakeLists.txt: COMP: Need to enable ansi C + features. + +2007-04-17 23:16 king + + * Source/cmLocalGenerator.cxx: BUG: Fix ComputeLinkInformation for + non-linked targets. Why is it called for utility targets anyway? + +2007-04-17 18:18 king + + * Source/CMakeLists.txt, Tests/Plugin/include/example.h: ENH: Fixed + Plugin test on Cygwin. + +2007-04-17 16:42 king + + * Source/CMakeLists.txt: BUG: Disable Plugin test on Cygwin until + it is implemented. + +2007-04-17 16:34 king + + * Source/CMakeLists.txt: ENH: Re-enabling Plugin test now that it + should work on MacOSX. I will let it run one night to see what + platforms are still not implemented. Currently it is not run on + QNX because it is known to not be implemented there. + +2007-04-17 16:19 king + + * Modules/Platform/Darwin.cmake: ENH: Added + CMAKE_SHARED_MODULE_LOADER_C_FLAG and + CMAKE_SHARED_MODULE_LOADER_CXX_FLAG to support linking plugins to + executables. + +2007-04-17 16:11 king + + * Source/cmLocalGenerator.cxx: ENH: Added use of platform variable + CMAKE_SHARED_MODULE_LOADER__FLAG to add a special flag when + linking a plugin to an executable that loads it. + +2007-04-17 15:06 king + + * Source/CMakeLists.txt: BUG: Disable Plugin test until it works + everywhere. + +2007-04-17 14:08 king + + * Source/CMakeLists.txt: ENH: Added test for executables with + plugins that use an API exported by the executable itself. + +2007-04-17 13:52 king + + * Tests/Plugin/: CMakeLists.txt, src/example_exe.cxx, + src/example_exe.h.in: ENH: Configure location of plugin files so + that the executable can run with any current working directory. + +2007-04-17 13:43 king + + * Tests/Plugin/: CMakeLists.txt, include/example.h, + src/example_exe.cxx, src/example_mod_1.c: ENH: Added test for + executables with plugins that use an API exported by the + executable itself. + +2007-04-17 04:48 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-16 04:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-15 11:56 andy + + * Utilities/cmcurl/Testing/sepheaders.c: ENH: Fix old api + +2007-04-15 03:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-14 02:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-13 10:22 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: better progress + for any directory that is a project + +2007-04-13 01:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-12 15:50 andy + + * Source/cmVariableWatchCommand.cxx: STYLE: Fix line lengths + +2007-04-12 15:46 martink + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: ENH: some code consolidation + and cleanup + +2007-04-12 14:21 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: fix progress for + ENCLUDE_FORM_ALL cases using new project to target map. Only + fixes it for the top level all target + +2007-04-12 10:56 king + + * Source/kwsys/ProcessWin32.c: ENH: Added KWSYSPE_DEBUG macro to + print debugging trace information. Added TODO comment explaining + why process execution can still hang when a grandchild keeps the + output pipes open. + +2007-04-11 17:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-11 15:13 andy + + * Source/cmCommands.cxx, Source/cmFindPackageCommand.cxx, + Source/cmMakefile.cxx, Source/cmVariableWatch.cxx, + Source/cmVariableWatch.h, Source/cmVariableWatchCommand.cxx, + Source/cmVariableWatchCommand.h, Source/cmake.cxx, + Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/VariableWatchTest.cmake.in: ENH: Add variable + watch command + +2007-04-11 10:00 king + + * Source/cmMarkAsAdvancedCommand.cxx: STYLE: Fixed line-too-long. + +2007-04-10 21:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-10 17:12 utkarsh1 + + * Utilities/cmcurl/CMakeLists.txt: ENH: Merging branch + PVEE-ERDC-Setup-4-3-2007 to main tree. Changes between + PVEE-ERDC-Setup-4-3-2007-bp and PVEE-ERDC-Setup-4-3-2007-mp1 are + included. + +2007-04-10 16:03 king + + * Source/cmCacheManager.h: BUG: When a non-cache variable is marked + as advance do not use the cmMakefile implementation of + AddCacheDefinition to avoid removing the makefile definition. + +2007-04-10 15:55 king + + * Source/cmMarkAsAdvancedCommand.cxx: BUG: When a non-cache + variable is marked as advance do not use the cmMakefile + implementation of AddCacheDefinition to avoid removing the + makefile definition. + +2007-04-10 14:54 barre + + * Modules/Dart.cmake: ENH: this variable overrides all PROJECT_URL. + Check the dashboard, all projects have the wrong URL in their + "Home" button. Other variables (like ROLLUP_URL) were moved a + while ago, for some reasons this one is still here. + +2007-04-10 13:09 king + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudioGenerator.cxx, + cmGlobalVisualStudioGenerator.h: BUG: The ALL_BUILD target should + not have any command lines so that it is not always considered + out of date. Moved the 'Build all projects' message into the + description field instead of an echo in the command field. Moved + common implementation of Generate for VS6 and VS7 into the + superclass to avoid duplicate code for the ALL_BUILD target. + This addresses bug#4556. + +2007-04-10 11:26 andy + + * Utilities/cmcurl/CMakeLists.txt: ENH: No reason to search for + UCB. Let me know if anybody still has ucb + +2007-04-10 11:22 king + + * Modules/Platform/Linux.cmake, Source/cmFileCommand.cxx, + Source/cmLocalGenerator.cxx: ENH: Added option + CMAKE_INSTALL_SO_NO_EXE on linux to choose whether the default + permissions for shared libraries include the executable bit. + This is necessary to support the conflicting policies of Debian + and Fedora. These changes address bug#4805. + +2007-04-10 09:54 martink + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio8Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmTarget.cxx: ENH: added + internal target property for the name of the project file + +2007-04-10 08:49 king + + * Source/cmGlobalUnixMakefileGenerator3.cxx: STYLE: Added comment + about why dependencies need to be chained to clarify code. + +2007-04-10 08:36 king + + * Modules/Platform/NetBSD.cmake: ENH: Enabled use of soname and + therefore versioning symlinks. Patch is from bug#4558. + +2007-04-09 21:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-08 21:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-07 21:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-06 21:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-05 21:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-05 09:19 king + + * Source/cmMakefile.cxx: STYLE: Fix line-too-long. + +2007-04-04 17:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-04 16:28 andy + + * Utilities/Doxygen/doxyfile.in: STYLE: Do doxygen for CPack + +2007-04-04 15:58 andy + + * Modules/CheckCSourceCompiles.cmake: BUG: Revert back to 1.14 + +2007-04-04 15:57 andy + + * Modules/: CheckCSourceCompiles.cmake, CheckCSourceRuns.cmake: + BUG: Revert back to 1.4 + +2007-04-04 14:49 king + + * Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmGlobalVisualStudioGenerator.cxx, + Source/cmGlobalVisualStudioGenerator.h, + Tests/Dependency/Two/CMakeLists.txt, + Tests/Dependency/Two/TwoSrc.c, + Tests/Dependency/Two/TwoCustomSrc.c, + Tests/Dependency/Two/two-test.h.in: BUG: Fix utility dependencies + for static libraries in VS generators. This addresses bug#4789. + +2007-04-04 13:43 hoffman + + * Modules/FindJNI.cmake: BUG: fix for bug 4605 + +2007-04-04 13:41 andy + + * bootstrap: ENH: Fix copyright year + +2007-04-04 13:06 andy + + * Source/CTest/cmCTestBuildHandler.cxx: COMP: Fix kwstyle + +2007-04-04 13:06 andy + + * Modules/: CheckCSourceCompiles.cmake, CheckCSourceRuns.cmake: + COMP: Fix kwstyleSource/CTest/cmCTestBuildHandler.cxx + +2007-04-04 12:05 andy + + * Source/cmConfigureFileCommand.cxx: BUG: No need for the backward + compatibility variable warning + +2007-04-04 12:05 andy + + * Source/cmMakefile.cxx: ENH: Add variable for the current list + file + +2007-04-04 11:22 king + + * Source/: CMakeLists.txt, cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudioGenerator.cxx, + cmGlobalVisualStudioGenerator.h: ENH: Added + cmGlobalVisualStudioGenerator as superclass to all VS global + generators. + +2007-04-03 23:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-03 03:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-02 02:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-04-01 02:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-31 02:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-30 10:53 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmLocalGenerator.cxx, + cmMakefileTargetGenerator.cxx: ENH: make sure default /System + framework is not added with -F + +2007-03-30 02:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-29 02:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-28 11:06 martink + + * Source/CTest/: cmCTestBuildHandler.cxx: BUG: even safer checking + of return value + +2007-03-28 10:58 martink + + * Source/CTest/cmCTestBuildHandler.cxx: BUG: fix checking of the + return value for a build + +2007-03-28 02:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-27 23:15 king + + * Source/cmGlobalXCodeGenerator.cxx: COMP: Restored shared local + variable removed by previous change. + +2007-03-27 23:13 king + + * Source/: cmGlobalXCodeGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmMakefileTargetGenerator.cxx, + cmTarget.cxx, cmTarget.h: ENH: Created method + cmTarget::GetExportMacro to centralize computation of the export + symbol name. This removes duplicate code from all the + generators. Also enabled the export definition for executable + targets with the ENABLE_EXPORTS property set. + +2007-03-27 02:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-26 02:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-25 02:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-24 14:12 barre + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: need + kwsys' Glob in VTK 5.0 + +2007-03-24 14:04 barre + + * Source/kwsys/: CMakeLists.txt, Glob.cxx, Glob.hxx.in: ENH: need + kwsys' Glob in VTK 5.0 + +2007-03-24 02:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-23 16:33 hoffman + + * Source/cmCTest.cxx: BUG: fix problem with new curl_getdate and + ctest + +2007-03-23 02:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-22 09:45 king + + * Source/cmLocalGenerator.cxx, Source/cmMakefile.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmTarget.cxx, Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-wcl386.cmake: ENH: Added target property + ENABLE_EXPORTS for executable targets. It enables the + executables for linking by loadable modules that import symbols + from the executable. This finishes the executable import library + support mentioned in bug #4210. + +2007-03-22 02:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-21 13:49 martink + + * Source/CMakeLists.txt: BUG: typo in if test + +2007-03-21 07:16 king + + * Tests/OutOfSource/OutOfSourceSubdir/: CMakeLists.txt, simple.cxx: + BUG: Disable deep-source test on Watcom until it can be fixed. + This is a new feature for other generators anyway. + +2007-03-21 02:39 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-20 15:51 hoffman + + * Utilities/cmcurl/strequal.c: ENH: second try to fix qnx build + problem + +2007-03-20 15:49 hoffman + + * Utilities/cmcurl/strequal.c: ENH: try to fix qnx build problem + +2007-03-20 14:52 martink + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: try markign non zero + return values as warnings for make programs + +2007-03-20 14:31 martink + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: try markign non zero + return values as warnings for make programs + +2007-03-20 14:11 martink + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: add another error + regexp + +2007-03-20 13:34 king + + * Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt: BUG: Reduce + long source file name length for WMake. + +2007-03-20 12:44 hoffman + + * Source/CPack/cmCPackTarCompressGenerator.cxx: BUG: fix coverity + error, null check after usage fix + +2007-03-20 12:32 hoffman + + * Modules/Platform/: AIX.cmake, QNX.cmake: ENH: add c++ flag when + compiling c++ code merge from main tree + +2007-03-20 11:52 martink + + * Source/cmCTest.cxx: ENH: minor additional error output + +2007-03-20 09:51 martink + + * Utilities/cmcurl/: CMakeLists.txt, config.h.in, + Platforms/WindowsCache.cmake: BUG: was not setting HAVE_PROCESS_H + properly + +2007-03-20 09:14 king + + * Modules/Platform/Windows-bcc32.cmake: BUG: Disable creation of + import libraries for executables on Borland until it can be made + optional. Otherwise all executables get a .lib with the same + name which is unexpected behavior for users. + +2007-03-20 08:16 king + + * Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt: BUG: Work + around VS8 conversion to a relative path for the long source + name. It takes the nice full path we give it, converts to + relative, and then repacks relative on top of the build directory + resulting in a path longer than its own maxpath even though the + original path given was short enough. Even VS6 dealt with it + better. + +2007-03-20 02:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-19 13:04 martink + + * Source/: CMakeLists.txt, ctest.cxx, + CTest/cmCTestBuildAndTestHandler.cxx, + CTest/cmCTestBuildAndTestHandler.h, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h: ENH: support for + --build-config-sample feature #1022 + +2007-03-19 10:00 king + + * Modules/Platform/CYGWIN.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-gcc.cmake, Source/cmInstallCommand.cxx, + Source/cmInstallTargetGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, Source/cmTarget.cxx, + Source/cmTarget.h, Templates/EXEHeader.dsptemplate: ENH: Added + support for import libraries created by executable and module + targets. The module import libraries should never be used but + some windows compilers always create them for .dll files since + there is no distinction from shared libraries on that platform. + The executable import libraries may be used to create modules + that when loaded bind to symbols from the executables. This is + an enhancement related to bug#4210 though not requested by it + explicitly. + +2007-03-19 02:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-18 16:18 andy + + * Utilities/cmcurl/: tftp.c, transfer.c: COMP: Remove some warnings + +2007-03-18 02:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-17 13:23 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: ENH: fix for crash from + main tree + +2007-03-17 13:18 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: ENH: remove seg fault I + hope + +2007-03-17 00:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-16 18:44 king + + * Utilities/cmcurl/curl/curl.h: COMP: Do not #include files inside + extern "C" {} blocks. + +2007-03-16 18:05 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/Platform/Windows-bcc32.cmake, Modules/Platform/gcc.cmake, + Source/CMakeLists.txt, Source/cmFileCommand.h, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmGlobalVisualStudio8Win64Generator.cxx, + Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/kwsys/SystemTools.cxx, + Tests/PrecompiledHeader/CMakeLists.txt, + Tests/PrecompiledHeader/foo1.c, Tests/PrecompiledHeader/foo2.c, + Tests/PrecompiledHeader/foo_precompile.c, + Tests/PrecompiledHeader/include/foo.h, + Tests/PrecompiledHeader/include/foo_precompiled.h, + Tests/SetLang/CMakeLists.txt, Tests/SetLang/bar.c, + Tests/SetLang/foo.c: ENH: check in fixes from main tree to create + 2.4.7 RC 5 + +2007-03-16 16:48 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Need to include + relative path top information in directory information so that + relative path conversion during dependency generation works with + the same rules as project generation. + +2007-03-16 16:28 king + + * Source/cmInstallTargetGenerator.cxx: BUG: Use GetExecutableNames + instead of GetLibraryNames to compute the installation file name + for executable targets. + +2007-03-16 16:04 king + + * Source/CTest/cmCTestBuildHandler.cxx: COMP: Fix bad escape + sequence. + +2007-03-16 14:51 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: More regular + expressions for visual studio 6 + +2007-03-16 14:28 king + + * Utilities/cmcurl/CMakeLists.txt: COMP: Ignore windows sockets on + cygwin. Remove duplicate source entry. + +2007-03-16 10:34 king + + * Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt, + Tests/OutOfSource/OutOfSourceSubdir/simple.cxx, + Tests/OutOfSource/OutOfSourceSubdir/simple.cxx.in: ENH: Added + computation of object file names that are almost always short + enough to not exceed the filesystem path length limitation. This + is useful when a source file from outside the tree is referenced + with a long full path. The object file name previously would + contain the entire path which when combined with the build output + directory could exceed the filesystem limit. Now CMake + recognizes this case and replaces enough of the beginning of the + full path to the source file with an md5sum of the replaced + portion to make the name fit on disk. This addresses bug#4520. + +2007-03-16 09:34 andy + + * Utilities/cmcurl/CMake/: CMakeConfigurableFile.in, + CheckCSourceCompiles.cmake, CheckCSourceRuns.cmake: COMP: Fix + support for old CMake (2.0 and 2.2) + +2007-03-15 17:22 andy + + * Utilities/cmcurl/CMake/CheckCSourceRuns.cmake: ENH: Unify with + the compile one + +2007-03-15 15:22 andy + + * Utilities/cmcurl/: CMakeLists.txt, amigaos.c, amigaos.h, + arpa_telnet.h, base64.c, base64.h, config.h.in, connect.c, + connect.h, content_encoding.c, content_encoding.h, cookie.c, + cookie.h, curl.copyright, curl_memory.h, curlx.h, dict.c, dict.h, + easy.c, easyif.h, escape.c, escape.h, file.c, file.h, formdata.c, + formdata.h, ftp.c, ftp.h, getdate.c, getdate.h, getenv.c, + getinfo.c, getinfo.h, gtls.c, gtls.h, hash.c, hash.h, hostares.c, + hostasyn.c, hostip.c, hostip.h, hostip4.c, hostip6.c, hostsyn.c, + hostthre.c, http.c, http.h, http_chunks.c, http_chunks.h, + http_digest.c, http_digest.h, http_negotiate.c, http_negotiate.h, + http_ntlm.c, http_ntlm.h, if2ip.c, if2ip.h, inet_ntoa_r.h, + inet_ntop.c, inet_ntop.h, inet_pton.c, inet_pton.h, krb4.c, + krb4.h, ldap.c, ldap.h, llist.c, llist.h, md5.c, md5.h, + memdebug.c, memdebug.h, memory.h, mprintf.c, multi.c, multiif.h, + netrc.c, netrc.h, nwlib.c, parsedate.c, parsedate.h, progress.c, + progress.h, security.c, security.h, select.c, select.h, sendf.c, + sendf.h, setup.h, setup_once.h, share.c, share.h, sockaddr.h, + socks.c, socks.h, speedcheck.c, speedcheck.h, splay.c, splay.h, + ssh.c, ssh.h, sslgen.c, sslgen.h, ssluse.c, ssluse.h, strdup.c, + strdup.h, strequal.c, strequal.h, strerror.c, strerror.h, + strtok.c, strtok.h, strtoofft.c, strtoofft.h, telnet.c, telnet.h, + tftp.c, tftp.h, timeval.c, timeval.h, transfer.c, transfer.h, + url.c, url.h, urldata.h, version.c, + CMake/CheckCSourceCompiles.cmake, CMake/CheckCSourceRuns.cmake, + CMake/OtherTests.cmake, Platforms/WindowsCache.cmake, + curl/curl.h, curl/curlver.h, curl/easy.h, curl/mprintf.h, + curl/multi.h, curl/stdcheaders.h: ENH: Update Curl to 7.16.1 + +2007-03-15 13:48 martink + + * Source/cmMakefile.cxx: BUG: change in how set cache overrides + local definitions. Should mainly be a NOP change for most cases + +2007-03-14 21:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-14 16:30 king + + * CMakeLists.txt: ENH: Enable use of kwsys MD5 implementation. + +2007-03-14 16:29 king + + * Source/: cmLocalGenerator.cxx, cmLocalUnixMakefileGenerator3.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: Reverting previous + changes related to using an empty string for a relative path to + the current directory. Too many places want the . version. + Instead we can just convert the . to an empty string in the one + place that motiviated the original change. + +2007-03-14 15:35 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: When the current + output directory is a link directory we need to reference it with + the relative path "." instead of an empty relative path. + +2007-03-14 15:12 king + + * Source/kwsys/: CMakeLists.txt, MD5.c, MD5.h.in, testEncode.c: + ENH: Added MD5 implementation to KWSys. + +2007-03-14 13:36 king + + * Source/cmLocalGenerator.cxx: BUG: During relative path conversion + if the remote and target paths are the same return the empty + string instead of ".". + +2007-03-14 09:34 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: All executable and + library project types should specify a program database file name + for all configurations. Even when debug information is not used + the .pdb file specified is used to construct the name of a .idb + file that exists for all configurations when building with the VS + IDE. + +2007-03-13 15:18 martink + + * Source/: cmAddCustomTargetCommand.cxx, cmCPluginAPI.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio8Generator.cxx, cmGlobalXCodeGenerator.cxx, + cmMakefile.cxx, cmMakefile.h: ENH: some more cleanup + +2007-03-13 14:23 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmMakefile.cxx, cmPropertyMap.cxx, cmTarget.cxx: ENH: add project + to target map, not used yet, but created + +2007-03-13 11:58 king + + * Source/cmLocalGenerator.cxx: BUG: Fix check of EXCLUDE_FROM_ALL + property to use boolean type. This is required for installation + of subdirectories to work. + +2007-03-13 03:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-12 23:36 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Remove spaces from test + output paths. Not all make tools can handle it. Ths + SubDirSpaces test is meant for that purpose anyway. + +2007-03-12 16:10 martink + + * Source/cmake.cxx: ENH: added remove_directory bug 2937 + +2007-03-12 14:15 king + + * Source/cmFileCommand.cxx: BUG: Preserve symlinks during + installation. This addresses bug#4384. + +2007-03-12 13:50 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h, + kwsys/SystemTools.cxx, kwsys/SystemTools.hxx.in: ENH: Added kwsys + SystemTools::CreateSymlink and SystemTools::ReadSymlink. + +2007-03-12 13:30 martink + + * Source/cmake.cxx: ENH: typo + +2007-03-12 13:28 king + + * Tests/PrecompiledHeader/CMakeLists.txt: BUG: Do not use /I mode + in VS6. + +2007-03-12 12:44 king + + * Tests/PrecompiledHeader/CMakeLists.txt: BUG: Clean the pch during + make clean so that the test passes when run more than once. + +2007-03-12 12:40 martink + + * Source/cmake.cxx: ENH: small enchancement for bug 3776. + +2007-03-12 12:35 king + + * Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmGlobalVisualStudio8Win64Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Tests/PrecompiledHeader/CMakeLists.txt: BUG: Split precompiled + header flags into a separate per-global-generator flag map. This + is needed because the flag mappings differ across VS IDE + versions. This fixes bug#3512 for VS8 where as the previous fix + only worked for VS7. + +2007-03-12 11:32 martink + + * Source/cmGlobalXCodeGenerator.cxx: COMP: XCode fix + +2007-03-12 10:26 martink + + * Source/: cmAddExecutableCommand.cxx, cmAddLibraryCommand.cxx, + cmAddSubDirectoryCommand.cxx, cmGlobalGenerator.cxx, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmIncludeExternalMSProjectCommand.cxx, cmInstallFilesCommand.cxx, + cmInstallProgramsCommand.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmMakefile.cxx, cmMakefile.h, + cmSubdirCommand.cxx, cmTarget.h: ENH: some code cleanup + +2007-03-12 10:23 king + + * Tests/: Complex/CMakeLists.txt, Complex/Executable/complex.cxx, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt, + SimpleInstall/CMakeLists.txt, SimpleInstallS2/CMakeLists.txt: + ENH: Testing new target properties RUNTIME_OUTPUT_DIRECTORY, + LIBRARY_OUTPUT_DIRECTORY, and ARCHIVE_OUTPUT_DIRECTORY. This is + an incremental fix for bug#2240 and bug#4210. + +2007-03-11 01:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-10 07:49 king + + * Modules/Platform/Windows-wcl386.cmake: BUG: Do not create import + library for MODULEs. This is an incremental fix for bug#4210. + +2007-03-10 07:37 king + + * Modules/Platform/Windows-cl.cmake: BUG: Fixed MSVC8 module build + rule to not use /implib option. This is an incremental fix for + bug#4210. + +2007-03-10 06:56 king + + * Source/cmLocalVisualStudio6Generator.cxx: STYLE: Fix + line-too-long. + +2007-03-10 01:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-09 17:15 king + + * Source/cmLocalGenerator.cxx: BUG: Use real path subdirectory + check instead of substring comparison to identify when paths are + below the relative path tops. Otherwise when the build tree is + next to the source tree with the same name plus a suffix the + relative path from the binary to source tree is allowed even + though it goes outside cmake-managed directories. + +2007-03-09 16:58 king + + * Source/kwsys/auto_ptr.hxx.in: COMP: Fix warning about binding + reference-to-non-const to an rvalue on VS6. It does not seem to + be doing the proper auto_ptr_ref conversions. Instead use the + const_cast work-around on this platform. + +2007-03-09 16:27 king + + * Source/kwsys/hashtable.hxx.in: COMP: Fixed unreferenced parameter + warning for VS6 with /W4. + +2007-03-09 16:26 king + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: Re-enable backward + compatibility replacements in user-provided VS6 DSP template + files. + +2007-03-09 16:25 king + + * Source/cmLocalVisualStudio6Generator.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/UtilityHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: ENH: Implemented use of + cmTarget::GetDirectory() in Visual Studio 6 generator. This is + an incremental fix for bug#4210. + +2007-03-09 15:14 king + + * Source/: cmTarget.cxx, cmTarget.h: ENH: Added target properties + ARCHIVE_OUTPUT_DIRECTORY, LIBRARY_OUTPUT_DIRECTORY, and + RUNTIME_OUTPUT_DIRECTORY. If set these override + EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH for a specific + target. They can be used to distribute target files in the build + tree with the same granularity that the INSTALL command provides + for the install tree. This addresses bug#2240 and bug#4210. + +2007-03-09 14:50 king + + * Source/cmMakefileExecutableTargetGenerator.cxx: BUG: Fixed OSX + bundles to be built in the directory specified by + cmTarget::GetDirectory(). This is an incremental step for + bug#2240. + +2007-03-09 13:59 king + + * Modules/Platform/Windows-cl.cmake: BUG: Shared library creation + should use /implib option to specify the name of the import + library explicitly. This is an incremental step for bug #4210. + +2007-03-09 13:56 king + + * Source/cmMakefileLibraryTargetGenerator.cxx: ENH: Do not compute + a path name for the import library if there is no import library. + This simplifies tracking down problems with trying to create + import libraries for MODULEs. + +2007-03-09 11:35 andy + + * CMakeLists.txt: ENH: Prepare for the new curl. Curl is build + static, so set define to on + +2007-03-09 11:35 andy + + * Utilities/cmcurl/: CMakeLists.txt, setup.h, + CMake/OtherTests.cmake, Platforms/WindowsCache.cmake: ENH: + Several windows fixes + +2007-03-09 11:29 king + + * Source/: cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h: ENH: + Added cmMakefileTargetGenerator::GenerateExtraOutput to wrap up + creation of rules to drive creation of extra outputs generated as + side effects of another rule. Reimplemented generation of custom + command multiple output rules to use it. Reimplemented soname + symlink output dependencies to use it. Now if a symlink is + deleted the library will be recreated with the symlink. + +2007-03-09 11:26 king + + * Source/cmMakefileLibraryTargetGenerator.cxx: BUG: Need to account + for import library directory when constructing the clean rule for + the import library. This is an incremental fix for bug #4210. + +2007-03-09 10:30 king + + * Source/cmLocalGenerator.cxx: ENH: Implemented new policy to + choose the directory part of the object file name. This should + keep the names looking as nice and short as possible. This + partially addresses bug#4520. + +2007-03-09 09:30 king + + * Source/: cmInstallTargetGenerator.cxx, cmLocalGenerator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmMakefileLibraryTargetGenerator.cxx, cmTarget.cxx, cmTarget.h: + ENH: Added implib option to cmTarget::GetDirectory to support a + separate directory containing the import library. This is an + incremental step for bug#4210. + +2007-03-08 23:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-08 15:33 king + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmTarget.cxx, cmTarget.h: ENH: + Combined cmTarget::GetDirectory and cmTarget::GetOutputDir since + they are nearly the same. This is another step for bug#2240. + +2007-03-08 15:24 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: Removed unused variables LibraryOutputPath and + ExecutableOutputPath. Each target is asked for its own output + directory. This is a step towards bug#2240. + +2007-03-08 15:10 king + + * Source/cmTarget.cxx: COMP: Fixed enumeration-not-used warning in + switch. + +2007-03-08 14:57 king + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmTarget.cxx, cmTarget.h: ENH: + Replaced LibraryOutputPath and ExecutableOutputPath variables in + Makefile and VS generators to instead ask each target for its + output path. This significantly reduces total code size and + centralizes previously duplicate code. It is also a step towards + bug#2240. + +2007-03-08 14:15 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: Ask the target for + its own directory in case of bundle instead of directly using + ExecutableOutputPath. + +2007-03-08 14:11 andy + + * Utilities/cmcurl/: CMakeLists.txt, CMake/OtherTests.cmake: ENH: + Add some missing headers and fix OtherTests.cmake macros + +2007-03-08 13:19 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Compute + HomeRelativeOutputPath following the rules of + RelativePathTopBinary by going through the Convert() method. + This supports out-of-binary build trees without using relative + paths that go outside trees managed by CMake. + +2007-03-08 13:13 king + + * Source/CMakeLists.txt: ENH: Enable SubDirSpaces test when + building with bootstrapped cmake. + +2007-03-08 13:05 king + + * Source/: CMakeLists.txt, cmGlobalBorlandMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: Fixed recursive make call + target escaping for Borland to support SubDirSpaces test. + +2007-03-08 11:49 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: Updated + GetRecursiveMakeCall to use EscapeForShell instead of MAKEFILE + conversion. This code is special because it is the only place + that a make target name is passed on a command line. + +2007-03-08 11:49 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added + ConvertToOutputSlashes method to convert slashes with the same + policy as ConvertToOutputPath but without escaping. + +2007-03-08 11:10 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: Removed useless method + ConvertToMakeTarget and all calls to it. It had a buggy + implementation that caused it to do nothing. + +2007-03-08 10:31 king + + * Source/: cmLocalGenerator.cxx, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx: BUG: Some calls to Convert() were + converting for MAKEFILE but then passing the output to the build + shell. The calls have now been converted to call Convert() with + SHELL. + +2007-03-08 10:19 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: STYLE: Removed unused + calls to Convert. + +2007-03-08 09:48 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: STYLE: Removing + unused methods ConvertToShellPath and EscapeForUnixShell. + +2007-03-08 08:50 andy + + * Utilities/cmcurl/: CMakeLists.txt, amigaos.c, amigaos.h, + arpa_telnet.h, base64.c, base64.h, config.h.in, connect.c, + connect.h, content_encoding.c, content_encoding.h, cookie.c, + cookie.h, curl.copyright, curlx.h, dict.c, dict.h, easy.c, + easyif.h, escape.c, escape.h, file.c, file.h, formdata.c, + formdata.h, ftp.c, ftp.h, getenv.c, getinfo.c, getinfo.h, gtls.c, + gtls.h, hash.c, hash.h, hostares.c, hostasyn.c, hostip.c, + hostip.h, hostip4.c, hostip6.c, hostsyn.c, hostthre.c, http.c, + http.h, http_chunks.c, http_chunks.h, http_digest.c, + http_digest.h, http_negotiate.c, http_negotiate.h, http_ntlm.c, + http_ntlm.h, if2ip.c, if2ip.h, inet_ntoa_r.h, inet_ntop.c, + inet_ntop.h, inet_pton.c, inet_pton.h, krb4.c, krb4.h, ldap.c, + ldap.h, llist.c, llist.h, md5.c, md5.h, memdebug.c, memdebug.h, + memory.h, mprintf.c, multi.c, multiif.h, netrc.c, netrc.h, + nwlib.c, parsedate.c, parsedate.h, progress.c, progress.h, + security.c, select.c, select.h, sendf.c, sendf.h, setup.h, + setup_once.h, share.c, share.h, sockaddr.h, socks.c, socks.h, + speedcheck.c, speedcheck.h, splay.c, splay.h, ssh.c, ssh.h, + sslgen.c, sslgen.h, ssluse.c, ssluse.h, strdup.c, strdup.h, + strequal.c, strequal.h, strerror.c, strerror.h, strtok.c, + strtok.h, strtoofft.c, strtoofft.h, telnet.c, telnet.h, tftp.c, + tftp.h, timeval.c, timeval.h, transfer.c, transfer.h, url.c, + url.h, urldata.h, version.c, CMake/CheckCSourceCompiles.cmake, + CMake/CheckCSourceRuns.cmake, CMake/OtherTests.cmake, + curl/curl.h, curl/curlver.h, curl/easy.h, curl/mprintf.h, + curl/multi.h, curl/stdcheaders.h: ENH: Update to 7.16.1 + +2007-03-08 08:46 king + + * Source/cmIncludeDirectoryCommand.cxx: STYLE: Fix line-too-long. + +2007-03-08 08:38 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalGenerator.cxx, cmLocalGenerator.h, cmake.cxx: ENH: + SetupPathConversions is now called automatically on demand. + +2007-03-07 22:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-07 17:39 king + + * Source/cmLocalGenerator.cxx: ENH: Modified + GetObjectFileNameWithoutTarget to use relative paths for object + file names with sources above the current directory so long as + the relative path conversion works. + +2007-03-07 17:32 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: ENH: Improved + computation of RelativePathTopSource and RelativePathTopBinary to + use higher relative path tops when the source directories jump + around in a tree below the original source top. + +2007-03-07 16:35 king + + * Source/cmLocalGenerator.cxx: ENH: Set RelativePathTopSource and + RelativePathTopBinary independently for each local generator. + Relative path conversion is safe within a tree as long as it does + not go above the highest parent directory still managed by CMake. + +2007-03-07 16:32 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmLocalGenerator.h: COMP: + Fix ConvertToRelativePath change for Xcode generator. + +2007-03-07 16:00 king + + * Source/kwsys/hashtable.hxx.in: STYLE: Move warning disable pragma + into push/pop block. + +2007-03-07 15:57 king + + * Modules/Platform/Windows-cl.cmake, + Source/cmLocalVisualStudio7Generator.cxx: BUG: Get rid of ancient + variables CMAKE_CXX_WARNING_LEVEL, CMAKE_CXX_USE_RTTI, + CMAKE_CXX_STACK_SIZE which are only partially implemented and now + taken care of by flag mapping anyway. + +2007-03-07 15:36 martink + + * Modules/UsePkgConfig.cmake: BUG: untested fix for newlines in the + output of pkg config + +2007-03-07 15:30 king + + * Source/cmLocalGenerator.cxx: COMP: Add missing include for + assert. + +2007-03-07 15:15 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmLocalGenerator.cxx, cmLocalGenerator.h: ENH: Moved + ConvertToRelativePath from cmGlobalGenerator to cmLocalGenerator. + This is in preparation for setting up each local generator to + have its own RelativePathTopSource and RelativePathTopBinary + based on its ancestor directories. + +2007-03-07 13:52 king + + * Source/kwsys/: testDynamicLoader.cxx, testSystemTools.cxx: BUG: + Use angle-brackets to include testSystemTools.h to avoid problems + with in-source builds. + +2007-03-07 13:01 martink + + * Source/CMakeLists.txt: BUG: oops bad arg for new test + +2007-03-07 11:03 martink + + * Source/CMakeLists.txt, Source/cmIncludeDirectoryCommand.cxx, + Source/cmIncludeDirectoryCommand.h, Source/cmMakefile.cxx, + Source/cmSeparateArgumentsCommand.cxx, + Tests/NewlineArgs/CMakeLists.txt: BUG: improve bad argument + handling for INCLUDE_DIRECTORIES and ADD_DEFINITIONS bug 4364 + +2007-03-07 09:26 king + + * Source/kwsys/: auto_ptr.hxx.in, testAutoPtr.cxx: ENH: Enabled + support for use_auto_ptr(get_auto_ptr()) syntax on HP compiler. + +2007-03-06 21:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-06 14:52 martink + + * Tests/NewlineArgs/: CMakeLists.txt, cxxonly.cxx, libcxx1.cxx, + libcxx1.h, libcxx2.h.in: ENH: added a tets for newlines in some + commands + +2007-03-06 10:56 martink + + * Source/kwsys/hashtable.hxx.in: COMP: shut up w4 warning + +2007-03-06 09:16 andy + + * Modules/CPack.STGZ_Header.sh.in: STYLE: Defautl answer for the + license is no + +2007-03-05 21:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-05 15:21 martink + + * Modules/UseSWIG.cmake: ENH: patch applied for bug 4517 + +2007-03-05 13:01 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: BUG: Removed legacy + SetupTests method that was causing RUN_TESTS to test twice. + +2007-03-05 10:36 martink + + * Source/: cmCommandArgumentParser.cxx, cmDependsFortranParser.cxx, + cmDependsJavaParser.cxx, cmExprParser.cxx: COMP: shut up warnings + +2007-03-05 09:50 martink + + * Source/cmTryCompileCommand.cxx: STYLE: long line + +2007-03-04 21:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-03 23:46 king + + * Source/kwsys/testAutoPtr.cxx: COMP: Disable function call with + function return test for HP until it is implemented. + +2007-03-03 21:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-03 15:43 king + + * Source/kwsys/: CMakeLists.txt, auto_ptr.hxx.in: COMP: All kwsys + .hxx headers should include Configure.hxx. Re-enabling + testAutoPtr. + +2007-03-03 15:32 king + + * Source/kwsys/CMakeLists.txt: COMP: Disable auto_ptr test for now. + +2007-03-03 15:05 king + + * Source/kwsys/: auto_ptr.hxx.in, testAutoPtr.cxx: ENH: Implemented + auto_ptr_ref in a way that allows conversion of the pointed-to + type. + +2007-03-03 14:51 king + + * Source/kwsys/testAutoPtr.cxx: COMP: Remove one conversion test + until it is implemented. + +2007-03-03 14:48 king + + * Source/kwsys/: CMakeLists.txt, auto_ptr.hxx.in, testAutoPtr.cxx: + ENH: Added test for auto_ptr. Documented aut_ptr template + implementation. + +2007-03-03 12:16 king + + * Source/: cmBootstrapCommands.cxx, cmCommands.cxx: BUG: + cmCreateTestSourceList command is needed at boostrap time because + KWSys now uses test drivers. + +2007-03-03 10:47 king + + * Source/: kwsys/CMakeLists.txt, + kwsys/testCommandLineArguments.cxx, + kwsys/testCommandLineArguments1.cxx, kwsys/testDynamicLoader.cxx, + kwsys/testFail.c, kwsys/testHashSTL.cxx, kwsys/testIOS.cxx, + kwsys/testRegistry.cxx, kwsys/testSystemTools.cxx, + kwsys/testTerminal.c, CMakeLists.txt: ENH: Cleaned up KWSys tests + to use test drivers. + +2007-03-03 10:09 king + + * Modules/Platform/Windows-bcc32.cmake: BUG: Do not create import + library for MODULEs. The TARGET_IMPLIB name is not set correctly + for MODULE rules anyway. + +2007-03-02 21:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-02 14:31 martink + + * Source/: cmMakefileUtilityTargetGenerator.cxx, + cmMakefileUtilityTargetGenerator.h: BUG: fix for build order + +2007-03-02 11:33 andy + + * Modules/Platform/Darwin.cmake, Source/cmTryCompileCommand.cxx: + BUG: Propagate platform settings such as CMAKE_OSX_ARCHITECTURES + to the try compile + +2007-03-02 10:57 martink + + * Modules/SystemInformation.cmake: ENH: limit the output of system + information to no more than 50K per file + +2007-03-02 10:50 martink + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmWin32ProcessExecution.cxx: COMP: fix some w4 warnings + +2007-03-02 10:49 martink + + * Source/cmake.cxx: ENH: fix compiler warning + +2007-03-02 10:48 martink + + * Source/: kwsys/SystemTools.cxx, cmFileCommand.cxx: COMP: fix + warnings + +2007-03-01 23:28 king + + * Source/kwsys/auto_ptr.hxx.in: COMP: More workarounds for Borland. + +2007-03-01 21:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-03-01 16:44 king + + * Modules/FindQt4.cmake: BUG: Fix bug introduced by revision 1.67. + The qmake query mode prints information to stderr on some + platforms. The OUTPUT_VARIABLE and ERROR_VARIABLE must be the + same variable to get all the output. + +2007-03-01 16:23 martink + + * Source/cmFileCommand.cxx: COMP: fix a compiel warning + +2007-03-01 15:53 martink + + * Source/: cmFileCommand.cxx, cmFileCommand.h: ENH: added LIMIT on + file read + +2007-03-01 14:52 martink + + * Source/kwsys/SystemTools.cxx: COMP: fix warning + +2007-03-01 14:30 martink + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: added a + limit to the getline method + +2007-03-01 10:53 martink + + * Source/cmake.cxx: BUG: a couple bugs in system informaiton + +2007-03-01 10:33 martink + + * CMakeLists.txt: BUG: bad command line + +2007-02-28 21:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-28 17:26 hoffman + + * Source/cmLocalGenerator.cxx: ENH: remove qnx special stuff that + does not work + +2007-02-28 14:45 martink + + * Source/cmMakefile.cxx: BUG: cleanup paths in GetSourceFile to + handle bug 2724 + +2007-02-28 14:29 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalUnixMakefileGenerator3.cxx: + ENH: one more pass at paths with spaces and parens + +2007-02-28 12:25 martink + + * CMakeLists.txt, Source/CMakeLists.txt, Source/cmake.cxx: BUG: + allow system information to accept the -G option + +2007-02-28 09:36 king + + * Source/kwsys/auto_ptr.hxx.in: BUG: Assignment should always use + reset(). + +2007-02-28 09:35 king + + * Source/kwsys/auto_ptr.hxx.in: COMP: Fix for auto_ptr_ref on + Borland 5.8. + +2007-02-28 09:33 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fix for + cmake_force target in Borland Makefiles. + +2007-02-27 16:41 martink + + * Source/cmake.cxx: BUG: fix to naming of results file + +2007-02-27 15:11 hoffman + + * Tests/SubDirSpaces/: CMakeLists.txt, + ThirdSubDir/testfromauxsubdir.c: ENH: watcom wmake can not handle + () in the path with cd command + +2007-02-27 13:34 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: add a fix for + spaces in the path again... + +2007-02-27 13:04 martink + + * CMakeLists.txt, Source/CMakeLists.txt: BUG: possible fix for new + SystemInfo test + +2007-02-27 12:47 martink + + * Source/cmake.cxx: BUG: fix for unused variable + +2007-02-27 12:10 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: fix for spaces in + the path and mingw + +2007-02-27 11:59 martink + + * Source/CMakeLists.txt: BUG: possible fix for new SystemInfo test + +2007-02-27 10:10 martink + + * Source/: CMakeLists.txt, cmake.cxx, cmake.h, cmakemain.cxx: ENH: + added --system-information option to CMake + +2007-02-27 09:43 martink + + * Modules/: SystemInformation.cmake, SystemInformation.in: ENH: + improvements + +2007-02-26 13:40 martink + + * Modules/: SystemInformation.cmake, SystemInformation.in: ENH: + added for system information command line option + +2007-02-26 12:08 king + + * Source/kwsys/auto_ptr.hxx.in: COMP: Added line accidentally + removed. + +2007-02-26 12:06 king + + * Source/kwsys/auto_ptr.hxx.in: BUG: Fixed implementation of + auto_ptr_ref. + +2007-02-26 11:56 hoffman + + * Source/cmLocalGenerator.cxx: ENH: go back to \ escapes for qnx + +2007-02-26 11:41 hoffman + + * Source/cmLocalGenerator.cxx: ENH: go back to EscapeForShell + version + +2007-02-26 10:46 king + + * Tests/SubDirSpaces/CMakeLists.txt: COMP: Disable rpath with + spaces on some systems. + +2007-02-25 21:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-25 19:22 alex + + * Modules/FindGettext.cmake: BUG: fix typo reported by Duncan Mac + Vicar + + Alex + +2007-02-25 16:13 hoffman + + * Source/cmLocalGenerator.cxx: ENH: try and use \ for space and () + escapes + +2007-02-23 20:37 hoffman + + * Source/cmLocalGenerator.cxx: ENH: try another thing 3 + +2007-02-23 17:38 hoffman + + * Source/cmLocalGenerator.cxx: ENH: try another thing + +2007-02-23 17:07 hoffman + + * Source/cmLocalGenerator.cxx: ENH: add some debug stuff + +2007-02-23 16:44 hoffman + + * Source/cmLocalGenerator.cxx: ENH: add some debug stuff + +2007-02-23 14:37 andy + + * Source/CMakeLists.txt: COMP: Disable test until generators are + fixed + +2007-02-23 11:30 andy + + * Source/CMakeLists.txt: ENH: Try to fix spaces in the path problem + +2007-02-23 11:17 andy + + * Tests/SimpleExclude/run.cmake.in: ENH: Try to fix spaces in the + path problem + +2007-02-23 10:31 andy + + * Tests/SimpleExclude/: dirC/dirA/CMakeLists.txt, + dirC/dirB/CMakeLists.txt, dirD/CMakeLists.txt: ENH: Force + libraries to be static + +2007-02-23 09:54 martink + + * Source/cmGetTestPropertyCommand.h: ENH: added some documentation + on how to find the default properties of a test + +2007-02-23 09:46 andy + + * Source/: CMakeLists.txt, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmMakefile.cxx, cmTarget.cxx, cmTarget.h: + ENH: Make EXCLUDE_FROM_ALL a target and directory properties. + Also, make IsInAll use EXCLUDE_FROM_ALL. Also, enable the test + that tests this + +2007-02-23 09:45 andy + + * Source/cmIncludeDirectoryCommand.cxx: BUG: Produce error when + include directories is invoked with an empty list + +2007-02-22 17:34 hoffman + + * Source/cmLocalGenerator.cxx: ENH: hack put the hack back for qnx + to try and fix spaces in the path + +2007-02-22 17:26 hoffman + + * Source/cmLocalGenerator.cxx: ENH: undo hack and try to get + dashboard back + +2007-02-22 17:15 hoffman + + * Tests/SubDirSpaces/CMakeLists.txt: ENH: add a comment + +2007-02-22 16:23 king + + * Source/cmLocalGenerator.cxx: BUG: Hack to try working around a + problem with spaces in an rpath on QNX. + +2007-02-22 15:43 hoffman + + * Tests/SubDirSpaces/CMakeLists.txt: ENH: show make results on the + dashboard + +2007-02-22 15:33 hoffman + + * Source/cmLocalGenerator.cxx: ENH: add new escape stuff + +2007-02-22 15:27 king + + * Source/kwsys/SystemTools.cxx: BUG: Fix bug#4482. + +2007-02-22 15:16 andy + + * Tests/SimpleExclude/run.cmake.in: COMP: Use exec_program instead + of execute_process + +2007-02-22 11:42 andy + + * Tests/SimpleExclude/: CMakeLists.txt, run.cmake.in: ENH: Improve + test + +2007-02-22 10:31 hoffman + + * Source/CMakeLists.txt: ENH: actually keep the output + +2007-02-22 10:05 hoffman + + * Source/CMakeLists.txt: ENH: make sure EXECUTE_PROCESS is there + because in bootstrap it is not + +2007-02-22 09:48 hoffman + + * Source/kwsys/SystemTools.cxx: COMP: remove warning + +2007-02-22 09:44 martink + + * Source/CPack/cmCPackOSXX11Generator.cxx: STYLE: fix someones line + length + +2007-02-22 09:10 andy + + * Source/cmake.cxx: BUG: Produce an error when the script is not + found + +2007-02-22 08:39 andy + + * Tests/SimpleExclude/: CMakeLists.txt, dirC/CMakeLists.txt, + dirC/dirA/CMakeLists.txt, dirC/dirA/t1.c, dirC/dirA/t2.c, + dirC/dirA/t3.c, dirC/dirA/t4.c, dirC/dirA/t5.c, + dirC/dirB/CMakeLists.txt, dirC/dirB/t6.c, dirC/dirB/t7.c, + dirD/CMakeLists.txt, dirD/t8.c, dirD/t9.c: ENH: Add simple + exclusion test for subdirectories + +2007-02-21 21:24 hoffman + + * Source/CMakeLists.txt, Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/kwsys/SystemTools.cxx, Tests/SubDirSpaces/CMakeLists.txt, + Tests/SubDirSpaces/Some(x86) Sources/CMakeLists.txt, + Tests/SubDirSpaces/Some(x86) Sources/test.c, + Tests/SubDirSpaces/ThirdSubDir/testfromauxsubdir.c: ENH: fix + parens in the path with spaces in the path + +2007-02-21 14:58 martink + + * Source/CMakeLists.txt: ENH: turn on spaces test for more + platforms + +2007-02-21 14:07 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: get rid of some extra erase + calls + +2007-02-21 14:07 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: STYLE: fix line length + +2007-02-21 14:01 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmXCodeObject.cxx: BUG: fix + for quotes in strings for flags #4022 + +2007-02-21 13:33 king + + * Source/kwsys/CMakeLists.txt: COMP: Disable LFS on AIX. + +2007-02-21 12:19 martink + + * Source/cmGlobalWatcomWMakeGenerator.cxx: ENH: remove unused + variable + +2007-02-21 11:58 martink + + * Source/CMakeLists.txt: ENH: turn on spaces test for more + platforms + +2007-02-21 11:45 hoffman + + * Modules/Platform/AIX.cmake: ENH: force c++ when building c++ + objects + +2007-02-21 10:29 hoffman + + * Modules/CMakeDetermineSystem.cmake: ENH: better processor + detection on linux + +2007-02-21 10:03 hoffman + + * Modules/CMakeDetermineFortranCompiler.cmake: ENH: remove df + because df is a unix utilitiy + +2007-02-20 16:43 hoffman + + * Modules/: CMakeDetermineFortranCompiler.cmake, + Platform/Windows-df.cmake: BUG: fix for bug 3950 add support for + df compiler on windows + +2007-02-20 16:35 hoffman + + * Modules/FindQt4.cmake: BUG: fix for bug # 3954 glib with qt + +2007-02-20 16:05 alex + + * Modules/FindKDE4.cmake: STYLE: fix docs for FindKDE4.cmake + + Alex + +2007-02-20 16:02 alex + + * Modules/: FindKDE3.cmake, KDE3Macros.cmake: BUG: remove + KDE3_ENABLE_FINAL (#4140): it doesn't work currently and I don't + have the time to fix this since it would require bigger changes. + Maybe I'll do this if the KDE3 support of CMake becomes more + widely used. + + Alex + +2007-02-20 16:00 alex + + * Modules/FindLibXml2.cmake: STYLE: don't put the copyright notice + twice in the file + + Alex + +2007-02-20 15:15 hoffman + + * Modules/FindQt4.cmake: BUG: fix for bug 4187 fix typo in docs + +2007-02-20 15:14 hoffman + + * Modules/CMakeUnixFindMake.cmake: BUG: fix for 4188 look for smake + as well as gmake and make + +2007-02-20 15:09 hoffman + + * Source/cmFileCommand.h: ENH: fix spelling error bug # 4233 + +2007-02-20 15:03 martink + + * Source/CMakeLists.txt: ENH: only add the test for some platforms + +2007-02-20 13:52 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix source extensions + fror txt on xcode + +2007-02-20 12:28 martink + + * Source/cmMakefileTargetGenerator.cxx: ENH: fix for Watcom + +2007-02-20 11:33 hoffman + + * Modules/Platform/QNX.cmake: ENH: try to force c++ on qnx + +2007-02-20 11:14 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix for force language + stuff + +2007-02-20 10:57 hoffman + + * Tests/SetLang/CMakeLists.txt: ENH: verbose + +2007-02-20 10:52 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: ENH: fix crash + +2007-02-20 09:54 hoffman + + * Modules/InstallRequiredSystemLibraries.cmake: BUG: fix for bug + 4420 add language dll's to mfc install + +2007-02-20 09:35 hoffman + + * Source/CMakeLists.txt, Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Tests/SetLang/CMakeLists.txt, Tests/SetLang/bar.c, + Tests/SetLang/foo.c: BUG: fix for bug 4423 set language fixes + +2007-02-19 16:34 hoffman + + * Source/CMakeLists.txt: ENH: remove ConvLib test for now + +2007-02-19 15:12 hoffman + + * Source/CMakeLists.txt: ENH: use correct name + +2007-02-19 15:07 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: use project not target + name + +2007-02-19 14:48 martink + + * Source/CMakeLists.txt, Tests/SubDirSpaces/CMakeLists.txt: ENH: + make the test really test targets with spaces + +2007-02-19 14:32 martink + + * Source/: cmTarget.cxx, cmTarget.h: BUG: fix accidental checkin + +2007-02-19 14:26 martink + + * Tests/SubDirSpaces/Executable Sources/: CMakeLists.txt, test.cxx: + ENH: added used sources with a path that has spaces + +2007-02-19 14:25 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmMakefileTargetGenerator.cxx: ENH: fixed more bugs with spaces + in the path + +2007-02-19 13:53 king + + * Modules/Platform/gcc.cmake: BUG: Applied patch from bug#4462. + +2007-02-19 13:44 hoffman + + * Modules/FindQt4.cmake: BUG: fix for bug 4464 handle qmake errors + better + +2007-02-19 13:26 hoffman + + * Source/CMakeLists.txt, Tests/ConvLibrary/CMakeLists.txt: ENH: add + test for conv libraries + +2007-02-19 13:20 martink + + * Source/: CMakeLists.txt, cmTarget.cxx, cmTarget.h: ENH: turn on + spaces in path test + +2007-02-19 12:25 martink + + * Source/: cmMakefileTargetGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx: BUG: fix for spaces in path + for nmake + +2007-02-19 12:21 martink + + * Tests/SubDirSpaces/: CMakeLists.txt, + vcl_algorithm+vcl_pair+double.foo.c, + vcl_algorithm_vcl_pair_double.foo.c, Another + Subdir/pair+int.int.c, Another Subdir/pair_int.int.c, Another + Subdir/secondone.c, Another Subdir/testfromsubdir.c, + Executable/CMakeLists.txt, Executable/test.cxx, Some + Examples/CMakeLists.txt, Some Examples/example1/CMakeLists.txt, + Some Examples/example1/example1.cxx, Some + Examples/example2/CMakeLists.txt, Some + Examples/example2/example2.cxx, ThirdSubDir/pair+int.int1.c, + ThirdSubDir/pair_int.int1.c, ThirdSubDir/pair_p_int.int1.c, + ThirdSubDir/testfromauxsubdir.c, ThirdSubDir/thirdone.c: ENH: new + test for spaces in the tree structure + +2007-02-18 21:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-18 09:31 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: STYLE: fix warning + +2007-02-17 22:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-17 11:43 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix for external object + test + +2007-02-17 08:46 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalVisualStudio7Generator.cxx, + cmLocalXCodeGenerator.cxx, cmTarget.cxx, + CPack/cmCPackOSXX11Generator.cxx: STYLE: fix line length issues + +2007-02-17 08:38 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmLocalGenerator.cxx: ENH: + remove warnings and debug statement + +2007-02-16 16:45 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Tests/ConvLibrary/bartest.cxx: ENH: fix for vs ide + +2007-02-16 16:12 hoffman + + * Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/cmLocalVisualStudioGenerator.h, + Source/cmLocalXCodeGenerator.cxx, Source/cmLocalXCodeGenerator.h, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, Source/cmTarget.cxx, + Source/cmTarget.h, Tests/ConvLibrary/CMakeLists.txt, + Tests/ConvLibrary/bar.c, Tests/ConvLibrary/bartest.cxx, + Tests/ConvLibrary/foo.cxx, Tests/ConvLibrary/sub1/car.cxx: ENH: + check in initial conv library stuff + +2007-02-16 15:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-15 15:07 andy + + * Source/cmake.cxx: BUG: Overwrite the symlink if it already + exists. Close Bug #4418 - cmake -create-symlink doesn't overwrite + existing symlinks + +2007-02-15 13:36 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmCommandArgumentParserHelper.h, Source/cmMakefile.cxx: + ENH: move @@ fix from main tree + +2007-02-15 12:45 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/FindQt4.cmake, + Modules/InstallRequiredSystemLibraries.cmake, + Source/cmAddDependenciesCommand.cxx, Source/cmIfCommand.cxx, + Source/cmIfCommand.h, Source/cmLocalVisualStudio7Generator.cxx, + Source/cmSetTargetPropertiesCommand.cxx, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.cxx.bak: + ENH: merge in changes from main tree, including fix for exception + stuff in vs 7 + +2007-02-15 12:23 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Do not hack the + exception handling default for linker flags or for + per-source-file flags. + +2007-02-14 22:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-13 22:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-13 14:12 andy + + * Source/CPack/cmCPackOSXX11Generator.cxx, + Source/CPack/cmCPackOSXX11Generator.h, Modules/CPack.DS_Store.in, + Modules/CPack.VolumeIcon.icns.in, + Modules/CPack.background.png.in, Modules/CPack.cmake: ENH: More + work on the packaging. Add Applicaitons, add icons, etc + +2007-02-12 23:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-12 12:06 hoffman + + * Utilities/Release/: create-cmake-release.cmake, + release_cmake.cmake: ENH: add cygwin cpack stuff to release + scripts + +2007-02-12 09:15 hoffman + + * Utilities/Release/vogon_cygwin.cmake: ENH: add cygwin on vogon + +2007-02-11 22:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-10 22:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-10 09:52 alex + + * Modules/FindPNG.cmake: STYLE: remove empty line, so the + documentation for the module is complete again + + Alex + +2007-02-09 22:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-09 13:44 hoffman + + * Source/: cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserHelper.h, cmMakefile.cxx: ENH: add atonly + support to cmCommandArgumentParserHelper.cxx and remove old + non-yacc parser code from cmMakefile.cxx + +2007-02-08 22:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-08 16:18 king + + * Source/CMakeLists.txt, Tests/PrecompiledHeader/CMakeLists.txt, + Tests/PrecompiledHeader/foo1.c, Tests/PrecompiledHeader/foo2.c, + Tests/PrecompiledHeader/foo_precompile.c, + Tests/PrecompiledHeader/include/foo.h, + Tests/PrecompiledHeader/include/foo_precompiled.h: ENH: Added + PrecompiledHeader test for MSVC compilers. + +2007-02-07 22:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-07 14:50 alex + + * Modules/: UseEcos.cmake, ecos_clean.cmake: ENH: now also the + "ecosclean" target works with MS nmake + + Alex + +2007-02-07 11:50 hoffman + + * Modules/FindQt4.cmake: BUG: fix for bug 4399 + +2007-02-07 11:49 hoffman + + * Source/: cmAddDependenciesCommand.cxx, + cmSetTargetPropertiesCommand.cxx: BUG: fix for bug 4414, find + targets in the global generator for set_target_properties and + add_dependencies + +2007-02-07 10:26 hoffman + + * Modules/InstallRequiredSystemLibraries.cmake: BUG: fix for 4420 + Unicode and MBC versions of the MFC + +2007-02-07 09:23 king + + * Source/cmDependsC.cxx: STYLE: Fixed line-too-long. + +2007-02-06 21:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-06 16:03 hoffman + + * Source/cmSetSourceFilesPropertiesCommand.h: ENH: fix + documentation to include source language property + +2007-02-06 15:05 king + + * Source/cmDocumentation.cxx: BUG: Patch from Alex to fix + single-command help broken by previous patch. + +2007-02-06 10:01 hoffman + + * CMakeLists.txt, Source/CPack/cmCPackGenerators.cxx: ENH: fix + release tree to build on mac + +2007-02-05 21:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-05 14:05 hoffman + + * Source/cmLocalUnixMakefileGenerator3.h: ENH: merge changes from + main trunk + +2007-02-05 13:21 hoffman + + * CMakeLists.txt, ChangeLog.manual, cmake_uninstall.cmake.in, + Modules/CPack.cmake, Modules/FindKDE4.cmake, + Modules/FindXMLRPC.cmake, Source/CMakeLists.txt, + Source/cmGlobalKdevelopGenerator.cxx, + Source/cmInstallTargetGenerator.cxx, + Source/cmLocalKdevelopGenerator.cxx, + Source/cmLocalKdevelopGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTarget.cxx, Source/cmTarget.h, + Source/CPack/cmCPackGenerators.cxx, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, + Source/CPack/cmCPackNSISGenerator.h, + Source/CPack/cmCPackPackageMakerGenerator.h, + Source/CPack/cmCPackSTGZGenerator.h, + Source/CPack/cmCPackTGZGenerator.h, + Source/CPack/cmCPackTarBZip2Generator.cxx, + Source/CPack/cmCPackTarBZip2Generator.h, + Source/CPack/cmCPackTarCompressGenerator.h, + Source/CPack/cmCPackZIPGenerator.h, Source/kwsys/System.h.in, + Source/kwsys/SystemTools.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Utilities/Release/Cygwin/CMakeLists.txt, + Utilities/Release/Cygwin/README.cygwin.in, + Utilities/Release/Cygwin/cygwin-package.sh.in, + Utilities/Release/Cygwin/cygwin-patch.diff.in, + Utilities/Release/Cygwin/cygwin-setup.hint.in, + Source/CPack/cmCPackCygwinBinaryGenerator.cxx, + Source/CPack/cmCPackCygwinBinaryGenerator.h, + Source/CPack/cmCPackCygwinSourceGenerator.cxx, + Source/CPack/cmCPackCygwinSourceGenerator.h: ENH: merge in + changes from branch + +2007-02-05 11:13 martink + + * Source/CMakeLists.txt: ENH: add more time to bootstrap test + +2007-02-05 09:48 king + + * Source/: cmDependsC.cxx, cmDependsC.h: BUG: Patch from Alex to + recompute dependencies when the include regex changes. This + addresses bug#4168. + +2007-02-04 21:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-03 21:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-02 21:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-02 16:52 hoffman + + * Source/CPack/: cmCPackCygwinSourceGenerator.cxx, + cmCPackTarBZip2Generator.cxx: STYLE: fix warnings + +2007-02-02 16:51 hoffman + + * Modules/FindQt4.cmake: ENH: fix depend bug in qt + +2007-02-02 14:40 hoffman + + * CMakeLists.txt, Modules/CPack.cmake, Source/CMakeLists.txt, + Source/CPack/bills-comments.txt, + Source/CPack/cmCPackCygwinBinaryGenerator.cxx, + Source/CPack/cmCPackCygwinBinaryGenerator.h, + Source/CPack/cmCPackCygwinSourceGenerator.cxx, + Source/CPack/cmCPackCygwinSourceGenerator.h, + Source/CPack/cmCPackGenerators.cxx, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, + Source/CPack/cmCPackNSISGenerator.h, + Source/CPack/cmCPackOSXX11Generator.h, + Source/CPack/cmCPackPackageMakerGenerator.h, + Source/CPack/cmCPackSTGZGenerator.h, + Source/CPack/cmCPackTGZGenerator.h, + Source/CPack/cmCPackTarBZip2Generator.cxx, + Source/CPack/cmCPackTarBZip2Generator.h, + Source/CPack/cmCPackTarCompressGenerator.h, + Source/CPack/cmCPackZIPGenerator.h, Source/CPack/cygwin.readme, + Utilities/Release/create-cmake-release.cmake, + Utilities/Release/release_cmake.cmake, + Utilities/Release/Cygwin/CMakeLists.txt, + Utilities/Release/Cygwin/README.cygwin.in, + Utilities/Release/Cygwin/cygwin-package.sh.in: ENH: add support + for cygwin source and binary packaging + +2007-02-02 14:13 king + + * Source/cmDocumentation.h: COMP: Fix void return failure. + +2007-02-02 12:46 alex + + * Modules/FindGettext.cmake: BUG: add gettext module for working + with GNU gettext (#4081) + + Alex + +2007-02-02 10:14 martink + + * Source/CMakeLists.txt: ENH: allow the dashboard to override the + timeouts for CTestTest + +2007-02-02 09:11 king + + * Source/cmDocumentation.h: STYLE: Fixed line length and this-> + convention violations from yesterday's patch. + +2007-02-02 09:11 king + + * Source/CTest/cmCTestBuildCommand.cxx: STYLE: Fixed line-too-long. + +2007-02-01 20:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-02-01 17:06 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: STYLE: fix line length + +2007-02-01 16:56 king + + * Source/cmMakefileTargetGenerator.cxx: BUG: Use the exe/lib output + path for .pdb file location. This addresses bug#3277 and + bug#4287. + +2007-02-01 16:54 king + + * Source/: cmLocalVisualStudio7Generator.cxx, cmTarget.cxx, + cmTarget.h: ENH: Added cmTarget::GetPDBName method to simplify + computation of .pdb file name for a target. + +2007-02-01 16:52 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx: BUG: Do not clean the .pdb + file for a target just before it is linked! This finishes + addressing bug#4341. + +2007-02-01 16:07 king + + * Source/cmMakefileExecutableTargetGenerator.cxx: BUG: Clean rule + for exe pdb file should use full path. + +2007-02-01 15:44 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Do not use bitwise + OR on bool. + +2007-02-01 15:22 king + + * Source/cmLocalVisualStudio7Generator.h: STYLE: Removed unused + method declarations. + +2007-02-01 15:02 king + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: Added a special + flags integer field to the flag map entries. Added flags for + user values and other special cases. Added precompiled header + flag translation entries. This addresses bug#3512. + +2007-02-01 14:45 king + + * Source/kwsys/SystemTools.cxx: STYLE: Removed one more stray + comment. + +2007-02-01 14:43 martink + + * Source/kwsys/SystemTools.cxx: STYLE: removed code accidently + checked in + +2007-02-01 14:11 martink + + * Source/kwsys/SystemTools.cxx: BUG: fix for bug number 3320 + +2007-02-01 13:04 king + + * Source/cmLocalVisualStudio7Generator.cxx: COMP: Removed unused + variable. + +2007-02-01 12:02 king + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: Added smoke + test for user-value flag mapping for VS IDE. + +2007-02-01 12:00 king + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: Added mapping of + /NODEFAULTLIB flag when no values are provided. + +2007-02-01 11:49 king + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: ENH: Reimplemented parsing and + mapping of flags into vcproj file attribute options. This cleans + up and centralizes a few things. It is in preparation for + dealing with precompiled header flags for bug #3512 since they + require some special handling. + +2007-02-01 11:45 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added + EscapeWindowsShellArgument and ParseWindowsCommandLine methods to + cmSystemTools. + +2007-02-01 11:33 martink + + * Source/cmMakefileTargetGenerator.cxx: BUG: fix for bug number + 3964 + +2007-02-01 10:38 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h: ENH: Patch from + Alex to improve implementation and prepare for splitting the man + page into more sections. + +2007-02-01 09:57 king + + * Source/: cmInstallTargetGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, cmTarget.cxx, cmTarget.h: + BUG: The .pdb file generated for a library or executable should + match the real file name used for the target. This addresses + bug#3277. + +2007-01-31 20:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-31 16:50 hoffman + + * Source/CPack/: cmCPackCygwinSourceGenerator.cxx, + cmCPackCygwinSourceGenerator.h: ENH: commit cygwin source + generator files, not used yet + +2007-01-31 16:49 hoffman + + * Source/cmLocalGenerator.cxx: ENH: do not use crazy long paths to + object files for try compile + +2007-01-31 16:48 hoffman + + * Utilities/Release/Cygwin/: CMakeLists.txt, README.cygwin.in, + cygwin-package.sh.in, cygwin-patch.diff.in, cygwin-setup.hint.in: + ENH: add support files for cpack cygwin setup package stuff + +2007-01-31 15:06 alex + + * Modules/FindQt4.cmake: BUG: finally fix #4331, the previous + version just caught the tag, the filename not at all + + Alex + +2007-01-31 14:00 hoffman + + * Tests/TryCompile/CMakeLists.txt: ENH: add more output when test + fails + +2007-01-31 13:54 andy + + * Source/CMakeLists.txt: COMP: Remove osx bundle from + OSXScriptLauncher + +2007-01-31 13:53 andy + + * Source/CPack/OSXScriptLauncher.cxx: COMP: Use new API + +2007-01-31 13:37 andy + + * Source/CMakeLists.txt: COMP: Add missing file in the installation + +2007-01-31 13:34 hoffman + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: BUG: make sure external vs + projects use the GUID in the project if it has one. + +2007-01-30 20:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-30 15:43 alex + + * Modules/FindKDE4.cmake: STYLE: KDEDIR is deprecated and not used, + so also document that KDEDIRS is used instead + + Alex + +2007-01-30 11:48 andy + + * Source/CTest/cmCTestBuildCommand.cxx: ENH: Allow to specify build + target + +2007-01-30 11:48 andy + + * Source/CMakeLists.txt: COMP: Fix bootstrap + +2007-01-30 11:35 martink + + * Source/: CMakeLists.txt, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, ctest.cxx, + CTest/cmCTestBuildAndTestHandler.cxx: BUG: fixes so that + --build-and-test will honor timeouts + +2007-01-30 11:32 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: allow copy if different from a + file to a directory to work + +2007-01-29 20:30 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-29 12:42 martink + + * Source/cmCTest.cxx: BUG: fix in the timeout code + +2007-01-28 20:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-27 20:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-27 15:29 malaterre + + * Source/kwsys/System.h.in: STYLE: Fix typo + +2007-01-26 20:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-26 15:06 martink + + * Source/cmIfCommand.h: STYLE: improve IF documentation to cover + elseif + +2007-01-26 14:26 king + + * Source/kwsys/CMakeLists.txt: BUG: Added use of + KWSYS_INSTALL_COMPONENT_NAME_DEVELOPMENT for header file install + rules. + +2007-01-26 09:31 martink + + * Source/CTest/cmCTestTestHandler.cxx: COMP: fix warning + +2007-01-25 17:05 hoffman + + * Source/cmSubdirCommand.h: BUG: remove early ; + +2007-01-25 15:44 hoffman + + * Source/: CMakeLists.txt, cmGlobalKdevelopGenerator.cxx, + cmLocalKdevelopGenerator.cxx, cmLocalKdevelopGenerator.h, + cmLocalUnixMakefileGenerator3.h: BUG: fix for 4186, kdevelop + adding file twice + +2007-01-25 11:16 martink + + * Source/: cmCTest.cxx, cmCTest.h, cmTest.cxx, ctest.cxx, + CTest/cmCTestBuildAndTestHandler.cxx, + CTest/cmCTestBuildAndTestHandler.h, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h: ENH: added per test timeout support + +2007-01-24 13:45 king + + * Source/: cmExecProgramCommand.h, cmInstallFilesCommand.h, + cmInstallProgramsCommand.h, cmInstallTargetsCommand.h, + cmLinkLibrariesCommand.h, cmMakeDirectoryCommand.h, + cmRemoveCommand.h, cmSubdirCommand.h, cmSubdirDependsCommand.h, + cmVariableRequiresCommand.h, cmWriteFileCommand.h: ENH: Patch + from Alex to make deprecated command documentation more + consistent. + +2007-01-24 13:40 king + + * Source/: cmUseMangledMesaCommand.h, cmVariableRequiresCommand.h: + ENH: Patch from Alex to document this command as discouraged. + +2007-01-24 07:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-23 14:28 hoffman + + * Source/cmLocalGenerator.cxx: ENH: this does not need to be safe + as the value is checked + +2007-01-23 14:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-23 13:41 alex + + * Modules/UseEcos.cmake: BUG: reent.c wasn't intended to be + committed, too special + + Alex + +2007-01-23 13:29 alex + + * Modules/UseEcos.cmake: STYLE: use even more absolute paths, can't + hurt for out-of-source builds STYLE: use + SET_SOURCE_FILES_PROPERTIES() on multiple files at once instead + of interating over each one of them STYLE: no need to add + target.ld to the clean-files, this is done now automatically by + add_custom_command() ENH: now also MS nmake can be used to build + ecos apps + + Alex + +2007-01-23 13:08 hoffman + + * Source/cmLocalGenerator.cxx: ENH: avoid crash, but do not make it + an error if include flags is missing from a language + +2007-01-23 11:39 hoffman + + * Source/cmLocalGenerator.cxx: ENH: make the include flag required + for a language avoids seg fault + +2007-01-23 11:25 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: ENH: undo bug fix + because of failed test + +2007-01-23 10:50 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: ENH: add link flags for + debug/release etc + +2007-01-22 20:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-22 10:52 king + + * Source/cmWriteFileCommand.h: ENH: Patch from Alex to document + WRITE_FILE as a discouraged command. + +2007-01-22 10:52 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h: COMP: Patch from + Alex for const correctness. + +2007-01-22 10:39 king + + * cmake_uninstall.cmake.in: BUG: Patch from bug#4312 to make + uninstall work with DESTDIR. + +2007-01-21 20:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-20 21:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-20 10:05 andy + + * Modules/FindQt4.cmake: COMP: Fix typo that makes all Qt4 builds + break + +2007-01-19 20:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-19 11:55 hoffman + + * Modules/FindQt4.cmake: BUG: fix for bug 4331 + +2007-01-18 20:35 hoffman + + * Modules/FindQt4.cmake: BUG: fix for bug 4331 + +2007-01-18 20:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-18 16:10 hoffman + + * Source/cmLocalVisualStudioGenerator.cxx: ENH: do not use relative + paths for custom command commands if they working directory is + used + +2007-01-17 14:06 alex + + * Modules/UseEcos.cmake: ENH: the ecos headers are always in the + binary dir + + Alex + +2007-01-17 13:57 alex + + * Modules/UseEcos.cmake: ENH: building ecos apps now seems to work + also out-of-source + + Alex + +2007-01-17 13:45 alex + + * Modules/UseEcos.cmake: BUG: also check that tclsh is available, + otherwise you can't build any eCos stuff ENH: make the name of + the config file ecos.ecc adjustable via the new variable + ECOS_CONFIG_FILE + + Alex + +2007-01-16 14:37 clinton + + * Source/kwsys/SystemTools.cxx: ENH: Add support for "~otheruser/" + +2007-01-15 12:31 andy + + * Source/CPack/cmCPackGenericGenerator.cxx: STYLE: Fix kwstyle + +2007-01-15 12:12 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: STYLE: fix link lenght + issue + +2007-01-14 20:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-13 20:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-12 20:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-12 16:47 clinton + + * Source/kwsys/SystemTools.cxx: ENH: Handle "~" in SplitPath. + +2007-01-12 09:53 hoffman + + * Utilities/Release/cygwin-package.sh.in: ENH: break it again + +2007-01-12 09:46 hoffman + + * Utilities/Release/cygwin-package.sh.in: ENH: fix for newer cygwin + +2007-01-12 09:18 hoffman + + * Utilities/Release/cmake_release.sh: ENH: change version of curses + +2007-01-11 21:02 hoffman + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: BUG: fix for bug 4239, + NODEFAULTLIB flag support in ide + +2007-01-11 20:54 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-11 10:49 andy + + * Source/CPack/: cmCPackGenericGenerator.cxx, + cmCPackGenericGenerator.h: STYLE: Fix kwstyle issues + +2007-01-10 20:54 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-10 19:59 hoffman + + * Source/CPack/OSXScriptLauncher.cxx: ENH: fix warning and code + style + +2007-01-10 18:33 andy + + * Modules/CPack.RuntimeScript.in: ENH: Change permission for + getdisplay.sh to make the runtimescript work + +2007-01-10 15:41 hoffman + + * Utilities/Release/cygwin-package.sh.in: ENH: remove old docs + +2007-01-10 15:30 andy + + * Modules/CPack.OSXScriptLauncher.in, + Modules/CPack.OSXX11.Info.plist.in, + Modules/CPack.RuntimeScript.in, Source/CMakeLists.txt, + Source/CPack/OSXScriptLauncher.cxx, + Source/CPack/cmCPackGenerators.cxx, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, + Source/CPack/cmCPackOSXX11Generator.cxx, + Source/CPack/cmCPackOSXX11Generator.h: ENH: First pass at CPack + generator for OSX X11 applications. This are applications that + require X11 to work. This is not really installed but a bundle + packager + +2007-01-10 14:27 hoffman + + * Utilities/Release/cmake_release.sh: ENH: create cygwin + +2007-01-10 12:39 hoffman + + * CMakeLists.txt: ENH: make this the final 2.4.6 + +2007-01-09 21:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-08 21:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-08 15:12 king + + * Source/kwsys/SharedForward.h.in: STYLE: Fixed documentation of + how to produce forwarding executables for multi-configuration + builds with CMAKE_INTDIR. + +2007-01-07 21:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-06 22:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-06 00:49 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-04 17:29 alex + + * Modules/FindQt4.cmake: ENH: if a wrong qmake has been found, mark + it as invalid in the cache, so that it is searched again the next + time cmake runs Tested in KDE since Jul 5th: + http://websvn.kde.org/trunk/KDE/kdelibs/cmake/modules/FindQt4.cmake?rev=558318&view=rev + + Alex + +2007-01-04 16:50 alex + + * Modules/: FindQt4.cmake, UseQt4.cmake: ENH: add QT_USE_QTDBUS as + it exists for all other modules too + + Alex + +2007-01-04 16:35 alex + + * Modules/FindQt4.cmake: BUG: also look for qmake4, as it is named + on OpenBSD + + Alex + +2007-01-04 16:03 martink + + * Source/cmAddLibraryCommand.cxx: BUG: fix for bad argument + handling + +2007-01-04 14:54 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-04 13:02 martink + + * Source/cmPropertyMap.cxx: ENH: change STRICT to CMAKE_STRICT + +2007-01-04 10:18 hoffman + + * CMakeLists.txt: ENH: add RC stuff to main tree + +2007-01-04 03:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-03 18:20 alex + + * Modules/FindQt4.cmake: ENH: partly sync with KDE svn: add the + macros for generating the dbus files + + Alex + +2007-01-03 17:50 alex + + * Modules/FindQt4.cmake: ENH: mark more variables ADVANCED + + Alex + +2007-01-03 17:32 alex + + * Modules/FindQt4.cmake: ENH: partly sync with KDE svn: handle + QtMain more like the other libs + + Alex + +2007-01-03 17:00 alex + + * Modules/FindQt4.cmake: BUG: argument names in macros are not real + variables, which can lead to problems, which we fixed for KDE in + Trysil: + http://websvn.kde.org/trunk/KDE/kdelibs/cmake/modules/FindQt4.cmake?rev=557470&r1=557241&r2=557470 + + Alex + +2007-01-03 16:48 alex + + * Modules/FindQt4.cmake: STYLE: some more space to make it easier + to read + + Alex + +2007-01-03 16:38 alex + + * Modules/FindQt4.cmake: ENH: partly sync with KDE svn: also find + the QtDBus and the QtDesignerComponents libraries + + Alex + +2007-01-03 16:09 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CPack.STGZ_Header.sh.in, Modules/FindDoxygen.cmake, + Modules/FindJNI.cmake, Modules/FindRuby.cmake, + Source/cmFindBase.cxx, Source/cmFindBase.h, + Tests/CTestTest3/test.cmake.in, + Tests/CustComDepend/CMakeLists.txt, Tests/CustComDepend/bar.h, + Tests/CustComDepend/foo.cxx: ENH: merge from main tree + +2007-01-03 16:01 alex + + * Modules/FindQt4.cmake: ENH: partly sync with the KDE vesion: find + the dbus tools coming with Qt since 4.2 + + Alex + +2007-01-03 10:19 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/CMakeLists.txt, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmLocalGenerator.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, + Source/cmMakefileUtilityTargetGenerator.cxx, Source/cmTarget.cxx: + ENH: merge in fixes from main tree + +2007-01-03 04:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-02 00:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2007-01-01 04:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-31 03:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-30 03:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-29 19:20 hoffman + + * Tests/CustComDepend/: CMakeLists.txt, bar.h, foo.cxx: ENH: try to + fix test on watcom + +2006-12-29 03:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-28 15:31 hoffman + + * Source/: cmFindBase.cxx, cmFindBase.h: BUG: fix problem with path + suffix and mac frameworks and find stuff, showed up in + FindPythonLibs.cmake + +2006-12-28 03:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-27 03:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-26 08:47 andy + + * Modules/FindJNI.cmake: ENH: Support JVM on Mac + +2006-12-26 03:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-25 03:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-24 03:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-23 03:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-22 03:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-21 10:24 utkarsh + + * Source/kwsys/CommandLineArguments.cxx: BUG: reverting previous + change. + +2006-12-21 09:52 utkarsh + + * Source/kwsys/CommandLineArguments.cxx: BUG: When a "wrong + argument" was detected, we call the WrongArgument handler. If the + handler returns success, the argument parsing should continue. + Currently, it was stopping parsing immediately after the wrong + argument was processed, irrespective of the WrongArgument handler + status. Fixed that. + +2006-12-21 04:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-20 03:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-19 03:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-18 11:30 utkarsh + + * Source/kwsys/SystemTools.cxx: BUG: FileIsDirectory would remove + the trailing '/' even when the path is indeed the root i.e. '/'. + Hence the test would be incorrect for root directory. Fixed that. + +2006-12-18 11:04 malaterre + + * Source/kwsys/kwsys_ios_sstream.h.in: COMP: Fix compilation when + VS6 is using the new ANSI stdlib + +2006-12-18 03:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-17 03:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-16 03:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-15 10:30 malaterre + + * Source/kwsys/kwsys_ios_sstream.h.in: COMP: Try to get + stringstream emulation working + +2006-12-15 03:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-14 14:30 king + + * Source/: cmGlobalUnixMakefileGenerator3.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileUtilityTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h: ENH: + Made cmMakefileTargetGenerator::GlobalGenerator have full type + cmGlobalUnixMakefileGenerator3 to give access to all methods. + Fixed broken custom targets with no commands for Borland + makefiles when CMAKE_SKIP_RULE_DEPENDENCY is set. + +2006-12-14 13:18 king + + * Source/kwsys/kwsys_ios_sstream.h.in: ENH: Adding stringstream + compatibility implementation. It is currently identical to + ostringstream. Fixed local variable pcount hiding method + warning. + +2006-12-14 11:41 malaterre + + * Source/kwsys/: kwsys_ios_sstream.h.in, testIOS.cxx: BUG: Remove + stringstream implementation, this was a wrong interface anyway. + +2006-12-14 11:02 malaterre + + * Source/kwsys/testIOS.cxx: BUG: disable test for now + +2006-12-14 10:03 king + + * Source/cmSystemTools.cxx: ENH: Changes from Ryan C. Gordon to fix + old process execution on BeOS. + +2006-12-14 03:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-13 16:44 andy + + * Modules/CPack.STGZ_Header.sh.in: BUG: Fixes for dash + +2006-12-13 13:24 martink + + * Source/cmPropertyMap.cxx: COMP: oops really did not mean to check + in that change + +2006-12-13 12:19 martink + + * Source/: cmAuxSourceDirectoryCommand.cxx, cmCPluginAPI.cxx, + cmCreateTestSourceList.cxx, cmFLTKWrapUICommand.cxx, + cmMakefile.cxx, cmPropertyMap.cxx, cmSourceFile.cxx, + cmSourceFile.h: ENH: allow source file properties to chain to + Directories and up + +2006-12-13 12:11 martink + + * Modules/VTKCompatibility.cmake: ENH: fix for back VTK error + message + +2006-12-13 08:52 malaterre + + * Source/kwsys/: kwsys_ios_sstream.h.in, testIOS.cxx: ENH: provide + stringstream too. FIX: warning shadow var + +2006-12-13 03:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-12 14:39 martink + + * Source/: cmCommands.cxx, cmVTKMakeInstantiatorCommand.cxx, + cmVTKMakeInstantiatorCommand.h, cmVTKWrapJavaCommand.cxx, + cmVTKWrapJavaCommand.h, cmVTKWrapPythonCommand.cxx, + cmVTKWrapPythonCommand.h, cmVTKWrapTclCommand.cxx, + cmVTKWrapTclCommand.h: ENH: remove old commands + +2006-12-12 13:59 martink + + * Modules/VTKCompatibility.cmake: ENH: put in a better error + message for VTK 4.0 + +2006-12-12 13:59 martink + + * Tests/Wrapping/CMakeLists.txt: ENH: removed old VTK tests + +2006-12-12 11:17 martink + + * Modules/VTKCompatibility.cmake: ENH: minor cleanup + +2006-12-12 11:06 hoffman + + * Tests/CTestTest3/test.cmake.in: ENH: do not use svn until it is + working again + +2006-12-12 10:07 martink + + * Source/: cmIfCommand.cxx, cmIfCommand.h, + cmSetPropertiesCommand.cxx: ENH: fix a warning and a nice fix to + the IF command + +2006-12-12 03:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-11 10:26 martink + + * Source/: cmSetPropertiesCommand.cxx, cmSetPropertiesCommand.h, + cmSetSourceFilesPropertiesCommand.cxx, + cmSetSourceFilesPropertiesCommand.h, cmake.cxx: ENH: improve + SetProperties and fix a couple warnings + +2006-12-11 03:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-10 03:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-09 15:02 hoffman + + * Modules/: FindPkgConfig.cmake, UsePkgConfig.cmake: ENH: better + backwards compatibility, and deprecate PKGCONFIG + +2006-12-09 11:25 malaterre + + * Source/kwsys/: CMakeLists.txt, DynamicLoader.cxx, + DynamicLoader.hxx.in: BUG: revert yesterday patch. The + implementation was correct. The problem was that _WIN32 was + forced to be #define on cygwin when included from ITK, which was + miss matching the implementation from the declaration. Put extra + condition for CYGWIN system + +2006-12-09 03:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-08 15:52 malaterre + + * Source/kwsys/: CMakeLists.txt, DynamicLoader.cxx, + DynamicLoader.hxx.in: BUG: Make sure to use the Win32 interface + (HINSTANCE) for handling shared lib on cygwin and mingw system + +2006-12-08 09:27 martink + + * Source/: cmDocumentation.cxx, cmSetPropertiesCommand.cxx, + cmTarget.cxx, cmake.cxx: COMP: fix some warnings and style issues + +2006-12-08 03:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-07 17:37 alex + + * Modules/FindRuby.cmake: BUG: fix 4164, also search for + libruby1.8.so, I guess it should be synced with the KDE version + of FindRUBY.cmake + + Alex + +2006-12-07 16:31 martink + + * Source/cmSetTestsPropertiesCommand.cxx: BUG: fix bad comparison + +2006-12-07 16:14 hoffman + + * Modules/Platform/BeOS.cmake: ENH: add beos file + +2006-12-07 15:23 martink + + * Source/cmSetTestsPropertiesCommand.cxx: COMP: fix a warning + +2006-12-07 14:54 martink + + * Source/: cmSetPropertiesCommand.cxx, cmSetPropertiesCommand.h, + cmSetTestsPropertiesCommand.cxx, cmSetTestsPropertiesCommand.h: + ENH: implements SetProperties for TEST + +2006-12-07 11:38 hoffman + + * Tests/CustComDepend/CMakeLists.txt: ENH: fix test for config dir + based stuff + +2006-12-07 10:48 martink + + * bootstrap: COMP: fix bootstrap maybe + +2006-12-07 10:33 martink + + * Source/: cmPropertyMap.cxx, cmSetPropertiesCommand.cxx: COMP: fix + warning + +2006-12-07 10:26 martink + + * Source/cmSetPropertiesCommand.cxx: COMP: fix warning right now + +2006-12-07 10:22 martink + + * Source/cmTest.cxx: BUG: fix missing return value + +2006-12-07 10:15 hoffman + + * Source/CMakeLists.txt: ENH: add test I removed by mistake + +2006-12-07 09:51 martink + + * Source/cmCPluginAPI.cxx: COMP: fix warning + +2006-12-07 09:44 martink + + * Source/CMakeLists.txt, Source/cmAuxSourceDirectoryCommand.cxx, + Source/cmCPluginAPI.cxx, Source/cmCPluginAPI.h, + Source/cmCommands.cxx, Source/cmCreateTestSourceList.cxx, + Source/cmDocumentation.cxx, Source/cmDocumentation.h, + Source/cmFLTKWrapUICommand.cxx, Source/cmForEachCommand.cxx, + Source/cmGlobalGenerator.cxx, Source/cmIfCommand.cxx, + Source/cmInstallFilesCommand.cxx, + Source/cmInstallProgramsCommand.cxx, Source/cmLocalGenerator.cxx, + Source/cmMacroCommand.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmPropertyMap.cxx, + Source/cmSetDirectoryPropertiesCommand.cxx, + Source/cmSetDirectoryPropertiesCommand.h, + Source/cmSetTargetPropertiesCommand.cxx, + Source/cmSetTargetPropertiesCommand.h, Source/cmSourceFile.cxx, + Source/cmSourceFile.h, Source/cmTarget.cxx, Source/cmTarget.h, + Source/cmTest.cxx, Source/cmTest.h, + Source/cmVTKMakeInstantiatorCommand.cxx, + Source/cmVTKWrapJavaCommand.cxx, + Source/cmVTKWrapPythonCommand.cxx, + Source/cmVTKWrapTclCommand.cxx, Source/cmWhileCommand.cxx, + Source/cmake.cxx, Source/cmake.h, Source/cmakemain.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Tests/LoadCommand/CMakeCommands/cmTestCommand.c, + Tests/LoadCommandOneConfig/CMakeCommands/cmTestCommand.c, + Source/cmDefinePropertyCommand.cxx, + Source/cmDefinePropertyCommand.h: ENH: make properties a bit more + formal with documentation and chaining + +2006-12-07 02:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-06 23:05 hoffman + + * Source/CMakeLists.txt, Source/cmLocalGenerator.cxx, + Source/cmTarget.cxx, Tests/CustComDepend/CMakeLists.txt, + Tests/CustComDepend/foo.cxx: ENH: fix bug in full path to target + depends stuff + +2006-12-06 00:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-05 10:36 martink + + * Source/: cmPropertyDefinition.cxx: ENH: fix compiler warning + +2006-12-05 09:14 hoffman + + * Source/: cmSystemTools.cxx, CTest/cmCTestSubmitHandler.cxx: COMP: + fix line length style error + +2006-12-05 09:02 hoffman + + * Source/kwsys/ProcessUNIX.c: COMP: remove warning + +2006-12-05 08:47 hoffman + + * bootstrap: ENH: fix bootstrap for mac + +2006-12-05 08:39 hoffman + + * Source/kwsys/ProcessUNIX.c: ENH: fix build error on IRIX + +2006-12-04 19:37 hoffman + + * Modules/FindDoxygen.cmake: ENH: fix for backwards compatibility + +2006-12-04 17:26 hoffman + + * bootstrap, Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CheckForPthreads.c, Source/cmCTest.cxx, + Source/cmDependsJavaLexer.cxx, Source/cmDependsJavaLexer.h, + Source/cmMakefile.cxx, Source/cmSystemTools.cxx, + Source/kwsys/DynamicLoader.cxx, + Source/kwsys/DynamicLoader.hxx.in, Source/kwsys/SystemTools.cxx, + Source/kwsys/testDynamicLoader.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Utilities/cmcurl/CMakeLists.txt, Utilities/cmtar/encode.c, + Utilities/cmtar/extract.c, Utilities/cmtar/libtar.c, + Utilities/cmtar/util.c: ENH: merge in changes for beos support + +2006-12-04 14:42 king + + * Source/kwsys/: ProcessUNIX.c, testProcess.c: ENH: Changes based + on patch from Ryan C. Gordon to enable process execution on BeOS. + There seems to be no way to implement it without polling (or + threads). + +2006-12-04 13:54 king + + * Source/cmLocalGenerator.cxx: BUG: Do not print empty install + configuration repeatedly. + +2006-12-04 11:52 hoffman + + * Modules/FindDoxygen.cmake: BUG: fix for bug 4102 + +2006-12-04 11:44 hoffman + + * Modules/FindXMLRPC.cmake: BUG: fix for bug 4123, find xmlrpc in + standard locations + +2006-12-04 11:19 martink + + * Source/CMakeLists.txt: ENH: added properties into the compile, + but not that many + +2006-12-04 11:05 martink + + * Source/CMakeLists.txt: ENH: added properties into the compile + +2006-12-04 11:04 martink + + * Source/cmPropertyDefinitionMap.h: STYLE: fix line length + +2006-12-04 09:58 hoffman + + * CMakeLists.txt: ENH: move to actual release + +2006-12-02 13:17 hoffman + + * Source/CTest/cmCTestSubmitHandler.cxx: ENH: put checks on vector + before referencing begin iterator + +2006-12-01 22:54 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-12-01 15:32 hoffman + + * Source/cmMacroCommand.cxx: ENH: fix warning + +2006-12-01 15:28 hoffman + + * Source/cmMacroCommand.cxx: ENH: fix warning + +2006-12-01 13:35 martink + + * Source/: cmProperty.cxx, cmProperty.h, cmPropertyDefinition.cxx, + cmPropertyDefinition.h, cmPropertyDefinitionMap.cxx, + cmPropertyDefinitionMap.h, cmPropertyMap.cxx, cmPropertyMap.h, + cmSetPropertiesCommand.cxx, cmSetPropertiesCommand.h: ENH: + getting some of the property changed chewcked into CVS at least + +2006-12-01 11:04 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmMacroCommand.cxx: ENH: + merge in fix for seg fault and move to RC 4 + +2006-12-01 10:30 hoffman + + * Source/cmMacroCommand.cxx: BUG: fix for 3815 seg fault + +2006-12-01 01:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-30 18:27 ibanez + + * Source/kwsys/: DynamicLoader.cxx, DynamicLoader.hxx.in: BUG: + 4100. Fixing the Mac OS/X version in the Dynamic loader in kwsys, + and replacing copy/pasted code in the itkDynamicLoader with + usage of the kwsys loader. This was fixed in the HEAD by + Mathieu Malaterre and Neil Weisenfeld. This changes in the + branch are just the port of the bug fix from the HEAD. + +2006-11-30 18:13 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Source/cmOrderLinkDirectories.cxx, Source/cmTarget.cxx, + Tests/LibName/CMakeLists.txt: ENH: move to RC 3 and add a fix for + -L/path in link commands that was broken by the .dll.lib fix + +2006-11-30 17:50 hoffman + + * Source/cmOrderLinkDirectories.cxx: ENH: clean up comment and + avoid some vector access calles + +2006-11-30 17:32 hoffman + + * Source/cmOrderLinkDirectories.cxx, Source/cmTarget.cxx, + Tests/LibName/CMakeLists.txt: BUG: better fix for .dll.lib + problem + +2006-11-30 16:23 alex + + * Modules/FindCups.cmake: ENH: add a module to find Cups (#3081), + taken from KDE svn + + Alex + +2006-11-30 10:12 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/CMakeLists.txt, + Source/cmOrderLinkDirectories.cxx, Tests/LibName/CMakeLists.txt, + Tests/LibName/bar.c, Tests/LibName/foo.c, Tests/LibName/foobar.c: + ENH: put fix for foo.dll.lib problem on branch with test + +2006-11-30 09:51 hoffman + + * Tests/LibName/foobar.c: ENH: make it work for hp + +2006-11-30 01:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-29 21:53 hoffman + + * Tests/LibName/: bar.c, foo.c, foobar.c: ENH: add extern for hp c + compiler + +2006-11-29 21:36 hoffman + + * Source/CMakeLists.txt, Tests/LibName/CMakeLists.txt: ENH: fix + test to run with debug or release and put the exe next to the + dll, still shows the bug this is testing for + +2006-11-29 17:45 hoffman + + * bootstrap, Source/CMakeLists.txt, Source/cmake.cxx, + Tests/LibName/bar.c, Tests/LibName/foo.c, Tests/LibName/foobar.c: + ENH: fix errors for unix builds + +2006-11-29 17:25 hoffman + + * Source/CursesDialog/cmCursesLongMessageForm.cxx: ENH: fix warning + +2006-11-29 17:17 hoffman + + * Source/CursesDialog/: cmCursesLongMessageForm.cxx, + cmCursesMainForm.cxx: ENH: there can be only one version + +2006-11-29 17:10 martink + + * Source/: cmMakefile.cxx, cmTarget.cxx: COMP: fix compile issue on + Sun hopefully + +2006-11-29 17:02 hoffman + + * Source/CMakeLists.txt: ENH: fix test for configuration type + builds + +2006-11-29 16:43 hoffman + + * Source/cmOrderLinkDirectories.cxx: ENH: fix compile error on mac + +2006-11-29 16:12 hoffman + + * Modules/: FindPkgConfig.cmake, UsePkgConfig.cmake: ENH: maintain + backwards compatibility in UsePkgConfig + +2006-11-29 15:59 hoffman + + * Source/: cmCMakeMinimumRequired.cxx, cmCPluginAPI.cxx, + cmCacheManager.cxx, cmGlobalGenerator.cxx, cmLocalGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, cmMakefile.cxx, cmMakefile.h, + cmake.cxx, cmake.h: ENH: unify version stuff, get rid of it out + of cmake and cmMakefile and only use cmVersion + +2006-11-29 15:57 hoffman + + * Source/cmOrderLinkDirectories.cxx, Tests/LibName/CMakeLists.txt, + Tests/LibName/bar.c, Tests/LibName/foo.c, Tests/LibName/foobar.c, + Source/CMakeLists.txt: BUG: fix a problem where it tried to link + .dll.lib files + +2006-11-29 15:45 martink + + * Source/: cmMakefile.cxx, cmTarget.cxx: COMP: fix compile issue on + Sun + +2006-11-29 12:56 malaterre + + * Source/kwsys/: DynamicLoader.cxx, DynamicLoader.hxx.in: BUG: Fix + problem with loading dylib on Tiger (10.4) x86. We need to be + using the dlopen/dlclose instead of the old NSModule + +2006-11-29 11:00 martink + + * Source/: cmMakefile.cxx, cmTarget.cxx, cmTarget.h, + cmTargetLinkLibrariesCommand.cxx, cmTargetLinkLibrariesCommand.h: + ENH: updated handling of debug and optimized target link + libraries + +2006-11-28 16:09 hoffman + + * Source/: cmConfigure.cmake.h.in, cmMakefile.cxx, cmVersion.cxx: + ENH: add rc to version stuff + +2006-11-28 16:03 hoffman + + * CMakeLists.txt, Source/cmConfigure.cmake.h.in, + Source/cmMakefile.cxx, Source/cmVersion.cxx: ENH: add release + candidate to versions + +2006-11-28 14:45 hoffman + + * Utilities/Release/: create-cmake-release.cmake, + r15n65_aix_release.cmake: ENH: use older os for AIX release + +2006-11-28 14:19 hoffman + + * ChangeLog.manual, Modules/FindKDE4.cmake, Modules/FindQt3.cmake, + Source/CMakeLists.txt, Source/cmLocalGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, Source/cmTarget.cxx, + Tests/Simple/CMakeLists.txt, Tests/TargetName/CMakeLists.txt, + Tests/TargetName/executables/CMakeLists.txt, + Tests/TargetName/executables/hello_world.c, + Tests/TargetName/scripts/CMakeLists.txt, + Tests/TargetName/scripts/hello_world, + Tests/Wrapping/CMakeLists.txt, Utilities/cmcurl/CMakeLists.txt: + ENH: merge in changes from the main tree + +2006-11-28 09:49 hoffman + + * Source/CMakeLists.txt: ENH: use the built cmake for file compare + as older versions of cmake may not support this + +2006-11-28 00:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-27 16:15 hoffman + + * Source/CMakeLists.txt: ENH: use correct project name + +2006-11-27 16:13 hoffman + + * Source/cmMakefileTargetGenerator.cxx, + Tests/Simple/CMakeLists.txt: ENH: make sure things do not depend + on optimized libraries if they are debug, and the other way + around as well + +2006-11-27 15:14 hoffman + + * Source/CMakeLists.txt, Tests/TargetName/CMakeLists.txt, + Tests/TargetName/executables/CMakeLists.txt, + Tests/TargetName/executables/hello_world.c, + Tests/TargetName/scripts/CMakeLists.txt, + Tests/TargetName/scripts/hello_world: ENH: add a test for a + target name with the same name as the output of a custom command + +2006-11-27 12:14 hoffman + + * Source/cmTarget.cxx: ENH: fix line length problem + +2006-11-27 12:11 hoffman + + * Source/cmTarget.cxx: ENH: fix crash in plplot build + +2006-11-27 10:42 hoffman + + * Utilities/cmcurl/CMakeLists.txt: ENH: save logs of passed try + compile stuff as well + +2006-11-26 07:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-25 21:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-25 21:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-25 10:59 hoffman + + * Source/: cmLocalGenerator.cxx, cmTarget.cxx: BUG: fix problem + when a target name is the same as the output of a custom command + +2006-11-25 07:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-23 07:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-22 19:28 alex + + * Modules/FindKDE4.cmake: ENH: kde-config has been renamed to + kde4-config several weeks ago, so it's not necessary anymore to + use "kde-config" as fallback, since this will surely be a wrong + version + + Alex + +2006-11-22 14:26 hoffman + + * Source/CMakeLists.txt: ENH: make sure it is qt3 before running + test + +2006-11-22 14:22 hoffman + + * Tests/Wrapping/CMakeLists.txt: ENH: make sure it is qt3 before + running test + +2006-11-22 13:44 hoffman + + * Modules/: FindPkgConfig.cmake, UsePkgConfig.cmake: ENH: check in + new pkgconfig stuff from Enrico Scholz + +2006-11-22 13:30 hoffman + + * Modules/FindQt3.cmake, Tests/Wrapping/CMakeLists.txt: ENH: make + sure findqt3 finds qt3 and not qt4 + +2006-11-22 09:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-21 13:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-21 07:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-20 14:23 hoffman + + * Source/cmMakefile.cxx: ENH: fix from main tree + +2006-11-20 13:57 hoffman + + * Source/cmMakefile.cxx: ENH: fix for when a library is tagged both + debug and optimized + +2006-11-20 08:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-19 08:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-18 08:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-17 15:55 hoffman + + * Source/: cmMakefile.cxx, CPack/cmCPackNSISGenerator.cxx: ENH: + move fix for replace of @var@ in cmake files from main tree and a + better message for cpack and nsis + +2006-11-17 15:35 hoffman + + * Source/cmMakefile.cxx: BUG: undo bug fix 2722, still replace + @foo@ in cmake files + +2006-11-17 11:14 martink + + * Source/CPack/cmCPackNSISGenerator.cxx: STYLE: fix a long line + +2006-11-17 08:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-16 15:57 hoffman + + * ChangeLog.manual, Source/cmMakefile.cxx: ENH: move fix from main + tree + +2006-11-16 15:31 martink + + * Source/cmIfCommand.cxx: ENH: remove old hack now that project + level compatibility files are supported + +2006-11-16 15:29 martink + + * Modules/VTKCompatibility.cmake: ENH: added to handle case in very + old odd versions of VTK + +2006-11-16 15:28 martink + + * Modules/ITKCompatibility.cmake: ENH: added to handle case in ITK + 2.8 and earlier + +2006-11-16 10:57 martink + + * Source/: cmMakefile.cxx, cmTarget.cxx: ENH: fix a bug with useing + debuf optimized libs from other builds + +2006-11-16 08:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-15 08:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-14 09:03 hoffman + + * CMakeLists.txt: ENH: try again for 2.4.4 + +2006-11-14 08:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-13 22:08 andy + + * Source/CPack/cmCPackNSISGenerator.cxx: ENH: Expand comment + +2006-11-13 15:25 hoffman + + * ChangeLog.manual, Modules/FindQt4.cmake: ENH: move from main tree + +2006-11-13 14:22 hoffman + + * Modules/FindQt4.cmake: ENH: add depend information from qrc files + +2006-11-13 12:59 hoffman + + * ChangeLog.manual, Modules/CMakeVCManifestExe.cmake, + Modules/FindSubversion.cmake, Modules/Platform/Windows-cl.cmake, + Source/cmFindBase.cxx: ENH: merge changes in from main tree + +2006-11-13 08:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-12 08:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-11 14:06 hoffman + + * Source/cmFindBase.cxx: BUG: fix for 4009 lib64 should work with + path suffix + +2006-11-11 14:04 hoffman + + * Modules/: CMakeVCManifestExe.cmake, Platform/Windows-cl.cmake: + BUG: use different commands for shared libraries and exe for + manifest stuff fix for bug#4039 + +2006-11-11 08:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-10 10:54 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: move from main tree + +2006-11-10 10:12 hoffman + + * Modules/FindMPI.cmake, Modules/FindQt4.cmake, Modules/readme.txt, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio71Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmSetTargetPropertiesCommand.h, Source/cmake.cxx, + Source/cmake.h, Source/CTest/cmCTestBuildHandler.cxx, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: merge from main + tree fix for vs all build qt and mpi2 + +2006-11-10 09:32 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: remove warning + +2006-11-10 08:11 hoffman + + * Source/cmGlobalGenerator.cxx: BUG: fix for broken borland + compiler + +2006-11-10 08:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-09 16:07 hoffman + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: fix it to work with + stl debug mode on mac + +2006-11-09 09:57 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio8Generator.h, cmSetTargetPropertiesCommand.h: + ENH: commit fix for putting everything in the build on vs + +2006-11-09 08:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-08 08:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-07 08:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-06 08:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-05 08:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-04 08:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-03 08:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-02 19:58 hoffman + + * Modules/FindMPI.cmake: ENH: add support for finding mpich2 on + windows + +2006-11-02 17:51 hoffman + + * Modules/FindQt4.cmake: ENH: look for QtAssistantClient4 + +2006-11-02 17:16 hoffman + + * CMakeLists.txt: ENH: abort 2.4.4 for now + +2006-11-02 08:09 hoffman + + * CMakeLists.txt: ENH: this is 2.4.4 + +2006-11-02 08:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-11-01 09:06 king + + * Modules/readme.txt: ENH: Added XXX_RUNTIME_LIBRARY_DIRS as a + suggested variable. + +2006-11-01 08:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-31 14:28 andy + + * Source/: cmGlobalGenerator.cxx, cmInstallTargetGenerator.cxx, + cmake.cxx, cmake.h: ENH: Cleanup of install component list. There + was already the list in the global generator. Use that one + +2006-10-31 06:43 andy + + * Source/cmInstallTargetGenerator.cxx: STYLE: Fix kwstyle + +2006-10-30 15:59 andy + + * Source/: cmGlobalGenerator.cxx, cmInstallTargetGenerator.cxx, + cmake.cxx, cmake.h: ENH: Add support for displaying the list of + components + +2006-10-30 15:30 king + + * Modules/FindSubversion.cmake: ENH: Adding FindSubversion module + from Tristan Carel. This addresses bug#3987. + +2006-10-30 11:36 hoffman + + * Source/CPack/: cmCPackGenericGenerator.cxx, + cmCPackPackageMakerGenerator.cxx, cmCPackTGZGenerator.cxx, + cmCPackTarBZip2Generator.cxx, cmCPackTarCompressGenerator.cxx: + ENH: merge fix for cpack crash into main tree + +2006-10-30 11:22 hoffman + + * Source/CPack/: cmCPackGenericGenerator.cxx, + cmCPackPackageMakerGenerator.cxx, cmCPackTGZGenerator.cxx, + cmCPackTarBZip2Generator.cxx, cmCPackTarCompressGenerator.cxx: + ENH: make sure null const char* is not put into ossttringstream + to avoid seg faults + +2006-10-30 10:38 king + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: ENH: Added test case for + bug#3966. + +2006-10-30 09:54 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-30 09:17 hoffman + + * Modules/FindJNI.cmake: ENH: move from main tree + +2006-10-27 17:30 andy + + * Modules/FindJNI.cmake: ENH: More documentation + +2006-10-27 17:29 andy + + * Modules/FindJNI.cmake: ENH: Add support for libjvm + +2006-10-27 16:03 hoffman + + * Utilities/cmThirdParty.h.in, Utilities/cm_curl.h, + Utilities/cm_expat.h, Utilities/cm_xmlrpc.h, Utilities/cm_zlib.h, + Modules/CMakeDependentOption.cmake, Modules/FindCURL.cmake, + Modules/FindEXPAT.cmake, Modules/FindXMLRPC.cmake, + Tests/SimpleInstall/PackageScript.cmake, + Tests/SimpleInstallS2/PackageScript.cmake: ENH: move from main + tree + +2006-10-27 16:01 hoffman + + * CMakeLists.txt, CTestCustom.ctest.in, ChangeLog.manual, + bootstrap, doxygen.config, Modules/CMakeGenericSystem.cmake, + Modules/CPack.cmake, Modules/CTestTargets.cmake, + Modules/FindDoxygen.cmake, Modules/FindJNI.cmake, + Modules/FindJava.cmake, Modules/FindKDE3.cmake, + Modules/FindPerl.cmake, Modules/FindQt4.cmake, + Modules/FindTclsh.cmake, Modules/FindWish.cmake, + Modules/FindwxWidgets.cmake, Modules/NSIS.template.in, + Modules/UsewxWidgets.cmake, Modules/Platform/CYGWIN.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-gcc.cmake, Source/CMakeLists.txt, + Source/cmCTest.cxx, Source/cmCTest.h, Source/cmDocumentation.cxx, + Source/cmExecuteProcessCommand.cxx, + Source/cmExecuteProcessCommand.h, Source/cmFindBase.cxx, + Source/cmFindPackageCommand.cxx, Source/cmFindPackageCommand.h, + Source/cmGeneratedFileStream.cxx, + Source/cmGetDirectoryPropertyCommand.cxx, + Source/cmGlobalGenerator.cxx, + Source/cmGlobalMinGWMakefileGenerator.cxx, + Source/cmGlobalWatcomWMakeGenerator.cxx, + Source/cmGlobalXCodeGenerator.cxx, Source/cmIfCommand.cxx, + Source/cmIfCommand.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmSetTargetPropertiesCommand.h, Source/cmSystemTools.cxx, + Source/cmTarget.cxx, Source/cmTarget.h, Source/cmXMLParser.cxx, + Source/cmake.cxx, Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackTGZGenerator.cxx, Source/CPack/cpack.cxx, + Source/CTest/cmCTestBuildHandler.cxx, + Source/CTest/cmCTestCoverageHandler.cxx, + Source/CTest/cmCTestMemCheckHandler.cxx, + Source/CTest/cmCTestScriptHandler.cxx, + Source/CTest/cmCTestScriptHandler.h, + Source/CTest/cmCTestSubmitHandler.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestTestHandler.h, + Source/CTest/cmCTestUpdateHandler.cxx, + Source/kwsys/CMakeLists.txt, Source/kwsys/System.c, + Source/kwsys/System.h.in, Source/kwsys/SystemTools.cxx, + Source/kwsys/SystemTools.cxx.bak, + Source/kwsys/kwsysPlatformCxxTests.cmake, + Source/kwsys/kwsysPlatformCxxTests.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Tests/CTestTest2/test.cmake.in, Tests/CTestTest3/test.cmake.in, + Tests/Complex/CMakeLists.txt, Tests/Complex/cmTestConfigure.h.in, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/cmTestConfigure.h.in, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/cmTestConfigure.h.in, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/CustomCommand/CMakeLists.txt, + Tests/MacroTest/CMakeLists.txt, Tests/OutOfSource/CMakeLists.txt, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/StringFileTest/CMakeLists.txt, + Utilities/cmtar/CMakeLists.txt, Utilities/cmtar/config.h.in, + Utilities/cmtar/libtar.c: ENH: move changes from main tree + +2006-10-27 15:59 hoffman + + * Modules/FindJNI.cmake: ENH: remove JavaEmbedding + +2006-10-27 15:55 hoffman + + * CTestCustom.ctest.in: ENH: fix warnings on windows paths + +2006-10-26 11:39 king + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: ENH: + Added NO_MODULE and COMPONENTS options to improve flexibility of + the command. Re-implemented argument parsing to be simpler and + more robust. + +2006-10-26 11:01 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: STYLE: Fix typo + +2006-10-26 10:49 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: When writing + newlines between script portions in prebuild, prelink, and + postbuild command lines they must be escaped for XML so that the + IDE receives them. This fixes the fix for bug #3977. + +2006-10-25 14:03 king + + * Source/cmLocalVisualStudio6Generator.cxx: COMP: Remove unused + variable. + +2006-10-25 12:49 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: Adjust + prebuild/prelink/postbuild script construction to account for + ConstructScript no longer producing trailing newlines. This + addresses bug#3977. + +2006-10-25 12:27 king + + * Source/cmLocalVisualStudioGenerator.cxx: BUG: Avoid leading and + trailing newlines in custom command scripts because some VS6 + versions do not like the trailing backslash this produces. This + addresses bug#3977. + +2006-10-25 11:23 king + + * Tests/CustomCommand/CMakeLists.txt: ENH: Re-enabling # escape + test now that it is implemented everywhere. + +2006-10-25 11:23 king + + * Source/: cmGlobalWatcomWMakeGenerator.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmLocalUnixMakefileGenerator3.h, + kwsys/System.c, kwsys/System.h.in: ENH: Adding support for # + escape in Watcom WMake. + +2006-10-25 10:58 king + + * Tests/MacroTest/CMakeLists.txt: BUG: EQUAL -> STREQUAL for string + comparison. + +2006-10-25 10:57 king + + * Source/cmIfCommand.cxx: BUG: It cannot be an error if the values + do not convert. The docs say that if the values do not convert + the test is false. + +2006-10-25 10:31 king + + * Source/cmIfCommand.cxx: BUG: For LESS, GREATER, and EQUAL check + that the arguments can actually be converted to numbers. Also + force the conversion results to be stored in memory to make sure + they both use the same precision. This addresses bug#3966. + +2006-10-25 09:54 andy + + * Source/CMakeLists.txt: COMP: Remove unnecessary provocation + +2006-10-25 09:54 andy + + * Tests/CTestTest3/test.cmake.in: BUG: Attempt to fix the test + +2006-10-25 08:56 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: STYLE: Fix line length + +2006-10-24 17:56 alex + + * Modules/FindPerl.cmake: BUG: honor the REQUIRED flag for Perl, + please backport to 2.4 branch so that it will be in 2.4.4 + + Alex + +2006-10-24 12:44 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: BUG: Looks like gcov + produces lines with string /*EOF*/ on them if there is no line at + the end of the file. This will fix the coverage code complaining + about it + +2006-10-24 11:06 hoffman + + * Source/CMakeLists.txt: ENH: remove failing test + +2006-10-24 10:03 hoffman + + * Modules/FindDoxygen.cmake: ENH: fix more doxygen issues + +2006-10-24 10:03 hoffman + + * Modules/FindJNI.cmake: ENH: remove JavaEmbedding framework + +2006-10-24 09:47 king + + * Tests/CustomCommand/CMakeLists.txt: BUG: Disable testing of # + escapes until it can be implemented for Watcom WMake. + +2006-10-23 19:04 alex + + * Modules/FindKDE3.cmake: BUG: fix #3955: add -O2 by default but + only if no special buildtype is set + + Alex + +2006-10-23 17:20 king + + * Source/kwsys/System.c, Tests/CustomCommand/CMakeLists.txt: ENH: + Added # character for shell escaping. + +2006-10-23 17:14 king + + * Source/cmIfCommand.cxx, Source/cmIfCommand.h, + Tests/StringFileTest/CMakeLists.txt: ENH: Remove old + IF(FILE_IS_NEWER) syntax. It was never in a release anyway. + +2006-10-23 16:16 king + + * Source/cmake.cxx: BUG: Do not display cmake -E usage when any old + command line error occurs. + +2006-10-23 14:51 hoffman + + * Modules/FindDoxygen.cmake: ENH: put in backwards compatibility + for older cmake + +2006-10-23 13:36 king + + * Tests/StringFileTest/CMakeLists.txt, Source/cmIfCommand.cxx, + Source/cmIfCommand.h: ENH: Patch from Alex to provide nicer + syntax for FILE_IS_NEWER. Using name IS_NEWER_THAN so old syntax + will continue to work. + +2006-10-22 19:21 hoffman + + * Source/CMakeLists.txt: ENH: remove broken test + +2006-10-22 11:57 king + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: COMP: Fixed typo: + CMAKE_TEST_CMAKELIB -> COMPLEX_TEST_CMAKELIB. + +2006-10-19 15:45 king + + * Utilities/cmtar/CMakeLists.txt: ENH: Remove old include dirs. + +2006-10-19 15:17 king + + * bootstrap: ENH: Adding option to use system-installed third-party + libraries. This addresses bug#3653. + +2006-10-19 15:00 king + + * CMakeLists.txt, Source/CMakeLists.txt, Source/cmCTest.cxx, + Source/cmGeneratedFileStream.cxx, Source/cmSystemTools.cxx, + Source/cmXMLParser.cxx, Source/CPack/cmCPackTGZGenerator.cxx, + Source/CTest/cmCTestSubmitHandler.cxx, + Utilities/cmThirdParty.h.in, Utilities/cm_curl.h, + Utilities/cm_expat.h, Utilities/cm_xmlrpc.h, Utilities/cm_zlib.h, + Utilities/cmtar/CMakeLists.txt, Utilities/cmtar/config.h.in, + Utilities/cmtar/libtar.c: ENH: Add options to build with system + utility libraries. Organize inclusion of third party libraries + into a single header per library. This addresses bug#3653. + +2006-10-19 14:48 king + + * Modules/CMakeDependentOption.cmake: ENH: Adding + CMAKE_DEPENDENT_OPTION macro. + +2006-10-19 14:45 king + + * Tests/: Complex/CMakeLists.txt, Complex/cmTestConfigure.h.in, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx: ENH: Added explicit + name for option to test CMakeLib. Added option to disable + testing of CMakeLib if system utility libraries are used until + linking made easier. + +2006-10-19 12:58 king + + * Modules/FindXMLRPC.cmake: ENH: Find module for XMLRPC libraries. + +2006-10-19 12:57 king + + * Modules/FindEXPAT.cmake: ENH: Find module for EXPAT library. + +2006-10-19 12:55 king + + * Modules/FindCURL.cmake: ENH: Find module for CURL library. + +2006-10-19 10:45 martink + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestBuildHandler.cxx, + CTest/cmCTestCoverageHandler.cxx, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestScriptHandler.h, CTest/cmCTestTestHandler.cxx: ENH: + added total time limit for a CTest run bug 1207 + +2006-10-19 10:07 king + + * Modules/: FindwxWidgets.cmake, UsewxWidgets.cmake: ENH: Patch + from Jan for bug#3453. Cleans up find script and enables + -isystem feature for use script. + +2006-10-19 09:18 king + + * Source/cmFindBase.cxx: ENH: Clarified search behavior when the + objective is not found. + +2006-10-18 23:27 david.cole + + * Source/kwsys/SystemTools.cxx: BUG: Correct the + SystemReportDebugHook function. It should not call exit. It gets + called multiple times at shutdown in a memory leak reporting + scenario... This is the source of the long standing KWWidgetsTour + debug build dashboard failure. + +2006-10-17 09:34 king + + * Source/CPack/cpack.cxx: STYLE: Fixed line-too-long. + +2006-10-16 18:17 king + + * Modules/Platform/CYGWIN.cmake, Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-gcc.cmake, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmSetTargetPropertiesCommand.h, Source/cmTarget.cxx, + Source/cmTarget.h, Templates/DLLHeader.dsptemplate, + Templates/EXEHeader.dsptemplate: ENH: Adding image version number + (major.minor) property to windows binaries. Default is 0.0, but + the VERSION target property may change the value. Windows now + has first-class support for dll and exe versioning. This + addresses bug#1219. + +2006-10-16 15:18 king + + * Source/cmGetDirectoryPropertyCommand.cxx, + Tests/OutOfSource/CMakeLists.txt: BUG: Need to collapse path + argument to get_directory_property. This addresses bug#3847. + +2006-10-16 14:52 king + + * Source/cmDocumentation.cxx: ENH: Make hyperlinks in documentation + active when generated into HTML documents. This addresses + bug#3906. + +2006-10-16 13:58 king + + * Modules/CMakeGenericSystem.cmake: ENH: Allow user project code to + distinguish between an install prefix set on the command line and + one set by CMake as a default. This is useful for changing the + default prefix while still allowing the user to override it. + +2006-10-16 12:49 martink + + * Source/cmake.cxx: BUG: partial fix for the progress after install + bug + +2006-10-16 12:47 hoffman + + * Utilities/Release/: create-cmake-release.cmake, + magrathea_release.cmake, r36n11_aix_release.cmake, + release_cmake.sh.in, upload_release.cmake: ENH: update for + release + +2006-10-16 11:32 king + + * Source/: cmExecuteProcessCommand.cxx, cmExecuteProcessCommand.h: + ENH: Added OUTPUT_STRIP_TRAILING_WHITESPACE and + ERROR_STRIP_TRAILING_WHITESPACE options to EXECUTE_PROCESS + command. These allow it to behave more like the old EXEC_PROGRAM + command that it is supposed to replace. + +2006-10-16 10:47 hoffman + + * Modules/FindDoxygen.cmake: BUG: fix for bug# 3310 + +2006-10-15 07:54 andy + + * Source/: cmCTest.cxx, CPack/cmCPackGenericGenerator.cxx, + CTest/cmCTestCoverageHandler.cxx: STYLE: Fix kwstyle + +2006-10-13 17:10 andy + + * Source/cmCTest.cxx, Source/cmCTest.h, + Tests/CTestTest2/test.cmake.in: ENH: Properly propagate config + type to test + +2006-10-13 16:13 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for bug#3908 + if header_file_only is set on cxx files in visual studio do not + compile them + +2006-10-13 15:04 king + + * Modules/NSIS.template.in: BUG: Compression must be set before any + output is created. + +2006-10-13 14:44 andy + + * Source/CTest/cmCTestTestHandler.h: COMP: Fix Sun build + +2006-10-13 13:59 king + + * Source/cmMakefileLibraryTargetGenerator.cxx: BUG: When using link + scripts use native shell escapes instead of makefile shell + escapes because the script is not interpreted by a make tool. + +2006-10-13 11:53 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: allow for -gdwarf-2 to be + in cflags or cxxflags for xcode + +2006-10-13 11:26 hoffman + + * doxygen.config: BUG: fix for bug# 3921 INPUT wrong + +2006-10-13 11:25 hoffman + + * Modules/: FindTclsh.cmake, FindWish.cmake: BUG: fix for bug #3846 + more advanced stuff + +2006-10-13 11:23 hoffman + + * Modules/FindQt4.cmake: BUG: fix for bug#3898 find qt plugin dir + +2006-10-13 10:57 hoffman + + * CMake.pdf, CMake.rtf, Docs/CMake12p2.rtf, Docs/CMake14.rtf, + Docs/CMake16.rtf, Modules/CMakeVCManifest.cmake, + Modules/COPYING-CMAKE-SCRIPTS, Modules/CheckCCompilerFlag.cmake, + Modules/CheckCSourceRuns.cmake, + Modules/CheckCXXCompilerFlag.cmake, + Modules/CheckCXXSourceRuns.cmake, Modules/FindASPELL.cmake, + Modules/FindBZip2.cmake, Modules/FindHSPELL.cmake, + Modules/FindJasper.cmake, Modules/FindLibXml2.cmake, + Modules/FindLibXslt.cmake, Modules/FindOpenSSL.cmake, + Source/cmElseIfCommand.cxx, Source/cmElseIfCommand.h, + Source/cmEndMacroCommand.cxx, Source/cmEndMacroCommand.h, + Source/cmInstallDirectoryGenerator.cxx, + Source/cmInstallDirectoryGenerator.h, Source/cmStandardLexer.h, + Source/kwsys/CMakeEmptyInputFile.in, + Source/kwsys/CheckCXXSourceRuns.cmake, Source/kwsys/IOStream.cxx, + Source/kwsys/IOStream.hxx.in, Source/kwsys/System.c, + Source/kwsys/System.h.in, Source/kwsys/SystemTools.cxx.bak, + Source/kwsys/SystemTools.hxx.in.bak, + Source/kwsys/kwsysPlatformCxxTests.cmake.bak, + Source/kwsys/kwsysPlatformCxxTests.cxx.bak, + Source/kwsys/kwsysPlatformTests.cmake, + Source/kwsys/kwsysPlatformTestsC.c, + Source/kwsys/kwsysPlatformTestsCXX.cxx, + Tests/Complex/Executable/A.cxx.bak, Tests/Complex/Executable/A.h, + Tests/Complex/Executable/A.hh, Tests/Complex/Executable/A.txt, + Tests/Complex/Executable/notInAllExe.cxx, + Tests/Complex/Executable/testSystemDir.cxx, + Tests/Complex/Library/TestLink.c, + Tests/Complex/Library/notInAllLib.cxx, + Tests/Complex/Library/test_preprocess.cmake, + Tests/Complex/Library/SystemDir/testSystemDir.h, + Tests/ComplexOneConfig/Executable/A.cxx.bak, + Tests/ComplexOneConfig/Executable/A.h, + Tests/ComplexOneConfig/Executable/A.hh, + Tests/ComplexOneConfig/Executable/A.txt, + Tests/ComplexOneConfig/Executable/notInAllExe.cxx, + Tests/ComplexOneConfig/Executable/testSystemDir.cxx, + Tests/ComplexOneConfig/Library/TestLink.c, + Tests/ComplexOneConfig/Library/notInAllLib.cxx, + Tests/ComplexOneConfig/Library/test_preprocess.cmake, + Tests/ComplexOneConfig/Library/SystemDir/testSystemDir.h, + Tests/ComplexRelativePaths/Executable/A.cxx.bak, + Tests/ComplexRelativePaths/Executable/A.h, + Tests/ComplexRelativePaths/Executable/A.hh, + Tests/ComplexRelativePaths/Executable/A.txt, + Tests/ComplexRelativePaths/Executable/notInAllExe.cxx, + Tests/ComplexRelativePaths/Executable/testSystemDir.cxx, + Tests/ComplexRelativePaths/Library/TestLink.c, + Tests/ComplexRelativePaths/Library/notInAllLib.cxx, + Tests/ComplexRelativePaths/Library/test_preprocess.cmake, + Tests/ComplexRelativePaths/Library/SystemDir/testSystemDir.h, + Tests/CustomCommand/check_command_line.c.in, + Tests/OutOfBinary/CMakeLists.txt, Tests/OutOfBinary/outlib.c, + Tests/SimpleInstall/scripts/sample_script, + Tests/SimpleInstall/scripts/sample_script.bat, + Tests/SimpleInstallS2/scripts/sample_script, + Tests/SimpleInstallS2/scripts/sample_script.bat, + Utilities/cmcompress/CMakeLists.txt, + Utilities/cmcompress/cmcompress.c, + Utilities/cmcompress/cmcompress.h: ENH: merge files from main + tree to 2.4 + +2006-10-13 10:52 hoffman + + * CMakeLists.txt, ChangeLog.manual, bootstrap, + Docs/cmake-indent.vim, Docs/cmake-mode.el, Docs/cmake-syntax.vim, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineRCCompiler.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CheckCSourceCompiles.cmake, + Modules/CheckCXXSourceCompiles.cmake, Modules/FindDoxygen.cmake, + Modules/FindGLUT.cmake, Modules/FindKDE3.cmake, + Modules/FindPNG.cmake, Modules/FindPythonInterp.cmake, + Modules/FindPythonLibs.cmake, Modules/FindQt3.cmake, + Modules/FindQt4.cmake, Modules/FindRuby.cmake, + Modules/FindSDL.cmake, Modules/FindTCL.cmake, + Modules/FindwxWidgets.cmake, + Modules/InstallRequiredSystemLibraries.cmake, + Modules/KDE3Macros.cmake, Modules/UseEcos.cmake, + Modules/UseQt4.cmake, Modules/UseSWIG.cmake, + Modules/kde3uic.cmake, Modules/readme.txt, + Modules/Platform/AIX.cmake, Modules/Platform/CYGWIN.cmake, + Modules/Platform/Darwin.cmake, Modules/Platform/FreeBSD.cmake, + Modules/Platform/HP-UX.cmake, Modules/Platform/IRIX.cmake, + Modules/Platform/IRIX64.cmake, Modules/Platform/Linux.cmake, + Modules/Platform/QNX.cmake, Modules/Platform/SunOS.cmake, + Modules/Platform/UnixPaths.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-gcc.cmake, Modules/Platform/gcc.cmake, + Source/CMakeLists.txt, Source/cmAddCustomCommandCommand.cxx, + Source/cmAddCustomCommandCommand.h, + Source/cmAddCustomTargetCommand.cxx, + Source/cmAddCustomTargetCommand.h, + Source/cmAddExecutableCommand.cxx, + Source/cmAddExecutableCommand.h, Source/cmAddLibraryCommand.cxx, + Source/cmAddLibraryCommand.h, + Source/cmAddSubDirectoryCommand.cxx, Source/cmAddTestCommand.h, + Source/cmBuildNameCommand.h, Source/cmCPluginAPI.cxx, + Source/cmCommand.h, Source/cmCommandArgumentLexer.cxx, + Source/cmCommandArgumentLexer.h, + Source/cmCommandArgumentLexer.in.l, + Source/cmCommandArgumentParser.cxx, + Source/cmCommandArgumentParser.y, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmCommandArgumentParserHelper.h, Source/cmCommands.cxx, + Source/cmCustomCommand.cxx, Source/cmCustomCommand.h, + Source/cmDependsC.cxx, Source/cmDependsC.h, + Source/cmDependsFortranLexer.cxx, + Source/cmDependsFortranLexer.in.l, + Source/cmDependsFortranParser.cxx, + Source/cmDependsFortranParser.y, Source/cmDependsJavaLexer.cxx, + Source/cmDependsJavaLexer.in.l, Source/cmDependsJavaParser.cxx, + Source/cmDependsJavaParser.y, Source/cmDocumentation.cxx, + Source/cmExecProgramCommand.h, Source/cmExprLexer.cxx, + Source/cmExprLexer.in.l, Source/cmExprParser.cxx, + Source/cmExprParser.y, Source/cmFileCommand.cxx, + Source/cmGetTargetPropertyCommand.h, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalKdevelopGenerator.cxx, + Source/cmGlobalMSYSMakefileGenerator.cxx, + Source/cmGlobalMinGWMakefileGenerator.cxx, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio71Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmGlobalWatcomWMakeGenerator.cxx, + Source/cmGlobalXCodeGenerator.cxx, Source/cmIfCommand.cxx, + Source/cmIfCommand.h, Source/cmIncludeDirectoryCommand.cxx, + Source/cmIncludeDirectoryCommand.h, + Source/cmIncludeExternalMSProjectCommand.cxx, + Source/cmInstallCommand.cxx, Source/cmInstallCommand.h, + Source/cmInstallFilesCommand.cxx, Source/cmInstallFilesCommand.h, + Source/cmInstallFilesGenerator.cxx, + Source/cmInstallFilesGenerator.h, Source/cmInstallGenerator.cxx, + Source/cmInstallGenerator.h, Source/cmInstallProgramsCommand.cxx, + Source/cmInstallProgramsCommand.h, + Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, + Source/cmInstallTargetsCommand.cxx, + Source/cmInstallTargetsCommand.h, + Source/cmLinkLibrariesCommand.h, Source/cmListCommand.cxx, + Source/cmListCommand.h, Source/cmListFileCache.cxx, + Source/cmListFileLexer.c, Source/cmListFileLexer.in.l, + Source/cmLoadCommandCommand.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/cmLocalVisualStudioGenerator.h, Source/cmMacroCommand.cxx, + Source/cmMakeDirectoryCommand.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileExecutableTargetGenerator.h, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.h, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, Source/cmMessageCommand.cxx, + Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, Source/cmRemoveCommand.h, + Source/cmSetCommand.cxx, + Source/cmSetSourceFilesPropertiesCommand.h, + Source/cmSetTargetPropertiesCommand.h, + Source/cmStandardIncludes.h, Source/cmSubdirCommand.h, + Source/cmSubdirDependsCommand.h, Source/cmTarget.cxx, + Source/cmTryCompileCommand.cxx, + Source/cmVTKMakeInstantiatorCommand.h, + Source/cmVTKWrapJavaCommand.cxx, Source/cmVTKWrapJavaCommand.h, + Source/cmVTKWrapPythonCommand.h, Source/cmVTKWrapTclCommand.h, + Source/cmWin32ProcessExecution.cxx, Source/cmake.cxx, + Source/cmake.h, Source/cmakemain.cxx, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackTarCompressGenerator.cxx, + Source/CPack/cmCPackTarCompressGenerator.h, + Source/CPack/cmCPackZIPGenerator.cxx, Source/CPack/cpack.cxx, + Source/CTest/cmCTestBuildAndTestHandler.cxx, + Source/CTest/cmCTestBuildHandler.cxx, + Source/CTest/cmCTestCoverageHandler.cxx, + Source/CTest/cmCTestHandlerCommand.cxx, + Source/CTest/cmCTestScriptHandler.cxx, + Source/CTest/cmCTestStartCommand.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/CursesDialog/ccmake.cxx, + Source/CursesDialog/cmCursesMainForm.cxx, + Source/kwsys/CMakeLists.txt, + Source/kwsys/CommandLineArguments.cxx, + Source/kwsys/Configure.h.in, Source/kwsys/Directory.cxx, + Source/kwsys/Glob.cxx, Source/kwsys/Glob.hxx.in, + Source/kwsys/Process.h.in, Source/kwsys/ProcessUNIX.c, + Source/kwsys/ProcessWin32.c, Source/kwsys/Registry.cxx, + Source/kwsys/SharedForward.h.in, Source/kwsys/SystemTools.cxx, + Source/kwsys/SystemTools.hxx.in, Source/kwsys/Terminal.c, + Source/kwsys/testCommandLineArguments.cxx, + Source/kwsys/testCommandLineArguments1.cxx, + Source/kwsys/testProcess.c, Source/kwsys/testSystemTools.cxx, + Tests/Complex/CMakeLists.txt, Tests/Complex/cmTestConfigure.h.in, + Tests/Complex/Executable/A.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/cmTestConfigure.h.in, + Tests/ComplexOneConfig/Executable/A.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/cmTestConfigure.h.in, + Tests/ComplexRelativePaths/Executable/A.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Tests/CustomCommand/CMakeLists.txt, + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt, + Tests/OutOfSource/OutOfSourceSubdir/simple.cxx, + Tests/OutOfSource/SubDir/CMakeLists.txt, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/StringFileTest/CMakeLists.txt, + Tests/SystemInformation/SystemInformation.in, + Utilities/Release/README, Utilities/cmcurl/CMakeLists.txt, + Utilities/cmtar/CMakeLists.txt, Utilities/cmzlib/CMakeLists.txt: + ENH: merge changes from the main tree to the 2.4 branch + +2006-10-13 10:27 andy + + * Source/CTest/: cmCTestMemCheckHandler.cxx, + cmCTestUpdateHandler.cxx: BUG: Replace some errors with warnings + +2006-10-13 10:22 king + + * Source/: cmGlobalMinGWMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: BUG: Juse use cmake -E echo + instead of the native echo on MinGW makefiles. The echo; hack + did not work when running from ctest. + +2006-10-13 10:03 king + + * Source/cmLocalGenerator.cxx: BUG: Do not try to compute the + location of a non-library target for linking. + +2006-10-13 09:30 andy + + * Source/: CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h, kwsys/CMakeLists.txt: ENH: Report + command line as a measurement and allow user to add custom + measurements + +2006-10-12 17:19 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: undo bad changes + +2006-10-12 16:31 andy + + * Source/: cmCTest.cxx, CTest/cmCTestCoverageHandler.cxx: BUG: Use + BuildDirectory from the DartConfiguration information. Also, Make + missing coverage information not make ctest fail + +2006-10-12 15:30 andy + + * Source/cmGlobalGenerator.cxx: BUG: Use variable instead of + retrieving again. Fixes bug: Bug #3476 + +2006-10-12 15:10 andy + + * Source/CTest/cmCTestScriptHandler.cxx: BUG: Report and error when + ctest -S script fails... Fixes: Bug #3540 + +2006-10-12 14:59 andy + + * Modules/NSIS.template.in, Source/CPack/cmCPackNSISGenerator.cxx: + ENH: Add NSIS compression + +2006-10-12 14:47 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Handle more regular + expressions + +2006-10-12 13:30 andy + + * Tests/: SimpleInstall/PackageScript.cmake, + SimpleInstallS2/PackageScript.cmake: ENH: Several CPack fixes. + First, allow user to set CMAKE_MODULE_PATH for CPack; make + SetOptionIfNotSet more robust to handle empty options; do test + TGZ, STGZ, and TZ, Add handling (and test) of Install Script; set + environment variable CMAKE_INSTALL_PREFIX + +2006-10-12 13:15 andy + + * Modules/CTestTargets.cmake: ENH: On Visual Studio and Xcode + handle config type + +2006-10-12 13:12 andy + + * Modules/: FindJNI.cmake, FindJava.cmake: ENH: More locations for + Java + +2006-10-12 13:05 andy + + * Modules/CPack.cmake, Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, Source/CPack/cpack.cxx, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Several CPack fixes. + First, allow user to set CMAKE_MODULE_PATH for CPack; make + SetOptionIfNotSet more robust to handle empty options; do test + TGZ, STGZ, and TZ, Add handling (and test) of Install Script; set + environment variable CMAKE_INSTALL_PREFIX + +2006-10-12 12:51 martink + + * Source/: cmCTest.cxx, cmCTest.h: ENH: some cleanup and commenting + of code + +2006-10-12 10:57 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix for bug -gdwarf + getting removed + +2006-10-11 12:41 king + + * Source/cmMakefileLibraryTargetGenerator.cxx, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: BUG: Do not collapse the + INSTALL_NAME_DIR setting because users may intend to have .. in + the path. This makes the makefile generator consistent with the + already working Xcode implementation of this feature. Also added + a test for @executable_path/.. style settings for this property. + +2006-10-11 12:41 king + + * Source/cmGlobalXCodeGenerator.cxx: ENH: Simplify code by removing + redundant check against BUILD_WITH_INSTALL_RPATH. + +2006-10-10 16:03 king + + * Modules/readme.txt: STYLE: Fixed typo: INCLUDE_DIR->INCLUDE_DIRS. + +2006-10-10 14:13 king + + * Source/cmLocalGenerator.cxx: BUG: TARGET_QUOTED should always be + replaced if Target is set in the rule variables. + +2006-10-10 13:47 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: BUG: Avoid duplicate + conversion to output path. + +2006-10-10 12:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-09 21:48 king + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h: BUG: Fixed references to + projects outside the build tree and in other locations with + spaces in the path. This is needed for + out-of-source/out-of-binary subdirectories in the build. + +2006-10-09 21:25 king + + * Source/cmMakefileTargetGenerator.cxx, + Tests/OutOfBinary/CMakeLists.txt, Tests/OutOfBinary/outlib.c, + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt, + Tests/OutOfSource/OutOfSourceSubdir/simple.cxx, + Tests/OutOfSource/SubDir/CMakeLists.txt: BUG: Fixed out-of-source + subdirectories to work when they are also out-of-binary. Updated + the OutOfSource test to test this feature. + +2006-10-09 11:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-09 10:06 david.cole + + * Source/kwsys/ProcessWin32.c: COMP: Fix or suppress warnings on + Borland and Mac dashboards. Definitely fix "may be used + uninitialized" warnings. + +2006-10-08 09:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-07 06:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-06 15:33 martink + + * Source/CursesDialog/cmCursesMainForm.cxx: ENH: remove old unused + code + +2006-10-06 14:00 martink + + * Source/cmDocumentation.cxx: BUG: potential segfault + +2006-10-06 11:13 david.cole + + * Source/kwsys/CMakeLists.txt: STYLE: Make the set of supported STL + headers the same in vtkstd and vtksys/stl. (The union of the + present values of the two sets.) + +2006-10-06 11:11 hoffman + + * Source/: cmMessageCommand.cxx, cmake.cxx, cmake.h, cmakemain.cxx: + ENH: do not print a call stack if the user does a message error + unless --debug-output is used + +2006-10-06 09:16 king + + * Modules/Platform/Darwin.cmake: BUG: Do not enable -isystem + support for Xcode generator until it is implemented. + +2006-10-06 03:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-05 17:53 hoffman + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestTestHandler.cxx: BUG: fix bug where converage was required + to get valgrind output because of bad current directory + +2006-10-05 16:59 king + + * Source/: cmLocalGenerator.cxx, cmOrderLinkDirectories.cxx: BUG: + Need to match shared library names before static because some + platforms have static name patterns that match their shared + patterns but not vice versa. This is needed for implementing + bug#1644 on cygwin. + +2006-10-05 16:30 king + + * Modules/Platform/CYGWIN.cmake, Source/cmTarget.cxx: ENH: Adding + version number to the name of a DLL built in cygwin but not the + import library. This addresses bug#3571. + +2006-10-05 15:08 king + + * Modules/Platform/: CYGWIN.cmake, Windows-gcc.cmake: ENH: Enabling + link-type selection flags on Cygwin, MSYS, and MinGW. This + addresses bug#1644 on these platforms. + +2006-10-05 15:08 king + + * Source/cmLocalGenerator.cxx, Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: BUG: Fix link + flags on cygwin shared libraries. This requires that the shared + library prefix be supported in the link library regex. + +2006-10-05 14:51 king + + * Source/: cmGlobalMinGWMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: BUG: Hack to make echo command + work properly in mingw32-make. + +2006-10-05 13:43 king + + * Source/cmWin32ProcessExecution.cxx: BUG: Robustly handle failure + of FormatMessage. See bug#3471. + +2006-10-05 12:04 king + + * Tests/: Complex/CMakeLists.txt, Complex/Library/testSystemDir.h, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/Library/testSystemDir.h, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/Library/testSystemDir.h, + Complex/Library/SystemDir/testSystemDir.h, + ComplexOneConfig/Library/SystemDir/testSystemDir.h, + ComplexRelativePaths/Library/SystemDir/testSystemDir.h: BUG: Test + -isystem without affecting other tests. Made separate + Library/SystemDir for this purpose. + +2006-10-05 11:31 king + + * Source/cmInstallCommand.cxx, Source/cmInstallCommand.h, + Source/cmInstallFilesGenerator.cxx, + Source/cmInstallFilesGenerator.h, + Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Added OPTIONAL option + to INSTALL command to allow installation of files if they exist + while ignoring them otherwise. This addresses bug#2922. + +2006-10-05 11:30 king + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: BUG: Run + testSystemDir test only if -isystem flag is available. + +2006-10-05 10:55 king + + * Source/cmDocumentation.cxx: ENH: Adding links to web resources + and FAQ to SEE ALSO section. This addresses bug #3757. + +2006-10-05 09:33 king + + * Modules/Platform/QNX.cmake: BUG: QNX GCC does not have -isystem. + +2006-10-05 08:55 king + + * Modules/Platform/gcc.cmake, Source/cmIncludeDirectoryCommand.cxx, + Source/cmIncludeDirectoryCommand.h, Source/cmLocalGenerator.cxx, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Tests/Complex/CMakeLists.txt, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/testSystemDir.cxx, + Tests/Complex/Library/testSystemDir.h, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/testSystemDir.cxx, + Tests/ComplexOneConfig/Library/testSystemDir.h, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/testSystemDir.cxx, + Tests/ComplexRelativePaths/Library/testSystemDir.h: ENH: Adding + SYSTEM option to INCLUDE_DIRECTORIES command. This addresses bug + #3462. + +2006-10-05 03:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-04 19:21 king + + * Source/CursesDialog/ccmake.cxx: BUG: The --help option should + list generators. This addresses bug #2494. + +2006-10-04 18:57 king + + * Tests/CustomCommand/CMakeLists.txt: ENH: Adding test of special + characters in custom command and custom target comments. + +2006-10-04 18:52 king + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalWatcomWMakeGenerator.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: BUG: Fixed display of custom + command comments with quotes, dollars, and other special + characters in them. + +2006-10-04 18:52 king + + * Source/kwsys/: System.c, System.h.in: ENH: Adding + Shell_Flag_EchoWindows option to setup escapes for arguments to + the native echo command in a shell. This special case is needed + to avoid adding quotes when passing text to echo in a native + windows shell which does no command line parsing at all. + +2006-10-04 18:10 king + + * Source/cmAddCustomTargetCommand.cxx, + Source/cmAddCustomTargetCommand.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Tests/CustomCommand/CMakeLists.txt: ENH: + Added COMMENT option to ADD_CUSTOM_TARGET. This addresses + bug#3461. + +2006-10-04 18:09 king + + * Source/cmAddCustomCommandCommand.h: BUG: COMMENT was missing from + docs. + +2006-10-04 17:27 king + + * Source/kwsys/: CMakeLists.txt, ProcessUNIX.c, + kwsysPlatformTestsC.c: ENH: Adding tests KWSYS_C_HAS_PTRDIFF_T + and KWSYS_C_HAS_SSIZE_T to help ProcessUNIX.c build everywhere + without warnings. + +2006-10-04 17:24 king + + * bootstrap: ENH: Renamed kwsysPlatformCxxTests to + kwsysPlatformTests and generalized it for multiple language tests + (C and CXX). + +2006-10-04 17:08 king + + * Source/kwsys/kwsysPlatformTests.cmake: BUG: Name of C test file + ends in .c not .cxx. + +2006-10-04 16:56 king + + * Source/kwsys/: CMakeLists.txt, kwsysPlatformCxxTests.cmake, + kwsysPlatformCxxTests.cxx, kwsysPlatformTests.cmake, + kwsysPlatformTestsC.c, kwsysPlatformTestsCXX.cxx: ENH: Renamed + kwsysPlatformCxxTests to kwsysPlatformTests and generalized it + for multiple language tests (C and CXX). + +2006-10-04 16:31 hoffman + + * Modules/FindDoxygen.cmake: ENH: remove paths that cmake already + looks at + +2006-10-04 15:54 alex + + * Modules/FindRuby.cmake: ENH: apply patch so that the config + values from ruby are used to determine the additional locations + (see #3297) + + Alex + +2006-10-04 15:24 king + + * Source/cmAddCustomCommandCommand.cxx, + Source/cmAddCustomCommandCommand.h, Source/cmCustomCommand.cxx, + Source/cmCustomCommand.h, Tests/CustomCommand/CMakeLists.txt: + ENH: Added APPEND option to ADD_CUSTOM_COMMAND to allow extra + dependencies to be connected later. This is useful to create one + rule and then have a macro add things to it later. This + addresses bug#2151. + +2006-10-04 14:37 king + + * Source/cmCommandArgumentParser.cxx, + Source/cmCommandArgumentParser.y, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmCommandArgumentParserHelper.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Tests/CustomCommand/CMakeLists.txt: BUG: Do + not replace @VAR@ syntax in list files. This addresses bug + #2722. + +2006-10-04 14:02 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for fat file + systems and vs8 #2617 + +2006-10-04 14:00 king + + * Modules/UseQt4.cmake: BUG: Patch from Clinton to restore proper + QT3_SUPPORT macro definition. + +2006-10-04 13:27 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for bug#3362 + xml escapes on -D stuff for visual studio + +2006-10-04 13:05 hoffman + + * Modules/FindTCL.cmake: BUG: fix for bug# 3313 same advanced for + tcl win and unix + +2006-10-04 11:33 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for bug# 3664 + +2006-10-04 11:11 hoffman + + * Source/cmGlobalGenerator.cxx: BUG: fix for bug #3517 seg fault + with enable language before project command + +2006-10-04 11:04 hoffman + + * Modules/FindDoxygen.cmake: BUG: fix for bug#3520 - better find + doxygen + +2006-10-04 10:54 hoffman + + * Modules/Platform/Darwin.cmake: BUG: fix for bug# 3584 missing + SONAME for fortran on darwin + +2006-10-04 10:33 hoffman + + * Modules/FindQt4.cmake: ENH: make qmake-qt4 really work if qmake + is qt3 also fix indent in file, for diff use cvs diff -w + +2006-10-04 05:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-03 17:53 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: fix dashbaord error do not + exclude root project from itself. + +2006-10-03 16:18 hoffman + + * Modules/FindGLUT.cmake: BUG: fix for bug#3646 GLUT not Glut for + framework name + +2006-10-03 16:12 hoffman + + * Modules/Platform/Windows-cl.cmake: BUG: fix for bug#3652 use link + /lib instead of lib + +2006-10-03 15:25 hoffman + + * Source/CMakeLists.txt: ENH: use core and not all of carbon + +2006-10-03 15:12 hoffman + + * Source/cmGlobalGenerator.cxx: BUG: fix for bug#3714 + execlude_from_all not working on vs + +2006-10-03 14:40 martink + + * Source/: cmCommands.cxx, cmEndMacroCommand.cxx, + cmEndMacroCommand.h: ENH: added endmacro command + +2006-10-03 14:39 hoffman + + * Modules/FindQt4.cmake: BUG: fix for bug#3720 + +2006-10-03 14:03 alex + + * Modules/KDE3Macros.cmake: BUG: fix #3827, the name of the var is + _tmp_FILE instead of tmp_FILE, so the dcop stuff should work now + + Alex + +2006-10-03 14:03 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for bug#3738 + +2006-10-03 13:48 hoffman + + * Modules/FindSDL.cmake: BUG: fix for 3765 + +2006-10-03 13:45 hoffman + + * Source/cmAddTestCommand.h: BUG: fix for bug#3775 + +2006-10-03 13:35 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: check for empty path + +2006-10-03 13:35 hoffman + + * Modules/Platform/AIX.cmake: ENH: disable static shared stuff on + AIX, see comment + +2006-10-03 13:35 hoffman + + * Source/cmGlobalMSYSMakefileGenerator.cxx: BUG: bug#3789 add msys + for the msys generator + +2006-10-03 13:22 hoffman + + * Source/cmTryCompileCommand.cxx: ENH: make sure file is closed + +2006-10-03 12:09 hoffman + + * Source/cmMacroCommand.cxx: ENH: fix compile error + +2006-10-03 11:55 hoffman + + * Source/cmake.cxx: ENH: do not allow null pointer access + +2006-10-03 11:55 hoffman + + * Source/kwsys/Registry.cxx: ENH: make sure value is set before + using it + +2006-10-03 10:57 hoffman + + * Source/cmMacroCommand.cxx: BUG: fix for seg fault bug #3815 + +2006-10-03 10:26 king + + * Source/kwsys/ProcessUNIX.c: BUG: Need to initialize to not use + native pipes. + +2006-10-03 09:12 king + + * Source/cmGlobalKdevelopGenerator.cxx: STYLE: Fixed line-too-long + warning. + +2006-10-03 09:10 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c, ProcessWin32.c: ENH: + Added Process_SetPipeNative method to allow user code to override + the pipes connected to the child pipeline. + +2006-10-03 05:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-02 12:01 king + + * Source/cmAddExecutableCommand.cxx, + Source/cmAddExecutableCommand.h, Source/cmAddLibraryCommand.cxx, + Source/cmAddLibraryCommand.h, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt: ENH: Renamed + NOT_IN_ALL to EXCLUDE_FROM_ALL. + +2006-10-02 11:13 king + + * Source/cmAddExecutableCommand.cxx, + Source/cmAddExecutableCommand.h, Source/cmAddLibraryCommand.cxx, + Source/cmAddLibraryCommand.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/notInAllExe.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/Complex/Library/notInAllLib.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/notInAllExe.cxx, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/notInAllLib.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/notInAllExe.cxx, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/notInAllLib.cxx: ENH: Added + NOT_IN_ALL option for ADD_LIBRARY and ADD_EXECUTABLE to avoid + building the targets by default. + +2006-10-02 10:49 king + + * Source/cmGlobalKdevelopGenerator.cxx: ENH: Patch from Alex to + help with KDevelop code completion in generated projects. + +2006-10-02 10:20 king + + * Source/: cmAddCustomCommandCommand.h, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmGlobalWatcomWMakeGenerator.cxx, + cmMakefile.cxx, cmMakefileTargetGenerator.cxx, + cmSetSourceFilesPropertiesCommand.h: ENH: Added SYMBOLIC source + file property to mark custom command outputs that are never + actually created on disk. This is used by the Watcom WMake + generator to generate the .SYMBOLIC mark on the files in the make + system. + +2006-10-02 10:17 king + + * Tests/CustomCommand/: CMakeLists.txt, check_command_line.c.in: + COMP: Fix command line check test implementation for Watcom. + +2006-10-02 09:03 hoffman + + * Modules/FindQt4.cmake: ENH: fix from clinton + +2006-10-02 04:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-10-01 04:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-30 03:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-29 16:42 king + + * Source/: cmGetTargetPropertyCommand.h, cmTarget.cxx: ENH: Added + support for getting a target's location on a per-configuration + basis (ex. DEBUG_LOCATION). This does not fix but helps with + bug#3250. + +2006-09-29 16:14 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix failing tests on mac + +2006-09-29 09:11 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fixed inclusion of + progress.make from subdirectory makefiles. + +2006-09-29 03:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-28 17:35 king + + * Source/cmIncludeExternalMSProjectCommand.cxx: BUG: Move hack from + old cmMakefile::AddUtilityTarget to this command directly. There + really needs to be a better way to represent external project + targets. + +2006-09-28 17:21 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Moved + progress.make file into CMakeFiles subdirectory to keep things + clean. + +2006-09-28 16:40 king + + * Source/: cmAddCustomCommandCommand.cxx, cmCustomCommand.cxx, + cmCustomCommand.h, cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio8Generator.h, cmLocalGenerator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmMakefile.cxx, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileExecutableTargetGenerator.h, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.h, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h: BUG: + Fix/cleanup custom commands and custom targets. Make empty + comment strings work. Fix ZERO_CHECK target always out of date + for debugging. Fix Makefile driving of custom commands in a + custom target. Fix dependencies on custom targets not in ALL in + VS generators. + +2006-09-28 13:55 king + + * Source/: cmAddCustomTargetCommand.cxx, cmCPluginAPI.cxx, + cmGlobalGenerator.cxx, cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio8Generator.cxx, cmGlobalXCodeGenerator.cxx, + cmIncludeExternalMSProjectCommand.cxx, cmMakefile.cxx, + cmMakefile.h, cmVTKWrapJavaCommand.cxx: ENH: Cleaned up signature + of cmMakefile::AddUtilityCommand. It is not valid to have an + output from a utility rule and no calls to the method asked for + an output anyway. The argument has been removed. + +2006-09-28 11:42 king + + * Modules/Platform/UnixPaths.cmake: BUG: Header and library search + path ordering should be consistent. + +2006-09-28 11:30 king + + * Source/cmAddCustomCommandCommand.cxx, + Source/cmAddCustomCommandCommand.h, + Source/cmAddCustomTargetCommand.cxx, + Source/cmAddCustomTargetCommand.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Tests/CustomCommand/CMakeLists.txt, + Tests/CustomCommand/check_command_line.c.in: ENH: Added VERBATIM + option to ADD_CUSTOM_COMMAND and ADD_CUSTOM_TARGET commands. + This option enables full escaping of custom command arguments on + all platforms. See bug#3786. + +2006-09-28 10:41 king + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: ENH: Re-enabling .i + rule test on MSYS now that it works. + +2006-09-28 10:37 king + + * Source/: cmGlobalMSYSMakefileGenerator.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmLocalUnixMakefileGenerator3.h: BUG: MSYS + makefile shell needs posix paths to executables in some cases and + it does not hurt to do it always. + +2006-09-28 09:49 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx: BUG: Do not filter system + directories for include file dependencies. + +2006-09-28 02:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-27 16:20 king + + * Source/cmCustomCommand.cxx: COMP: Fix init order. + +2006-09-27 16:14 king + + * Source/cmCommandArgumentParserHelper.cxx: BUG: One should be able + to escape the @ symbol. + +2006-09-27 15:26 king + + * Source/cmCustomCommand.cxx: BUG: The copy constructor should copy + the escape settings. + +2006-09-27 14:27 king + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: ENH: Re-enable + preprocessing target test but specifically disable it on broken + platforms. + +2006-09-27 13:43 king + + * Source/: cmCustomCommand.cxx, cmCustomCommand.h, + cmGlobalXCodeGenerator.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmLocalUnixMakefileGenerator3.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudioGenerator.cxx, cmLocalVisualStudioGenerator.h, + kwsys/ProcessWin32.c, kwsys/System.c, kwsys/System.h.in: ENH: + Re-implemented command line argument shell quoting to support + several platforms with one code base. + +2006-09-27 13:30 alex + + * Modules/: FindPythonInterp.cmake, FindPythonLibs.cmake: + ENH: apply patch from Dirk Mueller to support Python 2.5 + + Alex + +2006-09-27 12:55 king + + * Source/cmDependsC.cxx: STYLE: Fixed line-too-long. + +2006-09-26 08:04 andy + + * Source/cmDependsC.cxx: BUG: Handle header file dependencies for + objective C + +2006-09-26 02:30 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-25 18:33 king + + * Source/cmCommandArgumentLexer.cxx: COMP: Removed yyunput function + to avoid warning. + +2006-09-25 14:01 king + + * Source/cmCommandArgumentLexer.cxx: COMP: Restoring previous AIX + fix. + +2006-09-25 10:22 king + + * Source/cmLocalGenerator.cxx, Tests/CustomCommand/CMakeLists.txt: + BUG: Disable new shell escape code until backward compatibility + can be established in the new implementation. + +2006-09-25 10:05 king + + * Source/cmCommandArgumentLexer.cxx, + Source/cmCommandArgumentLexer.h, + Source/cmCommandArgumentLexer.in.l, + Tests/StringFileTest/CMakeLists.txt: BUG: Character + should be + valid in a variable name. + +2006-09-25 02:39 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-24 10:28 king + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: BUG: Disable new + test_preprocess target until it is fixed on OSX universal + binaries and mingw. + +2006-09-24 02:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-23 17:09 king + + * Docs/: cmake-indent.vim, cmake-syntax.vim: ENH: Adding elseif to + VIM syntax and indentation files. See bug #3781. + +2006-09-23 16:55 king + + * Tests/: Complex/Library/CMakeLists.txt, + Complex/Library/test_preprocess.cmake, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexOneConfig/Library/test_preprocess.cmake, + ComplexRelativePaths/Library/CMakeLists.txt, + ComplexRelativePaths/Library/test_preprocess.cmake: ENH: Adding + test for running preprocessor rules. + +2006-09-23 16:32 king + + * Docs/cmake-mode.el: ENH: Adding elseif indentation. See + bug#3781. + +2006-09-23 14:41 andy + + * Source/CPack/cmCPackZIPGenerator.cxx: BUG: Attempt to fix winzip + problems + +2006-09-23 02:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-22 11:49 martink + + * Tests/: Complex/CMakeLists.txt, Complex/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/complex.cxx: ENH: added test for + elseif + +2006-09-22 11:23 martink + + * Source/: cmCommands.cxx, cmElseIfCommand.cxx, cmElseIfCommand.h, + cmIfCommand.cxx, cmIfCommand.h: ENH: added elseif + +2006-09-22 08:42 king + + * Tests/CustomCommand/CMakeLists.txt: COMP: Need ANSI C flags to + build check_command_line.c. + +2006-09-22 02:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-21 17:21 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: COMP: Fix shadowed + local variable created by previous cmake_force change. + +2006-09-21 16:11 king + + * Tests/CustomCommand/: CMakeLists.txt, check_command_line.c.in: + ENH: Adding test for non-trivial custom command line arguments. + This is for bug#3786. + +2006-09-21 16:10 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmLocalGenerator.h: BUG: + Enabled use of EscapeForShell to properly escape custom command + lines. This addresses bug#3786 for Xcode. + +2006-09-21 15:35 king + + * Source/cmLocalGenerator.cxx: BUG: Need to escape spaces in custom + command line arguments. + +2006-09-21 15:30 king + + * Source/cmLocalGenerator.cxx: BUG: Do not escape parens because we + need to be able to reference make variables in the scripts. + +2006-09-21 15:14 king + + * Source/: cmGlobalVisualStudio8Generator.cxx, + cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudioGenerator.cxx, cmLocalVisualStudioGenerator.h: + BUG: Centralized generation of command line arguments in escaped + form. This addresses bug#3786 for several platforms. + +2006-09-21 15:09 andy + + * Source/CPack/cmCPackZIPGenerator.cxx: ENH: Handle zip (command + line was too long) + +2006-09-21 14:46 king + + * Source/kwsys/System.c: BUG: Windows_ShellArgument: need to escape + if the string contains one of a set of special characters as well + as spaces. Moved test for needing escapes to a separate method + kwsysSystemWindowsShellArgumentNeedsEscape. + +2006-09-21 13:47 king + + * bootstrap: ENH: Added System component of kwsys. + +2006-09-21 11:49 king + + * Source/kwsys/: CMakeLists.txt, ProcessWin32.c, System.c, + System.h.in: ENH: Adding 'System' component of C sources to hold + system tools written in C. Moved windows shell command line + argument escaping code to kwsysSystem_Windows_ShellArgument and + kwsysSystem_Windows_ShellArgumentSize. + +2006-09-21 10:04 king + + * Source/kwsys/SharedForward.h.in: ENH: Added + KWSYS_SHARED_FORWARD_OPTION_COMMAND option to allow users to + replace the command executed. Extended documentation at top of + file. + +2006-09-21 02:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-20 12:13 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: cmake_force needs + to be written into build.make as well as Makefile. + +2006-09-20 02:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-19 16:11 alex + + * Modules/: COPYING-CMAKE-SCRIPTS, FindASPELL.cmake, + FindBZip2.cmake, FindHSPELL.cmake, FindJasper.cmake, + FindLibXml2.cmake, FindLibXslt.cmake, FindOpenSSL.cmake: ENH: add + cmake modules for some common libraries: aspell, hspell, bzip2, + jasper (jpeg2000), libxml2 and libxslt and openssl and the + accompanying license (BSD) + + Alex + +2006-09-19 02:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-18 17:55 alex + + * Modules/: CheckCCompilerFlag.cmake, CheckCXXCompilerFlag.cmake: + ENH: two macros to check whether the C/CXX compiler supports a + given flag: CHECK_CXX_COMPILER_FLAG("-Wall" + COMPILER_SUPPORTS_WALL) + + Alex + +2006-09-18 09:40 king + + * Modules/Platform/QNX.cmake: ENH: Enabling link type selection + flags for this platform. See bug#1644 for details. + +2006-09-18 02:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-17 09:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-16 11:54 king + + * Source/cmDependsC.cxx: STYLE: Fixed line-too-long. + +2006-09-16 11:52 king + + * Source/cmLocalGenerator.cxx: BUG: Do not look for linker language + unless it is needed. + +2006-09-16 11:47 king + + * Modules/Platform/SunOS.cmake: BUG: Need -Wl, to pass linker flags + when using gcc on Sun. + +2006-09-16 09:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-15 15:19 king + + * Modules/Platform/AIX.cmake: ENH: Enabling link type selection + flags for this platform. See bug#1644 for details. + +2006-09-15 15:18 king + + * Modules/Platform/HP-UX.cmake: STYLE: Updated comment about link + type flags and passing directly to ld. + +2006-09-15 15:14 king + + * Modules/Platform/HP-UX.cmake: BUG: Fix + CMAKE_SHARED_*_LINK_*_C_FLAGS to pass link type selection flags + directly to the linker. + +2006-09-15 15:05 king + + * Modules/Platform/SunOS.cmake: ENH: Enabling link type selection + flags for this platform. See bug#1644 for details. + +2006-09-15 14:58 king + + * Modules/Platform/: FreeBSD.cmake, HP-UX.cmake: ENH: Enabling link + type selection flags for this platform. See bug#1644 for + details. + +2006-09-15 14:31 king + + * Tests/: Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + Complex/Library/CMakeLists.txt, Complex/Library/TestLink.c, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexOneConfig/Library/TestLink.c, + ComplexRelativePaths/Library/CMakeLists.txt, + ComplexRelativePaths/Library/TestLink.c: ENH: Added test for + linking to a static library that is next to a shared library. + See bug#1644 for related changes. + +2006-09-15 14:08 king + + * Modules/CMakeCXXInformation.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/Platform/Linux.cmake, Source/cmLocalGenerator.cxx, + Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, + Tests/SystemInformation/SystemInformation.in: ENH: Adding support + to link specifically to an archive or a shared library based on + the file name specified. This fixes the problem of having -lfoo + linking to libfoo.so even when it came from libfoo.a being + specified. + +2006-09-15 14:02 king + + * Modules/CMakeFortranInformation.cmake: STYLE: Removing unused + platform variable CMAKE_SHARED_MODULE_LINK_Fortran_FLAGS. It + does not make sense because nothing links to shared modules. + +2006-09-15 09:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-14 09:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-13 12:43 king + + * Source/: cmDependsC.cxx, cmDependsC.h: ENH: Patch from Alex to + speed dependency scanning approximately 2x. + +2006-09-13 11:39 king + + * Source/cmAddCustomTargetCommand.cxx: ENH: Added diagnosis of bad + target names. + +2006-09-13 11:22 king + + * Modules/FindwxWidgets.cmake: BUG: Patch from Peter Visser to run + wx-config from an MSYS prompt. + +2006-09-13 08:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-12 10:21 hoffman + + * Source/cmMakefileTargetGenerator.cxx: ENH: put the if in the + right place + +2006-09-12 10:03 hoffman + + * Source/cmMakefileTargetGenerator.cxx: ENH: fix for BUG: #739 + again, makefiles did not depend on external full path libraries + +2006-09-12 09:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-10 22:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-09 21:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-08 22:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-08 10:42 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, cmMakefileTargetGenerator.cxx: + BUG: Fixed ordering of code generated in Makefile and build.make + files to make sure .SUFFIXES rule comes as early as possible. + Also cleaned up documentation in generated files. + +2006-09-08 10:39 king + + * Source/cmInstallCommand.cxx: STYLE: Fixed line-too-long. + +2006-09-08 09:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-07 10:05 king + + * Source/cmInstallCommand.cxx: ENH: Patch from Toni Timonen to + allow cross-compiling of DLLs. + +2006-09-07 08:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-06 09:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-06 08:31 hoffman + + * Modules/: FindQt4.cmake, UseQt4.cmake: ENH: fixes from Clinton to + allow qt to work with static libs + +2006-09-05 09:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-04 09:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-03 09:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-02 10:51 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Patch from Alex to + fix name of includecache files to not look like source files. + +2006-09-02 09:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-09-01 09:51 king + + * Source/: cmBuildNameCommand.h, cmExecProgramCommand.h, + cmGlobalGenerator.cxx, cmInstallFilesCommand.h, + cmInstallProgramsCommand.h, cmInstallTargetsCommand.h, + cmLinkLibrariesCommand.h, cmMakeDirectoryCommand.h, + cmRemoveCommand.h, cmSubdirCommand.h, cmSubdirDependsCommand.h, + cmVTKMakeInstantiatorCommand.h, cmVTKWrapJavaCommand.h, + cmVTKWrapPythonCommand.h, cmVTKWrapTclCommand.h: STYLE: Fixed + line-too-long warning. + +2006-09-01 08:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-31 16:40 king + + * Source/cmAddSubDirectoryCommand.cxx: BUG: Fix automatic + computation of binary path to work for subdirectories of out of + source directories. This addresses bug#3592. + +2006-08-31 14:09 king + + * Source/: cmDependsC.cxx, cmDependsC.h, + cmLocalUnixMakefileGenerator3.cxx, cmMakefileTargetGenerator.cxx: + ENH: Make sure all custom command outputs are up to date before + scanning dependencies. This avoids the need to pass a list of + generated files to the dependency scanning code and to rescan + after the files have been generated. Currently there is no + notion of implicit dependencies of the custom commands themselves + so this design is safe. We only need to make sure implicit + dependencies are up to date before the make process for the + /build part of a target is executed because only this process + loads them. This is a step towards fixing bug#3658. + +2006-08-31 13:20 king + + * Source/: cmBuildNameCommand.h, cmCommand.h, + cmExecProgramCommand.h, cmInstallFilesCommand.h, + cmInstallProgramsCommand.h, cmInstallTargetsCommand.h, + cmLinkLibrariesCommand.h, cmMakeDirectoryCommand.h, + cmRemoveCommand.h, cmSubdirCommand.h, cmSubdirDependsCommand.h, + cmVTKMakeInstantiatorCommand.h, cmVTKWrapJavaCommand.h, + cmVTKWrapPythonCommand.h, cmVTKWrapTclCommand.h: ENH: Patch from + Alex to add IsDiscouraged method for future use in generating + separate documentation for old commands. Also modified + documentation of MAKE_DIRECTORY and REMOVE commands to indicate + they should not be used. + +2006-08-31 10:47 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmInstallCommand.cxx, cmInstallFilesCommand.cxx, + cmInstallProgramsCommand.cxx, cmInstallTargetsCommand.cxx: ENH: + Do not generate install target unless some INSTALL or INSTALL_* + commands have been used. This addresses bug#2827. + +2006-08-31 10:46 king + + * Modules/CMakeDetermineRCCompiler.cmake: BUG: Need to search for + rc by default, not c++ compilers. + +2006-08-31 09:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-30 13:59 king + + * Source/kwsys/: CMakeLists.txt, kwsysPlatformCxxTests.cmake: COMP: + Fix try-compile to fail properly on HP. + +2006-08-30 13:51 alex + + * Modules/FindQt3.cmake: ENH: automatically find Qt3 on SUSE, patch + from Dirk Mueller and Stephan Kulow + + Alex + +2006-08-30 13:47 alex + + * Modules/FindPNG.cmake: ENH: also look in + /usr/local/include/libpng (OpenBSD) ENH: error out with + FATAL_ERROR if REQUIRED was given but png hasn't been found + + Alex + +2006-08-30 10:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-29 16:08 king + + * Source/cmGlobalKdevelopGenerator.cxx: ENH: Patch from Alex to fix + current working directory when running executables built in + KDevelop. + +2006-08-29 15:08 king + + * Source/cmInstallCommand.h: ENH: Add support to INSTALL(DIRECTORY) + to install an empty directory. This addresses bug#3572. + +2006-08-29 15:04 king + + * Source/cmFileCommand.cxx, Source/cmInstallCommand.cxx, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Add support to + INSTALL(DIRECTORY) to install an empty directory. This addresses + bug#3572. + +2006-08-29 13:59 king + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, + CMakeDetermineFortranCompiler.cmake, + CMakeDetermineRCCompiler.cmake: BUG: Search for the compiler only + once and store a full path to it in the cache. This avoids + problems with the case of locations in the PATH variable on + Windows that change the compiler name when CMake is re-run. + CMakeFiles/CMake*Compiler.cmake files should hold the full path + to the compiler always. + +2006-08-29 12:55 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: BUG: bad progress for named top + level targets + +2006-08-29 10:27 king + + * Source/cmStandardIncludes.h: COMP: Fix warnings in system headers + on VS6. + +2006-08-29 10:03 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.h, cmLocalGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: Adding install/local + global target for Makefile generators. This runs installation + only in the current directory and not subdirectories. + +2006-08-29 09:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-28 08:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-27 15:52 alex + + * Modules/: KDE3Macros.cmake, kde3uic.cmake: BUG: fix #3324: + KDE3Macros.cmake didn't find Qt designer plugins when running uic + (the kde plugin dir wasn't used) + + Alex + +2006-08-27 15:34 alex + + * Modules/FindKDE3.cmake: STYLE: remove unnecessary + /usr/local/include search path + + Alex + +2006-08-27 13:59 alex + + * Modules/FindQt3.cmake: BUG: #3514: qt-mt3.lib wasn't found on + windows STYLE: remove some (now) unnecessary /usr/lib, + /usr/local/lib, /usr/include and /usr/local/include search paths + + Alex + +2006-08-27 13:23 king + + * Source/cmStandardIncludes.h: COMP: Use new KWSys IOStream + component to help print large file size integer types to streams. + +2006-08-27 13:17 king + + * Source/kwsys/: CMakeLists.txt, IOStream.cxx, IOStream.hxx.in, + kwsysPlatformCxxTests.cxx: ENH: Adding KWSys component IOStream + to provide help with broken C++ stream libraries. + +2006-08-27 13:15 king + + * Source/: cmFileCommand.cxx, CPack/cmCPackNSISGenerator.cxx: COMP: + Need to use cmsys_stl when in CMake code, not kwsys_stl. + +2006-08-27 12:35 king + + * Source/kwsys/Glob.hxx.in: BUG: Need to undefine temporary macros + defined at top of file. + +2006-08-27 11:25 king + + * Source/kwsys/kwsysPlatformCxxTests.cmake: BUG: When a try-run + fails to compile create the run result cache entry with a bogus + non-zero return value to avoid running the test again. + +2006-08-27 11:19 alex + + * Modules/: CheckCSourceCompiles.cmake, + CheckCXXSourceCompiles.cmake: STYLE: fix #3519 (incorrect + comment) + + Alex + +2006-08-27 11:14 alex + + * Modules/FindKDE3.cmake: BUG: fix comment (#3511) + + Alex + +2006-08-27 10:19 alex + + * Modules/KDE3Macros.cmake: BUG: apply patch from bero (#3518) so + that DESTDIR is supported for installing icons + + Alex + +2006-08-27 09:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-27 09:34 alex + + * Modules/FindKDE3.cmake: ENH: #3225: first check the special + paths, the the default path, also for searching kde-config + + Alex + +2006-08-26 16:14 king + + * Source/kwsys/SystemTools.cxx: BUG: GetLineFromStream should + remove carriage return characters to make sure newlines do not + get duplicates. + +2006-08-26 15:17 king + + * Source/kwsys/kwsysPlatformCxxTests.cmake: BUG: Fix location of + CMakeOutput.log and CMakeError.log. + +2006-08-26 14:43 king + + * Source/cmMakefile.cxx: BUG: Reverting previous change until it is + further tested. + +2006-08-26 14:37 king + + * Source/cmMakefile.cxx: BUG: ConfigureFile must read/write in + binary mode to avoid windows newline trouble. The problem + occurred when configuring a file in cygwin from a path starting + with a windows drive letter instead of a posix path. + +2006-08-26 10:28 king + + * Source/: cmIfCommand.cxx, cmListCommand.cxx: STYLE: Fixed + line-too-long. + +2006-08-26 10:22 king + + * Source/cmLocalVisualStudio7Generator.cxx: STYLE: Fixed + line-too-long. + +2006-08-26 09:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-25 22:56 king + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: BUG: Fix for VS.NET 2003 SP1 to + make sure global target and utility target rules run every time. + +2006-08-25 22:56 king + + * Source/cmGlobalGenerator.cxx: BUG: Make sure targets of type + GLOBAL_TARGET have a makefile set. + +2006-08-25 21:21 king + + * CMakeLists.txt, bootstrap: ENH: Changing default data and doc + directories to share/cmake-V.v and doc/cmake-V.v instead of + share/CMake and doc/CMake for consistency with many linux + distribution conventions. + +2006-08-25 20:52 king + + * bootstrap: COMP: Fix for new kwsys Configure.h.in. + +2006-08-25 16:32 king + + * Source/kwsys/Configure.h.in: COMP: Disable _FILE_OFFSET_BITS + check until sys/types.h check is enabled. + +2006-08-25 16:31 king + + * Source/cmIfCommand.cxx, Source/cmIfCommand.h, + Tests/StringFileTest/CMakeLists.txt: ENH: Patch from Alex for + adding IF(FILE_IS_NEWER). I also added a test. + +2006-08-25 16:07 king + + * Source/kwsys/Configure.h.in: ENH: Separate the notion of a + request for LFS and its availability. Allow user code to block + definitions of LFS macros. Added framework to give error if + sys/types.h is included before this header when LFS is requested + (currently disabled). + +2006-08-25 16:00 king + + * Source/kwsys/: CMakeLists.txt, Configure.h.in, + RequireLargeFilesSupport.cxx, kwsysPlatformCxxTests.cxx: ENH: + Moved test for large file support into kwsysPlatformCxxTests.cxx + with name KWSYS_LFS_WORKS. + +2006-08-25 15:53 king + + * Source/kwsys/: CMakeLists.txt, kwsysPlatformCxxTests.cxx: ENH: + Switching KWSYS_CHAR_IS_SIGNED test to use + KWSYS_PLATFORM_CXX_TEST_RUN macro. + +2006-08-25 15:50 king + + * Source/kwsys/kwsysPlatformCxxTests.cmake: ENH: Added + KWSYS_PLATFORM_CXX_TEST_RUN macro. + +2006-08-25 12:13 king + + * Source/kwsys/Glob.cxx: ENH: Globbing patterns should not match a + slash inside a filename component. + +2006-08-25 12:11 king + + * Source/cmFileCommand.cxx: BUG: Avoid putting double-slashes in + fromFile during installation. Also added regex debugging copy of + the expression in string form. + +2006-08-25 09:14 king + + * Modules/UseSWIG.cmake: ENH: Added interface to add extra + dependencies. + +2006-08-25 05:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-24 14:58 king + + * Source/: cmCommandArgumentParser.cxx, cmCommandArgumentParser.y: + COMP: Added missing include for malloc on QNX. + +2006-08-24 10:57 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Always do tar.Z since we do + have compress now builtin + +2006-08-24 09:47 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Added code to remove any bad + installations of CVS directories before running the test so that + one failure does not need manual adjustment to get it to pass + again. + +2006-08-24 09:34 king + + * Source/cmStandardLexer.h: COMP: Add missing malloc.h include for + QNX. + +2006-08-24 09:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-23 18:11 alex + + * Modules/UseEcos.cmake: ENH: add i386 toolchain and some minor + improvement of the comments + +2006-08-23 12:02 andy + + * Source/: cmCommandArgumentLexer.cxx, cmCommandArgumentParser.cxx, + cmCommandArgumentParser.y, cmDependsJavaLexer.cxx, + cmExprLexer.cxx: COMP: Attempt to fix aix build + +2006-08-23 10:21 martink + + * Source/cmIncludeDirectoryCommand.cxx: ENH: fix bad error + reporting with not found paths + +2006-08-23 10:00 andy + + * Source/cmStandardIncludes.h: COMP: Add large files support to + CMake + +2006-08-23 09:47 king + + * Source/kwsys/Terminal.c: ENH: Added '256color' terminal names. + Patch applied from bug#3651. + +2006-08-23 09:45 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: Centralized generation of + targets listed in the help to be done by the code that actually + writes the targets. + +2006-08-23 09:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-23 08:07 andy + + * Source/kwsys/CMakeLists.txt: COMP: Support cmake older than 2.4 + +2006-08-22 18:33 alex + + * Modules/UseEcos.cmake: STYLE: don't use the hack to copy and + rename the created executable under cygwin but instead use the + SUFFIX target property (I'll publish a short article about + ecos+cmake RSN) + + Alex + +2006-08-22 16:07 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Handle more warnings + properly on AIX + +2006-08-22 15:51 andy + + * Source/kwsys/CheckCXXSourceRuns.cmake: COMP: On some project + configure may not copy right away + +2006-08-22 15:46 andy + + * Source/kwsys/: CMakeLists.txt, CheckCXXSourceRuns.cmake, + CMakeEmptyInputFile.in: COMP: Add missing cmake file + +2006-08-22 15:34 andy + + * bootstrap, Source/kwsys/CMakeLists.txt, + Source/kwsys/Configure.h.in, + Source/kwsys/RequireLargeFilesSupport.cxx: ENH: Support large + file systems in kwsys + +2006-08-22 10:38 king + + * Source/: cmDocumentation.cxx, cmInstallCommand.h: BUG: Fixed man + page formatting for INSTALL command documentation. Fixed + line-too-long warning. + +2006-08-22 10:16 andy + + * Source/: cmListCommand.cxx, cmListCommand.h: BUG: Add missing API + +2006-08-22 09:52 andy + + * Source/cmListCommand.cxx: BUG: Fix error messages and fix remove + item to actually remove all instances of the item + +2006-08-22 09:20 andy + + * Source/CPack/cmCPackTarCompressGenerator.cxx: COMP: Remove + warnings + +2006-08-22 08:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-21 22:39 king + + * Source/kwsys/Glob.cxx: BUG: Fixed #if test for case-insensitive + glob on OSX. + +2006-08-21 17:52 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Added check for bad + installation of a CVS directory to test. + +2006-08-21 17:47 king + + * Source/: cmFileCommand.cxx, cmInstallCommand.cxx: BUG: Directory + installation pattern matching should be case insensitive on some + platforms. + +2006-08-21 17:37 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Need to execute + sample_script.bat on windows and sample_script otherwise. + +2006-08-21 17:34 king + + * Source/kwsys/SystemTools.cxx: BUG: FileIsDirectory should work + when the name contains a trailing slash. + +2006-08-21 16:55 king + + * Source/cmFileCommand.cxx, Source/cmInstallCommand.cxx, + Source/cmInstallCommand.h, + Source/cmInstallDirectoryGenerator.cxx, + Source/cmInstallDirectoryGenerator.h, + Source/cmInstallGenerator.cxx, Source/cmInstallGenerator.h, + Source/cmInstallTargetGenerator.cxx, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstall/scripts/sample_script, + Tests/SimpleInstall/scripts/sample_script.bat, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/scripts/sample_script, + Tests/SimpleInstallS2/scripts/sample_script.bat: ENH: Implemented + INSTALL(DIRECTORY) command and added a test. Re-organized + cmFileCommand's implementation of FILE(INSTALL) a bit to help + out. This addresses bug#1694 and partially addresses bug#2691. + +2006-08-21 14:17 king + + * Source/kwsys/: Glob.cxx, Glob.hxx.in: ENH: Exposed pattern->regex + API. Cleaned up and commented implementation of pattern->regex + conversion. + +2006-08-21 12:37 andy + + * Source/: CMakeLists.txt, CPack/cmCPackTarCompressGenerator.cxx, + CPack/cmCPackTarCompressGenerator.h: ENH: Implement TarCompress + generator using compress library + +2006-08-21 10:49 king + + * Source/cmFileCommand.cxx: BUG: RENAME option should be allowd for + INSTALL(PROGRAMS) too. + +2006-08-21 10:10 hoffman + + * Modules/: CheckCSourceCompiles.cmake, CheckCSourceRuns.cmake, + CheckCXXSourceCompiles.cmake, CheckCXXSourceRuns.cmake: ENH: fixs + for check compile stuff from Oswald B. + +2006-08-21 08:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-20 06:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-19 06:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-18 08:57 king + + * Source/: cmAddCustomTargetCommand.h, cmStandardLexer.h: STYLE: + Fixed line-too-long style errors. + +2006-08-18 08:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-17 16:40 hoffman + + * Source/CMakeLists.txt: ENH: fix project names to be case + sensitive and change name to linkline from inkline + +2006-08-17 15:42 king + + * Source/cmFileCommand.cxx: BUG: Bundle installation needs all file + permissions to be preserved from the build tree. + +2006-08-17 15:06 king + + * Source/cmAddCustomTargetCommand.h: ENH: Making documentation even + less ambiguous since some users still think this command can + generate a file with dependencies. + +2006-08-17 14:48 king + + * Source/: CMakeLists.txt, cmFileCommand.cxx, cmInstallCommand.cxx, + cmInstallCommand.h, cmInstallDirectoryGenerator.cxx, + cmInstallDirectoryGenerator.h, cmInstallFilesGenerator.cxx, + cmInstallFilesGenerator.h, cmInstallGenerator.cxx, + cmInstallGenerator.h, cmInstallTargetGenerator.cxx, + cmInstallTargetGenerator.h: ENH: Started implementing + INSTALL(DIRECTORY) command mode. This is not yet finished so it + is undocumented and there is no test. These changes also + separate the notions of file and directory permissions. + +2006-08-17 12:07 king + + * Source/cmFileCommand.cxx: ENH: Fix directory installation to + properly deal with trailing slash names (using the rsync + convention for whether the last directory name is included in + naming the destination directory). + +2006-08-17 12:04 martink + + * Utilities/cmcompress/cmcompress.c: ENH: reorder code to remove + forward declarations + +2006-08-17 12:02 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Added + JoinPath overload that accepts an iterator range. + +2006-08-17 09:45 king + + * Utilities/cmcompress/cmcompress.c: COMP: Fixed linkage specifier + consistency warning. + +2006-08-17 09:36 king + + * Modules/InstallRequiredSystemLibraries.cmake: ENH: Implemented + support for installing VC8 runtime libraries. + +2006-08-17 09:35 king + + * Utilities/Release/Release.cmake: BUG: Removed code that is now in + Modules/InstallRequiredSystemLibraries.cmake. + +2006-08-17 07:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-16 14:22 hoffman + + * Source/: cmDependsFortranLexer.cxx, cmDependsFortranLexer.h, + cmDependsFortranLexer.in.l: ENH: revert change in parser as it + sent the parser into an infinite loop + +2006-08-16 08:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-15 15:33 king + + * Modules/CMakeVCManifest.cmake, Modules/Platform/Windows-cl.cmake, + Source/cmLocalVisualStudio7Generator.cxx: ENH: Adding flags to + force generation of manifest files when building with VC 8. + +2006-08-15 15:28 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx: BUG: Need to clean manifest + files that may have been generated for .exe and .dll files. + +2006-08-15 12:00 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmMakefileTargetGenerator.cxx: + BUG: Added object language to list of object files in a local + generator's directory. Fixed generation of preprocessing and + assembly rules to be done only for C and C++ objects. + +2006-08-15 10:56 hoffman + + * Source/: cmDependsFortranLexer.cxx, cmDependsFortranLexer.h, + cmDependsFortranLexer.in.l: ENH: change comment for fortran + depend parsing + +2006-08-15 07:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-14 17:30 hoffman + + * Utilities/cmcompress/cmcompress.c: ENH: remove c++ comments from + c code + +2006-08-14 17:02 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: do not use OBJROOT or you + can get two copies of executables + +2006-08-14 14:16 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: add newline for + some versions of make + +2006-08-14 11:32 andy + + * Utilities/cmcompress/cmcompress.c: COMP: Remove warnings + +2006-08-14 10:59 andy + + * Utilities/cmcompress/cmcompress.c: COMP: Remove more warnings + +2006-08-14 10:51 andy + + * Source/: cmMakefileTargetGenerator.cxx, + CTest/cmCTestScriptHandler.cxx, CTest/cmCTestStartCommand.cxx: + ENH: fix for no newline on some makes fix for ctest and some + symlinks + +2006-08-14 09:58 andy + + * Utilities/cmcompress/: cmcompress.c, cmcompress.h: COMP: Remove + some warnings and make library report an error instead of call + exit + +2006-08-14 09:50 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: still escape () but do not + escape + +2006-08-14 08:54 andy + + * CMakeLists.txt: ENH: Start building compress library + +2006-08-14 07:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-13 07:52 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-12 07:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-11 10:54 martink + + * Source/kwsys/SystemTools.cxx: ENH: fix for AddKeepPath not + calling realpath + +2006-08-11 09:56 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: escape ( and ) in unix paths + +2006-08-11 07:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-10 23:20 hoffman + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: fix error in if statement + +2006-08-10 15:17 david.cole + + * Source/kwsys/SystemTools.cxx: BUG: strlen logic was backwards + resulting in function body never actually executing... when + called with valid strings, it was always doing nothing and + returning false... now it works as expected. + +2006-08-10 11:05 hoffman + + * Source/CursesDialog/cmCursesMainForm.cxx: ENH: only change the + cache if the value was really changed + +2006-08-10 09:38 hoffman + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: fix failing tests + +2006-08-10 08:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-09 13:59 king + + * Modules/Platform/AIX.cmake: ENH: Enabling preprocessed source and + asembly source generation rules on AIX compilers. + +2006-08-09 13:45 king + + * Modules/Platform/Windows-cl.cmake: ENH: Enabled generation of + preprocessed and assembly source rules for MSVC with NMake. + +2006-08-09 13:14 king + + * Modules/Platform/: IRIX.cmake, IRIX64.cmake: ENH: Enabling + preprocessed source and asembly source generation rules on SGI + MIPSpro compilers. + +2006-08-09 13:10 king + + * Modules/Platform/HP-UX.cmake: ENH: Enabling preprocessed source + and asembly source generation rules on HP aCC and cc. + +2006-08-09 11:48 king + + * Modules/Platform/SunOS.cmake: ENH: Enabling preprocessed source + and asembly source generation rules on Sun CC. + +2006-08-09 11:43 king + + * Modules/Platform/gcc.cmake, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmMakefileTargetGenerator.cxx: ENH: Changed preprocessed + source extension to .i and assembly extension to .s for more + portability. + +2006-08-09 11:32 hoffman + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: try to fix compress failure + +2006-08-09 09:56 king + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: Added options + CMAKE_SKIP_PREPROCESSED_SOURCE_RULES and + CMAKE_SKIP_ASSEMBLY_SOURCE_RULES to allow projects to disable + generation of .E and .S rules. + +2006-08-09 09:45 king + + * Source/: cmListFileLexer.c, cmListFileLexer.in.l, + cmStandardLexer.h: COMP: Fix warnings produced by the change in + include order from the re-organization of lexer code. + +2006-08-09 07:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-08 15:55 hoffman + + * Source/CTest/cmCTestBuildAndTestHandler.cxx: ENH: add cmake + output to build and test + +2006-08-08 14:00 king + + * Source/: cmCommandArgumentLexer.cxx, cmCommandArgumentLexer.in.l, + cmDependsFortranLexer.cxx, cmDependsFortranLexer.in.l, + cmDependsJavaLexer.cxx, cmDependsJavaLexer.in.l, cmExprLexer.cxx, + cmExprLexer.in.l, cmListFileLexer.c, cmListFileLexer.in.l, + cmStandardLexer.h: COMP: Moved duplicate flex-generated lexer + warning suppression and cross-platform support code to a single + cmStandardLexer.h included by all lexer sources. Added fix for + macro redefinitions on Borland 5.8 compiler. + +2006-08-08 13:44 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: ENH: make sure + RuleVariable struct is initialized correctly, also make sure + custom command targets do not crash cmake + +2006-08-08 13:02 king + + * Source/cmMakefileLibraryTargetGenerator.cxx: STYLE: Fixed line + length. + +2006-08-08 11:26 king + + * Source/cmLocalVisualStudioGenerator.cxx: BUG: Duplicate object + name detection should not be case sensitive since this code is + used on Windows file systems. This addresses bug#3589. + +2006-08-08 07:39 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-07 23:25 king + + * Modules/Platform/gcc.cmake, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmMakefileTargetGenerator.cxx: ENH: Added generation of + rules to manually request preprocessed or generated assembly + sources. + +2006-08-07 17:22 king + + * Source/cmake.cxx: ENH: Added undocumented option -E + cmake_unimplemented_variable to help print useful error messages + for unimplemented features on a given platform. + +2006-08-07 10:10 hoffman + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: finally fix the failing test + on the dashboard for the past month or so + +2006-08-07 08:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-06 07:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-05 08:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-04 10:35 hoffman + + * Utilities/cmtar/CMakeLists.txt: ENH: give up on try run + +2006-08-04 08:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-03 15:20 hoffman + + * Modules/CheckCXXSourceRuns.cmake: ENH: add a try run source code + macro + +2006-08-03 14:38 hoffman + + * Modules/CheckCSourceRuns.cmake: ENH: fix error + +2006-08-03 14:36 hoffman + + * Modules/CheckCSourceRuns.cmake, Utilities/cmtar/CMakeLists.txt: + ENH: fix for makedev three args test + +2006-08-03 13:51 hoffman + + * Utilities/cmtar/CMakeLists.txt: ENH: use try run source + +2006-08-03 13:41 hoffman + + * Utilities/cmtar/CMakeLists.txt: ENH: change to a try run so that + it will fail on the sun + +2006-08-03 13:41 hoffman + + * Modules/: CheckCSourceCompiles.cmake, CheckCSourceRuns.cmake: + ENH: add a crun macro and fix the output log for compile c + +2006-08-03 09:42 king + + * Source/: cmMakefileLibraryTargetGenerator.cxx, + cmSetTargetPropertiesCommand.h, cmTarget.cxx: ENH: Added target + property CLEAN_DIRECT_OUTPUT to not clean all forms of a library + name so that static and shared libraries of the same name can + coexist in a single build directory. + +2006-08-03 09:26 king + + * Source/cmLocalVisualStudioGenerator.cxx, + Tests/Complex/Executable/A.txt, + Tests/Complex/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/A.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/A.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt: BUG: Make + sure sources with unknown extensions are not compiled by VS. + +2006-08-03 09:26 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: Moved GetSourceFileLanguage + up to cmLocalGenerator. + +2006-08-03 08:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-02 21:30 king + + * Source/cmInstallTargetGenerator.cxx: STYLE: Fixed long line. + +2006-08-02 21:24 hoffman + + * Utilities/cmtar/CMakeLists.txt: ENH: use dev_t instead of major_t + and minor_t + +2006-08-02 12:51 david.cole + + * Utilities/cmtar/CMakeLists.txt: COMP: libtar should build when + included in non-CMake projects... + +2006-08-02 11:06 king + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: Restoring previous change + with a fix. + +2006-08-02 07:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-08-01 19:52 hoffman + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: undo change that broke + borland 5.6 cont + +2006-08-01 16:16 king + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: Moved generation of + directory-level object convenience rules to a separate method. + This will aid generation of more such rules later. + +2006-08-01 16:01 hoffman + + * Utilities/cmtar/CMakeLists.txt: ENH: make cmake build with older + versions of cmake + +2006-08-01 15:48 hoffman + + * Modules/FindQt4.cmake: ENH: fix for qtmain + +2006-08-01 15:36 king + + * Modules/Platform/Linux.cmake, + Source/cmInstallTargetGenerator.cxx: BUG: Fixed shared library + version support for Fortran. This addresses bug#3558. + +2006-08-01 15:26 hoffman + + * Utilities/cmtar/CMakeLists.txt: ENH: add a try compile test for + makedev_three_args + +2006-08-01 15:24 hoffman + + * Modules/: CheckCSourceCompiles.cmake, FindQt4.cmake: ENH: fix for + location of error log + +2006-08-01 15:16 glehmann + + * Source/kwsys/Directory.cxx: BUG: #3563. Segmentation fault with + non initialized input or NULL pointers. + +2006-08-01 14:45 king + + * Source/kwsys/: Registry.cxx, testCommandLineArguments.cxx, + testCommandLineArguments1.cxx, testSystemTools.cxx: COMP: Added + missing headers. This partially addresses bug#3556. + +2006-08-01 14:34 hoffman + + * Modules/FindQt4.cmake: ENH: add QtCored as a possible name for + qtcore debug + +2006-08-01 14:33 king + + * Source/cmMakefile.cxx: ENH: Added platform identifier for QNXNTO. + This partially addresses bug#3556. + +2006-08-01 14:31 king + + * Source/: cmCPluginAPI.cxx, cmLoadCommandCommand.cxx: COMP: Added + missing includes. This partially addresses bug#3556. + +2006-08-01 14:28 king + + * Source/kwsys/ProcessUNIX.c: COMP: Use SA_RESTART only if it is + defined for the current platform. This partially addresses + bug#3556. + +2006-08-01 14:10 king + + * Modules/FindKDE3.cmake: BUG: Fix usage of FIND_PROGRAM command. + +2006-08-01 12:27 hoffman + + * Modules/: FindQt4.cmake, UseQt4.cmake: ENH: fix for optimized + debug stuff + +2006-08-01 11:38 king + + * Source/cmCommandArgumentLexer.cxx, + Source/cmCommandArgumentLexer.in.l, + Source/cmCommandArgumentParser.cxx, + Source/cmCommandArgumentParser.y, + Source/cmDependsFortranLexer.cxx, + Source/cmDependsFortranLexer.in.l, + Source/cmDependsFortranParser.cxx, + Source/cmDependsFortranParser.y, Source/cmDependsJavaLexer.cxx, + Source/cmDependsJavaLexer.in.l, Source/cmDependsJavaParser.cxx, + Source/cmDependsJavaParser.y, Source/cmExprLexer.cxx, + Source/cmExprLexer.in.l, Source/cmExprParser.cxx, + Source/cmExprParser.y, Source/cmListFileCache.cxx, + Source/cmListFileLexer.c, Source/cmListFileLexer.in.l, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmMakefileTargetGenerator.cxx, Source/cmSetCommand.cxx, + Source/cmStandardIncludes.h, Source/cmTarget.cxx, + Source/cmWin32ProcessExecution.cxx, + Source/CTest/cmCTestBuildHandler.cxx, + Source/kwsys/CommandLineArguments.cxx, + Source/kwsys/SystemTools.cxx, Source/kwsys/testProcess.c, + Utilities/cmcurl/CMakeLists.txt, Utilities/cmtar/CMakeLists.txt, + Utilities/cmzlib/CMakeLists.txt: COMP: Fix and/or disable + warnings for Borland 5.6 build. + +2006-08-01 11:26 hoffman + + * Modules/: FindQt4.cmake, UseQt4.cmake: ENH: fix qtmain for + release + +2006-08-01 10:51 hoffman + + * Modules/: FindQt4.cmake, UseQt4.cmake: ENH: fix qtmain for + release + +2006-08-01 10:49 king + + * Tests/: Complex/Executable/A.cxx, Complex/Executable/A.h, + Complex/Executable/A.hh, Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/A.cxx, + ComplexOneConfig/Executable/A.h, + ComplexOneConfig/Executable/A.hh, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/A.cxx, + ComplexRelativePaths/Executable/A.h, + ComplexRelativePaths/Executable/A.hh, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: Adding test + for source files and header files with the same base name in the + same target. + +2006-08-01 10:48 king + + * Source/: cmLocalVisualStudioGenerator.cxx, + cmLocalVisualStudioGenerator.h, cmMakefile.cxx: ENH: Adding .hh + file as a C++ header file extension. Remove duplicate code from + implementation of unique object name computation for VS + generators. This addresses bug#3565. + +2006-08-01 09:12 hoffman + + * Modules/FindQt4.cmake: ENH: put back find qtmain + +2006-08-01 07:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-31 16:59 andy + + * Utilities/cmcompress/: CMakeLists.txt, cmcompress.c, + cmcompress.h, compress.c.original: ENH: Initial import + +2006-07-31 13:50 martink + + * Source/kwsys/: SystemTools.hxx.in, testSystemTools.cxx: ENH: + better coverage + +2006-07-31 11:00 hoffman + + * Utilities/Release/cmake_release.sh: ENH: move release branch + +2006-07-31 10:28 martink + + * Source/CPack/cpack.cxx: ENH: fix line lengths + +2006-07-31 07:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-30 07:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-29 07:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-28 14:47 martink + + * Source/kwsys/testSystemTools.cxx: BUG: fix some bad code and add + a couple more tests + +2006-07-28 14:20 martink + + * Docs/: CMake12p2.rtf, CMake14.rtf, CMake16.rtf: ENH: remove old + files + +2006-07-28 12:00 hoffman + + * ChangeLog.manual, Source/cmLocalVisualStudio7Generator.cxx: ENH: + move stuff from main tree + +2006-07-28 11:21 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for 3557 + TargetEnvironment for MIDL Compiler set correctly for 64 bit + +2006-07-28 11:13 hoffman + + * ChangeLog.manual: ENH: changes on branch + +2006-07-28 09:22 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Add test for bz2 and check + for compress + +2006-07-28 09:14 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: move from main tree + +2006-07-28 09:14 andy + + * Source/CPack/cpack.cxx: BUG: Bail out on generator initialization + failure + +2006-07-28 08:57 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: move from main tree + +2006-07-28 08:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-27 15:02 king + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Set + GCC_SYMBOLS_PRIVATE_EXTERN and GCC_INLINES_ARE_PRIVATE_EXTERN + attributes on all projects to prevent -fvisibility=hidden flags. + This is needed to make RTTI work by default. + +2006-07-27 11:55 andy + + * Source/CPack/cpack.cxx: BUG: Fix executing and help + +2006-07-27 11:27 king + + * Source/kwsys/SystemTools.cxx: BUG: Do not block signals during + sleep. Leave that up to the application. + +2006-07-27 11:26 andy + + * Source/CPack/cpack.cxx: BUG: Prevent crash when no input file or + generator specified + +2006-07-27 10:37 hoffman + + * ChangeLog.manual, bootstrap, + Modules/CMakeCommonLanguageInclude.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, Source/cmMakefile.cxx, + Source/cmSystemTools.cxx, Source/CTest/cmCTestTestHandler.cxx, + Tests/LoadCommand/LoadedCommand.cxx, + Tests/LoadCommand/CMakeCommands/cmTestCommand.c, + Tests/LoadCommandOneConfig/LoadedCommand.cxx, + Tests/LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: + move changes from main tree to branch + +2006-07-27 09:40 king + + * Source/CTest/cmCTestHandlerCommand.cxx: BUG: Fix error message + when handler cannot be created. + +2006-07-27 08:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-26 14:46 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: fix comment + +2006-07-26 14:10 andy + + * bootstrap, Modules/CMakeTestCCompiler.cmake: COMP: More warnings + and hp issues + +2006-07-26 13:19 hoffman + + * Modules/CMakeCommonLanguageInclude.cmake: BUG: fix for 3550 + again + +2006-07-26 11:46 andy + + * bootstrap, Modules/CMakeTestCCompiler.cmake, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmIncludeDirectoryCommand.cxx, Source/cmMakefile.cxx, + Source/cmSystemTools.cxx, Source/CTest/cmCTestTestHandler.cxx: + COMP: Handle both ansi and non-ansi C + +2006-07-26 11:15 hoffman + + * Modules/Platform/Windows-cl.cmake: BUG: fix for bug 3550, for + release builds do not build incremental + +2006-07-26 10:11 hoffman + + * bootstrap: ENH: put back so it works on hp + +2006-07-26 09:11 hoffman + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: do not + use c++ comments in c code + +2006-07-26 08:35 hoffman + + * CTestCustom.ctest.in, ChangeLog.manual, bootstrap, + Modules/CMakeImportBuildSettings.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmLocalVisualStudio7Generator.cxx, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in, + Source/kwsys/testSystemTools.cxx, + Tests/LoadCommand/CMakeCommands/cmTestCommand.c, + Tests/LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: + move changes from main tree + +2006-07-26 07:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-25 15:18 king + + * Source/kwsys/SystemTools.cxx: BUG: Mask signals during + SystemTools::Delay to avoid interrupted sleep. + +2006-07-25 14:32 martink + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: BUG: remove + command causing issues with mid build reruns of cmake on vs70 + +2006-07-25 14:15 martink + + * Source/kwsys/testSystemTools.cxx: COMP: fix compile issue + +2006-07-25 12:38 martink + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: trying a + slight change + +2006-07-25 12:08 martink + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in, + testSystemTools.cxx: BUG: some bug fixes, better docs, and more + coverage + +2006-07-25 11:00 andy + + * bootstrap: COMP: Remove warning + +2006-07-25 10:46 martink + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: BUG: remove + c++comments + +2006-07-25 10:01 hoffman + + * Source/CPack/cmCPackGenerators.cxx: ENH: remove uncompiled header + +2006-07-25 08:27 hoffman + + * CTestCustom.ctest.in: ENH: try to get rid of clock skew warning + +2006-07-25 08:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-24 16:58 hoffman + + * Modules/CMakeImportBuildSettings.cmake: ENH: fix for case + difference with nmake + +2006-07-24 16:35 martink + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: BUG: temp fix + +2006-07-24 16:13 martink + + * Modules/Platform/Windows-cl.cmake: BUG: fix for CXX only projects + +2006-07-24 15:40 martink + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: add + more coverage + +2006-07-24 11:27 hoffman + + * Source/: cmLocalVisualStudio7Generator.cxx, + kwsys/SystemTools.cxx: ENH: allow for source tree to be in root + directory + +2006-07-24 11:19 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeFortranCompiler.cmake.in, Modules/CPack.cmake, + Modules/FindBoost.cmake, Modules/FindKDE4.cmake, + Modules/FindOpenGL.cmake, Modules/FindwxWidgets.cmake, + Modules/FindwxWindows.cmake, Modules/Use_wxWindows.cmake, + Modules/UsewxWidgets.cmake, Modules/readme.txt, + Source/CMakeLists.txt, Source/cmBuildCommand.cxx, + Source/cmCTest.cxx, Source/cmFindBase.cxx, Source/cmFindBase.h, + Source/cmFindLibraryCommand.cxx, Source/cmFindPackageCommand.cxx, + Source/cmFindPathCommand.cxx, Source/cmFindProgramCommand.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmLocalVisualStudioGenerator.cxx, + Source/cmLocalVisualStudioGenerator.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, + Source/cmSetSourceFilesPropertiesCommand.cxx, + Source/cmStandardIncludes.h, Source/cmake.cxx, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, Source/CPack/cpack.cxx, + Source/CTest/cmCTestBuildHandler.cxx, + Source/CTest/cmCTestConfigureCommand.cxx, + Source/CTest/cmCTestHandlerCommand.cxx, + Source/CTest/cmCTestScriptHandler.cxx, + Source/CTest/cmCTestStartCommand.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestUpdateCommand.cxx, + Source/kwsys/CMakeLists.txt, + Source/kwsys/CommandLineArguments.cxx, + Source/kwsys/CommandLineArguments.hxx.in, Source/kwsys/Glob.cxx, + Source/kwsys/ProcessWin32.c, Source/kwsys/Registry.cxx, + Source/kwsys/SystemTools.cxx, Source/kwsys/Terminal.c, + Source/kwsys/kwsys_ios_iostream.h.in, + Source/kwsys/testCommandLineArguments.cxx, + Source/kwsys/testCommandLineArguments1.cxx, + Tests/BundleTest/BundleLib.cxx, Tests/BundleTest/CMakeLists.txt, + Tests/BundleTest/BundleSubDir/CMakeLists.txt, + Tests/CTestTest/test.cmake.in, Tests/CxxOnly/CMakeLists.txt, + Tests/CxxOnly/cxxonly.cxx, Tests/CxxOnly/libcxx1.cxx, + Tests/CxxOnly/libcxx1.h, Tests/CxxOnly/libcxx2.cxx, + Tests/CxxOnly/libcxx2.h, Tests/LoadCommand/CMakeLists.txt, + Tests/LoadCommand/LoadedCommand.cxx.in, + Tests/LoadCommand/CMakeCommands/cmTestCommand.c, + Tests/LoadCommandOneConfig/CMakeLists.txt, + Tests/LoadCommandOneConfig/LoadedCommand.cxx.in, + Tests/LoadCommandOneConfig/CMakeCommands/cmTestCommand.c, + Tests/OutOfSource/simple.cxx, + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt, + Tests/OutOfSource/OutOfSourceSubdir/simple.cxx, + Utilities/cmcurl/Testing/ftpget.c, + Utilities/cmcurl/Testing/ftpgetresp.c, + Utilities/cmcurl/Testing/ftpupload.c, Utilities/cmtar/block.c, + Utilities/cmtar/libtar.c, Utilities/cmtar/compat/strlcpy.c, + Utilities/cmtar/listhash/list.c.in: ENH: move changes from main + tree to release branch + +2006-07-24 09:43 martink + + * Tests/CTestTest/test.cmake.in: ENH: more coverage + +2006-07-24 08:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-23 07:49 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-22 08:11 king + + * Modules/CMakeDetermineCXXCompiler.cmake: BUG: CMAKE_AR should be + advanced. + +2006-07-22 08:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-21 15:43 king + + * Modules/FindwxWidgets.cmake, Modules/FindwxWindows.cmake, + Modules/Use_wxWindows.cmake, Modules/UsewxWidgets.cmake, + Source/CMakeLists.txt: ENH: Applying patch from bug#3443 to + implement FindwxWidgets.cmake properly. It also updates the + UseWX test and WXDialog sources to use the new find script. + +2006-07-21 15:20 king + + * Utilities/Release/config_Darwin: ENH: Do not include experimental + WXDialog in release. + +2006-07-21 15:16 king + + * Modules/readme.txt: ENH: Added documentation about + XXX_FIND_COMPONENTS for FIND_PACKAGE. + +2006-07-21 14:58 martink + + * Source/: cmCTest.cxx, cmake.cxx: ENH: fix color output inside of + ctest runs + +2006-07-21 14:02 martink + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommand/LoadedCommand.cxx.in, + LoadCommandOneConfig/CMakeLists.txt, + LoadCommandOneConfig/LoadedCommand.cxx.in, + LoadCommand/LoadedCommand.cxx, + LoadCommandOneConfig/LoadedCommand.cxx, + LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: BUG: work + around XCode issue + +2006-07-21 13:05 andy + + * Source/cmake.cxx: ENH: Cleanup. Replace c-style cast with + static_cast and replace sprintf with cmOStringStream + +2006-07-21 12:04 king + + * Modules/FindBoost.cmake: ENH: Adding FindBoost.cmake module from + Andrew Maclean. This addresses bug#3447. + +2006-07-21 11:53 king + + * Modules/CMakeDetermineCXXCompiler.cmake, Source/CMakeLists.txt: + BUG: Fixed building of C++-only projects and added a test. + +2006-07-21 11:43 king + + * Tests/CxxOnly/: CMakeLists.txt, cxxonly.cxx, libcxx1.cxx, + libcxx1.h, libcxx2.cxx, libcxx2.h: ENH: Adding C++-only test. + +2006-07-21 10:26 martink + + * Tests/: CTestTest/test.cmake.in, LoadCommand/CMakeLists.txt, + LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: increase + coverage in a couple places + +2006-07-21 08:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-20 09:35 king + + * Source/kwsys/Terminal.c: BUG: Do not display VT100 escapes inside + emacs even if TERM is set to xterm. + +2006-07-20 08:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-19 08:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-18 15:21 king + + * Source/: cmFindBase.cxx, cmFindBase.h, cmFindLibraryCommand.cxx, + cmFindPathCommand.cxx, cmFindProgramCommand.cxx: BUG: If the user + specifies a cache entry on the command line without a type, the + FIND_* commands should add the type and docstring to the given + value and put it back in the cache. + +2006-07-18 13:16 king + + * Modules/readme.txt: STYLE: Added note about singular versus + plural name for XXX_INCLUDE_DIRS. Added XXX_LIBRARY_DIRS and + XXX_YY_INCLUDE_DIR conventions. + +2006-07-18 13:02 king + + * Source/kwsys/kwsys_ios_iostream.h.in: COMP: Fix references to + cin, cout, cerr, and clog in case of HP aCC compiler with -mt + flag. + +2006-07-18 09:32 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalVisualStudioGenerator.cxx: STYLE: fix long lines + +2006-07-18 08:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-17 13:34 king + + * Source/kwsys/ProcessWin32.c: BUG: When handing the child stdin + pipe a file, allow another process to be writing to the file at + the same time. This allows children such as tail -f to function + properly. + +2006-07-17 11:07 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: COMP: fix warning + +2006-07-17 09:15 andy + + * Source/kwsys/testCommandLineArguments1.cxx: COMP: Only delete + once + +2006-07-17 08:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-16 21:11 andy + + * Source/kwsys/: testCommandLineArguments.cxx, + testCommandLineArguments1.cxx: COMP: Remove some warnings + +2006-07-16 08:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-15 08:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-14 15:02 andy + + * Source/kwsys/: CMakeLists.txt, CommandLineArguments.cxx, + CommandLineArguments.hxx.in, testCommandLineArguments.cxx, + testCommandLineArguments1.cxx: ENH: Add a way to get unused + arguments and add a test + +2006-07-14 13:59 andy + + * Source/kwsys/CommandLineArguments.hxx.in: COMP: Remove warning + +2006-07-14 13:32 andy + + * Source/kwsys/: CommandLineArguments.cxx, + CommandLineArguments.hxx.in: ENH: It does not really makes sense + to have Boolean Argument List + +2006-07-14 09:13 andy + + * Source/kwsys/: CMakeLists.txt, CommandLineArguments.cxx, + CommandLineArguments.hxx.in, SystemTools.cxx, + testCommandLineArguments.cxx: ENH: Add support for + multi-arguments: -f arg1 arg2 arg3 ... and support for lists: -f + arg1 -f arg2 -f arg3 ... and for boolean to be stored as strings + and doubles + +2006-07-14 08:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-13 14:03 martink + + * Source/cmMakefileTargetGenerator.cxx: ENH: added progress to + custom commands with comments + +2006-07-13 11:30 andy + + * Utilities/cmtar/listhash/list.c.in: COMP: Remove warning + +2006-07-13 09:26 andy + + * Utilities/cmtar/libtar.c, Utilities/cmtar/compat/strlcpy.c, + Utilities/cmtar/listhash/list.c.in, Source/cmStandardIncludes.h, + Source/kwsys/SystemTools.cxx: COMP: Remove warnings + +2006-07-13 09:13 andy + + * Source/CTest/cmCTestTestHandler.cxx: STYLE: Fix kwstyle + +2006-07-13 09:07 andy + + * Source/kwsys/Registry.cxx: COMP: Remove warnings + +2006-07-13 07:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-12 16:30 andy + + * Source/CTest/: cmCTestBuildHandler.cxx, cmCTestTestHandler.cxx: + ENH: Remove debug + +2006-07-12 16:21 andy + + * Source/kwsys/Registry.cxx: BUG: Fix error conditions + +2006-07-12 14:41 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: COMP: fix old compiler + issue + +2006-07-12 14:15 martink + + * Source/: cmMakefileTargetGenerator.cxx, + cmMakefileTargetGenerator.h: BUG: reduce the number of file + handles kept open + +2006-07-12 13:11 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: added progress for subdir + all targets and fixed compiler waring + +2006-07-12 09:21 andy + + * Source/CTest/cmCTestTestHandler.cxx: STYLE: Remove debug + +2006-07-12 09:20 andy + + * Source/kwsys/CommandLineArguments.cxx, Source/kwsys/Glob.cxx, + Source/kwsys/Registry.cxx, Source/kwsys/SystemTools.cxx, + Utilities/cmtar/block.c, Utilities/cmtar/libtar.c, + Utilities/cmtar/compat/strlcpy.c, + Utilities/cmtar/listhash/list.c.in: COMP: Remove warnings + +2006-07-12 08:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-11 17:10 king + + * Source/cmFindPackageCommand.cxx: ENH: Added creation of + XXX_FIND_COMPONENTS list of all components requested with + REQUIRED option. This addresses the feature request in bug#3494. + +2006-07-11 16:08 andy + + * Source/cmCTest.cxx: COMP: Fix stl string access + +2006-07-11 15:58 andy + + * Source/: cmCTest.cxx, CTest/cmCTestConfigureCommand.cxx, + CTest/cmCTestHandlerCommand.cxx, CTest/cmCTestStartCommand.cxx, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestUpdateCommand.cxx: + BUG: Try to fix the problem of bad test names + +2006-07-11 13:23 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h: ENH: Made + cmLocalVisualStudioGenerator a superclass of + cmLocalVisualStudio6Generator. Implemented object file unique + naming when multiple sources share the same name. + +2006-07-11 11:41 king + + * Source/: CMakeLists.txt, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, + cmLocalVisualStudioGenerator.cxx, cmLocalVisualStudioGenerator.h: + ENH: Moved unique object file name computation from + cmLocalUnixMakefileGenerator3 up to cmLocalGenerator for use by + all generators. Created cmLocalVisualStudioGenerator as + superclass for all VS generators. Implemented on-demand unique + object file name computation for VS 7 generator to avoid slow + compiles when all sources are in subdirectories. + +2006-07-11 11:08 martink + + * Source/cmMakefileTargetGenerator.cxx: ENH: fix compile warning + +2006-07-11 09:55 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmMakefileTargetGenerator.cxx, + cmMakefileTargetGenerator.h: BUG: changed to progress to make it + more flexible and to no relink targets as often + +2006-07-11 07:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-10 07:59 andy + + * Source/CPack/cmCPackGenericGenerator.cxx: COMP: Remove warnings + and style problems + +2006-07-10 07:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-10 07:52 andy + + * Source/: cmMakefileTargetGenerator.cxx, CPack/cpack.cxx: STYLE: + Fix some style errors + +2006-07-09 13:48 andy + + * Utilities/cmcurl/Testing/: ftpget.c, ftpgetresp.c, ftpupload.c: + COMP: Remove errors + +2006-07-09 13:20 andy + + * Modules/CPack.cmake, Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, Source/CPack/cpack.cxx: + ENH: Several cleanups and support for multiple generators + +2006-07-09 13:19 andy + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Add a copy + constructor to copy the values + +2006-07-09 13:18 andy + + * Source/: cmBuildCommand.cxx, cmCTest.cxx: ENH: Pass -C flag to + cmake to generate the apropriate build command + +2006-07-09 07:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-08 07:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-07 13:59 andy + + * Source/CTest/cmCTestScriptHandler.cxx: ENH: Be more verbose + +2006-07-07 09:54 king + + * Tests/OutOfSource/: simple.cxx, OutOfSourceSubdir/CMakeLists.txt, + OutOfSourceSubdir/simple.cxx: ENH: Adding test for multiple + source files with the same name but different full paths. + +2006-07-07 08:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-06 16:05 andy + + * Source/CMakeLists.txt, Tests/BundleTest/CMakeLists.txt, + Tests/BundleTest/BundleSubDir/CMakeLists.txt: ENH: Improve the + test to create a bundle in the subdirectory + +2006-07-06 16:04 andy + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, + cmSetSourceFilesPropertiesCommand.cxx: BUG: Several fixes to + handle bundle content on Mac OSX + +2006-07-06 13:52 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Make the path + change more localized to bundles only + +2006-07-06 11:35 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Revert the change + 1.152 + +2006-07-06 07:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-05 16:27 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx, Source/CMakeLists.txt, + Tests/BundleTest/BundleLib.cxx, Tests/BundleTest/CMakeLists.txt: + BUG: If the source file specified is not in a source tree, do not + use full path to the file + +2006-07-05 16:21 andy + + * Modules/FindOpenGL.cmake: ENH: On apple do not look for X11 + +2006-07-05 10:06 king + + * Source/kwsys/CMakeLists.txt: ENH: Updated installation options + and implementation to use INSTALL command if it is available. + This will allow installation component assignment and separate + installation of the .dll and .lib on windows. + +2006-07-05 08:26 berk + + * Source/kwsys/CMakeLists.txt: ENH: Adding cmake 2.4 style + installation. NOTE: These changes will work on a paraview build + only. This file has to updated to be general + +2006-07-05 07:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-04 11:06 andy + + * Modules/CMakeFortranCompiler.cmake.in: ENH: Merge debian changes. + Support more fortran extensions + +2006-07-04 08:38 alex + + * Modules/FindKDE4.cmake: + ENH: prefer kde4-config over kde-config, since for KDE 4 + kde-config will be renamed to kde-config, and so cmake has to + prefer this one over the old version + + Alex + +2006-07-04 07:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-03 07:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-02 07:30 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-07-01 07:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-30 13:51 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: add EHa option + +2006-06-30 13:50 hoffman + + * Modules/MacroAddFileDependencies.cmake, + Tests/CustomCommand/config.h.in: ENH: add files from main tree + +2006-06-30 13:48 hoffman + + * CMakeLists.txt, ChangeLog.manual, cmake_uninstall.cmake.in, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeDetermineRCCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakeGenericSystem.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, + Modules/CMakeTestFortranCompiler.cmake, Modules/CPack.cmake, + Modules/CTest.cmake, Modules/CheckCSourceCompiles.cmake, + Modules/CheckCXXSourceCompiles.cmake, + Modules/CheckFunctionExists.cmake, Modules/CheckIncludeFile.c.in, + Modules/CheckIncludeFile.cmake, + Modules/CheckIncludeFileCXX.cmake, + Modules/CheckIncludeFiles.cmake, + Modules/CheckLibraryExists.cmake, + Modules/CheckSymbolExists.cmake, Modules/CheckTypeSize.cmake, + Modules/CheckVariableExists.cmake, Modules/FindOpenGL.cmake, + Modules/FindQt4.cmake, Modules/FindSDL_sound.cmake, + Modules/FindThreads.cmake, Modules/FindVTK.cmake, + Modules/FindZLIB.cmake, Modules/KDE3Macros.cmake, + Modules/TestBigEndian.cmake, Modules/TestCXXAcceptsFlag.cmake, + Modules/TestForANSIForScope.cmake, Modules/TestForSSTREAM.cmake, + Modules/TestForSTDNamespace.cmake, Modules/kde3uic.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmAddCustomCommandCommand.h, + Source/cmAddCustomTargetCommand.h, + Source/cmAddSubDirectoryCommand.cxx, Source/cmBuildCommand.cxx, + Source/cmCacheManager.cxx, Source/cmDepends.cxx, + Source/cmDepends.h, Source/cmDependsC.cxx, + Source/cmFileCommand.cxx, Source/cmFileCommand.h, + Source/cmForEachCommand.cxx, Source/cmForEachCommand.h, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalKdevelopGenerator.cxx, + Source/cmGlobalMSYSMakefileGenerator.cxx, + Source/cmGlobalMinGWMakefileGenerator.cxx, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio6Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmIfCommand.cxx, + Source/cmIfCommand.h, Source/cmInstallTargetGenerator.cxx, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMacroCommand.cxx, Source/cmMacroCommand.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, + Source/cmMakefileUtilityTargetGenerator.cxx, + Source/cmMessageCommand.cxx, + Source/cmSetTargetPropertiesCommand.h, Source/cmTarget.cxx, + Source/cmTarget.h, Source/cmTryCompileCommand.cxx, + Source/cmTryRunCommand.cxx, Source/cmWhileCommand.cxx, + Source/cmWhileCommand.h, Source/cmake.cxx, Source/cmake.h, + Source/cmakemain.cxx, Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, + Source/CTest/cmCTestBuildAndTestHandler.cxx, + Source/CTest/cmCTestBuildCommand.cxx, + Source/CursesDialog/form/form.priv.h, + Source/kwsys/CommandLineArguments.cxx, + Source/kwsys/Directory.cxx, Source/kwsys/Directory.hxx.in, + Source/kwsys/Process.h.in, Source/kwsys/ProcessUNIX.c, + Source/kwsys/ProcessWin32.c, Source/kwsys/Terminal.c, + Source/kwsys/kwsysPlatformCxxTests.cmake, + Source/kwsys/testProcess.c, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/CustomCommand/CMakeLists.txt, Tests/CustomCommand/foo.in, + Tests/MakeClean/ToClean/CMakeLists.txt, + Tests/TryCompile/CMakeLists.txt, Tests/Wrapping/Wrap.c, + Tests/Wrapping/fakefluid.cxx, Utilities/cmcurl/CMakeLists.txt, + Utilities/cmcurl/mprintf.c, + Utilities/cmcurl/CMake/CheckTypeSize.cmake, + Utilities/cmtar/CMakeLists.txt, Utilities/cmtar/append.c, + Utilities/cmtar/config.h.in, Utilities/cmtar/extract.c, + Utilities/cmtar/handle.c, Utilities/cmtar/compat/fnmatch.c: ENH: + merge main tree into branch + +2006-06-30 07:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-29 07:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-28 17:00 king + + * Modules/: CheckCSourceCompiles.cmake, + CheckCXXSourceCompiles.cmake: BUG: Make sure try-compile source + ends in a newline. + +2006-06-28 16:16 hoffman + + * Source/CPack/cmCPackGenericGenerator.cxx: ENH: remove cerr output + +2006-06-28 15:15 martink + + * Modules/CTest.cmake: BUG: fix typo + +2006-06-28 07:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-27 14:26 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: COMP: warning fix + +2006-06-27 10:24 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: fix for subdir all + target after control c + +2006-06-27 09:57 hoffman + + * Source/CursesDialog/form/form.priv.h: ENH: fix ia64 build with + aCC + +2006-06-27 09:56 hoffman + + * Source/cmFileCommand.cxx: ENH: fix crash when glob has wrong + number of arguments + +2006-06-27 07:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-26 15:27 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: When using a + working directory for the custom command do not convert paths to + be relative to the build directory. + +2006-06-26 12:06 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for bug 3444, + remove trailing . in lib names + +2006-06-26 11:27 martink + + * Source/cmMakefile.cxx: ENH: fix subdir issue + +2006-06-26 10:57 king + + * Source/cmIfCommand.h: ENH: Clarified documentation of EXISTS and + IS_DIRECTORY modes. + +2006-06-26 09:46 king + + * Utilities/Release/README: BUG: Added missing release steps. + +2006-06-26 07:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-25 15:18 karthik + + * Source/kwsys/CommandLineArguments.cxx: BUG: The operator + precedence is [] followed by *. Calling this method was causing + out of array index segfaults bounds + +2006-06-25 07:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-24 07:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-23 07:08 andy + + * Modules/CTest.cmake: ENH: Default drop method http + +2006-06-22 15:37 andy + + * Source/cmMessageCommand.cxx: ENH: Use CMake's error reporting + mechanism + +2006-06-22 15:31 andy + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: DIsplay the list file + stack when displaying errors + +2006-06-22 10:35 martink + + * Source/: cmake.cxx, kwsys/Directory.cxx, kwsys/Directory.hxx.in: + ENH: add a higher performance method to get the number of files + in a directory + +2006-06-22 08:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-21 07:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-20 13:13 hoffman + + * Source/cmake.cxx: ENH: avoid crash in sprintf + +2006-06-20 09:50 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: fix line length + and warning + +2006-06-19 14:57 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: BUG: Delay + relative path configuration until as late as possible to make + sure the source/binary dir are set. This is a work-around for + lack of a more structured way of creating the global generator. + +2006-06-19 11:34 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: ENH: fix for dependent targets + +2006-06-19 10:07 king + + * Modules/FindOpenGL.cmake: ENH: Do not search for X11 if it is + already found. + +2006-06-19 09:49 king + + * Source/kwsys/ProcessWin32.c: COMP: Fix conversion warning. + +2006-06-18 20:05 hoffman + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: do not use the + link script on windows + +2006-06-18 11:50 king + + * Source/cmMakefileLibraryTargetGenerator.cxx: BUG: Do not write + link script lines that use the ':' command which is supposed to + be a no-op anyway. + +2006-06-18 09:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-17 19:32 king + + * Source/cmMakefileLibraryTargetGenerator.cxx: BUG: Need to use + different link script name when relinking. + +2006-06-17 07:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-16 16:29 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: warning fix + +2006-06-16 15:29 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: cleanup how + progress is reported for individual targets to fix an integer + math issue + +2006-06-16 14:45 andy + + * Modules/: FindQt4.cmake, MacroAddFileDependencies.cmake: ENH: + Updates from KDE + +2006-06-16 14:19 martink + + * Source/cmSetTargetPropertiesCommand.h: ENH: fix line length + +2006-06-16 14:02 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: BUG: fix for bug 3417 + +2006-06-16 07:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-15 21:43 hoffman + + * Modules/CPack.cmake: ENH: add a comment + +2006-06-15 16:42 king + + * Source/cmMakefile.cxx: ENH: Provide access to CMAKE_PATCH_VERSION + in CMake code. + +2006-06-15 16:37 king + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: Pre-install rules + for a target should not have target-level dependencies. Each + target can be re-linked independently as long as the original + targets are up to date. + +2006-06-15 16:17 king + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalMSYSMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator3.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h, + cmake.cxx, cmake.h: ENH: Added generation of link rules into + script files executed by a cmake -E command in order to support + longer link lines. This is needed only on platforms without + response file support and that may have weak shells. + +2006-06-15 14:40 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c, ProcessWin32.c: ENH: + Added Option_Verbatim to run whole command lines directly. + +2006-06-15 11:51 martink + + * Source/: cmGlobalKdevelopGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, cmake.h: ENH: fix linelength + +2006-06-15 10:51 king + + * Source/: cmAddCustomCommandCommand.h, cmAddCustomTargetCommand.h: + BUG: Clarified documentation about custom command outputs and + custom target dependencies. + +2006-06-15 10:24 king + + * Source/cmMakefile.cxx: ENH: Unknown command invocations should be + fatal errors. + +2006-06-15 10:12 king + + * Source/: cmLocalGenerator.cxx, cmSetTargetPropertiesCommand.h, + cmTarget.cxx: ENH: Added target property + INSTALL_RPATH_USE_LINK_PATH to append the linker search path + directories not inside the project to the INSTALL_RPATH + automatically. The property is initialized by the variable + CMAKE_INSTALL_RPATH_USE_LINK_PATH when the target is created. + +2006-06-15 09:45 king + + * Source/cmake.cxx: BUG: Always check dependency integrity whether + or not CMake will re-run because the generator no longer checks + integrity during generation. + +2006-06-15 07:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-14 13:41 hoffman + + * DartConfig.cmake: ENH: handle the fact the public can no longer + do ftp + +2006-06-14 12:28 martink + + * CMakeLists.txt, Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeDetermineRCCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, + Modules/CMakeTestFortranCompiler.cmake, + Modules/CheckCSourceCompiles.cmake, + Modules/CheckCXXSourceCompiles.cmake, + Modules/CheckFunctionExists.cmake, + Modules/CheckIncludeFile.cmake, + Modules/CheckIncludeFileCXX.cmake, + Modules/CheckIncludeFiles.cmake, + Modules/CheckLibraryExists.cmake, + Modules/CheckSymbolExists.cmake, Modules/CheckTypeSize.cmake, + Modules/CheckVariableExists.cmake, Modules/FindQt4.cmake, + Modules/FindSDL_sound.cmake, Modules/FindThreads.cmake, + Modules/TestBigEndian.cmake, Modules/TestCXXAcceptsFlag.cmake, + Modules/TestForANSIForScope.cmake, Modules/TestForSSTREAM.cmake, + Modules/TestForSTDNamespace.cmake, + Modules/Platform/Windows-cl.cmake, Source/cmCacheManager.cxx, + Source/cmGlobalGenerator.cxx, + Source/cmGlobalKdevelopGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmInstallTargetGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, Source/cmMakefile.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmTryCompileCommand.cxx, Source/cmTryRunCommand.cxx, + Source/cmake.h, Source/kwsys/kwsysPlatformCxxTests.cmake, + Tests/MakeClean/ToClean/CMakeLists.txt, + Tests/TryCompile/CMakeLists.txt, Utilities/cmcurl/CMakeLists.txt, + Utilities/cmcurl/CMake/CheckTypeSize.cmake: ENH: centralized + locaiton of CMakeFiles setting + +2006-06-13 10:28 martink + + * CMake.pdf, CMake.rtf: ENH: removed old out of date files, online + and command line help is better + +2006-06-13 09:46 martink + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: fix line length + +2006-06-13 08:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-12 15:44 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalVisualStudio7Generator.cxx: ENH: fix line length + +2006-06-12 14:21 andy + + * Modules/CPack.cmake: ENH: Add support for overwriting the name of + the file CPackConfig.cmake and CPackSourceConfig.cmake + +2006-06-12 13:17 martink + + * Modules/Platform/Windows-cl.cmake: ENH: removed logo info from + the manifest tool + +2006-06-12 13:05 king + + * Source/cmIfCommand.h: BUG: Patch from Miguel A. + Figueroa-Villanueva for fixing documentation. + +2006-06-12 12:18 martink + + * Source/cmMakefileTargetGenerator.cxx: ENH: cleanup + +2006-06-12 11:40 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmMakefileTargetGenerator.cxx, cmake.cxx: ENH: some cleanup to + progress + +2006-06-12 10:22 andy + + * DartConfig.cmake: ENH: Switch to http submission + +2006-06-12 07:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-11 07:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-10 08:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-09 15:49 alex + + * Modules/FindZLIB.cmake: BUG: don't append to ZLIB_NAMES ENH: also + check for zdll on windows ENH: honor REQUIRED and QUIETLY + + Alex + +2006-06-09 13:45 hoffman + + * Source/CPack/: bills-comments.txt, + cmCPackCygwinBinaryGenerator.cxx, cmCPackCygwinBinaryGenerator.h, + cmCPackGenerators.cxx, cmCPackGenericGenerator.cxx, + cmCPackGenericGenerator.h, cygwin.readme: ENH: check in partial + cygwin generator + +2006-06-09 08:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-08 07:49 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-07 08:47 hoffman + + * Source/cmakemain.cxx: ENH: add docs for debug trycompile + +2006-06-06 12:01 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: fix /TP for c code + +2006-06-06 09:39 hoffman + + * Source/cmMakefile.cxx: ENH: fix for replacement of @var @ only + legal variable names should be replaced + +2006-06-06 07:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-05 15:28 king + + * Source/cmAddSubDirectoryCommand.cxx: COMP: Removed unused + variable. + +2006-06-05 14:38 king + + * Source/cmAddSubDirectoryCommand.cxx: BUG: Always check whether a + subdirectory is below the top of the source before computing the + binary tree automatically. Even when the source is a relative + path it may contain ../ which would allow it to be outside the + source tree. + +2006-06-05 14:32 martink + + * Source/: cmDependsC.cxx, cmGlobalUnixMakefileGenerator3.cxx, + cmMakefileTargetGenerator.cxx: ENH: line lengths + +2006-06-05 14:13 king + + * cmake_uninstall.cmake.in: BUG: Use proper signature for + EXEC_PROGRAM to get return value of cmake -E remove. Also fixed + spelling error in message, and made non-existing files not a + fatal error so that the rest of the files are removed. + +2006-06-05 13:45 king + + * Source/: cmFileCommand.cxx, cmFileCommand.h, cmTarget.cxx: ENH: + Changing shared library versioned file names on OSX to conform to + that platform's convention. + +2006-06-05 11:22 king + + * Source/kwsys/Terminal.c: ENH: Added rxvt-unicode and cygwin + terminals for color support. + +2006-06-05 07:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-04 07:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-03 18:43 andy + + * Source/kwsys/Terminal.c: ENH: Handle 'screen' terminal. Thank you + Thomas Z. + +2006-06-03 18:43 andy + + * Source/CPack/cmCPackGenericGenerator.cxx: COMP: Remove warning + +2006-06-03 09:48 king + + * Tests/Wrapping/Wrap.c: COMP: More fixes for non-ANSI C compilers. + +2006-06-03 09:42 king + + * Tests/Wrapping/Wrap.c: COMP: Fix for non-ANSI C compilers. + +2006-06-03 07:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-06-02 12:19 king + + * Tests/Wrapping/: Wrap.c, fakefluid.cxx: BUG: Custom commands + should actually generate the files they claim to generate. + +2006-06-02 11:26 andy + + * Source/CPack/: cmCPackGenericGenerator.cxx, + cmCPackGenericGenerator.h: ENH: Display cmake install information + when in verbose mode + +2006-06-01 15:51 king + + * Source/: cmBuildCommand.cxx, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h, CPack/cmCPackGenericGenerator.cxx, + CTest/cmCTestBuildAndTestHandler.cxx, + CTest/cmCTestBuildCommand.cxx: BUG: cmGlobalGenerator::Build + should not always use the /fast target name because dependency + checking is often required. It now takes an argument specifying + whether to use the /fast target name, and the argument is + currently only true for try-compiles. + +2006-06-01 15:08 king + + * Source/cmInstallTargetGenerator.cxx: BUG: Adjustment of + install_name with install_name_tool should account for DESTDIR + when specifying the file to be changed. + +2006-06-01 14:43 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: Moved generation of the + /fast version of GLOBAL_TARGET targets to the proper place in the + local generator instead of in the global generator. Also made + the install/fast target not depend on the all target. + +2006-06-01 14:09 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: BUG: Added /fast targets in + subdirectory makefiles. Removed bogus INSTALL_*/fast targets. + Also fixed preinstall/fast target. + +2006-06-01 13:01 king + + * Tests/CustomCommand/: CMakeLists.txt, config.h.in, foo.in: ENH: + Added test for generation of files listed explicitly as sources + but not used during the build of a target. + +2006-06-01 11:45 king + + * Source/: cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h, + cmMakefileUtilityTargetGenerator.cxx: BUG: Custom command outputs + listed explicitly as source files in a target should be generated + whether or not an object file in the target needs them. This + useful and makes Makefile builds more consistent with VS IDE + builds. + +2006-06-01 09:38 hoffman + + * Utilities/Release/cmake_release.sh: ENH: change the version + number to match the release for cygwin + +2006-06-01 08:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-31 11:19 martink + + * Source/: cmForEachCommand.cxx, cmIfCommand.cxx, + cmMacroCommand.cxx, cmWhileCommand.cxx: ENH: reduce string + construct delete ops + +2006-05-31 08:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-30 16:23 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: BUG: Fix progress when total + number of source files is less than 100. + +2006-05-30 11:15 king + + * Source/cmake.cxx: BUG: Fixed cmake -E remove return code. + +2006-05-30 08:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-29 08:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-28 07:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-27 07:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-26 07:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-25 14:16 king + + * Modules/CMakeGenericSystem.cmake: ENH: Adding advanced option + CMAKE_COLOR_MAKEFILE for makefile generators with default ON. + +2006-05-25 14:16 king + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: Slight improvement in + genreation time by recording the setting of CMAKE_COLOR_MAKEFILE + in an ivar of each local generator at the beginning of + generation. This avoids many repeated table lookups. + +2006-05-25 11:56 hoffman + + * Modules/FindQt4.cmake: ENH: add qtmain to findqt + +2006-05-25 10:55 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx: BUG: fix to progress for small + projects + +2006-05-25 10:21 martink + + * Modules/CTest.cmake: ENH: remove debugging output + +2006-05-25 09:47 king + + * Source/: cmDepends.cxx, cmDepends.h, cmDependsC.cxx, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmMakefileTargetGenerator.cxx, + cmake.cxx: BUG: Updated Makefile dependency scanning to provide a + full local generator to the dependency scanner to do proper path + conversions. This allows the rules written into the depend.make + files to use the same relative path conversion as those written + into the build.make files. Several previous changes added more + and more information for use by the dependency scanner and it was + converging to having the full local generator anyway. + +2006-05-25 07:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-24 10:13 king + + * Source/kwsys/ProcessUNIX.c: BUG: Do not leak global table of + processes. + +2006-05-24 10:09 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: ENH: fix compiler warnings and + posibly java test + +2006-05-24 07:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-23 15:27 king + + * Source/cmLocalVisualStudio7Generator.cxx: COMP: Added missing + include for isspace. + +2006-05-23 15:01 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Fix parsing of + definitions to support REMOVE_DEFINITIONS. + +2006-05-23 12:51 king + + * Source/cmMakefile.cxx, Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx: BUG: Fix + REMOVE_DEFINITIONS command to not remove substrings. + +2006-05-23 12:38 david.cole + + * Utilities/cmtar/: CMakeLists.txt, append.c, config.h.in, + extract.c, handle.c, compat/fnmatch.c: COMP: Fix warnings on + Borland dashboards... + +2006-05-23 11:48 king + + * Source/kwsys/ProcessUNIX.c: ENH: Re-enabling SIGCHLD handling + implementation with a fix for Cygwin. + +2006-05-23 10:40 king + + * Modules/FindVTK.cmake: ENH: Add ability to find VTK 5 without + user help. + +2006-05-23 09:58 king + + * Source/cmMakefileExecutableTargetGenerator.cxx: BUG: Finished fix + to bug#3229 and bug#3272. + +2006-05-23 09:58 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, cmMakefileTargetGenerator.cxx: + BUG: Fix for spaces in path to build directory with new progress + stuff. + +2006-05-23 09:11 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmMacroCommand.cxx, + cmMacroCommand.h, cmMakefileTargetGenerator.cxx, cmake.cxx: ENH: + always compile progress + +2006-05-23 07:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-22 16:10 martink + + * Source/cmake.cxx: COMP: fix bootstrap + +2006-05-22 16:07 martink + + * Source/cmake.cxx: COMP: fix mac warning + +2006-05-22 15:41 martink + + * Source/cmake.cxx: ENH: part of the progress reporting checkin + +2006-05-22 15:11 king + + * Source/kwsys/ProcessUNIX.c: BUG: Reverting previous change until + it can be fixed on Cygwin. + +2006-05-21 14:06 hoffman + + * Source/cmMakefile.cxx: ENH: fix line length + +2006-05-21 10:28 king + + * Source/kwsys/testProcess.c: ENH: Added test 8 to test + grandchildren running after children exit. + +2006-05-21 10:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-21 10:27 king + + * Source/kwsys/ProcessWin32.c: BUG: Fixed deadlock condition when + grandchildren are running after the children exit. + +2006-05-21 10:26 king + + * Source/kwsys/ProcessUNIX.c: ENH: Implemented handling of SIGCHLD + to detect the termination of immediate children. This allows + grandchildren to remain running after the children exit. + +2006-05-20 18:50 king + + * Source/kwsys/ProcessUNIX.c: ENH: Enabling process tree killing on + Cygwin. + +2006-05-20 08:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-19 16:57 alex + + * Modules/: FindQt4.cmake, KDE3Macros.cmake, kde3uic.cmake: BUG: + kde3: use QT_UIC_EXECUTABLE instead of simply uic BUG: use + qouting for the path to Qt4 moc and uic, should help with paths + with spaces + + Alex + +2006-05-19 15:53 hoffman + + * Utilities/Release/: create-cmake-release.cmake, + dashmacmini2_release.cmake: ENH: release scripts + +2006-05-19 15:51 hoffman + + * Utilities/cmcurl/mprintf.c: ENH: fix for uclibc + +2006-05-19 13:02 hoffman + + * Source/: cmMakefile.cxx, cmTarget.cxx, cmTarget.h: ENH: fix for + vtk 4.4 and other projects that may try to link to a module + +2006-05-19 09:36 martink + + * Source/cmIfCommand.cxx: COMP: fix warning + +2006-05-19 08:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-18 23:24 hoffman + + * Source/: cmake.cxx, cmakemain.cxx: ENH: fix crashes when command + line arguments are not followed by the correct number of + arguments + +2006-05-18 14:35 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: fix issue with + too many fast targets being listed + +2006-05-18 13:50 martink + + * Source/: cmForEachCommand.cxx, cmForEachCommand.h, + cmIfCommand.cxx, cmWhileCommand.cxx, cmWhileCommand.h: ENH: allow + loose loop constructs + +2006-05-18 10:28 king + + * Modules/CheckIncludeFile.c.in: BUG: Fix signature of main to work + on both strict ANSI and non-ANSI C compilers. + +2006-05-18 08:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-17 08:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-16 14:04 hoffman + + * ChangeLog.manual, Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmListCommand.cxx, + Source/cmListCommand.h, Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx: ENH: move changes + from main tree to branch + +2006-05-16 13:41 king + + * Source/cmMakefileExecutableTargetGenerator.cxx: BUG: Added + missing cd command before running executable version symlink + rule. This addresses bug#3229. + +2006-05-16 13:23 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix warning + +2006-05-16 09:54 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: fix rebuild problem with xcode and universal binaries + +2006-05-16 08:42 andy + + * Source/: cmListCommand.cxx, cmListCommand.h: STYLE: Fix style + +2006-05-16 08:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-15 18:05 hoffman + + * ChangeLog.manual, Source/cmDependsFortranParser.h, + Source/cmDependsJavaParser.cxx, Source/cmExprParser.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmListCommand.cxx, Source/cmListCommand.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmQTWrapCPPCommand.h, Source/cmake.cxx, + Tests/CMakeTests/ListTest.cmake.in: ENH: merge from main tree + +2006-05-15 13:47 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: PERF: performance + improvement + +2006-05-15 13:02 andy + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, cmake.cxx: ENH: Add simple + progress reporting during make + +2006-05-15 10:19 martink + + * Source/: cmDependsFortranParser.h, cmDependsJavaParser.cxx, + cmExprParser.cxx, cmLocalUnixMakefileGenerator3.cxx, + cmQTWrapCPPCommand.h: STYLE: fix line length + +2006-05-15 10:14 andy + + * Source/cmListCommand.cxx, Tests/CMakeTests/ListTest.cmake.in: + ENH: Fix INSERT to allow inserting to empty list + +2006-05-15 09:57 andy + + * Source/cmListCommand.cxx, Source/cmListCommand.h, + Tests/CMakeTests/ListTest.cmake.in: ENH: Change REMOVE and + REMOVE_ITEM to REMOVE_AT and REMOVE_ITEM + +2006-05-15 09:25 andy + + * Source/cmListCommand.cxx, Source/cmListCommand.h, + Tests/CMakeTests/ListTest.cmake.in: ENH: Remove some errors, fix + append to work on nonexisting lists + +2006-05-14 20:20 hoffman + + * Modules/CMakeDetermineSystem.cmake: ENH: fix module + +2006-05-14 20:17 hoffman + + * Modules/CMakeDetermineSystem.cmake: ENH: check return value for + uname -p + +2006-05-14 19:17 hoffman + + * Modules/CMakeDetermineSystem.cmake: ENH: move from main tree + handle uname without -p correctly + +2006-05-14 17:42 hoffman + + * Modules/CMakeDetermineSystem.cmake: ENH: check return value for + uname -p + +2006-05-14 15:24 hoffman + + * Utilities/Release/: release_cmake.cmake, + v60n177_aix_release.cmake: ENH: extra path + +2006-05-14 15:22 hoffman + + * CMakeLists.txt, Modules/FindJPEG.cmake, Modules/FindKDE4.cmake, + Modules/FindQt4.cmake, Source/cmGlobalGenerator.cxx, + Source/cmGlobalMSYSMakefileGenerator.h, + Source/cmIncludeDirectoryCommand.cxx, + Source/cmLinkDirectoriesCommand.cxx, + Source/cmLinkLibrariesCommand.cxx, Source/cmListCommand.cxx, + Source/cmListFileCache.cxx, Source/cmLoadCacheCommand.cxx, + Source/cmLoadCommandCommand.h, Source/cmLocalGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmMacroCommand.cxx, Source/cmMakeDepend.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMarkAsAdvancedCommand.cxx, Source/cmMathCommand.h, + Source/cmObject.h, Source/cmOptionCommand.cxx, + Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, + Source/cmOutputRequiredFilesCommand.cxx, + Source/cmProjectCommand.cxx, Source/cmQTWrapCPPCommand.cxx, + Source/cmQTWrapUICommand.cxx, + Source/cmRemoveDefinitionsCommand.cxx, + Source/cmSeparateArgumentsCommand.cxx, + Source/cmSeparateArgumentsCommand.h, + Source/cmSetDirectoryPropertiesCommand.cxx, + Source/cmSetSourceFilesPropertiesCommand.h, + Source/cmSetTargetPropertiesCommand.cxx, + Source/cmSetTargetPropertiesCommand.h, + Source/cmSetTestsPropertiesCommand.cxx, + Source/cmSetTestsPropertiesCommand.h, + Source/cmSiteNameCommand.cxx, Source/cmSourceFile.cxx, + Source/cmSourceFile.h, Source/cmSourceGroupCommand.h, + Source/cmStringCommand.cxx, Source/cmSubdirCommand.cxx, + Source/cmSubdirCommand.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTarget.cxx, Source/cmTarget.h, + Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTryCompileCommand.cxx, Source/cmTryCompileCommand.h, + Source/cmUseMangledMesaCommand.cxx, + Source/cmUtilitySourceCommand.cxx, + Source/cmVTKMakeInstantiatorCommand.cxx, + Source/cmVTKWrapJavaCommand.cxx, + Source/cmVTKWrapPythonCommand.cxx, + Source/cmVTKWrapTclCommand.cxx, Source/cmWin32ProcessExecution.h, + Source/cmWriteFileCommand.cxx, Source/cmXCode21Object.cxx, + Source/cmXCode21Object.h, Source/cmXCodeObject.cxx, + Source/cmXCodeObject.h, Source/cmXMLParser.h, Source/cmake.cxx, + Source/cmake.h, Source/cmakemain.cxx, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackSTGZGenerator.cxx, + Source/CPack/cmCPackTarCompressGenerator.cxx, + Source/CPack/cpack.cxx, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: merge from main + tree + +2006-05-14 09:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-13 12:28 king + + * Source/cmGlobalGenerator.cxx: BUG: Make sure RUN_TESTS target + passes the desired configuration to ctest. + +2006-05-13 08:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-12 14:44 martink + + * Source/CPack/: cmCPackGenericGenerator.cxx, + cmCPackNSISGenerator.cxx, cmCPackPackageMakerGenerator.cxx, + cmCPackSTGZGenerator.cxx, cmCPackTarCompressGenerator.cxx, + cpack.cxx: STYLE: fix line length + +2006-05-12 14:36 martink + + * Source/: cmXCode21Object.cxx, cmXCode21Object.h, + cmXCodeObject.cxx, cmXCodeObject.h, cmXMLParser.h, cmake.cxx, + cmake.h, cmakemain.cxx: STYLE: fix line length + +2006-05-12 14:12 martink + + * Source/: cmTarget.cxx, cmTarget.h, + cmTargetLinkLibrariesCommand.cxx, cmTryCompileCommand.cxx, + cmTryCompileCommand.h, cmUseMangledMesaCommand.cxx, + cmUtilitySourceCommand.cxx, cmVTKMakeInstantiatorCommand.cxx, + cmVTKWrapJavaCommand.cxx, cmVTKWrapPythonCommand.cxx, + cmVTKWrapTclCommand.cxx, cmWin32ProcessExecution.h, + cmWriteFileCommand.cxx: STYLE: fix line length + +2006-05-12 13:53 martink + + * Source/: cmSeparateArgumentsCommand.cxx, + cmSeparateArgumentsCommand.h, + cmSetDirectoryPropertiesCommand.cxx, + cmSetSourceFilesPropertiesCommand.h, + cmSetTargetPropertiesCommand.cxx, cmSetTargetPropertiesCommand.h, + cmSetTestsPropertiesCommand.cxx, cmSetTestsPropertiesCommand.h, + cmSiteNameCommand.cxx, cmSourceFile.cxx, cmSourceFile.h, + cmSourceGroupCommand.h, cmStringCommand.cxx, cmSubdirCommand.cxx, + cmSubdirCommand.h, cmSystemTools.cxx, cmSystemTools.h: STYLE: fix + line length + +2006-05-12 13:44 martink + + * Source/: cmProjectCommand.cxx, cmQTWrapCPPCommand.cxx, + cmQTWrapUICommand.cxx, cmRemoveDefinitionsCommand.cxx: STYLE: fix + line length + +2006-05-12 13:39 martink + + * Source/: cmObject.h, cmOptionCommand.cxx, + cmOrderLinkDirectories.cxx, cmOrderLinkDirectories.h, + cmOutputRequiredFilesCommand.cxx: STYLE: fix line length + +2006-05-12 12:29 martink + + * Source/: cmMacroCommand.cxx, cmMakeDepend.h, cmMakefile.cxx, + cmMakefile.h, cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMarkAsAdvancedCommand.cxx, + cmMathCommand.h: STYLE: fix line length + +2006-05-12 11:56 martink + + * Source/: cmLinkDirectoriesCommand.cxx, + cmLinkLibrariesCommand.cxx, cmListCommand.cxx, + cmListFileCache.cxx, cmLoadCacheCommand.cxx, + cmLoadCommandCommand.h, cmLocalGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: STYLE: fix line length + +2006-05-12 11:03 hoffman + + * CMakeLists.txt: ENH: add the processor to the system name for + cpack + +2006-05-12 10:56 hoffman + + * Modules/FindQt4.cmake: ENH: remove bad quoteed code + +2006-05-12 10:54 king + + * Source/cmIncludeDirectoryCommand.cxx, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: BUG: + INCLUDE_DIRECTORIES should interpret relative path arguments with + respect to the current source directory. + +2006-05-12 10:46 martink + + * Source/: cmGlobalGenerator.cxx, cmGlobalMSYSMakefileGenerator.h: + STYLE: fix line length + +2006-05-12 10:09 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: remove bogus + machine setting + +2006-05-12 09:47 hoffman + + * Modules/FindQt4.cmake: ENH: fix path problem with qt + +2006-05-12 07:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-11 18:32 alex + + * Modules/FindJPEG.cmake: ENH: honor REQUIRED flag + + Alex + +2006-05-11 18:27 alex + + * Modules/FindKDE4.cmake: ENH: use the new FILE(TO_CMAKE_PATH ...) + command instead of regexps BUG: append the kde 4 cmake module + path instead of prepending it + + Alex + +2006-05-11 16:07 hoffman + + * Utilities/Release/: dashmacmini2_release.cmake, + destiny_release.cmake, release_cmake.cmake, release_cmake.sh.in, + vogon_release.cmake: ENH: working package creator + +2006-05-11 16:05 hoffman + + * Source/: cmAddSubDirectoryCommand.cxx, cmExprParser.cxx, + cmExprParserHelper.cxx, cmFLTKWrapUICommand.cxx, + cmFileCommand.cxx, cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalKdevelopGenerator.cxx, cmGlobalMSYSMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.h, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio8Generator.h, + cmGlobalVisualStudio8Win64Generator.cxx, + cmGlobalVisualStudio8Win64Generator.h, + cmGlobalWatcomWMakeGenerator.cxx, cmGlobalXCode21Generator.cxx, + cmGlobalXCode21Generator.h, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h, cmIfCommand.cxx, cmIfCommand.h, + cmIncludeCommand.cxx, cmIncludeDirectoryCommand.cxx, + cmIncludeExternalMSProjectCommand.cxx, + cmIncludeExternalMSProjectCommand.h, + cmIncludeRegularExpressionCommand.cxx, + cmIncludeRegularExpressionCommand.h, cmInstallCommand.h, + cmInstallFilesCommand.cxx, cmInstallGenerator.cxx, + cmInstallGenerator.h, cmInstallProgramsCommand.cxx, + cmInstallTargetGenerator.cxx, cmInstallTargetGenerator.h, + cmInstallTargetsCommand.cxx, cmListCommand.cxx, cmListCommand.h, + CTest/cmCTestBuildHandler.cxx: ENH: merge changes from main tree + +2006-05-11 15:50 hoffman + + * Source/cmFileCommand.cxx: ENH: fix error message + +2006-05-11 15:50 martink + + * Source/: cmIfCommand.cxx, cmIfCommand.h, cmIncludeCommand.cxx, + cmIncludeDirectoryCommand.cxx, + cmIncludeExternalMSProjectCommand.cxx, + cmIncludeExternalMSProjectCommand.h, + cmIncludeRegularExpressionCommand.cxx, + cmIncludeRegularExpressionCommand.h, cmInstallCommand.h, + cmInstallFilesCommand.cxx, cmInstallGenerator.cxx, + cmInstallGenerator.h, cmInstallProgramsCommand.cxx, + cmInstallProgramsCommand.h, cmInstallTargetGenerator.cxx, + cmInstallTargetGenerator.h, cmInstallTargetsCommand.cxx: STYLE: + fix line length + +2006-05-11 15:39 martink + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + STYLE: fix line length + +2006-05-11 13:56 andy + + * Source/: cmListCommand.cxx, cmListCommand.h: ENH: Some + documentation and add APPEND + +2006-05-11 12:00 andy + + * Source/CTest/cmCTestBuildHandler.cxx: BUG: Fix segfault + +2006-05-11 11:47 martink + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio8Generator.h, + cmGlobalVisualStudio8Win64Generator.cxx, + cmGlobalVisualStudio8Win64Generator.h, + cmGlobalWatcomWMakeGenerator.cxx, cmGlobalXCode21Generator.cxx, + cmGlobalXCode21Generator.h, cmGlobalXCodeGenerator.cxx: STYLE: + fix line length + +2006-05-11 10:56 hoffman + + * ChangeLog.manual, Modules/FindQt4.cmake: ENH: merge changs from + main tree + +2006-05-11 10:45 martink + + * Source/: cmExprParser.cxx, cmExprParserHelper.cxx, + cmFLTKWrapUICommand.cxx: STYLE: fix line length + +2006-05-11 10:41 hoffman + + * Modules/FindQt4.cmake: ENH: fix for bug 3216 allow full path to + qt input files + +2006-05-11 10:39 martink + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalKdevelopGenerator.cxx, cmGlobalMSYSMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.h, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, cmAddSubDirectoryCommand.cxx: + STYLE: fix line length + +2006-05-11 10:33 hoffman + + * ChangeLog.manual, Source/CPack/cmCPackZIPGenerator.cxx: ENH: + merge changes from main tree + +2006-05-11 09:37 hoffman + + * Source/CPack/cmCPackZIPGenerator.cxx: ENH: use @ file for winzip + on windows + +2006-05-11 08:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-10 22:15 hoffman + + * CMakeLists.txt, Modules/CPack.cmake, + Modules/NSIS.InstallOptions.ini.in, Modules/NSIS.template.in, + Source/cmAddExecutableCommand.cxx, + Source/cmAddSubDirectoryCommand.cxx, Source/cmAddTestCommand.cxx, + Source/cmAuxSourceDirectoryCommand.cxx, + Source/cmAuxSourceDirectoryCommand.h, Source/cmCTest.cxx, + Source/cmCacheManager.cxx, Source/cmCommandArgumentLexer.cxx, + Source/cmCommandArgumentParser.cxx, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmCommandArgumentParserTokens.h, + Source/cmConfigureFileCommand.cxx, + Source/cmCreateTestSourceList.h, Source/cmDepends.cxx, + Source/cmDepends.h, Source/cmDependsC.cxx, + Source/cmDependsFortran.cxx, Source/cmDependsFortranParser.cxx, + Source/cmDependsJavaParserHelper.cxx, + Source/cmDependsJavaParserHelper.h, Source/cmDocumentation.cxx, + Source/cmDumpDocumentation.cxx, Source/cmElseCommand.cxx, + Source/cmEnableLanguageCommand.cxx, + Source/cmEndForEachCommand.cxx, Source/cmEndIfCommand.cxx, + Source/cmEndWhileCommand.cxx, Source/cmExecProgramCommand.cxx, + Source/cmExecuteProcessCommand.cxx, + Source/cmExecuteProcessCommand.h, + Source/cmExportLibraryDependencies.cxx, + Source/cmExportLibraryDependencies.h, Source/cmExprLexer.cxx, + Source/cmExprLexer.h, Source/cmFLTKWrapUICommand.cxx, + Source/cmFileCommand.cxx, Source/cmFileCommand.h, + Source/cmFileTimeComparison.cxx, Source/cmFindBase.cxx, + Source/cmFindFileCommand.cxx, Source/cmFindLibraryCommand.cxx, + Source/cmFindPackageCommand.cxx, Source/cmFindPathCommand.cxx, + Source/cmFindProgramCommand.cxx, Source/cmForEachCommand.cxx, + Source/cmGeneratedFileStream.cxx, + Source/cmGetDirectoryPropertyCommand.cxx, + Source/cmGetFilenameComponentCommand.cxx, + Source/cmGetFilenameComponentCommand.h, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.cxx, Source/CPack/cpack.cxx, + Source/CTest/cmCTestGenericHandler.cxx, + Source/CTest/cmCTestHandlerCommand.cxx, + Source/CTest/cmCTestReadCustomFilesCommand.h, + Source/CTest/cmCTestScriptHandler.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestUpdateCommand.cxx: ENH: move changes from + main tree + +2006-05-10 17:26 andy + + * CMakeLists.txt, Modules/CPack.cmake: BUG: Prevent stripping of + sources + +2006-05-10 16:44 hoffman + + * Utilities/Release/create-cmake-release.cmake: ENH: remove ps + thing + +2006-05-10 16:43 hoffman + + * Utilities/Release/: create-cmake-release.cmake, + vogon_release.cmake: ENH: it works + +2006-05-10 15:56 martink + + * Source/: cmGeneratedFileStream.cxx, + cmGetDirectoryPropertyCommand.cxx, + cmGetFilenameComponentCommand.cxx, + cmGetFilenameComponentCommand.h, + cmGetSourceFilePropertyCommand.h, + cmGlobalBorlandMakefileGenerator.cxx: STYLE: fix line length + +2006-05-10 15:46 martink + + * Source/: cmFLTKWrapUICommand.cxx, cmFileCommand.cxx, + cmFileCommand.h, cmFileTimeComparison.cxx, cmFindBase.cxx, + cmFindFileCommand.cxx, cmFindLibraryCommand.cxx, + cmFindPackageCommand.cxx, cmFindPathCommand.cxx, + cmFindProgramCommand.cxx, cmForEachCommand.cxx: STYLE: fix line + length + +2006-05-10 15:29 hoffman + + * Utilities/Release/vogon_release.cmake: ENH: add vogon + +2006-05-10 15:06 martink + + * Source/: cmElseCommand.cxx, cmEnableLanguageCommand.cxx, + cmEndForEachCommand.cxx, cmEndIfCommand.cxx, + cmEndWhileCommand.cxx, cmExecProgramCommand.cxx, + cmExecuteProcessCommand.cxx, cmExecuteProcessCommand.h, + cmExportLibraryDependencies.cxx, cmExportLibraryDependencies.h, + cmExprLexer.cxx, cmExprLexer.h: STYLE: fix line length + +2006-05-10 15:01 martink + + * Source/: cmDependsJavaParserHelper.cxx, + cmDependsJavaParserHelper.h, cmDocumentation.cxx, + cmDumpDocumentation.cxx: STYLE: fix line length + +2006-05-10 14:54 martink + + * Source/: cmDepends.h, cmDependsC.cxx, cmDependsFortran.cxx, + cmDependsFortranParser.cxx: STYLE: fix line length + +2006-05-10 14:13 martink + + * Source/: cmCommandArgumentParser.cxx, + cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserTokens.h, cmConfigureFileCommand.cxx, + cmCreateTestSourceList.h, cmDepends.cxx: STYLE: fix line length + +2006-05-10 14:07 martink + + * Source/cmCommandArgumentLexer.cxx: STYLE: hmm + +2006-05-10 14:03 hoffman + + * Utilities/Release/: create-cmake-release.cmake, + dashsgi1_release.cmake, dashsgi1_release64.cmake, + release_cmake.sh.in: ENH: + +2006-05-10 14:00 martink + + * Source/cmCommandArgumentLexer.cxx: STYLE: hmm + +2006-05-10 13:56 martink + + * Source/: cmAuxSourceDirectoryCommand.h, cmCTest.cxx, + cmCacheManager.cxx: STYLE: fix line length + +2006-05-10 13:48 martink + + * Source/: CTest/cmCTestGenericHandler.cxx, + CTest/cmCTestHandlerCommand.cxx, + CTest/cmCTestReadCustomFilesCommand.h, + CTest/cmCTestScriptHandler.cxx, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestUpdateCommand.cxx, cmAddExecutableCommand.cxx, + cmAddSubDirectoryCommand.cxx, cmAddTestCommand.cxx, + cmAuxSourceDirectoryCommand.cxx: STYLE: fix line length + +2006-05-10 12:39 andy + + * Source/CPack/: cmCPackGenericGenerator.cxx, cpack.cxx: BUG: Fix + relative path to config file, fix cmake_install.cmake location + problem + +2006-05-10 12:15 hoffman + + * Modules/: NSIS.InstallOptions.ini.in, NSIS.template.in: ENH: use + radio buttons to choose PATH options + +2006-05-10 09:28 hoffman + + * CMakeLists.txt: ENH: allow package name to be changed from cmake + cache + +2006-05-10 09:15 hoffman + + * CMakeLists.txt: ENH: allow for cpack stuff to be changed + +2006-05-10 07:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-09 17:18 hoffman + + * Utilities/Release/: dashsun1_release.cmake, release_cmake.cmake, + v60n177_aix_release.cmake: ENH: works + +2006-05-09 16:30 hoffman + + * ChangeLog.manual, Modules/FindQt3.cmake, + Modules/NSIS.template.in, Source/cmSetTargetPropertiesCommand.h, + Source/kwsys/SystemTools.cxx, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: merge from main + tree + +2006-05-09 14:14 hoffman + + * Utilities/Release/: create-cmake-release.cmake, + release_cmake.cmake: ENH: seems to be working + +2006-05-09 13:49 hoffman + + * Utilities/Release/create-cmake-release.cmake: ENH: add a xterm + script create script + +2006-05-09 13:48 hoffman + + * Utilities/Release/: dashsun1_release.cmake, muse_release64.cmake, + release_cmake.cmake, release_cmake.sh.in: ENH: add 64 bit sgi + +2006-05-09 12:23 hoffman + + * Utilities/Release/release_cmake.sh.in: ENH: mark time + +2006-05-09 12:23 andy + + * Utilities/Release/v60n177_aix_release.cmake: ENH: copy right + files + +2006-05-09 08:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-08 16:59 hoffman + + * Utilities/Release/: dashmacmini2_release.cmake, + dashsun1_release.cmake, destiny_release.cmake, + muse_release.cmake, v60n177_aix_release.cmake: ENH: skip + bootstrap test as it already does a bootstrap + +2006-05-08 16:50 hoffman + + * Utilities/Release/: dashmacmini2_release.cmake, + destiny_release.cmake, hythloth_release.cmake, + muse_release.cmake, release_cmake.cmake, + v60n177_aix_release.cmake: ENH: change name to MAKE_COMMAND + +2006-05-08 16:40 hoffman + + * Source/cmSetTargetPropertiesCommand.h: ENH: fix docs to include + linker lang + +2006-05-08 16:38 andy + + * Utilities/Release/release_cmake.cmake: ENH: add extra copy for + ibm + +2006-05-08 16:36 hoffman + + * Utilities/Release/: dashmacmini2_release.cmake, + destiny_release.cmake, hythloth_release.cmake, + muse_release.cmake, release_cmake.cmake, release_cmake.sh.in, + v60n177_aix_release.cmake: ENH: add make program stuff + +2006-05-08 14:18 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: search for program without + extensions + +2006-05-08 13:34 andy + + * Modules/NSIS.template.in: ENH: Some cleanups and fix installing + as a non-admin + +2006-05-08 10:02 king + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: BUG: Disabling an + EXECUTE_PROCESS test until problems on UNIX systems are fixed. + +2006-05-07 13:04 hoffman + + * Modules/FindQt3.cmake: ENH: try to find qt3 better + +2006-05-07 10:55 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CPack.STGZ_Header.sh.in, Modules/FindQt4.cmake, + Modules/Platform/CYGWIN.cmake, Modules/Platform/SunOS.cmake, + Modules/Platform/Windows-cl.cmake, Source/CMakeLists.txt, + Source/cmCommandArgumentParserHelper.cxx, Source/cmDepends.h, + Source/cmDependsC.cxx, Source/cmFileCommand.cxx, + Source/cmGlobalGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio71Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmIncludeExternalMSProjectCommand.cxx, + Source/cmInstallCommand.cxx, Source/cmInstallCommand.h, + Source/cmInstallFilesGenerator.cxx, + Source/cmInstallFilesGenerator.h, Source/cmInstallGenerator.cxx, + Source/cmInstallGenerator.h, Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/cmSourceFile.cxx, Source/cmSourceFile.h, + Source/cmSourceGroupCommand.h, Source/cmTarget.cxx, + Source/CPack/cmCPackGenerators.cxx, + Source/CPack/cmCPackGenerators.h, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackSTGZGenerator.cxx, + Source/CPack/cmCPackTGZGenerator.cxx, + Source/CPack/cmCPackTGZGenerator.h, + Source/CPack/cmCPackTarBZip2Generator.cxx, + Source/CPack/cmCPackTarBZip2Generator.h, + Source/CPack/cmCPackTarCompressGenerator.cxx, + Source/CPack/cmCPackTarCompressGenerator.h, + Source/CPack/cmCPackZIPGenerator.cxx, Source/CPack/cpack.cxx, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in, + Tests/COnly/conly.c, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt, + Utilities/Release/cmake_release.sh.in: ENH: move changes from + main tree and change version to 2.4.2 + +2006-05-07 09:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-06 10:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-05 22:04 hoffman + + * Utilities/Release/: release_cmake.sh.in, + v60n177_aix_release.cmake: ENH: add extra copy for aix + +2006-05-05 21:49 hoffman + + * Modules/Platform/CYGWIN.cmake: ENH: add the flag for creating + windows gui's + +2006-05-05 21:45 hoffman + + * Source/cmCommandArgumentParserHelper.cxx: ENH: handle empty + variables + +2006-05-05 20:54 king + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio8Generator.h: BUG: MSVC* variables should be + set in IDE generators instead of just NMake. + +2006-05-05 16:12 andy + + * Utilities/Release/v60n177_aix_release.cmake: ENH: use a directory + with space + +2006-05-05 15:51 hoffman + + * Utilities/Release/: release_cmake.cmake, release_cmake.sh.in: + ENH: make release directory a variable + +2006-05-05 15:04 hoffman + + * Modules/FindQt4.cmake: ENH: fix windows path issue + +2006-05-05 14:57 king + + * Source/cmFileCommand.cxx, Source/cmInstallCommand.cxx, + Source/cmInstallCommand.h, Source/cmInstallFilesGenerator.cxx, + Source/cmInstallFilesGenerator.h, Source/cmInstallGenerator.cxx, + Source/cmInstallGenerator.h, Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, Source/cmLocalGenerator.cxx, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Added CONFIGURATIONS + option to INSTALL command to allow per-configuration install + rules. + +2006-05-05 14:53 andy + + * Utilities/Release/: release_cmake.sh.in, + v60n177_aix_release.cmake: ENH: fix env vars + +2006-05-05 13:52 hoffman + + * Utilities/Release/release_cmake.sh.in: ENH: add ability to set + CC, CXX and LDFLAGS + +2006-05-05 13:10 hoffman + + * Utilities/Release/release_cmake.cmake: ENH: move from tr to cat + since it works from a windows machine and works on the AIX + +2006-05-05 12:49 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-05 12:34 hoffman + + * Utilities/Release/: release_cmake.cmake, release_cmake.sh.in: + ENH: add missing quote and some comments + +2006-05-05 12:25 hoffman + + * Utilities/Release/: release_cmake.cmake, release_cmake.sh.in: + ENH: remove old copy + +2006-05-05 12:14 hoffman + + * Utilities/Release/: destiny_release.cmake, release_cmake.cmake, + release_cmake.sh.in: ENH: working on hp + +2006-05-05 11:51 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Adding COMPONENT option to + an INSTALL command call to smoke-test it. + +2006-05-05 11:46 king + + * Source/: cmSourceFile.cxx, cmSourceFile.h, cmTarget.cxx: ENH: + Added information about target needing a source file when one + cannot be found. + +2006-05-05 11:37 king + + * Source/cmSourceGroupCommand.h: ENH: Added example of sub-group to + docs. + +2006-05-05 10:38 king + + * Source/cmFileCommand.cxx: ENH: Added option to not use + copy-if-different when installing. + +2006-05-05 10:33 hoffman + + * Utilities/Release/: release_cmake.cmake: ENH: create script is + working + +2006-05-05 10:30 hoffman + + * Utilities/Release/: release_cmake.cmake, release_cmake.sh.in: + ENH: create script is working + +2006-05-05 10:29 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Added + always/if-different option to CopyADirectory. Added CopyAFile + with the same interface. + +2006-05-05 08:16 hoffman + + * Utilities/Release/release_cmake.cmake: ENH: change to script mode + +2006-05-04 22:58 hoffman + + * Utilities/Release/: release_cmake.sh.in: ENH: add file + +2006-05-04 21:57 hoffman + + * Utilities/Release/: destiny_release.cmake, muse_release.cmake: + ENH: add some machines + +2006-05-04 17:54 hoffman + + * Source/cmMakefile.cxx: ENH: add a check to make sure targets only + link to libraries and not utility targets to avoid seg faults, + bug 3194 + +2006-05-04 13:39 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: remove debug + output + +2006-05-04 13:35 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx, Tests/COnly/conly.c: + ENH: fix build c stuff with c and c++ with c++ + +2006-05-04 10:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-03 23:03 hoffman + + * Source/cmIncludeExternalMSProjectCommand.cxx: ENH: make sure path + is converted to unix + +2006-05-03 21:42 andy + + * Source/: CMakeLists.txt, CPack/cmCPackGenerators.cxx, + CPack/cmCPackTarBZip2Generator.cxx, + CPack/cmCPackTarBZip2Generator.h, CPack/cpack.cxx: ENH: Add BZip2 + support, add better documentation + +2006-05-03 17:27 hoffman + + * Utilities/Release/release_cmake.cmake: ENH: add cvs command + variable + +2006-05-03 17:22 hoffman + + * Utilities/Release/: release_cmake.cmake, + v60n177_aix_release.cmake: ENH: more aix stuff + +2006-05-03 17:08 hoffman + + * Utilities/Release/: release_cmake.cmake, + v60n177_aix_release.cmake: ENH: add aix + +2006-05-03 16:24 andy + + * Modules/CPack.STGZ_Header.sh.in: ENH: Better output + +2006-05-03 15:17 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: use SHELL var + +2006-05-03 15:17 martink + + * Source/CPack/cmCPackGenericGenerator.cxx: BUG: fix CPack to use + correct paths + +2006-05-03 10:07 king + + * Source/: cmDepends.h, cmDependsC.cxx, + cmLocalUnixMakefileGenerator3.cxx: BUG: Fix to avoid repeated + calls to CollapseFullPath during dependency scanning. This + addresses bug#3191. + +2006-05-03 09:23 hoffman + + * Modules/Platform/SunOS.cmake: ENH: use correct flags for + optimization + +2006-05-03 08:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-02 23:20 hoffman + + * Utilities/Release/: dashmacmini2_release.cmake, + dashsun1_release.cmake, hythloth_release.cmake, + release_cmake.cmake: ENH: getting better + +2006-05-02 18:47 andy + + * Source/CPack/cmCPackTGZGenerator.cxx: COMP: Fix cast to char* + +2006-05-02 18:43 andy + + * Source/CPack/cmCPackTarCompressGenerator.cxx: COMP: Try to fix + windows builds + +2006-05-02 17:52 andy + + * Source/CPack/: cmCPackGenerators.cxx, cmCPackGenerators.h, + cpack.cxx: ENH: Add generators documentation + +2006-05-02 17:34 andy + + * Source/CPack/: cmCPackTGZGenerator.cxx, cmCPackTGZGenerator.h, + cmCPackTarCompressGenerator.cxx, cmCPackTarCompressGenerator.h: + ENH: Simplify TarCompress to only require compress. Use cmake's + tar + +2006-05-02 17:07 andy + + * Source/: CMakeLists.txt, CPack/cmCPackGenerators.cxx, + CPack/cmCPackTarCompressGenerator.cxx, + CPack/cmCPackTarCompressGenerator.h: ENH: Initial cut at + TarCompress generator + +2006-05-02 16:41 hoffman + + * Utilities/Release/release_cmake.cmake: ENH: remove debug + +2006-05-02 16:41 hoffman + + * Utilities/Release/: cmake_login, release_cmake.cmake: ENH: more + stuff + +2006-05-02 16:33 hoffman + + * Utilities/Release/release_cmake.cmake: ENH: remove if0 + +2006-05-02 16:32 hoffman + + * Utilities/Release/: dashsun1_release.cmake, + hythloth_release.cmake, release_cmake.cmake: ENH: first pass at + cmake scripts to create the cmake release + +2006-05-02 14:04 hoffman + + * Modules/FindQt4.cmake: ENH: fix qt version detection + +2006-05-02 13:31 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: add a fast version + for preinstall + +2006-05-02 12:44 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: need to make sure + paths are OK + +2006-05-02 12:40 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: need to make sure + paths are OK + +2006-05-02 10:48 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: fix for unix + +2006-05-02 09:56 martink + + * Source/cmGlobalGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Modules/CMakeDetermineCCompiler.cmake, + Modules/Platform/Windows-cl.cmake: ENH: Makefile performance + improvements + +2006-05-02 08:49 andy + + * CMakeLists.txt, Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackSTGZGenerator.cxx, + Source/CPack/cmCPackZIPGenerator.cxx: ENH: Add support for + stipping and make more things overwritable + +2006-05-02 08:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-05-01 22:40 hoffman + + * Utilities/Release/cmake_release.sh: ENH: try again + +2006-05-01 22:31 hoffman + + * Utilities/Release/cmake_release.sh: ENH: try to call cpack from + script + +2006-05-01 14:23 andy + + * Modules/CPack.STGZ_Header.sh.in, + Source/CPack/cmCPackSTGZGenerator.cxx: ENH: Add license and make + it more verbose + +2006-05-01 08:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-30 10:59 hoffman + + * CMakeLists.txt, Copyright.txt, Modules/CPack.cmake, + Modules/NSIS.InstallOptions.ini.in, Modules/NSIS.template.in, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CTest/cmCTestGenericHandler.cxx, + Source/CTest/cmCTestScriptHandler.cxx, + Source/CTest/cmCTestScriptHandler.h: ENH: move files from main + tree to 2.4.1 + +2006-04-30 08:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-30 03:16 andy + + * Source/CTest/cmCTestGenericHandler.cxx: BUG: Make handle + arguments work again + +2006-04-30 03:10 andy + + * Modules/NSIS.template.in: ENH: Handle the no-icon case + +2006-04-29 20:13 andy + + * Source/CTest/: cmCTestScriptHandler.cxx, cmCTestScriptHandler.h: + ENH: Allow CTEST_UPDATE_COMMAND and fix the comments. This should + allow SVN update too, maybe + +2006-04-29 20:03 andy + + * Copyright.txt: ENH: Acknowledge NAMIC + +2006-04-29 20:01 andy + + * CMakeLists.txt, Modules/CPack.cmake, Modules/NSIS.template.in: + ENH: Add more install registry options + +2006-04-29 19:22 andy + + * CMakeLists.txt, Modules/NSIS.InstallOptions.ini.in, + Modules/NSIS.template.in, Source/CPack/cmCPackNSISGenerator.cxx: + ENH: Add NSIS options page for path selection, fix adding and + removing from path, add welcome page and license page + +2006-04-29 11:49 hoffman + + * CMakeLists.txt, CTestConfig.cmake, ChangeLog.manual, + Modules/CTest.cmake, Modules/FindQt4.cmake, + Modules/NSIS.template.in, Source/cmCTest.cxx, Source/cmCTest.h, + Source/cmMakefile.cxx, Source/cmVersion.cxx, Source/ctest.cxx, + Source/CTest/cmCTestBuildHandler.cxx, + Source/CTest/cmCTestGenericHandler.cxx, + Source/CTest/cmCTestGenericHandler.h, + Source/CTest/cmCTestStartCommand.cxx, + Source/CTest/cmCTestStartCommand.h, + Source/CTest/cmCTestSubmitHandler.cxx, + Source/kwsys/DynamicLoader.cxx, Source/kwsys/SystemTools.cxx, + Templates/CTestScript.cmake.in: ENH: merge in changes from main + tree and change version to 2.4.1-beta + +2006-04-29 08:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-28 11:59 andy + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx, + CTest/cmCTestGenericHandler.cxx, CTest/cmCTestGenericHandler.h, + CTest/cmCTestStartCommand.cxx, CTest/cmCTestStartCommand.h, + CTest/cmCTestSubmitHandler.cxx: ENH: Add support for special + tracks, fix options of handlers so that the -R, -U, and so on + work in the new style scripting + +2006-04-28 11:58 andy + + * CTestConfig.cmake: ENH: Add XMLRPC support + +2006-04-28 11:58 andy + + * CMakeLists.txt, Templates/CTestScript.cmake.in: ENH: Add template + of ctest script + +2006-04-28 09:58 andy + + * Modules/CTest.cmake: ENH: Allow overwriting CTestConfig.cmake + items + +2006-04-28 08:59 hoffman + + * ChangeLog.manual, Docs/cmake-mode.el, + Modules/CheckCSourceCompiles.cmake, + Modules/CheckCXXSourceCompiles.cmake, Modules/FindQt4.cmake, + Modules/UseQt4.cmake, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalKdevelopGenerator.cxx, + Source/cmGlobalMSYSMakefileGenerator.cxx, + Source/cmGlobalMinGWMakefileGenerator.cxx, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalWatcomWMakeGenerator.cxx, + Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmMakefileTargetGenerator.cxx, Source/cmTest.cxx, + Source/cmake.cxx, Source/cmake.h, Source/kwsys/CMakeLists.txt, + Source/kwsys/SystemTools.cxx, Source/kwsys/Terminal.c, + Source/kwsys/Terminal.h.in, Source/kwsys/testTerminal.c: ENH: + merge changes from main tree + +2006-04-28 08:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-27 17:52 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: put the fix back in with abort + +2006-04-27 17:46 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: remove code that does not + compile, on windows cwd must exist + +2006-04-27 16:20 andy + + * Modules/NSIS.template.in: ENH: Better support for adding and + removing path + +2006-04-27 16:02 mrichardson + + * Source/kwsys/SystemTools.cxx: COMP: Fixing the the build for + windows. + +2006-04-27 15:48 hoffman + + * Source/kwsys/DynamicLoader.cxx: ENH: remove warning + +2006-04-27 15:26 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: handle running from a + directory that has been deleted + +2006-04-27 15:23 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Fix problem with + Source Lines and add debugging of regular expressions + +2006-04-27 15:14 alex + + * Modules/FindQt4.cmake: ENH: use the ADD_FILE_DEPENDENCIES() macro + coming with cmake instead a duplicated implementation + _qt4_add_file_dependencies() here + + Alex + +2006-04-27 15:07 alex + + * Modules/: FindQt4.cmake, UseQt4.cmake: ENH: -apply the patches by + Clinton Stimpson and Kenneth Moreland which fix some QtMain + issues on Windows ENH: -sync with KDE svn FindQt4, which features + a lot of enhancements + + Alex + +2006-04-27 10:55 andy + + * Modules/: CheckCSourceCompiles.cmake, + CheckCXXSourceCompiles.cmake: BUG: Use the extra definicions + +2006-04-27 10:41 king + + * Source/cmMakefileTargetGenerator.cxx: BUG: Make sure each + cmake_depends process uses the same SystemTools path translation + table as the original process. This addresses problems with + dependency scanning when make is run from a symlink directory + pointing at the original binary tree. + +2006-04-27 08:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-26 21:53 king + + * Source/: cmLocalUnixMakefileGenerator3.cxx, cmake.cxx: COMP: + Disable color support for bootstrap. + +2006-04-26 21:51 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Default SHELL on + windows should not be a hard-coded path. + +2006-04-26 21:31 king + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalKdevelopGenerator.cxx, cmGlobalMSYSMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalWatcomWMakeGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, cmake.cxx, cmake.h: ENH: + Enabling color makefile support using cmsysTerminal_cfprintf. + Support for color is automatically detected when messages are + printed. Also made color scheme more readable on both black and + white backgrounds. This option can be enabled by setting + CMAKE_COLOR_MAKEFILE to true in the project. + +2006-04-26 15:54 king + + * Docs/cmake-mode.el: BUG: In example .emacs code use \' for + end-of-string instead of $ for end-of-line. + +2006-04-26 14:28 king + + * Docs/cmake-mode.el: BUG: Mode should only be used if + CMakeLists.txt is at the end of the buffer name. + +2006-04-26 14:22 king + + * Docs/cmake-mode.el: BUG: Tabs around a function name are allowed. + +2006-04-26 13:04 king + + * Docs/cmake-mode.el: ENH: Using suggestion from Stuart Herring to + avoid needing a list of command names in the highlighting table. + +2006-04-26 08:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-25 16:31 hoffman + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: fix global help + +2006-04-25 12:09 hoffman + + * CMakeLists.txt, ChangeLog.manual, Docs/cmake-indent.vim, + Modules/CPack.cmake, Modules/CTest.cmake, Modules/FindQt3.cmake, + Modules/NSIS.template.in, Modules/UseEcos.cmake, + Source/CMakeLists.txt, Source/cmGlobalKdevelopGenerator.cxx, + Source/kwsys/SystemTools.cxx, Tests/Java/CMakeLists.txt: ENH: + move from main tree to 2.4 branch + +2006-04-25 11:58 hoffman + + * Source/cmLocalGenerator.cxx: ENH: make sure special vs ide path + is only used for msvc_ide builds + +2006-04-25 11:52 king + + * Docs/cmake-mode.el: ENH: Cleaned-up mode in preparation for + inclusion in emacs upstream. + +2006-04-25 09:54 king + + * Source/cmLocalGenerator.cxx: ENH: Added option + CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE to put all in-project + include directories before all out-of-project include + directories. + +2006-04-25 09:54 king + + * Source/kwsys/SystemTools.cxx: BUG: IsSubDirectory should use + ComparePath to do platform-independent path comparison. + +2006-04-25 09:38 hoffman + + * Source/: cmGlobalVisualStudio7Generator.cxx, + cmLocalGenerator.cxx: ENH: add special windows + CMAKE_MSVCIDE_RUN_PATH variable for adding to the path of vs IDE + for running custom commands from cmake + +2006-04-25 08:34 hoffman + + * Source/cmTest.cxx: ENH: make sure command is unix style as it may + have been sent into cmake as a windows path + +2006-04-25 08:33 hoffman + + * Source/kwsys/Terminal.h.in: ENH: fix build on AIX + +2006-04-25 08:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-24 12:15 king + + * Source/kwsys/CMakeLists.txt: ENH: Enabling build/test of Terminal + code now that it has been manually tested on several platforms. + +2006-04-24 12:12 hoffman + + * Source/cmFLTKWrapUICommand.cxx: ENH: fix fltk fluid order of + build + +2006-04-24 11:30 hoffman + + * Source/cmFLTKWrapUICommand.cxx: ENH: make sure command depends on + fluid + +2006-04-24 09:39 hoffman + + * Source/cmGlobalKdevelopGenerator.cxx: ENH: fix warnings + +2006-04-24 07:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-23 23:24 hoffman + + * Tests/Java/CMakeLists.txt: ENH: create the correct jar name + +2006-04-23 21:12 hoffman + + * Source/cmGlobalKdevelopGenerator.cxx: ENH: merge in Alex patches + +2006-04-23 19:45 andy + + * Modules/: CPack.cmake, NSIS.template.in: ENH: Propagate system + name and handle win32/win64 name + +2006-04-23 18:39 andy + + * CMakeLists.txt: ENH: Enable path + +2006-04-23 18:23 andy + + * Modules/NSIS.template.in: ENH: Add a line to Add/Remove programs + to uninstall + +2006-04-23 15:34 hoffman + + * Tests/Java/CMakeLists.txt: ENH: use the right name for the test + +2006-04-23 11:10 hoffman + + * Tests/Java/CMakeLists.txt: ENH: fix build + +2006-04-23 08:08 alex + + * Modules/UseEcos.cmake: BUG: finally really fix #2576 by adding + UseEcos.cmake to cvs :-) + + Alex + +2006-04-23 07:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-23 07:23 alex + + * Modules/FindQt3.cmake: BUG: fix QT_MIN_VERSION handling, it + didn't work anymore (qt_version_str vs. qt_version_str_lib) + + Alex + +2006-04-22 20:32 king + + * Source/kwsys/Terminal.c: COMP: Added missing include of string.h + for strcmp. + +2006-04-22 20:26 king + + * Source/kwsys/Terminal.c: BUG: Fixed bug in check for vt100 + assumption. + +2006-04-22 20:25 king + + * Source/kwsys/Terminal.c: BUG: Fixed uninitialized variable when + not building with windows console support. + +2006-04-22 20:20 king + + * Source/kwsys/: CMakeLists.txt, Terminal.c, Terminal.h.in, + testTerminal.c: ENH: Adding 'Terminal' component to hold support + routines for dealing with interactive terminals. Currently only + a cfprintf function is provided to print color messages. + +2006-04-22 09:13 hoffman + + * Tests/Java/CMakeLists.txt: ENH: fix in source build for vs ide + +2006-04-22 08:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-21 20:13 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: fix borland bug + +2006-04-21 16:33 andy + + * Docs/cmake-indent.vim: BUG: Fix typo + +2006-04-21 15:15 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: performance improvments + +2006-04-21 14:36 andy + + * Modules/CTest.cmake: BUG: Fix the missing nightly start time bug + and do some cleanup + +2006-04-21 14:26 andy + + * Source/CMakeLists.txt: ENH: Cleanup + +2006-04-21 10:26 hoffman + + * CTestCustom.ctest.in, ChangeLog.manual, Docs/cmake-indent.vim, + Docs/cmake-syntax.vim, Modules/CMakeGenericSystem.cmake, + Modules/Platform/HP-UX.cmake, Modules/Platform/Linux-ifort.cmake, + Modules/Platform/Linux.cmake, Modules/Platform/kFreeBSD.cmake, + Source/cmGlobalGenerator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.h, + Source/cmMakefileTargetGenerator.cxx, Source/cmake.cxx: ENH: move + stuff from main tree + +2006-04-21 08:59 hoffman + + * CTestCustom.ctest.in: ENH: supress xcode warning + +2006-04-21 08:59 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: use a better name + +2006-04-21 08:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-21 07:17 andy + + * Docs/cmake-indent.vim: ENH: Add While support + +2006-04-20 21:54 hoffman + + * Source/cmMakefileTargetGenerator.cxx: ENH: ignore all files that + we do not know about just like in ide generators + +2006-04-20 21:32 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: do not compile + header files + +2006-04-20 17:00 hoffman + + * Source/cmake.cxx: ENH: save the cache on fatal error so that + users can set cache values + +2006-04-20 16:16 hoffman + + * ChangeLog.manual, Modules/CheckCSourceCompiles.cmake, + Modules/CheckCXXSourceCompiles.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmBootstrapCommands.cxx, Source/cmCommands.cxx, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, Source/cmakemain.cxx, + Templates/CPack.GenericDescription.txt, + Templates/CPack.GenericLicense.txt, + Templates/CPack.GenericWelcome.txt, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate: ENH: merge changes from main + tree + +2006-04-20 15:49 hoffman + + * Source/cmMakefile.h: ENH: fix .. in the path of subdirs + +2006-04-20 15:49 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: don't add package target if no + package file is around + +2006-04-20 15:28 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: VS7 seems to have + a limit on the length of the link directory list string. Try to + make the string as short as possible by avoiding trailing slashes + and using a relative path (if it is shorter). + +2006-04-20 10:51 hoffman + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: fix help for + global targets + +2006-04-20 10:23 andy + + * Modules/: CMakeGenericSystem.cmake, Platform/HP-UX.cmake, + Platform/Linux-ifort.cmake, Platform/Linux.cmake, + Platform/kFreeBSD.cmake: ENH: Cleanup link libraries. Remove -l + from -ldl + +2006-04-20 10:22 andy + + * Source/cmakemain.cxx: ENH: Add help for graphviz + +2006-04-20 10:20 andy + + * Docs/cmake-syntax.vim: STYLE: Add missing command + +2006-04-20 09:59 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Changed color + scheme to be more readable on both white and black backgrounds. + +2006-04-20 09:54 andy + + * Templates/: CPack.GenericDescription.txt, + CPack.GenericLicense.txt, CPack.GenericWelcome.txt: ENH: Simplify + the generic instructions + +2006-04-20 09:32 hoffman + + * CTestCustom.ctest.in: ENH: add ignore for xcode + +2006-04-19 17:23 hoffman + + * Modules/: CheckCSourceCompiles.cmake, + CheckCXXSourceCompiles.cmake: ENH: append to log files + +2006-04-19 16:51 hoffman + + * CMakeLists.txt: ENH: update cpack stuff to match old cmake + releases + +2006-04-19 16:36 hoffman + + * Modules/Platform/Windows-cl.cmake, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx: ENH: name pdb files for + visual studio make based builds + +2006-04-19 15:29 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: unix makefiles should + work with cl + +2006-04-19 12:58 hoffman + + * ChangeLog.txt: ENH: put cvs2cl changelog to match branch + +2006-04-19 12:30 hoffman + + * ChangeLog.manual: ENH: add changelog for 2.4 + +2006-04-19 12:29 hoffman + + * ChangeLog.txt: ENH: create new change log with cvs2cl + +2006-04-19 11:14 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: don't need two of these + +2006-04-19 10:56 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: test for vs8 correctly + +2006-04-19 10:50 king + + * Source/: cmBootstrapCommands.cxx, cmCommands.cxx: BUG: Need + ADD_DEPENDENCIES command for MinGW bootstrap since kwsys uses the + Win32 implementation of process execution. + +2006-04-19 10:34 king + + * Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate: BUG: VS6 generator now uses + ComputeLinkInformation just like all other generators. + +2006-04-19 10:11 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: check for version 1400 + +2006-04-19 08:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-18 16:40 hoffman + + * CMakeLists.txt: ENH: make cpack names match old cmake release + process + +2006-04-18 15:32 hoffman + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: put global + targets in the help + +2006-04-18 15:30 hoffman + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: make sure help + has global targets + +2006-04-18 14:48 hoffman + + * CMakeLists.txt, Source/cmCPluginAPI.h: ENH: move version numbers + to 2.5.0 + +2006-04-18 14:48 hoffman + + * CMakeLists.txt, Source/cmCPluginAPI.h, Utilities/Release/README: + ENH: move version numbers to 2.4.0 + +2006-04-18 11:53 king + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: Do not require + language flags variables. Other generators do not, and it breaks + programmable language support (like the Java test). + +2006-04-18 11:50 barre + + * Source/kwsys/SystemTools.cxx: ENH: try to bypass Microsoft + assert() on isspace, isalpha, etc. + +2006-04-18 11:45 king + + * Source/cmLocalVisualStudio6Generator.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Updated VS6 generator + to use target.GetFullName() to compute target file names. + +2006-04-18 10:56 king + + * Source/: cmSetTargetPropertiesCommand.h, cmTarget.cxx: ENH: Added + _OUTPUT_NAME target property to allow the output name to + be set on a per-configuration basis. + +2006-04-18 10:32 andy + + * Docs/: cmake-indent.vim, cmake-syntax.vim: ENH: Cleanup header + and make license compatible with VIM + +2006-04-18 10:32 andy + + * Source/CPack/: cmCPackGenericGenerator.cxx, + cmCPackSTGZGenerator.cxx: ENH: Remove some debugging + +2006-04-18 10:30 king + + * Source/: cmFileCommand.cxx, cmInstallCommand.h: BUG: Using the + source-file permissions by default for installation is somewhat + unpredictable because users can extract source code with almost + any permissions (umask). Changing the default to use 644 for + files and 755 for programs. No release has documented the old + behavior so we do not need compatibility. + +2006-04-18 10:27 king + + * Source/cmIfCommand.h: BUG: Fixed missing false values in + documentation of IF command. + +2006-04-18 10:01 king + + * Modules/CPack.cmake: BUG: Need to ignore source packaging of #*# + files created by emacs during editing. + +2006-04-18 09:24 andy + + * Source/CPack/cmCPackSTGZGenerator.cxx: COMP: Remove non-existent + header + +2006-04-18 08:25 andy + + * Modules/CPack.STGZ_Header.sh.in, Source/cmFileCommand.cxx, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, + Source/CPack/cmCPackSTGZGenerator.cxx, + Source/CPack/cmCPackSTGZGenerator.h, Source/CPack/cpack.cxx: ENH: + More cleanups and add stgz header script, so it does not have to + be hard-coded. Also, the user can overwrite it + +2006-04-18 08:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-17 19:02 andy + + * bootstrap: ENH: Fix copyright year + +2006-04-17 18:10 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: remove + duplicate file name test because it fails on xcode + +2006-04-17 16:06 andy + + * Source/cmGlobalGenerator.cxx: BUG: Verify the global target name + exists before using it. Fixes VS and Xcode + +2006-04-17 15:55 hoffman + + * Modules/FindX11.cmake: ENH: fix find x11 on the mac + +2006-04-17 15:35 hoffman + + * Source/cmLocalGenerator.cxx: ENH: fix java for ide builds again + +2006-04-17 15:26 andy + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.h: ENH: Add packaging of source + code (make package_source) + +2006-04-17 14:13 malaterre + + * Source/kwsys/CMakeLists.txt: COMP: Fix compilation on linux + (dlopen/dlclose symbols) + +2006-04-17 14:00 hoffman + + * Modules/CMakeJavaInformation.cmake, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx: ENH: fix java and add + OBJECT_DIR support + +2006-04-17 13:59 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, + Complex/Executable/Sub1/NameConflictTest.c, + Complex/Executable/Sub2/NameConflictTest.c, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Executable/Sub1/NameConflictTest.c, + ComplexOneConfig/Executable/Sub2/NameConflictTest.c, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Executable/Sub1/NameConflictTest.c, + ComplexRelativePaths/Executable/Sub2/NameConflictTest.c: ENH: + allow multiple files with the same name in different sub dirs + test + +2006-04-17 13:58 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: allow multiple + files with the same name in different subdirs + +2006-04-17 13:57 hoffman + + * Modules/CMakeDetermineCXXCompiler.cmake: ENH: add mingw test to + cxx + +2006-04-17 13:57 hoffman + + * Modules/Platform/Windows-gcc.cmake: ENH: add windows apps to + mingw + +2006-04-17 07:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-16 13:49 andy + + * Docs/cmake-syntax.vim: ENH: Cleanup, make case insensitive, + remove macro since it does not work anyway + +2006-04-16 08:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-15 13:02 andy + + * Modules/CPack.cmake, Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.h, + Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.h, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.h, + Source/CPack/cmCPackSTGZGenerator.cxx, + Source/CPack/cmCPackSTGZGenerator.h, + Source/CPack/cmCPackTGZGenerator.cxx, + Source/CPack/cmCPackTGZGenerator.h, + Source/CPack/cmCPackZIPGenerator.cxx, + Source/CPack/cmCPackZIPGenerator.h: ENH: Support for packaging + source, several cleanups and more yeehaa... + +2006-04-15 08:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-14 15:08 hoffman + + * Modules/FindX11.cmake: ENH: make sure frameworks are not searched + for x header files + +2006-04-14 09:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-14 09:02 hoffman + + * Source/CMakeLists.txt: ENH: fix syntax + +2006-04-14 08:58 andy + + * Modules/CPack.cmake, Source/CPack/cmCPackGenericGenerator.cxx, + Templates/CPackConfig.cmake.in: ENH: Start adding support for + packaging component and to package into a subdirectory + +2006-04-14 08:44 hoffman + + * Source/CMakeLists.txt: ENH: make sure cmake can be built with an + older version of cmake + +2006-04-13 23:24 hoffman + + * Source/cmFindProgramCommand.cxx: ENH: fix warning + +2006-04-13 23:15 hoffman + + * Source/: cmDocumentation.cxx, cmDocumentation.h, cmakemain.cxx: + ENH: search for help modules in the correct place for install and + source tree builds + +2006-04-13 22:57 king + + * Source/cmFileCommand.cxx: BUG: Fixed install rules to use + copy-if-different. + +2006-04-13 22:56 king + + * Source/kwsys/SystemTools.cxx: ENH: Improved implementation of + FilesDiffer to avoid allocating enough memory for the entire file + twice. Instead using a block-at-a-time comparison. + +2006-04-13 15:28 king + + * Tests/CustomCommand/wrapper.cxx: COMP: Do not use ANSI function + prototypes to pacify HP. + +2006-04-13 11:00 hoffman + + * bootstrap, Modules/Platform/Darwin.cmake, Source/CMakeLists.txt, + Source/cmFindBase.cxx, Source/cmFindBase.h, + Source/cmFindProgramCommand.cxx, Source/cmFindProgramCommand.h, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in: + ENH: add patch for finding applications on OSX + +2006-04-13 10:15 king + + * Source/: cmGlobalUnixMakefileGenerator3.h, + cmGlobalWatcomWMakeGenerator.cxx, cmMakefileTargetGenerator.cxx: + BUG: Work-around Watcom WMake limitation for multiple-output + custom command support. + +2006-04-13 08:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-12 22:04 king + + * Source/cmInstallCommand.cxx, Source/cmInstallCommand.h, + Source/cmInstallScriptGenerator.cxx, + Source/cmInstallScriptGenerator.h, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstall/InstallScript1.cmake, + Tests/SimpleInstall/InstallScript2.cmake, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/InstallScript1.cmake, + Tests/SimpleInstallS2/InstallScript2.cmake: ENH: Added + INSTALL(CODE) mode to allow inline specification of install + script code. This reduces the need for configuring an install + script that needs some variable settings because the install code + can set thing up first. + +2006-04-12 21:24 andy + + * Docs/cmake-indent.vim: ENH: Unify the comment + +2006-04-12 21:20 andy + + * Docs/cmake-syntax.vim: ENH: More system variables, more + operators, more commands, fix some string issues and some cmake + arguments issues + +2006-04-12 15:23 hoffman + + * Source/CMakeLists.txt: ENH: lang by custom command does not yet + work for Xcode + +2006-04-12 11:56 martink + + * Source/cmGlobalGenerator.cxx: COMP: fix warning + +2006-04-12 11:36 martink + + * Source/cmGlobalGenerator.h: ENH: fix compile issue on HP + hopefully + +2006-04-12 09:12 hoffman + + * Source/cmDocumentation.cxx: ENH: case insensitive command help + +2006-04-12 08:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-11 22:39 hoffman + + * Source/cmake.cxx: ENH: add more verbose output in verbose mode + +2006-04-11 22:39 hoffman + + * Source/cmMakefile.cxx: ENH: fix re-run of cmake based on + configured files that are done with copy if different and never + change + +2006-04-11 17:11 hoffman + + * Source/: CMakeLists.txt, cmLocalGenerator.cxx: ENH: enable test + for java with IDE builds + +2006-04-11 16:55 king + + * Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-icl.cmake, + Modules/Platform/Windows-ifort.cmake, + Modules/Platform/Windows-wcl386.cmake, + Source/cmLocalGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx: ENH: Split + CMAKE_STANDARD_LIBRARIES into per-language variables + CMAKE__STANDARD_LIBRARIES. This is needed to get + programmable language support working with Visual Studio + generators. It makes sense anyway. + +2006-04-11 14:54 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Use flag-map + transform only for C and C++ flags. + +2006-04-11 14:53 king + + * Source/cmLocalGenerator.cxx: ENH: Restored implementation of + AddCustomCommandToCreateObject. Updated it to use newer custom + command functionality. + +2006-04-11 13:32 king + + * Source/cmLocalGenerator.cxx: BUG: Install scripts should honor + EXCLUDE_FROM_ALL options for subdirectories. This addresses + bug#3100. + +2006-04-11 12:51 martink + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, cmMakefile.cxx, cmMakefile.h: + ENH: some performance optimizations + +2006-04-11 11:40 king + + * Source/cmLocalGenerator.cxx: BUG: Do not add non-per-config + subdirectory name of cmake target libraries as full path libs. + +2006-04-11 11:06 king + + * Source/cmAddCustomCommandCommand.cxx, + Source/cmAddCustomCommandCommand.h, Source/cmCustomCommand.cxx, + Source/cmCustomCommand.h, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalXCodeGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmMakefileTargetGenerator.cxx, + Source/cmake.cxx, Tests/CustomCommand/CMakeLists.txt, + Tests/CustomCommand/wrapper.cxx: ENH: Added support for multiple + outputs generated by a single custom command. For Visual Studio + generators the native tool provides support. For Xcode and + Makefile generators a simple trick is used. The first output is + considered primary and has the build rule attached. Other + outputs simply depend on the first output with no build rule. + During cmake_check_build_system CMake detects when a secondary + output is missing and removes the primary output to make sure all + outputs are regenerated. This approach always builds the custom + command at the right time and only once even during parallel + builds. + +2006-04-11 10:04 king + + * Source/cmMakefile.h: BUG: Fixed typo in new cmake-rerun code. + +2006-04-11 08:56 andy + + * Source/cmCTest.cxx: BUG: The fast mode should not read + CTestCustom.ctest files + +2006-04-11 08:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-10 13:52 hoffman + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, cmMakefile.cxx, + cmMakefile.h: ENH: add support for re-running cmake if the + cmakefiles change + +2006-04-10 13:52 hoffman + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: add test for mfc + +2006-04-10 13:47 hoffman + + * Source/cmFileCommand.cxx: ENH: handle single path + +2006-04-10 13:46 hoffman + + * Modules/: CMakeVS6FindMake.cmake, CMakeVS71FindMake.cmake, + CMakeVS7FindMake.cmake, CMakeVS8FindMake.cmake, + InstallRequiredSystemLibraries.cmake: ENH: add correct flags for + msvc generators + +2006-04-10 13:44 andy + + * Modules/CPack.cmake, Source/cmGlobalGenerator.h, + Source/ctest.cxx, Source/CPack/cmCPackGenericGenerator.cxx: ENH: + Add support for preinstall for cmake generated projects when + packaging them + +2006-04-10 11:39 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix so all configurations + show up + +2006-04-10 11:09 andy + + * Modules/CPack.cmake, Source/CPack/cmCPackGenericGenerator.cxx: + ENH: Deprecate CPACK_BINARY_DIR and add + CPACK_INSTALL_CMAKE_PROJECTS + +2006-04-10 09:36 andy + + * CTestCustom.ctest.in: ENH: Some ctest custom fixes + +2006-04-10 08:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-09 08:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-09 07:45 andy + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestBuildHandler.cxx, + CTest/cmCTestReadCustomFilesCommand.cxx: BUG: Improve the + behavior of the ReadCustomFilesCommand + +2006-04-08 14:15 hoffman + + * Source/: cmLocalKdevelopGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: make sure verbose output is + used for kde + +2006-04-08 08:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-07 16:46 hoffman + + * Modules/Platform/: Windows-cl.cmake, Windows-cl.cmake.in: ENH: + add better variables for MSVC versions + +2006-04-07 16:35 andy + + * Modules/CPack.cmake: ENH: Allow to overwrite CPACK_BINARY_DIR + +2006-04-07 07:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-06 07:39 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-05 11:07 king + + * Source/cmOrderLinkDirectories.cxx: COMP: Moved var decl out of + _WIN32 block. + +2006-04-05 11:05 king + + * Source/: cmLocalGenerator.cxx, cmOrderLinkDirectories.cxx: BUG: + Fixed cmOrderLinkDirectories to deal with raw link items that do + not yet exist and correct drive letter case to avoid duplicate + paths on windows. Fixed cmLocalGenerator to pass CMake targets + as full paths to cmOrderLinkDirectories to make sure the ordering + will pick up the proper target libraries. + +2006-04-05 07:46 hoffman + + * Source/: cmFileCommand.cxx, cmFileCommand.h: ENH: add path + conversion stuff and rm SYSTEM_PATH + +2006-04-05 07:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-04 17:27 hoffman + + * Modules/CMakeVS8FindMake.cmake: ENH: add search directories for + 32 bit devenv from a 64bit cmake + +2006-04-04 17:14 king + + * Source/cmLocalGenerator.cxx: BUG: Removing part of earlier fix + because it does not work with VS generators. It may be restored + later after cmOrderLinkDirs is further fixed. + +2006-04-04 14:53 king + + * Source/cmSetTargetPropertiesCommand.h: ENH: Added documentation + for COMPILE_FLAGS property and clarified meaning of + DEFINE_SYMBOL. + +2006-04-04 14:25 king + + * Source/cmLocalGenerator.cxx, Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: BUG: Fixed + cmOrderLinkDirectories to make sure cmake-built libraries are + found properly. Also taking libraries that will be built but may + not yet exist into account. The per-configuration subdirectories + that are included by generators in the link path are checked for + conflicting libraries also. Potentially conflicting libraries + that are actually symlinks back to the desired library are no + longer considered conflicting, which avoids bogus impossible + ordering warnings. + +2006-04-04 14:25 martink + + * Source/cmakexbuild.cxx: BUG: compiler fix + +2006-04-04 13:04 martink + + * Source/: cmCTest.cxx, cmCTest.h, cmForEachCommand.cxx, + cmSystemTools.cxx, cmSystemTools.h, cmakexbuild.cxx, ctest.cxx, + CTest/cmCTestRunScriptCommand.cxx, + CTest/cmCTestRunScriptCommand.h, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestScriptHandler.h: ENH: added support for -SP scripts + in new processes + +2006-04-04 11:52 hoffman + + * Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: change + library order to use a vector + +2006-04-04 11:48 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmLocalGenerator.cxx, cmLocalGenerator.h, cmTarget.h: ENH: Added + global TargetManifest computation between Configure and Generate + steps. This allows generators to know what other targets will + exist on disk when the build completes. + +2006-04-04 09:35 king + + * Source/: cmIncludeDirectoryCommand.cxx, + cmIncludeDirectoryCommand.h: ENH: INCLUDE_DIRECTORIES should have + been written to prepend to the include path so that the most + local directories are included first. This is a patch from Alex + to resolve the problem by allowing users to switch the default + using a variable CMAKE_INCLUDE_DIRECTORIES_BEFORE and then still + explicitly appending or prepending by using AFTER or BEFORE + arguments explicitly. + +2006-04-04 07:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-03 22:05 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: use correct addcache call to + fix build tools + +2006-04-03 17:54 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix spaces in path for + xcode + +2006-04-03 16:20 hoffman + + * Source/: cmIncludeDirectoryCommand.cxx, + cmLinkDirectoriesCommand.cxx: ENH: make sure include and lib dirs + are unix paths + +2006-04-03 15:59 hoffman + + * Source/cmFileCommand.cxx: ENH: fix warning, and remove debug code + +2006-04-03 12:57 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmSetTargetPropertiesCommand.h: ENH: add support for per config + target LINK_FLAGS + +2006-04-03 07:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-02 11:20 andy + + * Source/: CMakeLists.txt, CPack/cmCPackGenerators.cxx, + CPack/cmCPackGenericGenerator.cxx, + CPack/cmCPackNSISGenerator.cxx, + CPack/cmCPackPackageMakerGenerator.cxx, + CPack/cmCPackZIPGenerator.cxx, CPack/cmCPackZIPGenerator.h, + CPack/cpack.cxx: ENH: Add ZIP generator and add support for + including or excluding the toplevel directory + +2006-04-02 08:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-04-01 07:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-31 21:43 hoffman + + * Source/: cmOrderLinkDirectories.cxx, cmOrderLinkDirectories.h: + ENH: fix spelling + +2006-03-31 17:59 hoffman + + * Source/cmOrderLinkDirectories.cxx: ENH: fix for bug 3067 the + first framework ate the rest of the libraries + +2006-03-31 13:17 hoffman + + * bootstrap, Source/CMakeLists.txt, Source/cmGlobalGenerator.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmTryCompileCommand.cxx, Source/cmakemain.cxx, + Source/cmakexbuild.cxx: ENH: add a wrapper for xcodebuild to get + around bug and verbose output + +2006-03-31 08:46 hoffman + + * Utilities/cmcurl/getdate.c: ENH: remove c++ comment from c code + +2006-03-31 08:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-30 23:03 hoffman + + * Utilities/cmtar/append.c: ENH: remove warning + +2006-03-30 17:26 hoffman + + * Source/cmakexbuild.cxx: ENH: add program to run xcodebuild and + get around bug + +2006-03-30 16:55 king + + * Modules/Platform/Windows-cl.cmake: BUG: Fixed order of options to + cl for 32-bit/64-bit test to work with VS 6 NMake. + +2006-03-30 15:39 king + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalKdevelopGenerator.cxx, cmGlobalMSYSMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalWatcomWMakeGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx: ENH: Implemented VT100 terminal + escape sequences. If CMAKE_COLOR_MAKEFILE is set then messages + produced by makefiles will be in color if the native tool + supports it. This addresses bug#3060. + +2006-03-30 13:49 hoffman + + * Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-cl.cmake.in, Source/CMakeLists.txt, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmDependsJavaParserHelper.cxx, + Source/cmExecuteProcessCommand.cxx, Source/cmGlobalGenerator.cxx, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmGlobalVisualStudio8Win64Generator.cxx, + Source/cmGlobalVisualStudio8Win64Generator.h, + Source/cmIfCommand.cxx, Source/cmListCommand.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmXMLParser.cxx, + Source/cmake.cxx, Source/CTest/cmCTestHandlerCommand.cxx, + Source/CTest/cmCTestMemCheckHandler.cxx, + Source/CTest/cmCTestSubmitHandler.cxx, + Source/kwsys/CommandLineArguments.cxx, Source/kwsys/Glob.cxx, + Source/kwsys/ProcessWin32.c, Source/kwsys/Registry.cxx, + Source/kwsys/SystemTools.cxx, Source/kwsys/hashtable.hxx.in, + Source/kwsys/testDynamicLoader.cxx, + Utilities/cmcurl/CMakeLists.txt, Utilities/cmcurl/getdate.c, + Utilities/cmcurl/inet_pton.c, Utilities/cmcurl/md5.c, + Utilities/cmcurl/mprintf.c, Utilities/cmtar/CMakeLists.txt, + Utilities/cmtar/append.c, Utilities/cmtar/block.c, + Utilities/cmtar/extract.c, Utilities/cmtar/handle.c, + Utilities/cmtar/output.c, Utilities/cmtar/compat/snprintf.c: ENH: + add support for win64 for visual studio 2005 ide and nmake, also + fix warnings produced by building for win64 + +2006-03-30 13:33 king + + * Source/: cmFileCommand.cxx, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmInstallCommand.cxx, cmInstallCommand.h, + cmInstallFilesGenerator.cxx, cmInstallFilesGenerator.h, + cmInstallGenerator.cxx, cmInstallGenerator.h, + cmInstallTargetGenerator.cxx, cmInstallTargetGenerator.h, + cmLocalGenerator.cxx: ENH: Added named component installation + implementation. Installation behavior should be unchanged unless + -DCOMPONENT= is specified when cmake_install.cmake is + invoked. + +2006-03-30 11:55 hoffman + + * Source/: cmFileCommand.cxx, cmFindBase.cxx, cmFindBase.h: ENH: + make sure framework search order is correct + +2006-03-30 09:17 martink + + * Source/cmGlobalGenerator.cxx: ENH: modified the relative path + code to not do relative paths between bin and source + +2006-03-30 08:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-29 16:34 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: Use + PBXResourcesBuildPhase for resrources + +2006-03-29 16:34 hoffman + + * Modules/Platform/Darwin.cmake: ENH: use correct name for path + +2006-03-29 16:25 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: Simplify. Instead of + doing ../MacOS just copy to current directory + +2006-03-29 16:21 andy + + * Source/cmXCode21Object.cxx: ENH: Add support for Xcode 2.1 + +2006-03-29 15:02 andy + + * Source/: cmGlobalXCodeGenerator.cxx, cmXCodeObject.cxx, + cmXCodeObject.h: ENH: Add copy stages for bundle files + +2006-03-29 13:33 hoffman + + * Source/cmFindBase.cxx, Tests/BundleTest/CMakeLists.txt: ENH: add + a test for find framework stuff in find_library, and fix the + framework search stuff + +2006-03-29 13:26 hoffman + + * Source/kwsys/CMakeLists.txt: ENH: remove test on cygwin since it + randomly fails + +2006-03-29 12:33 andy + + * Source/CTest/: cmCTestBuildCommand.cxx, + cmCTestConfigureCommand.cxx, cmCTestCoverageCommand.cxx, + cmCTestSubmitCommand.cxx, cmCTestUpdateCommand.cxx: COMP: Return + 0 instead of false + +2006-03-29 12:01 andy + + * Source/cmCTest.cxx, Source/cmCTest.h, + Source/CTest/cmCTestBuildCommand.cxx, + Source/CTest/cmCTestBuildCommand.h, + Source/CTest/cmCTestBuildHandler.cxx, + Source/CTest/cmCTestConfigureCommand.cxx, + Source/CTest/cmCTestConfigureCommand.h, + Source/CTest/cmCTestCoverageCommand.cxx, + Source/CTest/cmCTestCoverageCommand.h, + Source/CTest/cmCTestCoverageHandler.cxx, + Source/CTest/cmCTestHandlerCommand.cxx, + Source/CTest/cmCTestMemCheckHandler.cxx, + Source/CTest/cmCTestSubmitCommand.cxx, + Source/CTest/cmCTestSubmitCommand.h, + Source/CTest/cmCTestTestCommand.h, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestUpdateCommand.cxx, + Source/CTest/cmCTestUpdateCommand.h, + Tests/CTestTest3/test.cmake.in: ENH: Several cleanups and make + sure things get propagated where they should. Also, allow to load + CTest custom files to the actual ctest -S script + +2006-03-29 09:10 andy + + * Source/cmSetSourceFilesPropertiesCommand.cxx: COMP: Remove + warning + +2006-03-29 08:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-28 16:36 andy + + * Source/CTest/cmCTestReadCustomFilesCommand.cxx, + Tests/CTestTest3/test.cmake.in: BUG: Fix the read custom files + command and add a coverage test + +2006-03-28 16:25 andy + + * Source/: cmLocalGenerator.cxx, cmTarget.cxx: COMP: Remove + warnings + +2006-03-28 15:20 andy + + * Source/cmCTest.cxx: ENH: Pass handler flags to both test and + memcheck handler + +2006-03-28 15:19 andy + + * Source/: CMakeLists.txt, cmCTest.h: ENH: Add new ctest command + +2006-03-28 14:45 king + + * Source/cmFindBase.cxx: ENH: Added check of + CMAKE_BACKWARDS_COMPATIBILITY to skip the CMake system path + search when simulating CMake 2.2 and earlier. + +2006-03-28 14:37 andy + + * Source/CTest/: cmCTestReadCustomFilesCommand.cxx, + cmCTestReadCustomFilesCommand.h, cmCTestScriptHandler.cxx: ENH: + Add command to read ctest custom files + +2006-03-28 13:48 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Handle spaces in + the path + +2006-03-28 13:23 andy + + * Tests/BundleTest/: BundleLib.cxx, BundleTest.cxx: ENH: Check if + files exist + +2006-03-28 13:16 andy + + * Source/: cmFileCommand.cxx, cmInstallGenerator.cxx, + cmInstallTargetGenerator.cxx, cmTarget.h: ENH: Add proper support + for installing bundles + +2006-03-28 13:07 alex + + * Modules/FindKDE4.cmake: STYLE: better error message when KDE4 + hasn't been found + + Alex + +2006-03-28 10:58 king + + * Source/cmInstallTargetGenerator.cxx: BUG: Pay attention to the + MACOSX_BUNDLE target property only on APPLE platforms. + +2006-03-28 08:54 andy + + * Modules/Platform/Darwin.cmake, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h, + Source/cmSetSourceFilesPropertiesCommand.cxx, + Tests/BundleTest/CMakeLists.txt, + Tests/BundleTest/SomeRandomFile.txt, + Tests/BundleTest/randomResourceFile.plist.in: ENH: Add support + for adding content to bundles + +2006-03-28 08:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-27 12:21 hoffman + + * Modules/Platform/UnixPaths.cmake: ENH: add /opt/local/include + +2006-03-27 11:09 hoffman + + * Modules/Platform/: FreeBSD.cmake, OpenBSD.cmake: ENH: add unix + paths + +2006-03-27 10:46 hoffman + + * Modules/Platform/: FreeBSD.cmake, HP-UX.cmake, IRIX.cmake, + IRIX64.cmake, NetBSD.cmake, OSF1.cmake, SCO_SV.cmake, + SINIX.cmake, Tru64.cmake, ULTRIX.cmake, UNIX_SV.cmake, + UnixPaths.cmake, UnixWare.cmake, Xenix.cmake, kFreeBSD.cmake: + ENH: add more search paths and add UnixPaths to all unix + platforms + +2006-03-27 08:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-26 08:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-25 08:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-24 16:13 hoffman + + * Source/cmListCommand.cxx: ENH: allow unset vars to be used in + list length + +2006-03-24 16:11 king + + * CMakeLists.txt, Source/cmInstallCommand.cxx, + Source/cmInstallCommand.h, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Added ARCHIVE option + to the TARGETS mode of the INSTALL command. It is a third option + added to RUNTIME and LIBRARY property types. Static libraries + and import libraries are now treated as ARCHIVE targets instead + of LIBRARY targets. This adds a level of granularity necessary + for upcoming features. Also updated the CVS CMake patch level + set in CMake_VERSION_PATCH from 4 to 5 to allow users of this + version to know whether this incompatible change is present. + +2006-03-24 14:47 king + + * Modules/FindPythonLibs.cmake: ENH: Updated implementation to use + new FIND_* command power. The correct library is now found on + MinGW also. + +2006-03-24 14:16 king + + * Source/: cmFindBase.cxx, cmFindBase.h: ENH: Added + NO_CMAKE_ENVIRONMENT_PATH, NO_CMAKE_PATH, + NO_SYSTEM_ENVIRONMENT_PATH, and NO_CMAKE_SYSTEM_PATH options back + to allow more granularity than NO_DEFAULT_PATH. + +2006-03-24 14:15 king + + * Modules/Platform/UnixPaths.cmake: BUG: Fix '/use/lib' to be + '/usr/lib'. + +2006-03-24 12:20 martink + + * Tests/CustomCommand/: CMakeLists.txt, + GeneratedHeader/CMakeLists.txt: BUG: fix test to list generate + dheader + +2006-03-24 09:15 hoffman + + * Modules/Platform/Darwin.cmake, Source/cmGlobalXCodeGenerator.cxx, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalXCodeGenerator.cxx, Source/cmTryCompileCommand.cxx, + Tests/ExternalOBJ/CMakeLists.txt, + Tests/ExternalOBJ/Object/CMakeLists.txt, + Tests/X11/CMakeLists.txt: ENH: add support for universal binaries + +2006-03-24 08:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-23 15:35 andy + + * Source/CTest/cmCTestBuildAndTestHandler.cxx: COMP: Remove warning + +2006-03-23 13:55 martink + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: ENH: removed unused rules from + targets for VS + +2006-03-23 11:19 andy + + * Source/cmCTest.cxx: BUG: Fix CTestCustom.ctest file + +2006-03-23 10:10 hoffman + + * CTestCustom.ctest.in: ENH: try to get rid of warning on HP + +2006-03-23 09:56 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: More error handling + +2006-03-23 08:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-22 17:21 hoffman + + * Source/cmExecuteProcessCommand.cxx: ENH: do not dereference empty + stl vectors + +2006-03-22 15:01 martink + + * Tests/: Complex/VarTests.cmake, + Complex/Executable/CMakeLists.txt, + Complex/Executable/Included.cmake, + Complex/Executable/complex.cxx, ComplexOneConfig/VarTests.cmake, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/Included.cmake, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/VarTests.cmake, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/Included.cmake, + ComplexRelativePaths/Executable/complex.cxx: ENH: added testing + for new features + +2006-03-22 14:45 andy + + * Source/cmMakefile.cxx: BUG: Fix logic. If the variable is not + set, then it is always ok to write the file + +2006-03-22 14:40 andy + + * Source/: cmAddCustomCommandCommand.cxx, + cmConfigureFileCommand.cxx, cmExecuteProcessCommand.cxx, + cmFileCommand.cxx, cmMakeDirectoryCommand.cxx, cmMakefile.cxx, + cmMakefile.h, cmWriteFileCommand.cxx: ENH: Allow blocking of + writing into the source tree + +2006-03-22 14:06 martink + + * Source/: cmGetDirectoryPropertyCommand.h, + cmGetSourceFilePropertyCommand.cxx, + cmGetSourceFilePropertyCommand.h, cmIfCommand.cxx, cmIfCommand.h, + cmMakefile.cxx, cmMakefile.h, cmSourceFile.cxx: ENH: added some + new functionality + +2006-03-22 13:04 andy + + * Source/: cmBootstrapCommands.cxx, cmCommands.cxx, cmake.cxx: + COMP: Fix apple bootstrap issues + +2006-03-22 11:14 andy + + * Source/cmBootstrapCommands.cxx, + Modules/CheckCSourceCompiles.cmake, + Modules/CheckCXXSourceCompiles.cmake, Source/cmCommands.cxx, + Source/cmWriteFileCommand.cxx: ENH: Cleanup bootstrap even more + +2006-03-22 11:10 king + + * Modules/Platform/Windows-gcc.cmake, Source/cmLocalGenerator.cxx: + ENH: Added support for linking to MS .lib libraries in MinGW. + +2006-03-22 09:58 andy + + * bootstrap, Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmakemain.cxx: ENH: Remove things from bootstrap + +2006-03-22 08:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-21 17:47 barre + + * Source/kwsys/SystemTools.cxx: ENH: the arguments to this function + were not checked in a robust way + +2006-03-21 16:59 andy + + * CMakeLists.txt: ENH: Add flag for MFC + +2006-03-21 16:58 andy + + * Modules/InstallRequiredSystemLibraries.cmake: ENH: Handle visual + studio versions + +2006-03-21 16:39 andy + + * Source/cmCTest.cxx: ENH: Two things. If there is + CTestCustom.cmake in the toplevel directory read that file only. + If there is CTestCustom.ctest in the toplevel directory, do the + glob, if there is none, do nothing + +2006-03-21 16:03 andy + + * Source/cmFileCommand.cxx, Source/cmFileCommand.h, + Tests/StringFileTest/CMakeLists.txt: ENH: Add relative tag and + add test for relative tag + +2006-03-21 16:02 andy + + * Source/kwsys/: Glob.cxx, Glob.hxx.in: ENH: Add support for + relative paths and cleanup + +2006-03-21 16:01 andy + + * Source/cmCTest.cxx: BUG: Handle visual studio 8 + +2006-03-21 12:56 alex + + * Modules/FindKDE3.cmake: BUG: put the path to the kde3 lib dir in + KDE3_LIB_DIR, not the complete libkdecore.so + + Alex + +2006-03-21 12:54 andy + + * bootstrap, Source/CMakeLists.txt, Source/cmCTest.cxx, + Source/cmCacheManager.cxx, Source/cmFileCommand.cxx, + Source/cmFindPathCommand.cxx, Source/cmGlob.cxx, Source/cmGlob.h, + Source/CTest/cmCTestCoverageHandler.cxx: ENH: Remove cmGlob and + use glob from kwsys + +2006-03-21 08:45 king + + * Source/cmLocalGenerator.cxx: ENH: Enabling + CMAKE_INCLUDE_CURRENT_DIR even for in-source builds to be more + consistent with its name. This also makes double-quote and + angle-bracket include styles (almost) identical. + +2006-03-21 08:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-20 16:24 andy + + * Source/CPack/cmCPackPackageMakerGenerator.cxx: ENH: Handle + unusual path for packagemaker + +2006-03-20 12:29 alex + + * Modules/: AddFileDependencies.cmake, FindPNG.cmake, + KDE3Macros.cmake: BUG: don't include MacroLibrary.cmake, but add + a cmake module which implements ADD_FILE_DEPENDENCIES() ENH: mark + the variables from FindPNG.cmake as advanced + + Alex + +2006-03-20 07:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-19 07:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-18 12:23 hoffman + + * CTestCustom.ctest.in: ENH: add more warning stuff + +2006-03-18 12:16 alex + + * Modules/FindKDE3.cmake: STYLE: fix typos + + Alex + +2006-03-18 08:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-17 16:30 andy + + * Source/cmConfigure.cmake.h.in: ENH: Propagate cmake variables to + macros in C + +2006-03-17 16:14 andy + + * CMakeLists.txt, Source/CMakeLists.txt, Source/cmSystemTools.cxx: + ENH: Simplify the test + +2006-03-17 15:47 andy + + * Source/CMakeLists.txt: COMP: Use the current cmake's + CheckCXXSourceCompiles + +2006-03-17 15:46 andy + + * Source/: CMakeLists.txt, cmSystemTools.cxx, cmSystemTools.h, + cmake.cxx: ENH: Handle missing unsetenv and add check for environ + +2006-03-17 15:33 hoffman + + * Source/cmSystemTools.cxx: ENH: make cmake compile + +2006-03-17 12:31 andy + + * Source/cmSystemTools.cxx: COMP: Fix windows + +2006-03-17 12:24 andy + + * Source/cmSystemTools.cxx: COMP: Handle windows with hack for now + +2006-03-17 12:06 malaterre + + * Source/kwsys/: Directory.cxx, Directory.hxx.in, SystemTools.cxx, + SystemTools.hxx.in: ENH: Use const char where it should have + been. At same time fix Bug#2958 + +2006-03-17 11:44 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Add a method to + remove environment variables + +2006-03-17 11:14 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h, cmake.cxx: ENH: Use + vector of plain strings and add cmake -E command for getting + environment + +2006-03-17 10:58 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Add access for + all environment variables + +2006-03-17 09:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-16 18:24 king + + * Source/cmGlobalGenerator.cxx: BUG: When generating the install + rules for CMake itself the per-configuration subdirectory must be + used to specify the executable location. + +2006-03-16 17:49 hoffman + + * Source/: cmFindBase.cxx, cmFindBase.h: ENH: clean up find stuff + so that NO_SYSTEM_PATH is backwards compatible and you get put + system env variables in the find commands + +2006-03-16 17:40 king + + * Modules/Platform/Windows-cl.cmake: BUG: /DWIN32 and /D_WINDOWS + should be defined for all configurations or if no configuration + is set. + +2006-03-16 17:26 king + + * Source/kwsys/auto_ptr.hxx.in: COMP: Skip trying to use native + auto_ptr implementation and just provide a conforming one. + +2006-03-16 17:20 king + + * Tests/: Complex/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/complex.cxx: BUG: Removed + compiled-in CMAKE_SHARED_MODULE_PREFIX and + CMAKE_SHARED_MODULE_SUFFIX for loaded commands in favor of using + the settings from the platform files. + +2006-03-16 17:09 king + + * Source/: cmConfigure.cmake.h.in, cmDynamicLoader.cxx, + cmDynamicLoader.h, cmLoadCommandCommand.cxx: BUG: Removed + compiled-in CMAKE_SHARED_MODULE_PREFIX and + CMAKE_SHARED_MODULE_SUFFIX for loaded commands in favor of using + the settings from the platform files. + +2006-03-16 17:07 king + + * Modules/CMakeSystemSpecificInformation.cmake: BUG: When copying + the module variables from shared library variables use double + quotes for the required definitions ...PREFIX and ...SUFFIX to + make sure a value is set even if it is empty. + +2006-03-16 16:04 king + + * Source/cmExportLibraryDependencies.cxx: COMP: Using KWSys + auto_ptr to avoid cross-platform problems. + +2006-03-16 16:04 king + + * Source/kwsys/: CMakeLists.txt, auto_ptr.hxx.in: ENH: Adding + auto_ptr to KWSys to provide a conforming version everywhere. + +2006-03-16 15:53 alex + + * Modules/FindKDE4.cmake: ENH: after searching for kde-config in + the special dirs, search again in the standard dirs BUG: handle + paths on windows correctly + + Alex + +2006-03-16 15:50 king + + * Source/cmExportLibraryDependencies.cxx: COMP: Fix for auto_ptr + usage on VC6's broken implementation. + +2006-03-16 14:51 king + + * Source/cmLocalGenerator.cxx: BUG: Fixed generation of mismatched + IF in install script. This bug was introduced during the m_ + sweep. + +2006-03-16 14:44 king + + * Source/: cmCommandArgumentParser.cxx, cmCommandArgumentParser.y: + COMP: Fix malloc/free declaration for windows compilers. + +2006-03-16 14:14 king + + * Source/cmExportLibraryDependencies.cxx: BUG: Do not leak the + ofstream object in append mode. Just use an auto_ptr for both + cases. + +2006-03-16 11:57 king + + * Source/: cmCommandArgumentParser.cxx, cmCommandArgumentParser.y, + cmCommandArgumentParserTokens.h: ENH: Using patch from Frans + Englich to clarify error messages. + +2006-03-16 11:34 andy + + * Source/CTest/cmCTestTestHandler.h: COMP: Make members protected + so that subclass can use them + +2006-03-16 11:29 andy + + * Source/CTest/: cmCTestMemCheckHandler.cxx, + cmCTestTestHandler.cxx: BUG: Couple of memcheck bugs: Log files + should really be different for test and memcheck. Also make sure + to not trunkate the output of the test until the valgrind or any + other checking is pefrormed. + +2006-03-16 11:28 hoffman + + * Source/CursesDialog/cmCursesMainForm.cxx: ENH: not all messages + are errors + +2006-03-16 11:27 hoffman + + * Source/cmOrderLinkDirectories.cxx: ENH: don't put the default + framework path in a -F option + +2006-03-16 11:21 andy + + * Source/kwsys/DynamicLoader.hxx.in: COMP: Fix problem with + namespace + +2006-03-16 11:15 king + + * Modules/Platform/FreeBSD.cmake: ENH: Enabling soname support on + FreeBSD. + +2006-03-16 11:01 andy + + * Source/cmDynamicLoader.cxx, Source/cmDynamicLoader.h, + Source/cmLoadCommandCommand.cxx, Source/cmSystemTools.cxx, + Source/cmakemain.cxx, Source/kwsys/DynamicLoader.cxx, + Source/kwsys/DynamicLoader.hxx.in, + Source/kwsys/testDynamicLoader.cxx, Source/kwsys/testDynload.c, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: Cleanup + DynamicLoader so that the symbols have more consistent names, + start using dynamic loader from kwsys in CMake + +2006-03-16 10:53 martink + + * Source/: cmGlobalGenerator.h, cmLocalVisualStudio7Generator.h, + cmLocalXCodeGenerator.h, cmMakefile.h: STYLE: minor comment + cleanups + +2006-03-16 10:44 martink + + * Source/CursesDialog/: cmCursesBoolWidget.cxx, + cmCursesCacheEntryComposite.cxx, cmCursesCacheEntryComposite.h, + cmCursesDummyWidget.cxx, cmCursesFilePathWidget.cxx, + cmCursesForm.cxx, cmCursesForm.h, cmCursesLabelWidget.cxx, + cmCursesLongMessageForm.cxx, cmCursesLongMessageForm.h, + cmCursesMainForm.cxx, cmCursesMainForm.h, cmCursesPathWidget.cxx, + cmCursesPathWidget.h, cmCursesStringWidget.cxx, + cmCursesStringWidget.h, cmCursesWidget.cxx, cmCursesWidget.h: + ENH: m_ cleanup for curses + +2006-03-16 09:33 martink + + * Source/: cmAddTestCommand.h, cmData.h, cmDependsC.cxx, + cmDependsC.h, cmStandardIncludes.h, cmUseMangledMesaCommand.h, + cmVariableRequiresCommand.h: ENH: a warning fix and some more + cleanup + +2006-03-16 09:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-15 16:32 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: fix warning + +2006-03-15 14:14 hoffman + + * Modules/Platform/IRIX64.cmake: ENH: use c not cxx + +2006-03-15 13:20 alex + + * Modules/UsePkgConfig.cmake: BUG: change the formatting of the + pkgconfig module documentation so that it doesn't crash some + versions of konqueror (fixed with current konqy) + + Alex + +2006-03-15 12:02 hoffman + + * Source/: cmGlobalXCode21Generator.cxx, + cmGlobalXCodeGenerator.cxx, cmake.cxx: ENH: fix up this changes + for mac + +2006-03-15 11:38 martink + + * Source/: cmGlobalXCodeGenerator.cxx, cmMakeDepend.cxx, + cmMakeDepend.h, cmXCodeObject.cxx, cmXCodeObject.h: BUG: some + UNIX fixes for my m_ commit + +2006-03-15 11:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-15 11:01 martink + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomTargetCommand.cxx, cmAddDefinitionsCommand.cxx, + cmAddDependenciesCommand.cxx, cmAddExecutableCommand.cxx, + cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, + cmAddSubDirectoryCommand.cxx, cmAddTestCommand.cxx, + cmAuxSourceDirectoryCommand.cxx, cmBuildCommand.cxx, + cmBuildNameCommand.cxx, cmCMakeMinimumRequired.cxx, + cmCPluginAPI.cxx, cmCTest.cxx, cmCTest.h, cmCacheManager.cxx, + cmCacheManager.h, cmCommand.h, cmCommandArgumentLexer.cxx, + cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserHelper.h, cmConfigureFileCommand.cxx, + cmConfigureFileCommand.h, cmCreateTestSourceList.cxx, + cmCustomCommand.cxx, cmCustomCommand.h, cmDepends.cxx, + cmDepends.h, cmDependsC.cxx, cmDependsC.h, cmDependsFortran.cxx, + cmDependsFortran.h, cmDependsFortranLexer.cxx, + cmDependsJavaLexer.cxx, cmDynamicLoader.cxx, + cmEnableLanguageCommand.cxx, cmEnableTestingCommand.cxx, + cmEndIfCommand.cxx, cmExecProgramCommand.cxx, + cmExecuteProcessCommand.cxx, cmExportLibraryDependencies.cxx, + cmExportLibraryDependencies.h, cmExprLexer.cxx, + cmExprParserHelper.cxx, cmExprParserHelper.h, + cmFLTKWrapUICommand.cxx, cmFLTKWrapUICommand.h, + cmFileCommand.cxx, cmFileTimeComparison.cxx, + cmFileTimeComparison.h, cmFindBase.cxx, cmFindLibraryCommand.cxx, + cmFindPackageCommand.cxx, cmFindPathCommand.cxx, + cmFindProgramCommand.cxx, cmForEachCommand.cxx, + cmForEachCommand.h, cmGeneratedFileStream.cxx, + cmGeneratedFileStream.h, cmGetCMakePropertyCommand.cxx, + cmGetDirectoryPropertyCommand.cxx, + cmGetFilenameComponentCommand.cxx, + cmGetSourceFilePropertyCommand.cxx, + cmGetTargetPropertyCommand.cxx, cmGetTestPropertyCommand.cxx, + cmGlob.cxx, cmGlob.h, cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalKdevelopGenerator.cxx, cmGlobalMSYSMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalWatcomWMakeGenerator.cxx, cmGlobalXCode21Generator.cxx, + cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h, + cmIfCommand.cxx, cmIfCommand.h, cmIncludeCommand.cxx, + cmIncludeDirectoryCommand.cxx, + cmIncludeExternalMSProjectCommand.cxx, + cmIncludeRegularExpressionCommand.cxx, cmInstallCommand.cxx, + cmInstallFilesCommand.cxx, cmInstallFilesCommand.h, + cmInstallProgramsCommand.cxx, cmInstallProgramsCommand.h, + cmInstallTargetGenerator.cxx, cmInstallTargetsCommand.cxx, + cmLinkDirectoriesCommand.cxx, cmLinkLibrariesCommand.cxx, + cmListCommand.cxx, cmListFileCache.cxx, cmListFileCache.h, + cmLoadCacheCommand.cxx, cmLoadCommandCommand.cxx, + cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmMacroCommand.cxx, + cmMacroCommand.h, cmMakeDepend.cxx, cmMakeDepend.h, + cmMakefile.cxx, cmMakefile.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, cmMakefileTargetGenerator.h, + cmMarkAsAdvancedCommand.cxx, cmMathCommand.cxx, + cmMessageCommand.cxx, cmOptionCommand.cxx, + cmOrderLinkDirectories.cxx, cmOrderLinkDirectories.h, + cmOutputRequiredFilesCommand.cxx, cmOutputRequiredFilesCommand.h, + cmProjectCommand.cxx, cmQTWrapCPPCommand.cxx, + cmQTWrapCPPCommand.h, cmQTWrapUICommand.cxx, cmQTWrapUICommand.h, + cmRemoveCommand.cxx, cmRemoveDefinitionsCommand.cxx, + cmSeparateArgumentsCommand.cxx, cmSetCommand.cxx, + cmSetDirectoryPropertiesCommand.cxx, + cmSetSourceFilesPropertiesCommand.cxx, + cmSetTargetPropertiesCommand.cxx, + cmSetTestsPropertiesCommand.cxx, cmSiteNameCommand.cxx, + cmSourceFile.cxx, cmSourceFile.h, cmSourceGroup.cxx, + cmSourceGroup.h, cmSourceGroupCommand.cxx, cmStringCommand.cxx, + cmSubdirCommand.cxx, cmTarget.cxx, cmTarget.h, + cmTargetLinkLibrariesCommand.cxx, cmTargetLinkLibrariesCommand.h, + cmTest.cxx, cmTest.h, cmTryCompileCommand.cxx, + cmTryRunCommand.cxx, cmUtilitySourceCommand.cxx, + cmVTKMakeInstantiatorCommand.cxx, cmVTKMakeInstantiatorCommand.h, + cmVTKWrapJavaCommand.cxx, cmVTKWrapJavaCommand.h, + cmVTKWrapPythonCommand.cxx, cmVTKWrapPythonCommand.h, + cmVTKWrapTclCommand.cxx, cmVTKWrapTclCommand.h, + cmVariableRequiresCommand.cxx, cmVariableWatch.cxx, + cmVariableWatch.h, cmWhileCommand.cxx, cmWhileCommand.h, + cmWin32ProcessExecution.cxx, cmWin32ProcessExecution.h, + cmWriteFileCommand.cxx, cmXCode21Object.cxx, cmXCodeObject.cxx, + cmXCodeObject.h, cmake.cxx, cmake.h, cmakemain.cxx, + cmakewizard.cxx, cmakewizard.h, CTest/cmCTestBuildCommand.cxx, + CTest/cmCTestConfigureCommand.cxx, + CTest/cmCTestCoverageCommand.cxx, + CTest/cmCTestHandlerCommand.cxx, + CTest/cmCTestMemCheckCommand.cxx, CTest/cmCTestStartCommand.cxx, + CTest/cmCTestSubmitCommand.cxx, CTest/cmCTestTestCommand.cxx, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestUpdateCommand.cxx: + STYLE: some m_ to this-> cleanup + +2006-03-15 09:23 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: Add svn cleanup + before running svn + +2006-03-15 09:22 andy + + * Source/CPack/cmCPackGenericGenerator.cxx: ENH: Allow multiple + install directories + +2006-03-14 16:38 hoffman + + * Modules/FindOpenGL.cmake: ENH: go back to finding the framework + opengl on the mac + +2006-03-14 15:19 hoffman + + * Modules/FindOpenGL.cmake: ENH: use standard include path for + OpenGL + +2006-03-14 14:03 hoffman + + * Modules/Platform/Darwin.cmake, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.cxx, + Source/cmMakefileTargetGenerator.h: ENH: add support for removing + language flags from shared library and shared module link + commands + +2006-03-14 11:35 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fixed object file + name construction to use Convert method for relative path + conversion. Also fixed test of result to check explicitly for a + full path. + +2006-03-14 10:14 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Avoid full paths + and spaces when constructing object file names. + +2006-03-14 09:37 king + + * Source/cmMakefile.cxx: BUG: Clarified confusing error message. + +2006-03-14 02:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-13 16:45 andy + + * Source/CPack/cmCPackGenericGenerator.h: STYLE: Fix style checker + +2006-03-13 15:57 malaterre + + * Source/kwsys/testDynamicLoader.cxx: COMP: Fix warning + +2006-03-13 15:19 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: Introducing new + policy to construct more unique object file names. This should + allow multiple sources with the same file name but different FULL + paths to be added to a single target. + +2006-03-13 14:39 malaterre + + * Source/kwsys/: DynamicLoader.cxx, testDynamicLoader.cxx: BUG: Fix + problem on MacOSX, by disabling part of the test. + +2006-03-13 13:11 hoffman + + * Modules/VTKCompatibility.cmake: ENH: add backwards compatibility + fix for more aggressive find_path command + +2006-03-13 11:27 malaterre + + * Source/kwsys/DynamicLoader.cxx: ENH: Fix dashboard with coverage + +2006-03-13 10:49 malaterre + + * Source/kwsys/CMakeLists.txt: ENH: Do not build the library if we + are not doing Testing + +2006-03-13 10:27 malaterre + + * Source/kwsys/testDynamicLoader.cxx: ENH: Make test usable from + command line + +2006-03-13 02:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-12 10:03 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: remove warning + +2006-03-12 09:43 hoffman + + * Source/CMakeLists.txt: ENH: remove test until it works + +2006-03-12 02:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-11 12:43 hoffman + + * Modules/FindOpenGL.cmake: ENH: take advantage of new framework + stuff + +2006-03-11 11:53 hoffman + + * Source/cmake.cxx: ENH: remove print + +2006-03-11 11:52 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: try to clean up the search for + programs + +2006-03-11 10:09 malaterre + + * Source/kwsys/DynamicLoader.cxx: BUG: Fix for MINGW32 + +2006-03-11 09:59 malaterre + + * Source/kwsys/DynamicLoader.cxx: ENH: Add support for LastError on + HPUX + +2006-03-11 09:47 malaterre + + * Source/kwsys/DynamicLoader.cxx: ENH: Also look into data segment + (consistant with other implementation) + +2006-03-11 02:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-10 17:37 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: undo last change because it + broke the dashboard + +2006-03-10 16:53 hoffman + + * Source/: cmFileCommand.cxx, cmFileCommand.h: ENH: add a new FILE + SYSTEM_PATH that allows you to read a environment variable with a + path in it. + +2006-03-10 16:52 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: fix find program to look for + .com and .exe correctly and not return files with no extension on + windows + +2006-03-10 16:03 malaterre + + * Source/kwsys/: DynamicLoader.hxx.in, SystemTools.hxx.in: ENH: Add + documentation on the problem with system wide path for looking up + dynamic libraries. STYLE: Fix trailing white spaces + +2006-03-10 15:42 malaterre + + * Source/kwsys/testDynamicLoader.cxx: BUG: Need a / for Visual + Studio build + +2006-03-10 15:38 malaterre + + * Source/kwsys/: testDynamicLoader.cxx, testSystemTools.h.in: BUG: + Do the proper path + +2006-03-10 15:12 malaterre + + * Source/kwsys/testDynamicLoader.cxx: BUG: Need a trailing slash + +2006-03-10 15:08 malaterre + + * Source/kwsys/: CMakeLists.txt, testDynamicLoader.cxx, + testSystemTools.h.in: BUG: Fix problem with in the path + +2006-03-10 15:03 andy + + * Source/: cmCTest.cxx, cmCTest.h, + CTest/cmCTestBuildAndTestHandler.cxx, + CTest/cmCTestBuildAndTestHandler.h, + CTest/cmCTestBuildCommand.cxx, CTest/cmCTestBuildCommand.h, + CTest/cmCTestBuildHandler.cxx, CTest/cmCTestBuildHandler.h, + CTest/cmCTestCommand.h, CTest/cmCTestConfigureCommand.cxx, + CTest/cmCTestConfigureCommand.h, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestCoverageCommand.cxx, CTest/cmCTestCoverageCommand.h, + CTest/cmCTestCoverageHandler.cxx, CTest/cmCTestCoverageHandler.h, + CTest/cmCTestEmptyBinaryDirectoryCommand.h, + CTest/cmCTestGenericHandler.cxx, CTest/cmCTestGenericHandler.h, + CTest/cmCTestHandlerCommand.cxx, CTest/cmCTestHandlerCommand.h, + CTest/cmCTestMemCheckCommand.cxx, CTest/cmCTestMemCheckCommand.h, + CTest/cmCTestMemCheckHandler.cxx, CTest/cmCTestMemCheckHandler.h, + CTest/cmCTestRunScriptCommand.cxx, + CTest/cmCTestRunScriptCommand.h, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestScriptHandler.h, CTest/cmCTestSleepCommand.cxx, + CTest/cmCTestSleepCommand.h, CTest/cmCTestStartCommand.cxx, + CTest/cmCTestStartCommand.h, CTest/cmCTestSubmitCommand.cxx, + CTest/cmCTestSubmitCommand.h, CTest/cmCTestSubmitHandler.cxx, + CTest/cmCTestSubmitHandler.h, CTest/cmCTestTestCommand.cxx, + CTest/cmCTestTestCommand.h, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h, CTest/cmCTestUpdateCommand.cxx, + CTest/cmCTestUpdateCommand.h, CTest/cmCTestUpdateHandler.cxx, + CTest/cmCTestUpdateHandler.h: STYLE: Fix some style issues + +2006-03-10 14:53 malaterre + + * Source/kwsys/: CMakeLists.txt, testDynamicLoader.cxx, + testSystemTools.h.in: BUG: Trying to get testDynamicLoader to + work on Solaris and SunOS, where current directory is not lookup + when doing dlopen + +2006-03-10 13:54 hoffman + + * Source/: cmCommandArgumentLexer.h, + cmDependsFortranParserTokens.h, cmDependsJavaLexer.h, + cmDependsJavaParserHelper.h, cmDependsJavaParserTokens.h, + cmExecProgramCommand.h, cmExprLexer.h, cmExprParserTokens.h, + cmFLTKWrapUICommand.h, cmFileCommand.h, cmFindBase.h, + cmGlobalBorlandMakefileGenerator.h, cmGlobalGenerator.h, + cmGlobalMSYSMakefileGenerator.h, + cmGlobalMinGWMakefileGenerator.h, + cmGlobalNMakeMakefileGenerator.h, + cmGlobalUnixMakefileGenerator3.h, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.h, cmGlobalWatcomWMakeGenerator.h, + cmGlobalXCodeGenerator.h, cmListCommand.h, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.h, cmSourceFile.cxx, + cmStringCommand.cxx, cmSystemTools.cxx, cmTarget.cxx, + cmTargetLinkLibrariesCommand.cxx, cmTryCompileCommand.cxx, + cmTryRunCommand.cxx, cmUseMangledMesaCommand.cxx, + cmUtilitySourceCommand.cxx, cmVTKMakeInstantiatorCommand.cxx, + cmVTKWrapJavaCommand.cxx, cmVTKWrapPythonCommand.cxx, + cmVTKWrapTclCommand.cxx, cmVariableRequiresCommand.cxx, + cmVariableWatch.cxx, cmVariableWatch.h, cmWhileCommand.cxx, + cmWin32ProcessExecution.cxx, cmXCode21Object.cxx, + cmXCodeObject.cxx, cmakemain.cxx: STYLE: fix line lengths + +2006-03-10 13:34 malaterre + + * Source/kwsys/SystemTools.cxx: STYLE: Remove trailing whitespaces + +2006-03-10 13:34 malaterre + + * Source/kwsys/: CMakeLists.txt, DynamicLoader.cxx: BUG: Fix + DynamicLoader implementation on MacOSX (using old API) + +2006-03-10 13:33 malaterre + + * Source/kwsys/SystemTools.cxx: ENH: Add trailing whitespace + +2006-03-10 13:06 andy + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomTargetCommand.cxx, cmAddDefinitionsCommand.cxx, + cmAddDefinitionsCommand.h, cmAddDependenciesCommand.cxx, + cmAddExecutableCommand.h, cmBuildCommand.cxx, + cmBuildNameCommand.h, cmCMakeMinimumRequired.cxx, + cmCPluginAPI.cxx, cmCPluginAPI.h, cmCacheManager.cxx, + cmCommandArgumentParser.cxx, cmCommandArgumentParserHelper.h, + cmCommandArgumentParserTokens.h, cmCreateTestSourceList.cxx, + cmCustomCommand.cxx, cmDependsC.cxx, cmDependsC.h, + cmDependsFortranLexer.cxx, cmDependsFortranLexer.h, + cmLocalVisualStudio7Generator.cxx, cmMacroCommand.cxx, + cmMacroCommand.h, cmMakeDepend.cxx, cmake.cxx, cmakewizard.cxx, + CPack/cmCPackGenerators.cxx, CPack/cmCPackGenerators.h, + CPack/cmCPackGenericGenerator.cxx, + CPack/cmCPackGenericGenerator.h, CPack/cmCPackLog.cxx, + CPack/cmCPackLog.h, CPack/cmCPackNSISGenerator.cxx, + CPack/cmCPackNSISGenerator.h, + CPack/cmCPackPackageMakerGenerator.cxx, + CPack/cmCPackSTGZGenerator.cxx, CPack/cmCPackSTGZGenerator.h, + CPack/cmCPackTGZGenerator.cxx, CPack/cmCPackTGZGenerator.h, + CPack/cpack.cxx: STYLE: Fix some style issues + +2006-03-10 12:47 andy + + * Source/CPack/cmCPackPackageMakerGenerator.cxx: STYLE: Cleanup + trailing spaces + +2006-03-10 12:01 malaterre + + * Source/kwsys/: Glob.cxx, Registry.cxx, RegularExpression.cxx, + testCommandLineArguments.cxx: STYLE: Make sure to use the proper + cast. + +2006-03-10 11:58 alex + + * Modules/FindKDE4.cmake: ENH: new module to find the + FindKDE4Internal.cmake installed by kdelibs4 + + Alex + +2006-03-10 11:57 malaterre + + * Source/kwsys/: DynamicLoader.cxx, testDynamicLoader.cxx: ENH: + Make sure that we find the proper symbol and not the one that + start with _. STYLE: Remove an old style cast + +2006-03-10 11:32 malaterre + + * Source/kwsys/: DynamicLoader.cxx, testDynamicLoader.cxx: ENH: + Hopefully have the DynamicLoader to the proper thing. + +2006-03-10 11:13 hoffman + + * Source/: cmCacheManager.h, cmLocalVisualStudio7Generator.h, + cmMakeDepend.h, cmMakefile.h, cmOutputRequiredFilesCommand.h, + cmProjectCommand.h, cmRemoveDefinitionsCommand.h, + cmSetTestsPropertiesCommand.h, cmSourceGroup.h, + cmStandardIncludes.h, cmStringCommand.h, cmSubdirCommand.h, + cmSystemTools.h, cmTarget.h, cmTryCompileCommand.h, + cmVariableWatch.h, cmXCode21Object.h, cmake.h: ENH: fix line + length style stuff + +2006-03-10 11:12 hoffman + + * Source/cmFindBase.cxx: ENH: avoid adding junk into paths + +2006-03-10 10:28 malaterre + + * Source/kwsys/testDynamicLoader.cxx: BUG: Make sure to have proper + dependencies + +2006-03-10 10:26 hoffman + + * Source/kwsys/CMakeLists.txt: ENH: use CMAKE_DL_LIBS and not dl + directly as it does not always exist + +2006-03-10 10:23 malaterre + + * Source/kwsys/CMakeLists.txt: COMP: Fix cygwin build + +2006-03-10 10:19 malaterre + + * Source/kwsys/testDynload.c: COMP: Fix compilation on MacOSX + (common symbols not allowed with MH_DYLIB output format) + +2006-03-10 10:12 andy + + * Source/CMakeLists.txt, Tests/BundleTest/CMakeLists.txt: ENH: Add + package to bundle test + +2006-03-10 10:07 andy + + * Source/kwsys/testDynamicLoader.cxx: COMP: Add missing include + +2006-03-10 02:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-09 17:16 malaterre + + * Source/kwsys/testDynload.c: BUG: Remove comment + +2006-03-09 17:15 malaterre + + * Source/kwsys/: testDynamicLoader.cxx, testDynload.c: ENH: remove + test temporarily + +2006-03-09 17:08 malaterre + + * Source/kwsys/: CMakeLists.txt, testDynamicLoader.cxx: ENH: Still + more coverage of the DynamicLoader + +2006-03-09 17:06 malaterre + + * Source/kwsys/testDynload.c: ENH: Add a file to generate the lib + +2006-03-09 16:40 malaterre + + * Source/kwsys/testDynamicLoader.cxx: ENH: Improve test coverage + +2006-03-09 16:40 malaterre + + * Source/kwsys/: Registry.cxx, Registry.hxx.in: STYLE: Minor style + +2006-03-09 15:55 king + + * CMakeLists.txt: ENH: Updated patch level to 4 for special KDE + release. + +2006-03-09 15:47 hoffman + + * Source/: cmCacheManager.cxx, cmCacheManager.h: ENH: if + CMakeCache.txt has been removed, then automatically remove + CMakefiles/*.cmake + +2006-03-09 15:00 hoffman + + * Modules/Platform/AIX.cmake: ENH: add correct initial flags for + aix + +2006-03-09 14:57 hoffman + + * Modules/Platform/Darwin.cmake: ENH: remove junk + +2006-03-09 14:41 malaterre + + * Source/kwsys/CMakeLists.txt: ENH: Carefully turn testing of + DynamicLib on + +2006-03-09 14:36 malaterre + + * Source/kwsys/: Directory.cxx, testSystemTools.cxx, + DynamicLoader.cxx: STYLE: Minor style + +2006-03-09 14:35 malaterre + + * Source/kwsys/testDynamicLoader.cxx: ENH: Adding initial test for + DynamicLoader + +2006-03-09 14:30 hoffman + + * Source/: cmFileCommand.cxx, cmFileCommand.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx: ENH: use a cmake script to do the + clean step, this allows for large numbers of files to be removed + without making the command line too long + +2006-03-09 14:10 alex + + * Modules/: FindKDE.cmake, FindKDE3.cmake, KDE3Macros.cmake, + kde3init_dummy.cpp.in, kde3uic.cmake: ENH: add real-world-tested + and used KDE3 support, and obsolete FindKDE.cmake, which wasn't + used by anybody that I heard of + + Alex + +2006-03-09 11:57 andy + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx: STYLE: Fix some style + issues + +2006-03-09 11:35 hoffman + + * Modules/FindTCL.cmake, Source/cmFindPathCommand.cxx: ENH: fix a + bug in the find path stuff so that it can find headers deep in + frameworks + +2006-03-09 11:17 andy + + * Source/CTest/: cmCTestBuildAndTestHandler.cxx, + cmCTestBuildCommand.cxx, cmCTestBuildHandler.cxx, + cmCTestBuildHandler.h, cmCTestConfigureCommand.cxx, + cmCTestConfigureCommand.h, cmCTestConfigureHandler.cxx, + cmCTestConfigureHandler.h, cmCTestCoverageCommand.cxx, + cmCTestCoverageCommand.h, cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h, cmCTestEmptyBinaryDirectoryCommand.h, + cmCTestGenericHandler.cxx, cmCTestGenericHandler.h, + cmCTestHandlerCommand.cxx, cmCTestHandlerCommand.h, + cmCTestMemCheckCommand.h, cmCTestMemCheckHandler.cxx, + cmCTestRunScriptCommand.cxx, cmCTestScriptHandler.cxx, + cmCTestStartCommand.cxx, cmCTestStartCommand.h, + cmCTestSubmitCommand.cxx, cmCTestSubmitCommand.h, + cmCTestSubmitHandler.cxx, cmCTestTestCommand.cxx, + cmCTestTestHandler.cxx, cmCTestTestHandler.h, + cmCTestUpdateCommand.cxx, cmCTestUpdateCommand.h, + cmCTestUpdateHandler.cxx: STYLE: Fix some style issues + +2006-03-09 09:53 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fix problem on + Wacom system with global symbolic targets + +2006-03-09 08:32 andy + + * Source/CPack/: cmCPackGenericGenerator.cxx, + cmCPackPackageMakerGenerator.cxx, cpack.cxx: STYLE: Fix style + problems + +2006-03-09 08:20 andy + + * Utilities/: cmcurl/formdata.c, cmtar/libtar.h: COMP: Remove win64 + warnings + +2006-03-09 02:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-08 18:16 hoffman + + * Source/cmFindProgramCommand.cxx: ENH: make sure system path is + not added unless asked for + +2006-03-08 17:11 alex + + * Modules/UsePkgConfig.cmake: ENH: add a cmake module for using + pkg-config, tested in kdelibs, ok by Bill Hoffman + + Alex + +2006-03-08 16:33 andy + + * Source/CPack/: cmCPackGenerators.cxx, cmCPackGenerators.h, + cmCPackGenericGenerator.cxx, cmCPackGenericGenerator.h, + cmCPackLog.cxx, cmCPackLog.h, cmCPackNSISGenerator.cxx, + cmCPackNSISGenerator.h, cmCPackPackageMakerGenerator.cxx, + cmCPackPackageMakerGenerator.h, cmCPackSTGZGenerator.cxx, + cmCPackSTGZGenerator.h, cmCPackTGZGenerator.cxx, + cmCPackTGZGenerator.h, cpack.cxx: STYLE: Lots of formating to + remove style problems + +2006-03-08 14:02 andy + + * Source/CMakeLists.txt, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstall/InstallScript2.cmake, + Tests/SimpleInstall/TestSubDir/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/InstallScript2.cmake, + Tests/SimpleInstallS2/TestSubDir/CMakeLists.txt: ENH: Add + additional subdirectory to improve testing and to allow cleanup + when testing cpack + +2006-03-08 13:59 andy + + * Source/CPack/cmCPackPackageMakerGenerator.cxx: BUG: Handle + version with multiple dots + +2006-03-08 13:20 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: COMP: Ok, fix typo + +2006-03-08 13:13 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Add testing for cpack + +2006-03-08 13:06 king + + * Source/kwsys/ProcessUNIX.c: ENH: Enabled process tree killing on + AIX. + +2006-03-08 12:42 king + + * Source/kwsys/ProcessUNIX.c: ENH: Enabled process tree killing on + the SGI. + +2006-03-08 12:36 king + + * Source/kwsys/ProcessUNIX.c: ENH: Enabled process tree killing for + FreeBSD and Sun. + +2006-03-08 12:12 king + + * Source/kwsys/ProcessUNIX.c: ENH: Enabled process tree killing on + HP-UX. + +2006-03-08 11:57 king + + * Source/kwsys/ProcessUNIX.c: BUG: Do not leak ps FILE when the + process starts but reading the header fails. + +2006-03-08 11:39 king + + * Source/kwsys/testProcess.c: ENH: Added a way to quickly enable + manual testing of grandchild killing. + +2006-03-08 11:38 king + + * Source/kwsys/ProcessUNIX.c: ENH: Added implementation of process + tree killing that runs "ps" to traverse the tree. + +2006-03-08 10:52 andy + + * Source/: cmListFileCache.cxx, cmListFileCache.h: BUG: Remove some + old legacy code and remove memory leak + +2006-03-08 09:16 malaterre + + * Source/kwsys/: DynamicLoader.cxx, DynamicLoader.hxx.in: BUG: + Including file within a namespace{} is dangerous(unless symbols + are within an extern C). Also update documentation about special + case for MacOSX + +2006-03-08 02:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-07 19:52 hoffman + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: remove cpack stuff for now + so that we can get mac dashboards again + +2006-03-07 15:31 andy + + * CMakeGraphVizOptions.cmake, Source/cmake.cxx: ENH: Add a way to + overwrite some preferences and ignore certain targets + +2006-03-07 14:46 king + + * Source/cmake.cxx: ENH: Add CMAKE_COMMAND and CMAKE_ROOT variables + when running in script mode. This partially addresses bug#2828. + +2006-03-07 14:38 king + + * Source/cmGlobalGenerator.cxx: BUG: Check for whether to add -C to + package rule should check for a . in the first character not the + second. + +2006-03-07 12:03 andy + + * Source/cmake.cxx: COMP: Fix warnings + +2006-03-07 10:05 king + + * Source/cmFileCommand.cxx: BUG: Most platforms other than Linux + seem to require executable permissions on their shared libraries. + +2006-03-07 10:04 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Some platforms require + executable permission on shared libraries. + +2006-03-07 02:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-06 15:41 hoffman + + * bootstrap: ENH: add more depends for bootstrap + +2006-03-06 15:14 hoffman + + * Modules/Platform/Darwin.cmake: ENH: add support for language + flags that allow for universal binaries + +2006-03-06 15:14 hoffman + + * Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/Platform/CYGWIN.cmake, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmMakefileLibraryTargetGenerator.cxx: ENH: add support for + language flags at rule expansion time + +2006-03-06 15:01 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: add support for manifest + stuff + +2006-03-06 14:30 malaterre + + * Source/kwsys/DynamicLoader.cxx: COMP: Fix compilation on MacOSX + +2006-03-06 14:08 hoffman + + * Modules/FindQt3.cmake: ENH: try to fix non-clean dashboards + +2006-03-06 14:07 malaterre + + * Source/kwsys/CMakeLists.txt: ENH: Compile DynamicLoader + +2006-03-06 14:02 malaterre + + * Source/kwsys/: DynamicLoader.cxx, DynamicLoader.hxx.in: ENH: + Adding kwsys implementation for a DynamicLoader class. Copy from + itkDynamicLoader, with patch from cmDynamicLoader + +2006-03-06 13:43 hoffman + + * Source/kwsys/: Directory.cxx, Registry.cxx: ENH: add missing + cmake depend hacks + +2006-03-06 13:34 hoffman + + * Source/kwsys/Glob.cxx: ENH: add missing cmake include + +2006-03-06 13:02 malaterre + + * Source/kwsys/Directory.cxx: COMP: Some STL implementation do not + provide clear on std::string + +2006-03-06 11:57 malaterre + + * Source/kwsys/: Directory.cxx, Directory.hxx.in: BUG: Need to + reset internal structure in case of multiple calls to Load + +2006-03-06 10:12 malaterre + + * Source/kwsys/: Directory.cxx, Directory.hxx.in: ENH: Redo + implementation of itkDirectory to use kwsys (avoid duplicating + code). + +2006-03-06 02:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-05 09:09 king + + * Source/cmLocalGenerator.cxx: BUG: Fix for generated install + scripts to support prefixes with trailing slashes or just a + single slash. + +2006-03-05 08:38 hoffman + + * Source/cmFindBase.cxx: ENH: fix old style parsing of FIND + commands and fix broken tests + +2006-03-05 02:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-04 02:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-03 23:00 hoffman + + * Source/cmFindBase.cxx: ENH: make sure NAMES tag is not required + for name argument, fixes msys generator + +2006-03-03 19:29 king + + * Source/cmInstallCommand.cxx, Source/cmInstallCommand.h, + Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Added PERMISSIONS + option to the TARGETS mode of the INSTALL command. + +2006-03-03 18:44 king + + * Source/cmFileCommand.cxx, Source/cmInstallCommand.cxx, + Source/cmInstallCommand.h, Source/cmInstallFilesGenerator.cxx, + Source/cmInstallFilesGenerator.h, Source/cmInstallGenerator.cxx, + Source/cmInstallGenerator.h, Source/cmLocalGenerator.cxx, + Tests/SimpleInstall/CMakeLists.txt, Tests/SimpleInstall/inst.cxx, + Tests/SimpleInstall/inst2.cxx, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/inst.cxx, Tests/SimpleInstallS2/inst2.cxx: + ENH: Added PERMISSIONS and RENAME options to the INSTALL + command's FILES and PROGRAMS mode, and corresponding support to + FILE(INSTALL). Default permissions for shared libraries on + non-Windows/non-OSX platforms no longer has the execute bit set. + +2006-03-03 18:06 king + + * Source/: cmTarget.cxx, cmTarget.h: ENH: Replaced UpdateLocation + method with call to GetLocation. Added comment about problems + with the LOCATION attribute. + +2006-03-03 15:04 andy + + * Source/CPack/: cmCPackPackageMakerGenerator.cxx, + cmCPackPackageMakerGenerator.h: ENH: Check package maker version + +2006-03-03 14:28 andy + + * Source/cmake.cxx: COMP: Oops, typo + +2006-03-03 14:24 andy + + * Source/: cmTarget.cxx, cmTarget.h, cmake.cxx, cmake.h: ENH: Add + support for exporting graphviz of the project dependencies + +2006-03-03 12:58 king + + * Source/CMakeLists.txt, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio6Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, + Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmTarget.cxx, Tests/BundleTest/BundleLib.cxx, + Tests/BundleTest/BundleTest.cxx, Tests/BundleTest/CMakeLists.txt: + BUG: Fixed installation of MacOSX Bundle executables and the + corresponding install_name remapping support. Extended the + BundleTest test to check that this all works. Part of these + fixes required changing the signature of AppendDirectoryForConfig + in all generators. It now accepts prefix and suffix strings to + deal with whether leading or trailing slashes should be included + with the configuration subdirectory. + +2006-03-03 12:01 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: add manifest support for + 2005 + +2006-03-03 11:59 hoffman + + * Modules/CMakeVS8FindMake.cmake: ENH: look for VCExpress first + +2006-03-03 10:52 andy + + * Modules/CPack.Info.plist.in, + Source/CPack/cmCPackPackageMakerGenerator.cxx: ENH: Add verbose + flag to package maker and add CFBundleIdentifier string + +2006-03-03 02:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-02 21:33 hoffman + + * Source/kwsys/: Registry.cxx, SystemTools.cxx: ENH: fix std in + kwsys, has to be kwsys_stl + +2006-03-02 20:11 hoffman + + * Source/cmFindBase.cxx: ENH: remove warning + +2006-03-02 15:03 hoffman + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: removed unused + methods after find changes + +2006-03-02 14:39 hoffman + + * Source/cmTryCompileCommand.cxx: ENH: pass CMAKE_MODULE_PATH into + try compile projects + +2006-03-02 13:43 hoffman + + * Source/: cmFindBase.cxx, cmFindLibraryCommand.cxx: ENH: fix + spelling errors in docs + +2006-03-02 13:30 hoffman + + * Modules/Platform/CYGWIN.cmake, Modules/Platform/Darwin.cmake, + Modules/Platform/Linux.cmake, Modules/Platform/SunOS.cmake, + Modules/Platform/UnixPaths.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/WindowsPaths.cmake, + Source/cmBootstrapCommands.cxx, Source/cmFindBase.cxx, + Source/cmFindBase.h, Source/cmFindFileCommand.cxx, + Source/cmFindFileCommand.h, Source/cmFindLibraryCommand.cxx, + Source/cmFindLibraryCommand.h, Source/cmFindPathCommand.cxx, + Source/cmFindPathCommand.h, Source/cmFindProgramCommand.cxx, + Source/cmFindProgramCommand.h, Source/kwsys/Registry.cxx, + Source/kwsys/SystemTools.cxx: ENH: check in new find stuff + +2006-03-02 07:52 hoffman + + * Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/CMakeJavaInformation.cmake, Source/cmGlobalGenerator.cxx: + ENH: fix for bug 2921, move _OVERRIDE variable to a better + position to allow changing _INIT variables + +2006-03-02 02:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-03-01 22:45 king + + * Source/: cmSetTargetPropertiesCommand.h, cmTarget.cxx: ENH: + Finished CMAKE__POSTFIX feature and documented it. The + value of this variable is used when a library target is created + to initialize the _POSTFIX target property. The value of + this property is used (even for executables) to define a + per-configuration postfix on the name of the target. Also + enabled use of the OUTPUT_NAME property for non-executable + targets. + +2006-03-01 19:00 king + + * CMakeLists.txt: ENH: CMake does not need RPATHs at all for its + own executables. Disable them to avoid relinking during + installation. + +2006-03-01 18:54 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: Cleaned up generation of + directory-level rules and their support structure. The + directorystart rule has been removed in favor of checking the + build system in the subdirectory makefile first. The "directory" + rule has been renamed "all" since it corresponds to the "all" + pass anyway (as against "clean"). Also fixed directory-level + rule for preinstall. + +2006-03-01 18:49 king + + * Source/cmGlobalGenerator.cxx: BUG: Check for whether to add + BUILD_TYPE to install rule should check for a . in the first + character not the second. + +2006-03-01 15:00 andy + + * Modules/: CPack.cmake, NSIS.template.in: ENH: Several changes to + for NSIS + +2006-03-01 13:15 andy + + * CMakeLists.txt, Modules/CPack.cmake, + Modules/InstallRequiredSystemLibraries.cmake: ENH: Install system + libraries only if project requires them + +2006-03-01 13:05 andy + + * Source/cmSystemTools.cxx: BUG: Even more VS8 issues + +2006-03-01 12:50 andy + + * Source/CTest/cmCTestSubmitHandler.cxx: BUG: More VS8 fixes + +2006-03-01 11:55 andy + + * Templates/CMakeLists.txt: ENH: Install cpack files + +2006-03-01 08:28 andy + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.h, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h: ENH: Cleanup global targets even more + and potentially fix Xcode + +2006-03-01 02:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-28 16:33 andy + + * Source/cmGlobalGenerator.cxx: BUG: Ok, fix the ordering + +2006-02-28 16:22 andy + + * Source/CTest/cmCTestHandlerCommand.cxx: BUG: Fix for STL + +2006-02-28 16:17 andy + + * Source/cmCTest.h: BUG: Handle buggy streams + +2006-02-28 15:56 andy + + * Source/cmCTest.cxx: BUG: Add additional check + +2006-02-28 15:31 andy + + * Source/cmGlobalGenerator.cxx: BUG: On Visual Studio and XCode, + handle build configurations + +2006-02-28 15:31 andy + + * Source/CTest/cmCTestBuildAndTestHandler.cxx: STYLE: Remove debug + +2006-02-28 14:18 andy + + * Modules/CPack.cmake, Templates/CPack.GenericLicense.txt, + Templates/CPack.GenericWelcome.txt: ENH: Add resource files for + PackageMaker + +2006-02-28 14:06 andy + + * Templates/CPack.GenericDescription.txt, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Add generic + instructions + +2006-02-28 13:30 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Attempt to handle windows + without NSIS installed + +2006-02-28 11:38 king + + * Source/kwsys/ProcessWin32.c: COMP: Fixed warnings for Borland + 5.8. + +2006-02-28 11:14 andy + + * Modules/FindQt4.cmake: BUG: Fix typo + +2006-02-28 11:13 andy + + * Modules/FindQt4.cmake: ENH: Add support for debian having both + qt3 and qt4 + +2006-02-28 10:27 hoffman + + * Modules/: CMakeVS71FindMake.cmake, CMakeVS8FindMake.cmake, + FindDart.cmake, FindDoxygen.cmake, FindGCCXML.cmake, + FindHTMLHelp.cmake, FindMPI.cmake, FindQt3.cmake, FindQt4.cmake, + FindTCL.cmake, Platform/Darwin.cmake: ENH: use program files env + for searching + +2006-02-28 09:53 king + + * Source/cmGlobalGenerator.cxx: BUG: Need to use the CMAKE_COMMAND + cache entry to get the location of CMake. + +2006-02-28 08:23 andy + + * Source/CTest/cmCTestBuildAndTestHandler.cxx, + Source/CTest/cmCTestBuildAndTestHandler.h, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Add support for + multiple build targets and start adding simple cpack tests + +2006-02-28 02:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-27 23:06 hoffman + + * Source/cmSourceGroupCommand.cxx: ENH: fix problem if there are .. + in the path to the source file specified in a source group + +2006-02-27 16:38 hoffman + + * Source/: cmFindBase.cxx, cmFindBase.h: ENH: add new find stuff + +2006-02-27 12:14 hoffman + + * Modules/: CMakeCInformation.cmake, CMakeCXXInformation.cmake, + CMakeFortranInformation.cmake, CMakeRCInformation.cmake: ENH: fix + spelling errors + +2006-02-27 10:58 andy + + * Modules/CPack.Info.plist.in, Modules/CPack.cmake, + Modules/NSIS.template.in, Source/cmBootstrapCommands.cxx, + Source/cmCommands.cxx, Source/cmGlobalGenerator.cxx, + Source/CPack/cmCPackGenericGenerator.cxx, + Templates/CPackConfig.cmake.in: ENH: Several packaging issues. + Allow random variables to be passed to cpack (anything starting + with CPACK_, add preinstall to the list of dependencies for + package, fix typos + +2006-02-27 02:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-26 02:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-25 01:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-24 18:15 andy + + * Source/: cmGlobalGenerator.cxx, cmake.h: COMP: More fixes for non + makefile generators and global targets + +2006-02-24 17:43 andy + + * Source/cmGlobalGenerator.cxx: STYLE: Remove debug + +2006-02-24 17:35 andy + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmGlobalXCode21Generator.h, + cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmMakefile.cxx, cmTarget.h: + COMP: Even more global target fixes + +2006-02-24 16:30 andy + + * Source/CMakeLists.txt: ENH: Install cpack + +2006-02-24 16:20 andy + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: More fixing of support + for global target son visual studio + +2006-02-24 13:13 king + + * Modules/Platform/Darwin.cmake, Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, + Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmSetTargetPropertiesCommand.h, Source/cmTarget.cxx, + Source/cmTarget.h, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Created target + property INSTALL_NAME_DIR initalized by CMAKE_INSTALL_NAME_DIR + specifying the directory portion of the OSX install_name field in + shared libraries. This is the OSX equivalent of RPATH. + +2006-02-24 12:50 hoffman + + * Source/cmSourceGroupCommand.cxx: ENH: fix warning and remove + unused variable + +2006-02-24 11:13 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx: BUG: Fix generation of Xcode 2.0 + and earlier projects to use CMAKE_BUILD_TYPE. + +2006-02-24 11:07 king + + * Source/cmGlobalXCodeGenerator.cxx: BUG: Treat GLOBAL_TARGET like + UTILITY for generation. + +2006-02-24 10:56 andy + + * Source/cmLocalGenerator.cxx: COMP: Remove warnings + +2006-02-24 10:55 andy + + * Source/cmGlobalGenerator.cxx: BUG: Only add test targets when + testing is enabled. Also add CMAKE_CFG_INTDIR when specified + +2006-02-24 09:43 andy + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.h, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: COMP: Handle preinstall + properly on IDEs + +2006-02-24 09:32 andy + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: COMP: Fix for preinstall + +2006-02-24 09:08 andy + + * Modules/CheckIncludeFiles.cmake: BUG: Fix the module + +2006-02-24 08:57 andy + + * Source/cmake.cxx: BUG: Fix location of ctest for bootstrap + +2006-02-24 02:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-23 18:25 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: try to fix things + up for the dashboard + +2006-02-23 17:30 andy + + * Source/: cmGlobalGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: Properly handle target + dependencies + +2006-02-23 14:05 andy + + * Source/cmGlobalVisualStudio71Generator.cxx: COMP: Even more + Visual Studio fixes. Why is this code duplicated? + +2006-02-23 13:46 andy + + * Source/: cmGlobalGenerator.cxx, + cmLocalVisualStudio7Generator.cxx: COMP: More fixes for visual + studio + +2006-02-23 13:37 andy + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.h, + cmGlobalVisualStudio7Generator.cxx: COMP: Fixes for visual studio + +2006-02-23 11:36 hoffman + + * Source/cmSourceGroupCommand.cxx: ENH: fix for bug 2908 crash for + empty source group name + +2006-02-23 10:48 andy + + * Source/: cmGlobalGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: Remove debug + +2006-02-23 10:07 andy + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: Add a notion of a global + target + +2006-02-23 10:02 andy + + * Source/: cmTarget.cxx, cmTarget.h, cmMakefile.cxx: ENH: Add a + notion of a global target + +2006-02-23 10:00 andy + + * Source/: cmake.cxx, cmake.h: ENH: Add accessors for CTest and + CPack + +2006-02-23 09:59 andy + + * Source/CPack/cpack.cxx: ENH: Allow running without config file + +2006-02-23 09:58 andy + + * Modules/: CMakeConfigurableFile.in, CheckIncludeFiles.cmake, + CheckSymbolExists.cmake: ENH: Make modules use configure instead + of file write + +2006-02-23 09:38 andy + + * Modules/CPack.cmake, Modules/NSIS.template.in, + Source/CPack/cmCPackNSISGenerator.cxx, + Templates/CPackConfig.cmake.in: ENH: Several NSIS features + +2006-02-23 02:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-22 02:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-21 12:19 hoffman + + * Modules/Platform/Windows-cl.cmake, + Source/cmLocalVisualStudio7Generator.cxx: ENH: make command line + flags more consistent with ide settings + +2006-02-21 09:35 hoffman + + * Source/cmGlobalMSYSMakefileGenerator.cxx: ENH: use last mount + point found for mingw location, not first + +2006-02-21 07:58 hoffman + + * Source/cmGlobalMSYSMakefileGenerator.cxx: ENH: try to get the + order a bit better + +2006-02-21 02:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-20 23:08 hoffman + + * Modules/CMakeDetermineCCompiler.cmake, Source/cmCacheManager.cxx, + Source/cmGlobalMSYSMakefileGenerator.cxx, + Source/cmGlobalMSYSMakefileGenerator.h: ENH: better finding of + mingw from msys, and delete CMakeFiles directory when cache is + deleted + +2006-02-20 17:47 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: make sure + CMAKE_STANDARD_LIBRARIES are used + +2006-02-20 14:37 hoffman + + * Source/cmLocalGenerator.h: ENH: make it compile on vs6 + +2006-02-20 14:21 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: Add target-level + COMPILE_FLAGS to the target not the individual source files. + This simplifies the generated files and puts flags in a more + logical order (VS6 works, VS7 needs more translation to work). + +2006-02-20 13:42 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx: ENH: change expand stuff to pass a + struct for all the args + +2006-02-20 12:48 king + + * Source/cmMakefileTargetGenerator.cxx: ENH: Order compilation + flags from most general to most specific: language, then target, + then source. + +2006-02-20 09:54 king + + * Source/: cmGlobalXCodeGenerator.cxx, cmLocalGenerator.h: BUG: + Xcode generator should use local generator computation of include + directories. + +2006-02-20 03:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-19 19:29 king + + * Source/: cmFileCommand.cxx, cmInstallGenerator.cxx, + cmInstallTargetGenerator.cxx: BUG: Fixed optional file install + support for multi-configuration generators. + +2006-02-19 19:28 king + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, cmGlobalXCodeGenerator.cxx, + cmTarget.cxx: ENH: Switched order of slash and configuration name + in cmGlobalGenerator::AppendDirectoryForConfig method to increase + flexibility. + +2006-02-19 18:47 king + + * bootstrap, Source/CMakeLists.txt, Source/cmInstallCommand.cxx, + Source/cmInstallCommand.h, Source/cmInstallFilesCommand.h, + Source/cmInstallFilesGenerator.cxx, + Source/cmInstallFilesGenerator.h, + Source/cmInstallProgramsCommand.h, Source/cmLocalGenerator.cxx, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Implemented FILES and + PROGRAMS forms of the INSTALL command as replacements for the + INSTALL_FILES and INSTALL_PROGRAMS commands. This addresses the + request for absolute path install destinations in bug#2691. + +2006-02-19 18:44 king + + * Source/cmInstallTargetGenerator.cxx: STYLE: Removed unused + includes. + +2006-02-19 17:44 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Using CMAKE_SKIP_BUILD_RPATH + to test relink support. + +2006-02-19 17:27 king + + * Source/: cmInstallTargetGenerator.cxx, + cmInstallTargetsCommand.cxx, cmTarget.cxx, cmTarget.h: BUG: Fixed + relink with new install framework. + +2006-02-19 16:35 king + + * Source/cmInstallCommand.cxx: COMP: Removed unused variables. + +2006-02-19 16:12 king + + * Source/: cmInstallGenerator.cxx, cmInstallGenerator.h: BUG: Do + not report files as installed if they are optional and do not + exist. + +2006-02-19 16:10 king + + * Source/cmInstallTargetGenerator.cxx: BUG: Import libraries should + be installed as STATIC_LIBRARY. + +2006-02-19 15:25 king + + * bootstrap, Source/CMakeLists.txt, Source/cmInstallCommand.cxx, + Source/cmInstallCommand.h, Source/cmInstallGenerator.cxx, + Source/cmInstallGenerator.h, Source/cmInstallScriptGenerator.cxx, + Source/cmInstallScriptGenerator.h, + Source/cmInstallTargetGenerator.cxx, + Source/cmInstallTargetGenerator.h, + Source/cmInstallTargetsCommand.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmSetTargetPropertiesCommand.h, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Created new install + script generation framework. The INSTALL command creates the + generators which are later used by cmLocalGenerator to create the + cmake_install.cmake files. A new target installation interface + is provided by the INSTALL command which fixes several problems + with the INSTALL_TARGETS command. See bug#2691. Bugs 1481 and + 1695 are addressed by these changes. + +2006-02-19 13:49 king + + * Modules/Platform/Windows-gcc.cmake: BUG: Fixed module creation + rules. Removed soname portion of all rules because it is never + used on this platform. + +2006-02-19 13:34 king + + * Modules/Platform/CYGWIN.cmake: BUG: Fixed cygwin module creation + rules. Modules should not have the "cyg" prefix by default. + Removd soname flags from creation rules because they are never + used on this platform. + +2006-02-19 13:10 king + + * Source/cmLocalGenerator.cxx, + Tests/CustomCommand/GeneratedHeader/CMakeLists.txt: ENH: + Automatic include directories should not be done by default as + was just implemented. Instead a project may now set + CMAKE_INCLUDE_CURRENT_DIR to get this behavior. The current + source and binary directories are added automatically to the + beginning of the include path in every directory. This simulates + in-source behavior for double-quote includes when there are + generated sources and headers in the directory. + +2006-02-19 13:08 king + + * Source/cmFileCommand.cxx: BUG: Install location full-path test + for windows needs to account for both lower case and upper case + drive letters. + +2006-02-19 01:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-18 16:47 king + + * Source/cmLocalGenerator.cxx: BUG: Remove trailing slashes from + install destinations. + +2006-02-18 16:36 king + + * Source/cmFileCommand.cxx: ENH: Clarified error message. + +2006-02-18 15:42 king + + * Source/cmLocalGenerator.cxx: COMP: Fixed shadowed variable + warning. + +2006-02-18 15:37 king + + * Modules/Platform/CYGWIN.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-gcc.cmake, + Modules/Platform/Windows-wcl386.cmake, + Modules/Platform/Windows.cmake, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmMakefileLibraryTargetGenerator.cxx, Source/cmTarget.cxx, + Source/cmTarget.h: ENH: Generate import libraries for DLLs on + Cygwin and MinGW. + +2006-02-18 11:51 king + + * Source/: cmLocalGenerator.cxx, cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: ENH: If + CMAKE_NO_AUTOMATIC_INCLUDE_DIRECTORIES is not set try to + approximate in-source build include file behavior in an + out-of-source build by adding the build tree directory + corresponding to a source tree directory at the beginning of the + include path. Also fixed VS6 and VS7 generators to use + cmLocalGenerator's computation of include paths. The VS6 + generator will now short-path the include directories if the + total length is too long in order to try to avoid its truncation + limit. + +2006-02-18 11:03 hoffman + + * Source/: cmGlobalKdevelopGenerator.cxx, + cmGlobalKdevelopGenerator.h: ENH: apply patch from Alex to + support some more kdevelop stuff + +2006-02-18 01:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-17 12:49 hoffman + + * Source/cmMakefile.cxx: ENH: put the system path ahead of the + command path + +2006-02-17 02:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-16 20:15 king + + * Modules/CPack.cmake, Utilities/Release/Release.cmake: BUG: Do not + install MSVC dlls for a non-MSVC build. + +2006-02-16 20:13 king + + * bootstrap: ENH: Made default install prefix consistent with + building with another CMake. + +2006-02-16 18:50 king + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: BUG: Work-around borland make + bug that drops a rule completely if it has no dependencies or + commands. + +2006-02-16 18:09 king + + * Source/cmSetTargetPropertiesCommand.h: ENH: Clarified + documentation of DEFINE_SYMBOL. + +2006-02-16 17:49 king + + * Source/cmSetTargetPropertiesCommand.cxx: BUG: Report error when a + target does not exist. + +2006-02-16 15:55 andy + + * Source/CPack/cmCPackNSISGenerator.cxx: BUG: Remove debug and fix + space between label and exec name + +2006-02-16 15:41 andy + + * CMakeLists.txt: ENH: Variable name changed + +2006-02-16 15:39 king + + * Source/cmMakefileExecutableTargetGenerator.cxx: BUG: Do not + perform pre-build, pre-link, or post-install commands when + relinking. + +2006-02-16 15:38 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Need INSTALL_RPATH property + on SimpleInstallS2 also. + +2006-02-16 15:35 andy + + * Templates/CPackConfig.cmake.in: ENH: Fix icons + +2006-02-16 15:28 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Use target property for + INSTALL_RPATH of SimpleInstall so that it is the only one that + needs to relink. + +2006-02-16 15:20 andy + + * Modules/NSIS.template.in, Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.h: ENH: More work on NSI to + improve installing and uninstalling + +2006-02-16 15:18 king + + * Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmMakefileExecutableTargetGenerator.cxx, + Source/cmMakefileExecutableTargetGenerator.h, + Source/cmMakefileLibraryTargetGenerator.cxx, + Source/cmMakefileLibraryTargetGenerator.h, + Source/cmSetTargetPropertiesCommand.h, Source/cmTarget.cxx, + Source/cmTarget.h, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Implemented RPATH + specification support. It is documented by the command + SET_TARGET_PROPERTIES. + +2006-02-16 13:42 martink + + * Source/cmMakefileTargetGenerator.cxx: ENH: warning fix + +2006-02-16 11:32 martink + + * Source/cmMakefileTargetGenerator.cxx: ENH: warning fix + +2006-02-16 10:35 hoffman + + * Source/: cmDynamicLoader.cxx, cmDynamicLoader.h: ENH: fix for bug + 2808, use dlopen on new OSX versions + +2006-02-16 02:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-15 21:26 hoffman + + * Modules/CMakeMSYSFindMake.cmake, + Modules/CMakeMinGWFindMake.cmake, + Source/cmGlobalMSYSMakefileGenerator.cxx, + Source/cmGlobalMinGWMakefileGenerator.cxx: ENH: better algorithm + for looking for make and gcc on msys and mingw + +2006-02-15 16:38 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Use NOINHERIT + macro to avoid linking to project default libraries which may not + exist. + +2006-02-15 16:35 king + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, + cmMakefileUtilityTargetGenerator.cxx: ENH: Cleaned up generation + of symbolic rules. Removed generation of rebuild_cache and + similar rules from internal makefiles. + +2006-02-15 12:32 martink + + * Source/cmMakefileTargetGenerator.h: COMP: fix compiler warning + +2006-02-15 12:30 hoffman + + * Source/cmMakefileTargetGenerator.cxx: ENH: fix build error for + mac + +2006-02-15 10:34 martink + + * bootstrap, Source/CMakeLists.txt, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmMakefileTargetGenerator.h: ENH: some reorg of the unix + makefile generator + +2006-02-15 10:22 king + + * Source/: cmCTest.cxx, cmSystemTools.cxx, cmSystemTools.h, + cmake.cxx: ENH: Enable capture of output from VCExpress.exe and + devenv.exe. + +2006-02-15 08:05 hoffman + + * Modules/Platform/Windows-bcc32.cmake: ENH: remove warning + suppressions for borland compiler, projects wanting this should + use -w-, the default warning level is used for all other + compilers. Used to be -w- -whid -waus -wpar + +2006-02-15 02:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-14 22:03 hoffman + + * Modules/CMakeMinGWFindMake.cmake, Source/cmake.cxx: ENH: do not + allow mingw makefiles to generate if sh.exe is in the path, also + do not write CMakeCache.txt if there is a fatal error. + +2006-02-14 17:16 king + + * Source/: cmCMakeMinimumRequired.cxx, cmCMakeMinimumRequired.h: + ENH: Added FATAL_ERROR option and fixed check to not have + floating point roundoff problems. + +2006-02-14 16:35 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Removed hard-coded + linking to odbc32 and odbccp32. + +2006-02-14 16:32 king + + * Source/: cmGlobalVisualStudio8Generator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: Avoid adding unused rules + to special targets like ALL_BUILD. Make sure project + regeneration rules go only in desired targets. + +2006-02-14 15:35 king + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio8Generator.h: BUG: Fixed generation of VS8 + solution file to not be re-written when loaded by VS and to work + with msbuild. + +2006-02-14 15:29 king + + * Modules/CheckTypeSize.cmake: ENH: Added + CMAKE_REQUIRED_DEFINITIONS and CMAKE_REQUIRED_INCLUDES to the + interface. + +2006-02-14 15:15 king + + * Tests/CustomCommand/GeneratedHeader/main.cpp: COMP: Fixed form of + function main. + +2006-02-14 14:29 andy + + * Modules/NSIS.template.in, Source/CPack/cmCPackNSISGenerator.cxx: + ENH: Better handling of executables on windows + +2006-02-14 14:28 andy + + * Templates/CPackConfig.cmake.in: ENH: Cleanup + +2006-02-14 11:17 andy + + * Source/cmCacheManager.cxx: ENH: Report which cmake was used to + generate the cache in the comment + +2006-02-14 10:51 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: fix try compile for MFC + +2006-02-14 10:35 martink + + * Source/: cmMakefileExecutableTargetGenerator.h, + cmMakefileLibraryTargetGenerator.h, cmMakefileTargetGenerator.h, + cmMakefileUtilityTargetGenerator.h, + cmMakefileExecutableTargetGenerator.cxx, + cmMakefileLibraryTargetGenerator.cxx, + cmMakefileTargetGenerator.cxx, + cmMakefileUtilityTargetGenerator.cxx: ENH: some cleanup of the + makefile generator + +2006-02-14 10:28 andy + + * CMakeLists.txt, Modules/CPack.cmake, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackSTGZGenerator.cxx, Source/CPack/cpack.cxx, + Templates/CPackConfig.cmake.in: ENH: Improved support for icons, + random directories, etc... + +2006-02-14 02:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-13 02:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-12 02:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-11 02:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-10 15:45 king + + * Tests/CommandLineTest/CMakeLists.txt: ENH: Added test for + IF(DEFINED ENV{var})(. + +2006-02-10 14:59 king + + * CMakeLists.txt: ENH: Updated patch level to 3 for special KDE + release. + +2006-02-10 14:41 king + + * Source/cmIfCommand.cxx: ENH: Allow IF(DEFINED ENV{somevar}) to + work. + +2006-02-10 14:15 king + + * Docs/cmake-mode.el: ENH: Added highlighting for LIST command. + +2006-02-10 14:11 andy + + * CMakeLists.txt, Source/cmCommands.cxx, Source/cmListCommand.cxx, + Source/cmListCommand.h, Tests/CMakeTests/CMakeLists.txt, + Tests/CMakeTests/ListTest.cmake.in: ENH: Add initial + implementation of the list command + +2006-02-10 13:54 king + + * Docs/cmake-mode.el, Source/cmCommands.cxx, + Source/cmInstallCommand.cxx, Source/cmInstallCommand.h, + Source/cmLocalGenerator.cxx, Source/cmMakefile.h, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstall/InstallScript1.cmake, + Tests/SimpleInstall/InstallScript2.cmake, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/InstallScript1.cmake, + Tests/SimpleInstallS2/InstallScript2.cmake: ENH: Added INSTALL + command as a placeholder for a future generic install + specification interface. Currently it supports only a SCRIPT + option specifying a script to run during the install stage. + +2006-02-10 12:43 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: fix for bug 28618, cmake.exe + can not find itself + +2006-02-10 11:47 king + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: ENH: Strengthened + EXECUTE_PROCESS output check test. + +2006-02-10 11:46 king + + * Source/cmExecuteProcessCommand.cxx: ENH: Remove extra windows + newline characters from process output. Centralized text fix + processing. + +2006-02-10 11:43 king + + * Source/: cmExecProgramCommand.h, cmExecuteProcessCommand.h: ENH: + Mention relationship of EXECUTE_PROCESS and EXEC_PROGRAM. + +2006-02-10 11:41 king + + * Source/cmake.cxx: BUG: Fixed echo command to not print trailing + space. + +2006-02-10 11:19 king + + * bootstrap: BUG: Fixed bootstrap from MSYS prompt. It was working + only when the bootstrap directory in MSYS mapped to the same + directory on windows except for the drive letter in front. Now + it should work from any path. + +2006-02-10 10:30 hoffman + + * Tests/CustomCommandWorkingDirectory/: CMakeLists.txt, working.c, + working.c.in: ENH: fix test to work with in source build + +2006-02-10 10:11 hoffman + + * Source/cmLocalGenerator.cxx: ENH: fix bug for single char + libraries + +2006-02-10 09:46 andy + + * Modules/CheckLibraryExists.cmake: BUG: Fix + CMAKE_REQUIRED_LIBRARIES stuff in this module + +2006-02-10 02:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-09 23:08 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: bug fix for 2829 + better flags for idl tool + +2006-02-09 19:29 king + + * Source/cmLocalVisualStudio6Generator.cxx: COMP: Removed unused + variables. + +2006-02-09 19:25 king + + * CMakeLists.txt: ENH: Updated patch level to 2 for special KDE + release. + +2006-02-09 19:23 king + + * Modules/: CheckCSourceCompiles.cmake, + CheckCXXSourceCompiles.cmake, CheckFunctionExists.cmake, + CheckIncludeFile.cmake, CheckIncludeFileCXX.cmake, + CheckIncludeFiles.cmake, CheckLibraryExists.cmake, + CheckSymbolExists.cmake, CheckVariableExists.cmake: ENH: Made + Check* modules more consistent and well documented. Added + CMAKE_REQUIRED_DEFINITIONS option. + +2006-02-09 19:03 king + + * Source/cmMakefile.cxx: BUG: Need to include empty arguments when + parsing prefix/suffix lists for FindLibrary. + +2006-02-09 19:03 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Adding option + to return empty arguments when expanding a list. + +2006-02-09 18:42 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: BUG: Fixed generation of cmake + re-run rules. + +2006-02-09 18:39 king + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: BUG: Avoid case + problems on windows. + +2006-02-09 17:29 king + + * Source/: cmOrderLinkDirectories.cxx, cmOrderLinkDirectories.h: + BUG: Deal with case insensitivity on windows linker paths. Also + fixed spelling typo. + +2006-02-09 15:33 king + + * Modules/FindPNG.cmake: ENH: Put libpng name back because it is + needed for plain windows. + +2006-02-09 15:08 king + + * Modules/: FindJPEG.cmake, FindPNG.cmake, FindTIFF.cmake, + FindZLIB.cmake: ENH: Removing platform-specific name hacks now + that FIND_LIBRARY handles it. + +2006-02-09 15:05 king + + * Modules/CMakeGenericSystem.cmake, Modules/Platform/CYGWIN.cmake, + Modules/Platform/Darwin.cmake, Modules/Platform/HP-UX.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-gcc.cmake, + Modules/Platform/Windows.cmake, Source/cmMakefile.cxx: ENH: Added + platform settings CMAKE_FIND_LIBRARY_PREFIXES and + CMAKE_FIND_LIBRARY_SUFFIXES to allow customized searching for + libraries. + +2006-02-09 14:28 king + + * Modules/CheckSymbolExists.cmake: ENH: Pay attention to + CMAKE_REQUIRED_INCLUDES. + +2006-02-09 14:18 king + + * Modules/Platform/Windows-g++.cmake: BUG: Need Windows-g++.cmake + module to support C++-only projects on Windows. + +2006-02-09 13:48 king + + * Modules/CMakeCXXCompiler.cmake.in: BUG: Need to duplicate some + information from CMakeCCompiler to support C++-only projects. + +2006-02-09 13:14 king + + * Modules/: CheckCSourceCompiles.cmake, + CheckCXXSourceCompiles.cmake, CheckIncludeFiles.cmake: ENH: Patch + from Alexander Neundorf to improve behavior. + +2006-02-09 12:04 king + + * Modules/: FindJPEG.cmake, FindPNG.cmake, FindTIFF.cmake, + FindZLIB.cmake: ENH: Added names for gnuwin32 library versions. + +2006-02-09 09:34 david.cole + + * Utilities/cmtar/wrapper.c: COMP: Last (?) fix for dashboard + warning. + +2006-02-09 02:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-08 15:37 hoffman + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomTargetCommand.cxx, cmVTKWrapJavaCommand.cxx: ENH: fix + broken tests + +2006-02-08 14:12 hoffman + + * Source/: CMakeLists.txt, cmGlobalXCodeGenerator.cxx: ENH: working + directory working for XCode + +2006-02-08 12:01 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h: ENH: Enabled new + WORKING_DIRECTORY option to ADD_CUSTOM_COMMAND and + ADD_CUSTOM_TARGET on VS 6 generator. + +2006-02-08 11:33 hoffman + + * Tests/CustomCommandWorkingDirectory/: CMakeLists.txt, + customTarget.c, working.c: ENH: add test for working directory of + custom command and target + +2006-02-08 10:58 hoffman + + * Modules/CMakeFortranInformation.cmake, Source/CMakeLists.txt, + Source/cmAddCustomCommandCommand.cxx, + Source/cmAddCustomCommandCommand.h, + Source/cmAddCustomTargetCommand.cxx, + Source/cmAddCustomTargetCommand.h, Source/cmCPluginAPI.cxx, + Source/cmCustomCommand.cxx, Source/cmCustomCommand.h, + Source/cmFLTKWrapUICommand.cxx, Source/cmGlobalGenerator.cxx, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmIncludeExternalMSProjectCommand.cxx, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmQTWrapCPPCommand.cxx, + Source/cmQTWrapUICommand.cxx, Source/cmVTKWrapJavaCommand.cxx: + ENH: add working directory support + +2006-02-08 10:13 king + + * CMakeLists.txt, Source/CMakeLists.txt, Utilities/CMakeLists.txt: + ENH: Added option BUILD_CursesDialog if curses is found. This + allows people to disable building the dialog even when curses is + found. + +2006-02-08 09:51 king + + * Modules/FindQt4.cmake: BUG: Fixed qt version message. Submitted + by Tanner Lovelace. + +2006-02-08 07:17 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: COMP: Fix + problem with STL on HP, and fix reusing the same variable in for + loops + +2006-02-08 02:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-07 17:10 king + + * Modules/Platform/Windows-cl.cmake: ENH: Adding definition of MSVC + when it is the compiler. + +2006-02-07 17:09 king + + * Source/cmMakefile.cxx: BUG: Fixed finding of MinGW libraries with + a windows build of CMake. + +2006-02-07 12:53 andy + + * Source/CPack/cpack.cxx: ENH: Add missing help for -C option + +2006-02-07 11:43 andy + + * Source/kwsys/SystemTools.cxx: COMP: Fix compile problem on + windows and mac + +2006-02-07 10:43 andy + + * Source/kwsys/SystemTools.cxx: COMP: Fix build problem + +2006-02-07 10:23 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h, + kwsys/SystemTools.cxx, kwsys/SystemTools.hxx.in: ENH: Move + relative path to kwsys + +2006-02-07 10:11 king + + * bootstrap, Source/cmStandardIncludes.h, + Source/kwsys/CMakeLists.txt, Source/kwsys/String.hxx.in: ENH: + Added kwsys::String class to shorten debugging symbols and error + messages involving std::string. + +2006-02-07 09:25 malaterre + + * Source/kwsys/SystemTools.hxx.in: ENH: Add some doc for visible + class + +2006-02-07 08:49 andy + + * Source/: cmCTest.cxx, cmListFileCache.cxx, cmListFileCache.h, + cmMakefile.cxx, cmTryCompileCommand.cxx, cmTryRunCommand.cxx, + cmakemain.cxx, ctest.cxx, CTest/cmCTestBuildAndTestHandler.cxx: + ENH: Since list file cache does not make much sense any more + (because of proper list file parsing), and it actually adds + unnecessary complications and make ctest scripting not work, take + it out + +2006-02-07 08:03 david.cole + + * Utilities/cmtar/wrapper.c: COMP: Fix next round of dashboard + warnings. + +2006-02-07 02:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-06 16:32 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: allow for - in the + name of targets for nmake + +2006-02-06 09:31 david.cole + + * Utilities/cmtar/: extract.c, output.c, wrapper.c: COMP: Fix CMake + dashboard warnings related to previous revisions. + +2006-02-06 02:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-05 02:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-04 02:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-03 18:08 king + + * CMakeLists.txt: ENH: Incremented patch version for special KDE + release. + +2006-02-03 17:09 king + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: ENH: Added test for new + EXECUTE_PROCESS command. + +2006-02-03 16:55 king + + * Docs/cmake-mode.el: ENH: Adding new EXECUTE_PROCESS command that + interfaces to KWSys Process Execution. + +2006-02-03 16:51 king + + * Source/: cmCommands.cxx, cmExecuteProcessCommand.cxx, + cmExecuteProcessCommand.h: ENH: Adding new EXECUTE_PROCESS + command that interfaces to KWSys Process Execution. + +2006-02-03 12:03 king + + * Source/cmGlobalXCodeGenerator.h: COMP: Added missing method decl + to header. + +2006-02-03 11:48 david.cole + + * Utilities/cmtar/: decode.c, extract.c, output.c, wrapper.c: BUG: + Fix mem leaks related to th_get_pathname. Change this + implementation of th_get_pathname so that it *always* returns a + strdup'ed value. Callers must now free non-NULL returns from + th_get_pathname. Change all callers to call free appropriately. + +2006-02-03 11:36 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmGlobalXCodeGenerator.cxx, + cmTarget.cxx: BUG: Fixed cmTarget::GetFullPath to not append the + configuration name when only one configuration is built. It now + asks the generator what subdirectory if any to use for a given + configuration name. + +2006-02-03 02:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-02 20:18 king + + * CMakeLists.txt, Source/CMakeLists.txt, Utilities/CMakeLists.txt: + COMP: Fixed build on VC++ Express 2005. Explicitly testing for + MFC to determine whether to build the MFCDialog. + +2006-02-02 20:16 king + + * Modules/CMakeGenericSystem.cmake: BUG: CMAKE_INSTALL_PREFIX must + always have forward slashes. + +2006-02-02 20:15 king + + * Modules/Platform/Windows-cl.cmake: BUG: Removed odbc32.lib and + odbccp32.lib from standard libraries on VS 8 because VC++ Express + 2005 does not have them. They are SQL database access libraries + and should not be needed for every application. User code can + always explicitly link the library. Also replacing deprecated + /GZ option with /RTC1 for VS 8. This addresses bug#2795. + +2006-02-02 15:53 david.cole + + * Utilities/cmtar/filesystem.c: BUG: Fix memory leak in libtar's + kwReadDir. Use a static buffer like readdir (probably) does + rather than malloc-ing a block which never gets free-d. + +2006-02-02 03:30 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-02-01 02:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-31 19:34 king + + * Source/: CMakeLists.txt, cmake.cxx: ENH: Enabled build of VS 7 + and 8 generators for MinGW. + +2006-01-31 18:50 king + + * bootstrap, Source/cmake.cxx: ENH: Enabled bootstrapping with + MinGW from an MSYS prompt. + +2006-01-31 10:46 king + + * Source/cmGetFilenameComponentCommand.cxx: BUG: ABSOLUTE option + should evaluate relative paths with respect to + CMAKE_CURRENT_SOURCE_DIR. This addresses bug#2797. + +2006-01-31 05:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-30 14:25 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: more cleanup and removal of + old code + +2006-01-30 13:57 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: cleanup and remove some old + code + +2006-01-30 02:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-29 02:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-28 01:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-27 18:20 king + + * Source/: cmFindFileCommand.cxx, cmFindLibraryCommand.h, + cmFindPathCommand.cxx, cmFindPathCommand.h, cmMakefile.cxx, + cmMakefile.h: ENH: Improved support for user-configured search + paths. Paths given in the CMAKE_LIBRARY_PATH cmake variable are + searched first, then those in the CMAKE_LIBRARY_PATH environment + variable, then those listed in the call to the FIND_LIBRARY + command and finally those listed in the PATH environment + variable. The support is similar for finding include files with + FIND_PATH, but the variable is CMAKE_INCLUDE_PATH. + +2006-01-27 13:48 king + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: BUG: VS7 generator should use + per-configuration linker flags for targets. This addresses + bug#2765. + +2006-01-27 13:46 andy + + * Source/CTest/: cmCTestBuildHandler.cxx, cmCTestBuildHandler.h: + ENH: Better handle interleved error/output + +2006-01-27 13:07 king + + * Modules/readme.txt, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h: ENH: Added optional component list + to the REQUIRED option of the FIND_PACKAGE command. This + addresses bug#2771. + +2006-01-27 12:58 martink + + * Source/cmOptionCommand.h: STYLE: spelling fix + +2006-01-27 12:58 martink + + * Source/cmMessageCommand.h: STYLE: grammer fix + +2006-01-27 11:19 hoffman + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: add extra thing for + svn X status output + +2006-01-27 01:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-26 01:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-25 14:12 hoffman + + * Source/cmTryCompileCommand.cxx: ENH: fix double + CMAKE_(LANG)_FLAGS problem in try compile + +2006-01-25 12:16 hoffman + + * Modules/: FindQt.cmake, FindQt4.cmake: ENH: change to fatal error + +2006-01-25 11:41 hoffman + + * Modules/: CMakeCCompiler.cmake.in, CMakeCXXCompiler.cmake.in, + CMakeDetermineCCompiler.cmake, CMakeDetermineCXXCompiler.cmake, + CMakeDetermineFortranCompiler.cmake, + CMakeDetermineJavaCompiler.cmake, CMakeDetermineRCCompiler.cmake: + ENH: fix more than one argument passed in to compilers via + environment + +2006-01-25 11:07 hoffman + + * Source/: cmMessageCommand.cxx, cmMessageCommand.h: ENH: fix docs, + and revert fatal error change + +2006-01-25 08:39 hoffman + + * Source/cmMessageCommand.cxx: ENH: make all errors fatal in + message command + +2006-01-25 08:38 hoffman + + * Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/Complex/Executable/testcflags.c, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/testcflags.c, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/testcflags.c: ENH: add + COMPILE_FLAGS to targets + +2006-01-25 00:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-24 15:48 hoffman + + * Source/cmStandardIncludes.h: ENH: fix for borland memcpy junk + +2006-01-24 12:07 andy + + * Modules/CheckCXXSourceCompiles.cmake: ENH: fix bug, write the + correct file + +2006-01-24 07:58 hoffman + + * Source/cmLocalGenerator.cxx: COMP: fix warning + +2006-01-24 00:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-23 17:24 hoffman + + * Source/cmLocalGenerator.cxx: ENH: fix warning + +2006-01-23 16:36 martink + + * Source/kwsys/SystemTools.cxx: ENH: by Bill make sure path is unix + style + +2006-01-23 13:50 hoffman + + * Source/: CMakeLists.txt, cmGlobalWatcomWMakeGenerator.cxx, + cmLocalGenerator.cxx: ENH: fix problem with watcom and short + paths and -I + +2006-01-23 12:31 hoffman + + * Source/cmDepends.cxx: ENH: correct include for memcpy + +2006-01-23 11:32 hoffman + + * Modules/Platform/kFreeBSD.cmake: ENH: add kFreeBSD support + +2006-01-23 00:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-22 21:15 hoffman + + * Modules/CheckTypeSize.cmake: ENH: fix check type size + +2006-01-22 00:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-21 00:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-20 01:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-19 00:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-18 00:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-17 16:53 hoffman + + * Source/kwsys/SystemTools.hxx.in: ENH: fix for icc + +2006-01-17 16:22 martink + + * Utilities/cmcurl/CMake/CheckTypeSize.cmake: BUG: revert such that + it should work + +2006-01-17 14:35 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: more fixes + for watcom + +2006-01-17 10:21 hoffman + + * Modules/CMakeBackwardCompatibilityCXX.cmake, + Modules/CMakeFindWMake.cmake, Modules/TestForSSTREAM.cmake, + Modules/TestForSSTREAM.cxx, Modules/readme.txt, + Modules/Platform/Windows-wcl386.cmake, Source/CMakeLists.txt, + Source/cmCPluginAPI.cxx, Source/cmCPluginAPI.h, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalWatcomWMakeGenerator.cxx, + Source/cmGlobalWatcomWMakeGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, Source/cmStringCommand.h, + Source/cmake.cxx, Source/kwsys/Directory.cxx, + Source/kwsys/EncodeExecutable.c, Source/kwsys/Glob.cxx, + Source/kwsys/ProcessWin32.c, Source/kwsys/Registry.cxx, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in, + Source/kwsys/kwsysPlatformCxxTests.cxx, + Source/kwsys/testRegistry.cxx, + Tests/Complex/cmTestConfigure.h.in, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/cmTestConfigure.h.in, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/cmTestConfigure.h.in, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/LoadCommand/CMakeCommands/CMakeLists.txt, + Tests/LoadCommand/CMakeCommands/cmTestCommand.c, + Tests/LoadCommandOneConfig/CMakeCommands/CMakeLists.txt, + Tests/LoadCommandOneConfig/CMakeCommands/cmTestCommand.c, + Tests/SubDir/CMakeLists.txt, + Tests/SubDir/vcl_algorithm_vcl_pair_double.foo.c, + Tests/SubDir/AnotherSubdir/pair_int.int.c, + Tests/SubDir/ThirdSubDir/pair_int.int1.c, + Utilities/cmcurl/CMakeLists.txt, Utilities/cmcurl/timeval.h, + Utilities/cmcurl/CMake/CheckTypeSize.c.in, + Utilities/cmcurl/CMake/CheckTypeSize.cmake, + Utilities/cmcurl/Platforms/WindowsCache.cmake, + Utilities/cmtar/handle.c, Utilities/cmtar/libtar.c: ENH: add + support for watcom wmake and wcl386 + +2006-01-17 09:27 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: correct standard + libraries + +2006-01-17 00:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-16 12:54 yogi.girdhar + + * Utilities/cmtar/compat/compat.h: COMP: wrapped compat.h inside a + extern C block so that we can use it in C++ code + +2006-01-16 00:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-15 00:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-14 10:27 king + + * Source/cmGlobalXCodeGenerator.cxx: COMP: Fixed shadowed variable + warning. + +2006-01-14 00:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-13 20:51 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: Further centralized custom + command dependency computation. Custom command dependencies in + the source tree may now also be specified relative to the source + directory. + +2006-01-13 19:36 king + + * Source/cmFLTKWrapUICommand.cxx: BUG: Removed bogust dependency. + +2006-01-13 19:35 king + + * Source/: cmFileCommand.cxx, cmLocalGenerator.cxx: COMP: Removed + unused variables. + +2006-01-13 18:33 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator3.cxx: COMP: Removed unused paramter + from cmLocalGenerator::OutputLinkLibraries. + +2006-01-13 18:18 king + + * Source/cmFileCommand.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, + Source/cmLinkLibrariesCommand.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmMakefile.cxx, + Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, Source/cmTarget.cxx, + Source/cmTarget.h, Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTargetLinkLibrariesCommand.h, Source/cmXCodeObject.h, + Source/CTest/cmCTestBuildAndTestHandler.cxx, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: BUG: Sweeping + changes to cleanup computation of target names. This should fix + many bugs related to target names being computed inconsistently. + + - Centralized computation of a target's file name to a method in + cmTarget. Now that global knowledge is always available the + *_CMAKE_PATH cache variables are no longer needed. + + - Centralized computation of link library command lines and link + directory search order. + + - Moved computation of link directories needed to link CMake + targets to be after evaluation of linking dependencies. + + This also removed alot of duplicate code in which each version + had its own bugs. + + This commit is surrounded by the tags + + CMake-TargetNameCentralization1-pre + + and + + CMake-TargetNameCentralization1-post + + so make the large set of changes easy to identify. + +2006-01-13 11:44 hoffman + + * Source/cmTryCompileCommand.cxx, + Utilities/cmcurl/CMake/CheckTypeSize.cmake: ENH: fix for CMakeTmp + move broken stuff + +2006-01-13 09:57 hoffman + + * Modules/: CheckTypeSize.c.in, CheckTypeSize.cmake: ENH: fix + checktypesize + +2006-01-13 00:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-12 23:08 hoffman + + * Modules/: CheckTypeSize.c.in, CheckTypeSize.cmake: ENH: move + define into configured file and do not use the command line + +2006-01-12 14:21 andy + + * Source/: cmGeneratedFileStream.cxx, cmGeneratedFileStream.h: + COMP: Remove warning + +2006-01-12 13:48 martink + + * Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, + Modules/CMakeTestFortranCompiler.cmake, + Modules/CheckCSourceCompiles.cmake, + Modules/CheckCXXSourceCompiles.cmake, + Modules/CheckIncludeFile.cmake, + Modules/CheckIncludeFileCXX.cmake, + Modules/CheckIncludeFiles.cmake, Modules/CheckSymbolExists.cmake, + Modules/CheckTypeSize.cmake, Modules/FindSDL_sound.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmTryCompileCommand.cxx, Source/cmTryCompileCommand.h, + Source/cmTryRunCommand.cxx, + Utilities/cmcurl/CMake/CheckTypeSize.cmake, + Tests/TryCompile/CMakeLists.txt: ENH: put CmakeTmp into + CMakeFiles + +2006-01-12 11:10 hoffman + + * Modules/FindwxWindows.cmake: ENH: contribution from Jan Woetzel + +2006-01-12 09:20 andy + + * Source/cmGeneratedFileStream.cxx: COMP: Fix compile error that + was caused by the binary flag + +2006-01-12 00:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-11 19:12 andy + + * Source/CPack/cmCPackTGZGenerator.cxx: ENH: Fix compression on + Windows + +2006-01-11 19:06 andy + + * Source/: cmGeneratedFileStream.cxx, cmGeneratedFileStream.h: ENH: + Add support for binary + +2006-01-11 11:23 andy + + * Source/CPack/cmCPackGenericGenerator.cxx: ENH: Add a way to + specify a custom install command + +2006-01-11 11:08 andy + + * CMakeLists.txt, Modules/CPack.cmake, Modules/NSIS.template.in, + Source/CPack/cmCPackGenericGenerator.cxx, + Templates/CPackConfig.cmake.in: ENH: Some improvements: specify + link, copy msvc libraries, fix install directory + +2006-01-11 00:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-10 12:05 andy + + * Source/CPack/: cmCPackConfigure.h.in, cmCPackNSISGenerator.cxx, + cmCPackNSISGenerator.h, cmCPackPackageMakerGenerator.h: COMP: + Remove legacy code and fix sun build + +2006-01-10 00:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-09 18:24 andy + + * Modules/NSIS.template.in, + Source/CPack/cmCPackGenericGenerator.cxx: ENH: Use specified + output file name, also detect errors during install + +2006-01-09 18:20 andy + + * Templates/CPackConfig.cmake.in: ENH: Pass CPACK_PACKAGE_FILE_NAME + +2006-01-09 18:20 andy + + * Modules/CPack.cmake: ENH: Cleanup + +2006-01-09 16:34 andy + + * Modules/NSIS.template.in: BUG: Allow spaces in path + +2006-01-09 14:56 hoffman + + * Tests/CustomCommand/GeneratedHeader/: CMakeLists.txt, + generated.h.in, main.cpp: ENH: add test for generated header + +2006-01-09 14:40 hoffman + + * Source/cmCustomCommand.cxx, Source/cmCustomCommand.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmTarget.cxx, + Tests/CustomCommand/CMakeLists.txt, + Tests/Wrapping/CMakeLists.txt, Tests/Wrapping/fakefluid.cxx: ENH: + for all custom commands that can not be given to a target, add + them to all targets in the current makefile + +2006-01-09 13:15 andy + + * CMakeLists.txt: STYLE: Add an explanation for a bunch of + backslashes + +2006-01-09 13:14 andy + + * Source/CPack/cmCPackTGZGenerator.cxx: BUG: Fix memory problem + +2006-01-09 12:46 hoffman + + * Utilities/Release/: Release.cmake, cmake_release.sh.in: ENH: + +2006-01-09 12:45 hoffman + + * Modules/: FindQt.cmake, FindQt4.cmake: ENH: add qt quiet stuff + +2006-01-09 11:26 andy + + * CMakeLists.txt, Modules/CPack.cmake, + Source/CPack/cmCPackGenericGenerator.cxx, + Templates/CPackConfig.cmake.in: ENH: Fix test for cpack + variables, add support for icon on windows + +2006-01-09 00:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-08 00:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-07 00:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-06 15:51 hoffman + + * Modules/: CMakeMSYSFindMake.cmake, CMakeMinGWFindMake.cmake, + Platform/Linux-icpc.cmake: ENH: merge from main tree + +2006-01-06 15:51 hoffman + + * Source/: cmGlobalMSYSMakefileGenerator.cxx, + cmGlobalMSYSMakefileGenerator.h, + cmGlobalMinGWMakefileGenerator.cxx, + cmGlobalMinGWMakefileGenerator.h: ENH: add missing files + +2006-01-06 15:07 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeGenericSystem.cmake, + Modules/Platform/CYGWIN-g77.cmake, Modules/Platform/CYGWIN.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-g77.cmake, + Modules/Platform/Windows-gcc.cmake, + Modules/Platform/Windows.cmake, Source/CMakeLists.txt, + Source/cmAddExecutableCommand.cxx, Source/cmCTest.cxx, + Source/cmDependsC.cxx, Source/cmDependsC.h, + Source/cmFindFileCommand.cxx, Source/cmFindFileCommand.h, + Source/cmFindPathCommand.cxx, Source/cmFindPathCommand.h, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTarget.cxx, Source/cmTarget.h, + Source/cmake.cxx, Source/CTest/cmCTestBuildAndTestHandler.cxx, + Source/kwsys/ProcessUNIX.c, Source/kwsys/SystemTools.cxx, + Source/kwsys/SystemTools.hxx.in, Tests/Complex/CMakeLists.txt, + Tests/Complex/cmTestConfigure.h.in, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/cmTestConfigure.h.in, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/cmTestConfigure.h.in, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/CustomCommand/CMakeLists.txt, + Utilities/Release/cmake_release.sh, + Utilities/Release/cmake_release.sh.in: ENH: merges from main tree + +2006-01-06 13:54 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix missing plist file + error + +2006-01-06 10:45 andy + + * Utilities/cmtar/compat/snprintf.c: COMP: Try to remove more + warnings + +2006-01-06 00:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-05 17:16 king + + * Source/: cmDependsC.cxx, cmDependsC.h: BUG: Fix for scanning + generated headers included with double-quotes. Also fixed + double-quote include support to not use the special quoted + location when a full path is given on the include line. + +2006-01-05 15:49 king + + * Source/kwsys/testProcess.c: ENH: Added special test 0 to just run + a given command line. + +2006-01-05 13:27 andy + + * Source/CPack/: cmCPackGenericGenerator.cxx, cpack.cxx: ENH: More + debugging and work on PackageMaker code + +2006-01-05 13:25 yogi.girdhar + + * Utilities/cmtar/: config.h.in, libtar.c: BUG: libtar now compiles + in VJ and works with vtkzlib + +2006-01-05 12:33 andy + + * Source/CPack/cmCPackLog.cxx: ENH: flush the output + +2006-01-05 12:16 andy + + * Source/CPack/cpack.cxx: BUG: Use objects that exist + +2006-01-05 12:16 andy + + * Source/CPack/cmCPackLog.cxx: BUG: Print the right line number to + the right pipe + +2006-01-05 10:37 andy + + * Source/CPack/cmCPackPackageMakerGenerator.cxx: BUG: Revert back + +2006-01-05 09:18 hoffman + + * CMakeLists.txt: ENH: use a safer check for CPack + +2006-01-05 09:13 hoffman + + * Source/: cmAddExecutableCommand.cxx, cmGlobalXCodeGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, cmMakefile.cxx: ENH: fix + bundles for Mac and Xcode + +2006-01-05 03:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-04 16:24 hoffman + + * Source/CPack/cmCPackTGZGenerator.cxx: ENH: remove assert + +2006-01-04 15:13 andy + + * CMakeLists.txt, Modules/CPack.Description.plist.in, + Modules/NSIS.template.in, + Source/CPack/cmCPackGenericGenerator.cxx, + Source/CPack/cmCPackSTGZGenerator.cxx, + Source/CPack/cmCPackTGZGenerator.cxx, Source/CPack/cpack.cxx, + Modules/CPack.cmake, Templates/CPackConfig.cmake.in: ENH: More + CPack stuff and fix zlib compression + +2006-01-04 09:55 hoffman + + * Source/cmFindPathCommand.cxx: ENH: remove debug print stuff + +2006-01-04 08:32 andy + + * Source/kwsys/CMakeLists.txt: COMP: Do not build tests if build + testing is off + +2006-01-04 01:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-03 17:11 hoffman + + * Utilities/Release/cmake_release.sh: ENH: update revision numbers + +2006-01-03 17:07 hoffman + + * Utilities/Release/cmake_release.sh.in: ENH: move to patch 2 + +2006-01-03 16:40 hoffman + + * Source/cmMakefile.cxx, Source/cmMakefile.h, + Tests/Complex/CMakeLists.txt, Tests/Complex/cmTestConfigure.h.in, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/cmTestConfigure.h.in, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/cmTestConfigure.h.in, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: add new + cmakedefine01 feature from bug report 2603 + +2006-01-03 14:00 hoffman + + * Modules/Platform/: CYGWIN-g77.cmake, CYGWIN.cmake: ENH: add exe + stuff for cygwin + +2006-01-03 08:39 andy + + * Source/cmSystemTools.cxx: COMP: Remove warnings on HP-UX + +2006-01-03 08:39 andy + + * Utilities/cmtar/append.c, Utilities/cmtar/extract.c, + Utilities/cmtar/libtar.c, Source/CPack/cmCPackLog.cxx, + Source/CPack/cpack.cxx: COMP: Remove warnings + +2006-01-03 01:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-02 17:28 andy + + * Source/CPack/: cmCPackGenerators.cxx, + cmCPackGenericGenerator.cxx, cmCPackGenericGenerator.h, + cmCPackNSISGenerator.cxx, cmCPackNSISGenerator.h, + cmCPackPackageMakerGenerator.cxx, cmCPackPackageMakerGenerator.h, + cmCPackSTGZGenerator.cxx, cmCPackSTGZGenerator.h, + cmCPackTGZGenerator.cxx, cmCPackTGZGenerator.h, cpack.cxx: ENH: + Start working on CPack input file and cleanups + +2006-01-02 17:22 andy + + * Source/CPack/: cmCPackLog.h, cmCPackLog.cxx: COMP: Fix compile + errors + +2006-01-02 16:14 andy + + * Source/: CMakeLists.txt, CPack/cmCPackGenerators.cxx, + CPack/cmCPackGenerators.h, CPack/cmCPackGenericGenerator.cxx, + CPack/cmCPackGenericGenerator.h, CPack/cmCPackLog.cxx, + CPack/cmCPackLog.h, CPack/cmCPackNSISGenerator.cxx, + CPack/cmCPackPackageMakerGenerator.cxx, + CPack/cmCPackSTGZGenerator.cxx, CPack/cmCPackTGZGenerator.cxx, + CPack/cpack.cxx: ENH: More improvements and add logging + +2006-01-02 15:01 hoffman + + * Tests/: CustomCommand/CMakeLists.txt, Wrapping/CMakeLists.txt: + BUG: force EXECUABLE and LIBRARY output paths so bad cache + entries do not fail tests + +2006-01-02 14:33 andy + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: BUG: Flush the EXECUTABLE + and LIBRARY output path to internal + +2006-01-02 13:37 hoffman + + * Modules/CMakeGenericSystem.cmake, + Modules/Platform/Windows-g77.cmake, + Modules/Platform/Windows-gcc.cmake, + Modules/Platform/Windows.cmake, Source/cmTarget.cxx: BUG: fix for + bug 2322, use CMAKE_EXECUTABLE_SUFFIX variable for exe suffix + +2006-01-02 13:34 hoffman + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: fix build problem + on gcc + +2006-01-02 12:36 hoffman + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: BUG: fix for bug 2533, make + foo/foo.o now works and .o files are in the help + +2006-01-02 11:39 andy + + * Source/CPack/cmCPackGenericGenerator.cxx: COMP: Remove warning + +2006-01-02 11:21 hoffman + + * Utilities/Release/Release.cmake: ENH: remove MS dll's from + install on cygwin + +2006-01-02 11:07 hoffman + + * Source/: cmFindPathCommand.cxx, cmMakefile.cxx: ENH: change + framework order + +2006-01-02 10:37 andy + + * Source/CPack/: cmCPackGenericGenerator.cxx, + cmCPackGenericGenerator.h, cmCPackTGZGenerator.cxx, + cmCPackTGZGenerator.h: COMP: Fix build problems + +2006-01-02 10:36 andy + + * Source/cmGeneratedFileStream.cxx: BUG: Fix the compression with + custom extension + +2006-01-02 07:53 andy + + * Source/CPack/: cmCPackPackageMakerGenerator.cxx, + cmCPackTGZGenerator.cxx, cmCPackTGZGenerator.h: ENH: Use libtar + +2006-01-02 07:52 andy + + * Source/: cmGeneratedFileStream.cxx, cmGeneratedFileStream.h: ENH: + Add a way to overwrite compression extension + +2006-01-02 01:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2006-01-01 23:31 andy + + * Source/: CMakeLists.txt, cmSystemTools.cxx, cmSystemTools.h: ENH: + Merge from cpack branch + +2006-01-01 23:28 andy + + * Modules/: CPack.Description.plist.in, CPack.Info.plist.in, + NSIS.template.in: ENH: Merge from CPack branch + +2006-01-01 23:21 andy + + * Source/CPack/: cmCPackConfigure.h.in, cmCPackGenerators.cxx, + cmCPackGenerators.h, cmCPackGenericGenerator.cxx, + cmCPackGenericGenerator.h, cmCPackNSISGenerator.cxx, + cmCPackNSISGenerator.h, cmCPackPackageMakerGenerator.cxx, + cmCPackPackageMakerGenerator.h, cmCPackSTGZGenerator.cxx, + cmCPackSTGZGenerator.h, cmCPackTGZGenerator.cxx, + cmCPackTGZGenerator.h, cpack.cxx: ENH: Merge from the cpack + branch + +2006-01-01 01:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-31 13:10 king + + * Tests/TarTest/CMakeLists.txt: ENH: Simplified ln command to use + relative path in symlink. + +2005-12-31 12:59 king + + * Source/kwsys/ProcessUNIX.c: BUG: When more than one command is + given and one of them fails to start and the rest are killed, do + not forget to reap the killed children. + +2005-12-31 10:33 andy + + * Utilities/cmtar/: CMakeLists.txt, config.h.in, internal.h: COMP: + Try to fix major/minor problem on aix + +2005-12-31 09:40 andy + + * Utilities/cmtar/: CMakeLists.txt, config.h.in, internal.h: COMP: + Attempt to fix problems with major and minor + +2005-12-31 01:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-30 21:54 hoffman + + * Source/: cmFindFileCommand.cxx, cmFindFileCommand.h, + cmFindPathCommand.cxx, cmFindPathCommand.h: ENH: move framework + stuff from FindFile to FindPath + +2005-12-30 21:54 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: fix so verbose is + put in the correct place + +2005-12-30 17:51 andy + + * Utilities/cmtar/compat/snprintf.c: COMP: Fix systems that do not + have both vsnprintf and snprintf. + +2005-12-30 17:27 andy + + * Utilities/cmtar/: CMakeLists.txt, config.h.in, compat/compat.h, + compat/snprintf.c: COMP: Fix support for vsnprintf + +2005-12-30 16:28 andy + + * Source/cmSystemTools.cxx: COMP: Fix warning on sun + +2005-12-30 16:05 andy + + * Utilities/cmtar/extract.c: COMP: Another borland bug + +2005-12-30 15:46 andy + + * Tests/TarTest/CMakeLists.txt: ENH: Add testing of symlinks too + +2005-12-30 15:46 andy + + * Utilities/cmtar/extract.c: BUG: Handle mkdirhier properly since + it may modify the string + +2005-12-30 15:32 andy + + * Source/cmSystemTools.cxx: COMP: Remove sun warning + +2005-12-30 15:27 andy + + * Source/CMakeLists.txt, Tests/TarTest/CMakeLists.txt, + Tests/TarTest/TestTarExec.cxx: ENH: Add a tar test + +2005-12-30 15:25 andy + + * Source/cmake.cxx: ENH: Add a way to compare two files + +2005-12-30 14:51 andy + + * Source/cmSystemTools.cxx, Utilities/cmtar/handle.c, + Utilities/cmtar/libtar.c, Utilities/cmtar/libtar.h: ENH: Cleanup + the file handler stuf so that now any file descriptor type can be + used + +2005-12-30 14:50 andy + + * CMakeLists.txt, Utilities/cmcurl/CMakeLists.txt, + Utilities/cmexpat/CMakeLists.txt, Utilities/cmtar/CMakeLists.txt, + Utilities/cmzlib/CMakeLists.txt, Source/CMakeLists.txt: COMP: + Cleanup regular expressions + +2005-12-30 14:31 andy + + * Source/cmSystemTools.cxx: COMP: Remove unused variable + +2005-12-30 14:23 andy + + * Utilities/cmtar/compat/: basename.c, dirname.c: COMP: Remove + warnings by exposing some variables + +2005-12-30 14:22 andy + + * Source/cmSystemTools.cxx, Utilities/cmtar/handle.c, + Utilities/cmtar/libtar.c, Utilities/cmtar/libtar.h: COMP: Fix + support for gzip on non-32 bit platforms + +2005-12-30 13:22 andy + + * Utilities/cmtar/util.c: COMP: Remove warning about argument not + being int + +2005-12-30 13:22 andy + + * Source/: cmFindFileCommand.cxx, cmGlobalXCodeGenerator.cxx: COMP: + Remove shadow variable warning + +2005-12-30 12:58 andy + + * Source/cmSystemTools.cxx: COMP: Use mangle names + +2005-12-30 12:58 andy + + * Source/: cmFindFileCommand.cxx, cmTarget.cxx: COMP: Remove + warnings + +2005-12-30 10:35 andy + + * Utilities/cmtar/: CMakeLists.txt, append.c, config.h.in, + encode.c, internal.h, output.c, util.c, wrapper.c: BUG: Several + Borland fixes + +2005-12-30 01:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-29 12:19 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h, cmake.cxx: ENH: Make + the syntax more line tar + +2005-12-29 12:18 andy + + * Utilities/cmtar/append.c: COMP: More cygwin fixes + +2005-12-29 11:42 andy + + * Utilities/cmtar/append.c: BUG: Fix on cygwin... again? + +2005-12-29 11:15 andy + + * Utilities/cmtar/output.c: COMP: Try to remove warnings and add + support for cygwin + +2005-12-29 10:52 andy + + * Source/cmake.cxx: ENH: Make additional file names optional + +2005-12-29 10:43 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h, cmake.cxx: ENH: Add + untaring support + +2005-12-29 10:41 andy + + * Utilities/cmtar/extract.c: BUG: Fix extract. Looks like dirname + actually changes the string, so temporary string should be used + +2005-12-29 09:11 andy + + * Utilities/cmtar/: output.c, compat/compat.h: COMP: Remove c++ + style comments + +2005-12-29 01:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-28 20:04 andy + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: BUG: Now really + fix the test + +2005-12-28 19:31 andy + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: COMP: Fix test + +2005-12-28 17:02 andy + + * Source/cmSystemTools.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt: COMP: Fix + complex test and fix bootstrap + +2005-12-28 16:53 andy + + * Source/cmSystemTools.cxx: COMP: Add missing include + +2005-12-28 16:44 andy + + * Source/cmSystemTools.cxx: BUG: Return proper values + +2005-12-28 16:43 andy + + * Utilities/cmtar/: extract.c, libtar.c: COMP: Remove more warnings + +2005-12-28 16:31 andy + + * Source/cmake.cxx: ENH: Add command to create tar + +2005-12-28 16:30 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Add method to + create tar + +2005-12-28 16:30 andy + + * Source/CMakeLists.txt: COMP: Link tar library to cmake + +2005-12-28 16:29 andy + + * CMakeLists.txt: COMP: Fix path to include files + +2005-12-28 15:31 andy + + * Utilities/cmtar/: CMakeLists.txt, config.h.in, handle.c, + compat/compat.h: COMP: Remove more warnings and rename library to + cmtar + +2005-12-28 15:03 andy + + * Utilities/cmtar/append.c: COMP: Remove warning + +2005-12-28 14:58 andy + + * Utilities/cmtar/: CMakeLists.txt, append.c, decode.c, extract.c, + filesystem.c, filesystem.h, handle.c, internal.h, libtar.c, + util.c, wrapper.c, compat/basename.c, compat/compat.h, + compat/dirname.c: COMP: Several borland fixes + +2005-12-28 14:50 andy + + * Utilities/cmtar/compat/snprintf.c: COMP: Remove warnings + +2005-12-28 13:36 andy + + * CMakeLists.txt: ENH: First cut at enabling tar + +2005-12-28 13:35 andy + + * Utilities/cmtar/append.c: COMP: Only do O_BINARY on windows + +2005-12-28 13:33 andy + + * Utilities/cmtar/: append.c, libtar.c: COMP: Fix windows + +2005-12-28 13:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-28 12:34 andy + + * Utilities/cmtar/libtar.c: ENH: Fix building on cygwin + +2005-12-28 12:24 andy + + * Utilities/cmtar/: CMakeLists.txt, config.h.in, extract.c, + libtar.c: COMP: Fix build on sun by adding missing include + +2005-12-28 11:00 andy + + * Utilities/cmtar/: CMakeLists.txt, decode.c, filesystem.c, + wrapper.c, compat/basename.c, compat/dirname.c, compat/fnmatch.c, + compat/snprintf.c: ENH: Windows fixes + +2005-12-28 10:28 andy + + * CMakeLists.txt: ENH: Merge change from the main tree + +2005-12-28 10:19 andy + + * CMakeLists.txt: ENH: Initial setup of libtar + +2005-12-28 10:18 andy + + * Utilities/cmtar/: CMakeLists.txt, COPYRIGHT, append.c, block.c, + config.h.in, decode.c, encode.c, extract.c, filesystem.c, + filesystem.h, handle.c, internal.h, libtar.c, libtar.h, output.c, + tar.h, util.c, wrapper.c, compat/README, compat/basename.c, + compat/compat.h, compat/dirname.c, compat/fnmatch.c, + compat/gethostbyname_r.c, compat/gethostname.c, + compat/getservbyname_r.c, compat/glob.c, compat/inet_aton.c, + compat/snprintf.c, compat/strdup.c, compat/strlcat.c, + compat/strlcpy.c, compat/strmode.c, compat/strrstr.c, + compat/strsep.c, listhash/hash.c.in, listhash/list.c.in, + listhash/listhash.h.in: ENH: Initial import + +2005-12-28 10:09 andy + + * Utilities/cmtar/: CMakeLists.txt, COPYRIGHT, append.c, block.c, + config.h.in, decode.c, encode.c, extract.c, filesystem.c, + filesystem.h, handle.c, internal.h, libtar.c, libtar.h, output.c, + tar.h, util.c, wrapper.c, compat/README, compat/basename.c, + compat/compat.h, compat/dirname.c, compat/fnmatch.c, + compat/gethostbyname_r.c, compat/gethostname.c, + compat/getservbyname_r.c, compat/glob.c, compat/inet_aton.c, + compat/snprintf.c, compat/strdup.c, compat/strlcat.c, + compat/strlcpy.c, compat/strmode.c, compat/strrstr.c, + compat/strsep.c, listhash/hash.c.in, listhash/list.c.in, + listhash/listhash.h.in: ENH: Initial import + +2005-12-28 10:07 andy + + * Source/cmake.cxx: ENH: Add file compare + +2005-12-27 15:33 hoffman + + * Source/: cmFindFileCommand.cxx, cmFindFileCommand.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: make sure -F is not + duplicated + +2005-12-27 15:08 andy + + * Source/CPack/: cmCPackConfigure.h.in, cmCPackGenerators.cxx, + cmCPackGenerators.h, cmCPackGenericGenerator.cxx, + cmCPackGenericGenerator.h, cmCPackNSISGenerator.cxx, + cmCPackNSISGenerator.h, cmCPackPackageMakerGenerator.cxx, + cmCPackPackageMakerGenerator.h, cmCPackSTGZGenerator.h, + cmCPackTGZGenerator.cxx, cmCPackTGZGenerator.h: ENH: Remove + references to m_Makefile. It is now private. Fix several build + problems. Change generator creation. ... + +2005-12-27 14:56 hoffman + + * Source/: cmFindFileCommand.cxx, cmFindFileCommand.h, + cmGlobalXCodeGenerator.cxx, cmLocalGenerator.cxx: ENH: add + framework support to FIND_FILE + +2005-12-27 14:32 andy + + * Source/CPack/cpack.cxx, Utilities/CMakeLists.txt: ENH: Improve + help arguments and add generation of doc files + +2005-12-27 13:10 andy + + * Source/cmCTest.cxx: ENH: Fix command line argument parsing + +2005-12-27 13:03 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: remove warning + +2005-12-26 13:14 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmLocalGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmMakefile.cxx, + cmOrderLinkDirectories.cxx, cmOrderLinkDirectories.h, + cmSystemTools.cxx, cmSystemTools.h, cmTarget.cxx, cmTarget.h, + kwsys/SystemTools.cxx: ENH: add better support for framework + linking + +2005-12-26 01:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-25 01:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-24 01:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-23 01:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-22 16:42 hoffman + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeMSYSFindMake.cmake, + Modules/CMakeMinGWFindMake.cmake, Source/CMakeLists.txt, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalMSYSMakefileGenerator.cxx, + Source/cmGlobalMSYSMakefileGenerator.h, + Source/cmGlobalMinGWMakefileGenerator.cxx, + Source/cmGlobalMinGWMakefileGenerator.h, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, Source/cmake.cxx: ENH: + fix borland make clean targets before build, add new generators + for msys and mingw + +2005-12-22 16:02 hoffman + + * ChangeLog.manual, Modules/CMake.cmake, + Modules/CMakeBackwardCompatibilityC.cmake, + Modules/CMakeBackwardCompatibilityCXX.cmake, + Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeCommonLanguageInclude.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeDetermineRCCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakeExportBuildSettings.cmake, + Modules/CMakeFindFrameworks.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/CMakeImportBuildSettings.cmake, + Modules/CMakeJavaInformation.cmake, + Modules/CMakePrintSystemInformation.cmake, + Modules/CMakeRCInformation.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, + Modules/CMakeTestFortranCompiler.cmake, + Modules/CMakeTestJavaCompiler.cmake, + Modules/CMakeTestRCCompiler.cmake, + Modules/CMakeVS6BackwardCompatibility.cmake, + Modules/CMakeVS7BackwardCompatibility.cmake, Modules/CTest.cmake, + Modules/CheckCSourceCompiles.cmake, + Modules/CheckCXXSourceCompiles.cmake, + Modules/CheckFunctionExists.cmake, + Modules/CheckIncludeFile.cmake, + Modules/CheckIncludeFileCXX.cmake, + Modules/CheckIncludeFiles.cmake, + Modules/CheckLibraryExists.cmake, + Modules/CheckSymbolExists.cmake, Modules/CheckTypeSize.cmake, + Modules/CheckVariableExists.cmake, Modules/Dart.cmake, + Modules/Documentation.cmake, Modules/FindAVIFile.cmake, + Modules/FindCABLE.cmake, Modules/FindCurses.cmake, + Modules/FindCygwin.cmake, Modules/FindDCMTK.cmake, + Modules/FindDart.cmake, Modules/FindDoxygen.cmake, + Modules/FindFLTK.cmake, Modules/FindGCCXML.cmake, + Modules/FindGLU.cmake, Modules/FindGLUT.cmake, + Modules/FindGTK.cmake, Modules/FindGnuplot.cmake, + Modules/FindHTMLHelp.cmake, Modules/FindITK.cmake, + Modules/FindImageMagick.cmake, Modules/FindJNI.cmake, + Modules/FindJPEG.cmake, Modules/FindJava.cmake, + Modules/FindKDE.cmake, Modules/FindLATEX.cmake, + Modules/FindMFC.cmake, Modules/FindMPEG.cmake, + Modules/FindMPEG2.cmake, Modules/FindMPI.cmake, + Modules/FindMatlab.cmake, Modules/FindMotif.cmake, + Modules/FindOpenAL.cmake, Modules/FindOpenGL.cmake, + Modules/FindPHP4.cmake, Modules/FindPNG.cmake, + Modules/FindPerl.cmake, Modules/FindPerlLibs.cmake, + Modules/FindPhysFS.cmake, Modules/FindPike.cmake, + Modules/FindPythonInterp.cmake, Modules/FindPythonLibs.cmake, + Modules/FindQt.cmake, Modules/FindQt.cmake.bak, + Modules/FindQt3.cmake, Modules/FindQt4.cmake, + Modules/FindRuby.cmake, Modules/FindSDL.cmake, + Modules/FindSDL.cmake.bak, Modules/FindSDL_image.cmake, + Modules/FindSDL_image.cmake.bak, Modules/FindSDL_mixer.cmake, + Modules/FindSDL_mixer.cmake.bak, Modules/FindSDL_net.cmake, + Modules/FindSDL_net.cmake.bak, Modules/FindSDL_sound.cmake, + Modules/FindSDL_ttf.cmake, Modules/FindSDL_ttf.cmake.bak, + Modules/FindSWIG.cmake, Modules/FindSelfPackers.cmake, + Modules/FindTCL.cmake, Modules/FindTIFF.cmake, + Modules/FindTclsh.cmake, Modules/FindThreads.cmake, + Modules/FindUnixCommands.cmake, Modules/FindVTK.cmake, + Modules/FindWget.cmake, Modules/FindWish.cmake, + Modules/FindX11.cmake, Modules/FindZLIB.cmake, + Modules/FindwxWindows.cmake, Modules/TestBigEndian.cmake, + Modules/TestCXXAcceptsFlag.cmake, + Modules/TestForANSIForScope.cmake, + Modules/TestForANSIStreamHeaders.cmake, + Modules/TestForSTDNamespace.cmake, Modules/UseQt4.cmake, + Modules/UseSWIG.cmake, Modules/UseVTK40.cmake, + Modules/UseVTKBuildSettings40.cmake, + Modules/UseVTKConfig40.cmake, Modules/Use_wxWindows.cmake, + Modules/UsewxWidgets.cmake, Modules/readme.txt, + Source/cmBuildCommand.cxx, Source/cmBuildNameCommand.h, + Source/cmCTest.cxx, Source/cmDepends.cxx, Source/cmDepends.h, + Source/cmDependsC.cxx, Source/cmDependsC.h, + Source/cmDependsFortran.cxx, Source/cmDependsFortran.h, + Source/cmDependsJava.cxx, Source/cmDependsJava.h, + Source/cmDocumentation.cxx, Source/cmDocumentation.h, + Source/cmFindPackageCommand.h, + Source/cmGetCMakePropertyCommand.h, + Source/cmGetDirectoryPropertyCommand.h, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio6Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, + Source/cmInstallTargetsCommand.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/cmSetDirectoryPropertiesCommand.h, + Source/cmSiteNameCommand.h, Source/cmTarget.cxx, + Source/cmTarget.h, Source/cmTryRunCommand.h, + Source/cmakemain.cxx, Source/CTest/cmCTestBuildCommand.cxx, + Source/CTest/cmCTestUpdateHandler.cxx, + Source/kwsys/ProcessWin32.c, Source/kwsys/SystemTools.cxx, + Source/kwsys/SystemTools.hxx.in, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: merge changes from + main tree to branch + +2005-12-22 15:41 andy + + * Modules/CPack.Description.plist.in, Modules/CPack.Info.plist.in, + Source/CPack/cmCPackPackageMakerGenerator.cxx, + Source/CPack/cmCPackPackageMakerGenerator.h: ENH: Ok, now it + works + +2005-12-22 15:34 andy + + * Source/CPack/cmCPackGenericGenerator.cxx: ENH: Add mandatory + project description file or string + +2005-12-22 15:34 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Add XML + encoduing method + +2005-12-22 01:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-21 15:45 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: make sure depend helper actually works, if a depend library + gets updated, then the target needs to be removed, and the + CONFIGURATION directory needs to be used + +2005-12-21 08:46 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Libraries and + executables that are built with version numbers and symlinks + should be built by a rule using the real file name. The symlink + file names should be rules that just depend on the main rule. + This way if a version number changes a target will re-link with + the new name and the symlinks will be updated. + +2005-12-21 01:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-20 14:07 andy + + * Utilities/cmcurl/mprintf.c: COMP: Fix build on uclibc + +2005-12-20 13:53 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: remove duplicates + +2005-12-20 13:22 king + + * Source/kwsys/ProcessWin32.c: ENH: Improved robustness of sharing + parent pipes with children. This ensures that the parent pipe + handles are inherited by the children. If a parent pipe handle + is invalid a handle to an empty pipe is given to the child to + make sure all pipes are defined for the children. + +2005-12-20 09:20 andy + + * Source/CMakeLists.txt: ENH: Start working on PackageMaker + +2005-12-20 01:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-19 18:17 andy + + * Source/CPack/: cmCPackGenerators.cxx, + cmCPackGenericGenerator.cxx, cmCPackGenericGenerator.h, + cmCPackPackageMakerGenerator.cxx, cmCPackPackageMakerGenerator.h: + ENH: Start working on Osx + +2005-12-19 11:29 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, + CTest/cmCTestBuildAndTestHandler.cxx: BUG: fix for bug 2560, + Xcode does not create correct bundles + +2005-12-19 01:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-18 10:00 andy + + * Source/CPack/: cmCPackGenericGenerator.cxx, + cmCPackGenericGenerator.h, cmCPackNSISGenerator.cxx, + cmCPackNSISGenerator.h, cpack.cxx: ENH: 'Finish; NSI + +2005-12-18 09:59 andy + + * Modules/NSIS.template.in: ENH: Unify with Ken's + +2005-12-18 01:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-17 01:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-16 16:49 hoffman + + * Source/cmDocumentation.cxx: ENH: make sure uncommented modules + are not documented + +2005-12-16 09:03 andy + + * Source/kwsys/SystemTools.cxx: BUG: Return if the file is in any + directory not just in first one + +2005-12-16 01:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-15 16:28 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Fix test + +2005-12-15 14:17 martink + + * Modules/: FindMFC.cmake, FindMPEG.cmake, FindMPEG2.cmake, + FindMPI.cmake, FindMotif.cmake, FindOpenGL.cmake, FindPHP4.cmake, + FindPerl.cmake, FindPerlLibs.cmake, FindPhysFS.cmake, + FindPike.cmake, FindPythonInterp.cmake, FindPythonLibs.cmake, + FindQt.cmake, FindQt4.cmake, FindRuby.cmake, FindSDL.cmake, + FindSDL_image.cmake, FindSDL_mixer.cmake, FindSDL_net.cmake, + FindSDL_sound.cmake, FindSDL_ttf.cmake, FindTCL.cmake, + FindTIFF.cmake, FindTclsh.cmake, FindThreads.cmake, + FindVTK.cmake, FindWget.cmake, FindWish.cmake, FindX11.cmake, + FindwxWindows.cmake, TestForANSIStreamHeaders.cmake, + TestForSTDNamespace.cmake, UseSWIG.cmake, Use_wxWindows.cmake: + ENH: cleanups + +2005-12-15 12:01 andy + + * Source/cmInstallTargetsCommand.cxx: ENH: Report an error if the + target does not exists + +2005-12-15 10:41 martink + + * Modules/: CMakeBackwardCompatibilityCXX.cmake, + CMakeExportBuildSettings.cmake, CMakeImportBuildSettings.cmake, + CheckCXXSourceCompiles.cmake, CheckIncludeFile.cmake, + CheckIncludeFileCXX.cmake, CheckIncludeFiles.cmake, + CheckLibraryExists.cmake, CheckSymbolExists.cmake, + CheckTypeSize.cmake, CheckVariableExists.cmake, + FindAVIFile.cmake, FindCABLE.cmake, FindFLTK.cmake, + FindGLUT.cmake, FindGTK.cmake, FindHTMLHelp.cmake, FindITK.cmake, + FindImageMagick.cmake, FindJNI.cmake, FindJPEG.cmake, + FindJava.cmake, FindLATEX.cmake, FindMatlab.cmake: ENH: some + style fixes for the book + +2005-12-15 09:19 hoffman + + * Modules/FindQt3.cmake, Source/cmDocumentation.cxx: ENH: fix + module documenation to handle bad docs and fix qt3 docs + +2005-12-15 01:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-14 13:51 hoffman + + * Modules/CMake.cmake, Modules/CMakeBackwardCompatibilityC.cmake, + Modules/CMakeBackwardCompatibilityCXX.cmake, + Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeCommonLanguageInclude.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeDetermineRCCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakeExportBuildSettings.cmake, + Modules/CMakeFindFrameworks.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/CMakeImportBuildSettings.cmake, + Modules/CMakeJavaInformation.cmake, + Modules/CMakePrintSystemInformation.cmake, + Modules/CMakeRCInformation.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, + Modules/CMakeTestFortranCompiler.cmake, + Modules/CMakeTestJavaCompiler.cmake, + Modules/CMakeTestRCCompiler.cmake, + Modules/CMakeVS6BackwardCompatibility.cmake, + Modules/CMakeVS7BackwardCompatibility.cmake, Modules/CTest.cmake, + Modules/CheckCSourceCompiles.cmake, + Modules/CheckCXXSourceCompiles.cmake, + Modules/CheckFunctionExists.cmake, + Modules/CheckIncludeFile.cmake, + Modules/CheckIncludeFileCXX.cmake, + Modules/CheckIncludeFiles.cmake, + Modules/CheckLibraryExists.cmake, + Modules/CheckSymbolExists.cmake, Modules/CheckTypeSize.cmake, + Modules/CheckVariableExists.cmake, Modules/Dart.cmake, + Modules/Documentation.cmake, Modules/FindAVIFile.cmake, + Modules/FindCABLE.cmake, Modules/FindCurses.cmake, + Modules/FindCygwin.cmake, Modules/FindDCMTK.cmake, + Modules/FindDart.cmake, Modules/FindDoxygen.cmake, + Modules/FindFLTK.cmake, Modules/FindGCCXML.cmake, + Modules/FindGLU.cmake, Modules/FindGLUT.cmake, + Modules/FindGTK.cmake, Modules/FindGnuplot.cmake, + Modules/FindHTMLHelp.cmake, Modules/FindITK.cmake, + Modules/FindImageMagick.cmake, Modules/FindJNI.cmake, + Modules/FindJPEG.cmake, Modules/FindJava.cmake, + Modules/FindKDE.cmake, Modules/FindLATEX.cmake, + Modules/FindMFC.cmake, Modules/FindMPEG.cmake, + Modules/FindMPEG2.cmake, Modules/FindMPI.cmake, + Modules/FindMatlab.cmake, Modules/FindMotif.cmake, + Modules/FindOpenAL.cmake, Modules/FindOpenGL.cmake, + Modules/FindPHP4.cmake, Modules/FindPNG.cmake, + Modules/FindPerl.cmake, Modules/FindPerlLibs.cmake, + Modules/FindPhysFS.cmake, Modules/FindPike.cmake, + Modules/FindPythonInterp.cmake, Modules/FindPythonLibs.cmake, + Modules/FindQt.cmake, Modules/FindQt3.cmake, + Modules/FindQt4.cmake, Modules/FindRuby.cmake, + Modules/FindSDL.cmake, Modules/FindSDL_image.cmake, + Modules/FindSDL_mixer.cmake, Modules/FindSDL_net.cmake, + Modules/FindSDL_sound.cmake, Modules/FindSDL_ttf.cmake, + Modules/FindSWIG.cmake, Modules/FindSelfPackers.cmake, + Modules/FindTCL.cmake, Modules/FindTIFF.cmake, + Modules/FindTclsh.cmake, Modules/FindThreads.cmake, + Modules/FindUnixCommands.cmake, Modules/FindVTK.cmake, + Modules/FindWget.cmake, Modules/FindWish.cmake, + Modules/FindX11.cmake, Modules/FindZLIB.cmake, + Modules/FindwxWindows.cmake, Modules/TestBigEndian.cmake, + Modules/TestCXXAcceptsFlag.cmake, + Modules/TestForANSIForScope.cmake, + Modules/TestForANSIStreamHeaders.cmake, + Modules/TestForSTDNamespace.cmake, Modules/UseQt4.cmake, + Modules/UseSWIG.cmake, Modules/UseVTK40.cmake, + Modules/UseVTKBuildSettings40.cmake, + Modules/UseVTKConfig40.cmake, Modules/Use_wxWindows.cmake, + Modules/UsewxWidgets.cmake, Modules/readme.txt, + Source/cmDocumentation.cxx, Source/cmDocumentation.h, + Source/cmakemain.cxx: ENH: add documentation support for modules + +2005-12-14 11:00 king + + * Source/cmGlobalVisualStudio7Generator.h: ENH: Renamed + ZeroTargetCheck target to ZERO_CHECK for consistency with other + CMake-generated targets (ALL_BUILD, RUN_TESTS, INSTALL). + +2005-12-14 10:58 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: COMP: Fix conversion + warning. + +2005-12-14 10:47 king + + * Source/: cmLocalGenerator.cxx, cmLocalUnixMakefileGenerator3.cxx, + cmMakefile.cxx, cmTarget.cxx, cmTarget.h: ENH: Removed cmMakefile + arguments from cmTarget methods because cmTarget has the ivar + m_Makefile now. Re-implemented + cmLocalUnixMakefileGenerator3::AppendAnyDepend to use the new + global knowledge and avoid the need to look at the cache for + information about other targets. This should fix problems with + custom commands and executables with the OUTPUT_NAME set. Also + the _LIBRARY_TYPE cache variable is no longer needed at + all and has been removed. + +2005-12-13 18:23 king + + * Source/cmGlobalVisualStudio8Generator.cxx: COMP: Fixed unused + variable warning. + +2005-12-13 15:16 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: BUG: Fix the problem with + update.xml.tmp not being coppied + +2005-12-13 15:14 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: removed + TARGET_DIR_PREFIX support and someother fix + +2005-12-13 15:13 martink + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: removed + TARGET_DIR_PREFIX support + +2005-12-13 15:12 martink + + * Source/cmTryRunCommand.h: STYLE: fix missing docs + +2005-12-13 14:21 king + + * Source/: cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Generator.cxx, + cmGlobalVisualStudio8Generator.h, + cmLocalVisualStudio7Generator.cxx: ENH: Added support for + parallel builds in VS 8. There is now a special target on which + all other targets depend that re-runs CMake if any listfiles have + been changed. This addresses bug#2512. + +2005-12-13 14:07 martink + + * Utilities/Release/CMake.nsi.in: ENH: removed the add to path + +2005-12-13 04:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-12 11:34 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: fix for bug 2584, + empty source groups with children skipped + +2005-12-12 04:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-11 04:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-11 00:12 andy + + * Source/kwsys/SystemTools.cxx: COMP: for a in range(100): + write_on_board(No std in kwsys...) + +2005-12-10 12:16 andy + + * Modules/NSIS.template.in: ENH: Some fixes to make it work + +2005-12-10 12:14 andy + + * Source/CPack/: cmCPackGenericGenerator.cxx, + cmCPackGenericGenerator.h, cmCPackNSISGenerator.cxx, cpack.cxx: + ENH: More work on NSIS: + +2005-12-10 12:11 andy + + * Source/cmLocalGenerator.cxx: ENH: Allow the installer to + overwrite the install prefix + +2005-12-10 12:10 andy + + * Source/kwsys/: CommandLineArguments.cxx, + CommandLineArguments.hxx.in: ENH: Add a method to remove + remaining arguments + +2005-12-10 12:09 andy + + * Source/kwsys/Glob.hxx.in: COMP: Fix the exporting so that it can + actually be used + +2005-12-10 12:08 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Add + another signature to FindProgram that matches more to the one + from CMake + +2005-12-10 04:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-09 23:04 hoffman + + * Source/: cmDependsC.cxx, cmDependsC.h: ENH: try to fix hp build + problem + +2005-12-09 16:32 andy + + * Source/cmDependsC.h: ENH: fix compile error + +2005-12-09 14:30 hoffman + + * Source/: cmDependsC.cxx, cmDependsC.h: ENH: clean up style a bit + +2005-12-09 13:58 hoffman + + * Source/: cmDependsC.cxx, cmDependsC.h, + cmLocalUnixMakefileGenerator3.cxx: PERF: apply patch for bug 2575 + speeds up depend scanning + +2005-12-09 04:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-08 04:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-07 11:39 andy + + * Source/: cmBuildNameCommand.h, cmFindPackageCommand.h, + cmGetCMakePropertyCommand.h, cmGetDirectoryPropertyCommand.h, + cmSetDirectoryPropertiesCommand.h, cmSiteNameCommand.h: ENH: Make + commands scriptable + +2005-12-06 10:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-05 08:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-04 05:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-03 06:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-02 09:18 hoffman + + * Utilities/Release/cmake_release.sh: ENH: update revision numbers + +2005-12-02 09:16 hoffman + + * ChangeLog.manual, Utilities/Release/config_IRIX64, + Utilities/Release/release_dispatch.sh: ENH: fix change log and + change sgi release scripts + +2005-12-02 05:30 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-12-01 21:52 andy + + * Modules/NSIS.template.in, Source/CPack/cmCPackNSISGenerator.cxx, + Source/CPack/cmCPackNSISGenerator.h: ENH: Work on nsis + +2005-12-01 12:27 hoffman + + * Utilities/Release/cmake_release.sh: ENH: update revision numbers + +2005-12-01 11:41 andy + + * Source/: cmBuildCommand.cxx, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h, CTest/cmCTestBuildCommand.cxx: ENH: Add + a way for the generated command to include extra flags. This is + useful for CTest (or try compile) to add -j2 + +2005-12-01 05:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-30 13:46 andy + + * Source/cmMakefile.cxx: ENH: Add variable for debugging. This + variable CMAKE_PARENT_LIST_FILE holds the parent CMake list file + of the current cmake list file. + +2005-11-30 05:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-29 05:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-28 15:57 hoffman + + * Source/CMakeLists.txt, Tests/Tutorial/Step1/CMakeLists.txt, + Tests/Tutorial/Step1/TutorialConfig.h.in, + Tests/Tutorial/Step1/tutorial.cxx, + Tests/Tutorial/Step2/CMakeLists.txt, + Tests/Tutorial/Step2/TutorialConfig.h.in, + Tests/Tutorial/Step2/tutorial.cxx, + Tests/Tutorial/Step2/MathFunctions/CMakeLists.txt, + Tests/Tutorial/Step2/MathFunctions/MathFunctions.h, + Tests/Tutorial/Step2/MathFunctions/mysqrt.cxx, + Tests/Tutorial/Step3/CMakeLists.txt, + Tests/Tutorial/Step3/TutorialConfig.h.in, + Tests/Tutorial/Step3/tutorial.cxx, + Tests/Tutorial/Step3/MathFunctions/CMakeLists.txt, + Tests/Tutorial/Step3/MathFunctions/MathFunctions.h, + Tests/Tutorial/Step3/MathFunctions/mysqrt.cxx, + Tests/Tutorial/Step4/CMakeLists.txt, + Tests/Tutorial/Step4/TutorialConfig.h.in, + Tests/Tutorial/Step4/tutorial.cxx, + Tests/Tutorial/Step4/MathFunctions/CMakeLists.txt, + Tests/Tutorial/Step4/MathFunctions/MathFunctions.h, + Tests/Tutorial/Step4/MathFunctions/mysqrt.cxx, + Tests/Tutorial/Step5/CMakeLists.txt, + Tests/Tutorial/Step5/TutorialConfig.h.in, + Tests/Tutorial/Step5/tutorial.cxx, + Tests/Tutorial/Step5/MathFunctions/CMakeLists.txt, + Tests/Tutorial/Step5/MathFunctions/MakeTable.cxx, + Tests/Tutorial/Step5/MathFunctions/MathFunctions.h, + Tests/Tutorial/Step5/MathFunctions/mysqrt.cxx: ENH: move tutorial + to branch + +2005-11-28 15:15 hoffman + + * CMakeLists.txt, Source/cmDependsFortranLexer.cxx, + Source/cmDependsFortranLexer.in.l: ENH: Version 2.2.3 + +2005-11-28 14:19 hoffman + + * Modules/VTKCompatibility.cmake: ENH: fix problem with building + vtk 4.4.2 + +2005-11-28 14:05 hoffman + + * Modules/VTKCompatibility.cmake: ENH: fix for vtk 4.4.2 and cmake + 2.2 + +2005-11-28 05:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-27 05:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-26 05:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-25 05:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-24 05:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-23 12:33 hoffman + + * ChangeLog.manual, Modules/CMakeCCompiler.cmake.in, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestJavaCompiler.cmake, + Modules/CheckFunctionExists.cmake, + Modules/CheckIncludeFile.cmake, + Modules/CheckIncludeFileCXX.cmake, + Modules/CheckIncludeFiles.cmake, + Modules/CheckLibraryExists.cmake, + Modules/CheckSymbolExists.cmake, + Modules/CheckVariableExists.cmake, Modules/FindOpenAL.cmake, + Modules/FindPhysFS.cmake, Modules/FindQt3.cmake, + Modules/FindSDL.cmake, Modules/FindSDL.cmake.bak, + Modules/FindSDL_image.cmake, Modules/FindSDL_image.cmake.bak, + Modules/FindSDL_mixer.cmake, Modules/FindSDL_mixer.cmake.bak, + Modules/FindSDL_net.cmake, Modules/FindSDL_net.cmake.bak, + Modules/FindSDL_sound.cmake, Modules/FindSDL_ttf.cmake, + Modules/FindSDL_ttf.cmake.bak, Modules/Platform/SunOS.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-icl.cmake, + Modules/Platform/Windows-ifort.cmake, + Source/cmAddLibraryCommand.h, Source/cmAddSubDirectoryCommand.h, + Source/cmCMakeMinimumRequired.h, Source/cmCPluginAPI.h, + Source/cmCTest.cxx, Source/cmConfigureFileCommand.h, + Source/cmCreateTestSourceList.h, Source/cmElseCommand.h, + Source/cmEnableLanguageCommand.h, + Source/cmEnableTestingCommand.h, Source/cmEndForEachCommand.h, + Source/cmEndIfCommand.h, Source/cmEndWhileCommand.h, + Source/cmExecProgramCommand.h, Source/cmFLTKWrapUICommand.h, + Source/cmFileCommand.h, Source/cmForEachCommand.h, + Source/cmGetCMakePropertyCommand.h, + Source/cmGetDirectoryPropertyCommand.h, + Source/cmGetSourceFilePropertyCommand.h, + Source/cmGetTargetPropertyCommand.h, + Source/cmGetTestPropertyCommand.h, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmIfCommand.cxx, + Source/cmIfCommand.h, Source/cmIncludeCommand.h, + Source/cmInstallFilesCommand.h, Source/cmInstallTargetsCommand.h, + Source/cmLoadCacheCommand.h, Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMacroCommand.h, Source/cmMakefile.cxx, + Source/cmMarkAsAdvancedCommand.h, Source/cmMessageCommand.h, + Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, Source/cmQTWrapCPPCommand.h, + Source/cmQTWrapUICommand.h, Source/cmSetCommand.h, + Source/cmSetSourceFilesPropertiesCommand.h, + Source/cmSetTargetPropertiesCommand.h, + Source/cmSetTestsPropertiesCommand.h, Source/cmSourceFile.cxx, + Source/cmSourceGroupCommand.h, Source/cmSubdirCommand.h, + Source/cmSystemTools.cxx, Source/cmTarget.cxx, + Source/cmTryCompileCommand.h, Source/cmTryRunCommand.h, + Source/cmVariableRequiresCommand.h, Source/cmWhileCommand.h, + Source/cmWriteFileCommand.h, Source/cmXCode21Object.cxx, + Source/cmXCodeObject.cxx, Source/cmXCodeObject.h, + Source/ctest.cxx, Source/CTest/cmCTestBuildHandler.cxx, + Source/CTest/cmCTestScriptHandler.h, + Source/CTest/cmCTestSubmitHandler.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestTestHandler.h, Source/kwsys/ProcessUNIX.c, + Source/kwsys/ProcessWin32.c, Source/kwsys/SystemTools.cxx, + Tests/ExternalOBJ/CMakeLists.txt, Tests/Wrapping/CMakeLists.txt, + Utilities/Release/CMake.nsi.in: ENH: merge fixes from main tree, + see ChangeLog.manual + +2005-11-23 10:27 hoffman + + * Source/cmTarget.cxx: ENH: executable prefix and post fix + variables should not be the same as the executable extension + +2005-11-23 05:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-22 17:03 king + + * Source/: cmMakefile.cxx, cmTarget.cxx: BUG: Do not expand escape + sequences when re-expanding variables in include directories, + link directories, and link libraries. + +2005-11-22 16:59 king + + * Source/cmOrderLinkDirectories.cxx: BUG: Do not accept a directory + name as a library. + +2005-11-22 16:08 hoffman + + * Source/: cmOrderLinkDirectories.cxx, cmOrderLinkDirectories.h: + BUG: fix for bug 2357, do not allow targets to link to + directories + +2005-11-22 15:15 hoffman + + * Source/CTest/cmCTestScriptHandler.h: BUG: fix spelling error + +2005-11-22 13:37 king + + * Source/: cmGlobalVisualStudio7Generator.h, + cmGlobalVisualStudio8Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: Tweak VS8 generator to + keep VS8 happy. The .vcproj files need their own GUIDs in a + ProjectGUID attribute. The top level .sln file needs a special + comment at the top to allow it to be opened with double-click in + explorer. + +2005-11-22 13:36 king + + * CMakeLists.txt: COMP: Define _CRT_SECURE_NO_DEPRECATE to build + CMake itself on VS8. This disables 1000s of deprecation warnings + about standard code. + +2005-11-22 12:04 hoffman + + * Modules/Platform/Windows-cl.cmake: BUG: fix for bug 2488 + +2005-11-22 11:44 hoffman + + * Modules/Platform/: Linux-icpc.cmake, SunOS.cmake: ENH: more + compiler flags + +2005-11-22 11:35 king + + * Source/cmSetTargetPropertiesCommand.h: STYLE: Fixed documentation + to state target_EXPORTS default right after DEFINE_SYMBOL + documentation instead of many sentences later in a random place. + +2005-11-22 11:33 king + + * Modules/FindQt3.cmake: BUG: QT_DEFINITIONS should not be quoted. + This addresses bug#2481. + +2005-11-22 11:28 hoffman + + * Modules/CMakeTestJavaCompiler.cmake: ENH: set java compiler works + +2005-11-22 05:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-21 05:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-20 05:30 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-19 09:40 hoffman + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmSetTargetPropertiesCommand.h: ENH: add some more properties for + visual studio projects + +2005-11-19 08:29 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: COMP: fix compile error + +2005-11-19 08:04 hoffman + + * Source/cmTryRunCommand.h: ENH: fix docs + +2005-11-19 05:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-18 17:07 andy + + * Source/CPack/: cmCPackGenerators.cxx, + cmCPackGenericGenerator.cxx, cmCPackGenericGenerator.h, + cmCPackTGZGenerator.cxx, cpack.cxx: ENH: Use cmMakefile instead + for the options, more cleanups and start working on NSIS + +2005-11-18 17:07 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Add + another signature for FindProgram that takes the list of names + +2005-11-18 17:06 andy + + * Source/CMakeLists.txt: ENH: Add NSIS + +2005-11-18 16:59 hoffman + + * Source/cmXCodeObject.cxx: ENH: more chars need quotes + +2005-11-18 15:03 martink + + * Utilities/Release/CMake.nsi.in: BUG: fixe dproblem with not + uninstalling start menu entries + +2005-11-18 14:12 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: fixes for Xcode 2.2 + +2005-11-18 10:40 hoffman + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: add new error regex + +2005-11-18 10:36 king + + * Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-icl.cmake, + Modules/Platform/Windows-ifort.cmake, + Source/cmLocalVisualStudio7Generator.cxx: BUG: Fixed + flag-to-vcproj-attribute conversion code to work again (it was + broken by the optimization changes). Added conversion of /nologo + flag to SuppressStartupBanner attribute and /Gy flag to + EnableFunctionLevelLinking attribute. + +2005-11-17 16:49 king + + * Tests/Wrapping/CMakeLists.txt: COMP: Need target-level dependency + from wrapper targets on Wrap executable target. + +2005-11-17 15:57 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Fixed XML escapes + for custom commands. Also added escaping of newlines for VS + 2005. + +2005-11-17 15:44 king + + * Source/: cmCTest.cxx, cmSystemTools.cxx: BUG: Do not dereference + an end iterator. + +2005-11-17 13:49 king + + * Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmSourceFile.cxx, Tests/ExternalOBJ/CMakeLists.txt: BUG: + Fixed support for external object files built by custom commands. + Also added a test to keep it working. + +2005-11-17 11:44 martink + + * Source/: cmVariableRequiresCommand.h, cmWhileCommand.h, + cmWriteFileCommand.h: STYLE: fix docs + +2005-11-17 11:37 martink + + * Source/: cmTryCompileCommand.h, cmTryRunCommand.h: STYLE: fix + docs + +2005-11-17 11:20 martink + + * Source/cmSubdirCommand.h: STYLE: fix docs + +2005-11-17 11:04 martink + + * Source/cmSourceGroupCommand.h: STYLE: fix docs + +2005-11-17 10:41 martink + + * Source/cmSetTargetPropertiesCommand.h: STYLE: fix docs + +2005-11-17 10:36 martink + + * Source/cmSetSourceFilesPropertiesCommand.h: STYLE: fix docs + +2005-11-17 10:28 martink + + * Source/: cmQTWrapUICommand.h, cmSetCommand.h: STYLE: fix docs + +2005-11-17 10:20 martink + + * Source/: cmMessageCommand.h, cmQTWrapCPPCommand.h: STYLE: fix + docs + +2005-11-17 09:44 martink + + * Source/cmIfCommand.cxx: BUG: clean up scoping + +2005-11-17 09:32 martink + + * Source/: cmIfCommand.cxx: BUG: fix incrementing past end + +2005-11-17 09:31 martink + + * Source/cmMarkAsAdvancedCommand.h: STYLE: fix docs + +2005-11-17 05:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-16 14:41 martink + + * Source/cmMacroCommand.h: STYLE: fix docs + +2005-11-16 14:36 martink + + * Source/: cmInstallTargetsCommand.h, cmLoadCacheCommand.h: STYLE: + fix docs + +2005-11-16 14:27 martink + + * Source/cmInstallFilesCommand.h: STYLE: fix docs + +2005-11-16 14:08 martink + + * Source/: cmIfCommand.h, cmIncludeCommand.h: STYLE: fix docs + +2005-11-16 14:02 martink + + * Source/cmGetTestPropertyCommand.h: STYLE: fix docs + +2005-11-16 13:13 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmXCode21Object.cxx, + cmXCodeObject.cxx, cmXCodeObject.h: ENH: fixes for xcode21 and + build styles and comments in the generated project + +2005-11-16 12:08 martink + + * Source/: cmGetSourceFilePropertyCommand.h, + cmGetTargetPropertyCommand.h: STYLE: fix docs + +2005-11-16 12:05 martink + + * Source/cmGetDirectoryPropertyCommand.h: STYLE: fix docs + +2005-11-16 12:00 martink + + * Source/: cmForEachCommand.h, cmGetCMakePropertyCommand.h: STYLE: + fix docs + +2005-11-16 11:57 martink + + * Source/cmFLTKWrapUICommand.h: STYLE: fix docs + +2005-11-16 11:39 king + + * Source/kwsys/ProcessUNIX.c: STYLE: Documented reference to "man + select_tut". + +2005-11-16 11:36 king + + * Source/kwsys/ProcessWin32.c: BUG: Do not close handle obtained + from GetModuleHandle which does not increase the reference count + of the module. + +2005-11-16 11:25 martink + + * Source/cmFileCommand.h: STYLE: fix docs + +2005-11-16 10:40 martink + + * Source/cmExecProgramCommand.h: STYLE: fix docs + +2005-11-16 10:35 martink + + * Source/: cmEnableTestingCommand.h, cmEndForEachCommand.h, + cmEndIfCommand.h, cmEndWhileCommand.h: STYLE: fix docs + +2005-11-16 10:31 martink + + * Source/: cmCreateTestSourceList.h, cmElseCommand.h, + cmEnableLanguageCommand.h: STYLE: fix docs + +2005-11-16 10:26 martink + + * Source/: cmConfigureFileCommand.h: STYLE: fix docs + +2005-11-16 10:22 martink + + * Source/cmCMakeMinimumRequired.h: STYLE: fix docs + +2005-11-16 10:14 martink + + * Source/: cmAddLibraryCommand.h, cmAddSubDirectoryCommand.h: + STYLE: fix docs + +2005-11-16 10:08 martink + + * Source/ctest.cxx: STYLE: removed some docs that did not make + sense + +2005-11-16 06:30 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-15 13:30 martink + + * Source/cmConfigureFileCommand.h: STYLE: updated comments + +2005-11-15 05:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-14 14:21 hoffman + + * Modules/: CMakeCCompiler.cmake.in, CMakeTestCCompiler.cmake: BUG: + fix SIZEOF VOIDP problem + +2005-11-14 12:29 andy + + * Source/: CMakeLists.txt, cmConfigure.cmake.h.in, + CPack/cmCPackConfigure.h.in, CPack/cmCPackTGZGenerator.cxx, + CPack/cmCPackTGZGenerator.h: ENH: More cross platform stuff + +2005-11-14 05:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-13 05:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-12 05:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-11 14:39 andy + + * Source/CPack/cmCPackSTGZGenerator.cxx: ENH: Cleanup + +2005-11-11 14:32 andy + + * Source/CPack/cmCPackSTGZGenerator.cxx: ENH: Fix for sun + +2005-11-11 14:25 andy + + * Source/: CMakeLists.txt, CPack/cmCPackGenerators.cxx, + CPack/cmCPackGenericGenerator.cxx, + CPack/cmCPackGenericGenerator.h, CPack/cmCPackSTGZGenerator.cxx, + CPack/cmCPackSTGZGenerator.h, CPack/cmCPackTGZGenerator.cxx, + CPack/cmCPackTGZGenerator.h: ENH: Add support for self extracted + tars + +2005-11-11 05:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-10 15:15 andy + + * Source/: CMakeLists.txt, cmConfigure.cmake.h.in, + CPack/cmCPackTGZGenerator.h: COMP: Fix building on Cygwin + +2005-11-10 15:13 martink + + * Tests/Tutorial/Step5/MathFunctions/CMakeLists.txt: ENH: some + fixes + +2005-11-10 15:10 martink + + * Tests/Tutorial/: Step1/tutorial.cxx, Step2/tutorial.cxx, + Step3/tutorial.cxx, Step4/tutorial.cxx, Step5/tutorial.cxx: ENH: + some fixes + +2005-11-10 14:36 andy + + * Source/: CMakeLists.txt, CPack/cmCPackGenerators.cxx, + CPack/cmCPackGenerators.h, CPack/cmCPackGenericGenerator.cxx, + CPack/cmCPackGenericGenerator.h, CPack/cmCPackTGZGenerator.cxx, + CPack/cmCPackTGZGenerator.h, CPack/cpack.cxx: ENH: Start working + on CPack + +2005-11-10 14:33 andy + + * Source/cmLocalGenerator.cxx: ENH: Make CMAKE_INSTALL_PREFIX to be + optional (on by default) + +2005-11-10 14:32 andy + + * Source/CTest/cmCTestGenericHandler.h: ENH: More type macros + +2005-11-10 14:32 andy + + * Source/kwsys/Glob.hxx.in: COMP: Fix the building with Glob + +2005-11-10 14:31 andy + + * Source/kwsys/: CommandLineArguments.cxx, + CommandLineArguments.hxx.in: ENH: Add method to delete the + remaining arguments + +2005-11-10 14:28 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: add all libs + +2005-11-10 12:02 martink + + * Tests/Tutorial/: Step5/CMakeLists.txt, Step2/CMakeLists.txt, + Step3/CMakeLists.txt, Step4/CMakeLists.txt, + Step5/MathFunctions/CMakeLists.txt: ENH: some fixes + +2005-11-10 11:48 martink + + * Tests/Tutorial/Step5/MathFunctions/MakeTable.cxx: STYLE: fix + spelling + +2005-11-10 10:55 martink + + * Source/CMakeLists.txt: ENH: added tutorial tests + +2005-11-10 10:55 martink + + * Source/CTest/cmCTestTestHandler.cxx: ENH: change the pass regexp + so that it overrides the return value + +2005-11-10 10:51 martink + + * Tests/Tutorial/Step5/: CMakeLists.txt, TutorialConfig.h.in, + tutorial.cxx, MathFunctions/CMakeLists.txt, + MathFunctions/MakeTable.cxx, MathFunctions/MathFunctions.h, + MathFunctions/mysqrt.cxx: ENH: step 5 + +2005-11-10 10:50 martink + + * Tests/Tutorial/Step4/: CMakeLists.txt, TutorialConfig.h.in, + tutorial.cxx, MathFunctions/CMakeLists.txt, + MathFunctions/MathFunctions.h, MathFunctions/mysqrt.cxx: ENH: + step 4 + +2005-11-10 10:50 martink + + * Tests/Tutorial/Step3/: CMakeLists.txt, TutorialConfig.h.in, + tutorial.cxx, MathFunctions/CMakeLists.txt, + MathFunctions/MathFunctions.h, MathFunctions/mysqrt.cxx: ENH: + step 3 + +2005-11-10 04:48 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-09 16:21 martink + + * Tests/Tutorial/: Step1/CMakeLists.txt, Step1/TutorialConfig.h.in, + Step1/tutorial.cxx, Step2/CMakeLists.txt, + Step2/TutorialConfig.h.in, Step2/tutorial.cxx, + Step2/MathFunctions/CMakeLists.txt, + Step2/MathFunctions/MathFunctions.h, + Step2/MathFunctions/mysqrt.cxx: ENH: checkeed in step 1 and 2 + +2005-11-09 11:14 andy + + * Source/cmSetTestsPropertiesCommand.h: STYLE: More comments + +2005-11-09 11:07 andy + + * Source/: cmSetTestsPropertiesCommand.h, + CTest/cmCTestTestHandler.cxx, kwsys/CMakeLists.txt: ENH: Change + flag to PASS_REGULAR_EXPRESSION and FAIL_REGULAR_EXPRESSION and + add help in cmSetTestsPropertiesCommand + +2005-11-09 07:22 andy + + * Source/kwsys/CMakeLists.txt: COMP: Fix all dashboards + +2005-11-09 05:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-08 17:59 andy + + * Source/kwsys/: CMakeLists.txt, testRegistry.cxx: ENH: Add test + for output regular expression + +2005-11-08 17:59 andy + + * Source/: cmLocalGenerator.cxx, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h: ENH: Add support for output reguilar + expression + +2005-11-08 05:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-07 05:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-06 05:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-05 04:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-04 10:52 martink + + * Source/cmCPluginAPI.h: DOC: updated comment about the inherited + ivar + +2005-11-04 09:28 andy + + * Modules/: CheckIncludeFile.cmake, CheckIncludeFileCXX.cmake: ENH: + Cleanup and unify + +2005-11-03 04:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-11-02 13:59 martink + + * Modules/CheckLibraryExists.cmake: DOC: better documentation + +2005-11-02 13:51 martink + + * Modules/: CheckFunctionExists.cmake, CheckIncludeFile.cmake, + CheckIncludeFileCXX.cmake, CheckIncludeFiles.cmake, + CheckLibraryExists.cmake, CheckSymbolExists.cmake, + CheckVariableExists.cmake: DOC: better documentaiton + +2005-11-02 04:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-31 12:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-31 10:52 hoffman + + * Utilities/Release/release_dispatch.sh: ENH: change names of + machine + +2005-10-31 10:48 hoffman + + * Utilities/Release/: cmake_release.sh: ENH: update revision + numbers + +2005-10-31 10:01 hoffman + + * ChangeLog.manual, Source/cmFileTimeComparison.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, Source/cmake.cxx: ENH: + merge from main tree + +2005-10-30 08:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-28 17:46 hoffman + + * Modules/: FindOpenAL.cmake, FindPhysFS.cmake, FindSDL.cmake, + FindSDL_image.cmake, FindSDL_mixer.cmake, FindSDL_net.cmake, + FindSDL_sound.cmake, FindSDL_ttf.cmake: ENH: changes from Eric + Wing, bug 2249 + +2005-10-28 11:52 hoffman + + * Source/cmWin32ProcessExecution.cxx: BUG: fix stack over write bug + +2005-10-28 11:51 hoffman + + * Utilities/Release/: CMake.nsi.in, MakeRelease.cmake.in: BUG: fix + space in path probs + +2005-10-28 11:32 hoffman + + * Utilities/Release/: CMake.nsi.in, MakeRelease.cmake.in: BUG: fix + release with spaces in the path + +2005-10-28 11:31 hoffman + + * Source/cmWin32ProcessExecution.cxx: BUG: fix stack write error + +2005-10-28 11:02 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: make the clean + target work + +2005-10-27 13:57 king + + * Source/: cmFileTimeComparison.cxx, kwsys/SystemTools.cxx: ENH: + Improved file modification time comparison on Windows to use + GetFileAttributesEx instead of CreateFile/GetFileTime/CloseHandle + to get file times. This results in a 30% reduction in time to do + a build system check. + +2005-10-26 09:03 hoffman + + * Utilities/Release/cmake_release.sh: ENH: update revision numbers + +2005-10-26 05:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-25 05:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-24 17:00 hoffman + + * ChangeLog.manual: [no log message] + +2005-10-24 15:43 hoffman + + * CMakeLists.txt, Modules/Platform/Windows-gcc.cmake, + Source/cmBuildNameCommand.h, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmLocalKdevelopGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmOutputRequiredFilesCommand.cxx, + Source/cmStringCommand.cxx, Source/cmStringCommand.h, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestUpdateHandler.cxx, + Tests/StringFileTest/CMakeLists.txt, + Tests/StringFileTest/StringFile.cxx: ENH: move stuff into the + branch in prep for 2.2.2 + +2005-10-24 05:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-23 05:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-22 05:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-21 15:24 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: fix for bad + placement of SILENT target + +2005-10-21 12:04 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: symlink issue + +2005-10-21 11:10 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: fix bad checkin + that had debugging code in it + +2005-10-21 09:49 hoffman + + * Source/kwsys/testFail.c: ENH: try to get this thing to pass with + cmake 2.2.1 + +2005-10-21 04:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-20 16:37 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: fix over checking + of build system + +2005-10-20 16:37 martink + + * Source/cmake.cxx: STYLE: minor cleanup + +2005-10-20 15:03 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: fix for def files + and new local target link lines + +2005-10-20 14:25 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: missing + check_build_system for all target + +2005-10-20 13:40 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: big cleanup and fix for + jump commands + +2005-10-20 10:10 hoffman + + * Source/: cmStringCommand.cxx, cmStringCommand.h: BUG: end is not + really end, but rather length + +2005-10-20 04:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-19 13:23 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: COMP: fix compiler + error + +2005-10-19 11:00 andy + + * Source/: cmCTest.cxx, CTest/cmCTestUpdateHandler.cxx: ENH: More + output + +2005-10-19 11:00 andy + + * Source/CTest/cmCTestTestHandler.cxx: BUG: Initialize to something + resonable + +2005-10-19 10:47 andy + + * Source/kwsys/: Glob.cxx, Glob.hxx.in: COMP: More namespace fixes + to build on HP + +2005-10-19 10:03 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: BUG: cd into local directory to + reduce link line length + +2005-10-19 08:42 andy + + * Source/kwsys/Glob.cxx: COMP: Fix namespace. This way kwsys can be + built outside cmake + +2005-10-19 04:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-18 16:35 hoffman + + * Source/cmOutputRequiredFilesCommand.cxx: ENH: fix test + +2005-10-18 16:10 hoffman + + * Source/cmOutputRequiredFilesCommand.cxx: ENH: add .txx files and + put the start directory in the search path + +2005-10-18 16:09 hoffman + + * Source/cmLocalKdevelopGenerator.cxx: ENH: unused include + +2005-10-18 16:09 hoffman + + * Source/cmBuildNameCommand.h: ENH: spelling + +2005-10-18 14:08 andy + + * bootstrap, Source/kwsys/CMakeLists.txt, Source/kwsys/Glob.cxx, + Source/kwsys/Glob.hxx.in: ENH: Push glob to the kwsys + +2005-10-18 13:25 andy + + * Modules/Platform/Windows-gcc.cmake: COMP: On mingw, -fPIC is not + necessary and it actually produces warnings + +2005-10-18 13:22 andy + + * Tests/MathTest/CMakeLists.txt: ENH: More tests + +2005-10-18 09:42 andy + + * Source/cmStringCommand.cxx: COMP: Remove warning + +2005-10-18 04:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-17 21:34 hoffman + + * Source/: cmFileTimeComparison.cxx, cmFileTimeComparison.h: add + missing file + +2005-10-17 16:53 andy + + * Source/: cmExprParser.cxx, cmExprParser.y: ENH: Fix precedence + +2005-10-17 16:42 andy + + * Source/: CMakeLists.txt, cmCommands.cxx, cmExprLexer.cxx, + cmExprLexer.h, cmExprLexer.in.l, cmExprParser.cxx, + cmExprParser.y, cmExprParserHelper.cxx, cmExprParserHelper.h, + cmExprParserTokens.h, cmMathCommand.cxx, cmMathCommand.h, + cmStringCommand.cxx: ENH: Add rudamentary mathematical expression + support + +2005-10-17 16:39 andy + + * Tests/MathTest/: CMakeLists.txt, MathTestExec.cxx, + MathTestTests.h.in: ENH: Add math test + +2005-10-17 09:58 king + + * Source/: cmDependsFortranLexer.cxx, cmDependsFortranLexer.in.l: + BUG: Lexer should be case insensitive so flex should be run with + -i option. This partially addresses bug#2361. + +2005-10-17 09:56 andy + + * Source/cmStringCommand.cxx, Source/cmStringCommand.h, + Tests/StringFileTest/CMakeLists.txt, + Tests/StringFileTest/StringFile.cxx: ENH: Add String length and + substring + +2005-10-17 09:10 andy + + * Source/cmFileCommand.cxx, Source/cmFileCommand.h, + Source/cmStringCommand.cxx, Source/cmStringCommand.h, + Tests/StringFileTest/CMakeLists.txt, + Tests/StringFileTest/StringFile.cxx: ENH: Add regular string + replace (not regex), and relative path command. Also add tests + +2005-10-17 09:09 andy + + * Source/CTest/cmCTestTestHandler.cxx: BUG: If test passes but it + should fail, report an error + +2005-10-17 08:49 hoffman + + * ChangeLog.manual, bootstrap, Modules/CMakeCXXInformation.cmake, + Modules/FindJNI.cmake, Modules/FindJava.cmake, + Source/CMakeLists.txt, Source/cmDepends.cxx, Source/cmDepends.h, + Source/cmDependsC.cxx, Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmLocalUnixMakefileGenerator3.cxx, Source/cmMakefile.cxx, + Source/cmTarget.h, Source/cmake.cxx, Source/cmake.h, + Source/CTest/cmCTestBuildHandler.cxx: ENH: merge fixes from main + tree + +2005-10-17 04:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-16 04:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-15 04:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-14 05:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-13 10:30 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: More error exceptions + +2005-10-13 10:07 andy + + * Source/: cmDepends.cxx, cmFileTimeComparison.cxx: BUG: Fix logic + to return true when the file was already statted. Also, use + nanosecond percision if available. Remove debug + +2005-10-13 05:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-12 13:52 andy + + * Source/: cmDepends.cxx, cmDepends.h, cmDependsC.cxx, + cmDependsC.h, cmDependsFortran.cxx, cmDependsFortran.h, + cmDependsJava.cxx, cmDependsJava.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: Improve performance of + check build system by creating another file that is simpler to + parse and therefore much faster overall + +2005-10-12 13:51 andy + + * Source/: cmake.cxx, cmake.h: ENH: Optimize performance by caching + stat results + +2005-10-12 13:50 andy + + * Source/cmFileTimeComparison.cxx: COMP: Windows fixes + +2005-10-12 13:36 andy + + * bootstrap, Source/CMakeLists.txt, + Source/cmFileTimeComparison.cxx, Source/cmFileTimeComparison.h: + ENH: Add file time comparison code + +2005-10-12 12:08 andy + + * Source/kwsys/: SystemTools.hxx.in, SystemTools.cxx: ENH: Add an + accessor for the maximum file length + +2005-10-12 05:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-11 05:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-10 11:49 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, cmMakefile.cxx, cmTarget.h: + ENH: some fixes for better backwards compatibility + +2005-10-10 05:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-09 05:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-08 05:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-07 11:36 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Add support for + setting the maximum number of errors and warnings reported. This + should fix Bug #2318 - The maximum number of errors to report is + fixed to 50 + +2005-10-07 05:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-06 17:16 barre + + * Source/kwsys/: CMakeLists.txt, testSystemTools.bin, + testSystemTools.cxx, testSystemTools.h.in: ENH: CMake kills me + (so does Cygwin) + +2005-10-06 15:28 hoffman + + * ChangeLog.manual, Source/cmGetSourceFilePropertyCommand.h, + Source/cmGetTargetPropertyCommand.h, + Source/cmGetTestPropertyCommand.cxx, Source/cmListFileLexer.c, + Source/cmListFileLexer.in.l, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmake.cxx, + Source/cmake.h, Source/cmakemain.cxx, + Source/CTest/cmCTestTestCommand.cxx, + Source/CTest/cmCTestTestCommand.h, + Source/CTest/cmCTestTestHandler.cxx, + Utilities/Release/Release.cmake: ENH: merge bug fixes from main + trunk + +2005-10-06 15:10 martink + + * Utilities/Release/Release.cmake: ENH: some fixes for missing vars + and missing libs + +2005-10-06 05:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-05 16:06 barre + + * Source/kwsys/: CMakeLists.txt, testSystemTools.cxx, + testSystemTools.h.in: ENH: avoid the use of GET_TARGET_PROPERTY + by testing the CMake executable instead of the test executable + +2005-10-05 13:11 king + + * Source/kwsys/CMakeLists.txt: BUG: Reverting fundamental type info + change until it is fixed on more platforms. It was tested on + Linux, SGI, HP, Sun, OSX, Windows with nmake and VS 6, 7, 7.1, 8, + Borland Make, and cygwin by hand with spaces in the path and + cmake 2.0 and 2.2 before committing but still seems to be failing + on some dashboards...strange. + +2005-10-05 05:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-04 16:40 barre + + * Source/: cmBootstrapCommands.cxx, cmCommands.cxx: ENH: the test + for kwsys uses GET_TARGET_PROPERTY, which was not in the CMake + bootstrap + +2005-10-04 15:09 barre + + * Source/kwsys/: CMakeLists.txt, testSystemTools.cxx, + testSystemTools.h.in: ENH: add kwsys test for DetectFileType + +2005-10-04 10:58 andy + + * Source/: cmCTest.cxx, CTest/cmCTestSubmitHandler.cxx: ENH: More + verbosity + +2005-10-04 05:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-03 14:44 king + + * Source/kwsys/: CMakeLists.txt, kwsysPlatformCxxTests.cxx: ENH: + Converting FundamentalType try-compiles into a single try-run. + All the information about the existence, size, and signedness of + types can be determined in one program thanks to limits.h. + +2005-10-03 14:33 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Double-quotes in + definitions must be escaped. + +2005-10-03 05:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-02 05:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-10-01 05:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-29 04:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-28 04:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-27 04:54 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-26 04:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-24 04:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-23 14:39 hoffman + + * Modules/CMakeCXXInformation.cmake: ENH: remove -lgcc used by + crazy coverage stuff + +2005-09-23 14:38 hoffman + + * Modules/: FindJNI.cmake, FindJava.cmake: ENH: java fixes from + Mathieu + +2005-09-23 12:50 martink + + * Source/cmake.cxx: BUG: the -P option was not working with + relative paths and a couple types + +2005-09-23 04:54 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-22 09:58 andy + + * Source/kwsys/Registry.cxx: COMP: Try to remove warnings + +2005-09-22 05:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-21 14:15 king + + * Source/kwsys/kwsysPlatformCxxTests.cmake: ENH: Updated to use + modern FILE command for writing to output logs instead of + WRITE_FILE. + +2005-09-21 13:42 king + + * Source/kwsys/kwsys_ios_sstream.h.in: BUG: kwsys_ios namespace + should import streambuf also. + +2005-09-21 13:31 king + + * Source/: cmGetSourceFilePropertyCommand.h, + cmGetTargetPropertyCommand.h, cmake.h, cmakemain.cxx: BUG: + Corrected and updated documentation of the -P option, -C option, + GET_TARGET_PROPERTY command, and GET_SOURCE_FILE_PROPERTY + command. + +2005-09-21 10:32 martink + + * Source/: cmCommands.cxx, cmITKWrapTclCommand.cxx, + cmITKWrapTclCommand.h: ENH: removed ITK command + +2005-09-21 05:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-20 15:08 andy + + * Source/CTest/cmCTestTestHandler.cxx: ENH: Properly report failed + tests + +2005-09-20 12:50 martink + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: increase + coverage in loaded commands + +2005-09-20 10:42 andy + + * Source/kwsys/CMakeLists.txt: ENH: Make message into status + +2005-09-20 05:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-19 17:20 king + + * Source/: cmListFileLexer.c, cmListFileLexer.in.l: BUG: When an + unquoted argument contains a pair of matching double quotes + spaces and tabs should be allowed in-between. This allows + arguments like -DFOO='"bar zot"' to work. + +2005-09-19 16:19 andy + + * Source/kwsys/Registry.cxx: BUG: Remove warning and try to fix + memory problem + +2005-09-19 15:15 andy + + * Source/kwsys/CMakeLists.txt: ENH: Test for both commands + +2005-09-19 15:11 andy + + * Source/CTest/cmCTestTestHandler.cxx: ENH: Modify output based on + wether it is tested or memory checked + +2005-09-19 15:08 andy + + * Source/CTest/cmCTestTestCommand.h: BUG: This should fix memory + checking + +2005-09-19 12:38 martink + + * Utilities/Release/cmake_release.sh: ENH: update revision numbers + +2005-09-19 12:33 hoffman + + * Modules/FindQt4.cmake, Modules/FindQt4.cmake.bak, + Modules/VTKCompatibility.cmake, Source/cmCTest.cxx: minor fixes + for 2.2.1 + +2005-09-19 12:19 hoffman + + * Modules/FindQt4.cmake: ENH: fix typo + +2005-09-19 12:17 hoffman + + * Modules/VTKCompatibility.cmake: ENH: remove message + +2005-09-19 04:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-18 17:15 king + + * Source/kwsys/README.txt: STYLE: Added reference to documentation + in CMakeLists.txt. + +2005-09-18 17:08 king + + * Source/kwsys/CMakeLists.txt: STYLE: Added backward compatibility + disclaimer. + +2005-09-18 08:17 andy + + * Source/: cmGetTestPropertyCommand.cxx, kwsys/CMakeLists.txt: BUG: + Fix which argument is which, also, fix the test to be less + agressive + +2005-09-18 04:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-17 11:31 andy + + * Source/CTest/cmCTestTestCommand.cxx: ENH: Fix memcheck command + +2005-09-17 09:53 andy + + * Source/kwsys/CMakeLists.txt: ENH: Add testing of + GET_TEST_PROPERTY command + +2005-09-17 08:50 andy + + * Source/kwsys/Registry.cxx: BUG: On WIN32, since we are using + subkey, set it + +2005-09-17 05:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-16 15:30 andy + + * Source/kwsys/Registry.cxx: COMP: Remove unused variable + +2005-09-16 13:56 andy + + * Source/kwsys/: Registry.cxx, testRegistry.cxx: BUG: Fix encoding + and add deleting to the test + +2005-09-16 13:38 andy + + * Source/kwsys/: Registry.cxx, Registry.hxx.in, testRegistry.cxx: + ENH: Modify API a little bit to allow arbitrary length values. + Encode certain characters. Rename UNIX registry to FILE registry. + More testing + +2005-09-16 12:17 martink + + * Utilities/Release/cmake_release.sh: ENH: update revision numbers + +2005-09-16 10:57 hoffman + + * Utilities/Release/: MakeRelease.cmake.in, README, Release.cmake: + move off branch + +2005-09-16 10:53 martink + + * Utilities/Release/: cmake_release.sh: ENH: update revision + numbers + +2005-09-16 10:53 martink + + * Utilities/Release/MakeRelease.cmake.in: ENH: fix for + CMAKE_COMMAND not being defined with -P + +2005-09-16 10:47 martink + + * Utilities/Release/cmake_release.sh: ENH: fix Bill + +2005-09-16 10:41 martink + + * Utilities/Release/: MakeRelease.cmake.in, Release.cmake: ENH: fix + to syntax + +2005-09-16 10:32 martink + + * Utilities/Release/: Release.cmake, MakeRelease.cmake.in: ENH: + added commit for release script + +2005-09-16 10:10 hoffman + + * Utilities/Release/MakeRelease.cmake.in: ENH: auto release stuff + +2005-09-16 10:09 andy + + * Source/kwsys/Registry.cxx: COMP: Remove problem on borland + +2005-09-16 09:21 andy + + * Source/kwsys/CMakeLists.txt: ENH: Enable registry, add test of + SET_TESTS_PROPERTIES, rename tests for dart2 + +2005-09-16 09:20 andy + + * Source/kwsys/Registry.cxx: COMP: Remove some more warnings + +2005-09-16 09:15 andy + + * Source/kwsys/: Registry.cxx, Registry.hxx.in: ENH: Cleanups and + expose unix registry on windows (for cygwin etc) + +2005-09-16 09:08 andy + + * Source/kwsys/: Registry.cxx, Registry.hxx.in: COMP: Win32 fixes + +2005-09-16 08:38 andy + + * Source/kwsys/Registry.cxx: ENH: More handling of unix versus + windows registry + +2005-09-16 08:20 andy + + * Source/kwsys/: Registry.cxx, Registry.hxx.in, testFail.c, + testRegistry.cxx: ENH: Initial import + +2005-09-16 05:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-15 17:22 andy + + * Source/cmCTest.cxx: ENH: Expose version of ctest + +2005-09-15 16:38 hoffman + + * CTestCustom.ctest.in, ChangeLog.manual, bootstrap, + Docs/cmake-mode.el, Modules/CMakeAddNewLanguage.txt, + Modules/CMakeTestRCCompiler.cmake, Modules/FindQt.cmake, + Modules/FindQt.cmake.bak, Modules/FindQt3.cmake, + Modules/FindQt4.cmake, Modules/FindQt4.cmake.bak, + Modules/UseQt4.cmake, Source/CMakeLists.txt, + Source/cmAddSubDirectoryCommand.cxx, + Source/cmAddSubDirectoryCommand.h, + Source/cmCommandArgumentParserHelper.cxx, + Source/cmFileCommand.cxx, + Source/cmGetDirectoryPropertyCommand.cxx, + Source/cmGetDirectoryPropertyCommand.h, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmLocalGenerator.cxx, Source/cmOrderLinkDirectories.cxx, + Source/cmTest.h, Source/CTest/cmCTestCoverageHandler.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestTestHandler.h, + Tests/OutOfSource/CMakeLists.txt, Tests/OutOfSource/testdp.h.in, + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt, + Tests/OutOfSource/OutOfSourceSubdir/simple.cxx, + Tests/OutOfSource/SubDir/CMakeLists.txt, + Tests/Wrapping/CMakeLists.txt, Utilities/Release/CMake.nsi.in: + Merge more changes from main trunk + +2005-09-15 16:06 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: COMP: Too fast commit + +2005-09-15 16:03 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: BUG: Make sure full + paths are collapsed + +2005-09-15 13:26 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: fix warning + +2005-09-15 12:17 hoffman + + * Modules/CMakeAddNewLanguage.txt, + Modules/CMakeTestRCCompiler.cmake, Source/cmGlobalGenerator.cxx: + ENH: clean up EnableLanguage try to fix problem where try compile + runs cmake + +2005-09-15 11:05 martink + + * CTestCustom.ctest.in: ENH: cleaner code coverage + +2005-09-15 04:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-14 11:16 hoffman + + * Modules/FindQt4.cmake: ENH: only add optional qt stuff to + QT_INCLUDES + +2005-09-14 09:12 hoffman + + * Modules/FindQt.cmake: ENH: if qt4 qmake is found then set + QT_QMAKE_EXECUTABLE to that value so that the same one will be + used in FindQt4.cmake + +2005-09-14 04:52 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-13 12:55 martink + + * CTestCustom.ctest.in: ENH: coverage cleanup for non XCode builds + +2005-09-13 10:40 martink + + * Tests/OutOfSource/: CMakeLists.txt, testdp.h.in, + OutOfSourceSubdir/CMakeLists.txt, OutOfSourceSubdir/simple.cxx: + ENH: test get directory properties ability to get props from + subdirs + +2005-09-13 10:39 martink + + * Source/: cmGetDirectoryPropertyCommand.cxx, + cmGetDirectoryPropertyCommand.h, cmGlobalGenerator.cxx, + cmGlobalGenerator.h: ENH: added DIRECTORY option to + GET_DIRECTORY_PROPERTIES + +2005-09-13 10:33 martink + + * Docs/cmake-mode.el: ENH: missing get_directory_property command + +2005-09-13 09:25 hoffman + + * Modules/FindQt4.cmake: ENH: add some checks on the qmake install + +2005-09-13 08:52 hoffman + + * Modules/FindQt.cmake: ENH: fix if statement + +2005-09-13 04:52 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-12 22:46 hoffman + + * Modules/FindQt.cmake: ENH: add docs for QT_REQUIRED + +2005-09-12 22:39 hoffman + + * Modules/: FindQt.cmake, FindQt4.cmake: ENH: more findqt fixes + +2005-09-12 14:26 martink + + * Tests/OutOfSource/SubDir/CMakeLists.txt: ENH: convert to work + with the new syntax for ADD_SUBDIRECTORY + +2005-09-12 13:46 martink + + * Source/: cmAddSubDirectoryCommand.cxx, + cmAddSubDirectoryCommand.h: ENH: better format for + ADD_SUBDIRECTORY command + +2005-09-12 11:43 hoffman + + * Modules/: FindQt.cmake, FindQt4.cmake: ENH: add new place to + search for qt4 in registry + +2005-09-12 11:25 hoffman + + * Modules/FindQt.cmake: ENH: fix typo + +2005-09-12 10:37 hoffman + + * Source/CMakeLists.txt: ENH: use the findqt3 from this cmake and + not the one configureing cmake + +2005-09-12 10:33 hoffman + + * Modules/FindQt.cmake: ENH: add a better message + +2005-09-12 10:28 hoffman + + * Modules/FindQt3.cmake: ENH: add more libraries for qt3 + +2005-09-12 09:55 hoffman + + * Modules/FindQt4.cmake: ENH: use correct variable for qmake + +2005-09-12 09:52 hoffman + + * Modules/FindQt4.cmake: ENH: add a better message + +2005-09-12 09:36 hoffman + + * Modules/FindQt.cmake: ENH: add some messages not errors for + findqt + +2005-09-12 09:32 hoffman + + * Modules/FindQt3.cmake, Modules/FindQt4.cmake, + Source/CMakeLists.txt, Tests/Wrapping/CMakeLists.txt: ENH: more + qt changes + +2005-09-12 09:09 hoffman + + * Modules/UseQt4.cmake: ENH: add -D options for qt stuff + +2005-09-12 09:00 hoffman + + * Modules/: FindQt.cmake, FindQt4.cmake: ENH: make sure the correct + qmake is used + +2005-09-12 04:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-11 04:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-10 22:36 hoffman + + * Modules/FindQt.cmake: ENH: only print errors if QT_REQUIRED is + set + +2005-09-10 10:33 hoffman + + * bootstrap, Modules/FindQt.cmake, Source/cmFileCommand.cxx: BUG: + try to fix qt problems + +2005-09-10 04:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-09 21:51 hoffman + + * Modules/FindQt.cmake, Modules/FindQt3.cmake, + Modules/FindQt4.cmake, Tests/Wrapping/CMakeLists.txt: ENH: clean + up the find qt stuff some + +2005-09-09 17:04 hoffman + + * Modules/: CheckQtInstalled.cmake, FindQt.cmake: ENH: try to fix + this find qt stuff + +2005-09-09 13:23 martink + + * Utilities/Release/CMake.nsi.in: ENH: to support both admin and + locla installs + +2005-09-09 11:32 hoffman + + * Modules/: CheckQtInstalled.cmake, FindQt.cmake: ENH: make FindQt + default to qt3 and print a message, and add + CheckQtInstalled.cmake + +2005-09-09 05:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-08 15:26 hoffman + + * Source/cmCommandArgumentParserHelper.cxx: ENH: remove UMR + +2005-09-08 15:25 hoffman + + * Source/cmOrderLinkDirectories.cxx: BUG: fix spelling error + +2005-09-08 14:59 hoffman + + * ChangeLog.manual, Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeFortranInformation.cmake, Modules/FindCurses.cmake, + Modules/FindJNI.cmake, Modules/FindJPEG.cmake, + Modules/FindJava.cmake, Modules/FindMatlab.cmake, + Modules/FindMotif.cmake, Modules/FindQt4.cmake, + Modules/FindQt4.cmake.bak, Modules/FindZLIB.cmake, + Modules/UseQt4.cmake, Modules/UseSWIG.cmake, + Modules/VTKCompatibility.cmake, Source/cmGlobalGenerator.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, + Source/cmOrderLinkDirectories.cxx: merge with main trunk + +2005-09-08 14:35 andy + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + BUG: fix xcode 15 (really bill Hoffman) + +2005-09-08 14:22 martink + + * Source/cmOrderLinkDirectories.cxx: BUG: bug num 1994 library + linking when a config is not specified but debug and opt libs are + +2005-09-08 11:38 hoffman + + * Modules/: FindCurses.cmake, FindJPEG.cmake, FindZLIB.cmake: ENH: + clean up some stuff + +2005-09-08 11:38 hoffman + + * Modules/UseSWIG.cmake: ENH: add ability to set outdir in swig + +2005-09-08 10:03 hoffman + + * Modules/: CMakeDetermineJavaCompiler.cmake, FindJNI.cmake, + FindJava.cmake: ENH: add support for java 1.5 + +2005-09-08 10:01 hoffman + + * Modules/FindMatlab.cmake: ENH: add Matlab support + +2005-09-08 09:59 hoffman + + * Modules/FindMotif.cmake: ENH: add a find motif + +2005-09-08 09:58 hoffman + + * Modules/: FindQt4.cmake, UseQt4.cmake: ENH: add Ken Morelands + fixes for FindQT + +2005-09-08 05:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-07 17:05 hoffman + + * Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/VTKCompatibility.cmake, Source/cmGlobalGenerator.cxx: + ENH: add a fix for VTK on the mac and a way to fix some projects + with a single file in the cmake modules directory + +2005-09-07 05:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-06 23:31 andy + + * Source/: cmLocalGenerator.cxx, cmTest.h, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestTestHandler.h: ENH: + Add a way for test to intentionally fail + +2005-09-06 12:55 hoffman + + * ChangeLog.manual, bootstrap, Modules/CMakeGenericSystem.cmake, + Modules/Platform/AIX.cmake, Source/CMakeLists.txt, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalXCode21Generator.cxx, + Source/cmGlobalXCode21Generator.h, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmTryRunCommand.cxx, + Source/cmXCode21Object.cxx, Source/cmXCode21Object.h, + Source/cmXCodeObject.cxx, Source/cmXCodeObject.h, + Source/CTest/cmCTestTestHandler.cxx, + Source/kwsys/SharedForward.h.in, + Tests/LoadCommand/CMakeLists.txt, + Tests/LoadCommandOneConfig/CMakeLists.txt: Merge with main tree + +2005-09-06 05:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-05 09:17 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmXCodeObject.h: ENH: fix + warnings + +2005-09-05 04:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-04 04:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-03 22:16 hoffman + + * bootstrap: ENH: fix bootstrap, maybe this should somehow grep awk + the sources from the cmakelist file.... + +2005-09-03 04:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-02 16:29 hoffman + + * Source/: CMakeLists.txt, cmGlobalXCode21Generator.cxx, + cmGlobalXCode21Generator.h, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h, cmXCode21Object.cxx, cmXCode21Object.h, + cmXCodeObject.cxx, cmXCodeObject.h: ENH: add real support for + Xcode21 + +2005-09-02 08:41 hoffman + + * Source/CMakeLists.txt: BUG: not all Macs are case insensitive if + they mount nfs directories + +2005-09-02 05:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-09-01 17:14 hoffman + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: fix NONE + +2005-09-01 05:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-31 19:41 king + + * Source/kwsys/SharedForward.h.in: ENH: Added cygcheck knowledge + for --ldd option on Cygwin. Added error message for --ldd option + when no tool is available but the option was still requested. + +2005-08-31 05:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-30 13:58 hoffman + + * Source/cmGlobalXCodeGenerator.cxx, Source/cmTryRunCommand.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Tests/LoadCommand/CMakeLists.txt, + Tests/LoadCommandOneConfig/CMakeLists.txt: ENH: use native + Deployment and Development directories + +2005-08-30 04:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-29 17:09 hoffman + + * Modules/Platform/AIX.cmake: ENH: add flags for debug release for + aix + +2005-08-29 16:19 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/CMakeTestCCompiler.cmake, Modules/FindJava.cmake, + Modules/FindQt3.cmake, Source/CMakeLists.txt, + Source/cmDependsC.cxx, Source/cmDependsC.h, + Source/cmFileCommand.cxx, Source/cmGlobalXCodeGenerator.cxx, + Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio6Generator.cxx, Source/cmMakefile.cxx, + Source/cmSetTargetPropertiesCommand.h, Source/cmSystemTools.cxx, + Source/cmTarget.cxx, Source/cmTarget.h, Source/cmVersion.cxx, + Source/cmake.cxx, Source/CTest/cmCTestBuildHandler.cxx, + Source/CTest/cmCTestGenericHandler.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestTestHandler.h, + Source/CTest/cmCTestUpdateCommand.cxx, + Source/kwsys/SharedForward.h.in, Source/kwsys/SystemTools.cxx, + Templates/EXEHeader.dsptemplate, + Tests/CustomCommand/CMakeLists.txt, Tests/CustomCommand/foo.h.in, + Tests/CustomCommand/foo.in, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: merge with cvs again + and change version + +2005-08-29 15:49 king + + * Modules/CMakeGenericSystem.cmake: ENH: Picking better default for + CMAKE_INSTALL_PREFIX on Windows by using ProgramFiles environment + variable. Now that install actually works on Windows I'm making + this entry non-advanced also. + +2005-08-29 04:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-28 04:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-27 05:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-26 17:02 andy + + * Modules/FindJava.cmake: ENH: More paths for java + +2005-08-26 16:20 andy + + * Source/CTest/cmCTestGenericHandler.cxx: COMP: Simplify logic and + remove sun compile error + +2005-08-26 05:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-25 05:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-24 11:18 andy + + * Source/CTest/cmCTestGenericHandler.cxx: BUG: Prevent from + creating bogus files + +2005-08-24 04:54 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-23 13:25 king + + * Modules/FindQt3.cmake: ENH: Added support for finding qt-mtedu, + the educational version of Qt. + +2005-08-23 10:24 hoffman + + * Source/cmFileCommand.cxx: make sure correct path type is used + +2005-08-23 04:48 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-22 04:52 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-21 04:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-20 05:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-19 17:57 king + + * Source/cmLocalVisualStudio6Generator.cxx, + Templates/EXEHeader.dsptemplate: BUG: Fixed OUTPUT_NAME feature + for VS6 generator. It was not working for Debug builds and was + not paying attention to the executable output path. + +2005-08-19 17:56 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Install rule should take + build configuration into account. + +2005-08-19 17:17 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: add support for + OUTPUT_NAME + +2005-08-19 10:13 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: If the scanner is + not defined this would crash. For example when using new language + +2005-08-19 09:38 king + + * Source/cmake.cxx: ENH: Added cmake -E create_symlink command that + behaves like ln -s. + +2005-08-19 09:29 king + + * Modules/CMakeTestCCompiler.cmake: BUG: Need to test void* not + "void *" because the Intel compiler icc expands the asterisk. + Thanks to Filipe Sousa for the patch. + +2005-08-19 09:22 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Removing exe VERSION + attribute test until it is implemented in the XCode generator. + +2005-08-19 04:52 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-18 16:17 andy + + * Source/CTest/cmCTestTestHandler.h: COMP: Add STD namespace + +2005-08-18 16:06 king + + * Source/kwsys/SharedForward.h.in: BUG: Fixed dirname in a few + cases on windows. Now using KWSYS_SHARED_FORWARD_CONFIG_NAME + setting instead of CMAKE_INTDIR directly to give choice to user + code. Updated documentation to include + @KWSYS_NAMESPACE@_SHARED_FORWARD_CONFIG_NAME, + @KWSYS_NAMESPACE@_SHARED_FORWARD_OPTION_PRINT, and + @KWSYS_NAMESPACE@_SHARED_FORWARD_OPTION_LDD settings. + +2005-08-18 13:50 andy + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: ENH: + Improve log file strategy + +2005-08-18 10:02 andy + + * Source/CTest/cmCTestUpdateCommand.cxx: ENH: Set update options + +2005-08-18 09:23 king + + * Source/kwsys/SharedForward.h.in: ENH: Added support for Windows. + +2005-08-18 09:21 king + + * Tests/CustomCommand/foo.h.in: COMP: Avoid C++ comment in C + translation unit. + +2005-08-18 09:19 king + + * Source/cmDependsC.cxx: COMP: Work-around iterator/const_iterator + comparison problem on Borland 5.5. + +2005-08-18 05:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-17 17:56 king + + * Tests/CustomCommand/CMakeLists.txt: BUG: It seems the + auto-object-depends feature does not work in Visual Studio. I'm + restoring the explicit OBJECT_DEPENDS lines. + +2005-08-17 17:39 king + + * Source/cmSystemTools.cxx: BUG: RunSingleCommand should translate + NULL characters in the output to valid text. This should fix the + missing-output problem caused by NULL-characters in VS build + output. + +2005-08-17 17:04 king + + * Source/kwsys/SystemTools.cxx: BUG: Automatic pwd/cwd path + translation must check that the generated logical-to-physical + mapping is correct by using realpath. + +2005-08-17 16:19 king + + * Source/CMakeLists.txt, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Updated SimpleInstall + test to test new versioned executable and OUTPUT_NAME support. + +2005-08-17 16:11 king + + * Source/: cmFileCommand.cxx, cmLocalGenerator.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmSetTargetPropertiesCommand.h, cmTarget.cxx, cmTarget.h: ENH: + Added versioned executable support. This partially addresses + bug#2143. Also made OUTPUT_NAME work when installing + executables. + +2005-08-17 16:06 king + + * Source/cmake.cxx: ENH: Added -E cmake_symlink_executable command + to help create symbolic links for versioned executables. + +2005-08-17 16:05 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Do not make a file + depend on a virtual target. That causes everything to always + rebuild. + +2005-08-17 14:16 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: More error regex + +2005-08-17 13:23 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: COMP: Cannot use + first/last insertion constructor of std::set because it is not + available on all platforms. + +2005-08-17 11:48 king + + * Tests/CustomCommand/: CMakeLists.txt, foo.in, foo.h.in: ENH: + Adding test for auto-object-depends feature. It has been tested + with the Makefile generator. Hopefully this will work for the + Visual Studio and XCode generators. + +2005-08-17 11:43 king + + * Source/: cmDependsC.cxx, cmDependsC.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: Adding support for + automatically adding the OBJECT_DEPENDS for generated header + files. + +2005-08-17 05:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-16 08:32 hoffman + + * Utilities/Release/: cmake_release.sh: ENH: file is now configured + +2005-08-16 05:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-15 05:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-14 05:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-13 05:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-12 11:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-11 14:02 hoffman + + * ChangeLog.manual, Modules/CMakeCCompiler.cmake.in, + Modules/CMakeCInformation.cmake, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeDetermineRCCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakeFortranCompiler.cmake.in, + Modules/CMakeFortranInformation.cmake, + Modules/CMakeGenericSystem.cmake, + Modules/CMakeJavaCompiler.cmake.in, + Modules/CMakeRCCompiler.cmake.in, + Modules/CMakeRCInformation.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, + Modules/CMakeTestFortranCompiler.cmake, Modules/CTest.cmake, + Modules/CTestTargets.cmake, Modules/CheckCSourceCompiles.cmake, + Modules/CheckCXXSourceCompiles.cmake, + Modules/CheckFunctionExists.cmake, + Modules/CheckIncludeFile.cmake, + Modules/CheckIncludeFileCXX.cmake, + Modules/CheckIncludeFiles.cmake, + Modules/CheckLibraryExists.cmake, + Modules/CheckSymbolExists.cmake, Modules/CheckTypeSize.cmake, + Modules/CheckVariableExists.cmake, Modules/Dart.cmake, + Modules/FindDoxygen.cmake, Modules/FindGLUT.cmake, + Modules/FindJNI.cmake, Modules/FindOpenAL.cmake, + Modules/FindPhysFS.cmake, Modules/FindPythonInterp.cmake, + Modules/FindQt.cmake, Modules/FindQt.cmake.bak, + Modules/FindQt3.cmake, Modules/FindQt4.cmake, + Modules/FindQt4.cmake.bak, Modules/FindSDL.cmake, + Modules/FindSDL.cmake.bak, Modules/FindSDL_image.cmake, + Modules/FindSDL_image.cmake.bak, Modules/FindSDL_mixer.cmake, + Modules/FindSDL_mixer.cmake.bak, Modules/FindSDL_net.cmake, + Modules/FindSDL_net.cmake.bak, Modules/FindSDL_sound.cmake, + Modules/FindSDL_ttf.cmake, Modules/FindSDL_ttf.cmake.bak, + Modules/FindThreads.cmake, Modules/TestBigEndian.cmake, + Modules/TestCXXAcceptsFlag.cmake, + Modules/TestForANSIForScope.cmake, + Modules/TestForSTDNamespace.cmake, Modules/Use_wxWindows.cmake, + Modules/Platform/CYGWIN-g77.cmake, Modules/Platform/IRIX64.cmake, + Modules/Platform/Windows-cl.cmake, Modules/Platform/g77.cmake, + Source/CMakeLists.txt, Source/cmAddCustomCommandCommand.cxx, + Source/cmAddDependenciesCommand.h, Source/cmAddTestCommand.h, + Source/cmCTest.cxx, Source/cmCTest.h, Source/cmCacheManager.cxx, + Source/cmCommands.cxx, Source/cmCustomCommand.cxx, + Source/cmCustomCommand.h, Source/cmDepends.cxx, + Source/cmDepends.h, Source/cmDependsC.cxx, Source/cmDependsC.h, + Source/cmDependsFortran.cxx, Source/cmDependsFortran.h, + Source/cmDependsJava.cxx, Source/cmDependsJava.h, + Source/cmDocumentation.cxx, Source/cmDynamicLoader.cxx, + Source/cmFLTKWrapUICommand.cxx, Source/cmFileCommand.cxx, + Source/cmGetTestPropertyCommand.cxx, + Source/cmGetTestPropertyCommand.h, Source/cmGlobalGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalUnixMakefileGenerator3.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalXCode21Generator.cxx, + Source/cmGlobalXCode21Generator.h, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmListFileLexer.c, + Source/cmListFileLexer.in.l, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalUnixMakefileGenerator3.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, Source/cmQTWrapCPPCommand.cxx, + Source/cmSetTestsPropertiesCommand.cxx, + Source/cmSetTestsPropertiesCommand.h, Source/cmSourceGroup.cxx, + Source/cmSourceGroup.h, Source/cmSourceGroupCommand.cxx, + Source/cmTarget.cxx, Source/cmTest.cxx, Source/cmTest.h, + Source/cmTryCompileCommand.h, Source/cmUtilitySourceCommand.cxx, + Source/cmake.cxx, Source/cmake.h, Source/ctest.cxx, + Source/CTest/cmCTestBuildHandler.cxx, + Source/CTest/cmCTestCoverageHandler.cxx, + Source/CTest/cmCTestCoverageHandler.h, + Source/CTest/cmCTestEmptyBinaryDirectoryCommand.cxx, + Source/CTest/cmCTestGenericHandler.cxx, + Source/CTest/cmCTestSubmitCommand.cxx, + Source/CTest/cmCTestSubmitHandler.cxx, + Source/CTest/cmCTestTestCommand.cxx, + Source/CTest/cmCTestTestHandler.cxx, + Source/CTest/cmCTestUpdateHandler.cxx, Source/kwsys/Base64.c, + Source/kwsys/Base64.h.in, Source/kwsys/CMakeLists.txt, + Source/kwsys/Configure.h.in, Source/kwsys/FundamentalType.h.in, + Source/kwsys/Process.h.in, Source/kwsys/SystemTools.cxx, + Source/kwsys/SystemTools.hxx.in, + Source/kwsys/kwsysPlatformCxxTests.cmake, + Source/kwsys/kwsysPlatformCxxTests.cxx, + Source/kwsys/testHashSTL.cxx, Source/kwsys/testhash.cxx, + Tests/BundleTest/BundleTest.cxx, Tests/BundleTest/CMakeLists.txt, + Tests/CTestTest/test.cmake.in, Tests/CTestTest2/test.cmake.in, + Tests/CTestTest3/test.cmake.in, + Tests/Complex/cmTestConfigure.h.in, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/Complex/Executable/testcflags.c, + Tests/ComplexOneConfig/cmTestConfigure.h.in, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/testcflags.c, + Tests/ComplexRelativePaths/cmTestConfigure.h.in, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/testcflags.c, + Tests/MacroTest/CMakeLists.txt, + Tests/MakeClean/ToClean/CMakeLists.txt, + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt, + Tests/OutOfSource/OutOfSourceSubdir/simple.cxx, + Tests/OutOfSource/OutOfSourceSubdir/testlib.cxx, + Tests/OutOfSource/OutOfSourceSubdir/testlib.h, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt, Utilities/CMakeLists.txt, + Utilities/cmcurl/CMakeLists.txt: ENH: move cvs onto branch and + try for beta 2 + +2005-08-11 13:20 martink + + * Source/cmake.cxx: ENH: added better error checking for cases when + there is a CMakeCache.txt file but it is not readable + +2005-08-11 11:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-10 12:55 hoffman + + * Source/cmGlobalXCodeGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: fix bug + 2087 lib prefix stripped off on windows + +2005-08-10 12:50 hoffman + + * Modules/FindQt4.cmake: ENH: some clean up from Clinton + +2005-08-10 12:01 hoffman + + * Modules/: FindOpenAL.cmake, FindSDL.cmake, FindSDL_image.cmake, + FindSDL_mixer.cmake, FindSDL_net.cmake, FindSDL_sound.cmake, + FindSDL_ttf.cmake: ENH: add Eric Wings FindSDL updates + +2005-08-10 11:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-10 10:01 hoffman + + * Source/cmDependsC.cxx: ENH: fix bug in depend file removing for + deleted depend files + +2005-08-10 08:48 hoffman + + * Modules/: FindQt.cmake, FindQt4.cmake: ENH: fixed up qt stuff + from Clinton Stimpson + +2005-08-09 13:12 martink + + * Source/CTest/cmCTestTestHandler.cxx: BUG: do not search the + user's path for text executables when a full path is provided to + the test + +2005-08-09 11:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-09 10:35 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: fix for sun make + with spaces + +2005-08-08 15:23 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: have the + build.make file include flags.make and use the language flags + +2005-08-08 13:28 martink + + * Source/cmAddCustomCommandCommand.cxx: ENH: fix for earlier fix on + source with relative path + +2005-08-08 12:00 king + + * Source/cmAddCustomCommandCommand.cxx: BUG: Do not convert SOURCE + argument from relative to full path. It breaks the old-style + SOURCE==TARGET trick and the SOURCE argument is only present for + old-style commands anyway. This addresses bug#2120. + +2005-08-08 11:33 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Need TSD target to be built + before SimpleInstall. + +2005-08-08 11:28 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Do not escape + CMAKE_COMMAND twice. + +2005-08-08 11:02 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: fix and issue with + spaces in paths + +2005-08-08 10:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-08 09:37 king + + * Source/cmake.cxx: BUG: When exiting before the configure step in + script mode we must account for + cmSystemTools::GetErrorOccuredFlag() for the return code. + +2005-08-07 10:30 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-06 10:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-05 17:07 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: fix warning + +2005-08-05 14:19 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: some fixes for cwd + problems with rebuild_cache option + +2005-08-05 11:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-04 17:12 king + + * Source/kwsys/CMakeLists.txt: ENH: If VTK_LIBRARY_PROPERTIES is + set then the properties it lists will be added to VTK library + targets with SET_TARGET_PROPERTIES. This will be useful to + enable shared library versioning. + +2005-08-04 11:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-03 16:10 king + + * Source/cmAddDependenciesCommand.h: ENH: Clarified documentation + further. + +2005-08-03 14:16 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: More build errors + +2005-08-03 14:15 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: More handling of + gcov 4.0 + +2005-08-03 13:34 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: More support for + gcov 4.0 + +2005-08-03 13:19 andy + + * Modules/: CTest.cmake, CTestTargets.cmake: ENH: Initial import + +2005-08-03 13:19 andy + + * Modules/: Dart.cmake, FindJNI.cmake: STYLE: Fix typo + +2005-08-03 11:56 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: Add support for the + new gcc that uses files with extension .gcda + +2005-08-03 11:50 andy + + * Tests/CTestTest2/test.cmake.in: COMP: Fix for proxy test + +2005-08-03 11:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-02 17:41 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: /nologo must be first + +2005-08-02 16:44 hoffman + + * Modules/FindQt4.cmake: ENH: add changes for qt4 from Clinton + Stimpson + +2005-08-02 16:34 hoffman + + * Modules/FindQt4.cmake: ENH: add changes for qt4 from Clinton + Stimpson + +2005-08-02 13:40 andy + + * Source/CMakeLists.txt: ENH: change name from XCode to Xcode no + need to test bootstrap for xcode + +2005-08-02 13:02 andy + + * Source/CMakeLists.txt: ENH: change name from XCode to Xcode no + need to test bootstrap for xcode + +2005-08-02 13:01 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: get around problem where + OBJROOT has been set by default for all projects in Xcode gui + +2005-08-02 11:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-02 11:06 hoffman + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: FIX: fix bad depend info and + COMPILE_FLAGS problem and remove extra cerr calls + +2005-08-02 10:07 andy + + * Tests/CTestTest/test.cmake.in: COMP: Try to fix test by taking + arg1 into acount + +2005-08-02 09:55 hoffman + + * Modules/FindQt.cmake: ENH: add advanced values + +2005-08-01 16:49 king + + * Source/: cmListFileLexer.c, cmListFileLexer.in.l: BUG: Unquoted + arguments can have quotes that are not at the beginning, but only + an even number of them. + +2005-08-01 12:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-08-01 10:19 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: first step to only + rebuuilding on flag changes + +2005-08-01 09:44 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: make sure + CMAKE_C_FLAGS are not clobbered + +2005-08-01 09:24 king + + * Source/cmQTWrapCPPCommand.cxx: BUG: Patch from Filipe Sousa. + QT_WRAP_CPP should generate the file moc_dlgmain.ui.cxx instead + of moc_dlgmain.cxx. + +2005-07-31 23:05 andy + + * Modules/CheckCXXSourceCompiles.cmake, + Tests/MacroTest/CMakeLists.txt: ENH: Add C++ test too + +2005-07-31 23:02 andy + + * Modules/CheckCSourceCompiles.cmake, + Tests/MacroTest/CMakeLists.txt: ENH: Add a test for C source file + like AC_TRY_COMPILE + +2005-07-31 22:25 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: use ansi + flags + +2005-07-31 11:51 andy + + * Source/: cmCommands.cxx, cmGetTestPropertyCommand.cxx, + cmGetTestPropertyCommand.h, cmLocalGenerator.cxx, cmMakefile.cxx, + cmMakefile.h, cmSetTestsPropertiesCommand.cxx, + cmSetTestsPropertiesCommand.h, cmTest.cxx, cmTest.h: ENH: Add set + and get test propety command + +2005-07-31 11:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-30 21:58 hoffman + + * Tests/: Complex/Executable/testcflags.c, + ComplexOneConfig/Executable/testcflags.c, + ComplexRelativePaths/Executable/testcflags.c: ENH: no c++ + comments in a c file + +2005-07-30 11:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-29 14:17 martink + + * Source/cmFLTKWrapUICommand.cxx: ENH; better warning message and + fix type per julien + +2005-07-29 14:02 hoffman + + * Tests/: Complex/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/complex.cxx: ENH: do not test for + c and cxx flags on visual studio as it does not work yet + +2005-07-29 13:19 martink + + * Source/kwsys/kwsysPlatformCxxTests.cmake: ENH: change loc of log + files + +2005-07-29 11:56 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, Complex/Executable/testcflags.c, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Executable/testcflags.c, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Executable/testcflags.c: ENH: add new test + to make sure c and cxx flags are going to the right files + +2005-07-29 11:52 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-29 11:25 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fix dependencies. + Looks like all dependencies were missing subdirectory + +2005-07-29 10:04 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: undo last change + +2005-07-29 10:02 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: support versions greater + than 20 + +2005-07-29 09:19 martink + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeDetermineRCCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, + Modules/CMakeTestFortranCompiler.cmake, + Modules/CheckFunctionExists.cmake, + Modules/CheckIncludeFile.cmake, + Modules/CheckIncludeFileCXX.cmake, + Modules/CheckIncludeFiles.cmake, + Modules/CheckLibraryExists.cmake, + Modules/CheckSymbolExists.cmake, Modules/CheckTypeSize.cmake, + Modules/CheckVariableExists.cmake, Modules/FindThreads.cmake, + Modules/TestBigEndian.cmake, Modules/TestCXXAcceptsFlag.cmake, + Modules/TestForANSIForScope.cmake, + Modules/TestForSTDNamespace.cmake, + Modules/Platform/Windows-cl.cmake, Source/cmCacheManager.cxx, + Source/cmGlobalGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator3.cxx, + Source/cmGlobalXCodeGenerator.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator3.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Tests/MakeClean/ToClean/CMakeLists.txt, + Utilities/cmcurl/CMakeLists.txt: ENH: put cmake files intoa + CMakeFiles subdir to clean up bin tree + +2005-07-28 15:24 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: fix warning + +2005-07-28 14:52 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: make sure c flags are + used for c and cxx flags are used for cxx, really Bill + +2005-07-28 13:21 barre + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: add + method to attempt to check if a file is text or binary + +2005-07-28 13:12 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: make sure custom commands + depend on full path files only: Bill as Andy + +2005-07-28 11:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-28 09:14 martink + + * Source/: cmCustomCommand.cxx, cmCustomCommand.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: always write out all + custom commands + +2005-07-27 17:23 king + + * Source/cmMakefile.cxx: BUG: InitializeFromParent should copy + include file regular expressions. + +2005-07-27 16:46 king + + * Source/cmGlobalGenerator.cxx: ENH: RUN_TESTS target now uses + proper CMAKE_CFG_INTDIR setting to get $(IntDir) or $(OutDir) + depending on the generator. + +2005-07-27 16:37 king + + * Source/cmUtilitySourceCommand.cxx: BUG: Hack to support building + existing trees with UTILITY_SOURCE commands and the new VS + generator directory structure. + +2005-07-27 15:46 andy + + * Source/cmGlobalGenerator.cxx: BUG: Generate RUN_TEST target if + any tests are there + +2005-07-27 13:36 king + + * Source/: cmGlobalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: ENH: Generator now creates a + separate intermediate files directory for each target. This is + needed for MSVC 8 to support parallel builds. + +2005-07-27 12:41 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: fix some warnings and + cleanup some + +2005-07-27 11:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-27 11:42 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: maybe fix fortran + issue + +2005-07-27 11:36 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: fix some warnings and + cleanup some + +2005-07-27 11:31 martink + + * Source/: cmDependsJava.cxx, cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: fix some warnings and + cleanup some + +2005-07-27 09:49 martink + + * Source/: cmDepends.cxx, cmDepends.h, cmDependsC.cxx, + cmDependsC.h, cmDependsFortran.cxx, cmDependsFortran.h, + cmDependsJava.cxx, cmDependsJava.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmake.cxx: ENH: reduce the + number of files produced still needs a bit more cleanup + +2005-07-26 17:40 king + + * Modules/Dart.cmake: ENH: Added VS8 support for DART_CXX_NAME. + +2005-07-26 13:26 hoffman + + * Source/cmTarget.cxx: ENH: make sure source file depends are used + to determine if custom commands are used + +2005-07-26 13:26 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: if it is not a + cmake target or a full path do not put depend information in the + command + +2005-07-26 13:25 hoffman + + * Source/cmFLTKWrapUICommand.cxx: ENH: make sure custom command + depend on fluid so if fltk is part of project fluid gets built + first + +2005-07-26 11:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-26 11:37 king + + * Source/kwsys/: CMakeLists.txt, FundamentalType.h.in: ENH: Added + FundamentalType header defining platform-independent fixed + size/signedness integer types. + +2005-07-26 11:36 king + + * Source/kwsys/kwsysPlatformCxxTests.cxx: ENH: Added + TEST_KWSYS_CXX_SAME_LONG_AND___INT64, + TEST_KWSYS_CXX_SAME_LONG_LONG_AND___INT64, + TEST_KWSYS_CAN_CONVERT_UI64_TO_DOUBLE, and + TEST_KWSYS_CHAR_IS_SIGNED. + +2005-07-26 11:34 king + + * Source/kwsys/: Base64.c, Base64.h.in, Configure.h.in, + Process.h.in: ENH: Moved kwsys_ns and kwsysEXPORT macros to + Configure.h in the case of building a kwsys source file. This + allows more than one header to be included in a kwsys source file + without redefining the macros. + +2005-07-26 09:17 andy + + * Tests/CTestTest3/test.cmake.in: ENH: Add support for multi-string + compiler name, and improve support for subversion + +2005-07-25 16:10 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: fix lib case bug + correctly + +2005-07-25 11:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-24 11:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-23 11:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-23 10:32 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: undo fix + +2005-07-22 17:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-22 15:41 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: more efficent fix + for bug # 2063 + +2005-07-22 15:33 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for case + mismatched lib bug # 2063 + +2005-07-22 15:32 hoffman + + * Source/cmDependsC.cxx: ENH: string += is very slow, so don't use + it + +2005-07-22 08:40 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: Better handling of + removed files and remove warning + +2005-07-22 08:39 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: More regular + expressions + +2005-07-21 15:54 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: Add support for + detecting files that were removed + +2005-07-21 10:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-21 09:07 andy + + * Source/CTest/cmCTestSubmitHandler.cxx: BUG: Remove duplicate + prefix + +2005-07-20 22:23 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix warning + +2005-07-20 15:44 hoffman + + * Modules/CMakeCCompiler.cmake.in, Modules/CMakeCInformation.cmake, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeDetermineRCCompiler.cmake, + Modules/CMakeFortranCompiler.cmake.in, + Modules/CMakeFortranInformation.cmake, + Modules/CMakeJavaCompiler.cmake.in, + Modules/CMakeRCCompiler.cmake.in, + Modules/CMakeRCInformation.cmake, Source/cmLocalGenerator.cxx: + ENH: make sure flags set in CC or CXX environment variables stay + with the compiler + +2005-07-20 12:54 hoffman + + * Modules/: CMakeCInformation.cmake, CMakeCXXInformation.cmake, + Platform/Windows-cl.cmake: ENH: move flags next to compiler, so + if env contains compiler and some flag, they stay together + +2005-07-20 12:53 hoffman + + * Source/CMakeLists.txt: ENH: java does not work under mingw + +2005-07-20 12:48 hoffman + + * Modules/: FindQt.cmake, FindQt4.cmake: ENH: make sure qmake is on + the machine before running it + +2005-07-20 12:40 andy + + * Source/kwsys/testHashSTL.cxx: ENH: Rename test + +2005-07-20 12:03 andy + + * Source/cmCTest.cxx: BUG: Initialize variable + +2005-07-20 12:02 andy + + * Source/kwsys/: CMakeLists.txt, testhash.cxx: ENH: Rename test + +2005-07-20 10:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-19 18:05 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: make it so that bootstrap + does not use xml parser + +2005-07-19 17:16 hoffman + + * Source/: cmake.cxx, cmake.h: ENH: fix for bug 1866, make -G,-D -C + options allow for space between arg and value + +2005-07-19 16:40 hoffman + + * Source/: CMakeLists.txt, cmFileCommand.cxx, + cmGlobalXCode21Generator.cxx, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h: ENH: if Xcode21 is installed then + create 21 compatible project files + +2005-07-19 15:28 hoffman + + * Source/: cmGlobalXCode21Generator.cxx, + cmGlobalXCode21Generator.h: ENH: add new stub generator + +2005-07-19 15:27 hoffman + + * Source/cmTryCompileCommand.h: ENH: add more docs + +2005-07-19 14:36 hoffman + + * Modules/CMakeGenericSystem.cmake: ENH: make KDevelop3 default to + CMAKE_VERBOSE_MAKEFILE + +2005-07-19 11:48 hoffman + + * Modules/CMakeGenericSystem.cmake: ENH: make KDevelop3 default to + CMAKE_VERBOSE_MAKEFILE + +2005-07-19 10:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-18 12:53 andy + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx, + CTest/cmCTestSubmitCommand.cxx, CTest/cmCTestSubmitHandler.cxx: + ENH: Add a way to submit extra files to the dashboard + +2005-07-18 11:46 andy + + * Modules/Dart.cmake, Source/cmCTest.cxx, Source/cmCTest.h, + Source/ctest.cxx, Tests/CTestTest2/test.cmake.in: ENH: Several + improvements and cleanups: 1. Add long command line arguments for + every argument 2. Add a way to overwrite CTest configuration by + providing --overwrite TimeOut=10 3. Improve argument parsing. 4. + Add submit index argument + +2005-07-18 11:32 andy + + * Source/CTest/cmCTestGenericHandler.cxx: ENH: Cleanup file name + +2005-07-18 11:32 andy + + * Source/cmDocumentation.cxx: ENH: Cleanup the help a bit + +2005-07-18 08:47 hoffman + + * Modules/FindQt.cmake: ENH: fix qt bug + +2005-07-18 03:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-17 03:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-16 03:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-15 15:20 hoffman + + * Source/cmGlobalXCodeGenerator.h: ENH: fix bug 1960 + +2005-07-15 13:24 hoffman + + * Source/cmAddTestCommand.h: BUG: fix for bug 1838 + +2005-07-15 12:57 hoffman + + * Modules/FindGLUT.cmake: BUG: fix for bug 852 + +2005-07-15 12:39 hoffman + + * Modules/: FindQt.cmake: ENH: fix hard coded include from patch + +2005-07-15 12:14 hoffman + + * Modules/: FindQt.cmake, FindQt3.cmake, FindQt4.cmake: ENH: add + new qt stuff from warfield@bwh.harvard.edu, thanks + +2005-07-15 12:01 martink + + * Utilities/CMakeLists.txt: BUG: converted to 1.8 form of custom + commands + +2005-07-15 11:48 andy + + * Modules/FindPythonInterp.cmake: ENH: Add registry for 2.4 + +2005-07-15 11:45 andy + + * Modules/FindPythonInterp.cmake: BUG: Set PYTHONINTERP_FOUND + +2005-07-15 11:38 hoffman + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: ENH: fix static build of vtk + with cmake by having custom targets chain depend information + +2005-07-15 11:37 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: remove commented + code + +2005-07-15 11:36 hoffman + + * Source/CMakeLists.txt: ENH: remove messages about not running + java test + +2005-07-15 11:34 hoffman + + * Source/cmDynamicLoader.cxx: ENH: fix compile error bug# 2020 on + mac + +2005-07-15 08:36 andy + + * Modules/FindPythonInterp.cmake: ENH: Initial import + +2005-07-15 03:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-14 16:00 hoffman + + * Source/cmLocalGenerator.cxx: ENH: fix for bug 992, mac bundle + install fix + +2005-07-14 15:12 hoffman + + * Source/cmMakefile.cxx: BUG: fix for bug 1850 wrapping can leave + out files if they are a substring of another file + +2005-07-14 14:15 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: ENH: Some more cleanups + and add ctest custom vector for regular expression to exclude + from coverage + +2005-07-14 14:15 andy + + * Source/cmCTest.cxx: BUG: Look for custom files in all directories + +2005-07-14 13:50 hoffman + + * Tests/OutOfSource/OutOfSourceSubdir/: testlib.cxx, testlib.h: + ENH: add missing files + +2005-07-14 13:25 andy + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: ENH: Add custom supression regular + expressions + +2005-07-14 12:21 hoffman + + * Source/cmLocalUnixMakefileGenerator3.cxx, + Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt, + Tests/OutOfSource/OutOfSourceSubdir/simple.cxx: FIX: fix bug + 2043 borland compiler and dll problem and add a test for it + +2005-07-14 11:24 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: BUG: Fix line number + inconsistency, improve output + +2005-07-14 10:15 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: add support for + borland exe with shared libs back in + +2005-07-14 09:44 andy + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: Do 4 files + +2005-07-14 09:30 andy + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: Add a test for + cmGeneratedFileStream + +2005-07-14 09:29 andy + + * Source/CTest/cmCTestTestCommand.cxx: COMP: Remove warning and fix + the logic + +2005-07-14 09:29 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: BUG: Rename tmp files + +2005-07-14 03:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-13 16:57 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: remove part of + patch from bug 1965 that set executable paths + +2005-07-13 16:49 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: revert part of + patch that set executable debug prefix as it breaks too much + stuff + +2005-07-13 16:24 hoffman + + * Source/cmLocalGenerator.cxx: ENH: add -L as possible library flag + +2005-07-13 16:23 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: add support for bundles + +2005-07-13 16:20 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: try to fix failed + test + +2005-07-13 15:49 hoffman + + * Source/CMakeLists.txt: ENH: add bundle test + +2005-07-13 15:43 hoffman + + * Tests/BundleTest/: BundleTest.cxx, CMakeLists.txt: ENH: add a + bundle test + +2005-07-13 11:21 hoffman + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmMakefile.cxx, cmMakefile.h, + cmSourceGroup.cxx, cmSourceGroup.h, cmSourceGroupCommand.cxx: + FIX: apply patch from bug# 1965 + +2005-07-13 10:17 andy + + * Source/: cmCTest.h, CTest/cmCTestTestCommand.cxx: ENH: Add + timeout support + +2005-07-13 09:49 andy + + * Source/kwsys/SystemTools.cxx: COMP: Remove warning on windows + +2005-07-13 09:08 hoffman + + * Modules/FindDoxygen.cmake: ENH: fix for darwin from eric wing + +2005-07-13 09:06 hoffman + + * Modules/: FindOpenAL.cmake, FindPhysFS.cmake, FindSDL.cmake, + FindSDL_image.cmake, FindSDL_mixer.cmake, FindSDL_net.cmake, + FindSDL_ttf.cmake: ENH: add a bunch of find sdl stuff from eric + wing + +2005-07-13 08:29 hoffman + + * Modules/Platform/: CYGWIN-g77.cmake, IRIX64.cmake, g77.cmake: + FIX: for 1852 fix fortran case + +2005-07-13 03:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-12 17:30 hoffman + + * ChangeLog.manual, Source/kwsys/SystemTools.cxx, + Source/kwsys/SystemTools.hxx.in: merge from main tree + +2005-07-12 17:24 hoffman + + * CMakeSystemConfig.txt.in, CMakeWindowsSystemConfig.txt: ENH: + remove unused files + +2005-07-12 17:24 hoffman + + * Source/cmCPluginAPI.h: ENH: change version + +2005-07-12 17:23 hoffman + + * Utilities/cmcurl/CMakeLists.txt: add -dl on unix + +2005-07-12 17:22 hoffman + + * Utilities/Release/: cmake_release.sh, config_Darwin, + config_HP-UX, config_SunOS, release_dispatch.sh: move release + stuff off branch + +2005-07-12 16:56 hoffman + + * ChangeLog.txt: update changes + +2005-07-12 16:51 hoffman + + * ChangeLog.txt: ENH: update changes for 2.2 + +2005-07-12 15:40 hoffman + + * Utilities/Release/config_Darwin: [no log message] + +2005-07-12 15:26 hoffman + + * Utilities/Release/config_Darwin: [no log message] + +2005-07-12 15:11 hoffman + + * Utilities/Release/: config_Darwin, release_dispatch.sh: fixes for + osx + +2005-07-12 13:54 hoffman + + * Utilities/Release/config_SunOS: put it back + +2005-07-12 13:21 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: BUG: Revert + the change to FileIsDirectory. Add FileIsSymlink and treat + symlinks as files when removing directory + +2005-07-12 12:40 hoffman + + * Utilities/cmcurl/CMakeLists.txt: [no log message] + +2005-07-12 12:31 andy + + * Source/CTest/cmCTestTestHandler.cxx: BUG: Go back to the original + directory after examining the current directory + +2005-07-12 12:30 andy + + * Source/CTest/cmCTestTestHandler.cxx: BUG: Make sure it always + starts in the current directory when searching for tests + +2005-07-12 10:39 andy + + * Source/: kwsys/SystemTools.cxx, + CTest/cmCTestEmptyBinaryDirectoryCommand.cxx: BUG: When removing + directory, use lstat instead of stat to make sure that symlinks + are treated as files and not as directories + +2005-07-12 10:25 hoffman + + * Utilities/Release/config_SunOS: [no log message] + +2005-07-12 10:08 hoffman + + * Utilities/Release/config_SunOS: [no log message] + +2005-07-12 09:36 hoffman + + * Utilities/Release/config_HP-UX: use gmake + +2005-07-12 08:50 andy + + * Source/cmCTest.cxx: BUG: Fix problem with visual studio in + release mode + +2005-07-12 03:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-11 18:07 hoffman + + * Source/CursesDialog/form/CMakeLists.txt: ENH: fix from main tree + +2005-07-11 18:07 hoffman + + * Source/CursesDialog/form/CMakeLists.txt: ENH: add curses include + directory + +2005-07-11 17:58 hoffman + + * Utilities/Release/config_Darwin: turn off wx dialog for now + +2005-07-11 17:15 hoffman + + * Utilities/Release/cmake_release.sh: get the correct version + +2005-07-11 17:11 hoffman + + * Utilities/Release/: cmake_release.sh, cmake_release.sh.in, + config_CYGWIN_NT-5.1, config_IRIX64, config_Linux, + cygwin-package.sh.in, release_dispatch.sh, README: ENH: merge + changes from branches + +2005-07-11 16:57 hoffman + + * Utilities/Release/release_dispatch.sh: [no log message] + +2005-07-11 16:09 hoffman + + * Utilities/Release/: cmake_release.sh, cmake_release.sh.in, + config_CYGWIN_NT-5.1, config_IRIX64, cygwin-package.sh.in, + release_dispatch.sh: move stuff from 2.0 over to 2.2 + +2005-07-11 15:21 hoffman + + * Utilities/Release/config_Linux: move config linix to 2.2 branch + +2005-07-11 15:11 hoffman + + * Utilities/Release/release_dispatch.sh: change to muse + +2005-07-11 15:05 hoffman + + * Utilities/Release/release_dispatch.sh: ENH: add from HEAD + +2005-07-11 15:04 hoffman + + * Utilities/Release/release_dispatch.sh: add from branch + +2005-07-11 14:55 martink + + * ChangeLog.manual: ENH: commit some change logs + +2005-07-11 14:54 hoffman + + * Source/cmCPluginAPI.h, Utilities/Release/cmake_release.sh, + Utilities/Release/cmake_release.sh.in: ENH: fix up some version + stuff + +2005-07-11 12:22 martink + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: provide default + update options if none were provided + +2005-07-11 11:59 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: Add default update + options + +2005-07-11 11:37 martink + + * ChangeLog.manual: ENH: added ChangeLog as in prior release + +2005-07-11 11:36 martink + + * Source/cmAddCustomCommandCommand.cxx: ENH: merge from the main + tree to handle relative files + +2005-07-11 11:31 martink + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: merged from CVS fix + for SNV warning + +2005-07-11 11:16 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: BUG: Remove warning when + using CVS + +2005-07-11 03:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-10 03:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-09 03:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-08 11:51 martink + + * Source/cmAddCustomCommandCommand.cxx: ENH: slightly modified + version of Alex's relative path arguments for custom commands + +2005-07-08 10:13 martink + + * Utilities/Release/cmake_release.sh: ENH: release commit + +2005-07-08 10:00 martink + + * CMakeLists.txt: ENH: rev to 22 + +2005-07-08 09:55 martink + + * CMakeLists.txt: ENH: update rev to 23 + +2005-07-08 09:05 king + + * Source/kwsys/testProcess.c: COMP: Fixed uninitialized variable. + +2005-07-08 03:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-07 16:01 martink + + * Source/cmConfigureFileCommand.cxx: ENH: configure file will + assume start source dir if a full path is not provided + +2005-07-07 15:06 martink + + * Source/cmMakefile.cxx: BUG: library return values were not UNIX + slashes on Win98 + +2005-07-07 13:55 martink + + * Source/cmSourceFile.cxx: BUG: mor emissing convert to unix + slashes + +2005-07-07 11:44 martink + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: cleaned up some old + methods and vars + +2005-07-07 10:21 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: Removing + CMAKE_HIDE_TARGET_DIRS since it has been superceded by + CMAKE_TARGET_DIR_PREFIX. + +2005-07-07 10:14 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: Added use of + CMAKE_TARGET_DIR_PREFIX variable to prepend a project-specified + string to the names of all the target-name.dir directories. + +2005-07-07 10:11 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: added ability to + prefix target directories with a . to make them not show up in + ls. From patch from Alex + +2005-07-07 09:44 martink + + * Source/cmake.cxx: BUG: win95 returning non unix path for cmake + command + +2005-07-07 09:06 king + + * Source/kwsys/testProcess.c: ENH: Extended test 0 to run the + executable twice using the same process object. This tests the + reusability of the objects. + +2005-07-07 09:05 king + + * Source/kwsys/ProcessWin32.c: BUG: Fixed reusability of process + object by clearing each pipe's Closed flag when cleaning up. + +2005-07-07 03:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-06 16:16 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: BUG: fix for bootstrap problem + +2005-07-06 15:51 andy + + * Source/: cmCacheManager.cxx, cmFileCommand.cxx, + cmWriteFileCommand.cxx: STYLE: Fix typos + +2005-07-06 15:49 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: COMP: Remove warning + +2005-07-06 15:27 andy + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: ENH: Improve support for various + versions of gcov + +2005-07-06 15:25 andy + + * Modules/FindFLTK.cmake: ENH: Replace with the one from InsightApp + +2005-07-06 15:25 martink + + * Source/cmListFileCache.cxx: BUG: project command should also work + with lower case + +2005-07-06 15:24 martink + + * Tests/Simple/CMakeLists.txt: BUG: minor fix to project name to + match ADD_TEST call + +2005-07-06 15:11 andy + + * Source/CTest/cmCTestSubmitHandler.cxx: BUG: On windows there can + be a problem because scp does not handle drive names. This uses + relative path for scp + +2005-07-06 03:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-05 16:13 martink + + * Utilities/Release/: MakeRelease.cmake.in, Release.cmake: ENH: a + start on UNIX release + +2005-07-05 15:43 martink + + * Utilities/Release/Release.cmake: ENH: better release support + +2005-07-05 12:38 martink + + * Utilities/Release/: MakeRelease.cmake.in, Release.cmake: ENH: + better release support + +2005-07-05 11:17 andy + + * Modules/FindDCMTK.cmake: ENH: Improvements by Julien + +2005-07-05 10:08 martink + + * Source/cmMacroCommand.cxx: ENH: revert back to string replacement + version + +2005-07-05 09:21 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: util targets now + show up in locla makefile and make rebuild_cache now works in + subdirs + +2005-07-05 09:00 martink + + * Source/cmLocalGenerator.cxx: BUG: fix for debug optimized link + libraries + +2005-07-05 03:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-04 03:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-03 12:06 andy + + * Source/cmake.cxx: ENH: Only truncate files when not in try + compile. Alsom move truncating code closer to configure + +2005-07-03 03:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-02 22:50 andy + + * Source/cmCTest.cxx: ENH: Improve performance of MakeXMLSafe, + improve performance of reading custom ctest files, and remove + error when running ctest on directory without + DartConfiguration.tcl + +2005-07-02 22:32 andy + + * Source/CTest/cmCTestCoverageHandler.cxx: STYLE: Unify number of + spaces + +2005-07-02 22:31 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Improve performance by + compiling regular expressions when needed + +2005-07-02 22:30 andy + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: ENH: + Improve performance of testing and do not complain if + DartTestfile.txt is not found or if directory does not exist + +2005-07-02 22:25 andy + + * Source/: cmake.cxx, cmake.h: ENH: Start adding the code that will + truncate output logs + +2005-07-02 01:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-07-01 10:57 martink + + * Source/: cmGetTargetPropertyCommand.h, cmTarget.cxx: ENH: added + Alexander's target property TYPE + +2005-07-01 10:23 martink + + * Source/: cmGetDirectoryPropertyCommand.cxx, + cmGetDirectoryPropertyCommand.h: ENH: added patch from Alexander + Neundorf to get DEFINITIONS + +2005-06-30 13:39 martink + + * Tests/: Complex/CMakeLists.txt, Complex/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/complex.cxx: ENH: added testing + of the WHILE command + +2005-06-30 13:39 martink + + * Docs/cmake-mode.el: ENH: added while command + +2005-06-30 13:27 martink + + * Docs/cmake-mode.el: ENH: added while command + +2005-06-30 13:09 martink + + * Utilities/Release/: CMake.nsi.in, MakeRelease.cmake.in, + Release.cmake, Win32Release.sh.in: ENH: better release scripts + +2005-06-30 11:33 martink + + * Utilities/Release/Release.cmake: ENH: hard coded for VS 71 nmake + for now + +2005-06-30 11:18 king + + * Modules/Platform/Windows-cl.cmake: BUG: Fixed escaped quote at + end of . + +2005-06-30 09:53 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: added local help and + install targets + +2005-06-30 09:21 king + + * Source/kwsys/Base64.c: BUG: Do not increment optr by 2 after + storing only one character. Also fixed possibility of storing + uninitialized characters from the last triplet. + +2005-06-30 05:47 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-29 12:07 king + + * Modules/Platform/Windows-bcc32.cmake: BUG: Need to use the -c + option for implib to produce case-sensitive symbols in the .lib + files. + +2005-06-29 08:46 martink + + * CTestCustom.ctest.in: COMP: shut up warning + +2005-06-29 05:49 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-28 15:00 martink + + * Utilities/Release/: CMake.nsi.in, CMakeInstall.bmp: ENH: added + our own bitmap + +2005-06-28 10:55 martink + + * Utilities/Release/CMake.nsi.in, + Utilities/Release/Win32Release.sh.in, + Utilities/Release/cmake_release.sh.in, + Utilities/Release/Release.cmake, CMakeLists.txt: ENH: added some + release support + +2005-06-28 05:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-27 15:59 martink + + * Source/cmMakefile.cxx: BUG: dont pass unverified char * to + streams + +2005-06-27 12:45 martink + + * Tests/Simple/CMakeLists.txt: ENH: convert to lower case + +2005-06-27 12:44 martink + + * Example/: CMakeLists.txt, Demo/CMakeLists.txt, + Hello/CMakeLists.txt: ENH: updte to lower case and using + ADD_SUBDIRECTORY + +2005-06-27 11:39 martink + + * CTestCustom.ctest.in: ENH: mods to warning excludes based on new + locaiton of curl + +2005-06-27 05:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-26 05:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-25 05:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-24 13:29 andy + + * Source/CTest/cmCTestSubmitHandler.cxx: BUG: Exit properly on SCP + submission + +2005-06-24 09:41 andy + + * Source/CTest/cmCTestSubmitHandler.cxx: COMP: Remove warnings + +2005-06-24 09:06 andy + + * CMakeLists.txt, Source/CMakeLists.txt, Source/cmCTest.cxx, + Source/CTest/cmCTestSubmitHandler.cxx: ENH: Move curl to + utilities + +2005-06-24 09:00 andy + + * Utilities/cmcurl/: amigaos.c, amigaos.h, arpa_telnet.h, base64.c, + base64.h, ca-bundle.h, connect.c, connect.h, content_encoding.c, + content_encoding.h, cookie.c, cookie.h, curl_memory.h, curlx.h, + dict.c, dict.h, easy.c, escape.c, escape.h, file.c, file.h, + formdata.c, formdata.h, ftp.c, ftp.h, getdate.c, getdate.h, + getenv.c, getinfo.c, getinfo.h, hash.c, hash.h, hostares.c, + hostasyn.c, hostip.c, hostip.h, hostip4.c, hostip6.c, hostsyn.c, + hostthre.c, http.c, http.h, http_chunks.c, http_chunks.h, + http_digest.c, http_digest.h, http_negotiate.c, http_negotiate.h, + http_ntlm.c, http_ntlm.h, if2ip.c, if2ip.h, inet_ntoa_r.h, + inet_ntop.c, inet_ntop.h, inet_pton.c, inet_pton.h, krb4.c, + krb4.h, ldap.c, ldap.h, llist.c, llist.h, md5.c, md5.h, + memdebug.c, memdebug.h, mprintf.c, multi.c, netrc.c, netrc.h, + nwlib.c, progress.c, progress.h, security.c, security.h, sendf.c, + sendf.h, setup.h, share.c, share.h, speedcheck.c, speedcheck.h, + ssluse.c, ssluse.h, strequal.c, strequal.h, strerror.c, + strerror.h, strtok.c, strtok.h, strtoofft.c, strtoofft.h, + telnet.c, telnet.h, timeval.c, timeval.h, transfer.c, transfer.h, + url.c, url.h, urldata.h, version.c, CMakeLists.txt, config.h.in, + curl.copyright, CMake/CheckTypeSize.c.in, + CMake/CheckTypeSize.cmake, CMake/CurlTests.c, + Platforms/WindowsCache.cmake, Platforms/config-aix.h, + Testing/CMakeLists.txt, Testing/curlgtk.c, Testing/curltest.c, + Testing/ftpget.c, Testing/ftpgetresp.c, Testing/ftpupload.c, + Testing/getinmemory.c, Testing/http-post.c, Testing/httpput.c, + Testing/multithread.c, Testing/persistant.c, Testing/postit2.c, + Testing/sepheaders.c, Testing/simple.c, Testing/simplessl.c, + Testing/testconfig.h.in, Testing/win32sockets.c, curl/curl.h, + curl/curlver.h, curl/easy.h, curl/mprintf.h, curl/multi.h, + curl/stdcheaders.h, curl/types.h: ENH: Initial import + +2005-06-24 05:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-23 16:06 andy + + * Source/CTest/cmCTestSubmitHandler.cxx: ENH: Make iterators const + +2005-06-23 13:07 andy + + * Tests/CTestTest3/test.cmake.in: ENH: Perform second test if + subversion exists + +2005-06-23 13:04 andy + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + CTest/cmCTestBuildAndTestHandler.cxx, + CTest/cmCTestBuildCommand.cxx, CTest/cmCTestBuildHandler.cxx, + CTest/cmCTestConfigureCommand.cxx, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestCoverageCommand.cxx, + CTest/cmCTestCoverageHandler.cxx, CTest/cmCTestCoverageHandler.h, + CTest/cmCTestGenericHandler.cxx, CTest/cmCTestGenericHandler.h, + CTest/cmCTestHandlerCommand.cxx, CTest/cmCTestHandlerCommand.h, + CTest/cmCTestMemCheckCommand.cxx, CTest/cmCTestMemCheckCommand.h, + CTest/cmCTestScriptHandler.cxx, CTest/cmCTestStartCommand.cxx, + CTest/cmCTestSubmitCommand.cxx, CTest/cmCTestSubmitHandler.cxx, + CTest/cmCTestSubmitHandler.h, CTest/cmCTestTestCommand.cxx, + CTest/cmCTestTestCommand.h, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestUpdateCommand.cxx, CTest/cmCTestUpdateHandler.cxx, + kwsys/CTestConfig.cmake: ENH: Several improvements with the way + things are handled. Also, support multiple submited files + +2005-06-23 12:34 martink + + * Source/cmMacroCommand.cxx: COMP: fix compiler warnings + +2005-06-23 11:03 martink + + * Source/: cmForEachCommand.cxx, cmIfCommand.cxx, + cmMacroCommand.cxx, cmWhileCommand.cxx: ENH: converted macro to + use variables and fixed some case issues with some function + blockers + +2005-06-23 10:25 king + + * Source/kwsys/hashtable.hxx.in: ENH: Added some smaller primes to + allow small hash table sizes and therefore shorter initial + construction times. + +2005-06-23 05:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-22 14:20 martink + + * Source/cmForEachCommand.h: STYLE: updated the docs to be more + accurate + +2005-06-22 14:16 martink + + * Source/cmForEachCommand.cxx: COMP: fix possible poroblem with + freed memory + +2005-06-22 14:04 martink + + * Source/cmForEachCommand.cxx: COMP: fix unused variable + +2005-06-22 13:32 martink + + * Source/cmForEachCommand.cxx: ENH: changed FOREACH to use + variables instead of string replacement + +2005-06-22 10:54 andy + + * Source/CTest/cmCTestTestHandler.cxx: BUG: Fix displaying of + percentage + +2005-06-22 10:09 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: clean rule wasn't + cleaning libs and executables + +2005-06-22 09:12 martink + + * Source/cmTarget.cxx: ENH: some better checks + +2005-06-22 09:06 martink + + * Source/: cmExportLibraryDependencies.cxx, cmGlobalGenerator.cxx, + cmGlobalKdevelopGenerator.cxx, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmMakeDepend.cxx, + cmMakeDepend.h, cmMakefile.cxx, cmMakefile.h, + cmOrderLinkDirectories.cxx, cmOrderLinkDirectories.h, + cmTarget.cxx, cmTarget.h: ENH: make LOCATION an computed property + of the target and get rid of a bunch of const junk + +2005-06-22 05:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-21 16:44 andy + + * Source/cmCommandArgumentParserHelper.cxx: ENH: Remove stray abort + +2005-06-21 16:29 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: fix for BSD makes no + longer use dir name as a target + +2005-06-21 14:20 king + + * Source/cmTryRunCommand.cxx: BUG: Fixed error message formatting + when try run executable command cannot be found. + +2005-06-21 11:01 andy + + * Source/cmCommandArgumentParserHelper.cxx: BUG: Fix escaping to + make OSX work again + +2005-06-21 10:33 king + + * Source/kwsys/testProcess.c: BUG: Use sleep(1) instead of + usleep(1000000) because some UNIX systems specify that the + argument to usleep must be less than 1000000. + +2005-06-21 09:34 martink + + * Source/: cmCustomCommand.cxx, cmCustomCommand.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: add test to make sure + custom commands are used + +2005-06-21 05:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-20 17:57 andy + + * Source/cmCTest.cxx: ENH: Initialize handler before processing it + +2005-06-20 17:37 andy + + * Source/CursesDialog/.NoDartCoverage: ENH: Until there is some + test for curses dialog, no need to do coverage + +2005-06-20 16:31 martink + + * Modules/: Dart.cmake, TestCXXAcceptsFlag.cmake, + Platform/Darwin.cmake: ENH: fixed some spelling errors + +2005-06-20 16:24 martink + + * Source/cmMakefile.cxx: BUG: goof in new feature fixed + +2005-06-20 14:15 martink + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: ENH: removed unused files + +2005-06-20 14:00 martink + + * Docs/CMake04.rtf, Source/cmGetTargetPropertyCommand.cxx, + Source/cmGetTargetPropertyCommand.h, Source/cmGlobalGenerator.h, + Source/cmMakefile.cxx: ENH: modified GET_TARGET_PROPERTIES to + work with all targets + +2005-06-20 13:49 barre + + * Source/kwsys/testSystemTools.cxx: ENH: fix test, it has to return + a true/false value otherwise it just passes the test, and add + test for EscapeChars + +2005-06-20 13:10 martink + + * Modules/: TestBigEndian.cmake, UseSWIG.cmake: BUG: fix some + missing quotes for STREQUAL IF statements + +2005-06-20 12:55 martink + + * Modules/CMakeGenericSystem.cmake: ENH: adde dback in + CMAKE_VERBOSE_MAKEFILE that was acc removed + +2005-06-20 11:54 king + + * Source/cmSetTargetPropertiesCommand.h: ENH: Added documentation + of VERSION and SOVERSION properties. + +2005-06-20 11:53 martink + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h, + cmGlobalUnixMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator.h: ENH: no longer used + +2005-06-20 11:49 martink + + * Tests/COnly/CMakeLists.txt: COMP: converted to lowercase commands + +2005-06-20 11:47 martink + + * Docs/cmake-mode.el: ENH: updated emacs mode to include lowercase + commands and missing command ENDMACRO + +2005-06-20 08:59 martink + + * Source/CTest/cmCTestTestHandler.cxx: COMP: see about fixing + warning + +2005-06-20 07:42 andy + + * Tests/CTestTest3/test.cmake.in: ENH: Skip svn test for now + +2005-06-20 05:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-19 06:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-18 05:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-17 23:15 andy + + * Source/CMakeLists.txt: COMP: Fix problems with old cmake + +2005-06-17 15:50 andy + + * Source/: cmCommandArgumentLexer.cxx, cmCommandArgumentLexer.in.l, + cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserHelper.h, cmListFileCache.cxx, + cmMakefile.cxx, cmMakefile.h: ENH: Improve handling of escaped + characters + +2005-06-17 15:44 andy + + * Source/CMakeLists.txt: ENH: Pass ctest config type to + subprocesses + +2005-06-17 15:43 andy + + * Source/CTest/cmCTestTestHandler.cxx: ENH: Pass configuration type + to subprocesses + +2005-06-17 14:13 king + + * Source/kwsys/CMakeLists.txt: ENH: Enabling new test 7 of process + execution. + +2005-06-17 14:07 king + + * Source/kwsys/Process.h.in: ENH: Added polling feature to + documentation of WaitForData. + +2005-06-17 14:05 king + + * Source/kwsys/ProcessWin32.c: BUG: Fixed polling feature of + WaitForData. + +2005-06-17 13:59 king + + * Source/kwsys/testProcess.c: ENH: Added test 7 to expose problems + with polling by WaitForData. + +2005-06-17 13:57 king + + * Source/kwsys/ProcessUNIX.c: BUG: Fixed polling capability of + WaitForData. + +2005-06-17 13:14 andy + + * Tests/CTestTest3/test.cmake.in: ENH: Make CVS one nightly + +2005-06-17 13:07 andy + + * Tests/CTestTest3/test.cmake.in: ENH: Add subversion test + +2005-06-17 13:04 andy + + * Source/: cmCTest.cxx, cmCTest.h, cmCommand.h, cmObject.h, + cmStandardIncludes.h, CTest/cmCTestBuildAndTestHandler.cxx, + CTest/cmCTestBuildAndTestHandler.h, + CTest/cmCTestBuildHandler.cxx, CTest/cmCTestBuildHandler.h, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestConfigureHandler.h, + CTest/cmCTestCoverageHandler.cxx, CTest/cmCTestCoverageHandler.h, + CTest/cmCTestGenericHandler.h, CTest/cmCTestMemCheckHandler.cxx, + CTest/cmCTestMemCheckHandler.h, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestScriptHandler.h, CTest/cmCTestStartCommand.cxx, + CTest/cmCTestSubmitHandler.cxx, CTest/cmCTestSubmitHandler.h, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestTestHandler.h, + CTest/cmCTestUpdateCommand.cxx, CTest/cmCTestUpdateHandler.cxx, + CTest/cmCTestUpdateHandler.h: ENH: Add superclass for all + commands and handlers. Improve handlers to have initialization + code, and start initializing ctest when start is invoked + +2005-06-17 11:46 malaterre + + * Source/kwsys/CommandLineArguments.hxx.in: ENH: Fix Bug #1950, + provide a direct access to the input. Minor cleanup (convenience) + +2005-06-17 09:49 king + + * Source/: cmCMakeMinimumRequired.cxx, cmMakefile.h, cmVersion.h: + ENH: Enabling ability for CMAKE_MINIMUM_REQUIRED version to + include patch level. Submitted by Alexander Neundorf. + +2005-06-17 08:45 andy + + * Tests/MacroTest/CMakeLists.txt: ENH: Fix test on HP + +2005-06-17 05:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-16 16:42 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx: When running the same + ctest as the one we are testing, make sure to run as separate + process + +2005-06-16 16:33 andy + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Add extra argument + +2005-06-16 16:24 andy + + * Source/cmCTest.cxx, Tests/CTestTest3/test.cmake.in: ENH: Return + error if there is an ERROR_MESSAGE. Also fix tag for the test + +2005-06-16 15:44 andy + + * Source/cmCommand.h: COMP: Fix build error on Windows + +2005-06-16 14:56 andy + + * Source/CMakeLists.txt, Tests/MacroTest/CMakeLists.txt, + Tests/MacroTest/macroTest.c: ENH: Add test of macro + +2005-06-16 14:56 andy + + * Source/: cmake.cxx, cmake.h: ENH: Before running configre, remove + all macros. Also, backup the command names. Also, make command + names case insensitive + +2005-06-16 14:05 andy + + * Source/: cmCommand.h, cmConfigureFileCommand.h, + cmFLTKWrapUICommand.h, cmQTWrapCPPCommand.h, cmQTWrapUICommand.h, + cmUseMangledMesaCommand.h, cmVTKWrapJavaCommand.h, + cmVTKWrapPythonCommand.h, cmVTKWrapTclCommand.h: ENH: Add + classname to commands + +2005-06-16 13:29 andy + + * Tests/CTestTest3/test.cmake.in: ENH: Initial import + +2005-06-16 13:18 andy + + * Source/CMakeLists.txt, Source/cmCTest.cxx, Source/cmCTest.h, + Source/CTest/cmCTestBuildCommand.cxx, + Source/CTest/cmCTestCommand.h, + Source/CTest/cmCTestGenericHandler.h, + Source/CTest/cmCTestStartCommand.cxx, + Source/CTest/cmCTestSubmitCommand.cxx, + Source/CTest/cmCTestSubmitHandler.cxx, + Source/CTest/cmCTestUpdateCommand.cxx, + Source/CTest/cmCTestUpdateHandler.cxx, + Tests/CTestTest2/test.cmake.in: ENH: Several improvements to + CTest: + + 1. Support for showing line numbers when debugging ctest + --show-line-numbers 2. Modify the ctest initialization code, so + that it can be delayed 3. Handlers now have corresponding command + if they were invoked from the command (so far only update + actually use that) 4. Start command is simplified and the + functionality is moved to CTest 5. Update can perform initial + checkout if CTEST_CHECKOUT_COMMAND is set 6. Add test that checks + out kwsys and perform tests on the fresh checkout + +2005-06-16 11:52 martink + + * Source/CMakeLists.txt: ENH: add first cut at support for exe with + same name as lib + +2005-06-16 11:48 martink + + * Source/: cmSetTargetPropertiesCommand.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: add first cut at support + for exe with same name as lib + +2005-06-16 11:47 martink + + * Tests/SameName/: CMakeLists.txt, Exe1/CMakeLists.txt, + Exe1/conly.c, Lib1/CMakeLists.txt, Lib1/libc1.c, Lib1/libc1.h: + ENH: add same name test + +2005-06-16 10:23 martink + + * Source/cmITKWrapTclCommand.cxx: ENH: replace brackets with more + generic find + +2005-06-16 10:22 martink + + * Source/cmOrderLinkDirectories.cxx: ENH: make more specific in + reject self linking + +2005-06-16 05:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-15 15:51 andy + + * Source/cmCommand.h: ENH: Add accessor for Makefile and make + SetError public + +2005-06-15 15:29 hoffman + + * CTestConfig.cmake: ENH: add for testing + +2005-06-15 10:54 andy + + * Tests/CTestTest2/test.cmake.in: BUG: Fix typo + +2005-06-15 10:53 andy + + * Source/CTest/: cmCTestMemCheckCommand.cxx, + cmCTestMemCheckHandler.cxx: ENH: Pass in memcheck command options + and suppresions, and change skin to tool + +2005-06-15 10:53 andy + + * Source/CTest/cmCTestCoverageCommand.cxx: ENH: Handle passing in + coverage command + +2005-06-15 08:54 andy + + * Source/CMakeLists.txt: ENH: Add logging to improve coverage + +2005-06-15 05:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-14 15:53 andy + + * Utilities/.NoDartCoverage: ENH: No need to do coverage of + utilities + +2005-06-14 15:49 andy + + * Source/: cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserHelper.h: ENH: More cleanups + +2005-06-14 14:01 andy + + * Tests/CTestTest2/test.cmake.in: ENH: Also perform memory checking + and coverage + +2005-06-14 14:00 andy + + * Source/: CMakeLists.txt, CTest/cmCTestCoverageCommand.cxx, + CTest/cmCTestCoverageCommand.h, CTest/cmCTestMemCheckCommand.cxx, + CTest/cmCTestMemCheckCommand.h, CTest/cmCTestScriptHandler.cxx: + ENH: Add commands for memory checking and coverage + +2005-06-14 13:22 andy + + * Source/: cmCommandArgumentLexer.cxx, cmCommandArgumentLexer.in.l: + ENH: Improve variable name regular expression + +2005-06-14 12:48 andy + + * Source/: cmMacroCommand.cxx, cmake.cxx, cmake.h: ENH: Save + command that macro overwrites + +2005-06-14 11:42 andy + + * Source/: cmCTest.cxx, cmCTest.h, + CTest/cmCTestCoverageHandler.cxx, CTest/cmCTestUpdateHandler.cxx: + ENH: Separate standard output and standard error for problematic + commands + +2005-06-14 03:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-13 18:03 barre + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: add + method to escape some chars in a string + +2005-06-13 14:29 andy + + * Source/cmCommandArgumentParserHelper.cxx: ENH: Handle + non-existing variables + +2005-06-13 11:00 andy + + * bootstrap, Source/CMakeLists.txt, Source/cmMakefile.cxx: ENH: Use + the new parser that supports nested variables + +2005-06-13 10:27 andy + + * Source/: cmCommandArgumentParser.cxx, cmCommandArgumentParser.y: + ENH: More cleanups + +2005-06-13 10:11 andy + + * Source/: cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserHelper.h: ENH: More optimization + +2005-06-13 10:01 andy + + * Source/: cmCommandArgumentLexer.cxx, cmCommandArgumentLexer.h, + cmCommandArgumentParser.cxx, cmCommandArgumentParserTokens.h: + ENH: Initial import + +2005-06-13 10:00 andy + + * Source/: cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserHelper.h: ENH: Handle errors and optimize + a bit + +2005-06-13 10:00 andy + + * Source/cmCommandArgumentLexer.in.l: ENH: Remove some allocations + +2005-06-13 09:59 andy + + * Source/cmCommandArgumentParser.y: ENH: Rearange and cleanup + +2005-06-13 09:33 martink + + * Source/: cmConfigureFileCommand.cxx, cmConfigureFileCommand.h: + ENH: made configure file immediate by default for 2.2 or later + +2005-06-12 03:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-11 03:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-10 11:27 martink + + * Source/cmMakefile.cxx: ENH: remove old 1.2 compatability from + cmake 2.2 + +2005-06-10 10:45 martink + + * Source/cmMakefile.cxx: ENH: remove old 1.2 compatability from + cmake 2.2 + +2005-06-10 10:44 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmake.cxx, cmake.h, + cmLocalGenerator.h: ENH: added support for forcing recomputation + of depends + +2005-06-10 10:09 martink + + * Tests/Wrapping/CMakeLists.txt: ENH: change to work with new FLTK + command + +2005-06-10 10:09 martink + + * Source/: cmFLTKWrapUICommand.cxx, cmFLTKWrapUICommand.h: ENH: + change workings of command so that it can all happing in the + initial pass still works the old way but complains + +2005-06-10 10:08 martink + + * Source/cmAddLibraryCommand.cxx: ENH: allow libs with no sources + but complain + +2005-06-10 09:01 andy + + * Source/: cmCTest.cxx, CTest/cmCTestBuildHandler.cxx: ENH: Be more + verbose + +2005-06-10 08:56 andy + + * Source/CTest/: cmCTestBuildHandler.cxx, + cmCTestConfigureHandler.cxx: ENH: Be more verbose + +2005-06-10 08:40 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmGlobalXCodeGenerator.cxx, + cmLocalGenerator.cxx, cmLocalGenerator.h: ENH: removed old + convert calls + +2005-06-10 02:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-09 14:37 martink + + * bootstrap, Source/cmake.cxx, Source/CMakeLists.txt: ENH: removed + UMG2 + +2005-06-09 14:34 martink + + * Source/cmITKWrapTclCommand.cxx: ENH: deprecate old ITK wrap + command + +2005-06-09 11:46 martink + + * Source/cmGlobalKdevelopGenerator.cxx: BUG: fix KDev gen to call + parent class Generate + +2005-06-09 11:39 martink + + * Source/: cmGlobalKdevelopGenerator.h, + cmLocalKdevelopGenerator.cxx, cmLocalKdevelopGenerator.h: ENH: + make KDev sub off of Gen3 + +2005-06-09 11:33 martink + + * Source/cmTarget.cxx: ENH: removed old 1.2 compatability + +2005-06-09 11:23 martink + + * Tests/Wrapping/CMakeLists.txt: ENH: no longer test ITK command + +2005-06-09 09:48 andy + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: some better error + reporting and more robust handlign of bad targets + +2005-06-09 08:19 king + + * Source/kwsys/Configure.h.in: COMP: Disable more warnings. + +2005-06-09 08:18 king + + * Source/kwsys/kwsys_ios_sstream.h.in: COMP: Fix + no-assignment-operator warning and disable typedef-name synonym + warning. + +2005-06-09 08:03 king + + * Source/kwsys/Configure.h.in: COMP: Disable useless warnings. + +2005-06-09 08:02 king + + * Source/kwsys/Configure.hxx.in: ENH: C++ configuration should + include C configuration. + +2005-06-09 07:51 king + + * Source/kwsys/SystemTools.cxx: COMP: Need windows.h even on cygwin + to get CreateFile API. + +2005-06-09 07:40 king + + * Source/kwsys/RegularExpression.cxx: COMP: Fixed conversion + warnings. + +2005-06-09 04:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-08 16:55 martink + + * Source/cmIncludeCommand.cxx: BUG: fatal error in include file + should not cause report of missing include file + +2005-06-08 16:39 martink + + * Tests/Wrapping/CMakeLists.txt: ENH: remove bad add target + commands + +2005-06-08 16:39 martink + + * Source/: cmAddExecutableCommand.cxx, cmAddLibraryCommand.cxx: + ENH: better error checking for add library or executable with no + source files + +2005-06-08 16:31 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: prevent segfault + when no sources provided for lib + +2005-06-08 14:18 andy + + * Source/: cmCommandArgumentLexer.in.l, cmCommandArgumentParser.y, + cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserHelper.h: ENH: Handle more cases + +2005-06-08 14:11 martink + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt, Wrapping/CMakeLists.txt: + ENH: remove requirements on 1.2 + +2005-06-08 12:26 martink + + * Tests/: OutOfSource/SubDir/CMakeLists.txt, + Complex/CMakeLists.txt, Complex/Executable/CMakeLists.txt, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt, + Dependency/CMakeLists.txt, Jump/CMakeLists.txt, + Jump/Library/CMakeLists.txt, PreOrder/CMakeLists.txt, + SimpleInstall/CMakeLists.txt, SimpleInstallS2/CMakeLists.txt, + Testing/CMakeLists.txt: ENH: shift to using ADD_SUBDIRECTORY + +2005-06-08 10:41 andy + + * Source/: cmCommandArgumentLexer.in.l, cmCommandArgumentParser.y, + cmCommandArgumentParserHelper.cxx, + cmCommandArgumentParserHelper.h: ENH: Initial import (not working + yet) + +2005-06-08 09:59 king + + * Docs/cmake-mode.el: ENH: Experimenting with auto-dated copyright. + +2005-06-08 09:52 andy + + * Tests/CTestTest/CMakeLists.txt: ENH: Cleanup + +2005-06-08 04:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-07 12:07 martink + + * Source/cmGlobalVisualStudio7Generator.cxx, + Modules/Platform/Windows-cl.cmake: ENH: fix for incorrect setting + of CONFIZGURATION_TYPES + +2005-06-07 10:55 andy + + * Source/CTest/cmCTestTestHandler.cxx: BUG: Remove debugging code + +2005-06-07 10:47 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, cmake.cxx: ENH: fix + problem with dependency scanning + +2005-06-07 09:57 andy + + * Source/cmLocalGenerator.cxx, Source/kwsys/CMakeLists.txt, + Source/kwsys/ExtraTest.cmake.in, Tests/CTestTest/test.cmake.in, + Tests/CTestTest2/test.cmake.in: ENH: Add capability to include + files to DartTestfile.txt and add example of that + +2005-06-07 09:06 andy + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: ENH: + Use CMake for parsing DartTestfile.txt + +2005-06-07 08:44 king + + * Modules/FindQt.cmake: ENH: Added search locations for a FreeBSD + location. Contributed by Alexander Neundorf. + +2005-06-07 04:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-06 09:23 andy + + * Source/CTest/cmCTestBuildHandler.cxx: BUG: Initialize the + iterator to prevent seg-fault + +2005-06-06 04:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-05 15:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-03 16:10 andy + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + CTest/cmCTestBuildAndTestHandler.cxx, + CTest/cmCTestBuildAndTestHandler.h: ENH: Move the build-and-test + code to a handler + +2005-06-03 14:42 andy + + * Source/CTest/: cmCTestGenericHandler.cxx, + cmCTestGenericHandler.h: ENH: Add a method to parse command line + argument inside the handler + +2005-06-03 14:42 andy + + * Tests/CommandLineTest/CMakeLists.txt: ENH: Test setting of + environment variables + +2005-06-03 14:17 andy + + * Source/cmSetCommand.cxx: BUG: Remove memory leak + +2005-06-03 12:59 martink + + * Source/: cmWrapExcludeFilesCommand.cxx, + cmWrapExcludeFilesCommand.h, cmSourceFilesCommand.cxx, + cmSourceFilesCommand.h, cmSourceFilesRemoveCommand.cxx, + cmSourceFilesRemoveCommand.h: ENH: no longer used + +2005-06-03 12:58 martink + + * Source/cmCommands.cxx: ENH: removed old commands + +2005-06-03 11:29 andy + + * Source/CTest/cmCTestConfigureHandler.cxx: BUG: Remove unused code + +2005-06-03 11:26 martink + + * CTestCustom.ctest.in: ENH: shut up buggy gcc stl header + +2005-06-03 04:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-02 18:10 andy + + * Source/: cmCTest.cxx, ctest.cxx: ENH: Add debug flag + +2005-06-02 16:47 andy + + * Source/: cmCTest.cxx, CTest/cmCTestSubmitHandler.cxx: BUG: Fix + the order of things to make submit handler not crash when proxies + are set + +2005-06-02 15:14 martink + + * Docs/cmake-mode.el: ENH: updated commands + +2005-06-02 15:09 martink + + * Tests/Wrapping/CMakeLists.txt: ENH: removed old command + +2005-06-02 14:56 martink + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: ENH: removed old + commands + +2005-06-02 14:48 andy + + * Source/CTest/cmCTestSubmitHandler.cxx: ENH: Cleanup output even + more + +2005-06-02 14:24 martink + + * Source/: cmCommands.cxx, cmAbstractFilesCommand.cxx, + cmAbstractFilesCommand.h: ENH: removed the ABSTRACT_FILES command + +2005-06-02 14:21 martink + + * Docs/cmake-mode.el: ENH: updated to remove ABSTRACT_FILES and add + ADD_SUBDIRECTORY + +2005-06-02 14:10 martink + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: ENH: removed use of + ABSTRACT command + +2005-06-02 13:41 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: now also provides obj rules + for local Makefiles + +2005-06-02 12:26 andy + + * Source/CTest/cmCTestBuildHandler.cxx: COMP: Remove compile + warning + +2005-06-02 11:47 andy + + * Source/CTest/: cmCTestBuildHandler.cxx, cmCTestBuildHandler.h: + ENH: Once the number of errors or warnings was reached, stop + counting them. Also fix compile warning on bad compilers + +2005-06-02 09:35 andy + + * Source/CTest/cmCTestSubmitHandler.cxx: BUG: On windows there are + problems when opening file as ascii + +2005-06-02 04:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-06-01 15:59 andy + + * Source/CTest/: cmCTestBuildHandler.cxx, cmCTestBuildHandler.h: + ENH: Streamline build process. This reduces the memory footprint, + since only some number of lines of output will be in memory at + the time. Also, this will report the build errors and warnings as + it goes through the build + +2005-06-01 13:37 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: minor perf improvement + +2005-06-01 13:24 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: do not add help + target if there is a real target named help + +2005-06-01 13:19 king + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: Fixed name given + to clean target listing for executable and library targets. + +2005-06-01 11:18 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: COMP: fix warning + +2005-06-01 09:25 andy + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: BUG: Remove duplicate targets + when in different generators + +2005-06-01 08:59 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: COMP: fix warning + +2005-06-01 08:56 martink + + * CTestCustom.ctest.in: COMP: suppress warnings in 3rd party libs + +2005-06-01 08:54 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: COMP: fix warning + +2005-06-01 08:50 martink + + * Source/cmQTWrapUICommand.cxx: COMP: fix warning + +2005-06-01 08:48 martink + + * Source/: cmVariableRequiresCommand.cxx, + cmVariableRequiresCommand.h: ENH: made immediate + +2005-06-01 08:25 andy + + * Source/cmCTest.cxx: ENH: Make CMake --build-and-test to be + verbose by default + +2005-06-01 08:25 andy + + * Source/cmStandardIncludes.h: ENH: Add support for deque + +2005-06-01 03:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-31 18:40 andy + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx, + CTest/cmCTestBuildHandler.cxx, CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestCoverageHandler.cxx, + CTest/cmCTestMemCheckHandler.cxx, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestSubmitHandler.cxx, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestUpdateHandler.cxx: COMP: Remove ERROR reserved word + or something and replace with ERROR_MESSAGE + +2005-05-31 17:32 andy + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx, + CTest/cmCTestBuildHandler.cxx, CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestCoverageHandler.cxx, CTest/cmCTestCoverageHandler.h, + CTest/cmCTestGenericHandler.cxx, CTest/cmCTestGenericHandler.h, + CTest/cmCTestMemCheckHandler.cxx, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestStartCommand.cxx, CTest/cmCTestSubmitHandler.cxx, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestUpdateHandler.cxx: + ENH: Add support for writing output file. While doing that, + redesign the way ctest does output. There may still be problems + with commands failing, but that should be fixed by applying the + similar concept to whole CMake + +2005-05-31 16:20 martink + + * CTestCustom.ctest.in: ENH: shut up some warning on SGI + +2005-05-31 15:10 martink + + * Source/: cmAddSubDirectoryCommand.cxx, + cmAddSubDirectoryCommand.h: ENH: removed the PREORDER option from + the AddSubDirectory command + +2005-05-31 14:09 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: COMP: fix a waring + +2005-05-31 11:46 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: now uses Makefile2 to + cleanup zsh issues and provided some more documentation + +2005-05-31 10:16 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: STYLE: add some better comments + and remove some unused code + +2005-05-31 04:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-30 17:26 andy + + * Source/cmStandardIncludes.h: ENH: Add support for iomanip + +2005-05-30 04:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-29 04:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-28 08:44 lorensen + + * Source/kwsys/SystemTools.cxx: COMP: warning. + +2005-05-28 04:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-27 22:11 barre + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: add + convenience function to convert Windows command line args into + Unix argc/argv. Pulled and cleaned from PV/VV/VJ init code + +2005-05-27 16:17 andy + + * Source/CTest/cmCTestScriptHandler.cxx: ENH: Use generated file + stream for files + +2005-05-27 11:26 andy + + * DartConfig.cmake: ENH: Dart change + +2005-05-27 04:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-26 18:15 andy + + * Source/CTest/cmCTestSubmitHandler.cxx: ENH: Fix for changes in + XML-RPC for Dart2 + +2005-05-26 17:30 andy + + * Modules/CMakeVS8FindMake.cmake: COMP: Fix for support of VS 8.0 + beta 2 + +2005-05-26 04:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-25 15:09 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: added clean target for + subdirs + +2005-05-25 12:22 martink + + * Source/: cmDepends.cxx, cmDepends.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: BUG: a fix for constant + recomputing of depends + +2005-05-25 11:19 andy + + * Source/cmDependsFortran.cxx: ENH: new fortran depends to match + new Unix Gen + +2005-05-25 11:18 martink + + * Source/: cmGlobalUnixMakefileGenerator.h, + cmGlobalUnixMakefileGenerator3.h, cmake.cxx: ENH: switch to using + new Unix Makefile generator for Unix as well + +2005-05-25 04:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-24 16:36 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: fix for directory + of empty depend.make files + +2005-05-24 16:11 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: building libs + caused all generated files to be deleted + +2005-05-24 15:36 martink + + * Source/cmIfCommand.h: STYLE: fix the docs + +2005-05-24 14:42 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: some more cleanup and + changes to how custom commands are stored + +2005-05-24 11:17 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx: ENH: optimization to not use + requires step unless a language requires it + +2005-05-24 10:45 martink + + * Modules/CMakeFortranInformation.cmake: ENH: added requires flag + +2005-05-24 04:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-23 03:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-22 03:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-21 03:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-20 12:09 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: fix for empty + custom commands + +2005-05-20 11:01 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: added help target and made + custom commands execute in start output directory + +2005-05-20 08:45 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx: ENH: fix warning and + also add back in build.make + +2005-05-20 03:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-19 15:55 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: COMP: fix warning + +2005-05-19 15:00 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: fixes for subdir build + Makefiles + +2005-05-19 14:36 andy + + * Modules/Platform/Windows-cl.cmake: ENH: Be more verbose, handle + network paths, and write compiler output to the log files + +2005-05-19 13:32 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: COMP: fix warning + +2005-05-19 13:26 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: BUG: fix for bad + depency clearing + +2005-05-19 10:52 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx: ENH: some performance + improvements + +2005-05-19 03:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-18 16:10 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: fix for makes that + do not handle targets wihtout a rule to build them + +2005-05-18 13:46 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmTarget.cxx: ENH: another step + to the next generator still not optimized yet + +2005-05-18 04:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-17 14:39 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: COMP: some warning fixes and + cleanup + +2005-05-17 14:22 andy + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: implemented + provides requires code + +2005-05-17 11:15 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: some more reorg + +2005-05-17 03:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-16 14:17 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: BUG: + Changing to a new test for whether to do relative path + conversion. Now only paths inside the source or binary trees are + converted. + +2005-05-16 13:42 king + + * Source/kwsys/: ProcessUNIX.c, testProcess.c: ENH: Removing + previous debug code. + +2005-05-16 10:53 martink + + * Source/: cmDependsFortran.cxx, cmLocalUnixMakefileGenerator3.cxx: + ENH: some updates to the provides requires code + +2005-05-15 03:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-14 04:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-13 15:51 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: ENH: remove duplicate + provide rule for fortran + +2005-05-13 15:50 martink + + * Source/cmLocalGenerator.cxx: COMP: shut up warning + +2005-05-13 14:45 king + + * Source/kwsys/SharedForward.h.in: ENH: Added knowledge of FreeBSD. + +2005-05-13 14:44 king + + * Source/kwsys/: ProcessUNIX.c, testProcess.c: ENH: Adding + debugging code for freebsd. + +2005-05-13 14:13 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: BUG: minor cleanup and + fix for convenience rules + +2005-05-13 14:12 martink + + * Source/cmGlobalGenerator.cxx: BUG: filx for old bug in rel path + computaiton code + +2005-05-13 09:54 martink + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: warning fixes and some + first steps in cleaning up the convert code + +2005-05-13 04:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-12 16:25 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: Undo fix as it broke + the dashboard + +2005-05-12 13:27 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: fix for bug where + debug, release etc flags were not used for linker options, BUG + 1781 fix + +2005-05-12 11:53 martink + + * bootstrap: ENH: moved gen3 into bootstrap process + +2005-05-12 11:26 martink + + * Source/cmLocalUnixMakefileGenerator3.cxx: COMP: shut up unused + var + +2005-05-12 11:24 martink + + * Source/cmake.cxx: BUG: fix bad generator name + +2005-05-12 10:58 martink + + * Source/CMakeLists.txt: ENH: defer relative paths + +2005-05-12 10:49 martink + + * Source/: CMakeLists.txt, cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.h, + cmGlobalUnixMakefileGenerator3.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, cmake.cxx: ENH: added new + generator + +2005-05-12 03:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-11 13:16 martink + + * Source/: cmDepends.cxx, cmDepends.h, cmDependsC.cxx, + cmDependsC.h, cmDependsFortran.cxx, cmDependsFortran.h, + cmDependsJava.cxx, cmDependsJava.h, + cmLocalUnixMakefileGenerator2.cxx: ENH: some changes to the + depends signature to be more flexible + +2005-05-11 12:44 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: another snapshot + +2005-05-11 10:19 martink + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: ENH: added + new methods to convert to HomeRelative paths + +2005-05-11 08:45 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: ENH: snapshot + +2005-05-11 03:55 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-10 16:41 king + + * Source/kwsys/testProcess.c: ENH: Removing QNX hack for test 6 now + that the problem has been fixed. + +2005-05-10 16:36 king + + * Source/kwsys/ProcessUNIX.c: BUG: struct timeval uses unsigned + types on at least one platform (QNX). Alot of the time logic + assumes a signed type. Switch to using a signed representation + that is converted to the native representation only for system + calls. + +2005-05-10 11:11 andy + + * Source/: cmGeneratedFileStream.cxx, cmGeneratedFileStream.h: ENH: + Allow changing of file name + +2005-05-10 11:00 king + + * Source/: cmDependsC.cxx, cmDependsC.h: BUG: Re-implemented + dependency line parsing to deal with quoted paths and escaped + spaces. + +2005-05-10 10:10 andy + + * Source/cmBuildCommand.cxx: ENH: Remove the old code + +2005-05-10 03:52 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-09 15:11 martink + + * Source/cmGlobalUnixMakefileGenerator3.cxx: ENH: some more fixes + +2005-05-09 08:53 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: some more cleanup + +2005-05-09 03:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-08 13:49 andy + + * Source/CTest/cmCTestSubmitCommand.cxx, + Tests/CTestTest2/test.cmake.in: ENH: Add notes + +2005-05-08 13:48 andy + + * Source/CTest/cmCTestStartCommand.cxx: ENH: Remove error about not + being able to update CTest configuration + +2005-05-08 13:48 andy + + * Source/CTest/: cmCTestBuildCommand.cxx, cmCTestBuildCommand.h: + ENH: Remove memory leak and remember global generator for next + time + +2005-05-08 13:47 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add method so that ctest + handlers and commands can add notes + +2005-05-08 04:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-07 03:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-06 14:49 martink + + * Source/: cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h, + cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h: ENH: updates + +2005-05-06 12:38 king + + * Source/cmake.cxx: COMP: Fixed forced bool conversion warning. + +2005-05-06 09:58 king + + * Source/: cmDepends.cxx, cmDepends.h, cmDependsC.cxx, + cmDependsC.h, cmDependsFortran.cxx, cmDependsFortran.h, + cmDependsJava.cxx, cmDependsJava.h, + cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h, cmake.cxx: ENH: Added optional + verbose output to build system dependency check. + +2005-05-06 03:52 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-05 12:45 martink + + * Source/: cmGlobalUnixMakefileGenerator3.cxx, + cmGlobalUnixMakefileGenerator3.h, + cmLocalUnixMakefileGenerator3.cxx, + cmLocalUnixMakefileGenerator3.h: ENH: backup of work in progress + +2005-05-05 10:40 andy + + * Source/cmMakefile.cxx: BUG: If there is a fatal error, stop + processing list file + +2005-05-05 10:26 king + + * Source/cmGlobalVisualStudio7Generator.cxx: BUG: Added space after + /clean to avoid putting it together with the build configuration. + This fixes the failure of the complext test on the second run in + the same tree. + +2005-05-05 10:19 andy + + * Source/kwsys/CTestConfig.cmake: ENH: Add configuration file for + kwsys + +2005-05-05 10:19 andy + + * Source/CMakeLists.txt, Tests/CTestTest2/CMakeLists.txt, + Tests/CTestTest2/test.cmake.in: ENH: Add new style ctest project + +2005-05-05 10:18 andy + + * Source/CTest/: cmCTestConfigureCommand.cxx, + cmCTestSubmitCommand.cxx: ENH: Add default configure rules for + CMake projects and add default rules for submission + +2005-05-05 10:18 andy + + * Source/CTest/cmCTestScriptHandler.cxx: ENH: Add variable that + holds cmake executable + +2005-05-05 10:17 andy + + * Source/cmCTest.h: ENH: Add accessort for CMake executable + +2005-05-05 09:45 king + + * Source/kwsys/testProcess.c: ENH: Disabling test 6 on QNX until + process killing can be resolved. It will just fail always for + now. + +2005-05-05 09:21 andy + + * Source/cmCTest.cxx: BUG: Fix logic for verbose + +2005-05-05 09:09 king + + * Source/kwsys/hashtable.hxx.in: COMP: Removed unused parameter + warning. + +2005-05-05 09:08 king + + * Source/kwsys/SystemTools.cxx: COMP: Added work-around to avoid + warnings about unreferenced inline functions from SGI termios. + +2005-05-05 09:05 king + + * Source/kwsys/ProcessUNIX.c: COMP: Added initializer to avoid + warning. It is not really needed, though. + +2005-05-05 03:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-04 11:37 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Add + split that splits on arbitrary separator + +2005-05-04 11:16 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: Allow spaces in + update command + +2005-05-04 11:13 andy + + * Source/CTest/: cmCTestBuildCommand.cxx, cmCTestBuildCommand.h, + cmCTestConfigureCommand.cxx, cmCTestConfigureCommand.h, + cmCTestCoverageHandler.cxx, cmCTestSubmitCommand.cxx, + cmCTestSubmitCommand.h, cmCTestTestCommand.cxx, + cmCTestTestCommand.h, cmCTestUpdateCommand.cxx, + cmCTestUpdateCommand.h: ENH: Improve syntax + +2005-05-04 11:13 andy + + * Source/cmGlobalGenerator.cxx: BUG: Fix bootstrap test on machines + with spaces in the path + +2005-05-04 11:12 andy + + * Source/kwsys/SystemTools.hxx.in: ENH: Expose + ConvertToUnixOutputPath + +2005-05-04 03:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-03 15:28 andy + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestStartCommand.cxx: + ENH: Add Site and BuildName, make sure that the rest of the + default -S rule does not happen, and make sure that new tag will + be created + +2005-05-03 15:20 andy + + * Source/cmGlobalGenerator.cxx: ENH: No need to convert to output + path + +2005-05-03 15:19 king + + * Source/: cmDependsFortranLexer.cxx, cmDependsFortranLexer.in.l, + cmDependsJavaLexer.cxx, cmDependsJavaLexer.in.l: COMP: Removed + warnings about unreachable code and constant control expressions. + Added the changes to the instructions in the input lex files. + +2005-05-03 14:58 king + + * Source/: cmGeneratedFileStream.h, + cmLocalUnixMakefileGenerator2.h, cmStandardIncludes.h, + cmSystemTools.cxx, CTest/cmCTestUpdateHandler.h, + kwsys/CommandLineArguments.cxx, kwsys/SystemTools.cxx, + kwsys/testhash.cxx: COMP: Added pragma directives for SGI + compilers to avoid useless warnings. + +2005-05-03 14:57 king + + * Source/CursesDialog/: cmCursesLongMessageForm.cxx, + cmCursesMainForm.cxx: COMP: Changed while(1) to for(;;) to avoid + warning about constant control expression. + +2005-05-03 14:53 king + + * Source/kwsys/kwsysPlatformCxxTests.cxx: COMP: Removed stray + semicolon. + +2005-05-03 14:28 king + + * Source/cmStandardIncludes.h: COMP: Added hack to avoid SGI + termios.h warnings. + +2005-05-03 14:28 king + + * Source/: cmDependsJavaLexer.cxx, cmDependsJavaLexer.in.l: COMP: + Need #undef ECHO to avoid conflict with system ECHO definition. + +2005-05-03 14:27 king + + * Source/kwsys/RegularExpression.hxx.in: COMP: Changed type of + regmlen to avoid warnings when other lengths are converted to it. + +2005-05-03 10:02 king + + * Source/kwsys/testProcess.c: ENH: Adding test of running + executable with forward slashes on windows. + +2005-05-03 09:40 andy + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestBuildCommand.cxx, + CTest/cmCTestBuildHandler.cxx, CTest/cmCTestConfigureCommand.cxx, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestCoverageHandler.cxx, + CTest/cmCTestMemCheckHandler.cxx, CTest/cmCTestStartCommand.cxx, + CTest/cmCTestSubmitCommand.cxx, CTest/cmCTestSubmitHandler.cxx, + CTest/cmCTestTestCommand.cxx, CTest/cmCTestUpdateCommand.cxx, + CTest/cmCTestUpdateHandler.cxx: ENH: Cleanups + +2005-05-03 08:17 andy + + * CTestConfig.cmake, Source/CMakeLists.txt, Source/cmCTest.cxx, + Source/cmCTest.h, Source/CTest/cmCTestBuildHandler.cxx, + Source/CTest/cmCTestScriptHandler.cxx, + Source/CTest/cmCTestSubmit.cxx, Source/CTest/cmCTestSubmit.h, + Source/CTest/cmCTestSubmitCommand.cxx, + Source/CTest/cmCTestSubmitCommand.h, + Source/CTest/cmCTestSubmitHandler.cxx, + Source/CTest/cmCTestSubmitHandler.h, + Source/CTest/cmCTestTestCommand.cxx, + Source/CTest/cmCTestTestCommand.h: ENH: Promote submit into a + full handler, add test and submit command and do some cleanups + +2005-05-03 04:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-02 15:51 andy + + * CTestConfig.cmake, Source/CTest/cmCTestBuildCommand.cxx, + Source/CTest/cmCTestScriptHandler.cxx: ENH: Make ctest build + command work + +2005-05-02 15:51 andy + + * Source/cmake.h: ENH: Make AddCMakePath public + +2005-05-02 15:50 andy + + * Source/cmGlobalGenerator.h: ENH: Make FindMakeProgram public + +2005-05-02 14:15 andy + + * CTestConfig.cmake, Source/CMakeLists.txt, Source/cmCTest.cxx, + Source/cmCTest.h, Source/CTest/cmCTestBuildCommand.cxx, + Source/CTest/cmCTestBuildCommand.h, + Source/CTest/cmCTestConfigureCommand.cxx, + Source/CTest/cmCTestConfigureCommand.h, + Source/CTest/cmCTestScriptHandler.cxx, + Source/CTest/cmCTestStartCommand.cxx, + Source/CTest/cmCTestUpdateCommand.cxx: ENH: More commands. Start + working on new style ctest configuration + +2005-05-02 03:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-05-01 03:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-30 15:36 andy + + * Source/cmGlobalXCodeGenerator.cxx: COMP: Remove warning + +2005-04-30 04:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-29 12:50 andy + + * Source/cmBuildCommand.cxx: ENH: Try to see if + GenerateBuildCommand produces apropriate result + +2005-04-29 11:49 andy + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h: ENH: Add option to ignore errors. Only + works on make + +2005-04-29 10:11 king + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h: COMP: Converting + INSTALL->ALL_BUILD dependency implementation to use the + AddUtility method on a target. This significantly simplifies the + implementation and removes warnings about hiding virtual + functions. + +2005-04-29 10:07 andy + + * Source/cmGlobalXCodeGenerator.cxx: COMP: Remove warning + +2005-04-29 10:06 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: make install depend on + all + +2005-04-29 04:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-28 18:34 andy + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: Start working on command that will abstract generating of + build command + +2005-04-28 18:18 andy + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h: ENH: Start working on a method + that abstracts generating of build command + +2005-04-28 17:33 andy + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: ENH: Start + working on command that will abstract generating of build command + +2005-04-28 16:21 king + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h: ENH: Added dependency from + INSTALL target to ALL_BUILD target so that targets build before + being installed. + +2005-04-28 11:47 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: BUG: Avoid infinite loop during + installation. + +2005-04-28 09:21 king + + * Source/kwsys/testProcess.c: BUG: Extending all timeouts to help + out slower machines. + +2005-04-28 09:14 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Add internal error + +2005-04-28 05:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-27 11:46 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ENH: Added dependency + on all for install rule to make sure build is up to date before + installing. This behavior can be disabled by setting + CMAKE_SKIP_INSTALL_ALL_DEPENDENCY to true. + +2005-04-27 11:33 king + + * Source/cmSourceFile.cxx: BUG: Do not leave ../ in the full path + to a source file. Using CollapseFullPath simplifies the code + anyway. + +2005-04-27 10:01 king + + * Source/kwsys/testProcess.c: BUG: Extending timeout of test 6 from + 0.1 seconds to 3 seconds. This should avoid missed signals and + intermittent failures. + +2005-04-27 09:12 king + + * Tests/CustomCommand/CMakeLists.txt: BUG: Use copy to produce + doc1pre.txt instead of echo. The redirection does not like + forward slashes on Win9x. + +2005-04-27 04:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-26 17:11 king + + * Modules/: CMakeBackwardCompatibilityC.cmake, FindThreads.cmake: + BUG: Fix try-compile for sys/prctl.h. It needs to include + sys/types.h first according to the man page. + +2005-04-26 14:12 king + + * Source/CursesDialog/form/: CMakeLists.txt, + internal_stdio_core.h.in: ENH: Removing stdio_core hack. A + better work-around has been put in cmStandardIncludes.h. + +2005-04-26 14:11 king + + * Source/cmStandardIncludes.h: COMP: Adding inclusion of stdarg.h + to work-around SGI header bug in 7.4.2m. + +2005-04-26 11:55 king + + * Tests/CustomCommand/CMakeLists.txt: ENH: Added pre-build and + post-build test for custom targets. + +2005-04-26 11:31 andy + + * Source/kwsys/SystemTools.cxx: BUG: Looks like std::string changes + the result of c_str() call. This fixes potential problems + +2005-04-26 11:15 andy + + * Source/cmakewizard.h: COMP: Remove warning + +2005-04-26 11:09 andy + + * Source/: cmakewizard.h, CTest/cmCTestUpdateHandler.cxx: COMP: + Remove warnings + +2005-04-26 11:08 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h: BUG: Fixed ordering of multiple + commands in a custom target when implemented as custom commands. + Also added support to execute pre-build rules first to be + consistent with makefile generator. + +2005-04-26 08:51 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Added inclusion of + pre-build rules for custom targets. + +2005-04-26 04:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-25 09:59 andy + + * Source/cmLocalGenerator.cxx: COMP: Remove warning + +2005-04-25 03:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-24 16:19 andy + + * Source/cmAddTestCommand.cxx: COMP: Fix problem on compilers that + cannot implicitly convert std::string to cmStdString + +2005-04-24 15:59 andy + + * bootstrap, Source/CMakeLists.txt, Source/cmAddTestCommand.cxx, + Source/cmAddTestCommand.h, Source/cmEnableTestingCommand.cxx, + Source/cmEnableTestingCommand.h, Source/cmGlobalGenerator.cxx, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, Source/cmTest.cxx, + Source/cmTest.h: ENH: Improve internal test handling by creating + a test class. Command cmEnableTesting now only sets + CMAKE_TESTING_ENABLED and cmAddTest only adds a test to the list. + The actual test files are written by local generator. This way we + can at some point in the future replace DartTestfile with some + XML file + +2005-04-24 14:28 andy + + * Source/cmCTest.cxx: BUG: The argument is --ctest-config + +2005-04-24 13:57 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: Support for modified + and conflicts in subversion + +2005-04-24 13:15 king + + * Source/CursesDialog/form/CMakeLists.txt: BUG: Older SGI compilers + still have internal/stdio_core.h but do not support + #include_next. We'll have to try-compile to test whether this + hack is needed. + +2005-04-24 12:32 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: BUG: Remember if there was + update error + +2005-04-24 02:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-23 02:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-22 16:11 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h, cmTarget.cxx, cmTarget.h: ENH: + Created cmTarget::GetLibraryNames to replace + cmLocalUnixMakefileGenerator2::GetLibraryNames. Added + cmTarget::GetLibraryCleanNames to be used by + cmLocalUnixMakefileGenerator2. Now when a library is linked both + the shared and static versions are removed from the build tree. + In this way we avoid having both kinds of libraries present when + the user switches BUILD_SHARED_LIBS on/off. This prevents + problems with turning off shared libraries and then expecting the + linker to use the static libraries only to find it is using the + out-of-date shared versions. + +2005-04-22 15:23 king + + * Source/: cmGetTargetPropertyCommand.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h, cmTarget.cxx, cmTarget.h: ENH: + Added cmTarget::GetBaseName and cmTarget::GetFullName methods and + removed cmLocalGenerator::GetFullTargetName and + cmLocalUnixMakefileGenerator2::GetBaseTargetName. This + functionality is more sensibly implemented in cmTarget. It is + also needed for an upcoming feature in which both the shared and + static versions of a library will be removed before one is + linked. + +2005-04-22 13:52 king + + * Source/CTest/cmCTestUpdateHandler.cxx: COMP: Commented out unused + variable until the corresponding logic is finished. + +2005-04-22 11:57 king + + * Source/kwsys/: hashtable.hxx.in, kwsys_stl_string.hxx.in: COMP: + Removed line continuation characters from #if lines to avoid + linefeed problems on cygwin. + +2005-04-22 09:44 king + + * Source/kwsys/testProcess.c: BUG: Drastically extending test5's + timeouts to get it to pass when running on a heavily-loaded + machine. + +2005-04-22 09:22 king + + * Source/kwsys/SystemTools.cxx: COMP: Fixed + assignment-in-conditional warning. + +2005-04-22 09:21 king + + * Source/kwsys/CommandLineArguments.cxx: COMP: Fixed constant + conditional warning. + +2005-04-22 09:21 king + + * Source/kwsys/ProcessWin32.c: COMP: Fixed unused parameter and + constant conditional warnings. + +2005-04-22 03:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-21 18:23 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: Reorganize a bit and + make sure to report an error if there are modified files or + conflicts + +2005-04-21 17:00 king + + * Source/CursesDialog/form/: CMakeLists.txt, form.h, + internal_stdio_core.h.in: COMP: Using a new work-around for + stdarg.h problem on SGI. + +2005-04-21 16:46 king + + * Source/kwsys/hashtable.hxx.in: BUG: Fixed hash_allocator_n size + computation. + +2005-04-21 16:46 king + + * Source/kwsys/testhash.cxx: ENH: Added include-work-around for + hashtable.hxx.in dependency. + +2005-04-21 16:05 king + + * Source/kwsys/: ProcessUNIX.c, ProcessWin32.c: BUG: Do not close + stdout/stderr pipes in parent if they are shared. + +2005-04-21 13:56 king + + * Source/kwsys/SystemTools.hxx.in: COMP: Do not do va_list hack if + there is no std:: namespace. + +2005-04-21 13:47 king + + * bootstrap, Source/kwsys/CMakeLists.txt, + Source/kwsys/Configure.hxx.in, Source/kwsys/hashtable.hxx.in, + Source/kwsys/kwsysPlatformCxxTests.cxx: COMP: Added KWSys + try-compiles KWSYS_STL_HAS_ALLOCATOR_TEMPLATE and + KWSYS_STL_HAS_ALLOCATOR_OBJECTS. Needed for more old-stl support + in the hashtable. + +2005-04-21 02:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-20 16:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-20 08:53 king + + * Source/kwsys/testProcess.c: BUG: Adjusting timeouts for tests 4 + and 5 to avoid early killing. + +2005-04-19 18:26 andy + + * Source/: CursesDialog/form/form.h, kwsys/SystemTools.hxx.in: + COMP: Attempt to fix problem with building on SGI + +2005-04-19 11:52 king + + * Source/kwsys/ProcessUNIX.c: BUG: When killing a child all the + pipe read ends should be closed. This will allow a child that is + blocking while waiting to write to the pipe to wake up and + receive the kill signal properly on cygwin. + +2005-04-19 10:52 king + + * Source/kwsys/testProcess.c: BUG: Expanded difference in timeouts + between tests 4 and 5 so that 5 does not timeout while waiting + for 4 to timeout. This should fix the intermittent failure of + test 5 on cygwin. ENH: When a mismatch is reported it now + reports what it was as well as what it should have been. + +2005-04-15 18:57 king + + * Source/kwsys/kwsysPlatformCxxTests.cxx: BUG: For some reason the + non-template allocator test compiles on VS6 even though its + allocator is a template. Adding ::size_type to be sure it + accesses a member of the allocator. + +2005-04-15 18:49 king + + * Source/kwsys/kwsysPlatformCxxTests.cxx: BUG: Fix iterator traits + test to use a real iterator instead of int*. + +2005-04-15 16:10 king + + * Source/kwsys/CMakeLists.txt: BUG: Cannot use Win32 implementation + for cygwin processes because then cygwin paths to executables + like /usr/bin/ls are not found. + +2005-04-15 16:00 king + + * bootstrap, Source/kwsys/CMakeLists.txt, + Source/kwsys/Configure.hxx.in, Source/kwsys/hash_fun.hxx.in, + Source/kwsys/hashtable.hxx.in, + Source/kwsys/kwsysPlatformCxxTests.cxx, + Source/kwsys/kwsys_cstddef.hxx.in: COMP: Added + KWSYS_CXX_HAS_CSTDDEF try-compile to KWSys to provide + kwsys/cstddef header (to get size_t for hash_fun.hxx). + +2005-04-15 15:30 king + + * Source/kwsys/: hash_map.hxx.in, hash_set.hxx.in, + hashtable.hxx.in: COMP: Replaced kwsys_stl with + @KWSYS_NAMESPACE@_stl to properly use the configured namespace. + +2005-04-15 15:18 barre + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: move + convenience method to get OS name and version from KWApp to + KWSys. + +2005-04-15 14:47 andy + + * Source/cmCTest.cxx: STYLE: Fix english + +2005-04-15 13:56 king + + * Source/kwsys/SystemTools.cxx: BUG: Added missing variable + initialization that was accidentally removed on the previsous + commit. + +2005-04-15 13:35 king + + * Source/kwsys/CMakeLists.txt: ENH: Changing kwsysProcess + implementation on Cygwin to use the Win32 implementation instead + of the UNIX implementation. This makes dealing with misbehaving + children work better. The KWSys Win32 process implementaion is + more robust than the Cygwin implementation (partly because it + doesn't have to exactly reproduce the POSIX api). + +2005-04-15 10:46 hoffman + + * Source/cmTryCompileCommand.cxx: BUG: work around for buggy Tigger + OSX systems that read two copies of the same file in a directory + +2005-04-15 09:54 king + + * bootstrap, Source/kwsys/CMakeLists.txt, + Source/kwsys/Configure.hxx.in, Source/kwsys/hash_map.hxx.in, + Source/kwsys/hash_set.hxx.in, Source/kwsys/hashtable.hxx.in, + Source/kwsys/kwsysPlatformCxxTests.cxx: ENH: Added KWSys + try-compiles KWSYS_STL_HAS_ITERATOR_TRAITS, + KWSYS_STL_HAS_ITERATOR_CATEGORY, + KWSYS_STL_HAS___ITERATOR_CATEGORY, and + KWSYS_STL_HAS_ALLOCATOR_NONTEMPLATE to get the hash table to + compile on old HP and Sun compilers. + +2005-04-15 09:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-15 09:05 king + + * Source/kwsys/hash_map.hxx.in: COMP: Replacing _Select1st with a + specialized hash_select1st that avoids requiring the stl pair to + have first_type defined. The old HP STL does not define + first_type and second_type in its pair. + +2005-04-15 08:59 king + + * bootstrap, Source/kwsys/CMakeLists.txt, + Source/kwsys/Configure.hxx.in, Source/kwsys/hashtable.hxx.in, + Source/kwsys/kwsysPlatformCxxTests.cxx: ENH: Added + KWSYS_CXX_HAS_ARGUMENT_DEPENDENT_LOOKUP try-compile to KWSys. + Needed to optionally bring hash table comparison operators into + the global namespace when argument dependent lookup is not + supported. + +2005-04-15 08:25 king + + * Source/kwsys/SystemTools.cxx: COMP: Removed extra variable + initializations to avoid Borland warnings. + +2005-04-14 04:50 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-13 23:04 king + + * Source/kwsys/: hash_map.hxx.in, hash_set.hxx.in, + hashtable.hxx.in: COMP: Remove friend templates and always use + template friends (possibly with <>). Needed to work-around Sun + CC bug. + +2005-04-13 23:03 king + + * Source/kwsys/testSystemTools.cxx: COMP: Disable MSVC debug symbol + truncation warning. + +2005-04-13 18:13 andy + + * Source/cmGeneratedFileStream.cxx: ENH: For sanity, create + directory before creating generated file stream + +2005-04-13 17:58 king + + * Source/CMakeLists.txt: BUG: The test1 executable has been removed + from kwsys. Instead using testIOS for the kwsys test. + +2005-04-13 16:58 king + + * Source/kwsys/CMakeLists.txt: STYLE: Renaming kwsys-hash test to + kwsys-testhash for consistency with other tests. + +2005-04-13 16:55 king + + * Source/kwsys/testProcess.c: COMP: Removing return value from + test6. It is an infinite loop, so the return causes warnings. + It will never return anyway. + +2005-04-13 16:47 king + + * Source/kwsys/: CMakeLists.txt, test1.cxx: ENH: Removing old + test1.c Process execution example. It is fully replaced by + testProcess. + +2005-04-13 16:46 king + + * Source/kwsys/: Base64.c, CommandLineArguments.cxx, Directory.cxx, + ProcessUNIX.c, ProcessWin32.c, RegularExpression.cxx, + SystemTools.cxx, test1.cxx, testCommandLineArguments.cxx, + testIOS.cxx, testProcess.c, testSystemTools.cxx, testhash.cxx: + COMP: Adding work-around for CMake dependency scanning + limitation. Any configured header included by KWSYS_HEADER() in + a .c or .cxx file in kwsys itself must use this hack to get + dependencies. + +2005-04-13 16:35 andy + + * Source/: cmMakefile.cxx, cmSourceFile.cxx, cmSourceFile.h: ENH: + Speedup by storing source name without last extension + +2005-04-13 16:34 andy + + * Source/cmTarget.cxx: ENH: Speedup by only getting the source once + +2005-04-13 16:25 andy + + * Source/cmSystemTools.cxx: ENH: Improve performance by using + vector of char instead of string + +2005-04-13 16:05 king + + * Source/kwsys/testSystemTools.cxx: BUG: Only do ~ test if HOME + variable is defined. + +2005-04-13 15:57 king + + * Source/kwsys/testProcess.c: BUG: Avoid error diagnostic popups on + windows for test that crashes on purpose. + +2005-04-13 15:39 king + + * bootstrap, Source/kwsys/CMakeLists.txt, + Source/kwsys/Configure.hxx.in, Source/kwsys/hashtable.hxx.in, + Source/kwsys/kwsysPlatformCxxTests.cxx: COMP: Added + KWSYS_STL_HAS_ALLOCATOR_MAX_SIZE_ARGUMENT check for non-standard + argument to stl allocator<>::max_size method. Needed for kwsys + hashtable to compile on Sun CC. + +2005-04-13 15:29 king + + * Source/kwsys/kwsysPlatformCxxTests.cxx: BUG: + allocator<>::rebind<> test should use kwsys_stl::allocator, not + std::allocator. + +2005-04-13 15:22 king + + * Source/kwsys/hashtable.hxx.in: COMP: Fix for Sun CC stl allocator + signature of allocate method. + +2005-04-13 15:04 king + + * Source/kwsys/hashtable.hxx.in: BUG: When constructing the bucket + vector type the allocator given must have been rebound to _Node* + already because GCC 3.4's vector type does not rebind it. + +2005-04-13 14:43 king + + * Source/cmTryCompileCommand.cxx: ENH: Added better error message + when TRY_COMPILE does not recognize an extension. + +2005-04-13 14:37 king + + * Source/kwsys/SystemTools.cxx: BUG: Fix GetFilenameName to not use + uninitialized search position in win32 version. + +2005-04-13 14:13 king + + * bootstrap: BUG: Added more try-compiles from kwsys. + +2005-04-13 14:13 king + + * Source/kwsys/kwsysPlatformCxxTests.cxx: BUG: Fixed member + template test to not produce a test program that crashes when it + runs. + +2005-04-13 13:59 andy + + * Source/kwsys/SystemTools.cxx: ENH: Speedup improvements + +2005-04-13 13:57 andy + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, Process.h.in, + ProcessUNIX.c, ProcessWin32.c, test1.cxx, + testCommandLineArguments.cxx, testIOS.cxx, testProcess.c, + testSystemTools.cxx, testhash.cxx: ENH: Do kwsys testing as part + of cmake testing, command line arguments are not experimental and + add simple test for systemtools + +2005-04-13 13:43 hoffman + + * Utilities/Release/cmake_release.sh: BUG: fix clean action + +2005-04-13 12:44 hoffman + + * CMakeLists.txt, Utilities/Release/cmake_release.sh: Move minor + version to 2.0.6 + +2005-04-13 09:54 hoffman + + * Source/: cmLocalVisualStudio7Generator.cxx, + kwsys/SystemTools.cxx: BUG: fix insert for 64 bit + +2005-04-13 08:08 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, hash_fun.hxx.in, + hash_map.hxx.in, hash_set.hxx.in, hashtable.hxx.in, + kwsysPlatformCxxTests.cxx, testhash.cxx: ENH: Adding SGI hash_map + and hash_set implementation ported from STL to KWSys. This also + adds try-compiles for KWSYS_STL_HAS_ALLOCATOR_REBIND, + KWSYS_CXX_HAS_FULL_SPECIALIZATION, + KWSYS_CXX_HAS_MEMBER_TEMPLATES, and + KWSYS_CXX_HAS_NULL_TEMPLATE_ARGS. + +2005-04-13 08:05 king + + * Source/kwsys/kwsys_stl.hxx.in: ENH: Added + __HPACC_USING_MULTIPLIES_IN_FUNCTIONAL fix from vtkstd. + +2005-04-13 04:39 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-12 15:40 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix Ambiguity in + insert call + +2005-04-12 15:11 hoffman + + * Source/cmLocalGenerator.cxx: BUG: add missing header for borland + +2005-04-12 13:33 king + + * Source/kwsys/SystemTools.cxx: COMP: Fixed ambiguous call to + insert method of string. + +2005-04-12 13:27 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalVisualStudio7Generator.cxx, cmMacroCommand.cxx, + cmMakefile.cxx, cmMakefile.h: ENH: performance improvements + +2005-04-12 13:26 hoffman + + * Source/cmDepends.cxx: ENH: do not collapse full path for cwd + +2005-04-12 13:26 hoffman + + * Source/cmCacheManager.cxx: ENH: make regex static so it is not + recomputed for each line of the cache + +2005-04-12 13:25 hoffman + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: + optimization of cwd and do not leak library handle + +2005-04-12 09:36 martink + + * Source/cmLocalGenerator.cxx: BUG: local gen was setting proj dir + when it shouldnt + +2005-04-12 09:35 martink + + * Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt: ENH: also + test for correct Proj dir settings + +2005-04-12 03:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-11 12:38 hoffman + + * ChangeLog.manual, Source/cmCTest.cxx: BUG: fix GetLongPathName + for all versions of windows + +2005-04-11 12:20 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: fix GetLongPathName for + WindowsNT + +2005-04-11 04:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-10 04:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-09 02:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-08 12:46 hoffman + + * Source/: cmOrderLinkDirectories.cxx, cmOrderLinkDirectories.h: + BUG: handle case insensitive library extensions on windows + +2005-04-08 08:34 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: fix build on mingw + +2005-04-08 02:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-07 17:39 hoffman + + * Source/cmakemain.cxx: BUG: move fix for -E option to branch + +2005-04-07 17:24 hoffman + + * Tests/CommandLineTest/CMakeLists.txt: merge from main tree fix + for command line test + +2005-04-07 17:22 hoffman + + * Source/cmCTest.cxx: BUG: add error checking on GetLongPath + +2005-04-07 17:20 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: if short path or long path + fails return the original input + +2005-04-07 16:58 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: check return value of + GetLongPath + +2005-04-07 16:12 hoffman + + * ChangeLog.manual, Source/cmSystemTools.cxx, + Source/cmWin32ProcessExecution.cxx, + Source/cmWin32ProcessExecution.h: Merge in fix for win32 process + stuff + +2005-04-07 16:09 hoffman + + * Modules/Platform/Darwin.cmake, Source/cmGlobalXCodeGenerator.cxx: + ENH: fix install test with xcode, the xcode generator does not + support library versioning yet + +2005-04-07 15:09 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Avoid converting + the subdirectory name to a relative path twice. + +2005-04-07 14:41 king + + * Source/cmMakefile.cxx: BUG: Do not repeat paths when trying the + lib/ to lib64/ replacement. + +2005-04-07 14:30 king + + * Source/cmMakefile.cxx: ENH: Adding automatic generation of + several 64-bit search path forms. + +2005-04-07 14:27 king + + * Modules/: CMakeDetermineJavaCompiler.cmake, FindAVIFile.cmake, + FindFLTK.cmake, FindGLUT.cmake, FindGTK.cmake, FindJNI.cmake, + FindJPEG.cmake, FindJava.cmake, FindMPEG.cmake, FindMPEG2.cmake, + FindOpenGL.cmake, FindPHP4.cmake, FindPNG.cmake, + FindPerlLibs.cmake, FindPythonLibs.cmake, FindQt.cmake, + FindRuby.cmake, FindSDL.cmake, FindSWIG.cmake, FindTCL.cmake, + FindTIFF.cmake, FindX11.cmake, FindZLIB.cmake: ENH: Removing + extra 64-bit search paths. They are now constructed + automatically from the paths listed. + +2005-04-07 13:48 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Fix rule name for + subdirectory traversal to use relative paths. This was broken by + the recent subdirectory changes. + +2005-04-07 13:46 king + + * Modules/: CMakeDetermineJavaCompiler.cmake, FindAVIFile.cmake, + FindFLTK.cmake, FindGLUT.cmake, FindGTK.cmake, FindJNI.cmake, + FindJPEG.cmake, FindJava.cmake, FindMPEG.cmake, FindMPEG2.cmake, + FindOpenGL.cmake, FindPHP4.cmake, FindPNG.cmake, + FindPerlLibs.cmake, FindPythonLibs.cmake, FindQt.cmake, + FindRuby.cmake, FindSDL.cmake, FindSWIG.cmake, FindTCL.cmake, + FindTIFF.cmake, FindX11.cmake, FindZLIB.cmake: ENH: Adding + support for 64-bit library paths. Contributed by Peter Vanroose. + +2005-04-07 13:03 hoffman + + * Source/: CTest/cmCTestBuildHandler.cxx, kwsys/SystemTools.cxx, + kwsys/SystemTools.hxx.in: BUG: fix for bug 1717 incorrect path + sent to dart server + +2005-04-07 12:44 hoffman + + * Source/cmCTest.cxx: BUG: remove debug statement + +2005-04-07 12:12 hoffman + + * ChangeLog.manual, Source/cmSystemTools.cxx, + Source/cmSystemTools.h: move fix for relative paths from main + tree + +2005-04-07 12:11 hoffman + + * ChangeLog.manual, Source/cmCTest.cxx: BUG: fix for bug 1717 use + the correct path for Dart server on warnings and errors + +2005-04-07 10:37 hoffman + + * ChangeLog.manual, Source/cmInstallProgramsCommand.cxx, + Source/cmInstallProgramsCommand.h: move from main tree + +2005-04-07 02:31 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-06 16:53 king + + * Modules/Dart.cmake: STYLE: Fixed spelling of "memmory". + +2005-04-06 16:15 king + + * Source/cmStandardIncludes.h: BUG: Avoid duplicate definition by + using cmsys_STL_STRING_NEQ_CHAR_DEFINED and + cmsys_STL_STRING_NO_NEQ_CHAR. + +2005-04-06 16:14 king + + * Source/kwsys/kwsys_stl_string.hxx.in: ENH: Added proper + namespaced version of KWSYS_STL_STRING_ISTREAM_DEFINED, + KWSYS_STL_STRING_OSTREAM_DEFINED, and + _STL_STRING_NEQ_CHAR_DEFINED macros. + +2005-04-06 15:06 king + + * Modules/Platform/Darwin-xlc.cmake, Modules/Platform/Darwin.cmake, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.cxx, + Tests/Fortran/CMakeLists.txt, + Tests/MakeClean/ToClean/CMakeLists.txt: ENH: Removed + CMAKE_GENERATOR_NEW now that the old unix makefile generator is + never used. + +2005-04-06 13:34 king + + * bootstrap: BUG: The bootstrap script should perform the + KWSYS_STL_STRING_HAVE_NEQ_CHAR test for kwsys. + +2005-04-06 11:56 hoffman + + * Source/cmMakefile.cxx: ENH: better fix for 64 bit, add 64 to the + name of all directories in the search path + +2005-04-06 10:59 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: allow sub projects to use + targets that are not part of the sub-project + +2005-04-06 09:47 hoffman + + * Source/kwsys/SystemTools.cxx: remove cerr stuff + +2005-04-06 09:44 hoffman + + * Source/kwsys/SystemTools.cxx: Fix bug in != stuff + +2005-04-06 04:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-05 21:10 hoffman + + * Source/kwsys/SystemTools.cxx: COMP: hack fix for old sgi until + bootstrap is fixed + +2005-04-05 17:06 hoffman + + * Modules/CMakeTestCCompiler.cmake, Source/cmMakefile.cxx: BUG: try + to address Bug 1673 . + +2005-04-05 16:24 hoffman + + * Modules/FindOpenGL.cmake: Fix for bug Bug #1287 - cmake use + MesaGL by default instead of libGL - Return to bug list + +2005-04-05 14:48 hoffman + + * Source/cmAuxSourceDirectoryCommand.cxx: BUG: fix for bug 1636 add + extensions to AUX_SOURCE_DIRECTORY files + +2005-04-05 13:39 hoffman + + * ChangeLog.manual, Modules/FindDCMTK.cmake: Move from main tree, + fix for 1652 + +2005-04-05 13:37 hoffman + + * Modules/FindDCMTK.cmake: BUG: fix for bug 1652 + +2005-04-05 13:30 hoffman + + * ChangeLog.manual, Source/cmLocalVisualStudio7Generator.cxx: fix + on branch for 1660 language NONE working + +2005-04-05 13:14 hoffman + + * Source/cmGlobalGenerator.cxx: BUG: fix for bug 1660 + +2005-04-05 12:54 hoffman + + * ChangeLog.manual: fixes on branch + +2005-04-05 12:52 hoffman + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: BUG: fix for bug 1702 better + error on bad GUID + +2005-04-05 12:51 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: move fix from main + tree for bug 1680 + +2005-04-05 11:23 hoffman + + * Source/cmake.cxx: BUG: fix for bug 1700 + +2005-04-05 10:22 hoffman + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: BUG: fix for bug 1702, better + error message for GUID missing + +2005-04-05 08:25 king + + * Source/: cmGeneratedFileStream.cxx, cmGeneratedFileStream.h: ENH: + Added Close method and updated Open method to allow streams to be + reused. + +2005-04-05 04:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-04 17:01 hoffman + + * ChangeLog.manual, Modules/UseSWIG.cmake, + Source/cmGetDirectoryPropertyCommand.cxx: FIX: swig fixes from + main tree + +2005-04-04 16:55 hoffman + + * Modules/UseSWIG.cmake: ENH: make sure source flags don't have to + be set + +2005-04-04 16:43 hoffman + + * Source/cmGetDirectoryPropertyCommand.cxx: ENH: get directory + property should return an empty variable if it is not set, not + just have an error + +2005-04-04 16:13 hoffman + + * Modules/UseSWIG.cmake: ENH: fix for bug 1304 + +2005-04-04 15:55 hoffman + + * ChangeLog.manual, Modules/UseSWIG.cmake: ENH: move changes from + main tree + +2005-04-04 15:52 hoffman + + * ChangeLog.manual, Source/cmCTest.cxx: ENH: move from main tree + timezone fix + +2005-04-04 15:51 hoffman + + * Modules/UseSWIG.cmake: FIX: fix for bug 1730 + +2005-04-04 15:41 hoffman + + * ChangeLog.manual, Source/cmFileCommand.cxx, + Source/cmWriteFileCommand.cxx, Source/kwsys/SystemTools.cxx: ENH: + move fix for read only file configure to branch + +2005-04-04 12:22 andy + + * Modules/Dart.cmake, Source/cmAddTestCommand.cxx, + Source/cmEnableTestingCommand.cxx, Source/cmGlobalGenerator.cxx: + BUG: By default disable new files. + +2005-04-04 03:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-03 03:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-02 02:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-04-01 15:48 andy + + * Source/: cmAddTestCommand.cxx, cmEnableTestingCommand.cxx, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmMakefile.cxx, cmMakefile.h: + ENH: More ctest changes and move SetupTest to superclass + +2005-04-01 15:45 andy + + * Modules/Dart.cmake, Source/cmCTest.cxx: ENH: Rename the + DartConfiguration.tcl to CTestConfiguration.ini + +2005-04-01 14:57 andy + + * Source/: cmAddTestCommand.cxx, cmCTest.cxx, cmCTest.h, + cmEnableTestingCommand.cxx, ctest.cxx, + CTest/cmCTestTestHandler.cxx: ENH: Start adding support for CTest + testfiles + +2005-04-01 02:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-31 18:03 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: When generating + the name of the custom rule file the character : should be + replaced with an underscore because it might be a non-file-name + part of a path. + +2005-03-31 11:57 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: BUG: fix ITK build with xcode, + as long as you build it in little parts, this fixes the headermap + problem + +2005-03-31 10:00 martink + + * CTestCustom.ctest.in: ENH: shut up warning in 3rd party packages + +2005-03-31 02:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-30 16:11 king + + * Source/cmCTest.cxx: BUG: It is possible for the nightly start + time to be over 24 hours in the future which requires two days to + be subtracted. Using a while loop to make sure enough days are + added or subtracted. It should never be able to iterate more + than twice. + +2005-03-30 15:41 hoffman + + * ChangeLog.manual, Source/cmLocalVisualStudio7Generator.cxx: FIX: + Merge from main tree: fix for VS 2005 beta + +2005-03-30 15:27 king + + * Source/kwsys/CMakeLists.txt: BUG: Test for stl stirng operator!= + for char* needs to know result of KWSYS_STL_HAVE_STD. + +2005-03-30 02:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-29 15:34 martink + + * Source/: cmGlobalGenerator.cxx, cmMakefile.cxx, cmMakefile.h: + ENH: removed GetParentProjects + +2005-03-29 15:33 martink + + * Tests/OutOfSource/SubDir/CMakeLists.txt: ENH: better test for + subdirs + +2005-03-29 15:26 henderson + + * Source/kwsys/: CMakeLists.txt, SharedForward.h.in: ENH: copying + Brad's installation changes from the main tree to the ParaView + 2.0 branch + +2005-03-29 10:34 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: BUG: Fix dependencies of custom + commands that are relative paths to files or other custom command + outputs. + +2005-03-29 10:10 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, + kwsysPlatformCxxTests.cxx, kwsys_stl_string.hxx.in: ENH: Added + operator!= for stl string and char* when the system does not + provide one. + +2005-03-29 08:20 king + + * bootstrap, Source/kwsys/CMakeLists.txt, + Source/kwsys/Configure.hxx.in, + Source/kwsys/kwsysPlatformCxxTests.cmake, + Source/kwsys/kwsysPlatformCxxTests.cxx, + Source/kwsys/kwsys_stl.h.in, Source/kwsys/kwsys_stl.hxx.in, + Source/kwsys/kwsys_stl_string.hxx.in: ENH: Added istream and + ostream operators for stl string in KWSys when using old streams + that do not provide them. + +2005-03-29 08:09 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: + SplitPath now supports slashes in both directions in the input + path but still produces forward slashes in the root component. + +2005-03-29 02:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-28 18:00 andy + + * bootstrap: BUG: The is replaced by cvs... This is safer anyway + +2005-03-28 17:46 barre + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: move + EstimateFormatLength to kwsys + +2005-03-28 02:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-27 02:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-26 09:58 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, + kwsysPlatformCxxTests.cmake, kwsysPlatformCxxTests.cxx, + kwsys_stl.h.in, kwsys_stl.hxx.in, kwsys_stl_string.hxx.in: COMP: + Removing stl string io operators change until the CMake bootstrap + script can be fixed. + +2005-03-26 08:19 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, + kwsysPlatformCxxTests.cmake, kwsysPlatformCxxTests.cxx, + kwsys_stl.h.in, kwsys_stl.hxx.in, kwsys_stl_string.hxx.in: ENH: + Added istream and ostream operators for stl string when using old + streams that do not provide them. + +2005-03-26 02:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-25 18:55 andy + + * Source/CMakeLists.txt: ENH: When in-source build, do not do + bootstrap test + +2005-03-25 18:46 andy + + * Source/CMakeLists.txt: ENH: Remove curl build testing + +2005-03-25 16:40 king + + * Source/cmAddSubDirectoryCommand.h: ENH: Clarified documentation + of the command. + +2005-03-25 14:23 andy + + * bootstrap: ENH: For development versions report version when + doing bootstrap + +2005-03-25 08:41 king + + * Source/kwsys/: CMakeLists.txt, SharedForward.h.in: ENH: Adding + SharedForward C header to help create forwarding executables on + UNIX systems that configure the shared library runtime search + path and then replace themselves with the real executable. This + is useful to create binary distributions that work from any + extracted location even with shared libraries. + +2005-03-25 08:09 king + + * Source/kwsys/SystemTools.cxx: ENH: Re-implemented + CollapseFullPath to not need to change directories. Operation is + now fully string based. + +2005-03-25 08:05 king + + * Source/cmCTest.cxx: BUG: Adjusted GetNightlyTime computation to + not depend on time_t being a signed type. + +2005-03-25 02:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-24 02:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-23 08:20 hoffman + + * Source/cmBuildCommand.cxx: fix for xcode + +2005-03-23 02:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-22 14:27 hoffman + + * Source/cmDynamicLoader.h: FIX: fix bug 1690 + +2005-03-22 14:00 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: try to handle more source + file types + +2005-03-22 13:32 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: just use the file name + +2005-03-22 11:33 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: make sure project map is + cleared each time. + +2005-03-22 10:29 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: use better names for + files + +2005-03-22 10:23 king + + * Source/cmMakefile.cxx: BUG: Initializing from parent should copy + link directories as well. + +2005-03-22 08:36 king + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomTargetCommand.cxx: ENH: Added check for invalid + characters in output name. + +2005-03-22 07:27 hoffman + + * Source/cmLocalGenerator.cxx: ENH: remove commented code + +2005-03-22 07:26 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: fix adding of rc + files + +2005-03-22 02:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-21 02:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-20 02:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-19 09:05 martink + + * Source/cmGlobalGenerator.cxx: COMP: fix warning + +2005-03-19 02:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-18 11:29 martink + + * Source/cmMacroCommand.cxx: COMP: fix warning + +2005-03-18 10:58 martink + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: ENH: remove cmSubDirectory from + unused files? + +2005-03-18 10:41 martink + + * Source/cmAddDefinitionsCommand.h, Source/cmAddTestCommand.cxx, + Source/cmBootstrapCommands.cxx, Source/cmBuildCommand.h, + Source/cmBuildNameCommand.h, Source/cmCMakeMinimumRequired.h, + Source/cmCommand.h, Source/cmCreateTestSourceList.h, + Source/cmElseCommand.h, Source/cmEnableLanguageCommand.h, + Source/cmEnableTestingCommand.cxx, + Source/cmEnableTestingCommand.h, Source/cmEndForEachCommand.h, + Source/cmEndIfCommand.h, Source/cmEndWhileCommand.h, + Source/cmFileCommand.h, Source/cmFindFileCommand.h, + Source/cmFindLibraryCommand.h, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h, Source/cmFindPathCommand.h, + Source/cmFindProgramCommand.h, Source/cmForEachCommand.h, + Source/cmGetFilenameComponentCommand.h, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmIfCommand.h, Source/cmIncludeCommand.h, + Source/cmIncludeDirectoryCommand.h, + Source/cmIncludeRegularExpressionCommand.h, + Source/cmLinkDirectoriesCommand.h, + Source/cmLinkLibrariesCommand.h, Source/cmLoadCacheCommand.h, + Source/cmLoadCommandCommand.cxx, Source/cmLoadCommandCommand.h, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalKdevelopGenerator.cxx, + Source/cmLocalKdevelopGenerator.h, + Source/cmLocalUnixMakefileGenerator2.cxx, + Source/cmLocalUnixMakefileGenerator2.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio6Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmMacroCommand.cxx, Source/cmMacroCommand.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmMarkAsAdvancedCommand.h, Source/cmOptionCommand.h, + Source/cmProjectCommand.h, Source/cmRemoveCommand.h, + Source/cmRemoveDefinitionsCommand.h, + Source/cmSeparateArgumentsCommand.h, Source/cmSetCommand.h, + Source/cmSetDirectoryPropertiesCommand.h, + Source/cmSiteNameCommand.h, Source/cmSourceGroupCommand.h, + Source/cmStringCommand.h, Source/cmSubdirCommand.cxx, + Source/cmUtilitySourceCommand.h, Source/cmWhileCommand.h, + Tests/OutOfSource/CMakeLists.txt, + Tests/OutOfSource/SubDir/CMakeLists.txt: ENH: big change that + includes immediate subdir support, removing the notion of + inherited commands, makefiles no longer read in the parent + makefiles but instead inherit thier parent makefiles current + settings + +2005-03-18 10:39 martink + + * Source/: cmAddSubDirectoryCommand.cxx, + cmAddSubDirectoryCommand.h: ENH: added immediate subdirectory + command + +2005-03-18 09:03 martink + + * Source/cmSubDirectory.h: ENH: bad idea + +2005-03-18 02:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-17 18:37 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Need to collapse + full paths before depending on them to remove ./ and ../ to make + sure target names match. + +2005-03-17 15:35 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: add source groups xcode + +2005-03-17 13:06 king + + * Source/kwsys/SystemTools.cxx: COMP: Using proper __QNX__ + preprocessor test. + +2005-03-17 02:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-16 13:26 andy + + * CMakeLists.txt, Utilities/cmexpat/CMakeLists.txt, + Utilities/cmzlib/CMakeLists.txt: COMP: More cleanups + +2005-03-16 12:54 andy + + * Source/CMakeLists.txt: ENH: Make sure to use internal zlib + +2005-03-16 12:54 andy + + * Source/CTest/cmCTestSubmit.cxx: ENH: Cleanup of the output + +2005-03-16 10:49 king + + * Source/kwsys/SystemTools.cxx: COMP: Only include malloc.h on QNX. + +2005-03-16 10:15 barre + + * Source/kwsys/SystemTools.cxx: FIX: that was wrong + +2005-03-16 09:55 king + + * Source/CMakeLists.txt, Tests/Wrapping/CMakeLists.txt: BUG: Do not + add Qt wrapping test unless QT is found and QT_UIC_EXECUTABLE is + found. + +2005-03-16 09:41 king + + * Source/kwsys/SystemTools.cxx: COMP: Need malloc.h for malloc/free + on QNX. + +2005-03-16 02:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-15 11:22 martink + + * Source/cmEnableTestingCommand.cxx: ENH: only support rel paths + for now + +2005-03-15 08:14 king + + * Source/: cmListFileLexer.c, cmListFileLexer.in.l: COMP: Defining + YY_NO_INPUT to remove compilation of unused yyinput function. It + was producing a warning about unreachable code. + +2005-03-15 08:13 king + + * Source/cmCacheManager.cxx: COMP: Removed warning due to unsigned + enum type. + +2005-03-15 02:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-14 13:23 hoffman + + * Source/: CMakeLists.txt, cmake.cxx: ENH: make xcode compile only + on apple + +2005-03-14 12:25 martink + + * bootstrap: ENH: oops forgot to chek this in + +2005-03-14 12:18 hoffman + + * Modules/Platform/QNX.cmake: ENH: try to fix rpath on qnx + +2005-03-14 11:28 martink + + * Source/: CMakeLists.txt, cmEnableTestingCommand.cxx, + cmGlobalGenerator.cxx, cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h, cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h, + cmLocalUnixMakefileGenerator2.cxx, cmMakefile.cxx, cmMakefile.h, + cmSubdirCommand.cxx, cmGlobalVisualStudio6Generator.cxx: ENH: add + support for out of source source + +2005-03-14 11:26 martink + + * Tests/OutOfSource/: CMakeLists.txt, + OutOfSourceSubdir/CMakeLists.txt, OutOfSourceSubdir/simple.cxx, + SubDir/CMakeLists.txt: ENH: added new test for out of dir source + trees + +2005-03-14 09:23 martink + + * Source/cmSubDirectory.h: ENH: added new structure to hold + subdirectories + +2005-03-14 08:15 king + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y: + COMP: Added __INTEL_COMPILER to test for yyerrorlab warning + suppression. + +2005-03-14 03:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-13 03:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-12 02:35 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-11 13:12 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: try to see if + there is still a problem + +2005-03-11 12:56 king + + * Source/CTest/cmCTestScriptHandler.cxx: BUG: Do not report an + error removing the binary directory if it doesn't exist. + +2005-03-11 11:48 barre + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: add last + two small funcs from vtkString. Done removing deps + +2005-03-11 10:53 andy + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + FIX: fix crashing test SubDir for xcode + +2005-03-11 10:43 barre + + * Source/kwsys/: SystemTools.hxx.in, SystemTools.cxx: ENH: update + documentation, sort methods into categories + +2005-03-11 10:29 hoffman + + * Source/ctest.cxx: FIX: fix output of passing tests + +2005-03-11 10:15 king + + * Modules/Platform/QNX.cmake: ENH: Initial attempt at QNX support. + Submitted by Tim Arney. + +2005-03-11 10:07 king + + * Source/kwsys/: CommandLineArguments.cxx, RegularExpression.cxx, + SystemTools.cxx: COMP: Added missing include of string.h. + +2005-03-11 10:03 king + + * Source/cmStandardIncludes.h: COMP: Adding stdlib.h to standard + includes. We are using functions from it all over the place + assuming it has been included here. + +2005-03-11 09:31 barre + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: COMP: fix + some warnings + +2005-03-11 08:38 martink + + * Source/cmake.cxx: COMP: fix a warning + +2005-03-11 02:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-10 17:49 barre + + * Source/kwsys/SystemTools.cxx: ENH: remove deps to vtkString by + using KWSys (a handful of functions have been moved to KWSys) + +2005-03-10 17:44 barre + + * Source/kwsys/: SystemTools.hxx.in, SystemTools.cxx: ENH: remove + deps to vtkString by using KWSys (a handful of functions have + been moved to KWSys) + +2005-03-10 17:34 barre + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: remove + deps to vtkString by using KWSys (a handful of functions have + been moved to KWSys) + +2005-03-10 13:39 martink + + * Source/: cmExportLibraryDependencies.cxx, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmMakefile.cxx, cmMakefile.h, + cmTryCompileCommand.cxx, cmTryRunCommand.cxx, cmake.cxx, cmake.h: + ENH: cleanup by removing all the olf local generate junk that i + not longer needed + +2005-03-10 12:50 barre + + * Source/kwsys/: SystemTools.hxx.in, SystemTools.cxx: ENH: move + function from vtkKWDirectoryUtilities and vtkString to + SystemTools + +2005-03-10 10:04 martink + + * Source/ctest.cxx: ENH: better docs + +2005-03-10 02:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-09 18:06 andy + + * Source/CTest/cmCTestSubmit.cxx: BUG: xmlrpc does the base64 + encoding + +2005-03-09 15:51 andy + + * bootstrap: BUG: Remove awk, remove problems and add full spaces + in the path support + +2005-03-09 02:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-08 18:38 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Removing + jump-and-build ordering change until we can prevent extra jumps + from always occuring. + +2005-03-08 17:27 king + + * bootstrap: BUG: Fix for spaces in the path when constructing + cmBootstrapCommands dependencies. + +2005-03-08 16:01 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ENH: Removing ... + ellipsis from end of echo lines. It is just clutter. + +2005-03-08 15:55 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ENH: Adding extra + dependencies to jump-and-build rules that force a single ordering + to prevent parallel jumps. This avoids problems with two jumps + reaching the same target in parallel which happened occasionally + with the old generator. + +2005-03-08 15:35 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ENH: Removed "Checking + build system in ..." message. It is always paired with an + Entering or Jumping message and is not necessary. + +2005-03-08 13:43 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added option + CMAKE_SKIP_RULE_DEPENDENCY to skip making build rules depend on + their own rule files. It can be added to the cache by the user + or added by the project in a list file. + +2005-03-08 11:37 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Only add leading + ./ to custom command executable if the command is really + specified as one in the current directory. + +2005-03-08 11:25 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: When a custom + command's executable is in the current directory the relative + path to it needs a "./". + +2005-03-08 09:25 king + + * Source/: cmLocalKdevelopGenerator.cxx, + cmLocalKdevelopGenerator.h: ENH: Updating Kdevelop generator to + use the new makefile generator. The old one no longer works + anyway because local generates are now disabled. + +2005-03-08 09:24 king + + * Source/cmDepends.cxx: BUG: Dependency scans and checks must + always set the current working directory to the directory + containing the Makefile. + +2005-03-08 02:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-07 15:19 king + + * Source/cmDependsFortran.cxx: BUG: When checking for upper-case + modules do not use an upper-case .MOD extension. + +2005-03-07 13:51 andy + + * Source/: cmFileCommand.cxx, cmWriteFileCommand.cxx: BUG: Handle + restrictive permissions + +2005-03-07 12:14 andy + + * Source/CTest/cmCTestSubmit.cxx: COMP: Remove warning + +2005-03-07 12:11 andy + + * bootstrap: ENH: Add proper dependencies for cmBootstrapCommands + +2005-03-07 02:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-06 08:51 andy + + * DartConfig.cmake, Source/cmCTest.cxx, + Source/CTest/cmCTestSubmit.cxx: COMP: Remove warning and fix the + logic + +2005-03-06 08:17 andy + + * Source/CMakeLists.txt: COMP: Do not build cmw9xcom on Cygwin + +2005-03-06 02:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-05 08:25 andy + + * DartConfig.cmake: ENH: Work on xmlrpc submit + +2005-03-05 08:12 andy + + * Source/CTest/cmCTestSubmit.cxx: COMP: Remove compile error + +2005-03-05 02:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-04 17:11 andy + + * Source/: CTest/cmCTestSubmit.cxx, CTest/cmCTestSubmit.h, + cmCTest.cxx: ENH: Start working on xmlrpc code. This code does + not work, but it will at least test compiling with cmxmlrpc + +2005-03-04 14:27 andy + + * CMakeLists.txt, Source/CMakeLists.txt: ENH: More cleanups and + start linking ctest to XML-RPC + +2005-03-04 11:37 andy + + * Source/CMakeLists.txt, CMakeLists.txt, Utilities/CMakeLists.txt: + ENH: More cleanups and reorganization + +2005-03-04 10:05 andy + + * CMakeLists.txt, Source/CMakeLists.txt: ENH: Cleanups + +2005-03-04 10:04 andy + + * Source/CTest/CMakeLists.txt: BUG: This cmakelists file is not + used any more + +2005-03-04 10:03 andy + + * bootstrap: BUG: Handle when initial cmake fails + +2005-03-04 02:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-03 22:35 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalXCodeGenerator.cxx: ENH: fix for finding the correct + target in the current project + +2005-03-03 19:42 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: make it pass + anyway so I can see debug info + +2005-03-03 18:46 hoffman + + * Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: try and + debug the failed test on the continuous + +2005-03-03 18:15 hoffman + + * Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: try + number two with topological sort + +2005-03-03 16:53 king + + * Source/: cmDependsFortran.cxx, cmDependsFortran.h, cmake.cxx: + ENH: Implementing explicit cmake_copy_f90_mod callback to copy + Fortran90 modules to the stamp files more reliably. This removes + the temporary hack for per-platform upper-/lower- case. + +2005-03-03 15:22 king + + * Source/: cmDependsC.cxx, cmDependsC.h: BUG: Fixed scanning to + account for double-quote includes. + +2005-03-03 12:00 king + + * Source/kwsys/kwsys_ios_sstream.h.in: ENH: Added + "ostringstream(const kwsys_stl::string& s)" and "void str(const + kwsys_stl::string& s)" compatibility methods. + +2005-03-03 08:46 martink + + * Source/: CMakeLists.txt, cmake.cxx: ENH: remove code warrior + classes + +2005-03-03 02:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-02 18:56 hoffman + + * Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: reverse + last changes to avoid dashboard failures + +2005-03-02 17:49 hoffman + + * Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: fix + library ordering stuff to use a topological sort + +2005-03-02 11:48 andy + + * Source/cmOrderLinkDirectories.cxx: BUG: Attempt to fix sorting + stability using more deterministic compare function + +2005-03-02 10:58 martink + + * Source/: cmGlobalCodeWarriorGenerator.cxx, + cmGlobalCodeWarriorGenerator.h, cmLocalCodeWarriorGenerator.cxx, + cmLocalCodeWarriorGenerator.h: ENH: now use xcode instead + +2005-03-02 09:34 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Pay attention to + ForceUnixPaths setting in cmSystemTools for + ConvertToQuotedOutputPath and for dependency scanning. + +2005-03-02 09:02 king + + * Source/cmDependsFortran.cxx: BUG: We need to test the compiler + for the case of the mod file names. For now this is a temporary + hack to use upper case on SGI and lower case on Sun. + +2005-03-02 08:51 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: SGI make can + support suffixes only up to 32 characters. Renaming + .hpux_make_must_have_suffixes_list to + .hpux_make_needs_suffix_list. + +2005-03-02 02:30 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-03-01 17:32 hoffman + + * Source/cmOrderLinkDirectories.cxx: FIX: switch to stable_sort to + avoid crash + +2005-03-01 14:30 andy + + * Modules/Dart.cmake: BUG: Change error to warning + +2005-03-01 14:21 andy + + * CMakeLists.txt: COMP: CMake should be build static. Also + propagate build_shared_libs to curl + +2005-03-01 13:36 king + + * Source/cmDependsFortran.cxx: BUG: Module file names are case + insensitive. Always use lower case no matter the real name of + the module. + +2005-03-01 13:32 king + + * Source/cmDependsJava.cxx: COMP: Removed unused parameter warning. + +2005-03-01 12:27 king + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.cxx: ENH: Enabling + cmLocalUnixMakefileGenerator2 by default. + +2005-03-01 12:26 king + + * Modules/Platform/: Darwin-xlc.cmake, Darwin.cmake: ENH: Adding + support for shared library versioning using the -install_name + option on the OSX linker. This is actually needed to support + relative -o paths which are used by + cmLocalUnixMakefileGenerator2. + +2005-03-01 12:26 king + + * bootstrap, Source/cmGlobalUnixMakefileGenerator.cxx, + Source/cmake.cxx: ENH: Enabling cmLocalUnixMakefileGenerator2 + (new makefile generator) by default. + +2005-03-01 12:20 king + + * Source/: cmDependsJava.cxx, cmDependsJava.h, CMakeLists.txt, + cmLocalUnixMakefileGenerator2.cxx: ENH: Framework for java + dependency scanner. Right now it does nothing but always reports + success. This is enough to get the Java test to pass with the + new generator because the old implementation did not do + dependencies anyway. + +2005-03-01 12:13 king + + * Source/: cmInstallProgramsCommand.cxx, + cmInstallProgramsCommand.h: BUG: Added FILES mode to + INSTALL_PROGRAMS command to make the single argument case + unambiguous. + +2005-03-01 11:25 andy + + * Source/cmGlobalXCodeGenerator.cxx: FIX: fix spaces in paths + +2005-03-01 10:54 andy + + * CMakeLists.txt: ENH: Enable XMLRPC... please do not break + everywhere... + +2005-03-01 10:05 king + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: Replaced previous + fix with an implementation of properly formatting the custom + build code in the generated file. + +2005-03-01 02:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-28 17:12 andy + + * CMakeLists.txt: ENH: Add the rest of xmlrpc stuff + +2005-02-28 16:11 martink + + * Source/cmLocalVisualStudio6Generator.cxx: FIXTHIS THING: fix the + bug + +2005-02-28 15:30 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: fix typeo + +2005-02-28 15:07 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: add re run cmake if inputs change + +2005-02-28 02:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-27 17:36 andy + + * Source/kwsys/ProcessUNIX.c: COMP: Remove warnings about shadow + variables + +2005-02-27 17:33 andy + + * Utilities/cmexpat/xmlparse.c: COMP: Remove compile warning about + shadow variables + +2005-02-27 03:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-26 16:58 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: COMP: remove some warnings + +2005-02-26 03:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-25 20:46 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: COMP: fix warning + +2005-02-25 17:45 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmOrderLinkDirectories.cxx, + cmOrderLinkDirectories.h: ENH: clean up and use order link + directories + +2005-02-25 14:21 hoffman + + * Utilities/cmexpat/xmltok_impl.c: COMP: fix warnings + +2005-02-25 14:20 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: make sure header files + are in the header file group + +2005-02-25 11:23 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Replaced + OutputEcho/pre-echo/post-echo with AppendEcho. This allows for + more flexible echo specifications and better preserves echo text. + +2005-02-25 09:31 king + + * Tests/: Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, Complex/Library/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt: ENH: Added full + pre-build/pre-link/post-build testing for both library and + executable targets. + +2005-02-25 09:19 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ENH: Adding inclusion + of pre-build and pre-link commands when building executables and + libraries. + +2005-02-25 09:14 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: + ConvertToQuotedOutputPath must replace slashes in root component + on windows. + +2005-02-25 09:06 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added + ConvertToQuotedOutputPath method and used it to properly generate + external object references with spaces in the path. + +2005-02-25 03:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-24 19:32 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Removed instances + of calling ConvertToRelativeOutputPath twice on the same path. + +2005-02-24 19:28 king + + * Source/cmGlobalGenerator.cxx: BUG: Need to configure relative + path support for LocalGenerate to support old makefile generator. + +2005-02-24 18:35 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: ENH: Converted some + ConvertToRelativeOutputPath calls to + ConvertToOptionallyRelativeOutputPath in preparation for making + ConvertToRelativeOutputPath always convert. Some of these might + be able to be switched back but we will first have to test what + paths can be relative in the generate VS project files. + +2005-02-24 17:46 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h, + kwsys/SystemTools.cxx: ENH: fix relative paths in xcode + +2005-02-24 16:25 king + + * Source/cmLocalGenerator.cxx: ENH: Converted some + ConvertToRelativeOutputPath calls to + ConvertToOptionallyRelativeOutputPath in preparation for making + ConvertToRelativeOutputPath not check CMAKE_USE_RELATIVE_PATHS. + +2005-02-24 16:19 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: The path to the + source file in a compile line should be made relative only when + CMAKE_USE_RELATIVE_PATHS is on. + +2005-02-24 16:04 king + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Merged implementations of + ConvertToRelative*Path methods. The main ConvertToRelativePath + method is now in cmGlobalGenerator. It converts paths only if + they are at least inside the deepest common directory between the + top-level source and build trees. Each cmLocalGenerator instance + calls this global method with its own output directory as the + "local" argument from which paths are relative. Added separate + ConvertToOptionallyRelative path that pays attention to the + CMAKE_USE_RELATIVE_PATHS option. + +2005-02-24 15:36 andy + + * Source/cmOrderLinkDirectories.cxx: COMP: remove compiler warning + +2005-02-24 15:34 andy + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: fix spaces in paths problems + +2005-02-24 14:47 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Added + ComparePath method. + +2005-02-24 14:27 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: ENH: remove + unused code + +2005-02-24 13:45 king + + * Source/cmMakefile.cxx: COMP: HP compiler does not like + initializing a const std::string & with a const char* (which + requires the reference to be bound to a temporary with the scope + of the reference). + +2005-02-24 13:26 hoffman + + * Source/cmOrderLinkDirectories.cxx: ENH: clean up and remove some + debug code + +2005-02-24 13:16 hoffman + + * bootstrap, Source/CMakeLists.txt, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, Source/cmOrderLinkDirectories.cxx, + Source/cmOrderLinkDirectories.h: ENH: add a new library path + ordering algorithm to make sure -L paths will pick the correct + libraries if possible + +2005-02-24 12:44 king + + * Source/cmDependsC.cxx: BUG: Avoid putting a leading ./ on the + dependency names. + +2005-02-24 12:19 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: BUG: Using a better technique to + produce the rule file name for a custom command when the output + is not in the current directory or lower. + +2005-02-24 11:46 king + + * Modules/Platform/CMakeLists.txt: BUG: Added installation of .in + files as well as .cmake files. + +2005-02-24 10:32 king + + * Source/cmGlobalGenerator.cxx: BUG: Only use the existing + CMake(lang)Compiler.cmake file from the build tree if it was + generated by the same version of CMake. + +2005-02-24 10:31 king + + * Source/cmMakefile.cxx: BUG: Fixed GetCacheMinorVersion to not + always return 0. + +2005-02-24 10:14 andy + + * Source/cmCommands.cxx: COMP: Remove compile warning in bootstrap + stage + +2005-02-24 09:21 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Do not crash when + the link language for a target is not known. + +2005-02-24 09:20 king + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: Need proper + newline argument to ConstructScript call. + +2005-02-24 03:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-23 20:41 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: remove output path stuff + +2005-02-23 14:36 martink + + * Source/cmGlobalVisualStudio6Generator.cxx: BUG: fix for empty + target or config strings in the Build method + +2005-02-23 13:50 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: FIX: fix to make this work + with new custom command stuff + +2005-02-23 03:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-22 15:31 king + + * Source/cmProjectCommand.cxx: ENH: Added CMAKE_PROJECT_NAME + variable to play the role of CMAKE_SOURCE_DIR and + CMAKE_BINARY_DIR for the top-level project name. + +2005-02-22 15:22 king + + * Modules/CMakeGenericSystem.cmake, Source/cmLocalGenerator.cxx: + ENH: Added better default install location for windows builds. + The previous default /usr/local did not make much sense. Now + "%SystemDrive%/Program Files/PROJECT_NAME" is used, which is the + windows equivalent to /usr/local. + +2005-02-22 14:52 king + + * Source/: cmLoadCommandCommand.cxx, cmLoadCommandCommand.h: ENH: + LOAD_COMMAND command will now set a variable called + CMAKE_LOADED_COMMAND_ to the full path of the + loaded module if loading was successful. Otherwise the variable + is not set (will evaluate to empty string). This is useful both + in testing whether loading worked and for installing loaded + command modules. + +2005-02-22 12:34 martink + + * Source/cmGlobalGenerator.cxx: COMP: fix warning + +2005-02-22 12:10 king + + * Source/cmAddCustomCommandCommand.h: BUG: Fixed formatting of + generated documentation. + +2005-02-22 12:04 king + + * Tests/CustomCommand/CMakeLists.txt: ENH: Added test for multiple + commands in a custom command. + +2005-02-22 10:43 martink + + * Source/CMakeLists.txt: BUG: fix test execution + +2005-02-22 10:42 martink + + * Source/cmCTest.cxx: BUG: better error handling + +2005-02-22 10:32 king + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomCommandCommand.h, cmAddCustomTargetCommand.cxx, + cmAddCustomTargetCommand.h, cmCPluginAPI.cxx, + cmCustomCommand.cxx, cmCustomCommand.h, cmFLTKWrapUICommand.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, cmGlobalXCodeGenerator.cxx, + cmITKWrapTclCommand.cxx, cmIncludeExternalMSProjectCommand.cxx, + cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator2.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmMakefile.cxx, cmMakefile.h, + cmQTWrapCPPCommand.cxx, cmQTWrapUICommand.cxx, + cmVTKWrapJavaCommand.cxx, cmVTKWrapPythonCommand.cxx, + cmVTKWrapTclCommand.cxx: ENH: Updated implementation of custom + commands. Multiple command lines are now supported effectively + allowing entire scripts to be written. Also removed extra + variable expansions and cleaned up passing of commands through to + the generators. The command and individual arguments are now + kept separate all the way until the generator writes them out. + This cleans up alot of escaping issues. + +2005-02-22 09:12 martink + + * Source/: cmCTest.cxx, cmCTest.h, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h, ctest.cxx: ENH: ctest now uses CMake + global generator to do the build part of build-and-test + +2005-02-22 09:08 king + + * Source/cmake.cxx: BUG: Need to return before configure step when + running in script mode. + +2005-02-22 08:22 king + + * Source/cmStandardIncludes.h: ENH: Adding cmCustomCommandLine and + cmCustomCommandLines subclasses of std::vector instantiations to + represent multiple commands for a single custom command. These + will be used in an upcoming checkin. + +2005-02-22 03:01 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-21 03:07 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-20 03:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-19 02:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-18 16:19 king + + * Source/: cmMakefile.cxx, cmSourceFile.cxx, cmSourceFile.h: BUG: + cmSourceFile instances should delete their own custom commands + when a new one is set. + +2005-02-18 16:12 king + + * Source/cmTarget.cxx: COMP: Using const_iterator instead of + iterator to walk through custom command dependencies. + +2005-02-18 16:12 king + + * Source/cmTarget.h: COMP: Added missing forward declaration of + cmMakefile. This was only working because cmCustomCommand.h + declared it. + +2005-02-18 15:45 andy + + * Source/cmGlobalXCodeGenerator.cxx: ENH: fix for spaces in the + path + +2005-02-18 15:43 king + + * Tests/ExternalOBJ/CMakeLists.txt: BUG: We still want to print out + the location where the object was found if it was found by the + glob. + +2005-02-18 14:32 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: COMP: remove warning + +2005-02-18 14:22 king + + * CMakeLists.txt: BUG: Disabling DART_ROOT removal until we can get + Dart to submit without it. + +2005-02-18 13:32 hoffman + + * Source/CMakeLists.txt, Source/cmFileCommand.cxx, + Source/cmGlobalXCodeGenerator.cxx, + Source/cmGlobalXCodeGenerator.h, Source/cmLocalGenerator.cxx, + Tests/ExternalOBJ/CMakeLists.txt: ENH: all tests are passing for + XCode + +2005-02-18 02:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-17 17:54 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h, cmXCodeObject.h: ENH: more tests are + passing, relative paths, and external objects are the ones left + now + +2005-02-17 16:59 andy + + * Source/CTest/cmCTestTestHandler.cxx: BUG: Detect when + TestsToRunInformation is not set + +2005-02-17 16:11 andy + + * Source/: cmCTest.cxx, CTest/cmCTestTestHandler.cxx: ENH: Some + more generalization + +2005-02-17 15:23 andy + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + CTest/cmCTestScriptHandler.cxx, CTest/cmCTestUpdateCommand.cxx, + CTest/cmCTestUpdateCommand.h, CTest/cmCTestUpdateHandler.cxx: + ENH: Cleanups and add CTEST_UPDATE command + +2005-02-17 15:22 andy + + * Source/CTest/: cmCTestGenericHandler.cxx, + cmCTestGenericHandler.h: ENH: Add a way to set options of the + handler genericly + +2005-02-17 11:28 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h, + kwsys/SystemTools.cxx, kwsys/SystemTools.hxx.in: ENH: Adding + kwsys::SystemTools::FileTimeCompare method to compare file + modification times with the highest resolution possible on the + file system. + +2005-02-17 11:27 king + + * bootstrap: ENH: Added try-compile KWSYS_STAT_HAS_ST_MTIM. This + tests whether struct stat has the extra st_mtim member that has + high resolution times. + +2005-02-17 10:51 andy + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + CTest/cmCTestCoverageHandler.cxx, + CTest/cmCTestMemCheckHandler.cxx, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestScriptHandler.h, CTest/cmCTestStartCommand.cxx, + CTest/cmCTestStartCommand.h: ENH: Cleanups and add CTEST_START + command + +2005-02-17 10:51 andy + + * Source/cmSystemTools.cxx: ENH: Add support for single ' + +2005-02-17 10:49 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, + kwsysPlatformCxxTests.cxx: ENH: Added try-compile + KWSYS_STAT_HAS_ST_MTIM. This tests whether struct stat has the + extra st_mtim member that has high resolution times. + +2005-02-17 10:45 hoffman + + * Modules/FindQt.cmake: FIX: fix for bug 1409 + +2005-02-17 10:42 hoffman + + * Modules/FindCurses.cmake: FIX: fix for bug 1438 + +2005-02-17 10:39 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: FIX: fix for bug 1606 + +2005-02-17 10:18 king + + * Source/cmDependsC.cxx: ENH: Removing collapsing of files to full + path before checking. The current working directory is set + correctly because the dependency lines are used by make anyway. + This drastically improves the speed of dependency checking. + +2005-02-17 10:03 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Avoid generating duplicate + rules for an object file. A warning about duplicate source files + in a target is now generated. + +2005-02-17 08:50 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ENH: Added generation + of test target to run ctest. + +2005-02-17 07:53 king + + * Source/cmake.cxx: BUG: Removing "guess when there is a space in + the path" check for chdir command. It is the responsibility of + the caller of the command to ensure the arguments are properly + quoted on the command line. + +2005-02-17 07:53 king + + * Tests/CommandLineTest/CMakeLists.txt: BUG: Fix for space in path + for chdir test. We just need to double-quote the arguments. + +2005-02-17 02:42 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-16 19:13 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: add CMAKE_CFG_INTDIR + +2005-02-16 18:47 hoffman + + * Source/: cmCTest.cxx, cmGlobalXCodeGenerator.cxx: ENH: use + ALL_BUILD target + +2005-02-16 16:35 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h, cmMakefile.cxx, cmMakefile.h: ENH: more + tests are passing + +2005-02-16 16:06 andy + + * Source/CTest/: cmCTestEmptyBinaryDirectoryCommand.cxx, + cmCTestScriptHandler.cxx: BUG: Report errors + +2005-02-16 16:03 andy + + * Source/kwsys/SystemTools.cxx: BUG: On windows allow removing of + files that are read-only + +2005-02-16 14:38 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: COMP: Remove unused + variable + +2005-02-16 14:24 andy + + * Source/CTest/cmCTestUpdateHandler.h: COMP: Remove warning + +2005-02-16 14:24 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: Improve output, and + handle 'G' files in subversion + +2005-02-16 13:45 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: BUG: If project is up to + date, handle that case + +2005-02-16 13:36 andy + + * Modules/Dart.cmake: BUG: Clean the messages + +2005-02-16 13:30 andy + + * Modules/: Dart.cmake, DartConfiguration.tcl.in: ENH: Reorganize + and add subversion support + +2005-02-16 13:29 andy + + * CMakeLists.txt: ENH: Remove DART_ROOT to force + DartConfiguration.tcl to be up to date + +2005-02-16 13:28 andy + + * Source/CTest/: cmCTestUpdateHandler.cxx, cmCTestUpdateHandler.h: + ENH: Initial implementation of SVN support. Closes Bug #1601 - + Add subversion support + +2005-02-16 13:15 hoffman + + * Source/cmake.cxx, Source/cmakemain.cxx, + Tests/CommandLineTest/CMakeLists.txt: BUG: fix CommandLine test + problems with spaces and testing for the return value + +2005-02-16 12:31 martink + + * CTestCustom.ctest.in: ENH: add supp for xlc linking on darwin + +2005-02-16 09:17 andy + + * Utilities/cmzlib/CMakeLists.txt: COMP: attempt to fix warning on + Visual Studio 7 + +2005-02-16 09:00 hoffman + + * CTestCustom.ctest.in: COMP: add a warning ignore for gcc 3.4.2 + +2005-02-16 08:56 king + + * Source/kwsys/SystemTools.cxx: BUG: Removing debugging code now + that the problem has been fixed on the remote dashboard. + +2005-02-16 02:18 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-15 17:25 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: add custom commands, still failing a bunch of tests + +2005-02-15 16:03 king + + * Source/kwsys/SystemTools.cxx: BUG: Preserve trailing slash state + when translating paths. + +2005-02-15 09:58 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: make sure paths do not end in + / before adding one + +2005-02-15 09:02 king + + * Source/cmDependsFortran.cxx: STYLE: Added TODO comment for + checking dependencies. + +2005-02-15 09:01 king + + * Tests/Fortran/: CMakeLists.txt, test_module_implementation.f90, + test_module_interface.f90, test_module_main.f90: ENH: Added + Fortran 90 test if the platform supports it. + +2005-02-15 08:40 king + + * Source/kwsys/SystemTools.cxx: BUG: Adding debugging code to + remotely debug a failing dashboard test. + +2005-02-15 08:28 king + + * Source/kwsys/SystemTools.cxx: BUG: Adding debugging code to + remotely debug a failing dashboard test. + +2005-02-15 02:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-14 16:46 hoffman + + * Source/: cmCTest.cxx, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h, cmLocalGenerator.h: ENH: getting closer + +2005-02-14 16:15 andy + + * Tests/MakeClean/CMakeLists.txt: COMP: Try to fix test on HP + +2005-02-14 14:35 hoffman + + * CMakeLists.txt, CTestCustom.ctest.in, ChangeLog.manual, + Source/CMakeLists.txt, Source/cmCTest.cxx: ENH: merge from main + tree + +2005-02-14 10:16 martink + + * Source/CMakeLists.txt: ENH: only do objc++ test with GNU of + course + +2005-02-14 10:16 martink + + * CTestCustom.ctest.in: ENH: added supp for Curl coding style + +2005-02-14 09:21 hoffman + + * Modules/Platform/Darwin-xlc.cmake: ENH: move xlc stuff to branch + +2005-02-14 08:44 king + + * Tests/MakeClean/CMakeLists.txt: COMP: Need ANSI flags for C + executable. + +2005-02-14 02:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-13 02:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-12 02:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-11 16:25 andy + + * Source/cmake.cxx: ENH: Add command to copy directory with content + +2005-02-11 16:25 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: + Implement copy of directory with content + +2005-02-11 14:25 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + more work on linking flags + +2005-02-11 14:22 hoffman + + * Modules/CMakeCXXCompiler.cmake.in: FIX: fix bug 1495 + +2005-02-11 14:20 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: FIX: fix for bug 1460 + +2005-02-11 14:18 hoffman + + * Modules/UseSWIG.cmake: FIX: fix bug 1303 + +2005-02-11 14:13 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx, + Templates/staticLibHeader.dsptemplate: FIX: fixes bugs 1152 and + 1154 + +2005-02-11 02:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-10 16:18 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Split + cmLocalUnixMakefileGenerator2 away from + cmLocalUnixMakefileGenerator to be a stand-alone generator. + +2005-02-10 14:19 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: + Initializing translation map using the PWD environment variable + and getcwd functions to automatically translate logical paths + involving the current working directory. Also added the JoinPath + method to aid users of the SplitPath method. + +2005-02-10 10:35 king + + * Source/kwsys/SystemTools.cxx: COMP: std:: -> kwsys_stl:: + +2005-02-10 10:32 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h, kwsys/SystemTools.cxx, + kwsys/SystemTools.hxx.in: ENH: Added SystemTools::SplitPath + method to split any file path into its basic components. + +2005-02-10 08:27 hoffman + + * Source/cmGlobalKdevelopGenerator.cxx: COMP: fix warning + +2005-02-10 08:22 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Fix for bug 1100. + If EXECUTABLE_OUTPUT_PATH or LIBRARY_OUTPUT_PATH is a relative + path it should be converted to a full path relative to each build + directory. + +2005-02-10 07:46 king + + * Utilities/cmzlib/: CMakeLists.txt, zconf.h: COMP: Disabling + warnings in zlib code to avoid changing it too much. + +2005-02-10 07:44 hoffman + + * Source/cmGlobalKdevelopGenerator.cxx: COMP: fix warning + +2005-02-10 02:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-09 23:25 hoffman + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: ENH: fix bug 1324 + +2005-02-09 23:21 hoffman + + * Source/: cmGlobalKdevelopGenerator.cxx, + cmGlobalKdevelopGenerator.h, cmLocalKdevelopGenerator.cxx, + cmLocalKdevelopGenerator.h: ENH: move most of the to global + generator + +2005-02-09 23:00 hoffman + + * Source/cmTryRunCommand.cxx, Source/cmTryRunCommand.h, + Modules/TestBigEndian.cmake: ENH: fix for 1450 + +2005-02-09 22:46 hoffman + + * Modules/: FindJNI.cmake, FindJava.cmake: ENH: bug fix 1573 + +2005-02-09 22:45 hoffman + + * Modules/FindPythonLibs.cmake: ENH: bug fix 1574 + +2005-02-09 11:40 king + + * Source/cmLocalUnixMakefileGenerator2.cxx, + Source/cmLocalUnixMakefileGenerator2.h, + Tests/MakeClean/CMakeLists.txt, + Tests/MakeClean/ToClean/CMakeLists.txt, + Tests/Wrapping/CMakeLists.txt: ENH: Adding cleaning of custom + command outputs during "make clean". + +2005-02-09 09:36 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Moved reference from local + driver targets (like build.local) into individual target rule + files. Main rule is now empty, except that clean.local may + remove files registered for cleaning. + +2005-02-09 09:32 king + + * Source/CMakeLists.txt: ENH: Adding MakeClean test to test + cleaning for makefile generators. + +2005-02-09 09:21 king + + * Tests/MakeClean/: CMakeLists.txt, check_clean.c.in, + ToClean/CMakeLists.txt, ToClean/ToCleanFiles.cmake.in, + ToClean/toclean.cxx: ENH: Adding test of "make clean". + +2005-02-08 17:12 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h, + cmXCodeObject.h: ENH: add link library stuff + +2005-02-08 10:13 andy + + * Tests/SystemInformation/CMakeLists.txt: ENH: Display all output + in ctest + +2005-02-07 17:36 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmXCodeObject.cxx, + cmXCodeObject.h: ENH: fix bug in target linking + +2005-02-07 16:18 king + + * Tests/: Complex/CMakeLists.txt, + Complex/Executable/complex.file.cxx, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/Executable/complex.file.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.file.cxx: ENH: Added + partial test for include regular expressions. + +2005-02-07 16:16 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: COMP: Removed useless + expression warning. + +2005-02-07 16:11 king + + * Source/: cmDepends.cxx, cmDepends.h, cmDependsC.cxx, + cmDependsC.h, cmLocalUnixMakefileGenerator2.cxx: ENH: Implemented + support for include/complain regular expressions for dependency + scanning. This now includes the possibility that scanning will + return failure and the build will stop. + +2005-02-07 15:10 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added generation of + CMakeDirectoryInformation.cmake file in each directory next to + the Makefile. The include file search path is now stored in this + file instead of duplicating it for every object file. This will + also allow more information to be passed in the future. + +2005-02-07 15:09 king + + * Source/cmMakefile.h: ENH: Added GetComplainRegularExpression + method. + +2005-02-07 09:05 king + + * Tests/SystemInformation/DumpInformation.cxx: BUG: Need to include + full output to be a useful test. + +2005-02-07 05:26 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-06 05:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-05 07:50 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Updated post-build command + to drive installation through the native build system. + +2005-02-05 05:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-04 17:58 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmXCodeObject.cxx, + cmXCodeObject.h: ENH: this version can build cmake + +2005-02-04 17:38 king + + * Source/cmCTest.cxx: BUG: Fixed --build-target implementation to + work with Visual Studio generators. + +2005-02-04 15:14 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Implemented external object + feature. + +2005-02-04 14:13 king + + * Source/CMakeLists.txt: ENH: Adding test for external object file + feature. + +2005-02-04 13:58 king + + * Tests/ExternalOBJ/: CMakeLists.txt, executable.cxx, + Object/CMakeLists.txt, Object/external_main.cxx, + Object/external_object.cxx: ENH: Adding test for external object + file feature. + +2005-02-04 10:06 king + + * Modules/CMakeTestFortranCompiler.cmake: ENH: Added test for + Fortran90 support. + +2005-02-04 05:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-03 19:32 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: COMP: remove warnings + +2005-02-03 17:42 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h, + cmLocalGenerator.h, cmXCodeObject.cxx, cmXCodeObject.h: ENH: + depends work between targets + +2005-02-03 08:39 king + + * Source/cmDependsJavaParserHelper.cxx: COMP: Fix warning about + printf format and given type. + +2005-02-03 05:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-02 17:16 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h, + cmLocalGenerator.h, cmXCodeObject.cxx, cmXCodeObject.h: ENH: + getting closer + +2005-02-02 17:05 king + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y, + cmDependsJavaParser.cxx, cmDependsJavaParser.y: COMP: Adding + warning work-around for unused case label yyerrorlab on HP + compiler. + +2005-02-02 13:19 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: move AddFlags stuff up to + LocalGenerator from LocalUnix generator + +2005-02-02 05:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-02-01 17:17 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: closer + +2005-02-01 15:48 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmXCodeObject.cxx: ENH: + getting closer + +2005-02-01 14:28 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: COMP: fix warning + +2005-02-01 13:12 hoffman + + * Modules/CMakeFindXCode.cmake: ENH: add trycompile code for xcode + +2005-02-01 13:07 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: add trycompile code for xcode + +2005-02-01 11:28 king + + * Source/: cmDependsFortranParser.cxx, cmDependsFortranParser.y: + COMP: Disabling warning in generated code. + +2005-02-01 10:44 king + + * Source/: cmDependsJavaLexer.h, cmDependsJavaLexer.in.l: COMP: + Removing #line directives from .h file to avoid bogus Sun + warning. + +2005-02-01 10:42 king + + * Source/: CMakeLists.txt, cmDependsFortran.cxx, + cmDependsFortranLexer.cxx, cmDependsFortranLexer.h, + cmDependsFortranLexer.in.l, cmDependsFortranParser.cxx, + cmDependsFortranParser.h, cmDependsFortranParser.y, + cmDependsFortranParserTokens.h, cmDependsFortranLexer.c, + cmDependsFortranParser.c: ENH: Changed over to using C++ for + building flex/bison generated files. It reduces the number of + changes that need to be made after generation. + +2005-02-01 05:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-31 05:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-30 05:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-29 07:57 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: COMP: Removed shadowed + variable warning. + +2005-01-29 05:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-28 18:12 king + + * Source/cmGlobalXCodeGenerator.cxx: COMP: Added missing labels to + case. + +2005-01-28 17:46 andy + + * Source/: cmDependsJavaLexer.cxx, cmDependsJavaLexer.in.l: COMP: + Another borland problem + +2005-01-28 17:43 andy + + * Source/: cmDependsJavaLexer.cxx, cmDependsJavaLexer.in.l, + cmDependsJavaParser.cxx, cmDependsJavaParser.y, + cmDependsJavaParserTokens.h: COMP: Remove more warnings/errors + +2005-01-28 17:25 king + + * Source/cmGeneratedFileStream.cxx: COMP: Fix unused parameter + warning when bootstrapping. + +2005-01-28 17:24 andy + + * Source/: cmDependsJavaLexer.cxx, cmDependsJavaLexer.in.l, + cmDependsJavaParser.cxx, cmDependsJavaParser.y, + cmDependsJavaParserTokens.h: COMP: Remove warnings + +2005-01-28 17:21 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: move executable xcode stuff to a method + +2005-01-28 17:18 king + + * Source/cmDependsJavaParserHelper.cxx: COMP: Removed default + argument from method definition. + +2005-01-28 17:14 andy + + * Source/CMakeLists.txt: ENH: Enable java dependency + +2005-01-28 17:13 andy + + * Source/: cmDependsJavaParser.cxx, cmDependsJavaParser.y, + cmDependsJavaParserHelper.cxx, cmDependsJavaParserHelper.h, + cmDependsJavaParserTokens.h: ENH: Initial import of java parser + +2005-01-28 17:13 andy + + * Source/cmDependsFortranParser.y: STYLE: Add some diff helping + comments + +2005-01-28 17:09 king + + * Source/: cmDependsFortranParser.c, cmDependsFortranParser.y, + cmDependsFortranParserTokens.h: COMP: Disabled warnings in + generated code. + +2005-01-28 16:56 andy + + * Source/: cmDependsJavaLexer.cxx, cmDependsJavaLexer.h, + cmDependsJavaLexer.in.l: ENH: Initial import of java parser + +2005-01-28 16:26 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: ENH: use absolute paths + +2005-01-28 16:00 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h: + ENH: create mainGroup + +2005-01-28 14:17 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Implemented full per-object + test for whether provides-requires mode is needed. This will + still use a recursive make for any Fortran object even if it + doesn't have requires. It is possible to avoid it but we can do + that later. + +2005-01-28 13:20 andy + + * Modules/Dart.cmake: ENH: Better checking for Dart. Closes Bug + #1505 - Configuration fails to create Makefile + +2005-01-28 13:00 andy + + * Source/cmake.cxx: BUG: prevent -P or script to be passed as + homedirectory + +2005-01-28 12:01 king + + * Source/cmDependsFortran.cxx: STYLE: Added another solution + proposal for out-of-directory modules. + +2005-01-28 10:45 king + + * Source/cmDependsFortran.cxx: ENH: Added provides/requires output + for modules. + +2005-01-28 10:12 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Add error regex + +2005-01-28 08:30 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: remove debug print + +2005-01-28 05:20 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-27 19:24 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: COMP: fix warning + +2005-01-27 17:45 andy + + * Modules/Dart.cmake: ENH: Enable compression and use the new + trigger script + +2005-01-27 17:43 andy + + * Source/cmCTest.cxx, Modules/DartConfiguration.tcl.in: ENH: Enable + compression with DartConfiguration file + +2005-01-27 17:09 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmXCodeObject.cxx: ENH: + xcode almost working for simple exe, but not yet + +2005-01-27 16:49 andy + + * Source/CTest/cmCTestTestHandler.h: COMP: Fix build on sun + +2005-01-27 16:43 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmXCodeObject.cxx: ENH: fix + a few more xcode things + +2005-01-27 16:25 hoffman + + * Source/cmXCodeObject.cxx: ENH: add missing ; + +2005-01-27 16:11 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h, + cmXCodeObject.cxx: ENH: add more xcode stuff + +2005-01-27 15:54 andy + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + CTest/cmCTestBuildHandler.cxx, CTest/cmCTestBuildHandler.h, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestConfigureHandler.h, + CTest/cmCTestCoverageHandler.cxx, CTest/cmCTestCoverageHandler.h, + CTest/cmCTestGenericHandler.cxx, CTest/cmCTestGenericHandler.h, + CTest/cmCTestMemCheckHandler.cxx, CTest/cmCTestMemCheckHandler.h, + CTest/cmCTestScriptHandler.cxx, CTest/cmCTestScriptHandler.h, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestTestHandler.h, + CTest/cmCTestUpdateHandler.cxx, CTest/cmCTestUpdateHandler.h: + ENH: Several cleanups and improvements + +2005-01-27 13:31 martink + + * Source/CTest/: cmCTestRunScriptCommand.cxx, + cmCTestScriptHandler.cxx, cmCTestScriptHandler.h: ENH: clean up + running of default script + +2005-01-27 11:43 andy + + * Source/: CMakeLists.txt, cmCTest.cxx, + CTest/cmCTestBuildHandler.cxx, CTest/cmCTestBuildHandler.h, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestConfigureHandler.h, + CTest/cmCTestCoverageHandler.cxx, CTest/cmCTestCoverageHandler.h, + CTest/cmCTestGenericHandler.cxx, CTest/cmCTestGenericHandler.h, + CTest/cmCTestScriptHandler.cxx, CTest/cmCTestScriptHandler.h, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestTestHandler.h, + CTest/cmCTestUpdateHandler.cxx, CTest/cmCTestUpdateHandler.h: + ENH: Add a superclass to all handlers + +2005-01-27 11:01 martink + + * Source/CTest/: cmCTestRunScriptCommand.cxx, + cmCTestScriptHandler.cxx, cmCTestScriptHandler.h, + cmCTestSleepCommand.cxx: COMP: fix some compiler warnings/errors + +2005-01-27 10:47 martink + + * Source/ctest.cxx: ENH: added missing documentation + +2005-01-27 10:14 andy + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestBuildHandler.cxx, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestCoverageHandler.cxx, CTest/cmCTestCoverageHandler.h, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestUpdateHandler.cxx: + ENH: Add compression support to XML files + +2005-01-27 10:14 andy + + * Source/: cmGeneratedFileStream.cxx, cmGeneratedFileStream.h: ENH: + Add compression support + +2005-01-27 10:11 andy + + * Tests/Complex/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Source/CMakeLists.txt: ENH: Link to cmzlib + +2005-01-27 10:11 martink + + * Source/: CMakeLists.txt, CTest/cmCTestCommand.h, + CTest/cmCTestEmptyBinaryDirectoryCommand.cxx, + CTest/cmCTestEmptyBinaryDirectoryCommand.h, + CTest/cmCTestRunScriptCommand.cxx, + CTest/cmCTestRunScriptCommand.h, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestScriptHandler.h, CTest/cmCTestSleepCommand.cxx, + CTest/cmCTestSleepCommand.h: ENH: added more capabilities to + ctest + +2005-01-27 05:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-26 16:19 king + + * Source/cmDependsFortranParser.y: COMP: Added instruction to + remove TABs from generated file. + +2005-01-26 16:18 king + + * Source/: CMakeLists.txt, cmLocalUnixMakefileGenerator2.cxx: ENH: + Added hook into Fortran dependency scanner. + +2005-01-26 16:17 king + + * Source/: cmDependsFortranLexer.c, cmDependsFortranLexer.h, + cmDependsFortranParser.c, cmDependsFortranParserTokens.h: ENH: + Added generated lexer and parser sources. + +2005-01-26 16:10 king + + * Source/: cmDependsFortranLexer.in.l, cmDependsFortranParser.y: + COMP: Added additional instructions about how to modify the + generated files. + +2005-01-26 16:09 king + + * Source/cmDependsFortran.cxx: COMP: Added constructor to + cmDependsFortranFile to avoid using initializer list. Also + included assert.h. + +2005-01-26 15:58 king + + * Source/cmDependsFortranParser.y: COMP: Added forward declaration + of yylex. + +2005-01-26 15:55 andy + + * CMakeLists.txt: ENH: Add zlib from VTK + +2005-01-26 15:55 andy + + * Utilities/cmzlib/: .NoDartCoverage, CMakeLists.txt, adler32.c, + cm_zlib_mangle.h, compress.c, crc32.c, deflate.c, deflate.h, + example.c, gzio.c, infblock.c, infblock.h, infcodes.c, + infcodes.h, inffast.c, inffast.h, inffixed.h, inflate.c, + inftrees.c, inftrees.h, infutil.c, infutil.h, maketree.c, + minigzip.c, trees.c, trees.h, uncompr.c, zconf.h, zlib.def, + zlib.h, zlib.rc, zlibDllConfig.h.in, zutil.c, zutil.h: ENH: + Initial import from VTK + +2005-01-26 15:45 king + + * Source/cmDependsFortran.cxx: ENH: Removed Lexer/Parser prefix + before _yy symbols. Just cmDependsFortran_yy is enough. + +2005-01-26 15:43 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix version number + +2005-01-26 15:33 king + + * Source/: cmDependsFortran.cxx, cmDependsFortran.h, + cmDependsFortranLexer.in.l, cmDependsFortranParser.h, + cmDependsFortranParser.y: ENH: Added Fortran dependency scanner + implementation. + +2005-01-26 14:25 king + + * Source/: cmGeneratedFileStream.cxx, cmGeneratedFileStream.h: ENH: + Added default constructor and Open method. + +2005-01-26 11:13 andy + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: ENH: + Add support for shrinking the output of the test + +2005-01-26 10:10 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add method to populate + custom integers + +2005-01-26 05:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-25 16:36 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: COMP: fix warnings + +2005-01-25 16:30 hoffman + + * Source/cmGlobalXCodeGenerator.cxx: COMP: fix warnings + +2005-01-25 16:09 hoffman + + * bootstrap: ENH: add xcode stuff to bootstrap + +2005-01-25 15:26 hoffman + + * Source/: CMakeLists.txt, cmGlobalXCodeGenerator.cxx, + cmGlobalXCodeGenerator.h, cmXCodeObject.cxx, cmXCodeObject.h, + cmake.cxx: ENH: add initial non-working XCode stuff + +2005-01-25 05:59 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-24 17:35 hoffman + + * Source/: cmGlobalXCodeGenerator.cxx, cmGlobalXCodeGenerator.h, + cmLocalXCodeGenerator.cxx, cmLocalXCodeGenerator.h, + cmXCodeObject.cxx, cmXCodeObject.h: ENH: initial xcode stuff + +2005-01-24 05:53 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-23 05:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-22 05:51 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-21 16:25 hoffman + + * Source/: cmXCodeObject.cxx, cmXCodeObject.h: ENH: start xcode + stuff + +2005-01-21 12:26 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h: ENH: move project map to global + generator base + +2005-01-21 11:22 martink + + * Source/cmWhileCommand.cxx: COMP: fix unused var warning + +2005-01-21 10:27 hoffman + + * bootstrap, Source/CMakeLists.txt, Source/cmBootstrapCommands.cxx, + Source/cmCommands.cxx, Source/cmCommands.h, + Source/cmWhileCommand.cxx, Source/cmake.cxx: ENH: split up + cmCommands into two files + +2005-01-21 09:37 martink + + * Source/: cmCommands.cxx, cmWhileCommand.cxx, cmWhileCommand.h, + cmEndWhileCommand.cxx, cmEndWhileCommand.h: ENH: added while + command + +2005-01-21 05:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-20 15:26 martink + + * Source/cmSetCommand.cxx: COMP: fix unused var warning + +2005-01-20 14:38 martink + + * Source/: cmSetCommand.cxx, cmSetCommand.h: ENH: now the set + command can set environment variables + +2005-01-20 12:30 hoffman + + * Modules/: CMakeCCompiler.cmake.in, CMakeCXXCompiler.cmake.in, + CMakeDetermineCCompiler.cmake, CMakeFortranCompiler.cmake.in, + CMakeJavaCompiler.cmake.in, CMakeRCCompiler.cmake.in, + CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake, + Platform/Windows-cl.cmake, Platform/Windows-cl.cmake.in: ENH: + stuff to keep compiler tests from re-running all the time + +2005-01-20 12:28 hoffman + + * Source/: cmGlobalGenerator.cxx, cmLocalKdevelopGenerator.cxx: + ENH: add some comments on how this could be moved to global + generator + +2005-01-20 04:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-19 12:06 king + + * Source/: cmListFileLexer.in.l, cmListFileLexer.c: ENH: Mangled + lexer symbols to begin in cmListFileLexer_yy instead of just yy + to avoid conflict with other lexers that may be added. + +2005-01-19 07:23 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Removed unquoted version of + OBJECTS make variable. Quoted seems to work everywhere. BUG: + Fixed AppendAnyDepend to properly identify executable targets. + BUG: Used CreateMakeVariable to fix variable name for OBJECTS + list when target has a . in its name. + +2005-01-19 05:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-18 18:11 andy + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: COMP: Add proper + link directory + +2005-01-18 17:29 andy + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: COMP: Add cmexpat + to complex + +2005-01-18 17:09 king + + * Source/: CMakeLists.txt, cmDepends.cxx, cmDepends.h, + cmDependsC.cxx, cmDependsC.h, cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h, cmake.cxx: ENH: Split dependency + scanning and checking into separate cmDepends superclass with + language-specific subclasses such as cmDependsC. + +2005-01-18 16:47 andy + + * Source/CMakeLists.txt: COMP: Ok, actually link to the library.... + +2005-01-18 15:54 andy + + * Source/cmXMLParser.cxx, Utilities/cmexpat/xmlparse.c: COMP: Try + to resolve compile errors because of missing includes and wrong + include path + +2005-01-18 14:02 andy + + * Source/cmXMLParser.cxx: COMP: Use cmOStringStream not + ostringstream + +2005-01-18 13:41 andy + + * Source/: CMakeLists.txt, cmXMLParser.cxx, cmXMLParser.h: ENH: Add + XML parser + +2005-01-18 11:15 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: STYLE: Added TODO + comment for another missing feature (external object files). + +2005-01-18 09:06 andy + + * Utilities/Doxygen/doc_makeall.sh.in: ENH: Cleanup + +2005-01-18 08:58 andy + + * CMakeLists.txt, cmake_uninstall.cmake.in: ENH: Add uninstall. + This is not really a feature but more of an example on how to do + it. + +2005-01-18 04:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-17 16:29 hoffman + + * Source/cmCTest.cxx: BUG: when ctest is looking for cmake look in + the build directory as well as where ctest is so that purify will + work + +2005-01-17 15:20 hoffman + + * Modules/: CMakeCCompiler.cmake.in, CMakeCXXCompiler.cmake.in, + Platform/Windows-cl.cmake: BUG: fix running of cl in trycompiles + +2005-01-17 15:09 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Adding partial + implementation of provides-requires mode. + +2005-01-17 15:09 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Fix for relative + path conversion when path is a subset of relative path root. + +2005-01-17 14:29 hoffman + + * Source/: cmWin32ProcessExecution.cxx, cmWin32ProcessExecution.h: + BUG: make sure handles are always closed even if Wait is not + called. + +2005-01-17 04:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-15 04:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-13 12:38 hoffman + + * ChangeLog.manual: BUG: fix from main tree + +2005-01-13 03:58 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-12 13:58 martink + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: now limits warnings + and error report to 50 each + +2005-01-12 13:51 martink + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: now limits warnings + and error report to 50 each + +2005-01-12 10:11 millerjv + + * Source/kwsys/Base64.c: BUG: encoding 2 bytes into 4 bytes was + accessing a 3rd byte from the source + +2005-01-12 04:43 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-11 05:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-10 05:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-08 05:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-07 11:56 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-05 05:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-04 18:24 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added install target + implementation. Also added missing include of assert.h. + +2005-01-04 17:41 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added relative path support + (mostly done). Many paths are written relative even if + CMAKE_USE_RELATIVE_PATHS is not on just to keep makefiles short. + +2005-01-04 16:26 king + + * Source/cmLocalUnixMakefileGenerator.h: ENH: Made + ConfigureOutputPaths virtual to help new generator. + +2005-01-04 15:38 hoffman + + * ChangeLog.manual, Modules/Platform/Windows-icl.cmake: add intel + compiler config file + +2005-01-04 12:12 hoffman + + * ChangeLog.manual, Source/cmSetCommand.cxx: fix for bug 1445 + +2005-01-04 10:55 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Add a + delay method + +2005-01-04 09:56 king + + * Source/cmLocalKdevelopGenerator.cxx: BUG: Applied patch attached + to bug #1453. + +2005-01-04 08:42 martink + + * Source/cmSetCommand.cxx: ENH: fixed SET command to accept cache + values with more than one value + +2005-01-04 04:17 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-02 05:04 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2005-01-01 21:02 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-31 05:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-30 05:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-29 05:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-28 05:23 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-27 05:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-26 05:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-25 05:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-24 05:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-23 05:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-22 05:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-21 05:14 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-20 05:09 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-19 05:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-18 05:11 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-17 05:06 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-16 22:19 hoffman + + * Modules/CMakeDetermineSystem.cmake: fix wrong number of arguments + +2004-12-16 22:18 hoffman + + * Modules/CMakeDetermineSystem.cmake: fix number of arguments + +2004-12-16 17:26 hoffman + + * ChangeLog.manual, Modules/CMakeDetermineSystem.cmake, + Modules/Platform/OpenBSD.cmake: ENH: fix for OpenBSD + +2004-12-16 05:52 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-15 05:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-14 05:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-13 05:03 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-12 05:08 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-11 05:10 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-10 05:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-09 16:14 king + + * Source/cmSystemTools.cxx: BUG: Fix to avoid relative path with + ..s all the way to the root. + +2004-12-09 15:56 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Support for custom + command outputs in subdirectories of current build tree location. + +2004-12-09 15:23 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: AppendAnyDepend + must handle non-existing files. + +2004-12-09 15:11 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added post-build rules to + executables and libraries. Generalized AppendLibDepend method to + AppendAnyDepend. This takes most of the functionality of + AppendCustomDepend too, and generalized jump-and-build to + executables. + +2004-12-09 13:52 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Implemented utility + targets. This involved pulling part of the custom command rule + implementation out into shared methods. + +2004-12-09 05:12 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-08 05:05 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-07 05:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-06 12:39 hoffman + + * Modules/Platform/: Tru64.cmake, True64.cmake: FIX: fix for bug + 1325, Tru64 not True64 + +2004-12-06 12:38 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmLocalUnixMakefileGenerator.cxx: BUG: fix for bug 1396, object + files could not be used as sources any more + +2004-12-06 11:10 hoffman + + * ChangeLog.manual, Source/cmCTest.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, Source/cmMakefile.cxx, + Source/CTest/cmCTestSubmit.cxx, Source/CTest/cmCTestSubmit.h, + Utilities/Release/cmake_release.sh: merge from main tree + +2004-12-06 05:00 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-05 04:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-04 04:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-03 09:25 martink + + * Source/CMakeLists.txt: ENH: minor fix for windows + +2004-12-03 09:05 martink + + * Source/cmMakefile.cxx: ENH: fix for relative paths + +2004-12-03 06:27 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-02 13:14 hoffman + + * Source/cmMakefile.cxx: BUG: fix for 1369 before include + directories need to be always added + +2004-12-02 12:33 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: fix for bug 1385, /tmp should + not be used on windows + +2004-12-02 06:13 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-12-01 07:28 king + + * Source/kwsys/kwsys_ios_sstream.h.in: COMP: Need to choose between + and based on whether standard headers are + available. + +2004-12-01 07:24 king + + * Source/kwsys/: kwsys_ios_fstream.h.in, kwsys_ios_iostream.h.in: + COMP: Disabling old streams warnings when including old headers + on MSVC. + +2004-12-01 06:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-30 18:20 king + + * Source/kwsys/kwsys_ios_sstream.h.in: BUG: Need to include header + to use placement new syntax. Really this should be fixed + by replacing the stream buffer to set a new string instead of + reconstructing the object, but this will require quite a bit of + work to do portably. + +2004-11-30 06:29 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-29 06:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-28 06:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-27 06:28 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-26 06:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-25 06:19 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-24 09:25 andy + + * Source/CTest/: cmCTestSubmit.cxx, cmCTestSubmit.h: ENH: Add + support for proxy authentication (thanks Jean-Michel) + +2004-11-24 05:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-23 17:34 hoffman + + * Modules/Platform/AIX.cmake: ENH: try and fix aix xlC with gcc + +2004-11-23 17:28 hoffman + + * Modules/Platform/AIX.cmake: ENH: try and fix aix xlC with gcc + +2004-11-23 14:07 hoffman + + * Modules/Platform/AIX.cmake: ENH: try to fix aix with native cxx + and gcc + +2004-11-23 10:48 andy + + * Source/CTest/cmCTestUpdateHandler.cxx: ENH: Make more things XML + safe + +2004-11-23 05:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-22 05:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-21 05:44 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-20 05:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-19 09:42 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ENH: Moved custom + command rule files into special CMakeCustomCommands.dir + subdirectory. + +2004-11-19 09:32 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Unified WriteDependRules, + WriteBuildRules, WriteCleanRules, and the future + WriteInstallRules into a single WritePassRules method. Also + added WriteTargetDependsRule and WriteTargetCleanRule methods to + unify writing of depend and clean rules for each target. + +2004-11-19 05:41 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-18 08:25 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-17 08:33 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-16 08:16 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-15 09:39 martink + + * Source/ctest.cxx: COMP: fix warning + +2004-11-15 08:22 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-14 08:21 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-13 09:55 martink + + * Source/: cmCTest.cxx, ctest.cxx, CTest/cmCTestTestHandler.cxx, + CTest/cmCTestTestHandler.h: ENH: added -U option to take union of + -R and -I + +2004-11-13 08:15 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-12 05:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-11 17:40 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Another linker error + on sun + +2004-11-11 05:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-10 15:39 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: FIX: make sure the + object file name is correctly mangled for depend information + +2004-11-10 13:15 martink + + * CMakeLists.txt, CTestCustom.ctest.in: ENH: added custom supp for + cmake + +2004-11-10 10:24 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-09 09:57 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-08 05:46 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-07 05:45 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-06 05:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-05 15:09 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added partial clean target + support. + +2004-11-05 15:03 king + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: ENH: Moved code that checks + output path variables to separate ConfigureOutputPaths method. + Needed to provide access to the same code from a subclass. + +2004-11-05 07:39 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Implemented VERBOSE output + setting. + +2004-11-05 05:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-04 05:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-03 15:43 martink + + * Source/kwsys/SystemTools.cxx: ENH: merges from the main tree + +2004-11-03 11:02 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Generalized driver targets + and subdirectory traversal rules. The implementations of all, + depend, build, clean, install, etc. now follow a common + framework. + +2004-11-03 08:59 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Removed unneeded requires + rules now that canonical names are available. + +2004-11-03 08:46 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added convenience rules to + build targets without specifying full paths. + +2004-11-03 07:51 king + + * Source/: cmExportLibraryDependencies.cxx, + cmGeneratedFileStream.cxx, cmGeneratedFileStream.h, + cmGlobalVisualStudio7Generator.cxx, cmLocalGenerator.cxx, + cmLocalKdevelopGenerator.cxx, cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator2.cxx, + cmVTKMakeInstantiatorCommand.cxx: STYLE: Adjusted signature of + cmGeneratedFileStream to make copy-if-different more explicity. + +2004-11-03 07:27 king + + * Source/: cmGlobalVisualStudio7Generator.cxx, + cmGeneratedFileStream.cxx, cmGeneratedFileStream.h: COMP: Fix new + cmGeneratedFileStream for MSVC. + +2004-11-03 07:23 king + + * bootstrap, Source/CMakeLists.txt, + Source/cmExportLibraryDependencies.cxx, + Source/cmGeneratedFileStream.cxx, Source/cmGeneratedFileStream.h, + Source/cmLocalGenerator.cxx, Source/cmLocalKdevelopGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator2.cxx, + Source/cmVTKMakeInstantiatorCommand.cxx: ENH: Re-implemented + cmGeneratedFileStream to look like a real stream and replace the + destination file atomically. This will avoid problems with the + process being terminated while generating a file. + +2004-11-03 05:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-02 18:09 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ENH: Added partial RC + language dependency scanning (just using C dependencies for now). + +2004-11-02 17:38 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added dependencies between + libraries. + +2004-11-02 17:19 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Removed debugging + output. + +2004-11-02 17:14 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Implemented generation of + custom command rule files. + +2004-11-02 17:11 andy + + * Source/kwsys/SystemTools.cxx: COMP: Remove compile warning + +2004-11-02 08:32 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: BUG: Fixed subdirectory + implementation for Borland Make. + +2004-11-02 07:36 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Implemented subdirectory + rules for all target. + +2004-11-02 04:49 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-11-01 16:57 hoffman + + * Source/kwsys/SystemTools.cxx, Tests/Dependency/CMakeLists.txt, + Tests/Dependency/1/CMakeLists.txt, Tests/Dependency/1/OneSrc.c: + BUG: add a test for a single char dir, and fix bug introduced in + 1.53, but we still can not handle a space as the start of a + directory name + +2004-11-01 04:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-10-31 03:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-10-30 04:32 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-10-29 18:15 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added framework for + subdirectory traversal. + +2004-10-29 17:18 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Dependency + makefile lines must be at least three characters long to hold a + dependency. + +2004-10-29 16:50 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h, cmake.cxx, cmake.h: ENH: Added + build system integrity check to cmLocalUnixMakefileGenerator2. + This now uses a special --check-build-system flag to cmake which + replaces --check-rerun. Integrity of dependencies is also + checked during generation. + +2004-10-29 15:32 hoffman + + * Source/cmLocalGenerator.cxx: FIX: fix shared flag + +2004-10-29 15:31 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: remove debug print + +2004-10-29 14:57 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Fixes for Borland + Make. + +2004-10-29 13:55 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: BUG: Fixes for NMake. + +2004-10-29 13:04 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Changed AppendRecursiveMake + to GetRecursiveMakeCall and implemented jump-and-build on Windows + and UNIX. + +2004-10-29 11:42 hoffman + + * CMakeLists.txt, ChangeLog.manual, + Modules/TestCXXAcceptsFlag.cmake, Source/cmCTest.cxx, + Source/cmCacheManager.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in, + Tests/Complex/Executable/A.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/A.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/A.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/LoadCommand/LoadedCommand.cxx, + Tests/LoadCommandOneConfig/LoadedCommand.cxx, + Utilities/Release/cmake_release.sh: move 2.0.5 to LatestRelease + +2004-10-29 10:52 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Cleaned up format of + generated makefiles. Consolidated rule generation into single + WriteMakeRule method. Added special targets like rebuild_cache + and edit_cache. + +2004-10-29 04:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-10-28 15:40 hoffman + + * Source/cmIncludeDirectoryCommand.cxx: ENH: add a check for empty + include directories + +2004-10-28 15:31 hoffman + + * CMakeLists.txt, Utilities/Release/cmake_release.sh: Create + CMake2.0.5 version + +2004-10-28 07:46 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: COMP: Fix local shadow + warnings. + +2004-10-28 07:43 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: COMP: Fix for Mac + specific code. + +2004-10-28 04:36 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-10-27 16:00 hoffman + + * Source/cmMakefile.cxx: ENH: look in the windows LIB env variable + for libraries + +2004-10-27 16:00 hoffman + + * Source/cmGlobalKdevelopGenerator.cxx: DOC: documentation change + +2004-10-27 15:58 hoffman + + * ChangeLog.manual, Modules/TestCXXAcceptsFlag.cmake, + Source/cmCacheManager.cxx, + Source/cmLocalUnixMakefileGenerator.cxx: ENH: merge from main + tree bug fixes + +2004-10-27 12:05 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Do not try to handle + unimplemented target types yet. Fixes for projects with + subdirectories. + +2004-10-27 11:26 andy + + * Source/cmakemain.cxx: BUG: If bootstrap cmake is run with no + argument produce error + +2004-10-27 10:53 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalUnixMakefileGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: ENH: put error checking for + missing linker languages + +2004-10-27 10:47 andy + + * bootstrap, Source/cmFileCommand.cxx, + Source/cmFindPackageCommand.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmake.cxx, Source/cmake.h, + Source/cmakemain.cxx: PERF: Remove several classes from the + bootstrap and so making bootstrap smaller and faster + +2004-10-27 10:45 andy + + * Source/CursesDialog/ccmake.cxx: STYLE: Remove unused code + +2004-10-27 10:45 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added executable + dependencies on libraries including jump-and-build support. + +2004-10-27 10:45 andy + + * Modules/TestCXXAcceptsFlag.cmake: BUG: Check for the variable + first time + +2004-10-27 08:49 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Add a space before + the : only if the target name is one letter long. This works + around bugs in some shells' tab completion of target names. + +2004-10-27 08:47 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added generation of rules + for shared libraries and modules. + +2004-10-27 08:20 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added rules to build + executables. Also began to consolidate flag list construction + into separate methods. + +2004-10-27 04:37 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-10-26 20:13 andy + + * Source/cmCacheManager.cxx: BUG: Handle DOS files un unix file + systems + +2004-10-26 17:23 andy + + * Modules/TestCXXAcceptsFlag.cmake: BUG: Only test for cxx flags + the first time around + +2004-10-26 16:07 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ENH: Do not generate + touch rule for target level dependencies. There are no + build-time dependencies by default. + +2004-10-26 15:03 hoffman + + * Source/: cmSystemTools.cxx, cmSystemTools.h, + kwsys/SystemTools.cxx, kwsys/SystemTools.hxx.in: ENH: move stuff + from main tree to branch + +2004-10-26 14:49 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added generation of rule to + build object file. + +2004-10-26 14:33 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: handle read only directories + with configure file destination + +2004-10-26 14:12 hoffman + + * ChangeLog.manual, Source/cmCTest.cxx: ENH: merge from main tree + +2004-10-26 13:00 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ERR: Missing std:: on + endl. + +2004-10-26 12:55 king + + * Source/cmake.cxx: ENH: Added object file dependency scanning to + cmLocalUnixMakefileGenerator2. This needs a hook in cmake.cxx. + +2004-10-26 12:54 king + + * bootstrap, Source/CMakeLists.txt: ENH: Added + cmLocalUnixMakefileGenerator2 to build. + +2004-10-26 12:53 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Added object file + dependency scanning. + +2004-10-26 10:24 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Handle more REMARKS on + SGI + +2004-10-26 10:15 king + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: ENH: Split + part of GetIncludeFlags method into separate + GetIncludeDirectories method. + +2004-10-26 08:45 andy + + * Source/kwsys/SystemTools.hxx.in: COMP: Attempt to fix warnings on + SGI + +2004-10-26 04:40 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-10-25 16:39 hoffman + + * Source/: cmLocalKdevelopGenerator.cxx, + cmLocalKdevelopGenerator.h: ENH: add some more comments + +2004-10-25 15:08 hoffman + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommand/LoadedCommand.cxx, LoadCommand/LoadedCommand.h.in, + LoadCommandOneConfig/CMakeLists.txt, + LoadCommandOneConfig/LoadedCommand.cxx, + LoadCommandOneConfig/LoadedCommand.h.in: ENH: clean up loaded + command test so you can tell what really failed + +2004-10-25 13:40 hoffman + + * Source/cmSystemTools.cxx: COMP: remove an unused variable warning + +2004-10-25 13:24 hoffman + + * ChangeLog.manual, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/LoadCommand/LoadedCommand.cxx, + Tests/LoadCommandOneConfig/LoadedCommand.cxx: ENH: move stuff + from main tree to fix the runsingle program mess + +2004-10-25 13:16 hoffman + + * Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: FIX: go back + to not trying to handle spaces in the path for run single command + and comment it so that people know to call the right thing + +2004-10-25 12:26 hoffman + + * Source/cmLocalKdevelopGenerator.cxx: COMP: remove warnings + +2004-10-25 12:15 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: add test back + for single char exe + +2004-10-25 11:59 hoffman + + * Source/cmSystemTools.cxx, Tests/LoadCommand/LoadedCommand.cxx, + Tests/LoadCommandOneConfig/LoadedCommand.cxx: FIX: fix + RunSingleCommand to work with spaces in the path, and with an + already quoted command + +2004-10-25 10:04 andy + + * Source/CMakeLists.txt: ENH: Allow disabling of long running tests + +2004-10-25 04:34 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-10-24 11:38 andy + + * Source/cmVersion.cxx: STYLE: Nightly Version update + +2004-10-22 21:52 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: remove run program + test until run single command is fixed + +2004-10-22 21:03 hoffman + + * Source/cmSystemTools.cxx: undo last check in as it breaks borland + with spaces some how + +2004-10-22 17:51 hoffman + + * ChangeLog.manual, Source/cmCTest.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmSystemTools.cxx, Source/kwsys/SystemTools.cxx, + Tests/Complex/Executable/A.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/A.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/A.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx: fixes from + main tree + +2004-10-22 17:05 hoffman + + * Tests/: Complex/Executable/A.cxx, + ComplexOneConfig/Executable/A.cxx, + ComplexRelativePaths/Executable/A.cxx: ENH: add missing file + +2004-10-22 17:00 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmSystemTools.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx: FIX: fix the + problem where a target is a single character and nmake gets + confused and add a test for it + +2004-10-22 16:58 hoffman + + * Source/cmTarget.cxx: COMP: remove warnings + +2004-10-22 15:45 andy + + * Source/CMakeLists.txt: COMP: Remove unnecessary commit + +2004-10-22 15:44 andy + + * bootstrap, Source/CMakeLists.txt, Source/cmCTest.cxx, + Source/cmDocumentation.cxx, Source/cmDumpDocumentation.cxx, + Source/cmVersion.cxx, Source/cmVersion.h, Source/cmake.cxx, + Source/CTest/cmCTestUpdateHandler.cxx: ENH: Add development + version support in CMake + +2004-10-22 10:19 hoffman + + * Source/cmLocalKdevelopGenerator.cxx: COMP: remove warning + +2004-10-21 17:29 hoffman + + * ChangeLog.manual: add .0.5 + +2004-10-21 17:11 hoffman + + * ChangeLog.manual: add .0.5 + +2004-10-21 16:07 andy + + * Source/CTest/cmCTestTestHandler.cxx: BUG: Fix reporting of path + and full command when test program was not found + +2004-10-21 15:21 hoffman + + * Source/: cmLocalGenerator.cxx, cmTarget.cxx: COMP: fix warnings + +2004-10-21 14:55 hoffman + + * Source/cmLocalGenerator.cxx: COMP: fix warning + +2004-10-21 14:34 hoffman + + * Modules/CMakeDetermineFortranCompiler.cmake, + Modules/Platform/Windows-g77.cmake, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmTarget.cxx, + Source/cmTarget.h: ENH: add the ability to generate custom + commands for a language that is not supported by an IDE + +2004-10-21 13:34 andy + + * Source/CTest/cmCTestBuildHandler.cxx: BUG: Handle remarks on SGI + properly + +2004-10-21 11:58 hoffman + + * Source/: cmLocalKdevelopGenerator.cxx, + cmLocalKdevelopGenerator.h: ENH: better support for kdevelop3 + +2004-10-20 12:37 andy + + * Source/kwsys/CommandLineArguments.cxx: COMP: Remove warning + +2004-10-20 08:19 hoffman + + * Source/cmCTest.cxx: fix warning on LRB + +2004-10-20 08:14 hoffman + + * Source/cmCTest.cxx: COMP: remove warning + +2004-10-19 15:09 hoffman + + * CMakeLists.txt, ChangeLog.manual, Modules/CMakeTestForFreeVC.cxx, + Modules/Platform/Windows-cl.cmake, Source/CMakeLists.txt, + Source/cmAddExecutableCommand.cxx, Source/cmCTest.cxx, + Source/cmCTest.h, Source/cmFileCommand.cxx, + Source/cmForEachCommand.cxx, Source/cmGlob.cxx, Source/cmGlob.h, + Source/cmGlobalCodeWarriorGenerator.cxx, + Source/cmGlobalCodeWarriorGenerator.h, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio6Generator.h, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio71Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmIncludeExternalMSProjectCommand.cxx, + Source/cmListFileLexer.c, Source/cmListFileLexer.h, + Source/cmListFileLexer.in.l, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/cmSystemTools.h, Source/cmTryRunCommand.cxx, + Source/cmWin32ProcessExecution.cxx, + Source/cmWin32ProcessExecution.h, Source/cmakemain.cxx, + Source/kwsys/SystemTools.cxx, + Tests/StringFileTest/CMakeLists.txt, + Utilities/Release/cmake_release.sh, + Utilities/Release/config_IRIX64: ENH: move 2.0.4 to LRB + +2004-10-19 14:57 hoffman + + * ChangeLog.manual: update change log + +2004-10-19 14:56 hoffman + + * Source/cmCTest.cxx: merge from main tree, add more warning cases + to ctest + +2004-10-19 14:51 hoffman + + * bootstrap: ENH: perfer gmake for bootstrap + +2004-10-19 13:25 andy + + * Tests/CTestTest/test.cmake.in: ENH: Display version of ctest + first + +2004-10-19 13:25 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Add regular expression + for remarks on IRIX + +2004-10-19 13:02 hoffman + + * Source/cmSystemTools.cxx: BUG: if the paths share nothing then + just return the remote path with no .. + +2004-10-19 12:48 andy + + * Source/cmCTest.cxx: BUG: Remove instances of // in the output + +2004-10-19 12:38 andy + + * Source/cmCTest.cxx: EHN: Even more cleanup + +2004-10-19 10:59 andy + + * Source/CMakeLists.txt, Tests/CTestTest/test.cmake.in: ERR: Fix + problems on windows + +2004-10-18 18:11 will + + * bootstrap: COMP: Fix on sun + +2004-10-18 17:24 andy + + * Source/CMakeLists.txt: ENH: Remove bogus clean step + +2004-10-18 15:37 andy + + * Source/CMakeLists.txt: BUG: Ok, this should make the test + actually do something + +2004-10-18 15:05 andy + + * Source/CMakeLists.txt: ENH: Do bootstrap test on all unix systems + +2004-10-18 13:19 hoffman + + * Source/cmSystemTools.cxx: ENH: better comments and variable names + +2004-10-18 12:33 andy + + * Source/CMakeLists.txt: ENH: Add bootstrap test + +2004-10-18 11:48 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: make sure output + path is used for target with canonical name + +2004-10-18 11:34 andy + + * bootstrap: ENH: Add check for previous bootstrap in the source + tree when doing out-of-source build + +2004-10-17 22:47 andy + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: BUG: Fix output to match the Dart + output + +2004-10-17 22:47 andy + + * Source/CTest/cmCTestTestHandler.cxx: ENH: Cleanups and unify + output + +2004-10-17 22:46 andy + + * Source/kwsys/CMakeLists.txt: ENH: Specify full path to the + executable + +2004-10-17 22:46 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add method to get the + relative path to source or build + +2004-10-17 19:45 andy + + * Source/CTest/: cmCTestCoverageHandler.cxx, + cmCTestCoverageHandler.h: ENH: Update to the new coverage code. + It may not be perfect yet, but it is a start + +2004-10-17 19:02 andy + + * Tests/CTestTest/test.cmake.in: ENH: Propagate more things + +2004-10-17 18:50 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Add + method to find file in parent directories if it exists + +2004-10-17 18:50 andy + + * Tests/CTestTest/test.cmake.in: ENH: Propagate MEMORYCHECK_COMMAND + and COVERAGE_COMMAND to the CTest test + +2004-10-17 18:49 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Handle coverage errors + +2004-10-15 09:24 king + + * Source/: cmake.cxx, cmake.h: ENH: Added --check-rerun option to + allow a runtime check of whether a new generate should really be + done. + +2004-10-15 09:23 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added + FileTimeCompare method to compare file modification times. + Currently the resolution is limited to one second. + +2004-10-15 08:57 king + + * Source/cmLocalUnixMakefileGenerator2.cxx: ENH: Added generation + of rule to build object file. + +2004-10-14 16:50 hoffman + + * Source/cmLocalGenerator.cxx: BUG: make sure all returns for + ConvertToRelativeOutputPath get passed by ConvertToOutputPath + +2004-10-14 15:09 hoffman + + * Source/cmLocalGenerator.cxx: BUG: now that system tools relative + path works, clean up the convert to relative output path code + +2004-10-14 11:59 hoffman + + * Source/cmLocalKdevelopGenerator.cxx: COMP: remove warning + +2004-10-14 11:46 hoffman + + * Source/: cmSystemTools.cxx, cmSystemTools.h: BUG: allow split + string to know if it is separating a path + +2004-10-13 11:37 hoffman + + * Source/: cmSystemTools.cxx, cmSystemTools.h: BUG: fix and comment + relative path funciton + +2004-10-12 18:29 andy + + * Modules/Dart.cmake: ENH: If dart or ctest are not found, use + ctest. For default drop location etc, support http submit (just + set DROP_METHOD to http. Only look for tclsh if DART_ROOT is set + +2004-10-12 10:57 hoffman + + * bootstrap, Source/CMakeLists.txt: allow kdevelop for cygwin + +2004-10-12 10:22 hoffman + + * Source/cmLocalKdevelopGenerator.cxx: BUG: remove bad headers + +2004-10-12 09:50 hoffman + + * bootstrap, Source/cmake.cxx: BUG: do not build kdevlop stuff when + bootstrapping + +2004-10-11 16:35 andy + + * Source/cmLocalKdevelopGenerator.cxx: ENH: Support not writing + files to the source tree. Generate single project file for whole + project, some other little cleanups + +2004-10-11 15:25 andy + + * Source/cmLocalKdevelopGenerator.cxx: BUG: Fix generated XML + +2004-10-11 14:47 andy + + * Source/CMakeLists.txt: STYLE: Remove anoying message + +2004-10-11 13:57 andy + + * Source/cmCTest.cxx: BUG: On Windows, remove extra CR characters. + Hopefully this will result in not duplicated new-lines + +2004-10-11 11:57 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: fix split program from args to + not get stuck in an infinite loop in some cases + +2004-10-11 11:55 hoffman + + * Modules/CMakeTestCXXCompiler.cmake: ENH: make sure the c++ + compiler is a c++ compiler + +2004-10-11 11:47 hoffman + + * bootstrap: ENH: add kdev to bootstrap + +2004-10-11 11:32 hoffman + + * Source/: CMakeLists.txt, cmGlobalKdevelopGenerator.cxx, + cmGlobalKdevelopGenerator.h, cmLocalKdevelopGenerator.cxx, + cmLocalKdevelopGenerator.h, cmake.cxx: NEW: add kdevelop patch + from Alexander Neundorf + +2004-10-11 08:02 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ERR: Replaced + std::string with kwsys_stl::string for portability. + +2004-10-10 12:14 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Add + method to retrieve parent directory and for checking if directory + is a subdirectory of another directory + +2004-10-06 12:41 hoffman + + * ChangeLog.manual, Source/cmAddExecutableCommand.cxx: FIX: merge + from main tree mac bundle fix + +2004-10-06 12:25 hoffman + + * ChangeLog.manual, Source/cmCTest.cxx, Source/cmCTest.h: ENH: + merge from main tree fix for build overview page + +2004-10-05 16:16 andy + + * Source/CMakeLists.txt: ERR: Too much commits + +2004-10-05 16:14 andy + + * Source/: CMakeLists.txt, cmCTest.cxx, CTest/CMakeLists.txt, + CTest/cmCTestSubmit.cxx: PERF: Several cleanups, and remove need + for Curl directory to be in include path + +2004-10-05 11:37 hoffman + + * Source/cmake.cxx: FIX: correctly handle if path table can not + open + +2004-10-05 11:29 hoffman + + * bootstrap: ENH: pick native compilers first, and aCC before CC + +2004-10-05 10:59 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: fix realpath problem and unix + slashes + +2004-10-05 10:13 andy + + * Source/CTest/cmCTestSubmit.cxx: ERR: Fix TRUE build problem and + replace error couts with cerrs + +2004-10-05 10:00 andy + + * Source/cmCTest.cxx: ERR: Fix Windows build + +2004-10-05 09:25 martink + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: COMP: fix + some compile issues with insert + +2004-10-05 09:01 martink + + * Source/cmake.cxx: COMP: fix bad include file + +2004-10-05 08:49 andy + + * bootstrap: ERR: Fix bootstrap + +2004-10-05 08:33 andy + + * Modules/: CheckTypeSize.c.in, CheckTypeSize.cmake, + CheckTypeSize.c: ENH: Add option of adding random include files + before doing CheckTypeSize + +2004-10-05 08:32 andy + + * Modules/CheckIncludeFiles.cmake: ENH: When test fails, write out + the output + +2004-10-04 16:15 king + + * Source/: cmLocalUnixMakefileGenerator2.cxx, + cmLocalUnixMakefileGenerator2.h: ENH: Started new makefile + generator implementation. It will temporarily be called + cmLocalUnixMakefileGenerator2 until it is ready to replace the + original completely. + +2004-10-04 12:31 martink + + * CMake.rtf, Source/cmake.cxx, Source/cmake.h, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in: + ENH: Mathieus support for path conversions + +2004-10-04 12:02 andy + + * Tests/CTestTest/test.cmake.in: BUG: Use kwsys from the source + tree + +2004-10-04 08:06 andy + + * Tests/CTestTest/test.cmake.in: ENH: Better sorting of results + +2004-10-03 07:27 andy + + * Tests/CTestTest/test.cmake.in: BUG: Fix problem with spaces in + the path + +2004-10-03 07:14 andy + + * Source/ctest.cxx: BUG: Attempt to remove memory leak + +2004-10-01 13:23 andy + + * Source/CTest/cmCTestBuildHandler.cxx: BUG: Add regular expression + to vector + +2004-10-01 13:10 andy + + * Tests/CTestTest/test.cmake.in: ENH: Use existing CTest and cmake + +2004-10-01 12:21 andy + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestScriptHandler.h: ENH: Add CTEST_EXECUTABLE_NAME to + CTest scripting. This way you do not have to specify ctest + executable in CTEST_COMMAND, but just a variable + +2004-10-01 11:36 king + + * Source/kwsys/testProcess.c: ERR: Added missing include of + string.h + +2004-10-01 11:13 andy + + * Tests/CTestTest/test.cmake.in: ENH: Let us recognize it on the + dashboard + +2004-09-30 18:45 andy + + * Source/CMakeLists.txt: ENH: Cleanup CTest test + +2004-09-30 18:45 andy + + * Tests/CTestTest/test.cmake.in: ENH: Do kwsys instead of CMake + +2004-09-30 18:06 andy + + * Source/CTest/: cmCTestBuildHandler.cxx, cmCTestBuildHandler.h: + ERR: Fix for non-gcc/icc compilers + +2004-09-30 17:42 king + + * Source/kwsys/testProcess.c: ENH: Added optional display of output + for tests. Avoid printing alot of output for test 6. + +2004-09-30 17:27 andy + + * Source/CTest/cmCTestBuildHandler.h: ERR: Fix error + +2004-09-30 16:24 andy + + * bootstrap: BUG: Check if the compiler is gnu. If it is, do not do + special platform tests. Fixes Bug #1215 - bootstrap uses native + flags with gnu compiler on OSF + +2004-09-30 16:20 andy + + * Source/CTest/: cmCTestBuildHandler.cxx, cmCTestBuildHandler.h: + ENH: Add support for SourceFile and LineNumber + +2004-09-29 16:07 hoffman + + * Source/: cmCTest.h, cmCacheManager.cxx, cmCacheManager.h, + cmDynamicLoader.cxx, cmGlobalGenerator.cxx, + cmLoadCacheCommand.cxx, cmLocalUnixMakefileGenerator.cxx, + cmMakefile.cxx, cmTarget.cxx, cmakewizard.cxx: ENH: shorten the + symbols a bit and remove maps of std::string for map of + cmStdString + +2004-09-29 14:14 andy + + * Source/CTest/: cmCTestTestHandler.cxx, cmCTestTestHandler.h: BUG: + Remove maximum size of test output + +2004-09-29 13:21 andy + + * Source/kwsys/SystemTools.hxx.in: ERR: Fix Windows build + +2004-09-29 12:20 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h, + kwsys/SystemTools.cxx, kwsys/SystemTools.hxx.in: ENH: Move + permissions code to kwsys so that copyfile can use it. Fixes Bug + #1133 - cmake -E copy file dir sets the wrong permissions on the + destination directory + +2004-09-29 11:52 andy + + * Source/CTest/cmCTestScriptHandler.cxx: BUG: If extra update + failes, continue with dashboard. Closes Bug #894 - Fatal CVS + update error kills test, and is not reported + +2004-09-29 11:18 andy + + * Source/kwsys/SystemTools.cxx: ENH: When copy file, if the output + file exits, delete it first + +2004-09-29 08:58 andy + + * Source/kwsys/CMakeLists.txt: ENH: Allow CMake to use + CommandLineArguments without warning + +2004-09-29 08:34 andy + + * Source/kwsys/CommandLineArguments.hxx.in: ENH: Add lots of + comments + +2004-09-29 07:56 andy + + * Source/kwsys/: CommandLineArguments.cxx, + CommandLineArguments.hxx.in: ENH: Add access to last argument + parsed + +2004-09-28 17:51 andy + + * CMakeLists.txt: ENH: Enable Command Line Arguments + +2004-09-28 17:51 andy + + * Source/CTest/: cmCTestScriptHandler.cxx, cmCTestScriptHandler.h: + ENH: Move all extracting of variables to ExtractVariables. This + way it is easy to know what variables are used + +2004-09-28 11:34 andy + + * Source/kwsys/: CommandLineArguments.cxx, + CommandLineArguments.hxx.in: ENH: Add accessor for Argv0 + +2004-09-28 09:00 andy + + * Source/CTest/: cmCTestScriptHandler.h, cmCTestScriptHandler.cxx: + ENH: Add some documentation + +2004-09-27 16:33 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: make sure release + flags are replaced + +2004-09-27 15:21 hoffman + + * Source/CMakeLists.txt: ENH: allow for a different jni.h to enable + java testing + +2004-09-27 15:15 hoffman + + * Source/CMakeLists.txt: ENH: allow for a different jni.h to enable + java testing + +2004-09-27 15:11 hoffman + + * Source/CMakeLists.txt: space in path problem + +2004-09-27 14:39 hoffman + + * Source/CMakeLists.txt: ENH: use jni.h to determine java version + +2004-09-27 14:35 hoffman + + * CMakeLists.txt, ChangeLog.manual, Source/cmCTest.cxx, + Utilities/Release/cmake_release.sh: merge from main tree and + change version to 2.0.4 + +2004-09-27 14:21 hoffman + + * Source/CMakeLists.txt: ENH: use jni.h to determine java version + +2004-09-27 13:36 andy + + * Source/cmCTest.cxx: BUG: If notes file is missing, create empty + notes file with error message + +2004-09-27 13:03 hoffman + + * Tests/Fortran/CMakeLists.txt: clean up output of test and force + verbose makefiles + +2004-09-27 11:36 hoffman + + * Modules/CMakeJavaCompiler.cmake.in, + Modules/CMakeJavaInformation.cmake, + Source/cmLocalUnixMakefileGenerator.cxx: BUG: make sure java jar + files are not libfoo.jar but are just foo.jar + +2004-09-27 11:03 hoffman + + * Source/CMakeLists.txt: ENH: better message for skipping java + +2004-09-27 09:49 andy + + * Modules/Documentation.cmake: ENH: Replace INCLUDE(Find...) with + FIND_PACKAGE(...) + +2004-09-24 16:54 hoffman + + * Source/CMakeLists.txt: ENH: use correct args for test of java + +2004-09-24 16:34 hoffman + + * Tests/Java/: CMakeCheckJavaPath.java, CMakeLists.txt: try and get + this java test to work + +2004-09-24 16:34 hoffman + + * Source/CMakeLists.txt: ENH: only use newer java for testing + +2004-09-24 15:40 hoffman + + * Tests/Java/: CMakeCheckJavaPath.java, CMakeLists.txt: ENH: add + some java code to try and find the system path + +2004-09-24 14:37 hoffman + + * Modules/: CMakeCXXInformation.cmake, + CMakeFortranInformation.cmake, + CMakeSystemSpecificInformation.cmake: BUG: LINK_FLAGS are now all + LINK_(LANG)_FLAGS + +2004-09-24 11:35 martink + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: fix crash with vs6 + +2004-09-24 11:34 martink + + * Source/CMakeLists.txt: ENH: check for all parts of java + +2004-09-24 11:05 hoffman + + * Tests/Java/CMakeLists.txt: ENH: remove classpath so that this + test passes with older java compilers that clober the system + class path with the -classpath option + +2004-09-24 10:07 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: replace all enabled + languages in rule vars + +2004-09-24 09:34 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: change ignore function so that + it first checks to see if the extension has a language + +2004-09-24 09:11 hoffman + + * Modules/Platform/Darwin.cmake: ENH: use c++ with c++ and c flags + with c + +2004-09-24 08:39 hoffman + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: ENH: correctly ignore files + +2004-09-23 17:49 hoffman + + * Source/CMakeLists.txt: temporary fix to try and get a clean + dashboard + +2004-09-23 15:02 andy + + * Source/kwsys/CommandLineArguments.cxx: ERR: Fix memory problem + +2004-09-23 11:53 andy + + * Source/kwsys/CommandLineArguments.cxx: STYLE: Only allocate as + much space as needed + +2004-09-23 11:45 andy + + * Source/kwsys/CommandLineArguments.cxx: ENH: Make + GetRemainingArguments actually work + +2004-09-23 11:44 hoffman + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: ENH: only replace the language + being used in expand rule variables + +2004-09-23 09:11 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: STYLE: remove warning + +2004-09-23 09:08 hoffman + + * Source/cmTryCompileCommand.cxx: remove warning + +2004-09-23 08:51 hoffman + + * Modules/CMakeRCInformation.cmake, Source/cmGlobalGenerator.cxx: + ENH: fix problems with .def and RC files + +2004-09-23 08:20 hoffman + + * CMakeLists.txt: ENH: make sure cmake has 2.0 + +2004-09-23 07:53 andy + + * bootstrap: ENH: Attempt to detect a non-parallel make + +2004-09-22 17:50 hoffman + + * Source/cmTarget.cxx: BUG: fix perfered linker language code + +2004-09-22 17:41 hoffman + + * Tests/Java/CMakeLists.txt: use verbose makefiles + +2004-09-22 16:51 hoffman + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: make it verbose + +2004-09-22 16:44 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: fix compilation + +2004-09-22 15:14 hoffman + + * Source/cmProjectCommand.cxx: remove warnings + +2004-09-22 14:52 hoffman + + * Modules/CMakeJavaInformation.cmake: BUG: let the generator quote + the path + +2004-09-22 14:42 hoffman + + * Modules/CMakeCCompiler.cmake.in, Modules/CMakeCInformation.cmake, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeCommonLanguageInclude.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeDetermineRCCompiler.cmake, + Modules/CMakeFortranInformation.cmake, + Modules/CMakeGenericSystem.cmake, + Modules/CMakeJavaCompiler.cmake.in, + Modules/CMakeJavaInformation.cmake, + Modules/CMakeRCCompiler.cmake.in, + Modules/CMakeRCInformation.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestJavaCompiler.cmake, + Modules/CMakeTestRCCompiler.cmake, Modules/Platform/AIX.cmake, + Modules/Platform/FreeBSD.cmake, Modules/Platform/HP-UX.cmake, + Modules/Platform/IRIX.cmake, Modules/Platform/IRIX64.cmake, + Modules/Platform/Linux-como.cmake, Modules/Platform/Linux.cmake, + Modules/Platform/MP-RAS.cmake, Modules/Platform/NetBSD.cmake, + Modules/Platform/OSF1.cmake, Modules/Platform/RISCos.cmake, + Modules/Platform/SunOS.cmake, Modules/Platform/ULTRIX.cmake, + Modules/Platform/UNIX_SV.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-gcc.cmake, Source/CMakeLists.txt, + Source/cmCommands.cxx, Source/cmEnableLanguageCommand.cxx, + Source/cmEnableLanguageCommand.h, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, Source/cmInstallFilesCommand.cxx, + Source/cmInstallProgramsCommand.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/cmProjectCommand.cxx, Source/cmTarget.cxx, + Source/cmTarget.h, Source/cmTryCompileCommand.cxx, + Source/cmTryRunCommand.cxx, Tests/Fortran/CMakeLists.txt, + Tests/Java/A.java, Tests/Java/CMakeLists.txt, + Tests/Java/HelloWorld.java: ENH: major changes to support + addition of languages from cmake modules directory. + +2004-09-22 10:06 hoffman + + * Source/CMakeLists.txt: ENH: only try to use fortran if the + generator is make based + +2004-09-22 08:50 hoffman + + * Modules/CMakeFortranCompiler.cmake.in: BUG: fix GNU check + variable and add new variables used by enable language + +2004-09-21 12:51 hoffman + + * Source/cmListFileLexer.h: merge from main tree + +2004-09-21 12:47 hoffman + + * ChangeLog.manual, Source/cmListFileLexer.c, + Source/cmListFileLexer.in.l, Tests/StringFileTest/CMakeLists.txt: + merge from main tree + +2004-09-20 14:39 hoffman + + * Modules/FindJava.cmake: ENH: look for java in more places + +2004-09-20 13:47 hoffman + + * Source/: cmGlobalGenerator.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: BUG: branch only fix for + VSExternalInclude + +2004-09-20 08:51 king + + * Source/cmListFileLexer.c, Source/cmListFileLexer.in.l, + Tests/StringFileTest/CMakeLists.txt: BUG#1179: Fix for syntax in + unquoted arguments. + +2004-09-17 16:46 hoffman + + * ChangeLog.manual, Source/CMakeLists.txt, + Source/cmForEachCommand.cxx, Source/cmGlob.cxx, Source/cmGlob.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio71Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmIncludeExternalMSProjectCommand.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmWin32ProcessExecution.cxx, + Source/cmWin32ProcessExecution.h, Source/cmakemain.cxx, + Source/kwsys/SystemTools.cxx, + Tests/VSExternalInclude/CMakeLists.txt, + Tests/VSExternalInclude/main.cpp, + Tests/VSExternalInclude/Lib1/CMakeLists.txt, + Tests/VSExternalInclude/Lib1/lib1.cpp, + Tests/VSExternalInclude/Lib1/lib1.h, + Tests/VSExternalInclude/Lib2/CMakeLists.txt, + Tests/VSExternalInclude/Lib2/lib2.cpp, + Tests/VSExternalInclude/Lib2/lib2.h: merge from main tree + +2004-09-17 16:00 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: merge from main tree + bug 1041 + +2004-09-17 15:57 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: fix for bug 1041, + _MBCS sometimes added for UNIICODE which is bad + +2004-09-17 09:14 hoffman + + * Modules/CMakeJavaCompiler.cmake.in: BUG: commit bug 1123 + +2004-09-17 09:01 hoffman + + * Source/cmProjectCommand.h: BUG: 1163 fix documentation + +2004-09-16 17:16 hoffman + + * Source/cmFileCommand.cxx: merge from main tree fix bug 1122 + +2004-09-16 17:13 andy + + * Source/CTest/cmCTestBuildHandler.cxx: ENH: Attempt to handle + Intel's remarks. Close Bug #1156 - Better support for icc + 'remark' + +2004-09-16 12:39 andy + + * Source/kwsys/SystemTools.cxx: ENH: Add missing include + +2004-09-16 10:58 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Add + method to retrieve the terminal width + +2004-09-16 10:49 andy + + * Source/kwsys/CommandLineArguments.cxx: ENH: a bit more cleanup. + The help should really be replaced by something like + cmDocumentation + +2004-09-16 10:48 martink + + * Source/cmGlobalVisualStudio6Generator.cxx, + Tests/VSExternalInclude/CMakeLists.txt: BUG: fix VSExternal for + visual studio 6 + +2004-09-16 10:27 andy + + * Source/kwsys/: CommandLineArguments.cxx, + CommandLineArguments.hxx.in: ENH: Condense help string, add + support for setting line length and make it work + +2004-09-15 15:15 hoffman + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx: BUG: fix external project + command for VS 7 and 71 + +2004-09-15 14:08 andy + + * Source/: cmGlob.cxx, cmGlob.h: ENH: Remove double slash + +2004-09-15 13:33 andy + + * Source/cmGlob.cxx: BUG: Attempt to fix bug on Windows (and apple) + where files returned are all lowercase + +2004-09-15 13:31 andy + + * Source/cmForEachCommand.cxx: BUG: Propagate file name and line + number inside FOREACH. Fixes Bug #1169 - Erro messages inside + FOREACH have bad filename and line number + +2004-09-15 13:03 hoffman + + * Source/cmGlobalVisualStudio7Generator.cxx: ENH: fix for vs 70 + generator + +2004-09-15 12:07 hoffman + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmIncludeExternalMSProjectCommand.cxx, + cmLocalVisualStudio7Generator.cxx: ENH: clean up of + INCLUDE_EXTERNAL_MSPROJECT contributed by Clinton Stimpson + +2004-09-15 11:31 hoffman + + * Source/: cmGlobalGenerator.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: BUG: make sure env CC and CXX + are not set for VS IDE builds + +2004-09-15 10:35 martink + + * Tests/VSExternalInclude/CMakeLists.txt: ENH: produce better + output + +2004-09-15 10:32 martink + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, + CMakeDetermineFortranCompiler.cmake: ENH: do not check for gnu + for visual studio + +2004-09-15 09:22 andy + + * Source/kwsys/: CommandLineArguments.cxx, + CommandLineArguments.hxx.in: ENH: Move callback structure out of + the public interface. Also block the warning on Visual Studio + Debug + +2004-09-14 16:34 hoffman + + * Tests/VSExternalInclude/: CMakeLists.txt: ENH: add a test for + external projects + +2004-09-14 16:01 hoffman + + * Source/CMakeLists.txt, Tests/VSExternalInclude/CMakeLists.txt, + Tests/VSExternalInclude/main.cpp, + Tests/VSExternalInclude/Lib1/CMakeLists.txt, + Tests/VSExternalInclude/Lib1/lib1.cpp, + Tests/VSExternalInclude/Lib1/lib1.h, + Tests/VSExternalInclude/Lib2/CMakeLists.txt, + Tests/VSExternalInclude/Lib2/lib2.cpp, + Tests/VSExternalInclude/Lib2/lib2.h: ENH: add a test for external + projects + +2004-09-14 14:05 hoffman + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmIncludeExternalMSProjectCommand.cxx: bug fixes for external + projects + +2004-09-14 11:48 martink + + * Source/kwsys/: CommandLineArguments.cxx, + CommandLineArguments.hxx.in: ERR: Fix borland build + +2004-09-14 11:39 andy + + * Source/kwsys/CommandLineArguments.cxx: ERR: Add missing include + +2004-09-14 10:34 andy + + * Source/kwsys/: CommandLineArguments.cxx, + CommandLineArguments.hxx.in: ENH: Use const correctness for + arguments + +2004-09-14 09:19 hoffman + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: BUG: fix include external + project bug + +2004-09-13 19:06 andy + + * Source/kwsys/: CommandLineArguments.cxx, + testCommandLineArguments.cxx: ERR: More missing ios and includes + +2004-09-13 18:57 andy + + * Source/kwsys/CommandLineArguments.cxx: ERR: Fix IOS namespace + +2004-09-13 16:15 andy + + * Source/kwsys/: CMakeLists.txt, CommandLineArguments.cxx, + CommandLineArguments.hxx.in, testCommandLineArguments.cxx: ENH: + Move command line argument parsing code to kwsys + +2004-09-10 14:40 hoffman + + * Source/: cmCTest.cxx, cmakemain.cxx: ENH: fix warning correctly + +2004-09-10 11:19 andy + + * CMakeLists.txt: ENH: Add warning messages if curses library is + not found + +2004-09-10 11:15 andy + + * Modules/FindQt.cmake: ENH: Use FIND_PACKAGE instead of + INCLUDE(Find... + +2004-09-10 08:42 martink + + * Source/cmCTest.cxx: fix dash8 warning + +2004-09-10 08:30 martink + + * Source/CTest/cmCTestTestHandler.h: fix HPUX bugs + +2004-09-09 16:05 hoffman + + * Modules/Platform/Linux-ifort.cmake: add ifort support + +2004-09-09 12:58 hoffman + + * Source/: cmCTest.cxx, cmakemain.cxx: WAR: remove a warning on i64 + +2004-09-09 11:50 hoffman + + * Modules/Platform/HP-UX.cmake: try to fix fortran on hp + +2004-09-09 10:52 martink + + * Source/CTest/cmCTestTestHandler.cxx: missing include + +2004-09-09 09:31 martink + + * Source/CTest/cmCTestCoverageHandler.cxx: missing include + +2004-09-09 08:41 martink + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + CTest/cmCTestCoverageHandler.cxx, CTest/cmCTestCoverageHandler.h, + CTest/cmCTestTestHandler.cxx, CTest/cmCTestTestHandler.h, + CTest/cmCTestUpdateHandler.cxx: more cleanup of ctest + +2004-09-08 17:53 hoffman + + * Tests/Fortran/CMakeLists.txt: ENH: add more output for fortran so + I can figure out what is going on with other fortran compilers + +2004-09-08 10:41 hoffman + + * Source/: cmWin32ProcessExecution.cxx, cmWin32ProcessExecution.h: + BUG: don't close the pipes too early + +2004-09-07 16:55 hoffman + + * Source/: cmCacheManager.cxx, cmDumpDocumentation.cxx, + cmEnableTestingCommand.cxx, cmExportLibraryDependencies.cxx, + cmGlobalCodeWarriorGenerator.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmLocalUnixMakefileGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, cmMakefile.cxx, + cmTryCompileCommand.cxx, cmUseMangledMesaCommand.cxx, + cmVTKWrapPythonCommand.cxx, cmVTKWrapTclCommand.cxx: ENH: add + better error reporting for file open failures + +2004-09-07 16:03 hoffman + + * Source/: cmWin32ProcessExecution.cxx, kwsys/SystemTools.cxx: Fix + leaked file and registry descriptors + +2004-09-07 12:51 martink + + * Source/: cmCTest.h, cmCTest.cxx: duh errors + +2004-09-07 11:45 martink + + * Source/: cmCTest.cxx, cmCTest.h: more warnings + +2004-09-07 11:28 martink + + * Source/CTest/cmCTestScriptHandler.cxx: more warnings + +2004-09-07 10:46 martink + + * Source/cmCTest.cxx: more cleanup + +2004-09-07 10:37 martink + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + CTest/cmCTestBuildHandler.cxx, CTest/cmCTestBuildHandler.h: more + cleanup + +2004-09-07 09:17 martink + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + CTest/cmCTestConfigureHandler.cxx, + CTest/cmCTestConfigureHandler.h, CTest/cmCTestScriptHandler.cxx, + CTest/cmCTestScriptHandler.h, CTest/cmCTestUpdateHandler.cxx, + CTest/cmCTestUpdateHandler.h: some bug fixes for my recent + checkins and some more cleanup + +2004-09-06 14:43 martink + + * Source/CTest/cmCTestScriptHandler.cxx: another platform fix + +2004-09-06 14:17 martink + + * Source/CTest/cmCTestScriptHandler.h: another platform fix + +2004-09-06 13:54 martink + + * Source/cmCTest.cxx: jesus + +2004-09-06 13:37 martink + + * Source/CMakeLists.txt: oops + +2004-09-06 12:49 martink + + * Source/kwsys/SystemTools.cxx: fix warning + +2004-09-06 12:46 martink + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h: starting cleanup + of ctest + +2004-09-06 12:46 martink + + * Source/cmGlobalGenerator.cxx: warning fix + +2004-09-06 12:45 martink + + * Source/CTest/: cmCTestScriptHandler.cxx, cmCTestScriptHandler.h: + broke out part of test scripting into seperate class + +2004-09-03 15:47 hoffman + + * ChangeLog.manual, Modules/CMakeTestForFreeVC.cxx, + Modules/Platform/Windows-cl.cmake: merge from main tree fix for + free vc tools + +2004-09-03 15:19 hoffman + + * Modules/: CMakeTestForFreeVC.cxx, Platform/Windows-cl.cmake: ENH + better test for free VC tools + +2004-09-03 13:49 hoffman + + * Source/cmGlobalCodeWarriorGenerator.cxx: remove warning + +2004-09-03 13:48 hoffman + + * Source/cmGlobalCodeWarriorGenerator.cxx: fix for darwin + +2004-09-03 13:24 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator.cxx: ENH: remove warnings + +2004-09-03 12:03 hoffman + + * Modules/CMakeCCompiler.cmake.in, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeFortranCompiler.cmake.in, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator.cxx, Source/cmMakefile.cxx: + ENH: define language extensions in cmake files and not hard + coded, also fix trycompile problem + +2004-09-03 12:01 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: check for ms free command + line tools + +2004-08-31 18:51 king + + * Source/cmListFileCache.cxx: BUG: Fixed line number of end of file + error message. + +2004-08-31 18:39 king + + * Source/: cmListFileCache.cxx, cmListFileLexer.c, + cmListFileLexer.h, cmListFileLexer.in.l: BUG#1049: Added error + message when file ends in an unterminated string. + +2004-08-31 10:41 king + + * Source/cmFileCommand.cxx: BUG: Fix crash when CMAKE_DEBUG_POSTFIX + is not set. + +2004-08-31 10:20 andy + + * DartConfig.cmake: ENH: Cleanups + +2004-08-31 08:25 king + + * Source/kwsys/kwsys_ios_iosfwd.h.in: ERR: Removed inclusion of + fstream header. This file is meant as a compatibility header for + iosfwd and therefore should not include any other header. + Whatever was fixed by adding the include of fstream here should + be fixed by other means. + +2004-08-30 15:15 hoffman + + * ChangeLog.manual, Source/cmCTest.cxx: merge fixes from main tree + +2004-08-30 14:07 hoffman + + * ChangeLog.manual, Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, Source/cmMakefile.cxx: + fix RUN_TESTS and generated header files merge from main tree + +2004-08-30 14:01 hoffman + + * ChangeLog.manual, Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-gcc.cmake, Source/cmSystemTools.h, + Utilities/Release/cmake_release.sh: merge from main tree + +2004-08-30 13:50 hoffman + + * Source/: cmSystemTools.h, kwsys/SystemTools.cxx: BUG: fixes for + mingw and CMakesetup with spaces in the source directory + +2004-08-30 12:14 hoffman + + * Modules/Platform/Windows-gcc.cmake: Make sure cmake uses + consistent module prefixes + +2004-08-27 09:55 hoffman + + * Source/cmMakefile.h: ENH: remove warning + +2004-08-27 08:41 hoffman + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalBorlandMakefileGenerator.h, + cmGlobalCodeWarriorGenerator.cxx, cmGlobalCodeWarriorGenerator.h, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.h, + cmGlobalUnixMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmMakefile.cxx, cmMakefile.h, + cmProjectCommand.cxx: ENH: try to initialize all languages at the + same time + +2004-08-26 22:52 andy + + * Modules/: CMakeBackwardCompatibilityC.cmake, + CMakeBackwardCompatibilityCXX.cmake, Documentation.cmake, + FindFLTK.cmake, FindGLU.cmake, FindGnuplot.cmake, + FindOpenGL.cmake, FindPNG.cmake, FindPerl.cmake, + FindPythonLibs.cmake, FindQt.cmake, FindSelfPackers.cmake, + FindTCL.cmake, FindThreads.cmake, FindUnixCommands.cmake, + FindVTK.cmake, FindWget.cmake, FindX11.cmake, + FindwxWidgets.cmake, FindwxWindows.cmake, + TestForANSIStreamHeaders.cmake, UseVTK40.cmake, + Use_wxWindows.cmake, UsewxWidgets.cmake, + Platform/CYGWIN-g77.cmake: ENH: Cleanup. Use relative path to + modules + +2004-08-26 21:43 hoffman + + * Modules/Platform/SunOS.cmake: hack to try and fix sun platform + +2004-08-26 18:00 king + + * Docs/cmake-mode.el: BUG: Only count block open tokens if they are + followed by an open paren. + +2004-08-26 17:49 hoffman + + * Source/cmTryCompileCommand.cxx: ENH: try compiles in CXX require + C to be enabled as well + +2004-08-26 16:34 hoffman + + * Modules/CMakeDetermineFortranCompiler.cmake, + Source/CMakeLists.txt: ENH: try to find fortran compiler before + adding the test + +2004-08-26 16:11 hoffman + + * Source/CMakeLists.txt: ENH: try to find fortran compiler before + adding the test + +2004-08-26 16:00 hoffman + + * Source/CMakeLists.txt: remove test fortran for now + +2004-08-26 15:55 hoffman + + * Source/CMakeLists.txt: Add a fortran test if there is a fortran + compiler + +2004-08-26 15:50 hoffman + + * Modules/CMakeDetermineFortranCompiler.cmake, + Source/CMakeLists.txt: Add a fortran test if there is a fortran + compiler + +2004-08-26 14:55 hoffman + + * Modules/CMake.cmake, Modules/CMakeCInformation.cmake, + Modules/CMakeCXXInformation.cmake, + Modules/CMakeCommonLanguageInclude.cmake, + Modules/CMakeDefaultMakeRuleVariables.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeFortranCompiler.cmake.in, + Modules/CMakeFortranInformation.cmake, + Modules/CMakeGenericSystem.cmake, + Modules/CMakeJavaCompiler.cmake.in, + Modules/CMakeJavaInformation.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestFortranCompiler.cmake, + Modules/Platform/AIX.cmake, Modules/Platform/BSDOS.cmake, + Modules/Platform/CYGWIN.cmake, Modules/Platform/Darwin.cmake, + Modules/Platform/FreeBSD.cmake, Modules/Platform/HP-UX.cmake, + Modules/Platform/IRIX.cmake, Modules/Platform/IRIX64.cmake, + Modules/Platform/Linux.cmake, Modules/Platform/MP-RAS.cmake, + Modules/Platform/NetBSD.cmake, Modules/Platform/OSF1.cmake, + Modules/Platform/OpenBSD.cmake, Modules/Platform/RISCos.cmake, + Modules/Platform/SCO_SV.cmake, Modules/Platform/SINIX.cmake, + Modules/Platform/SunOS.cmake, Modules/Platform/True64.cmake, + Modules/Platform/ULTRIX.cmake, Modules/Platform/UNIX_SV.cmake, + Modules/Platform/UnixWare.cmake, + Modules/Platform/Windows-gcc.cmake, + Modules/Platform/Windows-ifort.cmake, + Modules/Platform/Xenix.cmake, Source/CMakeLists.txt, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalUnixMakefileGenerator.cxx, + Source/cmListFileCache.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmProjectCommand.cxx, Source/cmTryCompileCommand.cxx, + Source/cmake.cxx, Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/Fortran/CMakeLists.txt: ENH: more uniform approach to + enable language, one step closer to being able to enable a + language without modifing cmake source code + +2004-08-26 09:45 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Make default date shorter + +2004-08-25 12:42 hoffman + + * Source/cmCTest.cxx: ENH: better error display for failure + +2004-08-25 08:44 hoffman + + * Source/cmCTest.cxx: ENH: produce better error message for missing + variables in -S mode + +2004-08-24 11:30 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ERR: Fix the list of + targets. The base target name now includes the MACOSX_BUNDLE path + +2004-08-24 11:17 andy + + * Source/cmAddExecutableCommand.cxx: BUG: If macdir does not end + with '/' then add it always, not just when adding current + directory + +2004-08-23 14:33 andy + + * Source/cmake.cxx: ENH: Implement PreLoad.cmake feature for + CMakeSetup + +2004-08-23 14:09 hoffman + + * Source/CTest/CMakeLists.txt: fix syntax + +2004-08-23 13:45 hoffman + + * CMakeLists.txt, Source/CTest/CMakeLists.txt: ENH: fix out of the + box build on sgi to match dashboards + +2004-08-23 11:33 hoffman + + * Modules/FindJava.cmake: BUG: 1107 add extra place to look for + java + +2004-08-23 11:29 martink + + * Source/cmCTest.cxx: now will check out src dir if it has the necc + info + +2004-08-23 11:21 hoffman + + * Modules/FindJava.cmake: BUG: 1107 add extra place to look for + java + +2004-08-19 12:51 andy + + * Source/cmCTest.cxx: ENH: Handle gmake error message + +2004-08-18 09:28 andy + + * Modules/CMakeSystemSpecificInformation.cmake: BUG: Unly set gcc + flags for C compiler if CMAKE_COMPILER_IS_GNUCC is set + +2004-08-18 08:52 andy + + * Source/cmCTest.cxx: BUG: When GetNightlyTime returns past time, + fix everything. Also, return correct time when printing + +2004-08-17 19:18 andy + + * Modules/Platform/Darwin-xlc.cmake: ENH: Initial import for Darwin + using xlC + +2004-08-17 16:13 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: ENH: Reload + PreLoad.cmake every time you do configure + +2004-08-17 15:36 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: ENH: Enable preload for + ccmake + +2004-08-17 15:36 andy + + * Source/: cmake.cxx, cmake.h: ENH: Move PreLoad.cmake code to + public method so that ccmake and CMakeSetup can call it + +2004-08-17 14:23 andy + + * Source/cmCTest.cxx: BUG: Attempt to fix timezone problem where + start time appears one day before the actual start time. Also add + verbosity to GetNightlyTime + +2004-08-16 09:03 king + + * Utilities/Release/config_IRIX64: BUG: Need to set HAVE_LIBCRYPTO + to 0 instead of letting the test be done. + +2004-08-11 20:36 hoffman + + * Source/cmCTest.cxx: fix it + +2004-08-11 16:58 hoffman + + * Source/: cmAbstractFilesCommand.cxx, cmAddExecutableCommand.cxx, + cmCreateTestSourceList.cxx, cmGlobalCodeWarriorGenerator.cxx, + cmGlobalGenerator.cxx, cmGlobalUnixMakefileGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmUtilitySourceCommand.cxx: + ENH: use GetRequiredDefinition instead of GetDefinition and crash + +2004-08-11 16:57 hoffman + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: ENH: change RUN_TESTS to use + -C and not -D also use GetRequiredDefinition where needed + +2004-08-11 16:37 hoffman + + * Source/cmCTest.cxx: ENH: fixes for RUN_TESTS from visual studio + IDE, fprintf does not print right away, so std::cerr had to be + used. Also, allow .\ to start the config type + +2004-08-11 16:35 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestFortranCompiler.cmake, Source/cmSystemTools.cxx: + ENH: minor fortran fixes + +2004-08-11 09:31 hoffman + + * CMakeLists.txt, ChangeLog.manual, DartConfig.cmake, + Docs/cmake-mode.el, Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeVS8FindMake.cmake, Modules/Dart.cmake, + Modules/FindDoxygen.cmake, Modules/FindFLTK.cmake, + Modules/FindKDE.cmake, Modules/FindQt.cmake, + Modules/FindSWIG.cmake, Modules/UseSWIG.cmake, + Source/CMakeLists.txt, Source/cmAuxSourceDirectoryCommand.h, + Source/cmCTest.cxx, Source/cmCTest.h, Source/cmCommands.cxx, + Source/cmCreateTestSourceList.cxx, Source/cmDynamicLoader.cxx, + Source/cmExecProgramCommand.cxx, Source/cmFLTKWrapUICommand.cxx, + Source/cmFileCommand.cxx, Source/cmGetTargetPropertyCommand.h, + Source/cmGlobalCodeWarriorGenerator.cxx, + Source/cmGlobalGenerator.cxx, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, Source/cmIfCommand.cxx, + Source/cmIfCommand.h, Source/cmLinkLibrariesCommand.cxx, + Source/cmListFileLexer.c, Source/cmListFileLexer.in.l, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmMakefile.cxx, + Source/cmQTWrapCPPCommand.cxx, Source/cmQTWrapUICommand.cxx, + Source/cmSubdirCommand.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTarget.cxx, + Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTryRunCommand.cxx, Source/cmUseMangledMesaCommand.cxx, + Source/cmWin32ProcessExecution.cxx, Source/cmake.cxx, + Source/cmakewizard.h, Source/CTest/cmCTestSubmit.cxx, + Source/CTest/cmCTestSubmit.h, + Source/CursesDialog/cmCursesMainForm.cxx, + Source/kwsys/CMakeLists.txt, Source/kwsys/ProcessUNIX.c, + Source/kwsys/SystemTools.cxx, + Templates/CMakeWindowsSystemConfig.cmake, + Templates/TestDriver.cxx.in, Tests/Simple/CMakeLists.txt, + Tests/SimpleInstall/CMakeLists.txt, Tests/SimpleInstall/inst.cxx, + Tests/SimpleInstall/lib4.cxx, Tests/SimpleInstall/lib4.h, + Tests/SimpleInstall/TestSubDir/CMakeLists.txt, + Tests/SimpleInstall/TestSubDir/TSD.cxx, + Tests/SimpleInstall/TestSubDir/TSD.h, + Tests/SimpleInstall/TestSubDir/TSD_utils.cxx, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/inst.cxx, Tests/SimpleInstallS2/lib4.cxx, + Tests/SimpleInstallS2/lib4.h, + Tests/SimpleInstallS2/TestSubDir/CMakeLists.txt, + Tests/SimpleInstallS2/TestSubDir/TSD.cxx, + Tests/SimpleInstallS2/TestSubDir/TSD.h, + Tests/SimpleInstallS2/TestSubDir/TSD_utils.cxx, + Utilities/Doxygen/CMakeLists.txt, + Utilities/Release/cmake_release.sh: Moving latest release branch + to CMake-2-0-3. + +2004-08-09 18:39 martink + + * Source/cmIncludeCommand.cxx: ENH: Allow user to overwrite + Platforms files + +2004-08-09 18:20 martink + + * Modules/Platform/Windows-icl.cmake: ENH: Initial import + +2004-08-09 17:42 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: fix for try run failing on + some cygwin builds. Allow a driver letter to start a full path + on cygwin + +2004-08-09 13:03 hoffman + + * Source/cmMakefile.cxx: BUG: fix bug where custom command + generated .h files do not get the header_file_only flag set + +2004-08-06 15:05 hoffman + + * Tests/Fortran/: CMakeLists.txt, hello.f: ENH: initial fortran + +2004-08-06 14:51 hoffman + + * Modules/CMakeDefaultMakeRuleVariables.cmake, + Modules/CMakeDetermineFortranCompiler.cmake, + Modules/CMakeFortranCompiler.cmake.in, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestFortranCompiler.cmake, + Modules/Platform/CYGWIN-g77.cmake, Modules/Platform/g77.cmake, + Source/cmGlobalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTarget.cxx, Source/cmTarget.h, + Source/cmTryCompileCommand.cxx: ENH: initial fortran support + +2004-08-05 11:59 hoffman + + * Modules/FindQt.cmake: ENH: remove verbose QT message + +2004-08-05 11:51 king + + * Source/cmAddExecutableCommand.cxx: ERR: Replacing hack call to + CONFIGURE_FILE command with direct call to + m_Makefile->ConfigureFile. + +2004-08-05 10:27 king + + * ChangeLog.manual, Source/cmGlobalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx: BUG#427: Merging fix to + CMake 2.0 release branch. + +2004-08-05 10:17 king + + * Source/: cmGlobalGenerator.cxx, cmLocalUnixMakefileGenerator.cxx: + BUG#427: Generated makefiles need to have targets with canonical + names for each executable and library target in order for + try-compiles to work correctly when specifying the target. + +2004-08-05 09:29 king + + * ChangeLog.manual, Source/cmGlobalCodeWarriorGenerator.cxx, + Source/cmGlobalCodeWarriorGenerator.h, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio6Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/cmTryRunCommand.cxx: Merging fixes from main tree. See + ChangeLog.manual section on 2.0.4 for details. + +2004-08-05 09:17 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Fixed crash when + CMAKE_CXX_STACK_SIZE is not defined. + +2004-08-04 17:24 king + + * Source/cmMakefile.cxx: BUG: Fix crash when adding a custom + command to a source file that cannot be created. + +2004-08-04 17:21 hoffman + + * Source/cmTryRunCommand.cxx: ENH: allow debug of tryrun + +2004-08-04 16:33 king + + * Source/: cmGlobalCodeWarriorGenerator.cxx, + cmGlobalCodeWarriorGenerator.h, cmGlobalGenerator.cxx, + cmGlobalGenerator.h, cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmMakefile.cxx: BUG: + CMAKE_TRY_COMPILE_CONFIGURATION should be obtained from the + cmMakefile instance for the listfile containing the TRY_COMPILE + call, not the top level listfile. + +2004-08-04 14:34 king + + * Source/cmMakefile.cxx: ERR: Removed duplicate default arguments. + +2004-08-04 13:05 hoffman + + * Source/cmake.cxx: fix incorrect selection of visual studio + generator + +2004-08-04 10:45 king + + * Source/: cmCPluginAPI.cxx, cmForEachCommand.cxx, + cmListFileCache.cxx, cmListFileCache.h, cmMacroCommand.cxx, + cmMakefile.cxx, cmMakefile.h: ENH: Added support for special + variables CMAKE_CURRENT_LIST_FILE and CMAKE_CURRENT_LIST_LINE + that evaluate to the file name and line number in which they + appear. This implements the feature request from bug 1012. + +2004-08-04 10:00 king + + * Source/cmake.cxx: BUG: Fixed typo in name of MSVC 8 registry key. + +2004-08-04 08:50 andy + + * Source/cmIfCommand.cxx: ERR: Fix warnings and memory leak + +2004-08-03 10:20 hoffman + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: create a + server that does not use vtkPVApplication or tcl wrapping. Move + several classes from GUI/Client to Servers/Filters. Remove use of + PARAVIEW_NEW_SOURCE_ORGANIZATION define. + +2004-08-03 08:13 andy + + * Source/: cmIfCommand.cxx, cmIfCommand.h: BUG: When regular + expression failes to compile, produce error: Fixes part of Bug + #1025 - CMake silently ignores regular expression failure + +2004-08-02 08:36 andy + + * Source/cmCTest.cxx: BUG: these flags do not take arguments, so + they do not really need to check if they are last. Fixes Bug + #1020 - ctest doesn't parse its options correctly + +2004-07-30 15:50 andy + + * Source/: cmInstallFilesCommand.h, cmInstallProgramsCommand.h, + cmInstallTargetsCommand.h: ENH: Since install works on Windows + too, remove the UNIX + +2004-07-30 09:42 hoffman + + * CMakeLists.txt, Utilities/Release/cmake_release.sh: change + version to 2.0.3 + +2004-07-29 17:15 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add some documentation, and + make sure that the flag given to -D -T or -M is valid. Fixes Bug + #1015 - Documentation: ctest -D + +2004-07-29 17:07 andy + + * Modules/Dart.cmake: ENH: Add MemCheck to the list of Make + targets. Closes Bug #1016 - Testing targets in Makefile + +2004-07-29 15:26 andy + + * Source/cmCTest.cxx: ENH: Add AIX linker error + +2004-07-29 14:45 hoffman + + * ChangeLog.manual, Modules/Dart.cmake, Source/cmCTest.cxx, + Source/cmCTest.h, Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmMakefile.cxx, + Source/cmTarget.cxx, Source/cmake.cxx, + Source/CTest/cmCTestSubmit.cxx, Source/kwsys/SystemTools.cxx: + merges from main tree + +2004-07-29 14:19 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake, + Source/cmTarget.cxx, Source/cmakewizard.h: merge from main tree, + comment spelling fixes + +2004-07-29 11:46 king + + * ChangeLog.manual, Source/cmLinkLibrariesCommand.cxx, + Source/cmTargetLinkLibrariesCommand.cxx: BUG: Fixed crash when + optimized/debug argument to a link-libraries command is not + followed by a value. + +2004-07-29 11:43 king + + * Source/: cmTargetLinkLibrariesCommand.cxx, + cmLinkLibrariesCommand.cxx: BUG: Fixed crash when optimized/debug + argument is not followed by a value. + +2004-07-29 11:11 andy + + * Tests/X11/CMakeLists.txt: ERR: Fix test to use post CMAKE_X_LIBS + variables + +2004-07-29 10:22 king + + * ChangeLog.manual: ENH: Added changes for + cmAuxSourceDirectoryCommand.h and cmGetTargetPropertyCommand.h + +2004-07-28 08:12 king + + * Source/: cmGetTargetPropertyCommand.h: ENH: Added documentation + of LOCATION target property. + +2004-07-27 13:40 hoffman + + * Source/cmake.cxx: BUG: fix for bug 971, pick a better generator + from the command line + +2004-07-27 08:52 andy + + * Modules/Dart.cmake: DOC: Fix typo + +2004-07-27 08:49 andy + + * Source/CTest/cmCTestSubmit.cxx: BUG: Allow submit and trigger url + to contain ?. Fixes Bug #997 - CTest cannot handle URLs which + contain a "?" + +2004-07-27 08:48 andy + + * Modules/Dart.cmake: ENH: Allow project to overwrite + CMAKE_SYSTEM_NAME part of default BUILDNAME + +2004-07-26 16:59 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake, + Source/cmMakefile.cxx, Source/cmTarget.cxx, Source/cmakewizard.h: + BUG: fix for bug 998, fix spelling errors + +2004-07-26 16:00 andy + + * Source/cmCTest.cxx: ENH: Support Threading Problem in memcheck + +2004-07-26 15:52 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add maximum size of test + output + +2004-07-24 19:58 king + + * Source/: cmAuxSourceDirectoryCommand.h: ENH: Added warning about + using this command to avoid listing sources for a library by + hand. It is supposed to be used only for Templates directories. + +2004-07-22 11:20 hoffman + + * ChangeLog.manual, Modules/FindFLTK.cmake, Modules/FindQt.cmake, + Source/cmCTest.cxx, Source/cmDynamicLoader.cxx, + Source/cmGlobalCodeWarriorGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, Source/cmMakefile.cxx, + Source/cmUseMangledMesaCommand.cxx, Source/cmake.cxx, + Source/CursesDialog/cmCursesMainForm.cxx, + Templates/CMakeWindowsSystemConfig.cmake, + Templates/TestDriver.cxx.in: merge from main tree + +2004-07-22 10:59 hoffman + + * Modules/: FindFLTK.cmake, FindQt.cmake: BUG: put back flags to + maintain backwards compatibility + +2004-07-20 16:18 andy + + * Source/: cmCTest.cxx, cmCTest.h: BUG: Encode current time so that + on some international computers xslt will not break. Also, for + continuous, do not repeat if there were locally modified files or + conflict, but only when things actually update + +2004-07-20 11:09 andy + + * Source/kwsys/SystemTools.cxx: BUG: If source and destination is + the same file, then do not copy file always + +2004-07-20 11:07 andy + + * Source/cmMakefile.cxx: ENH: When running cmake with PreLoad make + sure CMAKE_CURRENT_SOURCE/BINARY_DIR works + +2004-07-20 11:02 hoffman + + * Source/CursesDialog/cmCursesMainForm.cxx: ENH: remove deletes + +2004-07-19 13:01 hoffman + + * Source/CursesDialog/cmCursesMainForm.cxx: BUG: fix for 981 cursor + returns to correct place in help screen + +2004-07-19 13:00 hoffman + + * Source/cmDynamicLoader.cxx: bug fix for 986 + +2004-07-16 16:02 hoffman + + * Source/cmake.cxx: ENH: add a message at the end of the cmake run + telling the user where things were written. + +2004-07-16 15:18 hoffman + + * Templates/TestDriver.cxx.in: make sure tests flush output + +2004-07-15 14:38 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: sort flags, and + fix order and case problems and add a few more + +2004-07-15 13:53 martink + + * Source/cmCTest.cxx: better error warning exceptions + +2004-07-14 19:53 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: remove warnings + +2004-07-14 16:10 hoffman + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: ENH: use a map to fill out + flags, and keep command line consistent with the GUI + +2004-07-13 17:33 king + + * Source/kwsys/testProcess.c: BUG: Fixed off-by-one error in test6 + function. + +2004-07-13 17:27 king + + * Source/kwsys/: testProcess.c, CMakeLists.txt: ENH: Added test for + runaway output. + +2004-07-13 16:50 king + + * Source/kwsys/ProcessWin32.c: ENH: Re-arranged handling of the two + threads per pipe to improve readability of code. + +2004-07-13 16:23 king + + * Source/kwsys/ProcessWin32.c: BUG: Fix for read pipe wakeup when + child is writing alot of data and may fill the pipe buffer before + WriteFile is called. + +2004-07-13 11:06 martink + + * Source/: cmCTest.cxx, cmCTest.h: submit elapsed times as well + +2004-07-13 10:03 andy + + * Modules/FindQt.cmake: BUG: These regular expressions were wrong + because \\t does not match tab. Also, this fix prevents whole + file to be dumped to the cache + +2004-07-09 15:38 hoffman + + * Modules/FindQt.cmake: merge in fixes from neundorf at kde org, + bug 869 + +2004-07-09 14:18 hoffman + + * Source/: cmMakefile.cxx, cmUseMangledMesaCommand.cxx: BUG: fix + spelling errors BUG 952 + +2004-07-09 13:50 hoffman + + * Source/cmGlobalCodeWarriorGenerator.cxx, + Templates/CMakeDotNetSystemConfig.cmake, + Templates/CMakeWindowsSystemConfig.cmake: BUG: remove unused + variable CMAKE_OBJECT_FILE_SUFFIX from cmake + +2004-07-09 11:49 king + + * Source/kwsys/ProcessUNIX.c: ERR: Fixed missing return warning. + Code was not reachable anyway. + +2004-07-09 09:12 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: remove double + include flags for rc resouce compiles + +2004-07-07 18:15 king + + * Source/kwsys/ProcessWin32.c: ENH: Added windows implementation of + Disown/Detach. + +2004-07-07 17:46 king + + * Source/kwsys/ProcessUNIX.c: BUG: Do not disown if process has + already been killed or the timeout expired. Also need to call + kwsysProcessCleanup to disown. + +2004-07-07 17:27 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c, ProcessWin32.c: ENH: + Added kwsysProcess_Disown an kwsysProcess_Option_Detach to allow + detached processes to be created. Currently implemented only on + UNIX. + +2004-07-07 17:09 hoffman + + * ChangeLog.manual, DartConfig.cmake, + Modules/CMakeVS8FindMake.cmake, Modules/FindSWIG.cmake, + Modules/UseSWIG.cmake, Source/CMakeLists.txt, Source/cmCTest.cxx, + Source/cmCTest.h, Source/cmExecProgramCommand.cxx, + Source/cmFileCommand.cxx, Source/cmGlobalGenerator.cxx, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmMakefile.cxx, + Source/cmQTWrapUICommand.cxx, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTryRunCommand.cxx, + Source/cmWin32ProcessExecution.cxx, Source/cmake.cxx, + Source/kwsys/CMakeLists.txt, Source/kwsys/ProcessUNIX.c, + Source/kwsys/SystemTools.cxx, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstall/inst.cxx, Tests/SimpleInstall/lib4.cxx, + Tests/SimpleInstall/lib4.h, + Tests/SimpleInstall/TestSubDir/CMakeLists.txt, + Tests/SimpleInstall/TestSubDir/TSD.cxx, + Tests/SimpleInstall/TestSubDir/TSD.h, + Tests/SimpleInstall/TestSubDir/TSD_utils.cxx, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/inst.cxx, Tests/SimpleInstallS2/lib4.cxx, + Tests/SimpleInstallS2/lib4.h, + Tests/SimpleInstallS2/TestSubDir/CMakeLists.txt, + Tests/SimpleInstallS2/TestSubDir/TSD.cxx, + Tests/SimpleInstallS2/TestSubDir/TSD.h, + Tests/SimpleInstallS2/TestSubDir/TSD_utils.cxx: merge from main + tree, see ChangeLog.manual for changes + +2004-07-07 16:09 andy + + * Source/cmCTest.cxx: BUG: LastMemCheck is not really an XML file + +2004-07-07 13:03 king + + * Source/kwsys/ProcessUNIX.c: ERR: Using KWSYSPE_PIPE_BUFFER_SIZE + in place of separate bufferSize constant for consistency. + +2004-07-05 12:16 hoffman + + * Modules/CMakeVS8FindMake.cmake, + Modules/Platform/Windows-cl.cmake, Source/CMakeLists.txt, + Source/cmGlobalGenerator.cxx, + Source/cmGlobalVisualStudio8Generator.cxx, + Source/cmGlobalVisualStudio8Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmake.cxx: ENH: + add support for VCExpress 2005 + +2004-07-04 00:05 hoffman + + * Source/kwsys/ProcessUNIX.c: no c++ comments in c + +2004-07-03 12:00 hoffman + + * Source/kwsys/ProcessUNIX.c: fix for hp build + +2004-07-02 17:39 king + + * Source/kwsys/CMakeLists.txt: BUG: Need a C-only library for C + tests. + +2004-07-02 16:39 king + + * Source/kwsys/ProcessUNIX.c: BUG#392: Implementation of process + tree killing for systems with /proc filesystem. + +2004-07-02 16:29 king + + * Source/: cmCTest.cxx, cmCTest.h: BUG#969: Partially fixed by at + least using the timeout for the individual calls to + RunSingleCommand from within the inner ctest instance. This + should be modified to incrementally adjust remaining time. + +2004-07-02 16:27 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Made + RunSingleCommand take a double as its timeout length. + +2004-07-02 14:09 king + + * Source/cmFileCommand.cxx: BUG: Fixed generation of installation + manifest to account for library versioning symlinks. Also + removed DESTDIR prefix from generated manifest. + +2004-07-02 14:08 king + + * Source/cmLocalGenerator.cxx: BUG: install_manifest.txt should be + overwritten each time the install is run. + +2004-07-02 13:39 king + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ERR: Removed debugging code from + test. + +2004-07-02 11:51 andy + + * Source/cmFileCommand.cxx: BUG: If the destination is the same as + source, do not copy file. Fixes Bug #956 - make install broken + +2004-07-02 09:57 andy + + * Source/cmake.cxx: ENH: Also read PreLoad.cmake from the binary + tree + +2004-06-30 11:31 hoffman + + * Source/: cmMakefile.cxx, kwsys/SystemTools.cxx: ENH: add + CMAKE_FILE_PATH, CMAKE_PROGRAM_PATH, CMAKE_LIBRARY_PATH, and + search them first, PATH second, and last the paths listed in the + FIND call + +2004-06-30 08:59 andy + + * Source/cmFileCommand.cxx: ERR: Fix typo + +2004-06-29 16:40 hoffman + + * Source/cmQTWrapUICommand.cxx: ENH: remove QT_WRAP_UI flag + +2004-06-29 10:22 hoffman + + * Modules/FindSWIG.cmake: BUG: make sure if swig is found, we know + it is found + +2004-06-29 09:23 andy + + * Source/cmFileCommand.cxx, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Better handling of + debug postfix and fix the test + +2004-06-28 16:39 andy + + * Source/cmFileCommand.cxx, Source/cmGlobalGenerator.cxx, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ERR: Fix visual studio + install + +2004-06-28 14:39 andy + + * Source/cmFileCommand.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalGenerator.h, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstall/inst.cxx, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/inst.cxx, Tests/SimpleInstall/lib4.cxx, + Tests/SimpleInstall/lib4.h, Tests/SimpleInstallS2/lib4.cxx, + Tests/SimpleInstallS2/lib4.h: BUG: Implement installing of shared + library versioning and add test for the whole thing + +2004-06-28 11:14 andy + + * Modules/UseSWIG.cmake: BUG: Add more comments and fix + CMAKE_SWIG_FLAGS + +2004-06-28 09:08 andy + + * Modules/FindSWIG.cmake: BUG: Replace MATCHES with STREQUAL for + better checking, better checking for existence of swig directory, + verify if required flag was set, support fedora's location of + swig. Fixes Bug #955 - Swig on fedora and Bug #954 - + FIND_PACKAGE(SWIG REQUIRED) + +2004-06-26 08:40 hoffman + + * Modules/UseSWIG.cmake: BUG: SWIG_FLAGS was ignored by the add + swig source to module command + +2004-06-25 14:04 andy + + * CMakeLists.txt: ENH: Build expat as a part of default build + +2004-06-25 14:04 andy + + * Utilities/cmexpat/: .NoDartCoverage, CMakeLists.txt, COPYING, + ascii.h, asciitab.h, cm_expat_mangle.h, expat.h, + expatConfig.h.in, expatDllConfig.h.in, iasciitab.h, latin1tab.h, + nametab.h, utf8tab.h, xmlparse.c, xmlrole.c, xmlrole.h, xmltok.c, + xmltok.h, xmltok_impl.c, xmltok_impl.h, xmltok_ns.c: ENH: Initial + import of expat + +2004-06-24 09:05 hoffman + + * Source/cmWin32ProcessExecution.cxx: ENH: remove warning on + borland + +2004-06-24 08:57 hoffman + + * Source/cmExecProgramCommand.cxx: BUG: exec program should not + fail if it can not exec the program, but should only set the + return value to -1 and set the output to the reason for the + failure. + +2004-06-23 16:34 hoffman + + * Source/: cmExecProgramCommand.cxx, cmSystemTools.cxx, + cmSystemTools.h, cmTryRunCommand.cxx, + cmWin32ProcessExecution.cxx: BUG: fix spaces in path on mingw, + and change EXEC_PROGRAM to return false when it does not run, + also do not convert the directory to an output path for + EXEC_PROGRAM as this is done by the process execution, and doing + it twice may cause trouble on some shells. + +2004-06-23 16:15 hoffman + + * Modules/Platform/Windows-cl.cmake: C++ compiler is not set for c + only projects + +2004-06-23 10:13 king + + * Source/: cmCacheManager.cxx, CursesDialog/cmCursesMainForm.cxx, + CursesDialog/cmCursesMainForm.h: ENH: Adding MODIFIED property to + cache values that have been changed by the user. + +2004-06-22 17:23 hoffman + + * Source/cmSystemTools.cxx: BUG: fix spaces in path with mingw and + custom commands + +2004-06-21 12:59 hoffman + + * ChangeLog.manual: update changes for release 2.0.2 + +2004-06-21 12:48 hoffman + + * CMakeLists.txt, Utilities/Release/cmake_release.sh: change + version on branch + +2004-06-21 12:48 hoffman + + * CMakeLists.txt: change minimum cmake + +2004-06-18 15:47 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: merge from main tree, + remove automatic -I for source + +2004-06-18 15:47 hoffman + + * Source/cmSubdirCommand.h: merge from main tree, fix docs + +2004-06-18 15:46 hoffman + + * Modules/FindFLTK.cmake, Modules/FindQt.cmake, + Source/cmFLTKWrapUICommand.cxx, Source/cmQTWrapCPPCommand.cxx: + merge from main tree, remove useless variables + +2004-06-18 15:14 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Added special hack + for VTK 4.0-4.4 to re-enable automatic addition of current source + directory to -I path. + +2004-06-18 15:01 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Added special hack + for VTK 4.0-4.4 to re-enable automatic addition of current source + directory to -I path. + +2004-06-18 13:04 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Need to preserve + automatic addition of source tree to -I path if + CMAKE_BACKWARDS_COMPATIBILITY is set to below 2.0. + +2004-06-18 13:00 king + + * Source/cmLocalUnixMakefileGenerator.cxx: ERR: Fixed typo. + +2004-06-18 12:56 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Need to preserve + automatic addition of source tree to -I path if + CMAKE_BACKWARDS_COMPATIBILITY is set to below 2.0. + +2004-06-18 10:54 king + + * Docs/: cmake-mode.el: BUG: Fixed parsing of unquoted arguments to + allow double-quotes within the argument. + +2004-06-18 10:51 king + + * Source/: cmListFileLexer.c, cmListFileLexer.in.l: BUG: Fixed + parsing of unquoted arguments to allow double-quotes within the + argument. + +2004-06-16 09:45 hoffman + + * Source/cmSubdirCommand.h: clean up documentation + +2004-06-16 09:43 hoffman + + * Source/cmFLTKWrapUICommand.cxx, Source/cmQTWrapCPPCommand.cxx, + Modules/FindFLTK.cmake, Modules/FindQt.cmake: clean up commands + so they don't need extra variable + +2004-06-15 11:52 king + + * Source/cmLocalUnixMakefileGenerator.cxx: Removing automatic + addition of a -I path for the current source directory. This is + not consistent with the Visual Studio generators which do not + provide this path. It should not be added anyway because it is + adding an include path not requested by the CMakeLists.txt code. + The code I'm removing was originally added in revision 1.17 of + cmUnixMakefileGenerator.cxx as a part of several other changes + and has a commit log entry of + + "some bug fixes" + + It was propagated from their to cmLocalUnixMakefileGenerator.cxx. + Since all our projects build in the VS IDE without this include + path, it should not be needed. Users can easily fix problems + caused by this by adding + + INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) + + to their CMakeLists.txt code. This was often necessary + previously when a project was originally written on a Unix system + and then built with Visual Studio. + +2004-06-15 08:32 hoffman + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: merge from main tree, fix + GetCurrentDirectory problem + +2004-06-15 08:30 hoffman + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: fix include order because of + GetCurrentDirectory define and windows.h problem + +2004-06-14 13:25 hoffman + + * Modules/FindKDE.cmake: merge from main tree, new module + +2004-06-14 12:29 hoffman + + * Utilities/Doxygen/CMakeLists.txt: merge from main tree + +2004-06-14 12:28 hoffman + + * Source/: cmIfCommand.cxx, cmIfCommand.h: merge from main tree, + add STRGREATER + +2004-06-14 12:28 hoffman + + * Source/cmCommands.cxx: merge from main tree, fix bootstrap on mac + +2004-06-14 12:27 hoffman + + * Modules/FindFLTK.cmake: merge from main tree, look for both Fl.h + and Fl.H + +2004-06-14 12:21 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: merge from main tree, + use cmake to install itself, when building cmake + +2004-06-14 12:20 hoffman + + * Source/cmIfCommand.cxx: merge from main tree, fix compound if + crash on unix + +2004-06-14 12:19 hoffman + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: merge from main tree, use + correct path for sub projects + +2004-06-14 12:18 hoffman + + * Source/cmCTest.cxx: merge from main tree, more -I stuff + +2004-06-14 12:18 hoffman + + * Source/CMakeLists.txt: merge from main tree, do not use regex for + directoires + +2004-06-14 12:17 hoffman + + * Modules/FindDoxygen.cmake: ENH: better find for doxygen + +2004-06-14 12:16 hoffman + + * Modules/Platform/Windows-cl.cmake, + Source/cmLocalVisualStudio7Generator.cxx, + Templates/DLLHeader.dsptemplate: ENH: add NDEBUG to windows + release builds for both ide and nmake + +2004-06-14 12:02 martink + + * Source/: cmIfCommand.h, cmIfCommand.cxx: added strequal + +2004-06-14 11:24 andy + + * Tests/CTestTest/test.cmake.in: ENH: Handle spaces in the path + +2004-06-14 11:23 andy + + * Source/cmCommands.cxx: ERR: On Mac we need + GET_SOURCE_FILE_PROPERTY for building curl + +2004-06-14 10:46 hoffman + + * Modules/FindKDE.cmake: ENH: add FindKDE from Alex from kde.org + +2004-06-14 10:36 hoffman + + * Modules/FindFLTK.cmake: fix for bug 915 + +2004-06-14 10:28 hoffman + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: BUG: fix sub project path + problem + +2004-06-11 15:27 martink + + * CMakeLists.txt, CMakeSystemConfig.txt.in, + CMakeWindowsSystemConfig.txt, ChangeLog.manual, ChangeLog.txt, + DartConfig.cmake, bootstrap, Docs/cmake-mode.el, + Modules/CMakeCCompiler.cmake.in, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeDefaultMakeRuleVariables.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeImportBuildSettings.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestCCompiler.cmake, Modules/CMakeTestGNU.c, + Modules/CheckForPthreads.c, Modules/CheckFunctionExists.c, + Modules/CheckIncludeFile.cmake, + Modules/CheckIncludeFileCXX.cmake, Modules/CheckTypeSize.c, + Modules/CheckTypeSize.cmake, Modules/CheckVariableExists.c, + Modules/Dart.cmake, Modules/DartConfiguration.tcl.in, + Modules/FindDCMTK.cmake, Modules/FindGLUT.cmake, + Modules/FindGTK.cmake, Modules/FindITK.cmake, + Modules/FindJNI.cmake, Modules/FindMFC.cmake, + Modules/FindOpenGL.cmake, Modules/FindPHP4.cmake, + Modules/FindPerlLibs.cmake, Modules/FindPike.cmake, + Modules/FindPythonLibs.cmake, Modules/FindQt.cmake, + Modules/FindRuby.cmake, Modules/FindSWIG.cmake, + Modules/FindTCL.cmake, Modules/FindTclsh.cmake, + Modules/FindVTK.cmake, Modules/FindwxWidgets.cmake, + Modules/FindwxWindows.cmake, Modules/MacOSXBundleInfo.plist.in, + Modules/TestBigEndian.c, Modules/UseSWIG.cmake, + Modules/UsewxWidgets.cmake, Modules/Platform/Darwin.cmake, + Modules/Platform/HP-UX.cmake, Modules/Platform/IRIX64.cmake, + Modules/Platform/Linux.cmake, Modules/Platform/OSF1.cmake, + Modules/Platform/SunOS.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-gcc.cmake, Source/CMakeLists.txt, + Source/TODO, Source/cmAddCustomCommandCommand.h, + Source/cmAddCustomTargetCommand.cxx, + Source/cmAddExecutableCommand.cxx, + Source/cmAddExecutableCommand.h, Source/cmAddTestCommand.cxx, + Source/cmCMakeMinimumRequired.h, Source/cmCPluginAPI.cxx, + Source/cmCPluginAPI.h, Source/cmCTest.cxx, Source/cmCTest.h, + Source/cmCacheManager.cxx, Source/cmCacheManager.h, + Source/cmCommand.h, Source/cmCommands.cxx, + Source/cmConfigure.cmake.h.in, Source/cmConfigureFileCommand.cxx, + Source/cmConfigureFileCommand.h, + Source/cmCreateTestSourceList.cxx, + Source/cmCreateTestSourceList.h, Source/cmDocumentation.cxx, + Source/cmDocumentation.h, Source/cmDynamicLoader.cxx, + Source/cmElseCommand.h, Source/cmEnableTestingCommand.cxx, + Source/cmEnableTestingCommand.h, Source/cmEndForEachCommand.cxx, + Source/cmEndForEachCommand.h, Source/cmEndIfCommand.h, + Source/cmExecProgramCommand.h, + Source/cmExportLibraryDependencies.cxx, + Source/cmFLTKWrapUICommand.cxx, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmFindFileCommand.h, + Source/cmFindLibraryCommand.h, Source/cmFindPackageCommand.cxx, + Source/cmFindPackageCommand.h, Source/cmFindPathCommand.cxx, + Source/cmFindPathCommand.h, Source/cmFindProgramCommand.h, + Source/cmForEachCommand.cxx, Source/cmForEachCommand.h, + Source/cmGeneratedFileStream.h, + Source/cmGetCMakePropertyCommand.cxx, + Source/cmGetDirectoryPropertyCommand.cxx, + Source/cmGetDirectoryPropertyCommand.h, + Source/cmGetFilenameComponentCommand.h, + Source/cmGetSourceFilePropertyCommand.cxx, + Source/cmGetTargetPropertyCommand.cxx, Source/cmGlob.cxx, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalCodeWarriorGenerator.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.cxx, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio6Generator.h, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio71Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, Source/cmIfCommand.cxx, + Source/cmIfCommand.h, Source/cmIncludeCommand.cxx, + Source/cmIncludeCommand.h, Source/cmInstallTargetsCommand.cxx, + Source/cmInstallTargetsCommand.h, + Source/cmLinkLibrariesCommand.cxx, + Source/cmLinkLibrariesCommand.h, Source/cmListFileCache.cxx, + Source/cmListFileCache.h, Source/cmListFileLexer.c, + Source/cmListFileLexer.h, Source/cmListFileLexer.in.l, + Source/cmLoadCacheCommand.h, Source/cmLoadCommandCommand.cxx, + Source/cmLocalCodeWarriorGenerator.cxx, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmMacroCommand.cxx, Source/cmMacroCommand.h, + Source/cmMakeDepend.cxx, Source/cmMakeDirectoryCommand.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmMessageCommand.h, Source/cmOptionCommand.cxx, + Source/cmOutputRequiredFilesCommand.h, + Source/cmQTWrapCPPCommand.cxx, Source/cmQTWrapCPPCommand.h, + Source/cmQTWrapUICommand.cxx, Source/cmQTWrapUICommand.h, + Source/cmRemoveCommand.h, Source/cmRemoveDefinitionsCommand.cxx, + Source/cmRemoveDefinitionsCommand.h, + Source/cmSeparateArgumentsCommand.h, Source/cmSetCommand.h, + Source/cmSetDirectoryPropertiesCommand.cxx, + Source/cmSetDirectoryPropertiesCommand.h, + Source/cmSetSourceFilesPropertiesCommand.cxx, + Source/cmSetTargetPropertiesCommand.h, + Source/cmSiteNameCommand.cxx, Source/cmSourceFile.cxx, + Source/cmSourceFilesCommand.cxx, Source/cmStandardIncludes.h, + Source/cmStringCommand.cxx, Source/cmStringCommand.h, + Source/cmSubdirCommand.cxx, Source/cmSubdirCommand.h, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/cmTarget.cxx, Source/cmTarget.h, + Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTargetLinkLibrariesCommand.h, + Source/cmTryCompileCommand.cxx, Source/cmTryCompileCommand.h, + Source/cmUseMangledMesaCommand.h, + Source/cmVTKMakeInstantiatorCommand.cxx, + Source/cmVTKWrapJavaCommand.h, Source/cmVTKWrapPythonCommand.h, + Source/cmVTKWrapTclCommand.h, Source/cmWin32ProcessExecution.cxx, + Source/cmWrapExcludeFilesCommand.cxx, + Source/cmWriteFileCommand.cxx, Source/cmWriteFileCommand.h, + Source/cmake.cxx, Source/cmake.h, Source/cmakemain.cxx, + Source/cmaketest.cxx, Source/cmakewizard.cxx, + Source/cmakewizard.h, Source/ctest.cxx, + Source/CTest/cmCTestSubmit.cxx, Source/CTest/cmCTestSubmit.h, + Source/CursesDialog/ccmake.cxx, + Source/CursesDialog/cmCursesMainForm.cxx, + Source/CursesDialog/cmCursesPathWidget.cxx, + Source/CursesDialog/cmCursesStringWidget.cxx, + Source/kwsys/Base64.c, Source/kwsys/Base64.h.in, + Source/kwsys/CMakeLists.txt, Source/kwsys/Configure.h.in, + Source/kwsys/Configure.hxx.in, Source/kwsys/Copyright.txt, + Source/kwsys/Directory.cxx, Source/kwsys/Directory.hxx.in, + Source/kwsys/EncodeExecutable.c, Source/kwsys/Process.h.in, + Source/kwsys/ProcessFwd9x.c, Source/kwsys/ProcessUNIX.c, + Source/kwsys/ProcessWin32.c, Source/kwsys/RegularExpression.cxx, + Source/kwsys/RegularExpression.hxx.in, + Source/kwsys/SystemTools.cxx, Source/kwsys/SystemTools.hxx.in, + Source/kwsys/kwsysHeaderDump.pl, + Source/kwsys/kwsysPlatformCxxTests.cmake, + Source/kwsys/kwsysPlatformCxxTests.cxx, + Source/kwsys/kwsysPrivate.h, Source/kwsys/kwsys_ios_fstream.h.in, + Source/kwsys/kwsys_ios_iosfwd.h.in, + Source/kwsys/kwsys_ios_iostream.h.in, + Source/kwsys/kwsys_ios_sstream.h.in, Source/kwsys/kwsys_std.h.in, + Source/kwsys/kwsys_std_fstream.h.in, + Source/kwsys/kwsys_std_iosfwd.h.in, + Source/kwsys/kwsys_std_iostream.h.in, + Source/kwsys/kwsys_std_sstream.h.in, Source/kwsys/kwsys_stl.h.in, + Source/kwsys/test1.cxx, Source/kwsys/testIOS.cxx, + Source/kwsys/testProcess.c, Templates/CMakeLists.txt, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, Templates/TestDriver.cxx.in, + Templates/install-sh, Templates/staticLibHeader.dsptemplate, + Tests/COnly/CMakeLists.txt, Tests/CommandLineTest/CMakeLists.txt, + Tests/CommandLineTest/PreLoad.cmake, + Tests/Complex/CMakeLists.txt, Tests/Complex/VarTests.cmake, + Tests/Complex/Executable/complex.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/Complex/Library/file2.cxx, + Tests/Complex/Library/testConly.c, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/VarTests.cmake, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/file2.cxx, + Tests/ComplexOneConfig/Library/testConly.c, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/VarTests.cmake, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/file2.cxx, + Tests/ComplexRelativePaths/Library/testConly.c, + Tests/CustomCommand/CMakeLists.txt, + Tests/CustomCommand/generator.cxx, + Tests/CustomCommand/wrapper.cxx, Tests/Jump/CMakeLists.txt, + Tests/Jump/Executable/CMakeLists.txt, + Tests/Jump/Executable/jumpExecutable.cxx, + Tests/Jump/Library/CMakeLists.txt, + Tests/Jump/Library/Shared/CMakeLists.txt, + Tests/Jump/Library/Shared/jumpShared.cxx, + Tests/Jump/Library/Static/CMakeLists.txt, + Tests/Jump/Library/Static/jumpStatic.cxx, + Tests/LinkLineOrder/Two.c, Tests/LoadCommand/CMakeLists.txt, + Tests/LoadCommand/CMakeCommands/cmTestCommand.c, + Tests/LoadCommandOneConfig/CMakeLists.txt, + Tests/LoadCommandOneConfig/CMakeCommands/cmTestCommand.c, + Tests/PreOrder/CMakeLists.txt, Tests/PreOrder/simple.cxx, + Tests/PreOrder/Library/CMakeLists.txt, + Tests/PreOrder/Library/simpleLib.cxx, + Tests/Simple/CMakeLists.txt, Tests/Simple/simpleWe.cpp, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstall/PostInstall.cmake, + Tests/SimpleInstall/PreInstall.cmake, Tests/SimpleInstall/foo.c, + Tests/SimpleInstall/foo.h, Tests/SimpleInstall/inst.cxx, + Tests/SimpleInstall/lib1.cxx, Tests/SimpleInstall/lib1.h, + Tests/SimpleInstall/lib2.cxx, Tests/SimpleInstall/lib2.h, + Tests/SimpleInstall/lib3.cxx, Tests/SimpleInstall/lib3.h, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/PostInstall.cmake, + Tests/SimpleInstallS2/PreInstall.cmake, + Tests/SimpleInstallS2/foo.c, Tests/SimpleInstallS2/foo.h, + Tests/SimpleInstallS2/inst.cxx, Tests/SimpleInstallS2/lib1.cxx, + Tests/SimpleInstallS2/lib1.h, Tests/SimpleInstallS2/lib2.cxx, + Tests/SimpleInstallS2/lib2.h, Tests/SimpleInstallS2/lib3.cxx, + Tests/SimpleInstallS2/lib3.h, + Tests/StringFileTest/CMakeLists.txt, + Tests/StringFileTest/InputFile.h.in, Tests/SubDir/CMakeLists.txt, + Tests/SubDir/vcl_algorithm+vcl_pair+double.foo.c, + Tests/SubDir/AnotherSubdir/pair+int.int.c, + Tests/SubDir/AnotherSubdir/secondone.c, + Tests/SubDir/AnotherSubdir/testfromsubdir.c, + Tests/SubDir/Examples/CMakeLists.txt, + Tests/SubDir/Examples/example1/CMakeLists.txt, + Tests/SubDir/Examples/example1/example1.cxx, + Tests/SubDir/Examples/example2/CMakeLists.txt, + Tests/SubDir/Examples/example2/example2.cxx, + Tests/SubDir/Executable/CMakeLists.txt, + Tests/SubDir/Executable/test.cxx, + Tests/SubDir/ThirdSubDir/pair+int.int1.c, + Tests/SubDir/ThirdSubDir/pair_p_int.int1.c, + Tests/SubDir/ThirdSubDir/testfromauxsubdir.c, + Tests/SubDir/ThirdSubDir/thirdone.c, + Tests/SwigTest/CMakeLists.txt, Tests/SwigTest/example.cxx, + Tests/SwigTest/example.h, Tests/SwigTest/example.i, + Tests/SwigTest/runme.php4, Tests/SwigTest/runme.pike, + Tests/SwigTest/runme.pl, Tests/SwigTest/runme.py, + Tests/SwigTest/runme.rb, Tests/SwigTest/runme.tcl, + Tests/SwigTest/runme2.tcl, + Tests/SystemInformation/CMakeLists.txt, + Tests/SystemInformation/DumpInformation.cxx, + Tests/TryCompile/CMakeLists.txt, Tests/Wrapping/CMakeLists.txt, + Tests/Wrapping/vtkTestMoc.h, Utilities/Doxygen/CMakeLists.txt, + Utilities/Doxygen/doxyfile.in, + Utilities/Release/cmake_release.sh, + Utilities/Release/config_IRIX64, + Utilities/Release/release_dispatch.sh: updated to 2.0.1 + +2004-06-11 15:07 hoffman + + * Source/cmIfCommand.cxx: BUG: fix crash for if statment due to bad + microsoft docs on deque BUG id 917 + +2004-06-09 18:56 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG#891: When building + CMake itself, use the new cmake to install so that the current + cmake can be overwritten. + +2004-06-09 18:01 martink + + * Source/CMakeLists.txt: ERR: Do not use the binary directory as a + regular expression. + +2004-06-09 17:36 martink + + * Source/cmCTest.cxx: BUG: Files in top-level directory of source + tree were not reported in updates log. + +2004-06-09 11:30 andy + + * DartConfig.cmake: ENH: Cleanups + +2004-06-09 11:19 andy + + * Source/cmCTest.cxx: BUG: Even if update fails it should produce + valid XML + +2004-06-09 10:37 andy + + * DartConfig.cmake: ENH: Use viewcvs instead of cvsweb + +2004-06-08 17:36 martink + + * Source/cmCTest.cxx: support for floating ponit strides + +2004-06-08 17:26 barre + + * Modules/FindDoxygen.cmake, Utilities/Doxygen/CMakeLists.txt: a) + new version of tools like Doxygen and Graphviz now set install + path info in win32 registery. use it. b) remove DOT_PATH, it was + polluting the cache (can be computed from DOT, update + CMakeLists.txt accordingly if DOT_PATH is not defined) + +2004-06-07 21:41 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: undo last bug fix because it + breaks cmake, rebuild_cache on ParaView gets tons of errors about + not being able to create the bin directory + +2004-06-07 13:55 king + + * Source/kwsys/SystemTools.cxx: BUG: Do not create a directory on + top of a file. + +2004-06-07 12:35 hoffman + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestSubmit.cxx, + CTest/cmCTestSubmit.h: merge from main tree, add support for scp + submit + +2004-06-07 09:54 hoffman + + * Modules/FindFLTK.cmake: merge from main tree, fix order of + libraries + +2004-06-07 09:50 hoffman + + * Tests/Simple/CMakeLists.txt: merge from main tree + +2004-06-07 09:49 hoffman + + * Source/kwsys/SystemTools.cxx: merge from main tree, fix find + library so it does not find directories + +2004-06-07 09:48 hoffman + + * Source/cmMakefile.cxx: merge from main tree, detect problems + writting files + +2004-06-07 09:47 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: merger from main tree, + fix subdir preorder + +2004-06-07 09:46 hoffman + + * Source/cmLocalGenerator.cxx: merge from main tree, fix install + with subdir and not exepath + +2004-06-07 09:46 hoffman + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmLocalVisualStudio7Generator.cxx: merge from main tree, fix + crash in external project include + +2004-06-07 09:45 hoffman + + * Source/cmCreateTestSourceList.cxx: merge from main tree, do not + write test driver each time cmake is run + +2004-06-07 09:44 hoffman + + * Source/: cmCTest.cxx, cmCTest.h: ENH: changes from main tree, + some different -I options, CTEST_DASHBOARD_ROOT computation, some + more error and warning matches + +2004-06-07 08:51 andy + + * Source/CTest/cmCTestSubmit.cxx: ERR: Remove warning + +2004-06-04 14:59 king + + * Source/kwsys/CMakeLists.txt: ERR: Do not add the library if no + sources are used. + +2004-06-03 19:12 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ERR: Remove testinf of PREORDER + on Windows + +2004-06-03 17:09 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ERR: Try to fix simple install on + vs6 + +2004-06-03 14:54 hoffman + + * Modules/FindFLTK.cmake: Fix for bug 903 change order of fltk + libraries + +2004-06-02 13:39 andy + + * Source/: cmCTest.cxx, cmCTest.h, CTest/cmCTestSubmit.cxx, + CTest/cmCTestSubmit.h: ENH: Implement scp submission + +2004-06-01 14:08 king + + * Modules/Platform/: HP-UX.cmake, IRIX.cmake, IRIX64.cmake, + OSF1.cmake, Windows-bcc32.cmake, gcc.cmake: BUG#895: Adding + -DNDEBUG to C and C++ flags for release builds. + +2004-06-01 12:55 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstall/TestSubDir/CMakeLists.txt, + SimpleInstall/TestSubDir/TSD.cxx, SimpleInstall/TestSubDir/TSD.h, + SimpleInstall/TestSubDir/TSD_utils.cxx, + SimpleInstallS2/CMakeLists.txt, + SimpleInstallS2/TestSubDir/CMakeLists.txt, + SimpleInstallS2/TestSubDir/TSD.cxx, + SimpleInstallS2/TestSubDir/TSD.h, + SimpleInstallS2/TestSubDir/TSD_utils.cxx: ENH: More elaborate + install test + +2004-06-01 12:19 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: make sure find library does + not find directories + +2004-06-01 12:07 hoffman + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: fix for 871, include + external should work for 7.1 and 7.0 + +2004-06-01 11:30 andy + + * Source/cmLocalGenerator.cxx: ENH: Fix bug in cmake install when + exec/librayr output path not defined. Closes Bug #899 - subdir + INSTALL_TARGETS INSTALL_PROGRAMS dont work + +2004-06-01 09:58 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Fix preorder. This + caused preorder to not work and the test passed because of + jump-over rule + +2004-05-28 15:02 martink + + * Source/: cmCTest.cxx, cmCTest.h: ctest -S support for multiple + ctest command arguments + +2004-05-27 12:56 andy + + * Source/cmCreateTestSourceList.cxx: BUG: When creating a test + driver, do not remove the old file, so if nothing changes, it + will not rebuild. Fixes Bug #885 - cmCreateTestSource overwrite + file when running cmake + +2004-05-27 12:53 andy + + * Source/cmMakefile.cxx: ENH: Detect if there were problems writing + file + +2004-05-27 11:21 king + + * Utilities/Release/cmake_release.sh: Updated to not include CVS + directories in cygwin package. + +2004-05-26 15:27 martink + + * Source/cmCTest.cxx: added another error string and change the -I + option some + +2004-05-25 14:34 martink + + * CMakeLists.txt, Utilities/Release/cmake_release.sh: merges from + the main tree + +2004-05-25 11:31 martink + + * Modules/CMakeImportBuildSettings.cmake, Modules/FindQt.cmake, + Modules/UseSWIG.cmake, Source/cmCTest.cxx, + Source/cmCacheManager.cxx, Source/cmCacheManager.h, + Source/cmGeneratedFileStream.h, + Source/cmGetDirectoryPropertyCommand.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmMacroCommand.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmSetDirectoryPropertiesCommand.cxx, + Source/cmSetDirectoryPropertiesCommand.h, + Source/cmSystemTools.cxx, Tests/CommandLineTest/CMakeLists.txt, + Tests/Simple/CMakeLists.txt, Tests/TryCompile/CMakeLists.txt: + merges from the main tree + +2004-05-25 11:20 martink + + * Modules/CMakeImportBuildSettings.cmake, Source/cmCTest.cxx: + better error message + +2004-05-21 11:52 hoffman + + * Source/cmSystemTools.cxx: ENH: speed up for NOTFOUND + +2004-05-21 09:51 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: ENH: fix rerun of cmake + command + +2004-05-20 21:27 hoffman + + * Source/cmSystemTools.cxx: BUG: back out change due to broken + dashboard + +2004-05-20 17:33 hoffman + + * Source/cmSystemTools.cxx: ENH: remove regex use where strcmp is + faster + +2004-05-20 16:56 andy + + * Modules/UseSWIG.cmake, Source/cmGetDirectoryPropertyCommand.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmSetDirectoryPropertiesCommand.cxx, + Source/cmSetDirectoryPropertiesCommand.h: ENH: Implement + additional make clean files as a directory property instead of + cmake variable + +2004-05-20 16:35 hoffman + + * Tests/TryCompile/CMakeLists.txt: BUG: dont put the output of a + try compile in the output because visual stduio 7 ide will thing + there were errors + +2004-05-20 16:29 hoffman + + * Source/: cmGeneratedFileStream.h, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: BUG: make sure global generate + is done when cmakelist file chagnes, also make sure guids are + stored in the cache so the .sln file does not change every time + +2004-05-20 16:26 hoffman + + * Modules/FindQt.cmake: ENH: look for qtmoc in some other places + +2004-05-20 15:08 martink + + * Source/: cmCacheManager.cxx, cmCacheManager.h: updates to gui to + delete cache + +2004-05-20 13:15 martink + + * Source/cmCTest.cxx: added error + +2004-05-19 16:04 hoffman + + * Source/cmMacroCommand.cxx: ENH: make it run much faster + +2004-05-18 15:40 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: make sure + ADDITIONAL_MAKE_CLEAN_FILES works with spaces in the path and is + converted to the correct native path type + +2004-05-18 15:39 hoffman + + * Source/: cmEndForEachCommand.cxx, cmForEachCommand.cxx: merge + from main tree, detect missing endforeach + +2004-05-18 15:39 hoffman + + * Source/: cmDocumentation.cxx, cmakemain.cxx: merge from main + tree, move doc stuff around so it does not give cmake docs to + ctest + +2004-05-18 15:38 hoffman + + * Source/cmCTest.cxx: merge from main tree, add some more obscure + options to ctest + +2004-05-18 15:37 hoffman + + * Modules/UseSWIG.cmake: BUG: 835 fix + +2004-05-18 15:37 hoffman + + * Modules/CMakeTestGNU.c: BUG: 825 fix + +2004-05-18 14:33 hoffman + + * Modules/CMakeTestGNU.c: BUG: fix problem where cmake thinks the + intel compiler is gnu + +2004-05-17 16:31 hoffman + + * Modules/UseSWIG.cmake: ENH: append to the list of clean files, + don't just set them + +2004-05-17 15:56 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: change + ADDITIONAL_MAKE_CLEAN_FILES to work with spaces in the path and + on windows with no spaces + +2004-05-17 15:55 hoffman + + * Modules/UseSWIG.cmake: BUG: Bug #835 fix, add swig generated + files to clean target + +2004-05-13 16:17 hoffman + + * ChangeLog.manual: add a hand edited changelog + +2004-05-13 16:17 hoffman + + * ChangeLog.manual: file ChangeLog.manual was added on branch + CMake-2-6 on 2008-03-30 13:09:04 +0000 + +2004-05-13 13:41 martink + + * Source/cmCTest.cxx: new feature for continuous clean once + +2004-05-13 13:07 king + + * Utilities/Release/cmake_release.sh: Removed support for + wxCMakeSetup dialog. + +2004-05-13 10:34 hoffman + + * Source/kwsys/: Base64.h.in, CMakeLists.txt, Process.h.in, + ProcessWin32.c, ProcessWin32Kill.c, ProcessWin32Kill.h.in, + kwsysHeaderDump.pl: Merge changes from the main tree, fix a bug + in the process kill code + +2004-05-13 10:08 king + + * Source/kwsys/ProcessWin32.c: BUG: Do not wait for children to + exit when killing them. Sometimes they do not really die. + +2004-05-12 15:34 martink + + * Source/cmEndForEachCommand.cxx: fix warning + +2004-05-12 14:32 martink + + * Source/: cmEndForEachCommand.cxx, cmForEachCommand.cxx: better + error checking for FOREACH + +2004-05-12 08:46 king + + * Utilities/Release/cmake_release.sh: ENH: Updated for 2.0.0 + release tag. + +2004-05-10 18:06 andy + + * Source/CMakeLists.txt, Tests/CTestTest/CMakeLists.txt, + Tests/CTestTest/test.cmake.in, + Tests/CommandLineTest/CMakeLists.txt: ENH: Add some ctest + coverage + +2004-05-10 17:53 andy + + * Source/: cmDocumentation.cxx, cmakemain.cxx: BUG: Move + documentation so that it does not apear in ctest + +2004-05-10 17:44 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add a way to force ctest to + be a new process + +2004-05-10 16:58 king + + * Utilities/Release/cmake_release.sh: ENH: Added support for using + cvs checkout instead of cvs export. + +2004-05-10 16:55 will + + * Source/cmCTest.cxx: ENH: Added regex. + +2004-05-10 16:40 king + + * Source/: cmLocalUnixMakefileGenerator.cxx: BUG: Need to recognize + -B linker options. + +2004-05-10 15:49 king + + * Utilities/Release/release_dispatch.sh: ENH: Adding release + dispatch script. + +2004-05-10 15:48 king + + * Utilities/Release/: cmake_release.sh, config_CYGWIN_NT-5.1, + config_Linux, cygwin-package.sh.in: ENH: Updated to latest + version from 1.8 branch. + +2004-05-10 14:54 king + + * Source/kwsys/: CMakeLists.txt, ProcessWin32.c, + ProcessWin32Kill.c, ProcessWin32Kill.h.in: ENH: Adding native + windows process tree kill to ProcessWin32.c. This replaces the + ProcessWin32Kill.c implementation. + +2004-05-10 13:38 king + + * Source/kwsys/: Base64.h.in, ProcessWin32.c: ERR: Avoiding + namespace pollution: kw_sys -> kwsys_ns. Also undefining the + macro at the correct time. + +2004-05-10 13:15 king + + * Source/kwsys/kwsysHeaderDump.pl: ENH: Renaming kwsys macro to + kwsys_ns to work around borland preprocessor bug. + +2004-05-10 13:10 king + + * Source/kwsys/: Process.h.in, ProcessWin32Kill.h.in: ERR: Avoiding + namespace pollution: kw_sys -> kwsys_ns. Also undefining the + macro at the correct time. + +2004-05-10 12:45 hoffman + + * Modules/FindGTK.cmake, Modules/Platform/OSF1.cmake, + Source/cmCTest.cxx, Source/cmCTest.h, Source/cmIfCommand.cxx, + Source/cmLocalGenerator.cxx, Source/cmake.cxx, Source/ctest.cxx, + Source/kwsys/Base64.h.in, Source/kwsys/CMakeLists.txt, + Source/kwsys/Process.h.in, Source/kwsys/ProcessWin32.c, + Source/kwsys/ProcessWin32Kill.c, + Source/kwsys/ProcessWin32Kill.h.in, Source/kwsys/SystemTools.cxx, + Templates/TestDriver.cxx.in: merge from main tree + +2004-05-10 12:08 hoffman + + * Source/kwsys/ProcessWin32Kill.c: ENH: remove extra include for + compile with mingw + +2004-05-10 12:06 hoffman + + * Source/kwsys/: CMakeLists.txt, ProcessWin32Kill.c, + ProcessWin32Kill.cxx: ENH: change to c code so it can be built + with mingw + +2004-05-10 11:04 hoffman + + * Source/kwsys/ProcessWin32Kill.cxx: ENH: remove unused include + file so it will build with mingw + +2004-05-10 10:20 martink + + * Source/cmCTest.cxx: fix for config type passing between ctests + +2004-05-09 12:27 martink + + * Source/cmCTest.cxx: some cleanup and fix for PVLocal + +2004-05-08 14:55 hoffman + + * Templates/TestDriver.cxx.in: BUG: remove debug pop hacks, also + remove duplicate call to argvc function + +2004-05-07 14:22 andy + + * Source/kwsys/: Base64.h.in, Process.h.in, ProcessWin32.c, + ProcessWin32Kill.h.in: ERR: On Borland preprocessor goes into + recursion which adds some weid spaces in the include name. This + fixes it + +2004-05-07 13:26 hoffman + + * Source/ctest.cxx: ENH: better documentation + +2004-05-07 12:53 hoffman + + * Source/: cmCTest.cxx, cmCTest.h: ENH: add the ability to block + popup error dialogs in tests on windows + +2004-05-07 12:52 hoffman + + * Source/kwsys/ProcessWin32.c: BUG: make sure the correct state is + set for expired processes + +2004-05-07 11:24 martink + + * Source/cmCTest.cxx: missing header for unix + +2004-05-07 10:50 martink + + * Source/: cmCTest.cxx, cmCTest.h: updated testingoptions for + continuous dashboards + +2004-05-07 10:16 hoffman + + * Modules/FindGTK.cmake: Add a missing dollar sign + +2004-05-07 08:35 martink + + * Templates/TestDriver.cxx.in: fix warning maybe + +2004-05-06 16:06 hoffman + + * Source/cmLocalGenerator.cxx: BUG: make sure install works with + spaces in the path + +2004-05-06 15:34 king + + * Source/kwsys/: CMakeLists.txt, ProcessWin32.c, + ProcessWin32Kill.cxx, ProcessWin32Kill.h.in: ENH: Adding process + tree killing for Win32 process execution. + +2004-05-06 14:30 king + + * Source/kwsys/Process.h.in: ERR: Added units to SetTimeout + documentation. + +2004-05-06 10:30 hoffman + + * Source/cmCTest.cxx: BUG: fix ctest so that the search path for + test executables produces better output and does not use config + dir when it is not set + +2004-05-06 10:29 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: fix collapse full path to + handle a file in the root directory + +2004-05-06 09:47 martink + + * Source/cmIfCommand.cxx: horrible hack + +2004-05-06 08:51 martink + + * Templates/TestDriver.cxx.in: fix warning + +2004-05-05 11:41 martink + + * Source/cmCTest.cxx: fix for in source testing + +2004-05-05 10:41 martink + + * Modules/Platform/OSF1.cmake: a guess at some OSF compiler flags + +2004-05-05 10:23 hoffman + + * ChangeLog.txt: change log up-to 2.0 branch point + +2004-05-05 10:21 hoffman + + * ChangeLog.txt: ENH: add new change log marking 2.0 branch + +2004-05-05 10:19 hoffman + + * CMakeLists.txt, Source/cmCPluginAPI.h: ENH: move version to 2.1 + for cvs because 2.0 has been branched + +2004-05-05 10:17 hoffman + + * CMakeLists.txt, Source/cmCPluginAPI.h, + Utilities/Release/cmake_release.sh: ENH: move version numbers to + cmake 2.0 for branch + +2004-05-05 10:13 andy + + * Source/: cmCTest.cxx, cmake.cxx: ENH: Remove memory leak + +2004-05-04 14:24 hoffman + + * Source/CMakeLists.txt, Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: fix tests + to work with in source builds + +2004-05-04 14:18 martink + + * Source/cmCTest.cxx: support in source builds and arg passing + +2004-05-04 11:24 andy + + * Modules/Platform/Windows-bcc32.cmake, + Source/cmLocalUnixMakefileGenerator.cxx: ENH: Only mangle object + files if CMAKE_MANGLE_OBJECT_FILE_NAMES is set. Only on borland + for now. + +2004-05-04 09:16 martink + + * Source/cmIfCommand.cxx: fix warning + +2004-05-03 17:51 andy + + * Tests/SwigTest/CMakeLists.txt: ENH: Cleanup example a bit + +2004-05-03 16:38 andy + + * Source/cmCTest.cxx: ENH: After running test clear results for + memory checking + +2004-05-03 16:36 andy + + * Source/cmCTest.cxx: ENH: Skip tests that do not have defects + +2004-05-03 16:35 andy + + * Modules/: CheckTypeSize.c, CheckTypeSize.cmake: ENH: support + STDDEF and cleanup + +2004-05-03 15:33 martink + + * Source/cmIfCommand.cxx: minor backwards fix + +2004-05-03 12:34 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix to make spaces + in paths work for jump over with borland and nmake on second + build + +2004-05-03 12:02 andy + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: Remove + warning + +2004-05-03 10:10 king + + * Source/cmStringCommand.h: ENH: Documented use of \1 syntax in + replace expression. + +2004-05-03 08:52 hoffman + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: fix + warnings in test + +2004-05-02 11:50 hoffman + + * Tests/: LinkLineOrder/Two.c, + LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: remove + warnings in tests + +2004-05-01 22:05 hoffman + + * Source/ctest.cxx: BUG: putenv syntax was wrong and caused a crash + on the SGI + +2004-05-01 10:08 martink + + * Source/: cmIfCommand.cxx, cmIfCommand.h: better if expression + support + +2004-05-01 10:07 martink + + * Modules/FindOpenGL.cmake: fix to find opengl on some osf systems + +2004-05-01 09:57 andy + + * Source/cmCTest.cxx: ERR: Remove warning about shadow variables + +2004-04-30 18:21 andy + + * Tests/: Complex/Library/testConly.c, + ComplexOneConfig/Library/testConly.c, + ComplexRelativePaths/Library/testConly.c, + SubDir/ThirdSubDir/testfromauxsubdir.c: ENH: Remove warnings + +2004-04-30 17:28 andy + + * Tests/Simple/simpleWe.cpp: ENH: Remove warning + +2004-04-30 15:17 andy + + * Source/ctest.cxx: ENH: Add environment variable that Dart sets so + that tests can know they are being tested from Dart/CTest + +2004-04-30 14:27 hoffman + + * Tests/SwigTest/CMakeLists.txt: ENH: link in more than just python + +2004-04-30 14:14 andy + + * Source/cmCTest.cxx: ENH: Report filename of the note + +2004-04-30 13:41 andy + + * Modules/FindSWIG.cmake: ENH: More paths + +2004-04-30 12:54 hoffman + + * Modules/FindSWIG.cmake: ENH: add another place to look for + swig.exe + +2004-04-30 12:52 hoffman + + * Modules/FindSWIG.cmake: ENH: try to find swig.exe in SWIG_DIR + +2004-04-30 12:36 andy + + * Source/cmCTest.cxx: ENH: Add support for notes in Testing/Notes + subdirectory. This way test can write notes that will be reported + +2004-04-30 12:17 andy + + * Tests/SwigTest/: CMakeLists.txt, example.cxx, example.h, + example.i, runme.php4, runme.pike, runme.pl, runme.py, runme.rb, + runme.tcl, runme2.tcl: ENH: Here is test for swig module + +2004-04-30 12:11 andy + + * Modules/: FindPHP4.cmake, FindPerlLibs.cmake, FindPike.cmake, + FindRuby.cmake, FindSWIG.cmake, UseSWIG.cmake: ENH: Initial + import of swig. Start working towards Bug #749 - Add swig support + module to cmake + +2004-04-30 11:36 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: remove duplicate + depend on cache file and use of make variable in make target + +2004-04-30 11:36 hoffman + + * Templates/TestDriver.cxx.in: ENH: remove unused variable + +2004-04-30 10:32 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: remove warnings + +2004-04-30 08:02 hoffman + + * Templates/CMakeLists.txt: BUG: add missing install file + +2004-04-29 17:44 king + + * Source/kwsys/CMakeLists.txt: ENH: Added automatic adjustment of + C++ flags to include -timplicit_local and -no_implicit_include + for the Compaq compiler on OSF. + +2004-04-29 17:41 andy + + * Source/cmMacroCommand.cxx, Source/cmMacroCommand.h, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: Add ARGV and ARGN + support to MACRO command. ARGV is the list of all arguments and + ARGN is the list of all nonexpected arguments + +2004-04-29 15:12 andy + + * Source/cmForEachCommand.cxx, Source/cmForEachCommand.h, + Tests/StringFileTest/CMakeLists.txt: ENH: Add RANGE support to + FOREACH + +2004-04-29 14:51 andy + + * Source/: cmCTest.cxx, cmStandardIncludes.h: BUG: Add a safety + check so that you cannot send cmOStringStream.str() to other + stream and produce the funky hex number. This makes it impossible + to compile such a code. Adding that exposed a whole bunch of + places in CMake where streams were used wrongly + +2004-04-29 13:25 andy + + * Source/kwsys/SystemTools.cxx: BUG: Most of time when asking if + file exists, we actually want to read it... Should fix Bug #809 - + FIND_INCLUDE should check readability + +2004-04-29 12:33 hoffman + + * Source/: cmGetTargetPropertyCommand.cxx, + cmLocalUnixMakefileGenerator.cxx: ENH: remove warnings + +2004-04-29 10:26 hoffman + + * Source/cmake.cxx: BUG: fix crash from bug id 806 + +2004-04-28 14:25 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: remove warning + +2004-04-28 13:40 hoffman + + * Source/cmAddExecutableCommand.h: BUG: fix for bug 121 add some + docs for MFC flag + +2004-04-28 13:21 hoffman + + * Modules/Platform/Darwin.cmake, + Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix for bug 116 + platform files can now specify directories that should not be + added by CMAKE + +2004-04-28 12:31 hoffman + + * Source/cmCreateTestSourceList.cxx, + Source/cmCreateTestSourceList.h, Templates/TestDriver.cxx.in: + ENH: make test driver more flexible by using a configured file + instead of generating all the code. fixes bug 28 + +2004-04-28 10:52 andy + + * Source/cmake.cxx, Tests/CommandLineTest/CMakeLists.txt, + Tests/CommandLineTest/PreLoad.cmake: ENH: Add support for + automatically preloaded cmake file. Closes Bug #802 - Add auto + preload file support in CMake + +2004-04-28 10:15 andy + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: ENH: Encode object files with + funny characters in the name. It should fix Bug #418 - Borland + 5.5.1, Templates/*.cxx files with '+' chars used in execs + +2004-04-28 10:09 hoffman + + * Tests/: Complex/VarTests.cmake, Complex/Executable/complex.cxx, + ComplexOneConfig/VarTests.cmake, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/VarTests.cmake, + ComplexRelativePaths/Executable/complex.cxx: ENH: add a test for + EQUAL in if + +2004-04-28 10:05 andy + + * Tests/SubDir/ThirdSubDir/: pair_p_int.int1.c, + testfromauxsubdir.c: ENH: More special cases + +2004-04-28 10:00 hoffman + + * Modules/: CheckIncludeFile.cmake, CheckIncludeFileCXX.cmake: ENH: + fixes for optional flag arguments to check include macros + +2004-04-28 09:59 hoffman + + * Source/cmIfCommand.cxx: BUG: fix logic in EQUAL if test + +2004-04-28 09:52 hoffman + + * Modules/CheckIncludeFileCXX.cmake: BUG: fix for bug 80, check + include cxx now has an optional argument that can is added to the + cxx flags + +2004-04-28 09:51 hoffman + + * Source/: cmIfCommand.cxx, cmIfCommand.h: ENH: add a numeric EQUAL + to the IF statment, very useful for variable arguments in MACROS + +2004-04-27 14:16 andy + + * Source/kwsys/: Base64.c, Base64.h.in, CMakeLists.txt, + Configure.h.in, Configure.hxx.in, Copyright.txt, Directory.cxx, + Directory.hxx.in, EncodeExecutable.c, Process.h.in, + ProcessFwd9x.c, ProcessUNIX.c, ProcessWin32.c, README.txt, + RegularExpression.cxx, RegularExpression.hxx.in, SystemTools.cxx, + SystemTools.hxx.in, kwsysHeaderDump.pl, + kwsysPlatformCxxTests.cmake, kwsysPlatformCxxTests.cxx, + kwsysPrivate.h, kwsys_ios_fstream.h.in, kwsys_ios_iosfwd.h.in, + kwsys_ios_iostream.h.in, kwsys_ios_sstream.h.in, kwsys_stl.h.in, + test1.cxx, testIOS.cxx, testProcess.c: ENH: Move to VolView + branch + +2004-04-27 12:03 andy + + * Source/cmGetTargetPropertyCommand.cxx, + Tests/CustomCommand/CMakeLists.txt: ENH: Add LOCATION to + GET_TARGET_PROPERTY. Closes Bug #34 - Add to GET_TARGET_PROPERTY + location of target + +2004-04-27 12:02 andy + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator.cxx, cmLocalUnixMakefileGenerator.h: + ENH: GetSafeDefinition is now in cmMakefile + +2004-04-27 11:30 andy + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Add method to get + definition even if it does not exists + +2004-04-27 11:08 andy + + * Tests/CustomCommand/: generator.cxx, wrapper.cxx: ERR: Remove + warnings from tests + +2004-04-27 09:22 andy + + * Source/cmSourceFile.cxx, Tests/SubDir/CMakeLists.txt, + Tests/SubDir/vcl_algorithm+vcl_pair+double.foo.c, + Tests/SubDir/AnotherSubdir/pair+int.int.c, + Tests/SubDir/AnotherSubdir/secondone.c, + Tests/SubDir/AnotherSubdir/testfromsubdir.c, + Tests/SubDir/ThirdSubDir/pair+int.int1.c, + Tests/SubDir/ThirdSubDir/testfromauxsubdir.c, + Tests/SubDir/ThirdSubDir/thirdone.c: BUG: Fix aus source dir and + add better testing of it + +2004-04-27 08:30 hoffman + + * Source/: cmLoadCommandCommand.cxx, cmMacroCommand.cxx: WRN: + remove warnings + +2004-04-26 18:51 andy + + * Source/cmCTest.cxx: ENH: Another one of those nasty hex numbers + in the ctest output + +2004-04-26 18:49 andy + + * Tests/SubDir/AnotherSubdir/: secondone.c, testfromsubdir.c: ENH: + Add extra test files + +2004-04-26 17:45 hoffman + + * Source/cmLoadCommandCommand.cxx: ENH: fix for bug id 27, add a + signal handler for crashes in loaded commands + +2004-04-26 17:32 andy + + * Source/CMakeLists.txt, Source/cmSourceFile.cxx, + Tests/SubDir/CMakeLists.txt, Tests/SubDir/Executable/test.cxx: + ENH: When source file is in subdirectory put object file in + subdirectory. Fixes Bug #290 - Source files in subdirectories + should produce object files in subdirectories + +2004-04-26 13:42 andy + + * Modules/FindTCL.cmake: ENH: Add TCL_FOUND + +2004-04-26 13:42 andy + + * Templates/: CMakeLists.txt, install-sh: ENH: With new install + framework we don't need install-sh any more + +2004-04-26 13:42 andy + + * Tests/SystemInformation/: CMakeLists.txt, DumpInformation.cxx: + ENH:Add test for GET/SET_DIRECTORY_PROPERTY + +2004-04-26 11:23 andy + + * Source/: cmake.cxx, cmake.h: BUG: Fix resolving of infinite loops + while CMakeSetup/ccmake still running + +2004-04-26 11:12 martink + + * Tests/: Complex/CMakeLists.txt, Complex/Executable/complex.cxx, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx: added tests for var + args with macros + +2004-04-26 11:11 martink + + * Source/: cmMacroCommand.cxx, cmMacroCommand.h: macros now support + varargs + +2004-04-26 11:00 king + + * Modules/FindITK.cmake, Modules/FindVTK.cmake, + Source/cmFindPackageCommand.cxx: BUG#682: Adding environment + variable check to FIND_PACKAGE command. + +2004-04-26 10:49 king + + * Source/cmFindPackageCommand.cxx: STYLE: Removed trailing + whitespace. + +2004-04-26 10:19 king + + * Modules/: CheckVariableExists.c: BUG#502: Do not let optimizing + compilers think the symbol exists. Require the symbol by making + the return value depend on it to force linking. + +2004-04-23 16:26 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate: BUG: fix for bug 769 + CMAKE_STANDARD_LIBRARIES now used in ides + +2004-04-23 16:20 andy + + * Source/: cmCommands.cxx, cmGetDirectoryPropertyCommand.cxx, + cmGetDirectoryPropertyCommand.h, cmMakefile.h, + cmSetDirectoryPropertiesCommand.cxx, + cmSetDirectoryPropertiesCommand.h: ENH: Add + GET/SET_DIRECTORY_PROPERTY/PROPERTIES commands so that we can + change include directories and get all sorts of things. Closes + Bug #25 - Get_CMAKE_PROPERTIES + +2004-04-23 13:12 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake, + Source/cmLocalVisualStudio7Generator.cxx: ENH: add verbose make + abilility to visual studio 7 + +2004-04-23 12:52 hoffman + + * Source/CMakeLists.txt, Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmSubdirCommand.cxx, + Tests/PreOrder/CMakeLists.txt, Tests/PreOrder/simple.cxx, + Tests/PreOrder/Library/CMakeLists.txt, + Tests/PreOrder/Library/simpleLib.cxx: ENH: add SUBDIR PREORDER + and fix clean for non-relative paths + +2004-04-23 10:03 andy + + * Source/: cmAddExecutableCommand.cxx, cmAddExecutableCommand.h: + ENH: Unify with other variables + +2004-04-23 09:12 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: ENH: allow verbose + makefile flag to remove nologo from all commands so you can see + them in visual studio 6 + +2004-04-23 08:50 king + + * Source/cmCTest.cxx: ERR: Fixed unused variable assignment + warning. + +2004-04-22 18:04 andy + + * Source/cmCTest.cxx: ENH: Add DynamicAnalisys support. The old + Purify is still available through --compatibility-mode + +2004-04-22 17:23 hoffman + + * Modules/: FindwxWidgets.cmake, UsewxWidgets.cmake: BUG: fix for + bug 618 + +2004-04-22 17:20 hoffman + + * Modules/FindGLUT.cmake: BUG: fix for bug 743 + +2004-04-22 17:08 hoffman + + * Modules/FindGTK.cmake: BUG: fix for bug 607 + +2004-04-22 16:58 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Templates/staticLibHeader.dsptemplate: ENH: add support for + static library property STATIC_LIBRARY_FLAGS + +2004-04-22 16:16 hoffman + + * Modules/FindDCMTK.cmake: ENH: contribution from Ian Scott, + thanks. + +2004-04-22 15:59 martink + + * Modules/FindOpenGL.cmake: update comments + +2004-04-22 14:38 hoffman + + * Source/cmTarget.cxx: ENH: add a property for HAS_CXX to a target + that will force the use of a c++ compiler in the linking of an + executable that contains only c code + +2004-04-22 14:11 andy + + * Source/kwsys/SystemTools.cxx: ERR: Verify that getenv returned + something before using it + +2004-04-22 13:37 martink + + * Source/cmAddCustomCommandCommand.h: update docs + +2004-04-22 13:24 hoffman + + * Source/: cmFindLibraryCommand.h, cmFindPathCommand.cxx, + cmFindPathCommand.h, cmMakefile.cxx, kwsys/SystemTools.cxx, + kwsys/SystemTools.hxx.in: BUG: fix for 301 CMAKE_LIBRARY_PATH and + CMAKE_INCLUDE_PATH env vars now used in FIND_LIBRARY and + FIND_PATH in addtion to and before PATH + +2004-04-22 11:12 hoffman + + * Modules/FindwxWindows.cmake: BUG: fix bad if statements + +2004-04-22 09:44 hoffman + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG 178: make top level + cmakelist file a source in ALL_BUILD + +2004-04-21 17:54 andy + + * Source/cmGlobalVisualStudio71Generator.cxx: ERR: Fix install on + VS71 + +2004-04-21 16:23 king + + * Source/: cmListFileLexer.c, cmListFileLexer.h, + cmListFileLexer.in.l: ENH: Added cmListFileLexer_SetString method + to allow a string to be parsed as input. + +2004-04-21 16:07 hoffman + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: add dep + +2004-04-21 15:09 hoffman + + * Modules/FindwxWindows.cmake: ENH: fix for mingw + +2004-04-21 11:42 andy + + * Source/cmFileCommand.cxx: BUG: Put all files to manifest + +2004-04-21 11:36 king + + * Source/cmAddCustomTargetCommand.cxx: BUG: Fixed check of number + of arguments. + +2004-04-21 11:33 king + + * Modules/: FindITK.cmake, FindVTK.cmake: ENH: Terminate with a + FATAL_ERROR if FIND_PACKAGE command was called with REQUIRED + argument and package was not found. + +2004-04-21 11:32 andy + + * Source/cmLocalGenerator.cxx: ENH: Do preinstall and postinstall + script even if the target is not installed + +2004-04-21 10:34 andy + + * Source/: cmakemain.cxx, ctest.cxx: ENH: Report error and exit + when the current directory is not specified + +2004-04-21 10:33 andy + + * Source/kwsys/SystemTools.cxx: BUG: Prevent crash when the current + working directory cannot be established + +2004-04-20 18:28 andy + + * Source/cmSystemTools.cxx: BUG: If the line ends without new-line + character, Split should still return something + +2004-04-19 17:21 andy + + * Source/cmCTest.cxx: RNH: Support NoDartCoverage in the binary + directorory + +2004-04-19 10:36 king + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: + ENH#696: Adding REQUIRED option to FIND_PACKAGE command. It will + terminate the cmake configure step if the package is not found. + +2004-04-18 14:41 andy + + * Source/: cmFileCommand.cxx, cmFileCommand.h, + cmGlobalGenerator.cxx, cmMakefile.cxx, cmMakefile.h, + cmWriteFileCommand.cxx, cmWriteFileCommand.h, cmake.cxx, cmake.h: + ENH: Add check for infinite loops. Make sure that files written + using WRITE_FILE and FILE WRITE are not used as input files. + Fixes Bug #678 - WRITE_FILE and FILE(WRITE...) lead to infinite + loops + +2004-04-18 13:16 andy + + * Source/: cmLocalUnixMakefileGenerator.cxx, cmSourceFile.cxx: ENH: + Add support for adding object files and sources. This way you can + use external program such as assembler or fortran to generate + object files. Also star of fixing: Bug #757 - add .o file as a + source file + +2004-04-16 14:55 martink + + * Source/cmCTest.cxx: better args handling for -I options + +2004-04-16 14:52 martink + + * Source/: cmCTest.cxx, cmCTest.h: better args handling for -I + option + +2004-04-16 13:36 andy + + * Source/cmCTest.cxx: ENH: Better reporting of what tests failed + and write a file with failed tests + +2004-04-16 09:50 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for bug 91 + +2004-04-15 16:11 andy + + * Source/CursesDialog/cmCursesStringWidget.cxx: ENH: Add support + for HOME and END keys. Also fix Bug #666 - In CCMake when + deleting something, it does not stop at the beginning of line + +2004-04-15 15:46 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: BUG: Prevent deleting + not existing variables and therefore prevent crash. Fixes: Bug + #750 - CCMake crashes when deleting all variables + +2004-04-15 13:59 andy + + * Tests/: Complex/CMakeLists.txt, Complex/Executable/complex.cxx, + Complex/Library/CMakeLists.txt, Complex/Library/file2.cxx, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexOneConfig/Library/file2.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt, + ComplexRelativePaths/Library/file2.cxx: ENH: Add test for + REMOVE_DEFINITION + +2004-04-15 13:58 andy + + * Source/: cmCommands.cxx, cmMakefile.cxx, cmMakefile.h, + cmRemoveDefinitionsCommand.cxx, cmRemoveDefinitionsCommand.h: + ENH: ADD REMOVE_DEFINITION command. Fix feature request: Bug #182 + - Add opposite to ADD_DEFINITIONS + +2004-04-15 13:15 hoffman + + * Source/cmOptionCommand.cxx: BUG: fix for 282 + +2004-04-15 13:09 andy + + * Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Templates/CMakeLists.txt: ENH: Handle make install target on + Visual Studio 6 and 7 and install templates + +2004-04-15 12:07 andy + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: ENH: Ok, that is it. Remove old + install and replace it with new + +2004-04-15 11:55 hoffman + + * Modules/FindMFC.cmake: BUG: fix for bug 506 + +2004-04-15 11:38 hoffman + + * Source/cmSiteNameCommand.cxx: BUG: fix for bug 689 + +2004-04-15 08:22 hoffman + + * Modules/: CheckForPthreads.c, CheckFunctionExists.c, + CheckTypeSize.c, CheckVariableExists.c, TestBigEndian.c: ENH: fix + tests for non-ansi c on hp and remove warnings for ansi c + +2004-04-14 17:02 hoffman + + * Modules/FindITK.cmake: BUG: fix for bug 608 + +2004-04-14 16:58 hoffman + + * Source/cmGlobalVisualStudio7Generator.cxx: BUG: fix external + projects for vc7 + +2004-04-14 15:56 hoffman + + * Modules/: CheckFunctionExists.c, TestBigEndian.c: ENH: remove + warnings from try compiles + +2004-04-14 14:25 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h: ENH: Renamed + --help-list-commands to --help-command-list and split --help + [command] into separate --help and --help-command cmd options. + +2004-04-14 13:40 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h: ENH: Added + --help-list-commands option. + +2004-04-14 08:55 hoffman + + * Source/cmCTest.cxx: ENH: remove warning + +2004-04-13 18:27 hoffman + + * Source/cmCTest.cxx: ENH: fix warning + +2004-04-13 16:32 hoffman + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx: ENH: add the ability + to run a limited sub-set of the tests + +2004-04-12 21:01 hoffman + + * Modules/FindGTK.cmake: BUG: fix for bug 593 + +2004-04-09 09:53 andy + + * Source/cmCTest.cxx: BUG: Display string not some weird pointer + +2004-04-09 08:37 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: add full path + libraries to the depend information + +2004-04-08 17:13 andy + + * Modules/MacOSXBundleInfo.plist.in, + Source/cmAddExecutableCommand.cxx, + Source/cmAddExecutableCommand.h: ENH: Improve Mac OSX bundle + support + +2004-04-07 12:07 martink + + * Source/cmLocalVisualStudio7Generator.cxx: fix problem with custom + command + +2004-04-07 09:58 hoffman + + * Source/cmTarget.cxx: ENH: remove warnings on sgi + +2004-04-05 10:35 king + + * DartConfig.cmake: ERR: Need to use latest testing configuration + even on branch. + +2004-04-02 13:21 king + + * Source/cmTarget.cxx: BUG: _LINK_TYPE cache variable should never + be switched from optimized to debug or vice versa. + +2004-04-02 09:43 hoffman + + * Source/CMakeLists.txt, Tests/Jump/Library/Shared/CMakeLists.txt: + ENH: fix for apple + +2004-04-02 08:09 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix warning and + shadow variable + +2004-04-01 16:07 martink + + * Source/cmCTest.cxx: fix for missing valid images + +2004-04-01 15:28 king + + * Source/kwsys/ProcessFwd9x.c: ENH: Added comment for future work + to make forwarding executable always statically linked. + +2004-04-01 14:37 andy + + * Source/cmCTest.cxx: BUG: Fix bug on windows. You cannot cout + std::string directly + +2004-04-01 14:11 andy + + * Source/: cmCTest.cxx, CTest/cmCTestSubmit.cxx, + CTest/cmCTestSubmit.h: ENH: Add logging of submitting + +2004-04-01 09:59 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix non relative + paths + +2004-04-01 08:59 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix for non + relative paths with spaces in the path + +2004-03-31 16:44 king + + * Modules/FindTclsh.cmake: ENH: Added registry check for + ActiveState Tcl 8.4.6. + +2004-03-31 11:26 andy + + * Source/cmCTest.cxx: ENH: Reduce number of + GetCurrentWorkingDirectory + +2004-03-31 11:24 andy + + * Source/cmCTest.cxx: ENH: Change to the new directory + +2004-03-31 10:01 hoffman + + * Source/: CMakeLists.txt, cmLocalGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx, cmLocalUnixMakefileGenerator.h, + cmake.cxx: ENH: make relative paths optional and default off, and + add a test for them + +2004-03-29 12:51 king + + * Source/cmConfigureFileCommand.cxx: BUG#485: Fixing on CMake 1.8 + branch. + +2004-03-29 12:04 king + + * Source/: cmSystemTools.h, cmTryCompileCommand.cxx: BUG#679: + Merging fix to CMake 1.8 branch. + +2004-03-28 17:59 andy + + * Source/: cmFileCommand.cxx, cmLocalGenerator.cxx: ENH: When + installing project, write manifest + +2004-03-28 16:36 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Add a way to clean + additional files + +2004-03-28 16:00 andy + + * Source/: cmConfigureFileCommand.cxx, cmConfigureFileCommand.h, + cmMakefile.cxx: ENH: If configure file fails do not create + directory + +2004-03-28 10:14 andy + + * Source/cmIncludeCommand.cxx: ERR: Remove debug + +2004-03-28 10:14 andy + + * Source/cmLocalGenerator.cxx: BUG: Support paths with spaces + +2004-03-28 09:46 andy + + * Source/: cmIncludeCommand.h, cmSetTargetPropertiesCommand.h: DOC: + Fix comment + +2004-03-27 20:59 andy + + * Source/cmLocalGenerator.cxx, + Source/cmSetTargetPropertiesCommand.h, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstall/PostInstall.cmake, + Tests/SimpleInstall/PreInstall.cmake, + Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/PostInstall.cmake, + Tests/SimpleInstallS2/PreInstall.cmake: ENH: Add pre and post + install script support + +2004-03-27 19:52 andy + + * Source/cmIncludeCommand.cxx, Source/cmIncludeCommand.h, + Tests/LoadCommand/CMakeLists.txt, + Tests/LoadCommandOneConfig/CMakeLists.txt: ENH: Add support for + importing modules without specifying path + +2004-03-27 19:52 andy + + * Source/cmFindPackageCommand.cxx: ERR: That slash is unnecessary + +2004-03-27 13:20 starreveld + + * Modules/FindOpenGL.cmake: ERR: Shouldn't be adding xlibs to + opengllibs on osx + +2004-03-25 16:06 martink + + * Source/cmCTest.cxx: coverage change that will probably end in an + infinite loop + +2004-03-25 08:45 king + + * Source/: cmLinkLibrariesCommand.h, + cmTargetLinkLibrariesCommand.h: ENH: Clarified documentation for + LINK_LIBRARIES and TARGET_LINK_LIBRARIES. + +2004-03-24 16:31 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Added support to + library flags parser for -Wl and -R options. + +2004-03-23 15:02 king + + * Modules/Platform/Windows-cl.cmake: ERR: Fixed incorrect + documentation for CMAKE_CXX_WARNING_LEVEL. Submitted by David + Cole. + +2004-03-20 20:37 andy + + * Source/cmCTest.cxx: ENH: Fix warning + +2004-03-19 14:48 king + + * Source/cmTryCompileCommand.cxx: ENH: Clarified recursive + TRY_COMPILE error message. + +2004-03-19 09:34 andy + + * Source/cmCTest.cxx: ERR: Fix warnings about wrong format + +2004-03-18 09:52 andy + + * Source/cmCTest.cxx: ERR: Fix build on broken C++ compiles with no + != operator for std::string + +2004-03-17 11:30 andy + + * Source/: cmCTest.cxx, cmCTest.h: BUG: change directory before + running test and remember test number + +2004-03-17 09:42 berk + + * Source/: cmSystemTools.h, cmTryCompileCommand.cxx: BUG: When + error occurs, try compiles should still work + +2004-03-17 08:20 andy + + * Source/cmCTest.h: ERR: On some compilers structure inside class + cannot reference private typdefs from the same class + +2004-03-16 12:54 king + + * Source/cmExportLibraryDependencies.cxx: ERR: Added missing + include for auto_ptr. + +2004-03-15 14:54 andy + + * Source/kwsys/CMakeLists.txt: ENH: Always include KWSys header + files directory + +2004-03-15 10:44 king + + * Source/cmExportLibraryDependencies.cxx: BUG#675: If not + appending, do copy-if-different on exported file. + +2004-03-15 09:35 andy + + * Source/cmCTest.h: ERR: Fix build + +2004-03-14 12:28 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add support for future tags + +2004-03-14 11:23 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Count tests while they go. + Also in the logs report more stuff like elapsed time etc. + +2004-03-12 14:43 king + + * Source/kwsys/ProcessUNIX.c: ERR: SIGSEGV == SIGBUS on BeOS. + +2004-03-10 14:33 hoffman + + * Source/: cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h: ENH: update vs71 generator to + support excluded subdirs + +2004-03-09 16:28 hoffman + + * Source/CMakeLists.txt, Source/cmEnableTestingCommand.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio6Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmLocalGenerator.cxx, Source/cmLocalGenerator.h, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmSubdirCommand.cxx, + Source/cmSubdirCommand.h, Tests/SubDir/Executable/test.cxx: ENH: + add new subdirectory exclude from top option + +2004-03-09 16:20 hoffman + + * Tests/SubDir/: CMakeLists.txt, Examples/CMakeLists.txt, + Examples/example1/CMakeLists.txt, Examples/example1/example1.cxx, + Examples/example2/CMakeLists.txt, Examples/example2/example2.cxx, + Executable/CMakeLists.txt, Executable/test.cxx: ENH: create new + test to test subdir exclude + +2004-03-09 12:31 andy + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: Properly build + WIN32 executables + +2004-03-09 07:50 andy + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Try to remove warning + +2004-03-08 22:24 andy + + * Source/cmInstallTargetsCommand.h: ENH: Add comment about + RUNTIME_DIRECTORY + +2004-03-08 19:05 andy + + * Source/: cmConfigureFileCommand.cxx, cmMakefile.cxx, + cmMakefile.h: ENH: Move implementation of configure_file to + cmMakefile, so that other classes can use it + +2004-03-04 10:05 king + + * Source/cmStringCommand.cxx, Source/cmStringCommand.h, + Tests/StringFileTest/CMakeLists.txt, + Tests/StringFileTest/InputFile.h.in: ENH: Added STRING(CONFIGURE + ...) command. + +2004-03-03 18:18 king + + * Source/: cmConfigureFileCommand.cxx, cmMakefile.cxx, + cmMakefile.h: ENH: Moved variable and #cmakedefine replacement + from cmConfigureFileCommand.cxx to a ConfigureString method on + cmMakefile. This will give other commands access to the + configuration code. + +2004-02-29 15:13 andy + + * Tests/COnly/CMakeLists.txt: ERR: Too much commits + +2004-02-29 15:13 andy + + * Source/cmMakefile.cxx, Tests/COnly/CMakeLists.txt: ERR: Fix + GetModulesFile + +2004-02-29 14:23 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Handle backticks as + a valid library + +2004-02-29 09:53 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ERR: Cleanup and remove + warning + +2004-02-29 09:51 andy + + * Source/cmLocalCodeWarriorGenerator.cxx: ERR: Fix build on Mac + +2004-02-28 18:59 andy + + * Modules/MacOSXBundleInfo.plist.in, + Source/cmAddExecutableCommand.cxx, Source/cmCPluginAPI.cxx, + Source/cmFindPackageCommand.cxx, Source/cmLocalGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmTarget.h: ENH: Styart working on + bundles support and abstract WIN32_EXECUTABLE + +2004-02-24 18:48 andy + + * Source/cmSystemTools.cxx: ERR: Fix crash. We should check output + before appending to it + +2004-02-24 10:05 andy + + * Source/: cmCTest.cxx, cmCTest.h: BUG: CVS update fix. If the CVS + command was not set there was no indication that something went + wrong. Now it will make sure it does. Also start working on + multiple configuration scripts + +2004-02-24 10:04 andy + + * Source/cmSystemTools.cxx: ENH: Put Process execution errors in + output and honor verbosity + +2004-02-23 09:56 andy + + * Source/: cmCTest.cxx, cmLocalGenerator.cxx: ENH: Improve coverage + support and add more verbosity + +2004-02-23 09:54 king + + * Source/kwsys/Directory.cxx: ERR: Merging 1.7->1.9 changes to + CMake 1.8 branch. + +2004-02-22 22:07 andy + + * Source/: cmCMakeMinimumRequired.h, cmConfigureFileCommand.h, + cmElseCommand.h, cmEndIfCommand.h, cmExecProgramCommand.h, + cmFindFileCommand.h, cmFindLibraryCommand.h, cmFindPathCommand.h, + cmFindProgramCommand.h, cmGetFilenameComponentCommand.h, + cmMakeDirectoryCommand.h, cmRemoveCommand.h, + cmSeparateArgumentsCommand.h, cmWriteFileCommand.h: ENH: Make + more commands scriptable + +2004-02-22 22:06 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: BUG: Prevent crash when + deleting the last cache item + +2004-02-22 13:14 andy + + * Source/: cmCPluginAPI.cxx, cmFLTKWrapUICommand.cxx, + cmGetCMakePropertyCommand.cxx, + cmGetSourceFilePropertyCommand.cxx, cmLoadCacheCommand.h, + cmOutputRequiredFilesCommand.h, cmQTWrapCPPCommand.h, + cmQTWrapUICommand.h, cmSetSourceFilesPropertiesCommand.cxx, + cmSourceFilesCommand.cxx, cmUseMangledMesaCommand.h, + cmVTKMakeInstantiatorCommand.cxx, cmVTKWrapJavaCommand.h, + cmVTKWrapPythonCommand.h, cmVTKWrapTclCommand.h, + cmWrapExcludeFilesCommand.cxx: ENH: Cleanups + +2004-02-20 14:46 andy + + * Source/cmake.cxx, Source/cmakemain.cxx, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Ok, when doing cmake + -P you should not have to squish filename next to -P, There + should be space between + +2004-02-20 09:25 andy + + * Source/cmCTest.cxx: ENH: Handle wrong library on sun and no + project on visual studio 7 + +2004-02-19 10:33 andy + + * Source/CMakeLists.txt: ENH: Comment out test + +2004-02-19 10:32 andy + + * CMakeLists.txt, Source/CMakeLists.txt: ENH: Cleanup + +2004-02-19 10:29 andy + + * Source/cmIfCommand.h: ENH: Make IF command scriptable + +2004-02-19 10:28 king + + * Docs/cmake-mode.el: BUG: Fixed identification of ( and ) tokens + to avoid finding them in string literals. + +2004-02-19 09:35 andy + + * Source/cmMacroCommand.h: ENH: Macro should be scriptable + +2004-02-19 09:35 andy + + * Source/cmCTest.cxx: ERR: Do not exit when find bad custom files. + +2004-02-17 08:35 hoffman + + * Source/cmDynamicLoader.cxx: BUG: don't crash when loading a + module that does not exist + +2004-02-16 10:48 hoffman + + * Source/: cmConfigure.cmake.h.in, cmDynamicLoader.cxx: ENH: use + cmake variables for cmDynamicLoader to figure out library prefix + and extensions + +2004-02-16 09:50 hoffman + + * Modules/Platform/Windows-gcc.cmake, Source/cmDynamicLoader.cxx: + BUG: fix mingw module load tests + +2004-02-14 16:55 hoffman + + * Modules/Platform/Windows-gcc.cmake: shared modules are not linked + so do not use lib prefix + +2004-02-13 10:51 hoffman + + * Modules/Platform/Windows-gcc.cmake, Source/kwsys/SystemTools.cxx: + ENH: change mingw to use libfoo.dll instead of foo.dll since it + can link to them + +2004-02-12 21:44 andy + + * Source/cmFileCommand.cxx: ENH: Add DESTDIR support + +2004-02-12 13:38 king + + * Source/kwsys/Directory.cxx: ERR: Fixed use of _findfirst for MSVC + 6. + +2004-02-12 11:23 martink + + * Source/kwsys/Directory.cxx: fix incorrect signature for findfirst + +2004-02-12 09:13 hoffman + + * Source/kwsys/SystemTools.cxx, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: Fix install test fail on + mingw + +2004-02-12 08:58 andy + + * Source/kwsys/SystemTools.cxx: BUG: Like cygwin, mingw does not + produce .lib file for shared libraries, so search for dll when + searching for library + +2004-02-11 10:56 andy + + * Source/cmCTest.cxx: ERR: Remove warning + +2004-02-11 08:28 andy + + * Source/kwsys/SystemTools.cxx, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: On Cygwin shared + libraries have only .dll file no .lib file, so when finding + library on cygwin, search also for .dll. Also fix SimpleInstall + test on cygwin + +2004-02-10 15:53 andy + + * Source/cmCTest.cxx: ERR: Use filepath followed by filename not + another filepath + +2004-02-10 15:51 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add logging of tests while + running. This way you can actually see the output as it goes + +2004-02-09 16:40 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Some cleanup and try to fix + Visual Studio builds + +2004-02-09 15:34 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: -l or whatever + should be at beginning of line. + +2004-02-09 11:33 andy + + * Source/CMakeLists.txt, Tests/SimpleInstall/inst.cxx, + Tests/SimpleInstallS2/inst.cxx: ENH: Some systems do not handle + spaces in the path + +2004-02-08 20:08 andy + + * Source/CMakeLists.txt, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Install stage2 to + handle runtime problem + +2004-02-08 13:23 andy + + * Source/cmCTest.cxx: ENH: Attempt to support tests in funky + subdirectories + +2004-02-08 12:04 andy + + * Source/CMakeLists.txt, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Add second part of + SimpleInstall + +2004-02-06 16:43 king + + * Source/cmGlob.cxx: BUG#480: Merging 1.10->1.11 changes to 1.8 + branch. + +2004-02-06 15:26 andy + + * Source/cmGlob.cxx: ENH: When nor specifying full path, make sure + it actually works, on broken filesystems fix case of files. + +2004-02-06 15:18 andy + + * Source/cmFileCommand.cxx: ENH: Handle script mode + +2004-02-06 13:47 andy + + * Source/: cmEndForEachCommand.h, cmForEachCommand.h, + cmStringCommand.h: ENH: Make more commands scriptable + +2004-02-06 10:49 andy + + * Modules/FindJNI.cmake: ENH: Better finding of JNI + +2004-02-05 10:12 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ERR: Fix test on windows with + network paths + +2004-02-04 09:42 berk + + * Tests/: SimpleInstall/foo.c, SimpleInstall/foo.h, + SimpleInstall/inst.cxx, SimpleInstallS2/foo.c, + SimpleInstallS2/foo.h, SimpleInstallS2/inst.cxx: ENH: Fix test on + HP-UX + +2004-02-03 11:23 andy + + * Source/cmFileCommand.cxx: ENH: Fix support for debug postfix + +2004-02-03 10:53 andy + + * Source/: cmFileCommand.cxx, cmLocalGenerator.cxx, cmSetCommand.h: + ENH: Add support for install postfix + +2004-02-03 10:25 andy + + * Source/cmLocalGenerator.cxx: ENH: Cleanup output + +2004-02-03 09:26 andy + + * Source/cmLocalUnixMakefileGenerator.cxx, + Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstallS2/CMakeLists.txt: ENH: Fix ADD_DEPENDENCIES + on Unix makefiles and fix SimpleInstall test not to link the + module + +2004-02-02 18:23 andy + + * Tests/: SimpleInstall/CMakeLists.txt, + SimpleInstallS2/CMakeLists.txt: ENH: Make test work on windows + +2004-02-02 18:23 andy + + * Source/cmCTest.cxx: ENH: Propagate build type + +2004-02-01 16:48 andy + + * Tests/: SimpleInstall/lib2.h, SimpleInstall/lib3.h, + SimpleInstallS2/lib2.h, SimpleInstallS2/lib3.h: ENH: Fix exports + +2004-02-01 12:53 andy + + * Source/CMakeLists.txt, Tests/SimpleInstall/CMakeLists.txt, + Tests/SimpleInstall/foo.c, Tests/SimpleInstall/foo.h, + Tests/SimpleInstall/inst.cxx, Tests/SimpleInstall/lib1.cxx, + Tests/SimpleInstall/lib1.h, Tests/SimpleInstall/lib2.cxx, + Tests/SimpleInstall/lib2.h, Tests/SimpleInstall/lib3.cxx, + Tests/SimpleInstall/lib3.h, Tests/SimpleInstallS2/CMakeLists.txt, + Tests/SimpleInstallS2/foo.c, Tests/SimpleInstallS2/foo.h, + Tests/SimpleInstallS2/inst.cxx, Tests/SimpleInstallS2/lib1.cxx, + Tests/SimpleInstallS2/lib1.h, Tests/SimpleInstallS2/lib2.cxx, + Tests/SimpleInstallS2/lib2.h, Tests/SimpleInstallS2/lib3.cxx, + Tests/SimpleInstallS2/lib3.h: ENH: Add install test + +2004-01-29 10:29 hoffman + + * Source/cmCTest.cxx: BUG: keep output + +2004-01-29 09:01 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: remove depend on + CMakeCache for rebuild_cache target to avoid double rebuild cache + +2004-01-28 13:17 hoffman + + * Source/cmCTest.cxx: BUG: After running builtin ctest, go back to + the original directory + +2004-01-28 11:22 andy + + * Source/cmLocalGenerator.cxx: ERR: Remove cout + +2004-01-28 10:59 king + + * Source/kwsys/ProcessWin32.c: BUG: Corrected detection of + exceptional exit code. + +2004-01-28 10:59 king + + * Source/kwsys/testProcess.c: ENH: Added exception string to + abnormal termination report. + +2004-01-28 09:47 martink + + * Source/cmCTest.cxx: Including exception string in test's error + output. + +2004-01-28 08:11 andy + + * Source/cmFileCommand.cxx: ERR: Remove warning about unused + variable + +2004-01-27 17:12 hoffman + + * Source/cmaketest.cxx: remove old file + +2004-01-27 17:12 hoffman + + * Source/cmCTest.cxx: ENH: add a dynamic loader flush cache + +2004-01-27 17:11 andy + + * Source/cmCTest.cxx: ENH: Only display the precontext or + postcontext up to the next or previous warning or error + +2004-01-27 14:51 hoffman + + * Source/cmSystemTools.cxx: BUG: fix FMM + +2004-01-27 12:37 andy + + * Source/: cmFileCommand.cxx, cmInstallTargetsCommand.cxx, + cmLocalGenerator.cxx, cmLocalGenerator.h, cmTarget.h: ENH: Make + install on windows seems to work now + +2004-01-27 09:53 andy + + * Source/cmFileCommand.cxx: ERR: Fix build on Mingw. Looks like + Mingw is more like visual studio... Thanks Fred Wheeler + +2004-01-27 09:42 martink + + * Source/cmCTest.cxx: fix for backup restore + +2004-01-27 09:05 andy + + * Source/cmFileCommand.cxx: ERR: And yet another set of constants + for file permissions + +2004-01-27 09:05 andy + + * Source/: cmStandardIncludes.h, cmSystemTools.h: ERR: Properly + handle mode_t on borland + +2004-01-26 17:52 andy + + * Source/cmStandardIncludes.h: ERR Fix borland + +2004-01-26 16:29 andy + + * Source/cmLocalGenerator.cxx: BUG: Fix for spaces in path + +2004-01-26 16:24 andy + + * Source/: cmFileCommand.cxx, cmLocalGenerator.cxx: ENH: Several + windows bugs and fixes + +2004-01-26 16:05 andy + + * Source/: cmFileCommand.cxx, cmFileCommand.h: ENH: Add unix style + install in file command + +2004-01-26 15:50 andy + + * Source/: cmConfigureFileCommand.cxx, cmSystemTools.cxx, + cmSystemTools.h: ENH: Preserve permissions when copying files + +2004-01-26 15:03 andy + + * Source/: cmStandardIncludes.h, cmSystemTools.cxx: ERR: Fix build + problems on Visual Studio 6 + +2004-01-26 14:55 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Add code for + setting and getting permissions + +2004-01-26 14:41 andy + + * Source/: cmCTest.cxx, cmSystemTools.cxx: ENH: Improve calling of + RunSingle command and fix compile error + +2004-01-26 14:00 hoffman + + * Source/cmSystemTools.cxx: ENH: forgot return value + +2004-01-26 13:57 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add support for + CTestCustom.ctest, which modifies some behavior of ctest + +2004-01-26 13:32 hoffman + + * Source/: cmCTest.cxx, cmGlobalGenerator.cxx, cmSystemTools.cxx, + cmSystemTools.h, cmake.cxx, cmake.h: BUG: fix put/get env + problems + +2004-01-26 13:32 hoffman + + * Source/kwsys/ProcessWin32.c: ENH: fix for build on cygwin mingw + +2004-01-25 19:30 andy + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h: ERR: Fix std:: + namespace + +2004-01-25 19:25 andy + + * Source/: cmGlobalGenerator.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h: ENH: Start adding new installation framework + +2004-01-24 12:52 king + + * Tests/Jump/Executable/CMakeLists.txt: BUG: Due to backward + ordering, Visual Studio GUIs need the link directories for the + libraries the first time. + +2004-01-23 15:17 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: .lib from a .dll + should go in m_LibraryOutputPath not m_ExecutableOutputPath + +2004-01-23 13:43 hoffman + + * Tests/Jump/Library/Shared/CMakeLists.txt: BUG: libdir was set + wrong on windows + +2004-01-23 13:43 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: jump over feature + was not working for windows + +2004-01-23 13:19 andy + + * DartConfig.cmake: ENH: Fix url + +2004-01-23 13:01 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for debug + flags into project files + +2004-01-23 13:01 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: more fixes for + relative path stuff + +2004-01-23 12:46 andy + + * DartConfig.cmake: ENH: Add nightly reporting + +2004-01-23 12:40 hoffman + + * Modules/CMakeDetermineCCompiler.cmake: ENH: use CFLAGS for + testing for gnu + +2004-01-23 11:26 andy + + * DartConfig.cmake: ENH: More continuous e-mail stuff + +2004-01-23 11:22 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: convert the .o + files to not have ./ + +2004-01-23 09:54 king + + * Source/: cmLocalGenerator.cxx, cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: BUG: Fix to build rule generation + with relative paths. + +2004-01-23 09:48 king + + * DartConfig.cmake: ENH: Improving CMake continuous dashboards. + Sending continuous email for all kinds of failures. + +2004-01-23 09:44 martink + + * Source/: cmCTest.cxx, cmCTest.h: fixes to backup restore options + +2004-01-23 08:53 king + + * Source/cmLocalGenerator.cxx: STYLE: Deleted trailing whitespace. + +2004-01-23 08:51 king + + * Source/CMakeLists.txt: ERR: Fixed project name for Jump tests. + +2004-01-22 14:44 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c: ERR: Fixed function + prototypes with zero arguments to be C-style. + +2004-01-22 11:16 andy + + * Source/kwsys/ProcessUNIX.c: BUG: If working directory does not + exists, exit + +2004-01-22 11:10 andy + + * Source/cmCTest.cxx: BUG: If at least one test fails, the percent + cannot be greater than 99 + +2004-01-22 10:54 king + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: BUG: Fix jump-over-and-build for + missing libraries when the relative path to the library is + different between the source and destination of the jump. + +2004-01-22 10:51 king + + * Tests/Jump/Library/: CMakeLists.txt, jumpShared.cxx, + jumpStatic.cxx, Shared/CMakeLists.txt, Shared/jumpShared.cxx, + Static/CMakeLists.txt, Static/jumpStatic.cxx: ENH: Improved test + to have a different relative path name for libraries between the + Executable and Library directories. + +2004-01-22 10:36 king + + * Source/CMakeLists.txt: ENH: Added JumpWithLibOut and JumpNoLibOut + to test whether jumping over to build a missing library works. + +2004-01-22 10:30 king + + * Source/: cmake.cxx, kwsys/SystemTools.cxx: BUG: + CopyFileIfDifferent should return success if the files did not + differ or if the copy succeeded. It should return failure only + if the files were different and the copy failed. + +2004-01-22 10:23 king + + * Tests/Jump/Library/CMakeLists.txt: ERR: Fixed post-build rule to + copy shared library correctly. + +2004-01-22 09:56 king + + * Tests/Jump/: CMakeLists.txt, Executable/CMakeLists.txt, + Executable/jumpExecutable.cxx, Library/CMakeLists.txt, + Library/jumpShared.cxx, Library/jumpStatic.cxx: ENH: Adding test + for jumping over and building a missing library. + +2004-01-21 18:39 andy + + * Modules/CMakeDefaultMakeRuleVariables.cmake: ENH: This will + probably break some obscure version of gcc, but until then, + everybody doing profiling will be happy + +2004-01-21 15:55 king + + * Source/cmSystemTools.cxx: BUG: ::Stdout method should flush cout + after writing data. + +2004-01-21 15:12 king + + * Modules/CMakeTestCCompiler.cmake: BUG#530: Merging 1.9 -> 1.10 + changes to CMake 1.8 branch. + +2004-01-21 15:11 king + + * Modules/CMakeTestCCompiler.cmake: BUG#530: Using #error to report + a nice error message if the C compiler is set to a C++ compiler. + +2004-01-21 15:08 king + + * Modules/TestBigEndian.c: BUG: Use return statement instead of + exit. + +2004-01-21 15:07 martink + + * Source/kwsys/ProcessUNIX.c: merge from the main tree + +2004-01-21 14:43 king + + * Source/cmCTest.cxx: BUG: empty method on std string is a test, + and does not set the string to empty. + +2004-01-21 14:27 hoffman + + * Source/cmCTest.cxx: BUG: fix leak + +2004-01-21 14:06 king + + * Source/cmCTest.cxx: BUG: Fixed buffer size in MakeXMLSafe. + +2004-01-21 13:38 andy + + * Source/kwsys/ProcessUNIX.c: BUG: Fix valgrind error. If working + directory is not set do not do chdir + +2004-01-21 09:49 hoffman + + * Source/cmCTest.cxx: BUG: if a test is not found, it should fail + +2004-01-21 09:25 hoffman + + * Source/cmCTest.cxx: ENH: make sure tests that are not run fail, + and make sure that it does not try to run directories with the + same name as tests + +2004-01-20 14:36 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: bug fix for IBM + broken xlC 6.0.0.4 compiler + +2004-01-20 14:35 hoffman + + * Source/cmSystemTools.cxx: ENH: dont do relative paths when + nothing is relative + +2004-01-19 09:30 king + + * Source/kwsys/testProcess.c: ERR: Fixed unused argument warning. + +2004-01-19 09:30 king + + * Source/kwsys/CMakeLists.txt: ERR: Must include Dart module after + PROJECT command. + +2004-01-17 12:47 king + + * Source/kwsys/CMakeLists.txt: ENH: Added Dart testing + configuration. + +2004-01-17 12:46 king + + * Source/kwsys/testProcess.c: ENH: Added a recursive process + execution test. + +2004-01-16 14:00 martink + + * Source/cmCTest.cxx: fix so that ctest is run even with bad cmake + result + +2004-01-15 17:07 andy + + * Source/cmCTest.cxx: ENH: Handle spaces in the dart output of test + +2004-01-15 14:04 king + + * Modules/Platform/Windows-bcc32.cmake: BUG#518: Merging 1.30->1.31 + changes to CMake 1.8 branch. + +2004-01-15 13:57 andy + + * Modules/Platform/Windows-bcc32.cmake: ENH: Fix typos about + copying exe flags to shared flags and to modules. Bug #518 - On + borland, initial flags for bulding module are wrong + +2004-01-15 08:50 king + + * Source/cmSystemTools.cxx: ENH: Added more error state checks to + RunSingleCommand. + +2004-01-13 12:28 andy + + * Source/cmCTest.cxx: ERR: Do not ignore argument after nocmake + +2004-01-13 11:22 hoffman + + * Source/: cmCTest.cxx, cmCTest.h: ENH: add no cmake option + +2004-01-13 09:05 king + + * Modules/CMakeDetermineCCompiler.cmake: BUG: Merging 1.23->1.25 + changes to 1.8 branch for correct setting of MINGW flag on cygwin + with -mno-cygwin flag. + +2004-01-13 09:01 king + + * Modules/FindTclsh.cmake: Merging 1.6->1.7 changes to 1.8 branch + to improve automatic finding of Tcl. + +2004-01-13 09:01 king + + * Modules/FindTCL.cmake: Merging 1.30->1.31 changes to 1.8 branch + to improve automatic finding of Tcl. + +2004-01-13 09:00 hoffman + + * Modules/CMakeDetermineCCompiler.cmake: BUG: use the flags when + testing for type of gnu compiler + +2004-01-12 16:16 hoffman + + * Source/kwsys/SystemTools.cxx: BUG: try to get access to work on + borland + +2004-01-12 13:53 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: use access over stat for + performance + +2004-01-12 13:30 andy + + * Source/: cmCTest.cxx, kwsys/SystemTools.cxx: ENH: Only look for + executable until found + +2004-01-09 15:57 barre + + * Modules/: FindTCL.cmake, FindTclsh.cmake: ENH: make it a bit + smarter at finding stuff: now you need only to set *ONE* of + (TCL|TK)_INCLUDE_PATH, (TCL|TK)_LIBRARY, TCL_TCLSH and the rest + will be found. + +2004-01-09 14:14 hoffman + + * Source/cmCTest.cxx: ENH: clean up the output some more + +2004-01-09 14:05 hoffman + + * Source/cmCTest.cxx: ENH: clean up output + +2004-01-09 13:35 hoffman + + * Source/: cmCTest.cxx, cmCTest.h: ENH: add an ability to specify a + build run directory + +2004-01-09 12:35 hoffman + + * Source/cmCTest.cxx: ENH: clean up output + +2004-01-09 12:28 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: add a local target + for libraries as well as executables + +2004-01-09 11:23 king + + * CMakeLists.txt, Modules/CMakeDetermineSystem.cmake, + Modules/CMakeFindFrameworks.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, Modules/Dart.cmake, + Modules/FindOpenGL.cmake, Modules/FindPythonLibs.cmake, + Modules/FindQt.cmake, Modules/FindTCL.cmake, + Modules/Platform/Windows-cl.cmake, Source/cmCTest.cxx, + Source/cmCreateTestSourceList.cxx, + Source/cmGlobalCodeWarriorGenerator.cxx, + Source/cmGlobalGenerator.cxx, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmLinkLibrariesCommand.cxx, + Source/cmLocalCodeWarriorGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmOptionCommand.cxx, Source/cmQTWrapCPPCommand.cxx, + Source/cmSiteNameCommand.cxx, Source/cmStringCommand.cxx, + Source/cmTarget.cxx, Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTryCompileCommand.cxx, Source/cmTryCompileCommand.h, + Source/kwsys/SystemTools.cxx, Utilities/Release/cmake_release.sh, + Utilities/Release/config_Linux, + Utilities/Release/cygwin-package.sh.in: ENH: Merged Release-1-8-2 + -> Release-1-8-3 changes to CMake-LatestRelease branch. + +2004-01-09 10:13 king + + * Source/cmCTest.cxx: BUG: Updated warning regex to match in more + cases. + +2004-01-09 08:54 hoffman + + * Source/cmCTest.cxx: BUG: if the build fails then the test fails + +2004-01-09 07:22 hoffman + + * Source/CMakeLists.txt: BUG: fix arguments to wxwindows test + +2004-01-08 09:59 hoffman + + * Source/: cmCTest.cxx, cmGlobalGenerator.cxx, cmake.cxx: BUG: make + sure null terminator is in the right place for putenv static char + array + +2004-01-08 09:23 king + + * Source/cmake.cxx: BUG: Fix environment variable setting. + +2004-01-08 09:19 king + + * Source/cmGlobalGenerator.cxx: BUG: Fix environment variable + setting. + +2004-01-08 08:19 hoffman + + * Source/: cmCTest.cxx: ENH: remove warning + +2004-01-07 16:24 hoffman + + * Source/cmCTest.cxx: temp remove of optimization internal ctest + use putenv causing trouble on cygwin + +2004-01-07 16:15 hoffman + + * Source/cmCTest.cxx: ENH: print errors when they are there + +2004-01-07 14:22 hoffman + + * Source/cmCTest.cxx: BUG: initialize ivar + +2004-01-07 13:27 martink + + * Source/cmCreateTestSourceList.cxx: merge fix from main tree + +2004-01-07 13:20 hoffman + + * Source/cmCTest.cxx: BUG: fix command line parser bug + +2004-01-07 12:50 hoffman + + * Source/cmCTest.cxx: ENH: remove warning + +2004-01-07 11:31 hoffman + + * Source/cmCTest.cxx: ENH: remove warnings + +2004-01-07 11:24 hoffman + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, + cmSystemTools.cxx, cmSystemTools.h, cmWin32ProcessExecution.cxx, + cmake.cxx, ctest.cxx: ENH: add new feature to ctest so that it + can cmake, build and run a test executable + +2004-01-07 09:22 king + + * Source/cmGlobalVisualStudio6Generator.cxx: BUG: Fixed crash in + extern MSVC project support. + +2004-01-07 09:22 hoffman + + * Source/cmGlobalVisualStudio6Generator.cxx: BUG: fix crash in + external dsp include + +2004-01-07 09:10 king + + * Source/cmGlobalVisualStudio6Generator.cxx: BUG: Fixed crash in + extern MSVC project support. + +2004-01-07 09:08 hoffman + + * Source/cmGlobalVisualStudio6Generator.cxx: BUG: fix crash + +2004-01-07 09:07 king + + * Source/cmCTest.cxx: BUG: Added missing Generator attributes to + submitted XML files. + +2004-01-07 08:37 martink + + * Modules/Dart.cmake: merge change from main tree + +2004-01-06 19:13 andy + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx: ENH: Improve notes + support (now you can specify them with the rest of the command + line), improve reading of configuration file (now it actually + rereads configuration file after running + update/configure/build...). Remember the model + (nightly/experimental) across runs + +2004-01-06 16:56 king + + * Source/kwsys/: kwsys_std.h.in, kwsys_std_fstream.h.in, + kwsys_std_iosfwd.h.in, kwsys_std_iostream.h.in, + kwsys_std_sstream.h.in: ENH: Removing empty source file now that + makefile dependencies should have updated. + +2004-01-06 16:18 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalUnixMakefileGenerator.cxx: + ENH: fix for hp make and relative paths never have targets with a + ./ at the start of the name + +2004-01-06 15:06 king + + * Utilities/Release/config_Linux: Fixed build for new machine. + +2004-01-06 13:21 king + + * Utilities/Release/config_Linux: ENH: Updated configuration for + new build location. + +2004-01-05 16:29 martink + + * Source/cmGlob.cxx: fix for glob command + +2004-01-05 15:30 king + + * Source/cmFindPackageCommand.cxx: BUG: Fixed typo in error + message. + +2004-01-05 13:20 king + + * Utilities/Release/cmake_release.sh: ENH: Updated TAG for 1.8.3 + release. + +2004-01-05 13:19 king + + * CMakeLists.txt, CMakeSystemConfig.txt.in, + CMakeWindowsSystemConfig.txt, bootstrap, + Modules/CMakeCCompiler.cmake.in, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeImportBuildSettings.cmake, Modules/CMakeLists.txt, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, Modules/CMakeTestGNU.c, + Modules/CheckTypeSize.cmake, Modules/CheckVariableExists.cmake, + Modules/Dart.cmake, Modules/FindGTK.cmake, Modules/FindJNI.cmake, + Modules/FindJava.cmake, Modules/FindLATEX.cmake, + Modules/FindPythonLibs.cmake, Modules/FindTCL.cmake, + Modules/FindTclsh.cmake, Modules/FindThreads.cmake, + Modules/FindWish.cmake, Modules/FindwxWindows.cmake, + Modules/TestForANSIForScope.cmake, + Modules/TestForSTDNamespace.cmake, Modules/Platform/AIX.cmake, + Modules/Platform/BSDOS.cmake, Modules/Platform/Darwin.cmake, + Modules/Platform/FreeBSD.cmake, Modules/Platform/HP-UX.cmake, + Modules/Platform/IRIX.cmake, Modules/Platform/IRIX64.cmake, + Modules/Platform/MP-RAS.cmake, Modules/Platform/NetBSD.cmake, + Modules/Platform/OSF1.cmake, Modules/Platform/OpenBSD.cmake, + Modules/Platform/RISCos.cmake, Modules/Platform/SCO_SV.cmake, + Modules/Platform/SINIX.cmake, Modules/Platform/SunOS.cmake, + Modules/Platform/True64.cmake, Modules/Platform/ULTRIX.cmake, + Modules/Platform/UNIX_SV.cmake, Modules/Platform/UnixWare.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-gcc.cmake, + Modules/Platform/Windows.cmake, Modules/Platform/Xenix.cmake, + Modules/Platform/gcc.cmake, Source/CMakeLists.txt, + Source/cmAddCustomTargetCommand.cxx, Source/cmAddTestCommand.cxx, + Source/cmCPluginAPI.h, Source/cmCTest.cxx, Source/cmCTest.h, + Source/cmCacheManager.cxx, Source/cmCommands.cxx, + Source/cmDynamicLoader.cxx, Source/cmFindFileCommand.h, + Source/cmFindLibraryCommand.h, Source/cmFindPathCommand.h, + Source/cmFindProgramCommand.h, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.cxx, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmLoadCommandCommand.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmMakeDepend.cxx, Source/cmMakefile.cxx, + Source/cmQTWrapCPPCommand.cxx, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTryCompileCommand.h, Source/cmWin32ProcessExecution.cxx, + Source/cmake.cxx, Source/cmakemain.cxx, Source/cmakewizard.cxx, + Source/cmakewizard.h, Source/CTest/cmCTestSubmit.cxx, + Source/CursesDialog/ccmake.cxx, Source/kwsys/ProcessUNIX.c, + Source/kwsys/ProcessWin32.c, Source/kwsys/SystemTools.cxx, + Templates/EXEWinHeader.dsptemplate, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Utilities/CMakeLists.txt, Utilities/Release/cmake_release.sh, + Utilities/Release/config_AIX, + Utilities/Release/config_CYGWIN_NT-5.1, + Utilities/Release/config_Darwin, Utilities/Release/config_HP-UX, + Utilities/Release/config_IRIX64, Utilities/Release/config_Linux, + Utilities/Release/config_OSF1, Utilities/Release/config_SunOS, + Utilities/Release/cygwin-package.sh.in: ENH: Merging CMake + Release-1-8-2 to CMake-LatestRelease. + +2004-01-05 12:58 king + + * Source/cmLocalVisualStudio6Generator.cxx: BUG#416: Merging + 1.49->1.50 changes to 1.8 branch. + +2004-01-05 12:53 martink + + * Source/cmLocalVisualStudio6Generator.cxx: fix for long lines with + post build rules + +2004-01-05 11:22 king + + * Source/cmQTWrapCPPCommand.cxx: BUG#421: Merging 1.16->1.17 + changes to 1.8 branch. + +2004-01-05 11:13 andy + + * Source/cmQTWrapCPPCommand.cxx, Tests/Wrapping/CMakeLists.txt, + Tests/Wrapping/vtkTestMoc.h: BUG: Fix dependency to input file + for QT_WRAP_CPP. Bug #421 - QT_WRAP_CPP + +2004-01-05 11:02 king + + * Source/kwsys/kwsysPlatformCxxTests.cmake: ERR: Removed use of + FILE command and using WRITE_FILE instead. We would still like + CMake 1.6 to be able to build CMake CVS, and kwsys is used. + +2004-01-02 10:23 martink + + * Modules/Dart.cmake: fix for multiple nexted projects + +2003-12-31 08:56 andy + + * bootstrap: ERR: Fix bootstrap for the changes in kwsys + +2003-12-30 17:15 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, + kwsysPlatformCxxTests.cxx, kwsys_ios_fstream.h.in, + kwsys_ios_iosfwd.h.in, kwsys_ios_iostream.h.in, + kwsys_ios_sstream.h.in: ENH: Renamed KWSYS_IOS_HAVE_* macros to + KWSYS_IOS_USE_* to be more readable in the C++ sources. + +2003-12-30 16:23 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c, ProcessWin32.c, + test1.cxx: ENH: Added GetExceptionString method to provide an + error description when GetState returns Exception. + +2003-12-30 14:33 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Removed stray + debugging statement left from merge. + +2003-12-30 13:40 king + + * Source/kwsys/SystemTools.cxx: ERR: Use of kwsys_stl was merged + from main tree. The CMake 1.8 branch still uses kwsys_std. + +2003-12-30 13:39 king + + * Source/kwsys/SystemTools.cxx: BUG: Merging 1.30->1.31 changes to + CMake 1.8 branch. + +2003-12-30 13:38 king + + * Source/kwsys/SystemTools.cxx: BUG: CollapseFullPath was calling + SplitProgramPath before changing the working directory to + in_base. + +2003-12-30 10:26 king + + * Source/cmSystemTools.cxx: BUG: Do not call + cmsysProcess_GetErrorString unless GetState returns State_Error. + +2003-12-30 08:41 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalUnixMakefileGenerator.cxx: + BUG: borland make treats ./target and target as different also + convert to outputpathrelative may get passed a quoted path + +2003-12-30 07:55 andy + + * Source/cmCTest.cxx: ENH: Remove warnings about unused variables + +2003-12-29 16:35 martink + + * Source/cmEnableTestingCommand.h: sets variable now + +2003-12-29 16:27 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: only generate test + target when enabled + +2003-12-29 16:27 martink + + * Source/cmEnableTestingCommand.cxx: sets variable now + +2003-12-29 16:19 king + + * Modules/: CMakeFindFrameworks.cmake, FindPythonLibs.cmake, + FindTCL.cmake: BUG#423: Merged fix to 1.8 branch. + +2003-12-29 16:18 king + + * Modules/: CMakeFindFrameworks.cmake, FindPythonLibs.cmake, + FindTCL.cmake: BUG#423: Fixed search for frameworks on OSX. + +2003-12-29 16:15 king + + * Source/cmSiteNameCommand.cxx: BUG#407: Merged fix to 1.8 branch. + +2003-12-29 16:10 andy + + * Source/cmSiteNameCommand.cxx: ENH: Do not use nslookup. All we + really care is hostname. If somebody wants something fancy, just + set it yourself. Fixes Bug #407 - nslookup is being deprecated + for Red Hat and Fedora distributions + +2003-12-29 15:37 king + + * Source/cmOptionCommand.cxx: BUG#408: Merged fix to 1.8 branch. + +2003-12-29 15:26 andy + + * Source/cmOptionCommand.cxx: ERR: Fix problems with OPTION and -D + on command line. Fix Bug #408 - Using -D without a type does not + always work + +2003-12-29 15:15 king + + * Modules/CMakeDetermineSystem.cmake: BUG#426: Merged fix to 1.8 + branch. + +2003-12-29 15:14 king + + * Modules/FindQt.cmake: BUG#425: Merged fix to 1.8 branch. + +2003-12-29 14:55 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalUnixMakefileGenerator.cxx: + BUG: use ./ infront of the current directory + +2003-12-29 14:26 andy + + * Modules/CMakeDetermineSystem.cmake: ERR: On systems where uname + does not support -p, try -m. Fixes Bug #426 - + CMAKE_SYSTEM_PROCESSOR unknown and inconsistent + +2003-12-29 14:19 andy + + * Modules/FindQt.cmake: ENH: Add QT_ASSISTANTCLIENT_LIBRARY + support. Fixes Bug #425 - Suggsted mod to FindQt.cmake to handle + qassistantclient.lib + +2003-12-29 13:41 king + + * Source/cmGlobalGenerator.cxx: BUG#427: Merged fix to 1.8 branch. + +2003-12-29 13:37 king + + * Source/: cmGlobalCodeWarriorGenerator.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, cmLinkLibrariesCommand.cxx, + cmLocalCodeWarriorGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmTarget.cxx, + cmTargetLinkLibrariesCommand.cxx: BUG#445: Merging fix to 1.8 + branch. + +2003-12-29 13:32 king + + * Source/cmStringCommand.cxx: BUG#452: Merging 1.10->1.11 changes + to 1.8 branch. + +2003-12-29 13:31 king + + * Source/cmStringCommand.cxx: BUG#452: Fix to argument checking for + TOUPPER and TOLOWER subcommands. + +2003-12-29 13:26 king + + * Modules/FindOpenGL.cmake: BUG: Added missing include path to + search. + +2003-12-29 13:14 king + + * Source/kwsys/SystemTools.cxx: ERR: Removed ftime ambiguity + created by poor C++ standard headers provided by Borland 5.5. + +2003-12-26 15:02 andy + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx: ENH: Add option to + submit notes. Implements Bug #465 - Add notes support to CTest + +2003-12-26 15:00 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h: BUG: For + consistency, use cmStdString. Also, there was a bug in + SplitString which make it lose the first character. + +2003-12-24 15:02 andy + + * Source/cmLocalGenerator.cxx: BUG: On Windows network paths do not + really work as regular paths, so when the binary directory is on + the network, we will not support relative paths + +2003-12-24 13:17 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: use cd pwd trick + for path for libnames + +2003-12-24 10:51 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: use full paths via + pwd for -L paths on unix shells + +2003-12-24 10:07 kmorel + + * Source/kwsys/kwsys_ios_iosfwd.h.in: Fixed a problem where + ifstream was not the same as kwsys_ios::ifstream on MSVC 6.0. + +2003-12-24 09:19 andy + + * Source/cmCTest.cxx: ENH: Fix coverage to actually work and add + support for .NoDartCoverage + +2003-12-23 15:01 hoffman + + * Source/: cmLocalGenerator.cxx, cmTryCompileCommand.cxx, + cmake.cxx, cmake.h: BUG: keep more of the case information + +2003-12-23 13:31 hoffman + + * Source/cmLocalGenerator.cxx: BUG: fix for vtk build + +2003-12-23 11:03 king + + * bootstrap: ENH: Merging changes from KWSys-IOS-bp to + KWSys-IOS-b2t-1-mp to main tree. This corresponds to the same + merge in KWSys. Fixes for bootstrapping on cygwin are also + included. + +2003-12-23 11:03 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, Directory.cxx, + RegularExpression.cxx, RegularExpression.hxx.in, SystemTools.cxx, + SystemTools.hxx.in, kwsysPlatformCxxTests.cmake, + kwsysPlatformCxxTests.cxx, kwsys_ios_fstream.h.in, + kwsys_ios_iosfwd.h.in, kwsys_ios_iostream.h.in, + kwsys_ios_sstream.h.in, kwsys_std.h.in, kwsys_std_fstream.h.in, + kwsys_std_iosfwd.h.in, kwsys_std_iostream.h.in, + kwsys_std_sstream.h.in, kwsys_stl.h.in, test1.cxx, testIOS.cxx: + ENH: Merging changes from KWSys-IOS-bp to KWSys-IOS-b2t-1-mp to + main tree. This introduces separate kwsys_ios and kwsys_stl + macros needed to support all platforms. + +2003-12-23 10:44 king + + * bootstrap: BUG: Fixed 3rd C++ test to use endl correctly. Fixed + incorrect spelling of appropriate. + +2003-12-23 10:39 andy + + * bootstrap: ENH: Some cleanups and attempt to fix cygwin problem + +2003-12-23 10:16 andy + + * bootstrap: ENH: Some cleanups, add settings comment to kwsys + header files. Add proper dependency to kwsys headers + +2003-12-23 09:53 king + + * bootstrap: BUG: Fixed use of KWSYS_IOS_HAVE_SSTREAM test result + for cmConfigure. + +2003-12-23 09:31 king + + * bootstrap: BUG: Moved use of KWSYS_IOS test results to after the + tests are performed. Also cleaned up ordering of some tests. + +2003-12-23 09:17 andy + + * bootstrap: ENH: support new KWSYS with IOS + +2003-12-22 16:21 hoffman + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmSystemTools.cxx: ENH: add + relative paths to visual studio 6 and 7 project files + +2003-12-22 15:16 hoffman + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalUnixMakefileGenerator.cxx, cmLocalUnixMakefileGenerator.h: + ENH: move relative path to parent generator class + +2003-12-22 14:17 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: make new relative + rpath work with spaces + +2003-12-22 13:59 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: use fullpaths based + on the actual current directory + +2003-12-22 13:15 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: use a full path for + rpath + +2003-12-22 12:24 hoffman + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h, cmSystemTools.cxx, + cmSystemTools.h, cmake.cxx: ENH: add support for relative paths + in makefiles + +2003-12-22 11:20 king + + * Source/kwsys/: CMakeLists.txt, kwsysPlatformCxxTests.cxx: ENH: + All platform tests are now in kwsysPlatformCxxTests.cxx. This + makes the listfile code much more readable. + +2003-12-20 13:32 king + + * Source/kwsys/: CMakeLists.txt, testIOS.cxx: ENH: Added testIOS + for kwsys_ios testing. + +2003-12-20 13:31 king + + * Source/kwsys/kwsys_ios_sstream.h.in: ERR: Fixed istringstream to + work with MSVC 6 old streams. + +2003-12-20 12:44 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, + kwsysPlatformCxxTests.cxx, kwsys_ios_fstream.h.in, + kwsys_ios_iosfwd.h.in, kwsys_ios_iostream.h.in, + kwsys_ios_sstream.h.in: ENH: Shortened and grouped IOS and STL + feature macro names. + +2003-12-19 16:56 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, Directory.cxx, + RegularExpression.cxx, RegularExpression.hxx.in, SystemTools.cxx, + SystemTools.hxx.in, kwsysPlatformCxxTests.cmake, + kwsysPlatformCxxTests.cxx, kwsys_ios_fstream.h.in, + kwsys_ios_iosfwd.h.in, kwsys_ios_iostream.h.in, + kwsys_ios_sstream.h.in, kwsys_std.h.in, kwsys_std_fstream.h.in, + kwsys_std_iosfwd.h.in, kwsys_std_iostream.h.in, + kwsys_std_sstream.h.in, kwsys_stl.h.in, test1.cxx: ENH: Split + kwsys_std into kwsys_ios and kwsys_stl in order to avoid std + namespace pollution and support more platforms. + +2003-12-18 18:04 andy + + * Source/cmCTest.cxx: ENH: Even better. Only replace when path + longer than 20 characters. Also replace parent directory. That + way it will replace for related projects. + +2003-12-18 17:42 andy + + * Source/cmCTest.cxx: ENH: Attempt to cleanup the build output + +2003-12-18 17:36 martink + + * Source/cmCTest.cxx: bug fix + +2003-12-18 13:40 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ERR: Remove debug + +2003-12-18 13:17 andy + + * Source/: cmGlobalCodeWarriorGenerator.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmLocalCodeWarriorGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: Fix Bug #445 - Same + library in multiple projects can cause problems + +2003-12-18 13:04 andy + + * Source/: cmLinkLibrariesCommand.cxx, + cmLocalUnixMakefileGenerator.cxx, cmTarget.cxx, + cmTargetLinkLibrariesCommand.cxx: BUG: Fix Bug #445 - Same + library in multiple projects can cause problems + +2003-12-17 09:42 andy + + * Modules/Dart.cmake: ENH: Mark things as advanced + +2003-12-17 09:40 andy + + * Source/cmCTest.cxx: ERR: Remove debug + +2003-12-17 09:25 andy + + * Source/cmCTest.cxx: ENH: Add more error regular expressions + +2003-12-17 08:49 king + + * Source/: cmTryCompileCommand.cxx, cmTryCompileCommand.h: BUG#439: + Merging fix to 1.8 branch. + +2003-12-17 08:45 king + + * Modules/Platform/Windows-cl.cmake: BUG#438: Merging fix to 1.8 + branch. + +2003-12-17 08:36 martink + + * Source/cmCTest.cxx: better ctest driver and return codes + +2003-12-17 08:30 king + + * Source/kwsys/SystemTools.hxx.in: ERR: std -> kwsys_std. + +2003-12-17 08:21 martink + + * Modules/Platform/Windows-cl.cmake: fix in quoting + +2003-12-16 17:30 andy + + * Source/cmCTest.cxx: ENH: Purify support should work now. + +2003-12-16 17:20 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c, ProcessWin32.c: ENH: + Added SetPipeShared method to allow stdout and stderr pipes to be + shared with the parent process. + +2003-12-16 16:19 andy + + * Source/cmCTest.cxx: ENH: Add suppression file support for + valgrind + +2003-12-16 16:19 andy + + * Modules/: Dart.cmake, DartConfiguration.tcl.in: ENH: Add + suppression file + +2003-12-16 15:55 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Added + GetEnv method. + +2003-12-16 15:38 king + + * Source/kwsys/CMakeLists.txt: ENH: Updated copyright. + +2003-12-16 15:37 king + + * Source/kwsys/CMakeLists.txt: ERR: SystemTools now depends on + Directory. + +2003-12-16 14:43 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Several cleanups and + attempt to do purify support + +2003-12-16 14:26 martink + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: is there any + chance thiswill work on all platforms hmmm added removeAdirectory + +2003-12-16 13:18 andy + + * Source/cmCTest.cxx: ENH: Cleanup output + +2003-12-15 18:44 andy + + * Source/cmCTest.cxx: ERR: Fix coverage on gcc 2.95 + +2003-12-15 18:32 andy + + * Source/cmCTest.cxx: ERR: Ok, think before commit... This fixes + two build problems. The missing brace and the std::string + signature is different on gcc 2.95 and gcc 3.3. + +2003-12-15 18:03 andy + + * Source/cmCTest.cxx: ERR: Inner loop used the same counter as + outer. Broke coverage code + +2003-12-15 17:28 andy + + * Source/: cmCTest.cxx, cmCTest.h: ERR: STD fixes + +2003-12-15 17:25 andy + + * Modules/Dart.cmake, Modules/DartConfiguration.tcl.in, + Source/cmCTest.cxx, Source/cmCTest.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/ctest.cxx, + Source/CTest/cmCTestSubmit.cxx, Source/CTest/cmCTestSubmit.h, + Source/CursesDialog/cmCursesPathWidget.cxx: ENH: Add initial + memory check support which works for Valgrind + +2003-12-15 16:30 king + + * Source/kwsys/: Base64.c, Base64.h.in, Configure.h.in, + Configure.hxx.in, Copyright.txt, Directory.cxx, Directory.hxx.in, + EncodeExecutable.c, Process.h.in, ProcessFwd9x.c, ProcessUNIX.c, + ProcessWin32.c, RegularExpression.cxx, RegularExpression.hxx.in, + SystemTools.cxx, SystemTools.hxx.in, kwsysHeaderDump.pl, + kwsysPrivate.h, kwsys_std.h.in, kwsys_std_fstream.h.in, + kwsys_std_iosfwd.h.in, kwsys_std_iostream.h.in, + kwsys_std_sstream.h.in, test1.cxx, testProcess.c: ENH: Updated + copyright. + +2003-12-15 12:56 martink + + * Source/cmCreateTestSourceList.cxx: fix compiler warning + +2003-12-15 12:02 hoffman + + * Source/cmCTest.cxx: ENH: fix for gcc 3.1 + +2003-12-14 13:48 king + + * Source/kwsys/ProcessWin32.c: STYLE: Fixed typo on comment. + +2003-12-14 13:47 king + + * Source/kwsys/ProcessWin32.c: ENH: Using CreateFile with + FILE_FLAG_DELETE_ON_CLOSE to automatically delete the Win9x + forwarding executable even if the parent process crashes. + +2003-12-14 13:44 king + + * Source/kwsys/kwsysPrivate.h: ENH: Added KWSYS_NAMESPACE_STRING + macro. + +2003-12-14 13:03 king + + * Source/kwsys/Configure.h.in: BUG: Fixed dllimport. + +2003-12-13 14:19 king + + * Source/kwsys/ProcessUNIX.c: ERR: Added include of sys/stat.h for + open functions mode bits. + +2003-12-13 14:13 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c, ProcessWin32.c: ENH: + Added SetPipeFile method to allow the process pipeline stdin, + stdout, and stderr to be redirected from/to files. + +2003-12-13 10:36 king + + * Source/kwsys/: ProcessUNIX.c, ProcessWin32.c: ENH: Code is now + robust to New method returning NULL. + +2003-12-12 15:42 king + + * Modules/Platform/IRIX64.cmake: ENH: Added + CMAKE_SHARED_LIBRARY_SONAME_C_FLAG and + CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG settings to enable shared + library version support for SGI. + +2003-12-12 14:44 king + + * Modules/Platform/HP-UX.cmake: ENH: Added + CMAKE_SHARED_LIBRARY_SONAME_FLAG setting to enable shared library + version support for HP-UX. + +2003-12-12 14:34 king + + * Modules/CMakeDefaultMakeRuleVariables.cmake, + Modules/Platform/SunOS.cmake, + Source/cmLocalUnixMakefileGenerator.cxx, + Modules/Platform/Linux.cmake: ENH: Using separate + CMAKE_SHARED_LIBRARY_SONAME flags for C and CXX. + +2003-12-12 14:20 king + + * Modules/Platform/SunOS.cmake: ENH: Added + CMAKE_SHARED_LIBRARY_SONAME_FLAG setting to enable shared library + version support for SunOS. + +2003-12-12 09:12 hoffman + + * Modules/: CMakeCCompiler.cmake.in, CMakeCXXCompiler.cmake.in, + CMakeDetermineCCompiler.cmake, CMakeDetermineCXXCompiler.cmake: + ENH: reduce the number of times gnu is tested for + +2003-12-12 08:09 martink + + * Source/cmCTest.cxx: now can do extra updates + +2003-12-11 15:38 hoffman + + * Source/cmGlobalGenerator.cxx: BUG:427 trycompile target must be + exe + +2003-12-11 10:11 hoffman + + * Source/cmTryCompileCommand.cxx: BUG: need a dummy first argument + to cmake + +2003-12-11 08:57 martink + + * Source/: cmTryCompileCommand.cxx, cmTryCompileCommand.h: fix to + the signature and argument parsing + +2003-12-10 19:47 andy + + * Source/: cmake.cxx, cmakemain.cxx: ENH: Argument for script mode + is -P (process) and take out the automatic script mode + +2003-12-10 08:55 hoffman + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: BUG: roll back change for + variable used in path + +2003-12-09 14:33 king + + * Modules/FindOpenGL.cmake: ENH: Adding /usr/include/w32api for + OpenGL header search. + +2003-12-09 11:44 king + + * Source/kwsys/SystemTools.cxx: BUG: File comparison on windows + must test the volume serial number as well as the file index. + +2003-12-09 10:33 martink + + * DartConfig.cmake: move start time up one hour + +2003-12-09 09:16 king + + * Source/: cmListFileLexer.c, cmListFileLexer.in.l: ERR: Removed + YY_BREAK statements after return statements because they are + unreachable. + +2003-12-09 09:11 king + + * Source/: cmListFileLexer.c, cmListFileLexer.in.l: ERR: Added + missing static keyword to cmListFileLexerSetToken and + cmListFileLexerAppend definitions. + +2003-12-09 08:32 hoffman + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: ENH: use variables for output + paths + +2003-12-09 08:22 martink + + * Source/cmCTest.cxx: some updates to handle inline cache files and + environment variables + +2003-12-08 18:05 king + + * Source/cmSystemTools.cxx: BUG: Reimplemented ExpandListArguments + to properly handle escaped backslashes that occur right before + semicolons. This is important for lists of paths ending in + backslashes on windows. + +2003-12-08 16:10 martink + + * Source/cmSystemTools.cxx: bug fix to escaped semicolons in + arguments + +2003-12-08 15:05 king + + * Source/cmListFileLexer.in.l: ERR: Fixed comment about how to run + flex to reflect new name of this file. + +2003-12-08 14:20 king + + * Source/: cmListFileLexer.in.l, cmListFileLexer.l: ERR: Renaming + cmListFileLexer.l to cmListFileLexer.in.l to avoid make programs + trying to run lex automatically whn building cmListFileLexer.c. + +2003-12-08 14:11 andy + + * bootstrap: ENH: Fix bootstrap to handle lex parser + +2003-12-08 13:40 king + + * Source/: cmListFileLexer.c, cmListFileLexer.l: ERR: We must + define YY_NO_UNISTD_H to build on windows. + +2003-12-08 13:36 king + + * Source/: CMakeLists.txt, cmListFileCache.cxx, cmListFileCache.h, + cmListFileLexer.c, cmListFileLexer.h, cmListFileLexer.l: ENH: + Using lex-based tokenizer and a simple recursive-descent parser + in place of the old hand-coded parser for CMake listfiles. + +2003-12-08 11:35 king + + * Source/kwsys/CMakeLists.txt: STYLE: Removed trailing whitespace. + +2003-12-08 11:31 king + + * Source/cmake.cxx: ENH: Improved error messages when source tree + does not have a CMakeLists.txt file. No matter how many cases we + check, there always seems to be a user that finds a case that + gives a confusing error message... + +2003-12-08 11:23 andy + + * Modules/Dart.cmake, Modules/DartConfiguration.tcl.in, + Source/cmCTest.cxx: ENH: Improve coverage on systems with + multiple gcov commands + +2003-12-07 14:09 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c, ProcessWin32.c: ENH: + Cleaned up pipe numbering. + +2003-12-05 16:39 king + + * Source/cmCTest.cxx: ENH: Using cmListFileCache to read the + DartTestfile instead of duplicating the parse loop. + +2003-12-05 14:51 king + + * Source/kwsys/kwsys_std.h.in: ERR: Need to include Configure.hxx + to get kwsys_std definition. + +2003-12-05 11:53 king + + * Source/: cmCTest.cxx, cmSystemTools.cxx, kwsys/Process.h.in, + kwsys/ProcessUNIX.c, kwsys/ProcessWin32.c, kwsys/test1.cxx, + kwsys/testProcess.c: ENH: Removed pipe selection argument from + WaitForData method in kwsysProcess. This greatly simplifies its + use. + +2003-12-05 11:37 king + + * Source/kwsys/: Process.h.in, ProcessFwd9x.c, ProcessWin32.c: + STYLE: Removed trailing whitespace. + +2003-12-05 11:19 king + + * Source/kwsys/ProcessWin32.c: BUG: Process startup-info struct + dwFlags were being set incorrectly due to a change in statement + order. + +2003-12-05 10:45 king + + * Docs/cmake-mode.el: ENH: New indentation implementation to + support multi-line strings. + +2003-12-04 14:34 king + + * Docs/cmake-mode.el: STYLE: Removed trailing whitespace. + +2003-12-04 13:56 king + + * Source/kwsys/ProcessUNIX.c: ERR: Added missing static storage + class specifier for kwsysProcessCreate. + +2003-12-03 14:16 martink + + * Source/cmCTest.cxx: some fixes to test harnes + +2003-12-03 13:37 king + + * Source/kwsys/ProcessUNIX.c: ERR: Some platforms define stdin, + stdout, and stderr as macros. Renaming these symbols to StdIn, + StdOut, and StdErr. + +2003-12-03 09:20 king + + * Source/kwsys/: Process.h.in, ProcessFwd9x.c, ProcessUNIX.c, + ProcessWin32.c: ENH: Merged changes from KWSys-MultiProcess-bp to + KWSys-MultiProcess-b2t-1-mp to main tree. This introduces + support for process pipelines. + +2003-12-03 09:12 king + + * Source/kwsys/Process.h.in: ERR: Added missing macro definition + for kwsysProcess_AddCommand. + +2003-12-02 17:23 king + + * Utilities/Release/cmake_release.sh: ENH: Added documentation + about location of cmCPluginAPI.h in cygwin package. + +2003-12-02 17:16 king + + * Utilities/Release/cygwin-package.sh.in: BUG: No longer need to + copy Copyright.txt into doc directory. It is done by the cmake + installation. + +2003-12-02 17:14 king + + * Utilities/Release/cygwin-package.sh.in: BUG: Need to pass + datadir/docdir/mandir to bootstrap script instead of writing in + the cache. + +2003-12-02 16:57 king + + * Utilities/Release/cygwin-package.sh.in: ENH: Cygwin now uses + /usr/share/doc instead of /usr/doc. + +2003-12-02 16:57 king + + * CMakeLists.txt, Utilities/Release/cmake_release.sh: ENH: Updating + version number to 1.8.3. + +2003-12-02 16:50 martink + + * Source/cmCTest.cxx: better error handling + +2003-12-01 19:25 martink + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx: a start on the + dashboard driver + +2003-12-01 13:07 king + + * Modules/: CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake: + BUG#411: Merged fix to 1.8 branch. + +2003-12-01 13:06 king + + * Modules/: CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake: + BUG#411: Re-ordering statements so errors show up in + CMakeError.log. + +2003-11-28 15:37 king + + * Source/kwsys/ProcessWin32.c: ENH: Cleaned up implementation of + stderr and win9x forwarding executable error pipe. + +2003-11-28 14:21 king + + * Source/kwsys/ProcessWin32.c: ENH: Removing special termination + pipe from Windows implementation. It does not need it because + WaitForMultipleObjects can wait with a timeout for the process to + terminate. This is not the case in UNIX because waitpid has no + timeout, so we need the termination pipe there. + +2003-11-28 14:08 king + + * Source/kwsys/ProcessWin32.c: BUG: Removed stray debugging code + that caused win9x mode to always be used. + +2003-11-28 14:02 king + + * Source/kwsys/ProcessWin32.c: ENH: Added special termination pipe + to allow timeout to work for processes that close their output + pipes. + +2003-11-28 13:07 king + + * Source/kwsys/ProcessWin32.c: ENH: Error messages from the + forwarding executable are now read completely even if they are + reported in multiple blocks. + +2003-11-28 12:58 king + + * Source/kwsys/ProcessWin32.c: BUG: Fixed error message when + process control structure initialization runs out of memory. + +2003-11-28 12:52 king + + * Source/kwsys/ProcessWin32.c: ERR: Removed useless if(command) in + AddString. + +2003-11-28 12:47 king + + * Source/kwsys/ProcessWin32.c: ENH: Renamed CMPE_* to KWSYSPE_* for + consistency with ProcessUNIX.c. + +2003-11-28 12:42 king + + * Source/kwsys/ProcessUNIX.c: BUG: When a child fails to exec, we + need to read the entire error message, not just the first block. + +2003-11-28 12:31 king + + * Source/kwsys/ProcessUNIX.c: ENH: UNIX implementation of process + pipeline. + +2003-11-28 10:08 king + + * Source/kwsys/ProcessUNIX.c: ENH: Implemented SetCommand and + AddCommand for multiple process support. + +2003-11-28 09:48 king + + * Source/kwsys/: ProcessUNIX.c: STYLE: Removed trailing whitespace. + +2003-11-27 23:08 king + + * Source/kwsys/: Process.h.in, ProcessFwd9x.c, ProcessWin32.c: ENH: + Windows implementation of process pipeline. + +2003-11-27 10:28 king + + * Source/cmake.cxx: BUG: cmake_symlink_library should return the + accumulated result, not just 0. + +2003-11-26 17:59 king + + * Modules/Platform/Linux.cmake: ENH: Adding implementation of + shared library version support on UNIX. This addresses the + feature request described in bug#32. + +2003-11-26 17:52 king + + * Modules/CMakeDefaultMakeRuleVariables.cmake: ENH: Adding + implementation of shared library version support on UNIX. This + addresses the feature request described in bug#32. + +2003-11-26 17:38 king + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: ENH: Adding implementation of + shared library version support on UNIX. This addresses the + feature request described in bug#32. + +2003-11-26 17:34 king + + * Source/cmake.cxx: BUG: The cmake_symlink_library command needs to + remove existing files before creating links. + +2003-11-26 16:38 king + + * Source/cmake.cxx: ENH: Added undocumented cmake_symlink_library + to help with building versioned shared libraries. + +2003-11-26 16:15 hoffman + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: remove more warnings + +2003-11-26 16:12 hoffman + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h: remove warnings + +2003-11-26 16:11 king + + * Source/cmSystemTools.cxx: ERR: Fixed unused parameter warnings. + +2003-11-26 16:04 hoffman + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx: ENH: fix some warnings + +2003-11-26 14:52 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added + CreateSymlink method. + +2003-11-26 14:29 hoffman + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmMakefile.cxx, cmMakefile.h: + ENH: generate a sln and dsw file for each sub project in a + project + +2003-11-26 11:41 king + + * Source/: cmCTest.cxx, cmSystemTools.cxx: BUG: Do not use + std::string to accumulate output. Use std::vector instead. This + is much better at memory management. + +2003-11-25 16:14 king + + * Utilities/Release/cmake_release.sh: STYLE: Removed trailing + whitepsace. + +2003-11-24 15:51 king + + * Utilities/Release/cmake_release.sh: BUG: osx_install should make + the Resources directory before copying files into it. + +2003-11-24 14:04 king + + * Modules/FindPythonLibs.cmake: BUG#266: Merging 1.16->1.18 changes + to 1.8 branch. + +2003-11-24 14:01 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG#393: Merging + 1.40->1.41 changes to 1.8 branch. + +2003-11-21 14:13 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG#393: Adding XML + escaping for additional per-source compile flags. + +2003-11-21 13:12 hoffman + + * Modules/FindPythonLibs.cmake: BUG: remove junk code + +2003-11-20 15:41 king + + * Modules/FindPythonLibs.cmake: BUG#266: Added cygwin names for the + library. Module now documents output as PYTHON_LIBRARIES instead + of PYTHON_LIBRARY. + +2003-11-20 15:31 king + + * Modules/FindPythonLibs.cmake: STYLE: Removed trailing whitespace. + +2003-11-20 15:30 king + + * Modules/Platform/: AIX.cmake, BSDOS.cmake, Darwin.cmake, + FreeBSD.cmake, HP-UX.cmake, IRIX.cmake, IRIX64.cmake, + MP-RAS.cmake, NetBSD.cmake, OSF1.cmake, OpenBSD.cmake, + RISCos.cmake, SCO_SV.cmake, SINIX.cmake, SunOS.cmake, + True64.cmake, ULTRIX.cmake, UNIX_SV.cmake, UnixWare.cmake, + Windows-gcc.cmake, Xenix.cmake, gcc.cmake: BUG#383: Merged fix to + 1.8 branch. + +2003-11-14 10:44 hoffman + + * Modules/Platform/: AIX.cmake, BSDOS.cmake, Darwin.cmake, + FreeBSD.cmake, HP-UX.cmake, IRIX.cmake, IRIX64.cmake, + MP-RAS.cmake, NetBSD.cmake, OSF1.cmake, OpenBSD.cmake, + RISCos.cmake, SCO_SV.cmake, SINIX.cmake, SunOS.cmake, + True64.cmake, ULTRIX.cmake, UNIX_SV.cmake, UnixWare.cmake, + Windows-gcc.cmake, Xenix.cmake, gcc.cmake: BUG: fix for bug 383 + gcc flags are now always set if the compiler is gnu + +2003-11-13 15:54 king + + * Source/cmAddCustomTargetCommand.cxx: BUG#321: Merged 1.13->1.14 + changes to 1.8 branch. + +2003-11-13 14:45 martink + + * Source/cmAddCustomTargetCommand.cxx: fixed argument parsing + +2003-11-13 13:52 king + + * Source/: cmFindFileCommand.h, cmFindLibraryCommand.h, + cmFindPathCommand.h, cmFindProgramCommand.h: ENH: Documentation + improvements from main tree. + +2003-11-13 13:51 king + + * Source/: cmFindFileCommand.h, cmFindLibraryCommand.h, + cmFindPathCommand.h, cmFindProgramCommand.h: ENH: Documentation + improvements. + +2003-11-13 12:43 king + + * Modules/FindGTK.cmake: BUG#299: Merged 1.8->1.9 changes to 1.8 + branch. + +2003-11-12 17:44 king + + * Modules/FindGTK.cmake: BUG#299: GTK_gmodule_LIBRARY is optional + just like GTK_gthread_LIBRARY. + +2003-11-12 16:53 king + + * Modules/TestForANSIForScope.cmake: BUG#374: Merging 1.10->1.11 + changes to 1.8 branch. + +2003-11-12 16:53 king + + * Modules/TestForSTDNamespace.cmake: BUG#374: Merging 1.9->1.10 + changes to 1.8 branch. + +2003-11-12 16:51 king + + * Modules/: TestForANSIForScope.cmake, TestForSTDNamespace.cmake: + BUG#374: Adding OUTPUT_VARIABLE OUTPUT to TRY_COMPILE commands. + +2003-11-12 14:57 king + + * Source/cmMakeDepend.cxx: BUG#373: Merging 1.39->1.40 to 1.8 + branch. + +2003-11-12 14:20 hoffman + + * Source/cmMakeDepend.cxx: BUG: fix for bug 373 make depend problem + +2003-11-12 14:17 king + + * Source/cmGlobalVisualStudio6Generator.cxx: BUG#371: Merging + 1.19->1.20 changes to 1.8 branch. + +2003-11-12 14:17 king + + * Source/cmGlobalVisualStudio7Generator.cxx: BUG#371: Merging + 1.17->1.18 changes to 1.8 branch. + +2003-11-12 14:06 andy + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: ENH: Bug #371 - Add build + configuration for try compiles using cmake variable + +2003-11-12 10:03 king + + * Modules/Dart.cmake: BUG#199: Merging 1.45->1.46 changes to 1.8 + branch. + +2003-11-12 10:00 king + + * Modules/Dart.cmake: BUG#199: If + DART_EXPERIMENTAL_USE_PROJECT_NAME is set, the PROJECT_NAME will + be included in the name of the Experimental and + ExperimentalSubmit targets. + +2003-11-11 12:53 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG#363: Merged + 1.39->1.40 changes to 1.8 branch. + +2003-11-11 12:51 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for 363, + VCMIDLTool not used for idl files + +2003-11-11 12:51 king + + * Source/cmCTest.cxx: BUG#344: Merged 1.66->1.67 to 1.8 branch. + +2003-11-11 12:36 andy + + * Source/cmCTest.cxx: BUG: Handle -C properly for executables that + are not in the project; Fix Bug #344 - ctest -C Debug + +2003-11-11 11:42 king + + * Source/cmCTest.h: BUG#259: Merging 1.16->1.18 changes to 1.8 + branch. + +2003-11-11 11:42 king + + * Source/cmCTest.cxx: BUG#259: Merging 1.62->1.63 and 1.64->1.66 + changes to 1.8 branch. + +2003-11-11 11:41 king + + * Source/cmAddTestCommand.cxx: BUG#259: Merging 1.18->1.20 changes + to 1.8 branch. + +2003-11-06 16:38 andy + + * Source/cmCTest.cxx: ENH: Add warning exception for VTK type + warning blocking + +2003-11-05 15:02 andy + + * Utilities/Doxygen/doxyfile.in: ENH: Handle kwsys properly + +2003-11-05 15:02 andy + + * Utilities/Doxygen/CMakeLists.txt: ENH: Cleanup. We do not really + need to use vtk for documentation. We only need utilities/doxygen + directory + +2003-11-05 13:03 king + + * Modules/Platform/Windows-bcc32.cmake, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx: BUG#346: Merging fix + from main tree to 1.8 branch. + +2003-11-05 11:18 hoffman + + * Modules/Platform/Windows-bcc32.cmake, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix for bug 346, + borland should now support dash in the path + +2003-11-05 10:46 king + + * Source/cmCTest.cxx: BUG#259: Fix for spaces in paths to + executable added to previous fixes for this bug. + +2003-11-05 10:13 king + + * Modules/: FindTclsh.cmake, FindWish.cmake: BUG#322: Merging fix + from main tree to 1.8 branch. + +2003-11-04 12:50 king + + * Source/cmCTest.cxx: BUG#323: Merging fix from main tree to 1.8 + branch. + +2003-11-04 11:19 hoffman + + * Source/cmCTest.cxx: BUG: fix for bug 323 + +2003-11-04 09:45 king + + * Source/cmMakefile.cxx: BUG: Merging changes from revision 1.236 + to 1.237 to 1.8 branch. + +2003-11-04 09:44 king + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: Merging changes + from revisions 1.41 to 1.47 to 1.8 branch. + +2003-11-04 09:36 king + + * Modules/: FindTclsh.cmake, FindWish.cmake: ENH: Adding registry + entries to search path. + +2003-11-04 09:06 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG#318: Merging fix + from main tree to 1.8 branch. + +2003-11-04 09:03 king + + * Source/CTest/cmCTestSubmit.cxx: BUG#320: Merging fix from main + tree to 1.8 branch. + +2003-11-04 09:01 king + + * Source/cmQTWrapCPPCommand.cxx: BUG#319: Merging fix from main + tree (1.15->1.16) to 1.8 branch. + +2003-11-04 09:00 king + + * Source/kwsys/: ProcessWin32.c, RegularExpression.cxx: ERR: + Removed extra variable assignments. + +2003-11-04 08:56 king + + * Source/kwsys/ProcessWin32.c: BUG: Removed CloseHandle in case of + error in DuplicateHandle. According to documentation, + DuplicateHandle will close the source handle regardless of error + condition. + +2003-11-04 08:50 king + + * Source/cmAddTestCommand.cxx: BUG: Cannot add extra escapes for + backslashes because it makes the behavior inconsistent with + previous versions of cmake. + +2003-11-03 16:59 andy + + * Source/CTest/cmCTestSubmit.cxx: BUG: This fixes problem when + submitting bugs on Mac: Bug #320 - When st_size in stat is 64 bit + ctest does not submit + +2003-11-03 15:57 hoffman + + * Source/: cmLocalVisualStudio6Generator.cxx, cmMakefile.cxx: BUG: + hack fix for problem of MS vs 6 and custom target commands + +2003-11-03 15:53 andy + + * Source/cmQTWrapCPPCommand.cxx: BUG: Fix Bug #319 - Change in + QT_WRAP_CPP's behaviour + +2003-11-03 15:38 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Cleanup parsing of argument + to help fix Bug #259 - CMake does not quote correctly in + DartTestfile.txt + +2003-11-03 15:19 king + + * Source/cmAddTestCommand.cxx: BUG#259: ADD_TEST command generated + in DartTestfile.txt now quotes/escapes all arguments. + +2003-11-03 11:01 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: fix for debug libs + not using output path + +2003-10-31 17:22 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG#318: + cmake.check_depends now collects all dependencies for + cmake.depends and then uses a single rule. + +2003-10-31 17:05 king + + * Modules/Platform/Windows-cl.cmake: BUG#317: Merging 1.23->1.24 + changes to 1.8 branch. + +2003-10-31 17:01 king + + * Templates/EXEWinHeader.dsptemplate: BUG#316: Merged 1.15->1.16 + changes from main tree to 1.8 branch. + +2003-10-31 16:56 hoffman + + * Modules/Platform/Windows-cl.cmake: BUG: fix for bug# 317 + +2003-10-31 16:55 andy + + * Source/cmLocalVisualStudio6Generator.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate, + Tests/COnly/CMakeLists.txt: ENH: Attempt to add debug library + postfix for visual studio 6 + +2003-10-31 16:53 hoffman + + * Templates/EXEWinHeader.dsptemplate: Fix for BUG: 316 + +2003-10-31 12:55 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Merged all changes + from main tree up to revision 1.39. + +2003-10-31 09:31 andy + + * Source/cmCTest.cxx: ENH: Report when having conflicts + +2003-10-30 16:12 king + + * Source/: cmake.cxx: BUG#313: Improving error message when no + CMakeLists.txt file is found in the source tree. + +2003-10-30 14:27 king + + * Source/cmAddTestCommand.cxx: BUG: Backing out previous change + until a deeper problem can be investigated. + +2003-10-30 14:00 king + + * Source/cmAddTestCommand.cxx: BUG#259: Do not double quote + arguments if they are already quoted when writing + DartTestfile.txt. + +2003-10-30 13:47 king + + * Source/cmTryCompileCommand.h: BUG#163: Merging 1.12->1.13 changes + to 1.8 branch for 1.8.2 release. + +2003-10-30 13:46 king + + * Source/cmTryCompileCommand.h: BUG#163: Added documentation of + OUTPUT_VARIABLE argument. + +2003-10-30 13:35 king + + * Modules/FindLATEX.cmake: BUG#262: Merging fix from main tree + 1.8->1.9 to 1.8 branch for 1.8.2 release. + +2003-10-30 13:33 king + + * Modules/FindLATEX.cmake: BUG#262: Marking DVIPDF_CONVERTER as + advanced. + +2003-10-30 13:18 king + + * Source/cmake.cxx: BUG#311: Merging 1.141->1.142 changes to 1.8 + branch for 1.8.2 release. + +2003-10-30 13:16 king + + * Source/cmCTest.cxx: BUG#310: Merging 1.60->1.61 from main tree to + 1.8 branch. + +2003-10-30 10:05 andy + + * Source/cmCTest.cxx: BUG: Fix Bug #310 - CTest sends wrong time to + cvs on Windows + +2003-10-29 19:48 andy + + * Source/: cmake.cxx, cmakemain.cxx, cmSystemTools.cxx, + cmSystemTools.h: ENH: Ok, no more argument needed for script mode + +2003-10-29 09:56 andy + + * Source/cmGlobalGenerator.cxx: ENH: More scripting changes + +2003-10-29 09:43 andy + + * Source/: cmake.cxx, cmake.h, cmMakefile.cxx, cmakemain.cxx: ENH: + Start includding the scripting support + +2003-10-29 08:58 andy + + * Source/: cmCommand.h, cmMessageCommand.h, cmIncludeCommand.h: + ENH: Start includding the scripting support + +2003-10-28 15:26 andy + + * Source/cmake.cxx: ENH: Command should also be quoted + +2003-10-28 13:22 king + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx, cmLocalUnixMakefileGenerator.h: + BUG#303: Merged fix from main tree to 1.8 branch for 1.8.2 + release. + +2003-10-28 13:19 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG#200: Merged fix to + 1.8 branch for 1.8.2 release. + +2003-10-28 11:55 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: add preprocessor + flags to resource compiler + +2003-10-28 11:06 hoffman + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx, cmLocalUnixMakefileGenerator.h: + BUG: fix for bug 303 pass makeflags to sub makes + +2003-10-25 18:21 andy + + * Utilities/Doxygen/doxyfile.in: ENH: Add all subdirectories + +2003-10-17 16:19 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: make sure -M flags + are not duplicated and are only set in the xml + +2003-10-17 16:10 king + + * Modules/CMakeDetermineCXXCompiler.cmake: BUG#276: Merge fix for + spaces in path from main tree. + +2003-10-17 16:09 king + + * Modules/CMakeDetermineCXXCompiler.cmake: BUG: Fixed same + spaces-in-paths problem for CMakeTestGNU.c as in + CMakeDetermineCCompiler.cmake. + +2003-10-17 16:08 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for unicode + and for /D -D + +2003-10-16 19:15 andy + + * Source/CMakeLists.txt: ENH: Enable test on windows + +2003-10-16 17:51 king + + * Modules/Platform/Windows-cl.cmake: BUG#78: Merged fix from main + tree (1.22->1.23). + +2003-10-16 13:42 king + + * CMakeLists.txt, Utilities/Release/cmake_release.sh: ENH: Updating + version number for 1.8.2 release. + +2003-10-16 13:09 king + + * Modules/: CMakeDetermineJavaCompiler.cmake, FindJNI.cmake, + FindJava.cmake, FindTCL.cmake: BUG#281: Merging fix from main + tree. See bug report for revision changes. + +2003-10-16 13:06 king + + * Source/cmCTest.cxx: BUG#278: Merging fix from main tree + (1.59->1.60) to 1.8 branch for 1.8.2 release. + +2003-10-16 11:05 barre + + * Modules/: CMakeDetermineJavaCompiler.cmake, FindJNI.cmake, + FindJava.cmake, FindTCL.cmake: FIX: for Windows users, it seems + logical to favor native win32 installation before Cygwin ones. + Otherwise you can end up with bad mixes (part of the java tools + were picked from the SDK, part from Cygwin) + +2003-10-16 10:32 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: ENH: allow UNICODE to be + specifed in the cxx flags and if not default to MBCS + +2003-10-16 10:10 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: allow users to + change to unicode + +2003-10-16 07:49 andy + + * Source/cmCTest.cxx: ENH: Handle all white spaces, fix problem on + cygwin + +2003-10-15 23:42 hoffman + + * Modules/Platform/Windows-cl.cmake, + Source/cmLocalVisualStudio7Generator.cxx: BUG: fix for bug 78 + should be on 1.8 branch + +2003-10-15 10:19 king + + * Modules/Platform/Darwin.cmake: BUG#277: Fix from main tree 1.5 -> + 1.6 merged to 1.8 branch. Will be included in 1.8.2 release. + +2003-10-15 10:14 king + + * Modules/Platform/Darwin.cmake: ERR: Old -flat_namespace + -undefined suppress flags for CMAKE_SHARED_MODULE_CREATE_C_FLAGS + should be included when CMAKE_BACKWARDS_COMPATIBILITY is 1.6 or + lower. + +2003-10-15 10:06 king + + * bootstrap: BUG#168: Merged fix for HP-UX ansi C flags as second + part of the fix for this bug to 1.8 branch. 1.24 -> 1.25. + +2003-10-15 10:01 king + + * Source/kwsys/SystemTools.cxx: BUG#263: Merged search path + ordering fix from main tree to CMake 1.8 branch. 1.22 -> 1.24. + +2003-10-15 09:56 king + + * Source/cmTargetLinkLibrariesCommand.cxx: BUG#201: Merged warning + suppression support from main tree to 1.8 branch. 1.16->1.17. + +2003-10-15 09:53 king + + * Modules/CheckTypeSize.cmake: Documentation fix from main tree. + 1.11->1.12. + +2003-10-15 09:52 king + + * Modules/CheckVariableExists.cmake: BUG: Merged trivial fix from + main tree. 1.10 -> 1.11. + +2003-10-15 09:49 king + + * Modules/CMakeDetermineCCompiler.cmake: BUG#263: Merged fix for + system paths in ar and ranlib find commands to 1.8 branch. Will + be included in 1.8.2 + +2003-10-15 09:26 king + + * Source/cmQTWrapCPPCommand.cxx: BUG#186: Merged fix from trunk to + branch. + +2003-10-15 09:18 king + + * Modules/CMakeDetermineCCompiler.cmake: BUG#276: Merge fix for + spaces in path from main tree. + +2003-10-14 22:30 king + + * Modules/CMakeDetermineCCompiler.cmake: BUG: Fix for spaces in + path when loading CMakeTestGNU.c. + +2003-10-13 16:04 andy + + * Source/CMakeLists.txt: ENH: Add test for FindwxWindows. Thanks + to: Mathieu Malaterre + +2003-10-13 15:27 andy + + * Modules/CheckTypeSize.cmake: ENH: Documentation fix + +2003-10-13 11:58 king + + * Modules/Platform/Windows-cl.cmake: BUG#269: Fix for spaces in + paths. Will be included in 1.8.2 release. + +2003-10-13 11:32 andy + + * Modules/Platform/Windows-cl.cmake: ERR: allow spaces in the path + +2003-10-11 08:12 king + + * Modules/CheckVariableExists.cmake: BUG: Message describing + variable was using result variable. + +2003-10-09 15:52 hoffman + + * Modules/CMakeDetermineCCompiler.cmake, + Source/kwsys/SystemTools.cxx: ENH: put the system path after the + paths specified on to the FIND command + +2003-10-07 13:45 king + + * Utilities/Release/cmake_release.sh: Updated cygwin dependencies. + +2003-10-07 09:50 king + + * Utilities/Release/config_CYGWIN_NT-5.1: GCC 2.95 is no longer + available on cygwin. + +2003-10-02 14:50 andy + + * Source/cmTargetLinkLibrariesCommand.cxx: ENH: Add + CMAKE_IGNORE_DEPENDENCIES_ORDERING to prevent warnings about + dependency problems + +2003-09-26 11:27 king + + * Modules/CMakeImportBuildSettings.cmake: BUG: Comparison of build + tool should be case-insensitive. + +2003-09-26 11:15 king + + * Modules/CMakeImportBuildSettings.cmake: BUG: Comparison of build + tool should be case-insensitive. + +2003-09-24 17:51 andy + + * Source/cmQTWrapUICommand.cxx: ENH: Fix comment + +2003-09-24 17:51 andy + + * Tests/Wrapping/CMakeLists.txt: ENH: Better testing + +2003-09-24 17:50 andy + + * Source/cmQTWrapCPPCommand.cxx: BUG: Fix Bug #186 - QT_WRAP_UI + uses the path twice + +2003-09-24 11:10 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG#191: Merging fix + into 1.8 branch for inclusion in 1.8.2 release. + +2003-09-24 11:03 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Check for whether + to use CMAKE_EXE_LINKER_FLAGS should look both for EXECUTABLE and + WIN32_EXECUTABLE targets. + +2003-09-23 13:58 king + + * Source/cmCTest.cxx: BUG#185: Merged fix from main tree to 1.8 + branch. Change will be included in 1.8.2 release. + +2003-09-23 13:49 andy + + * Source/cmCTest.cxx: ENH: Add missing newline Bug #185 - CTest + exceptions output is missing new line + +2003-09-18 11:05 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: remove /tmp_mnt in collapse + full path + +2003-09-15 15:58 king + + * bootstrap: BUG: Need to check for -Ae flag on HP-UX cc compiler. + Needed for ANSI C compilation. + +2003-09-02 13:49 king + + * bootstrap: BUG#168: Using C compiler to build .c files during + bootstrap instead of C++ compiler. + +2003-09-02 13:27 king + + * bootstrap: BUG: Must use C compiler to compile C files during + bootstrap, not C++ compiler. + +2003-08-29 09:38 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: Merged more fixes from + main tree. + +2003-08-28 16:22 hoffman + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: make sure exe output path + is used for dep hack stuff + +2003-08-28 16:10 martink + + * Source/cmLocalVisualStudio6Generator.cxx: bad evil nasty ken + +2003-08-28 16:06 martink + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: fix to executable depends for + custom commands + +2003-08-28 15:02 king + + * Utilities/Release/config_IRIX64: ERR: Don't need separate -n32 + and -64 binaries. + +2003-08-28 14:58 hoffman + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: BUG: remove + bundle_loader stuff it did not work with spaces in the path and + is not needed for this test + +2003-08-28 14:55 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: Merged fix for bug with + custom commands depending on executables from main tree. + +2003-08-28 14:52 hoffman + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: fix bug with custom + commands depending on executables + +2003-08-28 14:03 king + + * CMakeLists.txt, Utilities/Release/cmake_release.sh: ENH: Updated + for 1.8.1 release number. + +2003-08-27 20:35 starreveld + + * Modules/Platform/Darwin.cmake, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt: ENH: remove + the -flat_namespace and -undefined suppress hacks from ENH: + CMAKE_SHARED_MODULE_CREATE_C_FLAGS ENH: and fix the complex + example to specify a -bundle loader for the ENH: shared module + that it builds. + +2003-08-27 17:45 hoffman + + * Source/cmWin32ProcessExecution.cxx: ENH: remove warnings from use + of NULL + +2003-08-27 16:50 king + + * CMakeLists.txt, CMakeSystemConfig.txt.in, + CMakeWindowsSystemConfig.txt, bootstrap, + Modules/CMakeCCompiler.cmake.in, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, Modules/CMakeTestGNU.c, + Modules/FindThreads.cmake, Modules/FindwxWindows.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows-gcc.cmake, + Modules/Platform/Windows.cmake, Source/CMakeLists.txt, + Source/TODO, Source/cmCacheManager.cxx, Source/cmCommands.cxx, + Source/cmDynamicLoader.cxx, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.cxx, + Source/cmLoadCommandCommand.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/cmWin32ProcessExecution.cxx, Source/cmake.cxx, + Source/kwsys/SystemTools.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Utilities/CMakeLists.txt: ENH: Merging changes from trunk into + 1.8 branch. + + 1.) MinGW support (beta) 2.) make VERBOSE=1 3.) FindThreads.cmake + fix 4.) FindwxWindows.cmake fix 5.) + CMakeSystemSpecificInformation.cmake typo fix 6.) bootstrap + spaces-in-path fix + +2003-08-27 16:42 hoffman + + * Modules/Platform/Windows-gcc.cmake, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/ComplexRelativePaths/Library/CMakeLists.txt: ENH: MinGW + build now passes all the tests + +2003-08-27 16:08 king + + * Utilities/Release/: cmake_release.sh, config_AIX, config_Darwin, + config_HP-UX, config_IRIX64, config_Linux, config_OSF1, + config_SunOS, cygwin-package.sh.in: Merging release script + changes from 1.8 branch to main tree. + +2003-08-27 16:02 king + + * Modules/: CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake: + ERR: Fixed typo in comment. + +2003-08-27 08:29 king + + * Source/cmake.cxx: ERR: Fixed placement of code introduced by a + patch from main tree. Somehow it ended up on the wrong lines. + +2003-08-26 17:13 king + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Added support for + "make VERBOSE=1" to run one-time verbose make runs without + changing CMAKE_VERBOSE_MAKEFILE. + +2003-08-26 15:08 king + + * Source/: cmake.cxx, cmakemain.cxx, cmakewizard.cxx, + cmakewizard.h: BUG#164: Fixed crash of cmake -i when CMAKE_ROOT + cannot be found. Made resulting error message cleaner. + +2003-08-26 15:06 king + + * Source/: cmake.cxx, cmakemain.cxx, cmakewizard.cxx, + cmakewizard.h: BUG: Fixed crash of cmake -i when CMAKE_ROOT + cannot be found. Made resulting error message cleaner. + +2003-08-22 12:53 king + + * CMakeLists.txt, Source/CMakeLists.txt, Utilities/CMakeLists.txt: + ENH: Moved decision to build MFCDialog up to top level. It is + used in both the Source and Utilities directories. + +2003-08-22 11:56 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: remove ifdef code + and use makefile definitions + +2003-08-22 11:56 hoffman + + * Modules/Platform/Windows-gcc.cmake: ENH: add configure file for + gcc under windows + +2003-08-22 09:52 andy + + * bootstrap, Modules/FindThreads.cmake: ERR: Reorganize to try to + fix the -pthread problem on some systems + +2003-08-21 16:22 hoffman + + * Modules/CMakeCCompiler.cmake.in, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, Modules/CMakeTestGNU.c, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows.cmake, Source/CMakeLists.txt, + Source/cmDynamicLoader.cxx, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/cmWin32ProcessExecution.cxx, Source/cmake.cxx, + Source/kwsys/SystemTools.cxx: ENH: add the unix makefile + generator as an option from the windows GUI, this builds with + mingw, cygwin, and combinations of make cl, bcc32 + +2003-08-21 13:26 andy + + * Modules/FindwxWindows.cmake: ERR: If WX_CONFIG_LIBS are , then + you get weird cmake error. This should fix it + +2003-08-21 09:23 hoffman + + * Source/TODO: [no log message] + +2003-08-20 12:59 king + + * Source/: cmakemain.cxx, CursesDialog/ccmake.cxx: ENH: Added + documentation of specifying an existing build tree as an + argument. + +2003-08-19 11:02 andy + + * Source/cmLoadCommandCommand.cxx: ERR: Fix crash of cmake on + broken load commands + +2003-08-19 10:50 king + + * Modules/Platform/: IRIX64.cmake: ENH: Improved default choice of + -64 compiler/linker flags based on how cmake was built. + +2003-08-19 10:29 andy + + * Source/cmLoadCommandCommand.cxx: BUG: LastError can return 0, so + handle that case + +2003-08-19 09:41 king + + * bootstrap: BUG: Merged cmake_make_processor error message to 1.8 + branch. + +2003-08-19 09:40 king + + * Source/: cmCTest.cxx, cmCTest.h: BUG: Merged fixes for bugs 146, + 152, and 153 to 1.8 branch. + +2003-08-19 09:39 king + + * Source/cmCacheManager.cxx: BUG#154: Merged fix to 1.8 branch. + +2003-08-19 09:39 king + + * Source/cmake.cxx: ERR: Fixed warnings. + +2003-08-19 09:33 king + + * Source/kwsys/SystemTools.cxx: ERR: Merged warning fix from main + tree to CMake 1.8 branch. + +2003-08-19 09:32 king + + * Source/kwsys/ProcessUNIX.c: ProcessUNIX.c + +2003-08-19 09:32 king + + * Source/kwsys/ProcessWin32.c: BUG: Merged error message fix to + CMake 1.8 branch. + +2003-08-19 09:27 king + + * Modules/FindLATEX.cmake: BUG#156: Fixed typo psd2pdf -> ps2pdf. + Will be included in 1.8.1 release. + +2003-08-19 09:12 king + + * Utilities/Release/: cmake_release.sh, config_IRIX64: Added + LDFLAGS support. + +2003-08-19 09:06 king + + * Utilities/Release/config_IRIX64: ENH: Added configuration of both + -64 and -n32 builds. + +2003-08-19 09:05 king + + * Utilities/Release/cmake_release.sh: ENH: Added support for + configuration of install tree. + +2003-08-19 08:53 andy + + * Modules/FindLATEX.cmake: BUG: Fix Bug #156 - ps2pdf is not found + on linux + +2003-08-18 14:31 andy + + * Source/: cmCTest.cxx, cmCTest.h: BUG: Report failed as failed... + +2003-08-18 14:06 andy + + * Source/cmake.cxx: ENH: Remove unused variable + +2003-08-18 14:05 andy + + * Source/cmCacheManager.cxx: BUG: Fixed Bug #154 - Uninitialized + type initialized value cache variables should return value + +2003-08-18 11:30 andy + + * Source/: cmCTest.cxx, cmCTest.h: BUG: Fix Bug #153 - CTest does + not detect tests that are not found and Bug #153 - CTest does not + detect tests that are not found + +2003-08-17 12:24 hoffman + + * Source/kwsys/SystemTools.cxx: ENH: remove warning and unneeded + cast + +2003-08-15 08:41 andy + + * Source/cmCTest.cxx: BUG: Fix test reporting + +2003-08-14 13:34 andy + + * Source/cmCTest.cxx: ENH: Fix verbose output, fix error message, + and fix the exit code check + +2003-08-14 09:09 hoffman + + * Source/cmake.cxx: ENH: remove a warning + +2003-08-13 18:17 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Better error reporting + +2003-08-13 18:08 king + + * Source/kwsys/ProcessWin32.c: ENH: Made error message consistent + between win9x and non-win9x version of error reporting. + +2003-08-13 14:21 king + + * Source/kwsys/ProcessUNIX.c: ENH: Treating SIGBUS as a fault by + default. + +2003-08-12 17:24 king + + * Source/cmSystemTools.cxx: BUG: Do not hide console when run from + ctest. + +2003-08-12 17:18 andy + + * Source/cmSystemTools.cxx: ENH: Fix hidden console for ctest + +2003-08-12 17:17 king + + * Utilities/Release/cmake_release.sh: Redoing 1.8.0. + +2003-08-12 16:37 king + + * Utilities/Release/cmake_release.sh: Disable use of libdl by curl. + +2003-08-12 16:35 king + + * Utilities/Release/: config_AIX, config_Darwin, config_HP-UX, + config_IRIX64, config_Linux, config_OSF1, config_SunOS: ENH: + Using write_standard_cache to shorten config files. + +2003-08-12 16:35 king + + * Utilities/Release/cmake_release.sh: ENH: Unix builds should not + use reentrant versions of network calls. + +2003-08-11 18:24 king + + * Utilities/Release/config_Darwin: ENH: Updated for new wx version. + +2003-08-11 18:21 king + + * Utilities/Release/cmake_release.sh: BUG: CMake.app directory is + now in bin, not Source. + +2003-08-11 18:14 king + + * Utilities/Release/cygwin-package.sh.in: BUG: Tests are run by + bin/ctest instead of Source/ctest. + +2003-08-11 17:58 king + + * Utilities/Release/: cmake_release.sh, config_IRIX64, + config_Linux: ENH: Added support for parallel build during + release. + +2003-08-11 17:53 andy + + * bootstrap: ENH: Add error message for make missing + +2003-08-11 17:41 king + + * Utilities/Release/cmake_release.sh: BUG: Test for build needs to + look for bin/ccmake, not Source/ccmake. + +2003-08-11 17:35 king + + * Utilities/Release/: cmake_release.sh, config_Darwin, + config_HP-UX, config_IRIX64, config_SunOS: Merge from 1.8 branch. + +2003-08-11 17:34 king + + * Source/cmCommands.cxx: BUG: Bootstrapping with wxWindows support + needs SEPARATE_ARGUMENTS command. + +2003-08-11 17:34 king + + * Modules/CMakeLists.txt: ENH: Installing readme.txt in Modules + directory to be consistent with windows. + +2003-08-11 16:55 king + + * Utilities/Release/config_Darwin: Fixed wx location. + +2003-08-11 16:43 king + + * Source/cmCommands.cxx: BUG: Bootstrapping with wxWindows support + requires SEPARATE_ARGUMENTS command in bootstrapped executable. + +2003-08-11 16:31 king + + * Utilities/Release/config_HP-UX: ENH: Cleaned up link of dld. + +2003-08-11 16:31 king + + * Utilities/Release/config_SunOS: ENH: Switching to system + compiler. + +2003-08-11 15:27 king + + * Utilities/Release/cmake_release.sh: Using bootstrap instead of + configure. + +2003-08-11 15:22 king + + * Utilities/Release/cmake_release.sh: ENH: Allow config files to + specify a make. + +2003-08-11 15:21 king + + * Utilities/Release/config_IRIX64: ENH: Enabling parallel build. + +2003-08-11 15:16 king + + * Utilities/Release/cmake_release.sh: BUG: Location of ctest has + changed to bin, not Source. + +2003-08-11 15:15 king + + * Utilities/Release/config_Darwin: Updated for new FindwxWindows. + +2003-08-11 15:07 king + + * Utilities/Release/cmake_release.sh: Update from 1.8 branch. + +2003-08-11 15:06 king + + * Utilities/Release/config_Darwin: Updated for new location of + wxWindows. + +2003-08-11 15:02 king + + * Utilities/Release/config_Darwin: Updated for new location of + wxWindows. + +2003-08-11 15:01 king + + * Utilities/Release/cmake_release.sh: ENH: Updated for new FTP + directory structure. + +2003-08-11 14:56 king + + * Modules/CMakeLists.txt: ENH: Installing readme.txt in modules to + be consistent with windows. + +2003-08-11 14:44 martink + + * Source/: cmMakefile.cxx: added beta release support + +2003-08-11 14:41 martink + + * CMakeLists.txt, Source/cmCPluginAPI.h: version 19 + +2003-08-11 14:37 martink + + * CMakeLists.txt, Source/cmCPluginAPI.h, + Utilities/Release/cmake_release.sh: added version + +2003-08-11 12:20 andy + + * Source/ctest.cxx: ENH: Add documentation for -D and add missing + targets + +2003-08-11 12:18 andy + + * Source/: cmCTest.cxx, CTest/cmCTestSubmit.cxx: ENH: Cleanup the + output + +2003-08-11 12:17 andy + + * Modules/Dart.cmake: ENH: Take Purify out because it is not + implemented yet + +2003-08-11 09:47 andy + + * Source/cmCTest.cxx: ENH: Remove debug + +2003-08-10 18:30 martink + + * Source/: cmAbstractFilesCommand.h, cmAddCustomCommandCommand.h, + cmAddCustomTargetCommand.h, cmAddDefinitionsCommand.h, + cmAddDependenciesCommand.h, cmAddExecutableCommand.h, + cmAddLibraryCommand.h, cmAddTestCommand.h, + cmAuxSourceDirectoryCommand.h, cmBuildCommand.h, + cmBuildNameCommand.h, cmCMakeMinimumRequired.cxx, + cmCMakeMinimumRequired.h, cmCTest.cxx, cmCacheManager.cxx, + cmCommand.h, cmConfigureFileCommand.h, cmCreateTestSourceList.h, + cmEnableTestingCommand.h, cmEndForEachCommand.h, + cmExecProgramCommand.h, cmExportLibraryDependencies.h, + cmFLTKWrapUICommand.h, cmFileCommand.h, cmFindFileCommand.cxx, + cmFindFileCommand.h, cmFindLibraryCommand.h, + cmFindPackageCommand.h, cmFindPathCommand.h, + cmFindProgramCommand.cxx, cmFindProgramCommand.h, + cmForEachCommand.h, cmGetCMakePropertyCommand.h, + cmGetSourceFilePropertyCommand.h, cmGetTargetPropertyCommand.h, + cmGlob.cxx, cmITKWrapTclCommand.h, cmIfCommand.h, + cmIncludeCommand.h, cmIncludeDirectoryCommand.h, + cmIncludeExternalMSProjectCommand.h, + cmIncludeRegularExpressionCommand.h, cmInstallFilesCommand.h, + cmInstallProgramsCommand.h, cmInstallTargetsCommand.h, + cmLinkDirectoriesCommand.h, cmLinkLibrariesCommand.h, + cmLoadCommandCommand.h, cmLocalUnixMakefileGenerator.cxx, + cmMacroCommand.h, cmMakeDirectoryCommand.h, cmMakefile.cxx, + cmMakefile.h, cmMarkAsAdvancedCommand.h, cmMessageCommand.h, + cmOptionCommand.h, cmOutputRequiredFilesCommand.h, + cmProjectCommand.h, cmQTWrapCPPCommand.h, cmQTWrapUICommand.h, + cmRemoveCommand.h, cmSeparateArgumentsCommand.h, cmSetCommand.h, + cmSetSourceFilesPropertiesCommand.h, + cmSetTargetPropertiesCommand.h, cmSiteNameCommand.h, + cmSourceFile.h, cmSourceFilesCommand.h, + cmSourceFilesRemoveCommand.h, cmSourceGroupCommand.h, + cmStringCommand.h, cmSubdirCommand.h, cmSubdirDependsCommand.h, + cmSystemTools.cxx, cmTarget.h, cmTargetLinkLibrariesCommand.h, + cmTryCompileCommand.h, cmTryRunCommand.h, + cmUseMangledMesaCommand.h, cmUtilitySourceCommand.h, + cmVTKMakeInstantiatorCommand.h, cmVTKWrapJavaCommand.h, + cmVTKWrapPythonCommand.h, cmVTKWrapTclCommand.h, + cmVariableRequiresCommand.h, cmWin32ProcessExecution.cxx, + cmWrapExcludeFilesCommand.h, cmWriteFileCommand.h, cmake.cxx, + cmake.h, cmakewizard.cxx, cmakewizard.h: removed redundent + includes + +2003-08-10 16:01 martink + + * Source/: cmMakeDepend.cxx, cmMakeDepend.h, cmSourceFile.cxx: + removed duplicate includes + +2003-08-10 16:00 martink + + * Source/cmMakefile.cxx: removed duplicate include + +2003-08-09 19:37 andy + + * Source/cmCTest.cxx: ERR: Rename some variables to remove shadow + warning + +2003-08-08 18:28 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add regression images + support + +2003-08-08 17:10 andy + + * Source/cmCTest.cxx: ENH: Better output and use RunMakeCommand for + configure + +2003-08-08 11:59 andy + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, CMakeDetermineSystem.cmake, + CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake, + CMakeVS6FindMake.cmake, CMakeVS71FindMake.cmake, + CMakeVS7FindMake.cmake, CheckFunctionExists.cmake, + CheckIncludeFile.cmake, CheckIncludeFileCXX.cmake, + CheckIncludeFiles.cmake, CheckLibraryExists.cmake, + CheckTypeSize.cmake, CheckVariableExists.cmake, + FindHTMLHelp.cmake, FindMFC.cmake, TestBigEndian.cmake, + TestCXXAcceptsFlag.cmake, TestForANSIForScope.cmake, + TestForSTDNamespace.cmake: ENH: Cleanups and add missing + CMakeOutput.log and CMakeError.log appending. Close Bug #136 - + Verify that all modules that do try compile produce + CMakeError.log and CMakeOutput.log + +2003-08-08 11:19 martink + + * Source/cmStandardIncludes.h: added stdio + +2003-08-08 10:40 martink + + * Source/cmLocalVisualStudio6Generator.cxx: fid post build iue on + vs6 utility targets + +2003-08-08 10:20 andy + + * Tests/SystemInformation/DumpInformation.cxx: EHN: Also display + Configure.h and Configure.hxx from cmsys + +2003-08-08 10:07 andy + + * Source/cmMakefile.cxx: ENH: When fixing cache value with + uninitialized type, collapse full paths for PATH and FILEPATH. + Closes Bug #82 - Specifying relative path when entering path can + break things + +2003-08-08 09:26 andy + + * Source/cmMakefile.cxx: ENH: Handle untyped but initialized values + for boolean AddCacheDefinition. Closes Bug #118 - Specifying + cache entries with -D should not need the type + +2003-08-08 09:22 andy + + * Source/: cmCacheManager.cxx, cmCacheManager.h: ENH: Get accessor + for cache value as boolean + +2003-08-08 09:17 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: remove shadowed variable + +2003-08-08 09:14 king + + * Source/cmFindPackageCommand.cxx: ERR: Fixed use of != operator + for std::string on old broken compilers. + +2003-08-08 08:48 andy + + * Source/cmakemain.cxx: ENH: Add help for cmake -E + +2003-08-08 08:48 andy + + * Source/cmCTest.cxx: ENH: Flush the output file, to make more nice + output for tail -f + +2003-08-07 19:23 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Add displaying of dots when + building project. Also, file is now written as the output is + produced, so, tail -f works, baby... + +2003-08-07 19:00 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Abstract + parsing of arguments so that I can use it in other places + +2003-08-07 18:44 andy + + * Source/cmaketest.cxx: ENH: More verbose + +2003-08-07 17:43 king + + * Source/ctest.cxx: ENH: Clarification of help dumped when no + arguments are given and no test file is found. + +2003-08-07 16:54 hoffman + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: BUG: fix the test + +2003-08-07 16:50 king + + * Source/cmFindPackageCommand.cxx: ENH: Added compatability for + capitalization of _DIR and _FOUND variables in cmake 1.6. + +2003-08-07 16:32 andy + + * Modules/FindLATEX.cmake: ENH: Add PDFLaTeX and LaTeX2HTML. Closes + Bug #132 - Add pdflatex and html2latex to FindLATEX.cmake + +2003-08-07 16:26 andy + + * Source/: cmVariableWatch.cxx, cmVariableWatch.h: ENH: Add remove + watch + +2003-08-07 16:25 andy + + * CMakeLists.txt, Source/CMakeLists.txt: ENH: Fix dependencies for + curses dialog + +2003-08-07 16:11 king + + * Source/cmake.cxx: BUG: Fixed typo in error message. + +2003-08-07 16:09 andy + + * CMakeLists.txt, Source/CMakeLists.txt, + Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmTargetLinkLibrariesCommand.h, + Source/CTest/CMakeLists.txt: ENH: Report an error when + ADD_LIBRARY and TARGET_LINK_LIBRARIES are in the wrong order and + fix CMakeLists files to actually work + +2003-08-07 16:04 hoffman + + * Tests/Complex/CMakeLists.txt, + Tests/Complex/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Source/cmIncludeExternalMSProjectCommand.cxx: ENH: improve + coverage + +2003-08-07 15:39 andy + + * Source/kwsys/ProcessWin32.c: ENH: Cast into apropriate type to + remove warning + +2003-08-07 14:37 andy + + * Source/cmQTWrapUICommand.cxx: ENH: Use the new signature + +2003-08-07 14:37 andy + + * Tests/Wrapping/CMakeLists.txt: ENH: More verbose test + +2003-08-07 14:10 hoffman + + * Modules/Platform/Windows-cl.cmake: BUG: fix for main in a library + on windows with nmake + +2003-08-07 11:53 king + + * Source/cmLocalUnixMakefileGenerator.h: ENH: Added convenience + signature to OutputMakeRule. + +2003-08-07 11:42 king + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Makefiles now have + rules to do a global generate if the CMake listfiles have + changed. Necessary for when try-compiles are added to a + listfile. + +2003-08-07 09:19 hoffman + + * Modules/FindMPI.cmake, Source/cmLocalVisualStudio7Generator.cxx: + BUG: fix for bugs 125 - 128, and a fix for the bug introduced by + the bug fix for but 92. & was being replaced with &, but + after double quote was replaced with " causing it to be + &quot. Also add more search paths for mpi + +2003-08-06 19:19 andy + + * Source/cmMakefile.cxx: ENH: oops, initialize variable + +2003-08-06 18:54 andy + + * Source/cmGetCMakePropertyCommand.cxx, + Source/cmGetCMakePropertyCommand.h, Source/cmMacroCommand.cxx, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Tests/SystemInformation/CMakeLists.txt, + Tests/SystemInformation/DumpInformation.cxx: ENH: Add option to + retrieve list of macros. Close Bug #25 - Get_CMAKE_PROPERTIES + +2003-08-06 18:43 king + + * Source/cmDocumentation.cxx: BUG: Don't use -V as a version + option. It conflicts with ctest. + +2003-08-06 18:41 king + + * Source/cmake.cxx: ENH: Removed old argument processing code that + never does anything. + +2003-08-06 18:39 king + + * Source/: cmakewizard.cxx, CursesDialog/cmCursesMainForm.cxx: + BUG#129: Fixed load/save of CMakeCache.txt when it is not in the + current directory. + +2003-08-06 17:58 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: If + CMAKE_EDIT_COMMAND is not specified, use cmake -i + +2003-08-06 17:52 andy + + * bootstrap: ENH: Add rebuild_cache + +2003-08-06 17:32 andy + + * Modules/FindThreads.cmake: ENH: On apple use -lpthreads + +2003-08-06 15:22 king + + * Source/: cmInstallFilesCommand.h, cmInstallProgramsCommand.h: + ENH: Tweaked whitespace in documentation of command. + +2003-08-06 15:18 king + + * Source/cmAddCustomCommandCommand.h: ENH: Tweaked whitespace in + documentation of command. + +2003-08-06 15:12 king + + * Source/CursesDialog/ccmake.cxx: ENH: Added SEE ALSO support for + generated unix manpage. + +2003-08-06 15:10 king + + * Source/CMakeLists.txt: BUG: We don't want to install cmaketest on + UNIX or windows. It is for internal CMake testing only. We + should probably fold its functionality into ctest anyway. + +2003-08-06 15:03 king + + * Source/ctest.cxx, Utilities/CMakeLists.txt: ENH: Added + documentation for ctest. + +2003-08-06 14:49 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h, cmakemain.cxx, + CursesDialog/ccmake.cxx: ENH: Added configuration of name of + executable in man page header and version banner. + +2003-08-06 13:48 king + + * Source/cmSystemTools.cxx: ENH: Hide windows for processes run by + RunSingleCommand. + +2003-08-06 13:41 king + + * Source/kwsys/SystemTools.cxx: Fixed indentation + +2003-08-06 12:52 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: do not output make + install rules on windows because they do not work + +2003-08-06 11:51 king + + * Source/cmaketest.cxx: BUG: Fixed spacing error in message. + +2003-08-06 10:42 king + + * Source/CMakeLists.txt: ENH: Install test is now enabled when + CMAKE_INSTALL_PREFIX is CMake_BINARY_DIR/Tests/TestInstall/Prefix + to keep test in one directory. + +2003-08-06 10:39 king + + * Source/CMakeLists.txt, Tests/TestInstall.sh.in: ENH: Added + Install test. It is enabled when the CMAKE_INSTALL_PREFIX is + CMake_BINARY_DIR/InstallTest. + +2003-08-06 10:15 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Fix install problem + +2003-08-06 09:27 king + + * Source/kwsys/ProcessWin32.c: BUG: Need to provide stdin to child + processes. + +2003-08-05 18:25 king + + * Tests/CommandLineTest/CMakeLists.txt: ENH: Added test of + --copyright and --version arguments for coverage. + +2003-08-05 18:22 king + + * Tests/CommandLineTest/CMakeLists.txt: ENH: Added test of --help + [command] form of help option for coverage. + +2003-08-05 18:10 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h: ENH: Added + support to --help to print help for a single command. + +2003-08-05 17:39 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Fixed + implementation of long dependency list support. The proxy target + must have a corresponding file to work correctly. Instead of + using a proxy target, we now just list one line for each + dependency and then print one copy of the build rule at the end. + +2003-08-05 16:51 king + + * Source/cmake.cxx: ENH: Clarified source directory mismatch + message. + +2003-08-05 16:36 king + + * Source/: cmake.cxx, cmake.h: ENH#61: cmake and ccmake now support + passing the path to a CMakeCache.txt file as an argument. Its + settings will be loaded. + +2003-08-05 16:04 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG#92 - Added XML + escaping for <, >, and &. + +2003-08-05 15:20 andy + + * Tests/SystemInformation/DumpInformation.cxx: BUG: Open as ascii + to remove extra new lines + +2003-08-05 15:10 king + + * Source/kwsys/: ProcessFwd9x.c, ProcessWin32.c: ENH: Added + show/hide window support. + +2003-08-05 14:27 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c, ProcessWin32.c: ENH: + Added SetOption/GetOption methods for platform-specific options. + +2003-08-05 13:53 king + + * Source/kwsys/ProcessUNIX.c: BUG: Can't close stdin. + +2003-08-05 11:34 king + + * Source/kwsys/ProcessUNIX.c: BUG: Added missing + zero-initialization of struct sigaction. + +2003-08-05 09:55 martink + + * Modules/: CMakeTestNMakeCLVersion.c, Platform/Windows-cl.cmake: + added test for whether pdbtype should be used for nmake + +2003-08-05 09:07 king + + * Source/kwsys/ProcessUNIX.c: BUG: GetErrorString should return + ErrorMessage buffer, not the pipe buffer. + +2003-08-05 09:07 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: minor fix + +2003-08-05 08:49 martink + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: added outputEcho method and fixed + make help for nmake and borland + +2003-08-04 17:08 king + + * Modules/: CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake: + ERR: Fixed typeo tests->test. + +2003-08-04 15:35 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: added make help target + first cut + +2003-08-04 14:34 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: fix for debug libs on + UNIX + +2003-08-04 11:48 andy + + * Source/cmSystemTools.cxx: ENH: Improve paths on windows + +2003-08-04 07:55 andy + + * Source/cmSystemTools.cxx: ENH: Fix escaping on windows + +2003-08-04 07:12 andy + + * Source/cmSystemTools.cxx: ENH: Fix argument parsing on UNIX with + spaces + +2003-08-03 22:41 andy + + * Source/cmSiteNameCommand.cxx: ENH: Use new RunCommand + +2003-08-03 22:36 andy + + * Source/: cmCTest.cxx, cmCTest.h: ENH: Use new RunCommand + +2003-08-03 22:34 andy + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, cmake.cxx, cmaketest.cxx: + ENH: Use the new RunCommand + +2003-08-03 22:33 andy + + * Source/: cmBuildNameCommand.cxx, cmTryRunCommand.cxx, + cmSiteNameCommand.cxx: ENH: Use the new signature + +2003-08-03 22:32 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Add back the + kwsysProcess RunCommand, now is in parallel + +2003-08-03 20:47 andy + + * Source/cmGetCMakePropertyCommand.cxx, + Source/cmGetCMakePropertyCommand.h, Source/cmake.h, + Tests/SystemInformation/CMakeLists.txt, + Tests/SystemInformation/DumpInformation.cxx: ENH: Add accessor + for the list of commands + +2003-08-02 09:33 andy + + * Source/: cmCacheManager.cxx, cmCacheManager.h, cmMakefile.cxx: + BUG: Fix problem with uninitialized variables + +2003-08-01 19:13 andy + + * Modules/FindQt.cmake, Tests/Wrapping/CMakeLists.txt: ENH: Make it + work for QT 2.3 non commercial on windows + +2003-08-01 18:53 andy + + * Source/cmQTWrapUICommand.cxx: ENH: Make out of source work on + Windows + +2003-08-01 18:52 andy + + * Tests/Wrapping/CMakeLists.txt: ENH: Add more debug + +2003-08-01 18:52 andy + + * Source/CMakeLists.txt: ENH: Fix test for Visual Studio + +2003-08-01 17:11 andy + + * Modules/FindThreads.cmake: ENH: MAke it work on FreeBSD + +2003-08-01 16:48 andy + + * Modules/: CheckForPthreads.c, FindThreads.cmake: ENH: Do better + test for pthreads + +2003-08-01 16:48 andy + + * Modules/FindQt.cmake: ENH: Fix indentation + +2003-08-01 16:47 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ERR: Remove debug + +2003-08-01 15:41 hoffman + + * Tests/: Complex/Executable/complex.file.cxx, + ComplexOneConfig/Executable/complex.file.cxx, + ComplexRelativePaths/Executable/complex.file.cxx: add missing + file + +2003-08-01 15:33 king + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Dependency lists + are now split into multiple make lines to allow longer lists on + limited make programs. + +2003-08-01 15:33 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Add support for + -pthread + +2003-08-01 15:27 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Adding link flags + to an executable that links to shared libraries must be done for + both EXECUTABLE and WIN32_EXECUTABLE targets. + +2003-08-01 14:34 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt: BUG (85): + allow . to be in the name of an executable + +2003-08-01 14:10 andy + + * Source/: cmCacheManager.cxx, cmCacheManager.h, cmMakefile.cxx, + cmake.cxx: ENH: Allow specifying cmake variables on the command + line without specifying the type Bug #118 - Specifying cache + entries with -D should not need the type + +2003-08-01 14:10 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: all Makefiles now have + both full path to exe and short version + +2003-08-01 13:54 martink + + * Source/cmUtilitySourceCommand.cxx: fix for utility command + without EXECUTABLE_OUTPUT_PATH + +2003-08-01 13:24 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Syntax cleanup + +2003-08-01 13:13 hoffman + + * Source/: cmGlobalNMakeMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx, cmLocalUnixMakefileGenerator.h: + ENH: allow lib prefix for to stay for nmake and borland make as + it is not a system prefix + +2003-08-01 13:00 martink + + * CMakeLists.txt: change lib path back to empty + +2003-08-01 12:49 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Fix echo's to use + @echo. This way verbose mode does not print twice: Bug #45 - add + @ from echo commands + +2003-08-01 11:58 martink + + * CMakeLists.txt: made more options advanced + +2003-08-01 09:18 andy + + * Tests/Wrapping/CMakeLists.txt: ERR: Only link qt to qt executable + +2003-08-01 09:11 martink + + * Source/cmExportLibraryDependencies.cxx: fix for bug # 101 + +2003-07-31 16:43 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: when creating rule + files remove the IntDir + +2003-07-31 15:32 hoffman + + * Source/cmTarget.cxx: ENH: add support for OBJECT_DEPENDS for + visual studio + +2003-07-31 14:46 martink + + * Source/cmMakefile.cxx: bug fix for bug # 117 + +2003-07-31 13:15 andy + + * Modules/FindwxWindows.cmake: made a minor bugfix on my + FindwxWindows.cmake. I capsulated the regular expression + matching for the libdrs with another IF (line 355). By: Jan + Woetzel + +2003-07-31 08:50 andy + + * Tests/Wrapping/CMakeLists.txt: ERR: Attempt to fix wrapping on + Windows + +2003-07-31 08:33 andy + + * Tests/Wrapping/Wrap.c: ENH: Fix problem on HP. Whay should K&R be + default? + +2003-07-30 15:38 andy + + * Modules/FindQt.cmake: ENH: when linking in QT, we should also + link DL, since QT uses them + +2003-07-30 13:39 andy + + * Modules/FindQt.cmake: ENH: QT if it is multi threaded should link + in threads + +2003-07-30 13:28 andy + + * Tests/Wrapping/: CMakeLists.txt, foo.ui.in: ENH: Really test uic + and perform configured uic test + +2003-07-30 13:27 andy + + * Source/cmQTWrapUICommand.cxx: ENH: Allow qt ui files being it the + binary dir. Bug #110 - QT_WRAP_UI problem on out-of-source builds + +2003-07-30 13:11 andy + + * Source/cmaketest.cxx: ENH: Also fail when make + failsSource/cmaketest.cxx + +2003-07-30 13:10 andy + + * Tests/Wrapping/: CMakeLists.txt, Wrap.c: ENH: Add executable for + wrapping test, so that make stage actually passes + +2003-07-29 18:06 andy + + * Source/cmGlob.cxx: ENH: Speedup globbing and attempt to fix + cygwin problem + +2003-07-29 17:15 andy + + * Modules/FindQt.cmake: ENH: Use FindX11 when doing Qt on unix + +2003-07-29 13:36 andy + + * Modules/Use_wxWindows.cmake: ENH: Add Use file for wxWindows. + Thanks Jan Woetzel + +2003-07-29 07:41 andy + + * Modules/FindwxWindows.cmake: ENH: Improved find module. Thank you + Jan Woetzel + +2003-07-29 07:01 andy + + * Source/cmAddCustomCommandCommand.cxx: ENH: Fix typo: Bug #100 - + Spelling correction to an error message + +2003-07-28 18:12 hoffman + + * Source/: cmLocalUnixMakefileGenerator.cxx, cmMakeDepend.cxx, + cmMakeDepend.h: ENH: performance fixes for network depends + +2003-07-28 14:43 hoffman + + * Source/: cmSourceGroupCommand.cxx, cmSourceGroupCommand.h: ENH: + put back old style call to SOURCE_GROUP, no need to break things + for this + +2003-07-28 13:40 hoffman + + * Source/cmake.cxx: BUG: make sure initial cache file read only + reads one file, and does not look for CMakeLists.txt files on the + entire disk + +2003-07-25 13:39 hoffman + + * Source/cmake.cxx: add a better message for the GUI if no + CMakeLists.txt file is found. + +2003-07-25 12:50 hoffman + + * Tests/Wrapping/CMakeLists.txt: for unix add x11 and pthreads for + qt + +2003-07-24 11:53 andy + + * Source/cmGlob.cxx: ENH: Remove warning + +2003-07-24 11:37 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: fix for utility depends + bug#76 + +2003-07-24 11:33 king + + * Source/CMakeLists.txt, Tests/FindPackageTest/CMakeLists.txt, + Tests/FindPackageTest/FindPackageTest.cxx: ENH: Added + FindPackageTest to improve coverage. + +2003-07-24 11:32 king + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: ENH: + Implemented QUIET argument propagation to FOO_FIND_QUIETLY + setting in FindFOO.cmake module that is found. + +2003-07-24 11:12 andy + + * Source/cmGlob.cxx: ENH: On windows handle network paths + +2003-07-24 11:06 king + + * Modules/FindVTK.cmake: ENH: Improved error message for VTK_DIR + not found to refer to it as a cache entry. Some users thought + this was supposed to be an environment variable. + +2003-07-24 10:58 king + + * Source/CMakeLists.txt, Source/cmDumpDocumentation.cxx, + Tests/CommandLineTest/CMakeLists.txt, + Tests/CommandLineTest/CommandLineTest.cxx, + Tests/StringFileTest/CMakeLists.txt: ENH: Added CommandLineTest + to add coverage for command line arguments to cmake executables. + This replaces the old DumpDocumentation test. + +2003-07-23 18:01 andy + + * Tests/StringFileTest/CMakeLists.txt: ENH: More coverage + +2003-07-23 17:59 king + + * Utilities/CMakeLists.txt: ENH: Added build of documentation for + CMakeSetup. + +2003-07-23 17:27 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h: ENH: + CheckOptions now takes const argv. + +2003-07-23 15:45 king + + * Source/cmSourceGroupCommand.cxx: ENH: Added backwards + compatability. + +2003-07-23 15:32 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmMakefile.cxx, + cmSourceGroup.cxx, cmSourceGroup.h, cmSourceGroupCommand.cxx, + cmSourceGroupCommand.h: ENH: Fully implemented SOURCE_GROUP + command. + +2003-07-23 14:31 andy + + * Source/: cmCPluginAPI.cxx, cmCPluginAPI.h: ENH: Fix compatibility + +2003-07-23 10:39 king + + * Source/cmSourceGroupCommand.cxx: BUG: Fixed off-by-one error in + file list loop. Fix submitted by David A. Karr. + +2003-07-23 10:26 andy + + * Source/cmGlob.cxx: ENH: On windows and apple handle + lowercase/upercase file name problem + +2003-07-23 09:10 king + + * Tests/StringFileTest/CMakeLists.txt: ENH: Added more verbose + output of what globbing results. + +2003-07-23 08:58 king + + * Utilities/CMakeLists.txt: BUG: Don't install ccmake documentation + if no ccmake was built. + +2003-07-23 08:37 king + + * bootstrap: ENH: Adding forced settings for prefix, docdir, + mandir, and datadir. + +2003-07-22 17:09 andy + + * DartConfig.cmake: ENH: Direct link to cmake bugs + +2003-07-22 13:53 andy + + * Source/cmCPluginAPI.cxx: ERR: Fix error on bad C++ compiler that + do not handle return void + +2003-07-22 13:15 andy + + * Source/cmTarget.cxx: BUG: Fix copy/paste typo + +2003-07-22 13:14 andy + + * Source/: cmCPluginAPI.cxx, cmCPluginAPI.h: ENH: Add DisplayStatus + +2003-07-22 12:21 andy + + * Tests/: LoadCommand/LoadedCommand.cxx, + LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/LoadedCommand.cxx, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: ENH: More + coverage + +2003-07-22 11:17 andy + + * Tests/StringFileTest/CMakeLists.txt: ENH: More coverage + +2003-07-22 10:45 andy + + * Tests/StringFileTest/CMakeLists.txt: ENH: Increase coverage + +2003-07-21 17:14 king + + * Utilities/CMakeLists.txt: ENH: Added generation of ccmake + documentation on UNIX. + +2003-07-21 17:13 king + + * Source/CursesDialog/ccmake.cxx: ENH: Added introduction paragraph + to documentation. + +2003-07-21 16:38 king + + * CMakeLists.txt, bootstrap, Modules/CMakeLists.txt, + Modules/Platform/CMakeLists.txt, Source/CMakeLists.txt, + Source/cmCommands.cxx, Source/cmConfigure.cmake.h.in, + Source/cmake.cxx, Templates/CMakeLists.txt, + Utilities/CMakeLists.txt: ENH: Added optional configuration of + data/doc/man dirs. This will be useful for package maintainers. + +2003-07-21 16:37 king + + * Source/: InitialConfigureFlags.cmake.in, cmConfigure.h.in: + Removing old file. This was used by old configure script which + has been removed. + +2003-07-21 15:29 andy + + * Source/cmGlob.cxx, Tests/StringFileTest/CMakeLists.txt: ENH: fix + glob on windows and add glob recurse test + +2003-07-21 15:02 king + + * Source/CMakeLists.txt: ENH: Added generation of cmake + documentation during build preocess. + +2003-07-21 14:58 king + + * Source/cmDocumentation.cxx: BUG: Text dump of documentation + should be in ascii mode. + +2003-07-21 14:57 king + + * Source/cmAddCustomTargetCommand.h: BUG: Fixed documentation + formatting. + +2003-07-21 14:44 andy + + * Source/: cmSourceFilesCommand.cxx, cmSourceFilesCommand.h: ENH: + Use new deprecation mechanism + +2003-07-21 14:43 andy + + * Source/cmFileCommand.h: ENH: Fix comment + +2003-07-21 14:42 andy + + * Source/: cmCommand.h, cmMakefile.cxx: ENH: Initial framework for + deprecated commands + +2003-07-21 13:48 andy + + * Tests/StringFileTest/CMakeLists.txt: ENH: add more coverage tests + +2003-07-21 13:46 andy + + * Source/cmGlob.cxx: ENH: Handle ^ as [^fu] + +2003-07-17 14:56 andy + + * Tests/StringFileTest/CMakeLists.txt: ENH: Add additional new line + after the string to match the change in file command + +2003-07-17 14:56 andy + + * Source/cmFileCommand.cxx: ENH: Remove extra new line after the + written string + +2003-07-17 14:54 andy + + * Modules/: CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake, + CheckFunctionExists.cmake, CheckIncludeFile.cmake, + CheckIncludeFileCXX.cmake, CheckIncludeFiles.cmake, + CheckLibraryExists.cmake, CheckSymbolExists.cmake, + CheckTypeSize.cmake, CheckVariableExists.cmake, + TestBigEndian.cmake, TestCXXAcceptsFlag.cmake: ENH: Extra new + line after output + +2003-07-16 15:38 hoffman + + * Modules/CMakeDetermineSystem.cmake, Source/cmGlobalGenerator.cxx: + ENH: set CMAKE_SYSTEM_VERSION for windows + +2003-07-16 14:52 king + + * Source/: cmFindPackageCommand.cxx, cmFindPackageCommand.h: ENH: + Added QUIET optional argument to block error message when _DIR + variable is not set. Also removed upper-casing of package name. + +2003-07-16 11:38 king + + * Tests/SystemInformation/: DumpInformation.cxx, + DumpInformation.h.in: ENH: Added dump of more files. Improved + robustness of dump. + +2003-07-15 12:52 hoffman + + * Source/cmAddCustomCommandCommand.cxx: ENH: better error checking + +2003-07-14 10:33 king + + * Source/cmMakefile.cxx: BUG: Custom commands should have variables + expanded before comparing with previously added custom commands. + +2003-07-14 10:13 martink + + * Source/cmFLTKWrapUICommand.cxx: some updates + +2003-07-14 09:44 martink + + * Source/cmFLTKWrapUICommand.cxx: some updates + +2003-07-14 09:31 martink + + * Source/: cmFLTKWrapUICommand.cxx, cmFLTKWrapUICommand.h: some + updates + +2003-07-14 09:15 andy + + * Source/: cmFileCommand.cxx, cmFileCommand.h, cmGlob.cxx, + cmGlob.h: ENH: Recurse subdirectories + +2003-07-11 17:21 king + + * bootstrap: ENH: Removed cmsys include directory from bootstrap + build of kwsys. It is no longer needed. + +2003-07-11 16:29 king + + * Utilities/Release/cmake_release.sh: BUG: Update of release + utilities must maintain tag. + +2003-07-11 14:14 andy + + * Modules/: CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake, + CheckFunctionExists.cmake, CheckIncludeFile.cmake, + CheckIncludeFileCXX.cmake, CheckIncludeFiles.cmake, + CheckLibraryExists.cmake, CheckSymbolExists.cmake, + CheckTypeSize.cmake, CheckVariableExists.cmake, Dart.cmake, + TestBigEndian.cmake, TestCXXAcceptsFlag.cmake: ENH: Replace + WRITE_FILE with FILE(WRITE and FILE(APPEND. Replace + MAKE_DIRECTORY with FILE(MAKE_DIRECTORY, replace STRING(ASCII + things + +2003-07-10 23:22 king + + * Source/cmake.h: ERR: Removed duplicate generator documentation.e + +2003-07-10 23:15 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h, cmakemain.cxx: + ENH: Added SEE ALSO section to generated man page. Minor + formatting improvements for generated text-only documentation. + +2003-07-10 23:14 king + + * Source/cmake.h: ENH: Added CMAKE_STANDARD_INTRODUCTION macro + defining standard documentation for inclusion in every binary's + documentation. + +2003-07-10 23:14 king + + * Source/cmGlobalUnixMakefileGenerator.cxx: ENH: Wrote basic + description in full documentation block. + +2003-07-10 14:48 andy + + * Tests/StringFileTest/StringFile.cxx: ENH: Add missing include + +2003-07-10 14:46 king + + * Source/kwsys/CMakeLists.txt: ERR: Generated source files need + access to kwsysPrivate.h. Just copy it to the build tree. + +2003-07-10 14:35 andy + + * Source/cmStringCommand.cxx: ERR: Remove unused variable + +2003-07-10 14:32 king + + * Source/kwsys/: Base64.c, CMakeLists.txt, Directory.cxx, + EncodeExecutable.c, ProcessUNIX.c, ProcessWin32.c, + RegularExpression.cxx, SystemTools.cxx, kwsysPrivate.h: ENH: + Added use of KWSYS_HEADER macro in c and cxx files to include + kwsys headers through their configured namespace. + +2003-07-10 14:29 andy + + * Tests/StringFileTest/CMakeLists.txt, + Tests/StringFileTest/InputFile.h.in, + Tests/StringFileTest/StringFile.cxx, Source/CMakeLists.txt: ENH: + Add test for string and file commands + +2003-07-10 13:25 andy + + * Source/: cmStringCommand.cxx, cmStringCommand.h: ENH: Add upper + and lower case support. Close Bug #79 - STRING TOUPPER and + TOLOWER + +2003-07-09 17:25 king + + * Source/cmSystemTools.cxx: ENH: Added escape support for ( and ). + +2003-07-09 17:17 king + + * Source/: cmListFileCache.cxx, cmSystemTools.cxx: ENH: Added + support for # characters inside quoted arguments and for escaping + # in a non-quoted argument. Improved parsing speed by not + compiling regular expressions on blank lines. + +2003-07-09 16:18 king + + * Source/kwsys/ProcessUNIX.c: ERR: Using strncpy instead of + snprintf for portability. + +2003-07-08 16:33 andy + + * Source/: cmFileCommand.cxx, cmFileCommand.h: ENH: Add + MAKE_DIRECTORY and modify documentation + +2003-07-08 16:27 andy + + * Source/cmGlob.cxx: ENH: Remove commented code + +2003-07-08 14:18 andy + + * bootstrap, Source/CMakeLists.txt, Source/cmFileCommand.cxx, + Source/cmFileCommand.h, Source/cmGlob.cxx, Source/cmGlob.h: ENH: + Add globbing to FILE command + +2003-07-08 13:27 king + + * Source/cmMakefile.cxx: BUG#65: Fixed inheritance of + CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_BINARY_DIR. + +2003-07-08 09:21 andy + + * Source/kwsys/CMakeLists.txt: ENH: Fix example + +2003-07-08 00:28 king + + * Source/cmDocumentation.cxx: ERR: Added missing std::. + +2003-07-07 23:20 king + + * CMakeLists.txt, Source/cmDocumentation.cxx, + Source/cmDumpDocumentation.cxx, Source/cmStandardIncludes.h: ENH: + Improved name of cmake version variables. They are now + CMake_VERSION (major.minor) and CMake_VERSION_FULL + (major.minor.patch). + +2003-07-07 22:54 king + + * Source/cmStringCommand.h: BUG: Removed extra newlines from help + text. + +2003-07-07 22:44 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h, cmakemain.cxx, + CursesDialog/ccmake.cxx: ENH: Added support to write multiple + help options with one command line. Output files can now also be + specified for the help options. + +2003-07-07 22:41 king + + * Source/kwsys/CMakeLists.txt: ERR: Removed useless set. + +2003-07-07 22:41 king + + * Source/cmCommands.cxx: ENH: Made ADD_DEPENDENCIES available from + bootstrapped cmake. It will be needed to build cmake. + +2003-07-07 21:52 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h, + cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalBorlandMakefileGenerator.h, + cmGlobalCodeWarriorGenerator.cxx, cmGlobalCodeWarriorGenerator.h, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.h, + cmGlobalUnixMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmake.cxx, cmake.h, + cmakemain.cxx: ENH: Registered global generators are now kept in + a table in the cmake instance. Added support for documentation + with a Generators section. + +2003-07-07 18:27 king + + * Source/cmSystemTools.cxx: BUG: Parsing of arguments from string + by RunCommand before passing to Process execution does not work + with backslashes in path names. Until this is fixed, we cannot + use Process execution from kwsys. + +2003-07-07 17:52 andy + + * bootstrap: ENH: Fix bootstrap to include ProcessUNIX.c + +2003-07-07 17:47 andy + + * Source/: cmCommands.cxx, cmFileCommand.cxx, cmFileCommand.h: ENH: + Start working on a general file manipulation command + +2003-07-07 17:45 andy + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Add + optional argument to GetLineFromStream which can let the caller + know whether there was a new line character at the end of the + line that was just read + +2003-07-07 13:36 andy + + * Docs/cmake-syntax.vim: Initial import of VIM syntax highlighting + file + +2003-07-07 09:38 king + + * Source/kwsys/ProcessWin32.c: ENH: Made call to FormatMessage more + robust. + +2003-07-07 09:16 king + + * Source/cmSystemTools.cxx: ENH: Using new Process + SetWorkingDirectory method instead of manually implementing it. + +2003-07-07 09:12 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c: ENH: Implemented + SetWorkingDirectory method. + +2003-07-07 09:10 king + + * Source/kwsys/ProcessWin32.c: ENH: Implemented SetWorkingDirectory + method on Windows. + +2003-07-07 08:41 king + + * Source/cmSystemTools.cxx: ENH: Using kwsys Process implementation + to implement RunCommand. + +2003-07-07 08:36 andy + + * Source/kwsys/: Process.h.in, ProcessUNIX.c: ENH: Start working on + Working Directory support + +2003-07-06 20:40 king + + * Source/kwsys/ProcessWin32.c: ENH: Using GetTempPath instead of + TEMP environment variable to get a location to write the Win9x + forwarding executable. + +2003-07-03 18:33 king + + * Source/kwsys/ProcessWin32.c: BUG: Argument parsers do not always + remove double quotes from around an argument that has no spaces. + +2003-07-03 12:50 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: ENH: add linker flags + +2003-07-03 11:39 hoffman + + * Source/cmCreateTestSourceList.cxx: ENH: null terminate at the end + of the list + +2003-07-03 07:58 king + + * Source/kwsys/CMakeLists.txt: BUG: Install target for standard + header wrappers must point at the std subdirectory in the + installation. + +2003-07-02 10:48 andy + + * DartConfig.cmake: ENH: Add proper links to bugtracker + +2003-07-02 10:37 andy + + * DartConfig.cmake: ENH: Add links to bugtracker + +2003-07-02 08:35 king + + * Source/kwsys/ProcessWin32.c: ERR: Added cast to remove warning. + We know the length of the string will not be beyond 2^31. + +2003-07-01 13:32 king + + * Source/kwsys/Base64.c: ERR: Added casts to remove type conversion + warnings. Pointer differences can be 64-bit, but unsigned long + is 32-bit on many platforms. We know we are not traversing more + data than can be handled by an unsigned long, though, because the + length argument is an unsigned long. + +2003-07-01 13:27 king + + * Source/kwsys/: ProcessFwd9x.c, ProcessWin32.c: ERR: Should use %p + to pass HANDLE values on a command line, not %d. + +2003-07-01 13:27 king + + * Source/kwsys/SystemTools.cxx: ERR: Removed unreachable code. + +2003-07-01 11:40 king + + * Source/kwsys/: Base64.h.in, Process.h.in: ERR: Reduced + requirements on preprocessor for export macro due to limitations + of Mac preprocessor. The preprocessor can be fixed by using + -no-cpp-precomp, but we don't want to require that option for + every source file that includes our headers. + +2003-07-01 08:54 king + + * Source/kwsys/EncodeExecutable.c: ERR: Added explicit cast from + size_t to int. We know that the data will not be out of range. + +2003-06-30 10:50 andy + + * bootstrap: ERR: Fix changes in kwsys for Configure.h and + StandardIncludes.hxx + +2003-06-30 10:44 andy + + * Source/kwsys/: Base64.c, ProcessFwd9x.c, ProcessWin32.c: ERR: + Remove warnings on Windows + +2003-06-30 10:30 king + + * Source/kwsys/: Base64.h.in, CMakeLists.txt, Configure.h.in, + Directory.cxx, Directory.hxx.in, EncodeExecutable.c, + Process.h.in, ProcessWin32.c, RegularExpression.cxx, + RegularExpression.hxx.in, SystemTools.hxx.in: ENH: Added DLL + support. + +2003-06-30 10:12 martink + + * Tests/CustomCommand/CMakeLists.txt: modified code to match cmake + mode + +2003-06-30 10:07 king + + * Source/kwsys/StandardIncludes.hxx.in: Removing old file. + +2003-06-30 09:56 andy + + * bootstrap: ENH: Fix checking for C++ compiler on Mac, remove + cmConfigure.h.tmp, so that nothing bad can happen if configure is + interrupted, reports kwsys sources in cmConfigure.h + +2003-06-30 08:49 king + + * Source/kwsys/Base64.h.in: ENH: Updated comments for doxygen. + +2003-06-30 08:48 king + + * Source/kwsys/Base64.c: BUG: Should define KWSYS_IN_BASE64_C, not + KWSYS_IN_PROCESS_C. + +2003-06-30 08:48 king + + * Source/kwsys/CMakeLists.txt: ENH: Using FOREACH to shorten + enabling of C components. + +2003-06-29 21:42 andy + + * CMakeLists.txt, Source/kwsys/Base64.c, Source/kwsys/Base64.h.in, + Source/kwsys/CMakeLists.txt: ENH: Initial import of Base64 + +2003-06-29 20:30 king + + * CMakeLists.txt: ENH: Enabling build of kwsys's Process class. + This will be needed for ctest. + +2003-06-29 20:20 king + + * Docs/cmake-mode.el: ENH: Added comment-region support. + +2003-06-27 09:48 king + + * CMakeLists.txt: ERR: Disabling multiply defined symbols warning + for linking executables on IRIX. The compiler's prelinker does + not add weak symbols, so template instantiations are duplicated. + +2003-06-27 08:46 martink + + * Source/: cmAuxSourceDirectoryCommand.cxx, + cmTryCompileCommand.cxx: fix compiler warnings + +2003-06-26 13:39 king + + * Source/kwsys/CMakeLists.txt: ENH: Updated documentation to + describe enabling of classes. + +2003-06-26 09:44 andy + + * bootstrap: ENH: Attempt to handle OSF compiler flags + +2003-06-25 09:32 king + + * Source/kwsys/testProcess.c: ERR: Fixed use of non-constant + initializer. + +2003-06-25 08:29 king + + * Source/kwsys/Directory.cxx: ERR: Fixed conversion warning. + +2003-06-24 21:37 lorensen + + * Source/kwsys/SystemTools.cxx: ERR: portability. + +2003-06-24 16:35 martink + + * Source/kwsys/SystemTools.cxx: compiler fix + +2003-06-24 15:24 martink + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: moved depend code into + cmTarget + +2003-06-24 15:21 martink + + * Source/: cmMakefile.cxx, cmMakefile.h, kwsys/SystemTools.cxx: + performance improvements + +2003-06-24 15:11 martink + + * Source/cmMacroCommand.cxx: performance improvements + +2003-06-24 15:10 martink + + * Source/: cmTarget.cxx, cmTarget.h: moved function into cmTarget + +2003-06-24 10:16 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ERR: Renamed + superclass typedef from SystemTools to Superclass to avoid + conflict across platforms. + +2003-06-24 09:02 king + + * Source/kwsys/SystemTools.cxx: ERR: std->kwsys_std. + +2003-06-24 08:19 king + + * Source/cmSystemTools.h: ERR: Typedefs are not inherited on SGI + and Borland. + +2003-06-23 16:26 martink + + * Source/: cmForEachCommand.cxx, cmMacroCommand.cxx: perf + improvement + +2003-06-23 16:25 martink + + * Source/cmCustomCommand.h: performance improvement + +2003-06-23 14:10 king + + * CMakeLists.txt, bootstrap, Source/CMakeLists.txt, + Source/cmBuildNameCommand.cxx, Source/cmCTest.cxx, + Source/cmCacheManager.cxx, Source/cmConfigureFileCommand.cxx, + Source/cmIfCommand.cxx, Source/cmListFileCache.cxx, + Source/cmLoadCacheCommand.cxx, + Source/cmLocalCodeWarriorGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmMakeDepend.cxx, Source/cmMakeDepend.h, + Source/cmMakefile.cxx, Source/cmRegularExpression.cxx, + Source/cmRegularExpression.h, Source/cmSiteNameCommand.cxx, + Source/cmSourceGroup.h, Source/cmStringCommand.cxx, + Source/cmSystemTools.cxx, Source/cmUseMangledMesaCommand.cxx, + Source/cmaketest.cxx: ENH: Merged use of the kwsys + RegularExpression class instead of cmRegularExpression. + +2003-06-23 14:05 king + + * Source/kwsys/RegularExpression.hxx.in: ERR: Fixed documentation + to read RegularExpression instead of cmRegularExpression. + +2003-06-23 11:16 martink + + * Source/cmTarget.cxx: removed some no longer required code + +2003-06-23 08:58 king + + * CMakeLists.txt, bootstrap, Source/CMakeLists.txt, + Source/cmAuxSourceDirectoryCommand.cxx, Source/cmDirectory.cxx, + Source/cmDirectory.h, Source/cmMakeDirectoryCommand.cxx, + Source/cmMakefile.cxx, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTryCompileCommand.cxx, + Source/CursesDialog/cmCursesPathWidget.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt: ENH: Merged + use of kwsys library. + +2003-06-23 08:58 king + + * Makefile.in, configure, configure.in, Source/Makefile.in: ENH: + Configure script now just invokes bootstrap script. + +2003-06-23 08:56 king + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: ENH: Removed + cmake-specific functions. + +2003-06-23 08:56 king + + * Source/kwsys/CMakeLists.txt: BUG: Need include regular expression + to match all files. + +2003-06-21 11:57 andy + + * bootstrap: ENH: Add copyright, cmConfigure.h is now touched only + when it is modified, remove some spaces from output, add + procedure that copies file and replaces atstring with another + string + +2003-06-20 20:33 martink + + * Source/cmMakefile.cxx: fix to expand variables in custom command + outputs and main dependencies + +2003-06-20 14:10 king + + * Source/kwsys/CMakeLists.txt: ENH: Changed configuration of header + directory to specify it without the namespace. + +2003-06-20 14:10 hoffman + + * Docs/cmake-mode.el: BUG: fix highlight for comments in multiple + buffers + +2003-06-20 13:56 martink + + * Source/cmMakefile.cxx: bug in not expanding variables for custom + commands in targets + +2003-06-20 11:23 martink + + * Source/cmMakefile.cxx: minor perf improvement + +2003-06-19 18:57 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, + RegularExpression.hxx.in, SystemTools.hxx.in, + kwsys_std_fstream.h.in, kwsys_std_iosfwd.h.in, + kwsys_std_iostream.h.in, kwsys_std_sstream.h.in: ENH: Added full + configuration of namespace even for Configure.hxx macro + definitions. + +2003-06-19 16:23 hoffman + + * Docs/cmake-mode.el: add a comment + +2003-06-19 15:05 king + + * Docs/: cmake-indent.vim, cmake-mode.el: Added copyright. + +2003-06-19 14:37 andy + + * Docs/cmake-indent.vim: Initial import: indentation file for vim + +2003-06-19 14:30 king + + * Docs/cmake-mode.el: Minor tweaks for anal cases of indentation. + +2003-06-19 14:27 martink + + * Source/cmMakefile.cxx: bug fix for finding source files + +2003-06-19 14:27 martink + + * Source/: cmSystemTools.cxx, cmSystemTools.h: new function + +2003-06-19 14:17 king + + * Docs/cmake-mode.el: BUG: Don't open a block if a command starts + with IF in its name. + +2003-06-19 13:38 martink + + * Docs/cmake-mode.el: fix to use function-name + +2003-06-19 13:23 king + + * Docs/cmake-mode.el: Fixed slow regex for indentation. + +2003-06-19 11:11 king + + * Docs/cmake-mode.el: ENH: Wrote more robust regular expressions + for indenting. + +2003-06-19 11:07 martink + + * Docs/cmake-mode.el: emacs mode + +2003-06-18 17:28 king + + * Source/kwsys/kwsysHeaderDump.pl: Tool to dump macros for + redefining C header namespaces. + +2003-06-18 17:27 king + + * Source/kwsys/: CMakeLists.txt, testProcess.c: ENH: Added test for + Process implementation. + +2003-06-18 17:27 king + + * Source/kwsys/ProcessWin32.c: BUG: Must return Exception status + correctly. + +2003-06-18 17:19 king + + * Source/kwsys/ProcessUNIX.c: Removed Exception_Abort because there + is no windows version. Also made ExitValue consistent with + windows when a signal kills the process. + +2003-06-18 17:19 king + + * Source/kwsys/Process.h.in: Removed Exception_Abort because there + is no windows version. Also removed stray typedef keywords. + +2003-06-18 17:06 king + + * Source/kwsys/: Process.h.in, ProcessUNIX.c, ProcessWin32.c, + test1.cxx: ENH: Added documentation to interface. Finished + process exit code interpretation implementation prototype. + +2003-06-18 11:43 hoffman + + * Source/cmStringCommand.h: remove non-html safe stuff + +2003-06-18 09:13 hoffman + + * Source/cmMakefile.cxx: BUG: fix not being able to find generated + files in the binary tree + +2003-06-17 17:13 martink + + * Source/cmLocalVisualStudio7Generator.cxx: fix for bad assumption + on custom rules + +2003-06-17 16:54 martink + + * Source/cmLocalVisualStudio6Generator.cxx: fix for bad assumption + +2003-06-17 15:13 martink + + * Source/cmLocalVisualStudio6Generator.cxx: fix for bad assumption + +2003-06-16 10:20 martink + + * Source/cmLocalVisualStudio6Generator.cxx: fix for vs6 rule files + +2003-06-13 16:59 king + + * Source/cmMakefile.cxx: BUG: Fixed translation of relative path + names to full path names. + +2003-06-13 16:47 king + + * Source/cmSetSourceFilesPropertiesCommand.cxx: BUG: Fixed crash + when source file cannot be looked up correctly. + +2003-06-13 14:15 king + + * Source/cmake.cxx: BUG: Fixed check for existence of + CMakeLists.txt file in top-level source directory before first + configure. + +2003-06-12 16:43 king + + * Modules/Platform/Windows-bcc32.cmake: BUG: Stack size in + generated programs should be 10 meg, not 256. + +2003-06-12 16:18 king + + * Source/kwsys/ProcessWin32.c: ERR: Added error check for malloc of + process control structure. + +2003-06-12 15:58 king + + * Source/kwsys/ProcessWin32.c: ERR: Using GetCurrentProcessId + instead of _getpid so we don't need to include the system + process.h header. Also creating pipe threads with 1K stacks to + save memory. + +2003-06-11 11:00 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Uninitialized + std::string returns bad pointers from c_str() on some platforms. + +2003-06-11 10:21 king + + * Source/kwsys/CMakeLists.txt: ENH: EXECUTABLE_OUTPUT_PATH is now + always set to get around cmake 1.6.7 dependency problems. Moved + default header directory inside the build tree instead of up one + level. User projects can now set the header directory. + +2003-06-11 10:11 hoffman + + * Modules/CMakeDetermineSystem.cmake: ENH: add processor type of + win32 + +2003-06-11 10:07 hoffman + + * Modules/: CMakeDetermineSystem.cmake, CMakeSystem.cmake.in: ENH: + add CMAKE_SYSTEM_PROCESSOR + +2003-06-11 09:45 king + + * Source/kwsys/CMakeLists.txt: ERR: Added custom command that takes + advantage of new syntax. + +2003-06-11 09:44 king + + * Source/kwsys/ProcessWin32.c: ERR: Removed unused variables. + +2003-06-11 09:44 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: When executable + output path is not set, we still need to generate the full path + to the executable target. + +2003-06-10 17:39 king + + * Source/kwsys/CMakeLists.txt: ERR: Added work-around for cmake + 1.6.7 bug in borland makefile generator. + +2003-06-10 16:56 king + + * Source/kwsys/CMakeLists.txt: BUG: Need to add ANSI C flags for + some platforms. + +2003-06-10 16:55 king + + * Source/kwsys/ProcessUNIX.c: ERR: Added static specifier to static + function definitions to quiet warnings on HP compiler. + +2003-06-10 16:15 king + + * Source/kwsys/ProcessWin32.c: BUG: Don't show a console + application's window. + +2003-06-10 15:50 king + + * Source/kwsys/test1.cxx: ENH: Added use of process execution. + +2003-06-10 15:46 king + + * Source/kwsys/: CMakeLists.txt, EncodeExecutable.c, Process.h.in, + ProcessFwd9x.c, ProcessUNIX.c, ProcessWin32.c: ENH: Added Process + execution implementation. + +2003-06-10 15:45 king + + * Source/kwsys/SystemTools.cxx: ENH: Moved disabling of warnings to + after kwsys includes. + +2003-06-10 15:44 king + + * Source/kwsys/kwsys_std.h.in: ENH: Disabled warning 4786. + +2003-06-06 09:58 andy + + * Modules/FindVTK.cmake: BUG: When VTK is not found, it should be + fatal error + +2003-06-06 09:57 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: BUG: When only loading + ccmake cache, do not allow generate + +2003-06-06 09:06 martink + + * Source/cmCreateTestSourceList.cxx: undid change because other + changes make it no longer neccesary + +2003-06-05 16:45 martink + + * Source/: cmMakefile.cxx, cmMakefile.h: more custom command + +2003-06-05 16:12 martink + + * Source/cmMakefile.cxx: more changes to support full paths + +2003-06-05 15:28 martink + + * Source/cmMakefile.cxx: perf improvement + +2003-06-05 15:18 martink + + * Source/cmMakefile.cxx: more changes to handle full paths + correctly + +2003-06-05 14:48 martink + + * Source/cmQTWrapUICommand.cxx: minor update for new custom + commands + +2003-06-05 14:40 martink + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmMakefile.cxx, cmTarget.cxx: + more crazt changes source files now must match with full path + +2003-06-05 14:37 martink + + * Source/cmITKWrapTclCommand.cxx: updated for new custom command + +2003-06-05 14:37 martink + + * Source/cmCreateTestSourceList.cxx: minor fix + +2003-06-04 19:04 martink + + * Source/cmMakefile.cxx: hopeful fix for backwards compat + +2003-06-04 18:50 martink + + * Source/cmLocalVisualStudio6Generator.cxx: minor fix + +2003-06-04 16:06 martink + + * Source/cmMakefile.cxx: tricky fix for backwards compat + +2003-06-04 14:25 hoffman + + * Tests/CustomCommand/: generator.cxx, wrapper.cxx: minor fixes + +2003-06-04 14:01 hoffman + + * Source/cmMakefile.cxx: better error reporting + +2003-06-04 14:00 hoffman + + * Source/cmMakefile.cxx: ENH: allow duplicate commands with the + same output to be reduced automatically to one command + +2003-06-04 13:55 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: bug fix for vs6 custom + commands + +2003-06-04 13:54 hoffman + + * Templates/UtilityHeader.dsptemplate: fix for new custom commands + +2003-06-04 13:42 hoffman + + * Source/: cmCustomCommand.cxx, cmCustomCommand.h, + cmLocalVisualStudio7Generator.cxx, cmMakefile.cxx: ENH: allow + duplicate commands with the same output to be reduced + automatically to one command + +2003-06-04 11:46 hoffman + + * Source/cmAddCustomCommandCommand.h: command should nto be + inherited + +2003-06-04 10:46 hoffman + + * Tests/Wrapping/CMakeLists.txt: minor fix + +2003-06-04 10:13 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: bug fix + +2003-06-04 09:02 hoffman + + * Tests/CustomCommand/: CMakeLists.txt, generator.c, generator.cxx, + wrapper.c, wrapper.cxx: fixes for HP + +2003-06-04 09:00 king + + * bootstrap: ERR: Cannot use iostream.h for strict C++ compiler + sanity check. Using a small class instead. + +2003-06-04 08:42 martink + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: compielr warnings + +2003-06-04 08:40 martink + + * Source/cmMakefile.cxx: compielr errors on como + +2003-06-03 14:55 martink + + * Source/: cmCustomCommand.cxx, cmLocalUnixMakefileGenerator.cxx, + cmMakefile.cxx, cmSourceGroup.cxx: warning fixes + +2003-06-03 14:45 hoffman + + * Modules/Dart.cmake: ENH: add all targets for dashboard build + types + +2003-06-03 10:47 martink + + * Source/: cmAddCustomCommandCommand.h: better docs + +2003-06-03 10:33 martink + + * Tests/CustomCommand/: CMakeLists.txt, doc1.tex, foo.in, + generator.c, wrapper.c, wrapped.h: new test + +2003-06-03 10:30 martink + + * Source/: CMakeLists.txt, cmAddCustomCommandCommand.cxx, + cmAddCustomCommandCommand.h, cmAddCustomTargetCommand.cxx, + cmAddCustomTargetCommand.h, cmCPluginAPI.cxx, cmCPluginAPI.h, + cmCustomCommand.cxx, cmCustomCommand.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmLocalUnixMakefileGenerator.cxx, cmLocalUnixMakefileGenerator.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmMakefile.cxx, cmMakefile.h, + cmSetSourceFilesPropertiesCommand.cxx, cmSourceFile.h, + cmSourceGroup.cxx, cmSourceGroup.h, cmSystemTools.cxx, + cmSystemTools.h, cmTarget.h: yikes added new custom command + support + +2003-06-02 16:37 martink + + * Docs/: CMake04.rtf, CMake12p2.rtf, CMake14.rtf, CMake16.rtf: add + release docs to cvs + +2003-05-29 15:30 martink + + * Source/: cmGetSourceFilePropertyCommand.cxx, + cmGetTargetPropertyCommand.cxx: minor bug fix + +2003-05-29 11:14 andy + + * Source/CursesDialog/: ccmake.cxx, cmCursesMainForm.cxx, + cmCursesMainForm.h: ENH: On envocation of ccmake check if + directories are correct, but do not rerun configure + +2003-05-29 11:14 andy + + * Source/: cmake.cxx, cmake.h: ENH: Abstract pre configure check in + a separate method + +2003-05-29 09:34 hoffman + + * Source/: cmCTest.cxx, cmRegularExpression.cxx, + cmSetSourceFilesPropertiesCommand.cxx, cmTarget.cxx: ENH: remove + warnings from borland 6 compiler + +2003-05-28 15:52 andy + + * Source/CursesDialog/ccmake.cxx: ENH: Do not do configure first + time. This way ccmake loads fast. + +2003-05-28 09:21 hoffman + + * Source/: cmCTest.cxx, cmDynamicLoader.cxx, + cmGlobalVisualStudio71Generator.cxx, cmSystemTools.cxx, + CTest/cmCTestSubmit.cxx: Remove some borland 6 warnings + +2003-05-28 07:53 andy + + * Modules/FindQt.cmake: ENH: More locations + +2003-05-24 10:07 hoffman + + * Source/: cmAbstractFilesCommand.cxx, cmEndIfCommand.cxx, + cmGlobalGenerator.cxx, cmIfCommand.cxx, cmSourceFilesCommand.cxx, + cmSourceFilesRemoveCommand.cxx, cmTarget.cxx, + cmWrapExcludeFilesCommand.cxx: ENH: add stdlib.h for portability + to borland 6 + +2003-05-23 16:40 hoffman + + * Source/: cmCTest.cxx, cmMakefile.cxx, cmStringCommand.cxx, + cmake.cxx: ENH: add some includes for borland 6 + +2003-05-23 09:35 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake: ENH: add LDFLAGS as + an initial value for all linker flags, good for -64 + +2003-05-19 13:41 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: fix for .def files and + nmake and spaces in the path + +2003-05-16 16:33 king + + * Modules/: TestForAnsiForScope.cxx: ERR: Removed warning for + unused variable. + +2003-05-16 15:20 king + + * Source/: cmLocalUnixMakefileGenerator.cxx: BUG: When building a C + executable, we should add CMAKE_SHARED_LIBRARY_C_FLAGS, not + CMAKE_SHARED_LIBRARY_LINK_FLAGS. The latter is already added by + the link line procedure. + +2003-05-16 15:18 king + + * Modules/Platform/: AIX.cmake: BUG: Need -brtl when creating + shared libraries. Also added -bexpall (AIX equivalent to Linux's + -rdynamic) when building executables. + +2003-05-15 15:15 king + + * Source/CursesDialog/cmCursesMainForm.cxx: BUG: Don't report an + error of output was generated but no error was set. Merging from + trunk to 1.6 branch. + +2003-05-15 15:05 king + + * Source/cmGlobalVisualStudio6Generator.cxx: Removed useless + lower-casing and improved error message. Merged from trunk to + 1.6 branch. + +2003-05-15 14:58 king + + * Modules/FindFLTK.cmake: Looking in another place (merge from + trunk). + +2003-05-15 14:54 king + + * Source/CursesDialog/cmCursesStringWidget.cxx: Attempt to fix SGI + ccmake problem (thank you Clint Miller). Merging from trunk to + 1.6 branch. + +2003-05-15 14:45 king + + * Source/cmMacroCommand.cxx: BUG: Merging fix from trunk into 1.6 + branch. Report a missing ENDMACRO. + +2003-05-15 09:35 andy + + * bootstrap: Several fixes before bootstrap is ready for + prime-time: 1. Add --version flag to display version of CMake 2. + Add comments to explain what is going on 3. Move CMAKE_ROOT_DIR + and CMAKE_BOOTSTRAP to cmConfigure.h 4. Forward CC, CXX, and MAKE + to cmake 5. Add more instructions + +2003-05-14 15:38 king + + * Utilities/Release/cmake_release.sh: Updated for 1.6.7 release. + +2003-05-14 14:14 king + + * Source/cmMakefile.h, Utilities/Release/cmake_release.sh: ENH: + Updated version number to 1.6.7 from 1.6.6. + +2003-05-14 12:10 king + + * Source/cmGlobalGenerator.cxx: BUG: Work-around for SGI MipsPro + bug where #error doesn't return an error to make. Merged onto + 1.6 branch from trunk. + +2003-05-14 12:06 king + + * Source/cmGlobalGenerator.cxx: BUG: Work-around for SGI MipsPro + bug where #error doesn't return an error to make. + +2003-05-14 09:27 andy + + * bootstrap: ENH: Add parallel build support, fix bug in verbose + and clean output when adding arguments + +2003-05-14 09:19 andy + + * bootstrap: ENH: Add better error reporting + +2003-05-14 08:45 king + + * Source/cmake.cxx: BUG: Need to remove the MAKEFLAGS when cmake + starts. If cmake is run from inside make, we don't want the + try-compiles to inherit the makeflags. + +2003-05-14 08:40 king + + * Source/cmake.cxx: ERR: Fixed string literal->char* conversion + warning. + +2003-05-13 16:51 king + + * Source/cmake.cxx: BUG: Need to remove the MAKEFLAGS when cmake + starts. If cmake is run from inside make, we don't want the + try-compiles to inherit the makeflags. + +2003-05-13 16:10 king + + * Source/: cmGlobalGenerator.cxx, cmake.cxx: ENH: When the + initially configured generator is invalid, allow the user to + change the generator without deleting the cache by hand. + +2003-05-13 14:26 king + + * Source/: cmGlobalGenerator.cxx: ENH: Improved error message when + a wrong generator is selected. + +2003-05-13 14:05 king + + * Source/cmDynamicLoader.cxx: ERR: Removed unused parameter. + +2003-05-13 13:54 king + + * Source/cmSystemTools.cxx: ERR: Removed unused variable from + previous merge. + +2003-05-13 13:52 king + + * Source/: cmCacheManager.cxx, cmConfigureFileCommand.cxx, + cmListFileCache.cxx, cmLocalVisualStudio6Generator.cxx, + cmMakeDepend.cxx, cmOutputRequiredFilesCommand.cxx, + cmSystemTools.cxx, cmSystemTools.h, cmUseMangledMesaCommand.cxx: + BUG: Using GetLineFromStream instead of getline due to buggy + stream implementations on some platforms. Merged from trunk into + branch 1.6. + +2003-05-13 13:26 hoffman + + * Modules/CMakeVS71FindMake.cmake, Source/CMakeLists.txt, + Source/cmGlobalVisualStudio71Generator.cxx, + Source/cmGlobalVisualStudio71Generator.h, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, Source/cmake.cxx: ENH: + Adding VS 7.1 generator to 1.6 branch. + +2003-05-13 12:04 king + + * Modules/CheckIncludeFiles.cmake, Modules/CheckSymbolExists.cmake, + Modules/FindCABLE.cmake, Modules/Platform/SunOS.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalVisualStudio6Generator.cxx, + Source/cmLocalVisualStudio7Generator.cxx, + Source/cmLocalVisualStudio7Generator.h, + Source/cmRemoveCommand.cxx, Source/cmStringCommand.h, + Source/cmaketest.cxx, Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: BUG: Merged + fixes from main tree into 1.6 branch. + +2003-05-13 11:42 hoffman + + * Source/cmGlobalVisualStudio71Generator.h: Change name of 71 + generator + +2003-05-13 09:50 king + + * Source/kwsys/SystemTools.cxx: ERR: Removed use of std::string != + operator due to bug in SGI compiler's library. + +2003-05-13 09:42 king + + * Source/kwsys/CMakeLists.txt: ERR: Test for ansi streams may need + to use iosfwd for test because some compilers provide an iostream + header that is old streams. + +2003-05-13 08:38 king + + * Source/kwsys/SystemTools.cxx: ERR: Added forward declarations of + system functions for como compiler. + +2003-05-12 13:43 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, + kwsys_std_fstream.h.in, kwsys_std_iosfwd.h.in, + kwsys_std_iostream.h.in, kwsys_std_sstream.h.in: ENH: Added + KWSYS_FORCE_OLD_STREAMS option to force use of non-ansi stream + headers even if they are available. + +2003-05-12 13:33 king + + * Source/kwsys/: CMakeLists.txt, StandardIncludes.hxx.in: ENH: + Removed old (unused) StandardIncludes header. + +2003-05-12 13:27 king + + * Source/kwsys/kwsys_std_iosfwd.h.in: ERR: Need to move forward + declarations of non-ansi streams into std namespace when it is + available. + +2003-05-12 13:15 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, SystemTools.cxx, + SystemTools.hxx.in, kwsys_std.h.in, kwsys_std_fstream.h.in, + kwsys_std_iosfwd.h.in, kwsys_std_iostream.h.in, + kwsys_std_sstream.h.in: ENH: Added wrappers around the std stream + headers to make them look like ansi streams on all platforms. + +2003-05-09 15:47 hoffman + + * Modules/CMakeVS71FindMake.cmake: add find make program for 71 + +2003-05-09 09:32 hoffman + + * Modules/Platform/Windows-bcc32.cmake: BUG: remove typo from file + +2003-05-08 16:59 hoffman + + * Source/: CMakeLists.txt, cmGlobalVisualStudio71Generator.cxx, + cmGlobalVisualStudio71Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmake.cxx: add support for vs 71 + +2003-05-08 16:52 king + + * Source/CMakeLists.txt: ERR: Fixed arguments to kwsys's ADD_TEST + call for msvc6. + +2003-05-08 16:48 king + + * Source/kwsys/CMakeLists.txt: BUG: Need to invert test result for + ansi string stream. + +2003-05-08 14:49 king + + * Source/CMakeLists.txt: ENH: Added kwsys test. + +2003-05-08 14:46 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, Directory.cxx, + Directory.hxx.in, RegularExpression.hxx.in, + StandardIncludes.hxx.in, kwsys_std.h.in: ENH: Reduced header + dependencies and cleaned up inclusion of standard headers. + +2003-05-08 14:17 king + + * Source/kwsys/: CMakeLists.txt, README.itk, README.txt, test1.cxx: + ENH: Setup for testing as a stand-alone project. + +2003-05-08 09:55 hoffman + + * Modules/Platform/Windows-bcc32.cmake: BUG: fix for borland win32 + exe builds + +2003-05-08 09:43 martink + + * Modules/Platform/: Windows-bcc32.cmake: BUG: remove -H flags as + they cause crashes on oldwww + +2003-05-06 10:16 andy + + * Source/ctest.cxx: ERR: Remove warning + +2003-05-05 10:24 hoffman + + * Modules/Platform/Windows-bcc32.cmake: ENH: change the default + borland stack size + +2003-05-05 10:23 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: BUG: add linker flags + for modules + +2003-05-05 10:23 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: remove 64 bit + warnings + +2003-05-05 09:54 andy + + * Modules/CheckIncludeFiles.cmake: ERR: Remove warning for main + returning void. + +2003-05-05 08:42 andy + + * Source/: CMakeLists.txt, cmaketest.cxx, cmaketest.h.in: BUG: Fix + some dependencies for location of executables + +2003-05-05 08:42 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Add support for + make test even for fresh build of cmake + +2003-05-02 14:05 martink + + * Modules/Dart.cmake: fixed andy sloppy code again + +2003-05-02 13:57 andy + + * Modules/Dart.cmake, Modules/DartConfiguration.tcl.in, + Source/CMakeLists.txt, Source/ctest.cxx: ENH: Fix some dart + issues. Now it works fine without dart. + +2003-05-02 13:56 andy + + * Source/cmake.cxx: ENH: New location of cmake binaries + +2003-05-02 13:54 andy + + * Source/cmaketest.cxx: ENH: New location of cmake + +2003-05-02 13:54 andy + + * Source/CTest/cmCTestSubmit.cxx: ENH: Be just a bit more verbose + +2003-05-02 11:29 andy + + * CMakeLists.txt, Source/CMakeLists.txt: ENH: Executables should go + to the bin directory + +2003-05-01 07:56 andy + + * Source/CTest/cmCTestSubmit.cxx: ERR: Remove warnings + +2003-04-30 07:32 andy + + * Source/cmake.h: ERR: Run should return a value + +2003-04-29 17:23 andy + + * Source/: CMakeLists.txt, CTest/CMakeLists.txt: ENH: Make Curl + code to be built by default + +2003-04-29 10:07 andy + + * Source/cmakemain.cxx: ENH: Add argument -N which prevents CMake + from doing configure and generate. This should be improved at + some point that it will do all the error checking such as whether + the CMakeLists.txt exists etc. It should essentially load cache, + go through cmake lists, but not modify cache and other files in + the build directory. The second feature is ability to display + cache values. You run with argument -L (or -LH /-LA / -LAH) and + it will display all nonadvanced cached variables (-L) / all + cached variable (-LA) / and cached variables with corresponding + help string (-LH -LAH). + +2003-04-29 10:04 andy + + * Source/: cmake.cxx, cmake.h: ENH: Add additional optional + argument to Run. If it is true, it will only set paths and load + cache. It will not do configure and gfenerate + +2003-04-29 10:02 andy + + * Source/: cmCacheManager.cxx, cmCacheManager.h: ENH: Add method to + convert from CacheEntryType to string + +2003-04-28 13:16 martink + + * Source/cmMacroCommand.cxx: better error reporting + +2003-04-25 15:16 andy + + * Source/: CTest/CMakeLists.txt, CMakeLists.txt: ENH: Enable CTest + to be build as a part of CMake + +2003-04-25 14:52 andy + + * Source/ctest.cxx: ENH: Rename option -D to -C because we will use + -D later + +2003-04-25 14:51 andy + + * Source/cmCommands.cxx: ERR: Set source files properties is needed + for Curl build + +2003-04-25 14:50 andy + + * Source/CTest/cmCTestSubmit.cxx: ERR: Remove warning because SCP + not implemented + +2003-04-24 13:25 berk + + * Source/: cmSystemTools.cxx: minor fix + +2003-04-23 17:24 jjomier + + * Source/kwsys/Directory.hxx.in: FIX: warnings, disabling 4786 + +2003-04-23 13:58 martink + + * Source/CTest/CMakeLists.txt: fix some incldue paths + +2003-04-22 16:10 king + + * Modules/FindCABLE.cmake: ENH: Updated search paths to newest + values from Cable. + +2003-04-22 14:32 andy + + * bootstrap: ENH: Add SGI -LANG:std support + +2003-04-18 10:01 andy + + * Source/cmCTest.cxx: ENH: Cleanup + +2003-04-18 10:00 andy + + * Source/cmCTest.cxx: Even better error detection on AIX + +2003-04-18 09:48 andy + + * Source/cmCTest.cxx: Better AIX detection + +2003-04-17 15:20 andy + + * Source/cmCTest.cxx: This is really an error + +2003-04-17 13:13 andy + + * bootstrap: Support LDFLAGS + +2003-04-17 13:13 andy + + * Source/cmCTest.cxx: ENH: Add AIX warerr + +2003-04-17 11:59 martink + + * Source/cmLocalCodeWarriorGenerator.cxx: warning fix hopefully + +2003-04-17 11:17 andy + + * DartConfig.cmake: More attempt to make continuous email work + +2003-04-17 08:47 martink + + * Source/cmDynamicLoader.cxx: fix one warning + +2003-04-17 08:23 andy + + * DartConfig.cmake: Attempt to enable sending of e-mails from + continuous + +2003-04-17 08:03 hoffman + + * Source/cmCommands.cxx: BUG: fix compile error on windows because + of windows.h + +2003-04-17 08:02 andy + + * CMakeLists.txt, bootstrap, configure, configure.in: BUG: Rename + Bootstrap directory to Bootstrap.cmk, so that on platforms such + as Windows and Mac OSX it will break during in-source build + +2003-04-16 17:06 andy + + * DartConfig.cmake: ENH: cleanup + +2003-04-16 16:20 martink + + * Source/cmDynamicLoader.cxx: fix one warning + +2003-04-16 16:17 martink + + * Source/cmCommands.cxx: streamline bootstrap + +2003-04-16 15:40 martink + + * Source/cmake.cxx: minor fix + +2003-04-16 14:47 martink + + * Source/: CMakeLists.txt, cmLocalCodeWarriorGenerator.cxx, + cmLocalCodeWarriorGenerator.h, cmake.cxx: add COdeWarrior back in + for testing + +2003-04-16 14:13 andy + + * Source/cmDynamicLoader.cxx: Attempt to make unloading work on OSX + +2003-04-16 13:41 andy + + * Source/cmCTest.cxx: Fix update output + +2003-04-16 13:33 hoffman + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommandOneConfig/CMakeLists.txt: ENH: add a double try + compile to fix crazy make on hp + +2003-04-11 18:05 kentwilliams + + * Source/kwsys/SystemTools.cxx: took out an orphan endif + +2003-04-11 16:22 kentwilliams + + * Source/kwsys/: SystemTools.hxx.in, SystemTools.cxx: remove + redundant function and eliminate need for strcasecmp + +2003-04-11 13:36 king + + * Source/kwsys/README.itk: ENH: Added documentation for ITK. + +2003-04-11 07:27 lorensen + + * Source/kwsys/SystemTools.cxx: ERR: Borland fix for stricmp. ERR: + removed itk dependencies. + +2003-04-10 13:41 kentwilliams + + * Source/kwsys/: SystemTools.cxx, SystemTools.hxx.in: Removed + platform-specific functions from Code/IO/itkIOCommon, fixed code + to use kwsys/SystemTools + +2003-04-10 09:07 andy + + * Source/cmCTest.cxx: Do safe division instead of fixing result + +2003-04-10 09:03 king + + * Source/kwsys/SystemTools.cxx: ERR: Removed unused parameter and + truncated debug symbol warnings. + +2003-04-09 08:08 andy + + * Source/cmCTest.cxx: Attempt to fix FIXNUM + +2003-04-08 13:14 king + + * Source/kwsys/SystemTools.cxx: ERR: Fixed typo. + cmRegularExpression -> RegularExpression. + +2003-04-08 13:10 king + + * Source/kwsys/: CMakeLists.txt, Configure.hxx.in, Directory.cxx, + Directory.hxx.in, RegularExpression.cxx, + RegularExpression.hxx.in, StandardIncludes.hxx.in, + SystemTools.cxx, SystemTools.hxx.in: ENH: Added kwsys library for + platform-independent system tools. + +2003-04-08 10:57 andy + + * Source/: cmCTest.cxx, cmCTest.h: Remove nan and inf, use + iostreams to set precision, fix file name, and remove bogus files + +2003-04-08 07:16 andy + + * Source/cmCTest.cxx: Remove push_back on string. Why can't STL be + standard? + +2003-04-07 18:21 andy + + * Source/: cmCTest.cxx, cmCTest.h: Some cov improvements and better + esc + +2003-04-07 12:20 andy + + * Source/cmaketest.cxx: We should really just call make and not + make all + +2003-04-04 10:56 king + + * Source/cmSetCommand.h: ENH: Added CACHE entry types to + documentation string. + +2003-04-04 10:05 king + + * Modules/FindFLTK.cmake: ENH: Added /usr/local/lib/fltk + +2003-04-03 18:40 andy + + * bootstrap: Better support for spaces in paths + +2003-04-03 08:44 andy + + * Source/cmSystemTools.cxx: Try differentiating extensions + +2003-04-02 22:48 king + + * Source/: cmake.cxx, cmake.h, cmakemain.cxx, + CursesDialog/ccmake.cxx: ENH: Improved documentation. Also + modified behavior of "cmake" to not configure a project in the + current directory unless . is given. + +2003-04-02 22:44 king + + * Source/cmDocumentation.cxx: ENH: Running with zero arguments now + produces usage. + +2003-04-02 09:19 andy + + * Source/: cmCTest.cxx, cmCTest.h: Url escape password + +2003-04-02 09:19 andy + + * Source/CTest/cmCTestSubmit.cxx: On verbose, be more verbose + +2003-04-02 09:01 andy + + * Tests/Wrapping/qtwrappingmain.cxx: If display is not set, do not + attempt to run application + +2003-04-02 08:45 andy + + * Modules/FindQt.cmake: Add QT on debian + +2003-04-01 15:31 andy + + * Source/cmCTest.cxx: Fix cov. problems, ignore nonascii char. + Propagate verbosity + +2003-04-01 15:30 andy + + * Source/CTest/: cmCTestSubmit.cxx, cmCTestSubmit.h: Controle + verbosity + +2003-04-01 13:29 king + + * Source/cmSystemTools.cxx: BUG: strlen(buffer) from getline may be + 2 less than gcount on windows because both the CR and LF + characters may be removed. + +2003-03-28 13:42 andy + + * Modules/CheckSymbolExists.cmake: New design of CheckSymbolExists + pretty much replaces all other ones. + + For example: + + CHECK_HEADER_EXISTS("type.h" HAVE_TYPE_H) is: + CHECK_SYMBOL_EXISTS(main "type.h" HAVE_TYPE_H) + + CHECK_LIBRARY_EXISTS("nsl" gethostname HAVE_LIBNSL) would be + SET(CMAKE_REQUIRED_LIBRARIES "nsl") + CHECK_SYMBOL_EXISTS(gethostname "netdb.h" HAVE_LIBNSL) + + ... + +2003-03-27 15:52 andy + + * Source/: cmLocalVisualStudio6Generator.cxx, cmSystemTools.cxx, + cmUseMangledMesaCommand.cxx: Remove warnings + +2003-03-27 15:29 andy + + * bootstrap: Initial import of bootstrap for CMake + +2003-03-27 13:03 hoffman + + * Modules/Platform/SunOS.cmake: Fix gnu c and Sun CC mix + +2003-03-27 12:49 andy + + * CMakeLists.txt: Some more preparations for new bootstrap system + +2003-03-27 12:24 andy + + * Source/: cmCacheManager.cxx, cmConfigureFileCommand.cxx, + cmListFileCache.cxx, cmLocalVisualStudio6Generator.cxx, + cmMakeDepend.cxx, cmOutputRequiredFilesCommand.cxx, + cmSystemTools.cxx, cmSystemTools.h, cmUseMangledMesaCommand.cxx: + Implement GetLineFromStream that actually works and use it + instead of getline + +2003-03-26 10:45 andy + + * Source/cmStandardIncludes.h, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: Remove bogus flags + from cmStandardIncludes and make complex test pass + +2003-03-21 11:33 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: BUG: fix REMOVE test + +2003-03-21 11:24 hoffman + + * Source/cmRemoveCommand.cxx: BUG: fix broken command + +2003-03-20 11:27 andy + + * Source/cmCTest.cxx: Fix problem with network paths + +2003-03-20 10:12 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Support cmake in + directory with space + +2003-03-20 09:47 andy + + * Source/cmCTest.cxx: BUG: used wrong counters + +2003-03-19 18:28 andy + + * Source/cmCTest.cxx: More regex + +2003-03-19 16:35 andy + + * Source/: cmCTest.cxx, cmCTest.h: Add start + +2003-03-19 16:25 andy + + * Source/cmCTest.cxx: Move files to different location and fix time + +2003-03-19 16:11 andy + + * Source/: cmCTest.cxx, cmCTest.h: Fix for visual studio + +2003-03-19 10:16 king + + * Source/cmStringCommand.h: BUG: Command should be inherited. + +2003-03-18 11:47 king + + * Utilities/Release/: config_Linux: ENH: Updated to do release + build on ringworld. Needed for old glibc support. + +2003-03-17 14:29 andy + + * Tests/Simple/: CMakeLists.txt, simple.cxx, simpleCLib.c, + simpleWe.cpp: Improve test + +2003-03-17 13:26 andy + + * Tests/Simple/: CMakeLists.txt, simpleCLib.c: Add testing for when + C sources are compiled with C++ compiler + +2003-03-17 11:21 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: If there was no error, + do not say that there was one + +2003-03-17 10:00 king + + * Modules/FindGTK.cmake: BUG: Fixed ENDIF ordering. + +2003-03-17 09:57 king + + * Modules/CheckSymbolExists.cmake: BUG: Fixed syntax of file + generated for test. + +2003-03-17 09:29 hoffman + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: fix crash with force cxx + type + +2003-03-17 09:15 hoffman + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: force cxx compiler for cxx + files + +2003-03-17 08:25 andy + + * Tests/SystemInformation/: CMakeLists.txt, DumpInformation.cxx, + DumpInformation.h.in: Display Cache and all variables + +2003-03-16 20:33 andy + + * Modules/CheckSymbolExists.cmake: Prevent CMake from putting ; in + the file + +2003-03-16 20:25 andy + + * Modules/FindGTK.cmake: More variables advanced + +2003-03-16 20:23 andy + + * Modules/FindGTK.cmake: Add gthread library + +2003-03-15 10:04 hoffman + + * Source/cmTarget.cxx: BUG: HasCXX did not use GetFileFormat and + was broken + +2003-03-14 15:44 hoffman + + * Modules/FindGTK.cmake: BUG: bad if statement order + +2003-03-14 15:06 hoffman + + * Source/cmGlobalVisualStudio6Generator.cxx: better error message + +2003-03-14 12:00 hoffman + + * Modules/Platform/Windows-cl.cmake: force c++ for c++ files + +2003-03-14 12:00 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx: use c flags with c and + not cxx flags, also force c++ for c files + +2003-03-14 11:59 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: Force c++ builds for + c++ files + +2003-03-14 11:58 hoffman + + * Source/cmMakefile.cxx: make sure M is after m + +2003-03-14 10:54 king + + * Source/cmMakefile.cxx: BUG: c extension must come before C. + +2003-03-14 10:38 king + + * Source/cmMakefile.cxx: BUG: c must precede C. + +2003-03-13 16:31 king + + * Utilities/Release/config_Linux: Merging from 1.6 again. + +2003-03-13 16:30 king + + * Utilities/Release/config_Linux: BUG: Need to link statically + against curses. + +2003-03-13 15:59 king + + * Utilities/Release/: cmake_release.sh, config_Linux: Merging from + 1.6 release branch. + +2003-03-13 15:58 king + + * Utilities/Release/cmake_release.sh: BUG: Need to checkout + ReleaseUtilities with same tag. + +2003-03-13 15:47 king + + * Utilities/Release/: cmake_release.sh: ENH: Updated for 1.6.6 + release. + +2003-03-13 15:46 king + + * Modules/Platform/: SunOS.cmake: BUG: Don't use -nostdlib option + to link shared libraries. Just use gcc -shared, even for C++ + libraries. + +2003-03-13 13:28 king + + * Source/cmMakefile.cxx: BUG: Added missing cc extension for Source + Files group. + +2003-03-13 13:03 king + + * Source/cmMakefile.cxx: BUG: Don't duplicate SUBDIRS. + +2003-03-13 13:01 king + + * Source/cmMakefile.cxx: ENH: Added header file extensions. + +2003-03-13 12:59 martink + + * Source/cmMakefile.cxx: allow the same subdir to be added twice + +2003-03-13 12:48 andy + + * Source/cmMakefile.cxx: Fix regular expressions + +2003-03-13 12:24 andy + + * Source/: cmMakefile.cxx, cmSystemTools.cxx: Synchronize extension + lists + +2003-03-13 11:53 king + + * Source/CursesDialog/form/fld_attr.c: BUG: Fixed forms for HP. + +2003-03-13 11:51 king + + * Modules/TestForSTDNamespace.cmake: BUG: Don't repeat test. + +2003-03-13 11:49 king + + * Modules/CheckTypeSize.cmake: BUG: Don't test type size more than + once. + +2003-03-13 11:48 king + + * Source/cmSystemTools.cxx: BUG: FindLibrary should not accept a + directory even if the exact specified name exists. + +2003-03-13 11:46 king + + * Source/cmake.cxx: BUG: Fixed crash when + CMAKE_BACKWARDS_COMPATIBILITY is deleted. + +2003-03-13 11:33 king + + * Source/cmMakefile.h: ENH: Updated version for 1.6.6 release. + +2003-03-13 11:31 king + + * Utilities/Release/config_Linux: ERR: Need to do shared libc link + with static C++ library to have safe dl loading on linux. + +2003-03-13 08:44 king + + * Source/cmSystemTools.cxx: BUG: FindLibrary should not accept a + directory even if the exact specified name exists. + +2003-03-11 17:35 hoffman + + * Modules/TestForSTDNamespace.cmake: BUG: fix test not to run every + time + +2003-03-11 15:25 hoffman + + * Source/cmDynamicLoader.cxx, Source/CTest/CMakeLists.txt, + Source/CursesDialog/form/fld_attr.c, + Tests/LoadCommand/CMakeLists.txt, + Tests/LoadCommandOneConfig/CMakeLists.txt: BUG: fixes for hp + +2003-03-09 18:16 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: Remove warnings + +2003-03-07 15:30 andy + + * Source/cmCTest.cxx: More XML + +2003-03-07 11:53 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: Remove warning + +2003-03-07 11:45 andy + + * Source/cmCTest.cxx: Fix xml + +2003-03-07 11:27 andy + + * Source/CursesDialog/: cmCursesMainForm.cxx, cmCursesMainForm.h: + Add searching of variables + +2003-03-06 15:32 andy + + * Modules/Dart.cmake: On borland and cygwin remove .EXE + +2003-03-06 12:31 andy + + * Source/cmGetCMakePropertyCommand.cxx: Remove warning + +2003-03-06 11:20 andy + + * Source/cmCommands.cxx, Source/cmGetCMakePropertyCommand.cxx, + Source/cmGetCMakePropertyCommand.h, + Tests/SystemInformation/CMakeLists.txt: Add command for accessing + cmake properties. At this point the only properties are VARIABLES + and CACHE_VARIABLES. Also add test for this feature + +2003-03-06 11:19 andy + + * Source/: cmMakefile.cxx, cmMakefile.h: Add method which returns a + list of all variables + +2003-03-06 11:18 andy + + * Source/cmCacheManager.h: Cache manager should be able to take no + arguments + +2003-03-06 10:32 king + + * Modules/CheckTypeSize.cmake: BUG: Should test HAVE_ + before repeating test, not just whether is set. + +2003-03-05 17:08 andy + + * Source/cmCTest.cxx: oops... Forgot the main step + +2003-03-03 13:58 andy + + * Modules/Dart.cmake: Add Update and configure steps where missing + +2003-03-03 13:57 andy + + * Source/cmCTest.cxx: Fix typo + +2003-03-03 09:32 andy + + * Modules/Dart.cmake: Start cleaning global namespace + +2003-03-03 09:29 andy + + * CMakeLists.txt: BUG: Should be use the host CMake's dart file + +2003-02-28 13:00 andy + + * Source/cmCTest.cxx: Ifdef code that is missing + +2003-02-28 12:42 andy + + * Modules/CheckSymbolExists.cmake, Source/cmCTest.cxx: Fix update + date and cleanup + +2003-02-28 11:31 andy + + * Source/cmCTest.cxx: Add configure step + +2003-02-27 14:48 andy + + * Modules/Dart.cmake: On windows but not on borland, look at + cmake_build_tool instead of compiler to determine build name. + Otherwise they will all be cl + +2003-02-27 11:54 andy + + * Modules/Dart.cmake: Use more condense buildname. If this works + fine we can make cmBuildName command deprecated + +2003-02-24 11:02 king + + * Source/cmake.cxx: BUG: Fixed crash when + CMAKE_BACKWARDS_COMPATIBILITY is deleted between configures. + +2003-02-20 17:38 andy + + * Modules/Dart.cmake: Use simple defaults if DartConfig does not + exist. This way you can use dart to build any project + +2003-02-20 10:46 king + + * Modules/CMakeVS6FindMake.cmake: BUG: Fix registry entry name. + +2003-02-20 10:44 hoffman + + * Modules/CMakeVS6FindMake.cmake: BUG: look for msdev in the right + place + +2003-02-20 09:40 king + + * Utilities/Release/cmake_release.sh: ENH: Updated for 1.6.5 + release. + +2003-02-20 08:55 king + + * Source/cmLocalUnixMakefileGenerator.cxx: fix for correct path + style in depend file + +2003-02-20 08:52 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: fix for correct path + style in depend file + +2003-02-20 08:47 king + + * Modules/TestForANSIForScope.cmake: BUG: Don't test every time for + "for" scope. + +2003-02-20 08:42 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Fix problem with + lib in the name of library. If there was lib in the name of + library, then on Windows (where there is not lib prefix), cmake + split the name wrongly. This only manifested when full path to + the library is specified. + +2003-02-20 08:41 hoffman + + * Modules/TestForANSIForScope.cmake: remove commented code + +2003-02-20 08:38 king + + * Modules/CheckSymbolExists.cmake: BUG: Fixed return 0 through void + type. + +2003-02-20 08:37 king + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: ENH: Removed creation of extra + CMAKE_C_COMPILER_FULLPATH and CMAKE_CXX_COMPILER_FULLPATH cache + entries. + +2003-02-20 08:34 king + + * Source/cmGlobalVisualStudio7Generator.cxx: BUG: Added missing + paren to generated file. + +2003-02-20 08:32 king + + * Source/cmaketest.cxx: BUG: Fix lower-casing of compiler for + win98. + +2003-02-20 08:30 king + + * Source/cmMakefile.h, Utilities/Release/cmake_release.sh: ENH: + Updated for version 1.6.5. + +2003-02-20 08:28 king + + * Source/cmFindPackageCommand.h: BUG: This command must be + inherited. + +2003-02-20 08:23 king + + * Modules/FindFLTK.cmake: BUG: Removed reference to CMake 1.4 + compatability variable. + +2003-02-20 07:55 king + + * Source/cmDumpDocumentation.cxx: ERR: Added missing return. + +2003-02-19 17:37 king + + * Source/CMakeLists.txt: ENH: Using new --all-for-coverage of + DumpDocumentation to improve coverage. + +2003-02-19 17:36 king + + * Source/cmDumpDocumentation.cxx: ENH: Added option to dump all + documentation (coverage). + +2003-02-19 17:10 king + + * Modules/FindFLTK.cmake: BUG: Removed use of cmake 1.4 + compatability variable. + +2003-02-19 12:54 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Fix problem with + lib in the name of library. If there was lib in the name of + library, then on Windows (where there is not lib prefix), cmake + split the name wrongly. This only manifested when full path to + the library is specified. + +2003-02-19 08:52 king + + * Source/cmDocumentation.cxx: ERR: Fixed signed/unsigned warning. + +2003-02-18 20:54 king + + * Source/cmDumpDocumentation.cxx: ENH: Updated to use + cmDocumentation class. + +2003-02-18 20:42 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h, cmakemain.cxx, + CursesDialog/ccmake.cxx: ENH: Re-implemented document generation + class to be more organized and more robust. + +2003-02-18 20:40 king + + * Source/cmAddCustomCommandCommand.h: Fix to documentation + formatting: removed extra newline. + +2003-02-18 16:24 hoffman + + * Source/cmGlobalVisualStudio7Generator.cxx: ENH: fix for vs 7 + beta1 + +2003-02-17 15:47 king + + * Source/cmFindPackageCommand.h: BUG: This command must be + inherited. + +2003-02-17 10:30 andy + + * Modules/CheckSymbolExists.cmake: Fix return value problem + +2003-02-17 09:59 andy + + * Source/CursesDialog/cmCursesStringWidget.cxx: Attempt to fix SGI + ccmake problem (thank you Clint Miller) + +2003-02-17 09:56 andy + + * Source/cmDocumentation.cxx: Minor documentation fixes + +2003-02-17 09:42 king + + * Source/cmakemain.cxx: ENH: Added executable-specific command-line + options. + +2003-02-17 09:42 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h: ENH: Added + header before list of commands in generated docs. Made options + more intuitive. + +2003-02-16 11:57 king + + * Source/cmDocumentation.cxx: ERR: Use of stream format flags is + hard to make portable. Manually implementing justification. + +2003-02-15 22:36 king + + * Source/cmDocumentation.cxx: ERR: Use of std::ios::fmtflags is not + portable to older compilers. + +2003-02-14 18:47 king + + * Source/: cmAbstractFilesCommand.h, cmAddCustomCommandCommand.h, + cmAddCustomTargetCommand.h, cmAddDefinitionsCommand.h, + cmAddDependenciesCommand.h, cmAddExecutableCommand.h, + cmAddLibraryCommand.h, cmAddTestCommand.h, + cmAuxSourceDirectoryCommand.h, cmBuildCommand.h, + cmBuildNameCommand.h, cmConfigureFileCommand.h, + cmCreateTestSourceList.h, cmElseCommand.h, + cmEnableTestingCommand.h, cmEndForEachCommand.h, + cmEndIfCommand.h, cmExecProgramCommand.h, + cmExportLibraryDependencies.h, cmFLTKWrapUICommand.h, + cmFindFileCommand.h, cmFindLibraryCommand.h, + cmFindPackageCommand.h, cmFindPathCommand.h, + cmFindProgramCommand.h, cmForEachCommand.h, + cmGetFilenameComponentCommand.h, + cmGetSourceFilePropertyCommand.h, cmGetTargetPropertyCommand.h, + cmITKWrapTclCommand.h, cmIfCommand.h, cmIncludeCommand.h, + cmIncludeDirectoryCommand.h, cmIncludeExternalMSProjectCommand.h, + cmIncludeRegularExpressionCommand.h, cmInstallFilesCommand.h, + cmInstallProgramsCommand.h, cmInstallTargetsCommand.h, + cmLinkDirectoriesCommand.h, cmLinkLibrariesCommand.h, + cmLoadCacheCommand.h, cmLoadCommandCommand.h, cmMacroCommand.h, + cmMakeDirectoryCommand.h, cmMarkAsAdvancedCommand.h, + cmMessageCommand.h, cmOptionCommand.h, + cmOutputRequiredFilesCommand.h, cmProjectCommand.h, + cmQTWrapCPPCommand.h, cmQTWrapUICommand.h, cmRemoveCommand.h, + cmSeparateArgumentsCommand.h, cmSetCommand.h, + cmSetSourceFilesPropertiesCommand.h, + cmSetTargetPropertiesCommand.h, cmSiteNameCommand.h, + cmSourceFilesCommand.h, cmSourceFilesRemoveCommand.h, + cmSourceGroupCommand.h, cmStringCommand.h, cmSubdirCommand.h, + cmSubdirDependsCommand.h, cmTargetLinkLibrariesCommand.h, + cmTryCompileCommand.h, cmTryRunCommand.h, + cmUseMangledMesaCommand.h, cmUtilitySourceCommand.h, + cmVTKMakeInstantiatorCommand.h, cmVTKWrapJavaCommand.h, + cmVTKWrapPythonCommand.h, cmVTKWrapTclCommand.h, + cmVariableRequiresCommand.h, cmWrapExcludeFilesCommand.h, + cmWriteFileCommand.h: ENH: Cleaned up documentation and formatted + it for use by cmDocumentation. + +2003-02-14 16:16 king + + * Source/cmDocumentation.cxx: ENH: Improved formatting of + plain-text help to add a blank line before the beginning of a + preformatted section. + +2003-02-14 13:28 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h: ENH: Further + improved formatting. HTML/man/help now all have a consistent + appearance. + +2003-02-14 13:06 king + + * Source/: cmDocumentation.cxx, cmDocumentation.h: ENH: Improved + formatting of documentation. + +2003-02-14 11:13 martink + + * Source/cmaketest.cxx: Lowercase has a bad signiture, so I have to + live with it + +2003-02-14 10:56 king + + * Source/cmSystemTools.cxx: ERR: Added missing include for msvc. + +2003-02-14 10:53 king + + * Source/: CMakeLists.txt, Makefile.in, cmDocumentation.cxx, + cmDocumentation.h, cmStandardIncludes.h, cmSystemTools.cxx, + cmSystemTools.h, cmake.cxx, cmake.h, cmakemain.cxx, + CursesDialog/ccmake.cxx: ENH: Added cmDocumentation class to + generate various forms of documentation. Each executable will be + able to generate its own documentation. + +2003-02-14 10:40 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: ENH: move full path compiler to + internal and not just advanced + +2003-02-14 09:54 hoffman + + * Modules/TestForANSIForScope.cmake, Source/cmCacheManager.cxx, + Source/cmConfigureFileCommand.cxx, + Source/cmConfigureFileCommand.h, Source/cmIncludeCommand.h, + Source/cmLocalUnixMakefileGenerator.cxx, Source/cmMakefile.h, + Source/cmMarkAsAdvancedCommand.h, + Source/cmUseMangledMesaCommand.cxx, + Source/cmVariableRequiresCommand.cxx, + Source/cmVariableRequiresCommand.h: spelling errors + +2003-02-14 09:25 hoffman + + * CMake.rtf: fix spelling errors + +2003-02-13 21:57 king + + * CMakeLists.txt, configure, configure.in, Source/CMakeLists.txt, + Source/cmConfigure.cmake.h.in, Source/cmConfigure.h.in, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmStandardIncludes.h: ENH: Centralized setting of CMake + version number to top-level CMake listfile. + +2003-02-13 12:03 king + + * Utilities/Release/cmake_release.sh: ENH: Merged updates for 1.6.4 + release. + +2003-02-13 11:57 king + + * Modules/FindJNI.cmake: BUG: Fix find of JNI on Mac OSX 10.2. + +2003-02-13 11:54 king + + * Source/cmMakefile.h, Utilities/Release/cmake_release.sh: ENH: + Updated for 1.6.4 release. + +2003-02-13 11:52 king + + * Modules/UseVTKConfig40.cmake: BUG: Copy of _LIB_DEPENDS variables + needs to be double-quoted. + +2003-02-13 11:50 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix for spaces in + paths in library path + +2003-02-13 11:47 king + + * Source/cmFindLibraryCommand.cxx: BUG: Use + cmSystemTools::IsNOTFOUND. + +2003-02-12 13:43 andy + + * Source/: cmCTest.cxx, cmakemain.cxx: Try to fix update + +2003-02-12 09:26 andy + + * Source/cmCTest.cxx: Write individual too + +2003-02-11 14:49 andy + + * Modules/FindJNI.cmake: Ok, now it finds JNI on Mac OSX 10.2 + +2003-02-11 13:56 andy + + * Modules/FindJNI.cmake: Fix typo + +2003-02-11 13:53 andy + + * Modules/FindJNI.cmake: Add missing location + +2003-02-11 13:37 andy + + * Modules/FindJNI.cmake: Improve searching for java files on OSX + +2003-02-11 13:34 andy + + * Source/cmSetTargetPropertiesCommand.h: Fix comment + +2003-02-11 09:50 king + + * Modules/: FindMangledMesa.cmake, FindOSMesa.cmake: Moving this + very specific module to VTK. + +2003-02-11 09:19 andy + + * Source/: cmCTest.cxx, cmCTest.h: Fix cont and remove comments + +2003-02-10 23:19 andy + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx: Start working on cont + +2003-02-10 22:00 hoffman + + * Tests/TryCompile/CMakeLists.txt: ENH: add more testing for ansi + for scopes + +2003-02-10 21:56 hoffman + + * Modules/TestForANSIForScope.cmake: clean up check for for scope + test + +2003-02-10 21:52 andy + + * Source/: cmCTest.cxx, cmCTest.h, ctest.cxx: Fix date issues with + different models + +2003-02-10 16:20 hoffman + + * Source/CMakeLists.txt, Tests/TryCompile/CMakeLists.txt: ENH: add + a new test for TRY_COMPILE + +2003-02-10 13:19 hoffman + + * Tests/TryCompile/: CMakeLists.txt, fail.c, pass.c: ENH: add a new + test to test try compile + +2003-02-10 11:08 king + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Running "make test" + can now have ARGS specified on the command line. These ARGS are + passed to ctest. + +2003-02-09 16:11 king + + * Utilities/Release/cmake_release.sh: ERR: Removed extra &&. + +2003-02-08 10:24 hoffman + + * Source/: cmSystemTools.cxx, cmSystemTools.h: Fix for include + optional + +2003-02-08 10:23 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix for spaces in + paths in library path + +2003-02-07 16:29 king + + * Modules/UseVTKConfig40.cmake: BUG: Copying _LIB_DEPENDS variables + requires double-quoted argument. + +2003-02-07 14:04 king + + * Source/: cmGetFilenameComponentCommand.cxx, + cmGetFilenameComponentCommand.h, + cmLocalUnixMakefileGenerator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmMakefile.cxx, + cmSetSourceFilesPropertiesCommand.h, + cmSetTargetPropertiesCommand.h, cmSystemTools.cxx, + cmSystemTools.h: Several fixes/improvements: + + - Fixed CollapseFullPath to work on relative paths with base + paths + not in the current working directory. + - INCLUDE command now supports relative paths (using above + fix). + - Added ABSOLUTE option to GET_FILENAME_COMPONENT command to + unwind symlinks and relative paths. + - Fixed libName_EXPORTS macro definition to be valid C + identifier. + - Added DEFINE_SYMBOL target propterty for customizing the + export symbol. + - Implemented LINK_FLAGS target propterty for libraries in VC6 + and VC7. + + Several of these fixes were contributed by Gareth Jones. + +2003-02-07 11:47 hoffman + + * Source/CTest/CMakeLists.txt: Remove warnings on AIX + +2003-02-07 11:03 andy + + * Source/CTest/cmCTestSubmit.cxx: Do not reuse connection as that + feature seems to be broken + +2003-02-07 11:03 andy + + * Source/cmCTest.cxx: Fix update return status + +2003-02-07 10:34 hoffman + + * Source/cmSystemTools.cxx: ENH: spelling error fix + +2003-02-07 10:18 hoffman + + * Source/cmFindLibraryCommand.cxx: BUG: use IsNOTFOUND + +2003-02-07 10:05 king + + * Utilities/Release/cmake_release.sh: ERR: Removed stray && from + end of line. + +2003-02-07 00:09 andy + + * Source/: cmCTest.cxx, cmCTest.h: Add updating support + +2003-02-06 17:48 hoffman + + * CMakeLists.txt: tell the aix linker not to give warnings with + -bhalt:5 + +2003-02-06 15:18 martink + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: added option to shut off + automatic rebuilding + +2003-02-06 10:49 king + + * Source/CMakeLists.txt: ENH: Comeau C++ has been added for nightly + testing. It does not support shared libraries, so we cannot run + the complex tests. + +2003-02-05 22:26 hoffman + + * Source/: cmSystemTools.cxx, cmSystemTools.h, + cmTryCompileCommand.cxx: add better testing for unlink + +2003-02-05 18:05 king + + * Source/cmCreateTestSourceList.cxx: BUG: Generate 0 into test + driver instead of NULL. + +2003-02-05 16:56 king + + * Utilities/Release/cmake_release.sh: ENH: Added win32_zipfile and + win32_upload commands. + +2003-02-05 16:53 king + + * Utilities/Release/cmake_release.sh: ENH: Added win32_zipfile and + win32_upload commands. + +2003-02-05 15:14 king + + * Utilities/Release/cmake_release.sh: BUG: Updated release tag for + 1.6.3. + +2003-02-05 15:07 king + + * Source/cmMakefile.h, Utilities/Release/cmake_release.sh: ENH: + Updated to version 1.6.3. + +2003-02-05 15:05 king + + * Modules/CMakeSystemSpecificInformation.cmake: ENH: + CMAKE_INSTALL_PREFIX should not be advanced on UNIX. + +2003-02-05 15:02 king + + * Modules/Platform/HP-UX.cmake: BUG: Optimization flags use + + prefix, not -. + +2003-02-05 15:01 king + + * Source/CursesDialog/cmCursesLongMessageForm.cxx: BUG: Fixed crash + when messages are too long. + +2003-02-05 14:58 king + + * Source/cmGlobalGenerator.cxx: BUG: Bug in NOTFOUND error + reporting logic. + +2003-02-05 14:55 hoffman + + * Modules/Platform/HP-UX.cmake: fix default release flags for hp + +2003-02-05 14:55 king + + * Source/: cmCacheManager.cxx, cmCacheManager.h: ENH: Better error + checking for cache iterator. + +2003-02-04 15:37 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake: move cmake install + out of advanced + +2003-02-04 15:37 hoffman + + * Source/cmGlobalGenerator.cxx: BUG: add better testing for + notfound + +2003-02-04 14:37 berk + + * Modules/: FindMangledMesa.cmake, FindOSMesa.cmake: Created + modules for Mesa headers and libraries. + +2003-02-04 14:31 hoffman + + * Source/CursesDialog/cmCursesLongMessageForm.cxx: BUG: don't let + the messages get too big + +2003-02-04 14:01 martink + + * Source/: cmCacheManager.h, cmCacheManager.cxx: safer operation of + iterators + +2003-02-04 09:50 andy + + * Source/cmVTKWrapJavaCommand.cxx: Oops, std namespace + +2003-02-04 09:48 andy + + * Source/cmVTKWrapJavaCommand.cxx: Generate java dependency files + +2003-02-03 23:08 king + + * Utilities/Release/: cmake_release.sh: ENH: Improved robustness of + remote invocation. Added more documentation. + +2003-02-03 22:46 king + + * Utilities/Release/: cmake_release.sh: ENH: Added documentation + and usage. + +2003-02-03 13:31 hoffman + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: ENH: add a better test for + lib deps + +2003-02-03 12:02 king + + * Utilities/Release/cmake_release.sh: ENH: Updated version to + 1.6.2. + +2003-02-03 12:01 king + + * Source/: cmFindFileCommand.cxx, cmFindFileCommand.h, + cmFindLibraryCommand.cxx, cmFindPackageCommand.cxx, + cmFindPathCommand.cxx, cmFindProgramCommand.cxx, + cmFindProgramCommand.h, cmGetFilenameComponentCommand.cxx, + cmGlobalGenerator.cxx, cmITKWrapTclCommand.cxx, cmSourceFile.cxx, + cmSystemTools.cxx, cmSystemTools.h: ENH: Added new NOTFOUND + notification feature. + +2003-02-03 11:50 king + + * Source/cmMakefile.h: ENH: Updated from version 1.6.1 to 1.6.2. + +2003-02-03 11:49 king + + * Source/cmExportLibraryDependencies.cxx: BUG: Removed generation + of stray paren. + +2003-02-03 09:53 king + + * Source/cmExportLibraryDependencies.cxx: BUG: Removed generation + of stray paren. + +2003-02-02 22:32 king + + * Source/CursesDialog/cmCursesStandardIncludes.h: ENH: Cleaned up + sgi unreferenced warning hack. + +2003-02-02 11:45 hoffman + + * Source/cmGlobalGenerator.cxx: fix warning + +2003-02-01 16:39 hoffman + + * Source/cmMakefile.cxx: ENH: fix warning + +2003-02-01 16:39 hoffman + + * Source/cmAddLibraryCommand.h: ENH: fix doc line + +2003-02-01 16:27 hoffman + + * Source/CursesDialog/cmCursesStandardIncludes.h: BUG: add missing + ; + +2003-01-31 15:01 hoffman + + * Modules/FindOpenGL.cmake: ENH: add checking for NOTFOUND + +2003-01-31 14:39 hoffman + + * Modules/FindOpenGL.cmake, Source/cmGlobalGenerator.cxx: ENH: add + checking for NOTFOUND + +2003-01-31 13:50 hoffman + + * Source/: cmFindFileCommand.cxx, cmFindFileCommand.h, + cmFindLibraryCommand.cxx, cmFindPackageCommand.cxx, + cmFindPathCommand.cxx, cmFindProgramCommand.cxx, + cmFindProgramCommand.h, cmGetFilenameComponentCommand.cxx, + cmGlobalGenerator.cxx, cmITKWrapTclCommand.cxx, + cmIncludeDirectoryCommand.cxx, cmLinkLibrariesCommand.cxx, + cmMakefile.cxx, cmSourceFile.cxx, cmSystemTools.cxx, + cmSystemTools.h, cmTargetLinkLibrariesCommand.cxx: ENH: add + checking for NOTFOUND + +2003-01-31 13:24 king + + * Source/cmMakefile.h, Utilities/Release/cmake_release.sh: ENH: + Updated to version 1.6.1 from 1.6.0. + +2003-01-31 13:18 king + + * Source/cmWin32ProcessExecution.cxx: Merge from HEAD. Use process + output for error reporting instead of stdout. + +2003-01-31 13:04 king + + * Modules/FindLATEX.cmake: ENH: Changes to work on windows. Merged + from HEAD. + +2003-01-31 11:52 king + + * Modules/FindFLTK.cmake: BUG: Need FIND_PROGRAM instead of + FIND_FILE to find fluid.exe. + +2003-01-31 11:49 king + + * Modules/FindPerl.cmake: ENH: Added ActivePerl/804 as a search + path. + +2003-01-31 11:44 king + + * Modules/CMakeSystemSpecificInformation.cmake: ERR: Removed stray + double quote. + +2003-01-31 11:41 king + + * Utilities/Release/cmake_release.sh: ENH: Another merge from + branch 1.6. + +2003-01-31 11:40 king + + * Modules/FindX11.cmake: BUG: Fix for cygwin's X11. + +2003-01-31 11:36 king + + * Source/cmakewizard.cxx: ENH: cmake -i on HP needs printf instead + of cout. + +2003-01-31 11:35 king + + * Source/: CMakeLists.txt: BUG: Change install location of + cmCPluginAPI header. + +2003-01-31 08:47 martink + + * Source/CursesDialog/cmCursesStandardIncludes.h: fixed warnings + +2003-01-30 14:34 andy + + * Source/: cmIncludeDirectoryCommand.cxx, + cmLinkLibrariesCommand.cxx, cmTargetLinkLibrariesCommand.cxx: Add + some error checking for missing include directories and link + libraries + +2003-01-30 14:34 andy + + * Modules/CMakeSystemSpecificInformation.cmake: Remove extra quote + +2003-01-30 13:19 hoffman + + * Source/cmakewizard.cxx: BUG: can not mix cout and fgets on hp + +2003-01-30 11:50 king + + * Source/CursesDialog/cmCursesStandardIncludes.h: ERR: Fixing + attempt to remove warnings. + +2003-01-29 14:20 king + + * Source/CursesDialog/cmCursesStandardIncludes.h: ERR: Another + attempt to get rid of unreferenced inline function warnings on + SGI. + +2003-01-29 13:56 king + + * Utilities/Release/cmake_release.sh: ENH: Use * instead of + directory list for installation tarball. + +2003-01-29 13:46 king + + * Utilities/Release/cmake_release.sh: BUG: Need to include the + include directory from the installation. + +2003-01-29 09:06 andy + + * Modules/FindX11.cmake: Attempt to fix build problem on some + platforms + +2003-01-28 15:48 hoffman + + * Source/cmFindFileCommand.h: ENH: better docs + +2003-01-28 15:44 hoffman + + * Modules/: FindFLTK.cmake, FindQt.cmake: ENH: change FIND_FILE to + FIND_PROGRAM + +2003-01-28 08:53 andy + + * Modules/FindLATEX.cmake: Make things work on unix and add DVIPDF + +2003-01-27 12:25 andy + + * Source/cmWin32ProcessExecution.cxx: Fix output variable and + remove this->m_ to be only m_ + +2003-01-27 12:18 andy + + * Source/cmWin32ProcessExecution.cxx: Move errors to output + variable + +2003-01-24 17:40 king + + * Utilities/Release/cygwin-package.sh.in: ENH: Merged more changes + from 1.6 branch. + +2003-01-24 17:34 king + + * Utilities/Release/cygwin-package.sh.in: ENH: Added testing to + packaging script. + +2003-01-24 15:48 king + + * Utilities/Release/cmake_release.sh: ENH: Merged more changes from + 1.6 branch. + +2003-01-24 15:02 king + + * Utilities/Release/cmake_release.sh: ENH: Added cygwin_upload + function. + +2003-01-24 14:40 king + + * Utilities/Release/: cmake_release.sh, config_AIX, config_Darwin, + config_IRIX64, config_Linux, config_OSF1, config_SunOS: ENH: + Merged 1.6-branch changes to release scripts. + +2003-01-24 14:29 king + + * Utilities/Release/: config_AIX, config_Darwin, config_IRIX64, + config_Linux, config_OSF1, config_SunOS: ENH: Use verbose + makefile during release build. + +2003-01-24 13:55 king + + * Utilities/Release/cmake_release.sh: ENH: Updated checkout + revision to Release-1-6-0 tag. + +2003-01-24 13:53 king + + * Modules/Platform/: HP-UX.cmake: BUG: Added missing link flag to + export symbols from an executable. + +2003-01-24 11:49 king + + * Utilities/Release/cmake_release.sh: ENH: Updated for 1.6.0 + release over 1.6.beta2. + +2003-01-24 11:45 king + + * Utilities/: cmake_release_config_darwin, + cmake_release_config_hpux, cmake_release_config_irix, + cmake_release_config_linux, cmake_release_config_osf, + cmake_release_config_sun, cmake_release_cygwin.sh, + cmake_release_unix_config.sh, cmake_release_version.sh: ENH: + Removing old release scripts. CMake 1.6 now has its own copy of + the release scripts. + +2003-01-24 11:45 king + + * Utilities/: cmake-cygwin-package.sh, cmake_release_unix_build.sh, + cmake_release_unix_package.sh, Release/cmake_release.sh, + Release/config_AIX, Release/config_CYGWIN_NT-5.1, + Release/config_Darwin, Release/config_HP-UX, + Release/config_IRIX64, Release/config_Linux, Release/config_OSF1, + Release/config_SunOS, Release/cygwin-package.sh.in: ENH: Release + branch should contain its own release scripts. + +2003-01-24 11:41 king + + * Utilities/Release/: cmake_release.sh, config_AIX, config_Darwin, + config_HP-UX, config_Linux, config_OSF1, config_SunOS: ENH: + Enabled testing during release build. + +2003-01-24 10:33 king + + * Source/CursesDialog/cmCursesStandardIncludes.h: ERR: Fixed + unreferenced termios declaration warning. + +2003-01-23 10:42 barre + + * Modules/FindLATEX.cmake: no message + +2003-01-23 10:37 barre + + * Modules/FindLATEX.cmake: FIX: - rename some entries (COMPILE -> + COMPILER, and the converters -> _CONVERTER) - make sure that + Window system are given a chance to find Latex and the converters + if MikTex and GhostScript are installed (but not in the PATH) + +2003-01-23 10:36 barre + + * Modules/FindPerl.cmake: FIX: the current version of Perl is 5.8 + +2003-01-23 10:35 barre + + * Source/cmGetFilenameComponentCommand.cxx: FIX: this command was + not processing its arg to expand registery values + +2003-01-22 15:00 martink + + * Modules/Platform/gcc.cmake: joins from the main tree + +2003-01-22 14:59 martink + + * Modules/Platform/gcc.cmake: minor change to default compile flags + +2003-01-22 14:49 martink + + * Modules/: FindMPEG2.cmake, FindSDL.cmake: merge from branch + +2003-01-22 14:33 hoffman + + * Source/cmGlobalGenerator.h: ENH: merge from branch + +2003-01-22 14:21 hoffman + + * Tests/X11/CMakeLists.txt: ENH: merge from head + +2003-01-22 14:20 hoffman + + * Utilities/Doxygen/doc_makeall.sh.in: merge from main tree + +2003-01-22 14:20 hoffman + + * Source/cmGlobalGenerator.cxx: merge from main tree, test for + working c and c++ compilers + +2003-01-22 14:17 hoffman + + * Templates/: cconfigure, cconfigure.in, cxxconfigure, + cxxconfigure.in: merge with main branch and remove unused scripts + +2003-01-22 14:13 hoffman + + * Modules/FindAndImportCMakeProject.cmake: moved to c++ command + +2003-01-22 12:38 martink + + * Modules/: CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake: + joins from the main tree + +2003-01-22 12:31 martink + + * Source/: cmCommands.cxx, cmFindPathCommand.cxx, + cmGlobalUnixMakefileGenerator.cxx, + cmGlobalVisualStudio6Generator.cxx, cmMakefile.cxx, cmMakefile.h, + cmake.cxx: joins from the main tree + +2003-01-22 12:29 hoffman + + * Modules/: CMakeTestCCompiler.cmake, CMakeTestCXXCompiler.cmake: + ENH: only run test for working c and cxx compiler once + +2003-01-22 12:28 martink + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, + Modules/CheckIncludeFiles.cmake, Modules/FindFLTK.cmake, + Modules/FindImageMagick.cmake, Modules/FindTclsh.cmake, + Modules/FindVTK.cmake, Modules/FindX11.cmake, + Modules/Platform/CYGWIN.cmake, Source/cmMessageCommand.cxx, + Source/cmMessageCommand.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/CursesDialog/ccmake.cxx, + Source/CursesDialog/cmCursesMainForm.cxx, + Source/CursesDialog/cmCursesMainForm.h, + Source/cmExportLibraryDependencies.cxx, + Source/cmExportLibraryDependencies.h, + Source/cmFindPackageCommand.cxx, Source/cmFindPackageCommand.h: + joins from the main tree + +2003-01-22 11:44 martink + + * Source/cmLocalVisualStudio6Generator.cxx: fixed spelling mistake + +2003-01-22 11:27 martink + + * Source/CursesDialog/ccmake.cxx: spelling fix + +2003-01-22 11:21 martink + + * Modules/FindOpenGL.cmake: merge from branch + +2003-01-22 11:16 martink + + * Modules/LinkQT.cmake: removed since no longer used + +2003-01-22 11:11 martink + + * Modules/FindLATEX.cmake: merge branch change into main tree + +2003-01-22 10:40 king + + * Source/cmFindPackageCommand.cxx: ENH: Added support for looking + through CMAKE_MODULE_PATH to locate Find.cmake modules. + +2003-01-22 10:33 king + + * Source/: cmake.cxx, CursesDialog/ccmake.cxx, + CursesDialog/cmCursesMainForm.cxx, + CursesDialog/cmCursesMainForm.h: BUG: Fixed crash when CMAKE_ROOT + cannot be found. + +2003-01-22 09:34 hoffman + + * Source/cmake.cxx: BUG: fix command line to take -G only + +2003-01-22 09:28 king + + * Source/cmGlobalVisualStudio6Generator.cxx: BUG: CMake 1.4 + configured projects did not build with new CMake. + +2003-01-21 17:15 king + + * Source/: cmCommands.cxx, cmFindPackageCommand.cxx, + cmFindPackageCommand.h: ENH: Added FIND_PACKAGE command prototyp. + +2003-01-21 16:46 king + + * Source/cmake.cxx: BUG: Use CMakeDefaultMakeRuleVariables.cmake to + locate modules directory instead of FindVTK.cmake. + +2003-01-21 15:03 king + + * Modules/FindVTK.cmake: ENH: Updated documentation. + +2003-01-21 14:01 andy + + * Modules/CheckIncludeFiles.cmake: This list can be really long. + Only display the variable name + +2003-01-21 12:50 hoffman + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeTestCCompiler.cmake, + Modules/CMakeTestCXXCompiler.cmake, Source/cmGlobalGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.cxx, Source/cmMakefile.cxx, + Source/cmMessageCommand.cxx, Source/cmMessageCommand.h, + Source/cmSystemTools.cxx, Source/cmSystemTools.h: add a fatal + error, and make sure c and c++ compilers work before using them + +2003-01-21 12:41 hoffman + + * Modules/Platform/CYGWIN.cmake: use export all symbols on cygwin + +2003-01-21 10:59 barre + + * Modules/FindImageMagick.cmake: IMPORTANT FIX: be extra-careful + here on WIN32, we do NOT want CMake to look in the system's PATH + env var to search for ImageMagick's convert.exe, otherwise it is + going to pick Microsoft Window's own convert.exe, which is used + to convert FAT partitions to NTFS format ! Depending on the + options passed to convert.exe, there is a good chance you would + kiss your hard-disk good-bye. + +2003-01-20 21:15 ibanez + + * Modules/FindLATEX.cmake: ENH: PS2PDF_COMPILE added. It looks for + ps2pdf. + +2003-01-20 19:17 king + + * Source/cmMakefile.cxx: BUG: Fix for custom commands with spaces + in paths. The arguments were not having spaces escaped. + +2003-01-20 18:54 king + + * Source/: cmLocalUnixMakefileGenerator.cxx: BUG: Fixed typo in + previous fix. + +2003-01-20 18:52 king + + * Source/: cmLocalUnixMakefileGenerator.cxx: BUG: Fixed directory + creation for spaces in install path. + +2003-01-20 16:59 hoffman + + * Source/cmCommands.cxx, Source/cmExportLibraryDependencies.cxx, + Source/cmExportLibraryDependencies.h, Source/cmGlobalGenerator.h, + Source/cmMakefile.h, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: add a new command + that allows exports of library dependencies from a project to a + file + +2003-01-20 14:39 will + + * Modules/FindX11.cmake: BUG: fix missed CMAKE to X11 variable name + +2003-01-19 11:42 king + + * Source/cmSystemTools.cxx: ENH: Improved CopyFile error messages. + +2003-01-18 11:34 king + + * Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, Templates/install-sh: BUG: + Fixed make install to handle library prefix/suffix settings. + Also fixed support for spaces in paths during make install. + +2003-01-17 18:14 king + + * Modules/: FindVTK.cmake: BUG: Fix for application of + expand-list-variables. + +2003-01-17 18:01 king + + * Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, Templates/install-sh: ENH: + Support for spaces in paths during make install. + +2003-01-17 17:19 king + + * Modules/FindAndImportCMakeProject.cmake: ENH: Adding + FIND_AND_IMPORT_CMAKE_PROJECT macro. + +2003-01-17 15:15 king + + * Utilities/Release/cmake_release.sh: ENH: Added sanity check for + setting of WX_RESOURCES by config_Darwin for osx_install. + +2003-01-17 13:35 king + + * Utilities/Release/: cmake_release.sh, config_Darwin: ENH: + Prototype for OSX packaging. + +2003-01-17 13:35 king + + * Utilities/Release/cmake_release.sh: ENH: Cygwin package is now + created in a Cygwin subdirectory. + +2003-01-17 11:57 king + + * Utilities/Release/: cmake-cygwin-package.sh, cmake_release.sh, + cygwin-package.sh.in: ENH: Renamed cmake-cygwin-package.sh to + cygwin-package.sh.in and removed executable permission so it + cannot be run accidentally. It must be run after being renamed + to cmake-${VERSION}-${RELEASE}. + +2003-01-17 11:55 king + + * Utilities/Release/cmake_release.sh: ENH: clean now removes the + entire release root directory. + +2003-01-17 11:51 king + + * Utilities/: cmake-cygwin-package.sh, cmake_release_config_aix, + cmake_release_config_darwin, cmake_release_config_hpux, + cmake_release_config_irix, cmake_release_config_linux, + cmake_release_config_osf, cmake_release_config_sun, + cmake_release_cygwin.sh, cmake_release_unix_build.sh, + cmake_release_unix_config.sh, cmake_release_unix_package.sh, + cmake_release_version.sh: ENH: Removing old release scripts and + config files. + +2003-01-17 11:42 king + + * Utilities/Release/config_OSF1: ENH: Adding OSF release + configuration. + +2003-01-17 11:05 king + + * Utilities/Release/cmake_release.sh: ENH: Added cygwin release + support. + +2003-01-17 10:30 king + + * Utilities/Release/cmake-cygwin-package.sh: ENH: Adding cygwin + packaging script to release directory. + +2003-01-17 10:28 hoffman + + * Source/cmFindPathCommand.cxx, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: remove + trailing slash from findpath command + +2003-01-17 10:28 hoffman + + * Tests/SystemInformation/: DumpInformation.cxx, + SystemInformation.in: add some more prints + +2003-01-17 10:21 king + + * Utilities/Release/config_Linux: ENH: Removed old setting. + +2003-01-17 10:21 king + + * Utilities/Release/config_CYGWIN_NT-5.1: ENH: Cygwin release + configuration. + +2003-01-17 09:52 king + + * Utilities/Release/cmake_release.sh: ENH: Added support for full + remote packaging and copying back to local machine. Added + support for uploading to FTP server. + +2003-01-17 09:20 king + + * Utilities/Release/config_HP-UX: ENH: Linking with + -a,archive_shared instead of -a,archive so that the shared curses + library can be used. + +2003-01-17 09:15 king + + * Utilities/Release/config_AIX: ERR: Can't build release static on + aix. + +2003-01-17 09:08 hoffman + + * Utilities/Release/config_AIX: Add AIX config file + +2003-01-17 08:56 andy + + * Source/cmCTest.cxx: Remove warning about %e and %T + +2003-01-16 15:47 martink + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: fix for + compilers that need _ + +2003-01-16 14:59 andy + + * Source/cmCTest.cxx: Add aix warning + +2003-01-16 14:15 andy + + * DartConfig.cmake: Add selection of drop method + +2003-01-16 14:05 barre + + * Utilities/Doxygen/doc_makeall.sh.in: FIX: HHC is now + HTML_HELP_COMPILER + +2003-01-16 13:31 ibanez + + * Modules/FindFLTK.cmake: FIX: Quotes added around the list of libs + to be added in Apple. + +2003-01-16 13:24 ibanez + + * Modules/FindFLTK.cmake: ENH: Platform dependent libraries added + for APPLE. + +2003-01-16 13:02 andy + + * Source/CTest/cmCTestSubmit.cxx: Try to fix aix problem + +2003-01-16 12:45 andy + + * Source/CTest/cmCTestSubmit.cxx: Add proxy support for triggering + +2003-01-16 12:38 hoffman + + * Modules/FindFLTK.cmake: ENH: fix for borland and cygwin + +2003-01-16 12:30 andy + + * Source/CTest/cmCTestSubmit.cxx: Improve submtitting using http + +2003-01-16 09:57 andy + + * Source/CTest/cmCTestSubmit.cxx: Improve build, now it should + build on mac and other platforms where include file depend on + each other + +2003-01-16 08:40 hoffman + + * Source/cmMakefile.h: add back GetCMakeInstance + +2003-01-16 08:31 hoffman + + * Source/cmMakefile.h: fix duplicate member on branch + +2003-01-16 08:28 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: add the config + directory to look for the loadable module + +2003-01-15 19:24 king + + * Utilities/Release/cmake_release.sh: BUG: error_log function + should return 1 to stop execution of rest of script. + +2003-01-15 19:20 king + + * Utilities/Release/cmake_release.sh: ENH: Renamed package command + to binary_tarball for clarity. + +2003-01-15 19:17 king + + * Utilities/Release/: cmake_release.sh, config_HP-UX: ENH: Release + script now exports PATH and LD_LIBRARY_PATH to remove the burden + from the configuration scripts. + +2003-01-15 19:14 king + + * Utilities/Release/config_HP-UX: BUG: Attempt to fix remote + invocation. + +2003-01-15 19:04 king + + * Utilities/Release/config_HP-UX: ENH: Enabling verbose makefile + generation for hp-ux build. This will ease hand-fixing of the + build of ccmake. + +2003-01-15 19:02 king + + * Utilities/Release/cmake_release.sh: ENH: Cleaned up remote + invocation. + +2003-01-15 18:51 king + + * Utilities/Release/cmake_release.sh: ENH: Improved clean target. + +2003-01-15 18:48 king + + * Utilities/Release/cmake_release.sh: BUG: Finished clean target + and fixed grep for cvsroot in ~/.cvspass. + +2003-01-15 18:44 king + + * Utilities/Release/cmake_release.sh: BUG: CVS login command is + login, not cvs_login. + +2003-01-15 18:43 king + + * Utilities/Release/config_aix: ERR: Removed old config file. + +2003-01-15 18:42 king + + * Utilities/Release/: cmake_release.sh, config_Darwin, + config_HP-UX, config_IRIX64, config_Linux, config_SunOS, + config_aix: ENH: New release script prototype. + +2003-01-15 18:28 ibanez + + * Modules/FindFLTK.cmake: ENH: Libraries are not marked as ADVANCED + now. + +2003-01-15 18:02 king + + * Source/cmMakefile.h: ERR: Removed duplicate declaration. + +2003-01-15 17:45 hoffman + + * Source/cmMakefile.h: ENH: fix for ibm build + +2003-01-15 17:31 hoffman + + * Source/CMakeLists.txt, Source/cmaketest.cxx, + Tests/Complex/Executable/complex.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/Complex/Library/moduleFile.c, + Tests/Complex/Library/moduleFile.h, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/moduleFile.c, + Tests/ComplexOneConfig/Library/moduleFile.h, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/moduleFile.c, + Tests/ComplexRelativePaths/Library/moduleFile.h: ENH: add testing + for modules and one two config modes for cmaketest + +2003-01-15 17:02 hoffman + + * Tests/: LoadCommand/CMakeCommands/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/CMakeLists.txt: use module on + all platforms + +2003-01-15 15:32 hoffman + + * Modules/FindOpenGL.cmake: fix from head + +2003-01-15 15:02 hoffman + + * Modules/FindOpenGL.cmake: BUG: fix for OSX with x11 gl stuff + +2003-01-15 13:25 hoffman + + * Modules/Platform/Windows-bcc32.cmake: merge with head fix for + borland flag and bad set statment + +2003-01-15 13:22 hoffman + + * Modules/Platform/Windows-bcc32.cmake: BUG: fix flags for borland + link shared and module + +2003-01-15 13:14 hoffman + + * Modules/FindOpenGL.cmake: BUG: make sure set command has proper + quoting + +2003-01-15 13:12 hoffman + + * Modules/FindOpenGL.cmake: quote the variable + +2003-01-15 11:59 hoffman + + * Modules/FindTclsh.cmake: look for cygtcl83 + +2003-01-15 11:32 king + + * CMakeLists.txt: ENH: Merge of backward compatability changes from + trunk. + +2003-01-15 11:17 king + + * Utilities/cmake_release_version.sh: ENH: Updated version for + 1.6.beta2 release. + +2003-01-15 11:03 martink + + * Source/cmMakefile.h: updated patch level + +2003-01-14 22:10 andy + + * Source/CTest/: cmCTestSubmit.cxx, cmCTestSubmit.h: Add support + for http submit. Also, add support for proxy, but it does not + work yet. + +2003-01-14 22:10 andy + + * Source/cmCTest.cxx: Add support for http submit + +2003-01-14 09:53 andy + + * Source/: cmMakefile.cxx, cmMakefile.h: Make GetCMakeInstance + private and clean cxx file + +2003-01-13 10:15 martink + + * Modules/CheckSymbolExists.cmake: join from head + +2003-01-13 10:11 martink + + * Modules/FindQt.cmake: merge from branch + +2003-01-13 10:07 martink + + * Modules/Platform/Linux-como.cmake: joined to head + +2003-01-13 10:04 martink + + * Source/cmLocalVisualStudio6Generator.cxx, + Tests/Complex/Library/testConly.c, + Tests/ComplexOneConfig/Library/testConly.c, + Tests/ComplexRelativePaths/Library/testConly.c: joined to head + +2003-01-13 09:30 hoffman + + * Source/cmLocalVisualStudio6Generator.cxx, + Tests/Complex/Library/testConly.c, + Tests/ComplexOneConfig/Library/testConly.c, + Tests/ComplexRelativePaths/Library/testConly.c: BUG: fix + CMAKE_C_FLAGS for visual studio 6, and add a test case + +2003-01-13 09:27 martink + + * Modules/CheckIncludeFileCXX.cmake: joined to head + +2003-01-13 09:24 martink + + * Modules/FindPNG.cmake: fixed typo + +2003-01-13 09:22 martink + + * Modules/: TestForANSIForScope.cmake, TestForSTDNamespace.cmake: + joined to head + +2003-01-13 09:12 martink + + * Modules/: CMakeVS6BackwardCompatibility.cmake, + CMakeVS7BackwardCompatibility.cmake, CheckTypeSize.cmake, + FindX11.cmake: joined to head + +2003-01-13 09:09 martink + + * Source/cmake.cxx, Source/cmake.h, Modules/FindOpenGL.cmake, + Modules/CMakeBackwardCompatibilityC.cmake, + Modules/CMakeBackwardCompatibilityCXX.cmake: joined to head + +2003-01-13 09:06 martink + + * Source/: cmMakefile.cxx, cmVariableWatch.h: joined to head + +2003-01-13 09:02 martink + + * Source/: cmGlobalGenerator.cxx, + cmLocalVisualStudio6Generator.cxx: joined to head + +2003-01-13 08:51 martink + + * Source/cmAbstractFilesCommand.cxx: joined + +2003-01-13 08:50 martink + + * Source/CMakeLists.txt: added install target + +2003-01-13 08:14 andy + + * Source/cmLocalVisualStudio6Generator.cxx: Add space between + arguments + +2003-01-12 22:28 andy + + * Modules/CheckSymbolExists.cmake: Add macro for checking if symbol + exists + +2003-01-12 10:50 andy + + * Source/cmLocalVisualStudio6Generator.cxx: Use C flags too. Not + exactly the right solution but it will have to do for now. + +2003-01-11 21:47 andy + + * Source/CTest/: cmCTestSubmit.cxx, cmCTestSubmit.h: Add triggering + +2003-01-11 21:47 andy + + * Source/cmCTest.cxx: Fix time output and add triggering + +2003-01-11 10:57 andy + + * Source/CMakeLists.txt: Fix testing of curl on windows + +2003-01-10 20:22 andy + + * Source/CMakeLists.txt: Add curl testing + +2003-01-10 17:31 hoffman + + * CMakeLists.txt: ENH: make it work with cmake 1.6 with no + backwards compatibility + +2003-01-10 11:07 martink + + * Source/cmGlobalGenerator.cxx: fix warnings + +2003-01-10 09:02 martink + + * Source/cmake.cxx: compiler warning + +2003-01-10 07:50 andy + + * Source/CTest/cmCTestSubmit.cxx: Method should return something + +2003-01-09 15:54 martink + + * Modules/FindOpenGL.cmake: better fix for win32 + +2003-01-09 14:00 martink + + * Modules/FindOpenGL.cmake: update to not put PROJECT_SOURCE_DIR as + OPENGL_PATH + +2003-01-09 12:18 martink + + * Source/: cmake.cxx, cmake.h, cmGlobalGenerator.cxx, + cmGlobalGenerator.h: fix bug in env settings + +2003-01-09 11:35 martink + + * Source/: cmMakefile.cxx, cmVariableWatch.h: more option on var + watches + +2003-01-09 11:34 martink + + * Modules/CheckTypeSize.cmake: minor fix to backw compat + +2003-01-09 11:32 hoffman + + * Source/cmGlobalGenerator.cxx: fix warning + +2003-01-09 11:28 hoffman + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h: restore the + environment for cxx and cc in global generator + +2003-01-09 11:27 hoffman + + * Source/cmVariableWatch.h: use cmstdstring in maps + +2003-01-09 09:16 hoffman + + * Source/cmVariableWatch.h: fix syntax for addwatch + +2003-01-09 08:50 martink + + * Modules/: CMakeVS6BackwardCompatibility.cmake, + CMakeVS7BackwardCompatibility.cmake: added big endian stuff + +2003-01-09 08:47 martink + + * Source/cmGlobalGenerator.cxx: only load bw compat if + CMAKE_BACK... is set + +2003-01-09 08:47 martink + + * Source/cmake.cxx: added watches for access of bw compat vars + +2003-01-09 08:44 martink + + * Source/cmAbstractFilesCommand.cxx: now complains more + +2003-01-08 14:41 hoffman + + * Utilities/cmake_release_config_aix: release script for aix + +2003-01-08 13:24 andy + + * Source/: CMakeLists.txt, Makefile.in, cmMakefile.cxx, + cmMakefile.h, cmVariableWatch.cxx, cmVariableWatch.h, cmake.cxx, + cmake.h: Add variable watch support on the branch + +2003-01-08 13:24 andy + + * Source/cmTryCompileCommand.cxx: Merge try compile fixes to branch + +2003-01-08 12:59 andy + + * Source/: CMakeLists.txt, Makefile.in, cmMakefile.cxx, + cmMakefile.h, cmVariableWatch.cxx, cmVariableWatch.h, cmake.cxx, + cmake.h: Add option of watching variables + +2003-01-08 12:12 hoffman + + * Modules/CMakeBackwardCompatibilityCXX.cmake, + Modules/CheckIncludeFileCXX.cmake, + Modules/TestForANSIForScope.cmake, + Modules/TestForSTDNamespace.cmake, + Source/cmTryCompileCommand.cxx: ENH: only force the use of ansi + flags in backwards mode + +2003-01-08 11:58 iscott + + * Modules/FindQt.cmake: mark all variables advanced + +2003-01-08 11:53 andy + + * Tests/X11/CMakeLists.txt: Change name of variable + +2003-01-08 11:45 andy + + * Modules/: CMakeBackwardCompatibilityC.cmake, FindX11.cmake: Fix + FindX11 to match convention + +2003-01-08 10:48 iscott + + * Modules/: FindMPEG2.cmake, FindPNG.cmake, FindSDL.cmake, + LinkQT.cmake: LinkQT.cmake has been deprecated for ages, removed + it now. Fixed mistake in FindPNG.cmake Donated FindMPEG2 and + FindSDL from VXL. + +2003-01-07 22:24 andy + + * Source/CTest/: cmCTestSubmit.cxx, cmCTestSubmit.h: Implement FTP + uploading + +2003-01-07 22:23 andy + + * Source/CTest/CMakeLists.txt: Add more places to search for + library, also include curl directory when compiling + +2003-01-07 22:23 andy + + * Source/cmCTest.cxx: New signature + +2003-01-07 15:04 hoffman + + * CMakeLists.txt: ENH: fix install of cmake.1 + +2003-01-07 14:57 hoffman + + * CMakeLists.txt: fix reg ex for install cmake man + +2003-01-07 13:52 martink + + * Source/CMakeLists.txt: adde dinstall for cmCPluginAPI.h + +2003-01-07 13:19 hoffman + + * CMakeLists.txt, Templates/CMakeLists.txt: ENH: fix install and + initial prefix + +2003-01-07 13:05 hoffman + + * Templates/CMakeLists.txt: ENH: fix install target for templates + +2003-01-07 12:54 hoffman + + * Templates/: cconfigure, cconfigure.in, cxxconfigure, + cxxconfigure.in: remove unused files + +2003-01-07 12:05 hoffman + + * CMakeLists.txt: use bootstrap initial flags + +2003-01-07 10:22 king + + * Utilities/cmake_release_config_irix: BUG: Version number on rolle + is 6.4, not 6.5. + +2003-01-06 23:13 andy + + * Source/: cmCTest.cxx, cmCTest.h: Work on submitting + +2003-01-06 23:07 andy + + * Source/CTest/: CMakeLists.txt, cmCTestSubmit.cxx, + cmCTestSubmit.h: Start working on improved test + +2003-01-06 16:09 king + + * Utilities/cmake_release_config_hpux: ERR: Fixes for linking + statically with -ldld. + +2003-01-06 15:41 hoffman + + * ChangeLog.txt: ENH: update change log for new version + +2003-01-06 15:21 king + + * Utilities/cmake_release_config_sun: ERR: Fix for building static + with -ldl on sun. + +2003-01-06 14:56 king + + * Utilities/cmake_release_config_linux: ERR: Fixed typo. + +2003-01-06 14:30 biddi + + * Source/cmVTKWrapTclCommand.cxx: Fix a problem with TCL wrapping + if the source files have a relative path. The dependency is not + correctly handled + +2003-01-06 14:27 king + + * Utilities/: cmake_release_config_hpux, + cmake_release_config_linux, cmake_release_config_sun: ENH: + Updated for static executable. + +2003-01-06 11:31 king + + * Utilities/cmake_release_version.sh: ENH: Updated for 1.6 beta 1 + release. + +2003-01-06 11:23 king + + * Utilities/: cmake_release_config_darwin, + cmake_release_config_hpux, cmake_release_config_irix, + cmake_release_config_linux, cmake_release_config_osf, + cmake_release_config_sun, cmake_release_cygwin.sh, + cmake_release_unix_config.sh, cmake_release_version.sh: ENH: + Updated for CMake 1.6 release. Version number is now in a single + file that is sourced by all others. + +2003-01-06 10:58 martink + + * Source/: cmCPluginAPI.h: updated version + +2003-01-06 10:43 martink + + * CMake.rtf: updated docs + +2003-01-06 09:39 martink + + * Source/: cmMakefile.h: update version + +2003-01-06 09:36 martink + + * Source/cmMakefile.h: updated version + +2003-01-06 09:32 king + + * Modules/Platform/Linux-como.cmake: ENH: Added shared library + settings. + +2003-01-06 09:04 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: ENH: look for AIX compiler as + well + +2003-01-06 08:39 hoffman + + * Modules/Platform/OSF1.cmake: add shared path for OSF + +2003-01-05 11:24 hoffman + + * Modules/Platform/OSF1.cmake: BUG: revert back to rpath, + +2003-01-03 20:26 andy + + * Modules/CheckTypeSize.cmake: Remove debug + +2003-01-03 20:03 andy + + * Modules/: CheckFunctionExists.cmake, CheckLibraryExists.cmake, + CheckTypeSize.cmake, CheckVariableExists.cmake: Fix problems with + required flags + +2003-01-03 19:21 andy + + * Modules/: CheckFunctionExists.cmake, CheckIncludeFile.cmake, + CheckIncludeFiles.cmake, CheckLibraryExists.cmake, + CheckTypeSize.cmake, CheckVariableExists.cmake: Add required + flags + +2003-01-03 17:36 king + + * Modules/FindPythonLibs.cmake: ENH: Find python framework on Mac + OSX. + +2003-01-03 16:23 hoffman + + * Modules/Platform/OSF1.cmake: try to fix rpath on OSF + +2003-01-03 16:14 andy + + * Tests/COnly/libc2.h: Fix problem with test on Borland + +2003-01-03 08:12 hoffman + + * Modules/Platform/SunOS.cmake: BUG: bad rpath flag for suns + +2003-01-02 10:27 king + + * Source/cmCPluginAPI.h: ENH: Changed magic numbers to reserved. + Added CMAKE_VERSION_MAJOR and CMAKE_VERSION_MINOR macros to allow + commands to do conditional compilation across multiple versions + of CMake. + +2003-01-02 09:57 king + + * Modules/CMakeBackwardCompatibilityC.cmake: BUG: Don't add + -I/usr/include as an X_CFLAGS setting. + +2003-01-02 09:57 king + + * Modules/FindX11.cmake: BUG: Fixed ordering of X11 search. + +2003-01-02 09:06 andy + + * Tests/COnly/CMakeLists.txt: Rename libraries from c1 to testc1 + +2003-01-02 08:51 hoffman + + * Modules/Platform/: AIX.cmake, OSF1.cmake, SunOS.cmake: clean up + some c/cxx issues + +2003-01-01 18:00 andy + + * Modules/CheckIncludeFiles.cmake: Add macro for checking if a + swequence of includes can be includes + +2003-01-01 17:35 andy + + * Tests/COnly/CMakeLists.txt: Test conversion from ascii to string + +2003-01-01 17:34 andy + + * Source/: cmStringCommand.cxx, cmStringCommand.h: Add a way to + convert ascii to string + +2003-01-01 16:25 andy + + * Modules/: CheckFunctionExists.cmake, CheckLibraryExists.cmake, + CheckTypeSize.cmake, CheckVariableExists.cmake: To prevent cmake + from breaking up arguments, put quotes around them + +2003-01-01 15:02 andy + + * Modules/CheckVariableExists.cmake: Add a way to add custom + libraries to the mix. Also add status reporting + +2003-01-01 15:01 andy + + * Modules/: CheckFunctionExists.cmake, CheckLibraryExists.cmake, + CheckTypeSize.cmake: Add a way to add custom libraries to the mix + +2003-01-01 14:26 andy + + * Tests/COnly/: libc2.c, libc2.h: Shared library should export + symbols on windows + +2002-12-31 15:22 andy + + * Tests/COnly/: CMakeLists.txt, conly.c, libc1.c, libc1.h, libc2.c, + libc2.h: Test also stating and shared libraries + +2002-12-31 13:08 king + + * Modules/: CMakeDefaultMakeRuleVariables.cmake, + Platform/Darwin.cmake, Platform/HP-UX.cmake, + Platform/Linux-como.cmake, Platform/Windows-bcc32.cmake, + Platform/Windows-cl.cmake: ENH: Added to link rules. + +2002-12-31 12:59 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: When there are no + link flags, we want an empty string, not a null pointer. + +2002-12-31 12:41 king + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: Support LINK_FLAGS + property for static libraries. + +2002-12-30 11:48 hoffman + + * Modules/Platform/AIX.cmake: ENH: fix shared libraries on AIX + +2002-12-30 11:02 king + + * Modules/CMakeBackwardCompatibilityC.cmake, Modules/CheckSizeOf.c, + Modules/CheckSizeOf.cmake, Modules/CheckTypeSize.c, + Modules/CheckTypeSize.cmake, Tests/LoadCommand/CMakeLists.txt, + Tests/LoadCommandOneConfig/CMakeLists.txt: ENH: Renamed + Modules/CheckSizeOf to Modules/CheckTypeSize for consistency with + the macro name that is defined by the module. + +2002-12-30 08:18 andy + + * Source/cmSystemTools.cxx: Fix problem on windows with network + paths + +2002-12-30 07:47 hoffman + + * Source/: cmAbstractFilesCommand.h, cmAddCustomCommandCommand.h, + cmAddCustomTargetCommand.h, cmAddDefinitionsCommand.h, + cmAddExecutableCommand.h, cmAddTestCommand.h, + cmAuxSourceDirectoryCommand.h, cmBuildCommand.h, + cmBuildNameCommand.h, cmFLTKWrapUICommand.h: ENH: clean up docs + some + +2002-12-27 11:14 starreveld + + * Modules/FindPythonLibs.cmake: ENH: find python framework and + include files on OSX + +2002-12-26 19:59 andy + + * Modules/CMakeJavaCompiler.cmake.in: If there is no java compiler + report error on ADD_JAVA_LIBRARY + +2002-12-26 13:58 andy + + * Modules/Platform/Windows-cl.cmake: Add missing closing bracket + +2002-12-23 12:19 hoffman + + * Source/cmSystemTools.h: ENH: fix for AIX + +2002-12-23 09:51 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: WAR: remove warinings + +2002-12-23 09:25 hoffman + + * Source/cmSystemTools.cxx: ENH: handle // in the path + +2002-12-22 15:19 hoffman + + * Modules/Platform/Windows-bcc32.cmake, + Source/cmLocalUnixMakefileGenerator.cxx: ENH: fixes for borland + with spaces in the path + +2002-12-22 11:50 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: clean up warning and use + more short paths + +2002-12-22 10:09 barre + + * Modules/: Documentation.cmake, FindHTMLHelp.cmake, FindHhc.cmake: + ENH: it's time to create a real Microsoft HTML Help Workshop + CMake module + +2002-12-21 11:14 hoffman + + * Source/: cmGetTargetPropertyCommand.cxx, + cmGetTargetPropertyCommand.h, cmSetTargetPropertiesCommand.cxx, + cmSetTargetPropertiesCommand.h: ENH: add target properties files + +2002-12-20 17:15 hoffman + + * Source/cmCommands.cxx, Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmTarget.cxx, Source/cmTarget.h, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt: ENH: add + target properties + +2002-12-20 16:15 king + + * Source/cmVTKWrapTclCommand.cxx: ERR: Tcl_PkgProvide takes char*, + so we cannot pass a string literal to it. + +2002-12-20 12:59 king + + * Modules/Platform/Windows-cl.cmake, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio6Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Templates/CMakeVisualStudio6Configurations.cmake: ENH: Visual + Studio 6 and 7 generators now set CMAKE_CONFIGURATION_TYPES to be + a semicolon-separated list of configurations that will be built. + +2002-12-20 11:56 barre + + * Modules/: CMakeBackwardCompatibilityC.cmake, FindX11.cmake: FIX: + make CMAKE_X_LIBS and CMAKE_X_CFLAGS advanced + +2002-12-20 11:20 hoffman + + * Source/cmGlobalUnixMakefileGenerator.cxx: ENH: add a check to + make sure cmake can find the c or C++ compiler for trycompile + +2002-12-20 11:20 hoffman + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: BUG: fix for backwards + compatibility + +2002-12-20 10:23 martink + + * Source/: cmSourceFilesCommand.cxx, cmake.cxx: testing more + agressive compatability settings + +2002-12-20 09:43 king + + * Modules/FindTCL.cmake: ENH: Use the Mac -framework for Tk if it + is available. + +2002-12-20 09:42 king + + * Modules/FindTCL.cmake: ENH: Use the Mac -framework for Tcl if it + is available. + +2002-12-19 15:34 hoffman + + * Source/cmGlobalGenerator.cxx: BUG: enable the languages when not + running in global mode + +2002-12-19 12:51 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake: better docs + +2002-12-19 12:51 hoffman + + * Modules/Platform/Windows-cl.cmake: ENH: make linker flags use + init values so users can set them from the cache + +2002-12-18 16:58 king + + * Source/cmVTKWrapTclCommand.cxx: ENH: Tcl packages now + Tcl_PkgProvide their own name and version. + +2002-12-18 10:52 king + + * Modules/Platform/gcc.cmake: ENH: Adding build type flags for C. + +2002-12-18 09:38 king + + * Source/CMakeLists.txt, Tests/X11/CMakeLists.txt: ERR: Project + name and executable name should match for consistency in the X11 + test. + +2002-12-17 17:05 king + + * Source/: cmCPluginAPI.cxx, cmCPluginAPI.h: ENH: Added return type + int to ExecuteCommand. + +2002-12-17 14:55 king + + * Source/cmFLTKWrapUICommand.cxx: BUG: Need at least 2 arguments, + not exactly 2. + +2002-12-17 14:55 king + + * Source/cmListFileCache.h: ERR: Added operator != for SGI. + +2002-12-17 14:54 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, + CMakeDetermineJavaCompiler.cmake, CMakeDetermineSystem.cmake, + CMakeSystemSpecificInformation.cmake, CheckFunctionExists.cmake, + CheckIncludeFile.cmake, CheckIncludeFileCXX.cmake, + CheckLibraryExists.cmake, CheckSizeOf.cmake, + CheckVariableExists.cmake, TestBigEndian.cmake, + TestCXXAcceptsFlag.cmake, TestForANSIForScope.cmake, + TestForSTDNamespace.cmake: ENH: use CMAKE_ROOT and not PROJECT_ + for try compile stuff, this allows projects within projects to + have different languages + +2002-12-17 13:28 king + + * Source/CMakeLists.txt, Tests/X11/CMakeLists.txt: BUG: Renamed X11 + test executable to useX11 to avoid conflict with name of library. + +2002-12-17 12:56 martink + + * Source/cmLocalVisualStudio6Generator.cxx: better handling of + Module + +2002-12-17 12:11 andy + + * Source/cmake.cxx: Save directories when doing global build + +2002-12-17 11:58 king + + * Source/cmMacroCommand.cxx: ENH: Improved error message for macro + invoked with incorrect number of arguments. + +2002-12-17 11:57 king + + * Source/cmTryCompileCommand.cxx: ENH: TryCompile should produce a + verbose makefile. + +2002-12-17 11:55 king + + * Modules/: CMakeBackwardCompatibilityC.cmake, FindX11.cmake: ENH: + FindX11.cmake module now almost fully duplicates old configure + functionality. + +2002-12-17 10:04 martink + + * Source/cmLocalVisualStudio7Generator.cxx: some clean up in link + directories + +2002-12-16 21:19 andy + + * Source/: CMakeLists.txt, cmCTest.cxx, cmCTest.h, ctest.cxx, + ctest.h: Split ctest into two three files + +2002-12-16 18:28 king + + * Source/cmLocalVisualStudio7Generator.cxx: BUG: Cannot remove + quotes from defined flags. + +2002-12-16 12:13 andy + + * Source/cmake.cxx: Fix switching from local to global generation + when cmake version changes or when things change inside version + +2002-12-16 11:10 king + + * Source/cmake.cxx: ENH: Added copy_if_different option to -E flag. + +2002-12-16 09:39 king + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: BUG: Fixed quotes in output + paths. + +2002-12-15 13:45 andy + + * Source/: ctest.cxx, ctest.h: Add support for only showing what + will be done. This way you can for example get a list of all + tests: ctest -N or list of all tests that match regex: ctest -N + -R regex + +2002-12-13 17:35 king + + * Tests/: Complex/CMakeLists.txt, + Complex/cmTestGeneratedHeader.h.in, + Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestGeneratedHeader.h.in, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestGeneratedHeader.h.in, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx: ENH: Added test for + generated header included by non-generated source. + +2002-12-13 17:34 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: Need source file + and OBJECT_DEPENDS as dependencies of an object file. + +2002-12-13 16:16 king + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, + cmSetSourceFilesPropertiesCommand.cxx: ENH: Added source file + property OBJECT_DEPENDS to support generated header files + included in non-generated sources. + +2002-12-13 14:58 king + + * Modules/: CheckFunctionExists.cmake, CheckIncludeFile.cmake, + CheckIncludeFileCXX.cmake, CheckLibraryExists.cmake, + CheckSizeOf.cmake, CheckVariableExists.cmake: ENH: Don't repeat + check even if answer was no. + +2002-12-13 09:52 martink + + * Source/cmIfCommand.cxx: made more strict + +2002-12-13 09:27 martink + + * Source/: ctest.cxx, cmCPluginAPI.cxx: fixed warnings + +2002-12-13 09:18 king + + * Source/: cmFunctionBlocker.h, cmIfCommand.h: ERR: Fixed unused + parameter warning. + +2002-12-12 17:48 hoffman + + * Source/: cmTryCompileCommand.cxx, cmTryCompileCommand.h: Make try + compile add a depend to re-run cmake if its source chagnes + +2002-12-12 12:02 king + + * Utilities/: cmake_release_config_darwin, + cmake_release_config_hpux, cmake_release_config_irix, + cmake_release_config_linux, cmake_release_config_osf, + cmake_release_config_sun, cmake_release_cygwin.sh: ENH: Updated + for 1.4.7 release. + +2002-12-12 11:51 martink + + * Source/cmMakefile.h: updated to patch7 + +2002-12-12 11:36 king + + * Source/: cmListFileCache.cxx, cmListFileCache.h, + cmMacroCommand.cxx, cmMakefile.cxx, cmMakefile.h, ctest.cxx: ENH: + Improved filename/line number reporting in error message. Macro + invocations now chain up the error message. + +2002-12-12 10:25 king + + * Modules/CMakeTestGNU.c: ERR: Fixed syntax errors for picky + preprocessors. + +2002-12-12 10:25 king + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: ERR: Need double-quotes around + expression to be mached in IF command. + +2002-12-12 10:10 king + + * Tests/: Complex/CMakeLists.txt, Complex/VarTests.cmake, + ComplexOneConfig/CMakeLists.txt, ComplexOneConfig/VarTests.cmake, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/VarTests.cmake: BUG: Can't double-quote + foreach arguments. + +2002-12-12 08:42 martink + + * Tests/Wrapping/CMakeLists.txt: now uses SET instead of + SOURCE_LIST command + +2002-12-11 18:20 king + + * Source/cmListFileCache.cxx: BUG: Multi-line functions must also + increment line number, not the pointer. + +2002-12-11 18:15 king + + * Source/cmEndForEachCommand.h: ERR: Dummy InitialPass + implementation must return a value. + +2002-12-11 18:13 king + + * Source/: cmAbstractFilesCommand.cxx, + cmAddCustomCommandCommand.cxx, cmAddCustomTargetCommand.cxx, + cmAddDefinitionsCommand.cxx, cmAddDependenciesCommand.cxx, + cmAddExecutableCommand.cxx, cmAddLibraryCommand.cxx, + cmAddTestCommand.cxx, cmCPluginAPI.cxx, cmCommand.h, + cmCreateTestSourceList.cxx, cmEndForEachCommand.cxx, + cmEndForEachCommand.h, cmFindFileCommand.cxx, + cmFindLibraryCommand.cxx, cmFindPathCommand.cxx, + cmFindProgramCommand.cxx, cmForEachCommand.cxx, + cmForEachCommand.h, cmFunctionBlocker.h, cmITKWrapTclCommand.cxx, + cmIfCommand.cxx, cmIfCommand.h, cmIncludeDirectoryCommand.cxx, + cmInstallProgramsCommand.cxx, cmInstallTargetsCommand.cxx, + cmLinkDirectoriesCommand.cxx, cmLinkLibrariesCommand.cxx, + cmListFileCache.cxx, cmListFileCache.h, cmLoadCacheCommand.cxx, + cmLoadCommandCommand.cxx, cmLocalUnixMakefileGenerator.cxx, + cmMacroCommand.cxx, cmMacroCommand.h, cmMakefile.cxx, + cmMakefile.h, cmMarkAsAdvancedCommand.cxx, cmMessageCommand.cxx, + cmProjectCommand.cxx, cmRemoveCommand.cxx, + cmSetSourceFilesPropertiesCommand.cxx, cmSourceFilesCommand.cxx, + cmSourceFilesRemoveCommand.cxx, cmSubdirCommand.cxx, + cmSystemTools.cxx, cmSystemTools.h, cmTarget.cxx, + cmTargetLinkLibrariesCommand.cxx, cmUtilitySourceCommand.cxx, + cmVariableRequiresCommand.cxx, cmWriteFileCommand.cxx, ctest.cxx: + ENH: Moved ExpandListVariables out of individual commands. + Argument evaluation rules are now very consistent. Double quotes + can always be used to create exactly one argument, regardless of + contents inside. + +2002-12-11 14:18 martink + + * Source/CMakeSetup.dsw: removed dsw file + +2002-12-11 14:16 martink + + * Source/: cmCPluginAPI.cxx, cmCPluginAPI.h: added a Free method + +2002-12-11 14:15 king + + * Source/: cmCreateTestSourceList.cxx, cmSystemTools.cxx: ENH: + Improved implementation of MSVC debug hook to only add the hook + if DART_TEST_FROM_DART is set in the environment. This is better + than always adding the hook and testing the environment from the + callback. + +2002-12-11 12:09 andy + + * Source/: cmGlobalVisualStudio7Generator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: Add check so that java + projects build without C++ + +2002-12-11 11:49 king + + * Source/: cmDumpDocumentation.cxx, cmSystemTools.cxx, + cmSystemTools.h, cmakemain.cxx, cmaketest.cxx, cmw9xcom.cxx, + ctest.cxx: ENH: Added cmSystemTools::EnableMSVCDebugHook() to + prevent error dialogs when CMake is invoked by Dart. + +2002-12-11 11:32 king + + * Source/cmCreateTestSourceList.cxx: ENH: Generate code to setup + MSVC debug library hook. The test driver program will not + display error dialogs if DART_TEST_FROM_DART is set in the + environment. + +2002-12-11 10:34 andy + + * Modules/CMakeDetermineJavaCompiler.cmake, + Modules/CMakeJavaCompiler.cmake.in, Source/cmGlobalGenerator.cxx: + Add java support + +2002-12-10 17:52 andy + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h: Add support for comments on + custom commands in visual studio 6 + +2002-12-10 17:43 andy + + * Source/: cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: Add support for comments on + custom commands in visual studio 7 + +2002-12-10 16:46 andy + + * Source/: cmCustomCommand.cxx, cmCustomCommand.h, cmMakefile.cxx, + cmMakefile.h, cmAddCustomCommandCommand.cxx, + cmAddCustomCommandCommand.h, cmLocalUnixMakefileGenerator.cxx, + cmSourceGroup.cxx, cmSourceGroup.h: Add comment support, so that + you can see in build process what the custom command does + +2002-12-10 16:45 andy + + * Source/: cmAddCustomTargetCommand.cxx, + cmAddCustomTargetCommand.h: Allow target with no command + +2002-12-10 16:08 hoffman + + * Source/: cmOutputRequiredFilesCommand.cxx, + cmOutputRequiredFilesCommand.h: BUG: update for changes in + cmMakeDepend + +2002-12-10 16:01 hoffman + + * Source/: cmITKWrapTclCommand.cxx, cmITKWrapTclCommand.h: ENH: + update use of makedepend + +2002-12-10 15:55 hoffman + + * Source/: cmITKWrapTclCommand.cxx, cmITKWrapTclCommand.h: ENH: + update to new style MakeDepend + +2002-12-10 14:12 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: make sure empty depends + are not used + +2002-12-10 14:10 martink + + * Source/: cmOutputRequiredFilesCommand.cxx, + cmOutputRequiredFilesCommand.h: updated for changes in Depend + Calcs + +2002-12-10 13:59 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: do not output empty + depends + +2002-12-10 13:36 andy + + * Source/ctest.cxx: Remove warning + +2002-12-10 10:34 hoffman + + * Source/: cmMakeDepend.cxx, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: BUG: fix compile flags for source + files, and fix depend bug for cmake 14 branch + +2002-12-10 09:34 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: remove cerr + +2002-12-10 09:28 hoffman + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h, cmMakeDepend.cxx: BUG: fix bug + in depends + +2002-12-09 16:23 andy + + * Source/cmaketest.cxx: Add to usage + +2002-12-09 16:22 andy + + * Modules/FindPythonLibs.cmake: Better search for python + +2002-12-09 14:33 king + + * Modules/CMakeImportBuildSettings.cmake: ENH: Using only filename + without path or extension for comparing build tools. + +2002-12-09 08:27 hoffman + + * Modules/: CMakeVS6BackwardCompatibility.cmake, + CMakeVS7BackwardCompatibility.cmake: use win32 threads for win32 + +2002-12-08 22:36 andy + + * Source/: ctest.cxx, ctest.h: Initial addition of coverage + +2002-12-08 22:35 andy + + * Source/cmSystemTools.cxx: Fix bug in globbing. Now it actually + uses only files or directories that result in globbing not the + ones that were is the vector before + +2002-12-08 22:33 andy + + * Source/: cmGlobalGenerator.cxx, cmLocalUnixMakefileGenerator.cxx: + Rename variable to remove warning + +2002-12-08 14:25 starreveld + + * Templates/CMakeLists.txt: ERR: Remove references to files removed + 4 days ago + +2002-12-06 15:35 hoffman + + * Source/: cmGlobalUnixMakefileGenerator.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmLocalUnixMakefileGenerator.cxx, cmMakefile.cxx: ENH: fix IntDir + jump and build problem + +2002-12-06 11:43 hoffman + + * Source/cmGlobalGenerator.cxx: ENH: set the CXX and CC environment + vars + +2002-12-06 10:16 hoffman + + * Modules/CMakeDetermineCCompiler.cmake: BUG: fix C compiler init + +2002-12-06 10:09 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: clean up compiler picking code + +2002-12-06 10:02 hoffman + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Source/cmGlobalVisualStudio6Generator.cxx: fix for generator + picked compilers + +2002-12-05 16:53 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: use correct path type + for check_cache file + +2002-12-05 16:52 hoffman + + * Source/cmDynamicLoader.cxx: fix free before use + +2002-12-05 14:56 hoffman + + * Source/: cmCacheManager.cxx, cmLocalUnixMakefileGenerator.cxx: + ENH: add a rule to automatically re-run cmake from the top if the + CMakeCache.txt file is changed + +2002-12-05 14:24 andy + + * Source/Makefile.in: Better dependencies for bootstrap + +2002-12-05 13:44 hoffman + + * Modules/CMakeBackwardCompatibilityC.cmake, + Modules/CMakeBackwardCompatibilityCXX.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeVS6BackwardCompatibility.cmake, + Modules/CMakeVS6FindMake.cmake, + Modules/CMakeVS7BackwardCompatibility.cmake, + Modules/CMakeVS7FindMake.cmake, Modules/Dart.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalBorlandMakefileGenerator.h, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalNMakeMakefileGenerator.h, + Source/cmGlobalUnixMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.h, + Source/cmGlobalVisualStudio6Generator.cxx, + Source/cmGlobalVisualStudio6Generator.h, + Source/cmGlobalVisualStudio7Generator.cxx, + Source/cmGlobalVisualStudio7Generator.h, + Source/cmLocalVisualStudio6Generator.cxx: ENH: unify + EnableLanguage across all generators + +2002-12-05 11:55 andy + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommand/LoadedCommand.cxx, LoadCommand/LoadedCommand.h.in, + LoadCommandOneConfig/CMakeLists.txt, + LoadCommandOneConfig/LoadedCommand.cxx, + LoadCommandOneConfig/LoadedCommand.h.in: Speedup the test + +2002-12-05 11:09 martink + + * Source/cmGlobalVisualStudio7Generator.h: use InAll target setting + to determine what targets are in the default build + +2002-12-05 10:47 king + + * Modules/: FindVTK.cmake, UseVTK40.cmake, + UseVTKBuildSettings40.cmake, UseVTKConfig40.cmake: ENH: Added + support for finding/using VTK 4.0 without using its UseVTK.cmake + file that does a LOAD_CACHE. + +2002-12-05 10:34 king + + * Modules/CMakeImportBuildSettings.cmake: BUG: Fix for string + comparison when one string is empty. + +2002-12-05 09:46 king + + * Modules/: CMakeBuildSettings.cmake.in, + CMakeExportBuildSettings.cmake, CMakeImportBuildSettings.cmake: + ENH: Adding CMAKE_EXPORT_BUILD_SETTINGS and + CMAKE_IMPORT_BUILD_SETTINGS macro. + +2002-12-05 08:30 martink + + * Source/cmGlobalVisualStudio7Generator.cxx: use InAll target + setting to determine what targets are in the default build + +2002-12-04 18:44 king + + * Source/: cmStringCommand.cxx, cmStringCommand.h: ENH: Added + COMPARE modes to STRING command. + +2002-12-04 16:59 king + + * Modules/CMakeUnixFindMake.cmake: BUG: Removed stray debugging + message. + +2002-12-04 14:18 king + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: When a full path to + a library cannot be parsed, just add the whole path to the link + line. If it isn't a valid path, the linker will complain. + +2002-12-04 10:57 hoffman + + * Modules/CMakeUnixFindMake.cmake, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.cxx, Source/cmake.cxx, + Source/cmake.h: BUG: fix get make command problems. + +2002-12-04 10:44 martink + + * Source/cmake.cxx: added CMAKE_BACKWARDS_COMPATIBILITY entry + +2002-12-04 10:25 martink + + * Source/cmLinkLibrariesCommand.h: updated comment + +2002-12-03 16:19 hoffman + + * Modules/CMakeBorlandFindMake.cmake, + Modules/CMakeNMakeFindMake.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CMakeUnixFindMake.cmake, Modules/Platform/CYGWIN.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.cxx: determine + CMAKE_MAKE_PROGRAM in EnableLanguage + +2002-12-03 15:23 hoffman + + * Source/CMakeLists.txt, + Source/cmLocalBorlandMakefileGenerator.cxx, + Source/cmLocalBorlandMakefileGenerator.h, + Source/cmLocalNMakeMakefileGenerator.cxx, + Source/cmLocalNMakeMakefileGenerator.h, + Templates/CCMakeSystemConfig.cmake.in, + Templates/CMakeBorlandWindowsSystemConfig.cmake, + Templates/CMakeNMakeWindowsSystemConfig.cmake, + Templates/CXXCMakeSystemConfig.cmake.in: remove unused files + +2002-12-03 14:15 ibanez + + * Modules/FindImageMagick.cmake: Module to find tools from the + ImageMagick package. These tools are useful for converting image + formats. + +2002-12-03 14:09 martink + + * Source/: CMakeLists.txt, Makefile.in, cmake.cxx: remove code + warrior and fixed GUI isues + +2002-12-03 13:46 ibanez + + * Modules/FindFLTK.cmake: ENH: description of variables now follows + other style in other .cmake files. + +2002-12-03 13:44 ibanez + + * Modules/FindGLUT.cmake: ENH: Description of variables now + specifies that the full path is required. + +2002-12-03 12:59 martink + + * Source/cmMakefile.cxx: fix purify FMR + +2002-12-03 11:23 martink + + * CMakeLists.txt: bug fix and some cleanup + +2002-12-03 11:21 martink + + * Tests/.NoDartCoverage: clean up coverage some + +2002-12-03 10:47 hoffman + + * Modules/CMakeDefaultMakeRuleVariables.cmake, + Modules/Platform/Linux-como.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmLocalUnixMakefileGenerator.cxx: correctly place both + LINK_FLAGS and CXX_LINK_FLAGS and C_LINK_FLAGS into all the rules + +2002-12-03 09:59 hoffman + + * Modules/CMakeDefaultMakeRuleVariables.cmake: use LINK_FLAGS not C + and CXX LINK_FLAGS + +2002-12-02 16:35 martink + + * Source/cmStringCommand.cxx: fix compile warning + +2002-12-02 16:15 hoffman + + * Source/cmMakefile.cxx: add project command even if inheriting + +2002-12-02 16:08 hoffman + + * Source/cmListFileCache.cxx: ENH: put the project command at the + front of the project + +2002-12-02 15:59 martink + + * Source/: cmFindLibraryCommand.cxx, cmMakefile.cxx, cmMakefile.h, + cmSystemTools.cxx, cmSystemTools.h: removed cmMakefile depend + from cmSystemTools + +2002-12-02 15:43 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: ENH: remove forced + enable language call because a PROJECT command is now added to + each project + +2002-12-02 15:37 hoffman + + * Source/: cmListFileCache.cxx, cmMakefile.cxx: ENH: remove cerr + calls + +2002-12-02 15:30 hoffman + + * Source/: cmListFileCache.cxx, cmListFileCache.h, cmMakefile.cxx: + ENH: add PROJECT command if there is not one + +2002-12-02 15:03 martink + + * Source/cmIfCommand.cxx: minor fix + +2002-12-02 13:18 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: add a space around + the compile flags + +2002-12-02 10:33 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix compile flags + for a single file + +2002-11-29 18:56 andy + + * Source/cmGlobalUnixMakefileGenerator.cxx: Fix problem on unix + with space + +2002-11-29 16:35 andy + + * Source/cmSystemTools.cxx: When cd-jing into directory, if + directory has space, it should put quotes around. I guess we + could just put quotes around all the time + +2002-11-28 23:45 ibanez + + * Modules/FindFLTK.cmake: ENH: FLTK 1.1.1 under Windows links now + with the comctl32 library. + +2002-11-27 07:42 andy + + * Tests/ObjC++/CMakeLists.txt: Add missing library. The test should + be linked to framework Cocoa + +2002-11-27 07:41 andy + + * Source/cmSystemTools.cxx: Add objective C++ file in the list of + C++ files. This may be wrong, but it will fix problems on Mac for + now + +2002-11-26 19:02 starreveld + + * Source/CMakeLists.txt: Add ObjC++ test for OSX + +2002-11-26 19:01 starreveld + + * Tests/ObjC++/: CMakeLists.txt, objc++.mm: + Test for ObjC++ on OSX machines only + +2002-11-26 09:37 andy + + * Source/cmTryCompileCommand.cxx: Remove warning + +2002-11-25 17:57 andy + + * Modules/FindwxWindows.cmake: Change priorities + +2002-11-22 16:59 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: fix for paths with + spaces and borland + +2002-11-22 16:18 hoffman + + * Modules/Platform/Windows-bcc32.cmake: change flags for borland + +2002-11-22 15:44 andy + + * Source/cmLocalVisualStudio6Generator.cxx: Revert back to 1.5, + since it is fixed in ConvertToOutputPath and this breaks Windows + 98 + +2002-11-22 09:45 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: Rename local variable + +2002-11-21 23:54 hoffman + + * Source/cmLocalVisualStudio7Generator.cxx: add support for + CMAKE_C_FLAGS and handle quotes in CMAKE_CXX_FLAGS + +2002-11-21 16:11 hoffman + + * Source/cmTryCompileCommand.cxx: fix for c flags + +2002-11-21 16:03 hoffman + + * Source/: cmTryCompileCommand.cxx: fix flag setting + +2002-11-21 15:36 hoffman + + * Modules/Platform/CYGWIN.cmake: remove debug stuff + +2002-11-21 15:15 hoffman + + * Source/cmTryCompileCommand.cxx: move compile defs to cxx and c + flags + +2002-11-21 14:59 hoffman + + * Source/: cmTryCompileCommand.cxx, cmTryCompileCommand.h: clean up + entire temp directory + +2002-11-21 14:45 hoffman + + * Modules/: CheckIncludeFileCXX.cmake, + TestForANSIStreamHeaders.cmake: try to fix check for ansi stream + +2002-11-21 14:32 hoffman + + * Modules/CheckIncludeFileCXX.cmake: fix order + +2002-11-21 14:24 hoffman + + * Modules/TestForSTDNamespace.cmake: fix order + +2002-11-21 14:11 hoffman + + * Modules/CheckIncludeFileCXX.cmake, + Modules/TestForANSIForScope.cmake, + Modules/TestForANSIStreamHeaders.cmake, + Modules/TestForSTDNamespace.cmake, + Source/cmTryCompileCommand.cxx: move ansi cxx flags stuff out of + try compile and into cmake files + +2002-11-21 13:37 hoffman + + * Source/cmSystemTools.cxx: fix network paths with spaces + +2002-11-21 13:28 hoffman + + * Modules/CMakeBackwardCompatibilityCXX.cmake: have to cache + ansi_cxxflags + +2002-11-21 12:59 hoffman + + * Modules/: CMakeBackwardCompatibilityCXX.cmake, + TestCXXAcceptsFlag.cmake: spelling error + +2002-11-21 12:52 hoffman + + * Modules/: CMakeBackwardCompatibilityCXX.cmake, DummyCXXFile.cxx, + TestCXXAcceptsFlag.cmake, Platform/IRIX64.cmake, + Platform/OSF1.cmake: add checks for ansi flags and not hard code + them + +2002-11-21 12:26 andy + + * Source/cmLocalVisualStudio6Generator.cxx: Fix for network paths + with space + +2002-11-21 12:26 andy + + * Source/ctest.cxx: Fix for network paths + +2002-11-21 11:46 barre + + * Modules/CMakeSystemSpecificInformation.cmake: FUX: those vars + need to be ADVANCED + +2002-11-21 10:11 king + + * Modules/: CheckVariableExists.c, CheckVariableExists.cmake: ENH: + Added CHECK_VARIABLE_EXISTS macro. + +2002-11-21 10:03 king + + * Source/CursesDialog/cmCursesMainForm.cxx: ERR: Fixed string + literal to char* warnings. + +2002-11-21 08:45 hoffman + + * Modules/CMakeDefaultMakeRuleVariables.cmake, + Modules/Platform/CYGWIN.cmake, + Source/cmLocalUnixMakefileGenerator.cxx, + Tests/SystemInformation/SystemInformation.in: fix for create + shared library + +2002-11-21 08:19 martink + + * Tests/LinkLineOrder/: Exec1.c, Exec2.c, NoDepB.c, NoDepC.c, + NoDepE.c, NoDepF.c, NoDepX.c, NoDepY.c, NoDepZ.c, One.c: + converted c plus plus comments + +2002-11-21 08:12 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake: ENH: fix for module + run time flag + +2002-11-20 18:18 hoffman + + * Source/: cmCacheManager.h, cmSystemTools.cxx: rename foo + variables to better names + +2002-11-20 18:00 king + + * Source/: cmLoadCacheCommand.cxx, cmLoadCacheCommand.h: ENH: Added + READ_WITH_PREFIX option to LOAD_CACHE command. This allows + reading of cache values from another cache without actually + creating local copies of the cache entires. The values are + stored as prefixed local makefile variables. + +2002-11-20 16:23 king + + * Modules/FindVTK.cmake: ENH: Added support to find VTK 4.0. + +2002-11-20 15:23 hoffman + + * Modules/CMakeCCompiler.cmake.in: BUG: use CMAKE_COMPILER_IS_GNUCC + not CMAKE_COMPILER_IS_GNUGCC + +2002-11-20 14:40 ibanez + + * Modules/FindLATEX.cmake: ENH: Now also locates the "makeindex" + program. + +2002-11-20 14:11 king + + * Modules/FindVTK.cmake: ENH: Only search VTK_INSTALL_PATH if + USE_INSTALLED_VTK is on. Only search VTK_BINARY_PATH if + USE_BUILT_VTK is on. + +2002-11-20 13:37 king + + * Modules/FindVTK.cmake: ENH: New implementation of FindVTK to take + advantage of VTKConfig.cmake. Also provides more powerful search + path mechanism, and requires only one cache entry in user + project. + +2002-11-20 12:58 king + + * Source/cmSystemTools.cxx: BUG: Attempt to fix CopyFile problem + using flush before check for success. + +2002-11-20 09:06 king + + * Source/cmGetFilenameComponentCommand.cxx: ERR: Fixed + signed/unsigned warning. + +2002-11-20 09:06 king + + * Source/cmLocalUnixMakefileGenerator.cxx: ERR: Fixed unused + parameter warning. + +2002-11-20 09:04 martink + + * Tests/LinkLineOrder/NoDepA.c: fixed comments to be c style not c + plus plus + +2002-11-19 18:17 hoffman + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Source/cmGetFilenameComponentCommand.cxx, + Source/cmGetFilenameComponentCommand.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h: allow flags to be in the CC and CXX + environment variables + +2002-11-19 18:01 perera + + * Source/CMakeLists.txt, Source/cmMakefile.cxx, + Source/cmTarget.cxx, Source/cmTarget.h, + Tests/LinkLineOrder/CMakeLists.txt, Tests/LinkLineOrder/Exec1.c, + Tests/LinkLineOrder/Exec2.c, Tests/LinkLineOrder/NoDepA.c, + Tests/LinkLineOrder/NoDepB.c, Tests/LinkLineOrder/NoDepC.c, + Tests/LinkLineOrder/NoDepE.c, Tests/LinkLineOrder/NoDepF.c, + Tests/LinkLineOrder/NoDepX.c, Tests/LinkLineOrder/NoDepY.c, + Tests/LinkLineOrder/NoDepZ.c, Tests/LinkLineOrder/One.c, + Tests/LinkLineOrder/Two.c: BUG: the dependency analysis would + incorrectly alphabetically re-order the link lines, which affects + external libraries pulled up from deep within the dependency + tree. Fixed by preserving order everywhere. + +2002-11-19 15:55 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: fixes to better honor env CC and + CXX + +2002-11-19 14:40 hoffman + + * Source/cmSystemTools.cxx: ENH: add some better output when copy + file fails + +2002-11-19 14:40 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: fix some warnings + +2002-11-19 13:19 andy + + * Source/CursesDialog/cmCursesPathWidget.cxx: Add / after directory + name when doing tab completion + +2002-11-19 13:09 andy + + * Source/CursesDialog/: cmCursesMainForm.cxx, cmCursesMainForm.h: + Add progress to ccmake + +2002-11-19 12:20 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake: BUG: fix CFLAGS + +2002-11-19 12:18 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: BUG: fix handling of CXX + +2002-11-19 09:12 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: fix warning + +2002-11-19 09:01 martink + + * Source/cmSystemTools.cxx: fix in warning + +2002-11-18 16:29 andy + + * Source/CursesDialog/: cmCursesMainForm.cxx, cmCursesMainForm.h: + Initial add of progress + +2002-11-18 15:14 hoffman + + * Modules/: CMakeBackwardCompatibilityC.cmake, FindThreads.cmake: + BUG: fix for thread and cache override + +2002-11-18 10:52 andy + + * Modules/: CheckFunctionExists.cmake, CheckIncludeFile.cmake, + CheckLibraryExists.cmake, CheckSizeOf.cmake, + TestForANSIForScope.cmake, TestForANSIStreamHeaders.cmake, + TestForSTDNamespace.cmake: Add more messages, make messages look + the same, add checks if test was already successfull + +2002-11-18 10:51 andy + + * Modules/CMakeSystemSpecificInformation.cmake: If system detection + fails, make copy of CMakeCache + +2002-11-18 09:08 hoffman + + * Tests/SystemInformation/SystemInformation.in: add print for + compiler is gnu + +2002-11-17 17:28 martink + + * Source/: cmake.cxx, cmLocalUnixMakefileGenerator.cxx: fix some + compiler warnings hopefully + +2002-11-15 17:45 hoffman + + * Modules/Platform/Windows-bcc32.cmake, + Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix for borland run + time dll + +2002-11-15 16:00 hoffman + + * Modules/Platform/SunOS.cmake: fix for sun + +2002-11-15 13:17 martink + + * Source/cmake.cxx: fixed bad source directory bug + +2002-11-15 12:54 martink + + * Source/cmIfCommand.cxx: fixed compiler warning + +2002-11-15 10:07 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake: ENH: add back + install prefix + +2002-11-15 09:30 hoffman + + * Modules/FindThreads.cmake: fix thread logic + +2002-11-15 09:16 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake: ENH: add CFLAGS and + CXXFLAGS + +2002-11-15 07:42 andy + + * Source/cmakemain.cxx: Oops, std namespace + +2002-11-14 17:12 andy + + * Source/cmakemain.cxx: Add Progress support + +2002-11-14 16:29 berk + + * Modules/Platform/HP-UX.cmake: temp fix for hp + +2002-11-14 16:29 hoffman + + * Source/TODO: [no log message] + +2002-11-14 16:12 berk + + * Modules/Platform/HP-UX.cmake: fix flags for hp + +2002-11-14 14:06 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: Fix compile flags on c + files in static liobraries on windows + +2002-11-14 11:33 andy + + * Modules/CMakeSystemSpecificInformation.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix flags for c + compiler on windows + +2002-11-14 11:16 martink + + * Source/: cmCPluginAPI.cxx, cmCPluginAPI.h: added another func + +2002-11-14 11:03 martink + + * Source/: cmCPluginAPI.h, cmCPluginAPI.cxx: added another func + +2002-11-14 09:38 andy + + * Modules/: FindJNI.cmake, FindJava.cmake, FindPythonLibs.cmake: + Clean find for Python, add find for python 2.2 on windows, + cleanup java on windows and add java 1.4 support + +2002-11-14 09:38 berk + + * Source/cmLocalUnixMakefileGenerator.cxx: Added missing space. + +2002-11-14 09:37 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: Fix building on NMake. + Use short paths + +2002-11-14 08:59 hoffman + + * Modules/Platform/Windows-bcc32.cmake: BUG: fix for missing temp + file variable + +2002-11-13 23:36 hoffman + + * Modules/Platform/Windows-bcc32.cmake, + Source/cmLocalUnixMakefileGenerator.cxx: reorder tWR so that it + does not crash with shared + +2002-11-13 20:14 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: add support for borland + run time flag for shared builds + +2002-11-13 20:11 hoffman + + * Modules/Platform/Windows-bcc32.cmake: fix shared builds on + borland and add debug stuff for makefiles + +2002-11-13 18:27 hoffman + + * Source/: cmLocalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.h: BUG: fix for build out of dir for + windows + +2002-11-13 16:31 hoffman + + * Modules/: CheckFunctionExists.cmake, CheckIncludeFile.cmake, + CheckLibraryExists.cmake, CheckSizeOf.cmake: ENH: add status + messages + +2002-11-13 15:59 martink + + * Source/: cmLocalUnixMakefileGenerator.cxx, cmMakefile.cxx, + cmMakefile.h, cmMessageCommand.cxx, cmMessageCommand.h: ENH: + space fixes and add a status option to message command + +2002-11-13 15:32 martink + + * Modules/Platform/Windows-bcc32.cmake: ENH: move -P flag from + cxxflags to the compile line for cxx files + +2002-11-13 15:20 hoffman + + * Source/: cmGlobalUnixMakefileGenerator.cxx, cmake.cxx, cmake.h: + ENH: check to make sure cmake matches the cmake used to generate + the cache + +2002-11-13 14:51 hoffman + + * Modules/Platform/Windows-bcc32.cmake: ENH: use correct run time + library for borland + +2002-11-13 14:31 hoffman + + * Source/: cmCacheManager.cxx, cmGlobalUnixMakefileGenerator.cxx: + ENH: force a global generate if the cache version does not match + the running cmake + +2002-11-13 13:19 berk + + * Source/Makefile.in: BUG: add missing depend rules for hp make + +2002-11-13 11:49 hoffman + + * Modules/FindX11.cmake: fix for nsl library and X11 + +2002-11-13 11:36 hoffman + + * Modules/: CMakeBackwardCompatibilityC.cmake, FindX11.cmake: fix + for nsl library and X11 + +2002-11-13 11:25 hoffman + + * Modules/Platform/Windows-bcc32.cmake: BUG: fix order of link line + for creating shared libraries + +2002-11-12 19:39 king + + * Modules/CheckFunctionExists.cmake: BUG: Fixed doc string on + generated variable. + +2002-11-12 16:58 hoffman + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix path problems + +2002-11-12 16:27 will + + * Modules/FindX11.cmake: Backwards compatibility. Andy and Bill + made me add socket library. + +2002-11-12 15:24 hoffman + + * Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Source/cmLocalUnixMakefileGenerator.cxx: ENH: add .def file + support + +2002-11-12 14:48 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: change to new + variables + +2002-11-12 14:19 hoffman + + * Modules/: CMakeBackwardCompatibilityC.cmake, + CheckLibraryExists.cmake, FindThreads.cmake: add find threads + check + +2002-11-12 14:18 hoffman + + * Tests/SystemInformation/: CMakeLists.txt, DumpInformation.cxx, + DumpInformation.h.in, SystemInformation.in: clean up test for + html output + +2002-11-12 13:06 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: fix reg expression + +2002-11-12 12:47 king + + * Source/cmLocalUnixMakefileGenerator.cxx: [no log message] + +2002-11-12 10:47 barre + + * Modules/FindOpenGL.cmake: FIX: minor fix, OPENGL_INCLUDE_PATH was + set 2 times + +2002-11-12 09:33 hoffman + + * Tests/SystemInformation/DumpInformation.cxx: [no log message] + +2002-11-12 09:31 hoffman + + * Tests/SystemInformation/CMakeLists.txt: fix project name + +2002-11-12 09:12 hoffman + + * Modules/: CMakeSystemSpecificInformation.cmake, + Platform/CYGWIN.cmake, Platform/Windows-bcc32.cmake, + Platform/Windows-cl.cmake: Set CMAKE_BUILD_TOOL + +2002-11-11 18:10 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, Source/CMakeLists.txt, + Source/TODO, Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h: ENH: fix up several + problems with new stuff + +2002-11-11 18:07 hoffman + + * Tests/SystemInformation/: CMakeLists.txt, DumpInformation.cxx, + DumpInformation.h.in, SystemInformation.in: new test + +2002-11-11 17:00 hoffman + + * Modules/Platform/OSF1.cmake: Fix for OSF + +2002-11-11 13:15 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: Fix regular expressions + to be able to handle windows libraries + +2002-11-11 12:31 hoffman + + * Modules/CMakeBackwardCompatibilityC.cmake, + Modules/CMakeCCompiler.cmake.in, + Modules/CMakeCXXCompiler.cmake.in, Modules/CMakeSystem.cmake.in, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/Platform/HP-UX.cmake, Modules/Platform/IRIX.cmake, + Modules/Platform/IRIX64.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, Modules/Platform/gcc.cmake, + Source/TODO, Source/cmGlobalUnixMakefileGenerator.cxx: clean up + flags with _init flags + +2002-11-11 11:43 hoffman + + * Modules/: CMakeLists.txt, Platform/CMakeLists.txt: add install + stuff for platform directory + +2002-11-11 09:11 hoffman + + * Modules/Platform/Darwin.cmake: ENH: fix for darwin modules + +2002-11-10 10:02 hoffman + + * Modules/Platform/: HP-UX.cmake, IRIX.cmake, IRIX64.cmake, + Windows-bcc32.cmake, Windows-cl.cmake, gcc.cmake: BUG: fix + setting of c flags + +2002-11-09 13:43 hoffman + + * Modules/Platform/: HP-UX.cmake, IRIX.cmake, IRIX64.cmake, + Windows-bcc32.cmake, Windows-cl.cmake, gcc.cmake: fix for + cxxflags + +2002-11-08 18:07 king + + * Modules/Platform/Linux-como.cmake: ENH: Adding support for comeau + C++ compiler. + +2002-11-08 18:06 king + + * Modules/: CMakeSystemSpecificInformation.cmake, + Platform/HP-UX.cmake, Platform/IRIX.cmake, Platform/IRIX64.cmake, + Platform/Linux.cmake, Platform/Windows-bcc32.cmake, + Platform/Windows-cl.cmake, Platform/gcc.cmake: ENH: Moved caching + of C*_FLAGS* settings down to + CMakeSystemSpecificInformation.cmake. The platform files can set + the defaults on the first run, and then the settings are cached + at the end. + +2002-11-08 18:05 king + + * Source/cmSetCommand.cxx: BUG: A variable is not in the cache if + it is UNINITIALIZED. + +2002-11-08 18:05 king + + * Source/cmGlobalCodeWarriorGenerator.cxx: ERR: Removed use of + NULL. + +2002-11-08 18:05 king + + * Source/cmSystemTools.cxx: ERR: Added missing include. + +2002-11-08 17:24 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake: store the compiler in the cache + +2002-11-08 15:46 hoffman + + * CMakeLists.txt, Modules/CMakeBackwardCompatibilityCXX.cmake, + Modules/CMakeCCompiler.cmake.in, + Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeDefaultMakeRuleVariables.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakePrintSystemInformation.cmake, + Modules/CMakeSystem.cmake.in, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CYGWIN.cmake, Modules/CheckIncludeFile.cxx.in, + Modules/CheckIncludeFileCXX.cmake, + Modules/TestForANSIForScope.cmake, + Modules/TestForAnsiForScope.cxx, + Modules/TestForSTDNamespace.cmake, + Modules/TestForSTDNamespace.cxx, Modules/Windows.cmake, + Modules/Platform/AIX.cmake, Modules/Platform/BSDOS.cmake, + Modules/Platform/CYGWIN.cmake, Modules/Platform/Darwin.cmake, + Modules/Platform/FreeBSD.cmake, Modules/Platform/HP-UX.cmake, + Modules/Platform/IRIX.cmake, Modules/Platform/IRIX64.cmake, + Modules/Platform/Linux.cmake, Modules/Platform/MP-RAS.cmake, + Modules/Platform/NetBSD.cmake, Modules/Platform/OSF1.cmake, + Modules/Platform/OpenBSD.cmake, Modules/Platform/RISCos.cmake, + Modules/Platform/SCO_SV.cmake, Modules/Platform/SINIX.cmake, + Modules/Platform/SunOS.cmake, Modules/Platform/True64.cmake, + Modules/Platform/ULTRIX.cmake, Modules/Platform/UNIX_SV.cmake, + Modules/Platform/UnixWare.cmake, + Modules/Platform/Windows-bcc32.cmake, + Modules/Platform/Windows-cl.cmake, + Modules/Platform/Windows.cmake, Modules/Platform/Xenix.cmake, + Modules/Platform/gcc.cmake, Source/CMakeLists.txt, Source/TODO, + Source/cmExecProgramCommand.cxx, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalGenerator.cxx, Source/cmGlobalGenerator.h, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmGlobalNMakeMakefileGenerator.h, + Source/cmGlobalUnixMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.h, Source/cmIfCommand.cxx, + Source/cmLoadCommandCommand.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, Source/cmMakefile.cxx, + Source/cmStandardIncludes.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTryCompileCommand.cxx, + Source/cmWin32ProcessExecution.cxx, + Source/cmWin32ProcessExecution.h, Source/ctest.cxx: Complete + rework of makefile generators expect trouble + +2002-11-08 13:28 hoffman + + * Modules/: CMakeCCompiler.cmake.in, CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, + CMakeSystemSpecificInformation.cmake, + Platform/Windows-bcc32.cmake, Platform/Windows-cl.cmake: [no log + message] + +2002-11-08 11:31 hoffman + + * Source/ctest.cxx: fix ctest + +2002-11-08 11:30 hoffman + + * Modules/: AIX.cmake, BSDOS.cmake, + CMakeSystemSpecificInformation.cmake, CYGWIN.cmake, Darwin.cmake, + FreeBSD.cmake, HP-UX.cmake, IRIX.cmake, IRIX64.cmake, + Linux.cmake, MP-RAS.cmake, NetBSD.cmake, OSF1.cmake, + OpenBSD.cmake, RISCos.cmake, SCO_SV.cmake, SINIX.cmake, + SunOS.cmake, True64.cmake, ULTRIX.cmake, UNIX_SV.cmake, + UnixWare.cmake, Windows-bcc32.cmake, Windows-cl.cmake, + Windows.cmake, Xenix.cmake, gcc.cmake, Platform/AIX.cmake, + Platform/BSDOS.cmake, Platform/CYGWIN.cmake, + Platform/Darwin.cmake, Platform/FreeBSD.cmake, + Platform/HP-UX.cmake, Platform/IRIX.cmake, Platform/IRIX64.cmake, + Platform/Linux.cmake, Platform/MP-RAS.cmake, + Platform/NetBSD.cmake, Platform/OSF1.cmake, + Platform/OpenBSD.cmake, Platform/RISCos.cmake, + Platform/SCO_SV.cmake, Platform/SINIX.cmake, + Platform/SunOS.cmake, Platform/True64.cmake, + Platform/ULTRIX.cmake, Platform/UNIX_SV.cmake, + Platform/UnixWare.cmake, Platform/Windows-bcc32.cmake, + Platform/Windows-cl.cmake, Platform/Windows.cmake, + Platform/Xenix.cmake, Platform/gcc.cmake: move to platform + directory + +2002-11-08 11:09 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake: hp fixes + +2002-11-08 10:40 hoffman + + * Modules/HP-UX.cmake: hp fixes + +2002-11-08 10:29 hoffman + + * Modules/HP-UX.cmake: hp fixes + +2002-11-08 10:22 hoffman + + * Modules/CMakeSystemSpecificInformation.cmake, + Modules/HP-UX.cmake, Source/cmLocalUnixMakefileGenerator.cxx: hp + fixes + +2002-11-08 08:47 hoffman + + * Modules/: CMakeBackwardCompatibilityCXX.cmake, HP-UX.cmake, + TestForANSIForScope.cmake: ENH: fix for hp and remove some + messages + +2002-11-07 17:45 hoffman + + * Modules/: CMakeBackwardCompatibilityCXX.cmake, + TestForANSIForScope.cmake, TestForAnsiForScope.cxx, + TestForSTDNamespace.cxx: [no log message] + +2002-11-07 17:26 hoffman + + * Modules/TestForANSIForScope.cmake: [no log message] + +2002-11-07 17:21 hoffman + + * Modules/: CMakeBackwardCompatibilityCXX.cmake, HP-UX.cmake, + TestForAnsiForScope.cxx, TestForSTDNamespace.cmake, + TestForSTDNamespace.cxx: [no log message] + +2002-11-07 11:43 hoffman + + * Modules/Windows-cl.cmake, Source/cmExecProgramCommand.cxx, + Source/cmLocalUnixMakefileGenerator.cxx: win32 apps and crash on + sun + +2002-11-07 09:22 king + + * Source/cmStringCommand.cxx: ERR: Fixed signed/unsigned warnings. + +2002-11-07 09:15 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: Revert + +2002-11-07 09:04 andy + + * Source/: cmake.cxx, cmake.h: Revert back + +2002-11-06 23:25 hoffman + + * Source/: cmGlobalNMakeMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx: clean up echos + +2002-11-06 23:06 hoffman + + * Modules/CMakeDefaultMakeRuleVariables.cmake, + Modules/Windows-bcc32.cmake, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h: borland mostly working, + tests are passing, no command to file stuff yet + +2002-11-06 18:40 king + + * Modules/FindITK.cmake: ENH: Enhanced FindITK supporting use of + ITK from an install tree or a build tree. Only one cache entry + is brought into user's project, called "ITK_DIR". This is the + location of an ITKConfig.cmake file from which other settings are + loaded. + +2002-11-06 18:05 king + + * Source/cmStringCommand.cxx, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: BUG: Fixed + STRING(REGEX REPLACE ...) and added better test. + +2002-11-06 17:35 king + + * Source/cmCommands.cxx, Source/cmStringCommand.cxx, + Source/cmStringCommand.h, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: Added STRING + command. + +2002-11-06 17:04 hoffman + + * Modules/Windows-bcc32.cmake: borland config + +2002-11-06 16:59 king + + * Source/: cmRegularExpression.cxx, cmRegularExpression.h: ENH: + compile method now returns whether compilation succeeded. + +2002-11-06 16:30 hoffman + + * Modules/Windows-cl.cmake, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h: borland getting closer + +2002-11-06 16:05 andy + + * Templates/AppleInfo.plist: Use CMake icon on Mac + +2002-11-06 14:56 andy + + * CMakeIcon.icns: Add Mac icon + +2002-11-06 14:54 andy + + * CMakeIcon.icns: Add CMake icon + +2002-11-06 13:06 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h, ctest.cxx: Move the + hi-res time to system tools + +2002-11-06 12:04 andy + + * Source/: cmake.cxx, cmake.h, CursesDialog/cmCursesMainForm.cxx: + In certain cases, try to guess the source directory, so that you + can run cmake or ccmake without specifying source dir + +2002-11-06 11:36 andy + + * Source/: cmSystemTools.cxx, CursesDialog/cmCursesPathWidget.cxx: + Remove warning + +2002-11-06 11:20 barre + + * Source/cmMakeDepend.cxx: FIX: a / was appended without checking + if there wasn't one already. + +2002-11-06 08:52 andy + + * Tests/X11/X11.c: Try to fix test + +2002-11-05 23:07 hoffman + + * Source/: TODO, cmLocalUnixMakefileGenerator.cxx: remove warning + +2002-11-05 22:55 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, IRIX64.cmake: ranlib + trouble + +2002-11-05 22:44 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, IRIX.cmake, + IRIX64.cmake: fix for no ranlib + +2002-11-05 18:11 hoffman + + * CMakeLists.txt, Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeSystem.cmake.in, Modules/IRIX64.cmake: remove debug + message statements + +2002-11-05 18:06 hoffman + + * Modules/: IRIX64.cmake: [no log message] + +2002-11-05 17:57 hoffman + + * Modules/IRIX64.cmake, Source/cmLocalUnixMakefileGenerator.cxx: + [no log message] + +2002-11-05 17:55 hoffman + + * CMakeLists.txt: debug + +2002-11-05 17:49 hoffman + + * Modules/CMakeDefaultMakeRuleVariables.cmake: enh: add to + link libs + +2002-11-05 17:31 hoffman + + * Modules/: CYGWIN.cmake, IRIX.cmake, IRIX64.cmake, gcc.cmake: add + flags + +2002-11-05 17:20 andy + + * Modules/FindX11.cmake: Make things advanced + +2002-11-05 17:05 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: add cxx flags to link + exe + +2002-11-05 15:49 hoffman + + * Modules/: HP-UX.cmake, IRIX64.cmake, OSF1.cmake: add ansi flags + +2002-11-05 14:33 hoffman + + * Modules/: IRIX.cmake, IRIX64.cmake, SunOS.cmake: [no log message] + +2002-11-05 14:10 hoffman + + * Modules/: AIX.cmake, BSDOS.cmake, Darwin.cmake, FreeBSD.cmake, + HP-UX.cmake, IRIX.cmake, MP-RAS.cmake, NetBSD.cmake, OSF1.cmake, + OpenBSD.cmake, RISCos.cmake, SCO_SV.cmake, SINIX.cmake, + SunOS.cmake, True64.cmake, ULTRIX.cmake, UNIX_SV.cmake, + UnixWare.cmake, Xenix.cmake: ENH: add all the OS files + +2002-11-05 13:35 andy + + * Source/CursesDialog/ccmake.cxx: Cleanup + +2002-11-05 11:52 hoffman + + * Modules/Linux.cmake: add linux config file + +2002-11-05 11:31 hoffman + + * Modules/: CMakeSystemSpecificInformation.cmake, Windows.cmake: + add check for sstream + +2002-11-05 11:02 hoffman + + * Modules/: CMakeBackwardCompatibilityCXX.cmake, + CheckIncludeFile.cxx.in, CheckIncludeFileCXX.cmake: add check for + sstream + +2002-11-05 10:45 hoffman + + * Source/: cmGlobalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx: fix backwards compat enable and + remove full path target + +2002-11-05 08:52 andy + + * Source/CursesDialog/: cmCursesFilePathWidget.cxx, + cmCursesFilePathWidget.h, cmCursesPathWidget.cxx, + cmCursesStringWidget.cxx: Reparent file path widget, add tab + completion support to path anf file path widget + +2002-11-05 08:51 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h: Add a simple + globbing of files and directories + +2002-11-05 07:15 andy + + * Modules/FindX11.cmake, Tests/X11/CMakeLists.txt: Try to fix + FindX11 + +2002-11-05 07:06 andy + + * Tests/X11/X11.c: Simplify + +2002-11-04 19:45 king + + * Source/cmITKWrapTclCommand.cxx: ENH: Added generation of + --gccxml-compiler argument to GCC-XML for msvc6, msvc7, and nmake + makefiles generators. + +2002-11-04 17:37 andy + + * Source/CursesDialog/: cmCursesPathWidget.cxx, + cmCursesPathWidget.h, cmCursesStringWidget.cxx, + cmCursesStringWidget.h: Start working on adding tab support + +2002-11-04 16:59 andy + + * Source/cmWin32ProcessExecution.cxx: Fix windows process execution + so that it pops up the windows + +2002-11-04 16:26 hoffman + + * Modules/CMakeCCompiler.cmake.in, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/Windows-cl.cmake, Modules/Windows.cmake, Source/TODO, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTryCompileCommand.cxx: nmake + passing tests + +2002-11-04 15:01 andy + + * Source/cmWriteFileCommand.cxx: Make directory if it does not + exist yet + +2002-11-04 14:50 andy + + * Templates/AppleInfo.plist: Attempt to automate apple gui + generation + +2002-11-04 11:54 andy + + * Tests/X11/X11.c: Fix test + +2002-11-04 10:13 hoffman + + * Source/TODO: [no log message] + +2002-11-04 10:11 hoffman + + * CMakeLists.txt, Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakePrintSystemInformation.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/Windows-cl.cmake, Modules/Windows.cmake, + Source/CMakeLists.txt, + Source/cmGlobalBorlandMakefileGenerator.cxx, + Source/cmGlobalNMakeMakefileGenerator.cxx, + Source/cmIfCommand.cxx, Source/cmLocalUnixMakefileGenerator.cxx: + nmake almost working + +2002-11-03 18:18 andy + + * Tests/X11/X11.c: Try to make test to run + +2002-11-01 22:57 hoffman + + * Source/CMakeLists.txt: make qt stuff advanced + +2002-10-31 10:36 andy + + * Templates/CCMakeSystemConfig.cmake.in: Revert X11 stuff until + other steps are done + +2002-10-29 15:58 andy + + * Tests/X11/X11.c: Print message on system without X11 + +2002-10-29 15:54 andy + + * Tests/X11/: CMakeLists.txt, X11.c: Add Windows code + +2002-10-29 15:47 andy + + * Modules/FindX11.cmake: Now it should work + +2002-10-29 15:46 andy + + * Source/CMakeLists.txt, Tests/X11/CMakeLists.txt, Tests/X11/X11.c: + Add test for X11 + +2002-10-29 15:03 hoffman + + * Modules/CMakeCXXCompiler.cmake.in, + Modules/CMakeDefaultMakeRuleVariables.cmake, + Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeDetermineCXXCompiler.cmake, + Modules/CMakeDetermineSystem.cmake, + Modules/CMakePrintSystemInformation.cmake, + Modules/CMakeSystem.cmake.in, + Modules/CMakeSystemSpecificInformation.cmake, + Modules/CYGWIN.cmake, Source/cmGlobalGenerator.cxx, + Source/cmGlobalGenerator.h, + Source/cmGlobalNMakeMakefileGenerator.h, + Source/cmGlobalUnixMakefileGenerator.cxx, + Source/cmGlobalUnixMakefileGenerator.h, + Source/cmLoadCommandCommand.cxx, + Source/cmLocalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.h, Source/cmMakefile.cxx, + Source/cmSystemTools.cxx, Tests/Testing/CMakeLists.txt: branch + checkin of working cygwin build for generator cleanup and removal + of configure + +2002-10-29 13:34 andy + + * Templates/CCMakeSystemConfig.cmake.in: Remove X11 stuff + +2002-10-29 13:34 andy + + * Modules/: CheckFunctionExists.cmake, CheckIncludeFile.cmake, + CheckLibraryExists.cmake, CheckSizeOf.cmake, TestBigEndian.cmake: + Add append to write_file + +2002-10-29 13:32 andy + + * Source/: cmWriteFileCommand.cxx, cmWriteFileCommand.h: Add flag + to WRITE_FILE to append + +2002-10-29 13:30 andy + + * Modules/CMakeBackwardCompatibilityC.cmake: Do this the right way + +2002-10-29 13:30 andy + + * Modules/FindX11.cmake: This should substitute configure part that + finds X11 + +2002-10-28 10:29 king + + * Source/cmITKWrapTclCommand.cxx: ENH: Added generation of + --gccxml-cxxflags option to complement --gccxml-compiler. + +2002-10-25 16:47 hoffman + + * Modules/CMakeDetermineCCompiler.cmake, + Modules/CMakeSystemSpecificInformation.cmake, + Source/cmGlobalUnixMakefileGenerator.cxx, + Source/cmLocalUnixMakefileGenerator.cxx: [no log message] + +2002-10-25 16:13 hoffman + + * Modules/CMakeCXXCompiler.cmake.in: [no log message] + +2002-10-25 15:46 king + + * Utilities/cmake_release_cygwin.sh: ENH: Updated for cmake 1.4.6 + package. Added automatic conversion of setup.hint to unix + newlines. + +2002-10-25 14:34 hoffman + + * Modules/: CMakeCCompiler.cmake.in, CMakeDetermineCCompiler.cmake: + [no log message] + +2002-10-25 14:25 hoffman + + * Source/: cmGlobalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx, cmLocalUnixMakefileGenerator.h: + test on unix + +2002-10-25 14:13 king + + * Utilities/: cmake_release_config_darwin, + cmake_release_config_hpux, cmake_release_config_irix, + cmake_release_config_linux, cmake_release_config_osf, + cmake_release_config_sun, cmake_release_cygwin.sh: ENH: Updated + for 1.4.6 release. + +2002-10-25 14:08 hoffman + + * Modules/: CMakeDefaultMakeRuleVariables.cmake, + CMakeDetermineCCompiler.cmake, CMakeDetermineCXXCompiler.cmake, + CMakeDetermineSystem.cmake, CMakeSystemSpecificInformation.cmake: + [no log message] + +2002-10-24 15:39 hoffman + + * Source/cmake.cxx: BUG: fix stack limit size on mac OSX + +2002-10-24 13:39 andy + + * Modules/CMakeBackwardCompatibilityC.cmake: Add check for big + endian in backward compatibility scripts + +2002-10-24 11:58 martink + + * Source/cmMakefile.h: updated patch level to 6 + +2002-10-24 11:48 martink + + * Source/cmBorlandMakefileGenerator.cxx: fix support for Win32 + execs + +2002-10-24 10:58 andy + + * Source/cmSubdirCommand.cxx: Subdirs reports an error if the + subdirectory does not exists + +2002-10-24 10:23 andy + + * Source/cmMakefile.cxx: Try to remove some warnings + +2002-10-23 18:03 king + + * Source/: cmAbstractFilesCommand.cxx, cmAbstractFilesCommand.h, + cmAddCustomCommandCommand.cxx, cmAddCustomCommandCommand.h, + cmAddCustomTargetCommand.cxx, cmAddCustomTargetCommand.h, + cmAddDefinitionsCommand.cxx, cmAddDefinitionsCommand.h, + cmAddDependenciesCommand.cxx, cmAddDependenciesCommand.h, + cmAddExecutableCommand.cxx, cmAddExecutableCommand.h, + cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, + cmAddTestCommand.cxx, cmAddTestCommand.h, + cmAuxSourceDirectoryCommand.cxx, cmAuxSourceDirectoryCommand.h, + cmBuildCommand.cxx, cmBuildCommand.h, cmBuildNameCommand.cxx, + cmBuildNameCommand.h, cmCMakeMinimumRequired.cxx, + cmCMakeMinimumRequired.h, cmCPluginAPI.cxx, cmCPluginAPI.h, + cmCacheManager.cxx, cmCacheManager.h, cmCommand.h, + cmCommands.cxx, cmCommands.h, cmConfigureFileCommand.cxx, + cmConfigureFileCommand.h, cmCreateTestSourceList.cxx, + cmCreateTestSourceList.h, cmCustomCommand.cxx, cmCustomCommand.h, + cmData.h, cmDirectory.cxx, cmDirectory.h, + cmDumpDocumentation.cxx, cmDynamicLoader.cxx, cmDynamicLoader.h, + cmElseCommand.cxx, cmElseCommand.h, cmEnableTestingCommand.cxx, + cmEnableTestingCommand.h, cmEndForEachCommand.cxx, + cmEndForEachCommand.h, cmEndIfCommand.cxx, cmEndIfCommand.h, + cmExecProgramCommand.cxx, cmExecProgramCommand.h, + cmFLTKWrapUICommand.cxx, cmFLTKWrapUICommand.h, + cmFindFileCommand.cxx, cmFindFileCommand.h, + cmFindLibraryCommand.cxx, cmFindLibraryCommand.h, + cmFindPathCommand.cxx, cmFindPathCommand.h, + cmFindProgramCommand.cxx, cmFindProgramCommand.h, + cmForEachCommand.cxx, cmForEachCommand.h, cmFunctionBlocker.h, + cmGeneratedFileStream.h, cmGetFilenameComponentCommand.cxx, + cmGetFilenameComponentCommand.h, + cmGetSourceFilePropertyCommand.cxx, + cmGetSourceFilePropertyCommand.h, + cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalBorlandMakefileGenerator.h, + cmGlobalCodeWarriorGenerator.cxx, cmGlobalCodeWarriorGenerator.h, + cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.h, + cmGlobalUnixMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, cmITKWrapTclCommand.cxx, + cmITKWrapTclCommand.h, cmIfCommand.cxx, cmIfCommand.h, + cmIncludeCommand.cxx, cmIncludeCommand.h, + cmIncludeDirectoryCommand.cxx, cmIncludeDirectoryCommand.h, + cmIncludeExternalMSProjectCommand.cxx, + cmIncludeExternalMSProjectCommand.h, + cmIncludeRegularExpressionCommand.cxx, + cmIncludeRegularExpressionCommand.h, cmInstallFilesCommand.cxx, + cmInstallFilesCommand.h, cmInstallProgramsCommand.cxx, + cmInstallProgramsCommand.h, cmInstallTargetsCommand.cxx, + cmInstallTargetsCommand.h, cmLinkDirectoriesCommand.cxx, + cmLinkDirectoriesCommand.h, cmLinkLibrariesCommand.cxx, + cmLinkLibrariesCommand.h, cmListFileCache.cxx, cmListFileCache.h, + cmLoadCacheCommand.cxx, cmLoadCacheCommand.h, + cmLoadCommandCommand.cxx, cmLoadCommandCommand.h, + cmLocalBorlandMakefileGenerator.cxx, + cmLocalBorlandMakefileGenerator.h, + cmLocalCodeWarriorGenerator.cxx, cmLocalCodeWarriorGenerator.h, + cmLocalGenerator.cxx, cmLocalGenerator.h, + cmLocalNMakeMakefileGenerator.cxx, + cmLocalNMakeMakefileGenerator.h, + cmLocalUnixMakefileGenerator.cxx, cmLocalUnixMakefileGenerator.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h, cmMacroCommand.cxx, + cmMacroCommand.h, cmMakeDepend.cxx, cmMakeDepend.h, + cmMakeDirectoryCommand.cxx, cmMakeDirectoryCommand.h, + cmMakefile.cxx, cmMakefile.h, cmMarkAsAdvancedCommand.cxx, + cmMarkAsAdvancedCommand.h, cmMessageCommand.cxx, + cmMessageCommand.h, cmOptionCommand.cxx, cmOptionCommand.h, + cmOutputRequiredFilesCommand.cxx, cmOutputRequiredFilesCommand.h, + cmProjectCommand.cxx, cmProjectCommand.h, cmQTWrapCPPCommand.cxx, + cmQTWrapCPPCommand.h, cmQTWrapUICommand.cxx, cmQTWrapUICommand.h, + cmRegularExpression.cxx, cmRegularExpression.h, + cmRemoveCommand.cxx, cmRemoveCommand.h, + cmSeparateArgumentsCommand.cxx, cmSeparateArgumentsCommand.h, + cmSetCommand.cxx, cmSetCommand.h, + cmSetSourceFilesPropertiesCommand.cxx, + cmSetSourceFilesPropertiesCommand.h, cmSiteNameCommand.cxx, + cmSiteNameCommand.h, cmSourceFile.cxx, cmSourceFile.h, + cmSourceFilesCommand.cxx, cmSourceFilesCommand.h, + cmSourceFilesRemoveCommand.cxx, cmSourceFilesRemoveCommand.h, + cmSourceGroup.cxx, cmSourceGroup.h, cmSourceGroupCommand.cxx, + cmSourceGroupCommand.h, cmStandardIncludes.h, + cmSubdirCommand.cxx, cmSubdirCommand.h, + cmSubdirDependsCommand.cxx, cmSubdirDependsCommand.h, + cmSystemTools.cxx, cmSystemTools.h, cmTarget.cxx, cmTarget.h, + cmTargetLinkLibrariesCommand.cxx, cmTargetLinkLibrariesCommand.h, + cmTryCompileCommand.cxx, cmTryCompileCommand.h, + cmTryRunCommand.cxx, cmTryRunCommand.h, + cmUseMangledMesaCommand.cxx, cmUseMangledMesaCommand.h, + cmUtilitySourceCommand.cxx, cmUtilitySourceCommand.h, + cmVTKMakeInstantiatorCommand.cxx, cmVTKMakeInstantiatorCommand.h, + cmVTKWrapJavaCommand.cxx, cmVTKWrapJavaCommand.h, + cmVTKWrapPythonCommand.cxx, cmVTKWrapPythonCommand.h, + cmVTKWrapTclCommand.cxx, cmVTKWrapTclCommand.h, + cmVariableRequiresCommand.cxx, cmVariableRequiresCommand.h, + cmWin32ProcessExecution.cxx, cmWin32ProcessExecution.h, + cmWrapExcludeFilesCommand.cxx, cmWrapExcludeFilesCommand.h, + cmWriteFileCommand.cxx, cmWriteFileCommand.h, cmake.cxx, cmake.h, + cmakemain.cxx, cmaketest.cxx, cmakewizard.cxx, cmakewizard.h, + cmw9xcom.cxx, ctest.cxx, ctest.h, CursesDialog/ccmake.cxx, + CursesDialog/cmCursesBoolWidget.cxx, + CursesDialog/cmCursesBoolWidget.h, + CursesDialog/cmCursesCacheEntryComposite.cxx, + CursesDialog/cmCursesCacheEntryComposite.h, + CursesDialog/cmCursesDummyWidget.cxx, + CursesDialog/cmCursesDummyWidget.h, + CursesDialog/cmCursesFilePathWidget.cxx, + CursesDialog/cmCursesFilePathWidget.h, + CursesDialog/cmCursesForm.cxx, CursesDialog/cmCursesForm.h, + CursesDialog/cmCursesLabelWidget.cxx, + CursesDialog/cmCursesLabelWidget.h, + CursesDialog/cmCursesLongMessageForm.cxx, + CursesDialog/cmCursesLongMessageForm.h, + CursesDialog/cmCursesMainForm.cxx, + CursesDialog/cmCursesMainForm.h, + CursesDialog/cmCursesPathWidget.cxx, + CursesDialog/cmCursesPathWidget.h, + CursesDialog/cmCursesStandardIncludes.h, + CursesDialog/cmCursesStringWidget.cxx, + CursesDialog/cmCursesStringWidget.h, + CursesDialog/cmCursesWidget.cxx, CursesDialog/cmCursesWidget.h: + ENH: Added reference to Copyright.txt. Removed old reference to + ITK copyright. Changed program name to CMake instead of Insight + in source file header. Also removed tabs. + +2002-10-23 16:57 hoffman + + * Source/: cmExecProgramCommand.cxx, cmExecProgramCommand.h: ENH: + if output variable turn verbose off + +2002-10-23 16:53 hoffman + + * Modules/: CMakeCCompiler.cmake.in, + CMakeDefaultMakeRuleVariables.cmake, + CMakeDetermineCCompiler.cmake, CMakeDetermineCXXCompiler.cmake, + CMakeDetermineSystem.cmake, CMakePrintSystemInformation.cmake, + CMakeSystem.cmake.in, CMakeSystemSpecificInformation.cmake, + CYGWIN.cmake: closer to removing autoconf + +2002-10-23 16:43 king + + * Source/CursesDialog/form/frm_driver.c: ERR: Another attempt to + remove warnings from missing prototypes. + +2002-10-22 18:17 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, CMakeTestGNU.c, Windows.cmake: + test for gnu compiler + +2002-10-22 15:04 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeSystemSpecificInformation.cmake, CYGWIN.cmake: [no log + message] + +2002-10-22 10:36 hoffman + + * Source/cmLocalBorlandMakefileGenerator.cxx: BUG: make sure win32 + exes are win32 + +2002-10-22 10:34 hoffman + + * Modules/: CMakeDetermineCCompiler.cmake, + CMakeDetermineCXXCompiler.cmake, CMakeDetermineSystem.cmake, + CMakeSystemSpecificInformation.cmake: new cmake based + configuration + +2002-10-18 15:51 andy + + * Source/ctest.cxx: When in verbose mode print test command + +2002-10-18 12:08 andy + + * Source/cmWin32ProcessExecution.h: Improve comment + +2002-10-17 10:50 andy + + * Source/: CursesDialog/cmCursesMainForm.cxx, + cmCreateTestSourceList.cxx, cmDirectory.cxx, + cmFindProgramCommand.cxx, cmGlobalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx, cmSystemTools.cxx, + cmUseMangledMesaCommand.cxx: Rename variables to remove warnings + +2002-10-16 13:30 martink + + * Source/cmVTKWrapTclCommand.cxx: update to handle tcl 84 + +2002-10-16 11:48 martink + + * Source/CursesDialog/cmCursesLongMessageForm.cxx: fix compiler + warnings + +2002-10-16 11:41 martink + + * Source/CursesDialog/form/fty_regex.c: fix compiler warnings + +2002-10-16 11:37 martink + + * Source/CursesDialog/form/: fty_alnum.c, fty_alpha.c, fty_int.c, + fty_ipv4.c, fty_num.c: fix compiler warnings + +2002-10-16 11:32 martink + + * Source/CursesDialog/: cmCursesMainForm.cxx, ccmake.cxx: fixed a + warning + +2002-10-16 11:24 martink + + * Source/CursesDialog/cmCursesLongMessageForm.cxx: fixed a warning + +2002-10-16 11:20 martink + + * Source/CursesDialog/: cmCursesForm.h, cmCursesLabelWidget.cxx: + fixed a warning + +2002-10-16 11:16 martink + + * Source/CursesDialog/: cmCursesBoolWidget.cxx, + cmCursesDummyWidget.cxx: fixed a warning + +2002-10-16 10:53 king + + * Source/CursesDialog/form/frm_driver.c: ENH: Another attempt to + fix OSF warnings. Also removed TABS. + +2002-10-16 08:49 andy + + * Source/ctest.cxx: Remove unused variable + +2002-10-15 14:33 martink + + * Source/cmLoadCommandCommand.cxx: better warning message + +2002-10-15 11:45 martink + + * Source/cmLoadCommandCommand.cxx: better warning message + +2002-10-15 07:20 andy + + * Source/ctest.cxx: Remove std::hex as it does not seems to work on + SGI, attempt to fix ftime problem on borland + +2002-10-14 18:33 andy + + * Source/ctest.cxx: Fix namespace, typo, and make ftime work on + windows + +2002-10-14 15:11 andy + + * Source/: ctest.cxx, ctest.h: Even more cleanups, fix time on + certain platforms such as windows, cygwin, and linux. Hopefully + we can add entries for other platforms until try_compile works. + Also escape certain characters for xml. + +2002-10-14 09:30 andy + + * Source/ctest.cxx: More cleanups, fix prexontext and log number + +2002-10-13 23:07 andy + + * Source/: ctest.cxx, ctest.h: Add LastBuild.log file, fix some + minor problems in output, modify output a bit... + +2002-10-11 13:17 martink + + * Source/cmLocalCodeWarriorGenerator.cxx: compiler warning + +2002-10-11 11:22 iscott + + * Modules/Dart.cmake: Add option to control number of errors sent + to dashbaord + +2002-10-11 10:16 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added Split + method to cmSystemTools to split a string into lines on its + newlines. + +2002-10-11 10:14 king + + * Modules/FindCABLE.cmake: BUG: Should not load + CMAKE_INSTALL_PREFIX from the cache. + +2002-10-11 08:36 king + + * Source/cmStandardIncludes.h: ERR: istrstream and istringstream + need to be pulled into namespace std on the SGI. + +2002-10-10 11:08 andy + + * Source/cmWin32ProcessExecution.cxx: Fix network build + +2002-10-10 10:45 barre + + * Modules/FindJava.cmake, Templates/CCMakeSystemConfig.cmake.in, + Templates/CMakeBorlandWindowsSystemConfig.cmake, + Templates/CMakeDotNetSystemConfig.cmake, + Templates/CMakeNMakeWindowsSystemConfig.cmake, + Templates/CMakeWindowsSystemConfig.cmake, + Templates/CXXCMakeSystemConfig.cmake.in: ENH: mark some vars as + advanced (and resort the list) + +2002-10-10 10:43 king + + * Source/: cmCMakeMinimumRequired.cxx, + cmLocalBorlandMakefileGenerator.cxx, + cmLocalNMakeMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx, cmStandardIncludes.h, + cmSystemTools.cxx, cmVTKMakeInstantiatorCommand.cxx, cmake.cxx, + ctest.cxx: ENH: Renamed cmStringStream to cmOStringStream and + added cmIStringStream. Removed cmInputStringStream. + +2002-10-10 09:41 andy + + * Source/: cmGlobalCodeWarriorGenerator.cxx, + cmLocalCodeWarriorGenerator.cxx, cmStandardIncludes.h: Remove + compile error and remove some warnings + +2002-10-10 09:02 king + + * Utilities/cmake_release_config_osf: ENH: Updated for actual + build. + +2002-10-10 08:25 martink + + * Source/: cmGlobalCodeWarriorGenerator.cxx, + cmLocalCodeWarriorGenerator.cxx: fixed some compiler warnings + +2002-10-10 08:23 andy + + * Source/ctest.cxx: Remove warning + +2002-10-10 08:11 andy + + * Source/cmSetCommand.cxx: Remove warning + +2002-10-10 08:11 andy + + * Source/: cmStandardIncludes.h, ctest.cxx: Try to use platform + independent input string stream + +2002-10-09 17:47 martink + + * Source/: cmDynamicLoader.cxx, cmaketest.cxx: Remove memory leak + caused by cmDynamicLoader not being deleted properly + +2002-10-09 15:54 martink + + * Tests/: Complex/CMakeLists.txt, Complex/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/complex.cxx: added test of SET + CACHE FORCE + +2002-10-09 15:48 martink + + * Source/: cmSetCommand.cxx, cmSetCommand.h: added FORCE option + +2002-10-09 15:36 martink + + * Source/CursesDialog/ccmake.cxx: fix for OSF + +2002-10-09 15:24 barre + + * Source/cmGlobalGenerator.cxx: ENH: update the progress when + generating is "done". + +2002-10-09 13:49 martink + + * Source/cmGlobalCodeWarriorGenerator.h: changed name + +2002-10-09 13:47 andy + + * Modules/FindwxWindows.cmake: Add some search paths + +2002-10-09 13:37 martink + + * Source/cmake.cxx: added Code Warrior dev + +2002-10-09 13:31 martink + + * Source/: Makefile.in, CMakeLists.txt: added build for Code + Warrior + +2002-10-09 13:30 martink + + * Source/: cmGlobalCodeWarriorGenerator.cxx, + cmLocalCodeWarriorGenerator.cxx, cmLocalCodeWarriorGenerator.h: + some updates + +2002-10-08 22:54 andy + + * Source/: ctest.cxx, ctest.h: Reorganization, cleanup and some + improvement in dart emulation + +2002-10-08 22:00 andy + + * Source/: ctest.cxx, ctest.h: Add parsing of warnings and errors + +2002-10-08 20:02 andy + + * Source/: ctest.cxx, ctest.h: Add configure option and fix + potential bug in other targets. Now the run command is actually + run with directory, so eventually we should be able to run this + from a subdirectory + +2002-10-08 15:55 martink + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: new plugin + API + +2002-10-08 15:55 martink + + * Source/: cmCPluginAPI.cxx, cmCPluginAPI.h, + cmLoadCommandCommand.cxx: some mods to the plugin API + +2002-10-08 10:53 hoffman + + * Source/cmExecProgramCommand.cxx: BUG: get all the output + including the last character + +2002-10-07 16:23 martink + + * CMakeLists.txt: added header dep + +2002-10-07 09:20 andy + + * Tests/COnly/: foo.c, foo.h: Fix problem on HP + +2002-10-07 09:16 martink + + * Source/cmIfCommand.cxx: minor fix to allow if with no arguments + +2002-10-07 08:23 andy + + * Source/cmGlobalVisualStudio6Generator.cxx: Suppress output of + trycompile + +2002-10-06 21:25 andy + + * Source/ctest.cxx: Fix update so that it actually updates the + source directory, + +2002-10-06 21:24 andy + + * Source/cmSystemTools.cxx: Fix for run command on windows. If you + specify command in quotes but not full path, it should still work + +2002-10-06 20:44 andy + + * Source/ctest.cxx: Add missing namespace + +2002-10-06 20:44 andy + + * Source/cmSystemTools.cxx: Revert back. Does not seems to work on + Windows + +2002-10-06 20:36 andy + + * Source/: ctest.cxx, ctest.h: Add some minimal Dart capability to + ctest. For example now you can actually use ctest to build + projects, do cvs update on all platforms. This is especially cool + for Visual Studio where you do not want to load the whole + development environment just to build your project. + +2002-10-06 18:56 andy + + * Source/cmSystemTools.cxx: Check if directory was actually created + +2002-10-06 15:10 barre + + * Templates/CMakeNMakeWindowsSystemConfig.cmake: ENH: nmake now + uses incremental linking as Msdev does. Faster build (linking a + static vtk.exe or paraview.exe could take more than 10 minutes) + +2002-10-06 12:12 andy + + * Source/cmTarget.cxx, Tests/COnly/CMakeLists.txt, + Tests/COnly/conly.c, Tests/COnly/foo.c, Tests/COnly/foo.h: If you + specify header file as source, it should still use C compiler and + not CXX. Also fix COnly test so that it make sure that this still + works... + +2002-10-05 10:24 andy + + * Source/: cmSystemTools.cxx, cmWin32ProcessExecution.h: Fix + borland build. Borland Run command should be static, since it is + called with no object... + +2002-10-04 18:16 andy + + * Source/: cmMakefile.cxx, cmMakefile.h, cmRegularExpression.cxx, + cmRegularExpression.h, cmSourceGroupCommand.cxx: Try to improve + source group interface + +2002-10-04 14:01 andy + + * Source/cmCacheManager.cxx: Remove tabs + +2002-10-04 12:30 andy + + * Source/cmCacheManager.cxx: Fix reading of advanced values from + CMakeCache + +2002-10-04 11:42 martink + + * Source/: cmLocalCodeWarriorGenerator.h, + cmGlobalCodeWarriorGenerator.cxx, + cmLocalCodeWarriorGenerator.cxx: updates + +2002-10-04 11:33 barre + + * DartConfig.cmake: ENH: my opinion is that it should be ADVANCED. + Few people build the doc. + +2002-10-04 10:47 andy + + * Source/cmSystemTools.cxx: Add missing argument + +2002-10-04 10:38 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h, + cmWin32ProcessExecution.cxx, cmWin32ProcessExecution.h: Cleanup + RunCOmmand code and move borland one to vtkWin32ProcessExecution, + so that it is all in one place... Add timeout option whihc does + not work yet, but it should not produce warning any more + +2002-10-04 08:59 martink + + * Source/cmLocalGenerator.cxx: always set PROJECT_SOURCE_DIR etc + +2002-10-03 16:40 martink + + * Source/: cmGlobalCodeWarriorGenerator.cxx, + cmLocalCodeWarriorGenerator.cxx: some fixes + +2002-10-03 15:14 martink + + * Source/: cmGlobalCodeWarriorGenerator.cxx, + cmGlobalCodeWarriorGenerator.h, cmLocalCodeWarriorGenerator.cxx, + cmLocalCodeWarriorGenerator.h: under development + +2002-10-02 17:46 martink + + * Source/cmWin32ProcessExecution.cxx: Revert to fix win 9x + +2002-10-02 17:31 king + + * Source/: cmGlobalUnixMakefileGenerator.cxx, cmStandardIncludes.h: + ENH: Added explicit declarations of some C functions that are + hard to get from standard headers in como + (www.comeaucomputing.com) strict mode. + +2002-10-02 17:23 king + + * Source/cmIncludeCommand.cxx: BUG: Must return false after an + error of incorrect arguments. + +2002-10-02 17:22 king + + * Source/: cmIfCommand.cxx, cmIfCommand.h: BUG: STRLESS and + STRGREATER need to treat non-existent definitions as strings. + +2002-10-02 17:16 andy + + * Source/cmWin32ProcessExecution.cxx: Cleanup and try to unify with + the other code + +2002-10-02 17:14 andy + + * Source/cmSystemTools.cxx: Cleanup + +2002-10-02 16:42 ibanez + + * Modules/CMakeLists.txt: ENH: Adding install of .in and .c + modules. + +2002-10-02 11:35 martink + + * Source/cmLocalBorlandMakefileGenerator.cxx: Remove unnecessary + new line + +2002-10-02 11:15 martink + + * Source/cmSystemTools.cxx: Fix bug in borland run command + +2002-10-02 11:14 martink + + * Source/cmake.cxx: Produce only one output + +2002-10-01 18:37 king + + * Source/cmITKWrapTclCommand.cxx: ENH: Added support to pass the + gccxml program location to cable if ITK_GCCXML_EXECUTABLE is set + on m_Makefile. + +2002-10-01 15:56 andy + + * Modules/: TestBigEndian.c, TestBigEndian.cmake: Add test for big + endian + +2002-10-01 13:04 martink + + * Source/cmWin32ProcessExecution.cxx: Fix grouping of arguments on + Windows 98 + +2002-10-01 13:04 martink + + * Source/cmLocalVisualStudio6Generator.cxx: Fix a bug in generator. + This one is good: This bug is only present on Windows 98, but + since RunCommand did not work, it never showed on the + dashboard... In any case commands in Visual studio 6 should be in + windows style slashes + +2002-10-01 13:00 martink + + * Source/cmw9xcom.cxx: Put quotes around arguments if they have + spaces and no quotes + +2002-10-01 12:59 martink + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: Remove bogus exec_program + +2002-10-01 10:12 ibanez + + * Modules/FindFLTK.cmake: ENH: removed "USE_FLTK_VERSION_1.1" in + favor of "FLTK_VERSION_1.1" to avoid confusions. + +2002-10-01 07:28 andy + + * Source/: Makefile.in, cmakemain.cxx: Remove dependency to dynamic + loader during bootstrap + +2002-09-30 22:26 ibanez + + * Modules/FindFLTK.cmake: ENH: Version 1.1 is considered to be the + default. + +2002-09-30 21:34 king + + * Source/CursesDialog/cmCursesMainForm.cxx: ERR: Fixed bad sentence + in error message. + +2002-09-30 16:46 andy + + * Source/cmake.cxx: Fix bug in chdir; Who did this anyway... + +2002-09-30 16:25 hoffman + + * Source/: Makefile.in, cmDynamicLoader.cxx, cmakemain.cxx: BUG: + fix load command stuff for cygwin and cleanup at exit + +2002-09-30 15:05 martink + + * Source/cmWin32ProcessExecution.h: Add some more comments + +2002-09-30 15:00 martink + + * Source/cmWin32ProcessExecution.cxx: Cleanups and hopefully now it + works on all windows platforms + +2002-09-30 14:01 martink + + * Source/cmake.cxx: Set comspec substitute the right way + +2002-09-30 14:00 martink + + * Source/ctest.cxx: Set comspec substitute + +2002-09-30 13:59 martink + + * Source/cmw9xcom.cxx: Add spaces + +2002-09-30 12:24 ibanez + + * Modules/FindLATEX.cmake: Configuratiion for finding LaTeX + related executables. + +2002-09-30 11:41 andy + + * Source/: CMakeLists.txt, cmSystemTools.cxx, cmake.cxx, + cmw9xcom.cxx: Another attempt on Windows 98 + +2002-09-30 11:00 andy + + * Source/cmSystemTools.cxx: Attempt to unify the code + +2002-09-30 10:47 andy + + * Source/cmSystemTools.cxx: Fix bug in printing + +2002-09-30 07:55 andy + + * Source/cmWin32ProcessExecution.cxx: Remove warnings and fix + potential bug + +2002-09-30 07:09 andy + + * Source/cmSystemTools.cxx, + Templates/CMakeBorlandWindowsSystemConfig.cmake: Make borland + pass all the tests on XP (and 2000?) + +2002-09-29 22:10 andy + + * Source/cmSystemTools.cxx: Remove debug + +2002-09-29 21:57 andy + + * Source/cmSystemTools.cxx: It is late and it at least seems to + work better than before... + +2002-09-29 21:55 andy + + * Source/: cmWin32ProcessExecution.cxx, cmWin32ProcessExecution.h: + Fix for it to compile on "all" windows platforms... + +2002-09-29 21:48 andy + + * Source/cmSystemTools.cxx: Simplify debugging by resetting error + code + +2002-09-29 14:09 martink + + * Source/: cmWin32ProcessExecution.cxx, cmWin32ProcessExecution.h: + possible fix for warnings + +2002-09-29 14:09 martink + + * Source/cmake.cxx: compiler warnings + +2002-09-27 17:28 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h, cmake.cxx: Add two + cmake commands -E echo for echoing strings and -E comspec for + workaround of bug of windows 9x; add another implementation of + run command on windows which should work... + +2002-09-27 17:26 andy + + * Source/: CMakeLists.txt, cmWin32ProcessExecution.cxx, + cmWin32ProcessExecution.h: Add class for process execution on + Windows + +2002-09-27 17:16 andy + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: Use cmake echo + +2002-09-27 16:23 martink + + * Source/: cmCreateTestSourceList.cxx, cmInstallFilesCommand.cxx, + cmInstallProgramsCommand.cxx, cmIncludeDirectoryCommand.cxx: + removed some includes + +2002-09-27 16:19 martink + + * Source/: cmTarget.cxx, cmTarget.h, cmCommand.h, + cmEnableTestingCommand.cxx, cmEndForEachCommand.cxx, + cmForEachCommand.cxx, cmAddTestCommand.cxx, + cmAuxSourceDirectoryCommand.cxx, cmElseCommand.cxx, + cmEndIfCommand.cxx, cmIfCommand.cxx, cmAbstractFilesCommand.cxx, + cmAddDependenciesCommand.cxx, cmAddLibraryCommand.cxx, + cmInstallTargetsCommand.cxx, cmMacroCommand.cxx, + cmMessageCommand.cxx, cmWriteFileCommand.cxx, + cmAddExecutableCommand.cxx: removed some includes + +2002-09-27 16:19 hoffman + + * Source/: cmSetCommand.cxx, cmSetCommand.h: BUG: fix doc string + and allow a variable to be promoted from non-cache to cache + +2002-09-27 16:18 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: remove unused stuff + +2002-09-27 15:52 martink + + * Source/cmMakefile.h: new patch + +2002-09-27 14:12 andy + + * Templates/: CCMakeSystemConfig.cmake.in, cconfigure, + cconfigure.in: Cleanup configure scripts + +2002-09-26 15:13 martink + + * Source/: cmake.h, cmake.cxx, cmGlobalGenerator.cxx, + cmGlobalGenerator.h: added progress + +2002-09-26 13:52 martink + + * Source/cmMakefile.cxx: minor memory fix + +2002-09-25 17:25 andy + + * Modules/: CheckFunctionExists.cmake, CheckIncludeFile.cmake, + CheckLibraryExists.cmake: Set variable to either 1 or empty + string instead of TRUE and FALSE + +2002-09-25 10:38 andy + + * Modules/CheckLibraryExists.cmake: Cleanup + +2002-09-25 10:08 andy + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommand/LoadedCommand.h.in, + LoadCommandOneConfig/CMakeLists.txt, + LoadCommandOneConfig/LoadedCommand.h.in: Check for library + +2002-09-25 10:08 andy + + * Modules/: CheckFunctionExists.cmake, CheckLibraryExists.cmake, + CheckSizeOf.cmake: Fix modules for recent changes + +2002-09-25 10:07 andy + + * Source/: cmGlobalUnixMakefileGenerator.cxx, + cmTryCompileCommand.cxx: Several changes: COMPILE_DEFINITIONS is + now depricated. If you want to specify some, use CMAKE_FLAGS + -DCMAKE_DEFINITIONS:STRING=...; same goes for libraries, include + path, ... It now detects wether the file is C or C++ and uses the + apropriate project command, it also does the right thing when + doing try_compile, so it does not execute configure for every + single try_compile + +2002-09-25 09:31 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: Use file format + detection + +2002-09-25 09:30 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h: Add detection of + file format from extension + +2002-09-25 07:46 andy + + * Source/cmGlobalGenerator.cxx: Attempt to make NMake quiet during + TRY_COMPILE + +2002-09-24 18:34 andy + + * Source/: ctest.cxx, ctest.h: Add verbose flag -V, which makes the + output of tests to be displayed; also add help to ctest + +2002-09-24 17:58 andy + + * Modules/CMakeBackwardCompatibilityC.cmake, + Modules/CMakeBackwardCompatibilityCXX.cmake, + Source/cmGlobalUnixMakefileGenerator.cxx: Improve backward + compatibility, so that all backward compatibility stuff is in two + modules; fix invoking of try_compile; add checking for header + files and sizes of types + +2002-09-24 17:37 andy + + * Source/cmSystemTools.cxx: Add support for mac dylib + +2002-09-24 16:36 andy + + * Modules/: CheckLibraryExists.cmake, CheckLibraryExists.lists.in: + Initial attempt to check if library exists + +2002-09-24 16:20 andy + + * Modules/CheckSizeOf.cmake: Improve check size of. Now it checks + for some header files before trying to check types + +2002-09-24 14:49 king + + * Source/: cmEndIfCommand.cxx, cmIfCommand.cxx: [no log message] + +2002-09-24 14:22 king + + * Utilities/cmake_release_config_osf: ENH: Adding prototype release + config script for OSF. + +2002-09-24 14:18 king + + * Utilities/cmake_release_config_cygwin: ERR: Removed old cygwin + release config file. A separate script is now used. + +2002-09-24 13:24 martink + + * Source/cmake.cxx: fixed memory leak + +2002-09-24 13:17 martink + + * Source/cmTryRunCommand.cxx: always convert to output path + +2002-09-24 10:47 hoffman + + * Utilities/: cmake-cygwin-package.sh, cmake_release_cygwin.sh: use + /usr/bin/find and uname for cygwin version + +2002-09-24 10:30 andy + + * Source/cmLoadCommandCommand.cxx: Cleanup + +2002-09-24 10:24 andy + + * Source/: cmDynamicLoader.cxx, cmDynamicLoader.h: Add accessor for + Flushing cache + +2002-09-24 09:51 hoffman + + * Source/cmLocalUnixMakefileGenerator.cxx: one rule per line so + borland make does not die + +2002-09-24 09:50 hoffman + + * Source/cmLocalBorlandMakefileGenerator.cxx: handle long commands + +2002-09-24 09:24 hoffman + + * Source/: cmDynamicLoader.cxx, cmGlobalGenerator.cxx: fix for + cygwin and nmake that does not define WIN32 + +2002-09-23 21:14 king + + * Utilities/: cmake-cygwin-package.sh, cmake-cygwin.README, + cmake_release_cygwin.sh, setup.hint: ENH: Added cygwin packaging + scripts. The setup.hint and cmake.README files required by + Cygwin are generated automatically. + +2002-09-23 17:24 andy + + * Tests/: LoadCommand/CMakeCommands/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/CMakeLists.txt: Fix problem + +2002-09-23 17:20 king + + * Utilities/cmake_release_unix_package.sh: ENH: Added to generated + README the typical install locaiton of /usr/local. + +2002-09-23 16:57 andy + + * Source/cmDynamicLoader.cxx: Fix cache for non void* types + +2002-09-23 16:24 andy + + * Source/cmDynamicLoader.cxx: Keep track of libraries so that you + can load them as many times as you want... + +2002-09-23 15:57 andy + + * Source/cmaketest.cxx: Cleanup + +2002-09-23 15:56 andy + + * Tests/: LoadCommand/CMakeCommands/CMakeLists.txt, + LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: Some minor + fixes for mac + +2002-09-23 15:54 andy + + * Source/cmLocalUnixMakefileGenerator.cxx: Fix generation of C only + modules + +2002-09-23 15:53 andy + + * Source/cmDynamicLoader.cxx: Fix extension and suffix for modules + on mac + +2002-09-23 14:57 martink + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: cleanup + +2002-09-23 14:57 martink + + * Source/: cmCPluginAPI.h, cmLoadCommandCommand.cxx: cleaned up API + +2002-09-23 14:11 andy + + * Tests/: LoadCommand/CMakeCommands/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/CMakeLists.txt: Fix test so + that it will work on HP + +2002-09-23 14:04 andy + + * Source/cmTryCompileCommand.cxx: Fix HP build + +2002-09-23 13:32 andy + + * Source/: cmSystemTools.cxx, cmTryCompileCommand.cxx: Try to + remove some warnings + +2002-09-23 13:11 andy + + * Source/cmLoadCommandCommand.cxx: Fix loading of module for + borland + +2002-09-23 12:23 andy + + * Source/cmGlobalGenerator.cxx: Try to fix borland and nmake try + compile + +2002-09-23 11:06 andy + + * Source/: cmTryCompileCommand.cxx, cmTryCompileCommand.h, + cmTryRunCommand.cxx: Abstract cleaning of files and add code that + deletes files from Debug subdirectory + +2002-09-23 11:05 andy + + * Source/cmGlobalVisualStudio6Generator.cxx: Remove debug stuff + +2002-09-23 10:01 andy + + * Modules/FindwxWindows.cmake: Fix comments + +2002-09-23 09:58 andy + + * Source/cmLocalVisualStudio7Generator.cxx: Try to fix quoted + definitions + +2002-09-23 09:41 martink + + * Source/cmIfCommand.cxx: hopefull another fix to if statements + +2002-09-23 09:07 andy + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h: Attempt to fix Visual studio 6 + comiling + +2002-09-23 08:51 king + + * Utilities/cmake_release_unix_package.sh: BUG: Creating source + tarball should not affect current directory. + +2002-09-23 08:44 king + + * Utilities/: cmake_release_config_darwin, + cmake_release_config_hpux, cmake_release_config_irix, + cmake_release_config_linux, cmake_release_config_sun: ENH: + Incremented version to 1.4.5. + +2002-09-22 10:08 martink + + * Source/cmLocalVisualStudio7Generator.cxx: defines cannot have + quotes in them + +2002-09-22 09:53 martink + + * Source/: cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h: some try compile fixes + +2002-09-22 07:52 martink + + * Source/: cmWriteFileCommand.cxx, + CursesDialog/cmCursesMainForm.cxx: compiler warning + +2002-09-21 07:29 andy + + * Source/cmWriteFileCommand.cxx: Fix namespace problem + +2002-09-20 15:01 andy + + * Modules/: CheckFunctionExists.cmake, CheckIncludeFile.cmake, + CheckSizeOf.cmake: Fix tests for new trycompile and tryrun + +2002-09-20 15:01 andy + + * Source/: cmMakefile.cxx, cmMakefile.h, cmTryCompileCommand.cxx, + cmTryRunCommand.cxx: Add GetLocal on cmMakefile and on local + builds do not perform tests + +2002-09-20 14:17 andy + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommand/LoadedCommand.h.in, + LoadCommandOneConfig/CMakeLists.txt, + LoadCommandOneConfig/LoadedCommand.h.in: Include more testing + +2002-09-20 14:16 andy + + * Modules/: CheckIncludeFile.c.in, CheckIncludeFile.cmake: Simplify + checking for headers + +2002-09-20 13:40 andy + + * Modules/: CheckIncludeFile.c.in, CheckIncludeFile.cmake: Add + macro which checks if the header file exists + +2002-09-20 13:40 andy + + * Modules/CheckFunctionExists.cmake: Fix comment + +2002-09-20 13:17 andy + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommand/LoadedCommand.cxx, + LoadCommandOneConfig/CMakeLists.txt, + LoadCommandOneConfig/LoadedCommand.cxx, + LoadCommand/LoadedCommand.h.in, + LoadCommandOneConfig/LoadedCommand.h.in: Fix test so that it does + some modules testing by checking for some functions and some size + of types + +2002-09-20 13:16 andy + + * Modules/: CheckFunctionExists.c, CheckFunctionExists.cmake, + CheckSizeOf.c, CheckSizeOf.cmake: Add two commonly used modules. + First one checks if the function exists, the second one checks + the size of type + +2002-09-20 13:15 andy + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmMakefile.cxx, cmMakefile.h, cmTryCompileCommand.cxx: Add option + of TRY_COMPILE to store the output of compilation so that if the + output fails you can display it or store it in the file + +2002-09-20 13:14 andy + + * Source/: cmCommands.cxx, cmWriteFileCommand.cxx, + cmWriteFileCommand.h: Add WRITE_FILE command, which writes string + to a file + +2002-09-20 10:06 martink + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: removed c++ + style comments + +2002-09-20 08:07 martink + + * Source/: cmTryRunCommand.h, cmTryRunCommand.cxx: compiler + warnings + +2002-09-19 16:12 hoffman + + * Source/cmBorlandMakefileGenerator.cxx: ENH: allow for long + command lines + +2002-09-19 16:09 andy + + * Source/cmMakefile.cxx: Remove unnecessary disabling of output + +2002-09-19 16:07 andy + + * Source/cmTryRunCommand.cxx: Fix tryrun to work on Linux + +2002-09-19 15:01 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: use single line depend + rules for borland compiler + +2002-09-19 14:59 hoffman + + * Source/cmMSDotNETGenerator.cxx: ENH: add include to rc, and + newline to custom commnad + +2002-09-19 14:59 hoffman + + * Source/: cmBorlandMakefileGenerator.cxx, + cmNMakeMakefileGenerator.cxx: ENH: add include to rc + +2002-09-19 14:58 hoffman + + * Source/CMakeLists.txt: ENH: fix bad endif + +2002-09-19 14:58 hoffman + + * Templates/: DLLHeader.dsptemplate, EXEHeader.dsptemplate, + staticLibHeader.dsptemplate: ENH: add include paths to rc + +2002-09-19 14:40 andy + + * Source/cmSystemTools.cxx: Supress standard error when running + command + +2002-09-19 14:36 andy + + * Source/cmTryCompileCommand.cxx: Fix try compile with second + signature, remove cmake lists from cache so that multiple tests + work + +2002-09-19 14:35 andy + + * Source/cmSystemTools.h: Add a way to check if run command output + is disabled + +2002-09-19 14:35 andy + + * Source/cmMakefile.cxx: When doing try compile disable output + +2002-09-19 14:34 andy + + * Source/: cmListFileCache.cxx, cmListFileCache.h: Add a way to + remove files from cache + +2002-09-19 11:06 andy + + * Source/cmTryRunCommand.cxx: Fix compile problem + +2002-09-19 11:01 martink + + * Source/cmTryRunCommand.cxx: minor cleanup + +2002-09-19 10:25 andy + + * Modules/FindwxWindows.cmake: Fix find wxWindows + +2002-09-19 09:49 martink + + * Source/: cmCommands.cxx, cmTryCompileCommand.cxx, + cmTryCompileCommand.h: updated to try compile + +2002-09-19 09:48 martink + + * Source/: cmTryRunCommand.cxx, cmTryRunCommand.h: new command + +2002-09-19 09:47 andy + + * Source/CMakeLists.txt: Add option for building wxWindows GUI for + CMake + +2002-09-19 09:42 andy + + * Modules/FindwxWindows.cmake: Improve searching for wxWindows + +2002-09-18 14:18 andy + + * Source/: cmSystemTools.cxx, cmSystemTools.h, + CursesDialog/ccmake.cxx: Improve message handler to include + client data. + +2002-09-18 11:38 martink + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommand/CMakeCommands/CMakeLists.txt, + LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: test passing + CMAKE_FLAGS + +2002-09-18 11:37 martink + + * Source/: cmMakefile.cxx, cmMakefile.h, cmTryCompileCommand.cxx, + cmTryCompileCommand.h: now Try compile can include CMAKE_FLAGS + +2002-09-18 11:36 martink + + * Source/cmLoadCommandCommand.cxx: better error reporting + +2002-09-18 10:40 king + + * Source/cmSetCommand.cxx: ENH: If SET(VAR) is called with no other + arguments, remove the definition of VAR. + +2002-09-18 10:39 king + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Added + RemoveDefinition method. + +2002-09-18 09:53 barre + + * Source/cmVTKWrapTclCommand.cxx: FIX: better support for the + Tcl/Tk 8.4 pre-release + +2002-09-18 08:15 andy + + * Modules/FindGTK.cmake: GL should not be a completely necessary + thing for finding GTK. This will find gtk and GL but also just + GTK + +2002-09-18 08:13 andy + + * Source/cmakewizard.cxx: Remove unnecessary variable + +2002-09-18 08:07 martink + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommandOneConfig/CMakeLists.txt: removed target + +2002-09-17 15:41 king + + * Modules/CMakeLists.txt: ENH: Adding installation of TRY_COMPILE + tests. + +2002-09-17 15:41 king + + * Source/cmTryCompileCommand.cxx: BUG: Generated CMakeLists.txt + file needs to take CMAKE_ANSI_CXXFLAGS into account. + +2002-09-17 14:40 king + + * Source/cmLocalUnixMakefileGenerator.cxx: ERR: Fixed typo: + INSTALL_PROGRAMS -> INSTALL_PROGRAM. + +2002-09-17 14:20 martink + + * Source/CursesDialog/cmCursesMainForm.cxx: some cmake api changees + +2002-09-17 14:19 andy + + * Source/cmakewizard.cxx: Strip the string that user answers + +2002-09-17 14:18 barre + + * Source/cmVTKWrapTclCommand.cxx: ENH: add support for Tcl/Tk 8.4.0 + +2002-09-17 14:12 martink + + * Source/cmake.h: updated comments + +2002-09-17 14:09 king + + * Source/cmLocalUnixMakefileGenerator.cxx: BUG: INSTALL_DATA should + be INSTALL_PROGRAMS for program install targets. + +2002-09-17 14:04 martink + + * Source/CursesDialog/cmCursesMainForm.cxx: some cmake api changees + +2002-09-17 13:59 martink + + * Source/: cmMakefile.cxx, cmake.cxx, cmake.h, cmakewizard.cxx: + cleaned up some of the cmake interface + +2002-09-17 13:59 martink + + * Source/CMakeLists.txt: new test + +2002-09-17 13:48 andy + + * Source/cmakewizard.cxx: Replace getline with fgets since getline + does not seems to work properly on Mac OSX + +2002-09-17 11:48 andy + + * Source/: cmCacheManager.cxx, cmCacheManager.h, + cmMarkAsAdvancedCommand.cxx: Fix problems with advanced not being + marked. + +2002-09-17 10:56 king + + * Source/: cmInstallFilesCommand.cxx, cmInstallFilesCommand.h, + cmInstallProgramsCommand.cxx, cmInstallProgramsCommand.h, + cmLocalUnixMakefileGenerator.cxx: ENH: Improved implementation of + INSTALL_FILES and INSTALL_PROGRAMS commands. Source paths can + now be relative or full paths, and don't need to be in the same + directory as the CMakeLists.txt file. + +2002-09-17 10:38 martink + + * Tests/: LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: added + Destructor + +2002-09-17 10:38 martink + + * Source/: cmCPluginAPI.h, cmLoadCommandCommand.cxx: added + destructor to loaded commands + +2002-09-17 09:17 martink + + * Modules/TestForANSIStreamHeaders.cmake: slight change in + signature for TryCompile + +2002-09-17 09:16 martink + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmTryCompileCommand.cxx, cmTryCompileCommand.h: slight change in + signature + +2002-09-17 09:16 martink + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommandOneConfig/CMakeLists.txt: some cleanup + +2002-09-17 08:29 martink + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommandOneConfig/CMakeLists.txt: minor fix in error message + +2002-09-16 16:27 martink + + * Tests/: LoadCommand/CMakeLists.txt, + LoadCommand/LoadedCommand.cxx, + LoadCommand/CMakeCommands/CMakeLists.txt, + LoadCommand/CMakeCommands/cmTestCommand.c, + LoadCommandOneConfig/CMakeLists.txt, + LoadCommandOneConfig/LoadedCommand.cxx, + LoadCommandOneConfig/CMakeCommands/CMakeLists.txt, + LoadCommandOneConfig/CMakeCommands/cmTestCommand.c: load command + test + +2002-09-15 09:54 martink + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddDependenciesCommand.cxx, cmCacheManager.cxx, + cmExecProgramCommand.cxx, cmFLTKWrapUICommand.cxx, + cmListFileCache.cxx, cmaketest.cxx, ctest.cxx: remove unused + variables + +2002-09-15 09:42 martink + + * Source/: cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx: updated to use + ConfigureFinalPass + +2002-09-15 08:53 martink + + * Source/: cmLocalGenerator.cxx, cmLocalGenerator.h, + cmGlobalGenerator.cxx: changed handling of FinalPass + +2002-09-15 08:53 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: changed when final pass + is done + +2002-09-15 08:52 martink + + * Source/: cmMakefile.h, cmMakefile.cxx: renamed GenerateMakefile + to ConfigureFinalPass + +2002-09-14 10:59 martink + + * Source/CursesDialog/cmCursesMainForm.cxx: removed extra Generate + that was screwing things up + +2002-09-14 08:47 martink + + * Source/cmGlobalGenerator.cxx: fixed warning + +2002-09-13 19:23 martink + + * Source/cmGlobalGenerator.cxx: made less verbose + +2002-09-13 19:23 martink + + * Modules/TestForANSIStreamHeaders.cmake: removed messages + +2002-09-13 16:38 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added + FileIsFullPath test method. + +2002-09-13 13:48 martink + + * Source/: cmGlobalGenerator.cxx, cmMakefile.cxx, cmake.h: some + fixes for try compile + +2002-09-13 11:09 martink + + * Templates/: CXXCMakeSystemConfig.cmake.in, cxxconfigure, + cxxconfigure.in: now uses TryCompile + +2002-09-13 11:05 martink + + * Source/cmGlobalNMakeMakefileGenerator.h: minor fix + inEnableLanguages + +2002-09-13 11:01 martink + + * Source/: cmTryCompileCommand.cxx: fix to the cleanup code + +2002-09-13 10:42 martink + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalNMakeMakefileGenerator.h, + cmGlobalUnixMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, cmMakefile.cxx, + cmTryCompileCommand.cxx: better trycompile and enable langiages + +2002-09-13 10:41 martink + + * Source/cmake.cxx: better try compile + +2002-09-13 10:40 martink + + * Modules/TestForANSIStreamHeaders.cmake: removed messages + +2002-09-13 09:51 andy + + * configure, configure.in: Improve bootstrapping on Unix, so that + it bootstraps in the subdirectory. This prevents from compiler + files being reused and you can do make clean... + +2002-09-13 09:49 iscott + + * Modules/FindQt.cmake: Make QT variables advanced + +2002-09-13 08:15 martink + + * Source/: cmEndIfCommand.cxx, cmLocalUnixMakefileGenerator.cxx: + compiler warning + +2002-09-13 05:39 iscott + + * Modules/FindQt.cmake: Need to use $ENV{} to access environment + variables + +2002-09-12 16:36 martink + + * Modules/TestForANSIStreamHeaders.cmake: some cleanup + +2002-09-12 14:37 martink + + * Source/cmake.cxx: uninitialized var + +2002-09-12 13:55 andy + + * Source/cmaketest.cxx: Remove unnecessary include + +2002-09-12 13:42 andy + + * Source/cmakemain.cxx: Remove unnecessary include + +2002-09-12 13:19 bettingf + + * Tests/Wrapping/CMakeLists.txt, Source/CMakeLists.txt: added + include of FindQT.cmake + +2002-09-12 11:47 martink + + * Source/: cmMakefileGenerator.cxx, cmMakefileGenerator.h, + CMakeLists.txt: new arch + +2002-09-12 11:44 martink + + * Source/: cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h, + cmMSProjectGenerator.cxx, cmMSProjectGenerator.h, + cmDSWWriter.cxx, cmDSWWriter.h, cmDSPWriter.cxx, cmDSPWriter.h, + cmNMakeMakefileGenerator.cxx, cmNMakeMakefileGenerator.h, + cmBorlandMakefileGenerator.cxx, cmBorlandMakefileGenerator.h, + cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: new arch + +2002-09-12 11:38 bettingf + + * Source/CMakeLists.txt: added test for QTWrapUI called qtwrapping + +2002-09-12 11:37 bettingf + + * Tests/Wrapping/: qtwrappingmain.cxx, CMakeLists.txt: corrected + test for QTWrapUI + +2002-09-12 11:14 martink + + * Modules/: TestForANSIStreamHeaders.cmake, + TestForANSIStreamHeaders.cxx: new try compile module + +2002-09-12 11:13 andy + + * Source/cmCacheManager.cxx: Oops, too fast commit; add missing ; + +2002-09-12 11:12 andy + + * Source/cmCacheManager.cxx: Add more error checking + +2002-09-12 11:08 martink + + * Source/: cmTryCompileCommand.cxx, cmTryCompileCommand.h: another + signature for Try_Compile + +2002-09-12 11:08 martink + + * Source/: cmMakefile.cxx, cmake.cxx, cmake.h: added a flag if a + cmake is in try compile + +2002-09-12 09:56 andy + + * Source/cmMarkAsAdvancedCommand.cxx: Fix mark as advanced. Now it + should work properly + +2002-09-12 09:00 andy + + * Source/: cmakewizard.cxx, cmakewizard.h: Simplify code. Since we + access cache entry through the iterator, we do not need the cache + manager any more + +2002-09-12 08:56 andy + + * Source/cmCacheManager.h: Fix build problem on Sun + +2002-09-11 16:44 bettingf + + * Source/cmQTWrapUICommand.cxx: corrected the generated lists .h in + header list and .cxx in sources list + +2002-09-11 16:43 bettingf + + * Source/cmLocalUnixMakefileGenerator.cxx: added generation of the + GENERATED_QT_FILES list for make clean + +2002-09-11 16:41 bettingf + + * Tests/Wrapping/CMakeLists.txt: added test for QTWrapUI + +2002-09-11 16:40 bettingf + + * Tests/Wrapping/: qtwrappingmain.cxx, qtwrapping.ui: test for + QTWarpUI + +2002-09-11 16:12 king + + * Source/cmCacheManager.cxx: BUG: GetCacheValue must check if value + is UNINITIALIZED. If so, pretend it doesn't exist. + +2002-09-11 15:13 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: Fix bug in ccmake which + made it crash when all cache values were deleted + +2002-09-11 15:04 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: Fix problem with ccmake + crashing on empty caches + +2002-09-11 14:38 andy + + * Source/cmCacheManager.cxx: Fix find and remove check for + uninitialized entries + +2002-09-11 14:08 andy + + * Source/cmCacheManager.cxx: Function strcasecmp is not portable + +2002-09-11 14:05 andy + + * Source/: cmCacheManager.cxx, cmCacheManager.h, + cmFindPathCommand.cxx, cmFindProgramCommand.cxx, cmMakefile.cxx, + cmMarkAsAdvancedCommand.cxx, cmVariableRequiresCommand.cxx, + cmakewizard.cxx, cmakewizard.h, + CursesDialog/cmCursesCacheEntryComposite.cxx, + CursesDialog/cmCursesCacheEntryComposite.h, + CursesDialog/cmCursesMainForm.cxx: Couple of changes: cache + variables now have a map of properties. ADVANCED and HELPSTRING + are now properties of cache variable, IsAdvanced is gone, so is + GetCacheEntry, since cache entries are now all private. To access + them, you use the iterator. -ADVANCED cache entries are gone and + are replaced by the property of cache variables. The cache file + still looks the same, but the -ADVANCED cache entries are created + when writing file. MarkAsAdvanced and VariableRequires are fixed. + So are curses gui and wizard + +2002-09-11 13:27 andy + + * Templates/CCMakeSystemConfig.cmake.in: Remove Mark_AS_ADVANCED + for some variables that do not exist + +2002-09-11 12:52 martink + + * Source/cmMakefile.cxx: minor fix in try compile code + +2002-09-11 09:54 king + + * Source/: CMakeLists.txt, cmDynamicLoader.cxx, cmDynamicLoader.h, + cmDynamicLoaderC.c: ENH: Pointer-to-function to pointer-to-data + casts are not even allowed in strict C. Re-implemented this + conversion in pure C++ using a casting trick with an extra level + of indirection. + +2002-09-11 08:52 king + + * Source/cmDynamicLoaderC.c: ERR: Removed C++-style comments, used + C-style instead. + +2002-09-10 17:24 king + + * Source/cmake.cxx: ERR: Added missing include of stdio.h for + sprintf. + +2002-09-10 16:52 martink + + * Source/: cmTryCompileCommand.cxx, cmTryCompileCommand.h: updated + signature + +2002-09-10 16:52 martink + + * Source/: cmMakefile.cxx, cmMakefile.h: updated makefile moved + commands into cmake and fixed try compile + +2002-09-10 16:51 martink + + * Source/cmDumpDocumentation.cxx: moved dump docs into cmake + +2002-09-10 16:51 martink + + * Source/: cmake.h, cmake.cxx: moved commands into cmake + +2002-09-10 16:49 martink + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h: modified TryCompile + +2002-09-10 15:46 king + + * Source/: CMakeLists.txt, cmDynamicLoader.cxx, cmDynamicLoader.h, + cmDynamicLoaderC.c: ERR: Cast from pointer-to-data to + pointer-to-function is not allowed in C++. The cast needed by + cmDynamicLoader::GetSymbolAddress is now hidden in a C file. + +2002-09-10 15:40 king + + * Source/cmGlobalUnixMakefileGenerator.cxx: ERR: Fixes for comeau + compiler. NULL is a pointer of type void*, and cannot be + compared directly with other pointer types. We use 0 instead. + Also changed putenv to setenv for comeau on linux. + +2002-09-10 15:40 king + + * Source/cmStandardIncludes.h: ENH: Added definition of _BSD_SOURCE + to enable proper use of POSIX functions on comeau in linux. + +2002-09-10 15:38 king + + * Source/cmSystemTools.cxx: ERR: Fix for borland on linux. We + cannot directly compare the st_dev and st_ino members of struct + stat. Use memcmp instead. + +2002-09-10 15:37 king + + * Source/cmLocalGenerator.cxx: ERR: Removed stray semi-colon. + +2002-09-10 15:36 king + + * Source/: cmMakefile.cxx, cmRegularExpression.cxx, + cmRegularExpression.h, cmMakeDepend.cxx, + cmLoadCommandCommand.cxx, cmCPluginAPI.cxx: ERR: Fixes for comeau + compiler. NULL is a pointer of type void*, and cannot be + compared directly with other pointer types. We use 0 instead. + +2002-09-10 15:36 king + + * Source/cmake.cxx: ERR: Fix for borland on linux. + +2002-09-10 13:32 barre + + * Modules/FindOpenGL.cmake: FIX: typo + bring back the + OPENGL_gl_LIBRARY path that can be used to find GLU (was wiped + out from FindGLU) + +2002-09-10 12:49 martink + + * Source/CMakeLists.txt: removed extra ENDIF + +2002-09-10 10:35 king + + * configure, configure.in: ERR: Went back to old-style test for + -LANG:std on the SGI. + +2002-09-10 10:16 martink + + * Source/: cmEndIfCommand.cxx, cmIfCommand.cxx: better error + checking on If statements + +2002-09-10 10:02 king + + * configure, configure.in: ERR: AC_SUBST replaced with AC_DEFINE. + Needed to get configure script to correctly setup cmConfigure.h. + +2002-09-10 09:51 king + + * Source/cmCommands.cxx: ERR: Removed accidental commit. + +2002-09-10 09:50 king + + * configure, configure.in, Source/cmCommands.cxx: BUG: Missing + AC_SUBST commands added. + +2002-09-09 09:50 hoffman + + * Modules/FindOpenGL.cmake: Adding GLU to the OPENGL_LIBRARIES only + if it is found. + +2002-09-08 10:15 martink + + * Source/: cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio7Generator.cxx, cmake.cxx: compiler warnings + +2002-09-07 21:25 martink + + * Source/: cmGlobalGenerator.cxx, + cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio7Generator.cxx: compiler warnings + +2002-09-07 21:22 martink + + * Source/cmLocalGenerator.h: compiler warning + +2002-09-07 21:18 martink + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmLocalBorlandMakefileGenerator.cxx: fix for borland compilers + +2002-09-06 18:05 king + + * Source/cmVTKWrapTclCommand.cxx: ERR: Fix for borland in generated + code. vtkCommand is ambiguously both a function and a class. + +2002-09-06 17:19 king + + * configure, configure.in, Templates/cconfigure, + Templates/cconfigure.in, Templates/cxxconfigure, + Templates/cxxconfigure.in: ENH: Improved configure test + implementations by using AC_TRY_COMPILE. + +2002-09-06 16:30 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: updated to fix the long + depend line issue on Borland + +2002-09-06 14:03 starreveld + + * Modules/FindOpenGL.cmake: + ERR: Fix opengl finding on osx + +2002-09-06 13:56 barre + + * Modules/FindTCL.cmake: ENH: make stub stuff ADVANCED + +2002-09-06 13:04 martink + + * Source/: cmakewizard.cxx, CMakeLists.txt, Makefile.in, + cmGlobalGenerator.cxx, cmGlobalUnixMakefileGenerator.cxx, + cmLocalUnixMakefileGenerator.cxx: new arch + +2002-09-06 13:01 martink + + * Source/: cmaketest.cxx, cmake.cxx, cmake.h, cmMakefile.cxx, + cmMakefile.h, cmakemain.cxx: new arch + +2002-09-06 13:00 martink + + * Source/CursesDialog/: ccmake.cxx, cmCursesLongMessageForm.cxx, + cmCursesMainForm.cxx, cmCursesMainForm.h: new architecture + +2002-09-06 11:47 hoffman + + * Templates/CMakeBorlandWindowsSystemConfig.cmake: fix comment + +2002-09-06 11:00 iscott + + * Modules/readme.txt: Add important missing word to documentation + +2002-09-06 10:55 iscott + + * Modules/readme.txt: More detailed information about consistent + FindXXX.cmake files + +2002-09-06 10:47 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: use :: rule and not a + long line extension + +2002-09-06 09:24 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: minor fix + +2002-09-06 08:33 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: minor fixes + +2002-09-05 12:00 iscott + + * Modules/: FindFLTK.cmake, FindGLUT.cmake, FindGTK.cmake, + FindOpenGL.cmake, FindX11.cmake: Hide lots of values in the + advanced list Fix some bugs OpenGL always needs X11 on Unix + +2002-09-05 09:04 martink + + * Source/cmLocalGenerator.h: made destructor virtual + +2002-09-05 08:22 martink + + * Source/cmDynamicLoader.cxx: removed some couts + +2002-09-04 15:46 martink + + * Source/cmCacheManager.h: made method public + +2002-09-04 15:28 martink + + * Source/cmLocalUnixMakefileGenerator.cxx: fixes + +2002-09-04 15:24 martink + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmGlobalNMakeMakefileGenerator.cxx, cmLocalGenerator.cxx, + cmLocalGenerator.h: updates + +2002-09-04 15:22 martink + + * Source/: cmGlobalVisualStudio6Generator.cxx, + cmGlobalVisualStudio6Generator.h, + cmLocalVisualStudio6Generator.cxx, + cmLocalVisualStudio6Generator.h, + cmGlobalVisualStudio7Generator.cxx, + cmGlobalVisualStudio7Generator.h, + cmLocalVisualStudio7Generator.cxx, + cmLocalVisualStudio7Generator.h: new arch + +2002-09-04 15:22 martink + + * Source/: cmGlobalBorlandMakefileGenerator.cxx, + cmGlobalBorlandMakefileGenerator.h, + cmLocalBorlandMakefileGenerator.cxx, + cmLocalBorlandMakefileGenerator.h: first cut a new arch + +2002-09-04 11:17 martink + + * Tests/Wrapping/CMakeLists.txt: fixed test for new cmake + +2002-09-04 09:24 king + + * Modules/FindOpenGL.cmake: ERR: Still need to define + OPENGL_INCLUDE_PATH in addition to the standard + OPENGL_INCLUDE_DIR for backward compatability. + +2002-09-03 12:29 iscott + + * Modules/FindMFC.cmake: A simple FindMFC module for consistency + +2002-09-03 10:41 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: use windows paths for + utility depends + +2002-09-03 10:41 hoffman + + * Source/cmMSDotNETGenerator.cxx: BUG: bug for more than one custom + commands + +2002-09-03 09:14 iscott + + * Modules/Dart.cmake: Dart now has a configure option + +2002-09-03 09:00 iscott + + * Modules/FindPNG.cmake: I copied a bit too much VXL functionality + here. Oops + +2002-09-03 08:33 iscott + + * Modules/FindPerl.cmake: Added PERL_FOUND + +2002-09-03 08:24 iscott + + * Modules/FindMPEG.cmake: Add an MPEG finder in the new format - + functionality copied from VXL. + +2002-09-03 06:10 iscott + + * Modules/: FindAVIFile.cmake, FindGLU.cmake, FindGLUT.cmake, + FindJPEG.cmake, FindOpenGL.cmake, FindPNG.cmake, FindTIFF.cmake, + FindX11.cmake: Fixed mistake in comments Transferred OPENGL + finding logic in from VXL Added Some backwards compatibility with + CMake1.4 + +2002-09-02 17:34 iscott + + * Modules/: FindFLTK.cmake, FindGTK.cmake: Moved FLTK and GTK to + new FindXXX scheme. Imported some functionality from VXL + +2002-09-02 17:33 iscott + + * Modules/FindX11.cmake: small bug fixes + +2002-09-02 17:29 iscott + + * Source/cmFLTKWrapUICommand.cxx: FLTK_FLUID_EXE -> + FLTK_FLUID_EXECUTABLE because Module files are moving to + consistent scheme + +2002-09-02 16:59 iscott + + * Modules/: FindQt.cmake, FindTIFF.cmake: Fix Bugs + +2002-09-02 16:24 iscott + + * Modules/FindZLIB.cmake: This file should not be empty + +2002-09-02 15:49 iscott + + * Modules/: FindZLIB.cmake, FindZLib.cmake: Moved FindZLib.cmake to + FindZLIB.cmake + +2002-09-02 15:46 iscott + + * Modules/: FindPNG.cmake, FindX11.cmake, FindZLib.cmake: Copied + the X11 PNG and ZLIB functoinality from VXL + +2002-09-02 14:08 iscott + + * Modules/: FindPNG.cmake, FindZLib.cmake: Adding Zlib and PNG find + modules in the new format + +2002-09-02 12:58 iscott + + * Modules/FindTIFF.cmake: This Find Module is in the new style + +2002-09-02 12:05 iscott + + * Modules/: FindJPEG.cmake, FindQt.cmake, FindWget.cmake, + FindZLib.cmake: Add helpful message for QT Windows users Add + FindZLib in new format Move FindJPEG and FINDWGET over to new + scheme + +2002-09-02 07:03 iscott + + * Modules/FindAVIFile.cmake, Modules/FindQt.cmake, + Modules/LinkQT.cmake, Modules/readme.txt, + Source/cmQTWrapCPPCommand.cxx, Source/cmQTWrapUICommand.cxx: + Define a single expected format for the values defined in every + FindXXX.cmake file. Upgrade all the QT functionality to use the + new FindXXX.cmake format Add a module for AVIFile. + +2002-08-30 16:01 martink + + * Source/: cmGlobalUnixMakefileGenerator.cxx, + cmGlobalUnixMakefileGenerator.h, + cmLocalUnixMakefileGenerator.cxx, cmLocalUnixMakefileGenerator.h, + cmGlobalNMakeMakefileGenerator.cxx, + cmGlobalNMakeMakefileGenerator.h, + cmLocalNMakeMakefileGenerator.cxx, + cmLocalNMakeMakefileGenerator.h: in progress + +2002-08-30 16:00 martink + + * Source/: cmGlobalGenerator.cxx, cmGlobalGenerator.h, + cmLocalGenerator.cxx, cmLocalGenerator.h: in progress checkin + +2002-08-30 09:54 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: add rpcrt4.lib + because of CMakeLib needing it + +2002-08-29 09:45 martink + + * Source/cmCPluginAPI.cxx: extern C fixes + +2002-08-28 16:35 martink + + * Source/CursesDialog/: ccmake.cxx, cmCursesMainForm.cxx, + cmCursesMainForm.h: some changes in cachemanager and singletons + +2002-08-28 16:34 martink + + * Source/cmaketest.cxx: no more singletons + +2002-08-28 16:33 martink + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: now needs dynlib + support + +2002-08-28 15:08 king + + * Utilities/: cmake_release_config_cygwin, + cmake_release_unix_build.sh, cmake_release_unix_config.sh, + cmake_release_unix_package.sh: ENH: Moved build of source tarball + to package script. + +2002-08-28 14:51 martink + + * Source/: cmCPluginAPI.cxx, cmCacheManager.cxx, cmCacheManager.h, + cmCommands.cxx, cmFindPathCommand.cxx, cmFindProgramCommand.cxx, + cmLoadCacheCommand.cxx, cmLoadCommandCommand.cxx, + cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h, + cmMSProjectGenerator.cxx, cmMSProjectGenerator.h, cmMakefile.cxx, + cmMakefile.h, cmMakefileGenerator.cxx, cmMakefileGenerator.h, + cmNMakeMakefileGenerator.cxx, cmNMakeMakefileGenerator.h, + cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h, + cmVariableRequiresCommand.cxx, cmake.cxx, cmake.h, cmakemain.cxx, + cmakewizard.cxx, cmakewizard.h: changed cache manager and + registered generators to no longer be singletons + +2002-08-28 14:49 martink + + * Source/: cmTryCompileCommand.cxx, cmTryCompileCommand.h: an early + checking not complete + +2002-08-28 14:33 hoffman + + * Source/cmBorlandMakefileGenerator.cxx, + Source/cmMSDotNETGenerator.cxx, + Source/cmNMakeMakefileGenerator.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: ENH: add include paths to + rc program for resource generation + +2002-08-28 10:43 king + + * Utilities/setup.hint: ENH: Incremented version number for 1.4-4 + +2002-08-28 10:40 king + + * Utilities/: cmake-cygwin.README, setup.hint: ENH: Adding cygwin + installation files to branch. + +2002-08-28 10:28 hoffman + + * Utilities/: cmake-cygwin.README, cmake_release_config_cygwin, + setup.hint: [no log message] + +2002-08-28 09:30 king + + * Utilities/cmake_release_config_darwin: Switched to release branch + tag instead of sticky tag. + +2002-08-28 09:27 king + + * Utilities/cmake_release_config_darwin: ENH: Adding release + configuration for darwin. + +2002-08-28 09:07 king + + * Utilities/cmake_release_unix_package.sh: BUG: Don't erase tarball + directory in packaging step in case there is a source tarball + there. + +2002-08-28 09:04 hoffman + + * Utilities/: cmake_release_unix_config.sh, + cmake_release_unix_package.sh: cygwin release + +2002-08-28 08:51 king + + * Utilities/: cmake_release_config_hpux, cmake_release_config_irix, + cmake_release_config_linux, cmake_release_config_sun: ENH: + Updated release script configuration for CMake release 1.4.4. + +2002-08-27 14:45 andy + + * Source/cmSourceFile.cxx: Fix bug in trying to set stding with + null + +2002-08-27 09:43 hoffman + + * Source/: CMakeLists.txt, cmLoadCommandCommand.cxx: ENH: fix + warnings + +2002-08-27 08:36 martink + + * Source/: CMakeLists.txt, cmCommands.cxx: fixed bootstrap build to + not use LoadCOmmandCOmmand + +2002-08-26 15:22 martink + + * Source/: cmGetSourceFilePropertyCommand.cxx, + cmGetSourceFilePropertyCommand.h: updated to match the SET + +2002-08-26 15:20 martink + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: added new form of Set source + file properties command + +2002-08-26 10:52 martink + + * Source/: cmCPluginAPI.cxx, cmCPluginAPI.h, cmCommands.cxx, + cmLoadCommandCommand.cxx: now uses stubs + +2002-08-26 08:53 martink + + * Source/cmSetSourceFilesPropertiesCommand.cxx: fixed bug maybe + +2002-08-23 17:00 hoffman + + * Templates/cxxconfigure, Templates/cxxconfigure.in, configure, + configure.in: try another flag for the dec compiler... + +2002-08-23 16:25 hoffman + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: no more dll for plugin + +2002-08-23 16:15 martink + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: remoevd shared + lib + +2002-08-23 16:12 martink + + * Source/: cmCPluginAPI.h, cmCacheManager.h, cmDirectory.h, + cmRegularExpression.h, cmStandardIncludes.h, cmSystemTools.h, + cmake.h, CMakeLists.txt, cmListFileCache.h, cmMakefile.h, + cmMakefileGenerator.h, cmakewizard.h: removed shared lib support + +2002-08-23 16:12 martink + + * Source/cmaketest.cxx: memory issue + +2002-08-23 15:11 martink + + * Source/: cmVTKMakeInstantiatorCommand.cxx, cmCacheManager.h, + cmCPluginAPI.cxx: compiler warnings + +2002-08-23 13:47 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: BUG: fix for + cygwin + +2002-08-23 13:46 hoffman + + * Source/: CMakeLists.txt, cmCacheManager.cxx, cmCacheManager.h, + cmake.cxx, cmake.h, cmakemain.cxx, cmaketest.cxx, + CursesDialog/CMakeLists.txt, CursesDialog/form/CMakeLists.txt: + BUG: add explicit clean up of the cachemanager at exit of + programs, so dll destruction is not a problem. + +2002-08-23 09:09 hoffman + + * Source/cmNMakeMakefileGenerator.cxx: remove use of + getpropertyasbool + +2002-08-22 17:06 hoffman + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: BUG: fix for borland and a + shared CMakeLib + +2002-08-22 16:57 hoffman + + * Tests/: Complex/CMakeLists.txt, + Complex/Executable/CMakeLists.txt, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: BUG: fix for + borland and a shared CMakeLib + +2002-08-22 16:16 hoffman + + * Source/CMakeLists.txt: BUG: borland needs to have + BUILD_SHARED_LIBS on for executables to work with c++ + +2002-08-22 15:58 martink + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: complex test + needs the dll + +2002-08-22 14:41 martink + + * Source/cmCPluginAPI.cxx: minor warning fix + +2002-08-22 14:40 iscott + + * Modules/: FindAVIFile.cmake, readme.txt: Some more explanation of + a consistent scheme + +2002-08-22 11:37 hoffman + + * configure, configure.in, Templates/cxxconfigure, + Templates/cxxconfigure.in: BUG: fix for OSF compiler to use ansi + mode for streams + +2002-08-22 11:12 hoffman + + * Source/cmNMakeMakefileGenerator.cxx: BUG: use c flags for + cprograms, and do not use large command lines for linking + +2002-08-22 09:17 martink + + * Source/cmCPluginAPI.cxx: fixed some warnings + +2002-08-22 09:11 martink + + * Source/cmSetSourceFilesPropertiesCommand.cxx: fixed some warnings + +2002-08-22 09:10 martink + + * Source/cmCPluginAPI.h: fixed nested comment + +2002-08-22 08:25 martink + + * Source/CursesDialog/CMakeLists.txt: added lib + +2002-08-21 15:52 king + + * Utilities/cmake_release_unix_package.sh: ENH: Added -files to end + of internal binary tarball to distinguish from the outer + tarball's name. + +2002-08-21 15:37 martink + + * Source/CursesDialog/cmCursesMainForm.cxx: minor fixes for new + cache api + +2002-08-21 13:15 martink + + * Source/: cmMakefile.cxx, cmMakefile.h, cmCPluginAPI.cxx: minor + bug + +2002-08-21 12:01 martink + + * Source/: cmMakefileGenerator.h, cmMakefile.h: dll support + +2002-08-21 12:00 martink + + * Source/cmRegularExpression.h: made into dll + +2002-08-21 11:59 martink + + * Source/: cmake.h, cmakewizard.h, cmakewizard.cxx: support for + plugins + +2002-08-21 11:58 martink + + * Source/: cmLoadCommandCommand.cxx, cmLoadCommandCommand.h: adding + plugin support + +2002-08-21 11:58 martink + + * Source/: cmDynamicLoader.cxx, cmDynamicLoader.h: added plugin + support + +2002-08-21 11:55 martink + + * Source/: cmStandardIncludes.h, CMakeLists.txt, + cmCacheManager.cxx, cmCacheManager.h, cmDirectory.h, + cmSystemTools.h, cmListFileCache.h: made CMakeLib shared on + windows + +2002-08-21 11:54 martink + + * Source/: cmCPluginAPI.cxx, cmCPluginAPI.h: added C Plugin API + first cut + +2002-08-21 09:45 hoffman + + * Source/cmNMakeMakefileGenerator.cxx: BUG: use c compiler for link + of c programs, and use temp file nmake syntax for linking c and + c++ programs + +2002-08-19 15:40 iscott + + * Modules/: FindQt.cmake, LinkQT.cmake: I have tested this with + VXL/our internal code, and it works for me. + +2002-08-19 10:05 iscott + + * Modules/FindQt.cmake: I first go at a consistent FindXXX.cmake + file + +2002-08-16 11:20 martink + + * Source/cmMacroCommand.cxx: minor fix + +2002-08-16 11:17 martink + + * Source/: cmQTWrapCPPCommand.cxx, cmQTWrapUICommand.cxx, + cmSetSourceFilesPropertiesCommand.cxx, + cmSetSourceFilesPropertiesCommand.h, cmSourceFile.cxx, + cmSourceFile.h, cmSourceFilesCommand.cxx, + cmVTKWrapJavaCommand.cxx, cmVTKWrapPythonCommand.cxx, + cmVTKWrapTclCommand.cxx, cmGetSourceFilePropertyCommand.cxx, + cmWrapExcludeFilesCommand.cxx, cmCreateTestSourceList.cxx, + cmAbstractFilesCommand.cxx, cmAuxSourceDirectoryCommand.cxx, + cmBorlandMakefileGenerator.cxx, cmDSPWriter.cxx, + cmFLTKWrapUICommand.cxx, cmMSDotNETGenerator.cxx, + cmMakeDepend.cxx, cmNMakeMakefileGenerator.cxx, cmTarget.cxx, + cmUnixMakefileGenerator.cxx, cmVTKMakeInstantiatorCommand.cxx: + modified how source files store properties + +2002-08-16 09:45 king + + * Source/cmVTKMakeInstantiatorCommand.cxx: ERR: unsigned int -> + size_t. + +2002-08-16 09:31 king + + * Source/cmVTKMakeInstantiatorCommand.cxx: ENH: Changed check for + which version of instantiators to generate to look for definition + of VTK_USE_INSTANTIATOR_NEW instead of an extra argument to + VTK_MAKE_INSTANTIATOR. + +2002-08-15 15:01 king + + * Source/: cmVTKMakeInstantiatorCommand.cxx, + cmVTKMakeInstantiatorCommand.h: BUG: Added + backward-compatability. The old instantiator style will be used + unless the argument USE_INSTANTIATOR_NEW is given to tell the + command to make use of the instantiator new functions exported + from each class's implementation file. + +2002-08-15 14:39 king + + * Source/: cmVTKMakeInstantiatorCommand.cxx, + cmVTKMakeInstantiatorCommand.h: ENH: Improved generated + instantiator to use extern declarations to wrappers around the + New() methods. This avoids the need to include each class's + header in an instantiator source. The instantiator class + implementations can now fit in a single source file that compiles + quickly. + +2002-08-15 09:34 hoffman + + * Source/cmNMakeMakefileGenerator.cxx: ENH: add -DWIN32 flag for + builds + +2002-08-14 11:44 ibanez + + * Modules/FindFLTK.cmake: ENH: Platform dependent libraries added. + +2002-08-13 15:47 martink + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: added macro test + +2002-08-13 15:46 martink + + * Source/: cmCommands.cxx, cmMacroCommand.cxx, cmMacroCommand.h: + added new command + +2002-08-13 10:46 martink + + * Source/: cmExecProgramCommand.h, cmExecProgramCommand.cxx: merge + from main tree + +2002-08-13 10:08 martink + + * CMakeLists.txt: added man page + +2002-08-13 10:05 martink + + * Source/cmCreateTestSourceList.cxx: some warning and purify fixes + +2002-08-13 10:04 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx: IF Else improvements + +2002-08-13 10:03 martink + + * Source/: cmMakefile.cxx, cmMakefile.h: merges from the main + branch + +2002-08-13 10:02 martink + + * Source/cmRemoveCommand.cxx: merge from main branch + +2002-08-13 10:01 martink + + * Copyright.txt: merge from the main branch + +2002-08-13 10:00 martink + + * cmake.1: updated from main branch + +2002-08-13 09:59 martink + + * Modules/: FindFLTK.cmake, FindTCL.cmake: updates from the main + branch + +2002-08-12 08:39 martink + + * Source/cmElseCommand.cxx: compiler warning + +2002-08-09 12:00 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx, cmMakefile.cxx: + better IF ELSE handling + +2002-08-09 10:04 barre + + * Modules/FindTCL.cmake: FIX: fix commit messup (this change was + committed to the branch instead of the main tree, thus was + wiped-out later) + +2002-08-09 08:33 barre + + * Modules/FindwxWindows.cmake: FIX: - WINDOWS does not exist, use + WIN32 (or defineWINDOWS if cygwin can not be used inUnix mode?), + - fix an un-closed IF, - use same prefix for vars (and make it + advanced) + +2002-08-09 07:55 andy + + * Modules/FindwxWindows.cmake: This hopefully finds wxWindows on + UNIX + +2002-08-08 15:30 andy + + * Modules/FindwxWindows.cmake: Add UNIX support for WXWINDOWS + +2002-08-08 15:29 andy + + * Source/: cmExecProgramCommand.cxx, cmExecProgramCommand.h: Add + return value support and add documentation + +2002-08-08 15:14 king + + * Copyright.txt: ENH: Updated copyright. + +2002-08-08 15:13 andy + + * Source/: cmExecProgramCommand.cxx, cmExecProgramCommand.h: Add + option of storing output to the variable + +2002-08-08 13:41 barre + + * Modules/FindwxWindows.cmake: ENH: first stab at wxWindows support + (win32) + +2002-08-08 12:49 king + + * CMakeLists.txt: ENH: Adding installation for man page. + +2002-08-08 12:30 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: handle .exe extension + for cygwin + +2002-08-08 11:58 king + + * cmake.1: ENH: Initial checkin of unix manpage. + +2002-08-08 08:51 martink + + * Source/cmCreateTestSourceList.cxx: fixed some compiler warnings + and leaks + +2002-08-07 18:12 king + + * Utilities/: cmake_release_config_hpux, cmake_release_config_irix, + cmake_release_config_linux, cmake_release_config_sun, + cmake_release_unix.sh, cmake_release_unix_build.sh, + cmake_release_unix_config.sh, cmake_release_unix_package.sh: ENH: + Split install script into two parts. Added basic support for + adding more files to the distribution and creating packages. + +2002-08-07 11:01 martink + + * Source/cmCreateTestSourceList.cxx: fixed some compiler warnings + and leaks + +2002-08-07 10:30 martink + + * Source/cmCreateTestSourceList.cxx: fixed some compiler warnings + and leaks + +2002-08-05 18:08 ibanez + + * Modules/FindFLTK.cmake: ENH: Images library added. Names for + debuggin versions in windows added. + +2002-08-05 09:51 martink + + * Source/cmRemoveCommand.cxx: minor fix + +2002-08-02 13:43 ibanez + + * Modules/FindFLTK.cmake: FIX: names styles for fltkgl and + fltkforms are different in windows and linux. Both styles + are now searched taking advantage of the NAMES option in + FIND_LIBRARY. + +2002-08-02 12:51 martink + + * Source/cmLinkDirectoriesCommand.cxx: duhhhhhh + +2002-08-02 08:50 martink + + * Source/: cmFindLibraryCommand.cxx, cmLinkLibrariesCommand.cxx, + cmMakefile.h: updates from the main tree + +2002-08-01 23:05 barre + + * Source/cmFindLibraryCommand.cxx: FIX: put ExpandRegistryValue() + back (seems to have been removed accidentally I guess in 1.25) + +2002-08-01 15:58 martink + + * Source/cmLinkDirectoriesCommand.cxx: no longer need an argument + +2002-08-01 09:50 martink + + * Source/cmCreateTestSourceList.cxx, + Source/cmCreateTestSourceList.h, Source/cmMakefile.h, + Source/cmNMakeMakefileGenerator.cxx, + Source/cmNMakeMakefileGenerator.h, Source/cmSystemTools.cxx, + Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h, Source/cmVTKWrapTclCommand.cxx, + Source/cmake.cxx, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/TestDriver/CMakeLists.txt, Tests/TestDriver/test1.cxx, + Tests/TestDriver/test2.cxx, Tests/TestDriver/testArgs.h, + Tests/TestDriver/subdir/test3.cxx: merges from the main branch + +2002-08-01 08:41 martink + + * Modules/: FindGLU.cmake, FindJNI.cmake, FindOpenGL.cmake, + FindTCL.cmake: merges from the main tree + +2002-07-31 13:45 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmNMakeMakefileGenerator.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: BUG: fix jump to directory and build + for nmake if library path is not set. combine + OutputBuildExecutableInDir and OutputBuildLibraryInDir into + OutputBuildTargetInDir + +2002-07-31 11:08 martink + + * Tests/TestDriver/testArgs.h: minor fix for c tests + +2002-07-31 11:07 martink + + * Source/cmCreateTestSourceList.cxx: fixed support for C test + programs + +2002-07-31 09:29 barre + + * Source/cmCreateTestSourceList.cxx: FIX: is enough to + get malloc()/free() + +2002-07-30 16:19 martink + + * Tests/TestDriver/: CMakeLists.txt, test1.cxx, test2.cxx, + subdir/test3.cxx: updated to mods in command + +2002-07-30 16:18 martink + + * Source/: cmCreateTestSourceList.cxx, cmCreateTestSourceList.h: + updated to handle extensions + +2002-07-30 10:33 barre + + * Source/cmCreateTestSourceList.cxx: FIX: la commande créait du + code C++. Du code C devrait faire l'affaire. + +2002-07-30 10:23 barre + + * Source/cmCreateTestSourceList.cxx: FIX: la commande créait du + code C++. Du code C devrait faire l'affaire. + +2002-07-29 09:46 barre + + * Modules/: FindTCL.cmake: ENH: change the search path order (if + several Tcl/Tk are installed, the "current" version is likely to + be the one that is bound to the wish/tclsh found in the PATH) + +2002-07-26 14:06 barre + + * Modules/: FindTCL.cmake: ENH: clean the module, add debug libs + +2002-07-26 10:14 king + + * Source/: cmITKWrapTclCommand.cxx, cmITKWrapTclCommand.h: BUG: + Only one generated Tcl wrapper source was getting added to the + package's library. + +2002-07-26 09:54 king + + * Source/cmVTKWrapTclCommand.cxx: BUG: Generated call to + Tcl_CreateCommand for vtkCommand should cast pointer to extern + "C" version. + +2002-07-25 16:47 king + + * Source/cmVTKWrapTclCommand.cxx: BUG: Generated vtkCommand + prototype cannot be extern "C" because it may not match with the + version in VTK. + +2002-07-25 16:41 andy + + * Source/cmSystemTools.cxx: Ok, now cd will work on windows + +2002-07-25 16:25 will + + * Source/cmVTKWrapTclCommand.cxx: fixed warning + +2002-07-25 11:17 barre + + * Modules/FindTCL.cmake: FIX: the stub libs were not searched + +2002-07-25 11:10 barre + + * Modules/FindTCL.cmake: FIX: the stub libs were not searched + +2002-07-25 09:16 martink + + * Source/cmMakefile.cxx: makefile now does not ignore NOTFOUND libs + and includes + +2002-07-25 08:00 martink + + * Source/cmMakefile.cxx: makefile now ignores NOTFOUND libs and + includes + +2002-07-22 11:03 king + + * Utilities/cmake_release_config_irix: ENH: Added release script + configuration for IRIX build. + +2002-07-22 10:40 martink + + * Source/cmMakefile.h: updated to patch 1 + +2002-07-22 10:34 martink + + * Templates/CXXCMakeSystemConfig.cmake.in: better docs and support + for mising args + +2002-07-22 10:33 martink + + * Source/cmMakefile.cxx: now replaces args even if not defined + +2002-07-22 10:31 martink + + * Source/: cmAddDefinitionsCommand.cxx, + cmIncludeDirectoryCommand.cxx, cmLinkLibrariesCommand.cxx, + cmTargetLinkLibrariesCommand.cxx: allows less arguments changes + from main tree + +2002-07-22 10:00 martink + + * Source/: cmIncludeDirectoryCommand.cxx, + cmLinkLibrariesCommand.cxx: allows no arguments + +2002-07-20 08:55 martink + + * Source/cmAddDefinitionsCommand.cxx: modified to accept no + arguments + +2002-07-19 15:49 martink + + * Templates/CXXCMakeSystemConfig.cmake.in: fixed some empty + descriptions + +2002-07-19 14:42 martink + + * Source/cmMakefile.cxx: full variable replacement and removal or + empty arguments + +2002-07-19 14:40 martink + + * Source/cmTargetLinkLibrariesCommand.cxx: does not need a second + argument + +2002-07-18 18:43 starreveld + + * Modules/: FindGLU.cmake, FindOpenGL.cmake: ERR: remove automatic + Carbon framework on osx + +2002-07-17 16:33 martink + + * Source/cmInstallFilesCommand.cxx: fix for install with paths + +2002-07-17 15:57 martink + + * Source/cmInstallFilesCommand.cxx: fixe for files with paths + +2002-07-17 11:53 andy + + * Source/cmake.cxx: Fix changing of directories using cmSystemTools + RunCommand feature + +2002-07-17 10:52 martink + + * Source/: cmForEachCommand.cxx, cmForEachCommand.h, + cmMakefile.cxx: fix for IF statements inside of Foreach loops + +2002-07-17 10:48 martink + + * Source/cmForEachCommand.cxx, Source/cmForEachCommand.h, + Source/cmMakefile.cxx, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: fixed if statements + inside a foreach + +2002-07-16 17:42 king + + * Tests/: Complex/CMakeLists.txt, Complex/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/complex.cxx: ENH: Added test for + IF inside a FOREACH. + +2002-07-15 11:37 king + + * Utilities/cmake_release_config_hpux: ENH: Adding release script + configuration for HPUX.e + +2002-07-15 11:13 king + + * Utilities/cmake_release_config_sun: ENH: Added release + configuration file for Sun. + +2002-07-15 10:48 king + + * Utilities/: cmake_release_config_linux, cmake_release_unix.sh: + ENH: Made release script more generic for creating static and + shared releases. + +2002-07-15 10:09 king + + * Utilities/cmake_release_config_linux: ENH: Release script + configuration file for linux. + +2002-07-15 10:08 king + + * Utilities/cmake_release_unix.sh: ENH: Protoype unix release + script. + +2002-07-15 09:55 king + + * Templates/CMakeLists.txt: ERR: CXXCMakeSystemConfig.cmake and + CCMakeSystemConfig.cmake need .in extension. + +2002-07-15 09:46 king + + * Source/cmInstallFilesCommand.cxx: BUG: Only the last extension + should be removed. + +2002-07-15 09:45 king + + * Source/: cmInstallFilesCommand.cxx, cmInstallFilesCommand.h: BUG: + INSTALL_FILES command should remove the extension of a file + before adding the user provided extension. + +2002-07-15 09:44 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added + GetFilenameWithoutLastExtension. + +2002-07-15 09:23 king + + * Templates/CMakeLists.txt: ERR: Install for + CXXCMakeSystemConfig.cmake and CCMakeSystemConfig.cmake need .in + extension. + +2002-07-15 09:22 king + + * Modules/FindJNI.cmake: ENH: Added /usr/local/lib/java search + paths. + +2002-07-15 08:44 martink + + * Source/: cmInstallFilesCommand.cxx, cmInstallFilesCommand.h: fix + install target + +2002-07-12 11:17 martink + + * Modules/FindJava.cmake: merged module into branch + +2002-07-12 11:10 martink + + * Source/cmIfCommand.cxx: minor warning fix + +2002-07-11 14:58 martink + + * Source/cmIfCommand.cxx: fix warning + +2002-07-11 14:25 martink + + * Source/cmMakefile.cxx: merge from the main tree + +2002-07-11 14:20 hoffman + + * Source/cmMakefile.cxx: BUG: fix for compile with hp + +2002-07-11 14:03 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx, cmIfCommand.h, + cmMakefile.cxx, cmMakefile.h: merged some updates, the IF + checking + +2002-07-11 13:58 martink + + * Source/: cmUnixMakefileGenerator.cxx, cmVTKWrapTclCommand.cxx, + cmake.cxx: updates from the main tree + +2002-07-10 16:07 martink + + * Source/cmVTKWrapTclCommand.cxx: fix warning on Sun + +2002-07-10 14:34 andy + + * Source/cmake.cxx: Add command that runs program in given + directory + +2002-07-10 11:38 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx, cmIfCommand.h, + cmMakefile.cxx, cmMakefile.h: better error handling with if + statements + +2002-07-10 09:33 andy + + * Source/cmUnixMakefileGenerator.cxx: Fix problem when using NMake. + This generated lines without space so nmake got all confused + +2002-07-08 09:30 andy + + * Modules/FindJava.cmake: Add module that finds java executables. + This module should find java, javac, and jar. + +2002-07-02 09:58 martink + + * configure, configure.in: merges from main tree + +2002-07-02 09:56 martink + + * Modules/FindFLTK.cmake: merges with main tree + +2002-07-02 09:54 martink + + * Source/: cmAuxSourceDirectoryCommand.cxx, + cmBorlandMakefileGenerator.cxx, cmCMakeMinimumRequired.cxx, + cmConfigure.cmake.h.in, cmConfigure.h.in, + cmCreateTestSourceList.cxx, cmCreateTestSourceList.h, + cmDSWWriter.cxx, cmElseCommand.cxx, cmEnableTestingCommand.h, + cmFLTKWrapUICommand.cxx, cmFindLibraryCommand.cxx, + cmFunctionBlocker.h, cmGetFilenameComponentCommand.cxx, + cmITKWrapTclCommand.cxx, cmIfCommand.cxx, cmIfCommand.h, + cmInstallFilesCommand.cxx, cmLinkLibrariesCommand.cxx, + cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h, cmMakeDepend.cxx, + cmMakeDepend.h, cmMakefile.cxx, cmMakefile.h, + cmNMakeMakefileGenerator.cxx, cmNMakeMakefileGenerator.h, + cmQTWrapCPPCommand.cxx, cmQTWrapUICommand.cxx, cmSourceFile.cxx, + cmSourceFile.h, cmSourceFilesCommand.cxx, + cmSourceFilesRemoveCommand.cxx, cmStandardIncludes.h, + cmSystemTools.cxx, cmSystemTools.h, cmTarget.cxx, + cmTargetLinkLibrariesCommand.cxx, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h, cmVTKMakeInstantiatorCommand.cxx, + cmVTKWrapJavaCommand.cxx, cmVTKWrapPythonCommand.cxx, + cmVTKWrapTclCommand.cxx, cmWrapExcludeFilesCommand.cxx, + cmake.cxx, cmake.h, ctest.cxx: massive merge from main tree + +2002-07-02 09:33 martink + + * Source/: cmFindLibraryCommand.cxx, cmMakefile.h, + cmSystemTools.cxx, cmSystemTools.h: updates + +2002-07-02 08:24 martink + + * Source/: cmMakefile.cxx, cmMakefile.h: fixed warning + +2002-07-01 08:49 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx, cmIfCommand.h: + consolidated IF handling and added checks for bad arguments + +2002-06-30 13:53 martink + + * Source/: cmVTKWrapPythonCommand.cxx, cmVTKWrapTclCommand.cxx: + fixed commands that were setting definitions in final pass to set + definitions in initial pass + +2002-06-29 20:04 martink + + * Source/: cmQTWrapCPPCommand.cxx, cmVTKWrapJavaCommand.cxx, + cmVTKWrapPythonCommand.cxx, cmVTKWrapTclCommand.cxx: fixed + commands that were setting definitions in final pass to set + definitions in initial pass + +2002-06-28 10:29 andy + + * Source/cmVTKWrapPythonCommand.cxx: Remove another warning in the + python wrapping + +2002-06-28 10:18 martink + + * Source/cmSourceFile.h: performance fix + +2002-06-28 09:43 andy + + * Source/cmVTKWrapPythonCommand.cxx: Add removing of warnings and + add comment about the file being generated in CMake + +2002-06-28 09:21 martink + + * Source/cmAuxSourceDirectoryCommand.cxx: bug fix for aux src dirs + +2002-06-28 08:57 martink + + * Source/: cmMakefile.cxx, cmSourceFile.h: minor cleanup + +2002-06-27 21:17 martink + + * Source/: cmMakefile.cxx, cmSourceFile.h: performance inprovements + +2002-06-27 16:47 martink + + * Source/cmMakefile.cxx: bug fix + +2002-06-27 16:42 martink + + * Source/: cmMakefile.cxx, cmSourceFilesCommand.cxx: bug fix + +2002-06-27 16:25 martink + + * Source/cmSourceFilesCommand.cxx: bug fix + +2002-06-27 16:05 martink + + * Tests/Simple/CMakeLists.txt: a minor fix to make my life easier + +2002-06-27 15:57 martink + + * Source/cmAuxSourceDirectoryCommand.cxx, + Source/cmCreateTestSourceList.cxx, Source/cmDSWWriter.cxx, + Source/cmFLTKWrapUICommand.cxx, + Source/cmGetFilenameComponentCommand.cxx, + Source/cmITKWrapTclCommand.cxx, Source/cmInstallFilesCommand.cxx, + Source/cmLinkLibrariesCommand.cxx, + Source/cmMSDotNETGenerator.cxx, Source/cmMakeDepend.cxx, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmQTWrapCPPCommand.cxx, Source/cmQTWrapUICommand.cxx, + Source/cmSourceFilesCommand.cxx, + Source/cmSourceFilesRemoveCommand.cxx, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmTarget.cxx, + Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmUnixMakefileGenerator.cxx, + Source/cmVTKMakeInstantiatorCommand.cxx, + Source/cmVTKWrapJavaCommand.cxx, + Source/cmVTKWrapPythonCommand.cxx, + Source/cmVTKWrapTclCommand.cxx, + Source/cmWrapExcludeFilesCommand.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt: removed all + source lists from the system and made them vectors. Also appended + _CMAKE_PATH to the end of the automatic cache entries for + executables and libraries. Odds of all these changes working are + slim but cmake builds and passes all its tests. VTK40 starts + building + +2002-06-27 09:35 king + + * Source/: cmake.cxx, cmake.h: BUG: CMake crashed if it failed to + find its own executable. Also added better error messages when + this occurs. + +2002-06-25 09:59 hoffman + + * Tests/Simple/CMakeLists.txt: add a test with no extension + +2002-06-25 09:59 hoffman + + * Source/cmTarget.cxx: BUG: try to tell the difference between + variables with sources and other variables + +2002-06-25 09:18 king + + * Source/cmStandardIncludes.h: BUG: Result from ostrstream::str() + can be a null pointer. + +2002-06-24 18:19 king + + * Source/cmStandardIncludes.h: BUG: Attempt to fix + ostrstream::str() wrapper for broken platforms. + +2002-06-24 16:42 martink + + * Source/cmTarget.cxx: modified to handle src list vectors without + proper dollar signs + +2002-06-24 14:07 martink + + * Source/ctest.cxx: BUG: make sure windows paths are used for the + command or it will not work for win 98 + +2002-06-21 11:35 martink + + * Templates/: CXXCMakeSystemConfig.cmake.in, cxxconfigure, + cxxconfigure.in: now looks for stringstream as well, from the + main tree + +2002-06-21 11:25 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx: fixed if matches bug + +2002-06-21 10:31 king + + * Source/cmStandardIncludes.h: ERR: using declaration to move + streams into std namespace needs to bring up ostrstream and + ostringstream, not strstream and stringstream. + +2002-06-21 10:26 king + + * Source/CursesDialog/form/frm_driver.c: ERR: Removed most of the + repeated curses declarations. The cause errors on other + platforms. Grrrr.. + +2002-06-21 09:25 king + + * Source/CursesDialog/form/frm_driver.c: ERR: Added function + declarations from curses.h. They are not present on some + platforms. Fixes warnings about implicit declarations. + +2002-06-21 09:00 king + + * Tests/: Complex/cmTestConfigure.h.in, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexRelativePaths/cmTestConfigure.h.in: ENH: Added + configuration of CMAKE_NO_ANSI_STRING_STREAM. It is defined when + the sstream header does not exist. + +2002-06-21 08:42 king + + * configure, Templates/cxxconfigure: ERR: Ran autoconf on + corresponding fixes to configure.in and cxxconfigure.in. + +2002-06-21 08:39 hoffman + + * Templates/cxxconfigure.in: fix for sstream + +2002-06-21 08:38 hoffman + + * configure.in: fix to sstring stuff + +2002-06-20 10:39 hoffman + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx: modified MATCHES to + handle non variables + +2002-06-20 10:20 king + + * Source/cmStandardIncludes.h: ERR: cmStringStream is taking the + functionality of ostringstream and ostrstream, not stringstream + and strstream. + +2002-06-20 10:19 king + + * Templates/CXXCMakeSystemConfig.cmake.in: BUG: + CMAKE_NO_ANSI_STRING_STREAM needs to be copied from the + cxxconfigure results. + +2002-06-19 15:21 king + + * Source/: cmBorlandMakefileGenerator.cxx, + cmCMakeMinimumRequired.cxx, cmConfigure.cmake.h.in, + cmConfigure.h.in, cmNMakeMakefileGenerator.cxx, + cmStandardIncludes.h, cmSystemTools.cxx, + cmUnixMakefileGenerator.cxx, cmVTKMakeInstantiatorCommand.cxx, + cmake.cxx: ENH: Added cmStringStream class to wrap + std::stringstream or std::strstream depending on the platform. + The interface is that of std::stringstream, so no "ends" or + "rdbuf()->freeze(0)" lines are needed. + +2002-06-19 15:09 king + + * configure, Templates/cxxconfigure: ENH: Re-ran autoconf to + include changes to corresponding configure input. This adds a + test for the availability of sstream. + +2002-06-19 15:05 king + + * configure.in, Templates/cxxconfigure.in: ENH: Added test for + sstream header. Defines CMAKE_NO_ANSI_STRING_STREAM if the + header doesn't exist. + +2002-06-19 14:35 barre + + * Source/cmSystemTools.cxx: ENH: FindLibrary supports .Net specific + lib dirs + +2002-06-19 13:49 martink + + * Source/: cmCreateTestSourceList.cxx, cmCreateTestSourceList.h, + cmEnableTestingCommand.h, cmFunctionBlocker.h, cmMakefile.h, + cmTarget.cxx: merges from main tree + +2002-06-19 13:28 martink + + * Source/cmSourceFile.cxx: modified create test source to create a + vector + +2002-06-19 13:14 martink + + * Modules/: Dart.cmake, FindGLU.cmake, FindGLUT.cmake, + FindJNI.cmake, FindOpenGL.cmake, FindTclsh.cmake, FindX11.cmake: + update dfrom main tree + +2002-06-19 12:51 martink + + * Source/cmCreateTestSourceList.cxx, + Source/cmCreateTestSourceList.h, Source/cmSourceFile.cxx, + Source/cmTarget.cxx, Tests/TestDriver/CMakeLists.txt: modified + create test source to create a vector + +2002-06-19 08:57 king + + * Source/CursesDialog/form/fty_alpha.c: ERR: Fixed unused parameter + warning. + +2002-06-19 07:28 hoffman + + * CMakeLists.txt, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: [no log message] + +2002-06-18 17:20 king + + * Source/: cmEnableTestingCommand.h, cmFunctionBlocker.h, + cmMakefile.cxx, cmSystemTools.cxx, cmTarget.cxx: ERR: Fixed + compiler warnings. + +2002-06-18 17:20 king + + * Source/CursesDialog/: ccmake.cxx, cmCursesBoolWidget.cxx, + cmCursesDummyWidget.cxx, cmCursesForm.h, cmCursesLabelWidget.cxx, + cmCursesLongMessageForm.cxx, cmCursesMainForm.cxx: ERR: Fixed + compiler warnings about unused parameters. + +2002-06-18 17:19 king + + * Source/CursesDialog/form/: frm_driver.c, frm_req_name.c, + fty_alnum.c, fty_int.c, fty_ipv4.c, fty_num.c, fty_regex.c: ERR: + Fixed compiler warnings when using strict ansi. + +2002-06-18 16:43 martink + + * Modules/Dart.cmake: fixed another bug + +2002-06-18 16:35 martink + + * Modules/Dart.cmake: fixed bug + +2002-06-18 16:32 king + + * Source/ctest.cxx: ERR: Fix for fprintf format warning. + +2002-06-18 16:30 king + + * Source/CursesDialog/form/frm_data.c: ERR: Attempt to fix warning + on OSF about implicit declaration of winnstr. + +2002-06-18 14:26 barre + + * Modules/FindGLUT.cmake: ENH: add more paths for the HP + +2002-06-18 08:54 hoffman + + * CMakeLists.txt, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: try and fix link + problem on dec + +2002-06-17 13:43 andy + + * Modules/FindJNI.cmake: Add debian Java paths + +2002-06-17 13:07 barre + + * Modules/: FindGLU.cmake, FindGLUT.cmake: FIX: GLU and GLUT flags + for Mac OSX + +2002-06-14 16:49 barre + + * Modules/: FindCABLE.cmake, FindTclsh.cmake, FindX11.cmake: ENH: + clean modules (doc, make stuff advanced, etc.) + +2002-06-14 16:38 hoffman + + * Modules/Dart.cmake: ENH: change so that on all make based systems + all dart targets are added + +2002-06-14 11:46 barre + + * Modules/: FindGLU.cmake, FindGLUT.cmake: ENH: use + OPENGL_LIBRARY_PATH as additional search path + +2002-06-14 11:45 barre + + * Modules/FindOpenGL.cmake: ENH: define OPENGL_LIBRARY_PATH (path + to OPENGL_LIBRARY) so that it can be used to search for other + OpenGL-related libs + +2002-06-14 11:31 barre + + * Modules/FindGLU.cmake: FIX: bug, the wrong include file was + searched. + +2002-06-14 10:37 barre + + * Source/: cmFindLibraryCommand.cxx, cmSystemTools.cxx, + cmSystemTools.h: ENH: FindLibrary can now use the makefile to add + some compiler-specific lib search path (depending on the + generator). + +2002-06-14 10:35 barre + + * Modules/FindGLUT.cmake: ENH/FIX: Glut should be found, not set. + Add search path for Cygwin + +2002-06-13 14:45 barre + + * Modules/FindGLUT.cmake: FIX: comply with the way OpenGL libs are + set in FindOpenGL and FindGLU + +2002-06-13 11:48 barre + + * Modules/: FindGLU.cmake, FindGLUT.cmake, FindOpenGL.cmake: ENH: + make all OpenGL libs advanced, and add support for glu lib with + Borland + +2002-06-11 14:54 martink + + * Source/: cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h, + cmNMakeMakefileGenerator.cxx, cmNMakeMakefileGenerator.h, + cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: some + fixes for dot net and spaces + +2002-06-11 14:25 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmNMakeMakefileGenerator.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: use lower case and not short path for + uniq paths on window + +2002-06-11 14:25 hoffman + + * Source/cmMSDotNETGenerator.cxx: only allow unique configurations + +2002-06-11 14:15 hoffman + + * Source/: cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h: BUG: fix + dot net for paths with spaces + +2002-06-11 12:16 hoffman + + * Source/cmMSDotNETGenerator.cxx: BUG: RelativePath should not be + quoted in output files even if it has spaces + +2002-06-11 11:19 martink + + * Source/cmUnixMakefileGenerator.cxx: some win98 depend problems + +2002-06-11 11:01 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: don't use short paths in + the output + +2002-06-11 10:43 hoffman + + * Source/cmUnixMakefileGenerator.cxx: use short path to get unique + path names for depend path output + +2002-06-11 09:14 hoffman + + * Source/CursesDialog/: ccmake.cxx, cmCursesMainForm.cxx: ERR: + Fixed sun CC warnings. + +2002-06-10 14:21 martink + + * Source/: cmMakeDepend.cxx, cmMakeDepend.h, CMakeLists.txt: joins + with the head + +2002-06-10 14:19 martink + + * Source/: cmMakeDepend.cxx, cmMakeDepend.h: now includes current + include files directory when searching for files it includes + +2002-06-10 11:33 hoffman + + * Source/CMakeLists.txt: BUG: cmake needs it's own directory for + includes, so depends work + +2002-06-10 09:50 hoffman + + * ChangeLog.txt: new changes for 1.4 + +2002-06-10 09:35 martink + + * Source/cmMakefile.h: updated revision + +2002-06-10 09:33 martink + + * Modules/: FindGLUT.cmake, FindPythonLibs.cmake: updated from main + branch + +2002-06-10 08:53 andy + + * Modules/FindPythonLibs.cmake: Oops, forgot the library name + +2002-06-10 08:52 andy + + * Modules/FindPythonLibs.cmake: Add search for python 2.2 + +2002-06-07 08:39 ibanez + + * Modules/FindFLTK.cmake: FIX: {} were missing around + FLTK_*_LIBRARY. + +2002-06-06 17:49 ibanez + + * Modules/FindFLTK.cmake: FIX: The final test is done now over + FLTK_LIBRARY instead of FLTK_LIBRARY_PATH + +2002-06-06 15:28 ibanez + + * Modules/FindFLTK.cmake: ENH: Support for FLTK1.1 and FLTK1.0.11 + added. An option allows to select between the two versions. + +2002-06-06 15:00 martink + + * CMake.rtf: updates + +2002-06-06 11:53 hoffman + + * Source/: Makefile.borland: ENH: remove borland bootstrap makefile + +2002-06-06 08:49 hoffman + + * Modules/FindGLUT.cmake: fix for glut on win32 + +2002-06-05 13:31 martink + + * Source/cmMakefile.h: updated revision + +2002-06-05 13:30 martink + + * Source/cmMakefile.h: updated rev + +2002-06-05 13:22 martink + + * Source/ccommand.cxx: merged ccommand into cmake + +2002-06-05 09:11 martink + + * Source/: CMakeLib.dsp, DumpDocumentation.dsp, ccommand.dsp, + cmake.dsp, ctest.dsp: uses executabke bootstrap + +2002-06-03 13:40 martink + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: changed CCOMMAND to + CMAKE + +2002-06-03 13:08 martink + + * Source/CMakeLists.txt, Source/cmBorlandMakefileGenerator.cxx, + Source/cmNMakeMakefileGenerator.cxx, Source/cmake.cxx, + Source/cmake.h, Source/cmakemain.cxx, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: removed ccommand use + cmake now + +2002-06-03 11:06 martink + + * CMake.rtf: updated + +2002-06-03 10:25 hoffman + + * Source/: cmMakefile.cxx, cmTarget.cxx: ENH: only add _LIB_DEPEND + information for libraries and modules + +2002-05-31 08:39 martink + + * Source/cmSystemTools.cxx: fixed bug in get short path for quoted + paths + +2002-05-29 15:00 perera + + * Source/cmTarget.cxx: BUG: never make a target depend on itself. + This was causing unnecessary library duplication, resulting in + link errors on some platforms. + +2002-05-29 09:56 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: MAKEFLAGS does not need + to be passed on command line. It is automatically set by make in + environment for recursive call. + +2002-05-28 08:56 martink + + * Source/: cmake.cxx, cmake.h: remobed bootstrap + +2002-05-28 08:50 martink + + * bootstrap.exe, ccommand.exe: different bootstrap command + +2002-05-27 10:29 barre + + * Tests/: Complex/VarTests.cmake, Complex/Executable/complex.cxx, + ComplexOneConfig/VarTests.cmake, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/VarTests.cmake, + ComplexRelativePaths/Executable/complex.cxx: ENH: add tests for + LESS, GREATER, STRLESS, STRGREATER (IF command) + +2002-05-23 13:27 hoffman + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: ENH: increse coverage + +2002-05-23 13:23 hoffman + + * Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Tests/Complex/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: increase + coverage + +2002-05-23 13:04 hoffman + + * Tests/: Complex/CMakeLists.txt, + Complex/cmTestConfigureEscape.h.in, + Complex/Executable/complex.cxx, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigureEscape.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigureEscape.h.in, + ComplexRelativePaths/Executable/complex.cxx: add a test for + escape quotes and configure file + +2002-05-23 10:36 martink + + * bootstrap.exe, ccommand.exe: added win32 bootstrap support + +2002-05-23 10:34 martink + + * Source/: cmDSWWriter.cxx, cmMSDotNETGenerator.cxx: only add test + target if testing is enabled and ctest is found + +2002-05-23 10:33 martink + + * Source/cmake.cxx: minor bootstap fixes + +2002-05-23 10:32 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx, cmIfCommand.h: adde + less greater + +2002-05-22 13:20 hoffman + + * Source/cmAddCustomCommandCommand.cxx: ENH: add list expansion + back + +2002-05-22 09:48 hoffman + + * Source/: cmMSDotNETGenerator.cxx, cmMSProjectGenerator.cxx, + cmUnixMakefileGenerator.cxx: ENH: enable cxx by default if no + languages have been enabled + +2002-05-22 09:48 hoffman + + * Source/cmSystemTools.cxx: ENH: better comment processing + +2002-05-22 09:47 hoffman + + * Source/: ctest.cxx, ctest.h: ENH: fix depend problem + +2002-05-18 16:09 starreveld + + * Modules/FindOpenGL.cmake: find openGL in Carbon + +2002-05-15 17:23 martink + + * Source/: cmake.cxx, cmake.h: added initial attempt to support + win32 bootstrapping + +2002-05-15 11:11 berk + + * Source/cmSystemTools.cxx: RunCommand now checks whether the + process died abnormally (on Unix) + +2002-05-14 08:42 andy + + * Modules/FindWish.cmake: Add better detection of wish 8.2 + +2002-05-12 11:32 barre + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: add + no_system_path option to FindProgram so that the PATH is ignored + +2002-05-12 11:31 barre + + * Source/: cmFindProgramCommand.cxx, cmFindProgramCommand.h: + ENH/FIX: add NO_SYSTEM_PATH option + fix command usage + +2002-05-12 11:31 barre + + * Source/cmFindLibraryCommand.h: FIX: command usage + +2002-05-11 22:28 perera + + * Source/cmTarget.cxx: FIX: Remove assert since it was breaking + IRIX builds. + +2002-05-10 14:06 millerjv + + * Source/cmTarget.cxx: FIX: Const reference to a set needs a + const_iterator. (.NET build error) + +2002-05-10 13:35 perera + + * Source/CMakeLists.txt, Source/cmTarget.cxx, Source/cmTarget.h, + Tests/Dependency/CMakeLists.txt, + Tests/Dependency/Eight/CMakeLists.txt, + Tests/Dependency/Eight/EightSrc.c, + Tests/Dependency/Exec2/CMakeLists.txt, + Tests/Dependency/Exec2/ExecMain.c, + Tests/Dependency/Exec3/CMakeLists.txt, + Tests/Dependency/Exec3/ExecMain.c, + Tests/Dependency/Exec4/CMakeLists.txt, + Tests/Dependency/Exec4/ExecMain.c, + Tests/Dependency/Seven/CMakeLists.txt, + Tests/Dependency/Seven/SevenSrc.c, Tests/LinkLine/CMakeLists.txt, + Tests/LinkLine/Exec.c, Tests/LinkLine/One.c, + Tests/LinkLine/Two.c: BUG: Correct some of the dependency + analysis code. - Make sure the original link line is untouched - + Avoid duplicating the link line when supporting version < 1.4 - + Make sure the cyclic dependencies and such are output correctly + in complicated cases. - Avoid outputing dependencies that are + already satisfied on the original link line when possible. + +2002-05-10 08:54 king + + * Source/cmSystemTools.cxx: ERR: Added variable initializer. + +2002-05-09 09:33 hoffman + + * Source/: cmDSWWriter.cxx, cmMSDotNETGenerator.cxx, cmTarget.cxx, + cmTarget.h, cmUnixMakefileGenerator.cxx: ENH: change set + to set to avoid long symbols that crash ar on + solaris + +2002-05-08 17:45 king + + * Tests/Wrapping/: CMakeLists.txt, itkWrapperConfig.cxx: ENH: Added + coverage test for ITK_WRAP_TCL. Doesn't actually invoke CABLE. + +2002-05-08 17:45 king + + * Source/cmITKWrapTclCommand.cxx: ENH: Added dependency hack to + support wrapping test. + +2002-05-08 17:37 king + + * Source/cmITKWrapTclCommand.cxx: BUG: Need to use + CMAKE_CXX_COMPILER, not CXX, to get the C++ compiler name. + +2002-05-08 13:11 king + + * Source/: cmCommands.cxx, cmITKWrapTclCommand.cxx, + cmITKWrapTclCommand.h: ENH: Added ITK Tcl wrapping command. + +2002-05-08 10:27 martink + + * Source/Makefile.borland: ENH: add clean command + +2002-05-08 09:05 hoffman + + * Source/cmake.cxx: ENH: fix cmake to work without ccommand. + +2002-05-08 08:46 hoffman + + * Source/cmBorlandMakefileGenerator.cxx: BUG: short path does not + work on bcc32 + +2002-05-07 11:03 hoffman + + * Source/CursesDialog/ccmake.cxx: ENH: add -B option to specify the + build directory, so make edit_cache will work + +2002-05-07 09:11 hoffman + + * Source/cmUnixMakefileGenerator.cxx: WNG: remove a warning + +2002-05-07 09:03 hoffman + + * CMake.rtf: ENH: update with docs about the targets + +2002-05-07 09:02 hoffman + + * Source/: cmBorlandMakefileGenerator.cxx, + cmNMakeMakefileGenerator.cxx, cmUnixMakefileGenerator.cxx, + cmake.cxx: ENH: add an edit_cache target that runs ccmake or + CMakeSetup + +2002-05-03 18:10 hoffman + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: fix borland test + +2002-05-03 16:34 hoffman + + * Source/: cmMakefile.cxx, cmTarget.cxx, cmTarget.h: ENH: rework + library depend stuff + +2002-05-03 00:27 perera + + * Source/CMakeLists.txt, Source/cmTarget.cxx, Source/cmTarget.h, + Tests/Dependency/CMakeLists.txt: - bug fix where paths weren't + being output when LIB_OUT_PATH *isn't* used - test case for above + mentioned bug - more comments. Comments are good. + +2002-05-02 19:09 hoffman + + * Source/cmTarget.cxx: check for optimized or debug library adds + +2002-05-02 16:13 hoffman + + * Source/: cmTarget.cxx, cmTarget.h: remove canonical conversion + for lib names + +2002-05-02 15:56 hoffman + + * Source/: cmMakefile.cxx, cmMakefile.h, cmTarget.cxx: make it + backwards compatible with old cmake + +2002-05-02 15:10 hoffman + + * Source/CMakeLists.txt, Source/cmMakefile.cxx, + Source/cmTarget.cxx, Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt: Debug + optimized cache fixes + +2002-05-02 13:41 perera + + * Source/: cmTarget.cxx, cmTarget.h: BUG: The library paths should + stay with the libraries during dependency analysis. + +2002-05-02 13:17 hoffman + + * Source/cmAddLibraryCommand.cxx, Source/cmAddLibraryCommand.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, Source/cmTarget.cxx, + Source/cmTarget.h, Source/cmTargetLinkLibrariesCommand.cxx, + Source/cmUnixMakefileGenerator.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/Dependency/Exec/CMakeLists.txt, + Tests/Dependency/Six/CMakeLists.txt: ENH: change LINK_LIBRARY to + add to targets + +2002-05-02 08:54 andy + + * configure, configure.in: Revert to make it work again + +2002-05-02 08:46 andy + + * configure, configure.in: Improve bootstrap on UNIX. Now it + bootstraps into a separate directory. + +2002-05-02 02:27 perera + + * Source/cmTarget.cxx: BUG: if a_LIBS_DEPENDS exists but is empty, + there are no explicit dependencies. + +2002-05-01 16:33 perera + + * Source/cmAddLibraryCommand.cxx, Source/cmAddLibraryCommand.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, Source/cmTarget.cxx, + Tests/Dependency/CMakeLists.txt: ENH: Make the LinkLibraries + command contribute dependencies towards AddLibraries. + +2002-05-01 16:24 perera + + * Tests/Dependency/: CMakeLists.txt, Exec/CMakeLists.txt, + Exec/ExecMain.c, Six/CMakeLists.txt, Six/SixASrc.c, + Six/SixBSrc.c: ENH: Make the LinkLibraries command contribute + dependencies towards AddLibraries. + +2002-05-01 14:00 perera + + * Source/CMakeLists.txt, Source/cmDSPWriter.cxx, + Source/cmDSWWriter.cxx, Source/cmMSDotNETGenerator.cxx, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmNMakeMakefileGenerator.cxx, Source/cmTarget.cxx, + Source/cmTarget.h, Source/cmUnixMakefileGenerator.cxx, + Tests/Dependency/CMakeLists.txt, + Tests/Dependency/Exec/CMakeLists.txt, + Tests/Dependency/Exec/ExecMain.c, + Tests/Dependency/Five/CMakeLists.txt, + Tests/Dependency/Five/FiveSrc.c, + Tests/Dependency/Four/CMakeLists.txt, + Tests/Dependency/Four/FourSrc.c, + Tests/Dependency/NoDepA/CMakeLists.txt, + Tests/Dependency/NoDepA/NoDepASrc.c, + Tests/Dependency/NoDepB/CMakeLists.txt, + Tests/Dependency/NoDepB/NoDepBSrc.c, + Tests/Dependency/NoDepC/CMakeLists.txt, + Tests/Dependency/NoDepC/NoDepCSrc.c, + Tests/Dependency/Three/CMakeLists.txt, + Tests/Dependency/Three/ThreeSrc.c, + Tests/Dependency/Two/CMakeLists.txt, + Tests/Dependency/Two/TwoSrc.c: ENH: Add library dependency + analysis. + +2002-05-01 11:34 berk + + * Source/CursesDialog/: ccmake.cxx, + cmCursesCacheEntryComposite.cxx, cmCursesCacheEntryComposite.h, + cmCursesMainForm.cxx, cmCursesMainForm.h: The entry widgets are + now created with what is initially available on the terminal. + +2002-05-01 10:12 berk + + * Source/: cmIncludeCommand.cxx, cmMakefile.cxx: Reformatted the + error printed by cmMakefile. + +2002-04-30 21:48 hoffman + + * Source/CMakeLists.txt: ENH: allow cmake tests to be run without + dart. + +2002-04-30 17:49 hoffman + + * CMakeLists.txt, Source/CMakeLists.txt: create tests without Dart + +2002-04-30 17:45 hoffman + + * Source/cmVTKMakeInstantiatorCommand.cxx: ENH: replace freeze with + delete + +2002-04-30 16:58 hoffman + + * Templates/: cconfigure, cconfigure.in: ENH: remove -fPIC for AIX + gnu + +2002-04-30 15:33 hoffman + + * Source/cmMSDotNETGenerator.cxx: ENH: fix relwithdebinfo + +2002-04-30 14:01 hoffman + + * Tests/: Complex/CMakeLists.txt, Complex/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/complex.cxx: ENH: add test for + SEPARATE_ARGUMENTS + +2002-04-30 14:00 hoffman + + * Source/: cmCommands.cxx, cmSeparateArgumentsCommand.cxx, + cmSeparateArgumentsCommand.h: ENH: add new command to separate + space separated arguments + +2002-04-30 14:00 hoffman + + * Source/: cmBorlandMakefileGenerator.cxx, cmCacheManager.cxx: ENH: + do not use count, find for map lookup + +2002-04-30 12:58 hoffman + + * Source/cmMakefile.cxx: ENH: improve speed of GetSource function + +2002-04-30 08:09 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: look for -l anywhere in + link library entry not just the begining of the line + +2002-04-29 10:23 hoffman + + * Source/cmMakefile.cxx: BUG: make sure link directories are not + duplicated + +2002-04-29 08:27 hoffman + + * Templates/: cconfigure, cconfigure.in: use multiple rpath options + for sgi + +2002-04-28 16:14 perera + + * Source/: cmLinkLibrariesCommand.cxx, + cmTargetLinkLibrariesCommand.cxx: ENH: Make it unnecessary to + ever specify LINK_DIRECTORIES for any library generated in this + project, even when LIBRARY_OUTPUT_PATH is set. + +2002-04-26 21:45 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: remove redirections for + output of make commands as some things are lost + +2002-04-26 12:43 hoffman + + * Source/cmUnixMakefileGenerator.cxx: COM: just fix up a comment + +2002-04-26 12:42 hoffman + + * Templates/CCMakeSystemConfig.cmake.in: correct c flags for shared + links + +2002-04-26 12:21 hoffman + + * Source/cmUnixMakefileGenerator.cxx, + Templates/CCMakeSystemConfig.cmake.in, + Templates/CMakeSystemConfig.cmake.in: BUG: fix shared links for + cc on hp + +2002-04-26 09:55 hoffman + + * Source/cmBuildNameCommand.cxx: ENH: fix build name + +2002-04-26 09:35 hoffman + + * Source/cmSiteNameCommand.cxx: ENH: look for nslookup and hostname + in the right places + +2002-04-26 09:22 will + + * CMake.pdf: ENH:New pdf for CMake + +2002-04-26 09:17 martink + + * CMake.rtf: updated for 1.4 + +2002-04-26 09:11 martink + + * Source/cmSourceFilesRemoveCommand.cxx: dprecated + +2002-04-26 08:59 martink + + * Source/Makefile.borland: fixed up again duh + +2002-04-25 16:29 martink + + * Source/Makefile.borland: updated to build ccommand + +2002-04-25 15:40 hoffman + + * Modules/Dart.cmake, Source/cmSiteNameCommand.cxx: fix up hostname + for windows + +2002-04-25 13:09 hoffman + + * Source/cmake.cxx: ENH: check for mismatched generators + +2002-04-25 07:59 hoffman + + * Source/: ccommand.cxx, cmCMakeMinimumRequired.cxx, + cmOptionCommand.cxx: WAR: remove warnings for .NET compiler + +2002-04-24 10:08 andy + + * Source/.cvsignore: Add cvsignore so that you do not see visual + stufio files when you do cvs update + +2002-04-23 16:16 berk + + * Source/: cmake.cxx, CursesDialog/ccmake.cxx, + CursesDialog/cmCursesMainForm.cxx, + CursesDialog/cmCursesMainForm.h: Exit ccmake on fatal errors. + +2002-04-23 12:18 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: clean up depend output + +2002-04-23 11:33 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: add depends for utility + targets + +2002-04-22 15:16 barre + + * Templates/CMakeNMakeWindowsSystemConfig.cmake, + Templates/CMakeWindowsSystemConfig.cmake, + Source/cmNMakeMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.cxx: ENH: make CMake less + verbose/precious + +2002-04-22 15:05 perera + + * Source/CursesDialog/: CMakeLists.txt, form/CMakeLists.txt: BUG: + Changed from SOURCE_FILES to SET + +2002-04-22 14:29 barre + + * Source/cmNMakeMakefileGenerator.cxx: ENH: need CMAKE_LINKER_FLAGS + +2002-04-22 14:22 barre + + * Source/: cmNMakeMakefileGenerator.cxx, + cmNMakeMakefileGenerator.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: ENH: make CMake less verbose/precious + +2002-04-22 14:18 martink + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: duhZ + +2002-04-22 11:51 martink + + * Tests/: Complex/CMakeLists.txt, Complex/cmTestConfigure.h.in, + Complex/Executable/CMakeLists.txt, + Complex/Executable/cmVersion.h.in, + Complex/Executable/complex.cxx, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/cmVersion.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/cmVersion.h.in, + ComplexRelativePaths/Executable/complex.cxx: fixed for remove + COMMAND + +2002-04-22 11:50 martink + + * Source/: CMakeLists.txt, cmCommands.cxx, cmRemoveCommand.cxx, + cmRemoveCommand.h: updated for 1.4 + +2002-04-19 15:28 hoffman + + * Source/cmTargetLinkLibrariesCommand.cxx, + Tests/Simple/CMakeLists.txt, Tests/Simple/simple.cxx, + Tests/Simple/simpleLib.cxx: BUG: add link directories for target + link libraries and add a test for it + +2002-04-19 14:03 martink + + * Source/: cmAbstractFilesCommand.cxx, cmSourceFilesCommand.cxx, + cmWrapExcludeFilesCommand.cxx: added deprecated warnings for + version 1.4 or later + +2002-04-19 13:05 hoffman + + * Source/cmCMakeMinimumRequired.h: ENH: fix doc line + +2002-04-19 12:49 martink + + * Source/cmNMakeMakefileGenerator.cxx: renamed unix to unixPath for + compile error + +2002-04-19 11:49 hoffman + + * Source/cmNMakeMakefileGenerator.cxx: BUG: fix short path on files + that do not exist + +2002-04-19 09:00 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: try to make sure a + depend file only has one rule + +2002-04-19 08:27 hoffman + + * Source/: cmSystemTools.cxx, cmake.cxx: BUG: fix SameFile function + for windows, and compare source directories + +2002-04-18 16:13 martink + + * Source/cmUnixMakefileGenerator.cxx: BUG: work with spaces in the + path + +2002-04-18 15:58 andy + + * Source/cmUnixMakefileGenerator.cxx: Make quotes and echos to work + on unix (hopefully) + +2002-04-18 15:58 andy + + * Modules/FindMPI.cmake: Add mpi search paths for Debian + +2002-04-18 14:51 hoffman + + * Source/cmake.cxx: ENH: use home not start + +2002-04-18 14:19 hoffman + + * Source/cmake.cxx: ENH: check for mis-matched source directories + +2002-04-18 13:44 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: quote the echo commands + +2002-04-18 13:12 hoffman + + * Source/cmSystemTools.cxx: BUG: do escaped semi-colon better + +2002-04-18 12:02 hoffman + + * Source/cmMessageCommand.cxx, Source/cmSystemTools.cxx, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: add ability to + escape semi-colons + +2002-04-18 11:52 martink + + * configure, configure.in: ENH: handle spaces in paths for cygwin + bootstrap + +2002-04-18 07:58 hoffman + + * Source/cmCMakeMinimumRequired.cxx: BUG: add missing include + +2002-04-18 07:57 hoffman + + * Source/: CMakeLib.dsp, Makefile.borland: BUG: fix bootstrap build + makefiles + +2002-04-17 16:16 hoffman + + * Source/cmAbstractFilesCommand.cxx, + Source/cmAddCustomCommandCommand.cxx, + Source/cmCMakeMinimumRequired.cxx, + Source/cmCMakeMinimumRequired.h, Source/cmCommands.cxx, + Source/cmOptionCommand.cxx, Tests/Complex/CMakeLists.txt, + Tests/Complex/cmTestConfigure.h.in, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexOneConfig/cmTestConfigure.h.in, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/CMakeLists.txt, + Tests/ComplexRelativePaths/cmTestConfigure.h.in, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: backwards + compatible for VTK 4.0, add cmake version requires + +2002-04-17 14:58 king + + * Tests/Wrapping/CMakeLists.txt: ENH: Removed tests for commands + that no longer exist. + +2002-04-17 14:54 king + + * Source/: CMakeLists.txt, Makefile.in, cmCableClassSet.cxx, + cmCableClassSet.h, cmCableClassSetCommand.cxx, + cmCableClassSetCommand.h, cmCableWrapTclCommand.cxx, + cmCableWrapTclCommand.h, cmCommands.cxx, + cmConfigureGccXmlCommand.cxx, cmConfigureGccXmlCommand.h, + cmMakefile.cxx: ENH: Removed out-of-date commands CABLE_WRAP_TCL + CABLE_CLASS_SET and CONFIGURE_GCCXML + +2002-04-17 14:52 king + + * Modules/FindCABLE.cmake: ENH: Updated for latest Cable from CVS. + Old alpha version of Cable is no longer supported. + +2002-04-17 14:51 king + + * Modules/FindGCCXML.cmake: ENH: Updated for version 0.2 of + GCC-XML. + +2002-04-17 14:39 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: use convert to output + path for depend files + +2002-04-17 08:28 hoffman + + * Modules/FindOpenGL.cmake: better to find mac opengl + +2002-04-17 08:15 hoffman + + * Templates/: CCMakeSystemConfig.cmake.in, + CXXCMakeSystemConfig.cmake.in: more advanced values + +2002-04-17 08:09 hoffman + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: ENH: more coverage + +2002-04-16 13:48 barre + + * Source/cmSystemTools.cxx: Syntax seemed to be confusing according + to the Bill + +2002-04-16 09:28 barre + + * Source/ccommand.cxx: FIX: warning + +2002-04-15 09:09 hoffman + + * Source/cmSystemTools.cxx: use stream not sprintf + +2002-04-15 08:48 barre + + * Source/cmSystemTools.cxx: ENH: FilesDiffer checks for 0 byte + files + +2002-04-14 15:32 barre + + * Source/cmSystemTools.cxx: ENH: more paranoid checkings + +2002-04-12 12:05 barre + + * Source/cmSystemTools.cxx: FIX: iostream binary flag should be + used for cygwin too + +2002-04-12 09:57 barre + + * Source/cmSystemTools.cxx: FIX: fix UMR + +2002-04-11 18:59 barre + + * Source/ccommand.cxx: ENH: also displays command output + +2002-04-11 18:17 barre + + * Source/ccommand.cxx: can be used to time commands (time() & + clock()) + +2002-04-11 17:02 hoffman + + * Source/cmFindFileCommand.h, Source/cmFindLibraryCommand.h, + Source/cmFindPathCommand.h, Source/cmFindProgramCommand.h, + Source/cmIncludeCommand.cxx, Source/cmListFileCache.cxx, + Source/cmMakefile.cxx, Source/cmSystemTools.cxx, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/complex.cxx: ENH: speed + improvements + +2002-04-11 16:58 starreveld + + * Source/cmUnixMakefileGenerator.cxx: + + Allow modules to build properly again. (broken when Cxx testing + was added) + +2002-04-11 11:30 barre + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: increase + coverage + +2002-04-11 10:29 hoffman + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + ENH: clean up utility rule generation + +2002-04-11 10:11 barre + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: ENH: use target as + source if source is empty + +2002-04-11 10:05 barre + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomCommandCommand.h: ENH: use target as source if source + is empty + +2002-04-11 09:53 barre + + * Source/: cmNMakeMakefileGenerator.cxx, + cmUnixMakefileGenerator.cxx: FIX: echo pb, make Nmake gen use + Unix gen, factorize stuff in Unix gen + +2002-04-10 17:33 barre + + * Tests/: Complex/Executable/complex.cxx, + Complex/Library/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt: ENH: add a test to + check if more than one post-build command can be attached. it + fails right now. + +2002-04-10 16:45 andy + + * Source/cmUnixMakefileGenerator.cxx: Fix problem with custom + commands on unix + +2002-04-10 12:13 king + + * Source/cmaketest.cxx: ERR: UseIt() missing return type. + +2002-04-10 11:23 hoffman + + * Tests/: Complex/Library/testConly.c, + ComplexOneConfig/Library/testConly.c, + ComplexRelativePaths/Library/testConly.c: ENH: only check flag on + unix + +2002-04-10 08:38 hoffman + + * Source/cmaketest.cxx: fix warning + +2002-04-09 12:22 hoffman + + * Tests/: Complex/Library/testConly.h, + ComplexOneConfig/Library/testConly.h, + ComplexRelativePaths/Library/testConly.h, + Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: check for + compile flags and add back c flag to unix generator + +2002-04-09 12:15 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: check for compile flags + and add back c flag to unix generator + +2002-04-09 12:02 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, Complex/Library/CMakeLists.txt, + Complex/Library/testConly.c, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexOneConfig/Library/testConly.c, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt, + ComplexRelativePaths/Library/testConly.c: ENH: check for compile + flags and add back c flag to unix generator + +2002-04-09 11:33 barre + + * DartConfig.cmake: ENH: quick stab at a rollup button + +2002-04-09 10:19 hoffman + + * Tests/: Complex/Library/testConly.c, Complex/Library/testConly.h, + ComplexOneConfig/Library/testConly.c, + ComplexOneConfig/Library/testConly.h, + ComplexRelativePaths/Library/testConly.c, + ComplexRelativePaths/Library/testConly.h: correct exports for + windows + +2002-04-09 09:37 hoffman + + * Tests/: Complex/Library/sharedFile.h, + ComplexOneConfig/Library/sharedFile.h, + ComplexRelativePaths/Library/sharedFile.h: c not c++ comment + +2002-04-09 08:55 hoffman + + * DartConfig.cmake: change EST to EDT + +2002-04-08 19:31 biddi + + * Source/cmSystemTools.cxx: ERR: ReplaceString didn't work properly + if replace was longer than with as length added to start pos on + next search was replaceLength instead of withLength + +2002-04-08 15:01 hoffman + + * Templates/: CXXCMakeSystemConfig.cmake.in, cconfigure, + cconfigure.in: [no log message] + +2002-04-08 13:36 hoffman + + * Source/cmExecProgramCommand.cxx, + Source/cmUnixMakefileGenerator.cxx, + Templates/CCMakeSystemConfig.cmake.in, + Templates/CXXCMakeSystemConfig.cmake.in, Templates/cconfigure, + Templates/cconfigure.in, Templates/cxxconfigure, + Templates/cxxconfigure.in, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/Complex/Library/testConly.c, + Tests/Complex/Library/testConly.h, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/testConly.c, + Tests/ComplexOneConfig/Library/testConly.h, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/testConly.c, + Tests/ComplexRelativePaths/Library/testConly.h: ENH: use separate + vars for creating c++ and c shared libraries and add a test for c + libraries + +2002-04-05 12:08 hoffman + + * Source/cmProjectCommand.cxx: expand ; args + +2002-04-05 10:51 martink + + * Modules/Dart.cmake: improved finding purify on windows to use + registry + +2002-04-05 09:39 hoffman + + * Source/: Makefile.borland, cmaketest.cxx, cmaketest.h.in: ENH: + make sure the test tests the right cmake, and not the cmake used + to bootstrap this cmake + +2002-04-05 07:22 hoffman + + * Tests/TestDriver/testArgs.h: ENH: add missing file + +2002-04-04 16:53 hoffman + + * Source/cmCreateTestSourceList.cxx, + Source/cmCreateTestSourceList.h, Tests/TestDriver/CMakeLists.txt: + ENH: add the ability to process command line arguments in the + test driver before the test driver gets them + +2002-04-04 11:01 hoffman + + * Source/cmUnixMakefileGenerator.cxx, + Templates/CXXCMakeSystemConfig.cmake.in, Templates/cxxconfigure, + Templates/cxxconfigure.in: ENH: separate the ar program for cxx + and c + +2002-04-04 10:08 hoffman + + * Templates/CMakeLists.txt: update install information + +2002-04-04 09:04 hoffman + + * Templates/: cxxconfigure, cxxconfigure.in: BUG: add system + command back into script + +2002-04-03 16:14 hoffman + + * Source/cmExecProgramCommand.cxx, Source/cmExecProgramCommand.h, + Source/cmNMakeMakefileGenerator.cxx, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmaketest.cxx, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: fix more space + problems, you can add args to the ExecProgram command separatly + now + +2002-04-03 13:53 andy + + * Modules/FindTCL.cmake: More places to find TCL/TK for example on + Debian + +2002-04-02 15:42 hoffman + + * CMake.rtf, Example/Demo/CMakeLists.txt, + Example/Hello/CMakeLists.txt, Source/CMakeLists.txt, + Source/cmBorlandMakefileGenerator.cxx, + Source/cmBorlandMakefileGenerator.h, Source/cmDSWWriter.cxx, + Source/cmMSDotNETGenerator.cxx, Source/cmMSDotNETGenerator.h, + Source/cmMSProjectGenerator.cxx, Source/cmMSProjectGenerator.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmMakefileGenerator.cxx, Source/cmMakefileGenerator.h, + Source/cmNMakeMakefileGenerator.cxx, + Source/cmNMakeMakefileGenerator.h, Source/cmProjectCommand.cxx, + Source/cmProjectCommand.h, Source/cmSetCommand.cxx, + Source/cmSetSourceFilesPropertiesCommand.h, Source/cmTarget.cxx, + Source/cmTarget.h, Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h, Source/cmake.cxx, + Templates/cconfigure, Templates/cconfigure.in, + Templates/cxxconfigure, Templates/cxxconfigure.in, + Tests/COnly/CMakeLists.txt, Tests/COnly/conly.c, + Templates/configure, Templates/configure.in, + Templates/CCMakeSystemConfig.cmake.in, + Templates/CXXCMakeSystemConfig.cmake.in: ENH: add enable language + support for PROJECT command, this means that a C only project can + be built with cmake, even without a cxx compiler + +2002-04-01 14:58 barre + + * Tests/: Complex/CMakeLists.txt, Complex/cmTestConfigure.h.in, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: add test for + registry-related functions (win32) + +2002-04-01 14:50 hoffman + + * Source/cmSystemTools.cxx: ENH: fix for regkey and ; separation + +2002-04-01 13:34 barre + + * Source/: ccommand.cxx, cmSystemTools.cxx, cmSystemTools.h: ENH: + add functions to API (read, write, delete registry key value) + +2002-04-01 08:08 andy + + * Modules/FindVTK.cmake: More finds for VTK + +2002-03-31 11:43 andy + + * Modules/FindVTK.cmake: Add some more locations of VTK + +2002-03-30 17:17 barre + + * Source/: cmAbstractFilesCommand.cxx, cmSetCommand.cxx: FIX: get + rid of warnings + +2002-03-29 18:07 ibanez + + * Modules/FindFLTK.cmake: ENH: HAS_FLTK variable added. + FLTK_WRAP_UI command made INTERNAL. + +2002-03-29 16:25 barre + + * Source/cmCreateTestSourceList.cxx: FIX: should compare to 0, not + NULL + +2002-03-29 16:03 barre + + * Source/: ctest.cxx, ctest.h: ENH: if -R or -E was used, displays + also the name of the tests that passed. + +2002-03-29 15:41 barre + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: FIX: fix dummy lib name for + Unix + +2002-03-29 15:02 barre + + * Tests/: Complex/CMakeLists.txt, Complex/cmTestConfigure.h.in, + Complex/Executable/CMakeLists.txt, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, Complex/Library/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt, + Complex/Library/cmTestLibraryConfigure.h.in, + Complex/Library/dummy, Complex/Library/empty.h, + Complex/Library/file2.cxx, Complex/Library/file2.h, + ComplexOneConfig/Library/cmTestLibraryConfigure.h.in, + ComplexOneConfig/Library/dummy, ComplexOneConfig/Library/empty.h, + ComplexOneConfig/Library/file2.cxx, + ComplexOneConfig/Library/file2.h, + ComplexRelativePaths/Library/cmTestLibraryConfigure.h.in, + ComplexRelativePaths/Library/dummy, + ComplexRelativePaths/Library/empty.h, + ComplexRelativePaths/Library/file2.cxx, + ComplexRelativePaths/Library/file2.h, + Complex/Library/fileFlags.cxx, + ComplexOneConfig/Library/fileFlags.cxx, + ComplexRelativePaths/Library/fileFlags.cxx: ENH: fix tests + +2002-03-29 14:31 hoffman + + * Source/cmMSDotNETGenerator.cxx: output list bug + +2002-03-29 14:22 hoffman + + * Tests/: Complex/Library/cmTestLibraryConfigure.h.in, + ComplexOneConfig/Library/cmTestLibraryConfigure.h.in, + ComplexRelativePaths/Library/cmTestLibraryConfigure.h.in: [no log + message] + +2002-03-29 14:20 hoffman + + * Source/cmAbstractFilesCommand.cxx, + Source/cmAddCustomCommandCommand.cxx, + Source/cmAddCustomTargetCommand.cxx, + Source/cmAddDefinitionsCommand.cxx, + Source/cmAddDependenciesCommand.cxx, Source/cmAddTestCommand.cxx, + Source/cmCableClassSetCommand.cxx, + Source/cmCableWrapTclCommand.cxx, Source/cmCommands.cxx, + Source/cmCreateTestSourceList.cxx, + Source/cmFLTKWrapUICommand.cxx, Source/cmFindFileCommand.cxx, + Source/cmFindLibraryCommand.cxx, Source/cmFindPathCommand.cxx, + Source/cmFindProgramCommand.cxx, + Source/cmGetSourceFilePropertyCommand.cxx, + Source/cmGetSourceFilePropertyCommand.h, + Source/cmIncludeDirectoryCommand.cxx, + Source/cmInstallFilesCommand.cxx, + Source/cmInstallProgramsCommand.cxx, + Source/cmInstallTargetsCommand.cxx, + Source/cmLinkDirectoriesCommand.cxx, + Source/cmLoadCacheCommand.cxx, Source/cmMakeDirectoryCommand.cxx, + Source/cmMarkAsAdvancedCommand.cxx, + Source/cmOutputRequiredFilesCommand.cxx, + Source/cmProjectCommand.cxx, Source/cmQTWrapCPPCommand.cxx, + Source/cmQTWrapUICommand.cxx, + Source/cmSetSourceFilesPropertiesCommand.cxx, + Source/cmSetSourceFilesPropertiesCommand.h, + Source/cmSiteNameCommand.cxx, Source/cmSourceFilesCommand.cxx, + Source/cmSourceFilesFlagsCommand.cxx, + Source/cmSourceFilesFlagsCommand.h, + Source/cmSourceFilesRemoveCommand.cxx, + Source/cmSubdirCommand.cxx, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmUseMangledMesaCommand.cxx, + Source/cmUseMangledMesaCommand.h, + Source/cmUtilitySourceCommand.cxx, + Source/cmVTKMakeInstantiatorCommand.cxx, + Source/cmVTKWrapJavaCommand.cxx, + Source/cmVTKWrapPythonCommand.cxx, + Source/cmVTKWrapTclCommand.cxx, + Source/cmVariableRequiresCommand.cxx, + Source/cmWrapExcludeFilesCommand.cxx, + Tests/Complex/Executable/CMakeLists.txt, + Tests/Complex/Executable/complex.cxx, + Tests/ComplexOneConfig/Executable/CMakeLists.txt, + Tests/ComplexOneConfig/Executable/complex.cxx, + Tests/ComplexRelativePaths/Executable/CMakeLists.txt, + Tests/ComplexRelativePaths/Executable/complex.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/Complex/Library/file2.cxx, Tests/Complex/Library/file2.h, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/file2.cxx, + Tests/ComplexOneConfig/Library/file2.h, + Tests/ComplexRelativePaths/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/file2.cxx, + Tests/ComplexRelativePaths/Library/file2.h: make sure ; expansion + is done in all commands + +2002-03-29 11:12 hoffman + + * Tests/TestDriver/: CMakeLists.txt, test1.cxx, testExtraStuff.cxx, + testExtraStuff2.cxx, testExtraStuff3.cxx: ENH: add test for set + to create source lists + +2002-03-29 11:11 hoffman + + * Source/cmAddExecutableCommand.cxx: fix const problem + +2002-03-29 11:04 hoffman + + * Source/: cmAddExecutableCommand.cxx, cmAddLibraryCommand.cxx, + cmSetCommand.cxx, cmSetCommand.h: ENH: add ability to use ; + separated lists in SET and expand them for addexecutable and + addlibrary + +2002-03-29 11:03 hoffman + + * Source/cmGetSourceFilePropertyCommand.h: fix docs + +2002-03-29 10:56 barre + + * Source/: cmMessageCommand.cxx, cmMessageCommand.h: ENH: Add + SEND_ERROR flag to MESSAGE so that an error can be raised within + a CMakeList file + +2002-03-29 10:07 hoffman + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: more tests + +2002-03-29 10:06 hoffman + + * Source/: cmAbstractFilesCommand.cxx, + cmBorlandMakefileGenerator.cxx, cmCommands.cxx, + cmCreateTestSourceList.cxx, cmDSPWriter.cxx, + cmFLTKWrapUICommand.cxx, cmGetSourceFilePropertyCommand.cxx, + cmGetSourceFilePropertyCommand.h, cmInstallFilesCommand.cxx, + cmMSDotNETGenerator.cxx, cmMakeDepend.cxx, cmMakefile.cxx, + cmMakefile.h, cmNMakeMakefileGenerator.cxx, + cmQTWrapCPPCommand.cxx, cmQTWrapUICommand.cxx, + cmSetSourceFilesPropertiesCommand.cxx, + cmSetSourceFilesPropertiesCommand.h, cmSourceFile.cxx, + cmSourceFilesCommand.cxx, cmSourceFilesFlagsCommand.cxx, + cmTarget.cxx, cmTarget.h, cmUnixMakefileGenerator.cxx, + cmVTKMakeInstantiatorCommand.cxx, cmVTKWrapJavaCommand.cxx, + cmVTKWrapPythonCommand.cxx, cmVTKWrapTclCommand.cxx, + cmWrapExcludeFilesCommand.cxx, cmaketest.cxx, cmaketest.h.in: + ENH: major change, the cmMakefile now contains a master list of + cmSourceFile objects, the source lists reference the list via + pointers, also you can now set properties on a file, like compile + flags, abstract, etc. + +2002-03-29 08:42 barre + + * Source/cmCreateTestSourceList.cxx: FIX: tolower is in + !, frenchy + +2002-03-28 11:43 barre + + * Source/cmCreateTestSourceList.cxx: ENH: perform case insensitive + comparison on test names + +2002-03-27 16:19 barre + + * Source/cmCreateTestSourceList.cxx: FIX: cmSourceFile::SetName was + not called correctly for the test source files + +2002-03-27 15:52 barre + + * Source/cmCreateTestSourceList.cxx: ENH: small formatting enh + +2002-03-27 13:54 barre + + * Tests/: Complex/VarTests.cmake, Complex/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, ComplexOneConfig/VarTests.cmake, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/VarTests.cmake, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/complex.cxx: ENH: add a more + stressing FOREACH test. + +2002-03-27 13:46 barre + + * Source/CMakeLists.txt, Tests/TestDriver/CMakeLists.txt, + Tests/TestDriver/test3.cxx, Tests/TestDriver/subdir/test3.cxx: + ENH: add testdriver test with source file in subdir + +2002-03-27 10:55 barre + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: FIX: do not use + CMAKE_CFG_INTDIR, just use LINK_DIRECTORIES + +2002-03-27 10:54 barre + + * Tests/: Testing/CMakeLists.txt, Wrapping/CMakeLists.txt: FIX: do + not need CMakeLib + +2002-03-26 18:06 barre + + * Source/cmCreateTestSourceList.cxx: ENH: keep the name of the test + as close to the source file (only the function name is cleaned + up) + +2002-03-26 17:53 barre + + * Source/cmCreateTestSourceList.cxx: ENH: add -R (similar to ctest + but use substr instead of regexp). indent. + +2002-03-26 16:45 barre + + * Source/: cmForEachCommand.h, cmFunctionBlocker.h, cmMakefile.cxx: + FIX: foreach function-blockers were using expanded args. Add + virtual func to specify if function blocker needs them expanded + or not. + +2002-03-26 16:44 barre + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: + ExpandListArguments(): empty elements in semi-colon-separated + string-list can now be ignored. + +2002-03-26 16:42 barre + + * Source/cmCreateTestSourceList.cxx: ENH: now supports tests inside + sub-dirs + +2002-03-26 14:42 barre + + * Tests/Wrapping/CMakeLists.txt: ENH: USE_MANGLED_MESA is more + careful now. Try to trick it again. + +2002-03-26 14:41 barre + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt, + Testing/CMakeLists.txt, Wrapping/CMakeLists.txt: ENH: Use + ${CMAKE_CFG_INTDIR} instead of hardcoded RelInfo, Debug, Release, + etc. + +2002-03-26 12:55 hoffman + + * Source/cmUseMangledMesaCommand.cxx: ENH: add error checking for + mmesa + +2002-03-26 12:38 hoffman + + * Source/: ccommand.cxx, cmBorlandMakefileGenerator.cxx, + cmNMakeMakefileGenerator.cxx: ENH: use ccommand for del on + windows + +2002-03-26 12:38 hoffman + + * Source/cmaketest.cxx: ENH: show output when running tests + +2002-03-26 12:37 hoffman + + * Source/cmCreateTestSourceList.cxx: ENH: if no arguments are given + and there is only one test, then run it + +2002-03-25 17:03 martink + + * Source/cmake.cxx: removed quotes from cmake and ccommand + executable to be consistant + +2002-03-25 16:24 barre + + * Source/cmForEachCommand.cxx: ENH: support semi-colon format (list + of args as string) + +2002-03-25 15:59 barre + + * Source/: ccommand.cxx, cmSystemTools.cxx: ENH: cmCopyFile ; the + path to the destination file will be created ; second arg can be + a directory. + +2002-03-25 15:58 barre + + * Templates/: CMakeDotNetSystemConfig.cmake, + CMakeWindowsSystemConfig.cmake: Add suffixes + +2002-03-20 16:18 hoffman + + * Source/CMakeLists.txt, Source/cmCommands.cxx, + Source/cmCreateTestSourceList.cxx, + Source/cmCreateTestSourceList.h, Source/cmaketest.cxx, + Tests/TestDriver/CMakeLists.txt, Tests/TestDriver/test1.cxx, + Tests/TestDriver/test2.cxx, Tests/TestDriver/test3.cxx: ENH: add + new command to create a test driver + +2002-03-20 13:16 hoffman + + * CMakeLists.txt, Source/CMakeLists.txt: ENH: remove fltk dialog as + it is no longer supported + +2002-03-19 12:25 andy + + * Source/ccommand.cxx: Return error on copy + +2002-03-18 11:59 andy + + * Source/ccommand.cxx: Remove warning about sign and unsigned + +2002-03-15 15:42 andy + + * Source/: CMakeLists.txt, CMakeSetup.dsw, ccommand.cxx, + ccommand.dsp, cmake.cxx: Add ccommand for executing commands on + the system, so by using ADD_CUSTOM_COMMAND, you can make rules to + do some system commands during build. Currently supported + commands are copy and remove. Others will follow. + +2002-03-15 13:20 perera + + * Source/cmSourceFilesFlagsCommand.cxx: BUG: The source file may be + specified with an extension. + +2002-03-15 10:43 martink + + * Source/ctest.cxx: less noisy about changing directories + +2002-03-15 09:40 berk + + * Templates/CMakeSystemConfig.cmake.in: There can be multiple ansi + flags now + +2002-03-15 09:23 hoffman + + * Templates/configure: HP add Ae flag + +2002-03-15 09:14 berk + + * Templates/configure.in: Added better support for HPux + +2002-03-14 16:04 hoffman + + * Source/cmMakefile.cxx: ENH: add .in as a header file type, as it + can not be compiled + +2002-03-14 16:03 hoffman + + * Source/CMakeLists.txt: BUG: .h not two .cxx files + +2002-03-14 14:59 hoffman + + * Source/cmSystemTools.cxx: BUG: fix RunCommand again... back to + system, but with GetShortPath + +2002-03-14 14:59 hoffman + + * Source/cmDSPWriter.cxx: BUG: fix for paths with spaces + +2002-03-14 14:58 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmNMakeMakefileGenerator.h: BUG: fix for files with dashes in + them + +2002-03-14 11:11 hoffman + + * Source/: cmConfigureGccXmlCommand.cxx, cmExecProgramCommand.cxx, + cmSystemTools.cxx, cmSystemTools.h, cmaketest.cxx, ctest.cxx: + ENH: overhaul of RunCommand on windows, if only win32 had + popen... + +2002-03-13 14:23 martink + + * Source/: cmDSPWriter.cxx, cmDSWWriter.cxx: ENH: closer to working + with spaces in the path + +2002-03-13 10:25 hoffman + + * Source/: CMakeLists.txt, cmAuxSourceDirectoryCommand.cxx, + cmCableClassSet.cxx, cmCableClassSet.h, cmDirectory.cxx, + cmDirectory.h, cmFLTKWrapUICommand.cxx, cmFindFileCommand.cxx, + cmFindLibraryCommand.cxx, cmFindPathCommand.cxx, + cmFindProgramCommand.cxx, cmMSDotNETGenerator.cxx, + cmMakefile.cxx, cmNMakeMakefileGenerator.cxx, + cmQTWrapCPPCommand.cxx, cmQTWrapUICommand.cxx, + cmRegularExpression.cxx, cmSourceGroup.cxx, cmSystemTools.cxx, + cmVTKMakeInstantiatorCommand.cxx, cmVTKWrapJavaCommand.cxx, + cmVTKWrapPythonCommand.cxx, cmVTKWrapTclCommand.cxx, + cmaketest.cxx, ctest.cxx: ENH: remove several compiler warnings + +2002-03-12 10:16 king + + * Templates/: configure, configure.in: ENH: Added test for explicit + instantiation support. + +2002-03-11 16:04 hoffman + + * Source/cmOptionCommand.cxx: ENH: add error checking for option + commands with too many arguments + +2002-03-11 12:11 hoffman + + * Source/: cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h: ENH: add + support for .def files + +2002-03-11 08:11 hoffman + + * Source/cmMSDotNETGenerator.cxx: BUG: make sure libraries do not + depend on themselves + +2002-03-10 18:24 hoffman + + * Templates/: configure, configure.in: ENH: try to get crazy dec + cxx to work again... one more time + +2002-03-10 10:02 hoffman + + * Templates/: configure, configure.in: ENH: try to get crazy dec + cxx to work again... + +2002-03-08 13:12 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: more dec silly + stuff + +2002-03-08 11:01 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: more stupid dec cxx + tricks... + +2002-03-08 08:19 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: add one more + stupid function call for the dec cxx compiler... + +2002-03-08 07:25 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: try to fix dec cxx + +2002-03-07 22:07 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: add more junk + for the dec cxx compiler to force it to instantiate stuff + +2002-03-07 12:13 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: use the string + class to force the dec compiler to instantiate some templates + +2002-03-07 10:41 barre + + * Source/CMakeLists.txt: Build cmaketest even if testing if OFF (so + that it can be used externally) + +2002-03-06 17:58 barre + + * Source/: ctest.cxx, ctest.h: ENH: add -E option (exclude tests + matching a regexp) + +2002-03-06 16:30 barre + + * Source/: CMakeLists.txt, cmaketest.cxx: ENH: add cmaketest to + install targets (so that it can be used in other projects) and + pass the rest of its command-line args to cmake + +2002-03-06 10:44 hoffman + + * Templates/CMakeNMakeWindowsSystemConfig.cmake: build type should + not be advanced + +2002-03-06 10:11 hoffman + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt: ENH: add test for + semi-colon separated lists of libraries + +2002-03-06 10:10 hoffman + + * Source/: cmLinkLibrariesCommand.cxx, cmMSDotNETGenerator.cxx, + cmSystemTools.cxx, cmSystemTools.h, + cmTargetLinkLibrariesCommand.cxx: ENH: add suport for semi-colon + separated list variables + +2002-03-05 18:41 hoffman + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomTargetCommand.cxx, cmAddDefinitionsCommand.cxx, + cmAddDependenciesCommand.cxx, cmAddExecutableCommand.cxx, + cmAddLibraryCommand.cxx, cmAddTestCommand.cxx, + cmBuildCommand.cxx, cmCableClassSetCommand.cxx, + cmCableWrapTclCommand.cxx, cmConfigureFileCommand.cxx, + cmElseCommand.cxx, cmEndIfCommand.cxx, cmExecProgramCommand.cxx, + cmFindFileCommand.cxx, cmFindLibraryCommand.cxx, + cmFindPathCommand.cxx, cmFindProgramCommand.cxx, + cmGetFilenameComponentCommand.cxx, cmIfCommand.cxx, + cmIncludeCommand.cxx, cmIncludeExternalMSProjectCommand.cxx, + cmInstallFilesCommand.cxx, cmInstallProgramsCommand.cxx, + cmLoadCacheCommand.cxx, cmMakeDirectoryCommand.cxx, + cmMakefile.cxx, cmMessageCommand.cxx, cmOptionCommand.cxx, + cmOutputRequiredFilesCommand.cxx, cmSetCommand.cxx, + cmSourceFilesCommand.cxx, cmSubdirCommand.cxx, cmSystemTools.cxx, + cmUnixMakefileGenerator.cxx, cmUseMangledMesaCommand.cxx, + cmVTKMakeInstantiatorCommand.cxx: ENH: expand variables in + arguments before the commands get them + +2002-03-05 18:25 hoffman + + * Source/cmSystemTools.cxx: BUG: get the correct return value from + pclose + +2002-03-04 15:00 hoffman + + * Tests/: Complex/Library/fileFlags.cxx, + ComplexOneConfig/Library/fileFlags.cxx, + ComplexRelativePaths/Library/fileFlags.cxx: ENH: add support for + per file flags + +2002-03-04 14:12 hoffman + + * Source/: cmCommands.cxx, cmDSPWriter.cxx, cmDSPWriter.h, + cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h, cmSourceFile.h, + cmSourceGroup.cxx, cmSourceGroup.h, cmUnixMakefileGenerator.cxx, + cmSourceFilesFlagsCommand.cxx, cmSourceFilesFlagsCommand.h: ENH: + add file specific compile flags + +2002-03-04 14:11 hoffman + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: ENH: add a test for + per file flags + +2002-03-01 15:49 king + + * Source/: cmVTKMakeInstantiatorCommand.cxx, + cmVTKMakeInstantiatorCommand.h: ENH: Added support for including + extra files in generated header to get access to export macros of + derived projects. + +2002-03-01 09:00 hoffman + + * Templates/: CMakeBorlandWindowsSystemConfig.cmake, + CMakeDotNetSystemConfig.cmake, + CMakeNMakeWindowsSystemConfig.cmake, CMakeSystemConfig.cmake.in, + CMakeWindowsSystemConfig.cmake, configure, configure.in: ENH: add + some OS/compiler variables + +2002-02-28 15:58 hoffman + + * Modules/Dart.cmake: ENH: add VERBOSE_BUILD to options + +2002-02-28 15:57 hoffman + + * Source/cmakewizard.cxx: check bool values and prefere off + +2002-02-28 15:42 hoffman + + * Source/: cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h: use xml + output quotes for paths + +2002-02-28 15:06 hoffman + + * Templates/: configure, configure.in: change hp checks to all hps + and not just version 10 + +2002-02-28 11:15 hoffman + + * Source/cmSystemTools.cxx: BUG: look for exe path as well. + +2002-02-28 10:41 hoffman + + * Source/cmSystemTools.cxx: ENH: look for .com files before .exe + +2002-02-28 08:45 hoffman + + * Templates/CMakeDotNetSystemConfig.cmake: find path to devenv + +2002-02-28 07:50 hoffman + + * Templates/CMakeDotNetSystemConfig.cmake: ENH: add build name to + the cache with a default value for dot net + +2002-02-27 18:11 hoffman + + * Source/cmMSDotNETGenerator.cxx, Source/cmSystemTools.cxx, + Templates/CMakeDotNetSystemConfig.cmake: clean up in dot net + +2002-02-26 15:15 hoffman + + * Source/: ctest.cxx, ctest.h: add command line option -D for + config directory to run + +2002-02-26 15:14 hoffman + + * Source/: cmDSWWriter.cxx, cmMSDotNETGenerator.cxx: ENH: add + RUN_TESTS + +2002-02-26 11:46 barre + + * Source/cmAddTestCommand.cxx: FIX: command now expands args during + the first pass (found through FOREACH example) + +2002-02-26 10:11 hoffman + + * Templates/CMakeDotNetSystemConfig.cmake: [no log message] + +2002-02-26 08:56 hoffman + + * Source/cmCableClassSet.cxx: BUG: fix type problem size_type is + unsigned + +2002-02-25 18:14 hoffman + + * Source/: cmBuildCommand.cxx, cmDirectory.h, + cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h, + cmRegularExpression.h, cmSystemTools.cxx: ENH: dot net almost + working + +2002-02-25 16:57 barre + + * Source/cmAddExecutableCommand.cxx: FIX: command now expands *all* + args (found through FOREACH example) + +2002-02-25 15:22 barre + + * Tests/Testing/: CMakeLists.txt, Sub/CMakeLists.txt, + Sub/Sub2/CMakeLists.txt, Sub/Sub2/testing2.cxx: ENH: provide a + test for today's ReadListFile() bug fix + +2002-02-25 15:06 barre + + * Source/cmMakefile.cxx: FIX: although a CMakeLists.txt file could + be searched up 'n' level in the directory tree, ReadListFile() + always implied a CMakeLists.txt file was up *one* level. + +2002-02-25 13:20 hoffman + + * Modules/FindDart.cmake: ENH: look for Dart in c: + +2002-02-25 11:58 barre + + * Source/cmSubdirCommand.cxx: ENH: Expand vars in SUBDIRS + +2002-02-25 10:47 hoffman + + * Source/cmSystemTools.cxx: BUG: fix remove of cygdrive path stuff + +2002-02-23 10:00 king + + * Source/cmSystemTools.cxx: ERR: std::ios::binary is only needed + for Windows platforms, and isn't supported for all UNIX + platforms. + +2002-02-22 15:40 hoffman + + * Source/: cmAddTestCommand.cxx, cmSystemTools.cxx, + cmUnixMakefileGenerator.cxx: ENH: fix for spaces in paths on unix + +2002-02-22 13:38 hoffman + + * Source/: cmBorlandMakefileGenerator.cxx, cmDSPWriter.cxx, + cmExecProgramCommand.cxx, cmMSDotNETGenerator.cxx, + cmNMakeMakefileGenerator.cxx, cmNMakeMakefileGenerator.h, + cmSystemTools.cxx, cmSystemTools.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h, cmaketest.cxx: ENH: big change in the + path handling, one function CreateOutputPath is used to escape + spaces and convert to the native path type + +2002-02-22 10:08 king + + * Source/cmSystemTools.cxx: ENH: Another attempt at getting + cmCopyFile to work correctly. The previous implementation was + correct, but didn't work on HPUX due to stream library bugs. + This implementation will hopefully work everywhere. + +2002-02-21 17:32 hoffman + + * Source/cmSystemTools.cxx: BUG: fix copy file for HP + +2002-02-21 16:06 barre + + * Source/: ctest.cxx, ctest.h: ENH: Since each test can send a lot + of text to stderr/stdout, ctest now displays the list of tests + that failed at the end of the process. + +2002-02-21 15:55 hoffman + + * Source/: cmBorlandMakefileGenerator.cxx, + cmBorlandMakefileGenerator.h, cmNMakeMakefileGenerator.cxx, + cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: ENH: add + a virtual CreateMakeVariable to shorten makefile variables for + borland make + +2002-02-21 08:53 berk + + * Source/cmake.dsp: Argh + +2002-02-21 08:43 hoffman + + * Source/cmaketest.cxx: add ifdef for windows function + +2002-02-20 15:26 hoffman + + * Source/: cmMSDotNETGenerator.cxx, cmaketest.cxx: close to dot net + working + +2002-02-20 09:16 berk + + * Source/cmake.dsp: Bill forgot to add a library to the release + target. + +2002-02-19 17:56 hoffman + + * Source/: cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h: ENH: + getting closer + +2002-02-19 11:53 hoffman + + * Source/: Makefile.borland, CMakeLists.txt: ENH: add dotnet stuff + +2002-02-19 09:43 hoffman + + * Source/: CMakeLib.dsp, CMakeLists.txt: add dot net stuff to + cmakelists file and dsp file + +2002-02-18 17:41 hoffman + + * Source/: cmMSDotNETGenerator.cxx, cmMSDotNETGenerator.h, + cmSLNWriter.cxx, cmSLNWriter.h, cmVCProjWriter.cxx, + cmVCProjWriter.h: getting closer but still not working dot net + support + +2002-02-18 14:36 hoffman + + * Source/: CMakeLib.dsp, cmMSDotNETGenerator.cxx, + cmMSDotNETGenerator.h, cmSLNWriter.cxx, cmSLNWriter.h, + cmSystemTools.cxx, cmVCProjWriter.cxx, cmVCProjWriter.h, + cmake.cxx, cmake.dsp: ENH: first pass at dot net support + +2002-02-18 14:09 hoffman + + * Source/: cmBorlandMakefileGenerator.cxx, + cmUnixMakefileGenerator.cxx: ENH: fix for borland tlib files with + dash in them problem. + +2002-02-14 10:03 hoffman + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + ENH: only depend subdir builds on TARGETS, not all sub dir + operations, we do not want to build when doing a make depend + +2002-02-14 10:01 hoffman + + * configure, configure.in, Templates/configure, + Templates/configure.in: ENH: do not use O2 g as default flags + +2002-02-14 09:31 barre + + * DartConfig.cmake: ENH: Add PROJECT_URL + +2002-02-13 18:57 barre + + * DartConfig.cmake: ENH: Doxygen page + +2002-02-13 18:50 barre + + * Utilities/Doxygen/doc_makeall.sh.in: FIX: remove that good ol' + exit 0; + +2002-02-13 18:32 barre + + * Utilities/Doxygen/doc_makeall.sh.in: FIX: update html archive + filename + +2002-02-13 18:28 barre + + * Utilities/Doxygen/: CMakeLists.txt, authors.txt, + doc_makeall.sh.in, doxyfile.in: ENH: Contribution graphs + +2002-02-13 16:17 barre + + * Source/CursesDialog/form/.NoDartCoverage: This dir should not be + covered (form distrib) + +2002-02-12 17:38 barre + + * Tests/Wrapping/: CMakeLists.txt, dummy: ENH: Trick VTK_WRAP_JAVA + in a better way (avoid CUSTOM_TARGET) + +2002-02-08 15:52 hoffman + + * Source/cmSystemTools.cxx: BUG: fix CollapseFullPath so a trailing + slash is not added to directories + +2002-02-07 11:39 andy + + * Templates/CMakeSystemConfig.cmake.in: ERR: Cache bigendian + +2002-02-07 11:28 martink + + * Source/cmMakefile.h: next patch + +2002-02-07 11:27 martink + + * Templates/CMakeSystemConfig.cmake.in: value needed to be cached + +2002-02-06 12:14 hoffman + + * Source/cmake.cxx: ENH: add ends at end of string + +2002-02-06 10:50 hoffman + + * Source/: cmSystemTools.cxx, cmSystemTools.h: add bool return + value so diagnostics are easier + +2002-02-06 10:42 hoffman + + * Source/cmAuxSourceDirectoryCommand.cxx: BUG: remove depend on + directory because it is not supported by all makes + +2002-02-04 22:00 hoffman + + * Source/CursesDialog/CMakeLists.txt: ENH: use target link + libraries and add the link directory for cmform + +2002-02-04 18:41 barre + + * Modules/: Documentation.cmake, FindGnuplot.cmake: Add module to + find gnuplot + +2002-02-04 08:28 iscott + + * Source/cmAuxSourceDirectoryCommand.cxx: the generated + makefiles/DSPfiles now depend on the aux source directory's last + modified date. + +2002-02-01 13:08 berk + + * Source/cmake.cxx: Using cmSystemTools::Error() instead of cerr. + +2002-02-01 13:07 berk + + * Source/cmUnixMakefileGenerator.cxx: Better support for parallel + builds. Subdirs depend on their parent. + +2002-02-01 09:28 hoffman + + * CMakeLists.txt, Source/CMakeLists.txt: use CMake_SOURCE and not + CMAKE_ROOT + +2002-01-31 15:16 blezek + + * Modules/FindPythonLibs.cmake: ENH: Adding search path's for + PYTHON_LIBRARY + +2002-01-31 10:32 hoffman + + * Source/: CMakeLists.txt, CursesDialog/CMakeLists.txt: try to get + this working for dec cxx default compiler options + +2002-01-30 11:23 hoffman + + * Source/cmStandardIncludes.h: ENH: fix for dec compiler, they + still do not have the correct ansi stream library + +2002-01-25 09:06 king + + * Source/CursesDialog/form/: fld_def.c, frm_data.c, frm_def.c, + frm_driver.c: ERR: Corrected assertions of pointers to remove + warnings. + +2002-01-24 14:15 berk + + * Source/cmSystemTools.cxx: BUG: fix for network paths + +2002-01-23 11:58 hoffman + + * Source/cmMakefile.h: patch 2 release to fix dsp header problem + +2002-01-23 11:52 hoffman + + * Source/cmDSPWriter.cxx: BUG: allow .h files to be added to the + sources + +2002-01-23 10:56 barre + + * Source/cmaketest.cxx: ENH: run CMake a second time. The first + time it is run, some cache values are computed. The second time + it is run, some commands check if the value is already in the + cache and return that value instead of re-computing it. Therefore + this ENH: a) make sure that this specific code is tested, b) + increase coverage. + +2002-01-22 17:18 king + + * Modules/FindVTK.cmake: ENH: Added option of disabling error + message when VTK is not found. + +2002-01-22 15:55 barre + + * Tests/: Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, + Complex/Executable/Temp/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Executable/Temp/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Executable/Temp/CMakeLists.txt, + Testing/CMakeLists.txt, Testing/Sub/CMakeLists.txt: Just rename + dir + +2002-01-22 15:50 barre + + * Tests/: Complex/CMakeCache.txt, ComplexOneConfig/CMakeCache.txt, + ComplexRelativePaths/CMakeCache.txt, Complex/CMakeLists.txt, + Complex/Cache/CMakeCache.txt, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/Cache/CMakeCache.txt, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/Cache/CMakeCache.txt: ENH: Move + CMakeCache.txt to Cache/ directory to avoid any in-source build + pb. + +2002-01-22 14:15 millerjv + + * Modules/Dart.cmake: ENH: New variables CVS_UPDATE_OPTIONS, + DART_TESTING_TIMEOUT + +2002-01-22 13:30 barre + + * Tests/: Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: Coverage for + OUTPUT_REQUIRED_FILES + +2002-01-22 10:17 king + + * Source/: cmCacheManager.cxx, cmCacheManager.h, + cmLoadCacheCommand.cxx, cmMakefile.cxx, cmake.cxx: ERR: Removed + cmCacheManager::DefineCache method. It is no longer needed. + +2002-01-22 07:37 hoffman + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: flags already there, just + not working + +2002-01-22 07:18 hoffman + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt: BUG: must use ANSI flags for + complex test now. + +2002-01-21 15:30 barre + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: Add warnings/infos + +2002-01-21 15:30 barre + + * Tests/Wrapping/CMakeLists.txt: Add coverage for + VTK_MAKE_INSTANTIATOR + +2002-01-21 15:30 will + + * Source/: cmAbstractFilesCommand.cxx, cmAbstractFilesCommand.h, + cmAddCustomCommandCommand.cxx, cmAddCustomCommandCommand.h, + cmAddCustomTargetCommand.cxx, cmAddCustomTargetCommand.h, + cmAddDefinitionsCommand.cxx, cmAddDefinitionsCommand.h, + cmAddDependenciesCommand.cxx, cmAddDependenciesCommand.h, + cmAddExecutableCommand.cxx, cmAddExecutableCommand.h, + cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, + cmAddTestCommand.cxx, cmAddTestCommand.h, + cmAuxSourceDirectoryCommand.cxx, cmAuxSourceDirectoryCommand.h, + cmBorlandMakefileGenerator.cxx, cmBorlandMakefileGenerator.h, + cmBuildCommand.cxx, cmBuildCommand.h, cmBuildNameCommand.cxx, + cmBuildNameCommand.h, cmCableClassSet.cxx, cmCableClassSet.h, + cmCableClassSetCommand.cxx, cmCableClassSetCommand.h, + cmCableWrapTclCommand.cxx, cmCableWrapTclCommand.h, + cmCacheManager.cxx, cmCacheManager.h, cmCommand.h, + cmCommands.cxx, cmCommands.h, cmConfigureFileCommand.cxx, + cmConfigureFileCommand.h, cmConfigureGccXmlCommand.cxx, + cmConfigureGccXmlCommand.h, cmCustomCommand.cxx, + cmCustomCommand.h, cmDSPWriter.cxx, cmDSPWriter.h, + cmDSWWriter.cxx, cmDSWWriter.h, cmData.h, cmDirectory.cxx, + cmDirectory.h, cmDumpDocumentation.cxx, cmElseCommand.cxx, + cmElseCommand.h, cmEnableTestingCommand.cxx, + cmEnableTestingCommand.h, cmEndForEachCommand.cxx, + cmEndForEachCommand.h, cmEndIfCommand.cxx, cmEndIfCommand.h, + cmExecProgramCommand.cxx, cmExecProgramCommand.h, + cmFLTKWrapUICommand.cxx, cmFLTKWrapUICommand.h, + cmFindFileCommand.cxx, cmFindFileCommand.h, + cmFindLibraryCommand.cxx, cmFindLibraryCommand.h, + cmFindPathCommand.cxx, cmFindPathCommand.h, + cmFindProgramCommand.cxx, cmFindProgramCommand.h, + cmForEachCommand.cxx, cmForEachCommand.h, cmFunctionBlocker.h, + cmGeneratedFileStream.h, cmGetFilenameComponentCommand.cxx, + cmGetFilenameComponentCommand.h, cmIfCommand.cxx, cmIfCommand.h, + cmIncludeCommand.cxx, cmIncludeCommand.h, + cmIncludeDirectoryCommand.cxx, cmIncludeDirectoryCommand.h, + cmIncludeExternalMSProjectCommand.cxx, + cmIncludeExternalMSProjectCommand.h, + cmIncludeRegularExpressionCommand.cxx, + cmIncludeRegularExpressionCommand.h, cmInstallFilesCommand.cxx, + cmInstallFilesCommand.h, cmInstallProgramsCommand.cxx, + cmInstallProgramsCommand.h, cmInstallTargetsCommand.cxx, + cmInstallTargetsCommand.h, cmLinkDirectoriesCommand.cxx, + cmLinkDirectoriesCommand.h, cmLinkLibrariesCommand.cxx, + cmLinkLibrariesCommand.h, cmListFileCache.cxx, cmListFileCache.h, + cmLoadCacheCommand.cxx, cmLoadCacheCommand.h, + cmMSProjectGenerator.cxx, cmMSProjectGenerator.h, + cmMakeDepend.cxx, cmMakeDepend.h, cmMakeDirectoryCommand.cxx, + cmMakeDirectoryCommand.h, cmMakefile.cxx, cmMakefile.h, + cmMakefileGenerator.cxx, cmMakefileGenerator.h, + cmMarkAsAdvancedCommand.cxx, cmMarkAsAdvancedCommand.h, + cmMessageCommand.cxx, cmMessageCommand.h, + cmNMakeMakefileGenerator.cxx, cmNMakeMakefileGenerator.h, + cmOptionCommand.cxx, cmOptionCommand.h, + cmOutputRequiredFilesCommand.cxx, cmOutputRequiredFilesCommand.h, + cmProjectCommand.cxx, cmProjectCommand.h, cmQTWrapCPPCommand.cxx, + cmQTWrapCPPCommand.h, cmQTWrapUICommand.cxx, cmQTWrapUICommand.h, + cmRegularExpression.cxx, cmRegularExpression.h, cmSetCommand.cxx, + cmSetCommand.h, cmSiteNameCommand.cxx, cmSiteNameCommand.h, + cmSourceFile.cxx, cmSourceFile.h, cmSourceFilesCommand.cxx, + cmSourceFilesCommand.h, cmSourceFilesRemoveCommand.cxx, + cmSourceFilesRemoveCommand.h, cmSourceGroup.cxx, cmSourceGroup.h, + cmSourceGroupCommand.cxx, cmSourceGroupCommand.h, + cmStandardIncludes.h, cmSubdirCommand.cxx, cmSubdirCommand.h, + cmSubdirDependsCommand.cxx, cmSubdirDependsCommand.h, + cmSystemTools.cxx, cmSystemTools.h, cmTarget.cxx, cmTarget.h, + cmTargetLinkLibrariesCommand.cxx, cmTargetLinkLibrariesCommand.h, + cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h, + cmUseMangledMesaCommand.cxx, cmUseMangledMesaCommand.h, + cmUtilitySourceCommand.cxx, cmUtilitySourceCommand.h, + cmVTKMakeInstantiatorCommand.cxx, cmVTKMakeInstantiatorCommand.h, + cmVTKWrapJavaCommand.cxx, cmVTKWrapJavaCommand.h, + cmVTKWrapPythonCommand.cxx, cmVTKWrapPythonCommand.h, + cmVTKWrapTclCommand.cxx, cmVTKWrapTclCommand.h, + cmVariableRequiresCommand.cxx, cmVariableRequiresCommand.h, + cmWrapExcludeFilesCommand.cxx, cmWrapExcludeFilesCommand.h, + cmake.cxx, cmake.h, cmakemain.cxx, cmaketest.cxx, + cmakewizard.cxx, cmakewizard.h, ctest.cxx, ctest.h, + CursesDialog/ccmake.cxx, CursesDialog/cmCursesBoolWidget.cxx, + CursesDialog/cmCursesBoolWidget.h, + CursesDialog/cmCursesCacheEntryComposite.cxx, + CursesDialog/cmCursesCacheEntryComposite.h, + CursesDialog/cmCursesDummyWidget.cxx, + CursesDialog/cmCursesDummyWidget.h, + CursesDialog/cmCursesFilePathWidget.cxx, + CursesDialog/cmCursesFilePathWidget.h, + CursesDialog/cmCursesForm.cxx, CursesDialog/cmCursesForm.h, + CursesDialog/cmCursesLabelWidget.cxx, + CursesDialog/cmCursesLabelWidget.h, + CursesDialog/cmCursesLongMessageForm.cxx, + CursesDialog/cmCursesLongMessageForm.h, + CursesDialog/cmCursesMainForm.cxx, + CursesDialog/cmCursesMainForm.h, + CursesDialog/cmCursesPathWidget.cxx, + CursesDialog/cmCursesPathWidget.h, + CursesDialog/cmCursesStandardIncludes.h, + CursesDialog/cmCursesStringWidget.cxx, + CursesDialog/cmCursesStringWidget.h, + CursesDialog/cmCursesWidget.cxx, CursesDialog/cmCursesWidget.h: + ENH:Updated copyright + +2002-01-21 15:11 will + + * Copyright.txt: ENH:Formal copyright notice + +2002-01-21 11:39 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: remove warning from hpux + make + +2002-01-21 10:38 hoffman + + * Source/cmaketest.cxx: ENH: check the return value of the test + program to be run + +2002-01-21 10:22 barre + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: Comment test + OUTPUT_REQUIRED + +2002-01-21 10:11 hoffman + + * Source/: cmSourceFile.cxx, cmSourceFilesCommand.cxx, + cmSourceFilesRemoveCommand.cxx: BUG: fix generated files with no + extension bug + +2002-01-20 02:21 barre + + * Tests/: Complex/VarTests.cmake, ComplexOneConfig/VarTests.cmake, + ComplexRelativePaths/VarTests.cmake: More IF coverage + +2002-01-20 01:58 barre + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt, Complex/VarTests.cmake, + ComplexOneConfig/VarTests.cmake, + ComplexRelativePaths/VarTests.cmake, + Complex/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx, + Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt, + Complex/Library/empty.h, ComplexOneConfig/Library/empty.h, + ComplexRelativePaths/Library/empty.h, Testing/CMakeLists.txt, + Wrapping/vtkExcluded.h, Wrapping/vtkIncluded.h: Increase + Coverage. + +2002-01-20 01:05 barre + + * Tests/Wrapping/: CMakeLists.txt, fltk1.fl: Add coverage for QT + and FLTK wrappers. Also MANGLED_MESA + +2002-01-20 00:12 barre + + * Tests/: Complex/CMakeCache.txt, Complex/CMakeLists.txt, + Complex/VarTests.cmake, Complex/cmTestConfigure.h.in, + ComplexOneConfig/CMakeCache.txt, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/VarTests.cmake, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexRelativePaths/CMakeCache.txt, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/VarTests.cmake, + ComplexRelativePaths/cmTestConfigure.h.in, + Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, Complex/Library/CMakeLists.txt, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt: More tests + + coverage + +2002-01-20 00:11 barre + + * Tests/Testing/: CMakeLists.txt, DartConfig.cmake: More coverage + + include Dart.cmake to maximize chance nslookup/hostname are found + +2002-01-20 00:11 barre + + * Tests/Wrapping/: CMakeLists.txt, hints, vtkExcluded.cxx, + vtkExcluded.h, vtkIncluded.cxx, vtkIncluded.h: Add test for + VTK_WRAP_* + +2002-01-20 00:06 barre + + * Source/cmLoadCacheCommand.h: Typo + +2002-01-19 21:24 barre + + * Tests/: Complex/CMakeLists.txt, Complex/VarTests.cmake, + Complex/cmTestConfigure.h.in, Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, Complex/Library/CMakeLists.txt, + ComplexOneConfig/CMakeLists.txt, ComplexOneConfig/VarTests.cmake, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/VarTests.cmake, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt, + Testing/CMakeLists.txt, Testing/testing.cxx, + Wrapping/CMakeLists.txt, Wrapping/wrapping.cxx: Add + documentation, comments. Move some 'Complex' sub-tests into 2 new + 'Wrapping' and 'Testing' tests. + +2002-01-19 21:23 barre + + * Source/CMakeLists.txt: Add 2 new tests + +2002-01-19 21:22 barre + + * Source/cmSiteNameCommand.cxx: FIX: if the 'hostname' and + 'nslookup' commands were not found from their HOSTNAME and + NSLOOKUP cache definition, hard-coded values were used instead, + thus causing pb if the corresponding progs were not in the PATH + (RunCommand). Now use FindProgram() to be sure to find both, + otherwise do nothing and set the site name to "unknown" + (arbitrary. could be empty string ? or error ?). + +2002-01-18 23:38 hoffman + + * Source/cmCableClassSet.cxx: BUG: make sure regex match has a + string to match + +2002-01-18 20:33 barre + + * Source/cmExecProgramCommand.cxx: Fix: "cd arg2 ; arg1" not + working. OK with &&. Also should prevent from: "cd + non_existing_dir_oops && rm -fr *" + +2002-01-18 20:32 barre + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt, Complex/VarTests.cmake, + Complex/VarTests.txt, ComplexOneConfig/VarTests.cmake, + ComplexOneConfig/VarTests.txt, + ComplexRelativePaths/VarTests.cmake, + ComplexRelativePaths/VarTests.txt, + Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx: ENH: Increase test + + coverage + +2002-01-18 19:22 barre + + * Tests/: Complex/CMakeCache.txt, ComplexOneConfig/CMakeCache.txt, + ComplexRelativePaths/CMakeCache.txt: ENH: Increase test + + coverage. This is not a bug, this cache is used for test. + +2002-01-18 19:21 barre + + * Tests/: Complex/CMakeLists.txt, ComplexOneConfig/CMakeLists.txt, + ComplexRelativePaths/CMakeLists.txt, + Complex/cmTestConfigure.h.in, Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, Complex/Library/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt: ENH: Increase test + + coverage + +2002-01-18 19:21 barre + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: RemoveFile + returns if the file was removed or not + +2002-01-18 17:01 barre + + * Source/cmLibraryCommand.h: Unused and deprecated class. Goodbye. + +2002-01-18 16:59 martink + + * Source/cmIfCommand.cxx: bug fix + +2002-01-18 16:45 hoffman + + * Source/cmIfCommand.cxx: fix if logic for null defs + +2002-01-18 15:54 martink + + * Source/: cmSourceFilesCommand.cxx, cmSourceFilesCommand.h: + required for utilties + +2002-01-18 15:51 martink + + * Source/: cmUnixMakefileGenerator.h, cmUnixMakefileGenerator.cxx: + fix for utilties + +2002-01-18 15:39 andy + + * Source/cmSourceFilesRemoveCommand.cxx, + Tests/Complex/Library/CMakeLists.txt, + Tests/ComplexOneConfig/Library/CMakeLists.txt, + Tests/ComplexRelativePaths/Library/CMakeLists.txt: Add GENERATED + to cmSourceFilesRemoveCommand + +2002-01-18 15:32 martink + + * Source/cmAddCustomCommandCommand.cxx: revert to old behaviour + +2002-01-18 15:31 barre + + * Tests/: Complex/Library/CMakeLists.txt, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexRelativePaths/Library/CMakeLists.txt: Fix: create_file.cxx + is not GENERATED, it exists (so that it can be removed, until + SOURCE_FILES_REMOVE is synced with SOURCE_FILES) + +2002-01-18 15:18 martink + + * Source/cmSiteNameCommand.cxx: minor bug fix + +2002-01-18 15:16 martink + + * Source/cmMakefile.h: bug fixes + +2002-01-18 14:44 martink + + * Source/: cmCableClassSet.cxx, cmBuildNameCommand.cxx: bug fixes + +2002-01-18 14:38 martink + + * Source/cmBuildCommand.cxx: compiler warning + +2002-01-18 14:07 barre + + * Source/cmake.cxx: Fix: escaping spaces was preventing a value + with space to be passed correctly + +2002-01-18 13:37 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx: merged if MATCHES + fix + +2002-01-18 13:30 martink + + * Source/: cmUnixMakefileGenerator.h, cmUnixMakefileGenerator.cxx: + some fixes to recent screwerd up changes + +2002-01-18 12:03 barre + + * Tests/: Complex/CMakeLists.txt, Complex/VarTests.txt, + Complex/cmTestConfigure.h.in, ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/VarTests.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/VarTests.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, Complex/Library/CMakeLists.txt, + Complex/Library/create_file.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexOneConfig/Library/create_file.cxx, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt, + ComplexRelativePaths/Library/create_file.cxx: Increase coverage, + add tests + +2002-01-18 11:48 barre + + * Source/cmExecProgramCommand.cxx: Fix bug: was expanding second + arg even if not passed. crashed + +2002-01-18 11:38 barre + + * Source/: cmVariableRequiresCommand.h, cmExecProgramCommand.h: Fix + typo + +2002-01-18 11:37 barre + + * Source/: cmBuildNameCommand.cxx, cmSiteNameCommand.cxx: Fix: + argument was not used. + +2002-01-18 11:36 barre + + * Source/cmBuildCommand.h: Fix typo (second argument was not + reported) + +2002-01-18 11:36 barre + + * Source/cmBuildCommand.cxx: no message + +2002-01-18 10:28 hoffman + + * Source/cmCableClassSet.cxx: AIX compiler fix private to public + +2002-01-18 10:27 hoffman + + * Source/cmElseCommand.cxx: BUG: GetDefiniton can return null + +2002-01-18 09:02 barre + + * Tests/: Complex/simple.cxx, ComplexOneConfig/simple.cxx, + ComplexRelativePaths/simple.cxx: Is not used (see Simple test) + +2002-01-18 07:05 hoffman + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: ENH: remove unused + and non-standard io.h file + +2002-01-18 07:04 hoffman + + * Source/cmIfCommand.cxx: BUG: fix null pointer read if def is not + defined + +2002-01-17 16:36 barre + + * Tests/: Complex/Executable/complex.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/Executable/complex.cxx: Fix: displays msg if + passed for custom command + +2002-01-17 16:35 barre + + * Source/cmaketest.cxx: FIX: need a 'make clean' before 'make all' + otherwise the post-build custom-command are not run (since a lib + might be up to date already for ex.). + +2002-01-17 15:49 barre + + * Tests/: Complex/CMakeLists.txt, Complex/cmTestConfigure.h.in, + ComplexOneConfig/CMakeLists.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, Complex/Library/CMakeLists.txt, + Complex/Library/create_file.cxx, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexOneConfig/Library/create_file.cxx, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt, + ComplexRelativePaths/Library/create_file.cxx: ENH: tests + ADD_DEPENDENCIES and ADD_CUSTOM_COMMAND + +2002-01-17 15:46 barre + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + Fix so that ADD_DEPENDENCIES work (the Utilities dependencies + were not output) + +2002-01-17 14:11 andy + + * Source/: cmSourceFilesCommand.cxx, cmSourceFilesCommand.h: Add + option of adding generated files to source list + +2002-01-17 12:54 hoffman + + * Source/cmDSPWriter.cxx: ENH: only output each link path once + +2002-01-17 10:48 king + + * Source/cmMakefile.h: ERR: Missing forward declaration of + cmMakeDepend added. + +2002-01-17 09:28 hoffman + + * Source/cmDSPWriter.cxx: BUG: allow header files to be added to + the dsp file + +2002-01-16 17:29 barre + + * Source/cmAddCustomCommandCommand.cxx: Remove hack. + +2002-01-16 17:26 andy + + * Source/cmAddCustomCommandCommand.cxx: Hack to make it work almost + like before + +2002-01-16 15:53 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: add silent and suffixes + to check depend file + +2002-01-16 15:00 hoffman + + * Source/cmConfigureFileCommand.cxx: BUG: make sure non cmakedef + lines are not skipped + +2002-01-16 12:45 hoffman + + * Source/cmConfigureFileCommand.cxx: ENH: do not undef cmakedefine + stuff, just comment out the line + +2002-01-15 17:21 berk + + * Source/cmUnixMakefileGenerator.cxx: Improved performance by + removing implicit rules. + +2002-01-15 16:20 martink + + * CMake.pdf, CMake.rtf: updated + +2002-01-15 16:19 will + + * CMake.pdf: ENH:Support v1.2 + +2002-01-15 16:15 hoffman + + * CMake.rtf: public to www.cmake.org + +2002-01-15 15:56 will + + * CMake.pdf: ENH:Docs for version 1.2 + +2002-01-15 15:52 hoffman + + * CMake.rtf: update for next version + +2002-01-15 15:50 martink + + * Source/cmMakefile.h: next release + +2002-01-15 15:46 martink + + * Source/cmMakefile.h: next release + +2002-01-15 15:38 hoffman + + * ChangeLog.txt: log for relase 1.2 + +2002-01-15 15:29 millerjv + + * Modules/Dart.cmake: ENH: Added DELIVER_CONTINUOUS_EMAIL as an + advanced cache entry. + +2002-01-15 13:20 berk + + * Source/: cmFindPathCommand.cxx, cmFindProgramCommand.cxx: FIX: + Entry doc. should never be overwritten. This may cause cmake to + be re-run very often. + +2002-01-14 19:08 hoffman + + * Source/cmDSPWriter.cxx: ENH: do not depend on the .dsp file but + rather depend on .dsp.cmake and if the .dsp actually changes, + then write it, so clean and rebuild will not cause many reloads + +2002-01-14 18:52 hoffman + + * Source/cmCacheManager.cxx: ENH: try to keep the dsp files from + changing between each write + +2002-01-14 16:28 hoffman + + * Source/cmUnixMakefileGenerator.cxx: remove extra logic not needed + anymore because of better depends + +2002-01-14 16:02 berk + + * Source/cmUnixMakefileGenerator.cxx: Quote echo + +2002-01-14 14:49 berk + + * Source/CursesDialog/cmCursesMainForm.cxx: BUG: Curses was being + used without initialization. + +2002-01-12 22:55 hoffman + + * Source/cmBorlandMakefileGenerator.cxx: BUG: use borland run time + dll for shared builds to avoid crashes + +2002-01-11 10:55 hoffman + + * Templates/configure: ENH: add support for AIX shared libraries + with gcc + +2002-01-11 10:54 hoffman + + * Templates/configure.in: ENH: add support for shared libraries + with gcc on AIX + +2002-01-10 18:09 hoffman + + * Source/CMakeLists.txt: ENH: make the fltk build default to OFF, + it fails on too many linux machines with the default build + +2002-01-10 18:09 hoffman + + * Source/cmNMakeMakefileGenerator.cxx: BUG: fix build of library in + other directory if it is not there + +2002-01-10 16:22 andy + + * Source/cmConfigureFileCommand.cxx: Add space to output + +2002-01-08 17:18 hoffman + + * Source/cmBorlandMakefileGenerator.cxx: BUG: need a larger default + page size + +2002-01-08 17:18 hoffman + + * Source/cmDSPWriter.cxx: BUG: need spaces around linker options + +2002-01-08 13:32 hoffman + + * Source/cmDSPWriter.cxx, Templates/CMakeWindowsSystemConfig.cmake: + ENH: add CMAKE_EXTRA_LINK_FLAGS to dsp generator + +2002-01-08 12:57 hoffman + + * Templates/: configure, configure.in: ENH: use +Z not +z for pic + and use -fPIC for gcc + +2002-01-08 12:53 hoffman + + * Templates/: configure, configure.in: ENH: add -L/usr/lib for hp + so shared libs find that directory before the pa1.1 directory + +2002-01-07 17:29 barre + + * Modules/FindVTK.cmake: More user friendly (built tree is + automatically used). + +2002-01-07 16:30 hoffman + + * Source/CursesDialog/cmCursesMainForm.cxx: BUG: not all displayed + messages are errors + +2002-01-07 15:49 perera + + * Source/: cmSystemTools.cxx, cmSystemTools.h, cmake.cxx, cmake.h: + Rolling back symbolic path changes until it works on Windows. + +2002-01-07 14:12 hoffman + + * Templates/configure: Add sizeof some types support + +2002-01-07 14:07 andy + + * Templates/: configure.in, CMakeBorlandWindowsSystemConfig.cmake, + CMakeNMakeWindowsSystemConfig.cmake, CMakeSystemConfig.cmake.in, + CMakeWindowsSystemConfig.cmake: Add sizeof some types support + +2002-01-07 13:47 hoffman + + * Templates/: configure, configure.in: use -shared for sunos build + +2002-01-06 14:59 perera + + * Source/: cmSystemTools.cxx, cmSystemTools.h, cmake.cxx, cmake.h: + ENH: Add an invocation that maintains symbolic paths to the + source and binary trees, mainly for systems with automounted + network drives. ENH: CollapseFullPath() no longer adds a + trailing "/" to directory paths. + +2002-01-03 16:02 andy + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomCommandCommand.h: Fix add custom command so that it + actually executes the code + +2002-01-03 14:19 martink + + * Source/: cmVTKWrapJavaCommand.cxx, cmVTKWrapPythonCommand.cxx: + minor fixes + +2002-01-03 14:05 martink + + * Source/cmVTKWrapTclCommand.cxx: minor fix + +2002-01-03 13:56 martink + + * Source/cmVTKWrapTclCommand.cxx: minor fix + +2002-01-03 09:34 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx: expand vars nwo for + exists test + +2002-01-02 16:46 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx, cmIfCommand.h: added + exists option for if statement + +2002-01-02 16:45 martink + + * Source/: cmake.cxx, CursesDialog/cmCursesLongMessageForm.cxx, + CursesDialog/cmCursesMainForm.cxx: prints the relese version + +2002-01-02 16:44 martink + + * Source/cmMakefile.h: added release verison to cmMakefile + +2002-01-02 11:54 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmUnixMakefileGenerator.cxx: BUG: put back recursive call to make + for checking sources + +2001-12-31 12:02 berk + + * Source/cmUnixMakefileGenerator.cxx: Type || should have been && + +2001-12-31 11:54 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmUnixMakefileGenerator.cxx: ENH: remove one call to make, and + clean echo stuff a bit + +2001-12-30 17:18 berk + + * Source/cmUnixMakefileGenerator.cxx: BUG: fix long depend list + because it gets cut on the hp: I may look like berk, but it is + bill H. + +2001-12-28 17:00 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: ENH: + remove the rule to run make depend from the top with each change + in any cmakelist file. Instead, run make depend in the current + directory if a source file changes, or if a .h file changes or is + removed + +2001-12-28 15:58 perera + + * Source/: cmBorlandMakefileGenerator.cxx, + cmNMakeMakefileGenerator.cxx, cmUnixMakefileGenerator.cxx: BUG: + Don't generate build rules for header files. + +2001-12-28 15:56 perera + + * Source/cmMakefile.cxx: BUG: .txx are not source files. They + contain template code which can only be compiled when included in + a regular .cxx file. By themselves, they cause do not cause code + to be generated. + +2001-12-28 15:54 perera + + * Source/cmSourceFile.cxx: ENH: Classify a file as source or header + even when the extension is given explicitly. + +2001-12-28 15:37 hoffman + + * CMakeLists.txt: remove bad ADD_DEPENDENCIES commands + +2001-12-28 12:40 hoffman + + * Source/CMakeLists.txt: ERR: remove bad ADD_DEPENDENCIES commands + +2001-12-27 14:55 hoffman + + * Source/cmIfCommand.cxx: remove warning + +2001-12-27 13:55 hoffman + + * Source/cmAddDependenciesCommand.cxx: ENH: add error checking + +2001-12-21 15:39 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmUnixMakefileGenerator.cxx: BUG: fix so you can remove a + directory in the source tree, and clean up echo of commands + +2001-12-21 15:11 martink + + * Source/CursesDialog/: cmCursesBoolWidget.cxx, + cmCursesBoolWidget.h, cmCursesDummyWidget.cxx, + cmCursesDummyWidget.h, cmCursesForm.h, cmCursesLabelWidget.cxx, + cmCursesLabelWidget.h, cmCursesLongMessageForm.cxx, + cmCursesMainForm.cxx, cmCursesMainForm.h, + cmCursesStringWidget.cxx, cmCursesStringWidget.h, + cmCursesWidget.cxx, cmCursesWidget.h: update interface + +2001-12-21 15:10 martink + + * Source/cmake.cxx: add patch hack + +2001-12-21 14:54 martink + + * Source/: cmBuildCommand.cxx, cmSystemTools.cxx, ctest.cxx: fix + for dos files on UNIX make -k and flush in ctest + +2001-12-21 14:44 martink + + * Modules/: FindCurses.cmake, FindJNI.cmake, FindMPI.cmake, + FindPythonLibs.cmake: general improvements + +2001-12-21 14:40 barre + + * Modules/: FindVTK.cmake: Change so that different flavours of VTK + might be chosen by the user. See full instructions in that file. + +2001-12-21 14:40 martink + + * configure.in, configure: fixed for SGI CC + +2001-12-21 14:39 martink + + * Templates/: CMakeBorlandWindowsSystemConfig.cmake, + CMakeNMakeWindowsSystemConfig.cmake, + CMakeWindowsSystemConfig.cmake, DLLHeader.dsptemplate, configure, + configure.in, staticLibHeader.dsptemplate: variety of bug fixes + +2001-12-21 09:55 ibanez + + * Source/cmFLTKWrapUICommand.cxx: ENH: No longer tries to create a + directory for the output + +2001-12-21 09:07 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: add support for DESTDIR + in install targets + +2001-12-21 00:01 perera + + * Source/cmUnixMakefileGenerator.cxx, + Templates/CMakeSystemConfig.cmake.in: ENH: Add option to disable + use of -rpath. + +2001-12-20 17:00 hoffman + + * Source/: cmBorlandMakefileGenerator.cxx, + cmNMakeMakefileGenerator.cxx: ENH: fix for win98 check for + directory existence + +2001-12-20 16:10 barre + + * Modules/: FindTclsh.cmake, FindWish.cmake, FindTCL.cmake: ENH: + ADVANCED was not propagated to the new sub-mods + +2001-12-20 15:46 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmUnixMakefileGenerator.cxx: ENH: add make silent flag for nmake + and move .SILENT: directive to top of makefile + +2001-12-20 15:45 barre + + * Modules/: FindFLTK.cmake: ENH: mark everything ADVANCED + +2001-12-20 15:45 hoffman + + * Source/cmBorlandMakefileGenerator.cxx: ENH: use better command + for creating static library + +2001-12-20 15:44 hoffman + + * Templates/: CMakeBorlandWindowsSystemConfig.cmake, + CMakeNMakeWindowsSystemConfig.cmake, + CMakeWindowsSystemConfig.cmake: BUG: must use CACHE values in + these + +2001-12-20 15:22 barre + + * Modules/FindVTK.cmake: ENH: Also look for 4.2, 4.1, 4.0 + +2001-12-20 15:17 barre + + * Modules/FindVTK.cmake: ENH: Also look for 4.2, 4.1, 4.0 + +2001-12-20 08:16 hoffman + + * Example/Demo/demo.cxx: remove fancy cxx stuff from the example + +2001-12-19 21:51 barre + + * Modules/FindJNI.cmake: ENH: Make everything ADVANCED + +2001-12-19 18:45 hoffman + + * Source/: cmBorlandMakefileGenerator.cxx, + cmBorlandMakefileGenerator.h, cmNMakeMakefileGenerator.cxx, + cmUnixMakefileGenerator.cxx: ENH: add silent mode for makefile + builds and fix borland and nmake after the depend stuff + +2001-12-19 15:26 hoffman + + * Source/: CMakeLists.txt, cmaketest.cxx: add example to tests + +2001-12-19 15:25 hoffman + + * Example/: CMakeLists.txt, Demo/CMakeLists.txt, Demo/demo.cxx, + Demo/demo_b.cxx, Hello/CMakeLists.txt, Hello/hello.cxx, + Hello/hello.h: move example into the source tree so it will + work... + +2001-12-19 11:38 barre + + * Modules/FindTCL.cmake: default ActiveState Tcl install dir is now + C:/Tcl + +2001-12-19 08:35 hoffman + + * Source/cmVTKMakeInstantiatorCommand.cxx: change ostrstream to + strstream + +2001-12-19 08:26 hoffman + + * Templates/configure, Templates/configure.in, configure, + configure.in: check for LANG:std + +2001-12-18 21:00 hoffman + + * configure, configure.in, Templates/configure, + Templates/configure.in: -LANG:std should be default on sgi for + ansi CXX Flags + +2001-12-18 20:32 hoffman + + * Templates/staticLibHeader.dsptemplate: fix comment + +2001-12-18 17:30 hoffman + + * Templates/: configure, configure.in: syntax error + +2001-12-18 17:17 hoffman + + * Templates/configure: use cxx compiler on sgi to build static libs + +2001-12-18 17:16 hoffman + + * Templates/configure.in: use cxx compiler to build static libs on + sgi + +2001-12-18 16:21 martink + + * Modules/FindJNI.cmake: bad spelling of java + +2001-12-18 14:55 king + + * Source/cmIfCommand.cxx: ENH: Added error reporting for missing + arguments to ENDIF. + +2001-12-18 13:35 berk + + * Source/CursesDialog/cmCursesBoolWidget.cxx: Fixed warning. + +2001-12-18 11:35 king + + * Source/: cmVTKMakeInstantiatorCommand.cxx, + cmVTKMakeInstantiatorCommand.h: ENH: Improved flexibility of + command by allowing specificiation of separate input and outputs + source lists. Multiple input source lists are now also allowed. + +2001-12-18 10:21 king + + * Source/: cmBorlandMakefileGenerator.cxx, + cmNMakeMakefileGenerator.cxx, cmUnixMakefileGenerator.cxx: ENH: + Improved dependency generation. If any cmake.depends is out of + date, all of them in the tree are re-generated. This is + necessary in certain cases when CMakeLists.txt files change. + +2001-12-18 09:51 king + + * Source/cmElseCommand.cxx: ENH: Added option to IF command to test + if a command exists. Syntax is IF(COMMAND name-of-command). + +2001-12-18 09:39 king + + * Source/: cmIfCommand.cxx, cmMakefile.cxx, cmMakefile.h: ENH: + Added option to IF command to test if a command exists. Syntax + is IF(COMMAND name-of-command). + +2001-12-18 09:16 king + + * Source/cmMakefile.cxx: BUG: Existing projects have cache entries + with the same name as the command they adjust (VTK_WRAP_JAVA in + VTK, for example). Setting the command name as a variable is too + dangerous. + +2001-12-17 17:44 andy + + * Source/cmSystemTools.cxx: Better handling of new lines when + moving from dos to unix + +2001-12-17 16:20 king + + * Source/: cmCommands.cxx, cmVTKMakeInstantiatorCommand.cxx, + cmVTKMakeInstantiatorCommand.h: ENH: Adding VTK_MAKE_INSTANTIATOR + command. This command will be used by VTK kits to register their + classes with vtkInstantiator. + +2001-12-17 16:19 king + + * Source/cmMakefile.cxx: ENH: Each cmake command now adds a cmake + variable of its own name, set to ON. This allows constructs in + CMakeLists.txt files like: IF(FOO_COMMAND) FOO_COMMAND() + ENDIF(FOO_COMMAND) This provides the option to add CMake commands + for extra functionality without breaking compatability with + earlier versions of CMake. + +2001-12-17 11:30 hoffman + + * Templates/: CMakeNMakeWindowsSystemConfig.cmake, + DLLHeader.dsptemplate: remove stack stuff + +2001-12-17 11:28 hoffman + + * Templates/CMakeWindowsSystemConfig.cmake: use a better compiler + name + +2001-12-17 11:15 hoffman + + * Source/cmDSPWriter.cxx: ENH: allow custom commands for files that + msdev knows about + +2001-12-16 18:52 barre + + * Source/cmVTKWrapPythonCommand.cxx: Wrap abstract class too, as + per David Gobbi's request (for the sake of the internal + documentation features of python"). + +2001-12-14 22:41 hoffman + + * Source/cmBuildCommand.cxx: use -i not -k for make + +2001-12-13 13:28 berk + + * Source/CursesDialog/: cmCursesBoolWidget.cxx, + cmCursesBoolWidget.h, cmCursesDummyWidget.cxx, + cmCursesDummyWidget.h, cmCursesForm.h, cmCursesLabelWidget.cxx, + cmCursesLabelWidget.h, cmCursesLongMessageForm.cxx, + cmCursesMainForm.cxx, cmCursesMainForm.h, + cmCursesStringWidget.cxx, cmCursesStringWidget.h, + cmCursesWidget.cxx, cmCursesWidget.h: Updated toolbar. + +2001-12-12 18:27 hoffman + + * Source/CMakeLists.txt: ENH: allow local changes + +2001-12-12 13:57 berk + + * Modules/FindMPI.cmake: Added doc. + +2001-12-12 12:05 king + + * Modules/FindCurses.cmake: ENH: Added /lib to curses search path. + +2001-12-12 11:51 berk + + * Modules/FindMPI.cmake: Added support for a 2nd mpi library + (usually mpi++) + +2001-12-11 15:59 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: cmake.depends files of + zero size were not being re-written in some cases. Added a + comment output to the top of the file so it will be re-written + every time. + +2001-12-11 14:09 blezek + + * Modules/FindPythonLibs.cmake: ENH: Adding /usr/*/python1.5 for + RedHat 7.1/Python 1.5 users + +2001-12-11 12:29 hoffman + + * Source/cmSubdirDependsCommand.cxx: remove warning + +2001-12-11 10:42 hoffman + + * Source/: cmUnixMakefileGenerator.cxx: check for empty library + output path + +2001-12-11 10:39 hoffman + + * Source/ctest.cxx: ENH: add flush + +2001-12-11 02:21 ibanez + + * Source/: cmFLTKWrapUICommand.h, cmFLTKWrapUICommand.cxx: FIX: The + command was modified it uses now a target and a source list + composed of .fl files. The names of the generated .cxx files are + added internally to the Sources list of the target. + +2001-12-11 02:17 ibanez + + * Source/: cmUnixMakefileGenerator.cxx, cmTarget.h: FIX: + GENERATED_CODE type is no longer needed: generated code is not a + Target. + +2001-12-10 12:10 king + + * Modules/FindTclsh.cmake: ENH: Added more filenames for tclsh + program. Also now only looks for cygtclsh80 if under cygwin. + +2001-12-10 12:04 king + + * Modules/FindTclsh.cmake: ENH: Added more filenames for tclsh + program. Also now only looks for cygtclsh80 if under cygwin. + +2001-12-10 12:02 perera + + * Source/cmUnixMakefileGenerator.cxx: BUG: LIBRARY_OUTPATH_PATH may + be "set" to the null string, in which case it should be ignored. + +2001-12-10 11:27 king + + * Source/: cmMakefile.cxx, cmMakefile.h, + cmSubdirDependsCommand.cxx, cmSubdirDependsCommand.h, + cmUnixMakefileGenerator.cxx: ENH: Parallel build support is now + automatic. SUBDIR_DEPENDS command now does nothing. Also fixed + a bug in CMakeLists.txt file inheritance when a directory level + is skipped. + +2001-12-10 11:03 king + + * Source/: cmMakefile.cxx, cmMakefile.h, + cmSubdirDependsCommand.cxx, cmSubdirDependsCommand.h, + cmUnixMakefileGenerator.cxx: ENH: SUBDIR_DEPENDS command now does + nothing. The parallel build functionality is now automatic. + Dependencies are setup to force the same build order as a single + threaded build, but multiple files in the same directory can be + built simultaneously. Also fixed bug with inheriting + CMakeLists.txt files when a directory level is skipped. + +2001-12-08 21:17 hoffman + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + merge bug fixes to release + +2001-12-08 21:16 hoffman + + * Source/cmCacheManager.cxx: merge bug fixes to release, mistaken + comment in cache + +2001-12-08 21:10 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: if LIBRARY_OUTPUT_PATH + is set, then use the fullpath for a remote target + +2001-12-08 20:49 hoffman + + * Source/cmUnixMakefileGenerator.h: WAR: remove warning + +2001-12-07 19:11 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: executable extension + wrong for ctest search, and was not looking in Debug and Release + +2001-12-07 18:27 berk + + * Source/cmCacheManager.cxx: If an entry starts with // (network + paths), double quote it. + +2001-12-07 18:15 perera + + * Source/cmUnixMakefileGenerator.cxx: BUG: the rule for generating + a library no longer has the full path, and so the dependency + targets shouldn't, either. + +2001-12-07 18:12 berk + + * Source/cmCacheManager.cxx: Comments start with TWO leading + slashes not _one_ + +2001-12-07 16:06 martink + + * Source/cmMakefile.h: version rev + +2001-12-07 16:01 martink + + * Source/cmMakefile.h: release 10 + +2001-12-07 15:47 hoffman + + * Source/cmCacheManager.cxx, Source/cmMarkAsAdvancedCommand.cxx, + Source/cmMarkAsAdvancedCommand.h, + Templates/CMakeBorlandWindowsSystemConfig.cmake: ENH: add mark as + not advanced to mark as advanced + +2001-12-07 14:57 hoffman + + * ChangeLog.txt: yet another release + +2001-12-07 14:31 hoffman + + * Source/cmaketest.cxx: ENH: convert to windows paths + +2001-12-07 13:10 hoffman + + * Source/cmaketest.cxx: ENH: use windows paths to run commands and + escape spaces + +2001-12-07 10:58 hoffman + + * Source/: cmBorlandMakefileGenerator.cxx, + cmNMakeMakefileGenerator.cxx, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: ENH: add custom commands for targets + +2001-12-07 10:32 barre + + * Templates/CMakeBorlandWindowsSystemConfig.cmake: Remove "unused + var" warning from C_FLAGS + +2001-12-06 20:04 barre + + * Source/cmNMakeMakefileGenerator.cxx: Do not output library search + path if the library path option/flag is empty + add + CMAKE_LINKER_HIDE_PARAMETERS since some linkers just do not + support the @<< syntax + +2001-12-06 20:02 barre + + * Templates/CMakeNMakeWindowsSystemConfig.cmake: Add + CMAKE_LINKER_HIDE_PARAMETERS since some linkers just do not + support the @<< syntax + +2001-12-06 17:40 andy + + * Source/CursesDialog/cmCursesMainForm.cxx: Fix bug with string + +2001-12-06 17:09 hoffman + + * Source/cmakewizard.cxx: ENH: call convert to unix slashes for + path and filepath entries + +2001-12-06 17:07 berk + + * Source/CursesDialog/cmCursesMainForm.cxx: Added support for ~. + +2001-12-06 16:50 martink + + * Source/cmSystemTools.cxx: handle tildas + +2001-12-06 13:32 barre + + * Source/cmUnixMakefileGenerator.cxx: Lib path should be converted + to native path too. + +2001-12-06 13:31 barre + + * Source/: cmBorlandMakefileGenerator.cxx, + cmBorlandMakefileGenerator.h, cmNMakeMakefileGenerator.cxx, + cmNMakeMakefileGenerator.h: Fix the command quoting pb (remove + m_QuoteNextCommand), move ConvertToNativePath to NMake gen + +2001-12-06 11:52 martink + + * Modules/Dart.cmake: better use of modules + +2001-12-06 11:52 martink + + * Modules/FindDart.cmake: better docs + +2001-12-06 11:52 martink + + * Modules/FindTCL.cmake: now broken into pieces + +2001-12-06 11:51 martink + + * Modules/: FindTclsh.cmake, FindWish.cmake: new modules + +2001-12-06 11:49 martink + + * Source/CursesDialog/ccmake.cxx: Cleaning last line at exit. + +2001-12-06 10:24 martink + + * Templates/CMakeSystemConfig.cmake.in: made install prefix non + advanced + +2001-12-05 15:36 perera + + * Modules/FindTCL.cmake: ENH: add more possible names for + executables. + +2001-12-05 15:28 barre + + * Source/: cmNMakeMakefileGenerator.cxx, cmCacheManager.cxx: Add + single quotes feature. + +2001-12-05 15:00 barre + + * Templates/CMakeNMakeWindowsSystemConfig.cmake: Add single quotes + feature. + +2001-12-05 12:07 martink + + * Source/cmMakefile.h: up version + +2001-12-05 11:59 martink + + * Source/cmMakefile.h: up version + +2001-12-05 11:38 hoffman + + * ChangeLog.txt: new version + +2001-12-05 11:37 will + + * CMake.pdf: updated from rtf + +2001-12-05 11:32 hoffman + + * CMake.rtf: ENH: update cvs path + +2001-12-04 18:49 starreveld + + * Templates/: configure, configure.in: + + Add the flat_namespace and undefined suppress flags to OSX builds + +2001-12-04 17:28 hoffman + + * Source/cmSystemTools.cxx: ENH: remove /tmp_mnt from all paths in + convert to unix slashes + +2001-12-04 16:19 berk + + * Source/CursesDialog/cmCursesMainForm.cxx: Fixed outdated comment + +2001-12-04 15:55 hoffman + + * Templates/CMakeBorlandWindowsSystemConfig.cmake: add tWM to c + flags as well as CXX flags + +2001-12-04 15:53 berk + + * Source/CursesDialog/cmCursesMainForm.cxx: Fixed overflow problem. + +2001-12-04 15:16 hoffman + + * Templates/CMakeBorlandWindowsSystemConfig.cmake: ENH: add -tWM to + default flags for compilation + +2001-12-04 12:03 hoffman + + * Source/cmUnixMakefileGenerator.cxx: crazy fix for putenv, and + native path called on custom command paths + +2001-12-04 11:20 berk + + * Source/CursesDialog/cmCursesStandardIncludes.h: replacing clear() + +2001-12-04 11:16 berk + + * Source/CursesDialog/: ccmake.cxx, cmCursesForm.cxx, + cmCursesForm.h, cmCursesLongMessageForm.cxx, + cmCursesMainForm.cxx, cmCursesStringWidget.cxx: Added debugging. + +2001-12-04 10:55 barre + + * Modules/: Documentation.cmake, FindCygwin.cmake, + FindDoxygen.cmake, FindHhc.cmake, FindPerl.cmake, + FindSelfPackers.cmake, FindUnixCommands.cmake, FindWget.cmake: + Remove unneeded test and code duplication. Add WIN32 test. Make + all ADVANCED. + +2001-12-04 10:54 barre + + * Modules/Dart.cmake: Remove code duplication. Call FindTcl.cmake, + which also does the ADVANCED stuff. + +2001-12-04 10:53 barre + + * Modules/FindTCL.cmake: Make shells also ADVANCED + +2001-12-04 10:27 barre + + * Modules/FindPythonLibs.cmake: Make vars ADVANCED for WIN32 (same + as Tcl) + +2001-12-04 10:11 hoffman + + * Source/CursesDialog/form/frm_driver.c: no c++ comments in c code, + duhhhh + +2001-12-03 19:58 hoffman + + * Source/CursesDialog/form/frm_driver.c: ENH: AIX seems to define + lines and columns as macros, I undefed them + +2001-12-03 18:04 hoffman + + * Templates/CMakeBorlandWindowsSystemConfig.cmake: ENH: fix crashes + in console apps + +2001-12-03 17:47 hoffman + + * Source/cmVariableRequiresCommand.cxx: ENH: let people know the + variable is advanced + +2001-12-03 17:01 hoffman + + * Modules/FindOpenGL.cmake, Source/cmBorlandMakefileGenerator.cxx, + Templates/CMakeBorlandWindowsSystemConfig.cmake: ENH: fix + debugging with borland + +2001-12-03 17:00 hoffman + + * Source/cmake.cxx: ENH: add -C load cache file option + +2001-12-03 15:55 martink + + * Source/ctest.cxx: minor fix for not found executables + +2001-12-03 15:48 hoffman + + * CMake.rtf: [no log message] + +2001-12-03 15:11 berk + + * Source/: cmake.cxx: Fixed help. + +2001-12-03 13:05 hoffman + + * Source/Makefile.borland: add wizard + +2001-12-03 09:39 hoffman + + * CMake.rtf: update docs some + +2001-12-02 18:22 ibanez + + * Source/cmFLTKWrapUICommand.cxx: ENH: AddCustomCommand register + now multiple outputs. Auxiliary variable manage the output + directory where FLTK generated code is going to be writen. + +2001-11-30 17:20 barre + + * Source/: cmBuildCommand.cxx, cmDSPWriter.cxx, cmDSWWriter.cxx, + cmIfCommand.cxx, cmUnixMakefileGenerator.cxx, cmake.cxx: fix + warning for Borland build + +2001-11-30 16:51 hoffman + + * Source/cmakewizard.h: [no log message] + +2001-11-30 16:48 hoffman + + * Source/CMakeLib.dsp, Source/CMakeLists.txt, + Source/Makefile.borland, Source/Makefile.in, + Source/cmBorlandMakefileGenerator.cxx, + Source/cmBorlandMakefileGenerator.h, + Source/cmBorlandMakefileGenerator2.cxx, + Source/cmBorlandMakefileGenerator2.h, + Source/cmForEachCommand.cxx, Source/cmake.cxx, + Source/cmakemain.cxx, Source/cmakewizard.cxx, + Templates/CMakeBorlandWindowsSystemConfig.cmake, + Templates/CMakeWindowsBorlandConfig.cmake, + Templates/CMakeWindowsBorlandConfig2.cmake: new borland generator + moved into place + +2001-11-30 16:27 hoffman + + * Source/: cmBorlandMakefileGenerator.cpp, + cmBorlandMakefileGenerator.h: Replace with nmake subclassed + generator + +2001-11-30 16:05 barre + + * Source/: cmBorlandMakefileGenerator2.cxx, + cmNMakeMakefileGenerator.cxx, cmUnixMakefileGenerator.cxx: Add + options for library manager (lib). + +2001-11-30 16:04 barre + + * Templates/CMakeNMakeWindowsSystemConfig.cmake: Add options for + library manager (lib). Alpha sort + +2001-11-30 15:55 berk + + * Modules/FindTCL.cmake: Unix users are smarter. + +2001-11-30 15:04 berk + + * Source/CursesDialog/: cmCursesMainForm.cxx, + cmCursesStringWidget.cxx: Improving interface. + +2001-11-30 14:50 hoffman + + * Source/CursesDialog/cmCursesMainForm.cxx: print cmake running + message to cerr + +2001-11-30 14:33 barre + + * Templates/CMakeNMakeWindowsSystemConfig.cmake, + Source/cmNMakeMakefileGenerator.cxx: Add linker flags for each + build type + +2001-11-30 14:24 berk + + * Source/CursesDialog/cmCursesMainForm.cxx: Better documentation. + +2001-11-30 14:16 berk + + * Source/CursesDialog/cmCursesMainForm.cxx: Better documentation. + +2001-11-30 13:59 berk + + * Source/CursesDialog/: cmCursesLongMessageForm.cxx, + cmCursesMainForm.cxx, cmCursesStringWidget.cxx: Improved help. + +2001-11-30 13:53 berk + + * Templates/CMakeSystemConfig.cmake.in: Removed unused options. + +2001-11-30 13:10 barre + + * Templates/CMakeNMakeWindowsSystemConfig.cmake: CMAKE_ANSI_CFLAGS + is used by VTK, so it should be set in the NMake config so that + it gets expanded (even to "") + +2001-11-30 13:09 hoffman + + * Source/cmNMakeMakefileGenerator.cxx: fix library suffix + +2001-11-30 12:41 hoffman + + * Source/cmUnixMakefileGenerator.cxx: remove suffix rules + +2001-11-30 12:05 hoffman + + * Source/cmUnixMakefileGenerator.cxx: add new suffix rules + +2001-11-30 11:34 berk + + * Source/CursesDialog/: ccmake.cxx, cmCursesLongMessageForm.cxx, + cmCursesMainForm.cxx, cmCursesStandardIncludes.h: Can non use + clear because it is undef'ed. + +2001-11-30 10:58 berk + + * Source/CursesDialog/ccmake.cxx: Fixed warning. + +2001-11-30 10:54 berk + + * Source/CursesDialog/: ccmake.cxx, cmCursesMainForm.cxx: Fixed + warning. + +2001-11-30 10:51 berk + + * Source/CursesDialog/: cmCursesMainForm.h, cmCursesMainForm.cxx: + Since it is being used as an array size in another file, it is + not possible to initialize MAX_WIDTH in a .cxx file. + +2001-11-30 10:41 hoffman + + * Source/cmUnixMakefileGenerator.cxx: fix warning + +2001-11-30 10:39 berk + + * Source/CursesDialog/: cmCursesLongMessageForm.cxx, + cmCursesLongMessageForm.h: Missed std:: + +2001-11-30 10:28 berk + + * Source/CursesDialog/cmCursesMainForm.h: Missed std:: + +2001-11-30 10:27 berk + + * Templates/CMakeSystemConfig.cmake.in: CMAKE_WORDS_BIGENDIAN + should not be in the cache. + +2001-11-30 10:23 berk + + * Modules/FindPythonLibs.cmake: PYTHON_DEBUG_LIBRARY is only used + on Windows. + +2001-11-30 09:19 barre + + * Templates/CMakeSystemConfig.cmake.in: fix: If documentation + added, then need cache type + +2001-11-29 23:45 berk + + * Source/CursesDialog/: cmCursesLongMessageForm.cxx, + cmCursesLongMessageForm.h: opps I forgot to add these + +2001-11-29 23:24 hoffman + + * Source/Makefile.borland, Source/cmBorlandMakefileGenerator2.cxx, + Source/cmNMakeMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.cxx, + Templates/CMakeSystemConfig.cmake.in, + Templates/CMakeWindowsBorlandConfig2.cmake: ENH: fix various + problems caused by the generalization of nmake generator + +2001-11-29 20:59 barre + + * Source/cmBorlandMakefileGenerator2.cxx, + Source/cmNMakeMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h, + Templates/CMakeNMakeWindowsSystemConfig.cmake, + Templates/CMakeSystemConfig.cmake.in, + Templates/CMakeWindowsBorlandConfig2.cmake, + Templates/CMakeWindowsSystemConfig.cmake: Nmake build: move most + of hard-coded values to config parameters + +2001-11-29 16:44 berk + + * Source/: cmListFileCache.cxx, cmSystemTools.cxx, cmSystemTools.h, + ctest.cxx, CursesDialog/CMakeLists.txt, CursesDialog/ccmake.cxx, + CursesDialog/cmCursesCacheEntryComposite.cxx, + CursesDialog/cmCursesCacheEntryComposite.h, + CursesDialog/cmCursesForm.h, CursesDialog/cmCursesMainForm.cxx, + CursesDialog/cmCursesMainForm.h: Improvements to the curses + interface. + +2001-11-29 14:51 barre + + * Source/cmNMakeMakefileGenerator.cxx: Fix space pb (embended, then + escaped) + +2001-11-29 09:22 hoffman + + * Source/Makefile.borland: add bootstrap makefile for borland + compiler + +2001-11-29 09:09 hoffman + + * Source/CMakeLists.txt, Source/cmBorlandMakefileGenerator2.cxx, + Source/cmakewizard.cxx, + Templates/CMakeWindowsBorlandConfig2.cmake: fix for shared libs + and borland + +2001-11-29 01:51 ibanez + + * Source/cmUnixMakefileGenerator.cxx: ENH: GENERATED_CODE case + added to switch. + +2001-11-29 01:48 ibanez + + * Source/cmTarget.h: ENH: A type of target was added for + representing GENERATED_CODE + +2001-11-29 01:46 ibanez + + * Source/cmFLTKWrapUICommand.cxx: ENH: Custom commands are now + builded. + +2001-11-28 18:07 hoffman + + * Source/CMakeLib.dsp, Source/cmBorlandMakefileGenerator2.cxx, + Source/cmBorlandMakefileGenerator2.h, + Source/cmNMakeMakefileGenerator.cxx, + Source/cmNMakeMakefileGenerator.h, + Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h, + Templates/CMakeWindowsBorlandConfig2.cmake: ENH: borland + generator 2 is working more or less + +2001-11-28 14:45 ibanez + + * Source/cmFLTKWrapUICommand.cxx: ENH: Command simplified in order + to construct a Source list of .cxx from a source list of .fl + GUI files. + +2001-11-28 14:44 ibanez + + * Source/cmFLTKWrapUICommand.h: ENH: The command was simplified to + generate a source list of cxx from a source list of .fl GUI + files. + +2001-11-28 12:49 barre + + * Modules/FindPythonLibs.cmake: Fynd Python debug lib in usual libs + dir too + +2001-11-28 11:12 hoffman + + * Source/: CMakeLists.txt, cmBorlandMakefileGenerator2.cxx, + cmBorlandMakefileGenerator2.h, cmNMakeMakefileGenerator.cxx, + cmNMakeMakefileGenerator.h, cmake.cxx: add new borland generator + +2001-11-28 10:51 hoffman + + * Source/cmaketest.cxx: [no log message] + +2001-11-28 07:15 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmNMakeMakefileGenerator.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: bug: fix same path comparison when + short paths are used + +2001-11-28 07:14 hoffman + + * Source/cmMarkAsAdvancedCommand.cxx: fix warning + +2001-11-27 17:53 berk + + * Source/: cmNMakeMakefileGenerator.cxx, + cmNMakeMakefileGenerator.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: ENH: nmake generator much closer to + working with spaces + +2001-11-27 17:32 berk + + * Source/cmMakefile.cxx: ENH: expand variables in a command before + escaping spaces in the command + +2001-11-27 17:31 berk + + * Source/cmOptionCommand.cxx: ENH: do not write over existing cache + values even doc strings to avoid changing the cache file + +2001-11-27 16:12 berk + + * Source/cmDSPWriter.cxx: remove unused include + +2001-11-27 15:33 martink + + * Source/cmLinkLibrariesCommand.cxx: removed extra lib paths to + avoid finding old libs + +2001-11-27 15:32 martink + + * Modules/FindTCL.cmake: made some vars advanced + +2001-11-27 15:20 martink + + * Modules/Dart.cmake: made some vars advanced + +2001-11-27 00:03 ibanez + + * Source/cmCommands.cxx: ENH: Command for running FLTK's UI tool + "Fluid" was added. + +2001-11-27 00:02 ibanez + + * Source/cmUnixMakefileGenerator.cxx: ENH: Support for FLTK Fluid + tool added. + +2001-11-26 23:57 ibanez + + * Modules/FindFLTK.cmake: ENH: Support for running FLUID was added. + +2001-11-26 22:40 ibanez + + * Source/: cmFLTKWrapUICommand.cxx, cmFLTKWrapUICommand.h: Command + for invoking FLTK's code generator "Fluid" during the building + process + +2001-11-26 18:26 hoffman + + * Modules/Dart.cmake, Source/CMakeLists.txt, + Source/cmCacheManager.cxx, Source/cmCacheManager.h, + Source/cmCommands.cxx, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmUnixMakefileGenerator.cxx, + Source/cmakewizard.cxx, Templates/CMakeSystemConfig.cmake.in, + Templates/CMakeWindowsSystemConfig.cmake, + Source/cmMarkAsAdvancedCommand.cxx, + Source/cmMarkAsAdvancedCommand.h: ENH: add advanced variable + types and command line wizard gui + +2001-11-26 18:24 hoffman + + * Source/: cmFindFileCommand.cxx, cmFindFileCommand.h, + cmFindLibraryCommand.cxx, cmFindLibraryCommand.h, + cmFindPathCommand.cxx, cmFindPathCommand.h, + cmFindProgramCommand.cxx, cmFindProgramCommand.h: ENH: add + possibility to add doc strings to varibles created by find type + commands + +2001-11-26 16:32 berk + + * Source/cmCacheManager.cxx: Oops. The wrong version of the + duplicate code was kept. Loaded cache values were not made + internal. + +2001-11-26 15:45 berk + + * Modules/FindTCL.cmake: TK_INTERNAL_PATH is only needed on + Windows. + +2001-11-26 11:32 martink + + * Source/: cmSystemTools.cxx, cmSystemTools.h: removed warning + messages + +2001-11-26 11:31 martink + + * Source/cmIfCommand.cxx: better error messages + +2001-11-24 18:47 barre + + * Modules/Dart.cmake: I want to be able to start/end + experimental-only dashboards + +2001-11-21 17:45 hoffman + + * Source/: cmCacheManager.cxx, cmDSPWriter.cxx, + cmNMakeMakefileGenerator.cxx, cmSystemTools.cxx, cmSystemTools.h, + cmUnixMakefileGenerator.cxx, cmake.cxx, cmaketest.cxx: NMake with + spaces in directories + +2001-11-21 11:35 andy + + * Source/cmCacheManager.cxx: Fix the current directory check for + NMake + +2001-11-21 08:47 hoffman + + * Source/cmake.cxx: ENH: clean up command line arguments + +2001-11-21 08:46 hoffman + + * Source/: cmQTWrapUICommand.cxx, cmVariableRequiresCommand.cxx: + WAR: fix warning + +2001-11-20 17:50 hoffman + + * Source/: cmCacheManager.cxx, cmCacheManager.h, cmake.cxx, + cmake.h: ENH: add command line arguments to set cache entries + +2001-11-20 17:27 berk + + * Source/cmNMakeMakefileGenerator.cxx: ENH: closer to working with + spaces in source directory + +2001-11-20 17:27 berk + + * Source/cmaketest.cxx: BUG: fix memory leak + +2001-11-20 17:26 berk + + * Source/cmDSPWriter.cxx: BUG: fix for spaces in path to + CMakeList.txt file + +2001-11-20 08:28 hoffman + + * Source/: cmStandardIncludes.h, CursesDialog/cmCursesMainForm.cxx, + CursesDialog/cmCursesStandardIncludes.h: define hacks and such + for the dec compiler + +2001-11-19 17:52 hoffman + + * Source/: cmCommands.cxx, cmSystemTools.cxx, cmSystemTools.h, + cmVariableRequiresCommand.cxx, cmVariableRequiresCommand.h: ENH: + add new command VARIABLE_REQUIRES for better debugging of list + files + +2001-11-19 09:34 hoffman + + * Source/: cmVariableRequiresCommand.cxx, + cmVariableRequiresCommand.h: [no log message] + +2001-11-16 16:42 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: look for cmake test with + .exe if nmake + +2001-11-16 16:28 hoffman + + * Source/cmNMakeMakefileGenerator.cxx: ENH: fix for dll builds + +2001-11-16 13:08 bettingf + + * Source/cmUnixMakefileGenerator.cxx: Added a make depend in the + clean rule to refresh the dependencies + +2001-11-16 10:14 bettingf + + * Source/cmUnixMakefileGenerator.cxx: undo the last change because + of problem with some versions of make + +2001-11-16 09:40 bettingf + + * Modules/FindQt.cmake: fixed QT_UIC_EXE name + +2001-11-16 09:04 bettingf + + * Source/cmUnixMakefileGenerator.cxx: added the deletion of + cmake.depends in the cleaning so that it is recomputed even + source files (i.e. .cxx or .h) are generated + +2001-11-16 09:03 bettingf + + * Source/cmMakeDepend.cxx: Now adds dependency if the file doesn't + exist but will be created during the compilation + +2001-11-16 09:01 bettingf + + * Source/: cmQTWrapUICommand.cxx, cmQTWrapUICommand.h: corrected + path problem and added moc compilation too + +2001-11-15 22:10 hoffman + + * Source/Makefile.in: remove depend on star dot h as it is not + really needed and breaks some versions of gmake + +2001-11-15 18:18 hoffman + + * Source/cmNMakeMakefileGenerator.cxx: ENH: use crazy temp files + for long command lines + +2001-11-15 17:45 hoffman + + * Source/cmNMakeMakefileGenerator.cxx: ENH: remove debug prints + +2001-11-15 17:11 hoffman + + * Modules/Dart.cmake, Source/cmBuildCommand.cxx, + Source/cmNMakeMakefileGenerator.cxx, + Source/cmNMakeMakefileGenerator.h, + Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h, + Templates/CMakeNMakeWindowsSystemConfig.cmake, + Templates/CMakeSystemConfig.cmake.in, + Templates/CMakeWindowsBorlandConfig.cmake, + Templates/CMakeWindowsSystemConfig.cmake: closer to nmake + working, added CMAKE_MAKE_COMMAND instead of MAKECOMMAND used by + Dart, nmake makefiles work with borland make and nmake + +2001-11-15 14:54 millerjv + + * Modules/Dart.cmake: ENH: New make targets for Continuous builds. + Added a NightlyStart and NightlyUpdate target for unix builds as + well. + +2001-11-15 14:52 millerjv + + * DartConfig.cmake: ENH: Changed Nightly start time + +2001-11-15 09:55 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmNMakeMakefileGenerator.h, cmUnixMakefileGenerator.h, cmake.cxx: + ENH: fix library builds with nmake + +2001-11-15 09:00 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: wrong shortname used + +2001-11-15 08:43 hoffman + + * Source/cmaketest.cxx: BUG: fix build for cygwin + +2001-11-15 08:42 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: avoid .cxx.o names... + +2001-11-14 18:12 hoffman + + * Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h, Source/cmake.cxx, + Source/cmaketest.cxx, Source/cmaketest.h.in, + Templates/CMakeNMakeWindowsSystemConfig.cmake: Closer to nmake + build + +2001-11-14 18:11 hoffman + + * Source/: cmNMakeMakefileGenerator.cxx, + cmNMakeMakefileGenerator.h: closer to nmake build + +2001-11-14 10:21 hoffman + + * Templates/CMakeNMakeWindowsSystemConfig.cmake, + Source/cmNMakeMakefileGenerator.cxx, + Source/cmNMakeMakefileGenerator.h, + Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h: nmake support + +2001-11-14 09:56 king + + * Source/CursesDialog/ccmake.cxx: ERR: Re-ordered includes to fix + macro conflict for gcc 3.0. + +2001-11-14 09:55 king + + * Source/CursesDialog/form/frm_driver.c: ERR: Fixed compiler + warning for gcc 3.0. + +2001-11-14 09:22 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: remove debug statements + +2001-11-13 18:23 hoffman + + * Source/: CMakeLib.dsp, CMakeLists.txt, + cmNMakeMakefileGenerator.cxx, cmNMakeMakefileGenerator.h, + cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: start + work on nmake generator + +2001-11-13 15:54 hoffman + + * Source/: cmUnixMakefileGenerator.h, cmUnixMakefileGenerator.cxx: + clean up object file build rule, and do not attempt to remove + link_directories that are in the build tree + +2001-11-13 14:22 martink + + * Source/: CMakeLists.txt, CursesDialog/CMakeLists.txt: fixes to + curses stuff + +2001-11-13 12:42 hoffman + + * Source/CursesDialog/form/fty_num.c: warnings + +2001-11-13 12:38 hoffman + + * Source/: cmCacheManager.cxx, cmForEachCommand.cxx, + cmIncludeExternalMSProjectCommand.cxx, cmMakefile.cxx, + cmSystemTools.cxx, cmUnixMakefileGenerator.cxx: ENH: clean up + warnings + +2001-11-13 12:21 hoffman + + * Source/cmAddDependenciesCommand.h: ENH: fix spelling error + +2001-11-13 12:21 hoffman + + * Source/CursesDialog/cmCursesMainForm.cxx: ENH: remove warnings + +2001-11-12 15:37 king + + * Source/cmMakeDepend.cxx: ENH: + cmMakeDepend::GenerateDependInformation will now use hints + regardless of whether the actual file exists. This can be used + to add dependencies to .h files which are generated but included + in hand-written .cxx files. If the .cxx does exist, though, it + will be used first, and the hints will be used afterward. + +2001-11-12 09:21 martink + + * Source/cmDSPWriter.cxx: minor fix + +2001-11-10 23:01 ibanez + + * Modules/FindX11.cmake: Module to search for the installation + of X11 + +2001-11-09 16:16 berk + + * Source/CursesDialog/: CMakeLists.txt, ccmake.cxx, ccurses.cxx: + Renaming ccurses to ccmake. + +2001-11-09 16:15 barre + + * Modules/FindSelfPackers.cmake: Self-packers + +2001-11-09 16:05 berk + + * Source/: CMakeLists.txt, CursesDialog/CMakeLists.txt, + CursesDialog/cmCursesStandardIncludes.h, + CursesDialog/form/frm_driver.c, CursesDialog/form/frm_req_name.c: + Trying to fix curses. + +2001-11-09 13:00 martink + + * Source/cmDSPWriter.cxx, Source/cmDSPWriter.h, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: support for custom targets + on exe and lib + +2001-11-09 12:08 bettingf + + * Modules/FindQt.cmake: support for compilation of .ui files into + .h and .cxx files + +2001-11-09 12:07 bettingf + + * Source/: cmQTWrapCPPCommand.cxx, cmQTWrapCPPCommand.h: cleanups + +2001-11-09 12:02 bettingf + + * Source/: cmQTWrapUICommand.h, cmQTWrapUICommand.cxx, + cmCommands.cxx, cmUnixMakefileGenerator.cxx: support for + compilation of .ui files into .h and .cxx files + +2001-11-09 10:42 barre + + * Source/cmAddCustomCommandCommand.cxx: SOURCE, COMMAND, TARGET are + required now + +2001-11-09 10:37 barre + + * Source/cmAddCustomCommandCommand.h: SOURCE, COMMAND, TARGET are + required now + +2001-11-09 10:33 barre + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomCommandCommand.h: Reimplement code. Since a custom + command is very flexible and might be extended in the future, + make all arguments prefixed with arg type, make ordering + irrelevant and potentially all args optional. + +2001-11-08 17:30 berk + + * Source/CursesDialog/form/: frm_driver.c, frm_req_name.c: Trying + to fix curses problems. + +2001-11-08 17:25 berk + + * Source/CursesDialog/form/: frm_driver.c, frm_req_name.c: Fixing + problems with curses headers. + +2001-11-08 17:17 berk + + * Source/CursesDialog/form/: frm_driver.c, frm_req_name.c: Trying + to fix curses problems. + +2001-11-08 17:10 berk + + * Source/CursesDialog/form/form.h: Oops. + +2001-11-08 17:03 berk + + * CMakeLists.txt, Source/CursesDialog/CMakeLists.txt, + Source/CursesDialog/form/CMakeLists.txt, + Source/CursesDialog/form/form.h, + Source/CursesDialog/form/nc_alloc.h: Changes to remove warnings + and fix dependencies. + +2001-11-08 15:09 martink + + * Source/cmDSWWriter.cxx: a better fix maybe + +2001-11-08 14:44 hoffman + + * Source/cmDSWWriter.cxx: make sure custom targets are in the + ALL_BUILD + +2001-11-08 14:34 barre + + * Source/cmAddCustomCommandCommand.cxx: Fix number of params and + expand vars in all args + +2001-11-08 11:50 barre + + * Source/cmSourceFilesCommand.cxx: Fix bug. Was using unexpanded + var instead of copy + +2001-11-08 11:40 barre + + * Source/cmAddLibraryCommand.cxx: Break the "to infinity and + beyond" stuff + +2001-11-08 10:48 barre + + * Source/cmAddLibraryCommand.cxx: Expand var in srclist name too + +2001-11-08 10:40 barre + + * Source/cmSourceFilesCommand.cxx: Expand var in name too + +2001-11-08 09:16 barre + + * Source/cmAddDependenciesCommand.cxx: Expand variables in all + target args + +2001-11-08 08:42 berk + + * Source/cmUnixMakefileGenerator.cxx: Needed to replace srcdir to + make install targets work. + +2001-11-07 17:12 hoffman + + * Templates/: configure, configure.in: put back + CMAKE_TEMPLATE_FLAGS + +2001-11-07 17:04 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: no +=+ + +2001-11-07 16:47 andy + + * Source/: cmAddCustomCommandCommand.cxx, + cmAddCustomCommandCommand.h, cmCommands.cxx: Added accessor for + add custom command + +2001-11-07 16:07 barre + + * Modules/FindUnixCommands.cmake: Add cp (CP) + +2001-11-07 15:57 hoffman + + * configure, configure.in, Source/cmUnixMakefileGenerator.cxx, + Templates/configure, Templates/configure.in: remove template + flags from cmake, no ptused, or -instance=static + +2001-11-07 15:57 hoffman + + * Source/CursesDialog/cmCursesStandardIncludes.h: Trying to fix + curses problems with some systems. + +2001-11-07 15:01 berk + + * Source/CursesDialog/cmCursesStandardIncludes.h: Trying to fix + build problems related to curses. + +2001-11-07 14:55 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: use full source name for + c code as well as c++ + +2001-11-07 14:44 hoffman + + * Source/CursesDialog/ccurses.cxx: use cmake as the executable for + cmake and not ccurses + +2001-11-07 14:44 hoffman + + * Source/cmUnixMakefileGenerator.cxx: make sure default_target is + first + +2001-11-07 13:46 hoffman + + * CMakeLists.txt: ENH: add ansi flag for c compiler + +2001-11-07 12:23 hoffman + + * Source/cmMessageCommand.cxx: Allow multiline messages + +2001-11-07 09:54 hoffman + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + Clean up a bit more + +2001-11-07 09:29 hoffman + + * Source/cmCacheManager.cxx: One more time... case does not matter + on cygwin + +2001-11-06 16:14 hoffman + + * Source/cmExecProgramCommand.h: ENH: fix doc string + +2001-11-06 15:29 bettingf + + * Source/: cmQTWrapCPPCommand.cxx, cmUnixMakefileGenerator.cxx: add + cleaning of QT generated files when make clean is used + +2001-11-06 12:03 hoffman + + * Source/CursesDialog/: ccurses.cxx, cmCursesMainForm.cxx, + cmCursesMainForm.h: ENH: tell cmake object where cmake is + +2001-11-06 09:35 hoffman + + * Source/: cmCableWrapTclCommand.cxx, cmQTWrapCPPCommand.cxx, + cmVTKWrapJavaCommand.cxx, cmVTKWrapPythonCommand.cxx, + cmVTKWrapTclCommand.cxx: BUG: CustomCommand has to use full path + to Source file now + +2001-11-06 08:40 hoffman + + * Source/CursesDialog/form/: fld_type.c, form.h: Removed a function + which used va_start (did not compile on Sun with gcc) + +2001-11-05 22:10 berk + + * Source/CursesDialog/: ccurses.cxx, cmCursesBoolWidget.cxx, + cmCursesLabelWidget.cxx, cmCursesMainForm.cxx, + cmCursesMainForm.h, cmCursesStringWidget.cxx: Many improvements. + +2001-11-05 16:38 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: use full paths for + object compile rules + +2001-11-05 15:55 berk + + * Source/: CMakeLists.txt, CursesDialog/cmCursesMainForm.cxx: + Re-enabling curses support. + +2001-11-05 15:39 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: change to work with + nmake + +2001-11-05 13:22 berk + + * Modules/FindCurses.cmake, Source/CursesDialog/CMakeLists.txt, + Source/CursesDialog/cmCursesForm.h, + Source/CursesDialog/cmCursesLabelWidget.h, + Source/CursesDialog/cmCursesMainForm.h, + Source/CursesDialog/cmCursesWidget.h, + Source/CursesDialog/form/frm_driver.c, + Source/CursesDialog/form/frm_req_name.c, + Source/CursesDialog/cmCursesStandardIncludes.h: HPUX support. + +2001-11-05 12:57 lorensen + + * Source/cmIncludeExternalMSProjectCommand.cxx: ERR: ^M's removed. + +2001-11-05 11:52 berk + + * Source/CursesDialog/form/: CMakeLists.txt, READ.ME, eti.h, + fld_arg.c, fld_attr.c, fld_current.c, fld_def.c, fld_dup.c, + fld_ftchoice.c, fld_ftlink.c, fld_info.c, fld_just.c, fld_link.c, + fld_max.c, fld_move.c, fld_newftyp.c, fld_opts.c, fld_pad.c, + fld_page.c, fld_stat.c, fld_type.c, fld_user.c, form.h, + form.priv.h, frm_cursor.c, frm_data.c, frm_def.c, frm_driver.c, + frm_hook.c, frm_opts.c, frm_page.c, frm_post.c, frm_req_name.c, + frm_scale.c, frm_sub.c, frm_user.c, frm_win.c, fty_alnum.c, + fty_alpha.c, fty_enum.c, fty_int.c, fty_ipv4.c, fty_num.c, + fty_regex.c, llib-lform, mf_common.h, nc_alloc.h: Adding form + library. + +2001-11-05 11:52 berk + + * Source/: CMakeLists.txt, CursesDialog/CMakeLists.txt, + CursesDialog/cmCursesCacheEntryComposite.h, + CursesDialog/cmCursesLabelWidget.h, + CursesDialog/cmCursesMainForm.cxx, + CursesDialog/cmCursesMainForm.h, CursesDialog/cmCursesWidget.h: + Fixing problems on Sun (name collusions between STL and curses) + and disabling curses temporarily. + +2001-11-05 10:42 andy + + * Source/CMakeLists.txt: Fix the IF IF problem + +2001-11-05 08:37 berk + + * Source/CursesDialog/: ccurses.cxx, + cmCursesCacheEntryComposite.cxx, cmCursesCacheEntryComposite.h, + cmCursesLabelWidget.h, cmCursesMainForm.cxx, cmCursesMainForm.h, + cmCursesWidget.h: ERR: To include cmake headers, one should use + ../ + +2001-11-05 05:43 pcp + + * Source/: cmDSPWriter.cxx, cmDSWWriter.cxx: switched + string::compare to strncmp + +2001-11-04 18:10 berk + + * Source/CursesDialog/cmCursesMainForm.h: Need to include standard + headers. + +2001-11-04 18:05 berk + + * Source/CursesDialog/: CMakeLists.txt, cmCursesBoolWidget.h, + cmCursesCacheEntryComposite.h, cmCursesDummyWidget.h, + cmCursesFilePathWidget.h, cmCursesForm.h, cmCursesLabelWidget.h, + cmCursesMainForm.h, cmCursesPathWidget.h, cmCursesStringWidget.h, + cmCursesWidget.h, ccurses.cxx, cmCursesBoolWidget.cxx, + cmCursesCacheEntryComposite.cxx, cmCursesDummyWidget.cxx, + cmCursesFilePathWidget.cxx, cmCursesForm.cxx, + cmCursesLabelWidget.cxx, cmCursesMainForm.cxx, + cmCursesPathWidget.cxx, cmCursesStringWidget.cxx, + cmCursesWidget.cxx: Adding curses support. + +2001-11-04 18:00 berk + + * Modules/FindCurses.cmake, Source/CMakeLists.txt: Adding curses + support. + +2001-11-02 22:32 barre + + * Source/: cmIncludeDirectoryCommand.cxx, + cmIncludeDirectoryCommand.h, cmMakefile.cxx, cmMakefile.h: Add + optional BEFORE param to INCLUDE_DIRECTORIES so that include dirs + can be specified before the actual include dirs + +2001-11-02 16:44 barre + + * Utilities/Doxygen/: CMakeLists.txt, doc_makeall.sh.in: Update + +2001-11-02 16:43 barre + + * Modules/: Documentation.cmake, DocumentationVTK.cmake, + FindCygwin.cmake, FindPerl.cmake, FindUnixCommands.cmake, + FindWget.cmake: Move usual Unix commands to FindUnixCommands, use + FingCygwin in other modules + +2001-11-02 16:05 barre + + * Utilities/: CMakeLists.txt, Doxygen/CMakeLists.txt, + Doxygen/doc_makeall.sh.in, Doxygen/doxyfile.in: Doxygen doc + generator + +2001-11-02 16:01 barre + + * CMakeLists.txt: Doxygen doc generator + +2001-11-02 15:26 blezek + + * Modules/Dart.cmake: ENH: More Experimental targets for unix + +2001-11-02 11:19 pcp + + * Source/: cmDSWWriter.cxx, cmIncludeExternalMSProjectCommand.cxx, + cmDSPWriter.cxx: allow more than one external MS project + +2001-11-02 09:18 andy + + * Source/cmCacheManager.cxx: On win32 path is all in lower case now + +2001-11-01 18:37 hoffman + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + ENH: clean up interface and change build in current directory to + build the depend file first + +2001-11-01 18:36 hoffman + + * Source/cmCacheManager.cxx: BUG: use collapse full path when + testing cache directory + +2001-11-01 18:36 hoffman + + * Source/cmDSPWriter.cxx: ENH: IntDir to INTDIR + +2001-11-01 13:09 barre + + * Source/: cmAddExecutableCommand.cxx, cmAddLibraryCommand.cxx: + Expand vars in exe and lib name + +2001-11-01 10:42 hoffman + + * Source/cmCacheManager.cxx: ENH: clean up drive letter check + +2001-10-31 18:56 king + + * Source/: cmCableClassSet.cxx, cmCableClassSet.h: ENH: Added + automatic detection of >> sequences in template names and + replacement with "> >" in the output. + +2001-10-31 18:56 king + + * Source/cmStandardIncludes.h: ENH: Replaced cmStdString + implementation to make it more transparently a std:string. + +2001-10-31 07:03 pcp + + * Source/: cmCommands.cxx, cmDSPWriter.cxx, cmDSWWriter.cxx, + cmDSWWriter.h, cmIncludeExternalMSProjectCommand.cxx, + cmIncludeExternalMSProjectCommand.h: INCLUDE_EXTERNAL_MSPROJECT + command + +2001-10-30 14:36 andy + + * Source/cmCacheManager.cxx: Fix the problem on windows of capital + or lower case drive letter for CMAKE_CACHEFILE_DIR + +2001-10-30 14:15 andy + + * Source/cmCacheManager.cxx: Change CMAKE_CURRENT_CWD to + CMAKE_CACHEFILE_DIR and change the messages + +2001-10-30 14:05 hoffman + + * Source/: cmConfigureFileCommand.cxx, cmConfigureFileCommand.h, + cmMakefile.cxx, cmMakefile.h: ENH: add an option to configure + file command that allows for only expansion of at variables and + not dollar variables + +2001-10-29 10:41 hoffman + + * Source/cmSystemTools.cxx: ENH: use callback not ifdef for MFC + message box errors + +2001-10-29 10:19 hoffman + + * Source/: cmCacheManager.cxx, cmSystemTools.cxx, cmSystemTools.h: + ENH: add callback for message display + +2001-10-26 18:21 hoffman + + * Modules/FindITK.cmake: [no log message] + +2001-10-26 17:06 berk + + * Templates/: CMakeSystemConfig.cmake.in, configure, configure.in: + added CMAKE_NO_EXPLICIT_TEMPLATE_INSTANTIATION + +2001-10-26 15:42 hoffman + + * Source/: cmConfigureFileCommand.cxx, cmMakefile.h, cmaketest.cxx: + add dependency for configure files and use short path in WIN32 + cmake test + +2001-10-26 14:35 hoffman + + * Modules/FindVTK.cmake: use find_file and not just a set for + USE_VTK_FILE + +2001-10-26 11:22 barre + + * Modules/DocumentationVTK.cmake: VTK documentation framework + +2001-10-26 09:29 andy + + * Source/cmCacheManager.cxx: Added check if the binary directory + changed. If it did, it will print the warning message + +2001-10-24 20:37 barre + + * Modules/FindCygwin.cmake: Add GZIP (gzip) + +2001-10-24 20:33 barre + + * Modules/FindCygwin.cmake: Add TAR (path to tar or gtar) + +2001-10-24 17:51 berk + + * Source/cmUnixMakefileGenerator.cxx: ENH: allow -framework as a + complete entry in the link line for Mac OSX + +2001-10-24 15:51 berk + + * DartConfig.cmake: public no longer has anonymous ftp. + +2001-10-24 09:41 king + + * Modules/FindGCCXML.cmake: ENH: Improved FIND_PROGRAM call to find + the executable in PREFIX/share/GCC_XML, the new standard install + location. + +2001-10-23 18:30 barre + + * Modules/FindCygwin.cmake: Cygwin mod + +2001-10-23 17:49 barre + + * Source/: cmGetFilenameComponentCommand.cxx, + cmGetFilenameComponentCommand.h: The result of this utility + command can now be optionally added to the cache + +2001-10-23 17:47 barre + + * Modules/FindDoxygen.cmake: Find Graphivz's dot too + +2001-10-23 17:06 barre + + * Modules/: FindDoxygen.cmake, FindWget.cmake: Add Doxygen and Wget + modules. Very simple. But might be more complex later, so let's + use them asap + +2001-10-23 16:55 barre + + * Modules/: FindHhc.cmake, FindPerl.cmake: Modules to find Perl and + the HTML Help Compiler + +2001-10-19 10:07 barre + + * Source/cmEnableTestingCommand.h: Add warning regarding the + location of ENABLE_TESTING (should be in the top CMakeList.txt, + otherwise Dart is lost) + +2001-10-18 18:01 barre + + * Source/cmSiteNameCommand.cxx: SITE_NAME should return the most + qualified name of the host. If nslookup works, now the domain is + appended to the hostname (whereas it *replaced* the host name + before) + +2001-10-18 13:51 iscott + + * Source/cmQTWrapCPPCommand.cxx: Detect error and output useful + message Previously it would have got confused about the + destinationSourceGroup + +2001-10-18 13:03 iscott + + * Source/cmFindFileCommand.cxx: This command should always set the + cahce variabel to a filepath not a path + +2001-10-17 15:11 barre + + * Source/cmProjectCommand.cxx: Add PROJECT_NAME to the set of + definitions + +2001-10-16 15:40 iscott + + * Modules/FindQt.cmake: fixed some stupid mistakes I thought I had + tested these - honest + +2001-10-16 15:32 iscott + + * Modules/: FindQt.cmake, LinkQT.cmake: Some simple modules for + finding and linking qt + +2001-10-15 18:37 hoffman + + * Source/cmMessageCommand.cxx: ENH: expand variables in message + command output + +2001-10-15 18:36 hoffman + + * Source/cmSourceFile.cxx: ENH: clean up error report for source + files not found + +2001-10-15 14:19 iscott + + * CMake.rtf, Source/cmCommands.cxx, Source/cmQTWrapCPPCommand.cxx, + Source/cmQTWrapCPPCommand.h: added a QT_WRAP_CPP command + +2001-10-11 17:20 king + + * Source/cmCableWrapTclCommand.cxx: ENH: Improved parsing of + GCCXML_FLAGS to improve generation of gccxml rule. Also added + ADD_DEFINITIONS arguments to the generated rule. + +2001-10-11 14:57 andy + + * Source/cmCacheManager.cxx: Added removing of spaces in + CMakeCache.txt in front of comments and variables + +2001-10-10 10:22 hoffman + + * Source/cmCacheManager.cxx: ENH: add a warning comment for cache + values that can not be changed because they are always loaded + from another cache + +2001-10-09 22:18 biddi + + * Source/cmBorlandMakefileGenerator.cpp: FIX: Same as last checkin + except applies to bpi files as wellas lib files If we can't find + it - and it's not a target - and it has no path already + specified, it must be in OUTDIRLIB from another makefile in the + same project ! (What this really means is the lib paths are + correctly specified) + +2001-10-09 10:25 hoffman + + * Source/cmSystemTools.cxx: ENH: better fix for dos return in + lines, use the regular expression and don't edit the input line + +2001-10-05 17:31 hoffman + + * Source/cmSystemTools.cxx: ENH: clean up returns from input, so we + can read dos files on unix + +2001-10-04 09:32 starreveld + + * Templates/: configure, configure.in: + + ERR: remove undefined warning for compatibility with new 10.1 + linker + +2001-10-03 15:49 hoffman + + * Modules/Dart.cmake, Source/CMakeLists.txt, Source/cmake.cxx, + Source/cmaketest.cxx: ENH: fixes for borland compiler testing + +2001-10-03 11:36 king + + * Modules/FindCABLE.cmake: ENH: Changed CABLE_BUILD_DIR to look for + cableVersion.h instead of cable.README.txt. + +2001-10-02 23:10 biddi + + * Source/cmBorlandMakefileGenerator.cpp: FIX:if we can't find it - + and it's not a target - and it has no path already specified, it + must be in OUTDIRLIB from another makefile in the same project ! + (What this really means is the lib paths are correctly specified) + +2001-10-02 17:28 hoffman + + * Source/: cmListFileCache.cxx, cmMakefile.cxx, cmSystemTools.cxx, + cmSystemTools.h, ctest.cxx: ENH: add better error reports in + parsing cmake files, like what file has the error + +2001-10-01 13:35 martink + + * Source/: cmMakefile.h: version + +2001-10-01 13:26 hoffman + + * ChangeLog.txt: [no log message] + +2001-10-01 11:55 hoffman + + * Source/cmaketest.cxx: BUG: add missing include + +2001-10-01 10:14 hoffman + + * Source/cmaketest.cxx: ENH: change checkboxes back to pull down + menus, remove leak + +2001-09-29 11:12 hoffman + + * Source/cmSystemTools.cxx: BUG: fix full path for file in current + directory + +2001-09-28 13:35 berk + + * Source/cmSystemTools.cxx: BUG: fix realpath problem again... + +2001-09-28 12:14 berk + + * Source/cmSystemTools.cxx: BUG: separate path from file name + before calling realpath + +2001-09-28 10:40 hoffman + + * Source/: cmSystemTools.cxx, cmUnixMakefileGenerator.cxx: BUG: get + correct library name + +2001-09-28 10:34 hoffman + + * CMakeLists.txt: BUG: optional in wrong order + +2001-09-28 09:57 hoffman + + * CMakeLists.txt: make the include of the initial config flags + optional, for builds that do not use configure + +2001-09-27 16:50 hoffman + + * Source/: cmSystemTools.cxx, cmUnixMakefileGenerator.cxx: BUG: use + realpath instead of cd/pwd + +2001-09-27 15:54 hoffman + + * CMakeLists.txt, Source/CMakeLists.txt: BUG: fix install prefix + +2001-09-27 14:58 hoffman + + * configure, configure.in, Source/CMakeLists.txt, + Source/InitialConfigureFlags.cmake.in: ENH: pass prefix from + configure into cmake + +2001-09-26 16:23 berk + + * Modules/Dart.cmake: Typo. + +2001-09-25 14:39 martink + + * Modules/FindVTK.cmake: changes to chamghe + +2001-09-25 11:06 martink + + * Source/cmVTKWrapTclCommand.cxx: memory leak + +2001-09-21 11:48 martink + + * Modules/FindVTK.cmake: better install targets + +2001-09-21 09:40 king + + * Source/cmSystemTools.cxx: BUG: CopyFile should return immediately + after an error occurs. + +2001-09-20 17:31 martink + + * Modules/FindVTK.cmake: updates + +2001-09-20 16:43 berk + + * Source/ctest.cxx: handle spaces in commands and args + +2001-09-20 15:08 hoffman + + * Source/: cmAbstractFilesCommand.cxx, cmAbstractFilesCommand.h, + cmAddCustomTargetCommand.cxx, cmAddCustomTargetCommand.h, + cmAddDefinitionsCommand.cxx, cmAddDefinitionsCommand.h, + cmAddDependenciesCommand.cxx, cmAddDependenciesCommand.h, + cmAddExecutableCommand.cxx, cmAddExecutableCommand.h, + cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, + cmAddTestCommand.cxx, cmAddTestCommand.h, + cmAuxSourceDirectoryCommand.cxx, cmAuxSourceDirectoryCommand.h, + cmBuildCommand.cxx, cmBuildCommand.h, cmBuildNameCommand.cxx, + cmBuildNameCommand.h, cmCableClassSetCommand.cxx, + cmCableClassSetCommand.h, cmCableWrapTclCommand.cxx, + cmCableWrapTclCommand.h, cmCommand.h, cmConfigureFileCommand.cxx, + cmConfigureFileCommand.h, cmConfigureGccXmlCommand.cxx, + cmConfigureGccXmlCommand.h, cmElseCommand.cxx, cmElseCommand.h, + cmEnableTestingCommand.h, cmEndForEachCommand.cxx, + cmEndForEachCommand.h, cmEndIfCommand.cxx, cmEndIfCommand.h, + cmExecProgramCommand.cxx, cmExecProgramCommand.h, + cmFindFileCommand.cxx, cmFindFileCommand.h, + cmFindLibraryCommand.cxx, cmFindLibraryCommand.h, + cmFindPathCommand.cxx, cmFindPathCommand.h, + cmFindProgramCommand.cxx, cmFindProgramCommand.h, + cmForEachCommand.cxx, cmForEachCommand.h, + cmGetFilenameComponentCommand.cxx, + cmGetFilenameComponentCommand.h, cmIfCommand.cxx, cmIfCommand.h, + cmIncludeCommand.cxx, cmIncludeCommand.h, + cmIncludeDirectoryCommand.cxx, cmIncludeDirectoryCommand.h, + cmIncludeRegularExpressionCommand.cxx, + cmIncludeRegularExpressionCommand.h, cmInstallFilesCommand.cxx, + cmInstallFilesCommand.h, cmInstallProgramsCommand.cxx, + cmInstallProgramsCommand.h, cmInstallTargetsCommand.cxx, + cmInstallTargetsCommand.h, cmLibraryCommand.h, + cmLinkDirectoriesCommand.cxx, cmLinkDirectoriesCommand.h, + cmLinkLibrariesCommand.cxx, cmLinkLibrariesCommand.h, + cmLoadCacheCommand.cxx, cmLoadCacheCommand.h, + cmMakeDirectoryCommand.cxx, cmMakeDirectoryCommand.h, + cmMakefile.cxx, cmMakefile.h, cmMessageCommand.cxx, + cmMessageCommand.h, cmOptionCommand.cxx, cmOptionCommand.h, + cmOutputRequiredFilesCommand.cxx, cmOutputRequiredFilesCommand.h, + cmProjectCommand.cxx, cmProjectCommand.h, cmSetCommand.cxx, + cmSetCommand.h, cmSiteNameCommand.cxx, cmSiteNameCommand.h, + cmSourceFilesCommand.cxx, cmSourceFilesCommand.h, + cmSourceFilesRemoveCommand.cxx, cmSourceFilesRemoveCommand.h, + cmSourceGroupCommand.cxx, cmSourceGroupCommand.h, + cmSubdirCommand.cxx, cmSubdirCommand.h, + cmSubdirDependsCommand.cxx, cmSubdirDependsCommand.h, + cmTargetLinkLibrariesCommand.cxx, cmTargetLinkLibrariesCommand.h, + cmUseMangledMesaCommand.cxx, cmUseMangledMesaCommand.h, + cmUtilitySourceCommand.cxx, cmUtilitySourceCommand.h, + cmVTKWrapJavaCommand.cxx, cmVTKWrapJavaCommand.h, + cmVTKWrapPythonCommand.cxx, cmVTKWrapPythonCommand.h, + cmVTKWrapTclCommand.cxx, cmVTKWrapTclCommand.h, + cmWrapExcludeFilesCommand.cxx, cmWrapExcludeFilesCommand.h: ENH: + change InitialPass to take a const reference to the argument + string, to avoid changes to the file cache + +2001-09-20 13:44 martink + + * Source/cmMakefile.cxx: BUG: make a copy of the arguments before + passing them to Execute + +2001-09-20 12:00 martink + + * CMake.rtf: fixed some problems + +2001-09-20 10:57 king + + * Modules/FindCABLE.cmake: ENH: Added support for finding cable + when it is built in a configuration subdirectory by MSVC. + +2001-09-20 10:54 king + + * Source/: cmFindFileCommand.cxx, cmFindLibraryCommand.cxx, + cmFindPathCommand.cxx, cmFindProgramCommand.cxx, + cmSystemTools.cxx, cmSystemTools.h: ENH: Added + cmSystemTools::GlobDirs function to allow wildcards in paths + (like /foo/bar/*). + +2001-09-20 10:53 king + + * Source/cmSetCommand.cxx: ENH: Added extra newline in an error + message to improve readability. + +2001-09-20 10:27 martink + + * Modules/FindVTK.cmake: minor changes + +2001-09-20 09:11 martink + + * Modules/: FindVTK.cmake, UseVTKIncludes.cmake, + UseVTKLibraries.cmake: removed some VTK stuff + +2001-09-19 14:52 martink + + * Modules/: FindVTK.cmake, UseVTKIncludes.cmake, + UseVTKLibraries.cmake: updated to how FindVTK works + +2001-09-19 14:20 martink + + * Source/cmMakefile.h: version rev to 95 + +2001-09-19 14:20 martink + + * Source/cmMakefile.h: version rev to 94 + +2001-09-18 10:45 hoffman + + * ChangeLog.txt: [no log message] + +2001-09-18 10:38 will + + * CMake.pdf: ENH:Updated documentation + +2001-09-17 17:40 hoffman + + * CMake.rtf: ENH: update for new version + +2001-09-17 16:36 hoffman + + * Source/: cmUseMangledMesaCommand.cxx, cmUseMangledMesaCommand.h: + ENH: change to take a path as input + +2001-09-17 16:34 hoffman + + * Source/cmFindFileCommand.cxx: BUG: fix return when file is not + found + +2001-09-17 14:16 king + + * Modules/FindCABLE.cmake: ENH: Added find support for looking at + Cable's build directory if the user sets the CABLE_BUILD_DIR + cache entry. + +2001-09-17 13:58 hoffman + + * Source/: cmCommands.cxx, cmUseMangledMesaCommand.cxx, + cmUseMangledMesaCommand.h: ENH: add Use mangled mesa command + +2001-09-17 12:07 blezek + + * Modules/Dart.cmake: ENH: NightlyCoverage got lost + +2001-09-14 16:36 martink + + * Source/: cmVTKWrapTclCommand.cxx, cmVTKWrapJavaCommand.cxx, + cmVTKWrapPythonCommand.cxx: now uses five argument version of + wrap commands + +2001-09-14 16:26 hoffman + + * Source/: cmMakefileGenerator.cxx, cmStandardIncludes.h, + cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h, + cmakemain.cxx: remove memory leaks + +2001-09-14 15:18 hoffman + + * Source/cmDSPWriter.cxx: fix error in cygwin + +2001-09-14 15:18 hoffman + + * Source/cmListFileCache.h: initialize class + +2001-09-14 15:18 hoffman + + * Source/: cmMakefileGenerator.cxx, cmMakefileGenerator.h: add + support for clean up + +2001-09-14 10:14 martink + + * Templates/: DLLHeader.dsptemplate, EXEHeader.dsptemplate, + EXEWinHeader.dsptemplate, UtilityHeader.dsptemplate, + staticLibHeader.dsptemplate: made Debug the default configuration + +2001-09-14 08:34 barre + + * Modules/FindTCL.cmake: move cygtclsh80 to the end of list, + otherwise it might be found while the non-cygwin wish8x.exe will + be found too. If wish8x.exe is found, then the non-cygwin + tclsh8x.exe must be found too. + +2001-09-13 14:45 martink + + * Modules/Dart.cmake: added back some targets for UNIX + +2001-09-13 11:27 martink + + * Source/: cmSystemTools.h, cmSystemTools.cxx: added shortest ext + function + +2001-09-12 17:09 lorensen + + * Source/cmSiteNameCommand.cxx: ENH: drop the case of the site + name. This makes it consistent with Dart's usage. + +2001-09-12 17:09 lorensen + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added LowerCase + method. + +2001-09-12 15:18 king + + * Source/: cmCableWrapTclCommand.cxx, cmCableWrapTclCommand.h: ENH: + Added parsing of gccxml flags into separate arguments for setting + the custom command. This is necessary since the custom command + now takes a vector of individual command line options instead of + a single string. + +2001-09-11 21:46 biddi + + * Templates/CMakeWindowsBorlandConfig.cmake: ERR: Spelling + +2001-09-11 21:45 biddi + + * Source/: cmBorlandMakefileGenerator.cpp, + cmBorlandMakefileGenerator.h, cmSystemTools.cxx: ERR: Change to + EscapeSpaces forces rework of Borland generator Add clause + to prevent adding quotes when they're already present, then stuff + them onto all lib paths to prevent forward slashes causing + trouble. + +2001-09-11 20:00 biddi + + * Source/: cmBorlandMakefileGenerator.cpp, + cmBorlandMakefileGenerator.h: ENH: Major fix of the Borland + generator which addresses the problem of libraries with + dependencies (other libraries) not linking when required. + Dependency checking required the full path to be supplied to each + file when they're not in the current directory (very tedious). + All seems to be working nicely now. + +2001-09-11 19:58 biddi + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Add a findfile + routine (as opposed to find executable or library) which doesn't + add any extensions - Borland make needs full paths to certain + dependencies otherwise linking doesn't work properly + (dependencies aren't checked) + +2001-09-11 15:17 martink + + * Source/ctest.cxx: updated testing + +2001-09-11 14:58 martink + + * Source/cmDSPWriter.cxx: include fixes + +2001-09-11 14:43 martink + + * Modules/Dart.cmake: reduced the number of targets + +2001-09-11 14:42 martink + + * Source/cmaketest.cxx: bug in testing code + +2001-09-11 13:44 hoffman + + * Source/cmBorlandMakefileGenerator.cpp: BUG: fix build with + non-borland compiler + +2001-09-11 13:40 martink + + * Source/cmDSPWriter.cxx: fix for include paths + +2001-09-10 15:11 martink + + * Modules/Dart.cmake: reduced targets and merged tclsh commands + +2001-09-10 15:11 martink + + * Source/: cmCableWrapTclCommand.cxx, cmDSPWriter.cxx, + cmMakefile.cxx, cmMakefile.h, cmSystemTools.cxx, + cmVTKWrapJavaCommand.cxx, cmVTKWrapPythonCommand.cxx, + cmVTKWrapTclCommand.cxx: various windows fixes + +2001-09-10 11:03 berk + + * Source/CMakeLists.txt: Typo in link command. + +2001-09-08 12:09 biddi + + * Source/: cmBorlandMakefileGenerator.cpp, + cmBorlandMakefileGenerator.h: ERR: Forgot to put back a backslash + +2001-09-08 10:02 biddi + + * Source/cmBorlandMakefileGenerator.cpp: ERR: LINK_DIR must ot have + backslah at end. Fix plus cleanup of some code. + +2001-09-07 10:08 martink + + * Source/cmDirectory.cxx: fixed bug in mismatched directory opens + consuming file descriptors + +2001-09-07 09:40 king + + * Source/cmConfigureGccXmlCommand.cxx: ENH: Removed addition of + compiler support directory include option since the + find_*_options scripts now include it automatically. + +2001-09-06 18:02 hoffman + + * Source/: CMakeLists.txt, cmBorlandMakefileGenerator.cpp: BUG: + clean up lib and exe output paths + +2001-09-06 17:28 hoffman + + * Source/CMakeLib.dsp, Source/cmBorlandMakefileGenerator.cpp, + Source/cmBorlandMakefileGenerator.h, + Source/cmMSProjectGenerator.h, Source/cmMakefileGenerator.cxx, + Source/cmMakefileGenerator.h, Source/cmUnixMakefileGenerator.h, + Source/cmake.cxx, Source/cmake.h, + Templates/CMakeWindowsBorlandConfig.cmake: ENH: integrate borland + support + +2001-09-04 16:29 biddi + + * Source/cmBorlandMakefileGenerator.cpp, + Source/cmBorlandMakefileGenerator.h, + Templates/CMakeWindowsBorlandConfig.cmake: NEW: First check in of + Borland Makefile Generator and template stuff + +2001-09-04 16:07 hoffman + + * Source/: cmAddCustomTargetCommand.cxx, cmCustomCommand.cxx, + cmCustomCommand.h, cmDSPWriter.cxx, cmDSWWriter.cxx, + cmMakefile.cxx, cmMakefile.h, cmSourceGroup.cxx, cmSourceGroup.h, + cmVTKWrapJavaCommand.cxx: ENH: separate command from its + arguments in the custom command. This allows the generator on + windows to change the slashes for just the command + +2001-09-01 17:13 biddi + + * Source/cmBuildCommand.cxx: ENH: Added a clause for Borland + compiler compatibility + +2001-09-01 16:56 barre + + * Source/cmDSPWriter.cxx: Convert path format back to Windows + slashes syntax. Mandatory for Win98 build. + +2001-09-01 16:55 barre + + * Source/cmSystemTools.cxx: fix comment pb + +2001-09-01 16:13 biddi + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Windows and + Unix slash conversions return a char*, clean function seperated + from Convert function + +2001-09-01 16:12 biddi + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: ExpandVariables + functions return a char * for convenience + +2001-08-31 21:10 starreveld + + * Source/cmUnixMakefileGenerator.cxx: + + ENH: Generate compile lines for .m, .M, and .mm files (ObjC and + ObjC++) + +2001-08-30 17:32 hoffman + + * Source/cmMakefile.cxx: BUG: fix incorrect deletion of function + blockers + +2001-08-30 16:19 martink + + * Source/: cmMakefile.h: version rev + +2001-08-30 16:06 hoffman + + * ChangeLog, ChangeLog.txt: [no log message] + +2001-08-30 15:54 hoffman + + * ChangeLog.txt: ENH: add autogenerated changelog + +2001-08-29 17:21 hoffman + + * Source/cmake.cxx: opps + +2001-08-29 17:11 king + + * Source/cmConfigureGccXmlCommand.cxx: BUG: GCCXML_FLAGS found from + find_gcc_options or find_mpro_options should have the trailing + newline stripped from the string. + +2001-08-29 17:10 king + + * Source/cmCableWrapTclCommand.cxx: ENH: Updated generated + dependencies since cable's installation directory now uses + separate CxxTypes and WrapTclFacility subdirecories for includes. + +2001-08-29 17:08 king + + * Modules/FindCABLE.cmake: ENH: Updated library finding code to + handle new cable installation directory structure. It now uses + separate directories for CxxTypes and WrapTclFacility headers. + +2001-08-29 16:42 martink + + * Source/: ctest.cxx, ctest.h: added regexp option + +2001-08-29 16:13 hoffman + + * Source/: CMakeLib.dsp, DumpDocumentation.dsp, cmake.dsp, + ctest.dsp: remove /ZI + +2001-08-29 15:57 hoffman + + * Source/: cmake.cxx, cmaketest.cxx: ENH: run cmake from cmaketest + +2001-08-29 10:47 king + + * Source/cmMakefile.h: ENH: Added a const version of + GetLinkLibraries(). + +2001-08-29 10:46 king + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + ENH: Proper dependencies between shared libraries now exist in + the generated makefiles. If a shared library links to another, + the other will be built before the link is attempted. + +2001-08-29 09:57 hoffman + + * Source/cmMakefile.cxx: clean up a bit + +2001-08-29 09:44 berk + + * Source/cmSystemTools.cxx: BUG: fix out of bounds read on string + in mkdir + +2001-08-29 09:26 perera + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Special value + IGNORE behaves like NOTFOUND, but makes FindLibrary, etc, _not_ + search for a library, etc. + +2001-08-28 18:35 hoffman + + * Source/cmListFileCache.h: remove warning + +2001-08-28 18:28 hoffman + + * Source/: CMakeLib.dsp, CMakeLists.txt, CMakeSetup.dsw, + Makefile.in, cmListFileCache.cxx, cmListFileCache.h, + cmMakefile.cxx: ENH: add caching for the input CMakeList.txt + files, 2X speed up + +2001-08-28 18:27 hoffman + + * Source/cmDSPWriter.cxx: BUG: put spaces in /I paths + +2001-08-28 18:02 starreveld + + * Source/: cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, + cmMakefile.cxx, cmMakefile.h, cmTarget.h, + cmUnixMakefileGenerator.cxx: + + Changes to allow MODULE type target for a shared library + +2001-08-28 18:01 starreveld + + * Templates/: CMakeSystemConfig.cmake.in, configure, configure.in: + + Changes to allow a MODULE target for a shared library. + +2001-08-28 16:04 martink + + * CMakeLists.txt, Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: minor fix + +2001-08-28 14:55 martink + + * Source/: cmDSPWriter.cxx, cmSystemTools.cxx, cmSystemTools.h: + better network build support + +2001-08-28 13:49 starreveld + + * Templates/: configure, configure.in: + + Added support for Darwin (OSX) + +2001-08-28 10:57 hoffman + + * Modules/FindTCL.cmake: ENH: support for cygwin + +2001-08-28 10:57 hoffman + + * Source/: cmSystemTools.cxx, cmUnixMakefileGenerator.cxx: BUG: fix + for broken apple mkdir and general clean up of MakeDirectory + command + +2001-08-27 15:19 martink + + * Source/cmDSPWriter.cxx: support for network path link libraries + +2001-08-27 14:44 hoffman + + * Source/: cmMakefile.cxx, cmMakefile.h, + cmUnixMakefileGenerator.cxx: ENH: change expand variables to use + GetDefinition + +2001-08-27 14:38 hoffman + + * configure, configure.in: [no log message] + +2001-08-27 14:35 hoffman + + * configure, configure.in, Source/Makefile.in: ENH: clean up sgi + build and use non-broken autoconf + +2001-08-27 12:24 hoffman + + * configure, Source/cmUnixMakefileGenerator.cxx, + Templates/configure: [no log message] + +2001-08-27 11:03 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: set CXX and CC when + running configure from cmake + +2001-08-27 10:23 martink + + * Source/ctest.cxx: better formatted output + +2001-08-27 10:22 hoffman + + * Templates/: configure, configure.in: ENH: use ANSI_CXXFLAGS for + testing compiler + +2001-08-27 10:11 hoffman + + * CMakeLists.txt, Templates/CMakeSystemConfig.cmake.in, + Templates/configure, Templates/configure.in, + Tests/Complex/CMakeLists.txt, + Tests/ComplexOneConfig/CMakeLists.txt, + Tests/ComplexRelativePaths/CMakeLists.txt: ENH: sgi -LANG:std + +2001-08-27 10:07 berk + + * Source/CMakeSetup.dsw: ken added dependancy to build everything + +2001-08-25 12:31 martink + + * Source/: CMakeSetup.dsw, ctest.dsp: added ctest to win32 + +2001-08-24 17:50 hoffman + + * Templates/: configure, configure.in: [no log message] + +2001-08-24 17:30 hoffman + + * Templates/: CMakeSystemConfig.cmake.in, configure, configure.in: + ENH: more sgi -LANG stuff + +2001-08-24 17:25 hoffman + + * configure, configure.in: auto detect lang:std: + +2001-08-24 17:17 hoffman + + * Source/Makefile.in: ENH: build for sgi CC out of box + +2001-08-24 17:12 hoffman + + * configure, configure.in: auto detect lang:std: + +2001-08-24 17:00 hoffman + + * configure, configure.in: auto detect lang:std: + +2001-08-24 16:51 hoffman + + * configure, configure.in: auto detect lang:std: + +2001-08-24 15:54 hoffman + + * Tests/: Complex/cmTestConfigure.h.in, + Complex/Executable/complex.cxx, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/Executable/complex.cxx, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/Executable/complex.cxx: BUG: fix complex + test for old compilers + +2001-08-24 15:45 hoffman + + * configure, configure.in, Tests/Complex/cmTestConfigure.h.in, + Tests/ComplexOneConfig/cmTestConfigure.h.in, + Tests/ComplexRelativePaths/cmTestConfigure.h.in: BUG: fix for SGI + Native compiler + +2001-08-24 15:41 hoffman + + * Templates/: configure, configure.in: BUG: fix flag for building + shared on HP + +2001-08-23 18:30 perera + + * Source/: cmAddTestCommand.cxx, cmAddTestCommand.h: BUG: ADD_TEST + now only does stuff if ENABLE_TESTING has been run. + +2001-08-23 18:02 hoffman + + * Source/: cmMakefile.cxx, cmSystemTools.cxx, cmSystemTools.h: ENH: + improve coverage + +2001-08-23 17:40 hoffman + + * Source/: CMakeLists.txt, cmDumpDocumentation.cxx, cmMakefile.cxx, + cmMakefile.h: ENH: add dump documentation test + +2001-08-23 16:28 king + + * Source/: cmCableWrapTclCommand.cxx, cmCableWrapTclCommand.h: ENH: + Each cmCableWrapTclCommand instance now uses a single + cmMakeDepend object for dependencies for all the gccxml input + files it generates. This should significantly improve generation + time. + +2001-08-23 16:24 hoffman + + * Source/cmaketest.cxx: BUG: run make all on unix not make exename + +2001-08-23 16:00 hoffman + + * Source/: CMakeLists.txt, cmStandardIncludes.h, cmaketest.cxx, + ctest.cxx: ENH: add more testing + +2001-08-23 13:57 hoffman + + * Tests/: Complex/CMakeLists.txt, Complex/VarTests.txt, + Complex/cmTestConfigure.h.in, Complex/simple.cxx, + Complex/Executable/CMakeLists.txt, + Complex/Executable/complex.cxx, Complex/Library/CMakeLists.txt, + Complex/Library/file2.cxx, Complex/Library/file2.h, + Complex/Library/sharedFile.cxx, Complex/Library/sharedFile.h, + Complex/Library/ExtraSources/file1.cxx, + Complex/Library/ExtraSources/file1.h, + ComplexOneConfig/CMakeLists.txt, ComplexOneConfig/VarTests.txt, + ComplexOneConfig/cmTestConfigure.h.in, + ComplexOneConfig/simple.cxx, + ComplexOneConfig/Executable/CMakeLists.txt, + ComplexOneConfig/Executable/complex.cxx, + ComplexOneConfig/Library/CMakeLists.txt, + ComplexOneConfig/Library/file2.cxx, + ComplexOneConfig/Library/file2.h, + ComplexOneConfig/Library/sharedFile.cxx, + ComplexOneConfig/Library/sharedFile.h, + ComplexOneConfig/Library/ExtraSources/file1.cxx, + ComplexOneConfig/Library/ExtraSources/file1.h, + ComplexRelativePaths/CMakeLists.txt, + ComplexRelativePaths/VarTests.txt, + ComplexRelativePaths/cmTestConfigure.h.in, + ComplexRelativePaths/simple.cxx, + ComplexRelativePaths/Executable/CMakeLists.txt, + ComplexRelativePaths/Executable/complex.cxx, + ComplexRelativePaths/Library/CMakeLists.txt, + ComplexRelativePaths/Library/file2.cxx, + ComplexRelativePaths/Library/file2.h, + ComplexRelativePaths/Library/sharedFile.cxx, + ComplexRelativePaths/Library/sharedFile.h, + ComplexRelativePaths/Library/ExtraSources/file1.cxx, + ComplexRelativePaths/Library/ExtraSources/file1.h: ENH: try to + get better test coverage + +2001-08-23 13:12 martink + + * Source/ctest.cxx: also check path for test executables + +2001-08-23 11:39 martink + + * Source/ctest.cxx: fixed format + +2001-08-23 11:32 martink + + * Source/cmUnixMakefileGenerator.cxx: better ctest support + +2001-08-23 11:12 martink + + * Source/: CMakeLists.txt, cmSystemTools.cxx, cmSystemTools.h, + cmUnixMakefileGenerator.cxx, ctest.cxx, ctest.h: added test + driver for make test target + +2001-08-22 16:33 martink + + * Source/cmDSPWriter.cxx: ENH: do not put a rule in to rebuild the + ALL_BUILD.dsp file, as it is not possible... + +2001-08-22 11:58 hoffman + + * Source/: cmCableClassSet.h, cmCableWrapTclCommand.cxx, + cmCacheManager.cxx, cmCacheManager.h, cmMakeDepend.h, + cmMakefile.h, cmSourceGroup.h, cmStandardIncludes.h, cmTarget.h, + cmUnixMakefileGenerator.cxx: ENH: change all maps of string to be + maps of cmStdString, to reduce symbol length in object files. + +2001-08-22 11:26 hoffman + + * Source/cmMakefile.h: BUG: shorten length of symbols + +2001-08-22 10:12 berk + + * Source/cmDSPWriter.cxx: OUTDIR->IntDir + +2001-08-21 11:04 starreveld + + * Source/cmMakefile.cxx: + + Added support for .mm source files (ObjC++) + +2001-08-20 13:32 hoffman + + * Templates/: configure, configure.in: BUG: fix check for no std:: + +2001-08-20 09:23 hoffman + + * Source/cmSetCommand.cxx: BUG: cmSystemTools::CollapseFullPath is + a bad thing to call on the compiler which is a filepath + +2001-08-19 19:11 barre + + * Source/cmOptionCommand.cxx: Allow option value to be expanded + (thus, we can use the value of another option as default) + +2001-08-19 12:14 barre + + * Source/cmMakefile.cxx: gcc and MSVC clash on + basic_string::compare(), let's try substr() + +2001-08-19 07:36 barre + + * Source/cmSetCommand.cxx: If the value is a path, collapse it + (cleaner) + +2001-08-18 17:57 hoffman + + * Templates/: configure, configure.in: BUG: get the flags right + +2001-08-18 12:51 barre + + * Source/cmMakefile.cxx, Modules/FindDart.cmake: Support for + $ENV{VAR} syntax (lookup in the environment vars) + +2001-08-17 17:11 martink + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx: backwards MATCHES in + if and else statements + +2001-08-16 18:01 hoffman + + * Templates/configure: ENH: default for cygwin should be pthreads + +2001-08-16 17:42 hoffman + + * Templates/: CMakeSystemConfig.cmake.in, + CMakeWindowsSystemConfig.cmake, configure, configure.in: ENH: add + CMAKE_USE_WIN32_THREADS to the possible thread types + +2001-08-16 11:41 berk + + * Source/: cmCacheManager.cxx, cmCacheManager.h, + cmLoadCacheCommand.cxx, cmLoadCacheCommand.h: Adding new options + to LoadCache. + +2001-08-15 13:40 berk + + * Source/: cmCacheManager.cxx, cmCacheManager.h, + cmLoadCacheCommand.cxx: 1. Added EXCLUDE option to LOAD_CACHE. + 2. Entries brought in from another cache are now marked as + internal. + +2001-08-15 13:23 martink + + * Modules/FindDart.cmake: looks at same level + +2001-08-15 10:03 hoffman + + * Templates/: configure, configure.in: ENH: make pthreads the + default for cygwin + +2001-08-14 17:18 king + + * Source/: cmInstallFilesCommand.cxx, cmInstallFilesCommand.h, + cmInstallProgramsCommand.cxx, cmInstallProgramsCommand.h, + cmMakefile.cxx: ENH: Improved INSTALL_FILES and INSTALL_PROGRAMS + commands to allow each call to the command in a single directory + to specify a different install path. + +2001-08-13 16:04 martink + + * Modules/Dart.cmake: removed grep + +2001-08-10 15:52 martink + + * Source/: cmVTKWrapTclCommand.cxx, cmMakefile.h: now creates + output directories + +2001-08-09 15:35 hoffman + + * CMake.pdf: ENH: update pdf to rtf + +2001-08-09 15:23 hoffman + + * CMake.rtf: ENH: add some docs for sgi CC + +2001-08-09 14:58 berk + + * Source/: cmElseCommand.cxx, cmIfCommand.cxx: BUG: or and and were + inverted. + +2001-08-09 11:12 hoffman + + * ChangeLog: add generated ChangeLog file. Should be updated each + time a new version is made + +2001-08-09 11:08 martink + + * Source/: cmMakefile.h: updated version + +2001-08-09 11:07 martink + + * README: out of date + +2001-08-09 09:33 hoffman + + * Source/cmConfigure.cmake.h.in: BUG: add in for scope variable + +2001-08-08 13:14 hoffman + + * Source/: cmSiteNameCommand.cxx, cmUtilitySourceCommand.cxx: BUG: + can not Add a definition that you just got + +2001-08-08 11:54 hoffman + + * configure, configure.in, Source/cmBuildCommand.cxx, + Source/cmBuildNameCommand.cxx, Source/cmCableWrapTclCommand.cxx, + Source/cmCacheManager.cxx, Source/cmCacheManager.h, + Source/cmConfigure.h.in, Source/cmConfigureGccXmlCommand.cxx, + Source/cmDSPWriter.cxx, Source/cmDSWWriter.cxx, + Source/cmFindFileCommand.cxx, Source/cmFindLibraryCommand.cxx, + Source/cmFindPathCommand.cxx, Source/cmFindProgramCommand.cxx, + Source/cmLinkLibrariesCommand.cxx, + Source/cmMSProjectGenerator.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmOptionCommand.cxx, + Source/cmProjectCommand.cxx, Source/cmSetCommand.cxx, + Source/cmSiteNameCommand.cxx, Source/cmStandardIncludes.h, + Source/cmSystemTools.cxx, Source/cmUnixMakefileGenerator.cxx, + Source/cmUtilitySourceCommand.cxx, + Source/cmVTKWrapJavaCommand.cxx, + Source/cmVTKWrapPythonCommand.cxx, + Source/cmVTKWrapTclCommand.cxx, + Templates/CMakeSystemConfig.cmake.in, Templates/configure, + Templates/configure.in: ENH: big change, only allow commands + access to the cache via the cmMakefile class and GetDefinition, + also the cmMakefile is the only way for commands to add to the + cache. Also, some changes to configure.in that check for for + scoping + +2001-08-07 15:49 hoffman + + * Source/: cmStandardIncludes.h, cmSystemTools.cxx: ENH: compile + with broken 720 SGI C++ compiler + +2001-08-07 13:46 hoffman + + * Source/cmMakefile.cxx: ENH: html output for docs + +2001-08-07 13:15 hoffman + + * CMake.rtf: ENH: update documents with current commands and new + GUI + +2001-08-07 08:47 king + + * CMakeLists.txt: ERR: CMakeLogo.gif has been moved to the root + directory of the source so that the Web and Web/Art directories + are not needed here. + +2001-08-07 08:46 king + + * CMakeLogo.gif: ENH: CMakeLogo for Dart to use on testing web + page. + +2001-08-06 17:01 martink + + * Source/: cmElseCommand.cxx, cmElseCommand.h, cmIfCommand.cxx, + cmIfCommand.h: added new if commands + +2001-08-06 15:11 king + + * CMake.pdf, CMake.rtf: Re-adding doc files. They were + accidentally removed due to a symlink from the CMake/Web + directory when it was removed. + +2001-08-06 15:01 king + + * CMake.pdf, CMake.rtf: Removing Web directory from CMake. It is + moving to a separate, parallel CVS module called "CMakeWeb" + +2001-08-03 15:47 king + + * Source/: cmConfigureFileCommand.cxx, cmConfigureFileCommand.h: + ENH: Added 'IMMEDIATE' option to CONFIGURE_FILE command to force + file copy and configuration on the initial pass so that current + variable values are used. + +2001-08-02 17:27 king + + * Source/: cmCableWrapTclCommand.cxx, cmCableWrapTclCommand.h: ENH: + Added use of a class's tag to generate a better set of filenames + for its wrapper configuration, xml, and generated files. This + should also prevent half the classes from re-wrapping when a new + one is inserted in the middle. + +2001-08-02 14:42 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: Generated link line for + shared libraries had CMAKE_CXX_FLAGS instead of CMAKE_CXXFLAGS + (note underscore). + +2001-08-02 14:10 king + + * Source/cmMakefile.cxx: BUG: Fixed off-by-one error in + ExpandVariablesInString for case of $ or @ as last character of + string. + +2001-08-02 09:07 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: We don't want to output + -I/usr/include in the INCLUDE_FLAGS variable. This causes + problems with finding system headers in the wrong places for + certain standard library implementations. + +2001-08-01 16:14 king + + * Source/: cmCommands.cxx, cmMakefile.cxx, cmMakefile.h, + cmSubdirDependsCommand.cxx, cmSubdirDependsCommand.h, + cmUnixMakefileGenerator.cxx: ENH: Added SUBDIR_DEPENDS command + and corresponding support code. This command allows + specification that a set of subdirectories be built before a + particular directory. + +2001-08-01 16:13 king + + * Source/cmAddDefinitionsCommand.cxx: BUG: Needed to expand + variables of definitions. + +2001-08-01 16:12 king + + * Source/cmInstallFilesCommand.cxx: BUG: Need to expand variables + when a regular expression is specified. + +2001-08-01 16:11 king + + * Modules/FindCABLE.cmake: ENH: Support to find CABLE utility if it + is installed. + +2001-08-01 11:19 king + + * Modules/FindTCL.cmake: ENH: Added tk library names tk8.4 tk8.3 + tk8.2 and tk8.0 to correspond to tk84 tk83 tk82 and tk80. + TK_LIBRARY should now be found on more platforms. + +2001-07-31 11:29 king + + * Source/cmCommands.cxx, Source/cmDSPWriter.cxx, + Source/cmDSWWriter.cxx, Source/cmInstallFilesCommand.cxx, + Source/cmInstallProgramsCommand.cxx, + Source/cmInstallProgramsCommand.h, Source/cmMakefile.cxx, + Source/cmTarget.cxx, Source/cmTarget.h, + Source/cmUnixMakefileGenerator.cxx, Templates/CMakeLists.txt: + ENH: Added INSTALL_PROGRAMS command and corresponding support. + This involved splitting cmTarget::INSTALL into INSTALL_FILES and + INSTALL_PROGRAMS enum values. INSTALL_FILES no longer adds + execute permission. The INSTALL_PROGRAMS commnad takes either a + list of explicit names, or a regex. It will not expand source + lists like the INSTALL_FILES command will. + +2001-07-30 12:21 king + + * Source/cmCableClassSet.cxx: ERR: + ElementCombinationGenerator::ReplacePortion needs to be a friend + of ElementCombinationGenerator so that it can get access to + ElementCombinationGenerator::Substitution. Also fixed one minor + problem for HP build. + +2001-07-30 11:34 king + + * Source/: cmCableClassSet.cxx, cmCableWrapTclCommand.cxx, + cmDSPWriter.cxx, cmMakeDepend.cxx, cmMakefile.cxx, cmMakefile.h, + cmUnixMakefileGenerator.cxx: BUG: Changed include and link + directory paths in cmMakefile back to std::vector because there + is an order dependency. Only cmMakefile::AddIncludeDirectory and + cmMakefile::AddLinkDirectory should be called to add directories + to the paths. They make sure the paths are unique as they are + inserted. + +2001-07-30 07:18 scottim + + * Source/: cmCableClassSet.cxx, cmCableWrapTclCommand.cxx, + cmDSPWriter.cxx, cmMakeDepend.cxx, cmMakefile.cxx, cmMakefile.h, + cmUnixMakefileGenerator.cxx: Removed the Uniquification of the + include and link directory list in FinalPass, and achieved the + same effect by makein m_LinkDirectores and m_IncludeDirectories a + set rather than vector + +2001-07-27 16:29 hoffman + + * Source/cmMakefile.cxx: ENH: Re-implemented + ExpandVariablesInString to significantly improve performance. + +2001-07-27 13:06 scottim + + * Source/: cmMakefile.cxx, cmMakefile.h: MAkefile now strips + duplicate directores from the libraries and include paths + +2001-07-26 11:07 king + + * Source/: cmCableClassSet.cxx, cmCableClassSet.h, + cmCableClassSetCommand.cxx, cmCableWrapTclCommand.cxx: ENH: Added + cable class-set expansion and tagging for alternate name + generation. This should make the generated wrappers much easier + to setup and use. + +2001-07-26 09:47 berk + + * CMakeLists.txt: ENH: Updated regexp for tracing dependencies in + FLTK dialog. + +2001-07-26 08:36 martink + + * Source/cmMakefile.h: fixed warnings + +2001-07-25 18:30 hoffman + + * Source/: cmMakefile.cxx, cmMakefile.h, cmake.cxx, cmake.h: ENH: + rework GUI with configure/OK/Cancel + +2001-07-25 16:53 martink + + * Source/: cmCommands.cxx, cmFunctionBlocker.h, cmIfCommand.cxx, + cmIfCommand.h, cmMakefile.cxx, cmMakefile.h: added for each + command + +2001-07-25 16:52 martink + + * Source/: cmEndForEachCommand.cxx, cmEndForEachCommand.h, + cmForEachCommand.cxx, cmForEachCommand.h: new commands + +2001-07-25 09:40 berk + + * Source/cmCacheManager.cxx: Removing trailing spaces after cache + entry value. + +2001-07-24 16:16 king + + * Source/cmDSPWriter.cxx: BUG: Fixed dependency generation to work + for when there are many, many dependencies. Output is now easier + to ready anyway because each dependency is on its own line. + +2001-07-23 14:43 king + + * Source/: cmConfigureGccXmlCommand.cxx, + cmConfigureGccXmlCommand.h: BUG: CompilerIsMipsPro needs to + redirect stderr to stdout so that the test output can be checked. + +2001-07-23 11:54 king + + * Source/: cmConfigureGccXmlCommand.cxx, + cmConfigureGccXmlCommand.h: ENH: Added support for UNIX + compilers. GCC and MIPSpro are supported. + +2001-07-23 11:53 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added support + for non-verbose mode output from running a command. This can be + used when it is expected that the command may fail. + +2001-07-23 11:07 king + + * Source/: cmCommands.cxx, cmConfigureGccXmlCommand.cxx, + cmConfigureGccXmlCommand.h: ENH: Added CONFIGURE_GCCXML command + to do hard work of configuring GCCXML's flags for the current + compiler. Currently only implemented correctly for Visual C++ in + Windows. + +2001-07-23 11:06 king + + * Modules/FindGCCXML.cmake: ENH: Module to find and configure + GCCXML and GCCXML_FLAGS. + +2001-07-20 11:41 millerjv + + * Modules/Dart.cmake: ENH: Added Purify targets + +2001-07-20 09:20 millerjv + + * Modules/Dart.cmake: ENH: Added purify command. + +2001-07-20 04:56 scottim + + * Templates/DLLHeader.dsptemplate: adding what I think is a missing + /pdbtype:sept + +2001-07-18 16:45 martink + + * Source/cmMakefile.h: updated version + +2001-07-18 11:40 martink + + * Source/cmSystemTools.cxx: limit library search to appropriate + extensions + +2001-07-18 10:17 hoffman + + * Modules/Dart.cmake: BUG: enable testing even if not tcl found + +2001-07-17 15:41 king + + * Source/cmCableWrapTclCommand.cxx: ENH: Added generation of + dependencies on the CMake-generated input to gcc-xml so that + re-generation of wrappers will occur if a header changes. + +2001-07-17 15:41 king + + * Source/cmMakeDepend.cxx: BUG: Need to expand variables in search + paths in case it hasn't been done yet by the makefile. + +2001-07-17 15:09 king + + * Source/: cmMakeDepend.cxx, cmMakeDepend.h, + cmOutputRequiredFilesCommand.cxx, cmUnixMakefileGenerator.cxx: + ENH: Hacked together a new implementation of the dependency + generator code. This should support finding dependencies for + individual files without doing them for the entire makefile. Use + cmMakeDepend::FindDependencies() to do this. + +2001-07-17 09:54 king + + * Modules/CMakeLists.txt, Modules/FindDart.cmake, + Modules/FindJNI.cmake, Modules/FindPythonLibs.cmake, + Modules/FindTCL.cmake, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Templates/configure, + Templates/configure.in: ENH: Added support for using + backslash-style escaping in CMakeLists.txt file arguments. This + allows double quotes to be used in arguments. + +2001-07-16 18:40 perera + + * Source/: cmAuxSourceDirectoryCommand.cxx, cmMakefile.cxx, + cmMakefile.h, cmSourceFile.cxx, cmSourceFile.h, + cmSourceFilesCommand.cxx, cmSourceFilesRemoveCommand.cxx, + cmTarget.cxx: ENH: Source and header file extensions are in + variables in cmMakefile. AUX_SOURCE_DIRECTORY will only add + files that have a "source" extension. + +2001-07-16 15:19 ibanez + + * Modules/: FindGLU.cmake, FindGLUT.cmake: Search path for + OpenGL related libraries + +2001-07-16 10:17 hoffman + + * Templates/: CMakeSystemConfig.cmake.in, configure, configure.in: + ENH: add a variable for CMAKE_COMPILER_IS_GNUCXX + +2001-07-16 10:14 hoffman + + * Source/: cmMakefile.cxx, cmSourceFile.cxx: ENH: add support for + mac osx + +2001-07-15 21:10 barre + + * Modules/FindPythonLibs.cmake: update include/lib path to Python + (Linux) + +2001-07-11 13:30 martink + + * Source/: cmMakefile.h: version num + +2001-07-11 12:12 hoffman + + * Source/cmSystemTools.cxx: BUG: make sure find program does not + find directories + +2001-07-10 17:13 hoffman + + * Source/: cmIncludeCommand.cxx, cmLoadCacheCommand.cxx: BUG: + remove iostream.h includes + +2001-07-10 16:20 berk + + * Source/cmUnixMakefileGenerator.cxx: Unnecessary variable + +2001-07-10 16:20 berk + + * Source/cmMakefile.cxx: Better error checking. + +2001-07-10 14:29 hoffman + + * Templates/: configure, configure.in: BUG: fix excape of * for + cmake + +2001-07-10 13:57 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: When splitting a full + path library into separate -L and -l parts, the -l part may not + have a "lib" prefix on cygwin. + +2001-07-10 12:09 king + + * Source/cmake.cxx: ENH: Removing automatic setting of + BUILD_SHARED_LIBS. Projects that support this should explicitly + declare it with the OPTION command, or set its libraries to + shared or static directly on each ADD_LIBRARY command. + +2001-07-10 11:56 berk + + * Modules/Dart.cmake: Checking if tclshcommand is defined before + running it. + +2001-07-10 11:46 king + + * Source/cmUnixMakefileGenerator.cxx: ENH: Added + -D(library_name)_EXPORTS to build rules for sources that are + going to be linked into a shared library. This allows dllexport + setup for DLL building on cygwin. It may also come in handy in + unix in the future. This corresponds to the same definition + added by the dll dsp template in windows. + +2001-07-10 09:23 martink + + * Source/cmBuildNameCommand.cxx: changes to better handle old + values or hand set values + +2001-07-09 12:46 nobody + + * DartConfig.cmake: Disabled doxygen and gnats + +2001-07-08 17:54 perera + + * Source/cmUnixMakefileGenerator.cxx: BUG: library extension goes + after library name, not before + +2001-07-06 14:41 hoffman + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + ENH: some clean up, and better checking to see if we are building + cmake + +2001-07-06 14:11 hoffman + + * configure, configure.in: ENH: run make depend + +2001-07-06 12:46 will + + * Source/cmCommand.h: ERR:Spelling mistake + +2001-07-06 09:22 king + + * Source/cmStandardIncludes.h: ENH: Warning 4503 disable for MSVC. + +2001-07-05 18:15 hoffman + + * Templates/: configure, configure.in: BUG: fix flags for cygwin + and shared builds + +2001-07-05 17:52 hoffman + + * Source/cmSystemTools.cxx: ENH: add better error output + +2001-07-05 12:03 hoffman + + * Source/cmUnixMakefileGenerator.cxx, Templates/configure, + Templates/configure.in: BUG: fix solaris problems in install and + ar + +2001-07-03 10:53 king + + * Source/cmCableWrapTclCommand.cxx: ENH: Removed -fsyntax-only flag + from call to gcc-xml. It should be part of GCCXML_FLAGS. + +2001-07-03 05:27 scottim + + * Source/cmDSPWriter.cxx, Templates/CMakeWindowsSystemConfig.cmake, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/UtilityHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: Renamed the + ReleaseWithDebugInfo Build configuration to RelWithDebInfo, + because msdev does simple matching on build target, and + specifying either Release or Debug builds would also build + ReleaseWithDebugInfo + +2001-07-02 16:52 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: When outputting relative + path of .o, the relative path of the source file must also be + written (not full path). + +2001-07-02 16:30 millerjv + + * Source/cmBuildNameCommand.cxx: FIX: BuildName removes path to + compiler and converts any illegal characters + +2001-07-02 15:57 king + + * Source/: cmCommands.cxx, cmBuildSharedLibrariesCommand.cxx, + cmBuildSharedLibrariesCommand.h: ENH: Removed deprecated command + completely. + +2001-07-02 15:38 king + + * Source/: cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, + cmDSPWriter.cxx, cmDSPWriter.h, cmDSWWriter.cxx, cmMakefile.cxx, + cmMakefile.h, cmTarget.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: ENH: Added support for selection of + static/shared build on a per-library basis. + +2001-07-02 14:38 martink + + * Source/cmake.cxx: better arg support + +2001-07-02 14:03 berk + + * Source/: cmVTKWrapJavaCommand.h, cmVTKWrapPythonCommand.h, + cmVTKWrapTclCommand.h: Should not be inherited. + +2001-07-02 14:03 berk + + * Source/: cmVTKWrapJavaCommand.cxx, cmVTKWrapPythonCommand.cxx, + cmVTKWrapTclCommand.cxx: Better error checking. + +2001-07-02 14:02 berk + + * Source/cmConfigureFileCommand.cxx: Wrong place for fout + +2001-06-29 16:46 martink + + * Source/cmConfigureFileCommand.cxx: better configure file command + +2001-06-29 16:06 nobody + + * CMakeLists.txt: added logo + +2001-06-29 09:53 martink + + * Source/cmaketest.cxx: minor compile fix + +2001-06-29 09:30 hoffman + + * Source/cmUnixMakefileGenerator.cxx, + Templates/CMakeSystemConfig.cmake.in, Templates/configure, + Templates/configure.in: BUG: break up CMAKE_AR into program and + ARGS + +2001-06-28 17:45 hoffman + + * configure, configure.in, Source/cmSystemTools.cxx, + Source/cmUnixMakefileGenerator.cxx, Templates/configure, + Templates/configure.in: ENH: various fixes to allow bootstrap on + sunos with CC + +2001-06-28 16:45 hoffman + + * Source/cmEnableTestingCommand.cxx: fixed Dart issue + +2001-06-28 15:27 hoffman + + * Templates/CMakeSystemConfig.cmake.in: set values in the cache not + just the current makefile + +2001-06-28 15:08 berk + + * Source/cmUnixMakefileGenerator.cxx: Special rules for + out-of-package source files. + +2001-06-28 14:38 hoffman + + * Templates/: configure, configure.in: BUG: pass flags to compiler + during configure + +2001-06-28 14:27 hoffman + + * Templates/: configure, configure.in: BUG: pass flags to compiler + during configure + +2001-06-28 14:01 hoffman + + * Source/cmSourceFilesCommand.cxx: BUG: find files in + subdirectories + +2001-06-28 11:42 hoffman + + * Source/cmStandardIncludes.h: fix for scope on hp + +2001-06-28 11:40 hoffman + + * Source/cmSystemTools.cxx: BUG: check size of path error, HP + gcount problem + +2001-06-27 17:19 berk + + * Source/cmSourceFilesCommand.cxx: Added variable expansion. + +2001-06-27 16:18 martink + + * Source/cmMakefile.h: updated version to 0.3 + +2001-06-27 16:17 martink + + * Source/cmMakefile.h: updated version to 0.2 + +2001-06-27 16:14 martink + + * Source/cmUnixMakefileGenerator.cxx: ENH: fix install when + executable and lib path set + +2001-06-27 15:42 hoffman + + * configure, configure.in, Source/CMakeLists.txt, + Source/cmSystemTools.cxx, Source/cmUnixMakefileGenerator.cxx, + Source/cmake.cxx, Templates/install-sh: ENH: fix install for + cygwin, build cmake from configure + +2001-06-27 15:13 king + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + BUG: Check for building shared libraries should read from the + make file's setting, not directly from the cache. + +2001-06-27 15:09 king + + * Source/cmDSPWriter.cxx: BUG: Check for building shared libraries + should read from makefile's setting, not directly from the cache. + +2001-06-27 13:16 martink + + * CMake.rtf: updated for 0.2 + +2001-06-27 13:12 martink + + * Source/: cmLinkLibrariesCommand.h, cmSubdirCommand.h: + documentation change + +2001-06-27 12:09 perera + + * Source/cmUnixMakefileGenerator.cxx: ENH: Use ${MAKE} instead of + make for dependent library rules + +2001-06-27 11:49 martink + + * Source/cmCommands.cxx: alphabetized + +2001-06-27 11:35 martink + + * Source/cmake.cxx: added help options + +2001-06-27 09:17 martink + + * Source/: cmSystemTools.cxx, cmaketest.cxx, cmaketest.h.in: minor + fixes to testing + +2001-06-27 09:16 martink + + * Source/CMakeLists.txt: mod to the testing + +2001-06-27 09:16 martink + + * CMakeLists.txt: added dependencies for testing + +2001-06-26 16:19 hoffman + + * Source/cmake.dsp: BUG: change to dos mode + +2001-06-26 13:41 martink + + * Modules/Dart.cmake: update for CMake changes + +2001-06-26 13:23 martink + + * Source/: CMakeLists.txt, cmAddCustomTargetCommand.cxx, + cmAddCustomTargetCommand.h, cmBuildCommand.cxx: modified how + paths are escaped, added depends + +2001-06-26 10:01 martink + + * Source/: cmAddDependenciesCommand.cxx, + cmAddDependenciesCommand.h, cmCommands.cxx: added add + dependencies command + +2001-06-25 13:34 millerjv + + * Source/: cmBuildNameCommand.cxx, cmSiteNameCommand.cxx: FIX: + added AddDefinition() to store site name and build name in + makefile. Also stripped white space from the result of + hostname. + +2001-06-25 10:59 martink + + * CMakeLists.txt: made cmake write its execs into CMake/Source + +2001-06-22 14:53 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: shared libraries should + not depend on other shared libraries, they get relinked too + often. + +2001-06-22 14:53 hoffman + + * Source/cmMakefile.cxx: ENH: put back stdio.h to get sprintf + +2001-06-22 14:23 biddi + + * Source/cmCommands.cxx: ERR: Serious problems with my CVS. How did + this get committed? + +2001-06-22 12:19 king + + * Source/cmSystemTools.cxx: BUG: Wrote correct implementation of + cmCopyFile. + +2001-06-22 12:18 king + + * Source/cmake.cxx: BUG: Fixed generation of cMakeRoot in one case. + +2001-06-22 12:18 king + + * Source/cmStandardIncludes.h: ENH: Added string.h include. + +2001-06-22 12:17 king + + * Source/cmMakefile.cxx: ERR: Removed stray standard header + include. They should be added to cmStandardIncludes.h + +2001-06-22 12:17 king + + * Source/cmIncludeCommand.cxx: BUG: Added missing newline in error + message. + +2001-06-22 11:32 martink + + * Source/cmMakefile.cxx: removed stricmp + +2001-06-22 11:28 martink + + * Source/CMakeLists.txt: escape quotes on cmaketest.h.in + +2001-06-22 11:15 martink + + * Source/: cmConfigureFileCommand.cxx, cmConfigureFileCommand.h: + added escape quotes option + +2001-06-22 11:14 martink + + * Source/: cmMakefile.cxx, cmMakefile.h: added escape quotes option + in replace strings + +2001-06-22 10:21 martink + + * Source/: cmSystemTools.cxx, cmSystemTools.h: added escape quote + method + +2001-06-22 09:58 biddi + + * Source/: cmCommands.cxx, cmSourceFilesRemoveCommand.cxx, + cmSourceFilesRemoveCommand.h: ENH: Added new command + SOURCE_FILES_REMOVE which can be used to take files out of the + build. Especially useful when certain compilers choke on the odd + file. + +2001-06-22 09:47 biddi + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Added + RemoveSource(...) to complement AddSource. New command + SOURCE_FILES_REMOVE uses it and can be used to take files out of + the build + +2001-06-22 09:27 martink + + * Source/cmaketest.cxx: namespace issues + +2001-06-21 17:55 hoffman + + * Source/cmDSWWriter.cxx: allow no name project + +2001-06-21 17:53 martink + + * Source/CMakeLists.txt: better testing + +2001-06-21 17:53 martink + + * Source/: cmSystemTools.cxx, cmSystemTools.h: adde changeDirectory + +2001-06-21 17:52 martink + + * Source/: cmaketest.cxx, cmaketest.h.in: new test driver + +2001-06-21 17:52 martink + + * Tests/Simple/: CMakeLists.txt, simple.cxx: new tests + +2001-06-21 17:41 hoffman + + * Source/cmake.cxx: BUG: fix for unix + +2001-06-21 17:25 hoffman + + * Source/cmake.cxx: ENH: clean up + +2001-06-21 17:20 hoffman + + * Source/cmake.cxx: ENH: look in the PREFIX dir for the modules + +2001-06-21 16:34 hoffman + + * Source/: cmConfigure.cmake.h.in, cmake.cxx: ENH: better ability + to find cmake program + +2001-06-21 15:57 martink + + * Templates/CMakeLists.txt: minor install fix + +2001-06-21 15:54 martink + + * Source/cmUnixMakefileGenerator.cxx: better permission handling + +2001-06-21 15:02 king + + * Source/: cmIncludeRegularExpressionCommand.cxx, + cmIncludeRegularExpressionCommand.h, cmMakeDepend.cxx, + cmMakeDepend.h, cmMakefile.cxx, cmMakefile.h, + cmUnixMakefileGenerator.cxx: ENH: Extended + INCLUDE_REGULAR_EXPRESSION to allow selective complaints about + missing dependencies. + +2001-06-21 15:02 king + + * Source/CMakeLists.txt: ENH: Added BUILD_FLTK_GUI option (defaults + to ON). + +2001-06-21 13:48 hoffman + + * Source/: CMakeLists.txt, cmSourceFile.cxx, cmStandardIncludes.h: + BUG: fix bootstrap build on unix + +2001-06-21 12:31 hoffman + + * CMakeLists.txt: ENH: add include regexp + +2001-06-21 12:01 martink + + * CMakeLists.txt, Makefile.in, configure, configure.in, install-sh, + Modules/CMakeLists.txt, Source/cmInstallFilesCommand.cxx, + Source/cmInstallFilesCommand.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmake.cxx, + Templates/CMakeLists.txt, Templates/install-sh: better install + support + +2001-06-21 10:58 hoffman + + * Templates/CMakeSystemConfig.cmake.in: BUG: remove quotes + +2001-06-21 10:36 hoffman + + * Source/: cmIncludeCommand.cxx, cmIncludeCommand.h: ENH: add + optional include and only allow one file per INCLUDE + +2001-06-20 16:49 hoffman + + * Source/CMakeLists.txt, Source/cmDSPWriter.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: ENH: boot strap mfc gui + and support for MFC + +2001-06-20 13:56 hoffman + + * Source/CMakeLists.txt, Source/cmConfigure.cmake.h.in, + Source/cmSourceFile.cxx, Source/cmStandardIncludes.h, + Source/cmake.cxx, Templates/CMakeSystemConfig.cmake.in, + Templates/configure, Templates/configure.in: ENH: fix cmake so it + can boot strap itself better + +2001-06-19 16:29 hoffman + + * Modules/FindFLTK.cmake: [no log message] + +2001-06-19 16:10 hoffman + + * Source/CMakeLists.txt: ENH: build fltk cmake on unix with + bootstrap + +2001-06-19 16:05 king + + * Makefile.in: BUG: Exectuable installation must set permissions to + 755 in case installer has a umask like 007. + +2001-06-19 15:50 king + + * Source/: cmBuildSharedLibrariesCommand.cxx, cmake.cxx: ENH: CMake + now always adds the BUILD_SHARED_LIBS cache entry. The + BUILD_SHARED_LIBRARIES command that used to be used is now + deprecated. + +2001-06-19 15:33 hoffman + + * Source/CMakeLists.txt: ENH: add bootstrap support for building + fltk + +2001-06-19 12:03 king + + * Source/: cmCableCloseNamespaceCommand.cxx, + cmCableCloseNamespaceCommand.h, cmCableCommand.cxx, + cmCableCommand.h, cmCableData.cxx, cmCableData.h, + cmCableDefineSetCommand.cxx, cmCableDefineSetCommand.h, + cmCableInstantiateClassCommand.cxx, + cmCableInstantiateClassCommand.h, cmCableInstantiateCommand.cxx, + cmCableInstantiateCommand.h, cmCableOpenNamespaceCommand.cxx, + cmCableOpenNamespaceCommand.h, cmCablePackageCommand.cxx, + cmCablePackageCommand.h, cmCablePackageEntryCommand.cxx, + cmCablePackageEntryCommand.h, cmCableSourceFilesCommand.cxx, + cmCableSourceFilesCommand.h, cmCableWrapCommand.cxx, + cmCableWrapCommand.h, cmCommands.cxx: ENH: Removing old-style + cable commands related to the instantiation functionality which + has now been removed from cable. + +2001-06-19 12:01 king + + * Source/cmOutputRequiredFilesCommand.cxx: ERR: Removed unused + variable. + +2001-06-19 07:41 millerjv + + * Source/: cmAddTestCommand.cxx, cmEnableTestingCommand.cxx: ENH: + Changed generated filename to DartTestfile.txt + +2001-06-18 17:26 hoffman + + * Source/cmSystemTools.cxx: BUG: use pclose not fclose + +2001-06-18 16:54 perera + + * Source/cmLinkLibrariesCommand.cxx: ENH: LINK_LIBRARIES(abc) will + automatically add the path to abc to the link directories, if the + path is known. + +2001-06-18 15:35 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: remove unused + +2001-06-18 15:32 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: create directories in + the right place + +2001-06-18 15:31 hoffman + + * Source/cmake.cxx: ENH: move EXECUTABLE_OUTPUT_PATH and + LIBRARY_OUTPUT_PATH initial creation to after the CMakeLists.txt + files have been parsed + +2001-06-18 13:16 martink + + * Modules/Dart.cmake: out of source dart support + +2001-06-15 17:57 hoffman + + * Source/cmUnixMakefileGenerator.cxx: ENH: do not add anything from + the current directory to the depends + +2001-06-15 10:35 perera + + * Source/cmUnixMakefileGenerator.cxx: BUG: fixed so that empty + library paths are ignored + +2001-06-14 17:06 biddi + + * Source/cmSourceFile.cxx: ERR: allow *.cpp as well as *.cxx etc + etc + +2001-06-14 11:45 martink + + * Source/CMakeLib.dsp: added make depend on win32 + +2001-06-14 10:19 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: fix it so that if a + Makefile is out of date for some reason, it is only built once, + it was doing it twice. + +2001-06-14 09:10 martink + + * CMakeLists.txt, DartConfig.cmake: modified testing + +2001-06-13 17:50 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: fix so it does not jump + into the current directory for inital target builds + +2001-06-13 17:03 hoffman + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h, + cmake.cxx: ENH: fix EXECUTABLE_OUTPUT_PATH and + LIBRARY_OUTPUT_PATH for unix + +2001-06-13 16:15 martink + + * Modules/FindDart.cmake: used to find the dart testing system + +2001-06-13 14:49 martink + + * CMakeLists.txt: minor dart change + +2001-06-13 13:53 martink + + * Source/: cmTarget.cxx, cmTarget.h: duh + +2001-06-13 13:49 martink + + * CMakeLists.txt, Source/cmTarget.cxx, Source/cmTarget.h: minor cvs + web changeCMakeLists.txt + +2001-06-12 14:15 perera + + * Source/cmUnixMakefileGenerator.cxx, Templates/configure, + Templates/configure.in: BUG: SHLIB_LINK was being used when + linking static executables. Missing comma in RUNTIME_FLAG for + IRIX. ENH: User supplied SHLIB_CFLAGS (-fPIC, etc) will override + configure detected flags + +2001-06-12 13:30 martink + + * CMakeLists.txt, Source/CMakeLists.txt: support testing + +2001-06-12 12:22 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: CMake's configure needs + to run with the current directory as the project's binary + directory. + +2001-06-12 11:55 martink + + * Source/: cmakemain.cxx: cmake does not require two arguments + +2001-06-12 11:12 martink + + * Source/cmCommands.cxx: removed old added new + +2001-06-12 11:08 martink + + * Source/cmCommands.cxx: removed old added new + +2001-06-12 11:08 martink + + * Source/: cmOutputRequiredFilesCommand.cxx, + cmOutputRequiredFilesCommand.h: added new command + +2001-06-12 11:08 martink + + * Source/: cmConfigureFileNoAutoconf.cxx, + cmConfigureFileNoAutoconf.h, cmTestsCommand.cxx, + cmTestsCommand.h: removed old commands + +2001-06-12 10:59 king + + * Source/: cmMakeDepend.cxx, cmUnixMakefileGenerator.cxx: BUG: + Dependency hints must be removed by the makefile generator before + adding the dependencies generated by cmMakeDepend. + +2001-06-12 10:45 perera + + * Source/cmUnixMakefileGenerator.cxx: BUG: There was no dependency + for library targets on their required libraries. (Hopefully + there aren't any cyclic dependencies for libraries.) + CMAKE_SHLIB_LINK is now used for executable targets. + +2001-06-12 09:00 martink + + * Source/: cmMakeDepend.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h, cmMakeDepend.cxx: some cleanup to the + make depend process + +2001-06-12 08:31 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: WIN32_EXECUTABLE targets + were not being installed on unix properly. They are supposed to + be treated just like any other EXECUTABLE target. + +2001-06-12 08:30 king + + * Source/cmake.cxx: ERR: int -> unsigned int. + +2001-06-11 21:50 ibanez + + * Modules/FindFLTK.cmake: ENH: Added the path used in SuSe Linux + 7.1 + +2001-06-11 19:14 millerjv + + * Modules/Dart.cmake: Modified for new Dart source tree + +2001-06-11 18:00 martink + + * Source/cmake.cxx: minor fix in error checking + +2001-06-11 17:09 king + + * Modules/FindTCL.cmake: ENH: Added check for tcl8.4 (as against + tcl84), tcl8.3, tcl8.2, and tcl8.0 when finding the TCL_LIBRARY. + +2001-06-11 16:47 martink + + * Source/cmMakefile.h: added some const versions of get methods + +2001-06-11 15:31 millerjv + + * Modules/Testing.cmake: Changed Testing.cmake to Dart.cmake + +2001-06-11 15:28 millerjv + + * Modules/Dart.cmake: Rename Testing.cmake to Dart.cmake + +2001-06-11 10:18 king + + * Source/cmSystemTools.cxx: BUG: Fixed regular expression used to + match registry entries. The expression now matches everything + after a [HKEY until the first ']' is encountered. + +2001-06-10 18:27 ibanez + + * Source/cmSystemTools.cxx: DOC: Added a comment about the risk of + using tempnam in Unix, as opposed to using mkstemp. + +2001-06-09 20:54 king + + * Source/cmCableWrapTclCommand.cxx: BUG: Changed custom command + generation to not use full path of output file from cable. + +2001-06-08 14:40 king + + * Source/: cmCableWrapTclCommand.cxx, cmCableWrapTclCommand.h: ENH: + Added proper request for/generation of CABLE, GCCXML, and + GCCXML_FLAGS cache entries. This also allowed the correct + generation of gccxml rules. + +2001-06-08 14:38 king + + * Source/cmDSPWriter.cxx: BUG: Removed generation of stray # Begin + Custom Build line. + +2001-06-08 00:18 perera + + * Source/cmUnixMakefileGenerator.cxx, + Templates/CMakeSystemConfig.cmake.in, Templates/configure, + Templates/configure.in: ENH: Runtime library search paths can be + added to the link lines for on shared builds. + +2001-06-07 16:48 martink + + * CMake.pdf.gz: replaced with pdf version + +2001-06-07 16:45 will + + * CMake.pdf: updated docs + +2001-06-07 16:34 martink + + * CMake.doc.gz: checked in rtf version + +2001-06-07 16:24 martink + + * CMake.rtf: updated docs + +2001-06-07 14:52 hoffman + + * Source/cmAddTestCommand.cxx, Source/cmCablePackageCommand.cxx, + Source/cmCableWrapTclCommand.cxx, Source/cmCacheManager.cxx, + Source/cmCacheManager.h, Source/cmDSWWriter.cxx, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmSystemTools.h, Source/cmTarget.h, + Source/cmUnixMakefileGenerator.cxx, + Source/cmUtilitySourceCommand.cxx, + Source/cmVTKWrapJavaCommand.cxx, + Source/cmVTKWrapPythonCommand.cxx, + Source/cmVTKWrapTclCommand.cxx, Source/cmake.cxx, + Templates/CMakeWindowsSystemConfig.cmake: ENH: move utilities to + targets from makefile, and add versioning to cache + +2001-06-07 12:22 king + + * Source/cmEnableTestingCommand.cxx: BUG: ENABLE_TESTING command + may need to create output directory before writing the + CMakeTestfile into it since it is invoked before the makefile + generator runs. + +2001-06-07 11:36 scottim + + * Source/cmDSPWriter.cxx, Templates/CMakeWindowsSystemConfig.cmake, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/UtilityHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: adding a "Release with + debugging Info" build to CMake for NT + +2001-06-07 10:16 king + + * Source/cmCableWrapTclCommand.cxx: ERR: Fixed generation of source + name and directory for cmSourceFiles of generated Tcl wrapper + files. Changed extension of generated gcc-xml input c++ file to + be .cc so that GCC will recognize it, but MsDev will still allow + a custom command on it. + +2001-06-07 08:50 millerjv + + * Source/cmConfigureFileNoAutoconf.cxx: FIX: Chaned error message + to match command + +2001-06-06 16:45 king + + * Source/cmCableWrapTclCommand.cxx: ENH: Changed generation of + gccxml command to write out define and include flags explicitly + instead of using CMAKE_CXX_FLAGS and INCLUDE_FLAGS variables. + This should help it run when gccxml is not the compiler that will + build the generated wrappers. + +2001-06-06 16:14 millerjv + + * Source/cmAddTestCommand.cxx: FIX: InitialPass() seg fault on + std::copy and FinalPass() was not appending to the file + +2001-06-06 13:58 martink + + * Source/: cmAddTestCommand.cxx, cmAddTestCommand.h, + cmCommands.cxx, cmConfigureFileNoAutoconf.cxx, + cmEnableTestingCommand.cxx, cmEnableTestingCommand.h, + cmMakefile.cxx, cmMakefile.h, cmTestsCommand.cxx: added enable + testing deprecated some commands + +2001-06-06 13:55 hoffman + + * Source/CMakeLib.dsp: [no log message] + +2001-06-06 13:48 hoffman + + * Source/: cmDSPMakefile.cxx, cmDSPMakefile.h, cmDSPWriter.cxx, + cmDSPWriter.h, cmDSWMakefile.cxx, cmDSWMakefile.h, + cmDSWWriter.cxx, cmDSWWriter.h, cmMSProjectGenerator.cxx, + cmMSProjectGenerator.h: ENH: rename DSWMakefile and DSPMakefile + to DSWWriter and DSPWriter + +2001-06-06 13:19 hoffman + + * Source/: cmAbstractFilesCommand.cxx, cmAbstractFilesCommand.h, + cmAddCustomTargetCommand.cxx, cmAddCustomTargetCommand.h, + cmAddDefinitionsCommand.cxx, cmAddDefinitionsCommand.h, + cmAddExecutableCommand.cxx, cmAddExecutableCommand.h, + cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, + cmAddTestCommand.cxx, cmAddTestCommand.h, + cmAuxSourceDirectoryCommand.cxx, cmAuxSourceDirectoryCommand.h, + cmBuildCommand.cxx, cmBuildCommand.h, cmBuildNameCommand.cxx, + cmBuildNameCommand.h, cmBuildSharedLibrariesCommand.cxx, + cmBuildSharedLibrariesCommand.h, cmCableClassSetCommand.cxx, + cmCableClassSetCommand.h, cmCableCloseNamespaceCommand.cxx, + cmCableCloseNamespaceCommand.h, cmCableDefineSetCommand.cxx, + cmCableDefineSetCommand.h, cmCableOpenNamespaceCommand.cxx, + cmCableOpenNamespaceCommand.h, cmCablePackageCommand.cxx, + cmCablePackageCommand.h, cmCablePackageEntryCommand.cxx, + cmCablePackageEntryCommand.h, cmCableWrapTclCommand.cxx, + cmCableWrapTclCommand.h, cmCommand.h, cmConfigureFileCommand.cxx, + cmConfigureFileCommand.h, cmConfigureFileNoAutoconf.cxx, + cmConfigureFileNoAutoconf.h, cmElseCommand.cxx, cmElseCommand.h, + cmEndIfCommand.cxx, cmEndIfCommand.h, cmExecProgramCommand.cxx, + cmExecProgramCommand.h, cmFindFileCommand.cxx, + cmFindFileCommand.h, cmFindLibraryCommand.cxx, + cmFindLibraryCommand.h, cmFindPathCommand.cxx, + cmFindPathCommand.h, cmFindProgramCommand.cxx, + cmFindProgramCommand.h, cmGetFilenameComponentCommand.cxx, + cmGetFilenameComponentCommand.h, cmIfCommand.cxx, cmIfCommand.h, + cmIncludeCommand.cxx, cmIncludeCommand.h, + cmIncludeDirectoryCommand.cxx, cmIncludeDirectoryCommand.h, + cmIncludeRegularExpressionCommand.cxx, + cmIncludeRegularExpressionCommand.h, cmInstallFilesCommand.cxx, + cmInstallFilesCommand.h, cmInstallTargetsCommand.cxx, + cmInstallTargetsCommand.h, cmLibraryCommand.h, + cmLinkDirectoriesCommand.cxx, cmLinkDirectoriesCommand.h, + cmLinkLibrariesCommand.cxx, cmLinkLibrariesCommand.h, + cmLoadCacheCommand.cxx, cmLoadCacheCommand.h, + cmMakeDirectoryCommand.cxx, cmMakeDirectoryCommand.h, + cmMakefile.cxx, cmMessageCommand.cxx, cmMessageCommand.h, + cmOptionCommand.cxx, cmOptionCommand.h, cmProjectCommand.cxx, + cmProjectCommand.h, cmSetCommand.cxx, cmSetCommand.h, + cmSiteNameCommand.cxx, cmSiteNameCommand.h, + cmSourceFilesCommand.cxx, cmSourceFilesCommand.h, + cmSourceGroupCommand.cxx, cmSourceGroupCommand.h, + cmSubdirCommand.cxx, cmSubdirCommand.h, + cmTargetLinkLibrariesCommand.cxx, cmTargetLinkLibrariesCommand.h, + cmTestsCommand.cxx, cmTestsCommand.h, cmUtilitySourceCommand.cxx, + cmUtilitySourceCommand.h, cmVTKWrapJavaCommand.cxx, + cmVTKWrapJavaCommand.h, cmVTKWrapPythonCommand.cxx, + cmVTKWrapPythonCommand.h, cmVTKWrapTclCommand.cxx, + cmVTKWrapTclCommand.h, cmWrapExcludeFilesCommand.cxx, + cmWrapExcludeFilesCommand.h: ENH: rename Invoke to InitialPass + +2001-06-06 11:02 millerjv + + * Source/cmMakefile.cxx: Change name of file created from Testfile + to CMakeTestfile.txt + +2001-06-06 09:44 martink + + * Source/cmSystemTools.cxx: better regexp for reg entries + +2001-06-06 09:43 martink + + * Modules/FindJNI.cmake: better tests + +2001-06-06 07:47 millerjv + + * Source/cmMakefile.cxx: FIX: forgot to close the files + +2001-06-05 22:54 perera + + * Source/cmUnixMakefileGenerator.cxx: ENH: Compress the library + search directories so that each appears only once. + +2001-06-05 20:34 millerjv + + * Source/cmCommands.cxx: ENH: Added AddTest command + +2001-06-05 20:34 millerjv + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: Added AddTest, and + GenerateTestfile routines + +2001-06-05 20:32 millerjv + + * Source/: cmAddTestCommand.cxx, cmAddTestCommand.h: New cmake + command to specify a single test + +2001-06-05 17:46 berk + + * Source/cmVTKWrapPythonCommand.cxx: Module name between Unix and + Windows got switched by mistake. + +2001-06-05 17:41 biddi + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Some tweaks, + hacks and #ifdefs required to compile cmake on Borland C++Builder + +2001-06-05 15:48 hoffman + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: BUG: fix EXE and LIB + path problems + +2001-06-04 18:24 hoffman + + * Source/: cmDSWMakefile.cxx, cmDSWWriter.cxx: STYLE: line too long + +2001-06-04 18:24 hoffman + + * Source/cmMessageCommand.cxx: ENH: print all arguments + +2001-06-04 18:23 hoffman + + * Source/cmSetCommand.cxx: ENH: add better error checking + +2001-06-04 17:17 martink + + * Source/: cmFindIncludeCommand.cxx, cmFindIncludeCommand.h: + removed find include command + +2001-06-04 17:16 martink + + * Source/cmCommands.cxx: removed find include command finally added + message + +2001-06-04 16:55 martink + + * Source/: cmSystemTools.cxx, cmSystemTools.h: new message command + +2001-06-04 16:55 martink + + * Source/: cmMessageCommand.cxx, cmMessageCommand.h: new command + +2001-06-04 16:45 martink + + * Source/cmVTKWrapPythonCommand.cxx: unused variable + +2001-06-04 15:46 barre + + * Templates/: DLLHeader.dsptemplate, EXEHeader.dsptemplate, + EXEWinHeader.dsptemplate, UtilityHeader.dsptemplate, + staticLibHeader.dsptemplate: the "Release" target is not the + default. + +2001-06-04 11:34 hoffman + + * Source/: cmGeneratedFileStream.h, cmUnixMakefileGenerator.cxx: + ENH: try to better handle control-c during make Makefiles + +2001-06-04 10:18 hoffman + + * Source/: cmCacheManager.cxx, cmDSWMakefile.cxx, cmDSWWriter.cxx, + cmFunctionBlocker.h, cmMSProjectGenerator.cxx, cmMakefile.cxx, + cmMakefileGenerator.h: BUG: clean up memory leaks. + +2001-06-01 13:54 martink + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: fix for network + includ paths + +2001-06-01 13:29 berk + + * Source/cmVTKWrapPythonCommand.cxx: Fixing the module name for + Unix. + +2001-05-31 15:48 hoffman + + * Source/cmake.cxx: BUG: fix edit of directories + +2001-05-31 14:15 berk + + * Source/cmVTKWrapPythonCommand.cxx: Should not use decl if not on + Windows. + +2001-05-30 15:56 hoffman + + * Source/cmakemain.cxx: BUG: add missing file + +2001-05-30 15:28 hoffman + + * Source/: CMakeLib.dsp, Makefile.in, cmMSProjectGenerator.cxx, + cmake.cxx, cmake.dsp, cmake.h: ENH: change MFC gui to use cmake + class + +2001-05-29 14:16 perera + + * Source/cmUnixMakefileGenerator.cxx: BUG: Now only one makefile + rule is generated per depenency. This eliminates a number of + warnings. + +2001-05-25 17:19 geoff + + * Source/cmSetCommand.cxx: bug meaning that set(a b) just set a to + "" and not to b + +2001-05-25 15:33 king + + * Source/cmSystemTools.cxx: BUG: Fixed stupid error in the hack I + just checked in. + +2001-05-25 15:32 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: WIN32 executable target + rules are now generated in unix the same as any other executable + (instead of not at all). + +2001-05-25 15:27 barre + + * Templates/CMakeWindowsSystemConfig.cmake: better help + +2001-05-25 14:31 king + + * Source/cmSystemTools.cxx: BUG: Added hack to + cmSystemTools::GetPath to make its algorithm correctly parse off + the last entry of the system PATH environment variable. + +2001-05-25 14:27 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: Fixed logic that splits + a full path library link into the -L and -l pieces to not write + out a -l by itself if the file regular expression does not match. + +2001-05-25 07:31 millerjv + + * Modules/Testing.cmake: BUG: missing quote on a custom command + +2001-05-24 21:17 barre + + * Source/: cmSystemTools.cxx, cmSystemTools.h: New functions used + to extract the components of a full filename. + +2001-05-24 21:14 barre + + * Source/cmFindPathCommand.cxx: The path found is now collapsed + (cleaner). + +2001-05-24 21:13 barre + + * Source/: cmGetFilenameComponentCommand.cxx, + cmGetFilenameComponentCommand.h, cmCommands.cxx: Welcome to + cmGetFilenameComponentCommand ("Get a specific component of a + full filename") + +2001-05-24 21:12 barre + + * Source/CMakeLib.dsp: Welcome to cmGetFilenameComponentCommand + +2001-05-24 21:11 barre + + * Modules/FindTCL.cmake: Try to find tclsh or wish and use that + path to find the include or lib directory. TK_INTERNAL_PATH is + searched too (path to tkWinInt.h) + +2001-05-24 19:17 barre + + * Source/cmSystemTools.cxx: optimize ConvertToUnixSlashes a little + bit, and use it in MakeDirectory (code was duplicated) + +2001-05-24 17:51 king + + * Templates/CMakeSystemConfig.cmake.in: ERR: VAR type entry missing + after CACHE for CMAKE_TEMPLATE_FLAGS. + +2001-05-24 14:59 barre + + * Source/: cmVTKWrapTclCommand.cxx, cmVTKWrapTclCommand.h: updated + to handle Tk commands compiled/linked separately. Useful for VTK + Tk widgets for example. + +2001-05-24 13:45 millerjv + + * Modules/Testing.cmake: Project independent setting for testing + +2001-05-24 13:40 barre + + * Source/: cmSystemTools.cxx, cmSystemTools.h: new Capitalized + function. Will be used in the VTK Tcl wrapper for example (in a + more portable way). + +2001-05-24 12:57 hoffman + + * Modules/FindOpenGL.cmake, Source/cmSetCommand.cxx, + Source/cmSetCommand.h, Templates/CMakeSystemConfig.cmake.in, + Templates/CMakeWindowsSystemConfig.cmake: ENH: change the syntax + of the SET command, fix the combo box for larger strings + +2001-05-24 11:47 martink + + * Source/: cmMakefile.h, cmake.cxx: added version number + +2001-05-24 10:32 barre + + * Templates/DLLHeader.dsptemplate: removed hardcoded VTKDLL + +2001-05-24 10:00 barre + + * Templates/: DLLHeader.dsptemplate, EXEHeader.dsptemplate, + EXEWinHeader.dsptemplate, staticLibHeader.dsptemplate: slight + change in the order of the options (right-most takes precedence) + +2001-05-23 20:16 millerjv + + * Source/cmBuildCommand.cxx: Changed Windows build command to build + Release + +2001-05-23 18:31 barre + + * Templates/DLLHeader.dsptemplate: Intermediate Dir was wrong + +2001-05-23 18:22 barre + + * Templates/CMakeWindowsSystemConfig.cmake: /Gz => /GZ + +2001-05-23 18:19 barre + + * Templates/CMakeWindowsSystemConfig.cmake: removed /O2 from debug + +2001-05-23 17:19 hoffman + + * Source/cmDSPMakefile.cxx, Source/cmDSPWriter.cxx, + Templates/CMakeWindowsSystemConfig.cmake, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: ENH: create + CMAKE_CXX_FLAGS_[Buildtype] flags + +2001-05-23 16:31 martink + + * Source/cmMSProjectGenerator.cxx: bug finding windows template + file + +2001-05-23 16:28 martink + + * Source/: cmSystemTools.cxx, cmake.cxx: command line fixes for + win32 + +2001-05-23 16:09 barre + + * Templates/: DLLHeader.dsptemplate, EXEHeader.dsptemplate, + EXEWinHeader.dsptemplate, UtilityHeader.dsptemplate, + staticLibHeader.dsptemplate: ReleaseMinSize => MinSizeRel + +2001-05-23 15:53 hoffman + + * Templates/DLLHeader.dsptemplate: BUG: remove vtkCommon + +2001-05-23 15:49 martink + + * Source/cmake.cxx: fixed quoted cmake + +2001-05-23 14:44 hoffman + + * Source/cmSystemTools.cxx: ENH: add better error message + +2001-05-23 14:33 geoff + + * Source/cmake.dsp: DSPs have to be binary + +2001-05-23 14:05 hoffman + + * Templates/: DLLHeader.dsptemplate, EXEHeader.dsptemplate, + EXEWinHeader.dsptemplate, UtilityHeader.dsptemplate, + staticLibHeader.dsptemplate: ENH: change Release Minsize to + MinSizeRel, add MinSizeRel to dll template + +2001-05-23 13:16 king + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: ENH: Added INSTALL + target to switch in OutputDSPFile. Also added a default that + prints out an error message so that anyone who adds a target + doesn't forget to update the switch. + +2001-05-23 12:02 martink + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx, cmDSWMakefile.cxx, + cmDSWWriter.cxx: install fixes for win32 + +2001-05-23 11:53 martink + + * Source/: cmMakefile.cxx, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: added install target support + +2001-05-23 11:34 ibanez + + * Modules/FindVTK.cmake: Module to search for VTK include and + library paths + +2001-05-23 11:29 martink + + * Source/: cmInstallFilesCommand.cxx, cmInstallFilesCommand.h, + cmInstallTargetsCommand.cxx, cmInstallTargetsCommand.h, + cmCommands.cxx, cmTarget.cxx, cmTarget.h: added install rules + +2001-05-23 11:27 martink + + * Templates/CMakeSystemConfig.cmake.in: added prefix to config + +2001-05-23 10:47 hoffman + + * Source/cmGeneratedFileStream.h: BUG: remove warning + +2001-05-23 10:47 hoffman + + * Source/cmake.dsp: BUG: fix output directory + +2001-05-23 10:01 martink + + * Source/cmProjectCommand.cxx: added PROJECT_SOURCE_DIR + +2001-05-23 09:35 hoffman + + * Source/cmTarget.cxx: ENH: allow duplicate libraries + +2001-05-22 20:45 barre + + * Templates/UtilityHeader.dsptemplate: Template now uses + EXECUTABLE_OUTPUT_PATH too. + +2001-05-22 20:44 barre + + * Templates/EXEWinHeader.dsptemplate: PROP BASE and PROP were + inverted + +2001-05-22 20:36 barre + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: Seems to me that + EXEWinHeader was not searched in the right place. + +2001-05-22 17:49 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: do not include /usr/lib + in -L + +2001-05-22 13:52 hoffman + + * Source/Makefile.in: fix CXXFLAGS + +2001-05-22 13:42 hoffman + + * Source/Makefile.in: [no log message] + +2001-05-22 13:40 hoffman + + * configure, configure.in: use cxxflags in test builds + +2001-05-22 13:22 hoffman + + * Source/Makefile.in, Source/cmUnixMakefileGenerator.cxx, + Templates/configure, Templates/configure.in: BUG: fix depends and + CXXFLAGS passing + +2001-05-22 12:38 barre + + * Source/cmDSPMakefile.cxx, Source/cmDSPWriter.cxx, + Templates/DLLHeader.dsptemplate, Templates/EXEHeader.dsptemplate, + Templates/EXEWinHeader.dsptemplate, + Templates/staticLibHeader.dsptemplate: fixed some of the + LIBRARY_OUTPUT_PATH and EXECUTABLE_OUTPUT_PATH problems. + +2001-05-22 11:15 martink + + * dummy.in: no longer used + +2001-05-21 16:43 king + + * Makefile.in: ERR: Added missing @srcdir@ and modified install + expressions to include *.cmake* files instead of just *.cmake + files (for .in). + +2001-05-21 16:21 king + + * Source/cmCableWrapTclCommand.cxx: ENH: Converted to new Class and + Group tags in place of WrapperSet and Groups tags. + +2001-05-21 16:10 hoffman + + * Source/cmUnixMakefileGenerator.cxx, + Templates/CMakeSystemConfig.cmake.in: fix for hp x11 and gl + +2001-05-21 15:16 hoffman + + * Modules/FindOpenGL.cmake, Source/cmSystemTools.cxx: fix opengl on + hp + +2001-05-21 14:17 hoffman + + * Source/cmake.cxx: BUG: remove declaration without variable + +2001-05-21 14:01 hoffman + + * configure, configure.in, Source/Makefile.in, + Source/cmBuildNameCommand.cxx, + Source/cmUnixMakefileGenerator.cxx, + Templates/CMakeSystemConfig.cmake.in: clean up for build on its + own + +2001-05-21 11:43 martink + + * Source/cmake.dsp: release fix + +2001-05-21 11:34 martink + + * Source/: CMakeBuildTargets.cxx, CMakeSetupCMD.cxx, + CMakeSetupCMD.dsp: collapsed into cmake.cxx + +2001-05-21 11:32 martink + + * Source/cmake.dsp: new dsp + +2001-05-21 11:13 martink + + * Source/cmake.cxx: bug fix in finding CMAKE_ROOT + +2001-05-21 11:10 martink + + * Makefile.in: added install target + +2001-05-21 10:47 hoffman + + * Source/: cmBuildNameCommand.cxx, cmSetCommand.cxx: BUG: fix + compiler name + +2001-05-21 09:50 martink + + * Source/: CMakeSetup.dsw, cmake.cxx: updated for out of tree + builds + +2001-05-21 09:32 martink + + * Makefile.in, configure, configure.in, install-sh: out of place + cmake + +2001-05-21 09:32 martink + + * CMakeSystemConfig.cmake.in, configure.in.sample, + Source/Makefile.in, Source/cmMakefile.cxx, + Source/cmUnixMakefileGenerator.cxx, Source/cmake.cxx: new out of + place builds + +2001-05-21 09:31 martink + + * Templates/: CMakeSystemConfig.cmake.in, configure, configure.in: + new structure + +2001-05-18 16:45 hoffman + + * CMakeSystemConfig.cmake.in, Source/cmUnixMakefileGenerator.cxx: + ENH: add support for X11 + +2001-05-18 16:30 martink + + * Source/cmUnixMakefileGenerator.cxx: duh + +2001-05-18 15:25 martink + + * Source/: cmake.cxx, cmake.h: new command + +2001-05-18 15:23 martink + + * Source/cmSystemTools.h: minor whitespace change + +2001-05-18 15:22 martink + + * Source/cmMSProjectGenerator.cxx: compiler fix + +2001-05-18 15:20 martink + + * Source/: cmMSProjectGenerator.cxx, cmMSProjectGenerator.h, + cmMakefileGenerator.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: changes for cmake to live outside of + the source tree + +2001-05-18 13:04 hoffman + + * CMakeSystemConfig.cmake.in, Source/cmSetCommand.cxx: ENH: allow + cache to override config file + +2001-05-18 11:48 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: fix link of executables + +2001-05-18 11:12 martink + + * Source/cmMakefileGenerator.h: added SetLocal method + +2001-05-18 11:09 martink + + * Source/: cmMSProjectGenerator.cxx, cmMSProjectGenerator.h, + cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: added + SetLocal method + +2001-05-18 10:15 hoffman + + * CMakeSystemConfig.cmake.in, Source/cmUnixMakefileGenerator.cxx: + BUG: quote the compiler and other options + +2001-05-17 17:43 hoffman + + * Source/: CMakeBuildTargets.cxx, Makefile.in: compile source dir + into cmake + +2001-05-17 15:48 will + + * Source/cmSystemTools.cxx: ERR:Bad #ifdef's + +2001-05-17 12:36 martink + + * Source/: DLLFooter.dsptemplate, DLLHeader.dsptemplate, + EXEFooter.dsptemplate, EXEHeader.dsptemplate, + EXEWinHeader.dsptemplate, UtilityFooter.dsptemplate, + UtilityHeader.dsptemplate, staticLibFooter.dsptemplate, + staticLibHeader.dsptemplate: moved into Template directory + +2001-05-17 12:25 martink + + * CMakeMakefileTemplate.in, CMakeMaster.make.in, + CMakeRules.make.in, CMakeSimpleRules.make.in, + CMakeTargets.make.in, CMakeTopMakefileTemplate.in, + CMakeVariables.make.in, CMakeWindowsSystemConfig.cmake: no longer + used + +2001-05-17 12:14 martink + + * Source/CMakeBuildTargets.cxx: unix fix + +2001-05-17 12:08 martink + + * Source/: CMakeBuildTargets.cxx, CMakeSetupCMD.cxx, + cmCablePackageCommand.cxx, cmDSPMakefile.cxx, cmDSPWriter.cxx, + cmMakefile.cxx, cmUnixMakefileGenerator.cxx: half checked in + changes for CMAKE_ROOT + +2001-05-17 12:04 martink + + * Templates/: CMakeWindowsSystemConfig.cmake, + DLLFooter.dsptemplate, DLLHeader.dsptemplate, + EXEFooter.dsptemplate, EXEHeader.dsptemplate, + EXEWinHeader.dsptemplate, UtilityFooter.dsptemplate, + UtilityHeader.dsptemplate, staticLibFooter.dsptemplate, + staticLibHeader.dsptemplate: new directory + +2001-05-17 11:44 hoffman + + * Source/: cmCableWrapTclCommand.cxx, cmConfigure.h.in, + cmGeneratedFileStream.h, cmStandardIncludes.h: BUG: fix to + compile on hp with aCC + +2001-05-17 11:22 king + + * Source/cmCableWrapTclCommand.cxx: Renamed gccxml input/output + files to drop _tcl qualification. + +2001-05-16 18:10 hoffman + + * CMakeSystemConfig.cmake.in: ENH: fix for sunCC + +2001-05-16 18:08 hoffman + + * Source/: cmCacheManager.cxx, cmUnixMakefileGenerator.cxx: BUG: + fix for sun compiler + +2001-05-16 17:43 king + + * Source/: cmCableClassSet.cxx, cmCableClassSet.h: ERR: Removed use + of member templates. + +2001-05-16 17:18 king + + * Source/cmUnixMakefileGenerator.cxx: ERR: int -> unsigned int + +2001-05-16 17:18 king + + * Source/cmGeneratedFileStream.h: ERR: const error fixed. + +2001-05-16 17:11 king + + * Source/CMakeLib.dsp: ENH: Added cmCableClassSet.cxx to build. + +2001-05-16 17:11 king + + * Source/cmGeneratedFileStream.h: ERR: Added is_open() check in + cmGeneratedFileStream::operator bool() so that implicit + conversion to bool is not used. + +2001-05-16 17:11 king + + * Source/cmCableClassSet.cxx: ERR: Removed dynamic_cast so that + RTTI isn't required. + +2001-05-16 16:41 king + + * Source/: Makefile.in, cmCableClassSet.cxx, cmCableClassSet.h, + cmCableClassSetCommand.cxx, cmCableClassSetCommand.h, + cmCableWrapTclCommand.cxx, cmCableWrapTclCommand.h, + cmCommands.cxx: ENH: Adding CABLE_CLASS_SET and CABLE_WRAP_TCL + commands. They cannot yet be used with the main branch of CABLE, + though. + +2001-05-16 16:40 king + + * Source/cmGeneratedFileStream.h: ENH: cmGeneratedFileStream class + added to simplify copy-if-different usage on generated files. + +2001-05-16 15:43 hoffman + + * configure.in.sample: [no log message] + +2001-05-16 15:15 hoffman + + * CMakeSystemConfig.cmake.in, Source/Makefile.in, + Source/cmBuildNameCommand.cxx, + Source/cmBuildSharedLibrariesCommand.cxx, + Source/cmCacheManager.cxx, Source/cmCacheManager.h, + Source/cmDSPMakefile.cxx, Source/cmDSPWriter.cxx, + Source/cmMakeDepend.cxx, Source/cmMakefile.cxx, + Source/cmProjectCommand.cxx, Source/cmSetCommand.cxx, + Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h: ENH: unify make process on unix + +2001-05-16 09:19 king + + * Source/: cmData.h, cmMakefile.cxx, cmMakefile.h: ENH: Added + cmData and corresponding DataMap in cmMakefile to allow commands + to register arbitrary extra data with the makefile without + modifying the cmMakefile class definition. + +2001-05-15 13:14 martink + + * Source/: DLLHeader.dsptemplate, EXEHeader.dsptemplate, + EXEWinHeader.dsptemplate, cmDSPMakefile.cxx, cmDSPWriter.cxx, + staticLibHeader.dsptemplate: added output directory support + +2001-05-14 16:47 barre + + * Source/cmSystemTools.cxx: Changed separator between registry key + and its value. Change regexp for registry key. + +2001-05-14 16:46 barre + + * Modules/FindTCL.cmake: Changed separator between registry key and + its value. + +2001-05-14 10:36 hoffman + + * Source/cmSystemTools.cxx: ENH: put back lost changes from r1.38 + +2001-05-12 07:29 barre + + * Source/cmSystemTools.cxx: fix + => += bug reported by A. Perera + +2001-05-11 17:22 barre + + * Source/cmSystemTools.cxx: Extended the registry key regexp + +2001-05-11 17:11 barre + + * Modules/FindTCL.cmake: Add 8.4 and registry support + +2001-05-11 17:11 barre + + * Source/cmSystemTools.cxx: Add support for a specific value name + in a registry key + +2001-05-11 14:49 geoff + + * Source/cmCacheManager.cxx: Cache file is a bit prettier + +2001-05-11 14:39 hoffman + + * Source/: cmCableSourceFilesCommand.cxx, cmSystemTools.cxx, + cmUnixMakefileGenerator.cxx: BUG: fix find library for unix + +2001-05-11 13:58 barre + + * Modules/FindPythonLibs.cmake: NAMES syntax + +2001-05-11 13:52 martink + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: fix for expanding + library vars + +2001-05-11 12:30 barre + + * Source/cmFindLibraryCommand.cxx: Fix help string when NAMES was + used (forgot the case when there is no name) + +2001-05-11 12:13 barre + + * Source/cmFindLibraryCommand.cxx: Fix help string when NAMES was + used + +2001-05-11 11:45 king + + * Source/cmFindLibraryCommand.cxx: ERR: int -> unsigned int. + +2001-05-11 11:39 hoffman + + * CMakeVariables.make.in, Source/cmFindLibraryCommand.cxx: BUG: add + back thread library + +2001-05-11 11:07 martink + + * Source/cmFindProgramCommand.cxx: expands reg values + +2001-05-11 10:52 martink + + * Source/: EXEHeader.dsptemplate, cmAddExecutableCommand.cxx, + cmAddExecutableCommand.h, cmDSPMakefile.cxx, cmDSPMakefile.h, + cmDSPWriter.cxx, cmDSPWriter.h, cmFindLibraryCommand.cxx, + cmFindPathCommand.cxx, cmMakefile.cxx, cmMakefile.h, + cmSystemTools.cxx, cmSystemTools.h, cmUnixMakefileGenerator.cxx, + EXEWinHeader.dsptemplate: added registry entry support and + windows app support + +2001-05-11 10:27 martink + + * Modules/: FindJNI.cmake, FindPythonLibs.cmake: minor fixes and + new python module + +2001-05-10 17:22 hoffman + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: BUG: fix up gui with + values that stay around too long + +2001-05-10 16:21 geoff + + * Source/cmMakefile.cxx: definitions should now be overwritten if + they already exist + +2001-05-10 15:50 hoffman + + * Source/cmSystemTools.cxx: BUG: fix unix path search + +2001-05-10 15:32 martink + + * Source/cmTarget.cxx: fix for expaning libraries prior to + generating dsp + +2001-05-10 14:30 geoff + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: Reads and uses + MSPROJECT_TEMPLATE_DIRECTORY if it exists + +2001-05-10 14:02 king + + * CMake.doc: BUG: Removing this file. It has been replaced by + CMake.doc.gz to get around a problem with CVS. + +2001-05-10 13:52 martink + + * Source/cmTarget.h: added win32 executable option + +2001-05-10 12:25 king + + * CMake.doc.gz: Testing strange cvs problem with .doc files. + +2001-05-10 12:05 king + + * CMake.pdf, CMake.pdf.gz: BUG: Removing old CMake.pdf and adding + the gzipped version, CMake.pdf.gz because of file size problems + with cvs. + +2001-05-10 11:20 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: Removed stray debugging + output statement. Also renamed some variables for clarity. + +2001-05-10 11:19 king + + * Source/cmSystemTools.cxx: ERR: RunCommand method needed return in + unix. + +2001-05-10 11:18 king + + * Source/: cmFindLibraryCommand.cxx, cmFindProgramCommand.cxx: ERR: + Removed unused variable + +2001-05-10 09:45 king + + * CMakeVariables.make.in: BUG: ANSI_CFLAGS -> CMAKE_ANSI_CFLAGS + +2001-05-09 18:00 geoff + + * Source/: EXEHeader.dsptemplate, cmDSPMakefile.cxx, + cmDSPWriter.cxx: ADD LINK32s are now on multiple lines because VC + breaks otherwise + +2001-05-09 17:38 barre + + * Modules/FindTCL.cmake: ENH: add 8.3 support + +2001-05-09 16:17 hoffman + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: BUG: escape spaces + before adding .lib + +2001-05-09 16:08 hoffman + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: ENH: escape spaces + +2001-05-09 15:48 hoffman + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: ENH: only add .lib + if no .lib exists + +2001-05-09 14:53 hoffman + + * Modules/FindFLTK.cmake, Modules/FindGTK.cmake, + Modules/FindJNI.cmake, Modules/FindJPEG.cmake, + Modules/FindMPI.cmake, Modules/FindTCL.cmake, Source/cmCommand.h, + Source/cmFindLibraryCommand.cxx, Source/cmFindLibraryCommand.h, + Source/cmFindProgramCommand.cxx, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmUnixMakefileGenerator.cxx: ENH: + change find library and find program to look for more than one + name + +2001-05-09 13:44 hoffman + + * Source/cmCableDefineSetCommand.cxx: BUG: match called on invalid + number + +2001-05-09 13:22 martink + + * CMakeMaster.make.in, CMakeRules.make.in, + CMakeSystemConfig.cmake.in, CMakeTopMakefileTemplate.in, + CMakeVariables.make.in, configure.in.sample, Source/Makefile.in: + cleaned up configure some + +2001-05-09 11:15 millerjv + + * Source/cmCacheManager.cxx: FIX: only clear the cache on a load + when the load needs to read internal values. Otherwise, it is + assumed that we are reading another projects cache. + +2001-05-09 09:52 hoffman + + * Source/cmConfigureFileCommand.cxx: BUG: fix use beyond end of + array + +2001-05-09 08:51 martink + + * Source/: cmCommands.cxx, cmLoadCacheCommand.cxx, + cmLoadCacheCommand.h, cmSourceFile.cxx: added load cache command + and fixed source file + +2001-05-08 17:37 king + + * Source/cmCacheManager.cxx: ERR: LoadCache needed to return a + value. + +2001-05-08 17:04 martink + + * Source/: cmCacheManager.cxx, cmCacheManager.h: added ability to + load another cache + +2001-05-08 17:03 martink + + * Source/cmProjectCommand.cxx: now adds src and bin dir into cache + +2001-05-08 16:20 martink + + * Source/cmVTKWrapTclCommand.cxx: fixed bug in init code + +2001-05-08 16:01 hoffman + + * configure.in.sample: clean up + +2001-05-08 11:40 martink + + * Source/cmTargetLinkLibrariesCommand.cxx: BUG: added arg0 to link + libraries + +2001-05-08 10:16 ibanez + + * Modules/FindFLTK.cmake: Module to search the path for FLTK + library ( http://www.fltk.org ) + +2001-05-07 18:14 king + + * Source/: cmAddExecutableCommand.cxx, cmAddLibraryCommand.cxx, + cmMakefile.cxx: ENH: Moved cache entry addition into + cmMakefile::AddLibrary and AddExecutable so that commands do not + have to add it explicitly. + +2001-05-07 18:11 hoffman + + * CMakeSystemConfig.cmake.in, Source/CMakeBuildTargets.cxx, + Source/Makefile.in, Source/cmCacheManager.cxx, + Source/cmCommands.cxx, Source/cmConfigureFile.cxx, + Source/cmConfigureFile.h, Source/cmConfigureFileCommand.cxx, + Source/cmConfigureFileCommand.h, Source/cmExecProgram.cxx, + Source/cmExecProgram.h, Source/cmExecProgramCommand.cxx, + Source/cmExecProgramCommand.h, Source/cmMakeDirectoryCommand.cxx, + Source/cmMakeDirectoryCommand.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmSystemTools.cxx, + Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h: ENH: call configure from cmake + +2001-05-07 10:02 blezek + + * Source/cmConfigureFile.cxx: BUG: Removing Remove Variables call + +2001-05-07 09:16 geoff + + * configure.in.sample: Under FreeBSD: should be + CMAKE_SHLIB_BUILD_FLAGS and not CMAKE_SHLIB_LINK_FLAGS. + CMakeSystemConfig.cmake not being made + +2001-05-05 11:28 hoffman + + * Source/cmAddExecutableCommand.cxx: BUG: add internal cache entry + for executables, so depends can work + +2001-05-05 11:03 hoffman + + * Source/: cmAddTargetCommand.cxx, cmAddTargetCommand.h, + cmCableInstantiateClassCommand.h, cmCableInstantiateCommand.h, + cmCommands.cxx, cmLibraryCommand.cxx: BUG: add removed command, + and sort the order in cmCommands.cxx + +2001-05-04 17:00 martink + + * Source/: cmMakefile.cxx, cmUnixMakefileGenerator.cxx: fixes for + untiltiy targets in all + +2001-05-04 16:44 blezek + + * Source/cmBuildNameCommand.cxx: ENH: Proper build name + +2001-05-04 16:43 blezek + + * Source/cmSiteNameCommand.cxx: ENH: Correct sitename + +2001-05-04 15:50 martink + + * Source/: cmAddCustomTargetCommand.cxx, + cmAddCustomTargetCommand.h, cmAddTargetCommand.cxx, + cmAddTargetCommand.h, cmDSWMakefile.cxx, cmDSWWriter.cxx, + cmMakefile.cxx, cmMakefile.h, cmTarget.h, + cmVTKWrapJavaCommand.cxx: option to make utilities in the all + target + +2001-05-04 14:53 hoffman + + * CMakeSystemConfig.cmake.in, CMakeWindowsSystemConfig.cmake: ENH: + move to cmake for itkConfigure.h.in + +2001-05-04 12:52 martink + + * Source/cmVTKWrapJavaCommand.cxx: updates + +2001-05-04 11:35 geoff + + * Modules/: FindGTK.cmake, FindJPEG.cmake: INCLUDE these to find + the relevant libraries + +2001-05-04 11:34 hoffman + + * Source/: cmAddCustomTargetCommand.cxx, + cmAddCustomTargetCommand.h, cmBuildCommand.cxx, cmBuildCommand.h, + cmBuildNameCommand.cxx, cmBuildNameCommand.h, cmExecProgram.cxx, + cmExecProgram.h, cmSiteNameCommand.cxx, cmSiteNameCommand.h: ENH: + move testing stuff to cmake from configure, good bye dashboard... + :) + +2001-05-04 11:30 hoffman + + * CMakeRules.make.in, CMakeSystemConfig.txt.in, + CMakeWindowsSystemConfig.txt, Source/cmAddTargetCommand.cxx, + Source/cmAddTargetCommand.h, Source/cmCacheManager.cxx, + Source/cmCommands.cxx, Source/cmDSWMakefile.cxx, + Source/cmDSWWriter.cxx, Source/cmFindProgramCommand.cxx, + Source/cmMakefile.cxx, Source/cmOptionCommand.cxx, + Source/cmOptionCommand.h, Source/cmSourceGroup.cxx, + Source/cmSourceGroup.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmUnixMakefileGenerator.cxx: ENH: + move testing stuff to cmake from configure, good bye dashboard... + :) + +2001-05-04 10:44 king + + * Source/cmSystemTools.cxx: ENH: Added support to EscapeSpaces to + use double quotes on windows. + +2001-05-04 10:44 king + + * Source/cmCablePackageCommand.cxx: ENH: Added use of CMAKE cache + entry for generating the DSP/makefile build rules. + +2001-05-04 10:44 king + + * Source/: cmDSPMakefile.cxx, cmDSPMakefile.h, cmDSPWriter.cxx, + cmDSPWriter.h: ENH: Added use of CMAKE cache entry for generating + the DSP build rules. + +2001-05-04 10:13 martink + + * Modules/FindJNI.cmake: minor fixes + +2001-05-04 09:56 martink + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: fixed custom command + rule + +2001-05-04 09:47 martink + + * Modules/FindJNI.cmake: new module + +2001-05-04 09:39 martink + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx, cmSourceGroup.cxx, + cmSourceGroup.h, cmVTKWrapJavaCommand.cxx: better custom rules + +2001-05-04 08:46 martink + + * Source/: cmFunctionBlocker.h, cmIfCommand.cxx, cmIfCommand.h, + cmMakefile.cxx, cmVTKWrapJavaCommand.cxx: better If checks + +2001-05-04 08:45 martink + + * Source/: cmSourceFilesRequireCommand.cxx, + cmSourceFilesRequireCommand.h, cmUnixDefinesCommand.cxx, + cmUnixDefinesCommand.h, cmUnixLibrariesCommand.cxx, + cmUnixLibrariesCommand.h, cmWin32DefinesCommand.cxx, + cmWin32DefinesCommand.h, cmWin32IncludeDirectoryCommand.cxx, + cmWin32IncludeDirectoryCommand.h, cmWin32LibrariesCommand.cxx, + cmWin32LibrariesCommand.h: removed old functions + +2001-05-03 16:55 king + + * Source/: CMakeBuildTargets.cxx, CMakeSetupCMD.cxx: ENH: Added + generation of internal CMAKE cache entry with path to + command-line CMake executable. + +2001-05-03 16:55 king + + * Source/: cmFindProgramCommand.cxx, cmSystemTools.cxx, + cmSystemTools.h: ENH: Added cmSystemTools::FindProgram() and + full-path detection utilities. + +2001-05-03 15:27 martink + + * Source/: cmCommands.cxx, cmVTKWrapJavaCommand.cxx, + cmVTKWrapJavaCommand.h: minor fixes + +2001-05-03 11:04 martink + + * Source/cmCommands.cxx: removed deprecated commands + +2001-05-03 10:58 martink + + * CMakeSystemConfig.cmake.in: better config info + +2001-05-03 10:35 martink + + * Source/cmConfigureFile.cxx: now support cmakedefine + +2001-05-03 08:53 martink + + * CMakeSystemConfig.txt.in, CMakeWindowsSystemConfig.txt: uses + cmake commands now + +2001-05-03 08:52 martink + + * CMakeSystemConfig.cmake.in, CMakeSystemConfig.txt.in, + CMakeWindowsSystemConfig.cmake, CMakeWindowsSystemConfig.txt, + Source/cmMakefile.cxx, Source/cmMakefile.h: system config uses + cmake commands now + +2001-05-02 17:33 martink + + * Modules/FindMPI.cmake: minor fixes + +2001-05-02 17:07 martink + + * Modules/FindMPI.cmake: new module + +2001-05-02 14:08 martink + + * Modules/FindOpenGL.cmake: simple module + +2001-05-02 11:53 martink + + * Modules/FindTCL.cmake: finds tk as well + +2001-05-02 11:53 martink + + * Source/: CMakeBuildTargets.cxx, CMakeSetupCMD.cxx: cache loaded + into makefile + +2001-05-01 17:52 martink + + * Source/: cmVTKWrapPythonCommand.cxx, cmVTKWrapTclCommand.cxx: + fixed bug in limiting to source lists + +2001-05-01 17:37 king + + * Source/: cmCableDefineSetCommand.cxx, cmCableDefineSetCommand.h, + cmCableWrapCommand.cxx, cmCableWrapCommand.h: ENH: Changed + cmCableWrapCommand to inherit from cmCableDefineSetCommand since + they do almost exactly the same thing. Added a GetXmlTag virtual + function to both classes to return what XML tag to generate in + the set's output. cmCableDefineSetCommand generates a "Set" tag, + and cmCableWrapCommand generates a "WrapperSet" tag. What is + inside the tags is still generated by the cmCableDefineSetCommand + superclass. + +2001-05-01 17:35 king + + * Source/: cmCableInstantiateClassCommand.cxx, + cmCableInstantiateClassCommand.h, cmCableInstantiateCommand.cxx, + cmCableInstantiateCommand.h, cmCablePackageEntryCommand.cxx, + cmCablePackageEntryCommand.h, cmCableSourceFilesCommand.cxx, + cmCableSourceFilesCommand.h: ENH: Changed WriteConfiguration back + to const because it doesn't need to report errors anymore. + +2001-05-01 17:12 hoffman + + * Source/: UtilityFooter.dsptemplate, UtilityHeader.dsptemplate: + ADD: add utiltity templates + +2001-05-01 16:55 hoffman + + * configure.in.sample, Source/cmAddTargetCommand.cxx, + Source/cmDSPMakefile.cxx, Source/cmDSPMakefile.h, + Source/cmDSPWriter.cxx, Source/cmDSPWriter.h, + Source/cmDSWMakefile.cxx, Source/cmDSWMakefile.h, + Source/cmDSWWriter.cxx, Source/cmDSWWriter.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, Source/cmTarget.h, + Source/cmUnixMakefileGenerator.cxx: ENH: implement ADD_TARGET + command, and add an ALL_BUILD target + +2001-05-01 16:34 martink + + * Source/cmMakefile.cxx: cache now loaded into makefile + +2001-05-01 16:28 martink + + * Source/: cmCacheManager.cxx, cmCacheManager.h: added method to + puch cache into makefile defines + +2001-05-01 16:27 martink + + * Source/cmIfCommand.cxx: slight bug in If command I think + +2001-05-01 11:28 martink + + * Modules/FindTCL.cmake: first module + +2001-05-01 11:16 martink + + * Source/: cmCommands.cxx, cmElseCommand.cxx, cmIfCommand.cxx, + cmIfCommand.h, cmSetCommand.cxx, cmSetCommand.h, + cmVTKWrapPythonCommand.cxx, cmVTKWrapTclCommand.cxx: new set + command and IF NOT + +2001-04-30 14:56 martink + + * Source/: cmElseCommand.cxx, cmFindFileCommand.cxx, + cmFindLibraryCommand.cxx, cmFindPathCommand.cxx, cmIfCommand.cxx, + cmSystemTools.cxx, cmSystemTools.h: bug fixes + +2001-04-30 11:51 king + + * Source/cmCablePackageCommand.cxx: BUG: Fixed output of + CMakeLists.txt path in cable_config.xml dependency list for unix. + Needed to escape spaces instead of enclosing in double quotes. + +2001-04-30 11:29 king + + * Source/cmMakefile.h: ERR: Removed a conflict that was checked in. + +2001-04-30 10:52 anonymous + + * Source/: cmCommands.cxx, cmDSPMakefile.cxx, cmDSPMakefile.h, + cmDSPWriter.cxx, cmDSPWriter.h, cmIncludeCommand.cxx, + cmIncludeCommand.h, cmMakefile.cxx, cmMakefile.h: New command: + INCLUDE(somefile.txt) + +2001-04-30 10:44 martink + + * Source/: cmCommands.cxx, cmDSPMakefile.cxx, cmDSPWriter.cxx, + cmDSWMakefile.cxx, cmDSWWriter.cxx, cmFindIncludeCommand.cxx, + cmFindLibraryCommand.cxx, cmLinkLibrariesCommand.cxx, + cmLinkLibrariesCommand.h, cmMakefile.cxx, cmMakefile.h, + cmTarget.cxx, cmTarget.h, cmTargetLinkLibrariesCommand.cxx, + cmTargetLinkLibrariesCommand.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h: added TARGET_LINK_LIBRARY command and + support for debug and release libraries to link against + +2001-04-27 14:57 king + + * Source/cmUnixMakefileGenerator.cxx: ERR: Renamed CustomCommands + to BuildRules to match change in cmSourceGroup. + +2001-04-27 14:52 king + + * Source/cmCablePackageCommand.cxx: BUG: Removed output of GCC_XML + rules when the command cannot be found. + +2001-04-27 14:51 king + + * Source/: cmDSPMakefile.cxx, cmDSPMakefile.h, cmDSPWriter.cxx, + cmDSPWriter.h, cmSourceGroup.cxx, cmSourceGroup.h: BUG: Removed + output of dual rules for source files that are processed by both + the compiler and by a custom command. Also removed generation of + duplicate CMakeLists.txt in the project files. + +2001-04-27 14:40 martink + + * CMakeSystemConfig.txt.in, CMakeWindowsSystemConfig.txt: get + system info into cmake + +2001-04-27 14:25 martink + + * Source/: cmConfigureFile.cxx, cmConfigureFile.h: added configure + file + +2001-04-27 11:53 hoffman + + * configure.in.sample: BUG: run cache build with each configure + +2001-04-27 11:36 hoffman + + * CMakeRules.make.in, Source/cmMakefile.cxx: BUG: fix inplace + builds + +2001-04-27 11:03 hoffman + + * Source/cmMakefile.cxx: ENH: fix in source build with non-gnu + +2001-04-27 09:32 hoffman + + * Source/cmMakefile.cxx: ENH: add output when creating files + +2001-04-27 09:30 martink + + * Source/: cmFindFileCommand.cxx, cmFindLibraryCommand.cxx, + cmFindPathCommand.cxx: better help strings + +2001-04-27 09:13 will + + * Source/cmAuxSourceDirectoryCommand.h: ENH:New copyright + +2001-04-27 08:46 martink + + * CMakeVariables.make.in: removed old junk + +2001-04-27 08:01 will + + * Source/: CMakeBuildTargets.cxx, CMakeSetupCMD.cxx, + cmAddDefinitionsCommand.cxx, cmAddDefinitionsCommand.h, + cmAddExecutableCommand.cxx, cmAddExecutableCommand.h, + cmAddLibraryCommand.cxx, cmAddLibraryCommand.h, + cmAddTargetCommand.cxx, cmAddTargetCommand.h, + cmAuxSourceDirectoryCommand.cxx, + cmBuildSharedLibrariesCommand.cxx, + cmCableCloseNamespaceCommand.cxx, cmCableCloseNamespaceCommand.h, + cmCableCommand.cxx, cmCableCommand.h, cmCableData.cxx, + cmCableData.h, cmCableDefineSetCommand.cxx, + cmCableDefineSetCommand.h, cmCableInstantiateClassCommand.cxx, + cmCableInstantiateClassCommand.h, cmCableInstantiateCommand.cxx, + cmCableInstantiateCommand.h, cmCableOpenNamespaceCommand.cxx, + cmCableOpenNamespaceCommand.h, cmCablePackageCommand.cxx, + cmCablePackageCommand.h, cmCablePackageEntryCommand.cxx, + cmCablePackageEntryCommand.h, cmCableSourceFilesCommand.cxx, + cmCableSourceFilesCommand.h, cmCableWrapCommand.cxx, + cmCableWrapCommand.h, cmCacheManager.cxx, cmCacheManager.h, + cmCommand.h, cmCommands.h, cmConfigureFileNoAutoconf.cxx, + cmConfigureFileNoAutoconf.h, cmCustomCommand.cxx, + cmCustomCommand.h, cmDSPMakefile.cxx, cmDSPMakefile.h, + cmDSPWriter.cxx, cmDSPWriter.h, cmDSWMakefile.cxx, + cmDSWMakefile.h, cmDSWWriter.cxx, cmDSWWriter.h, cmDirectory.cxx, + cmDirectory.h, cmElseCommand.cxx, cmElseCommand.h, + cmEndIfCommand.cxx, cmEndIfCommand.h, cmFindFileCommand.cxx, + cmFindFileCommand.h, cmFindIncludeCommand.cxx, + cmFindIncludeCommand.h, cmFindLibraryCommand.cxx, + cmFindLibraryCommand.h, cmFindProgramCommand.cxx, + cmFindProgramCommand.h, cmFunctionBlocker.h, cmIfCommand.cxx, + cmIfCommand.h, cmIncludeDirectoryCommand.cxx, + cmIncludeDirectoryCommand.h, + cmIncludeRegularExpressionCommand.cxx, + cmIncludeRegularExpressionCommand.h, cmLibraryCommand.cxx, + cmLibraryCommand.h, cmLinkDirectoriesCommand.cxx, + cmLinkDirectoriesCommand.h, cmLinkLibrariesCommand.cxx, + cmLinkLibrariesCommand.h, cmMSProjectGenerator.cxx, + cmMSProjectGenerator.h, cmMakeDepend.cxx, cmMakeDepend.h, + cmMakefile.cxx, cmMakefile.h, cmMakefileGenerator.cxx, + cmMakefileGenerator.h, cmOptionCommand.cxx, cmOptionCommand.h, + cmProjectCommand.cxx, cmProjectCommand.h, + cmRegularExpression.cxx, cmRegularExpression.h, cmSourceFile.cxx, + cmSourceFile.h, cmSourceFilesCommand.cxx, cmSourceFilesCommand.h, + cmSourceFilesRequireCommand.cxx, cmSourceFilesRequireCommand.h, + cmSourceGroup.cxx, cmSourceGroup.h, cmSourceGroupCommand.cxx, + cmSourceGroupCommand.h, cmStandardIncludes.h, + cmSubdirCommand.cxx, cmSubdirCommand.h, cmSystemTools.cxx, + cmSystemTools.h, cmTarget.cxx, cmTarget.h, cmTestsCommand.cxx, + cmTestsCommand.h, cmUnixDefinesCommand.cxx, + cmUnixDefinesCommand.h, cmUnixLibrariesCommand.cxx, + cmUnixLibrariesCommand.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h, cmUtilitySourceCommand.cxx, + cmUtilitySourceCommand.h, cmVTKWrapPythonCommand.cxx, + cmVTKWrapTclCommand.cxx, cmWin32DefinesCommand.cxx, + cmWin32DefinesCommand.h, cmWin32IncludeDirectoryCommand.cxx, + cmWin32IncludeDirectoryCommand.h, cmWin32LibrariesCommand.cxx, + cmWin32LibrariesCommand.h, cmWrapExcludeFilesCommand.cxx, + cmWrapExcludeFilesCommand.h: ENH:New copyright + +2001-04-27 07:55 will + + * Source/: cmAbstractFilesCommand.cxx, cmAbstractFilesCommand.h: + ENH:Copyright + +2001-04-26 16:22 martink + + * Source/: DLLHeader.dsptemplate, EXEHeader.dsptemplate, + cmDSPMakefile.cxx, cmDSPMakefile.h, cmDSPWriter.cxx, + cmDSPWriter.h, cmDSWMakefile.cxx, cmDSWWriter.cxx, + cmLinkLibrariesCommand.cxx, cmLinkLibrariesCommand.h, + cmMakefile.cxx, cmMakefile.h, cmUnixMakefileGenerator.cxx, + cmVTKWrapPythonCommand.cxx: support for debug and opt libraries + +2001-04-26 15:41 martink + + * Source/: cmOptionCommand.cxx, cmOptionCommand.h: better help + +2001-04-26 15:27 king + + * Source/: cmCableInstantiateClassCommand.cxx, + cmCableInstantiateClassCommand.h, cmCableInstantiateCommand.cxx, + cmCableInstantiateCommand.h, cmCablePackageCommand.cxx, + cmCablePackageEntryCommand.cxx, cmCablePackageEntryCommand.h, + cmCableSourceFilesCommand.cxx, cmCableSourceFilesCommand.h, + cmCableWrapCommand.cxx, cmCableWrapCommand.h: ENH: Changed + WriteConfiguration to non-const so it can do error checking. + Added parsing and output of a name for each WrapperSet generated + from a CABLE_WRAP command. + +2001-04-26 14:53 hoffman + + * Source/: cmAddLibraryCommand.cxx, + cmBuildSharedLibrariesCommand.cxx, cmCacheManager.cxx, + cmCacheManager.h, cmFindFileCommand.cxx, + cmFindIncludeCommand.cxx, cmFindLibraryCommand.cxx, + cmFindPathCommand.cxx, cmFindProgramCommand.cxx, + cmOptionCommand.cxx, cmUtilitySourceCommand.cxx: ENH: add help + for cache entries + +2001-04-26 10:49 martink + + * Source/: cmCacheManager.cxx, cmElseCommand.cxx, cmIfCommand.cxx, + cmSystemTools.cxx, cmSystemTools.h: some fixes for If commands + +2001-04-26 09:38 martink + + * Source/: CMakeSetup.dsw, DumpDocumentation.dsp, cmCommands.cxx, + cmDSPMakefile.cxx, cmDSPWriter.cxx, cmDSPMakefile.h, + cmDSPWriter.h, cmFindFileCommand.cxx, cmFindIncludeCommand.cxx, + cmFindIncludeCommand.h, cmFindLibraryCommand.cxx, + cmFindLibraryCommand.h, cmFindPathCommand.cxx, + cmFindPathCommand.h, cmMakefile.cxx, cmMakefile.h, + cmUnixMakefileGenerator.cxx: bug fixes + +2001-04-25 16:09 hoffman + + * configure.in.sample, Source/Makefile.in, + Source/cmCacheManager.cxx, Source/cmCacheManager.h, + Source/cmMakefile.cxx: ENH: clean up cmake GUI and remove the + parsing of CMakeLists.txt files by configure + +2001-04-25 11:47 martink + + * Source/: cmElseCommand.h, cmEndIfCommand.h, cmIfCommand.h: rules + were not inherited when they should be + +2001-04-25 09:39 king + + * Source/cmUnixMakefileGenerator.cxx: BUG: Fixed output of + dependencies. It needs to loop over the makefile's targets, not + the source lists. + +2001-04-25 09:37 king + + * Source/cmMakeDepend.cxx: STYLE: Updated comments for name change + cmClassFile->cmSourceFile + +2001-04-25 09:33 martink + + * CMake.doc: updated the docs some + +2001-04-24 17:33 king + + * Source/cmUnixMakefileGenerator.cxx: ERR: cmClassFile.h -> + cmSourceFile.h include change. + +2001-04-24 16:49 martink + + * Source/: cmClassFile.cxx, cmClassFile.h: many fixes and cleanup + and features + +2001-04-24 16:46 martink + + * Source/: CMakeLib.dsp, Makefile.in, cmAbstractFilesCommand.cxx, + cmAuxSourceDirectoryCommand.cxx, cmCablePackageCommand.cxx, + cmCableSourceFilesCommand.cxx, cmCacheManager.cxx, + cmCacheManager.h, cmCommands.cxx, cmDSPMakefile.cxx, + cmDSPMakefile.h, cmDSPWriter.cxx, cmDSPWriter.h, + cmMakeDepend.cxx, cmMakeDepend.h, cmMakefile.cxx, cmMakefile.h, + cmOptionCommand.cxx, cmSourceFilesCommand.cxx, + cmSourceFilesRequireCommand.cxx, cmTarget.h, + cmUnixDefinesCommand.cxx, cmUnixLibrariesCommand.cxx, + cmUnixMakefileGenerator.cxx, cmWin32DefinesCommand.cxx, + cmWin32IncludeDirectoryCommand.cxx, cmWin32LibrariesCommand.cxx, + cmWrapExcludeFilesCommand.cxx, cmVTKWrapPythonCommand.cxx, + cmVTKWrapPythonCommand.h, cmVTKWrapTclCommand.cxx, + cmVTKWrapTclCommand.h, cmSourceFile.cxx, cmSourceFile.h, + cmTarget.cxx, cmWrapTclCommand.cxx, cmWrapTclCommand.h: many + fixes and cleanup and features + +2001-04-24 12:40 hoffman + + * Source/: cmBuildSharedLibrariesCommand.cxx, cmCacheManager.cxx, + cmCacheManager.h, cmMakefile.cxx, cmMakefile.h, + cmOptionCommand.cxx, cmWrapTclCommand.cxx: BUG: fix build + directory problem + +2001-04-24 09:45 king + + * CMakeVariables.make.in: ERR: Removed extra SRC_OBJ reference. + The variable is no longer used. + +2001-04-23 16:40 hoffman + + * Source/: CMakeLib.dsp, cmCacheManager.cxx, cmCacheManager.h, + cmDSWMakefile.cxx, cmDSWWriter.cxx, cmSourceGroup.h, + cmStandardIncludes.h, cmWindowsConfigure.cxx, + cmWindowsConfigure.h: ENH: new GUI editor for cmake cache file + +2001-04-23 16:34 martink + + * Source/: cmCommands.cxx, cmWrapTclCommand.cxx: added option + command + +2001-04-23 16:33 martink + + * Source/: cmOptionCommand.cxx, cmOptionCommand.h: new command + +2001-04-23 13:58 blezek + + * CMakeRules.make.in, Source/cmUnixMakefileGenerator.cxx: BUG: + Clean was not doing it's job + +2001-04-23 10:23 king + + * Source/cmIfCommand.h: ERR: Added virtual destructor to complement + virtual functions in cmIfFunctionBlocker. + +2001-04-19 17:39 martink + + * Source/: cmAddDefinitionsCommand.cxx, cmAddDefinitionsCommand.h, + cmCommands.cxx, cmElseCommand.cxx, cmElseCommand.h, + cmEndIfCommand.cxx, cmEndIfCommand.h, cmFunctionBlocker.h, + cmIfCommand.cxx, cmIfCommand.h, cmMakefile.cxx, cmMakefile.h: + added if else endif add definition + +2001-04-19 13:28 martink + + * Source/: cmCablePackageCommand.cxx, cmCustomCommand.h, + cmDSPMakefile.cxx, cmDSPWriter.cxx, cmDSWMakefile.cxx, + cmDSWWriter.cxx, cmMakefile.cxx, cmSourceGroup.cxx, cmTarget.h, + cmUnixMakefileGenerator.cxx: cleaned up the coding style made + ivars private etc + +2001-04-18 08:01 king + + * Source/cmMakeDepend.cxx: ERR: We can't assume a vector iterator + is a pointer. It must be dereferenced to get a reference to the + element, and then we can take the address of that to get a + pointer. "i" becomes "&*i" + +2001-04-17 07:42 king + + * Source/cmUnixMakefileGenerator.cxx: ERR: Removed unused variable. + +2001-04-16 15:40 hoffman + + * Source/: cmStandardIncludes.h, cmSystemTools.cxx: BUG: fix small + compile issues on HP aCC + +2001-04-16 12:31 king + + * Source/: cmMakeDepend.cxx, cmMakeDepend.h: ENH: Changed m_Indices + to an stl set and renamed it to m_IndexSet. Using a set results + in a significant performance increase and reduction in memory + usage. + +2001-04-16 10:15 millerjv + + * Source/cmAddLibraryCommand.cxx: FIX: allow ADD_LIBRARY with no + source list + +2001-04-16 10:01 martink + + * Source/: cmCablePackageCommand.cxx, cmMakefile.h: fixed cable + package issue + +2001-04-12 15:34 martink + + * Source/: Makefile.in, cmAddLibraryCommand.cxx, + cmCacheManager.cxx, cmCacheManager.h, cmMakefile.h, + cmUnixMakefileGenerator.cxx, cmWrapTclCommand.cxx: some bug fixes + +2001-04-12 09:55 king + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + ENH: Added individual library linkage output so that shared + libraries will not try to link against themselves. + +2001-04-12 09:49 martink + + * Source/: cmExecutablesCommand.cxx, cmExecutablesCommand.h: + removed old rules + +2001-04-11 16:34 king + + * Source/cmUnixMakefileGenerator.cxx: ENH: Generation now sets up + proper linking of shared libraries to each other. + +2001-04-11 15:43 king + + * CMakeMaster.make.in: ERR: Needed to switch point where + CMakeTargets.make is included so that Variables will be available + to the targets file. + +2001-04-11 14:58 martink + + * Source/CMakeLib.dsp, Source/CMakeSetupCMD.dsp, + Source/Makefile.in, Source/cmAbstractFilesCommand.cxx, + Source/cmAddExecutableCommand.cxx, + Source/cmAddExecutableCommand.h, Source/cmAddLibraryCommand.cxx, + Source/cmAddLibraryCommand.h, + Source/cmAuxSourceDirectoryCommand.cxx, + Source/cmAuxSourceDirectoryCommand.h, Source/cmCableCommand.cxx, + Source/cmCableData.cxx, Source/cmCableData.h, + Source/cmCablePackageCommand.cxx, Source/cmCablePackageCommand.h, + Source/cmCableSourceFilesCommand.cxx, Source/cmClassFile.cxx, + Source/cmClassFile.h, Source/cmCommands.cxx, + Source/cmCustomCommand.cxx, Source/cmCustomCommand.h, + Source/cmDSPMakefile.cxx, Source/cmDSPMakefile.h, + Source/cmDSPWriter.cxx, Source/cmDSPWriter.h, + Source/cmDSWMakefile.cxx, Source/cmDSWMakefile.h, + Source/cmDSWWriter.cxx, Source/cmDSWWriter.h, + Source/cmMakeDepend.cxx, Source/cmMakeDepend.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmSourceFilesCommand.cxx, Source/cmSourceFilesCommand.h, + Source/cmSourceFilesRequireCommand.cxx, + Source/cmSourceFilesRequireCommand.h, Source/cmSourceGroup.cxx, + Source/cmSourceGroup.h, Source/cmTarget.h, + Source/cmTestsCommand.cxx, Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h, + Source/cmWrapExcludeFilesCommand.cxx, + Source/cmWrapTclCommand.cxx, Source/cmWrapTclCommand.h, + CMakeRules.make.in: major changes to support multiple libraries + and source lists + +2001-04-10 15:26 king + + * Source/DLLHeader.dsptemplate: ENH: Need BUILD_SHARED_LIBRARIES + defined for making windows DLLs. + +2001-04-09 10:56 king + + * Source/cmCablePackageCommand.cxx: ERR: Added double-quotes around + command name before arguments are appended. + +2001-04-09 10:53 king + + * Source/cmUnixMakefileGenerator.cxx: ERR: Missed one EscapeSpaces + call. + +2001-04-09 10:31 king + + * Source/: cmCableCommand.cxx, cmDSPMakefile.cxx, cmDSPWriter.cxx, + cmSystemTools.cxx, cmSystemTools.h, cmUnixMakefileGenerator.cxx, + cmUtilitySourceCommand.cxx: ERR: Corrected use of double-quotes + to be compatible with UNIX make. Now double quotes (windows) or + escape sequences for spaces (unix) are added when dependencies + are output. + +2001-04-09 09:44 king + + * Source/: cmCableCommand.cxx, cmDSPMakefile.cxx, cmDSPWriter.cxx, + cmUtilitySourceCommand.cxx: ENH: Added support for spaces in the + output directory names. Spaces in the input directory name may + work also, but are untested. + +2001-04-06 17:01 hoffman + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx, cmDSPMakefile.h, + cmDSPWriter.h, cmDSWMakefile.cxx, cmDSWWriter.cxx: BUG: fix + depends for libraries and executables in the same dir + +2001-04-06 14:51 hoffman + + * Source/: cmFindIncludeCommand.cxx, cmFindLibraryCommand.cxx, + cmMakefile.cxx: ENH: better error reporting, and add NOTFOUND + into cache for library and file find + +2001-04-06 12:00 martink + + * Source/cmFindIncludeCommand.h: fixed the documentation some + +2001-04-06 08:28 millerjv + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: FIX: configurations + list needed to be reset for each dsp file created + +2001-04-04 09:33 millerjv + + * Source/: EXEHeader.dsptemplate, staticLibHeader.dsptemplate: FIX: + returned to using /O2 optimization level and put a pragma in the + netlib code that could not handle the /Og component of /O2 + +2001-03-28 11:49 king + + * Source/cmSystemTools.cxx: ERR: Blank line regular expression + updated to allow whitespace on the line. + +2001-03-23 14:27 king + + * Source/: cmCableSourceFilesCommand.cxx, + cmCableSourceFilesCommand.h: ENH: Added support for + CABLE_SOURCE_FILES to refer to files that are not in the current + directory. The include path is searched for the files. + +2001-03-21 15:52 king + + * Source/cmStandardIncludes.h: ERR: Added pragma to disable symbol + length warning for Intel compiler. + +2001-03-20 13:48 king + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: ERR: Small bug in + generated DSP file fixed. A custom command environment variable + has been replaced with explicity writing out the command. + +2001-03-20 13:20 king + + * Source/: CMakeLib.dsp, Makefile.in, cmCableCommand.cxx, + cmCablePackageCommand.cxx, cmCommands.cxx, cmDSPMakefile.cxx, + cmDSPMakefile.h, cmDSPWriter.cxx, cmDSPWriter.h, cmMakefile.cxx, + cmMakefile.h, cmSourceGroup.cxx, cmSourceGroup.h, + cmSourceGroupCommand.cxx, cmSourceGroupCommand.h, + cmUnixMakefileGenerator.cxx, cmWrapTclCommand.cxx: ENH: Added + SOURCE_GROUP command and corresponding support code. This + command allows CMakeLists files to specify how sources are + organized into groups in the generated DSP files and makefiles. + +2001-03-19 11:47 millerjv + + * Source/EXEHeader.dsptemplate: ENH: ignore unused libary warnings, + removed /force + +2001-03-19 11:02 king + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: ENH: Added text + files group to DSP output. CMakeLists.txt is duplicated in this + group and outside, but fixing this will require a reorganization + of custom rule generation. I should get to that soon. + +2001-03-19 11:01 king + + * Source/cmCableCommand.cxx: ERR: Changed generation of rule to + generate cable_config.xml to be produced differently for windows + and unix. + +2001-03-19 11:00 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ERR: Removed + functions I just added. They don't belong here (yet?). + +2001-03-19 10:09 king + + * Source/cmCableCommand.cxx: ENH: Added generation of a rule to + re-run CMake if the cable_config.xml file is missing. + +2001-03-19 10:09 king + + * Source/: cmSystemTools.cxx, cmSystemTools.h: ENH: Added functions + to get information about the CMake executable on each platform. + +2001-03-16 11:14 king + + * Source/: cmCableData.cxx, cmCableData.h: ERR: Re-ordered + declaration of members v. order of initialization on the + constructor to match each other. + +2001-03-16 11:04 king + + * Source/: cmCableData.cxx, cmCableData.h: BUG: Rearranged cable + config file open to do open in construction of m_OutputFile. + Fixes problem on SGI with opening the file. + +2001-03-16 09:25 king + + * Source/: cmCableDefineSetCommand.cxx, + cmCableSourceFilesCommand.cxx: ENH: Changed generated includes to + not have full path specified. + +2001-03-15 18:09 king + + * Source/: cmCommands.cxx, cmIncludeRegularExpressionCommand.cxx, + cmIncludeRegularExpressionCommand.h, cmMakeDepend.cxx, + cmMakeDepend.h, cmMakefile.cxx, cmMakefile.h: ENH: Added + INCLUDE_REGULAR_EXPRESSION command to set regular expression used + in dependency checking. + +2001-03-15 14:46 king + + * Source/: cmCableDefineSetCommand.cxx, cmCableDefineSetCommand.h: + ENH: Added SOURCE_FILES syntax to CABLE_DEFINE_SET command. + +2001-03-15 14:33 king + + * Source/: cmMakefile.cxx, cmMakefile.h: BUG: Moved definition of + CMAKE_SOURCE_DIR and CMAKE_BINARY_DIR to be as soon as their + information is known. + +2001-03-15 10:42 king + + * Source/: cmCablePackageCommand.cxx, cmCablePackageCommand.h: BUG: + Fixed segfault when CABLE_PACKAGE is only CABLE command. Related + to order of virtual destructor calls. + +2001-03-14 17:49 king + + * Source/cmStandardIncludes.h: ERR: Added for-loop scoping hack for + CMake sources on MSVC + +2001-03-14 16:34 king + + * Source/cmSystemTools.cxx: ENH: Added support for comments inside + function calls and indented comments. + +2001-03-13 18:01 king + + * Source/: cmCableDefineSetCommand.cxx, cmCableDefineSetCommand.h: + ENH: Added support for element tag specification with syntax + tag:element as an argument to the CABLE_DEFINE_SET command. A + single colon with nothing to its left will result in an empty + tag. + +2001-03-13 09:33 king + + * Source/cmWrapTclCommand.cxx: ERR: Less-than-zero test replaced + with greater-than-zero since we want zero arguments. + +2001-03-12 18:30 king + + * Source/: cmCommand.h, cmSystemTools.cxx, cmSystemTools.h: ENH: + Improved error handling when GetError is called on a command that + has not called SetError. + +2001-03-12 10:10 geoff + + * Source/: cmCommands.cxx, cmWin32IncludeDirectoryCommand.cxx, + cmWin32IncludeDirectoryCommand.h: Include directories under Win32 + only (inherited by subdirs) + +2001-03-09 16:56 king + + * Source/: DLLHeader.dsptemplate, EXEHeader.dsptemplate, + cmDSPMakefile.cxx, cmDSPMakefile.h, cmDSPWriter.cxx, + cmDSPWriter.h, staticLibHeader.dsptemplate: ENH: Finished + Simplifying dsptemplate processing with in place of separate + Release, Debug, ReleaseDLL, ... configurations. + +2001-03-09 15:35 king + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx, + staticLibHeader.dsptemplate: ERR: Fixed library path problem for + ReleaseMinSize build. should now be used in place of separate + Release, Debug, and ReleaseMinSize. + +2001-03-09 14:35 king + + * Source/EXEHeader.dsptemplate: ERR: Fixed header template for + Release MinSize builds. + +2001-03-09 11:34 king + + * Source/EXEHeader.dsptemplate: ENH: Added Release MinSize + configuration for executables. + +2001-03-09 11:33 king + + * Source/cmUtilitySourceCommand.h: ENH: Made UTILITY_SOURCE command + inherited, just like FIND_PROGRAM. + +2001-03-09 11:16 king + + * Source/cmCablePackageCommand.cxx: ERR: Missing initalization of a + cmClassFile::m_HeaderFileOnly fixed. + +2001-03-09 10:53 king + + * Source/: cmDSWMakefile.cxx, cmDSWWriter.cxx, cmMakefile.cxx, + cmMakefile.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h, cmUtilitySourceCommand.cxx: ENH: Added + utility dependency support. Now a project can depend on other + executables as well as link libraries. + +2001-03-09 10:52 king + + * Source/: cmCableCommand.cxx, cmCableData.cxx: ERR: Added + automatic creation of directory for cable_config.xml file and + corresponding error reporting. + +2001-03-09 10:52 king + + * Source/cmCablePackageCommand.cxx: ENH: Added proper dependency + generation for a package on cable executable. + +2001-03-08 18:24 king + + * Source/: cmMakefile.cxx, cmUtilitySourceCommand.cxx: ERR: + Replaced CMAKE_CFG= with CMAKE_CFG_OUTDIR= to fix windows + behavior. + +2001-03-08 18:13 king + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: ENH: Added output of + custom rules for XML sources. + +2001-03-08 17:38 king + + * Source/cmUnixMakefileGenerator.cxx: ENH: Added output of defines + flags as part of INCLUDE_FLAGS. + +2001-03-08 17:31 king + + * Source/cmUnixMakefileGenerator.cxx: ENH: Added output of a custom + command's m_Source as a dependency. + +2001-03-08 17:31 king + + * Source/cmUnixDefinesCommand.cxx: ERR: Minor wording error in + output message. + +2001-03-08 17:30 king + + * Source/cmCablePackageCommand.cxx: ENH: Creation of generator rule + now properly uses the custom command's m_Source member. + +2001-03-08 16:13 king + + * Source/: cmCableCommand.cxx, cmCableData.cxx, cmCableData.h, + cmCablePackageCommand.cxx, cmCablePackageCommand.h, + cmCableSourceFilesCommand.cxx, cmCableSourceFilesCommand.h: ENH: + Added creation of custom rules for generating CABLE packages. + +2001-03-08 16:12 king + + * Source/: cmMakeDepend.cxx, cmMakeDepend.h: ENH: Added support for + finding dependencies for files that don't exist. Dependency + recursion begins with hints provided in the cmClassFile for a + file if it doesn't exist. + +2001-03-08 11:30 king + + * Source/cmCableSourceFilesCommand.cxx: ENH: Added .txx detection + for Header block output. + +2001-03-08 10:30 king + + * Source/: cmCommands.cxx, cmMakefile.cxx, cmMakefile.h, + cmSystemTools.cxx, cmSystemTools.h, cmUtilitySourceCommand.cxx, + cmUtilitySourceCommand.h: ENH: Added UTILITY_SOURCE command for + specifying where a 3rd party utility's source is located when it + is included in the distribution of a project. + +2001-03-07 13:33 king + + * Source/cmCableCommand.cxx: ERR: Commented out experimental code + that was accidentally checked in. + +2001-03-07 13:23 king + + * Source/cmCableCommand.cxx: ENH: Added Cable to Utilities and + appropriate CMakeLists.txt changes. Moved VXLNumerics link out + of source's root directory and into separate entries for Code and + Testing directories. This prevents linking of all programs (like + Cable) with the numerics library. + +2001-03-02 16:04 king + + * Source/: cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h: + ENH: Added custom rule support to cmUnixMakefileGenerator. + +2001-03-02 13:47 will + + * Source/cmUnixMakefileGenerator.cxx: BUG: repeat all -l options to + avoid having to worry about link order. + +2001-03-02 12:27 king + + * Source/: cmCableCommand.cxx, cmCableData.cxx, cmCableData.h: ENH: + CABLE config file (config_cable.xml) should now be opened in the + output directory. + +2001-03-01 16:47 king + + * Source/: cmCableCloseNamespaceCommand.cxx, + cmCableCloseNamespaceCommand.h, cmCableCommand.cxx, + cmCableCommand.h, cmCableData.cxx, cmCableData.h, + cmCableDefineSetCommand.cxx, cmCableDefineSetCommand.h, + cmCableInstantiateClassCommand.cxx, + cmCableInstantiateClassCommand.h, cmCableInstantiateCommand.cxx, + cmCableInstantiateCommand.h, cmCableOpenNamespaceCommand.cxx, + cmCableOpenNamespaceCommand.h, cmCablePackageCommand.cxx, + cmCablePackageCommand.h, cmCablePackageEntryCommand.cxx, + cmCablePackageEntryCommand.h, cmCableSourceFilesCommand.cxx, + cmCableSourceFilesCommand.h, cmCableWrapCommand.cxx, + cmCableWrapCommand.h, cmCommands.cxx: ENH: Change to new CABLE + command architecture. CABLE configuration code is now generated + on the first pass, during the Invoke() calls. + +2001-02-28 17:50 hoffman + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx, cmDSPMakefile.h, + cmDSPWriter.h, cmDSWMakefile.cxx, cmDSWWriter.cxx: BUG: fix + circular depends on libraries and remove depends for static + libraries + +2001-02-28 09:34 king + + * Source/: cmCableCommand.cxx, cmCableCommand.h, cmCableData.cxx, + cmCableData.h, cmCableDefineSetCommand.cxx, + cmCableDefineSetCommand.h, cmCableInstantiateClassCommand.cxx, + cmCableInstantiateClassCommand.h, cmCableInstantiateCommand.cxx, + cmCableInstantiateCommand.h, cmCommands.cxx: ENH: CABIL -> CABLE + rename. + +2001-02-27 16:50 martink + + * Source/: cmDSPMakefile.cxx, cmDSPMakefile.h, cmDSPWriter.cxx, + cmDSPWriter.h, cmDSWMakefile.cxx, cmDSWWriter.cxx: many + enhancements including dll support + +2001-02-27 16:49 martink + + * Source/cmWrapTclCommand.cxx: bug fixes + +2001-02-27 16:49 martink + + * Source/cmCommands.cxx: added new commands + +2001-02-27 16:48 martink + + * Source/cmClassFile.h: added wrap exclude ivar + +2001-02-27 16:48 martink + + * Source/: cmBuildSharedLibrariesCommand.cxx, + cmBuildSharedLibrariesCommand.h, cmWrapExcludeFilesCommand.cxx, + cmWrapExcludeFilesCommand.h: new commands + +2001-02-27 16:46 martink + + * Source/: DLLFooter.dsptemplate, DLLHeader.dsptemplate: dll build + rules + +2001-02-27 16:44 martink + + * Source/staticLibHeader.dsptemplate: change in options for much + smaller libraries + +2001-02-27 16:28 king + + * Source/: cmCableCommand.h, cmCableDefineSetCommand.cxx, + cmCableDefineSetCommand.h, cmCableInstantiateClassCommand.cxx, + cmCableInstantiateClassCommand.h, cmCableInstantiateCommand.cxx, + cmCableInstantiateCommand.h, cmCommands.cxx: ENH: Implemented + automatic tag generation for CABIL_DEFINE_SET command. Added tag + output to WriteConfiguration methods. Added + CABIL_INSTANTIATE_CLASS command to generate explicit class + template instantiation configuration output. + +2001-02-27 15:41 king + + * Source/cmSystemTools.cxx: ENH/BUG: Improved function parsing to + allow just about anything inside a double-quoted argument. Also + fixed parsing of lines with both quoted and non-quoted arguments. + +2001-02-27 12:00 lorensen + + * Source/cmSystemTools.cxx: ENH: mask on mkdir set to 777. + +2001-02-27 12:00 lorensen + + * Source/CMakeBuildTargets.cxx: ERR: missing std:: on cout. + +2001-02-26 20:58 millerjv + + * Source/staticLibHeader.dsptemplate: FIX: added /GR to MinSize + build to avoid warnings about dynamic cast + +2001-02-26 18:20 king + + * Source/cmCableInstantiateCommand.cxx: ERR: Fixed configuration + file output to open file in output directory. + +2001-02-26 18:16 king + + * Source/cmWrapTclCommand.cxx: int -> unsigned int + +2001-02-26 18:00 king + + * Source/: cmCableCommand.cxx, cmCableCommand.h, cmCableData.cxx, + cmCableData.h, cmCableDefineSetCommand.cxx, + cmCableDefineSetCommand.h, cmCableInstantiateCommand.cxx, + cmCableInstantiateCommand.h, cmCommands.cxx: ENH: Added CABIL + commands for configuration file generation. + +2001-02-26 17:58 king + + * Source/cmMakefile.h: ENH: Added GetUsedCommands() method. + +2001-02-26 17:58 king + + * Source/cmStandardIncludes.h: ERR: fsream.h -> fstream.h + +2001-02-26 17:17 martink + + * Source/: cmCommands.cxx, cmDSPMakefile.cxx, cmDSPMakefile.h, + cmDSPWriter.cxx, cmDSPWriter.h, cmMakefile.h: a variety of fixes + and enhancements + +2001-02-26 17:17 martink + + * Source/: cmWrapTclCommand.cxx, cmWrapTclCommand.h: very early + version of a wrapper + +2001-02-26 17:15 martink + + * Source/: cmClassFile.cxx, cmClassFile.h: added functionality, + fixed bug if no file existed and with header files + +2001-02-26 17:14 martink + + * Source/: cmFindProgramCommand.cxx, cmFindProgramCommand.h: fixed + bug and modified functionality + +2001-02-26 17:13 martink + + * Source/: cmFindFileCommand.cxx, cmFindFileCommand.h: new command + +2001-02-26 13:25 king + + * Source/cmMakefile.cxx: ERR: Fixed unknown command output error + message for spacing. + +2001-02-26 12:07 king + + * Source/: cmAbstractFilesCommand.h, cmAddTargetCommand.h, + cmAuxSourceDirectoryCommand.h, cmCommand.h, + cmExecutablesCommand.h, cmFindIncludeCommand.h, + cmFindLibraryCommand.h, cmFindProgramCommand.h, + cmIncludeDirectoryCommand.h, cmLibraryCommand.h, + cmLinkDirectoriesCommand.h, cmLinkLibrariesCommand.h, + cmProjectCommand.h, cmSourceFilesCommand.h, + cmSourceFilesRequireCommand.h, cmSubdirCommand.h, + cmTestsCommand.h, cmUnixDefinesCommand.h, + cmUnixLibrariesCommand.h, cmWin32DefinesCommand.h, + cmWin32LibrariesCommand.h: ENH: Added safe downcast support + (without RTTI) to cmCommand and its subclasses. + +2001-02-23 10:40 king + + * Source/: cmAbstractFilesCommand.cxx, cmCommand.h, cmCommands.h, + cmConfigureFileNoAutoconf.h, cmFindIncludeCommand.cxx, + cmFindLibraryCommand.cxx, cmFindProgramCommand.cxx, + cmMakefile.cxx, cmUnixMakefileGenerator.cxx: ERR: Fixed warnings + (int->unsigned int and a few others). + +2001-02-22 19:37 hoffman + + * configure.in.sample: ENH: update sample + +2001-02-22 19:31 hoffman + + * Source/cmSystemTools.cxx: BUG: remove debug print + +2001-02-22 19:23 hoffman + + * Source/CMakeBuildTargets.cxx, Source/Makefile.in, + Source/cmCacheManager.cxx, Source/cmCacheManager.h, + Source/cmConfigureFileNoAutoconf.cxx, Source/cmDSPMakefile.cxx, + Source/cmDSPWriter.cxx, Source/cmDSWMakefile.cxx, + Source/cmDSWWriter.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmStandardIncludes.h, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + CMakeRules.make.in, CMakeTopMakefileTemplate.in, + Source/cmConfigure.h.in: ENH: add CMakeCache.txt support + +2001-02-20 14:12 hoffman + + * Source/cmSystemTools.cxx: ENH: remove relative and extra paths in + CMakeLists.txt files + +2001-02-20 12:25 hoffman + + * CMakeRules.make.in: BUG: fix for in source build + +2001-02-19 15:13 hoffman + + * CMakeMakefileTemplate.in, MakefileTemplate.in, + configure.in.sample, Source/CMakeBuildTargets.cxx, + Source/CMakeSetupCMD.cxx, Source/Makefile.in, + Source/cmCacheManager.cxx, Source/cmCacheManager.h, + Source/cmCommand.h, Source/cmDSWMakefile.cxx, + Source/cmDSWWriter.cxx, Source/cmFindIncludeCommand.cxx, + Source/cmFindLibraryCommand.cxx, Source/cmFindProgramCommand.cxx, + Source/cmIncludeDirectoryCommand.cxx, Source/cmMakefile.cxx, + Source/cmRegularExpression.h, Source/cmSystemTools.cxx, + Source/cmUnixMakefileGenerator.cxx, + Source/cmUnixMakefileGenerator.h: ENH: first pass at cache, clean + up the unix generator, clean up configure.in some + +2001-02-18 13:02 hoffman + + * configure.in.sample: ENH: add a smaple configure.in for CMake + based projects + +2001-02-18 12:47 hoffman + + * configure.in.sample: ENH: add a smaple configure.in for CMake + based projects + +2001-02-16 15:34 hoffman + + * Source/cmCacheManager.h: ENH: clean up comments some + +2001-02-16 15:01 will + + * CMake.pdf: ENH:Added pdf file + +2001-02-16 11:52 martink + + * CMake.doc: clean up docs + +2001-02-16 11:34 martink + + * Source/: cmConfigureFileNoAutoconf.cxx, cmDSWMakefile.cxx, + cmDSWWriter.cxx, cmFindIncludeCommand.cxx, + cmFindLibraryCommand.cxx, cmFindLibraryCommand.h, + cmFindProgramCommand.cxx, cmMakefile.cxx, cmMakefile.h, + cmSystemTools.cxx, cmSystemTools.h: ENH: add new commands fro + find library and find program + +2001-02-15 13:30 martink + + * CMakeRules.make.in, CMakeVariables.make.in, + Source/CMakeBuildTargets.cxx, Source/CMakeSetupCMD.cxx, + Source/cmClassFile.cxx, Source/cmClassFile.h, + Source/cmConfigureFileNoAutoconf.h, Source/cmDSPMakefile.cxx, + Source/cmDSPWriter.cxx, Source/cmDSWMakefile.cxx, + Source/cmDSWWriter.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmProjectCommand.cxx, + Source/cmProjectCommand.h: some cleanup and fixes + +2001-02-14 12:26 hoffman + + * Source/cmMakeDepend.cxx: ENH: fix depend segfault + +2001-02-13 18:49 hoffman + + * Source/: cmConfigureFileNoAutoconf.cxx, cmMakefile.cxx: ENH: new + vnl + +2001-02-13 16:48 hoffman + + * Source/: cmMakefile.cxx, cmMakefile.h: ENH: add configure style + @var@ expansion + +2001-02-12 19:49 hoffman + + * Source/: CMakeBuildTargets.cxx, Makefile.in, cmCommands.cxx, + cmConfigureFileNoAutoconf.cxx, cmConfigureFileNoAutoconf.h, + cmConfigureHeaderCommand.cxx, cmConfigureHeaderCommand.h, + cmMakefile.cxx, cmMakefile.h, cmStandardIncludes.h, + cmSystemTools.cxx, cmCommands.h: ENH: get rid of special msc + configure file + +2001-02-12 14:42 hoffman + + * Source/: CMakeLib.dsp, CMakeSetup.dsw, CMakeSetupCMD.dsp: ENH: + share a .lib with the command line and mfc versions. + +2001-02-12 14:26 hoffman + + * Source/: CMakeLib.dsp, CMakeSetup.dsw, CMakeSetupCMD.cxx, + CMakeSetupCMD.dsp, Makefile.in, cmCacheManager.cxx, + cmCacheManager.h, cmCommands.cxx, cmConfigureHeaderCommand.cxx, + cmConfigureHeaderCommand.h, cmDSWMakefile.cxx, cmDSWWriter.cxx, + cmMSProjectGenerator.h: ENH: add cache manager class, move all + commands into cmCommands.cxx to speed up compile times, share a + .lib with the command line and mfc versions. + +2001-02-06 17:01 hoffman + + * Source/staticLibHeader.dsptemplate: ENH: add /GX /Zm1000 + +2001-02-06 16:48 hoffman + + * Source/staticLibHeader.dsptemplate: ENH: min size build + +2001-02-06 10:52 hoffman + + * Source/staticLibHeader.dsptemplate: ENH: put back /Zm1000 so we + can build large files + +2001-02-06 08:56 millerjv + + * Source/staticLibHeader.dsptemplate: FIX: remove precompiled + header settings + +2001-02-06 08:54 millerjv + + * Source/EXEHeader.dsptemplate: FIX: added /force to link options + and removed precompiled header usage + +2001-01-25 15:48 millerjv + + * Source/: EXEHeader.dsptemplate, staticLibHeader.dsptemplate: BUG: + backed off on the compiler optimization used. Instead of using + /O2, we now use all the components of /Ox (/Ob1 /Oi /Ot /Oy /Gs) + except for /Og + +2001-01-22 10:00 will + + * Source/CMakeSetupCMD.dsp: BUG: convert to dos format + +2001-01-22 09:49 will + + * Source/: CMakeSetup.dsw, CMakeSetupCMD.dsp: BUG: make dsp and dsw + files binary + +2001-01-18 13:43 will + + * README: ENH:Commands not rules + +2001-01-18 12:06 will + + * Source/Makefile.in: ERR:Oops, use SimpleRule not SimpleCommand + +2001-01-18 11:51 will + + * CMakeCommands.make.in, CMakeMaster.make.in, CMakeRules.make.in, + CMakeSimpleCommands.make.in, CMakeSimpleRules.make.in: ERR:Oops, + renamed back + +2001-01-18 11:20 will + + * CMakeCommands.make.in, CMakeMaster.make.in, CMakeRules.make.in, + CMakeSimpleCommands.make.in, CMakeSimpleRules.make.in, + Source/CMakeSetupCMD.dsp, Source/Makefile.in, + Source/cmAbstractFilesCommand.cxx, + Source/cmAbstractFilesCommand.h, Source/cmAbstractFilesRule.cxx, + Source/cmAbstractFilesRule.h, Source/cmAddTargetCommand.cxx, + Source/cmAddTargetCommand.h, Source/cmAddTargetRule.cxx, + Source/cmAddTargetRule.h, Source/cmAuxSourceDirectoryCommand.cxx, + Source/cmAuxSourceDirectoryCommand.h, + Source/cmAuxSourceDirectoryRule.cxx, + Source/cmAuxSourceDirectoryRule.h, Source/cmCommand.h, + Source/cmDumpDocumentation.cxx, Source/cmExecutablesCommand.cxx, + Source/cmExecutablesCommand.h, Source/cmExecutablesRule.cxx, + Source/cmExecutablesRule.h, Source/cmFindIncludeCommand.cxx, + Source/cmFindIncludeCommand.h, Source/cmFindIncludeRule.cxx, + Source/cmFindIncludeRule.h, Source/cmFindLibraryCommand.cxx, + Source/cmFindLibraryCommand.h, Source/cmFindLibraryRule.cxx, + Source/cmFindLibraryRule.h, Source/cmFindProgramCommand.cxx, + Source/cmFindProgramCommand.h, Source/cmFindProgramRule.cxx, + Source/cmFindProgramRule.h, Source/cmIncludeDirectoryCommand.cxx, + Source/cmIncludeDirectoryCommand.h, + Source/cmIncludeDirectoryRule.cxx, + Source/cmIncludeDirectoryRule.h, Source/cmLibraryCommand.cxx, + Source/cmLibraryCommand.h, Source/cmLibraryRule.cxx, + Source/cmLibraryRule.h, Source/cmLinkDirectoriesCommand.cxx, + Source/cmLinkDirectoriesCommand.h, + Source/cmLinkDirectoriesRule.cxx, Source/cmLinkDirectoriesRule.h, + Source/cmLinkLibrariesCommand.cxx, + Source/cmLinkLibrariesCommand.h, Source/cmLinkLibrariesRule.cxx, + Source/cmLinkLibrariesRule.h, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmMakefileGenerator.h, + Source/cmProjectCommand.cxx, Source/cmProjectCommand.h, + Source/cmProjectRule.cxx, Source/cmProjectRule.h, + Source/cmRuleMaker.h, Source/cmSourceFilesCommand.cxx, + Source/cmSourceFilesCommand.h, + Source/cmSourceFilesRequireCommand.cxx, + Source/cmSourceFilesRequireCommand.h, + Source/cmSourceFilesRequireRule.cxx, + Source/cmSourceFilesRequireRule.h, Source/cmSourceFilesRule.cxx, + Source/cmSourceFilesRule.h, Source/cmSubdirCommand.cxx, + Source/cmSubdirCommand.h, Source/cmSubdirRule.cxx, + Source/cmSubdirRule.h, Source/cmSystemTools.h, + Source/cmTestsCommand.cxx, Source/cmTestsCommand.h, + Source/cmTestsRule.cxx, Source/cmTestsRule.h, + Source/cmUnixDefinesCommand.cxx, Source/cmUnixDefinesCommand.h, + Source/cmUnixDefinesRule.cxx, Source/cmUnixDefinesRule.h, + Source/cmUnixLibrariesCommand.cxx, + Source/cmUnixLibrariesCommand.h, Source/cmUnixLibrariesRule.cxx, + Source/cmUnixLibrariesRule.h, Source/cmWin32DefinesCommand.cxx, + Source/cmWin32DefinesCommand.h, Source/cmWin32DefinesRule.cxx, + Source/cmWin32DefinesRule.h, Source/cmWin32LibrariesCommand.cxx, + Source/cmWin32LibrariesCommand.h, + Source/cmWin32LibrariesRule.cxx, Source/cmWin32LibrariesRule.h: + ENH:Reworked CMake for consistency + +2001-01-12 14:35 will + + * README, Source/cmAbstractFilesRule.h, Source/cmAddTargetRule.h, + Source/cmAuxSourceDirectoryRule.h, Source/cmExecutablesRule.h, + Source/cmFindIncludeRule.h, Source/cmFindLibraryRule.h, + Source/cmFindProgramRule.h, Source/cmIncludeDirectoryRule.h, + Source/cmLibraryRule.h, Source/cmLinkDirectoriesRule.h, + Source/cmLinkLibrariesRule.h, Source/cmMakefile.cxx, + Source/cmProjectRule.h, Source/cmRuleMaker.h, + Source/cmSourceFilesRequireRule.h, Source/cmSourceFilesRule.h, + Source/cmSubdirRule.h, Source/cmTestsRule.h, + Source/cmUnixDefinesRule.h, Source/cmUnixLibrariesRule.h, + Source/cmWin32DefinesRule.h, Source/cmWin32LibrariesRule.h: + ENH:Tweaks to dump documentation + +2001-01-12 14:05 hoffman + + * Source/: cmDSPMakefile.cxx, cmDSPWriter.cxx: ENH: add define + flags in the right place + +2001-01-12 13:48 hoffman + + * Source/cmSystemTools.cxx: BUG: add check for missing ) on + function + +2001-01-12 13:07 will + + * README, Source/cmAuxSourceDirectoryRule.h, + Source/cmIncludeDirectoryRule.h, Source/cmLinkLibrariesRule.h, + Source/cmProjectRule.h, Source/cmSourceFilesRequireRule.h, + Source/cmSubdirRule.h, Source/cmUnixDefinesRule.h, + Source/cmWin32DefinesRule.h: ENH:Tweaks to dump documentation + +2001-01-12 12:49 will + + * Source/: cmAddTargetRule.h, cmMakefile.cxx: ENH:Tweaks to + documentation + +2001-01-12 12:49 will + + * README: ENH:Updated for rule-based CMake + +2001-01-12 12:42 will + + * Source/: cmDumpDocumentation.cxx, cmMakefile.cxx, cmMakefile.h: + ENH:Simple program dumps out internal documentation for CMake + +2001-01-12 07:43 will + + * README: README + +2001-01-11 16:19 will + + * doxygen.config: ENH:Doxygenated CMake + +2001-01-11 14:55 will + + * Source/: CMakeBuildTargets.cxx, CMakeSetupCMD.cxx, + cmAbstractFilesRule.cxx, cmClassFile.cxx, cmDSPMakefile.cxx, + cmDSPWriter.cxx, cmDSWMakefile.cxx, cmDSWWriter.cxx, + cmExecutablesRule.cxx, cmFindIncludeRule.cxx, + cmFindLibraryRule.cxx, cmFindProgramRule.cxx, + cmIncludeDirectoryRule.cxx, cmLibraryRule.cxx, + cmLinkDirectoriesRule.cxx, cmLinkLibrariesRule.cxx, + cmMSProjectGenerator.cxx, cmMakeDepend.cxx, cmMakefile.cxx, + cmMakefileGenerator.cxx, cmProjectRule.cxx, + cmSourceFilesRequireRule.cxx, cmSourceFilesRule.cxx, + cmSubdirRule.cxx, cmSystemTools.cxx, cmTestsRule.cxx, + cmUnixDefinesRule.cxx, cmUnixLibrariesRule.cxx, + cmWin32DefinesRule.cxx, cmWin32LibrariesRule.cxx: + ENH:Documentation and cleanups + +2001-01-11 14:47 will + + * Source/: CMakeSetupCMD.cxx, cmAddTargetRule.cxx, + cmAuxSourceDirectoryRule.cxx, cmClassFile.h, cmDSWMakefile.cxx, + cmDSWMakefile.h, cmDSWWriter.cxx, cmDSWWriter.h, cmDirectory.h, + cmFindProgramRule.h, cmMSProjectGenerator.cxx, + cmMSProjectGenerator.h, cmMakeDepend.h, cmMakefile.h, + cmMakefileGenerator.h, cmRegularExpression.cxx, + cmRegularExpression.h, cmStandardIncludes.h, cmSystemTools.cxx, + cmSystemTools.h, cmUnixMakefileGenerator.cxx, + cmUnixMakefileGenerator.h, cmWindowsConfigure.cxx, + cmWindowsConfigure.h: ENH:Documentation and cleanups + +2001-01-11 11:35 blezek + + * Source/: cmWin32DefinesRule.cxx, cmWin32LibrariesRule.cxx: BUG: + Broken on non WIN32 platforms, changed SetEnableOff to EnabledOff + +2001-01-11 08:04 will + + * Source/: cmFindIncludeRule.h, cmFindLibraryRule.h, + cmFindProgramRule.h, cmIncludeDirectoryRule.h, cmLibraryRule.h, + cmLinkDirectoriesRule.h, cmLinkLibrariesRule.h, cmProjectRule.h, + cmSourceFilesRequireRule.h, cmSourceFilesRule.h, cmSubdirRule.h, + cmTestsRule.h, cmUnixDefinesRule.h, cmUnixLibrariesRule.h, + cmWin32DefinesRule.h, cmWin32LibrariesRule.h: ENH:Added + documentation; clean-up + +2001-01-10 17:29 will + + * Source/: cmExecutablesRule.h, cmFindIncludeRule.h: ENH:Beginning + clean up; adding documentation + +2001-01-10 17:13 will + + * Source/cmAuxSourceDirectoryRule.h: ENH:Beginning clean up; adding + documentation + +2001-01-10 17:05 will + + * Source/: cmAbstractFilesRule.h, cmAddTargetRule.h, + cmAuxSourceDirectoryRule.h, cmDSPMakefile.h, cmDSPWriter.h, + cmExecutablesRule.h, cmFindIncludeRule.h, cmFindLibraryRule.h, + cmFindProgramRule.h, cmIncludeDirectoryRule.h, cmLibraryRule.h, + cmLinkDirectoriesRule.h, cmLinkLibrariesRule.h, cmProjectRule.h, + cmRuleMaker.h, cmSourceFilesRequireRule.h, cmSourceFilesRule.h, + cmSubdirRule.h, cmTestsRule.h, cmUnixDefinesRule.cxx, + cmUnixDefinesRule.h, cmUnixLibrariesRule.cxx, + cmUnixLibrariesRule.h, cmWin32DefinesRule.h, + cmWin32LibrariesRule.h: ENH:Beginning clean up; adding + documentation + +2001-01-09 15:13 hoffman + + * Source/cmUnixMakefileGenerator.cxx: BUG: look for -l and -L only + at the begining of a link string + +2001-01-05 13:52 blezek + + * Source/: CMakeBuildTargets.cxx, CMakeSetupCMD.cxx: BUG: main can + not be void under ANSI C++ + +2001-01-05 13:49 blezek + + * Source/cmMakefileGenerator.cxx: BUG: Looking for + cmMakeFileGenerator.h rather than cmMakefileGenerator.h + +2001-01-05 11:41 hoffman + + * Source/: CMakeBuildTargets.cxx, CMakeSetupCMD.cxx, + CMakeSetupCMD.dsp, Makefile.in, cmAbstractFilesRule.cxx, + cmAbstractFilesRule.h, cmAddTargetRule.cxx, cmAddTargetRule.h, + cmAuxSourceDirectoryRule.cxx, cmAuxSourceDirectoryRule.h, + cmClassFile.cxx, cmClassFile.h, cmCollectFlags.cxx, + cmCollectFlags.h, cmDSPMakefile.cxx, cmDSPMakefile.h, + cmDSPWriter.cxx, cmDSPWriter.h, cmDSWMakefile.cxx, + cmDSWWriter.cxx, cmDSWMakefile.h, cmDSWWriter.h, cmDirectory.cxx, + cmDirectory.h, cmExecutablesRule.cxx, cmExecutablesRule.h, + cmFindIncludeRule.cxx, cmFindIncludeRule.h, + cmFindLibraryRule.cxx, cmFindLibraryRule.h, + cmFindProgramRule.cxx, cmFindProgramRule.h, + cmIncludeDirectoryRule.cxx, cmIncludeDirectoryRule.h, + cmLibraryRule.cxx, cmLibraryRule.h, cmLinkDirectoriesRule.cxx, + cmLinkDirectoriesRule.h, cmLinkLibrariesRule.cxx, + cmLinkLibrariesRule.h, cmMSProjectGenerator.cxx, + cmMSProjectGenerator.h, cmMakeDepend.cxx, cmMakeDepend.h, + cmMakefile.cxx, cmMakefile.h, cmMakefileGenerator.cxx, + cmMakefileGenerator.h, cmProjectRule.cxx, cmProjectRule.h, + cmRegularExpression.cxx, cmRegularExpression.h, cmRuleMaker.h, + cmSourceFilesRequireRule.cxx, cmSourceFilesRequireRule.h, + cmSourceFilesRule.cxx, cmSourceFilesRule.h, cmStandardIncludes.h, + cmSubdirRule.cxx, cmSubdirRule.h, cmSystemTools.cxx, + cmSystemTools.h, cmTestsRule.cxx, cmTestsRule.h, + cmUnixDefinesRule.cxx, cmUnixDefinesRule.h, + cmUnixLibrariesRule.cxx, cmUnixLibrariesRule.h, + cmUnixMakefile.cxx, cmUnixMakefile.h, + cmUnixMakefileGenerator.cxx, cmUnixMakefileGenerator.h, + cmWin32DefinesRule.cxx, cmWin32DefinesRule.h, + cmWin32LibrariesRule.cxx, cmWin32LibrariesRule.h, + cmWindowsConfigure.cxx, cmWindowsConfigure.h: ENH: rework cmake, + added ruleMaker classes and changed the syntax of the + CMakeLists.txt files. + +2000-12-07 15:45 blezek + + * Source/cmMakefile.cxx: ENH: Added TESTS target + +2000-11-22 11:02 hoffman + + * Source/cmMakeDepend.cxx: BUG: remove bogus warning about not + finding a depend file, if there are no include paths + +2000-11-09 10:41 will + + * README, Source/cmCollectFlags.cxx, Source/cmCollectFlags.h, + Source/cmWindowsConfigure.cxx: ENH:Changed CMAKE_SOURCE_ROOT to + CMAKE_SOURCE_DIR + +2000-11-03 16:38 hoffman + + * README: [no log message] + +2000-11-02 11:13 hoffman + + * Source/cmMakefile.cxx: BUG: make sure SOURCE_FILES starts at the + begining of line + +2000-11-02 10:56 blezek + + * CMakeVariables.make.in: ENH: Moved @JAVA@ to @JAVACOMMAND@ + +2000-11-02 10:24 will + + * README, Source/cmClassFile.cxx, Source/cmMakefile.cxx: + ENH:Reworked CMake to clearer indicate what the variables do + +2000-10-25 17:18 hoffman + + * Source/: cmSystemTools.cxx: BUG: remove tabs from classnames + +2000-10-04 09:58 lorensen + + * CMakeVariables.make.in: Enh: Added TCLSH + +2000-10-02 14:21 blezek + + * Source/CMakeBuildTargets.cxx: BUG: if the path to your source + directory has a -S in it, it will be picked up as the source + directory by the command line parser, because it matches -S at + any character position in the argements. Bad, should have used + getopt, except that it is not cross platform. + +2000-10-02 13:50 blezek + + * CMakeVariables.make.in: ENH: Support for XML builds and Dashboard + +2000-09-28 12:43 blezek + + * README: ENH: Added note about VERBATIM targets in CMakeList.txt + +2000-09-27 15:01 hoffman + + * CMakeMaster.make.in, CMakeRules.make.in, CMakeVariables.make.in, + README, Source/cmDSWMakefile.cxx, Source/cmDSWMakefile.h, + Source/cmDSWWriter.cxx, Source/cmDSWWriter.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/cmUnixMakefile.cxx, Source/cmUnixMakefile.h: ENH: change + ME to LIBRARY and added PROJECT, also remove ITK stuff and + replaced with CMake + +2000-09-21 13:45 hoffman + + * README, Source/CMakeBuildTargets.cxx, Source/CMakeSetupCMD.cxx, + Source/cmCollectFlags.cxx, Source/cmCollectFlags.h, + Source/cmDSPMakefile.cxx, Source/cmDSPWriter.cxx, + Source/cmDSWMakefile.cxx, Source/cmDSWWriter.cxx, + Source/cmMakeDepend.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmUnixMakefile.cxx, + Source/itkVC60Configure.cxx, Source/itkVC60Configure.h: ENH: + clean up code, and varible names + +2000-09-18 10:19 hoffman + + * Source/cmUnixMakefile.cxx: BUG: remove cout + +2000-09-18 09:19 hoffman + + * CMakeRules.make.in, CMakeVariables.make.in, README, + Source/cmDSPMakefile.cxx, Source/cmDSPWriter.cxx, + Source/cmMakeDepend.cxx, Source/cmUnixMakefile.cxx, + Source/cmWindowsConfigure.cxx, Source/cmWindowsConfigure.h: ENH: + added a config setup file for CMakeSetup. Cleaned up the names + of the source and binary directories + +2000-09-18 07:27 hoffman + + * Source/CMakeSetupCMD.dsp: ENH: remove unused files + +2000-09-12 06:44 hoffman + + * CMakeRules.make.in, CMakeVariables.make.in: BUG: fix build in + place source directory + +2000-09-12 05:37 hoffman + + * Source/: cmCollectFlags.cxx, cmCollectFlags.h: NEW: class to + collect all the flags from parent directories + +2000-09-12 05:30 hoffman + + * CMakeMaster.make.in, CMakeRules.make.in, CMakeTargets.make.in, + CMakeVariables.make.in, MakefileTemplate.in, README, + Source/CMakeBuildTargets.cxx, Source/CMakeSetup.cxx, + Source/CMakeSetup.dsw, Source/CMakeSetupCMD.cxx, + Source/CMakeSetupCMD.dsp, Source/Makefile.in, + Source/cmClassFile.cxx, Source/cmClassFile.h, + Source/cmDSPBuilder.cxx, Source/cmDSPBuilder.h, + Source/cmDSPMakefile.cxx, Source/cmDSPWriter.cxx, + Source/cmDSWBuilder.cxx, Source/cmDSWBuilder.h, + Source/cmDSWMakefile.cxx, Source/cmDSWMakefile.h, + Source/cmDSWWriter.cxx, Source/cmDSWWriter.h, + Source/cmMakeDepend.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmPCBuilder.cxx, + Source/cmPCBuilder.h, Source/cmSystemTools.cxx, + Source/cmSystemTools.h, Source/cmUnixMakefile.cxx, + Source/cmUnixMakefile.h, Source/cmWindowsConfigure.h, + Source/itkVC60Configure.h: ENH: CMake and configure now use + SUBDIRS in CMakeLists.txt to find all the directories of the + system. + +2000-09-01 10:43 hoffman + + * Source/: EXEHeader.dsptemplate, cmSystemTools.cxx: BUG: fix + release build on windows + +2000-08-31 14:26 hoffman + + * CMakeVariables.make.in, Source/cmUnixMakefile.cxx: BUG: fix build + of lib.a problem + +2000-08-31 14:15 hoffman + + * Source/: CMakeSetup.dsw, cmDSPMakefile.cxx, cmDSPWriter.cxx: BUG: + fix name of command line version in dsp files + +2000-08-31 13:54 hoffman + + * CMakeSimpleRules.make, CMakeSimpleRules.make.in: BUG: fix for out + of source build + +2000-08-31 13:52 hoffman + + * CMakeSimpleRules.make: ENH: fix for Sgi make + +2000-08-31 09:36 hoffman + + * CMakeRules.make.in, Source/Makefile.in, + Source/cmUnixMakefile.cxx: ENH: fix for SGI make + +2000-08-31 06:36 hoffman + + * CMakeVariables.make.in, README: ENH: clean things up a bit + +2000-08-30 13:59 hoffman + + * Source/cmDirectory.cxx, Source/cmDirectory.h, + MakefileTemplate.in: ENH: add ability to compile all the files in + a sub-directory + +2000-08-30 13:35 hoffman + + * CMakeRules.make.in, CMakeVariables.make.in, README, + Source/CMakeSetupCMD.dsp, Source/Makefile.in, + Source/cmClassFile.cxx, Source/cmDSPMakefile.cxx, + Source/cmDSPWriter.cxx, Source/cmDSWMakefile.cxx, + Source/cmDSWWriter.cxx, Source/cmMakefile.cxx, + Source/cmMakefile.h, Source/cmUnixMakefile.cxx: ENH: move from + tools and create working CMake program + +2000-08-29 15:26 hoffman + + * CMakeMaster.make.in, CMakeRules.make.in, CMakeVariables.make.in, + Source/CMakeBuildTargets.cxx, Source/CMakeSetup.cxx, + Source/CMakeSetup.dsw, Source/CMakeSetupCMD.cxx, + Source/CMakeSetupCMD.dsp, Source/EXEFooter.dsptemplate, + Source/EXEHeader.dsptemplate, Source/Makefile.in, + Source/cmClassFile.cxx, Source/cmClassFile.h, + Source/cmDSPBuilder.cxx, Source/cmDSPBuilder.h, + Source/cmDSPMakefile.cxx, Source/cmDSPMakefile.h, + Source/cmDSPWriter.cxx, Source/cmDSPWriter.h, + Source/cmDSWBuilder.cxx, Source/cmDSWBuilder.h, + Source/cmDSWMakefile.cxx, Source/cmDSWMakefile.h, + Source/cmDSWWriter.cxx, Source/cmDSWWriter.h, + Source/cmMakeDepend.cxx, Source/cmMakeDepend.h, + Source/cmMakefile.cxx, Source/cmMakefile.h, + Source/cmPCBuilder.cxx, Source/cmPCBuilder.h, + Source/cmRegularExpression.cxx, Source/cmRegularExpression.h, + Source/cmSystemTools.cxx, Source/cmSystemTools.h, + Source/cmUnixMakefile.cxx, Source/cmUnixMakefile.h, + Source/cmWindowsConfigure.cxx, Source/cmWindowsConfigure.h, + Source/itkVC60Configure.cxx, Source/itkVC60Configure.h, + Source/staticLibFooter.dsptemplate, + Source/staticLibHeader.dsptemplate, README: NEW: move from tools + and config to create CMake + +2000-08-29 10:56 hoffman + + * CMakeMaster.make.in, CMakeRules.make.in, CMakeVariables.make.in, + dummy.in: [no log message] + diff --git a/CompileFlags.cmake b/CompileFlags.cmake new file mode 100644 index 0000000..3b455b9 --- /dev/null +++ b/CompileFlags.cmake @@ -0,0 +1,64 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +#----------------------------------------------------------------------------- +# set some special flags for different compilers +# +IF(CMAKE_GENERATOR MATCHES "Visual Studio 7") + SET(CMAKE_SKIP_COMPATIBILITY_TESTS 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7") +IF(CMAKE_GENERATOR MATCHES "Visual Studio 6") + SET(CMAKE_SKIP_COMPATIBILITY_TESTS 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6") +INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityCXX.cmake) + +IF(WIN32 AND "${CMAKE_C_COMPILER_ID}" MATCHES "^(Intel)$") + SET(_INTEL_WINDOWS 1) +ENDIF() + +# Disable deprecation warnings for standard C functions. +# really only needed for newer versions of VS, but should +# not hurt other versions, and this will work into the +# future +IF(MSVC OR _INTEL_WINDOWS) + ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) +ELSE() +ENDIF() + +#silence duplicate symbol warnings on AIX +IF(CMAKE_SYSTEM MATCHES "AIX.*") + IF(NOT CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -bhalt:5 ") + ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX) +ENDIF(CMAKE_SYSTEM MATCHES "AIX.*") + +IF(CMAKE_SYSTEM MATCHES "IRIX.*") + IF(NOT CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-woff84 -no_auto_include") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-woff15") + ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX) +ENDIF(CMAKE_SYSTEM MATCHES "IRIX.*") + +IF(CMAKE_SYSTEM MATCHES "OSF1-V.*") + IF(NOT CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -timplicit_local -no_implicit_include ") + ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX) +ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V.*") + +# use the ansi CXX compile flag for building cmake +IF (CMAKE_ANSI_CXXFLAGS) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_ANSI_CXXFLAGS}") +ENDIF (CMAKE_ANSI_CXXFLAGS) + +IF (CMAKE_ANSI_CFLAGS) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_ANSI_CFLAGS}") +ENDIF (CMAKE_ANSI_CFLAGS) diff --git a/Copyright.txt b/Copyright.txt new file mode 100644 index 0000000..83a2482 --- /dev/null +++ b/Copyright.txt @@ -0,0 +1,56 @@ +CMake - Cross Platform Makefile Generator +Copyright 2000-2011 Kitware, Inc., Insight Software Consortium +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the names of Kitware, Inc., the Insight Software Consortium, + nor the names of their contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------ + +The above copyright and license notice applies to distributions of +CMake in source and binary form. Some source files contain additional +notices of original copyright by their contributors; see each source +for details. Third-party software packages supplied with CMake under +compatible licenses provide their own copyright notices documented in +corresponding subdirectories. + +------------------------------------------------------------------------------ + +CMake was initially developed by Kitware with the following sponsorship: + + * National Library of Medicine at the National Institutes of Health + as part of the Insight Segmentation and Registration Toolkit (ITK). + + * US National Labs (Los Alamos, Livermore, Sandia) ASC Parallel + Visualization Initiative. + + * National Alliance for Medical Image Computing (NAMIC) is funded by the + National Institutes of Health through the NIH Roadmap for Medical Research, + Grant U54 EB005149. + + * Kitware, Inc. diff --git a/DartConfig.cmake b/DartConfig.cmake new file mode 100644 index 0000000..37f66c7 --- /dev/null +++ b/DartConfig.cmake @@ -0,0 +1,18 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +set(CTEST_PROJECT_NAME "CMake") +set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT") + +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "www.cdash.org") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=CMake") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/DartLocal.conf.in b/DartLocal.conf.in new file mode 100644 index 0000000..e28cb18 --- /dev/null +++ b/DartLocal.conf.in @@ -0,0 +1,121 @@ +ExpectedBuilds: \ +{andoria.kitware Linux-g++3.4-KDevelop} \ +{andoria.kitware Linux-g++3.4-SVN} \ +{DASH1.kitware Win32-nmake71} \ +{DASH1.kitware Win32-vs71} \ +{DASH1.kitware Win32-vs71Rel} \ +{DASH1.kitware zRel24-Win32-nmake71} \ +{DASH1.kitware zRel24-Win32-vs71} \ +{DASH11.kitware zRel24-Win32-nmake71} \ +{dash14.kitware Win32-bcc5.6} \ +{dash14.kitware Win32-cygwin} \ +{dash14.kitware Win32-mingw} \ +{dash14.kitware zRel24-Win32-bcc5.6} \ +{dash17.kitware Linux-g++4.0} \ +{dash1win64.kitware Win64-vs80} \ +{dash1win98.kitware Win32-vs60} \ +{DASH2.kitware Win32-nmake70} \ +{DASH2.kitware Win32-vs70} \ +{DASH2.kitware Win32-vs70-InPlace} \ +{DASH2.kitware zRel24-Win32-nmake70} \ +{DASH2.kitware zRel24-Win32-vs70} \ +{DASH3.kitware Win32-nmake60} \ +{DASH3.kitware Win32-vs60} \ +{DASH3.kitware zRel24-Win32-nmake60} \ +{DASH3.kitware zRel24-Win32-vs60} \ +{dash4.kitware Win32-bcc5.8} \ +{DASH5.kitware Linux-gcc332-InPlace} \ +{DASH5.kitware zRel24-Linix-gcc332} \ +{DASH6.kitware zRel24-Linix-gcc332} \ +{dash8.kitware Linux64-g++} \ +{dash8.kitware Linux64-g++332} \ +{dash8.kitware Linux64-g++341} \ +{dash8.kitware zRel24-Linux64-g++} \ +{dash8.kitware zRel24-Linux64-g++332} \ +{dashmacmini1.kitware Darwin-Tiger-Xcode21} \ +{dashmacmini1.kitware zRel24-Darwin-Tiger-g++} \ +{dashmacmini2.kitware DarwinIntel-g++} \ +{dashmacmini2.kitware DarwinIntel-Universal} \ +{dashmacmini2.kitware Darwin-Tiger-Xcode21-univ} \ +{dashmacmini3.kitware Darwin-LeopardIntel-g++} \ +{dashmacmini3.kitware Darwin-LeopardIntel-Universal} \ +{dashmacmini3.kitware Darwin-Leopard-Xcode21-univ} \ +{dashsgi1.kitware IRIX32-CC} \ +{dashsgi1.kitware IRIX64-CC} \ +{dashsun1.kitware SunOS-CC} \ +{dashsun1.kitware SunOS-CC-64} \ +{dashsun1.kitware SunOS-gcc34-64} \ +{destiny.kitware HP-UX-aCC} \ +{destiny.kitware HP-UX-aCC-gmake} \ +{devqnx.acfr.usyd.edu.au qnx-V3.3.5-gcc_ntox86} \ +{grayson.kitware Win32-nmake80} \ +{heart HP-UXia64-aCC} \ +{hythloth.kitware Linux64-bullseye-cov} \ +{hythloth.kitware Linux64-suncc-5.9} \ +{hythloth.kitware Linux-nightly-win32-release} \ +{insight.journal.kitware KWStyle} \ +{iris.elemtech IRIX64-CC64-7.4} \ +{iris.elemtech IRIX64-CC-7.4} \ +{JET.kitware Linux-valgrind2} \ +{krondor.kitware Darwin-c++} \ +{krondor.kitware zRel24-Darwin-c++} \ +{midworld.kitware DarwinG5-g++} \ +{midworld.kitware DarwinG5-XCode15} \ +{midworld.kitware zRel24-DarwinG5-g++} \ +{pre.vision.cs.rpi.edu FreeBSD-CC-gmake} \ +{pre.vision.cs.rpi.edu FreeBSD-CC-make} \ +{RogueResearch3 Mac10.5-CMake-gcc-dbg-ppc} \ +{RogueResearch3 Mac10.5-CMake-gcc-dbg-ppc64} \ +{RogueResearch3 Mac10.5-CMake-gcc-rel-ppc} \ +{RogueResearch3 Mac10.5-CMake-gcc-rel-ppc64} \ +{RogueResearch3 Mac10.5-CMake-Xcode-dbg-ppc} \ +{RogueResearch3 Mac10.5-CMake-Xcode-dbg-ppc64} \ +{RogueResearch4 Mac10.5-CMake-gcc-dbg-i386} \ +{RogueResearch4 Mac10.5-CMake-gcc-dbg-rosetta} \ +{RogueResearch4 Mac10.5-CMake-gcc-rel-i386} \ +{tick.rz.uni-augsburg.de LinuxPPC-g++3.3} \ +{tick.rz.uni-augsburg.de LinuxPPC-g++3.4} \ +{trinsic.kitware Win32-mingw} \ +{r06n01.pbm.ihost.com AIX53-xlC} \ +{r06n01.pbm.ihost.com zRel24-AIX53-xlC} \ +{valhalla.kitware Win32-wcl386} + +#{devqnx.acfr.usyd.edu.au qnx-V3.3.5-gcc_ntox86 } \ +#{mr-orange.obtech.net gentoo-linux-x86\_64-gcc-4.0.2 } \ +#{G5.Nfsnet.Org Darwin8.3-gcc4} \ + +# commas in names do not work for expected builds.... + +#{G4.Nfsnet.Org Darwin-c++} \ +#{salmon.nlm.nih.gov Darwin8.7-gcc4} \ + +#{crd.ge.com Solaris-gcc343} \ +#{crd.ge.com Linux-icc81} \ +#{crd.ge.com Windows-bcc32} \ +#{crd.ge.com Windows-nmake71} \ +#{crd.ge.com Windows-nmake60} \ + +#{dash16.kitware Linux-g++4.0} \ +#{styx Linuxia64-g++} \ +#{crd.ge.com Cygwin-gcc344} \ +#{valhalla.kitware Win32-bccRel} \ +#{valhalla.kitware Win32-bcc} \ +#{valhalla.kitware Win32-g++} \ +#{valhalla.kitware Win32-nmake60} \ +#{valhalla.kitware Win32-nmake70} \ +#{valhalla.kitware Win32-vs60} \ +#{valhalla.kitware Win32-vs70} +#{crd.ge.com FreeBSD-gcc321} \ +#{crd.ge.com Linux-gcc320} \ + +#{cogattaca.kitware LinuxWin32-g++-Werror} \ +#{cogattaca.kitware LinuxWin32-g++} \ + +#{dash8.kitware Win64-icl80} \ +#{dash8.kitware zLRB-Win64-icl80} \ + +#{hythloth.kitware Linux-icc-8.1} \ + +CompressionMode: ALL +CompressionCommand: /bin/gzip +CompressionType: gzip diff --git a/Docs/cmake-completion b/Docs/cmake-completion new file mode 100644 index 0000000..d70ac24 --- /dev/null +++ b/Docs/cmake-completion @@ -0,0 +1,207 @@ +# +# bash-completion file for CMake +# Provided by Eric NOULARD - eric.noulard@gmail.com +# +# see http://bash-completion.alioth.debian.org/ +# and http://www.cmake.org +# +# We will try to complete cmake commands options +# at 2 (or may be 3 levels) +# [cmake|cpack|ctest] +# +# level0 is top level cmake/cpack/ctest options +# level1 is the first argument of level0 option +# level2 is the seconf argument of level1 argument +# FIXME: I don't know how to handle level2 +# +# The file has been proposed for inclusion in the bash-completion package +# https://alioth.debian.org/tracker/?func=detail&atid=413095&aid=312632&group_id=100114 +# In the meantime, +# 1) If you want to test bash completion for cmake/cpack/ctest +# just source the current file at bash prompt +# . ./cmake-completion +# +# 2) If you want to install it for good copy this file to +# cp cmake-completion /etc/bash_completion.d/cmake +# + +# +# cmake command +# +# have cmake && +_cmake() +{ + local cur prev opts words cword + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + # seems to be only available on bash-completion 1.2 + #_get_comp_words_by_ref cur prev + + # cmake command line option we want to complete + opts=`cmake --help | grep "^ \-.*=\ .*" | cut -d" " -f 3 | cut -d= -f 1 | cut -d[ -f 1` + + # + # Complete the arguments to some of + # the most commonly used commands (Level 1). + # + case "${prev}" in + -E) + local running=$(for x in `cmake -E |& grep "^ " | cut -d" " -f 3`; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + # FIXME: don't know how to handle multi words completion + # or more precisely word that contains space in them like "Unix Makefiles" + # -G) + # local running=$(for x in `cmake --help | grep "^ .*=\ .*" | grep -v "^ -" | cut -d"=" -f 1 | grep -v "^ "`; do echo \"${x}\" ; done ) + # COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + # return 0 + # ;; + --help-command) + local running=$(for x in `cmake --help-command-list | grep -v "cmake version"`; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + --help-module) + local running=$(for x in `cmake --help-module-list | grep -v "cmake version"`; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + --help-policy) + local running=$(for x in `cmake --help-policies | grep "^ CMP"`; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + --help-property) + local running=$(for x in `cmake --help-property-list | grep -v "cmake version"`; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + --help-variable) + local running=$(for x in `cmake --help-variable-list | grep -v "cmake version"`; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + *) + ;; + esac + + # + # Complete the arguments to some of + # the most commonly used commands (Level 2). + # ?? How to do that .. + + # + # Complete the option (Level 0 - right after cmake) + # + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) +} && +complete -F _cmake -o default cmake + +# +# cpack command +# +#have cpack && +_cpack() +{ + local cur prev opts words cword + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + # seems to be only available on bash-completion 1.2 + #_get_comp_words_by_ref cur prev + + # cpack command line option we want to complete + opts=`cpack --help | grep "^ \-.*=\ .*" | cut -d" " -f 3 | cut -d= -f 1` + opts="${opts} --help -V" + + # + # Complete the arguments to some of + # the most commonly used commands (Level 1). + # + case "${prev}" in + -G) + local running=$(for x in `cpack --help | grep "^ .*=\ .*" | grep -v "^ -" | cut -d" " -f 3`; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + --config) + COMPREPLY=( $(compgen -f ${cur}) ) + return 0 + ;; + --help-variable) + local running=$(for x in `cpack --help-variable-list | grep -v "cpack version" `; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + --help-command) + local running=$(for x in `cpack --help-command-list | grep -v "cpack version" `; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + *) + ;; + esac + + # + # Complete the option (Level 0 - right after cpack) + # + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) +} && +complete -F _cpack -o default cpack + +# +# ctest command +# +# have ctest && +_ctest() +{ + local cur prev opts words cword + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + # seems to be only available on bash-completion 1.2 + #_get_comp_words_by_ref cur prev + + # cmake command line option we want to complete + opts=`ctest --help | grep "\-\-.*" | cut -d" " -f 3 | sed s/,/\\\n/g` + + # + # Complete the arguments to some of + # the most commonly used commands (Level 1). + # + case "${prev}" in + --help-command) + local running=$(for x in `ctest --help-command-list | grep -v "ctest version" `; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + -R|-E) + local running=$(for x in `ctest -N 2> /dev/null | grep "^ Test" | cut -d: -f 2`; do echo ${x} ; done ) + COMPREPLY=( $(compgen -W "${running}" -- ${cur}) ) + return 0 + ;; + *) + ;; + esac + + # + # Complete the arguments to some of + # the most commonly used commands (Level 2). + # ?? How to do that .. + + # + # Complete the option (Level 0 - right after cmake) + # + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) +} && +complete -F _ctest -o default ctest + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/Docs/cmake-help.vim b/Docs/cmake-help.vim new file mode 100644 index 0000000..17cfa83 --- /dev/null +++ b/Docs/cmake-help.vim @@ -0,0 +1,21 @@ +nmap ,hc :call OpenCmakeHelp() + +function! OpenCmakeHelp() + let s = getline( '.' ) + let i = col( '.' ) - 1 + while i > 0 && strpart( s, i, 1 ) =~ '[A-Za-z0-9_]' + let i = i - 1 + endwhile + while i < col('$') && strpart( s, i, 1 ) !~ '[A-Za-z0-9_]' + let i = i + 1 + endwhile + let start = match( s, '[A-Za-z0-9_]\+', i ) + let end = matchend( s, '[A-Za-z0-9_]\+', i ) + let ident = strpart( s, start, end - start ) + execute "vertical new" + execute "%!cmake --help-command ".ident + set nomodified + set readonly +endfunction + +autocmd BufRead,BufNewFile *.cmake,CMakeLists.txt,*.cmake.in nmap :call OpenCmakeHelp() diff --git a/Docs/cmake-indent.vim b/Docs/cmake-indent.vim new file mode 100644 index 0000000..f149873 --- /dev/null +++ b/Docs/cmake-indent.vim @@ -0,0 +1,93 @@ +" ============================================================================= +" +" Program: CMake - Cross-Platform Makefile Generator +" Module: $RCSfile$ +" Language: VIM +" Date: $Date$ +" Version: $Revision$ +" +" ============================================================================= + +" Vim indent file +" Language: CMake (ft=cmake) +" Author: Andy Cedilnik +" Maintainer: Karthik Krishnan +" Last Change: $Date$ +" Version: $Revision$ +" +" Licence: The CMake license applies to this file. See +" http://www.cmake.org/HTML/Copyright.html +" This implies that distribution with Vim is allowed + +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal indentexpr=CMakeGetIndent(v:lnum) +setlocal indentkeys+==ENDIF(,ENDFOREACH(,ENDMACRO(,ELSE(,ELSEIF(,ENDWHILE( + +" Only define the function once. +if exists("*CMakeGetIndent") + finish +endif + +fun! CMakeGetIndent(lnum) + let this_line = getline(a:lnum) + + " Find a non-blank line above the current line. + let lnum = a:lnum + let lnum = prevnonblank(lnum - 1) + let previous_line = getline(lnum) + + " Hit the start of the file, use zero indent. + if lnum == 0 + return 0 + endif + + let ind = indent(lnum) + + let or = '\|' + " Regular expressions used by line indentation function. + let cmake_regex_comment = '#.*' + let cmake_regex_identifier = '[A-Za-z][A-Za-z0-9_]*' + let cmake_regex_quoted = '"\([^"\\]\|\\.\)*"' + let cmake_regex_arguments = '\(' . cmake_regex_quoted . + \ or . '\$(' . cmake_regex_identifier . ')' . + \ or . '[^()\\#"]' . or . '\\.' . '\)*' + + let cmake_indent_comment_line = '^\s*' . cmake_regex_comment + let cmake_indent_blank_regex = '^\s*$' + let cmake_indent_open_regex = '^\s*' . cmake_regex_identifier . + \ '\s*(' . cmake_regex_arguments . + \ '\(' . cmake_regex_comment . '\)\?$' + + let cmake_indent_close_regex = '^' . cmake_regex_arguments . + \ ')\s*' . + \ '\(' . cmake_regex_comment . '\)\?$' + + let cmake_indent_begin_regex = '^\s*\(IF\|MACRO\|FOREACH\|ELSE\|ELSEIF\|WHILE\|FUNCTION\)\s*(' + let cmake_indent_end_regex = '^\s*\(ENDIF\|ENDFOREACH\|ENDMACRO\|ELSE\|ELSEIF\|ENDWHILE\|ENDFUNCTION\)\s*(' + + " Add + if previous_line =~? cmake_indent_comment_line " Handle comments + let ind = ind + else + if previous_line =~? cmake_indent_begin_regex + let ind = ind + &sw + endif + if previous_line =~? cmake_indent_open_regex + let ind = ind + &sw + endif + endif + + " Subtract + if this_line =~? cmake_indent_end_regex + let ind = ind - &sw + endif + if previous_line =~? cmake_indent_close_regex + let ind = ind - &sw + endif + + return ind +endfun diff --git a/Docs/cmake-mode.el b/Docs/cmake-mode.el new file mode 100644 index 0000000..9517455 --- /dev/null +++ b/Docs/cmake-mode.el @@ -0,0 +1,340 @@ +;============================================================================= +; CMake - Cross Platform Makefile Generator +; Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +; +; Distributed under the OSI-approved BSD License (the "License"); +; see accompanying file Copyright.txt for details. +; +; This software is distributed WITHOUT ANY WARRANTY; without even the +; implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +; See the License for more information. +;============================================================================= +;;; cmake-mode.el --- major-mode for editing CMake sources + +;------------------------------------------------------------------------------ + +;;; Commentary: + +;; Provides syntax highlighting and indentation for CMakeLists.txt and +;; *.cmake source files. +;; +;; Add this code to your .emacs file to use the mode: +;; +;; (setq load-path (cons (expand-file-name "/dir/with/cmake-mode") load-path)) +;; (require 'cmake-mode) +;; (setq auto-mode-alist +;; (append '(("CMakeLists\\.txt\\'" . cmake-mode) +;; ("\\.cmake\\'" . cmake-mode)) +;; auto-mode-alist)) + +;------------------------------------------------------------------------------ + +;;; Code: +;; +;; cmake executable variable used to run cmake --help-command +;; on commands in cmake-mode +;; +;; cmake-command-help Written by James Bigler +;; + +(defcustom cmake-mode-cmake-executable "cmake" + "*The name of the cmake executable. + +This can be either absolute or looked up in $PATH. You can also +set the path with these commands: + (setenv \"PATH\" (concat (getenv \"PATH\") \";C:\\\\Program Files\\\\CMake 2.8\\\\bin\")) + (setenv \"PATH\" (concat (getenv \"PATH\") \":/usr/local/cmake/bin\"))" + :type 'file + :group 'cmake) +;; +;; Regular expressions used by line indentation function. +;; +(defconst cmake-regex-blank "^[ \t]*$") +(defconst cmake-regex-comment "#.*") +(defconst cmake-regex-paren-left "(") +(defconst cmake-regex-paren-right ")") +(defconst cmake-regex-argument-quoted + "\"\\([^\"\\\\]\\|\\\\\\(.\\|\n\\)\\)*\"") +(defconst cmake-regex-argument-unquoted + "\\([^ \t\r\n()#\"\\\\]\\|\\\\.\\)\\([^ \t\r\n()#\\\\]\\|\\\\.\\)*") +(defconst cmake-regex-token (concat "\\(" cmake-regex-comment + "\\|" cmake-regex-paren-left + "\\|" cmake-regex-paren-right + "\\|" cmake-regex-argument-unquoted + "\\|" cmake-regex-argument-quoted + "\\)")) +(defconst cmake-regex-indented (concat "^\\(" + cmake-regex-token + "\\|" "[ \t\r\n]" + "\\)*")) +(defconst cmake-regex-block-open + "^\\([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]*\\([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]*(") + +;------------------------------------------------------------------------------ + +;; +;; Helper functions for line indentation function. +;; +(defun cmake-line-starts-inside-string () + "Determine whether the beginning of the current line is in a string." + (if (save-excursion + (beginning-of-line) + (let ((parse-end (point))) + (beginning-of-buffer) + (nth 3 (parse-partial-sexp (point) parse-end)) + ) + ) + t + nil + ) + ) + +(defun cmake-find-last-indented-line () + "Move to the beginning of the last line that has meaningful indentation." + (let ((point-start (point)) + region) + (forward-line -1) + (setq region (buffer-substring-no-properties (point) point-start)) + (while (and (not (bobp)) + (or (looking-at cmake-regex-blank) + (cmake-line-starts-inside-string) + (not (and (string-match cmake-regex-indented region) + (= (length region) (match-end 0)))))) + (forward-line -1) + (setq region (buffer-substring-no-properties (point) point-start)) + ) + ) + ) + +;------------------------------------------------------------------------------ + +;; +;; Line indentation function. +;; +(defun cmake-indent () + "Indent current line as CMAKE code." + (interactive) + (if (cmake-line-starts-inside-string) + () + (if (bobp) + (cmake-indent-line-to 0) + (let (cur-indent) + + (save-excursion + (beginning-of-line) + + (let ((point-start (point)) + token) + + ; Search back for the last indented line. + (cmake-find-last-indented-line) + + ; Start with the indentation on this line. + (setq cur-indent (current-indentation)) + + ; Search forward counting tokens that adjust indentation. + (while (re-search-forward cmake-regex-token point-start t) + (setq token (match-string 0)) + (if (string-match (concat "^" cmake-regex-paren-left "$") token) + (setq cur-indent (+ cur-indent cmake-tab-width)) + ) + (if (string-match (concat "^" cmake-regex-paren-right "$") token) + (setq cur-indent (- cur-indent cmake-tab-width)) + ) + (if (and + (string-match cmake-regex-block-open token) + (looking-at (concat "[ \t]*" cmake-regex-paren-left)) + ) + (setq cur-indent (+ cur-indent cmake-tab-width)) + ) + ) + (goto-char point-start) + + ; If this is the end of a block, decrease indentation. + (if (looking-at cmake-regex-block-close) + (setq cur-indent (- cur-indent cmake-tab-width)) + ) + ) + ) + + ; Indent this line by the amount selected. + (if (< cur-indent 0) + (cmake-indent-line-to 0) + (cmake-indent-line-to cur-indent) + ) + ) + ) + ) + ) + +(defun cmake-point-in-indendation () + (string-match "^[ \\t]*$" (buffer-substring (point-at-bol) (point)))) + +(defun cmake-indent-line-to (column) + "Indent the current line to COLUMN. +If point is within the existing indentation it is moved to the end of +the indentation. Otherwise it retains the same position on the line" + (if (cmake-point-in-indendation) + (indent-line-to column) + (save-excursion (indent-line-to column)))) + +;------------------------------------------------------------------------------ + +;; +;; Helper functions for buffer +;; +(defun unscreamify-cmake-buffer () + "Convert all CMake commands to lowercase in buffer." + (interactive) + (setq save-point (point)) + (goto-char (point-min)) + (while (re-search-forward "^\\([ \t]*\\)\\(\\w+\\)\\([ \t]*(\\)" nil t) + (replace-match + (concat + (match-string 1) + (downcase (match-string 2)) + (match-string 3)) + t)) + (goto-char save-point) + ) + +;------------------------------------------------------------------------------ + +;; +;; Keyword highlighting regex-to-face map. +;; +(defconst cmake-font-lock-keywords + (list '("^[ \t]*\\(\\w+\\)[ \t]*(" 1 font-lock-function-name-face)) + "Highlighting expressions for CMAKE mode." + ) + +;------------------------------------------------------------------------------ + +;; +;; Syntax table for this mode. Initialize to nil so that it is +;; regenerated when the cmake-mode function is called. +;; +(defvar cmake-mode-syntax-table nil "Syntax table for cmake-mode.") +(setq cmake-mode-syntax-table nil) + +;; +;; User hook entry point. +;; +(defvar cmake-mode-hook nil) + +;; +;; Indentation increment. +;; +(defvar cmake-tab-width 2) + +;------------------------------------------------------------------------------ + +;; +;; CMake mode startup function. +;; +(defun cmake-mode () + "Major mode for editing CMake listfiles." + (interactive) + (kill-all-local-variables) + (setq major-mode 'cmake-mode) + (setq mode-name "CMAKE") + + ; Create the syntax table + (setq cmake-mode-syntax-table (make-syntax-table)) + (set-syntax-table cmake-mode-syntax-table) + (modify-syntax-entry ?_ "w" cmake-mode-syntax-table) + (modify-syntax-entry ?\( "()" cmake-mode-syntax-table) + (modify-syntax-entry ?\) ")(" cmake-mode-syntax-table) + (modify-syntax-entry ?# "<" cmake-mode-syntax-table) + (modify-syntax-entry ?\n ">" cmake-mode-syntax-table) + + ; Setup font-lock mode. + (make-local-variable 'font-lock-defaults) + (setq font-lock-defaults '(cmake-font-lock-keywords)) + + ; Setup indentation function. + (make-local-variable 'indent-line-function) + (setq indent-line-function 'cmake-indent) + + ; Setup comment syntax. + (make-local-variable 'comment-start) + (setq comment-start "#") + + ; Run user hooks. + (run-hooks 'cmake-mode-hook)) + +; Help mode starts here + + +(defun cmake-command-run (type &optional topic) + "Runs the command cmake with the arguments specified. The +optional argument topic will be appended to the argument list." + (interactive "s") + (let* ((bufname (concat "*CMake" type (if topic "-") topic "*")) + (buffer (get-buffer bufname)) + ) + (if buffer + (display-buffer buffer 'not-this-window) + ;; Buffer doesn't exist. Create it and fill it + (setq buffer (generate-new-buffer bufname)) + (setq command (concat cmake-mode-cmake-executable " " type " " topic)) + (message "Running %s" command) + ;; We don't want the contents of the shell-command running to the + ;; minibuffer, so turn it off. A value of nil means don't automatically + ;; resize mini-windows. + (setq resize-mini-windows-save resize-mini-windows) + (setq resize-mini-windows nil) + (shell-command command buffer) + ;; Save the original window, so that we can come back to it later. + ;; save-excursion doesn't seem to work for this. + (setq window (selected-window)) + ;; We need to select it so that we can apply special modes to it + (select-window (display-buffer buffer 'not-this-window)) + (cmake-mode) + (toggle-read-only t) + ;; Restore the original window + (select-window window) + (setq resize-mini-windows resize-mini-windows-save) + ) + ) + ) + +(defun cmake-help-list-commands () + "Prints out a list of the cmake commands." + (interactive) + (cmake-command-run "--help-command-list") + ) + +(defvar cmake-help-command-history nil "Topic read history.") + +(require 'thingatpt) +(defun cmake-get-topic (type) + "Gets the topic from the minibuffer input. The default is the word the cursor is on." + (interactive) + (let* ((default-entry (word-at-point)) + (input (read-string + (format "CMake %s (default %s): " type default-entry) ; prompt + nil ; initial input + 'cmake-help-command-history ; command history + default-entry ; default-value + ))) + (if (string= input "") + (error "No argument given") + input)) + ) + + +(defun cmake-help-command () + "Prints out the help message corresponding to the command the cursor is on." + (interactive) + (setq command (cmake-get-topic "command")) + (cmake-command-run "--help-command" (downcase command)) + ) + + +; This file provides cmake-mode. +(provide 'cmake-mode) + +;;; cmake-mode.el ends here diff --git a/Docs/cmake-syntax.vim b/Docs/cmake-syntax.vim new file mode 100644 index 0000000..80b348e --- /dev/null +++ b/Docs/cmake-syntax.vim @@ -0,0 +1,89 @@ +" ============================================================================= +" +" Program: CMake - Cross-Platform Makefile Generator +" Module: $RCSfile$ +" Language: VIM +" Date: $Date$ +" Version: $Revision$ +" +" ============================================================================= + +" Vim syntax file +" Language: CMake +" Author: Andy Cedilnik +" Maintainer: Karthik Krishnan +" Last Change: $Date$ +" Version: $Revision$ +" +" Licence: The CMake license applies to this file. See +" http://www.cmake.org/HTML/Copyright.html +" This implies that distribution with Vim is allowed + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +syn case ignore +syn match cmakeEscaped /\(\\\\\|\\"\|\\n\|\\t\)/ contained +syn region cmakeComment start="#" end="$" contains=cmakeTodo +syn region cmakeRegistry start=/\[/ end=/]/ + \ contained oneline contains=CONTAINED,cmakeTodo,cmakeEscaped +syn region cmakeVariableValue start=/\${/ end=/}/ + \ contained oneline contains=CONTAINED,cmakeTodo +syn region cmakeEnvironment start=/\$ENV{/ end=/}/ + \ contained oneline contains=CONTAINED,cmakeTodo +syn region cmakeString start=/"/ end=/"/ + \ contains=CONTAINED,cmakeTodo,cmakeOperators +syn region cmakeArguments start=/(/ end=/)/ + \ contains=ALLBUT,cmakeArguments,cmakeTodo +syn keyword cmakeSystemVariables + \ WIN32 UNIX APPLE CYGWIN BORLAND MINGW MSVC MSVC_IDE MSVC60 MSVC70 MSVC71 MSVC80 MSVC90 +syn keyword cmakeOperators + \ ABSOLUTE AND BOOL CACHE COMMAND DEFINED DOC EQUAL EXISTS EXT FALSE GREATER INTERNAL LESS MATCHES NAME NAMES NAME_WE NOT OFF ON OR PATH PATHS PROGRAM STREQUAL STRGREATER STRING STRLESS TRUE + \ contained +syn keyword cmakeDeprecated ABSTRACT_FILES BUILD_NAME SOURCE_FILES SOURCE_FILES_REMOVE VTK_MAKE_INSTANTIATOR VTK_WRAP_JAVA VTK_WRAP_PYTHON VTK_WRAP_TCL WRAP_EXCLUDE_FILES + \ nextgroup=cmakeArguments + +" The keywords are generated as: cmake --help-command-list | tr "\n" " " +syn keyword cmakeStatement + \ ADD_CUSTOM_COMMAND ADD_CUSTOM_TARGET ADD_DEFINITIONS ADD_DEPENDENCIES ADD_EXECUTABLE ADD_LIBRARY ADD_SUBDIRECTORY ADD_TEST AUX_SOURCE_DIRECTORY BUILD_COMMAND BUILD_NAME CMAKE_MINIMUM_REQUIRED CONFIGURE_FILE CREATE_TEST_SOURCELIST ELSE ELSEIF ENABLE_LANGUAGE ENABLE_TESTING ENDFOREACH ENDFUNCTION ENDIF ENDMACRO ENDWHILE EXEC_PROGRAM EXECUTE_PROCESS EXPORT_LIBRARY_DEPENDENCIES FILE FIND_FILE FIND_LIBRARY FIND_PACKAGE FIND_PATH FIND_PROGRAM FLTK_WRAP_UI FOREACH FUNCTION GET_CMAKE_PROPERTY GET_DIRECTORY_PROPERTY GET_FILENAME_COMPONENT GET_SOURCE_FILE_PROPERTY GET_TARGET_PROPERTY GET_TEST_PROPERTY IF INCLUDE INCLUDE_DIRECTORIES INCLUDE_EXTERNAL_MSPROJECT INCLUDE_REGULAR_EXPRESSION INSTALL INSTALL_FILES INSTALL_PROGRAMS INSTALL_TARGETS LINK_DIRECTORIES LINK_LIBRARIES LIST LOAD_CACHE LOAD_COMMAND MACRO MAKE_DIRECTORY MARK_AS_ADVANCED MATH MESSAGE OPTION OUTPUT_REQUIRED_FILES PROJECT QT_WRAP_CPP QT_WRAP_UI REMOVE REMOVE_DEFINITIONS SEPARATE_ARGUMENTS SET SET_DIRECTORY_PROPERTIES SET_SOURCE_FILES_PROPERTIES SET_TARGET_PROPERTIES SET_TESTS_PROPERTIES SITE_NAME SOURCE_GROUP STRING SUBDIR_DEPENDS SUBDIRS TARGET_LINK_LIBRARIES TRY_COMPILE TRY_RUN UNSET USE_MANGLED_MESA UTILITY_SOURCE VARIABLE_REQUIRES VTK_MAKE_INSTANTIATOR VTK_WRAP_JAVA VTK_WRAP_PYTHON VTK_WRAP_TCL WHILE WRITE_FILE + \ nextgroup=cmakeArguments +syn keyword cmakeTodo + \ TODO FIXME XXX + \ contained + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_cmake_syntax_inits") + if version < 508 + let did_cmake_syntax_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink cmakeStatement Statement + HiLink cmakeComment Comment + HiLink cmakeString String + HiLink cmakeVariableValue Type + HiLink cmakeRegistry Underlined + HiLink cmakeArguments Identifier + HiLink cmakeArgument Constant + HiLink cmakeEnvironment Special + HiLink cmakeOperators Operator + HiLink cmakeMacro PreProc + HiLink cmakeError Error + HiLink cmakeTodo TODO + HiLink cmakeEscaped Special + + delcommand HiLink +endif + +let b:current_syntax = "cmake" + +"EOF" diff --git a/Example/CMakeLists.txt b/Example/CMakeLists.txt new file mode 100644 index 0000000..8ee7d72 --- /dev/null +++ b/Example/CMakeLists.txt @@ -0,0 +1,10 @@ +# The name of our project is "HELLO". CMakeLists files in this project can +# refer to the root source directory of the project as ${HELLO_SOURCE_DIR} and +# to the root binary directory of the project as ${HELLO_BINARY_DIR}. +project (HELLO) + +# Recurse into the "Hello" and "Demo" subdirectories. This does not actually +# cause another cmake executable to run. The same process will walk through +# the project's entire directory structure. +add_subdirectory (Hello) +add_subdirectory (Demo) diff --git a/Example/Demo/CMakeLists.txt b/Example/Demo/CMakeLists.txt new file mode 100644 index 0000000..477700f --- /dev/null +++ b/Example/Demo/CMakeLists.txt @@ -0,0 +1,12 @@ +# Make sure the compiler can find include files from our Hello library. +include_directories (${HELLO_SOURCE_DIR}/Hello) + +# Make sure the linker can find the Hello library once it is built. +link_directories (${HELLO_BINARY_DIR}/Hello) + +# Add executable called "helloDemo" that is built from the source files +# "demo.cxx" and "demo_b.cxx". The extensions are automatically found. +add_executable (helloDemo demo.cxx demo_b.cxx) + +# Link the executable to the Hello library. +target_link_libraries (helloDemo Hello) diff --git a/Example/Demo/demo.cxx b/Example/Demo/demo.cxx new file mode 100644 index 0000000..31de038 --- /dev/null +++ b/Example/Demo/demo.cxx @@ -0,0 +1,10 @@ +#include "hello.h" + +extern Hello hello; + +int main() +{ + hello.Print(); + + return 0; +} diff --git a/Example/Demo/demo_b.cxx b/Example/Demo/demo_b.cxx new file mode 100644 index 0000000..08a2329 --- /dev/null +++ b/Example/Demo/demo_b.cxx @@ -0,0 +1,3 @@ +#include "hello.h" + +Hello hello; diff --git a/Example/Hello/CMakeLists.txt b/Example/Hello/CMakeLists.txt new file mode 100644 index 0000000..879f4e5 --- /dev/null +++ b/Example/Hello/CMakeLists.txt @@ -0,0 +1,3 @@ +# Create a library called "Hello" which includes the source file "hello.cxx". +# The extension is already found. Any number of sources could be listed here. +add_library (Hello hello.cxx) diff --git a/Example/Hello/hello.cxx b/Example/Hello/hello.cxx new file mode 100644 index 0000000..7107cc5 --- /dev/null +++ b/Example/Hello/hello.cxx @@ -0,0 +1,7 @@ +#include "hello.h" +#include + +void Hello::Print() +{ + printf("Hello, World!\n"); +} diff --git a/Example/Hello/hello.h b/Example/Hello/hello.h new file mode 100644 index 0000000..b17d683 --- /dev/null +++ b/Example/Hello/hello.h @@ -0,0 +1,11 @@ +#ifndef _hello_h +#define _hello_h + + +class Hello +{ +public: + void Print(); +}; + +#endif diff --git a/Modules/AddFileDependencies.cmake b/Modules/AddFileDependencies.cmake new file mode 100644 index 0000000..f971e37 --- /dev/null +++ b/Modules/AddFileDependencies.cmake @@ -0,0 +1,29 @@ +# - ADD_FILE_DEPENDENCIES(source_file depend_files...) +# Adds the given files as dependencies to source_file +# + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +MACRO(ADD_FILE_DEPENDENCIES _file) + + GET_SOURCE_FILE_PROPERTY(_deps ${_file} OBJECT_DEPENDS) + IF (_deps) + SET(_deps ${_deps} ${ARGN}) + ELSE (_deps) + SET(_deps ${ARGN}) + ENDIF (_deps) + + SET_SOURCE_FILES_PROPERTIES(${_file} PROPERTIES OBJECT_DEPENDS "${_deps}") + +ENDMACRO(ADD_FILE_DEPENDENCIES) diff --git a/Modules/AutomocInfo.cmake.in b/Modules/AutomocInfo.cmake.in new file mode 100644 index 0000000..13f2161 --- /dev/null +++ b/Modules/AutomocInfo.cmake.in @@ -0,0 +1,16 @@ +set(AM_SOURCES @_moc_files@ ) +set(AM_HEADERS @_moc_headers@ ) +set(AM_MOC_COMPILE_DEFINITIONS @_moc_compile_defs@) +set(AM_MOC_DEFINITIONS @_moc_defs@) +set(AM_MOC_INCLUDES @_moc_incs@) +set(AM_MOC_OPTIONS @_moc_options@) +set(AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE "@CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE@") +set(AM_CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@/") +set(AM_CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@/") +set(AM_QT_MOC_EXECUTABLE "@QT_MOC_EXECUTABLE@") +set(AM_CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@/") +set(AM_CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@/") +set(AM_QT_VERSION_MAJOR "@QT_VERSION_MAJOR@" ) +set(AM_Qt5Core_VERSION_MAJOR "@Qt5Core_VERSION_MAJOR@" ) +set(AM_TARGET_NAME @_moc_target_name@) +set(AM_RELAXED_MODE "@_moc_relaxed_mode@") diff --git a/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in b/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in new file mode 100644 index 0000000..cf53db8 --- /dev/null +++ b/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in @@ -0,0 +1,26 @@ +# This is a basic version file for the Config-mode of find_package(). +# It is used by WriteBasicConfigVersionFile.cmake as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version. +# The variable CVF_VERSION must be set before calling configure_file(). + +set(PACKAGE_VERSION "@CVF_VERSION@") + +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@") + math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/Modules/BasicConfigVersion-ExactVersion.cmake.in b/Modules/BasicConfigVersion-ExactVersion.cmake.in new file mode 100644 index 0000000..c610baa --- /dev/null +++ b/Modules/BasicConfigVersion-ExactVersion.cmake.in @@ -0,0 +1,42 @@ +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is equal to the requested version. +# The tweak version component is ignored. +# The variable CVF_VERSION must be set before calling configure_file(). + + +set(PACKAGE_VERSION "@CVF_VERSION@") + +if("@CVF_VERSION@" MATCHES "^([0-9]+\\.[0-9]+\\.[0-9]+)\\..*") # strip the tweak version + set(CVF_VERSION_NO_TWEAK "${CMAKE_MATCH_1}") +else() + set(CVF_VERSION_NO_TWEAK "@CVF_VERSION@") +endif() + +if("${PACKAGE_FIND_VERSION}" MATCHES "^([0-9]+\\.[0-9]+\\.[0-9]+)\\..*") # strip the tweak version + set(REQUESTED_VERSION_NO_TWEAK "${CMAKE_MATCH_1}") +else() + set(REQUESTED_VERSION_NO_TWEAK "${PACKAGE_FIND_VERSION}") +endif() + +if("${REQUESTED_VERSION_NO_TWEAK}" STREQUAL "${CVF_VERSION_NO_TWEAK}") + set(PACKAGE_VERSION_COMPATIBLE TRUE) +else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) +endif() + +if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) +endif() + + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@") + math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/Modules/BasicConfigVersion-SameMajorVersion.cmake.in b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in new file mode 100644 index 0000000..2317fdb --- /dev/null +++ b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in @@ -0,0 +1,41 @@ +# This is a basic version file for the Config-mode of find_package(). +# It is used by WriteBasicConfigVersionFile.cmake as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, +# but only if the requested major version is the same as the current one. +# The variable CVF_VERSION must be set before calling configure_file(). + + +set(PACKAGE_VERSION "@CVF_VERSION@") + +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + + if("@CVF_VERSION@" MATCHES "^([0-9]+)\\.") + set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}") + else() + set(CVF_VERSION_MAJOR "@CVF_VERSION@") + endif() + + if("${PACKAGE_FIND_VERSION_MAJOR}" STREQUAL "${CVF_VERSION_MAJOR}") + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() + + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@") + math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/Modules/BundleUtilities.cmake b/Modules/BundleUtilities.cmake new file mode 100644 index 0000000..0143d59 --- /dev/null +++ b/Modules/BundleUtilities.cmake @@ -0,0 +1,786 @@ +# - Functions to help assemble a standalone bundle application. +# A collection of CMake utility functions useful for dealing with .app +# bundles on the Mac and bundle-like directories on any OS. +# +# The following functions are provided by this module: +# fixup_bundle +# copy_and_fixup_bundle +# verify_app +# get_bundle_main_executable +# get_dotapp_dir +# get_bundle_and_executable +# get_bundle_all_executables +# get_item_key +# clear_bundle_keys +# set_bundle_key_values +# get_bundle_keys +# copy_resolved_item_into_bundle +# copy_resolved_framework_into_bundle +# fixup_bundle_item +# verify_bundle_prerequisites +# verify_bundle_symlinks +# Requires CMake 2.6 or greater because it uses function, break and +# PARENT_SCOPE. Also depends on GetPrerequisites.cmake. +# +# FIXUP_BUNDLE( ) +# Fix up a bundle in-place and make it standalone, such that it can be +# drag-n-drop copied to another machine and run on that machine as long as all +# of the system libraries are compatible. +# +# If you pass plugins to fixup_bundle as the libs parameter, you should install +# them or copy them into the bundle before calling fixup_bundle. The "libs" +# parameter is a list of libraries that must be fixed up, but that cannot be +# determined by otool output analysis. (i.e., plugins) +# +# Gather all the keys for all the executables and libraries in a bundle, and +# then, for each key, copy each prerequisite into the bundle. Then fix each one +# up according to its own list of prerequisites. +# +# Then clear all the keys and call verify_app on the final bundle to ensure +# that it is truly standalone. +# +# COPY_AND_FIXUP_BUNDLE( ) +# Makes a copy of the bundle at location and then fixes up the +# new copied bundle in-place at ... +# +# VERIFY_APP() +# Verifies that an application appears valid based on running analysis +# tools on it. Calls "message(FATAL_ERROR" if the application is not verified. +# +# GET_BUNDLE_MAIN_EXECUTABLE( ) +# The result will be the full path name of the bundle's main executable file +# or an "error:" prefixed string if it could not be determined. +# +# GET_DOTAPP_DIR( ) +# Returns the nearest parent dir whose name ends with ".app" given the full +# path to an executable. If there is no such parent dir, then simply return +# the dir containing the executable. +# +# The returned directory may or may not exist. +# +# GET_BUNDLE_AND_EXECUTABLE( ) +# Takes either a ".app" directory name or the name of an executable +# nested inside a ".app" directory and returns the path to the ".app" +# directory in and the path to its main executable in +# +# +# GET_BUNDLE_ALL_EXECUTABLES( ) +# Scans the given bundle recursively for all executable files and accumulates +# them into a variable. +# +# GET_ITEM_KEY( ) +# Given a file (item) name, generate a key that should be unique considering +# the set of libraries that need copying or fixing up to make a bundle +# standalone. This is essentially the file name including extension with "." +# replaced by "_" +# +# This key is used as a prefix for CMake variables so that we can associate a +# set of variables with a given item based on its key. +# +# CLEAR_BUNDLE_KEYS() +# Loop over the list of keys, clearing all the variables associated with each +# key. After the loop, clear the list of keys itself. +# +# Caller of get_bundle_keys should call clear_bundle_keys when done with list +# of keys. +# +# SET_BUNDLE_KEY_VALUES( +# ) +# Add a key to the list (if necessary) for the given item. If added, +# also set all the variables associated with that key. +# +# GET_BUNDLE_KEYS( ) +# Loop over all the executable and library files within the bundle (and given +# as extra ) and accumulate a list of keys representing them. Set +# values associated with each key such that we can loop over all of them and +# copy prerequisite libs into the bundle and then do appropriate +# install_name_tool fixups. +# +# COPY_RESOLVED_ITEM_INTO_BUNDLE( ) +# Copy a resolved item into the bundle if necessary. Copy is not necessary if +# the resolved_item is "the same as" the resolved_embedded_item. +# +# COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE( ) +# Copy a resolved framework into the bundle if necessary. Copy is not necessary +# if the resolved_item is "the same as" the resolved_embedded_item. +# +# By default, BU_COPY_FULL_FRAMEWORK_CONTENTS is not set. If you want full +# frameworks embedded in your bundles, set BU_COPY_FULL_FRAMEWORK_CONTENTS to +# ON before calling fixup_bundle. By default, +# COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE copies the framework dylib itself plus +# the framework Resources directory. +# +# FIXUP_BUNDLE_ITEM( ) +# Get the direct/non-system prerequisites of the resolved embedded item. For +# each prerequisite, change the way it is referenced to the value of the +# _EMBEDDED_ITEM keyed variable for that prerequisite. (Most likely changing to +# an "@executable_path" style reference.) +# +# This function requires that the resolved_embedded_item be "inside" the bundle +# already. In other words, if you pass plugins to fixup_bundle as the libs +# parameter, you should install them or copy them into the bundle before +# calling fixup_bundle. The "libs" parameter is a list of libraries that must +# be fixed up, but that cannot be determined by otool output analysis. (i.e., +# plugins) +# +# Also, change the id of the item being fixed up to its own _EMBEDDED_ITEM +# value. +# +# Accumulate changes in a local variable and make *one* call to +# install_name_tool at the end of the function with all the changes at once. +# +# If the BU_CHMOD_BUNDLE_ITEMS variable is set then bundle items will be +# marked writable before install_name_tool tries to change them. +# +# VERIFY_BUNDLE_PREREQUISITES( ) +# Verifies that the sum of all prerequisites of all files inside the bundle +# are contained within the bundle or are "system" libraries, presumed to exist +# everywhere. +# +# VERIFY_BUNDLE_SYMLINKS( ) +# Verifies that any symlinks found in the bundle point to other files that are +# already also in the bundle... Anything that points to an external file causes +# this function to fail the verification. + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# The functions defined in this file depend on the get_prerequisites function +# (and possibly others) found in: +# +get_filename_component(BundleUtilities_cmake_dir "${CMAKE_CURRENT_LIST_FILE}" PATH) +include("${BundleUtilities_cmake_dir}/GetPrerequisites.cmake") + + +function(get_bundle_main_executable bundle result_var) + set(result "error: '${bundle}/Contents/Info.plist' file does not exist") + + if(EXISTS "${bundle}/Contents/Info.plist") + set(result "error: no CFBundleExecutable in '${bundle}/Contents/Info.plist' file") + set(line_is_main_executable 0) + set(bundle_executable "") + + # Read Info.plist as a list of lines: + # + set(eol_char "E") + file(READ "${bundle}/Contents/Info.plist" info_plist) + string(REGEX REPLACE ";" "\\\\;" info_plist "${info_plist}") + string(REGEX REPLACE "\n" "${eol_char};" info_plist "${info_plist}") + + # Scan the lines for "CFBundleExecutable" - the line after that + # is the name of the main executable. + # + foreach(line ${info_plist}) + if(line_is_main_executable) + string(REGEX REPLACE "^.*(.*).*$" "\\1" bundle_executable "${line}") + break() + endif(line_is_main_executable) + + if(line MATCHES "^.*CFBundleExecutable.*$") + set(line_is_main_executable 1) + endif(line MATCHES "^.*CFBundleExecutable.*$") + endforeach(line) + + if(NOT "${bundle_executable}" STREQUAL "") + if(EXISTS "${bundle}/Contents/MacOS/${bundle_executable}") + set(result "${bundle}/Contents/MacOS/${bundle_executable}") + else(EXISTS "${bundle}/Contents/MacOS/${bundle_executable}") + + # Ultimate goal: + # If not in "Contents/MacOS" then scan the bundle for matching files. If + # there is only one executable file that matches, then use it, otherwise + # it's an error... + # + #file(GLOB_RECURSE file_list "${bundle}/${bundle_executable}") + + # But for now, pragmatically, it's an error. Expect the main executable + # for the bundle to be in Contents/MacOS, it's an error if it's not: + # + set(result "error: '${bundle}/Contents/MacOS/${bundle_executable}' does not exist") + endif(EXISTS "${bundle}/Contents/MacOS/${bundle_executable}") + endif(NOT "${bundle_executable}" STREQUAL "") + else(EXISTS "${bundle}/Contents/Info.plist") + # + # More inclusive technique... (This one would work on Windows and Linux + # too, if a developer followed the typical Mac bundle naming convention...) + # + # If there is no Info.plist file, try to find an executable with the same + # base name as the .app directory: + # + endif(EXISTS "${bundle}/Contents/Info.plist") + + set(${result_var} "${result}" PARENT_SCOPE) +endfunction(get_bundle_main_executable) + + +function(get_dotapp_dir exe dotapp_dir_var) + set(s "${exe}") + + if(s MATCHES "^.*/.*\\.app/.*$") + # If there is a ".app" parent directory, + # ascend until we hit it: + # (typical of a Mac bundle executable) + # + set(done 0) + while(NOT ${done}) + get_filename_component(snamewe "${s}" NAME_WE) + get_filename_component(sname "${s}" NAME) + get_filename_component(sdir "${s}" PATH) + set(s "${sdir}") + if(sname MATCHES "\\.app$") + set(done 1) + set(dotapp_dir "${sdir}/${sname}") + endif(sname MATCHES "\\.app$") + endwhile(NOT ${done}) + else(s MATCHES "^.*/.*\\.app/.*$") + # Otherwise use a directory containing the exe + # (typical of a non-bundle executable on Mac, Windows or Linux) + # + is_file_executable("${s}" is_executable) + if(is_executable) + get_filename_component(sdir "${s}" PATH) + set(dotapp_dir "${sdir}") + else(is_executable) + set(dotapp_dir "${s}") + endif(is_executable) + endif(s MATCHES "^.*/.*\\.app/.*$") + + + set(${dotapp_dir_var} "${dotapp_dir}" PARENT_SCOPE) +endfunction(get_dotapp_dir) + + +function(get_bundle_and_executable app bundle_var executable_var valid_var) + set(valid 0) + + if(EXISTS "${app}") + # Is it a directory ending in .app? + if(IS_DIRECTORY "${app}") + if(app MATCHES "\\.app$") + get_bundle_main_executable("${app}" executable) + if(EXISTS "${app}" AND EXISTS "${executable}") + set(${bundle_var} "${app}" PARENT_SCOPE) + set(${executable_var} "${executable}" PARENT_SCOPE) + set(valid 1) + #message(STATUS "info: handled .app directory case...") + else(EXISTS "${app}" AND EXISTS "${executable}") + message(STATUS "warning: *NOT* handled - .app directory case...") + endif(EXISTS "${app}" AND EXISTS "${executable}") + else(app MATCHES "\\.app$") + message(STATUS "warning: *NOT* handled - directory but not .app case...") + endif(app MATCHES "\\.app$") + else(IS_DIRECTORY "${app}") + # Is it an executable file? + is_file_executable("${app}" is_executable) + if(is_executable) + get_dotapp_dir("${app}" dotapp_dir) + if(EXISTS "${dotapp_dir}") + set(${bundle_var} "${dotapp_dir}" PARENT_SCOPE) + set(${executable_var} "${app}" PARENT_SCOPE) + set(valid 1) + #message(STATUS "info: handled executable file in .app dir case...") + else() + get_filename_component(app_dir "${app}" PATH) + set(${bundle_var} "${app_dir}" PARENT_SCOPE) + set(${executable_var} "${app}" PARENT_SCOPE) + set(valid 1) + #message(STATUS "info: handled executable file in any dir case...") + endif() + else(is_executable) + message(STATUS "warning: *NOT* handled - not .app dir, not executable file...") + endif(is_executable) + endif(IS_DIRECTORY "${app}") + else(EXISTS "${app}") + message(STATUS "warning: *NOT* handled - directory/file does not exist...") + endif(EXISTS "${app}") + + if(NOT valid) + set(${bundle_var} "error: not a bundle" PARENT_SCOPE) + set(${executable_var} "error: not a bundle" PARENT_SCOPE) + endif(NOT valid) + + set(${valid_var} ${valid} PARENT_SCOPE) +endfunction(get_bundle_and_executable) + + +function(get_bundle_all_executables bundle exes_var) + set(exes "") + + file(GLOB_RECURSE file_list "${bundle}/*") + foreach(f ${file_list}) + is_file_executable("${f}" is_executable) + if(is_executable) + set(exes ${exes} "${f}") + endif(is_executable) + endforeach(f) + + set(${exes_var} "${exes}" PARENT_SCOPE) +endfunction(get_bundle_all_executables) + + +function(get_item_key item key_var) + get_filename_component(item_name "${item}" NAME) + if(WIN32) + string(TOLOWER "${item_name}" item_name) + endif() + string(REGEX REPLACE "\\." "_" ${key_var} "${item_name}") + set(${key_var} ${${key_var}} PARENT_SCOPE) +endfunction(get_item_key) + + +function(clear_bundle_keys keys_var) + foreach(key ${${keys_var}}) + set(${key}_ITEM PARENT_SCOPE) + set(${key}_RESOLVED_ITEM PARENT_SCOPE) + set(${key}_DEFAULT_EMBEDDED_PATH PARENT_SCOPE) + set(${key}_EMBEDDED_ITEM PARENT_SCOPE) + set(${key}_RESOLVED_EMBEDDED_ITEM PARENT_SCOPE) + set(${key}_COPYFLAG PARENT_SCOPE) + endforeach(key) + set(${keys_var} PARENT_SCOPE) +endfunction(clear_bundle_keys) + + +function(set_bundle_key_values keys_var context item exepath dirs copyflag) + get_filename_component(item_name "${item}" NAME) + + get_item_key("${item}" key) + + list(LENGTH ${keys_var} length_before) + gp_append_unique(${keys_var} "${key}") + list(LENGTH ${keys_var} length_after) + + if(NOT length_before EQUAL length_after) + gp_resolve_item("${context}" "${item}" "${exepath}" "${dirs}" resolved_item) + + gp_item_default_embedded_path("${item}" default_embedded_path) + + if(item MATCHES "[^/]+\\.framework/") + # For frameworks, construct the name under the embedded path from the + # opening "${item_name}.framework/" to the closing "/${item_name}": + # + string(REGEX REPLACE "^.*(${item_name}.framework/.*/${item_name}).*$" "${default_embedded_path}/\\1" embedded_item "${item}") + else(item MATCHES "[^/]+\\.framework/") + # For other items, just use the same name as the original, but in the + # embedded path: + # + set(embedded_item "${default_embedded_path}/${item_name}") + endif(item MATCHES "[^/]+\\.framework/") + + # Replace @executable_path and resolve ".." references: + # + string(REPLACE "@executable_path" "${exepath}" resolved_embedded_item "${embedded_item}") + get_filename_component(resolved_embedded_item "${resolved_embedded_item}" ABSOLUTE) + + # *But* -- if we are not copying, then force resolved_embedded_item to be + # the same as resolved_item. In the case of multiple executables in the + # original bundle, using the default_embedded_path results in looking for + # the resolved executable next to the main bundle executable. This is here + # so that exes in the other sibling directories (like "bin") get fixed up + # properly... + # + if(NOT copyflag) + set(resolved_embedded_item "${resolved_item}") + endif(NOT copyflag) + + set(${keys_var} ${${keys_var}} PARENT_SCOPE) + set(${key}_ITEM "${item}" PARENT_SCOPE) + set(${key}_RESOLVED_ITEM "${resolved_item}" PARENT_SCOPE) + set(${key}_DEFAULT_EMBEDDED_PATH "${default_embedded_path}" PARENT_SCOPE) + set(${key}_EMBEDDED_ITEM "${embedded_item}" PARENT_SCOPE) + set(${key}_RESOLVED_EMBEDDED_ITEM "${resolved_embedded_item}" PARENT_SCOPE) + set(${key}_COPYFLAG "${copyflag}" PARENT_SCOPE) + else(NOT length_before EQUAL length_after) + #message("warning: item key '${key}' already in the list, subsequent references assumed identical to first") + endif(NOT length_before EQUAL length_after) +endfunction(set_bundle_key_values) + + +function(get_bundle_keys app libs dirs keys_var) + set(${keys_var} PARENT_SCOPE) + + get_bundle_and_executable("${app}" bundle executable valid) + if(valid) + # Always use the exepath of the main bundle executable for @executable_path + # replacements: + # + get_filename_component(exepath "${executable}" PATH) + + # But do fixups on all executables in the bundle: + # + get_bundle_all_executables("${bundle}" exes) + + # For each extra lib, accumulate a key as well and then also accumulate + # any of its prerequisites. (Extra libs are typically dynamically loaded + # plugins: libraries that are prerequisites for full runtime functionality + # but that do not show up in otool -L output...) + # + foreach(lib ${libs}) + set_bundle_key_values(${keys_var} "${lib}" "${lib}" "${exepath}" "${dirs}" 0) + + set(prereqs "") + get_prerequisites("${lib}" prereqs 1 1 "${exepath}" "${dirs}") + foreach(pr ${prereqs}) + set_bundle_key_values(${keys_var} "${lib}" "${pr}" "${exepath}" "${dirs}" 1) + endforeach(pr) + endforeach(lib) + + # For each executable found in the bundle, accumulate keys as we go. + # The list of keys should be complete when all prerequisites of all + # binaries in the bundle have been analyzed. + # + foreach(exe ${exes}) + # Add the exe itself to the keys: + # + set_bundle_key_values(${keys_var} "${exe}" "${exe}" "${exepath}" "${dirs}" 0) + + # Add each prerequisite to the keys: + # + set(prereqs "") + get_prerequisites("${exe}" prereqs 1 1 "${exepath}" "${dirs}") + foreach(pr ${prereqs}) + set_bundle_key_values(${keys_var} "${exe}" "${pr}" "${exepath}" "${dirs}" 1) + endforeach(pr) + endforeach(exe) + + # Propagate values to caller's scope: + # + set(${keys_var} ${${keys_var}} PARENT_SCOPE) + foreach(key ${${keys_var}}) + set(${key}_ITEM "${${key}_ITEM}" PARENT_SCOPE) + set(${key}_RESOLVED_ITEM "${${key}_RESOLVED_ITEM}" PARENT_SCOPE) + set(${key}_DEFAULT_EMBEDDED_PATH "${${key}_DEFAULT_EMBEDDED_PATH}" PARENT_SCOPE) + set(${key}_EMBEDDED_ITEM "${${key}_EMBEDDED_ITEM}" PARENT_SCOPE) + set(${key}_RESOLVED_EMBEDDED_ITEM "${${key}_RESOLVED_EMBEDDED_ITEM}" PARENT_SCOPE) + set(${key}_COPYFLAG "${${key}_COPYFLAG}" PARENT_SCOPE) + endforeach(key) + endif(valid) +endfunction(get_bundle_keys) + + +function(copy_resolved_item_into_bundle resolved_item resolved_embedded_item) + if(WIN32) + # ignore case on Windows + string(TOLOWER "${resolved_item}" resolved_item_compare) + string(TOLOWER "${resolved_embedded_item}" resolved_embedded_item_compare) + else() + set(resolved_item_compare "${resolved_item}") + set(resolved_embedded_item_compare "${resolved_embedded_item}") + endif() + + if("${resolved_item_compare}" STREQUAL "${resolved_embedded_item_compare}") + message(STATUS "warning: resolved_item == resolved_embedded_item - not copying...") + else() + #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy ${resolved_item} ${resolved_embedded_item}") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_item}" "${resolved_embedded_item}") + if(UNIX AND NOT APPLE) + file(RPATH_REMOVE FILE "${resolved_embedded_item}") + endif(UNIX AND NOT APPLE) + endif() + +endfunction(copy_resolved_item_into_bundle) + + +function(copy_resolved_framework_into_bundle resolved_item resolved_embedded_item) + if(WIN32) + # ignore case on Windows + string(TOLOWER "${resolved_item}" resolved_item_compare) + string(TOLOWER "${resolved_embedded_item}" resolved_embedded_item_compare) + else() + set(resolved_item_compare "${resolved_item}") + set(resolved_embedded_item_compare "${resolved_embedded_item}") + endif() + + if("${resolved_item_compare}" STREQUAL "${resolved_embedded_item_compare}") + message(STATUS "warning: resolved_item == resolved_embedded_item - not copying...") + else() + if(BU_COPY_FULL_FRAMEWORK_CONTENTS) + # Full Framework (everything): + get_filename_component(resolved_dir "${resolved_item}" PATH) + get_filename_component(resolved_dir "${resolved_dir}/../.." ABSOLUTE) + get_filename_component(resolved_embedded_dir "${resolved_embedded_item}" PATH) + get_filename_component(resolved_embedded_dir "${resolved_embedded_dir}/../.." ABSOLUTE) + #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy_directory '${resolved_dir}' '${resolved_embedded_dir}'") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${resolved_dir}" "${resolved_embedded_dir}") + else() + # Framework lib itself: + #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy ${resolved_item} ${resolved_embedded_item}") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_item}" "${resolved_embedded_item}") + + # Plus Resources, if they exist: + string(REGEX REPLACE "^(.*)/[^/]+/[^/]+/[^/]+$" "\\1/Resources" resolved_resources "${resolved_item}") + string(REGEX REPLACE "^(.*)/[^/]+/[^/]+/[^/]+$" "\\1/Resources" resolved_embedded_resources "${resolved_embedded_item}") + if(EXISTS "${resolved_resources}") + #message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy_directory '${resolved_resources}' '${resolved_embedded_resources}'") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${resolved_resources}" "${resolved_embedded_resources}") + endif() + endif() + if(UNIX AND NOT APPLE) + file(RPATH_REMOVE FILE "${resolved_embedded_item}") + endif(UNIX AND NOT APPLE) + endif() + +endfunction(copy_resolved_framework_into_bundle) + + +function(fixup_bundle_item resolved_embedded_item exepath dirs) + # This item's key is "ikey": + # + get_item_key("${resolved_embedded_item}" ikey) + + # Ensure the item is "inside the .app bundle" -- it should not be fixed up if + # it is not in the .app bundle... Otherwise, we'll modify files in the build + # tree, or in other varied locations around the file system, with our call to + # install_name_tool. Make sure that doesn't happen here: + # + get_dotapp_dir("${exepath}" exe_dotapp_dir) + string(LENGTH "${exe_dotapp_dir}/" exe_dotapp_dir_length) + string(LENGTH "${resolved_embedded_item}" resolved_embedded_item_length) + set(path_too_short 0) + set(is_embedded 0) + if(${resolved_embedded_item_length} LESS ${exe_dotapp_dir_length}) + set(path_too_short 1) + endif() + if(NOT path_too_short) + string(SUBSTRING "${resolved_embedded_item}" 0 ${exe_dotapp_dir_length} item_substring) + if("${exe_dotapp_dir}/" STREQUAL "${item_substring}") + set(is_embedded 1) + endif() + endif() + if(NOT is_embedded) + message(" exe_dotapp_dir/='${exe_dotapp_dir}/'") + message(" item_substring='${item_substring}'") + message(" resolved_embedded_item='${resolved_embedded_item}'") + message("") + message("Install or copy the item into the bundle before calling fixup_bundle.") + message("Or maybe there's a typo or incorrect path in one of the args to fixup_bundle?") + message("") + message(FATAL_ERROR "cannot fixup an item that is not in the bundle...") + endif() + + set(prereqs "") + get_prerequisites("${resolved_embedded_item}" prereqs 1 0 "${exepath}" "${dirs}") + + set(changes "") + + foreach(pr ${prereqs}) + # Each referenced item's key is "rkey" in the loop: + # + get_item_key("${pr}" rkey) + + if(NOT "${${rkey}_EMBEDDED_ITEM}" STREQUAL "") + set(changes ${changes} "-change" "${pr}" "${${rkey}_EMBEDDED_ITEM}") + else(NOT "${${rkey}_EMBEDDED_ITEM}" STREQUAL "") + message("warning: unexpected reference to '${pr}'") + endif(NOT "${${rkey}_EMBEDDED_ITEM}" STREQUAL "") + endforeach(pr) + + if(BU_CHMOD_BUNDLE_ITEMS) + execute_process(COMMAND chmod u+w "${resolved_embedded_item}") + endif() + + # Change this item's id and all of its references in one call + # to install_name_tool: + # + execute_process(COMMAND install_name_tool + ${changes} -id "${${ikey}_EMBEDDED_ITEM}" "${resolved_embedded_item}" + ) +endfunction(fixup_bundle_item) + + +function(fixup_bundle app libs dirs) + message(STATUS "fixup_bundle") + message(STATUS " app='${app}'") + message(STATUS " libs='${libs}'") + message(STATUS " dirs='${dirs}'") + + get_bundle_and_executable("${app}" bundle executable valid) + if(valid) + get_filename_component(exepath "${executable}" PATH) + + message(STATUS "fixup_bundle: preparing...") + get_bundle_keys("${app}" "${libs}" "${dirs}" keys) + + message(STATUS "fixup_bundle: copying...") + list(LENGTH keys n) + math(EXPR n ${n}*2) + + set(i 0) + foreach(key ${keys}) + math(EXPR i ${i}+1) + if(${${key}_COPYFLAG}) + message(STATUS "${i}/${n}: copying '${${key}_RESOLVED_ITEM}'") + else(${${key}_COPYFLAG}) + message(STATUS "${i}/${n}: *NOT* copying '${${key}_RESOLVED_ITEM}'") + endif(${${key}_COPYFLAG}) + + set(show_status 0) + if(show_status) + message(STATUS "key='${key}'") + message(STATUS "item='${${key}_ITEM}'") + message(STATUS "resolved_item='${${key}_RESOLVED_ITEM}'") + message(STATUS "default_embedded_path='${${key}_DEFAULT_EMBEDDED_PATH}'") + message(STATUS "embedded_item='${${key}_EMBEDDED_ITEM}'") + message(STATUS "resolved_embedded_item='${${key}_RESOLVED_EMBEDDED_ITEM}'") + message(STATUS "copyflag='${${key}_COPYFLAG}'") + message(STATUS "") + endif(show_status) + + if(${${key}_COPYFLAG}) + set(item "${${key}_ITEM}") + if(item MATCHES "[^/]+\\.framework/") + copy_resolved_framework_into_bundle("${${key}_RESOLVED_ITEM}" + "${${key}_RESOLVED_EMBEDDED_ITEM}") + else() + copy_resolved_item_into_bundle("${${key}_RESOLVED_ITEM}" + "${${key}_RESOLVED_EMBEDDED_ITEM}") + endif() + endif(${${key}_COPYFLAG}) + endforeach(key) + + message(STATUS "fixup_bundle: fixing...") + foreach(key ${keys}) + math(EXPR i ${i}+1) + if(APPLE) + message(STATUS "${i}/${n}: fixing up '${${key}_RESOLVED_EMBEDDED_ITEM}'") + fixup_bundle_item("${${key}_RESOLVED_EMBEDDED_ITEM}" "${exepath}" "${dirs}") + else(APPLE) + message(STATUS "${i}/${n}: fix-up not required on this platform '${${key}_RESOLVED_EMBEDDED_ITEM}'") + endif(APPLE) + endforeach(key) + + message(STATUS "fixup_bundle: cleaning up...") + clear_bundle_keys(keys) + + message(STATUS "fixup_bundle: verifying...") + verify_app("${app}") + else(valid) + message(SEND_ERROR "error: fixup_bundle: not a valid bundle") + endif(valid) + + message(STATUS "fixup_bundle: done") +endfunction(fixup_bundle) + + +function(copy_and_fixup_bundle src dst libs dirs) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${src}" "${dst}") + fixup_bundle("${dst}" "${libs}" "${dirs}") +endfunction(copy_and_fixup_bundle) + + +function(verify_bundle_prerequisites bundle result_var info_var) + set(result 1) + set(info "") + set(count 0) + + get_bundle_main_executable("${bundle}" main_bundle_exe) + + file(GLOB_RECURSE file_list "${bundle}/*") + foreach(f ${file_list}) + is_file_executable("${f}" is_executable) + if(is_executable) + get_filename_component(exepath "${f}" PATH) + math(EXPR count "${count} + 1") + + message(STATUS "executable file ${count}: ${f}") + + set(prereqs "") + get_prerequisites("${f}" prereqs 1 1 "${exepath}" "") + + # On the Mac, + # "embedded" and "system" prerequisites are fine... anything else means + # the bundle's prerequisites are not verified (i.e., the bundle is not + # really "standalone") + # + # On Windows (and others? Linux/Unix/...?) + # "local" and "system" prereqs are fine... + # + set(external_prereqs "") + + foreach(p ${prereqs}) + set(p_type "") + gp_file_type("${f}" "${p}" p_type) + + if(APPLE) + if(NOT "${p_type}" STREQUAL "embedded" AND NOT "${p_type}" STREQUAL "system") + set(external_prereqs ${external_prereqs} "${p}") + endif() + else() + if(NOT "${p_type}" STREQUAL "local" AND NOT "${p_type}" STREQUAL "system") + set(external_prereqs ${external_prereqs} "${p}") + endif() + endif() + endforeach(p) + + if(external_prereqs) + # Found non-system/somehow-unacceptable prerequisites: + set(result 0) + set(info ${info} "external prerequisites found:\nf='${f}'\nexternal_prereqs='${external_prereqs}'\n") + endif(external_prereqs) + endif(is_executable) + endforeach(f) + + if(result) + set(info "Verified ${count} executable files in '${bundle}'") + endif(result) + + set(${result_var} "${result}" PARENT_SCOPE) + set(${info_var} "${info}" PARENT_SCOPE) +endfunction(verify_bundle_prerequisites) + + +function(verify_bundle_symlinks bundle result_var info_var) + set(result 1) + set(info "") + set(count 0) + + # TODO: implement this function for real... + # Right now, it is just a stub that verifies unconditionally... + + set(${result_var} "${result}" PARENT_SCOPE) + set(${info_var} "${info}" PARENT_SCOPE) +endfunction(verify_bundle_symlinks) + + +function(verify_app app) + set(verified 0) + set(info "") + + get_bundle_and_executable("${app}" bundle executable valid) + + message(STATUS "===========================================================================") + message(STATUS "Analyzing app='${app}'") + message(STATUS "bundle='${bundle}'") + message(STATUS "executable='${executable}'") + message(STATUS "valid='${valid}'") + + # Verify that the bundle does not have any "external" prerequisites: + # + verify_bundle_prerequisites("${bundle}" verified info) + message(STATUS "verified='${verified}'") + message(STATUS "info='${info}'") + message(STATUS "") + + if(verified) + # Verify that the bundle does not have any symlinks to external files: + # + verify_bundle_symlinks("${bundle}" verified info) + message(STATUS "verified='${verified}'") + message(STATUS "info='${info}'") + message(STATUS "") + endif(verified) + + if(NOT verified) + message(FATAL_ERROR "error: verify_app failed") + endif(NOT verified) +endfunction(verify_app) diff --git a/Modules/CMake.cmake b/Modules/CMake.cmake new file mode 100644 index 0000000..53a0ddf --- /dev/null +++ b/Modules/CMake.cmake @@ -0,0 +1,17 @@ + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is used by cmake.cxx to compute the CMAKE_ROOT location. +# Do not remove this file from cvs without updating cmake.cxx to look +# for a different file. diff --git a/Modules/CMakeASM-ATTInformation.cmake b/Modules/CMakeASM-ATTInformation.cmake new file mode 100644 index 0000000..cb1f5d6 --- /dev/null +++ b/Modules/CMakeASM-ATTInformation.cmake @@ -0,0 +1,25 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# support for AT&T syntax assemblers, e.g. GNU as + +SET(ASM_DIALECT "-ATT") +# *.S files are supposed to be preprocessed, so they should not be passed to +# assembler but should be processed by gcc +SET(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS s;asm) + +SET(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT " -o ") + +INCLUDE(CMakeASMInformation) +SET(ASM_DIALECT) diff --git a/Modules/CMakeASMCompiler.cmake.in b/Modules/CMakeASMCompiler.cmake.in new file mode 100644 index 0000000..2dc24b0 --- /dev/null +++ b/Modules/CMakeASMCompiler.cmake.in @@ -0,0 +1,12 @@ +SET(CMAKE_ASM@ASM_DIALECT@_COMPILER "@_CMAKE_ASM_COMPILER@") +SET(CMAKE_ASM@ASM_DIALECT@_COMPILER_ARG1 "@_CMAKE_ASM_COMPILER_ARG1@") +SET(CMAKE_AR "@CMAKE_AR@") +SET(CMAKE_RANLIB "@CMAKE_RANLIB@") +SET(CMAKE_LINKER "@CMAKE_LINKER@") +SET(CMAKE_ASM@ASM_DIALECT@_COMPILER_LOADED 1) +SET(CMAKE_ASM@ASM_DIALECT@_COMPILER_ID "@_CMAKE_ASM_COMPILER_ID@") +SET(CMAKE_ASM@ASM_DIALECT@_COMPILER_ENV_VAR "@_CMAKE_ASM_COMPILER_ENV_VAR@") + +SET(CMAKE_ASM@ASM_DIALECT@_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +SET(CMAKE_ASM@ASM_DIALECT@_LINKER_PREFERENCE 0) + diff --git a/Modules/CMakeASMInformation.cmake b/Modules/CMakeASMInformation.cmake new file mode 100644 index 0000000..b5f2420 --- /dev/null +++ b/Modules/CMakeASMInformation.cmake @@ -0,0 +1,130 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(UNIX) + SET(CMAKE_ASM${ASM_DIALECT}_OUTPUT_EXTENSION .o) +ELSE(UNIX) + SET(CMAKE_ASM${ASM_DIALECT}_OUTPUT_EXTENSION .obj) +ENDIF(UNIX) + +SET(CMAKE_INCLUDE_FLAG_ASM${ASM_DIALECT} "-I") # -I +SET(CMAKE_BASE_NAME) +GET_FILENAME_COMPONENT(CMAKE_BASE_NAME "${CMAKE_ASM${ASM_DIALECT}_COMPILER}" NAME_WE) + +IF("${CMAKE_BASE_NAME}" STREQUAL "as") + SET(CMAKE_BASE_NAME gas) +ENDIF("${CMAKE_BASE_NAME}" STREQUAL "as") + +# Load compiler-specific information. +SET(_INCLUDED_FILE "") +IF(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) + INCLUDE(Compiler/${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) +ENDIF(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) +IF(NOT _INCLUDED_FILE) + IF("ASM${ASM_DIALECT}" STREQUAL "ASM") + MESSAGE(STATUS "Warning: Did not find file Compiler/${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT}") + ENDIF("ASM${ASM_DIALECT}" STREQUAL "ASM") + INCLUDE(Platform/${CMAKE_BASE_NAME} OPTIONAL) +ENDIF(NOT _INCLUDED_FILE) + +IF(CMAKE_SYSTEM_PROCESSOR) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) + IF(NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL) + ENDIF(NOT _INCLUDED_FILE) +ENDIF(CMAKE_SYSTEM_PROCESSOR) + +INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}-ASM${ASM_DIALECT} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) +IF(NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL) +ENDIF(NOT _INCLUDED_FILE) + +# Set default assembler file extensions: +IF(NOT CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS) + SET(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS s;S;asm) +ENDIF(NOT CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS) + + +# Support for CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT and friends: +SET(CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT "$ENV{ASM${ASM_DIALECT}FLAGS} ${CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT}") +# avoid just having a space as the initial value for the cache +IF(CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT STREQUAL " ") + SET(CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT) +ENDIF(CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT STREQUAL " ") +SET (CMAKE_ASM${ASM_DIALECT}_FLAGS "${CMAKE_ASM${ASM_DIALECT}_FLAGS_INIT}" CACHE STRING + "Flags used by the assembler during all build types.") + +IF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) +# default build type is none + IF(NOT CMAKE_NO_BUILD_TYPE) + SET (CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_INIT} CACHE STRING + "Choose the type of build, options are: None, Debug Release RelWithDebInfo MinSizeRel.") + ENDIF(NOT CMAKE_NO_BUILD_TYPE) + SET (CMAKE_ASM${ASM_DIALECT}_FLAGS_DEBUG "${CMAKE_ASM${ASM_DIALECT}_FLAGS_DEBUG_INIT}" CACHE STRING + "Flags used by the assembler during debug builds.") + SET (CMAKE_ASM${ASM_DIALECT}_FLAGS_MINSIZEREL "${CMAKE_ASM${ASM_DIALECT}_FLAGS_MINSIZEREL_INIT}" CACHE STRING + "Flags used by the assembler during release minsize builds.") + SET (CMAKE_ASM${ASM_DIALECT}_FLAGS_RELEASE "${CMAKE_ASM${ASM_DIALECT}_FLAGS_RELEASE_INIT}" CACHE STRING + "Flags used by the assembler during release builds.") + SET (CMAKE_ASM${ASM_DIALECT}_FLAGS_RELWITHDEBINFO "${CMAKE_ASM${ASM_DIALECT}_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING + "Flags used by the assembler during Release with Debug Info builds.") +ENDIF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) + +MARK_AS_ADVANCED(CMAKE_ASM${ASM_DIALECT}_FLAGS + CMAKE_ASM${ASM_DIALECT}_FLAGS_DEBUG + CMAKE_ASM${ASM_DIALECT}_FLAGS_MINSIZEREL + CMAKE_ASM${ASM_DIALECT}_FLAGS_RELEASE + CMAKE_ASM${ASM_DIALECT}_FLAGS_RELWITHDEBINFO + ) + + +IF(NOT CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT " -o -c ") +ENDIF(NOT CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT) + +IF(NOT CMAKE_ASM${ASM_DIALECT}_CREATE_STATIC_LIBRARY) + SET(CMAKE_ASM${ASM_DIALECT}_CREATE_STATIC_LIBRARY + " cr " + " ") +ENDIF(NOT CMAKE_ASM${ASM_DIALECT}_CREATE_STATIC_LIBRARY) + +IF(NOT CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE) + SET(CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE + " -o ") +ENDIF(NOT CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE) + +IF(NOT CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG) + SET(CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_ASM${ASM_DIALECT}_FLAG}) +ENDIF() + +IF(NOT CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG_SEP) + SET(CMAKE_EXECUTABLE_RUNTIME_ASM${ASM_DIALECT}_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_ASM${ASM_DIALECT}_FLAG_SEP}) +ENDIF() + +IF(NOT CMAKE_EXECUTABLE_RPATH_LINK_ASM${ASM_DIALECT}_FLAG) + SET(CMAKE_EXECUTABLE_RPATH_LINK_ASM${ASM_DIALECT}_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_ASM${ASM_DIALECT}_FLAG}) +ENDIF() + +# to be done +IF(NOT CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_LIBRARY) + SET(CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_LIBRARY) +ENDIF(NOT CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_LIBRARY) + +IF(NOT CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_MODULE) + SET(CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_MODULE) +ENDIF(NOT CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_MODULE) + + +SET(CMAKE_ASM${ASM_DIALECT}_INFOMATION_LOADED 1) + diff --git a/Modules/CMakeASM_MASMInformation.cmake b/Modules/CMakeASM_MASMInformation.cmake new file mode 100644 index 0000000..4e1386f --- /dev/null +++ b/Modules/CMakeASM_MASMInformation.cmake @@ -0,0 +1,24 @@ + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# support for the MS assembler, masm and masm64 + +SET(ASM_DIALECT "_MASM") + +SET(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS asm) + +SET(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT " /c /Fo ") + +INCLUDE(CMakeASMInformation) +SET(ASM_DIALECT) diff --git a/Modules/CMakeASM_NASMInformation.cmake b/Modules/CMakeASM_NASMInformation.cmake new file mode 100644 index 0000000..9da7d30 --- /dev/null +++ b/Modules/CMakeASM_NASMInformation.cmake @@ -0,0 +1,46 @@ + +#============================================================================= +# Copyright 2010 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.) + +# support for the nasm assembler + +set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS nasm asm) + +if(NOT CMAKE_ASM_NASM_OBJECT_FORMAT) + if(WIN32) + if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8) + SET(CMAKE_ASM_NASM_OBJECT_FORMAT win64) + else() + SET(CMAKE_ASM_NASM_OBJECT_FORMAT win32) + endif() + elseif(APPLE) + if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8) + SET(CMAKE_ASM_NASM_OBJECT_FORMAT macho64) + else() + SET(CMAKE_ASM_NASM_OBJECT_FORMAT macho) + endif() + else() + if(CMAKE_C_SIZEOF_DATA_PTR EQUAL 8) + SET(CMAKE_ASM_NASM_OBJECT_FORMAT elf64) + else() + SET(CMAKE_ASM_NASM_OBJECT_FORMAT elf) + endif() + endif() +endif() + +set(CMAKE_ASM_NASM_COMPILE_OBJECT " -f ${CMAKE_ASM_NASM_OBJECT_FORMAT} -o ") + +# Load the generic ASMInformation file: +set(ASM_DIALECT "_NASM") +include(CMakeASMInformation) +set(ASM_DIALECT) diff --git a/Modules/CMakeAddFortranSubdirectory.cmake b/Modules/CMakeAddFortranSubdirectory.cmake new file mode 100644 index 0000000..abd9100 --- /dev/null +++ b/Modules/CMakeAddFortranSubdirectory.cmake @@ -0,0 +1,206 @@ +# - Use MinGW gfortran from VS if a fortran compiler is not found. +# The 'add_fortran_subdirectory' function adds a subdirectory +# to a project that contains a fortran only sub-project. The module +# will check the current compiler and see if it can support fortran. +# If no fortran compiler is found and the compiler is MSVC, then +# this module will find the MinGW gfortran. It will then use +# an external project to build with the MinGW tools. It will also +# create imported targets for the libraries created. This will only +# work if the fortran code is built into a dll, so BUILD_SHARED_LIBS +# is turned on in the project. In addition the CMAKE_GNUtoMS option +# is set to on, so that the MS .lib files are created. +# Usage is as follows: +# cmake_add_fortran_subdirectory( +# # name of subdirectory +# PROJECT # project name in subdir top CMakeLists.txt +# ARCHIVE_DIR # dir where project places .lib files +# RUNTIME_DIR # dir where project places .dll files +# LIBRARIES ... # names of library targets to import +# LINK_LIBRARIES # link interface libraries for LIBRARIES +# [LINK_LIBS ...]... +# CMAKE_COMMAND_LINE ... # extra command line flags to pass to cmake +# NO_EXTERNAL_INSTALL # skip installation of external project +# ) +# Relative paths in ARCHIVE_DIR and RUNTIME_DIR are interpreted with respect +# to the build directory corresponding to the source directory in which the +# function is invoked. +# +# Limitations: +# +# NO_EXTERNAL_INSTALL is required for forward compatibility with a +# future version that supports installation of the external project +# binaries during "make install". + +#============================================================================= +# Copyright 2011-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.) + + +set(_MS_MINGW_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) +include(CheckLanguage) +include(ExternalProject) +include(CMakeParseArguments) + +function(_setup_mingw_config_and_build source_dir build_dir) + # Look for a MinGW gfortran. + find_program(MINGW_GFORTRAN + NAMES gfortran + PATHS + c:/MinGW/bin + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW;InstallLocation]/bin" + ) + if(NOT MINGW_GFORTRAN) + message(FATAL_ERROR + "gfortran not found, please install MinGW with the gfortran option." + "Or set the cache variable MINGW_GFORTRAN to the full path. " + " This is required to build") + endif() + + # Validate the MinGW gfortran we found. + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_mingw_target "Target:.*64.*mingw") + else() + set(_mingw_target "Target:.*mingw32") + endif() + execute_process(COMMAND "${MINGW_GFORTRAN}" -v + ERROR_VARIABLE out ERROR_STRIP_TRAILING_WHITESPACE) + if(NOT "${out}" MATCHES "${_mingw_target}") + string(REPLACE "\n" "\n " out " ${out}") + message(FATAL_ERROR + "MINGW_GFORTRAN is set to\n" + " ${MINGW_GFORTRAN}\n" + "which is not a MinGW gfortran for this architecture. " + "The output from -v does not match \"${_mingw_target}\":\n" + "${out}\n" + "Set MINGW_GFORTRAN to a proper MinGW gfortran for this architecture." + ) + endif() + + # Configure scripts to run MinGW tools with the proper PATH. + get_filename_component(MINGW_PATH ${MINGW_GFORTRAN} PATH) + file(TO_NATIVE_PATH "${MINGW_PATH}" MINGW_PATH) + string(REPLACE "\\" "\\\\" MINGW_PATH "${MINGW_PATH}") + configure_file( + ${_MS_MINGW_SOURCE_DIR}/CMakeAddFortranSubdirectory/config_mingw.cmake.in + ${build_dir}/config_mingw.cmake + @ONLY) + configure_file( + ${_MS_MINGW_SOURCE_DIR}/CMakeAddFortranSubdirectory/build_mingw.cmake.in + ${build_dir}/build_mingw.cmake + @ONLY) +endfunction() + +function(_add_fortran_library_link_interface library depend_library) + set_target_properties(${library} PROPERTIES + IMPORTED_LINK_INTERFACE_LIBRARIES_NOCONFIG "${depend_library}") +endfunction() + + +function(cmake_add_fortran_subdirectory subdir) + # Parse arguments to function + set(options NO_EXTERNAL_INSTALL) + set(oneValueArgs PROJECT ARCHIVE_DIR RUNTIME_DIR) + set(multiValueArgs LIBRARIES LINK_LIBRARIES CMAKE_COMMAND_LINE) + cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if(NOT ARGS_NO_EXTERNAL_INSTALL) + message(FATAL_ERROR + "Option NO_EXTERNAL_INSTALL is required (for forward compatibility) " + "but was not given." + ) + endif() + + # if we are not using MSVC without fortran support + # then just use the usual add_subdirectory to build + # the fortran library + check_language(Fortran) + if(NOT (MSVC AND (NOT CMAKE_Fortran_COMPILER))) + add_subdirectory(${subdir}) + return() + endif() + + # if we have MSVC without Intel fortran then setup + # external projects to build with mingw fortran + + set(source_dir "${CMAKE_CURRENT_SOURCE_DIR}/${subdir}") + set(project_name "${ARGS_PROJECT}") + set(library_dir "${ARGS_ARCHIVE_DIR}") + set(binary_dir "${ARGS_RUNTIME_DIR}") + set(libraries ${ARGS_LIBRARIES}) + # use the same directory that add_subdirectory would have used + set(build_dir "${CMAKE_CURRENT_BINARY_DIR}/${subdir}") + foreach(dir_var library_dir binary_dir) + if(NOT IS_ABSOLUTE "${${dir_var}}") + get_filename_component(${dir_var} + "${CMAKE_CURRENT_BINARY_DIR}/${${dir_var}}" ABSOLUTE) + endif() + endforeach() + # create build and configure wrapper scripts + _setup_mingw_config_and_build("${source_dir}" "${build_dir}") + # create the external project + externalproject_add(${project_name}_build + SOURCE_DIR ${source_dir} + BINARY_DIR ${build_dir} + CONFIGURE_COMMAND ${CMAKE_COMMAND} + -P ${build_dir}/config_mingw.cmake + BUILD_COMMAND ${CMAKE_COMMAND} + -P ${build_dir}/build_mingw.cmake + INSTALL_COMMAND "" + ) + # make the external project always run make with each build + externalproject_add_step(${project_name}_build forcebuild + COMMAND ${CMAKE_COMMAND} + -E remove + ${CMAKE_CURRENT_BUILD_DIR}/${project_name}-prefix/src/${project_name}-stamp/${project_name}-build + DEPENDEES configure + DEPENDERS build + ALWAYS 1 + ) + # create imported targets for all libraries + foreach(lib ${libraries}) + add_library(${lib} SHARED IMPORTED GLOBAL) + set_property(TARGET ${lib} APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) + set_target_properties(${lib} PROPERTIES + IMPORTED_IMPLIB_NOCONFIG "${library_dir}/lib${lib}.lib" + IMPORTED_LOCATION_NOCONFIG "${binary_dir}/lib${lib}.dll" + ) + add_dependencies(${lib} ${project_name}_build) + endforeach() + + # now setup link libraries for targets + set(start FALSE) + set(target) + foreach(lib ${ARGS_LINK_LIBRARIES}) + if("${lib}" STREQUAL "LINK_LIBS") + set(start TRUE) + else() + if(start) + if(DEFINED target) + # process current target and target_libs + _add_fortran_library_link_interface(${target} "${target_libs}") + # zero out target and target_libs + set(target) + set(target_libs) + endif() + # save the current target and set start to FALSE + set(target ${lib}) + set(start FALSE) + else() + # append the lib to target_libs + list(APPEND target_libs "${lib}") + endif() + endif() + endforeach() + # process anything that is left in target and target_libs + if(DEFINED target) + _add_fortran_library_link_interface(${target} "${target_libs}") + endif() +endfunction() diff --git a/Modules/CMakeAddFortranSubdirectory/build_mingw.cmake.in b/Modules/CMakeAddFortranSubdirectory/build_mingw.cmake.in new file mode 100644 index 0000000..55b271a --- /dev/null +++ b/Modules/CMakeAddFortranSubdirectory/build_mingw.cmake.in @@ -0,0 +1,2 @@ +set(ENV{PATH} "@MINGW_PATH@\;$ENV{PATH}") +execute_process(COMMAND "@CMAKE_COMMAND@" --build . ) diff --git a/Modules/CMakeAddFortranSubdirectory/config_mingw.cmake.in b/Modules/CMakeAddFortranSubdirectory/config_mingw.cmake.in new file mode 100644 index 0000000..97f6769 --- /dev/null +++ b/Modules/CMakeAddFortranSubdirectory/config_mingw.cmake.in @@ -0,0 +1,9 @@ +set(ENV{PATH} "@MINGW_PATH@\;$ENV{PATH}") +set(CMAKE_COMMAND_LINE "@ARGS_CMAKE_COMMAND_LINE@") +execute_process( + COMMAND "@CMAKE_COMMAND@" "-GMinGW Makefiles" + -DCMAKE_Fortran_COMPILER:PATH=@MINGW_GFORTRAN@ + -DBUILD_SHARED_LIBS=ON + -DCMAKE_GNUtoMS=ON + ${CMAKE_COMMAND_LINE} + "@source_dir@") diff --git a/Modules/CMakeAddNewLanguage.txt b/Modules/CMakeAddNewLanguage.txt new file mode 100644 index 0000000..203c39d --- /dev/null +++ b/Modules/CMakeAddNewLanguage.txt @@ -0,0 +1,17 @@ +CMakeDetermine(LANG)Compiler.cmake -> this should find the compiler for LANG and configure CMake(LANG)Compiler.cmake.in + +CMake(LANG)Compiler.cmake.in -> used by CMakeDetermine(LANG)Compiler.cmake + This file is used to store compiler information and is copied down into try + compile directories so that try compiles do not need to re-determine and test the LANG + +CMakeTest(LANG)Compiler.cmake -> test the compiler and set: + SET(CMAKE_(LANG)_COMPILER_WORKS 1 CACHE INTERNAL "") + +CMake(LANG)Information.cmake -> set up rule variables for LANG : + CMAKE_(LANG)_CREATE_SHARED_LIBRARY + CMAKE_(LANG)_CREATE_SHARED_MODULE + CMAKE_(LANG)_CREATE_STATIC_LIBRARY + CMAKE_(LANG)_COMPILE_OBJECT + CMAKE_(LANG)_LINK_EXECUTABLE + + diff --git a/Modules/CMakeBackwardCompatibilityC.cmake b/Modules/CMakeBackwardCompatibilityC.cmake new file mode 100644 index 0000000..00e5688 --- /dev/null +++ b/Modules/CMakeBackwardCompatibilityC.cmake @@ -0,0 +1,100 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Nothing here yet +IF(CMAKE_GENERATOR MATCHES "Visual Studio 7") + INCLUDE(CMakeVS7BackwardCompatibility) + SET(CMAKE_SKIP_COMPATIBILITY_TESTS 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7") +IF(CMAKE_GENERATOR MATCHES "Visual Studio 6") + INCLUDE(CMakeVS6BackwardCompatibility) + SET(CMAKE_SKIP_COMPATIBILITY_TESTS 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6") + +IF(NOT CMAKE_SKIP_COMPATIBILITY_TESTS) + # Old CMake versions did not support OS X universal binaries anyway, + # so just get through this with at least some size for the types. + LIST(LENGTH CMAKE_OSX_ARCHITECTURES NUM_ARCHS) + IF(${NUM_ARCHS} GREATER 1) + IF(NOT DEFINED CMAKE_TRY_COMPILE_OSX_ARCHITECTURES) + MESSAGE(WARNING "This module does not work with OS X universal binaries.") + SET(__ERASE_CMAKE_TRY_COMPILE_OSX_ARCHITECTURES 1) + LIST(GET CMAKE_OSX_ARCHITECTURES 0 CMAKE_TRY_COMPILE_OSX_ARCHITECTURES) + ENDIF() + ENDIF() + + INCLUDE (CheckTypeSize) + CHECK_TYPE_SIZE(int CMAKE_SIZEOF_INT) + CHECK_TYPE_SIZE(long CMAKE_SIZEOF_LONG) + CHECK_TYPE_SIZE("void*" CMAKE_SIZEOF_VOID_P) + CHECK_TYPE_SIZE(char CMAKE_SIZEOF_CHAR) + CHECK_TYPE_SIZE(short CMAKE_SIZEOF_SHORT) + CHECK_TYPE_SIZE(float CMAKE_SIZEOF_FLOAT) + CHECK_TYPE_SIZE(double CMAKE_SIZEOF_DOUBLE) + + INCLUDE (CheckIncludeFile) + CHECK_INCLUDE_FILE("limits.h" CMAKE_HAVE_LIMITS_H) + CHECK_INCLUDE_FILE("unistd.h" CMAKE_HAVE_UNISTD_H) + CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H) + + INCLUDE (CheckIncludeFiles) + CHECK_INCLUDE_FILES("sys/types.h;sys/prctl.h" CMAKE_HAVE_SYS_PRCTL_H) + + INCLUDE (TestBigEndian) + TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN) + INCLUDE (FindX11) + + IF("${X11_X11_INCLUDE_PATH}" MATCHES "^/usr/include$") + SET (CMAKE_X_CFLAGS "" CACHE STRING "X11 extra flags.") + ELSE("${X11_X11_INCLUDE_PATH}" MATCHES "^/usr/include$") + SET (CMAKE_X_CFLAGS "-I${X11_X11_INCLUDE_PATH}" CACHE STRING + "X11 extra flags.") + ENDIF("${X11_X11_INCLUDE_PATH}" MATCHES "^/usr/include$") + SET (CMAKE_X_LIBS "${X11_LIBRARIES}" CACHE STRING + "Libraries and options used in X11 programs.") + SET (CMAKE_HAS_X "${X11_FOUND}" CACHE INTERNAL "Is X11 around.") + + INCLUDE (FindThreads) + + SET (CMAKE_THREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}" CACHE STRING + "Thread library used.") + + SET (CMAKE_USE_PTHREADS "${CMAKE_USE_PTHREADS_INIT}" CACHE BOOL + "Use the pthreads library.") + + SET (CMAKE_USE_WIN32_THREADS "${CMAKE_USE_WIN32_THREADS_INIT}" CACHE BOOL + "Use the win32 thread library.") + + SET (CMAKE_HP_PTHREADS ${CMAKE_HP_PTHREADS_INIT} CACHE BOOL + "Use HP pthreads.") + + SET (CMAKE_USE_SPROC ${CMAKE_USE_SPROC_INIT} CACHE BOOL + "Use sproc libs.") + + IF(__ERASE_CMAKE_TRY_COMPILE_OSX_ARCHITECTURES) + SET(CMAKE_TRY_COMPILE_OSX_ARCHITECTURES) + SET(__ERASE_CMAKE_TRY_COMPILE_OSX_ARCHITECTURES) + ENDIF() +ENDIF(NOT CMAKE_SKIP_COMPATIBILITY_TESTS) + +MARK_AS_ADVANCED( +CMAKE_HP_PTHREADS +CMAKE_THREAD_LIBS +CMAKE_USE_PTHREADS +CMAKE_USE_SPROC +CMAKE_USE_WIN32_THREADS +CMAKE_X_CFLAGS +CMAKE_X_LIBS +) + diff --git a/Modules/CMakeBackwardCompatibilityCXX.cmake b/Modules/CMakeBackwardCompatibilityCXX.cmake new file mode 100644 index 0000000..707bbde --- /dev/null +++ b/Modules/CMakeBackwardCompatibilityCXX.cmake @@ -0,0 +1,54 @@ +# - define a bunch of backwards compatibility variables +# CMAKE_ANSI_CXXFLAGS - flag for ansi c++ +# CMAKE_HAS_ANSI_STRING_STREAM - has +# INCLUDE(TestForANSIStreamHeaders) +# INCLUDE(CheckIncludeFileCXX) +# INCLUDE(TestForSTDNamespace) +# INCLUDE(TestForANSIForScope) + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(NOT CMAKE_SKIP_COMPATIBILITY_TESTS) + # check for some ANSI flags in the CXX compiler if it is not gnu + IF(NOT CMAKE_COMPILER_IS_GNUCXX) + INCLUDE(TestCXXAcceptsFlag) + SET(CMAKE_TRY_ANSI_CXX_FLAGS "") + IF(CMAKE_SYSTEM MATCHES "IRIX.*") + SET(CMAKE_TRY_ANSI_CXX_FLAGS "-LANG:std") + ENDIF(CMAKE_SYSTEM MATCHES "IRIX.*") + IF(CMAKE_SYSTEM MATCHES "OSF.*") + SET(CMAKE_TRY_ANSI_CXX_FLAGS "-std strict_ansi -nopure_cname") + ENDIF(CMAKE_SYSTEM MATCHES "OSF.*") + # if CMAKE_TRY_ANSI_CXX_FLAGS has something in it, see + # if the compiler accepts it + IF( CMAKE_TRY_ANSI_CXX_FLAGS MATCHES ".+") + CHECK_CXX_ACCEPTS_FLAG(${CMAKE_TRY_ANSI_CXX_FLAGS} CMAKE_CXX_ACCEPTS_FLAGS) + # if the compiler liked the flag then set CMAKE_ANSI_CXXFLAGS + # to the flag + IF(CMAKE_CXX_ACCEPTS_FLAGS) + SET(CMAKE_ANSI_CXXFLAGS ${CMAKE_TRY_ANSI_CXX_FLAGS} CACHE INTERNAL + "What flags are required by the c++ compiler to make it ansi." ) + ENDIF(CMAKE_CXX_ACCEPTS_FLAGS) + ENDIF( CMAKE_TRY_ANSI_CXX_FLAGS MATCHES ".+") + ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_CXX_FLAGS_SAVE ${CMAKE_CXX_FLAGS}) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_ANSI_CXXFLAGS}") + INCLUDE(TestForANSIStreamHeaders) + INCLUDE(CheckIncludeFileCXX) + INCLUDE(TestForSTDNamespace) + INCLUDE(TestForANSIForScope) + INCLUDE(TestForSSTREAM) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_SAVE}") +ENDIF(NOT CMAKE_SKIP_COMPATIBILITY_TESTS) + diff --git a/Modules/CMakeBorlandFindMake.cmake b/Modules/CMakeBorlandFindMake.cmake new file mode 100644 index 0000000..1ef28df --- /dev/null +++ b/Modules/CMakeBorlandFindMake.cmake @@ -0,0 +1,17 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET (CMAKE_MAKE_PROGRAM "make" CACHE STRING + "Program used to build from makefiles.") +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) diff --git a/Modules/CMakeBuildSettings.cmake.in b/Modules/CMakeBuildSettings.cmake.in new file mode 100644 index 0000000..7c4aa14 --- /dev/null +++ b/Modules/CMakeBuildSettings.cmake.in @@ -0,0 +1,13 @@ + +# The command CMAKE_EXPORT_BUILD_SETTINGS(...) was used by +# @PROJECT_NAME@ to generate this file. As of CMake 2.8 the +# functionality of this command has been dropped as it was deemed +# harmful (confusing users by changing their compiler). + +# CMake 2.6 and below do not support loading their equivalent of this +# file if it was produced by a newer version of CMake. CMake 2.8 and +# above simply do not load this file. Therefore we simply error out. +message(FATAL_ERROR + "This @PROJECT_NAME@ was built by CMake @CMAKE_VERSION@, but this is CMake " + "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}. " + "Please upgrade CMake to a more recent version.") diff --git a/Modules/CMakeCCompiler.cmake.in b/Modules/CMakeCCompiler.cmake.in new file mode 100644 index 0000000..b14cf34 --- /dev/null +++ b/Modules/CMakeCCompiler.cmake.in @@ -0,0 +1,50 @@ +SET(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@") +SET(CMAKE_C_COMPILER_ARG1 "@CMAKE_C_COMPILER_ARG1@") +SET(CMAKE_C_COMPILER_ID "@CMAKE_C_COMPILER_ID@") +SET(CMAKE_C_COMPILER_VERSION "@CMAKE_C_COMPILER_VERSION@") +SET(CMAKE_C_PLATFORM_ID "@CMAKE_C_PLATFORM_ID@") +@SET_MSVC_C_ARCHITECTURE_ID@ +SET(CMAKE_AR "@CMAKE_AR@") +SET(CMAKE_RANLIB "@CMAKE_RANLIB@") +SET(CMAKE_LINKER "@CMAKE_LINKER@") +SET(CMAKE_COMPILER_IS_GNUCC @CMAKE_COMPILER_IS_GNUCC@) +SET(CMAKE_C_COMPILER_LOADED 1) +SET(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@) +SET(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@) +IF(CMAKE_COMPILER_IS_CYGWIN) + SET(CYGWIN 1) + SET(UNIX 1) +ENDIF(CMAKE_COMPILER_IS_CYGWIN) + +SET(CMAKE_C_COMPILER_ENV_VAR "CC") + +IF(CMAKE_COMPILER_IS_MINGW) + SET(MINGW 1) +ENDIF(CMAKE_COMPILER_IS_MINGW) +SET(CMAKE_C_COMPILER_ID_RUN 1) +SET(CMAKE_C_SOURCE_FILE_EXTENSIONS c) +SET(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +SET(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +SET(CMAKE_C_SIZEOF_DATA_PTR "@CMAKE_C_SIZEOF_DATA_PTR@") +SET(CMAKE_C_COMPILER_ABI "@CMAKE_C_COMPILER_ABI@") +SET(CMAKE_C_LIBRARY_ARCHITECTURE "@CMAKE_C_LIBRARY_ARCHITECTURE@") + +IF(CMAKE_C_SIZEOF_DATA_PTR) + SET(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +ENDIF(CMAKE_C_SIZEOF_DATA_PTR) + +IF(CMAKE_C_COMPILER_ABI) + SET(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +ENDIF(CMAKE_C_COMPILER_ABI) + +IF(CMAKE_C_LIBRARY_ARCHITECTURE) + SET(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_C_LIBRARY_ARCHITECTURE@") +ENDIF() + +SET(CMAKE_C_HAS_ISYSROOT "@CMAKE_C_HAS_ISYSROOT@") +@CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG_CODE@ + +SET(CMAKE_C_IMPLICIT_LINK_LIBRARIES "@CMAKE_C_IMPLICIT_LINK_LIBRARIES@") +SET(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "@CMAKE_C_IMPLICIT_LINK_DIRECTORIES@") diff --git a/Modules/CMakeCCompilerABI.c b/Modules/CMakeCCompilerABI.c new file mode 100644 index 0000000..e6a07f4 --- /dev/null +++ b/Modules/CMakeCCompilerABI.c @@ -0,0 +1,28 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#ifdef __CLASSIC_C__ +# define const +#endif + +/*--------------------------------------------------------------------------*/ + +#include "CMakeCompilerABI.h" + +/*--------------------------------------------------------------------------*/ + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_sizeof_dptr[argc]; +#if defined(ABI_ID) + require += info_abi[argc]; +#endif + (void)argv; + return require; +} diff --git a/Modules/CMakeCCompilerId.c.in b/Modules/CMakeCCompilerId.c.in new file mode 100644 index 0000000..06aa9bf --- /dev/null +++ b/Modules/CMakeCCompilerId.c.in @@ -0,0 +1,204 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# 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 */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__WATCOMC__ % 100) + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_C = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + +#elif defined(__IBMC__) +# if defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" +# else +# if __IBMC__ >= 800 +# define COMPILER_ID "XL" +# else +# define COMPILER_ID "VisualAge" +# endif + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__PATHSCALE__) +# define COMPILER_ID "PathScale" + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI_DSP" + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +/* Analog Devices C++ compiler for Blackfin, TigerSHARC and + SHARC (21000) DSPs */ +# define COMPILER_ID "ADSP" + +/* IAR Systems compiler for embedded systems. + http://www.iar.com + Not supported yet by CMake +#elif defined(__IAR_SYSTEMS_ICC__) +# define COMPILER_ID "IAR" */ + +/* sdcc, the small devices C compiler for embedded systems, + http://sdcc.sourceforge.net */ +#elif defined(SDCC) +# define COMPILER_ID "SDCC" + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + +/* This compiler is either not known or is too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" + +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; + +@CMAKE_C_COMPILER_ID_PLATFORM_CONTENT@ + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif + (void)argv; + return require; +} +#endif diff --git a/Modules/CMakeCInformation.cmake b/Modules/CMakeCInformation.cmake new file mode 100644 index 0000000..6b5efba --- /dev/null +++ b/Modules/CMakeCInformation.cmake @@ -0,0 +1,219 @@ + +#============================================================================= +# Copyright 2004-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file sets the basic flags for the C language in CMake. +# It also loads the available platform file for the system-compiler +# if it exists. +# It also loads a system - compiler - processor (or target hardware) +# specific file, which is mainly useful for crosscompiling and embedded systems. + +# some compilers use different extensions (e.g. sdcc uses .rel) +# so set the extension here first so it can be overridden by the compiler specific file +IF(UNIX) + SET(CMAKE_C_OUTPUT_EXTENSION .o) +ELSE(UNIX) + SET(CMAKE_C_OUTPUT_EXTENSION .obj) +ENDIF(UNIX) + +SET(_INCLUDED_FILE 0) + +# Load compiler-specific information. +IF(CMAKE_C_COMPILER_ID) + INCLUDE(Compiler/${CMAKE_C_COMPILER_ID}-C OPTIONAL) +ENDIF(CMAKE_C_COMPILER_ID) + +SET(CMAKE_BASE_NAME) +GET_FILENAME_COMPONENT(CMAKE_BASE_NAME ${CMAKE_C_COMPILER} NAME_WE) +IF(CMAKE_COMPILER_IS_GNUCC) + SET(CMAKE_BASE_NAME gcc) +ENDIF(CMAKE_COMPILER_IS_GNUCC) + + +# load a hardware specific file, mostly useful for embedded compilers +IF(CMAKE_SYSTEM_PROCESSOR) + IF(CMAKE_C_COMPILER_ID) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) + ENDIF(CMAKE_C_COMPILER_ID) + IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL) + ENDIF (NOT _INCLUDED_FILE) +ENDIF(CMAKE_SYSTEM_PROCESSOR) + + +# load the system- and compiler specific files +IF(CMAKE_C_COMPILER_ID) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C + OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) +ENDIF(CMAKE_C_COMPILER_ID) +IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} + OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) +ENDIF (NOT _INCLUDED_FILE) +# We specify the compiler information in the system file for some +# platforms, but this language may not have been enabled when the file +# was first included. Include it again to get the language info. +# Remove this when all compiler info is removed from system files. +IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL) +ENDIF (NOT _INCLUDED_FILE) + +IF(CMAKE_C_SIZEOF_DATA_PTR) + FOREACH(f ${CMAKE_C_ABI_FILES}) + INCLUDE(${f}) + ENDFOREACH() + UNSET(CMAKE_C_ABI_FILES) +ENDIF() + +# This should be included before the _INIT variables are +# used to initialize the cache. Since the rule variables +# have if blocks on them, users can still define them here. +# But, it should still be after the platform file so changes can +# be made to those values. + +IF(CMAKE_USER_MAKE_RULES_OVERRIDE) + # Save the full path of the file so try_compile can use it. + INCLUDE(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override) + SET(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}") +ENDIF() + +IF(CMAKE_USER_MAKE_RULES_OVERRIDE_C) + # Save the full path of the file so try_compile can use it. + INCLUDE(${CMAKE_USER_MAKE_RULES_OVERRIDE_C} RESULT_VARIABLE _override) + SET(CMAKE_USER_MAKE_RULES_OVERRIDE_C "${_override}") +ENDIF() + + +# for most systems a module is the same as a shared library +# so unless the variable CMAKE_MODULE_EXISTS is set just +# copy the values from the LIBRARY variables +IF(NOT CMAKE_MODULE_EXISTS) + SET(CMAKE_SHARED_MODULE_C_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) + SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}) +ENDIF(NOT CMAKE_MODULE_EXISTS) + +SET(CMAKE_C_FLAGS_INIT "$ENV{CFLAGS} ${CMAKE_C_FLAGS_INIT}") +# avoid just having a space as the initial value for the cache +IF(CMAKE_C_FLAGS_INIT STREQUAL " ") + SET(CMAKE_C_FLAGS_INIT) +ENDIF(CMAKE_C_FLAGS_INIT STREQUAL " ") +SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS_INIT}" CACHE STRING + "Flags used by the compiler during all build types.") + +IF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) +# default build type is none + IF(NOT CMAKE_NO_BUILD_TYPE) + SET (CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_INIT} CACHE STRING + "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.") + ENDIF(NOT CMAKE_NO_BUILD_TYPE) + SET (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG_INIT}" CACHE STRING + "Flags used by the compiler during debug builds.") + SET (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL_INIT}" CACHE STRING + "Flags used by the compiler during release minsize builds.") + SET (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE_INIT}" CACHE STRING + "Flags used by the compiler during release builds (/MD /Ob1 /Oi /Ot /Oy /Gs will produce slightly less optimized but smaller files).") + SET (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING + "Flags used by the compiler during Release with Debug Info builds.") +ENDIF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) + +IF(CMAKE_C_STANDARD_LIBRARIES_INIT) + SET(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES_INIT}" + CACHE STRING "Libraries linked by defalut with all C applications.") + MARK_AS_ADVANCED(CMAKE_C_STANDARD_LIBRARIES) +ENDIF(CMAKE_C_STANDARD_LIBRARIES_INIT) + +INCLUDE(CMakeCommonLanguageInclude) + +# now define the following rule variables + +# CMAKE_C_CREATE_SHARED_LIBRARY +# CMAKE_C_CREATE_SHARED_MODULE +# CMAKE_C_COMPILE_OBJECT +# CMAKE_C_LINK_EXECUTABLE + +# variables supplied by the generator at use time +# +# the target without the suffix +# +# +# +# +# + +# C compiler information +# +# +# +# + +# Static library tools +# +# + + +# create a C shared library +IF(NOT CMAKE_C_CREATE_SHARED_LIBRARY) + SET(CMAKE_C_CREATE_SHARED_LIBRARY + " -o ") +ENDIF(NOT CMAKE_C_CREATE_SHARED_LIBRARY) + +# create a C shared module just copy the shared library rule +IF(NOT CMAKE_C_CREATE_SHARED_MODULE) + SET(CMAKE_C_CREATE_SHARED_MODULE ${CMAKE_C_CREATE_SHARED_LIBRARY}) +ENDIF(NOT CMAKE_C_CREATE_SHARED_MODULE) + +# Create a static archive incrementally for large object file counts. +# If CMAKE_C_CREATE_STATIC_LIBRARY is set it will override these. +IF(NOT DEFINED CMAKE_C_ARCHIVE_CREATE) + SET(CMAKE_C_ARCHIVE_CREATE " cr ") +ENDIF() +IF(NOT DEFINED CMAKE_C_ARCHIVE_APPEND) + SET(CMAKE_C_ARCHIVE_APPEND " r ") +ENDIF() +IF(NOT DEFINED CMAKE_C_ARCHIVE_FINISH) + SET(CMAKE_C_ARCHIVE_FINISH " ") +ENDIF() + +# compile a C file into an object file +IF(NOT CMAKE_C_COMPILE_OBJECT) + SET(CMAKE_C_COMPILE_OBJECT + " -o -c ") +ENDIF(NOT CMAKE_C_COMPILE_OBJECT) + +IF(NOT CMAKE_C_LINK_EXECUTABLE) + SET(CMAKE_C_LINK_EXECUTABLE + " -o ") +ENDIF(NOT CMAKE_C_LINK_EXECUTABLE) + +IF(NOT CMAKE_EXECUTABLE_RUNTIME_C_FLAG) + SET(CMAKE_EXECUTABLE_RUNTIME_C_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG}) +ENDIF(NOT CMAKE_EXECUTABLE_RUNTIME_C_FLAG) + +IF(NOT CMAKE_EXECUTABLE_RUNTIME_C_FLAG_SEP) + SET(CMAKE_EXECUTABLE_RUNTIME_C_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP}) +ENDIF(NOT CMAKE_EXECUTABLE_RUNTIME_C_FLAG_SEP) + +IF(NOT CMAKE_EXECUTABLE_RPATH_LINK_C_FLAG) + SET(CMAKE_EXECUTABLE_RPATH_LINK_C_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG}) +ENDIF(NOT CMAKE_EXECUTABLE_RPATH_LINK_C_FLAG) + +MARK_AS_ADVANCED( +CMAKE_C_FLAGS +CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELWITHDEBINFO +) +SET(CMAKE_C_INFORMATION_LOADED 1) + + diff --git a/Modules/CMakeCXXCompiler.cmake.in b/Modules/CMakeCXXCompiler.cmake.in new file mode 100644 index 0000000..bc3bc2e --- /dev/null +++ b/Modules/CMakeCXXCompiler.cmake.in @@ -0,0 +1,51 @@ +SET(CMAKE_CXX_COMPILER "@CMAKE_CXX_COMPILER@") +SET(CMAKE_CXX_COMPILER_ARG1 "@CMAKE_CXX_COMPILER_ARG1@") +SET(CMAKE_CXX_COMPILER_ID "@CMAKE_CXX_COMPILER_ID@") +SET(CMAKE_CXX_COMPILER_VERSION "@CMAKE_CXX_COMPILER_VERSION@") +SET(CMAKE_CXX_PLATFORM_ID "@CMAKE_CXX_PLATFORM_ID@") +@SET_MSVC_CXX_ARCHITECTURE_ID@ +SET(CMAKE_AR "@CMAKE_AR@") +SET(CMAKE_RANLIB "@CMAKE_RANLIB@") +SET(CMAKE_LINKER "@CMAKE_LINKER@") +SET(CMAKE_COMPILER_IS_GNUCXX @CMAKE_COMPILER_IS_GNUCXX@) +SET(CMAKE_CXX_COMPILER_LOADED 1) +SET(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@) +SET(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@) +IF(CMAKE_COMPILER_IS_CYGWIN) + SET(CYGWIN 1) + SET(UNIX 1) +ENDIF(CMAKE_COMPILER_IS_CYGWIN) + +SET(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +IF(CMAKE_COMPILER_IS_MINGW) + SET(MINGW 1) +ENDIF(CMAKE_COMPILER_IS_MINGW) +SET(CMAKE_CXX_COMPILER_ID_RUN 1) +SET(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) +SET(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;CPP) +SET(CMAKE_CXX_LINKER_PREFERENCE 30) +SET(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +SET(CMAKE_CXX_SIZEOF_DATA_PTR "@CMAKE_CXX_SIZEOF_DATA_PTR@") +SET(CMAKE_CXX_COMPILER_ABI "@CMAKE_CXX_COMPILER_ABI@") +SET(CMAKE_CXX_LIBRARY_ARCHITECTURE "@CMAKE_CXX_LIBRARY_ARCHITECTURE@") + +IF(CMAKE_CXX_SIZEOF_DATA_PTR) + SET(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +ENDIF(CMAKE_CXX_SIZEOF_DATA_PTR) + +IF(CMAKE_CXX_COMPILER_ABI) + SET(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +ENDIF(CMAKE_CXX_COMPILER_ABI) + +IF(CMAKE_CXX_LIBRARY_ARCHITECTURE) + SET(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_CXX_LIBRARY_ARCHITECTURE@") +ENDIF() + +SET(CMAKE_CXX_HAS_ISYSROOT "@CMAKE_CXX_HAS_ISYSROOT@") +@CMAKE_CXX_OSX_DEPLOYMENT_TARGET_FLAG_CODE@ + +SET(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "@CMAKE_CXX_IMPLICIT_LINK_LIBRARIES@") +SET(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "@CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES@") diff --git a/Modules/CMakeCXXCompilerABI.cpp b/Modules/CMakeCXXCompilerABI.cpp new file mode 100644 index 0000000..c9b0440 --- /dev/null +++ b/Modules/CMakeCXXCompilerABI.cpp @@ -0,0 +1,20 @@ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +/*--------------------------------------------------------------------------*/ + +#include "CMakeCompilerABI.h" + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_sizeof_dptr[argc]; +#if defined(ABI_ID) + require += info_abi[argc]; +#endif + (void)argv; + return require; +} diff --git a/Modules/CMakeCXXCompilerId.cpp.in b/Modules/CMakeCXXCompilerId.cpp.in new file mode 100644 index 0000000..95fc852 --- /dev/null +++ b/Modules/CMakeCXXCompilerId.cpp.in @@ -0,0 +1,187 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# 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 */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__WATCOMC__ % 100) + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + +#elif defined(__IBMCPP__) +# if defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" +# else +# if __IBMCPP__ >= 800 +# define COMPILER_ID "XL" +# else +# define COMPILER_ID "VisualAge" +# endif + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__PATHSCALE__) +# define COMPILER_ID "PathScale" + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI_DSP" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +/* Analog Devices C++ compiler for Blackfin, TigerSHARC and + SHARC (21000) DSPs */ +# define COMPILER_ID "ADSP" + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + +/* This compiler is either not known or is too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" + +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; + +@CMAKE_CXX_COMPILER_ID_PLATFORM_CONTENT@ + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif + (void)argv; + return require; +} diff --git a/Modules/CMakeCXXInformation.cmake b/Modules/CMakeCXXInformation.cmake new file mode 100644 index 0000000..25abb8c --- /dev/null +++ b/Modules/CMakeCXXInformation.cmake @@ -0,0 +1,287 @@ + +#============================================================================= +# Copyright 2004-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file sets the basic flags for the C++ language in CMake. +# It also loads the available platform file for the system-compiler +# if it exists. +# It also loads a system - compiler - processor (or target hardware) +# specific file, which is mainly useful for crosscompiling and embedded systems. + +# some compilers use different extensions (e.g. sdcc uses .rel) +# so set the extension here first so it can be overridden by the compiler specific file +IF(UNIX) + SET(CMAKE_CXX_OUTPUT_EXTENSION .o) +ELSE(UNIX) + SET(CMAKE_CXX_OUTPUT_EXTENSION .obj) +ENDIF(UNIX) + +SET(_INCLUDED_FILE 0) + +# Load compiler-specific information. +IF(CMAKE_CXX_COMPILER_ID) + INCLUDE(Compiler/${CMAKE_CXX_COMPILER_ID}-CXX OPTIONAL) +ENDIF(CMAKE_CXX_COMPILER_ID) + +SET(CMAKE_BASE_NAME) +GET_FILENAME_COMPONENT(CMAKE_BASE_NAME ${CMAKE_CXX_COMPILER} NAME_WE) +# since the gnu compiler has several names force g++ +IF(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_BASE_NAME g++) +ENDIF(CMAKE_COMPILER_IS_GNUCXX) + + +# load a hardware specific file, mostly useful for embedded compilers +IF(CMAKE_SYSTEM_PROCESSOR) + IF(CMAKE_CXX_COMPILER_ID) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) + ENDIF(CMAKE_CXX_COMPILER_ID) + IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL) + ENDIF (NOT _INCLUDED_FILE) +ENDIF(CMAKE_SYSTEM_PROCESSOR) + +# load the system- and compiler specific files +IF(CMAKE_CXX_COMPILER_ID) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) +ENDIF(CMAKE_CXX_COMPILER_ID) +IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL + RESULT_VARIABLE _INCLUDED_FILE) +ENDIF (NOT _INCLUDED_FILE) +# We specify the compiler information in the system file for some +# platforms, but this language may not have been enabled when the file +# was first included. Include it again to get the language info. +# Remove this when all compiler info is removed from system files. +IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL) +ENDIF (NOT _INCLUDED_FILE) + +IF(CMAKE_CXX_SIZEOF_DATA_PTR) + FOREACH(f ${CMAKE_CXX_ABI_FILES}) + INCLUDE(${f}) + ENDFOREACH() + UNSET(CMAKE_CXX_ABI_FILES) +ENDIF() + +# This should be included before the _INIT variables are +# used to initialize the cache. Since the rule variables +# have if blocks on them, users can still define them here. +# But, it should still be after the platform file so changes can +# be made to those values. + +IF(CMAKE_USER_MAKE_RULES_OVERRIDE) + # Save the full path of the file so try_compile can use it. + INCLUDE(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override) + SET(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}") +ENDIF() + +IF(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX) + # Save the full path of the file so try_compile can use it. + INCLUDE(${CMAKE_USER_MAKE_RULES_OVERRIDE_CXX} RESULT_VARIABLE _override) + SET(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX "${_override}") +ENDIF() + + +# Create a set of shared library variable specific to C++ +# For 90% of the systems, these are the same flags as the C versions +# so if these are not set just copy the flags from the c version +IF(NOT CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS) + SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}) +ENDIF(NOT CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS) + +IF(NOT CMAKE_SHARED_LIBRARY_CXX_FLAGS) + SET(CMAKE_SHARED_LIBRARY_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) +ENDIF(NOT CMAKE_SHARED_LIBRARY_CXX_FLAGS) + +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS) + SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS}) +ENDIF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS) + +IF(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG) + SET(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG}) +ENDIF(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG) + +IF(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP) + SET(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP}) +ENDIF(NOT CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP) + +IF(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG) + SET(CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG}) +ENDIF(NOT CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG) + +IF(NOT DEFINED CMAKE_EXE_EXPORTS_CXX_FLAG) + SET(CMAKE_EXE_EXPORTS_CXX_FLAG ${CMAKE_EXE_EXPORTS_C_FLAG}) +ENDIF() + +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG) + SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_C_FLAG}) +ENDIF() + +IF(NOT CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG) + SET(CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG}) +ENDIF(NOT CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG) + +IF(NOT CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG_SEP) + SET(CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP}) +ENDIF(NOT CMAKE_EXECUTABLE_RUNTIME_CXX_FLAG_SEP) + +IF(NOT CMAKE_EXECUTABLE_RPATH_LINK_CXX_FLAG) + SET(CMAKE_EXECUTABLE_RPATH_LINK_CXX_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG}) +ENDIF(NOT CMAKE_EXECUTABLE_RPATH_LINK_CXX_FLAG) + +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_CXX_WITH_RUNTIME_PATH) + SET(CMAKE_SHARED_LIBRARY_LINK_CXX_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH}) +ENDIF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_CXX_WITH_RUNTIME_PATH) + +IF(NOT CMAKE_INCLUDE_FLAG_CXX) + SET(CMAKE_INCLUDE_FLAG_CXX ${CMAKE_INCLUDE_FLAG_C}) +ENDIF(NOT CMAKE_INCLUDE_FLAG_CXX) + +IF(NOT CMAKE_INCLUDE_FLAG_SEP_CXX) + SET(CMAKE_INCLUDE_FLAG_SEP_CXX ${CMAKE_INCLUDE_FLAG_SEP_C}) +ENDIF(NOT CMAKE_INCLUDE_FLAG_SEP_CXX) + +# for most systems a module is the same as a shared library +# so unless the variable CMAKE_MODULE_EXISTS is set just +# copy the values from the LIBRARY variables +IF(NOT CMAKE_MODULE_EXISTS) + SET(CMAKE_SHARED_MODULE_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}) + SET(CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS}) +ENDIF(NOT CMAKE_MODULE_EXISTS) + +# repeat for modules +IF(NOT CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS) + SET(CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS ${CMAKE_SHARED_MODULE_CREATE_C_FLAGS}) +ENDIF(NOT CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS) + +IF(NOT CMAKE_SHARED_MODULE_CXX_FLAGS) + SET(CMAKE_SHARED_MODULE_CXX_FLAGS ${CMAKE_SHARED_MODULE_C_FLAGS}) +ENDIF(NOT CMAKE_SHARED_MODULE_CXX_FLAGS) + +# Initialize CXX link type selection flags from C versions. +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + IF(NOT CMAKE_${type}_LINK_STATIC_CXX_FLAGS) + SET(CMAKE_${type}_LINK_STATIC_CXX_FLAGS + ${CMAKE_${type}_LINK_STATIC_C_FLAGS}) + ENDIF(NOT CMAKE_${type}_LINK_STATIC_CXX_FLAGS) + IF(NOT CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS) + SET(CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS + ${CMAKE_${type}_LINK_DYNAMIC_C_FLAGS}) + ENDIF(NOT CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS) +ENDFOREACH(type) + +# add the flags to the cache based +# on the initial values computed in the platform/*.cmake files +# use _INIT variables so that this only happens the first time +# and you can set these flags in the cmake cache +SET(CMAKE_CXX_FLAGS_INIT "$ENV{CXXFLAGS} ${CMAKE_CXX_FLAGS_INIT}") +# avoid just having a space as the initial value for the cache +IF(CMAKE_CXX_FLAGS_INIT STREQUAL " ") + SET(CMAKE_CXX_FLAGS_INIT) +ENDIF(CMAKE_CXX_FLAGS_INIT STREQUAL " ") +SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_INIT}" CACHE STRING + "Flags used by the compiler during all build types.") + +IF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) + SET (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG_INIT}" CACHE STRING + "Flags used by the compiler during debug builds.") + SET (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL_INIT}" CACHE STRING + "Flags used by the compiler during release minsize builds.") + SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE_INIT}" CACHE STRING + "Flags used by the compiler during release builds (/MD /Ob1 /Oi /Ot /Oy /Gs will produce slightly less optimized but smaller files).") + SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING + "Flags used by the compiler during Release with Debug Info builds.") + +ENDIF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) + +IF(CMAKE_CXX_STANDARD_LIBRARIES_INIT) + SET(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES_INIT}" + CACHE STRING "Libraries linked by defalut with all C++ applications.") + MARK_AS_ADVANCED(CMAKE_CXX_STANDARD_LIBRARIES) +ENDIF(CMAKE_CXX_STANDARD_LIBRARIES_INIT) + +INCLUDE(CMakeCommonLanguageInclude) + +# now define the following rules: +# CMAKE_CXX_CREATE_SHARED_LIBRARY +# CMAKE_CXX_CREATE_SHARED_MODULE +# CMAKE_CXX_COMPILE_OBJECT +# CMAKE_CXX_LINK_EXECUTABLE + +# variables supplied by the generator at use time +# +# the target without the suffix +# +# +# +# +# + +# CXX compiler information +# +# +# +# + +# Static library tools +# +# + + +# create a shared C++ library +IF(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY) + SET(CMAKE_CXX_CREATE_SHARED_LIBRARY + " -o ") +ENDIF(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY) + +# create a c++ shared module copy the shared library rule by default +IF(NOT CMAKE_CXX_CREATE_SHARED_MODULE) + SET(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_LIBRARY}) +ENDIF(NOT CMAKE_CXX_CREATE_SHARED_MODULE) + + +# Create a static archive incrementally for large object file counts. +# If CMAKE_CXX_CREATE_STATIC_LIBRARY is set it will override these. +IF(NOT DEFINED CMAKE_CXX_ARCHIVE_CREATE) + SET(CMAKE_CXX_ARCHIVE_CREATE " cr ") +ENDIF() +IF(NOT DEFINED CMAKE_CXX_ARCHIVE_APPEND) + SET(CMAKE_CXX_ARCHIVE_APPEND " r ") +ENDIF() +IF(NOT DEFINED CMAKE_CXX_ARCHIVE_FINISH) + SET(CMAKE_CXX_ARCHIVE_FINISH " ") +ENDIF() + +# compile a C++ file into an object file +IF(NOT CMAKE_CXX_COMPILE_OBJECT) + SET(CMAKE_CXX_COMPILE_OBJECT + " -o -c ") +ENDIF(NOT CMAKE_CXX_COMPILE_OBJECT) + +IF(NOT CMAKE_CXX_LINK_EXECUTABLE) + SET(CMAKE_CXX_LINK_EXECUTABLE + " -o ") +ENDIF(NOT CMAKE_CXX_LINK_EXECUTABLE) + +MARK_AS_ADVANCED( +CMAKE_BUILD_TOOL +CMAKE_VERBOSE_MAKEFILE +CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_DEBUG) + +SET(CMAKE_CXX_INFORMATION_LOADED 1) + diff --git a/Modules/CMakeCommonLanguageInclude.cmake b/Modules/CMakeCommonLanguageInclude.cmake new file mode 100644 index 0000000..a2929f1 --- /dev/null +++ b/Modules/CMakeCommonLanguageInclude.cmake @@ -0,0 +1,107 @@ + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# this file has flags that are shared across languages and sets +# cache values that can be initialized in the platform-compiler.cmake file +# it may be included by more than one language. + +SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS_INIT} $ENV{LDFLAGS}" + CACHE STRING "Flags used by the linker.") + + +IF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) +# default build type is none + IF(NOT CMAKE_NO_BUILD_TYPE) + SET (CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_INIT} CACHE STRING + "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.") + ENDIF(NOT CMAKE_NO_BUILD_TYPE) + + SET (CMAKE_EXE_LINKER_FLAGS_DEBUG ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT} CACHE STRING + "Flags used by the linker during debug builds.") + + SET (CMAKE_EXE_LINKER_FLAGS_MINSIZEREL ${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL_INIT} CACHE STRING + "Flags used by the linker during release minsize builds.") + + SET (CMAKE_EXE_LINKER_FLAGS_RELEASE ${CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT} CACHE STRING + "Flags used by the linker during release builds.") + + SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO + ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT} CACHE STRING + "Flags used by the linker during Release with Debug Info builds.") + + SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG ${CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT} CACHE STRING + "Flags used by the linker during debug builds.") + + SET (CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL ${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL_INIT} + CACHE STRING + "Flags used by the linker during release minsize builds.") + + SET (CMAKE_SHARED_LINKER_FLAGS_RELEASE ${CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT} CACHE STRING + "Flags used by the linker during release builds.") + + SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO + ${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT} CACHE STRING + "Flags used by the linker during Release with Debug Info builds.") + + SET (CMAKE_MODULE_LINKER_FLAGS_DEBUG ${CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT} CACHE STRING + "Flags used by the linker during debug builds.") + + SET (CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL ${CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL_INIT} + CACHE STRING + "Flags used by the linker during release minsize builds.") + + SET (CMAKE_MODULE_LINKER_FLAGS_RELEASE ${CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT} CACHE STRING + "Flags used by the linker during release builds.") + + SET (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO + ${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT} CACHE STRING + "Flags used by the linker during Release with Debug Info builds.") + +ENDIF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) +# shared linker flags +SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS_INIT} $ENV{LDFLAGS}" + CACHE STRING "Flags used by the linker during the creation of dll's.") + +# module linker flags +SET (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS_INIT} $ENV{LDFLAGS}" + CACHE STRING "Flags used by the linker during the creation of modules.") + +SET(CMAKE_BUILD_TOOL ${CMAKE_MAKE_PROGRAM} CACHE INTERNAL + "What is the target build tool cmake is generating for.") + + +MARK_AS_ADVANCED( +CMAKE_BUILD_TOOL +CMAKE_VERBOSE_MAKEFILE + +CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO + +CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO + +CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO + +) + diff --git a/Modules/CMakeCompilerABI.h b/Modules/CMakeCompilerABI.h new file mode 100644 index 0000000..26ae4db --- /dev/null +++ b/Modules/CMakeCompilerABI.h @@ -0,0 +1,36 @@ +/*--------------------------------------------------------------------------*/ + +/* Size of a pointer-to-data in bytes. */ +#define SIZEOF_DPTR (sizeof(void*)) +const char info_sizeof_dptr[] = { + 'I', 'N', 'F', 'O', ':', 's', 'i', 'z', 'e', 'o', 'f', '_', 'd', 'p', 't', 'r', '[', + ('0' + ((SIZEOF_DPTR / 10)%10)), + ('0' + (SIZEOF_DPTR % 10)), + ']','\0'}; + +/*--------------------------------------------------------------------------*/ + +/* Application Binary Interface. */ +#if defined(__sgi) && defined(_ABIO32) +# define ABI_ID "ELF O32" +#elif defined(__sgi) && defined(_ABIN32) +# define ABI_ID "ELF N32" +#elif defined(__sgi) && defined(_ABI64) +# define ABI_ID "ELF 64" + +/* Check for (some) ARM ABIs. + * See e.g. http://wiki.debian.org/ArmEabiPort for some information on this. */ +#elif defined(__GNU__) && defined(__ELF__) && defined(__ARM_EABI__) +# define ABI_ID "ELF ARMEABI" +#elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEB__) +# define ABI_ID "ELF ARM" +#elif defined(__GNU__) && defined(__ELF__) && defined(__ARMEL__) +# define ABI_ID "ELF ARM" + +#elif defined(__ELF__) +# define ABI_ID "ELF" +#endif + +#if defined(ABI_ID) +static char const info_abi[] = "INFO:abi[" ABI_ID "]"; +#endif diff --git a/Modules/CMakeConfigurableFile.in b/Modules/CMakeConfigurableFile.in new file mode 100644 index 0000000..4cf74a1 --- /dev/null +++ b/Modules/CMakeConfigurableFile.in @@ -0,0 +1,2 @@ +@CMAKE_CONFIGURABLE_FILE_CONTENT@ + diff --git a/Modules/CMakeDependentOption.cmake b/Modules/CMakeDependentOption.cmake new file mode 100644 index 0000000..8b8dc07 --- /dev/null +++ b/Modules/CMakeDependentOption.cmake @@ -0,0 +1,51 @@ +# - Macro to provide an option dependent on other options. +# This macro presents an option to the user only if a set of other +# conditions are true. When the option is not presented a default +# value is used, but any value set by the user is preserved for when +# the option is presented again. +# Example invocation: +# CMAKE_DEPENDENT_OPTION(USE_FOO "Use Foo" ON +# "USE_BAR;NOT USE_ZOT" OFF) +# If USE_BAR is true and USE_ZOT is false, this provides an option called +# USE_FOO that defaults to ON. Otherwise, it sets USE_FOO to OFF. If +# the status of USE_BAR or USE_ZOT ever changes, any value for the +# USE_FOO option is saved so that when the option is re-enabled it +# retains its old value. + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +MACRO(CMAKE_DEPENDENT_OPTION option doc default depends force) + IF(${option}_ISSET MATCHES "^${option}_ISSET$") + SET(${option}_AVAILABLE 1) + FOREACH(d ${depends}) + STRING(REGEX REPLACE " +" ";" CMAKE_DEPENDENT_OPTION_DEP "${d}") + IF(${CMAKE_DEPENDENT_OPTION_DEP}) + ELSE(${CMAKE_DEPENDENT_OPTION_DEP}) + SET(${option}_AVAILABLE 0) + ENDIF(${CMAKE_DEPENDENT_OPTION_DEP}) + ENDFOREACH(d) + IF(${option}_AVAILABLE) + OPTION(${option} "${doc}" "${default}") + SET(${option} "${${option}}" CACHE BOOL "${doc}" FORCE) + ELSE(${option}_AVAILABLE) + IF(${option} MATCHES "^${option}$") + ELSE(${option} MATCHES "^${option}$") + SET(${option} "${${option}}" CACHE INTERNAL "${doc}") + ENDIF(${option} MATCHES "^${option}$") + SET(${option} ${force}) + ENDIF(${option}_AVAILABLE) + ELSE(${option}_ISSET MATCHES "^${option}_ISSET$") + SET(${option} "${${option}_ISSET}") + ENDIF(${option}_ISSET MATCHES "^${option}_ISSET$") +ENDMACRO(CMAKE_DEPENDENT_OPTION) diff --git a/Modules/CMakeDetermineASM-ATTCompiler.cmake b/Modules/CMakeDetermineASM-ATTCompiler.cmake new file mode 100644 index 0000000..9dd2f11 --- /dev/null +++ b/Modules/CMakeDetermineASM-ATTCompiler.cmake @@ -0,0 +1,20 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# determine the compiler to use for ASM using AT&T syntax, e.g. GNU as + +SET(ASM_DIALECT "-ATT") +SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT ${_CMAKE_TOOLCHAIN_PREFIX}gas ${_CMAKE_TOOLCHAIN_PREFIX}as) +INCLUDE(CMakeDetermineASMCompiler) +SET(ASM_DIALECT) diff --git a/Modules/CMakeDetermineASMCompiler.cmake b/Modules/CMakeDetermineASMCompiler.cmake new file mode 100644 index 0000000..0a70d0a --- /dev/null +++ b/Modules/CMakeDetermineASMCompiler.cmake @@ -0,0 +1,182 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# determine the compiler to use for ASM programs + +IF(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER) + # prefer the environment variable ASM + IF($ENV{ASM${ASM_DIALECT}} MATCHES ".+") + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT "$ENV{ASM${ASM_DIALECT}}") + ENDIF($ENV{ASM${ASM_DIALECT}} MATCHES ".+") + + # finally list compilers to try + IF("ASM${ASM_DIALECT}" STREQUAL "ASM") # the generic assembler support + + IF(CMAKE_ASM_COMPILER_INIT) + SET(CMAKE_ASM_COMPILER_LIST ${CMAKE_ASM_COMPILER_INIT}) + ELSE(CMAKE_ASM_COMPILER_INIT) + + IF(CMAKE_C_COMPILER) + SET(CMAKE_ASM_COMPILER "${CMAKE_C_COMPILER}" CACHE FILEPATH "The ASM compiler") + SET(CMAKE_ASM_COMPILER_ID "${CMAKE_C_COMPILER_ID}") + ELSEIF(CMAKE_CXX_COMPILER) + SET(CMAKE_ASM_COMPILER "${CMAKE_CXX_COMPILER}" CACHE FILEPATH "The ASM compiler") + SET(CMAKE_ASM_COMPILER_ID "${CMAKE_CXX_COMPILER_ID}") + ELSE(CMAKE_CXX_COMPILER) + # List all default C and CXX compilers + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}gcc ${_CMAKE_TOOLCHAIN_PREFIX}cc cl bcc xlc + ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ CC aCC cl bcc xlC) + ENDIF(CMAKE_C_COMPILER) + + ENDIF(CMAKE_ASM_COMPILER_INIT) + + + ELSE("ASM${ASM_DIALECT}" STREQUAL "ASM") # some specific assembler "dialect" + + IF(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST ${CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT}) + ELSE(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT) + MESSAGE(FATAL_ERROR "CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT must be preset !") + ENDIF(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT) + + ENDIF("ASM${ASM_DIALECT}" STREQUAL "ASM") + + + # Find the compiler. + IF (_CMAKE_USER_CXX_COMPILER_PATH OR _CMAKE_USER_C_COMPILER_PATH) + FIND_PROGRAM(CMAKE_ASM${ASM_DIALECT}_COMPILER NAMES ${CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST} PATHS ${_CMAKE_USER_C_COMPILER_PATH} ${_CMAKE_USER_CXX_COMPILER_PATH} DOC "Assembler" NO_DEFAULT_PATH) + ENDIF (_CMAKE_USER_CXX_COMPILER_PATH OR _CMAKE_USER_C_COMPILER_PATH) + FIND_PROGRAM(CMAKE_ASM${ASM_DIALECT}_COMPILER NAMES ${CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST} PATHS ${_CMAKE_TOOLCHAIN_LOCATION} DOC "Assembler") + +ELSE(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER) + + # we only get here if CMAKE_ASM${ASM_DIALECT}_COMPILER was specified using -D or a pre-made CMakeCache.txt + # (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE + # + # if a compiler was specified by the user but without path, + # now try to find it with the full path + # if it is found, force it into the cache, + # if not, don't overwrite the setting (which was given by the user) with "NOTFOUND" + GET_FILENAME_COMPONENT(_CMAKE_USER_ASM${ASM_DIALECT}_COMPILER_PATH "${CMAKE_ASM${ASM_DIALECT}_COMPILER}" PATH) + IF(NOT _CMAKE_USER_ASM${ASM_DIALECT}_COMPILER_PATH) + FIND_PROGRAM(CMAKE_ASM${ASM_DIALECT}_COMPILER_WITH_PATH NAMES ${CMAKE_ASM${ASM_DIALECT}_COMPILER}) + MARK_AS_ADVANCED(CMAKE_ASM${ASM_DIALECT}_COMPILER_WITH_PATH) + IF(CMAKE_ASM${ASM_DIALECT}_COMPILER_WITH_PATH) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER ${CMAKE_ASM${ASM_DIALECT}_COMPILER_WITH_PATH} CACHE FILEPATH "Assembler" FORCE) + ENDIF(CMAKE_ASM${ASM_DIALECT}_COMPILER_WITH_PATH) + ENDIF(NOT _CMAKE_USER_ASM${ASM_DIALECT}_COMPILER_PATH) +ENDIF(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER) +MARK_AS_ADVANCED(CMAKE_ASM${ASM_DIALECT}_COMPILER) + +IF (NOT _CMAKE_TOOLCHAIN_LOCATION) + GET_FILENAME_COMPONENT(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_ASM${ASM_DIALECT}_COMPILER}" PATH) +ENDIF (NOT _CMAKE_TOOLCHAIN_LOCATION) + + +IF(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) + + # Table of per-vendor compiler id flags with expected output. + LIST(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS GNU ) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_GNU "--version") + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_GNU "(GNU assembler)|(GCC)|(Free Software Foundation)") + + LIST(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS HP ) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_HP "-V") + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_HP "HP C") + + LIST(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS Intel ) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_Intel "--version") + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_Intel "(ICC)") + + LIST(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS SunPro ) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_SunPro "-V") + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_SunPro "Sun C") + + LIST(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS XL ) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_XL "-qversion") + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_XL "XL C") + + LIST(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS MSVC ) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_MSVC "/?") + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_MSVC "Microsoft") + + LIST(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS TI_DSP ) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_TI_DSP "-h") + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_TI_DSP "Texas Instruments") + + INCLUDE(CMakeDetermineCompilerId) + CMAKE_DETERMINE_COMPILER_ID_VENDOR(ASM${ASM_DIALECT}) + +ENDIF() + +IF(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) + MESSAGE(STATUS "The ASM${ASM_DIALECT} compiler identification is ${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}") +ELSE(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) + MESSAGE(STATUS "The ASM${ASM_DIALECT} compiler identification is unknown") +ENDIF(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) + + + +# If we have a gas/as cross compiler, they have usually some prefix, like +# e.g. powerpc-linux-gas, arm-elf-gas or i586-mingw32msvc-gas , optionally +# with a 3-component version number at the end +# The other tools of the toolchain usually have the same prefix +# NAME_WE cannot be used since then this test will fail for names lile +# "arm-unknown-nto-qnx6.3.0-gas.exe", where BASENAME would be +# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-" +IF (NOT _CMAKE_TOOLCHAIN_PREFIX) + GET_FILENAME_COMPONENT(COMPILER_BASENAME "${CMAKE_ASM${ASM_DIALECT}_COMPILER}" NAME) + IF (COMPILER_BASENAME MATCHES "^(.+-)g?as(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") + SET(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) + ENDIF (COMPILER_BASENAME MATCHES "^(.+-)g?as(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") +ENDIF (NOT _CMAKE_TOOLCHAIN_PREFIX) + +# Now try the C compiler regexp: +IF (NOT _CMAKE_TOOLCHAIN_PREFIX) + IF (COMPILER_BASENAME MATCHES "^(.+-)g?cc(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") + SET(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) + ENDIF (COMPILER_BASENAME MATCHES "^(.+-)g?cc(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") +ENDIF (NOT _CMAKE_TOOLCHAIN_PREFIX) + +# Finally try the CXX compiler regexp: +IF (NOT _CMAKE_TOOLCHAIN_PREFIX) + IF (COMPILER_BASENAME MATCHES "^(.+-)[gc]\\+\\+(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") + SET(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) + ENDIF (COMPILER_BASENAME MATCHES "^(.+-)[gc]\\+\\+(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") +ENDIF (NOT _CMAKE_TOOLCHAIN_PREFIX) + + +INCLUDE(CMakeFindBinUtils) + +SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_ENV_VAR "ASM${ASM_DIALECT}") + +IF(CMAKE_ASM${ASM_DIALECT}_COMPILER) + MESSAGE(STATUS "Found assembler: ${CMAKE_ASM${ASM_DIALECT}_COMPILER}") +ELSE(CMAKE_ASM${ASM_DIALECT}_COMPILER) + MESSAGE(STATUS "Didn't find assembler") +ENDIF(CMAKE_ASM${ASM_DIALECT}_COMPILER) + + +SET(_CMAKE_ASM_COMPILER "${CMAKE_ASM${ASM_DIALECT}_COMPILER}") +SET(_CMAKE_ASM_COMPILER_ID "${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}") +SET(_CMAKE_ASM_COMPILER_ARG1 "${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARG1}") +SET(_CMAKE_ASM_COMPILER_ENV_VAR "${CMAKE_ASM${ASM_DIALECT}_COMPILER_ENV_VAR}") + +# configure variables set in this file for fast reload later on +CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeASMCompiler.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeASM${ASM_DIALECT}Compiler.cmake IMMEDIATE @ONLY) + +SET(_CMAKE_ASM_COMPILER) +SET(_CMAKE_ASM_COMPILER_ARG1) +SET(_CMAKE_ASM_COMPILER_ENV_VAR) diff --git a/Modules/CMakeDetermineASM_MASMCompiler.cmake b/Modules/CMakeDetermineASM_MASMCompiler.cmake new file mode 100644 index 0000000..e23f7db --- /dev/null +++ b/Modules/CMakeDetermineASM_MASMCompiler.cmake @@ -0,0 +1,27 @@ + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Find the MS assembler (masm or masm64) + +SET(ASM_DIALECT "_MASM") + +# if we are using the 64bit cl compiler, assume we also want the 64bit assembler +IF(CMAKE_CL_64) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT ml64) +ELSE(CMAKE_CL_64) + SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT ml) +ENDIF(CMAKE_CL_64) + +INCLUDE(CMakeDetermineASMCompiler) +SET(ASM_DIALECT) diff --git a/Modules/CMakeDetermineASM_NASMCompiler.cmake b/Modules/CMakeDetermineASM_NASMCompiler.cmake new file mode 100644 index 0000000..d184c0a --- /dev/null +++ b/Modules/CMakeDetermineASM_NASMCompiler.cmake @@ -0,0 +1,27 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Find the nasm assembler. yasm (http://www.tortall.net/projects/yasm/) is nasm compatible + +SET(CMAKE_ASM_NASM_COMPILER_INIT nasm yasm) + +IF(NOT CMAKE_ASM_NASM_COMPILER) + FIND_PROGRAM(CMAKE_ASM_NASM_COMPILER nasm + "$ENV{ProgramFiles}/NASM") +ENDIF(NOT CMAKE_ASM_NASM_COMPILER) + +# Load the generic DetermineASM compiler file with the DIALECT set properly: +SET(ASM_DIALECT "_NASM") +INCLUDE(CMakeDetermineASMCompiler) +SET(ASM_DIALECT) diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake new file mode 100644 index 0000000..e2e268f --- /dev/null +++ b/Modules/CMakeDetermineCCompiler.cmake @@ -0,0 +1,181 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# determine the compiler to use for C programs +# NOTE, a generator may set CMAKE_C_COMPILER before +# loading this file to force a compiler. +# use environment variable CC first if defined by user, next use +# the cmake variable CMAKE_GENERATOR_CC which can be defined by a generator +# as a default compiler +# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used +# as prefix for the tools (e.g. arm-elf-gcc, arm-elf-ar etc.). This works +# currently with the GNU crosscompilers. +# +# Sets the following variables: +# CMAKE_C_COMPILER +# CMAKE_AR +# CMAKE_RANLIB +# CMAKE_COMPILER_IS_GNUCC +# +# If not already set before, it also sets +# _CMAKE_TOOLCHAIN_PREFIX + +IF(NOT CMAKE_C_COMPILER) + SET(CMAKE_CXX_COMPILER_INIT NOTFOUND) + + # prefer the environment variable CC + IF($ENV{CC} MATCHES ".+") + GET_FILENAME_COMPONENT(CMAKE_C_COMPILER_INIT $ENV{CC} PROGRAM PROGRAM_ARGS CMAKE_C_FLAGS_ENV_INIT) + IF(CMAKE_C_FLAGS_ENV_INIT) + SET(CMAKE_C_COMPILER_ARG1 "${CMAKE_C_FLAGS_ENV_INIT}" CACHE STRING "First argument to C compiler") + ENDIF(CMAKE_C_FLAGS_ENV_INIT) + IF(NOT EXISTS ${CMAKE_C_COMPILER_INIT}) + MESSAGE(FATAL_ERROR "Could not find compiler set in environment variable CC:\n$ENV{CC}.") + ENDIF(NOT EXISTS ${CMAKE_C_COMPILER_INIT}) + ENDIF($ENV{CC} MATCHES ".+") + + # next try prefer the compiler specified by the generator + IF(CMAKE_GENERATOR_CC) + IF(NOT CMAKE_C_COMPILER_INIT) + SET(CMAKE_C_COMPILER_INIT ${CMAKE_GENERATOR_CC}) + ENDIF(NOT CMAKE_C_COMPILER_INIT) + ENDIF(CMAKE_GENERATOR_CC) + + # finally list compilers to try + IF(CMAKE_C_COMPILER_INIT) + SET(CMAKE_C_COMPILER_LIST ${CMAKE_C_COMPILER_INIT}) + ELSE(CMAKE_C_COMPILER_INIT) + SET(CMAKE_C_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}gcc ${_CMAKE_TOOLCHAIN_PREFIX}cc cl bcc xlc) + ENDIF(CMAKE_C_COMPILER_INIT) + + # Find the compiler. + IF (_CMAKE_USER_CXX_COMPILER_PATH) + FIND_PROGRAM(CMAKE_C_COMPILER NAMES ${CMAKE_C_COMPILER_LIST} PATHS ${_CMAKE_USER_CXX_COMPILER_PATH} DOC "C compiler" NO_DEFAULT_PATH) + ENDIF (_CMAKE_USER_CXX_COMPILER_PATH) + FIND_PROGRAM(CMAKE_C_COMPILER NAMES ${CMAKE_C_COMPILER_LIST} DOC "C compiler") + + IF(CMAKE_C_COMPILER_INIT AND NOT CMAKE_C_COMPILER) + SET(CMAKE_C_COMPILER "${CMAKE_C_COMPILER_INIT}" CACHE FILEPATH "C compiler" FORCE) + ENDIF(CMAKE_C_COMPILER_INIT AND NOT CMAKE_C_COMPILER) +ELSE(NOT CMAKE_C_COMPILER) + + # we only get here if CMAKE_C_COMPILER was specified using -D or a pre-made CMakeCache.txt + # (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE + # if CMAKE_C_COMPILER is a list of length 2, use the first item as + # CMAKE_C_COMPILER and the 2nd one as CMAKE_C_COMPILER_ARG1 + + LIST(LENGTH CMAKE_C_COMPILER _CMAKE_C_COMPILER_LIST_LENGTH) + IF("${_CMAKE_C_COMPILER_LIST_LENGTH}" EQUAL 2) + LIST(GET CMAKE_C_COMPILER 1 CMAKE_C_COMPILER_ARG1) + LIST(GET CMAKE_C_COMPILER 0 CMAKE_C_COMPILER) + ENDIF("${_CMAKE_C_COMPILER_LIST_LENGTH}" EQUAL 2) + + # if a compiler was specified by the user but without path, + # now try to find it with the full path + # if it is found, force it into the cache, + # if not, don't overwrite the setting (which was given by the user) with "NOTFOUND" + # if the C compiler already had a path, reuse it for searching the CXX compiler + GET_FILENAME_COMPONENT(_CMAKE_USER_C_COMPILER_PATH "${CMAKE_C_COMPILER}" PATH) + IF(NOT _CMAKE_USER_C_COMPILER_PATH) + FIND_PROGRAM(CMAKE_C_COMPILER_WITH_PATH NAMES ${CMAKE_C_COMPILER}) + MARK_AS_ADVANCED(CMAKE_C_COMPILER_WITH_PATH) + IF(CMAKE_C_COMPILER_WITH_PATH) + SET(CMAKE_C_COMPILER ${CMAKE_C_COMPILER_WITH_PATH} CACHE STRING "C compiler" FORCE) + ENDIF(CMAKE_C_COMPILER_WITH_PATH) + ENDIF(NOT _CMAKE_USER_C_COMPILER_PATH) +ENDIF(NOT CMAKE_C_COMPILER) +MARK_AS_ADVANCED(CMAKE_C_COMPILER) + +IF (NOT _CMAKE_TOOLCHAIN_LOCATION) + GET_FILENAME_COMPONENT(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_C_COMPILER}" PATH) +ENDIF (NOT _CMAKE_TOOLCHAIN_LOCATION) + +# Build a small source file to identify the compiler. +IF(${CMAKE_GENERATOR} MATCHES "Visual Studio") + SET(CMAKE_C_COMPILER_ID_RUN 1) + SET(CMAKE_C_PLATFORM_ID "Windows") + SET(CMAKE_C_COMPILER_ID "MSVC") +ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio") + +IF(NOT CMAKE_C_COMPILER_ID_RUN) + SET(CMAKE_C_COMPILER_ID_RUN 1) + + # Each entry in this list is a set of extra flags to try + # adding to the compile line to see if it helps produce + # a valid identification file. + SET(CMAKE_C_COMPILER_ID_TEST_FLAGS + # Try compiling to an object file only. + "-c" + + # Try enabling ANSI mode on HP. + "-Aa" + ) + + # Try to identify the compiler. + SET(CMAKE_C_COMPILER_ID) + FILE(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in + CMAKE_C_COMPILER_ID_PLATFORM_CONTENT) + INCLUDE(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake) + CMAKE_DETERMINE_COMPILER_ID(C CFLAGS CMakeCCompilerId.c) + + # Set old compiler and platform id variables. + IF("${CMAKE_C_COMPILER_ID}" MATCHES "GNU") + SET(CMAKE_COMPILER_IS_GNUCC 1) + ENDIF("${CMAKE_C_COMPILER_ID}" MATCHES "GNU") + IF("${CMAKE_C_PLATFORM_ID}" MATCHES "MinGW") + SET(CMAKE_COMPILER_IS_MINGW 1) + ELSEIF("${CMAKE_C_PLATFORM_ID}" MATCHES "Cygwin") + SET(CMAKE_COMPILER_IS_CYGWIN 1) + ENDIF("${CMAKE_C_PLATFORM_ID}" MATCHES "MinGW") +ENDIF(NOT CMAKE_C_COMPILER_ID_RUN) + +# If we have a gcc cross compiler, they have usually some prefix, like +# e.g. powerpc-linux-gcc, arm-elf-gcc or i586-mingw32msvc-gcc, optionally +# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2). +# The other tools of the toolchain usually have the same prefix +# NAME_WE cannot be used since then this test will fail for names lile +# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be +# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-" +IF (CMAKE_CROSSCOMPILING + AND "${CMAKE_C_COMPILER_ID}" MATCHES "GNU" + AND NOT _CMAKE_TOOLCHAIN_PREFIX) + GET_FILENAME_COMPONENT(COMPILER_BASENAME "${CMAKE_C_COMPILER}" NAME) + IF (COMPILER_BASENAME MATCHES "^(.+-)g?cc(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") + SET(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) + ENDIF (COMPILER_BASENAME MATCHES "^(.+-)g?cc(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") + + # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils + # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.) + IF ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$") + SET(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) + ENDIF ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$") + +ENDIF (CMAKE_CROSSCOMPILING + AND "${CMAKE_C_COMPILER_ID}" MATCHES "GNU" + AND NOT _CMAKE_TOOLCHAIN_PREFIX) + + + + +INCLUDE(CMakeFindBinUtils) +IF(MSVC_C_ARCHITECTURE_ID) + SET(SET_MSVC_C_ARCHITECTURE_ID + "SET(MSVC_C_ARCHITECTURE_ID ${MSVC_C_ARCHITECTURE_ID})") +ENDIF(MSVC_C_ARCHITECTURE_ID) +# configure variables set in this file for fast reload later on +CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in + "${CMAKE_PLATFORM_ROOT_BIN}/CMakeCCompiler.cmake" + @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0 + ) +SET(CMAKE_C_COMPILER_ENV_VAR "CC") diff --git a/Modules/CMakeDetermineCXXCompiler.cmake b/Modules/CMakeDetermineCXXCompiler.cmake new file mode 100644 index 0000000..8298369 --- /dev/null +++ b/Modules/CMakeDetermineCXXCompiler.cmake @@ -0,0 +1,187 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# determine the compiler to use for C++ programs +# NOTE, a generator may set CMAKE_CXX_COMPILER before +# loading this file to force a compiler. +# use environment variable CXX first if defined by user, next use +# the cmake variable CMAKE_GENERATOR_CXX which can be defined by a generator +# as a default compiler +# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used +# as prefix for the tools (e.g. arm-elf-g++, arm-elf-ar etc.) +# +# Sets the following variables: +# CMAKE_CXX_COMPILER +# CMAKE_COMPILER_IS_GNUCXX +# CMAKE_AR +# CMAKE_RANLIB +# +# If not already set before, it also sets +# _CMAKE_TOOLCHAIN_PREFIX + +IF(NOT CMAKE_CXX_COMPILER) + SET(CMAKE_CXX_COMPILER_INIT NOTFOUND) + + # prefer the environment variable CXX + IF($ENV{CXX} MATCHES ".+") + GET_FILENAME_COMPONENT(CMAKE_CXX_COMPILER_INIT $ENV{CXX} PROGRAM PROGRAM_ARGS CMAKE_CXX_FLAGS_ENV_INIT) + IF(CMAKE_CXX_FLAGS_ENV_INIT) + SET(CMAKE_CXX_COMPILER_ARG1 "${CMAKE_CXX_FLAGS_ENV_INIT}" CACHE STRING "First argument to CXX compiler") + ENDIF(CMAKE_CXX_FLAGS_ENV_INIT) + IF(NOT EXISTS ${CMAKE_CXX_COMPILER_INIT}) + MESSAGE(FATAL_ERROR "Could not find compiler set in environment variable CXX:\n$ENV{CXX}.\n${CMAKE_CXX_COMPILER_INIT}") + ENDIF(NOT EXISTS ${CMAKE_CXX_COMPILER_INIT}) + ENDIF($ENV{CXX} MATCHES ".+") + + # next prefer the generator specified compiler + IF(CMAKE_GENERATOR_CXX) + IF(NOT CMAKE_CXX_COMPILER_INIT) + SET(CMAKE_CXX_COMPILER_INIT ${CMAKE_GENERATOR_CXX}) + ENDIF(NOT CMAKE_CXX_COMPILER_INIT) + ENDIF(CMAKE_GENERATOR_CXX) + + # finally list compilers to try + IF(CMAKE_CXX_COMPILER_INIT) + SET(CMAKE_CXX_COMPILER_LIST ${CMAKE_CXX_COMPILER_INIT}) + ELSE(CMAKE_CXX_COMPILER_INIT) + SET(CMAKE_CXX_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ CC aCC cl bcc xlC) + ENDIF(CMAKE_CXX_COMPILER_INIT) + + # Find the compiler. + IF (_CMAKE_USER_C_COMPILER_PATH) + FIND_PROGRAM(CMAKE_CXX_COMPILER NAMES ${CMAKE_CXX_COMPILER_LIST} PATHS ${_CMAKE_USER_C_COMPILER_PATH} DOC "C++ compiler" NO_DEFAULT_PATH) + ENDIF (_CMAKE_USER_C_COMPILER_PATH) + FIND_PROGRAM(CMAKE_CXX_COMPILER NAMES ${CMAKE_CXX_COMPILER_LIST} DOC "C++ compiler") + + IF(CMAKE_CXX_COMPILER_INIT AND NOT CMAKE_CXX_COMPILER) + SET(CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER_INIT}" CACHE FILEPATH "C++ compiler" FORCE) + ENDIF(CMAKE_CXX_COMPILER_INIT AND NOT CMAKE_CXX_COMPILER) +ELSE(NOT CMAKE_CXX_COMPILER) + +# we only get here if CMAKE_CXX_COMPILER was specified using -D or a pre-made CMakeCache.txt +# (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE +# +# if CMAKE_CXX_COMPILER is a list of length 2, use the first item as +# CMAKE_CXX_COMPILER and the 2nd one as CMAKE_CXX_COMPILER_ARG1 + + LIST(LENGTH CMAKE_CXX_COMPILER _CMAKE_CXX_COMPILER_LIST_LENGTH) + IF("${_CMAKE_CXX_COMPILER_LIST_LENGTH}" EQUAL 2) + LIST(GET CMAKE_CXX_COMPILER 1 CMAKE_CXX_COMPILER_ARG1) + LIST(GET CMAKE_CXX_COMPILER 0 CMAKE_CXX_COMPILER) + ENDIF("${_CMAKE_CXX_COMPILER_LIST_LENGTH}" EQUAL 2) + +# if a compiler was specified by the user but without path, +# now try to find it with the full path +# if it is found, force it into the cache, +# if not, don't overwrite the setting (which was given by the user) with "NOTFOUND" +# if the CXX compiler already had a path, reuse it for searching the C compiler + GET_FILENAME_COMPONENT(_CMAKE_USER_CXX_COMPILER_PATH "${CMAKE_CXX_COMPILER}" PATH) + IF(NOT _CMAKE_USER_CXX_COMPILER_PATH) + FIND_PROGRAM(CMAKE_CXX_COMPILER_WITH_PATH NAMES ${CMAKE_CXX_COMPILER}) + MARK_AS_ADVANCED(CMAKE_CXX_COMPILER_WITH_PATH) + IF(CMAKE_CXX_COMPILER_WITH_PATH) + SET(CMAKE_CXX_COMPILER ${CMAKE_CXX_COMPILER_WITH_PATH} CACHE STRING "CXX compiler" FORCE) + ENDIF(CMAKE_CXX_COMPILER_WITH_PATH) + ENDIF(NOT _CMAKE_USER_CXX_COMPILER_PATH) +ENDIF(NOT CMAKE_CXX_COMPILER) +MARK_AS_ADVANCED(CMAKE_CXX_COMPILER) + +IF (NOT _CMAKE_TOOLCHAIN_LOCATION) + GET_FILENAME_COMPONENT(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_CXX_COMPILER}" PATH) +ENDIF (NOT _CMAKE_TOOLCHAIN_LOCATION) + +# This block was used before the compiler was identified by building a +# source file. Unless g++ crashes when building a small C++ +# executable this should no longer be needed. +# +# The g++ that comes with BeOS 5 segfaults if you run "g++ -E" +# ("gcc -E" is fine), which throws up a system dialog box that hangs cmake +# until the user clicks "OK"...so for now, we just assume it's g++. +# IF(BEOS) +# SET(CMAKE_COMPILER_IS_GNUCXX 1) +# SET(CMAKE_COMPILER_IS_GNUCXX_RUN 1) +# ENDIF(BEOS) + +# Build a small source file to identify the compiler. +IF(${CMAKE_GENERATOR} MATCHES "Visual Studio") + SET(CMAKE_CXX_COMPILER_ID_RUN 1) + SET(CMAKE_CXX_PLATFORM_ID "Windows") + SET(CMAKE_CXX_COMPILER_ID "MSVC") +ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio") +IF(NOT CMAKE_CXX_COMPILER_ID_RUN) + SET(CMAKE_CXX_COMPILER_ID_RUN 1) + + # Each entry in this list is a set of extra flags to try + # adding to the compile line to see if it helps produce + # a valid identification file. + SET(CMAKE_CXX_COMPILER_ID_TEST_FLAGS + # Try compiling to an object file only. + "-c" + ) + + # Try to identify the compiler. + SET(CMAKE_CXX_COMPILER_ID) + FILE(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in + CMAKE_CXX_COMPILER_ID_PLATFORM_CONTENT) + INCLUDE(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake) + CMAKE_DETERMINE_COMPILER_ID(CXX CXXFLAGS CMakeCXXCompilerId.cpp) + + # Set old compiler and platform id variables. + IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") + SET(CMAKE_COMPILER_IS_GNUCXX 1) + ENDIF("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") + IF("${CMAKE_CXX_PLATFORM_ID}" MATCHES "MinGW") + SET(CMAKE_COMPILER_IS_MINGW 1) + ELSEIF("${CMAKE_CXX_PLATFORM_ID}" MATCHES "Cygwin") + SET(CMAKE_COMPILER_IS_CYGWIN 1) + ENDIF("${CMAKE_CXX_PLATFORM_ID}" MATCHES "MinGW") +ENDIF(NOT CMAKE_CXX_COMPILER_ID_RUN) + +# if we have a g++ cross compiler, they have usually some prefix, like +# e.g. powerpc-linux-g++, arm-elf-g++ or i586-mingw32msvc-g++ , optionally +# with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2). +# The other tools of the toolchain usually have the same prefix +# NAME_WE cannot be used since then this test will fail for names lile +# "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be +# "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-" +IF (CMAKE_CROSSCOMPILING + AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" + AND NOT _CMAKE_TOOLCHAIN_PREFIX) + GET_FILENAME_COMPONENT(COMPILER_BASENAME "${CMAKE_CXX_COMPILER}" NAME) + IF (COMPILER_BASENAME MATCHES "^(.+-)[gc]\\+\\+(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") + SET(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) + ENDIF (COMPILER_BASENAME MATCHES "^(.+-)[gc]\\+\\+(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$") + + # if "llvm-" is part of the prefix, remove it, since llvm doesn't have its own binutils + # but uses the regular ar, objcopy, etc. (instead of llvm-objcopy etc.) + IF ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$") + SET(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1}) + ENDIF ("${_CMAKE_TOOLCHAIN_PREFIX}" MATCHES "(.+-)?llvm-$") + +ENDIF (CMAKE_CROSSCOMPILING + AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" + AND NOT _CMAKE_TOOLCHAIN_PREFIX) + +INCLUDE(CMakeFindBinUtils) +IF(MSVC_CXX_ARCHITECTURE_ID) + SET(SET_MSVC_CXX_ARCHITECTURE_ID + "SET(MSVC_CXX_ARCHITECTURE_ID ${MSVC_CXX_ARCHITECTURE_ID})") +ENDIF(MSVC_CXX_ARCHITECTURE_ID) +# configure all variables set in this file +CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCXXCompiler.cmake + @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0 + ) + +SET(CMAKE_CXX_COMPILER_ENV_VAR "CXX") diff --git a/Modules/CMakeDetermineCompilerABI.cmake b/Modules/CMakeDetermineCompilerABI.cmake new file mode 100644 index 0000000..1c9899e --- /dev/null +++ b/Modules/CMakeDetermineCompilerABI.cmake @@ -0,0 +1,131 @@ + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Function to compile a source file to identify the compiler ABI. +# This is used internally by CMake and should not be included by user +# code. + +INCLUDE(${CMAKE_ROOT}/Modules/CMakeParseImplicitLinkInfo.cmake) + +FUNCTION(CMAKE_DETERMINE_COMPILER_ABI lang src) + IF(NOT DEFINED CMAKE_DETERMINE_${lang}_ABI_COMPILED) + MESSAGE(STATUS "Detecting ${lang} compiler ABI info") + + # Compile the ABI identification source. + SET(BIN "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeDetermineCompilerABI_${lang}.bin") + SET(CMAKE_FLAGS ) + IF(DEFINED CMAKE_${lang}_VERBOSE_FLAG) + SET(CMAKE_FLAGS "-DCMAKE_EXE_LINKER_FLAGS=${CMAKE_${lang}_VERBOSE_FLAG}") + ENDIF() + TRY_COMPILE(CMAKE_DETERMINE_${lang}_ABI_COMPILED + ${CMAKE_BINARY_DIR} ${src} + CMAKE_FLAGS "${CMAKE_FLAGS}" + "-DCMAKE_${lang}_STANDARD_LIBRARIES=" + # We need ignore these warnings because some platforms need + # CMAKE_${lang}_STANDARD_LIBRARIES to link properly and we + # don't care when we are just determining the ABI. + "--no-warn-unused-cli" + OUTPUT_VARIABLE OUTPUT + COPY_FILE "${BIN}" + ) + + # Load the resulting information strings. + IF(CMAKE_DETERMINE_${lang}_ABI_COMPILED) + MESSAGE(STATUS "Detecting ${lang} compiler ABI info - done") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Detecting ${lang} compiler ABI info compiled with the following output:\n${OUTPUT}\n\n") + FILE(STRINGS "${BIN}" ABI_STRINGS LIMIT_COUNT 2 REGEX "INFO:[^[]*\\[") + FOREACH(info ${ABI_STRINGS}) + IF("${info}" MATCHES ".*INFO:sizeof_dptr\\[0*([^]]*)\\].*") + STRING(REGEX REPLACE ".*INFO:sizeof_dptr\\[0*([^]]*)\\].*" "\\1" ABI_SIZEOF_DPTR "${info}") + ENDIF("${info}" MATCHES ".*INFO:sizeof_dptr\\[0*([^]]*)\\].*") + IF("${info}" MATCHES ".*INFO:abi\\[([^]]*)\\].*") + STRING(REGEX REPLACE ".*INFO:abi\\[([^]]*)\\].*" "\\1" ABI_NAME "${info}") + ENDIF("${info}" MATCHES ".*INFO:abi\\[([^]]*)\\].*") + ENDFOREACH(info) + + IF(ABI_SIZEOF_DPTR) + SET(CMAKE_${lang}_SIZEOF_DATA_PTR "${ABI_SIZEOF_DPTR}" PARENT_SCOPE) + ELSEIF(CMAKE_${lang}_SIZEOF_DATA_PTR_DEFAULT) + SET(CMAKE_${lang}_SIZEOF_DATA_PTR "${CMAKE_${lang}_SIZEOF_DATA_PTR_DEFAULT}" PARENT_SCOPE) + ENDIF(ABI_SIZEOF_DPTR) + + IF(ABI_NAME) + SET(CMAKE_${lang}_COMPILER_ABI "${ABI_NAME}" PARENT_SCOPE) + ENDIF(ABI_NAME) + + # Parse implicit linker information for this language, if available. + SET(implicit_dirs "") + SET(implicit_libs "") + SET(MULTI_ARCH FALSE) + IF(DEFINED CMAKE_OSX_ARCHITECTURES) + IF( "${CMAKE_OSX_ARCHITECTURES}" MATCHES ";" ) + SET(MULTI_ARCH TRUE) + ENDIF() + ENDIF() + IF(CMAKE_${lang}_VERBOSE_FLAG + # Implicit link information cannot be used explicitly for + # multiple OS X architectures, so we skip it. + AND NOT MULTI_ARCH + # Skip this with Xcode for now. + AND NOT "${CMAKE_GENERATOR}" MATCHES Xcode) + CMAKE_PARSE_IMPLICIT_LINK_INFO("${OUTPUT}" implicit_libs implicit_dirs log + "${CMAKE_${lang}_IMPLICIT_OBJECT_REGEX}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Parsed ${lang} implicit link information from above output:\n${log}\n\n") + ENDIF() + # for VS IDE Intel Fortran we have to figure out the + # implicit link path for the fortran run time using + # a try-compile + IF("${lang}" MATCHES "Fortran" + AND "${CMAKE_GENERATOR}" MATCHES "Visual Studio") + SET(_desc "Determine Intel Fortran Compiler Implicit Link Path") + MESSAGE(STATUS "${_desc}") + # Build a sample project which reports symbols. + TRY_COMPILE(IFORT_LIB_PATH_COMPILED + ${CMAKE_BINARY_DIR}/CMakeFiles/IntelVSImplicitPath + ${CMAKE_ROOT}/Modules/IntelVSImplicitPath + IntelFortranImplicit + CMAKE_FLAGS + "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}" + OUTPUT_VARIABLE _output) + FILE(WRITE + "${CMAKE_BINARY_DIR}/CMakeFiles/IntelVSImplicitPath/output.txt" + "${_output}") + INCLUDE(${CMAKE_BINARY_DIR}/CMakeFiles/IntelVSImplicitPath/output.cmake OPTIONAL) + SET(_desc "Determine Intel Fortran Compiler Implicit Link Path -- done") + MESSAGE(STATUS "${_desc}") + ENDIF() + + SET(CMAKE_${lang}_IMPLICIT_LINK_LIBRARIES "${implicit_libs}" PARENT_SCOPE) + SET(CMAKE_${lang}_IMPLICIT_LINK_DIRECTORIES "${implicit_dirs}" PARENT_SCOPE) + + # Detect library architecture directory name. + IF(CMAKE_LIBRARY_ARCHITECTURE_REGEX) + FOREACH(dir ${implicit_dirs}) + IF("${dir}" MATCHES "/lib/${CMAKE_LIBRARY_ARCHITECTURE_REGEX}$") + GET_FILENAME_COMPONENT(arch "${dir}" NAME) + SET(CMAKE_${lang}_LIBRARY_ARCHITECTURE "${arch}" PARENT_SCOPE) + BREAK() + ENDIF() + ENDFOREACH() + ENDIF() + + ELSE(CMAKE_DETERMINE_${lang}_ABI_COMPILED) + MESSAGE(STATUS "Detecting ${lang} compiler ABI info - failed") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Detecting ${lang} compiler ABI info failed to compile with the following output:\n${OUTPUT}\n\n") + ENDIF(CMAKE_DETERMINE_${lang}_ABI_COMPILED) + ENDIF(NOT DEFINED CMAKE_DETERMINE_${lang}_ABI_COMPILED) +ENDFUNCTION(CMAKE_DETERMINE_COMPILER_ABI) diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake new file mode 100644 index 0000000..686cc9b --- /dev/null +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -0,0 +1,329 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Function to compile a source file to identify the compiler. This is +# used internally by CMake and should not be included by user code. +# If successful, sets CMAKE__COMPILER_ID and CMAKE__PLATFORM_ID + +FUNCTION(CMAKE_DETERMINE_COMPILER_ID lang flagvar src) + # Make sure the compiler arguments are clean. + STRING(STRIP "${CMAKE_${lang}_COMPILER_ARG1}" CMAKE_${lang}_COMPILER_ID_ARG1) + STRING(REGEX REPLACE " +" ";" CMAKE_${lang}_COMPILER_ID_ARG1 "${CMAKE_${lang}_COMPILER_ID_ARG1}") + + # Make sure user-specified compiler flags are used. + IF(CMAKE_${lang}_FLAGS) + SET(CMAKE_${lang}_COMPILER_ID_FLAGS ${CMAKE_${lang}_FLAGS}) + ELSE(CMAKE_${lang}_FLAGS) + SET(CMAKE_${lang}_COMPILER_ID_FLAGS $ENV{${flagvar}}) + ENDIF(CMAKE_${lang}_FLAGS) + STRING(REGEX REPLACE " " ";" CMAKE_${lang}_COMPILER_ID_FLAGS_LIST "${CMAKE_${lang}_COMPILER_ID_FLAGS}") + + # Compute the directory in which to run the test. + SET(CMAKE_${lang}_COMPILER_ID_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CompilerId${lang}) + + # Try building with no extra flags and then try each set + # of helper flags. Stop when the compiler is identified. + FOREACH(flags "" ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS}) + IF(NOT CMAKE_${lang}_COMPILER_ID) + CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${flags}" "${src}") + FOREACH(file ${COMPILER_${lang}_PRODUCED_FILES}) + CMAKE_DETERMINE_COMPILER_ID_CHECK("${lang}" "${CMAKE_${lang}_COMPILER_ID_DIR}/${file}" "${src}") + ENDFOREACH(file) + ENDIF(NOT CMAKE_${lang}_COMPILER_ID) + ENDFOREACH(flags) + + # If the compiler is still unknown, try to query its vendor. + IF(NOT CMAKE_${lang}_COMPILER_ID) + CMAKE_DETERMINE_COMPILER_ID_VENDOR(${lang}) + ENDIF() + + # if the format is unknown after all files have been checked, put "Unknown" in the cache + IF(NOT CMAKE_EXECUTABLE_FORMAT) + SET(CMAKE_EXECUTABLE_FORMAT "Unknown" CACHE INTERNAL "Executable file format") + ENDIF(NOT CMAKE_EXECUTABLE_FORMAT) + + # Display the final identification result. + IF(CMAKE_${lang}_COMPILER_ID) + IF(CMAKE_${lang}_COMPILER_VERSION) + SET(_version " ${CMAKE_${lang}_COMPILER_VERSION}") + ELSE() + SET(_version "") + ENDIF() + MESSAGE(STATUS "The ${lang} compiler identification is " + "${CMAKE_${lang}_COMPILER_ID}${_version}") + ELSE(CMAKE_${lang}_COMPILER_ID) + MESSAGE(STATUS "The ${lang} compiler identification is unknown") + ENDIF(CMAKE_${lang}_COMPILER_ID) + + SET(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE) + SET(CMAKE_${lang}_PLATFORM_ID "${CMAKE_${lang}_PLATFORM_ID}" PARENT_SCOPE) + SET(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}" + PARENT_SCOPE) + SET(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE) +ENDFUNCTION(CMAKE_DETERMINE_COMPILER_ID) + +#----------------------------------------------------------------------------- +# Function to write the compiler id source file. +FUNCTION(CMAKE_DETERMINE_COMPILER_ID_WRITE lang src) + FILE(READ ${CMAKE_ROOT}/Modules/${src}.in ID_CONTENT_IN) + STRING(CONFIGURE "${ID_CONTENT_IN}" ID_CONTENT_OUT @ONLY) + FILE(WRITE ${CMAKE_${lang}_COMPILER_ID_DIR}/${src} "${ID_CONTENT_OUT}") +ENDFUNCTION(CMAKE_DETERMINE_COMPILER_ID_WRITE) + +#----------------------------------------------------------------------------- +# Function to build the compiler id source file and look for output +# files. +FUNCTION(CMAKE_DETERMINE_COMPILER_ID_BUILD lang testflags src) + # Create a clean working directory. + FILE(REMOVE_RECURSE ${CMAKE_${lang}_COMPILER_ID_DIR}) + FILE(MAKE_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}) + CMAKE_DETERMINE_COMPILER_ID_WRITE("${lang}" "${src}") + + # Construct a description of this test case. + SET(COMPILER_DESCRIPTION + "Compiler: ${CMAKE_${lang}_COMPILER} ${CMAKE_${lang}_COMPILER_ID_ARG1} +Build flags: ${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST} +Id flags: ${testflags} +") + + # Compile the compiler identification source. + IF(COMMAND EXECUTE_PROCESS) + EXECUTE_PROCESS( + COMMAND ${CMAKE_${lang}_COMPILER} + ${CMAKE_${lang}_COMPILER_ID_ARG1} + ${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST} + ${testflags} + "${src}" + WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR} + OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT + ERROR_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT + RESULT_VARIABLE CMAKE_${lang}_COMPILER_ID_RESULT + ) + ELSE(COMMAND EXECUTE_PROCESS) + EXEC_PROGRAM( + ${CMAKE_${lang}_COMPILER} ${CMAKE_${lang}_COMPILER_ID_DIR} + ARGS ${CMAKE_${lang}_COMPILER_ID_ARG1} + ${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST} + ${testflags} + \"${src}\" + OUTPUT_VARIABLE CMAKE_${lang}_COMPILER_ID_OUTPUT + RETURN_VALUE CMAKE_${lang}_COMPILER_ID_RESULT + ) + ENDIF(COMMAND EXECUTE_PROCESS) + + # Check the result of compilation. + IF(CMAKE_${lang}_COMPILER_ID_RESULT) + # Compilation failed. + SET(MSG + "Compiling the ${lang} compiler identification source file \"${src}\" failed. +${COMPILER_DESCRIPTION} +The output was: +${CMAKE_${lang}_COMPILER_ID_RESULT} +${CMAKE_${lang}_COMPILER_ID_OUTPUT} + +") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log "${MSG}") + #IF(NOT CMAKE_${lang}_COMPILER_ID_ALLOW_FAIL) + # MESSAGE(FATAL_ERROR "${MSG}") + #ENDIF(NOT CMAKE_${lang}_COMPILER_ID_ALLOW_FAIL) + + # No output files should be inspected. + SET(COMPILER_${lang}_PRODUCED_FILES) + ELSE(CMAKE_${lang}_COMPILER_ID_RESULT) + # Compilation succeeded. + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Compiling the ${lang} compiler identification source file \"${src}\" succeeded. +${COMPILER_DESCRIPTION} +The output was: +${CMAKE_${lang}_COMPILER_ID_RESULT} +${CMAKE_${lang}_COMPILER_ID_OUTPUT} + +") + + # Find the executable produced by the compiler, try all files in the + # binary dir. + FILE(GLOB COMPILER_${lang}_PRODUCED_FILES + RELATIVE ${CMAKE_${lang}_COMPILER_ID_DIR} + ${CMAKE_${lang}_COMPILER_ID_DIR}/*) + LIST(REMOVE_ITEM COMPILER_${lang}_PRODUCED_FILES "${src}") + FOREACH(file ${COMPILER_${lang}_PRODUCED_FILES}) + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Compilation of the ${lang} compiler identification source \"" + "${src}\" produced \"${file}\"\n\n") + ENDFOREACH(file) + + IF(NOT COMPILER_${lang}_PRODUCED_FILES) + # No executable was found. + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Compilation of the ${lang} compiler identification source \"" + "${src}\" did not produce an executable in \"" + "${CMAKE_${lang}_COMPILER_ID_DIR}\".\n\n") + ENDIF(NOT COMPILER_${lang}_PRODUCED_FILES) + ENDIF(CMAKE_${lang}_COMPILER_ID_RESULT) + + # Return the files produced by the compilation. + SET(COMPILER_${lang}_PRODUCED_FILES "${COMPILER_${lang}_PRODUCED_FILES}" PARENT_SCOPE) +ENDFUNCTION(CMAKE_DETERMINE_COMPILER_ID_BUILD lang testflags src) + +#----------------------------------------------------------------------------- +# Function to extract the compiler id from an executable. +FUNCTION(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file) + # Look for a compiler id if not yet known. + IF(NOT CMAKE_${lang}_COMPILER_ID) + # Read the compiler identification string from the executable file. + SET(COMPILER_ID) + SET(COMPILER_VERSION) + SET(PLATFORM_ID) + FILE(STRINGS ${file} + CMAKE_${lang}_COMPILER_ID_STRINGS LIMIT_COUNT 4 REGEX "INFO:") + SET(HAVE_COMPILER_TWICE 0) + FOREACH(info ${CMAKE_${lang}_COMPILER_ID_STRINGS}) + IF("${info}" MATCHES ".*INFO:compiler\\[([^]\"]*)\\].*") + IF(COMPILER_ID) + SET(COMPILER_ID_TWICE 1) + ENDIF(COMPILER_ID) + STRING(REGEX REPLACE ".*INFO:compiler\\[([^]]*)\\].*" "\\1" + COMPILER_ID "${info}") + ENDIF("${info}" MATCHES ".*INFO:compiler\\[([^]\"]*)\\].*") + IF("${info}" MATCHES ".*INFO:platform\\[([^]\"]*)\\].*") + STRING(REGEX REPLACE ".*INFO:platform\\[([^]]*)\\].*" "\\1" + PLATFORM_ID "${info}") + ENDIF("${info}" MATCHES ".*INFO:platform\\[([^]\"]*)\\].*") + IF("${info}" MATCHES ".*INFO:arch\\[([^]\"]*)\\].*") + STRING(REGEX REPLACE ".*INFO:arch\\[([^]]*)\\].*" "\\1" + ARCHITECTURE_ID "${info}") + ENDIF("${info}" MATCHES ".*INFO:arch\\[([^]\"]*)\\].*") + IF("${info}" MATCHES ".*INFO:compiler_version\\[([^]\"]*)\\].*") + STRING(REGEX REPLACE ".*INFO:compiler_version\\[([^]]*)\\].*" "\\1" COMPILER_VERSION "${info}") + STRING(REGEX REPLACE "^0+([0-9])" "\\1" COMPILER_VERSION "${COMPILER_VERSION}") + STRING(REGEX REPLACE "\\.0+([0-9])" ".\\1" COMPILER_VERSION "${COMPILER_VERSION}") + ENDIF("${info}" MATCHES ".*INFO:compiler_version\\[([^]\"]*)\\].*") + ENDFOREACH(info) + + # Check if a valid compiler and platform were found. + IF(COMPILER_ID AND NOT COMPILER_ID_TWICE) + SET(CMAKE_${lang}_COMPILER_ID "${COMPILER_ID}") + SET(CMAKE_${lang}_PLATFORM_ID "${PLATFORM_ID}") + SET(MSVC_${lang}_ARCHITECTURE_ID "${ARCHITECTURE_ID}") + SET(CMAKE_${lang}_COMPILER_VERSION "${COMPILER_VERSION}") + ENDIF(COMPILER_ID AND NOT COMPILER_ID_TWICE) + + # Check the compiler identification string. + IF(CMAKE_${lang}_COMPILER_ID) + # The compiler identification was found. + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "The ${lang} compiler identification is ${CMAKE_${lang}_COMPILER_ID}, found in \"" + "${file}\"\n\n") + ELSE(CMAKE_${lang}_COMPILER_ID) + # The compiler identification could not be found. + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "The ${lang} compiler identification could not be found in \"" + "${file}\"\n\n") + ENDIF(CMAKE_${lang}_COMPILER_ID) + ENDIF(NOT CMAKE_${lang}_COMPILER_ID) + + # try to figure out the executable format: ELF, COFF, Mach-O + IF(NOT CMAKE_EXECUTABLE_FORMAT) + FILE(READ ${file} CMAKE_EXECUTABLE_MAGIC LIMIT 4 HEX) + + # ELF files start with 0x7f"ELF" + IF("${CMAKE_EXECUTABLE_MAGIC}" STREQUAL "7f454c46") + SET(CMAKE_EXECUTABLE_FORMAT "ELF" CACHE INTERNAL "Executable file format") + ENDIF("${CMAKE_EXECUTABLE_MAGIC}" STREQUAL "7f454c46") + +# # COFF (.exe) files start with "MZ" +# IF("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "4d5a....") +# SET(CMAKE_EXECUTABLE_FORMAT "COFF" CACHE STRING "Executable file format") +# ENDIF("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "4d5a....") +# +# # Mach-O files start with CAFEBABE or FEEDFACE, according to http://radio.weblogs.com/0100490/2003/01/28.html +# IF("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "cafebabe") +# SET(CMAKE_EXECUTABLE_FORMAT "MACHO" CACHE STRING "Executable file format") +# ENDIF("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "cafebabe") +# IF("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "feedface") +# SET(CMAKE_EXECUTABLE_FORMAT "MACHO" CACHE STRING "Executable file format") +# ENDIF("${CMAKE_EXECUTABLE_MAGIC}" MATCHES "feedface") + + ENDIF(NOT CMAKE_EXECUTABLE_FORMAT) + IF(NOT DEFINED CMAKE_EXECUTABLE_FORMAT) + SET(CMAKE_EXECUTABLE_FORMAT) + ENDIF() + # Return the information extracted. + SET(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE) + SET(CMAKE_${lang}_PLATFORM_ID "${CMAKE_${lang}_PLATFORM_ID}" PARENT_SCOPE) + SET(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}" + PARENT_SCOPE) + SET(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE) + SET(CMAKE_EXECUTABLE_FORMAT "${CMAKE_EXECUTABLE_FORMAT}" PARENT_SCOPE) +ENDFUNCTION(CMAKE_DETERMINE_COMPILER_ID_CHECK lang) + +#----------------------------------------------------------------------------- +# Function to query the compiler vendor. +# This uses a table with entries of the form +# list(APPEND CMAKE_${lang}_COMPILER_ID_VENDORS ${vendor}) +# set(CMAKE_${lang}_COMPILER_ID_VENDOR_FLAGS_${vendor} -some-vendor-flag) +# set(CMAKE_${lang}_COMPILER_ID_VENDOR_REGEX_${vendor} "Some Vendor Output") +# We try running the compiler with the flag for each vendor and +# matching its regular expression in the output. +FUNCTION(CMAKE_DETERMINE_COMPILER_ID_VENDOR lang) + + IF(NOT CMAKE_${lang}_COMPILER_ID_DIR) + # We get here when this function is called not from within CMAKE_DETERMINE_COMPILER_ID() + # This is done e.g. for detecting the compiler ID for assemblers. + # Compute the directory in which to run the test and Create a clean working directory. + SET(CMAKE_${lang}_COMPILER_ID_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CompilerId${lang}) + FILE(REMOVE_RECURSE ${CMAKE_${lang}_COMPILER_ID_DIR}) + FILE(MAKE_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR}) + ENDIF(NOT CMAKE_${lang}_COMPILER_ID_DIR) + + + FOREACH(vendor ${CMAKE_${lang}_COMPILER_ID_VENDORS}) + SET(flags ${CMAKE_${lang}_COMPILER_ID_VENDOR_FLAGS_${vendor}}) + SET(regex ${CMAKE_${lang}_COMPILER_ID_VENDOR_REGEX_${vendor}}) + EXECUTE_PROCESS( + COMMAND ${CMAKE_${lang}_COMPILER} + ${CMAKE_${lang}_COMPILER_ID_ARG1} + ${CMAKE_${lang}_COMPILER_ID_FLAGS_LIST} + ${flags} + WORKING_DIRECTORY ${CMAKE_${lang}_COMPILER_ID_DIR} + OUTPUT_VARIABLE output ERROR_VARIABLE output + RESULT_VARIABLE result + TIMEOUT 10 + ) + + IF("${lang}" STREQUAL "ASM") + MESSAGE(STATUS "Checked for ${vendor}") + MESSAGE(STATUS " Output: -${output}-") + MESSAGE(STATUS " Result: -${result}-") + ENDIF("${lang}" STREQUAL "ASM") + + IF("${output}" MATCHES "${regex}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Checking whether the ${lang} compiler is ${vendor} using \"${flags}\" " + "matched \"${regex}\":\n${output}") + SET(CMAKE_${lang}_COMPILER_ID "${vendor}" PARENT_SCOPE) + BREAK() + ELSE() + IF("${result}" MATCHES "timeout") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Checking whether the ${lang} compiler is ${vendor} using \"${flags}\" " + "terminated after 10 s due to timeout.") + ELSE() + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Checking whether the ${lang} compiler is ${vendor} using \"${flags}\" " + "did not match \"${regex}\":\n${output}") + ENDIF() + ENDIF() + ENDFOREACH() +ENDFUNCTION(CMAKE_DETERMINE_COMPILER_ID_VENDOR) diff --git a/Modules/CMakeDetermineFortranCompiler.cmake b/Modules/CMakeDetermineFortranCompiler.cmake new file mode 100644 index 0000000..ade6d58 --- /dev/null +++ b/Modules/CMakeDetermineFortranCompiler.cmake @@ -0,0 +1,228 @@ + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# determine the compiler to use for Fortran programs +# NOTE, a generator may set CMAKE_Fortran_COMPILER before +# loading this file to force a compiler. +# use environment variable FC first if defined by user, next use +# the cmake variable CMAKE_GENERATOR_FC which can be defined by a generator +# as a default compiler + +IF(NOT CMAKE_Fortran_COMPILER) + # prefer the environment variable CC + IF($ENV{FC} MATCHES ".+") + GET_FILENAME_COMPONENT(CMAKE_Fortran_COMPILER_INIT $ENV{FC} PROGRAM PROGRAM_ARGS CMAKE_Fortran_FLAGS_ENV_INIT) + IF(CMAKE_Fortran_FLAGS_ENV_INIT) + SET(CMAKE_Fortran_COMPILER_ARG1 "${CMAKE_Fortran_FLAGS_ENV_INIT}" CACHE STRING "First argument to Fortran compiler") + ENDIF(CMAKE_Fortran_FLAGS_ENV_INIT) + IF(EXISTS ${CMAKE_Fortran_COMPILER_INIT}) + ELSE(EXISTS ${CMAKE_Fortran_COMPILER_INIT}) + MESSAGE(FATAL_ERROR "Could not find compiler set in environment variable FC:\n$ENV{FC}.") + ENDIF(EXISTS ${CMAKE_Fortran_COMPILER_INIT}) + ENDIF($ENV{FC} MATCHES ".+") + + # next try prefer the compiler specified by the generator + IF(CMAKE_GENERATOR_FC) + IF(NOT CMAKE_Fortran_COMPILER_INIT) + SET(CMAKE_Fortran_COMPILER_INIT ${CMAKE_GENERATOR_FC}) + ENDIF(NOT CMAKE_Fortran_COMPILER_INIT) + ENDIF(CMAKE_GENERATOR_FC) + + # finally list compilers to try + IF(CMAKE_Fortran_COMPILER_INIT) + SET(CMAKE_Fortran_COMPILER_LIST ${CMAKE_Fortran_COMPILER_INIT}) + ELSE(CMAKE_Fortran_COMPILER_INIT) + # Known compilers: + # f77/f90/f95: generic compiler names + # g77: GNU Fortran 77 compiler + # gfortran: putative GNU Fortran 95+ compiler (in progress) + # fort77: native F77 compiler under HP-UX (and some older Crays) + # frt: Fujitsu F77 compiler + # pathf90/pathf95/pathf2003: PathScale Fortran compiler + # pgf77/pgf90/pgf95/pgfortran: Portland Group F77/F90/F95 compilers + # xlf/xlf90/xlf95: IBM (AIX) F77/F90/F95 compilers + # lf95: Lahey-Fujitsu F95 compiler + # fl32: Microsoft Fortran 77 "PowerStation" compiler + # af77: Apogee F77 compiler for Intergraph hardware running CLIX + # epcf90: "Edinburgh Portable Compiler" F90 + # fort: Compaq (now HP) Fortran 90/95 compiler for Tru64 and Linux/Alpha + # ifc: Intel Fortran 95 compiler for Linux/x86 + # efc: Intel Fortran 95 compiler for IA64 + # + # The order is 95 or newer compilers first, then 90, + # then 77 or older compilers, gnu is always last in the group, + # so if you paid for a compiler it is picked by default. + SET(CMAKE_Fortran_COMPILER_LIST + ifort ifc af95 af90 efc f95 pathf2003 pathf95 pgf95 pgfortran lf95 xlf95 + fort gfortran gfortran-4 g95 f90 pathf90 pgf90 xlf90 epcf90 fort77 + frt pgf77 xlf fl32 af77 g77 f77 + ) + + # Vendor-specific compiler names. + SET(_Fortran_COMPILER_NAMES_GNU gfortran gfortran-4 g95 g77) + SET(_Fortran_COMPILER_NAMES_Intel ifort ifc efc) + SET(_Fortran_COMPILER_NAMES_Absoft af95 af90 af77) + SET(_Fortran_COMPILER_NAMES_PGI pgf95 pgfortran pgf90 pgf77) + SET(_Fortran_COMPILER_NAMES_PathScale pathf2003 pathf95 pathf90) + SET(_Fortran_COMPILER_NAMES_XL xlf) + SET(_Fortran_COMPILER_NAMES_VisualAge xlf95 xlf90 xlf) + + # Prefer vendors matching the C and C++ compilers. + SET(CMAKE_Fortran_COMPILER_LIST + ${_Fortran_COMPILER_NAMES_${CMAKE_C_COMPILER_ID}} + ${_Fortran_COMPILER_NAMES_${CMAKE_CXX_COMPILER_ID}} + ${CMAKE_Fortran_COMPILER_LIST}) + LIST(REMOVE_DUPLICATES CMAKE_Fortran_COMPILER_LIST) + ENDIF(CMAKE_Fortran_COMPILER_INIT) + + # Look for directories containing the C and C++ compilers. + SET(_Fortran_COMPILER_HINTS) + FOREACH(lang C CXX) + IF(CMAKE_${lang}_COMPILER AND IS_ABSOLUTE "${CMAKE_${lang}_COMPILER}") + GET_FILENAME_COMPONENT(_hint "${CMAKE_${lang}_COMPILER}" PATH) + IF(IS_DIRECTORY "${_hint}") + LIST(APPEND _Fortran_COMPILER_HINTS "${_hint}") + ENDIF() + SET(_hint) + ENDIF() + ENDFOREACH() + + # Find the compiler. + IF(_Fortran_COMPILER_HINTS) + # Prefer directories containing C and C++ compilers. + LIST(REMOVE_DUPLICATES _Fortran_COMPILER_HINTS) + FIND_PROGRAM(CMAKE_Fortran_COMPILER + NAMES ${CMAKE_Fortran_COMPILER_LIST} + PATHS ${_Fortran_COMPILER_HINTS} + NO_DEFAULT_PATH + DOC "Fortran compiler") + ENDIF() + FIND_PROGRAM(CMAKE_Fortran_COMPILER NAMES ${CMAKE_Fortran_COMPILER_LIST} DOC "Fortran compiler") + IF(CMAKE_Fortran_COMPILER_INIT AND NOT CMAKE_Fortran_COMPILER) + SET(CMAKE_Fortran_COMPILER "${CMAKE_Fortran_COMPILER_INIT}" CACHE FILEPATH "Fortran compiler" FORCE) + ENDIF(CMAKE_Fortran_COMPILER_INIT AND NOT CMAKE_Fortran_COMPILER) +ELSE(NOT CMAKE_Fortran_COMPILER) + # we only get here if CMAKE_Fortran_COMPILER was specified using -D or a pre-made CMakeCache.txt + # (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE + # if CMAKE_Fortran_COMPILER is a list of length 2, use the first item as + # CMAKE_Fortran_COMPILER and the 2nd one as CMAKE_Fortran_COMPILER_ARG1 + + LIST(LENGTH CMAKE_Fortran_COMPILER _CMAKE_Fortran_COMPILER_LIST_LENGTH) + IF("${_CMAKE_Fortran_COMPILER_LIST_LENGTH}" EQUAL 2) + LIST(GET CMAKE_Fortran_COMPILER 1 CMAKE_Fortran_COMPILER_ARG1) + LIST(GET CMAKE_Fortran_COMPILER 0 CMAKE_Fortran_COMPILER) + ENDIF("${_CMAKE_Fortran_COMPILER_LIST_LENGTH}" EQUAL 2) + + # if a compiler was specified by the user but without path, + # now try to find it with the full path + # if it is found, force it into the cache, + # if not, don't overwrite the setting (which was given by the user) with "NOTFOUND" + # if the C compiler already had a path, reuse it for searching the CXX compiler + GET_FILENAME_COMPONENT(_CMAKE_USER_Fortran_COMPILER_PATH "${CMAKE_Fortran_COMPILER}" PATH) + IF(NOT _CMAKE_USER_Fortran_COMPILER_PATH) + FIND_PROGRAM(CMAKE_Fortran_COMPILER_WITH_PATH NAMES ${CMAKE_Fortran_COMPILER}) + MARK_AS_ADVANCED(CMAKE_Fortran_COMPILER_WITH_PATH) + IF(CMAKE_Fortran_COMPILER_WITH_PATH) + SET(CMAKE_Fortran_COMPILER ${CMAKE_Fortran_COMPILER_WITH_PATH} + CACHE STRING "Fortran compiler" FORCE) + ENDIF(CMAKE_Fortran_COMPILER_WITH_PATH) + ENDIF(NOT _CMAKE_USER_Fortran_COMPILER_PATH) +ENDIF(NOT CMAKE_Fortran_COMPILER) + +MARK_AS_ADVANCED(CMAKE_Fortran_COMPILER) + +# Build a small source file to identify the compiler. +IF(${CMAKE_GENERATOR} MATCHES "Visual Studio") + SET(CMAKE_Fortran_COMPILER_ID_RUN 1) + SET(CMAKE_Fortran_PLATFORM_ID "Windows") + SET(CMAKE_Fortran_COMPILER_ID "Intel") +ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio") + +IF(NOT CMAKE_Fortran_COMPILER_ID_RUN) + SET(CMAKE_Fortran_COMPILER_ID_RUN 1) + + # Each entry in this list is a set of extra flags to try + # adding to the compile line to see if it helps produce + # a valid identification executable. + SET(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS + # Try compiling to an object file only. + "-c" + + # Intel on windows does not preprocess by default. + "-fpp" + ) + + # Table of per-vendor compiler id flags with expected output. + LIST(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS Compaq) + SET(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_Compaq "-what") + SET(CMAKE_Fortran_COMPILER_ID_VENDOR_REGEX_Compaq "Compaq Visual Fortran") + LIST(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS NAG) # Numerical Algorithms Group + SET(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_NAG "-V") + SET(CMAKE_Fortran_COMPILER_ID_VENDOR_REGEX_NAG "NAG Fortran Compiler") + + # Try to identify the compiler. + SET(CMAKE_Fortran_COMPILER_ID) + INCLUDE(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake) + CMAKE_DETERMINE_COMPILER_ID(Fortran FFLAGS CMakeFortranCompilerId.F) + + # Fall back to old is-GNU test. + IF(NOT CMAKE_Fortran_COMPILER_ID) + EXEC_PROGRAM(${CMAKE_Fortran_COMPILER} + ARGS ${CMAKE_Fortran_COMPILER_ID_FLAGS_LIST} -E "\"${CMAKE_ROOT}/Modules/CMakeTestGNU.c\"" + OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT RETURN_VALUE CMAKE_COMPILER_RETURN) + IF(NOT CMAKE_COMPILER_RETURN) + IF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_GNU.*" ) + SET(CMAKE_Fortran_COMPILER_ID "GNU") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the Fortran compiler is GNU succeeded with " + "the following output:\n${CMAKE_COMPILER_OUTPUT}\n\n") + ELSE("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_GNU.*" ) + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the Fortran compiler is GNU failed with " + "the following output:\n${CMAKE_COMPILER_OUTPUT}\n\n") + ENDIF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_GNU.*" ) + IF(NOT CMAKE_Fortran_PLATFORM_ID) + IF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_MINGW.*" ) + SET(CMAKE_Fortran_PLATFORM_ID "MinGW") + ENDIF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_MINGW.*" ) + IF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_CYGWIN.*" ) + SET(CMAKE_Fortran_PLATFORM_ID "Cygwin") + ENDIF("${CMAKE_COMPILER_OUTPUT}" MATCHES ".*THIS_IS_CYGWIN.*" ) + ENDIF(NOT CMAKE_Fortran_PLATFORM_ID) + ENDIF(NOT CMAKE_COMPILER_RETURN) + ENDIF(NOT CMAKE_Fortran_COMPILER_ID) + + # Set old compiler and platform id variables. + IF("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU") + SET(CMAKE_COMPILER_IS_GNUG77 1) + ENDIF("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU") + IF("${CMAKE_Fortran_PLATFORM_ID}" MATCHES "MinGW") + SET(CMAKE_COMPILER_IS_MINGW 1) + ELSEIF("${CMAKE_Fortran_PLATFORM_ID}" MATCHES "Cygwin") + SET(CMAKE_COMPILER_IS_CYGWIN 1) + ENDIF("${CMAKE_Fortran_PLATFORM_ID}" MATCHES "MinGW") +ENDIF(NOT CMAKE_Fortran_COMPILER_ID_RUN) + +INCLUDE(CMakeFindBinUtils) + +IF(MSVC_Fortran_ARCHITECTURE_ID) + SET(SET_MSVC_Fortran_ARCHITECTURE_ID + "SET(MSVC_Fortran_ARCHITECTURE_ID ${MSVC_Fortran_ARCHITECTURE_ID})") +ENDIF() +# configure variables set in this file for fast reload later on +CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeFortranCompiler.cmake + @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0 + ) +SET(CMAKE_Fortran_COMPILER_ENV_VAR "FC") diff --git a/Modules/CMakeDetermineJavaCompiler.cmake b/Modules/CMakeDetermineJavaCompiler.cmake new file mode 100644 index 0000000..aefcaba --- /dev/null +++ b/Modules/CMakeDetermineJavaCompiler.cmake @@ -0,0 +1,102 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# determine the compiler to use for Java programs +# NOTE, a generator may set CMAKE_Java_COMPILER before +# loading this file to force a compiler. + +IF(NOT CMAKE_Java_COMPILER) + # prefer the environment variable CC + IF($ENV{JAVA_COMPILER} MATCHES ".+") + GET_FILENAME_COMPONENT(CMAKE_Java_COMPILER_INIT $ENV{JAVA_COMPILER} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT) + IF(CMAKE_Java_FLAGS_ENV_INIT) + SET(CMAKE_Java_COMPILER_ARG1 "${CMAKE_Java_FLAGS_ENV_INIT}" CACHE STRING "First argument to Java compiler") + ENDIF(CMAKE_Java_FLAGS_ENV_INIT) + IF(NOT EXISTS ${CMAKE_Java_COMPILER_INIT}) + MESSAGE(SEND_ERROR "Could not find compiler set in environment variable JAVA_COMPILER:\n$ENV{JAVA_COMPILER}.") + ENDIF(NOT EXISTS ${CMAKE_Java_COMPILER_INIT}) + ENDIF($ENV{JAVA_COMPILER} MATCHES ".+") + + IF($ENV{JAVA_RUNTIME} MATCHES ".+") + GET_FILENAME_COMPONENT(CMAKE_Java_RUNTIME_INIT $ENV{JAVA_RUNTIME} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT) + IF(NOT EXISTS ${CMAKE_Java_RUNTIME_INIT}) + MESSAGE(SEND_ERROR "Could not find compiler set in environment variable JAVA_RUNTIME:\n$ENV{JAVA_RUNTIME}.") + ENDIF(NOT EXISTS ${CMAKE_Java_RUNTIME_INIT}) + ENDIF($ENV{JAVA_RUNTIME} MATCHES ".+") + + IF($ENV{JAVA_ARCHIVE} MATCHES ".+") + GET_FILENAME_COMPONENT(CMAKE_Java_ARCHIVE_INIT $ENV{JAVA_ARCHIVE} PROGRAM PROGRAM_ARGS CMAKE_Java_FLAGS_ENV_INIT) + IF(NOT EXISTS ${CMAKE_Java_ARCHIVE_INIT}) + MESSAGE(SEND_ERROR "Could not find compiler set in environment variable JAVA_ARCHIVE:\n$ENV{JAVA_ARCHIVE}.") + ENDIF(NOT EXISTS ${CMAKE_Java_ARCHIVE_INIT}) + ENDIF($ENV{JAVA_ARCHIVE} MATCHES ".+") + + SET(Java_BIN_PATH + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\2.0;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/bin" + $ENV{JAVA_HOME}/bin + /usr/bin + /usr/lib/java/bin + /usr/share/java/bin + /usr/local/bin + /usr/local/java/bin + /usr/local/java/share/bin + /usr/java/j2sdk1.4.2_04 + /usr/lib/j2sdk1.4-sun/bin + /usr/java/j2sdk1.4.2_09/bin + /usr/lib/j2sdk1.5-sun/bin + /opt/sun-jdk-1.5.0.04/bin + ) + # if no compiler has been specified yet, then look for one + IF(CMAKE_Java_COMPILER_INIT) + SET(CMAKE_Java_COMPILER ${CMAKE_Java_COMPILER_INIT} CACHE PATH "Java Compiler") + ELSE(CMAKE_Java_COMPILER_INIT) + FIND_PROGRAM(CMAKE_Java_COMPILER + NAMES javac + PATHS ${Java_BIN_PATH} + ) + ENDIF(CMAKE_Java_COMPILER_INIT) + + # if no runtime has been specified yet, then look for one + IF(CMAKE_Java_RUNTIME_INIT) + SET(CMAKE_Java_RUNTIME ${CMAKE_Java_RUNTIME_INIT} CACHE PATH "Java Compiler") + ELSE(CMAKE_Java_RUNTIME_INIT) + FIND_PROGRAM(CMAKE_Java_RUNTIME + NAMES java + PATHS ${Java_BIN_PATH} + ) + ENDIF(CMAKE_Java_RUNTIME_INIT) + + # if no archive has been specified yet, then look for one + IF(CMAKE_Java_ARCHIVE_INIT) + SET(CMAKE_Java_ARCHIVE ${CMAKE_Java_ARCHIVE_INIT} CACHE PATH "Java Compiler") + ELSE(CMAKE_Java_ARCHIVE_INIT) + FIND_PROGRAM(CMAKE_Java_ARCHIVE + NAMES jar + PATHS ${Java_BIN_PATH} + ) + ENDIF(CMAKE_Java_ARCHIVE_INIT) +ENDIF(NOT CMAKE_Java_COMPILER) +MARK_AS_ADVANCED(CMAKE_Java_COMPILER) + +# configure variables set in this file for fast reload later on +CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeJavaCompiler.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeJavaCompiler.cmake IMMEDIATE @ONLY) +SET(CMAKE_Java_COMPILER_ENV_VAR "JAVA_COMPILER") diff --git a/Modules/CMakeDetermineRCCompiler.cmake b/Modules/CMakeDetermineRCCompiler.cmake new file mode 100644 index 0000000..8e085af --- /dev/null +++ b/Modules/CMakeDetermineRCCompiler.cmake @@ -0,0 +1,67 @@ + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# determine the compiler to use for C programs +# NOTE, a generator may set CMAKE_C_COMPILER before +# loading this file to force a compiler. +# use environment variable CCC first if defined by user, next use +# the cmake variable CMAKE_GENERATOR_CC which can be defined by a generator +# as a default compiler +IF(NOT CMAKE_RC_COMPILER) + # prefer the environment variable CC + IF($ENV{RC} MATCHES ".+") + GET_FILENAME_COMPONENT(CMAKE_RC_COMPILER_INIT $ENV{RC} PROGRAM PROGRAM_ARGS CMAKE_RC_FLAGS_ENV_INIT) + IF(CMAKE_RC_FLAGS_ENV_INIT) + SET(CMAKE_RC_COMPILER_ARG1 "${CMAKE_RC_FLAGS_ENV_INIT}" CACHE STRING "First argument to RC compiler") + ENDIF(CMAKE_RC_FLAGS_ENV_INIT) + IF(EXISTS ${CMAKE_RC_COMPILER_INIT}) + ELSE(EXISTS ${CMAKE_RC_COMPILER_INIT}) + MESSAGE(FATAL_ERROR "Could not find compiler set in environment variable RC:\n$ENV{RC}.") + ENDIF(EXISTS ${CMAKE_RC_COMPILER_INIT}) + ENDIF($ENV{RC} MATCHES ".+") + + # next try prefer the compiler specified by the generator + IF(CMAKE_GENERATOR_RC) + IF(NOT CMAKE_RC_COMPILER_INIT) + SET(CMAKE_RC_COMPILER_INIT ${CMAKE_GENERATOR_RC}) + ENDIF(NOT CMAKE_RC_COMPILER_INIT) + ENDIF(CMAKE_GENERATOR_RC) + + # finally list compilers to try + IF(CMAKE_RC_COMPILER_INIT) + SET(CMAKE_RC_COMPILER_LIST ${CMAKE_RC_COMPILER_INIT}) + ELSE(CMAKE_RC_COMPILER_INIT) + SET(CMAKE_RC_COMPILER_LIST rc) + ENDIF(CMAKE_RC_COMPILER_INIT) + + # Find the compiler. + FIND_PROGRAM(CMAKE_RC_COMPILER NAMES ${CMAKE_RC_COMPILER_LIST} DOC "RC compiler") + IF(CMAKE_RC_COMPILER_INIT AND NOT CMAKE_RC_COMPILER) + SET(CMAKE_RC_COMPILER "${CMAKE_RC_COMPILER_INIT}" CACHE FILEPATH "RC compiler" FORCE) + ENDIF(CMAKE_RC_COMPILER_INIT AND NOT CMAKE_RC_COMPILER) +ENDIF(NOT CMAKE_RC_COMPILER) + +MARK_AS_ADVANCED(CMAKE_RC_COMPILER) + +GET_FILENAME_COMPONENT(_CMAKE_RC_COMPILER_NAME_WE ${CMAKE_RC_COMPILER} NAME_WE) +IF(_CMAKE_RC_COMPILER_NAME_WE STREQUAL "windres") + SET(CMAKE_RC_OUTPUT_EXTENSION .obj) +ELSE() + SET(CMAKE_RC_OUTPUT_EXTENSION .res) +ENDIF() + +# configure variables set in this file for fast reload later on +CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeRCCompiler.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeRCCompiler.cmake IMMEDIATE) +SET(CMAKE_RC_COMPILER_ENV_VAR "RC") diff --git a/Modules/CMakeDetermineSystem.cmake b/Modules/CMakeDetermineSystem.cmake new file mode 100644 index 0000000..7ae3775 --- /dev/null +++ b/Modules/CMakeDetermineSystem.cmake @@ -0,0 +1,176 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is used by the Makefile generator to determin the following variables: +# CMAKE_SYSTEM_NAME - on unix this is uname -s, for windows it is Windows +# CMAKE_SYSTEM_VERSION - on unix this is uname -r, for windows it is empty +# CMAKE_SYSTEM - ${CMAKE_SYSTEM}-${CMAKE_SYSTEM_VERSION}, for windows: ${CMAKE_SYSTEM} +# +# Expected uname -s output: +# +# AIX AIX +# BSD/OS BSD/OS +# FreeBSD FreeBSD +# HP-UX HP-UX +# IRIX IRIX +# Linux Linux +# GNU/kFreeBSD GNU/kFreeBSD +# NetBSD NetBSD +# OpenBSD OpenBSD +# OFS/1 (Digital Unix) OSF1 +# SCO OpenServer 5 SCO_SV +# SCO UnixWare 7 UnixWare +# SCO UnixWare (pre release 7) UNIX_SV +# SCO XENIX Xenix +# Solaris SunOS +# SunOS SunOS +# Tru64 Tru64 +# Ultrix ULTRIX +# cygwin CYGWIN_NT-5.1 +# MacOSX Darwin + + +# find out on which system cmake runs +IF(CMAKE_HOST_UNIX) + FIND_PROGRAM(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin ) + IF(CMAKE_UNAME) + EXEC_PROGRAM(uname ARGS -s OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_NAME) + EXEC_PROGRAM(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION) + IF(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|CYGWIN.*") + EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR + RETURN_VALUE val) + ELSEIF(CMAKE_HOST_SYSTEM_NAME MATCHES "OpenBSD") + EXEC_PROGRAM(arch ARGS -s OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR + RETURN_VALUE val) + ELSE() + EXEC_PROGRAM(uname ARGS -p OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR + RETURN_VALUE val) + IF("${val}" GREATER 0) + EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_PROCESSOR + RETURN_VALUE val) + ENDIF("${val}" GREATER 0) + ENDIF() + # check the return of the last uname -m or -p + IF("${val}" GREATER 0) + SET(CMAKE_HOST_SYSTEM_PROCESSOR "unknown") + ENDIF("${val}" GREATER 0) + SET(CMAKE_UNAME ${CMAKE_UNAME} CACHE INTERNAL "uname command") + # processor may have double quote in the name, and that needs to be removed + STRING(REGEX REPLACE "\"" "" CMAKE_HOST_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}") + STRING(REGEX REPLACE "/" "_" CMAKE_HOST_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}") + ENDIF(CMAKE_UNAME) +ELSE(CMAKE_HOST_UNIX) + IF(CMAKE_HOST_WIN32) + SET (CMAKE_HOST_SYSTEM_NAME "Windows") + SET (CMAKE_HOST_SYSTEM_PROCESSOR "$ENV{PROCESSOR_ARCHITECTURE}") + ENDIF(CMAKE_HOST_WIN32) +ENDIF(CMAKE_HOST_UNIX) + +# if a toolchain file is used, the user wants to cross compile. +# in this case read the toolchain file and keep the CMAKE_HOST_SYSTEM_* +# variables around so they can be used in CMakeLists.txt. +# In all other cases, the host and target platform are the same. +IF(CMAKE_TOOLCHAIN_FILE) + # at first try to load it as path relative to the directory from which cmake has been run + INCLUDE("${CMAKE_BINARY_DIR}/${CMAKE_TOOLCHAIN_FILE}" OPTIONAL RESULT_VARIABLE _INCLUDED_TOOLCHAIN_FILE) + IF(NOT _INCLUDED_TOOLCHAIN_FILE) + # if the file isn't found there, check the default locations + INCLUDE("${CMAKE_TOOLCHAIN_FILE}" OPTIONAL RESULT_VARIABLE _INCLUDED_TOOLCHAIN_FILE) + ENDIF(NOT _INCLUDED_TOOLCHAIN_FILE) + + IF(_INCLUDED_TOOLCHAIN_FILE) + SET(CMAKE_TOOLCHAIN_FILE "${_INCLUDED_TOOLCHAIN_FILE}" CACHE FILEPATH "The CMake toolchain file" FORCE) + ELSE(_INCLUDED_TOOLCHAIN_FILE) + MESSAGE(FATAL_ERROR "Could not find toolchain file: ${CMAKE_TOOLCHAIN_FILE}") + SET(CMAKE_TOOLCHAIN_FILE "NOTFOUND" CACHE FILEPATH "The CMake toolchain file" FORCE) + ENDIF(_INCLUDED_TOOLCHAIN_FILE) +ENDIF(CMAKE_TOOLCHAIN_FILE) + + +# if CMAKE_SYSTEM_NAME is here already set, either it comes from a toolchain file +# or it was set via -DCMAKE_SYSTEM_NAME=... +# if that's the case, assume we are crosscompiling +IF(CMAKE_SYSTEM_NAME) + IF(NOT DEFINED CMAKE_CROSSCOMPILING) + SET(CMAKE_CROSSCOMPILING TRUE) + ENDIF(NOT DEFINED CMAKE_CROSSCOMPILING) + SET(PRESET_CMAKE_SYSTEM_NAME TRUE) +ELSE(CMAKE_SYSTEM_NAME) + SET(CMAKE_SYSTEM_NAME "${CMAKE_HOST_SYSTEM_NAME}") + SET(CMAKE_SYSTEM_VERSION "${CMAKE_HOST_SYSTEM_VERSION}") + SET(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}") + SET(CMAKE_CROSSCOMPILING FALSE) + SET(PRESET_CMAKE_SYSTEM_NAME FALSE) +ENDIF(CMAKE_SYSTEM_NAME) + + +MACRO(ADJUST_CMAKE_SYSTEM_VARIABLES _PREFIX) + IF(NOT ${_PREFIX}_NAME) + SET(${_PREFIX}_NAME "UnknownOS") + ENDIF(NOT ${_PREFIX}_NAME) + + # fix for BSD/OS , remove the / + IF(${_PREFIX}_NAME MATCHES BSD.OS) + SET(${_PREFIX}_NAME BSDOS) + ENDIF(${_PREFIX}_NAME MATCHES BSD.OS) + + # fix for GNU/kFreeBSD, remove the GNU/ + IF(${_PREFIX}_NAME MATCHES kFreeBSD) + SET(${_PREFIX}_NAME kFreeBSD) + ENDIF(${_PREFIX}_NAME MATCHES kFreeBSD) + + # fix for CYGWIN which has windows version in it + IF(${_PREFIX}_NAME MATCHES CYGWIN) + SET(${_PREFIX}_NAME CYGWIN) + ENDIF(${_PREFIX}_NAME MATCHES CYGWIN) + + # set CMAKE_SYSTEM to the CMAKE_SYSTEM_NAME + SET(${_PREFIX} ${${_PREFIX}_NAME}) + # if there is a CMAKE_SYSTEM_VERSION then add a -${CMAKE_SYSTEM_VERSION} + IF(${_PREFIX}_VERSION) + SET(${_PREFIX} ${${_PREFIX}}-${${_PREFIX}_VERSION}) + ENDIF(${_PREFIX}_VERSION) + +ENDMACRO(ADJUST_CMAKE_SYSTEM_VARIABLES _PREFIX) + +ADJUST_CMAKE_SYSTEM_VARIABLES(CMAKE_SYSTEM) +ADJUST_CMAKE_SYSTEM_VARIABLES(CMAKE_HOST_SYSTEM) + +# this file is also executed from cpack, then we don't need to generate these files +# in this case there is no CMAKE_BINARY_DIR +IF(CMAKE_BINARY_DIR) + # write entry to the log file + IF(PRESET_CMAKE_SYSTEM_NAME) + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "The target system is: ${CMAKE_SYSTEM_NAME} - ${CMAKE_SYSTEM_VERSION} - ${CMAKE_SYSTEM_PROCESSOR}\n") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "The host system is: ${CMAKE_HOST_SYSTEM_NAME} - ${CMAKE_HOST_SYSTEM_VERSION} - ${CMAKE_HOST_SYSTEM_PROCESSOR}\n") + ELSE(PRESET_CMAKE_SYSTEM_NAME) + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "The system is: ${CMAKE_SYSTEM_NAME} - ${CMAKE_SYSTEM_VERSION} - ${CMAKE_SYSTEM_PROCESSOR}\n") + ENDIF(PRESET_CMAKE_SYSTEM_NAME) + + # if a toolchain file is used, it needs to be included in the configured file, + # so settings done there are also available if they don't go in the cache and in TRY_COMPILE() + SET(INCLUDE_CMAKE_TOOLCHAIN_FILE_IF_REQUIRED) + IF(DEFINED CMAKE_TOOLCHAIN_FILE) + SET(INCLUDE_CMAKE_TOOLCHAIN_FILE_IF_REQUIRED "INCLUDE(\"${CMAKE_TOOLCHAIN_FILE}\")") + ENDIF(DEFINED CMAKE_TOOLCHAIN_FILE) + + # configure variables set in this file for fast reload, the template file is defined at the top of this file + CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeSystem.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake + IMMEDIATE @ONLY) + +ENDIF(CMAKE_BINARY_DIR) diff --git a/Modules/CMakeDetermineVSServicePack.cmake b/Modules/CMakeDetermineVSServicePack.cmake new file mode 100644 index 0000000..33f0141 --- /dev/null +++ b/Modules/CMakeDetermineVSServicePack.cmake @@ -0,0 +1,187 @@ +# - Includes a public function for assisting users in trying to determine the +# Visual Studio service pack in use. +# +# Sets the passed in variable to one of the following values or an empty +# string if unknown. +# vc80 +# vc80sp1 +# vc90 +# vc90sp1 +# vc100 +# vc100sp1 +# +# Usage: +# =========================== +# +# if(MSVC) +# include(CMakeDetermineVSServicePack) +# DetermineVSServicePack( my_service_pack ) +# +# if( my_service_pack ) +# message(STATUS "Detected: ${my_service_pack}") +# endif() +# endif() +# +# =========================== + +#============================================================================= +# Copyright 2009-2011 Kitware, Inc. +# Copyright 2009-2010 Philip Lowman +# Copyright 2010-2011 Aaron C. meadows +# +# 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.) + +# [INTERNAL] +# Please do not call this function directly +function(_DetermineVSServicePackFromCompiler _OUT_VAR _cl_version) + if (${_cl_version} VERSION_EQUAL "14.00.50727.42") + set(_version "vc80") + elseif(${_cl_version} VERSION_EQUAL "14.00.50727.762") + set(_version "vc80sp1") + elseif(${_cl_version} VERSION_EQUAL "15.00.21022.08") + set(_version "vc90") + elseif(${_cl_version} VERSION_EQUAL "15.00.30729.01") + set(_version "vc90sp1") + elseif(${_cl_version} VERSION_EQUAL "16.00.30319.01") + set(_version "vc100") + elseif(${_cl_version} VERSION_EQUAL "16.00.40219.01") + set(_version "vc100sp1") + else() + set(_version "") + endif() + set(${_OUT_VAR} ${_version} PARENT_SCOPE) +endfunction() + + +############################################################ +# [INTERNAL] +# Please do not call this function directly +function(_DetermineVSServicePack_FastCheckVersionWithCompiler _SUCCESS_VAR _VERSION_VAR) + if(EXISTS ${CMAKE_CXX_COMPILER}) + execute_process( + COMMAND ${CMAKE_CXX_COMPILER} /? + ERROR_VARIABLE _output + OUTPUT_QUIET + ) + + string(REGEX MATCH "Compiler Version [0-9]+.[0-9]+.[0-9]+.[0-9]+" + _cl_version "${_output}") + + if(_cl_version) + string(REGEX MATCHALL "[0-9]+" + _cl_version_list "${_cl_version}") + list(GET _cl_version_list 0 _major) + list(GET _cl_version_list 1 _minor) + list(GET _cl_version_list 2 _patch) + list(GET _cl_version_list 3 _tweak) + + if("${_major}${_minor}" STREQUAL "${MSVC_VERSION}") + set(_cl_version ${_major}.${_minor}.${_patch}.${_tweak}) + else() + unset(_cl_version) + endif() + endif() + + if(_cl_version) + set(${_SUCCESS_VAR} true PARENT_SCOPE) + set(${_VERSION_VAR} ${_cl_version} PARENT_SCOPE) + endif() + endif() +endfunction() + +############################################################ +# [INTERNAL] +# Please do not call this function directly +function(_DetermineVSServicePack_CheckVersionWithTryCompile _SUCCESS_VAR _VERSION_VAR) + file(WRITE "${CMAKE_BINARY_DIR}/return0.cc" + "int main() { return 0; }\n") + + try_compile( + _CompileResult + "${CMAKE_BINARY_DIR}" + "${CMAKE_BINARY_DIR}/return0.cc" + OUTPUT_VARIABLE _output + COPY_FILE "${CMAKE_BINARY_DIR}/return0.cc") + + file(REMOVE "${CMAKE_BINARY_DIR}/return0.cc") + + string(REGEX MATCH "Compiler Version [0-9]+.[0-9]+.[0-9]+.[0-9]+" + _cl_version "${_output}") + + if(_cl_version) + string(REGEX MATCHALL "[0-9]+" + _cl_version_list "${_cl_version}") + + list(GET _cl_version_list 0 _major) + list(GET _cl_version_list 1 _minor) + list(GET _cl_version_list 2 _patch) + list(GET _cl_version_list 3 _tweak) + + set(${_SUCCESS_VAR} true PARENT_SCOPE) + set(${_VERSION_VAR} ${_major}.${_minor}.${_patch}.${_tweak} PARENT_SCOPE) + endif() +endfunction() + +############################################################ +# [INTERNAL] +# Please do not call this function directly +function(_DetermineVSServicePack_CheckVersionWithTryRun _SUCCESS_VAR _VERSION_VAR) + file(WRITE "${CMAKE_BINARY_DIR}/return0.cc" + "#include \n\nconst unsigned int CompilerVersion=_MSC_FULL_VER;\n\nint main(int argc, char* argv[])\n{\n int M( CompilerVersion/10000000);\n int m((CompilerVersion%10000000)/100000);\n int b(CompilerVersion%100000);\n\n printf(\"%d.%02d.%05d.01\",M,m,b);\n return 0;\n}\n") + + try_run( + _RunResult + _CompileResult + "${CMAKE_BINARY_DIR}" + "${CMAKE_BINARY_DIR}/return0.cc" + RUN_OUTPUT_VARIABLE _runoutput + ) + + file(REMOVE "${CMAKE_BINARY_DIR}/return0.cc") + + string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+.[0-9]+" + _cl_version "${_runoutput}") + + if(_cl_version) + set(${_SUCCESS_VAR} true PARENT_SCOPE) + set(${_VERSION_VAR} ${_cl_version} PARENT_SCOPE) + endif() +endfunction() + + +# +# A function to call to determine the Visual Studio service pack +# in use. See documentation above. +function(DetermineVSServicePack _pack) + if(NOT DETERMINED_VS_SERVICE_PACK OR NOT ${_pack}) + + _DetermineVSServicePack_FastCheckVersionWithCompiler(DETERMINED_VS_SERVICE_PACK _cl_version) + if(NOT DETERMINED_VS_SERVICE_PACK) + _DetermineVSServicePack_CheckVersionWithTryCompile(DETERMINED_VS_SERVICE_PACK _cl_version) + if(NOT DETERMINED_VS_SERVICE_PACK) + _DetermineVSServicePack_CheckVersionWithTryRun(DETERMINED_VS_SERVICE_PACK _cl_version) + endif() + endif() + + if(DETERMINED_VS_SERVICE_PACK) + + if(_cl_version) + # Call helper function to determine VS version + _DetermineVSServicePackFromCompiler(_sp "${_cl_version}") + if(_sp) + set(${_pack} ${_sp} CACHE INTERNAL + "The Visual Studio Release with Service Pack") + endif() + endif() + endif() + endif() +endfunction() + diff --git a/Modules/CMakeExpandImportedTargets.cmake b/Modules/CMakeExpandImportedTargets.cmake new file mode 100644 index 0000000..fba071a --- /dev/null +++ b/Modules/CMakeExpandImportedTargets.cmake @@ -0,0 +1,129 @@ +# CMAKE_EXPAND_IMPORTED_TARGETS( LIBRARIES lib1 lib2...libN +# [CONFIGURATION ] ) +# +# CMAKE_EXPAND_IMPORTED_TARGETS() takes a list of libraries and replaces +# all imported targets contained in this list with their actual file paths +# of the referenced libraries on disk, including the libraries from their +# link interfaces. +# If a CONFIGURATION is given, it uses the respective configuration of the +# imported targets if it exists. If no CONFIGURATION is given, it uses +# the first configuration from ${CMAKE_CONFIGURATION_TYPES} if set, otherwise +# ${CMAKE_BUILD_TYPE}. +# This macro is used by all Check*.cmake files which use +# TRY_COMPILE() or TRY_RUN() and support CMAKE_REQUIRED_LIBRARIES , so that +# these checks support imported targets in CMAKE_REQUIRED_LIBRARIES: +# cmake_expand_imported_targets(expandedLibs LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} +# CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}" ) + + +#============================================================================= +# Copyright 2012 Kitware, Inc. +# Copyright 2009-2012 Alexander Neundorf +# +# 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) + +function(CMAKE_EXPAND_IMPORTED_TARGETS _RESULT ) + + set(options ) + set(oneValueArgs CONFIGURATION ) + set(multiValueArgs LIBRARIES ) + + cmake_parse_arguments(CEIT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(CEIT_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Unknown keywords given to CMAKE_EXPAND_IMPORTED_TARGETS(): \"${CEIT_UNPARSED_ARGUMENTS}\"") + endif() + + if(NOT CEIT_CONFIGURATION) + if(CMAKE_CONFIGURATION_TYPES) + list(GET CMAKE_CONFIGURATION_TYPES 0 CEIT_CONFIGURATION) + else() + set(CEIT_CONFIGURATION ${CMAKE_BUILD_TYPE}) + endif() + endif() + + # handle imported library targets + + set(_CCSR_REQ_LIBS ${CEIT_LIBRARIES}) + + set(_CHECK_FOR_IMPORTED_TARGETS TRUE) + set(_CCSR_LOOP_COUNTER 0) + while(_CHECK_FOR_IMPORTED_TARGETS) + math(EXPR _CCSR_LOOP_COUNTER "${_CCSR_LOOP_COUNTER} + 1 ") + set(_CCSR_NEW_REQ_LIBS ) + set(_CHECK_FOR_IMPORTED_TARGETS FALSE) + foreach(_CURRENT_LIB ${_CCSR_REQ_LIBS}) + get_target_property(_importedConfigs "${_CURRENT_LIB}" IMPORTED_CONFIGURATIONS) + if (_importedConfigs) +# message(STATUS "Detected imported target ${_CURRENT_LIB}") + # Ok, so this is an imported target. + # First we get the imported configurations. + # Then we get the location of the actual library on disk of the first configuration. + # then we'll get its link interface libraries property, + # iterate through it and replace all imported targets we find there + # with there actual location. + + # guard against infinite loop: abort after 100 iterations ( 100 is arbitrary chosen) + if ("${_CCSR_LOOP_COUNTER}" LESS 100) + set(_CHECK_FOR_IMPORTED_TARGETS TRUE) +# else ("${_CCSR_LOOP_COUNTER}" LESS 1) +# message(STATUS "********* aborting loop, counter : ${_CCSR_LOOP_COUNTER}") + endif ("${_CCSR_LOOP_COUNTER}" LESS 100) + + # if one of the imported configurations equals ${CMAKE_TRY_COMPILE_CONFIGURATION}, + # use it, otherwise simply use the first one: + list(FIND _importedConfigs "${CEIT_CONFIGURATION}" _configIndexToUse) + if("${_configIndexToUse}" EQUAL -1) + set(_configIndexToUse 0) + endif("${_configIndexToUse}" EQUAL -1) + list(GET _importedConfigs ${_configIndexToUse} _importedConfigToUse) + + get_target_property(_importedLocation "${_CURRENT_LIB}" IMPORTED_LOCATION_${_importedConfigToUse}) + get_target_property(_linkInterfaceLibs "${_CURRENT_LIB}" IMPORTED_LINK_INTERFACE_LIBRARIES_${_importedConfigToUse} ) + + list(APPEND _CCSR_NEW_REQ_LIBS "${_importedLocation}") +# message(STATUS "Appending lib ${_CURRENT_LIB} as ${_importedLocation}") + if(_linkInterfaceLibs) + foreach(_currentLinkInterfaceLib ${_linkInterfaceLibs}) +# message(STATUS "Appending link interface lib ${_currentLinkInterfaceLib}") + if(_currentLinkInterfaceLib) + list(APPEND _CCSR_NEW_REQ_LIBS "${_currentLinkInterfaceLib}" ) + endif(_currentLinkInterfaceLib) + endforeach(_currentLinkInterfaceLib "${_linkInterfaceLibs}") + endif(_linkInterfaceLibs) + else(_importedConfigs) + # "Normal" libraries are just used as they are. + list(APPEND _CCSR_NEW_REQ_LIBS "${_CURRENT_LIB}" ) +# message(STATUS "Appending lib directly: ${_CURRENT_LIB}") + endif(_importedConfigs) + endforeach(_CURRENT_LIB ${_CCSR_REQ_LIBS}) + + set(_CCSR_REQ_LIBS ${_CCSR_NEW_REQ_LIBS} ) + endwhile(_CHECK_FOR_IMPORTED_TARGETS) + + # Finally we iterate once more over all libraries. This loop only removes + # all remaining imported target names (there shouldn't be any left anyway). + set(_CCSR_NEW_REQ_LIBS ) + foreach(_CURRENT_LIB ${_CCSR_REQ_LIBS}) + get_target_property(_importedConfigs "${_CURRENT_LIB}" IMPORTED_CONFIGURATIONS) + if (NOT _importedConfigs) + list(APPEND _CCSR_NEW_REQ_LIBS "${_CURRENT_LIB}" ) +# message(STATUS "final: appending ${_CURRENT_LIB}") + else (NOT _importedConfigs) +# message(STATUS "final: skipping ${_CURRENT_LIB}") + endif (NOT _importedConfigs) + endforeach(_CURRENT_LIB ${_CCSR_REQ_LIBS}) +# message(STATUS "setting -${_RESULT}- to -${_CCSR_NEW_REQ_LIBS}-") + set(${_RESULT} "${_CCSR_NEW_REQ_LIBS}" PARENT_SCOPE) + +endfunction() diff --git a/Modules/CMakeExportBuildSettings.cmake b/Modules/CMakeExportBuildSettings.cmake new file mode 100644 index 0000000..8d316b9 --- /dev/null +++ b/Modules/CMakeExportBuildSettings.cmake @@ -0,0 +1,36 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is purposely no longer documented. It does nothing useful. +IF(NOT "${CMAKE_MINIMUM_REQUIRED_VERSION}" VERSION_LESS 2.7) + MESSAGE(FATAL_ERROR + "The functionality of this module has been dropped as of CMake 2.8. " + "It was deemed harmful (confusing users by changing their compiler). " + "Please remove calls to the CMAKE_EXPORT_BUILD_SETTINGS macro and " + "stop including this module. " + "If this project generates any files for use by external projects, " + "remove any use of the CMakeImportBuildSettings module from them.") +ENDIF() + +# This macro used to store build settings of a project in a file to be +# loaded by another project using CMAKE_IMPORT_BUILD_SETTINGS. Now it +# creates a file that refuses to load (with comment explaining why). +MACRO(CMAKE_EXPORT_BUILD_SETTINGS SETTINGS_FILE) + IF(${SETTINGS_FILE} MATCHES ".+") + CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeBuildSettings.cmake.in + ${SETTINGS_FILE} @ONLY IMMEDIATE) + ELSE(${SETTINGS_FILE} MATCHES ".+") + MESSAGE(SEND_ERROR "CMAKE_EXPORT_BUILD_SETTINGS called with no argument.") + ENDIF(${SETTINGS_FILE} MATCHES ".+") +ENDMACRO(CMAKE_EXPORT_BUILD_SETTINGS) diff --git a/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake b/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake new file mode 100644 index 0000000..1b4532d --- /dev/null +++ b/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake @@ -0,0 +1,120 @@ + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is included by CMakeFindEclipseCDT4.cmake and CMakeFindCodeBlocks.cmake + +# The Eclipse and the CodeBlocks generators need to know the standard include path +# so that they can find the headers at runtime and parsing etc. works better +# This is done here by actually running gcc with the options so it prints its +# system include directories, which are parsed then and stored in the cache. +MACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _resultIncludeDirs _resultDefines) + SET(${_resultIncludeDirs}) + SET(_gccOutput) + FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy" "\n" ) + + IF (${_lang} STREQUAL "c++") + SET(_compilerExecutable "${CMAKE_CXX_COMPILER}") + SET(_arg1 "${CMAKE_CXX_COMPILER_ARG1}") + ELSE () + SET(_compilerExecutable "${CMAKE_C_COMPILER}") + SET(_arg1 "${CMAKE_C_COMPILER_ARG1}") + ENDIF () + EXECUTE_PROCESS(COMMAND ${_compilerExecutable} ${_arg1} -v -E -x ${_lang} -dD dummy + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles + ERROR_VARIABLE _gccOutput + OUTPUT_VARIABLE _gccStdout ) + FILE(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy") + + # First find the system include dirs: + IF( "${_gccOutput}" MATCHES "> search starts here[^\n]+\n *(.+ *\n) *End of (search) list" ) + + # split the output into lines and then remove leading and trailing spaces from each of them: + STRING(REGEX MATCHALL "[^\n]+\n" _includeLines "${CMAKE_MATCH_1}") + FOREACH(nextLine ${_includeLines}) + STRING(STRIP "${nextLine}" _includePath) + LIST(APPEND ${_resultIncludeDirs} "${_includePath}") + ENDFOREACH(nextLine) + + ENDIF() + + + # now find the builtin macros: + STRING(REGEX MATCHALL "#define[^\n]+\n" _defineLines "${_gccStdout}") +# A few example lines which the regexp below has to match properly: +# #define MAX(a,b) ((a) > (b) ? (a) : (b)) +# #define __fastcall __attribute__((__fastcall__)) +# #define FOO (23) +# #define __UINTMAX_TYPE__ long long unsigned int +# #define __UINTMAX_TYPE__ long long unsigned int +# #define __i386__ 1 + + FOREACH(nextLine ${_defineLines}) + STRING(REGEX MATCH "^#define +([A-Za-z_][A-Za-z0-9_]*)(\\([^\\)]+\\))? +(.+) *$" _dummy "${nextLine}") + SET(_name "${CMAKE_MATCH_1}${CMAKE_MATCH_2}") + STRING(STRIP "${CMAKE_MATCH_3}" _value) + #MESSAGE(STATUS "m1: -${CMAKE_MATCH_1}- m2: -${CMAKE_MATCH_2}- m3: -${CMAKE_MATCH_3}-") + + LIST(APPEND ${_resultDefines} "${_name}") + IF(_value) + LIST(APPEND ${_resultDefines} "${_value}") + ELSE() + LIST(APPEND ${_resultDefines} " ") + ENDIF() + ENDFOREACH(nextLine) + +ENDMACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang) + +# Save the current LC_ALL, LC_MESSAGES, and LANG environment variables and set them +# to "C" that way GCC's "search starts here" text is in English and we can grok it. +SET(_orig_lc_all $ENV{LC_ALL}) +SET(_orig_lc_messages $ENV{LC_MESSAGES}) +SET(_orig_lang $ENV{LANG}) +IF(_orig_lc_all) + SET(ENV{LC_ALL} C) +ENDIF() +IF(_orig_lc_messages) + SET(ENV{LC_MESSAGES} C) +ENDIF() +IF(_orig_lang) + SET(ENV{LANG} C) +ENDIF() + +# Now check for C, works for gcc and Intel compiler at least +IF (NOT CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS) + IF ("${CMAKE_C_COMPILER_ID}" MATCHES GNU OR "${CMAKE_C_COMPILER_ID}" MATCHES Intel) + _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c _dirs _defines) + SET(CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "C compiler system include directories") + SET(CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "C compiler system defined macros") + ENDIF () +ENDIF () + +# And now the same for C++ +IF (NOT CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS) + IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU OR "${CMAKE_CXX_COMPILER_ID}" MATCHES Intel) + _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c++ _dirs _defines) + SET(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "CXX compiler system include directories") + SET(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "CXX compiler system defined macros") + ENDIF () +ENDIF () + +# Restore original LC_ALL, LC_MESSAGES, and LANG +IF(_orig_lc_all) + SET(ENV{LC_ALL} ${_orig_lc_all}) +ENDIF() +IF(_orig_lc_messages) + SET(ENV{LC_MESSAGES} ${_orig_lc_messages}) +ENDIF() +IF(_orig_lang) + SET(ENV{LANG} ${_orig_lang}) +ENDIF() diff --git a/Modules/CMakeFindBinUtils.cmake b/Modules/CMakeFindBinUtils.cmake new file mode 100644 index 0000000..64ec403 --- /dev/null +++ b/Modules/CMakeFindBinUtils.cmake @@ -0,0 +1,75 @@ + +# search for additional tools required for C/C++ (and other languages ?) +# +# If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used +# as prefix for the tools (e.g. arm-elf-gcc etc.) +# If the cmake variable _CMAKE_TOOLCHAIN_LOCATION is set, the compiler is +# searched only there. The other tools are at first searched there, then +# also in the default locations. +# +# Sets the following variables: +# CMAKE_AR +# CMAKE_RANLIB +# CMAKE_LINKER +# CMAKE_STRIP +# CMAKE_INSTALL_NAME_TOOL + +# on UNIX, cygwin and mingw + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# if it's the MS C/CXX compiler, search for link +IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC" + OR "${CMAKE_C_COMPILER_ID}" MATCHES "MSVC" + OR "${CMAKE_GENERATOR}" MATCHES "Visual Studio") + + FIND_PROGRAM(CMAKE_LINKER NAMES link HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + + MARK_AS_ADVANCED(CMAKE_LINKER) + +# in all other cases search for ar, ranlib, etc. +ELSE("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC" + OR "${CMAKE_C_COMPILER_ID}" MATCHES "MSVC" + OR "${CMAKE_GENERATOR}" MATCHES "Visual Studio") + + FIND_PROGRAM(CMAKE_AR NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ar HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + + FIND_PROGRAM(CMAKE_RANLIB NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ranlib HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + IF(NOT CMAKE_RANLIB) + SET(CMAKE_RANLIB : CACHE INTERNAL "noop for ranlib") + ENDIF(NOT CMAKE_RANLIB) + + FIND_PROGRAM(CMAKE_STRIP NAMES ${_CMAKE_TOOLCHAIN_PREFIX}strip HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + FIND_PROGRAM(CMAKE_LINKER NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ld HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + FIND_PROGRAM(CMAKE_NM NAMES ${_CMAKE_TOOLCHAIN_PREFIX}nm HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + FIND_PROGRAM(CMAKE_OBJDUMP NAMES ${_CMAKE_TOOLCHAIN_PREFIX}objdump HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + FIND_PROGRAM(CMAKE_OBJCOPY NAMES ${_CMAKE_TOOLCHAIN_PREFIX}objcopy HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + + MARK_AS_ADVANCED(CMAKE_AR CMAKE_RANLIB CMAKE_STRIP CMAKE_LINKER CMAKE_NM CMAKE_OBJDUMP CMAKE_OBJCOPY) + +ENDIF("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC" + OR "${CMAKE_C_COMPILER_ID}" MATCHES "MSVC" + OR "${CMAKE_GENERATOR}" MATCHES "Visual Studio") + + +# on Apple there really should be install_name_tool +IF(APPLE) + FIND_PROGRAM(CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + + IF(NOT CMAKE_INSTALL_NAME_TOOL) + MESSAGE(FATAL_ERROR "Could not find install_name_tool, please check your installation.") + ENDIF(NOT CMAKE_INSTALL_NAME_TOOL) + + MARK_AS_ADVANCED(CMAKE_INSTALL_NAME_TOOL) +ENDIF(APPLE) diff --git a/Modules/CMakeFindCodeBlocks.cmake b/Modules/CMakeFindCodeBlocks.cmake new file mode 100644 index 0000000..23f2c82 --- /dev/null +++ b/Modules/CMakeFindCodeBlocks.cmake @@ -0,0 +1,25 @@ + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is included in CMakeSystemSpecificInformation.cmake if +# the CodeBlocks extra generator has been selected. + +FIND_PROGRAM(CMAKE_CODEBLOCKS_EXECUTABLE NAMES codeblocks DOC "The CodeBlocks executable") + +IF(CMAKE_CODEBLOCKS_EXECUTABLE) + SET(CMAKE_OPEN_PROJECT_COMMAND "${CMAKE_CODEBLOCKS_EXECUTABLE} " ) +ENDIF(CMAKE_CODEBLOCKS_EXECUTABLE) + +# Determine builtin macros and include dirs: +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake) diff --git a/Modules/CMakeFindEclipseCDT4.cmake b/Modules/CMakeFindEclipseCDT4.cmake new file mode 100644 index 0000000..a4264e7 --- /dev/null +++ b/Modules/CMakeFindEclipseCDT4.cmake @@ -0,0 +1,79 @@ + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is included in CMakeSystemSpecificInformation.cmake if +# the Eclipse CDT4 extra generator has been selected. + +FIND_PROGRAM(CMAKE_ECLIPSE_EXECUTABLE NAMES eclipse DOC "The Eclipse executable") + +FUNCTION(_FIND_ECLIPSE_VERSION) + # This code is in a function so the variables used here have only local scope + IF(CMAKE_ECLIPSE_EXECUTABLE) + # use REALPATH to resolve symlinks (http://public.kitware.com/Bug/view.php?id=13036) + GET_FILENAME_COMPONENT(_REALPATH_CMAKE_ECLIPSE_EXECUTABLE "${CMAKE_ECLIPSE_EXECUTABLE}" REALPATH) + GET_FILENAME_COMPONENT(_ECLIPSE_DIR "${_REALPATH_CMAKE_ECLIPSE_EXECUTABLE}" PATH) + FILE(GLOB _ECLIPSE_FEATURE_DIR "${_ECLIPSE_DIR}/features/org.eclipse.platform*") + IF("${_ECLIPSE_FEATURE_DIR}" MATCHES ".+org.eclipse.platform_([0-9]+\\.[0-9]+).+") + SET(_ECLIPSE_VERSION ${CMAKE_MATCH_1}) + ENDIF() + ENDIF() + + # Set up a map with the names of the Eclipse releases: + SET(_ECLIPSE_VERSION_NAME_ "Unknown" ) + SET(_ECLIPSE_VERSION_NAME_3.2 "Callisto" ) + SET(_ECLIPSE_VERSION_NAME_3.3 "Europa" ) + SET(_ECLIPSE_VERSION_NAME_3.4 "Ganymede" ) + SET(_ECLIPSE_VERSION_NAME_3.5 "Galileo" ) + SET(_ECLIPSE_VERSION_NAME_3.6 "Helios" ) + SET(_ECLIPSE_VERSION_NAME_3.7 "Indigo" ) + + IF(_ECLIPSE_VERSION) + MESSAGE(STATUS "Found Eclipse version ${_ECLIPSE_VERSION} (${_ECLIPSE_VERSION_NAME_${_ECLIPSE_VERSION}})") + ELSE() + SET(_ECLIPSE_VERSION "3.6" ) + MESSAGE(STATUS "Could not determine Eclipse version, assuming at least ${_ECLIPSE_VERSION} (${_ECLIPSE_VERSION_NAME_${_ECLIPSE_VERSION}}). Adjust CMAKE_ECLIPSE_VERSION if this is wrong.") + ENDIF() + + SET(CMAKE_ECLIPSE_VERSION "${_ECLIPSE_VERSION} (${_ECLIPSE_VERSION_NAME_${_ECLIPSE_VERSION}})" CACHE STRING "The version of Eclipse. If Eclipse has not been found, 3.6 (Helios) is assumed.") + SET_PROPERTY(CACHE CMAKE_ECLIPSE_VERSION PROPERTY STRINGS "3.2 (${_ECLIPSE_VERSION_NAME_3.2})" + "3.3 (${_ECLIPSE_VERSION_NAME_3.3})" + "3.4 (${_ECLIPSE_VERSION_NAME_3.4})" + "3.5 (${_ECLIPSE_VERSION_NAME_3.5})" + "3.6 (${_ECLIPSE_VERSION_NAME_3.6})" + "3.7 (${_ECLIPSE_VERSION_NAME_3.7})") +ENDFUNCTION() + +_FIND_ECLIPSE_VERSION() + +# Try to find out how many CPUs we have and set the -j argument for make accordingly +SET(_CMAKE_ECLIPSE_INITIAL_MAKE_ARGS "") + +INCLUDE(ProcessorCount) +PROCESSORCOUNT(_CMAKE_ECLIPSE_PROCESSOR_COUNT) + +# Only set -j if we are under UNIX and if the make-tool used actually has "make" in the name +# (we may also get here in the future e.g. for ninja) +IF("${_CMAKE_ECLIPSE_PROCESSOR_COUNT}" GREATER 1 AND UNIX AND "${CMAKE_MAKE_PROGRAM}" MATCHES make) + SET(_CMAKE_ECLIPSE_INITIAL_MAKE_ARGS "-j${_CMAKE_ECLIPSE_PROCESSOR_COUNT}") +ENDIF() + +# This variable is used by the Eclipse generator and appended to the make invocation commands. +SET(CMAKE_ECLIPSE_MAKE_ARGUMENTS "${_CMAKE_ECLIPSE_INITIAL_MAKE_ARGS}" CACHE STRING "Additional command line arguments when Eclipse invokes make. Enter e.g. -j to get parallel builds") + +# This variable is used by the Eclipse generator in out-of-source builds only. +SET(CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT FALSE CACHE BOOL "If enabled, CMake will generate a source project for Eclipse in CMAKE_SOURCE_DIR") +MARK_AS_ADVANCED(CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT) + +# Determine builtin macros and include dirs: +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake) diff --git a/Modules/CMakeFindFrameworks.cmake b/Modules/CMakeFindFrameworks.cmake new file mode 100644 index 0000000..001da20 --- /dev/null +++ b/Modules/CMakeFindFrameworks.cmake @@ -0,0 +1,32 @@ +# - helper module to find OSX frameworks + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(NOT CMAKE_FIND_FRAMEWORKS_INCLUDED) + SET(CMAKE_FIND_FRAMEWORKS_INCLUDED 1) + MACRO(CMAKE_FIND_FRAMEWORKS fwk) + SET(${fwk}_FRAMEWORKS) + IF(APPLE) + FOREACH(dir + ~/Library/Frameworks/${fwk}.framework + /Library/Frameworks/${fwk}.framework + /System/Library/Frameworks/${fwk}.framework + /Network/Library/Frameworks/${fwk}.framework) + IF(EXISTS ${dir}) + SET(${fwk}_FRAMEWORKS ${${fwk}_FRAMEWORKS} ${dir}) + ENDIF(EXISTS ${dir}) + ENDFOREACH(dir) + ENDIF(APPLE) + ENDMACRO(CMAKE_FIND_FRAMEWORKS) +ENDIF(NOT CMAKE_FIND_FRAMEWORKS_INCLUDED) diff --git a/Modules/CMakeFindKDevelop3.cmake b/Modules/CMakeFindKDevelop3.cmake new file mode 100644 index 0000000..331dc6e --- /dev/null +++ b/Modules/CMakeFindKDevelop3.cmake @@ -0,0 +1,23 @@ + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is included in CMakeSystemSpecificInformation.cmake if +# the KDevelop3 extra generator has been selected. + +FIND_PROGRAM(CMAKE_KDEVELOP3_EXECUTABLE NAMES kdevelop DOC "The KDevelop3 executable") + +IF(CMAKE_KDEVELOP3_EXECUTABLE) + SET(CMAKE_OPEN_PROJECT_COMMAND "${CMAKE_KDEVELOP3_EXECUTABLE} " ) +ENDIF(CMAKE_KDEVELOP3_EXECUTABLE) + diff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake new file mode 100644 index 0000000..59c7ba5 --- /dev/null +++ b/Modules/CMakeFindPackageMode.cmake @@ -0,0 +1,188 @@ +# This file is executed by cmake when invoked with --find-package. +# It expects that the following variables are set using -D: +# NAME = name of the package +# COMPILER_ID = the CMake compiler ID for which the result is, i.e. GNU/Intel/Clang/MSVC, etc. +# LANGUAGE = language for which the result will be used, i.e. C/CXX/Fortan/ASM +# MODE = EXIST : only check for existance of the given package +# COMPILE : print the flags needed for compiling an object file which uses the given package +# LINK : print the flags needed for linking when using the given package +# QUIET = if TRUE, don't print anything + +#============================================================================= +# Copyright 2006-2011 Alexander Neundorf, +# +# 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.) + +if(NOT NAME) + message(FATAL_ERROR "Name of the package to be searched not specified. Set the CMake variable NAME, e.g. -DNAME=JPEG .") +endif() + +if(NOT COMPILER_ID) + message(FATAL_ERROR "COMPILER_ID argument not specified. In doubt, use GNU.") +endif() + +if(NOT LANGUAGE) + message(FATAL_ERROR "LANGUAGE argument not specified. Use C, CXX or Fortran.") +endif() + +if(NOT MODE) + message(FATAL_ERROR "MODE argument not specified. Use either EXIST, COMPILE or LINK.") +endif() + +# require the current version. If we don't do this, Platforms/CYGWIN.cmake complains because +# it doesn't know whether it should set WIN32 or not: +cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} ) + +macro(ENABLE_LANGUAGE) + # disable the enable_language() command, otherwise --find-package breaks on Windows. + # On Windows, enable_language(RC) is called in the platform files unconditionally. + # But in --find-package mode, we don't want (and can't) enable any language. +endmacro() + +include(CMakeDetermineSystem) + +# short-cut some tests on Darwin, see Darwin-GNU.cmake: +if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin AND "${COMPILER_ID}" MATCHES GNU) + set(${CMAKE_${LANGUAGE}_HAS_ISYSROOT} 0 ) + set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "") +endif() + +# Also load the system specific file, which sets up e.g. the search paths. +# This makes the FIND_XXX() calls work much better +include(CMakeSystemSpecificInformation) + +if(UNIX) + + # try to guess whether we have a 64bit system, if it has not been set + # from the outside + if(NOT CMAKE_SIZEOF_VOID_P) + set(CMAKE_SIZEOF_VOID_P 4) + if(EXISTS /usr/lib64) + set(CMAKE_SIZEOF_VOID_P 8) + else() + # use the file utility to check whether itself is 64 bit: + find_program(FILE_EXECUTABLE file) + if(FILE_EXECUTABLE) + 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() + endif() + endif() + endif() + + # guess Debian multiarch if it has not been set: + if(EXISTS /etc/debian_version) + if(NOT CMAKE_${LANGUAGE}_LANGUAGE_ARCHITECTURE ) + file(GLOB filesInLib RELATIVE /lib /lib/*-linux-gnu* ) + foreach(file ${filesInLib}) + if("${file}" MATCHES "${CMAKE_LIBRARY_ARCHITECTURE_REGEX}") + set(CMAKE_${LANGUAGE}_LANGUAGE_ARCHITECTURE ${file}) + break() + endif() + endforeach() + endif() + endif() + +endif() + +set(CMAKE_${LANGUAGE}_COMPILER "dummy") +set(CMAKE_${LANGUAGE}_COMPILER_ID "${COMPILER_ID}") +include(CMake${LANGUAGE}Information) + + +function(set_compile_flags_var _packageName) + string(TOUPPER "${_packageName}" PACKAGE_NAME) + # Check the following variables: + # FOO_INCLUDE_DIRS + # Foo_INCLUDE_DIRS + # FOO_INCLUDES + # Foo_INCLUDES + # FOO_INCLUDE_DIR + # Foo_INCLUDE_DIR + set(includes) + if(DEFINED ${_packageName}_INCLUDE_DIRS) + set(includes ${_packageName}_INCLUDE_DIRS) + elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIRS) + set(includes ${PACKAGE_NAME}_INCLUDE_DIRS) + elseif(DEFINED ${_packageName}_INCLUDES) + set(includes ${_packageName}_INCLUDES) + elseif(DEFINED ${PACKAGE_NAME}_INCLUDES) + set(includes ${PACKAGE_NAME}_INCLUDES) + elseif(DEFINED ${_packageName}_INCLUDE_DIR) + set(includes ${_packageName}_INCLUDE_DIR) + elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIR) + set(includes ${PACKAGE_NAME}_INCLUDE_DIR) + endif() + + set(PACKAGE_INCLUDE_DIRS "${${includes}}" PARENT_SCOPE) + + # Check the following variables: + # FOO_DEFINITIONS + # Foo_DEFINITIONS + set(definitions) + if(DEFINED ${_packageName}_DEFINITIONS) + set(definitions ${_packageName}_DEFINITIONS) + elseif(DEFINED ${PACKAGE_NAME}_DEFINITIONS) + set(definitions ${PACKAGE_NAME}_DEFINITIONS) + endif() + + set(PACKAGE_DEFINITIONS "${${definitions}}" ) + +endfunction() + + +function(set_link_flags_var _packageName) + string(TOUPPER "${_packageName}" PACKAGE_NAME) + # Check the following variables: + # FOO_LIBRARIES + # Foo_LIBRARIES + # FOO_LIBS + # Foo_LIBS + set(libs) + if(DEFINED ${_packageName}_LIBRARIES) + set(libs ${_packageName}_LIBRARIES) + elseif(DEFINED ${PACKAGE_NAME}_LIBRARIES) + set(libs ${PACKAGE_NAME}_LIBRARIES) + elseif(DEFINED ${_packageName}_LIBS) + set(libs ${_packageName}_LIBS) + elseif(DEFINED ${PACKAGE_NAME}_LIBS) + set(libs ${PACKAGE_NAME}_LIBS) + endif() + + set(PACKAGE_LIBRARIES "${${libs}}" PARENT_SCOPE ) + +endfunction() + + +find_package("${NAME}" QUIET) + +set(PACKAGE_FOUND FALSE) + +string(TOUPPER "${NAME}" UPPERCASE_NAME) + +if(${NAME}_FOUND OR ${UPPERCASE_NAME}_FOUND) + set(PACKAGE_FOUND TRUE) + + if("${MODE}" STREQUAL "EXIST") + # do nothing + elseif("${MODE}" STREQUAL "COMPILE") + set_compile_flags_var(${NAME}) + elseif("${MODE}" STREQUAL "LINK") + set_link_flags_var(${NAME}) + else("${MODE}" STREQUAL "LINK") + message(FATAL_ERROR "Invalid mode argument ${MODE} given.") + endif() + +endif() + +set(PACKAGE_QUIET ${SILENT} ) diff --git a/Modules/CMakeFindWMake.cmake b/Modules/CMakeFindWMake.cmake new file mode 100644 index 0000000..6972c4c --- /dev/null +++ b/Modules/CMakeFindWMake.cmake @@ -0,0 +1,17 @@ + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET (CMAKE_MAKE_PROGRAM "wmake" CACHE STRING + "Program used to build from makefiles.") +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) diff --git a/Modules/CMakeFindXCode.cmake b/Modules/CMakeFindXCode.cmake new file mode 100644 index 0000000..53967b5 --- /dev/null +++ b/Modules/CMakeFindXCode.cmake @@ -0,0 +1,20 @@ + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES xcodebuild + PATHS + /usr/bin + ) +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) diff --git a/Modules/CMakeForceCompiler.cmake b/Modules/CMakeForceCompiler.cmake new file mode 100644 index 0000000..2a839fd --- /dev/null +++ b/Modules/CMakeForceCompiler.cmake @@ -0,0 +1,82 @@ +# This module defines macros intended for use by cross-compiling +# toolchain files when CMake is not able to automatically detect the +# compiler identification. +# +# Macro CMAKE_FORCE_C_COMPILER has the following signature: +# CMAKE_FORCE_C_COMPILER( ) +# It sets CMAKE_C_COMPILER to the given compiler and the cmake +# internal variable CMAKE_C_COMPILER_ID to the given compiler-id. +# It also bypasses the check for working compiler and basic compiler +# information tests. +# +# Macro CMAKE_FORCE_CXX_COMPILER has the following signature: +# CMAKE_FORCE_CXX_COMPILER( ) +# It sets CMAKE_CXX_COMPILER to the given compiler and the cmake +# internal variable CMAKE_CXX_COMPILER_ID to the given compiler-id. +# It also bypasses the check for working compiler and basic compiler +# information tests. +# +# Macro CMAKE_FORCE_Fortran_COMPILER has the following signature: +# CMAKE_FORCE_Fortran_COMPILER( ) +# It sets CMAKE_Fortran_COMPILER to the given compiler and the cmake +# internal variable CMAKE_Fortran_COMPILER_ID to the given compiler-id. +# It also bypasses the check for working compiler and basic compiler +# information tests. +# +# So a simple toolchain file could look like this: +# INCLUDE (CMakeForceCompiler) +# SET(CMAKE_SYSTEM_NAME Generic) +# CMAKE_FORCE_C_COMPILER (chc12 MetrowerksHicross) +# CMAKE_FORCE_CXX_COMPILER (chc12 MetrowerksHicross) + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +MACRO(CMAKE_FORCE_C_COMPILER compiler id) + SET(CMAKE_C_COMPILER "${compiler}") + SET(CMAKE_C_COMPILER_ID_RUN TRUE) + SET(CMAKE_C_COMPILER_ID ${id}) + SET(CMAKE_C_COMPILER_WORKS TRUE) + SET(CMAKE_C_COMPILER_FORCED TRUE) + + # Set old compiler id variables. + IF("${CMAKE_C_COMPILER_ID}" MATCHES "GNU") + SET(CMAKE_COMPILER_IS_GNUCC 1) + ENDIF("${CMAKE_C_COMPILER_ID}" MATCHES "GNU") +ENDMACRO(CMAKE_FORCE_C_COMPILER) + +MACRO(CMAKE_FORCE_CXX_COMPILER compiler id) + SET(CMAKE_CXX_COMPILER "${compiler}") + SET(CMAKE_CXX_COMPILER_ID_RUN TRUE) + SET(CMAKE_CXX_COMPILER_ID ${id}) + SET(CMAKE_CXX_COMPILER_WORKS TRUE) + SET(CMAKE_CXX_COMPILER_FORCED TRUE) + + # Set old compiler id variables. + IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") + SET(CMAKE_COMPILER_IS_GNUCXX 1) + ENDIF("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") +ENDMACRO(CMAKE_FORCE_CXX_COMPILER) + +MACRO(CMAKE_FORCE_Fortran_COMPILER compiler id) + SET(CMAKE_Fortran_COMPILER "${compiler}") + SET(CMAKE_Fortran_COMPILER_ID_RUN TRUE) + SET(CMAKE_Fortran_COMPILER_ID ${id}) + SET(CMAKE_Fortran_COMPILER_WORKS TRUE) + SET(CMAKE_Fortran_COMPILER_FORCED TRUE) + + # Set old compiler id variables. + IF("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU") + SET(CMAKE_COMPILER_IS_GNUG77 1) + ENDIF("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU") +ENDMACRO(CMAKE_FORCE_Fortran_COMPILER) diff --git a/Modules/CMakeFortranCompiler.cmake.in b/Modules/CMakeFortranCompiler.cmake.in new file mode 100644 index 0000000..53d9552 --- /dev/null +++ b/Modules/CMakeFortranCompiler.cmake.in @@ -0,0 +1,52 @@ +SET(CMAKE_Fortran_COMPILER "@CMAKE_Fortran_COMPILER@") +SET(CMAKE_Fortran_COMPILER_ARG1 "@CMAKE_Fortran_COMPILER_ARG1@") +SET(CMAKE_Fortran_COMPILER_ID "@CMAKE_Fortran_COMPILER_ID@") +SET(CMAKE_Fortran_PLATFORM_ID "@CMAKE_Fortran_PLATFORM_ID@") +@SET_MSVC_Fortran_ARCHITECTURE_ID@ +SET(CMAKE_AR "@CMAKE_AR@") +SET(CMAKE_RANLIB "@CMAKE_RANLIB@") +SET(CMAKE_COMPILER_IS_GNUG77 @CMAKE_COMPILER_IS_GNUG77@) +SET(CMAKE_Fortran_COMPILER_LOADED 1) +SET(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@) +SET(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@) +IF(CMAKE_COMPILER_IS_CYGWIN) + SET(CYGWIN 1) + SET(UNIX 1) +ENDIF(CMAKE_COMPILER_IS_CYGWIN) + +SET(CMAKE_Fortran_COMPILER_ENV_VAR "FC") + +SET(CMAKE_Fortran_COMPILER_SUPPORTS_F90 @CMAKE_Fortran_COMPILER_SUPPORTS_F90@) + +IF(CMAKE_COMPILER_IS_MINGW) + SET(MINGW 1) +ENDIF(CMAKE_COMPILER_IS_MINGW) +SET(CMAKE_Fortran_COMPILER_ID_RUN 1) +SET(CMAKE_Fortran_SOURCE_FILE_EXTENSIONS f;F;f77;F77;f90;F90;for;For;FOR;f95;F95) +SET(CMAKE_Fortran_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +SET(CMAKE_Fortran_LINKER_PREFERENCE 20) +IF(UNIX) + SET(CMAKE_Fortran_OUTPUT_EXTENSION .o) +ELSE(UNIX) + SET(CMAKE_Fortran_OUTPUT_EXTENSION .obj) +ENDIF(UNIX) + +# Save compiler ABI information. +SET(CMAKE_Fortran_SIZEOF_DATA_PTR "@CMAKE_Fortran_SIZEOF_DATA_PTR@") +SET(CMAKE_Fortran_COMPILER_ABI "@CMAKE_Fortran_COMPILER_ABI@") +SET(CMAKE_Fortran_LIBRARY_ARCHITECTURE "@CMAKE_Fortran_LIBRARY_ARCHITECTURE@") + +IF(CMAKE_Fortran_SIZEOF_DATA_PTR AND NOT CMAKE_SIZEOF_VOID_P) + SET(CMAKE_SIZEOF_VOID_P "${CMAKE_Fortran_SIZEOF_DATA_PTR}") +ENDIF() + +IF(CMAKE_Fortran_COMPILER_ABI) + SET(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_Fortran_COMPILER_ABI}") +ENDIF(CMAKE_Fortran_COMPILER_ABI) + +IF(CMAKE_Fortran_LIBRARY_ARCHITECTURE) + SET(CMAKE_LIBRARY_ARCHITECTURE "@CMAKE_Fortran_LIBRARY_ARCHITECTURE@") +ENDIF() + +SET(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "@CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES@") +SET(CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES "@CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES@") diff --git a/Modules/CMakeFortranCompilerABI.F b/Modules/CMakeFortranCompilerABI.F new file mode 100644 index 0000000..7e24553 --- /dev/null +++ b/Modules/CMakeFortranCompilerABI.F @@ -0,0 +1,38 @@ + PROGRAM CMakeFortranCompilerABI +#if 0 +! Address Size +#endif +#if defined(_LP64) + PRINT *, 'INFO:sizeof_dptr[8]' +#elif defined(_M_IA64) + PRINT *, 'INFO:sizeof_dptr[8]' +#elif defined(_M_X64) + PRINT *, 'INFO:sizeof_dptr[8]' +#elif defined(_M_AMD64) + PRINT *, 'INFO:sizeof_dptr[8]' + +#elif defined(_ILP32) + PRINT *, 'INFO:sizeof_dptr[4]' +#elif defined(_M_IX86) + PRINT *, 'INFO:sizeof_dptr[4]' + +#elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8 + PRINT *, 'INFO:sizeof_dptr[8]' +#elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 4 + PRINT *, 'INFO:sizeof_dptr[4]' +#endif + +#if 0 +! Application Binary Interface +#endif +#if defined(__sgi) && defined(_ABIO32) + PRINT *, 'INFO:abi[ELF O32]' +#elif defined(__sgi) && defined(_ABIN32) + PRINT *, 'INFO:abi[ELF N32]' +#elif defined(__sgi) && defined(_ABI64) + PRINT *, 'INFO:abi[ELF 64]' +#elif defined(__ELF__) + PRINT *, 'INFO:abi[ELF]' +#endif + PRINT *, 'ABI Detection' + END diff --git a/Modules/CMakeFortranCompilerId.F.in b/Modules/CMakeFortranCompilerId.F.in new file mode 100644 index 0000000..4d25de0 --- /dev/null +++ b/Modules/CMakeFortranCompilerId.F.in @@ -0,0 +1,123 @@ + PROGRAM CMakeFortranCompilerId +#if 0 +! Identify the compiler +#endif +#if defined(__INTEL_COMPILER) || defined(__ICC) + PRINT *, 'INFO:compiler[Intel]' +#elif defined(__SUNPRO_F90) || defined(__SUNPRO_F95) + PRINT *, 'INFO:compiler[SunPro]' +#elif defined(_CRAYFTN) + PRINT *, 'INFO:compiler[Cray]' +#elif defined(__G95__) + PRINT *, 'INFO:compiler[G95]' +#elif defined(__PATHSCALE__) + PRINT *, 'INFO:compiler[PathScale]' +#elif defined(__ABSOFT__) + PRINT *, 'INFO:compiler[Absoft]' +#elif defined(__GNUC__) + PRINT *, 'INFO:compiler[GNU]' +#elif defined(__IBMC__) +# if defined(__COMPILER_VER__) + PRINT *, 'INFO:compiler[zOS]' +# elif __IBMC__ >= 800 + PRINT *, 'INFO:compiler[XL]' +# else + PRINT *, 'INFO:compiler[VisualAge]' +# endif +#elif defined(__PGI) + PRINT *, 'INFO:compiler[PGI]' +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) + PRINT *, 'INFO:compiler[MIPSpro]' +# if 0 +! This compiler is either not known or is too old to define an +! identification macro. Try to identify the platform and guess that +! it is the native compiler. +# endif +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) + PRINT *, 'INFO:compiler[VisualAge]' +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) + PRINT *, 'INFO:compiler[MIPSpro]' +#elif defined(__hpux) || defined(__hpux__) + PRINT *, 'INFO:compiler[HP]' +#elif 1 +# if 0 +! The above 'elif 1' instead of 'else' is to work around a bug in the +! SGI preprocessor which produces both the __sgi and else blocks. +# endif + PRINT *, 'INFO:compiler[]' +#endif + +#if 0 +! Identify the platform +#endif +#if defined(__linux) || defined(__linux__) || defined(linux) + PRINT *, 'INFO:platform[Linux]' +#elif defined(__CYGWIN__) + PRINT *, 'INFO:platform[Cygwin]' +#elif defined(__MINGW32__) + PRINT *, 'INFO:platform[MinGW]' +#elif defined(__APPLE__) + PRINT *, 'INFO:platform[Darwin]' +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) + PRINT *, 'INFO:platform[Windows]' +#elif defined(__FreeBSD__) || defined(__FreeBSD) + PRINT *, 'INFO:platform[FreeBSD]' +#elif defined(__NetBSD__) || defined(__NetBSD) + PRINT *, 'INFO:platform[NetBSD]' +#elif defined(__OpenBSD__) || defined(__OPENBSD) + PRINT *, 'INFO:platform[OpenBSD]' +#elif defined(__sun) || defined(sun) + PRINT *, 'INFO:platform[SunOS]' +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) + PRINT *, 'INFO:platform[AIX]' +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) + PRINT *, 'INFO:platform[IRIX]' +#elif defined(__hpux) || defined(__hpux__) + PRINT *, 'INFO:platform[HP-UX]' +#elif defined(__HAIKU) || defined(__HAIKU__) || defined(_HAIKU) + PRINT *, 'INFO:platform[Haiku]' +# if 0 +! Haiku also defines __BEOS__ so we must +! put it prior to the check for __BEOS__ +# endif +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) + PRINT *, 'INFO:platform[BeOS]' +#elif defined(__QNX__) || defined(__QNXNTO__) + PRINT *, 'INFO:platform[QNX]' +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) + PRINT *, 'INFO:platform[Tru64]' +#elif defined(__riscos) || defined(__riscos__) + PRINT *, 'INFO:platform[RISCos]' +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) + PRINT *, 'INFO:platform[SINIX]' +#elif defined(__UNIX_SV__) + PRINT *, 'INFO:platform[UNIX_SV]' +#elif defined(__bsdos__) + PRINT *, 'INFO:platform[BSDOS]' +#elif defined(_MPRAS) || defined(MPRAS) + PRINT *, 'INFO:platform[MP-RAS]' +#elif defined(__osf) || defined(__osf__) + PRINT *, 'INFO:platform[OSF1]' +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) + PRINT *, 'INFO:platform[SCO_SV]' +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) + PRINT *, 'INFO:platform[ULTRIX]' +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) + PRINT *, 'INFO:platform[Xenix]' +#elif 1 +# if 0 +! The above 'elif 1' instead of 'else' is to work around a bug in the +! SGI preprocessor which produces both the __sgi and else blocks. +# endif + PRINT *, 'INFO:platform[]' +#endif +#if defined(_WIN32) && (defined(__INTEL_COMPILER) || defined(__ICC)) +# if defined(_M_IA64) + PRINT *, 'INFO:arch[IA64]' +# elif defined(_M_X64) || defined(_M_AMD64) + PRINT *, 'INFO:arch[x64]' +# elif defined(_M_IX86) + PRINT *, 'INFO:arch[X86]' +# endif +#endif + END diff --git a/Modules/CMakeFortranInformation.cmake b/Modules/CMakeFortranInformation.cmake new file mode 100644 index 0000000..76cf34e --- /dev/null +++ b/Modules/CMakeFortranInformation.cmake @@ -0,0 +1,233 @@ + +#============================================================================= +# Copyright 2004-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file sets the basic flags for the Fortran language in CMake. +# It also loads the available platform file for the system-compiler +# if it exists. + +SET(_INCLUDED_FILE 0) + +# Load compiler-specific information. +IF(CMAKE_Fortran_COMPILER_ID) + INCLUDE(Compiler/${CMAKE_Fortran_COMPILER_ID}-Fortran OPTIONAL) +ENDIF(CMAKE_Fortran_COMPILER_ID) + +SET(CMAKE_BASE_NAME) +GET_FILENAME_COMPONENT(CMAKE_BASE_NAME ${CMAKE_Fortran_COMPILER} NAME_WE) +# since the gnu compiler has several names force g++ +IF(CMAKE_COMPILER_IS_GNUG77) + SET(CMAKE_BASE_NAME g77) +ENDIF(CMAKE_COMPILER_IS_GNUG77) +IF(CMAKE_Fortran_COMPILER_ID) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_Fortran_COMPILER_ID}-Fortran OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) +ENDIF(CMAKE_Fortran_COMPILER_ID) +IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL + RESULT_VARIABLE _INCLUDED_FILE) +ENDIF (NOT _INCLUDED_FILE) +# We specify the compiler information in the system file for some +# platforms, but this language may not have been enabled when the file +# was first included. Include it again to get the language info. +# Remove this when all compiler info is removed from system files. +IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL) +ENDIF (NOT _INCLUDED_FILE) + +IF(CMAKE_Fortran_SIZEOF_DATA_PTR) + FOREACH(f ${CMAKE_Fortran_ABI_FILES}) + INCLUDE(${f}) + ENDFOREACH() + UNSET(CMAKE_Fortran_ABI_FILES) +ENDIF() + +# This should be included before the _INIT variables are +# used to initialize the cache. Since the rule variables +# have if blocks on them, users can still define them here. +# But, it should still be after the platform file so changes can +# be made to those values. + +IF(CMAKE_USER_MAKE_RULES_OVERRIDE) + # Save the full path of the file so try_compile can use it. + INCLUDE(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override) + SET(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}") +ENDIF() + +IF(CMAKE_USER_MAKE_RULES_OVERRIDE_Fortran) + # Save the full path of the file so try_compile can use it. + INCLUDE(${CMAKE_USER_MAKE_RULES_OVERRIDE_Fortran} RESULT_VARIABLE _override) + SET(CMAKE_USER_MAKE_RULES_OVERRIDE_Fortran "${_override}") +ENDIF() + + +# Fortran needs cmake to do a requires step during its build process to +# catch any modules +SET(CMAKE_NEEDS_REQUIRES_STEP_Fortran_FLAG 1) + +# Create a set of shared library variable specific to Fortran +# For 90% of the systems, these are the same flags as the C versions +# so if these are not set just copy the flags from the c version +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS) + SET(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}) +ENDIF() + +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_Fortran_FLAGS) + SET(CMAKE_SHARED_LIBRARY_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) +ENDIF() + +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS) + SET(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS}) +ENDIF() + +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG) + SET(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG}) +ENDIF() + +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP) + SET(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP}) +ENDIF() + +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG) + SET(CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG}) +ENDIF() + +IF(NOT DEFINED CMAKE_EXE_EXPORTS_Fortran_FLAG) + SET(CMAKE_EXE_EXPORTS_Fortran_FLAG ${CMAKE_EXE_EXPORTS_C_FLAG}) +ENDIF() + +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG) + SET(CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_SONAME_C_FLAG}) +ENDIF() + +# for most systems a module is the same as a shared library +# so unless the variable CMAKE_MODULE_EXISTS is set just +# copy the values from the LIBRARY variables +IF(NOT CMAKE_MODULE_EXISTS) + SET(CMAKE_SHARED_MODULE_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_Fortran_FLAGS}) + SET(CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS}) +ENDIF(NOT CMAKE_MODULE_EXISTS) + +# repeat for modules +IF(NOT DEFINED CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS) + SET(CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS ${CMAKE_SHARED_MODULE_CREATE_C_FLAGS}) +ENDIF() + +IF(NOT DEFINED CMAKE_SHARED_MODULE_Fortran_FLAGS) + SET(CMAKE_SHARED_MODULE_Fortran_FLAGS ${CMAKE_SHARED_MODULE_C_FLAGS}) +ENDIF() + +IF(NOT DEFINED CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG) + SET(CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG}) +ENDIF() + +IF(NOT DEFINED CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG_SEP) + SET(CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP}) +ENDIF() + +IF(NOT DEFINED CMAKE_EXECUTABLE_RPATH_LINK_Fortran_FLAG) + SET(CMAKE_EXECUTABLE_RPATH_LINK_Fortran_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG}) +ENDIF() + +IF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_WITH_RUNTIME_PATH) + SET(CMAKE_SHARED_LIBRARY_LINK_Fortran_WITH_RUNTIME_PATH ${CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH}) +ENDIF(NOT DEFINED CMAKE_SHARED_LIBRARY_LINK_Fortran_WITH_RUNTIME_PATH) + +IF(NOT CMAKE_INCLUDE_FLAG_Fortran) + SET(CMAKE_INCLUDE_FLAG_Fortran ${CMAKE_INCLUDE_FLAG_C}) +ENDIF(NOT CMAKE_INCLUDE_FLAG_Fortran) + +IF(NOT CMAKE_INCLUDE_FLAG_SEP_Fortran) + SET(CMAKE_INCLUDE_FLAG_SEP_Fortran ${CMAKE_INCLUDE_FLAG_SEP_C}) +ENDIF(NOT CMAKE_INCLUDE_FLAG_SEP_Fortran) + +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.") + +SET(CMAKE_Fortran_FLAGS_INIT "$ENV{FFLAGS} ${CMAKE_Fortran_FLAGS_INIT}") +# avoid just having a space as the initial value for the cache +IF(CMAKE_Fortran_FLAGS_INIT STREQUAL " ") + SET(CMAKE_Fortran_FLAGS_INIT) +ENDIF(CMAKE_Fortran_FLAGS_INIT STREQUAL " ") +SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS_INIT}" CACHE STRING + "Flags for Fortran compiler.") + +INCLUDE(CMakeCommonLanguageInclude) + +# now define the following rule variables +# CMAKE_Fortran_CREATE_SHARED_LIBRARY +# CMAKE_Fortran_CREATE_SHARED_MODULE +# CMAKE_Fortran_COMPILE_OBJECT +# CMAKE_Fortran_LINK_EXECUTABLE + +# create a Fortran shared library +IF(NOT CMAKE_Fortran_CREATE_SHARED_LIBRARY) + SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY + " -o ") +ENDIF(NOT CMAKE_Fortran_CREATE_SHARED_LIBRARY) + +# create a Fortran shared module just copy the shared library rule +IF(NOT CMAKE_Fortran_CREATE_SHARED_MODULE) + SET(CMAKE_Fortran_CREATE_SHARED_MODULE ${CMAKE_Fortran_CREATE_SHARED_LIBRARY}) +ENDIF(NOT CMAKE_Fortran_CREATE_SHARED_MODULE) + +# Create a static archive incrementally for large object file counts. +# If CMAKE_Fortran_CREATE_STATIC_LIBRARY is set it will override these. +IF(NOT DEFINED CMAKE_Fortran_ARCHIVE_CREATE) + SET(CMAKE_Fortran_ARCHIVE_CREATE " cr ") +ENDIF() +IF(NOT DEFINED CMAKE_Fortran_ARCHIVE_APPEND) + SET(CMAKE_Fortran_ARCHIVE_APPEND " r ") +ENDIF() +IF(NOT DEFINED CMAKE_Fortran_ARCHIVE_FINISH) + SET(CMAKE_Fortran_ARCHIVE_FINISH " ") +ENDIF() + +# compile a Fortran file into an object file +# (put -o after -c to workaround bug in at least one mpif77 wrapper) +IF(NOT CMAKE_Fortran_COMPILE_OBJECT) + SET(CMAKE_Fortran_COMPILE_OBJECT + " -c -o ") +ENDIF(NOT CMAKE_Fortran_COMPILE_OBJECT) + +# link a fortran program +IF(NOT CMAKE_Fortran_LINK_EXECUTABLE) + SET(CMAKE_Fortran_LINK_EXECUTABLE + " -o ") +ENDIF(NOT CMAKE_Fortran_LINK_EXECUTABLE) + +IF(CMAKE_Fortran_STANDARD_LIBRARIES_INIT) + SET(CMAKE_Fortran_STANDARD_LIBRARIES "${CMAKE_Fortran_STANDARD_LIBRARIES_INIT}" + CACHE STRING "Libraries linked by defalut with all Fortran applications.") + MARK_AS_ADVANCED(CMAKE_Fortran_STANDARD_LIBRARIES) +ENDIF(CMAKE_Fortran_STANDARD_LIBRARIES_INIT) + +IF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) + SET (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG_INIT}" CACHE STRING + "Flags used by the compiler during debug builds.") + SET (CMAKE_Fortran_FLAGS_MINSIZEREL "${CMAKE_Fortran_FLAGS_MINSIZEREL_INIT}" CACHE STRING + "Flags used by the compiler during release minsize builds.") + SET (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE_INIT}" CACHE STRING + "Flags used by the compiler during release builds (/MD /Ob1 /Oi /Ot /Oy /Gs will produce slightly less optimized but smaller files).") + SET (CMAKE_Fortran_FLAGS_RELWITHDEBINFO "${CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING + "Flags used by the compiler during Release with Debug Info builds.") + +ENDIF(NOT CMAKE_NOT_USING_CONFIG_FLAGS) + +MARK_AS_ADVANCED( +CMAKE_Fortran_FLAGS +CMAKE_Fortran_FLAGS_DEBUG +CMAKE_Fortran_FLAGS_MINSIZEREL +CMAKE_Fortran_FLAGS_RELEASE +CMAKE_Fortran_FLAGS_RELWITHDEBINFO) + +# set this variable so we can avoid loading this more than once. +SET(CMAKE_Fortran_INFORMATION_LOADED 1) diff --git a/Modules/CMakeGenericSystem.cmake b/Modules/CMakeGenericSystem.cmake new file mode 100644 index 0000000..ee8040e --- /dev/null +++ b/Modules/CMakeGenericSystem.cmake @@ -0,0 +1,175 @@ + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") # -pic +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") # -shared +SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "") # -rpath +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "") # : or empty +SET(CMAKE_INCLUDE_FLAG_C "-I") # -I +SET(CMAKE_INCLUDE_FLAG_C_SEP "") # , or empty +SET(CMAKE_LIBRARY_PATH_FLAG "-L") +SET(CMAKE_LIBRARY_PATH_TERMINATOR "") # for the Digital Mars D compiler the link paths have to be terminated with a "/" +SET(CMAKE_LINK_LIBRARY_FLAG "-l") + +SET(CMAKE_LINK_LIBRARY_SUFFIX "") +SET(CMAKE_STATIC_LIBRARY_PREFIX "lib") +SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a") +SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so") # .so +SET(CMAKE_EXECUTABLE_SUFFIX "") # .exe +SET(CMAKE_DL_LIBS "dl") + +SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") +SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a") + +# basically all general purpose OSs support shared libs +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.") + +IF(CMAKE_GENERATOR MATCHES "Makefiles") + SET(CMAKE_COLOR_MAKEFILE ON CACHE BOOL + "Enable/Disable color output during build." + ) + MARK_AS_ADVANCED(CMAKE_COLOR_MAKEFILE) + IF(DEFINED CMAKE_RULE_MESSAGES) + SET_PROPERTY(GLOBAL PROPERTY RULE_MESSAGES ${CMAKE_RULE_MESSAGES}) + ENDIF(DEFINED CMAKE_RULE_MESSAGES) + IF(CMAKE_GENERATOR MATCHES "Unix Makefiles") + SET(CMAKE_EXPORT_COMPILE_COMMANDS OFF CACHE BOOL + "Enable/Disable output of compile commands during generation." + ) + MARK_AS_ADVANCED(CMAKE_EXPORT_COMPILE_COMMANDS) + ENDIF(CMAKE_GENERATOR MATCHES "Unix Makefiles") +ENDIF(CMAKE_GENERATOR MATCHES "Makefiles") + + +# GetDefaultWindowsPrefixBase +# +# Compute the base directory for CMAKE_INSTALL_PREFIX based on: +# - is this 32-bit or 64-bit Windows +# - is this 32-bit or 64-bit CMake running +# - what architecture targets will be built +# +function(GetDefaultWindowsPrefixBase var) + + # Try to guess what architecture targets will end up being built as, + # even if CMAKE_SIZEOF_VOID_P is not computed yet... We need to know + # the architecture of the targets being built to choose the right + # default value for CMAKE_INSTALL_PREFIX. + # + if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)") + set(arch_hint "x64") + elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") + set(arch_hint "x64") + elseif("$ENV{LIB}" MATCHES "(amd64|ia64)") + set(arch_hint "x64") + endif() + + if(NOT arch_hint) + set(arch_hint "x86") + endif() + + # default env in a 64-bit app on Win64: + # ProgramFiles=C:\Program Files + # ProgramFiles(x86)=C:\Program Files (x86) + # ProgramW6432=C:\Program Files + # + # default env in a 32-bit app on Win64: + # ProgramFiles=C:\Program Files (x86) + # ProgramFiles(x86)=C:\Program Files (x86) + # ProgramW6432=C:\Program Files + # + # default env in a 32-bit app on Win32: + # ProgramFiles=C:\Program Files + # ProgramFiles(x86) NOT DEFINED + # ProgramW6432 NOT DEFINED + + # By default, use the ProgramFiles env var as the base value of + # CMAKE_INSTALL_PREFIX: + # + set(_PREFIX_ENV_VAR "ProgramFiles") + + if ("$ENV{ProgramW6432}" STREQUAL "") + # running on 32-bit Windows + # must be a 32-bit CMake, too... + #message("guess: this is a 32-bit CMake running on 32-bit Windows") + else() + # running on 64-bit Windows + if ("$ENV{ProgramW6432}" STREQUAL "$ENV{ProgramFiles}") + # 64-bit CMake + #message("guess: this is a 64-bit CMake running on 64-bit Windows") + if(NOT "${arch_hint}" STREQUAL "x64") + # building 32-bit targets + set(_PREFIX_ENV_VAR "ProgramFiles(x86)") + endif() + else() + # 32-bit CMake + #message("guess: this is a 32-bit CMake running on 64-bit Windows") + if("${arch_hint}" STREQUAL "x64") + # building 64-bit targets + set(_PREFIX_ENV_VAR "ProgramW6432") + endif() + endif() + endif() + + #if("${arch_hint}" STREQUAL "x64") + # message("guess: you are building a 64-bit app") + #else() + # message("guess: you are building a 32-bit app") + #endif() + + if(NOT "$ENV{${_PREFIX_ENV_VAR}}" STREQUAL "") + file(TO_CMAKE_PATH "$ENV{${_PREFIX_ENV_VAR}}" _base) + elseif(NOT "$ENV{SystemDrive}" STREQUAL "") + set(_base "$ENV{SystemDrive}/Program Files") + else() + set(_base "C:/Program Files") + endif() + + set(${var} "${_base}" PARENT_SCOPE) +endfunction() + + +# Set a variable to indicate whether the value of CMAKE_INSTALL_PREFIX +# was initialized by the block below. This is useful for user +# projects to change the default prefix while still allowing the +# command line to override it. +IF(NOT DEFINED CMAKE_INSTALL_PREFIX) + SET(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 1) +ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX) + +# Choose a default install prefix for this platform. +IF(CMAKE_HOST_UNIX) + SET(CMAKE_INSTALL_PREFIX "/usr/local" + CACHE PATH "Install path prefix, prepended onto install directories.") +ELSE(CMAKE_HOST_UNIX) + GetDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES) + SET(CMAKE_INSTALL_PREFIX + "${CMAKE_GENERIC_PROGRAM_FILES}/${PROJECT_NAME}" + CACHE PATH "Install path prefix, prepended onto install directories.") + SET(CMAKE_GENERIC_PROGRAM_FILES) +ENDIF(CMAKE_HOST_UNIX) + +MARK_AS_ADVANCED( + CMAKE_SKIP_RPATH + CMAKE_SKIP_INSTALL_RPATH + CMAKE_VERBOSE_MAKEFILE +) diff --git a/Modules/CMakeImportBuildSettings.cmake b/Modules/CMakeImportBuildSettings.cmake new file mode 100644 index 0000000..848d894 --- /dev/null +++ b/Modules/CMakeImportBuildSettings.cmake @@ -0,0 +1,24 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is purposely no longer documented. It does nothing useful. + +# This macro used to load build settings from another project that +# stored settings using the CMAKE_EXPORT_BUILD_SETTINGS macro. +MACRO(CMAKE_IMPORT_BUILD_SETTINGS SETTINGS_FILE) + IF(${SETTINGS_FILE} MATCHES ".+") + ELSE(${SETTINGS_FILE} MATCHES ".+") + MESSAGE(SEND_ERROR "CMAKE_IMPORT_BUILD_SETTINGS called with no argument.") + ENDIF(${SETTINGS_FILE} MATCHES ".+") +ENDMACRO(CMAKE_IMPORT_BUILD_SETTINGS) diff --git a/Modules/CMakeJOMFindMake.cmake b/Modules/CMakeJOMFindMake.cmake new file mode 100644 index 0000000..617f3bb --- /dev/null +++ b/Modules/CMakeJOMFindMake.cmake @@ -0,0 +1,18 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + + +SET (CMAKE_MAKE_PROGRAM "jom" CACHE STRING + "Program used to build from makefiles.") +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) diff --git a/Modules/CMakeJavaCompiler.cmake.in b/Modules/CMakeJavaCompiler.cmake.in new file mode 100644 index 0000000..79c9288 --- /dev/null +++ b/Modules/CMakeJavaCompiler.cmake.in @@ -0,0 +1,13 @@ +SET(CMAKE_Java_COMPILER "@CMAKE_Java_COMPILER@") +SET(CMAKE_Java_COMPILER_ARG1 "@CMAKE_Java_COMPILER_ARG1@") +SET(CMAKE_Java_RUNTIME "@CMAKE_Java_RUNTIME@") +SET(CMAKE_Java_ARCHIVE "@CMAKE_Java_ARCHIVE@") +SET(CMAKE_Java_COMPILER_LOADED 1) + +SET(CMAKE_Java_SOURCE_FILE_EXTENSIONS java) +SET(CMAKE_Java_LINKER_PREFERENCE 40) +SET(CMAKE_Java_OUTPUT_EXTENSION .class) +SET(CMAKE_Java_OUTPUT_EXTENSION_REPLACE 1) +SET(CMAKE_STATIC_LIBRARY_PREFIX_Java "") +SET(CMAKE_STATIC_LIBRARY_SUFFIX_Java ".jar") +SET(CMAKE_Java_COMPILER_ENV_VAR "JAVA_COMPILER") diff --git a/Modules/CMakeJavaInformation.cmake b/Modules/CMakeJavaInformation.cmake new file mode 100644 index 0000000..e192db1 --- /dev/null +++ b/Modules/CMakeJavaInformation.cmake @@ -0,0 +1,59 @@ + +#============================================================================= +# Copyright 2004-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This should be included before the _INIT variables are +# used to initialize the cache. Since the rule variables +# have if blocks on them, users can still define them here. +# But, it should still be after the platform file so changes can +# be made to those values. + +IF(CMAKE_USER_MAKE_RULES_OVERRIDE) + # Save the full path of the file so try_compile can use it. + INCLUDE(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override) + SET(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}") +ENDIF() + +IF(CMAKE_USER_MAKE_RULES_OVERRIDE_Java) + # Save the full path of the file so try_compile can use it. + INCLUDE(${CMAKE_USER_MAKE_RULES_OVERRIDE_Java} RESULT_VARIABLE _override) + SET(CMAKE_USER_MAKE_RULES_OVERRIDE_Java "${_override}") +ENDIF() + +# this is a place holder if java needed flags for javac they would go here. +IF(NOT CMAKE_Java_CREATE_STATIC_LIBRARY) +# IF(WIN32) +# SET(class_files_mask "*.class") +# ELSE(WIN32) + SET(class_files_mask ".") +# ENDIF(WIN32) + + SET(CMAKE_Java_CREATE_STATIC_LIBRARY + " -cf -C ${class_files_mask}") + # "${class_files_mask}" should really be "" but compling a *.java + # file can create more than one *.class file... +ENDIF(NOT CMAKE_Java_CREATE_STATIC_LIBRARY) + +# compile a Java file into an object file +IF(NOT CMAKE_Java_COMPILE_OBJECT) + SET(CMAKE_Java_COMPILE_OBJECT + " -d ") +ENDIF(NOT CMAKE_Java_COMPILE_OBJECT) + +# set java include flag option and the separator for multiple include paths +SET(CMAKE_INCLUDE_FLAG_Java "-classpath ") +IF(WIN32 AND NOT CYGWIN) + SET(CMAKE_INCLUDE_FLAG_SEP_Java ";") +ELSE(WIN32 AND NOT CYGWIN) + SET(CMAKE_INCLUDE_FLAG_SEP_Java ":") +ENDIF(WIN32 AND NOT CYGWIN) diff --git a/Modules/CMakeMSYSFindMake.cmake b/Modules/CMakeMSYSFindMake.cmake new file mode 100644 index 0000000..95492a0 --- /dev/null +++ b/Modules/CMakeMSYSFindMake.cmake @@ -0,0 +1,20 @@ + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(CMAKE_MAKE_PROGRAM make + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MSYS-1.0_is1;Inno Setup: App Path]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW;InstallLocation]/bin" + c:/msys/1.0/bin /msys/1.0/bin) +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) diff --git a/Modules/CMakeMinGWFindMake.cmake b/Modules/CMakeMinGWFindMake.cmake new file mode 100644 index 0000000..f760d74 --- /dev/null +++ b/Modules/CMakeMinGWFindMake.cmake @@ -0,0 +1,24 @@ + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(CMAKE_MAKE_PROGRAM mingw32-make.exe PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW;InstallLocation]/bin" + c:/MinGW/bin /MinGW/bin) +FIND_PROGRAM(CMAKE_SH sh.exe ) +IF(CMAKE_SH) + MESSAGE(FATAL_ERROR "sh.exe was found in your PATH, here:\n${CMAKE_SH}\nFor MinGW make to work correctly sh.exe must NOT be in your path.\nRun cmake from a shell that does not have sh.exe in your PATH.\nIf you want to use a UNIX shell, then use MSYS Makefiles.\n") + SET(CMAKE_MAKE_PROGRAM NOTFOUND) +ENDIF(CMAKE_SH) + +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM CMAKE_SH) diff --git a/Modules/CMakeNMakeFindMake.cmake b/Modules/CMakeNMakeFindMake.cmake new file mode 100644 index 0000000..f647217 --- /dev/null +++ b/Modules/CMakeNMakeFindMake.cmake @@ -0,0 +1,18 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + + +SET (CMAKE_MAKE_PROGRAM "nmake" CACHE STRING + "Program used to build from makefiles.") +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) diff --git a/Modules/CMakeNinjaFindMake.cmake b/Modules/CMakeNinjaFindMake.cmake new file mode 100644 index 0000000..f15c3e0 --- /dev/null +++ b/Modules/CMakeNinjaFindMake.cmake @@ -0,0 +1,17 @@ + +#============================================================================= +# Copyright 2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(CMAKE_MAKE_PROGRAM ninja + DOC "Program used to build from build.ninja files.") +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) diff --git a/Modules/CMakePackageConfigHelpers.cmake b/Modules/CMakePackageConfigHelpers.cmake new file mode 100644 index 0000000..48039e5 --- /dev/null +++ b/Modules/CMakePackageConfigHelpers.cmake @@ -0,0 +1,227 @@ +# - CONFIGURE_PACKAGE_CONFIG_FILE(), WRITE_BASIC_PACKAGE_VERSION_FILE() +# +# CONFIGURE_PACKAGE_CONFIG_FILE( INSTALL_DESTINATION +# [PATH_VARS ... ] +# [NO_SET_AND_CHECK_MACRO] +# [NO_CHECK_REQUIRED_COMPONENTS_MACRO]) +# +# CONFIGURE_PACKAGE_CONFIG_FILE() should be used instead of the plain +# CONFIGURE_FILE() command when creating the Config.cmake or -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 and arguments are the input and output file, the same way +# as in CONFIGURE_FILE(). +# +# The 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 to given as PATH_VARS are the variables which contain +# install destinations. For each of them the macro will create a helper variable +# PACKAGE_. 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 two helper macros, +# set_and_check() and check_required_components() into the FooConfig.cmake file. +# +# set_and_check() 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. +# +# check_required_components() should be called at the end of the +# FooConfig.cmake file if the package supports components. +# This macro checks whether all requested, non-optional components have been found, +# and if this is not the case, sets the Foo_FOUND variable to FALSE, so that the package +# is considered to be not found. +# It does that by testing the Foo__FOUND variables for all requested +# required components. +# When using the NO_CHECK_REQUIRED_COMPONENTS option, 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|ExactVersion) ) +# +# Writes a file for use as ConfigVersion.cmake file to . +# 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. +# This mode should be used for packages which are fully backward compatible, +# also across major versions. +# 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. +# This mode should be used for packages which guarantee backward compatibility within the +# same major version. +# If ExactVersion is used, then the package is only considered compatible if the requested +# version matches exactly its own version number (not considering the tweak version). +# For example, version 1.2.3 of a package is only considered compatible to requested version 1.2.3. +# This mode is for packages without compatibility guarantees. +# 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@") +# +# check_required_components(Foo) + + +#============================================================================= +# Copyright 2012 Alexander Neundorf +# +# 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 NO_CHECK_REQUIRED_COMPONENTS_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() + + + if(NOT CCF_NO_CHECK_REQUIRED_COMPONENTS_MACRO) + set(PACKAGE_INIT "${PACKAGE_INIT} +macro(check_required_components _NAME) + foreach(comp \${\${_NAME}_FIND_COMPONENTS}) + if(NOT \${_NAME}_\${comp}_FOUND) + if(\${_NAME}_FIND_REQUIRED_\${comp}) + set(\${_NAME}_FOUND FALSE) + endif() + endif() + endforeach(comp) +endmacro() +") + endif() + + set(PACKAGE_INIT "${PACKAGE_INIT} +####################################################################################") + + configure_file("${_inputFile}" "${_outputFile}" @ONLY) + +endfunction() diff --git a/Modules/CMakeParseArguments.cmake b/Modules/CMakeParseArguments.cmake new file mode 100644 index 0000000..7ce4c49 --- /dev/null +++ b/Modules/CMakeParseArguments.cmake @@ -0,0 +1,138 @@ +# CMAKE_PARSE_ARGUMENTS( args...) +# +# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for +# parsing the arguments given to that macro or function. +# It processes the arguments and defines a set of variables which hold the +# values of the respective options. +# +# The argument contains all options for the respective macro, +# i.e. keywords which can be used when calling the macro without any value +# following, like e.g. the OPTIONAL keyword of the install() command. +# +# The argument contains all keywords for this macro +# which are followed by one value, like e.g. DESTINATION keyword of the +# install() command. +# +# The argument contains all keywords for this macro +# which can be followed by more than one value, like e.g. the TARGETS or +# FILES keywords of the install() command. +# +# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the +# keywords listed in , and +# a variable composed of the given +# followed by "_" and the name of the respective keyword. +# These variables will then hold the respective value from the argument list. +# For the keywords this will be TRUE or FALSE. +# +# All remaining arguments are collected in a variable +# _UNPARSED_ARGUMENTS, this can be checked afterwards to see whether +# your macro was called with unrecognized parameters. +# +# As an example here a my_install() macro, which takes similar arguments as the +# real install() command: +# +# function(MY_INSTALL) +# set(options OPTIONAL FAST) +# set(oneValueArgs DESTINATION RENAME) +# set(multiValueArgs TARGETS CONFIGURATIONS) +# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) +# ... +# +# Assume my_install() has been called like this: +# my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub) +# +# After the cmake_parse_arguments() call the macro will have set the following +# variables: +# MY_INSTALL_OPTIONAL = TRUE +# MY_INSTALL_FAST = FALSE (this option was not used when calling my_install() +# MY_INSTALL_DESTINATION = "bin" +# MY_INSTALL_RENAME = "" (was not used) +# MY_INSTALL_TARGETS = "foo;bar" +# MY_INSTALL_CONFIGURATIONS = "" (was not used) +# MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL" +# +# You can the continue and process these variables. +# +# Keywords terminate lists of values, e.g. if directly after a one_value_keyword +# another recognized keyword follows, this is interpreted as the beginning of +# the new option. +# E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in +# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would +# be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor. + +#============================================================================= +# Copyright 2010 Alexander Neundorf +# +# 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.) + + +if(__CMAKE_PARSE_ARGUMENTS_INCLUDED) + return() +endif() +set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) + + +function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames) + # first set all result variables to empty/FALSE + foreach(arg_name ${_singleArgNames} ${_multiArgNames}) + set(${prefix}_${arg_name}) + endforeach(arg_name) + + foreach(option ${_optionNames}) + set(${prefix}_${option} FALSE) + endforeach(option) + + set(${prefix}_UNPARSED_ARGUMENTS) + + set(insideValues FALSE) + set(currentArgName) + + # now iterate over all arguments and fill the result variables + foreach(currentArg ${ARGN}) + list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword + list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword + list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword + + if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1) + if(insideValues) + if("${insideValues}" STREQUAL "SINGLE") + set(${prefix}_${currentArgName} ${currentArg}) + set(insideValues FALSE) + elseif("${insideValues}" STREQUAL "MULTI") + list(APPEND ${prefix}_${currentArgName} ${currentArg}) + endif() + else(insideValues) + list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg}) + endif(insideValues) + else() + if(NOT ${optionIndex} EQUAL -1) + set(${prefix}_${currentArg} TRUE) + set(insideValues FALSE) + elseif(NOT ${singleArgIndex} EQUAL -1) + set(currentArgName ${currentArg}) + set(${prefix}_${currentArgName}) + set(insideValues "SINGLE") + elseif(NOT ${multiArgIndex} EQUAL -1) + set(currentArgName ${currentArg}) + set(${prefix}_${currentArgName}) + set(insideValues "MULTI") + endif() + endif() + + endforeach(currentArg) + + # propagate the result variables to the caller: + foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames}) + set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE) + endforeach(arg_name) + set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE) + +endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs) diff --git a/Modules/CMakeParseImplicitLinkInfo.cmake b/Modules/CMakeParseImplicitLinkInfo.cmake new file mode 100644 index 0000000..ecb20dc --- /dev/null +++ b/Modules/CMakeParseImplicitLinkInfo.cmake @@ -0,0 +1,128 @@ + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Function parse implicit linker options. +# This is used internally by CMake and should not be included by user +# code. + +function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var log_var obj_regex) + set(implicit_libs_tmp "") + set(implicit_dirs_tmp) + set(log "") + + # Parse implicit linker arguments. + set(linker "CMAKE_LINKER-NOTFOUND") + if(CMAKE_LINKER) + get_filename_component(linker ${CMAKE_LINKER} NAME) + endif() + # Construct a regex to match linker lines. It must match both the + # whole line and just the command (argv[0]). + set(linker_regex "^( *|.*[/\\])(${linker}|ld|collect2)[^/\\]*( |$)") + set(linker_exclude_regex "collect2 version ") + set(log "${log} link line regex: [${linker_regex}]\n") + string(REGEX REPLACE "\r?\n" ";" output_lines "${text}") + foreach(line IN LISTS output_lines) + set(cmd) + if("${line}" MATCHES "${linker_regex}" AND + NOT "${line}" MATCHES "${linker_exclude_regex}") + if(UNIX) + separate_arguments(args UNIX_COMMAND "${line}") + else() + separate_arguments(args WINDOWS_COMMAND "${line}") + endif() + list(GET args 0 cmd) + endif() + if("${cmd}" MATCHES "${linker_regex}") + set(log "${log} link line: [${line}]\n") + string(REGEX REPLACE ";-([LYz]);" ";-\\1" args "${args}") + foreach(arg IN LISTS args) + if("${arg}" MATCHES "^-L(.:)?[/\\]") + # Unix search path. + string(REGEX REPLACE "^-L" "" dir "${arg}") + list(APPEND implicit_dirs_tmp ${dir}) + set(log "${log} arg [${arg}] ==> dir [${dir}]\n") + elseif("${arg}" MATCHES "^-l[^:]") + # Unix library. + string(REGEX REPLACE "^-l" "" lib "${arg}") + list(APPEND implicit_libs_tmp ${lib}) + set(log "${log} arg [${arg}] ==> lib [${lib}]\n") + elseif("${arg}" MATCHES "^(.:)?[/\\].*\\.a$") + # Unix library full path. + list(APPEND implicit_libs_tmp ${arg}) + set(log "${log} arg [${arg}] ==> lib [${arg}]\n") + elseif("${arg}" MATCHES "^(.:)?[/\\].*\\.o$" + AND obj_regex AND "${arg}" MATCHES "${obj_regex}") + # Object file full path. + list(APPEND implicit_libs_tmp ${arg}) + set(log "${log} arg [${arg}] ==> obj [${arg}]\n") + elseif("${arg}" MATCHES "^-Y(P,)?[^0-9]") + # Sun search path ([^0-9] avoids conflict with Mac -Y). + string(REGEX REPLACE "^-Y(P,)?" "" dirs "${arg}") + string(REPLACE ":" ";" dirs "${dirs}") + list(APPEND implicit_dirs_tmp ${dirs}) + set(log "${log} arg [${arg}] ==> dirs [${dirs}]\n") + elseif("${arg}" MATCHES "^-l:") + # HP named library. + list(APPEND implicit_libs_tmp ${arg}) + set(log "${log} arg [${arg}] ==> lib [${arg}]\n") + elseif("${arg}" MATCHES "^-z(all|default|weak)extract") + # Link editor option. + list(APPEND implicit_libs_tmp ${arg}) + set(log "${log} arg [${arg}] ==> opt [${arg}]\n") + else() + set(log "${log} arg [${arg}] ==> ignore\n") + endif() + endforeach() + break() + elseif("${line}" MATCHES "LPATH(=| is:? )") + set(log "${log} LPATH line: [${line}]\n") + # HP search path. + string(REGEX REPLACE ".*LPATH(=| is:? *)" "" paths "${line}") + string(REPLACE ":" ";" paths "${paths}") + list(APPEND implicit_dirs_tmp ${paths}) + set(log "${log} dirs [${paths}]\n") + else() + set(log "${log} ignore line: [${line}]\n") + endif() + endforeach() + + # Cleanup list of libraries and flags. + # We remove items that are not language-specific. + set(implicit_libs "") + foreach(lib IN LISTS implicit_libs_tmp) + if("${lib}" MATCHES "^(crt.*\\.o|gcc.*|System.*)$") + set(log "${log} remove lib [${lib}]\n") + else() + list(APPEND implicit_libs "${lib}") + endif() + endforeach() + + # Cleanup list of directories. + set(implicit_dirs "") + foreach(d IN LISTS implicit_dirs_tmp) + get_filename_component(dir "${d}" ABSOLUTE) + list(APPEND implicit_dirs "${dir}") + set(log "${log} collapse dir [${d}] ==> [${dir}]\n") + endforeach() + list(REMOVE_DUPLICATES implicit_dirs) + + # Log results. + set(log "${log} implicit libs: [${implicit_libs}]\n") + set(log "${log} implicit dirs: [${implicit_dirs}]\n") + + # Return results. + set(${lib_var} "${implicit_libs}" PARENT_SCOPE) + set(${dir_var} "${implicit_dirs}" PARENT_SCOPE) + set(${log_var} "${log}" PARENT_SCOPE) +endfunction() diff --git a/Modules/CMakePlatformId.h.in b/Modules/CMakePlatformId.h.in new file mode 100644 index 0000000..b69bf63 --- /dev/null +++ b/Modules/CMakePlatformId.h.in @@ -0,0 +1,154 @@ +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU) || defined(__HAIKU__) || defined(_HAIKU) +# define PLATFORM_ID "Haiku" +/* Haiku also defines __BEOS__ so we must + put it prior to the check for __BEOS__ +*/ + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + diff --git a/Modules/CMakePrintSystemInformation.cmake b/Modules/CMakePrintSystemInformation.cmake new file mode 100644 index 0000000..2c5d0f2 --- /dev/null +++ b/Modules/CMakePrintSystemInformation.cmake @@ -0,0 +1,46 @@ +# - print system information +# This file can be used for diagnostic purposes +# just include it in a project to see various internal CMake +# variables. + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +MESSAGE("CMAKE_SYSTEM is ${CMAKE_SYSTEM} ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION}") +MESSAGE("CMAKE_SYSTEM file is ${CMAKE_SYSTEM_INFO_FILE}") +MESSAGE("CMAKE_C_COMPILER is ${CMAKE_C_COMPILER}") +MESSAGE("CMAKE_CXX_COMPILER is ${CMAKE_CXX_COMPILER}") + + +MESSAGE("CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS is ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}") +MESSAGE("CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS is ${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS}") +MESSAGE("CMAKE_DL_LIBS is ${CMAKE_DL_LIBS}") +MESSAGE("CMAKE_SHARED_LIBRARY_PREFIX is ${CMAKE_SHARED_LIBRARY_PREFIX}") +MESSAGE("CMAKE_SHARED_LIBRARY_SUFFIX is ${CMAKE_SHARED_LIBRARY_SUFFIX}") +MESSAGE("CMAKE_COMPILER_IS_GNUCC = ${CMAKE_COMPILER_IS_GNUCC}") +MESSAGE("CMAKE_COMPILER_IS_GNUCXX = ${CMAKE_COMPILER_IS_GNUCXX}") + +MESSAGE("CMAKE_CXX_CREATE_SHARED_LIBRARY is ${CMAKE_CXX_CREATE_SHARED_LIBRARY}") +MESSAGE("CMAKE_CXX_CREATE_SHARED_MODULE is ${CMAKE_CXX_CREATE_SHARED_MODULE}") +MESSAGE("CMAKE_CXX_CREATE_STATIC_LIBRARY is ${CMAKE_CXX_CREATE_STATIC_LIBRARY}") +MESSAGE("CMAKE_CXX_COMPILE_OBJECT is ${CMAKE_CXX_COMPILE_OBJECT}") +MESSAGE("CMAKE_CXX_LINK_EXECUTABLE ${CMAKE_CXX_LINK_EXECUTABLE}") + +MESSAGE("CMAKE_C_CREATE_SHARED_LIBRARY is ${CMAKE_C_CREATE_SHARED_LIBRARY}") +MESSAGE("CMAKE_C_CREATE_SHARED_MODULE is ${CMAKE_C_CREATE_SHARED_MODULE}") +MESSAGE("CMAKE_C_CREATE_STATIC_LIBRARY is ${CMAKE_C_CREATE_STATIC_LIBRARY}") +MESSAGE("CMAKE_C_COMPILE_OBJECT is ${CMAKE_C_COMPILE_OBJECT}") +MESSAGE("CMAKE_C_LINK_EXECUTABLE ${CMAKE_C_LINK_EXECUTABLE}") + +MESSAGE("CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE ${CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE}") +MESSAGE("CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE ${CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE}") diff --git a/Modules/CMakePushCheckState.cmake b/Modules/CMakePushCheckState.cmake new file mode 100644 index 0000000..0a42128 --- /dev/null +++ b/Modules/CMakePushCheckState.cmake @@ -0,0 +1,61 @@ +# This module defines two macros: +# CMAKE_PUSH_CHECK_STATE() +# and +# CMAKE_POP_CHECK_STATE() +# These two macros can be used to save and restore the state of the variables +# CMAKE_REQUIRED_FLAGS, CMAKE_REQUIRED_DEFINITIONS, CMAKE_REQUIRED_LIBRARIES +# and CMAKE_REQUIRED_INCLUDES used by the various Check-files coming with CMake, +# like e.g. check_function_exists() etc. +# The variable contents are pushed on a stack, pushing multiple times is supported. +# This is useful e.g. when executing such tests in a Find-module, where they have to be set, +# but after the Find-module has been executed they should have the same value +# as they had before. +# +# Usage: +# cmake_push_check_state() +# set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -DSOME_MORE_DEF) +# check_function_exists(...) +# cmake_pop_check_state() + +#============================================================================= +# Copyright 2006-2011 Alexander Neundorf, +# +# 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.) + + +MACRO(CMAKE_PUSH_CHECK_STATE) + + IF(NOT DEFINED _CMAKE_PUSH_CHECK_STATE_COUNTER) + SET(_CMAKE_PUSH_CHECK_STATE_COUNTER 0) + ENDIF() + + MATH(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}+1") + + SET(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_INCLUDES}) + SET(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS}) + SET(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LIBRARIES}) + SET(_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_FLAGS}) +ENDMACRO(CMAKE_PUSH_CHECK_STATE) + +MACRO(CMAKE_POP_CHECK_STATE) + +# don't pop more than we pushed + IF("${_CMAKE_PUSH_CHECK_STATE_COUNTER}" GREATER "0") + + SET(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + SET(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + SET(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + SET(CMAKE_REQUIRED_FLAGS ${_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}}) + + MATH(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}-1") + ENDIF() + +ENDMACRO(CMAKE_POP_CHECK_STATE) diff --git a/Modules/CMakeRCCompiler.cmake.in b/Modules/CMakeRCCompiler.cmake.in new file mode 100644 index 0000000..83428e2 --- /dev/null +++ b/Modules/CMakeRCCompiler.cmake.in @@ -0,0 +1,6 @@ +SET(CMAKE_RC_COMPILER "@CMAKE_RC_COMPILER@") +SET(CMAKE_RC_COMPILER_ARG1 "@CMAKE_RC_COMPILER_ARG1@") +SET(CMAKE_RC_COMPILER_LOADED 1) +SET(CMAKE_RC_SOURCE_FILE_EXTENSIONS rc) +SET(CMAKE_RC_OUTPUT_EXTENSION @CMAKE_RC_OUTPUT_EXTENSION@) +SET(CMAKE_RC_COMPILER_ENV_VAR "RC") diff --git a/Modules/CMakeRCInformation.cmake b/Modules/CMakeRCInformation.cmake new file mode 100644 index 0000000..859fe11 --- /dev/null +++ b/Modules/CMakeRCInformation.cmake @@ -0,0 +1,53 @@ + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + + +# This file sets the basic flags for the Fortran language in CMake. +# It also loads the available platform file for the system-compiler +# if it exists. + +# make sure we don't use CMAKE_BASE_NAME from somewhere else +SET(CMAKE_BASE_NAME) +GET_FILENAME_COMPONENT(CMAKE_BASE_NAME ${CMAKE_RC_COMPILER} NAME_WE) +IF("${CMAKE_BASE_NAME}" MATCHES "windres") + SET(CMAKE_BASE_NAME "windres") +ENDIF() +SET(CMAKE_SYSTEM_AND_RC_COMPILER_INFO_FILE + ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake) +INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL) + + + +SET (CMAKE_RC_FLAGS "$ENV{RCFLAGS} ${CMAKE_RC_FLAGS_INIT}" CACHE STRING + "Flags for Fortran compiler.") + +# These are the only types of flags that should be passed to the rc +# command, if COMPILE_FLAGS is used on a target this will be used +# to filter out any other flags +SET(CMAKE_RC_FLAG_REGEX "^[-/](D|I)") + +# now define the following rule variables +# CMAKE_RC_COMPILE_OBJECT +SET(CMAKE_INCLUDE_FLAG_RC "-I") +# compile a Resource file into an object file +IF(NOT CMAKE_RC_COMPILE_OBJECT) + SET(CMAKE_RC_COMPILE_OBJECT + " /fo ") +ENDIF(NOT CMAKE_RC_COMPILE_OBJECT) + +MARK_AS_ADVANCED( +CMAKE_RC_FLAGS +) +# set this variable so we can avoid loading this more than once. +SET(CMAKE_RC_INFORMATION_LOADED 1) diff --git a/Modules/CMakeSystem.cmake.in b/Modules/CMakeSystem.cmake.in new file mode 100644 index 0000000..a9f3a55 --- /dev/null +++ b/Modules/CMakeSystem.cmake.in @@ -0,0 +1,15 @@ +@INCLUDE_CMAKE_TOOLCHAIN_FILE_IF_REQUIRED@ + +SET(CMAKE_SYSTEM "@CMAKE_SYSTEM@") +SET(CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@") +SET(CMAKE_SYSTEM_VERSION "@CMAKE_SYSTEM_VERSION@") +SET(CMAKE_SYSTEM_PROCESSOR "@CMAKE_SYSTEM_PROCESSOR@") + +SET(CMAKE_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@") +SET(CMAKE_HOST_SYSTEM_NAME "@CMAKE_HOST_SYSTEM_NAME@") +SET(CMAKE_HOST_SYSTEM_VERSION "@CMAKE_HOST_SYSTEM_VERSION@") +SET(CMAKE_HOST_SYSTEM_PROCESSOR "@CMAKE_HOST_SYSTEM_PROCESSOR@") + +SET(CMAKE_CROSSCOMPILING "@CMAKE_CROSSCOMPILING@") + +SET(CMAKE_SYSTEM_LOADED 1) diff --git a/Modules/CMakeSystemSpecificInformation.cmake b/Modules/CMakeSystemSpecificInformation.cmake new file mode 100644 index 0000000..faa9e36 --- /dev/null +++ b/Modules/CMakeSystemSpecificInformation.cmake @@ -0,0 +1,69 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is included by cmGlobalGenerator::EnableLanguage. +# It is included after the compiler has been determined, so +# we know things like the compiler name and if the compiler is gnu. + +# before cmake 2.6 these variables were set in cmMakefile.cxx. This is still +# done to keep scripts and custom language and compiler modules working. +# But they are reset here and set again in the platform files for the target +# platform, so they can be used for testing the target platform instead +# of testing the host platform. +SET(APPLE ) +SET(UNIX ) +SET(CYGWIN ) +SET(WIN32 ) + + +# include Generic system information +INCLUDE(CMakeGenericSystem) + +# 2. now include SystemName.cmake file to set the system specific information +SET(CMAKE_SYSTEM_INFO_FILE Platform/${CMAKE_SYSTEM_NAME}) + +INCLUDE(${CMAKE_SYSTEM_INFO_FILE} OPTIONAL RESULT_VARIABLE _INCLUDED_SYSTEM_INFO_FILE) + +IF(NOT _INCLUDED_SYSTEM_INFO_FILE) + MESSAGE("System is unknown to cmake, create:\n${CMAKE_SYSTEM_INFO_FILE}" + " to use this system, please send your config file to " + "cmake@www.cmake.org so it can be added to cmake") + IF(EXISTS ${CMAKE_BINARY_DIR}/CMakeCache.txt) + CONFIGURE_FILE(${CMAKE_BINARY_DIR}/CMakeCache.txt + ${CMAKE_BINARY_DIR}/CopyOfCMakeCache.txt COPYONLY) + MESSAGE("Your CMakeCache.txt file was copied to CopyOfCMakeCache.txt. " + "Please send that file to cmake@www.cmake.org.") + ENDIF(EXISTS ${CMAKE_BINARY_DIR}/CMakeCache.txt) +ENDIF(NOT _INCLUDED_SYSTEM_INFO_FILE) + + +# optionally include a file which can do extra-generator specific things, e.g. +# CMakeFindEclipseCDT4.cmake asks gcc for the system include dirs for the Eclipse CDT4 generator +IF(CMAKE_EXTRA_GENERATOR) + STRING(REPLACE " " "" _CMAKE_EXTRA_GENERATOR_NO_SPACES ${CMAKE_EXTRA_GENERATOR} ) + INCLUDE("CMakeFind${_CMAKE_EXTRA_GENERATOR_NO_SPACES}" OPTIONAL) +ENDIF(CMAKE_EXTRA_GENERATOR) + + +# for most systems a module is the same as a shared library +# so unless the variable CMAKE_MODULE_EXISTS is set just +# copy the values from the LIBRARY variables +# this has to be done after the system information has been loaded +IF(NOT CMAKE_MODULE_EXISTS) + SET(CMAKE_SHARED_MODULE_PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}") + SET(CMAKE_SHARED_MODULE_SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}") +ENDIF(NOT CMAKE_MODULE_EXISTS) + + +SET(CMAKE_SYSTEM_SPECIFIC_INFORMATION_LOADED 1) diff --git a/Modules/CMakeTestASM-ATTCompiler.cmake b/Modules/CMakeTestASM-ATTCompiler.cmake new file mode 100644 index 0000000..581ad0c --- /dev/null +++ b/Modules/CMakeTestASM-ATTCompiler.cmake @@ -0,0 +1,23 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is used by EnableLanguage in cmGlobalGenerator to +# determine that the selected ASM-ATT "compiler" works. +# For assembler this can only check whether the compiler has been found, +# because otherwise there would have to be a separate assembler source file +# for each assembler on every architecture. + +SET(ASM_DIALECT "-ATT") +INCLUDE(CMakeTestASMCompiler) +SET(ASM_DIALECT) diff --git a/Modules/CMakeTestASMCompiler.cmake b/Modules/CMakeTestASMCompiler.cmake new file mode 100644 index 0000000..294511d --- /dev/null +++ b/Modules/CMakeTestASMCompiler.cmake @@ -0,0 +1,35 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is used by EnableLanguage in cmGlobalGenerator to +# determine that the selected ASM compiler works. +# For assembler this can only check whether the compiler has been found, +# because otherwise there would have to be a separate assembler source file +# for each assembler on every architecture. + + +SET(_ASM_COMPILER_WORKS 0) + +IF(CMAKE_ASM${ASM_DIALECT}_COMPILER) + SET(_ASM_COMPILER_WORKS 1) +ENDIF() + +# when using generic "ASM" support, we must have detected the compiler ID, fail otherwise: +IF("ASM${ASM_DIALECT}" STREQUAL "ASM") + IF(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) + SET(_ASM_COMPILER_WORKS 0) + ENDIF() +ENDIF() + +SET(CMAKE_ASM${ASM_DIALECT}_COMPILER_WORKS ${_ASM_COMPILER_WORKS} CACHE INTERNAL "") diff --git a/Modules/CMakeTestASM_MASMCompiler.cmake b/Modules/CMakeTestASM_MASMCompiler.cmake new file mode 100644 index 0000000..8369b94 --- /dev/null +++ b/Modules/CMakeTestASM_MASMCompiler.cmake @@ -0,0 +1,23 @@ + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is used by EnableLanguage in cmGlobalGenerator to +# determine that the selected ASM_MASM "compiler" (should be masm or masm64) +# works. For assembler this can only check whether the compiler has been found, +# because otherwise there would have to be a separate assembler source file +# for each assembler on every architecture. + +SET(ASM_DIALECT "_MASM") +INCLUDE(CMakeTestASMCompiler) +SET(ASM_DIALECT) diff --git a/Modules/CMakeTestASM_NASMCompiler.cmake b/Modules/CMakeTestASM_NASMCompiler.cmake new file mode 100644 index 0000000..a5e2bea --- /dev/null +++ b/Modules/CMakeTestASM_NASMCompiler.cmake @@ -0,0 +1,23 @@ + +#============================================================================= +# Copyright 2010 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.) + +# This file is used by EnableLanguage in cmGlobalGenerator to +# determine that the selected ASM_NASM "compiler" works. +# For assembler this can only check whether the compiler has been found, +# because otherwise there would have to be a separate assembler source file +# for each assembler on every architecture. + +SET(ASM_DIALECT "_NASM") +INCLUDE(CMakeTestASMCompiler) +SET(ASM_DIALECT) diff --git a/Modules/CMakeTestCCompiler.cmake b/Modules/CMakeTestCCompiler.cmake new file mode 100644 index 0000000..779b2f0 --- /dev/null +++ b/Modules/CMakeTestCCompiler.cmake @@ -0,0 +1,87 @@ + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(CMakeTestCompilerCommon) + +# This file is used by EnableLanguage in cmGlobalGenerator to +# determine that that selected C compiler can actually compile +# and link the most basic of programs. If not, a fatal error +# is set and cmake stops processing commands and will not generate +# any makefiles or projects. +IF(NOT CMAKE_C_COMPILER_WORKS) + PrintTestCompilerStatus("C" "") + FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCCompiler.c + "#ifdef __cplusplus\n" + "# error \"The CMAKE_C_COMPILER is set to a C++ compiler\"\n" + "#endif\n" + "#if defined(__CLASSIC_C__)\n" + "int main(argc, argv)\n" + " int argc;\n" + " char* argv[];\n" + "#else\n" + "int main(int argc, char* argv[])\n" + "#endif\n" + "{ (void)argv; return argc-1;}\n") + TRY_COMPILE(CMAKE_C_COMPILER_WORKS ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCCompiler.c + OUTPUT_VARIABLE __CMAKE_C_COMPILER_OUTPUT) + SET(C_TEST_WAS_RUN 1) +ENDIF(NOT CMAKE_C_COMPILER_WORKS) + +IF(NOT CMAKE_C_COMPILER_WORKS) + PrintTestCompilerStatus("C" " -- broken") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the C compiler works failed with " + "the following output:\n${__CMAKE_C_COMPILER_OUTPUT}\n\n") + # if the compiler is broken make sure to remove the platform file + # since Windows-cl configures both c/cxx files both need to be removed + # when c or c++ fails + FILE(REMOVE ${CMAKE_PLATFORM_ROOT_BIN}/CMakeCPlatform.cmake ) + FILE(REMOVE ${CMAKE_PLATFORM_ROOT_BIN}/CMakeCXXPlatform.cmake ) + MESSAGE(FATAL_ERROR "The C compiler \"${CMAKE_C_COMPILER}\" " + "is not able to compile a simple test program.\nIt fails " + "with the following output:\n ${__CMAKE_C_COMPILER_OUTPUT}\n\n" + "CMake will not be able to correctly generate this project.") +ELSE(NOT CMAKE_C_COMPILER_WORKS) + IF(C_TEST_WAS_RUN) + PrintTestCompilerStatus("C" " -- works") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the C compiler works passed with " + "the following output:\n${__CMAKE_C_COMPILER_OUTPUT}\n\n") + ENDIF(C_TEST_WAS_RUN) + SET(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "") + + IF(CMAKE_C_COMPILER_FORCED) + # The compiler configuration was forced by the user. + # Assume the user has configured all compiler information. + ELSE(CMAKE_C_COMPILER_FORCED) + # Try to identify the ABI and configure it into CMakeCCompiler.cmake + INCLUDE(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake) + CMAKE_DETERMINE_COMPILER_ABI(C ${CMAKE_ROOT}/Modules/CMakeCCompilerABI.c) + CONFIGURE_FILE( + ${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCCompiler.cmake + @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0 + ) + INCLUDE(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCCompiler.cmake) + ENDIF(CMAKE_C_COMPILER_FORCED) + IF(CMAKE_C_SIZEOF_DATA_PTR) + FOREACH(f ${CMAKE_C_ABI_FILES}) + INCLUDE(${f}) + ENDFOREACH() + UNSET(CMAKE_C_ABI_FILES) + ENDIF() +ENDIF(NOT CMAKE_C_COMPILER_WORKS) + +UNSET(__CMAKE_C_COMPILER_OUTPUT) diff --git a/Modules/CMakeTestCXXCompiler.cmake b/Modules/CMakeTestCXXCompiler.cmake new file mode 100644 index 0000000..87022e9 --- /dev/null +++ b/Modules/CMakeTestCXXCompiler.cmake @@ -0,0 +1,80 @@ + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(CMakeTestCompilerCommon) + +# This file is used by EnableLanguage in cmGlobalGenerator to +# determine that that selected C++ compiler can actually compile +# and link the most basic of programs. If not, a fatal error +# is set and cmake stops processing commands and will not generate +# any makefiles or projects. +IF(NOT CMAKE_CXX_COMPILER_WORKS) + PrintTestCompilerStatus("CXX" "") + FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCXXCompiler.cxx + "#ifndef __cplusplus\n" + "# error \"The CMAKE_CXX_COMPILER is set to a C compiler\"\n" + "#endif\n" + "int main(){return 0;}\n") + TRY_COMPILE(CMAKE_CXX_COMPILER_WORKS ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCXXCompiler.cxx + OUTPUT_VARIABLE __CMAKE_CXX_COMPILER_OUTPUT) + SET(CXX_TEST_WAS_RUN 1) +ENDIF(NOT CMAKE_CXX_COMPILER_WORKS) + +IF(NOT CMAKE_CXX_COMPILER_WORKS) + PrintTestCompilerStatus("CXX" " -- broken") + # if the compiler is broken make sure to remove the platform file + # since Windows-cl configures both c/cxx files both need to be removed + # when c or c++ fails + FILE(REMOVE ${CMAKE_PLATFORM_ROOT_BIN}/CMakeCPlatform.cmake ) + FILE(REMOVE ${CMAKE_PLATFORM_ROOT_BIN}/CMakeCXXPlatform.cmake ) + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the CXX compiler works failed with " + "the following output:\n${__CMAKE_CXX_COMPILER_OUTPUT}\n\n") + MESSAGE(FATAL_ERROR "The C++ compiler \"${CMAKE_CXX_COMPILER}\" " + "is not able to compile a simple test program.\nIt fails " + "with the following output:\n ${__CMAKE_CXX_COMPILER_OUTPUT}\n\n" + "CMake will not be able to correctly generate this project.") +ELSE(NOT CMAKE_CXX_COMPILER_WORKS) + IF(CXX_TEST_WAS_RUN) + PrintTestCompilerStatus("CXX" " -- works") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the CXX compiler works passed with " + "the following output:\n${__CMAKE_CXX_COMPILER_OUTPUT}\n\n") + ENDIF(CXX_TEST_WAS_RUN) + SET(CMAKE_CXX_COMPILER_WORKS 1 CACHE INTERNAL "") + + IF(CMAKE_CXX_COMPILER_FORCED) + # The compiler configuration was forced by the user. + # Assume the user has configured all compiler information. + ELSE(CMAKE_CXX_COMPILER_FORCED) + # Try to identify the ABI and configure it into CMakeCXXCompiler.cmake + INCLUDE(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake) + CMAKE_DETERMINE_COMPILER_ABI(CXX ${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp) + CONFIGURE_FILE( + ${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCXXCompiler.cmake + @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0 + ) + INCLUDE(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCXXCompiler.cmake) + ENDIF(CMAKE_CXX_COMPILER_FORCED) + IF(CMAKE_CXX_SIZEOF_DATA_PTR) + FOREACH(f ${CMAKE_CXX_ABI_FILES}) + INCLUDE(${f}) + ENDFOREACH() + UNSET(CMAKE_CXX_ABI_FILES) + ENDIF() +ENDIF(NOT CMAKE_CXX_COMPILER_WORKS) + +UNSET(__CMAKE_CXX_COMPILER_OUTPUT) diff --git a/Modules/CMakeTestCompilerCommon.cmake b/Modules/CMakeTestCompilerCommon.cmake new file mode 100644 index 0000000..fd8a105 --- /dev/null +++ b/Modules/CMakeTestCompilerCommon.cmake @@ -0,0 +1,21 @@ + +#============================================================================= +# Copyright 2010 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.) + +function(PrintTestCompilerStatus LANG MSG) + IF(CMAKE_GENERATOR MATCHES Make) + MESSAGE(STATUS "Check for working ${LANG} compiler: ${CMAKE_${LANG}_COMPILER}${MSG}") + ELSE() + MESSAGE(STATUS "Check for working ${LANG} compiler using: ${CMAKE_GENERATOR}${MSG}") + ENDIF() +endfunction() diff --git a/Modules/CMakeTestForFreeVC.cxx b/Modules/CMakeTestForFreeVC.cxx new file mode 100644 index 0000000..e580c1f --- /dev/null +++ b/Modules/CMakeTestForFreeVC.cxx @@ -0,0 +1,3 @@ +#include + +int main(){return 0;} diff --git a/Modules/CMakeTestFortranCompiler.cmake b/Modules/CMakeTestFortranCompiler.cmake new file mode 100644 index 0000000..b4dcea6 --- /dev/null +++ b/Modules/CMakeTestFortranCompiler.cmake @@ -0,0 +1,101 @@ + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(CMakeTestCompilerCommon) + +# This file is used by EnableLanguage in cmGlobalGenerator to +# determine that that selected Fortran compiler can actually compile +# and link the most basic of programs. If not, a fatal error +# is set and cmake stops processing commands and will not generate +# any makefiles or projects. +IF(NOT CMAKE_Fortran_COMPILER_WORKS) + PrintTestCompilerStatus("Fortran" "") + FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f " + PROGRAM TESTFortran + PRINT *, 'Hello' + END + ") + TRY_COMPILE(CMAKE_Fortran_COMPILER_WORKS ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f + OUTPUT_VARIABLE OUTPUT) + SET(FORTRAN_TEST_WAS_RUN 1) +ENDIF(NOT CMAKE_Fortran_COMPILER_WORKS) + +IF(NOT CMAKE_Fortran_COMPILER_WORKS) + PrintTestCompilerStatus("Fortran" " -- broken") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the Fortran compiler works failed with " + "the following output:\n${OUTPUT}\n\n") + MESSAGE(FATAL_ERROR "The Fortran compiler \"${CMAKE_Fortran_COMPILER}\" " + "is not able to compile a simple test program.\nIt fails " + "with the following output:\n ${OUTPUT}\n\n" + "CMake will not be able to correctly generate this project.") +ELSE(NOT CMAKE_Fortran_COMPILER_WORKS) + IF(FORTRAN_TEST_WAS_RUN) + PrintTestCompilerStatus("Fortran" " -- works") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the Fortran compiler works passed with " + "the following output:\n${OUTPUT}\n\n") + ENDIF(FORTRAN_TEST_WAS_RUN) + SET(CMAKE_Fortran_COMPILER_WORKS 1 CACHE INTERNAL "") + + IF(CMAKE_Fortran_COMPILER_FORCED) + # The compiler configuration was forced by the user. + # Assume the user has configured all compiler information. + ELSE(CMAKE_Fortran_COMPILER_FORCED) + # Try to identify the ABI and configure it into CMakeFortranCompiler.cmake + INCLUDE(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake) + CMAKE_DETERMINE_COMPILER_ABI(Fortran ${CMAKE_ROOT}/Modules/CMakeFortranCompilerABI.F) + + # Test for Fortran 90 support by using an f90-specific construct. + IF(NOT DEFINED CMAKE_Fortran_COMPILER_SUPPORTS_F90) + MESSAGE(STATUS "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90") + FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompilerF90.f90 " + PROGRAM TESTFortran90 + stop = 1 ; do while ( stop .eq. 0 ) ; end do + END PROGRAM TESTFortran90 +") + TRY_COMPILE(CMAKE_Fortran_COMPILER_SUPPORTS_F90 ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompilerF90.f90 + OUTPUT_VARIABLE OUTPUT) + IF(CMAKE_Fortran_COMPILER_SUPPORTS_F90) + MESSAGE(STATUS "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90 -- yes") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the Fortran compiler supports Fortran 90 passed with " + "the following output:\n${OUTPUT}\n\n") + SET(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1) + ELSE(CMAKE_Fortran_COMPILER_SUPPORTS_F90) + MESSAGE(STATUS "Checking whether ${CMAKE_Fortran_COMPILER} supports Fortran 90 -- no") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the Fortran compiler supports Fortran 90 failed with " + "the following output:\n${OUTPUT}\n\n") + SET(CMAKE_Fortran_COMPILER_SUPPORTS_F90 0) + ENDIF(CMAKE_Fortran_COMPILER_SUPPORTS_F90) + UNSET(CMAKE_Fortran_COMPILER_SUPPORTS_F90 CACHE) + ENDIF(NOT DEFINED CMAKE_Fortran_COMPILER_SUPPORTS_F90) + + CONFIGURE_FILE( + ${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeFortranCompiler.cmake + @ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0 + ) + INCLUDE(${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeFortranCompiler.cmake) + ENDIF(CMAKE_Fortran_COMPILER_FORCED) + IF(CMAKE_Fortran_SIZEOF_DATA_PTR) + FOREACH(f ${CMAKE_Fortran_ABI_FILES}) + INCLUDE(${f}) + ENDFOREACH() + UNSET(CMAKE_Fortran_ABI_FILES) + ENDIF() +ENDIF(NOT CMAKE_Fortran_COMPILER_WORKS) diff --git a/Modules/CMakeTestGNU.c b/Modules/CMakeTestGNU.c new file mode 100644 index 0000000..933e5a2 --- /dev/null +++ b/Modules/CMakeTestGNU.c @@ -0,0 +1,9 @@ +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) +void THIS_IS_GNU(); +#endif +#ifdef __MINGW32__ +void THIS_IS_MINGW(); +#endif +#ifdef __CYGWIN__ +void THIS_IS_CYGWIN(); +#endif diff --git a/Modules/CMakeTestJavaCompiler.cmake b/Modules/CMakeTestJavaCompiler.cmake new file mode 100644 index 0000000..cfd3e24 --- /dev/null +++ b/Modules/CMakeTestJavaCompiler.cmake @@ -0,0 +1,20 @@ + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is used by EnableLanguage in cmGlobalGenerator to +# determine that that selected Fortran compiler can actually compile +# and link the most basic of programs. If not, a fatal error +# is set and cmake stops processing commands and will not generate +# any makefiles or projects. +SET(CMAKE_Java_COMPILER_WORKS 1 CACHE INTERNAL "") diff --git a/Modules/CMakeTestNMakeCLVersion.c b/Modules/CMakeTestNMakeCLVersion.c new file mode 100644 index 0000000..3cece2a --- /dev/null +++ b/Modules/CMakeTestNMakeCLVersion.c @@ -0,0 +1,2 @@ +VERSION=_MSC_VER + diff --git a/Modules/CMakeTestRCCompiler.cmake b/Modules/CMakeTestRCCompiler.cmake new file mode 100644 index 0000000..a5c8d11 --- /dev/null +++ b/Modules/CMakeTestRCCompiler.cmake @@ -0,0 +1,23 @@ + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This file is used by EnableLanguage in cmGlobalGenerator to +# determine that that selected RC compiler can actually compile +# and link the most basic of programs. If not, a fatal error +# is set and cmake stops processing commands and will not generate +# any makefiles or projects. + +# For now there is no way to do a try compile on just a .rc file +# so just do nothing in here. +SET(CMAKE_RC_COMPILER_WORKS 1 CACHE INTERNAL "") diff --git a/Modules/CMakeTestWatcomVersion.c b/Modules/CMakeTestWatcomVersion.c new file mode 100644 index 0000000..0343fb1 --- /dev/null +++ b/Modules/CMakeTestWatcomVersion.c @@ -0,0 +1 @@ +VERSION=__WATCOMC__ diff --git a/Modules/CMakeUnixFindMake.cmake b/Modules/CMakeUnixFindMake.cmake new file mode 100644 index 0000000..39962c0 --- /dev/null +++ b/Modules/CMakeUnixFindMake.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(CMAKE_MAKE_PROGRAM NAMES gmake make smake) +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) diff --git a/Modules/CMakeVS10FindMake.cmake b/Modules/CMakeVS10FindMake.cmake new file mode 100644 index 0000000..695e92f --- /dev/null +++ b/Modules/CMakeVS10FindMake.cmake @@ -0,0 +1,54 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Look for devenv as a build program. We need to use this to support +# Intel Fortran integration into VS. MSBuild can not be used for that case +# since Intel Fortran uses the older devenv file format. +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES devenv + HINTS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VS;EnvironmentDirectory] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup;Dbghelp_path] + "$ENV{ProgramFiles}/Microsoft Visual Studio 10.0/Common7/IDE" + "$ENV{ProgramFiles}/Microsoft Visual Studio10.0/Common7/IDE" + "$ENV{ProgramFiles}/Microsoft Visual Studio 10/Common7/IDE" + "$ENV{ProgramFiles}/Microsoft Visual Studio10/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 10.0/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio10.0/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 10/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio10/Common7/IDE" + "/Program Files/Microsoft Visual Studio 10.0/Common7/IDE/" + "/Program Files/Microsoft Visual Studio 10/Common7/IDE/" + ) + +# if devenv is not found, then use MSBuild. +# it is expected that if devenv is not found, then we are +# dealing with Visual Studio Express. VCExpress has random +# failures when being run as a command line build tool which +# causes the compiler checks and try-compile stuff to fail. MSbuild +# is a better choice for this. However, VCExpress does not support +# cross compiling needed for Win CE. +IF(NOT CMAKE_CROSSCOMPILING) + FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES MSBuild + HINTS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VS;ProductDir] + "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;CLR Version]/" + "c:/WINDOWS/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;CLR Version]/" + "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\10.0;CLR Version]/") +ENDIF() + +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) +SET(MSVC10 1) +SET(MSVC_VERSION 1600) diff --git a/Modules/CMakeVS11FindMake.cmake b/Modules/CMakeVS11FindMake.cmake new file mode 100644 index 0000000..302efaa --- /dev/null +++ b/Modules/CMakeVS11FindMake.cmake @@ -0,0 +1,54 @@ + +#============================================================================= +# Copyright 2007-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Look for devenv as a build program. We need to use this to support +# Intel Fortran integration into VS. MSBuild can not be used for that case +# since Intel Fortran uses the older devenv file format. +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES devenv + HINTS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;EnvironmentDirectory] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup;Dbghelp_path] + "$ENV{ProgramFiles}/Microsoft Visual Studio 11.0/Common7/IDE" + "$ENV{ProgramFiles}/Microsoft Visual Studio11.0/Common7/IDE" + "$ENV{ProgramFiles}/Microsoft Visual Studio 11/Common7/IDE" + "$ENV{ProgramFiles}/Microsoft Visual Studio11/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 11.0/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio11.0/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 11/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio11/Common7/IDE" + "/Program Files/Microsoft Visual Studio 11.0/Common7/IDE/" + "/Program Files/Microsoft Visual Studio 11/Common7/IDE/" + ) + +# if devenv is not found, then use MSBuild. +# it is expected that if devenv is not found, then we are +# dealing with Visual Studio Express. VCExpress has random +# failures when being run as a command line build tool which +# causes the compiler checks and try-compile stuff to fail. MSbuild +# is a better choice for this. However, VCExpress does not support +# cross compiling needed for Win CE. +IF(NOT CMAKE_CROSSCOMPILING) + FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES MSBuild + HINTS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir] + "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;CLR Version]/" + "c:/WINDOWS/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;CLR Version]/" + "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\11.0;CLR Version]/") +ENDIF() + +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) +SET(MSVC11 1) +SET(MSVC_VERSION 1700) diff --git a/Modules/CMakeVS6BackwardCompatibility.cmake b/Modules/CMakeVS6BackwardCompatibility.cmake new file mode 100644 index 0000000..438f64f --- /dev/null +++ b/Modules/CMakeVS6BackwardCompatibility.cmake @@ -0,0 +1,26 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# hard code these for fast backwards compatibility tests +SET (CMAKE_SIZEOF_INT 4 CACHE INTERNAL "Size of int data type") +SET (CMAKE_SIZEOF_LONG 4 CACHE INTERNAL "Size of long data type") +SET (CMAKE_SIZEOF_VOID_P 4 CACHE INTERNAL "Size of void* data type") +SET (CMAKE_SIZEOF_CHAR 1 CACHE INTERNAL "Size of char data type") +SET (CMAKE_SIZEOF_SHORT 2 CACHE INTERNAL "Size of short data type") +SET (CMAKE_SIZEOF_FLOAT 4 CACHE INTERNAL "Size of float data type") +SET (CMAKE_SIZEOF_DOUBLE 8 CACHE INTERNAL "Size of double data type") +SET (CMAKE_NO_ANSI_FOR_SCOPE 1 CACHE INTERNAL + "Does the compiler support ansi for scope.") +SET (CMAKE_USE_WIN32_THREADS TRUE CACHE BOOL "Use the win32 thread library.") +SET (CMAKE_WORDS_BIGENDIAN 0 CACHE INTERNAL "endianness of bytes") diff --git a/Modules/CMakeVS6FindMake.cmake b/Modules/CMakeVS6FindMake.cmake new file mode 100644 index 0000000..dccf8c4 --- /dev/null +++ b/Modules/CMakeVS6FindMake.cmake @@ -0,0 +1,25 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES msdev + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\6.0\\Setup;VsCommonDir]/MSDev98/Bin + "c:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin" + "c:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin" + "/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin" + ) +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) +SET(MSVC60 1) +SET(MSVC_VERSION 1200) diff --git a/Modules/CMakeVS71FindMake.cmake b/Modules/CMakeVS71FindMake.cmake new file mode 100644 index 0000000..2381adb --- /dev/null +++ b/Modules/CMakeVS71FindMake.cmake @@ -0,0 +1,26 @@ + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES devenv + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.1\\Setup\\VS;EnvironmentDirectory] + "$ENV{ProgramFiles}/Microsoft Visual Studio .NET/Common7/IDE" + "c:/Program Files/Microsoft Visual Studio .NET/Common7/IDE" + "c:/Program Files/Microsoft Visual Studio.NET/Common7/IDE" + "/Program Files/Microsoft Visual Studio .NET/Common7/IDE/" + ) +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) +SET(MSVC71 1) +SET(MSVC_VERSION 1310) diff --git a/Modules/CMakeVS7BackwardCompatibility.cmake b/Modules/CMakeVS7BackwardCompatibility.cmake new file mode 100644 index 0000000..df0b3bb --- /dev/null +++ b/Modules/CMakeVS7BackwardCompatibility.cmake @@ -0,0 +1,26 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# hard code these for fast backwards compatibility tests +SET (CMAKE_SIZEOF_INT 4 CACHE INTERNAL "Size of int data type") +SET (CMAKE_SIZEOF_LONG 4 CACHE INTERNAL "Size of long data type") +SET (CMAKE_SIZEOF_VOID_P 4 CACHE INTERNAL "Size of void* data type") +SET (CMAKE_SIZEOF_CHAR 1 CACHE INTERNAL "Size of char data type") +SET (CMAKE_SIZEOF_SHORT 2 CACHE INTERNAL "Size of short data type") +SET (CMAKE_SIZEOF_FLOAT 4 CACHE INTERNAL "Size of float data type") +SET (CMAKE_SIZEOF_DOUBLE 8 CACHE INTERNAL "Size of double data type") +SET (CMAKE_NO_ANSI_FOR_SCOPE 0 CACHE INTERNAL + "Does the compiler support ansi for scope.") +SET (CMAKE_USE_WIN32_THREADS TRUE CACHE BOOL "Use the win32 thread library.") +SET (CMAKE_WORDS_BIGENDIAN 0 CACHE INTERNAL "endianness of bytes") diff --git a/Modules/CMakeVS7FindMake.cmake b/Modules/CMakeVS7FindMake.cmake new file mode 100644 index 0000000..665158c --- /dev/null +++ b/Modules/CMakeVS7FindMake.cmake @@ -0,0 +1,25 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES devenv + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.0\\Setup\\VS;EnvironmentDirectory] + "c:/Program Files/Microsoft Visual Studio .NET/Common7/IDE" + "c:/Program Files/Microsoft Visual Studio.NET/Common7/IDE" + "/Program Files/Microsoft Visual Studio .NET/Common7/IDE/" + ) +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) +SET(MSVC70 1) +SET(MSVC_VERSION 1300) diff --git a/Modules/CMakeVS8FindMake.cmake b/Modules/CMakeVS8FindMake.cmake new file mode 100644 index 0000000..bb08180 --- /dev/null +++ b/Modules/CMakeVS8FindMake.cmake @@ -0,0 +1,34 @@ + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# VCExpress does not support cross compiling, which is necessary for Win CE +SET( _CMAKE_MAKE_PROGRAM_NAMES devenv) +IF(NOT CMAKE_CROSSCOMPILING) + SET( _CMAKE_MAKE_PROGRAM_NAMES ${_CMAKE_MAKE_PROGRAM_NAMES} VCExpress) +ENDIF(NOT CMAKE_CROSSCOMPILING) + +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES ${_CMAKE_MAKE_PROGRAM_NAMES} + HINTS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VS;EnvironmentDirectory] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup;Dbghelp_path] + "$ENV{ProgramFiles}/Microsoft Visual Studio 8/Common7/IDE" + "$ENV{ProgramFiles}/Microsoft Visual Studio8/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 8/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio8/Common7/IDE" + "/Program Files/Microsoft Visual Studio 8/Common7/IDE/" + ) +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) +SET(MSVC80 1) +SET(MSVC_VERSION 1400) diff --git a/Modules/CMakeVS9FindMake.cmake b/Modules/CMakeVS9FindMake.cmake new file mode 100644 index 0000000..9e3c39e --- /dev/null +++ b/Modules/CMakeVS9FindMake.cmake @@ -0,0 +1,39 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# VCExpress does not support cross compiling, which is necessary for Win CE +SET( _CMAKE_MAKE_PROGRAM_NAMES devenv) +IF(NOT CMAKE_CROSSCOMPILING) + SET( _CMAKE_MAKE_PROGRAM_NAMES ${_CMAKE_MAKE_PROGRAM_NAMES} VCExpress) +ENDIF(NOT CMAKE_CROSSCOMPILING) + +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES ${_CMAKE_MAKE_PROGRAM_NAMES} + HINTS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VS;EnvironmentDirectory] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup;Dbghelp_path] + "$ENV{ProgramFiles}/Microsoft Visual Studio 9.0/Common7/IDE" + "$ENV{ProgramFiles}/Microsoft Visual Studio9.0/Common7/IDE" + "$ENV{ProgramFiles}/Microsoft Visual Studio 9/Common7/IDE" + "$ENV{ProgramFiles}/Microsoft Visual Studio9/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 9.0/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio9.0/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 9/Common7/IDE" + "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio9/Common7/IDE" + "/Program Files/Microsoft Visual Studio 9.0/Common7/IDE/" + "/Program Files/Microsoft Visual Studio 9/Common7/IDE/" + ) +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) +SET(MSVC90 1) +SET(MSVC_VERSION 1500) diff --git a/Modules/CMakeVerifyManifest.cmake b/Modules/CMakeVerifyManifest.cmake new file mode 100644 index 0000000..7578369 --- /dev/null +++ b/Modules/CMakeVerifyManifest.cmake @@ -0,0 +1,115 @@ +# CMakeVerifyManifest.cmake +# +# This script is used to verify that embeded manifests and +# side by side manifests for a project match. To run this +# script, cd to a directory and run the script with cmake -P. +# On the command line you can pass in versions that are OK even +# if not found in the .manifest files. For example, +# cmake -Dallow_versions=8.0.50608.0 -PCmakeVerifyManifest.cmake +# could be used to allow an embeded manifest of 8.0.50608.0 +# to be used in a project even if that version was not found +# in the .manifest file. + +# This script first recursively globs *.manifest files from +# the current directory. Then globs *.exe and *.dll. Each +# .exe and .dll is scanned for embeded manifests and the versions +# of CRT are compared to those found in the .manifest files +# from the first glob. + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + + +# crt_version: +# function to extract the CRT version from a file +# this can be passed a .exe, .dll, or a .manifest file +# it will put the list of versions found into the variable +# specified by list_var +function(crt_version file list_var) + file(STRINGS "${file}" strings REGEX "Microsoft.VC...CRT" NEWLINE_CONSUME) + foreach(s ${strings}) + set(has_match 1) + string(REGEX + REPLACE ".*.*$" "\\1" + version "${s}") + if(NOT "${version}" STREQUAL "") + list(APPEND version_list ${version}) + else() + message(FATAL_ERROR "Parse error could not find version in [${s}]") + endif() + endforeach(s) + if(NOT DEFINED has_match) + message("Information: no embeded manifest in: ${file}") + return() + endif() + list(APPEND version_list ${${list_var}}) + list(REMOVE_DUPLICATES version_list) + if(version_list) + set(${list_var} ${version_list} PARENT_SCOPE) + endif() +endfunction(crt_version) +set(fatal_error FALSE) + +# check_version: +# +# test a file against the shipped manifest versions +# for a directory +function(check_version file manifest_versions) + set(manifest_versions ${manifest_versions} ${allow_versions}) + # collect versions for a given file + crt_version(${file} file_versions) + # see if the versions + foreach(ver ${file_versions}) + list(FIND manifest_versions "${ver}" found_version) + if("${found_version}" EQUAL -1) + message("ERROR: ${file} uses ${ver} not found in shipped manifests:[${manifest_versions}].") + set(fatal_error TRUE PARENT_SCOPE) + endif() + endforeach(ver) + list(LENGTH file_versions len) + if(${len} GREATER 1) + message("WARNING: found more than one version of MICROSOFT.VC80.CRT referenced in ${file}: [${file_versions}]") + endif() +endfunction() + +# collect up the versions of CRT that are shipped +# in .manifest files +set(manifest_version_list ) +file(GLOB_RECURSE manifest_files "*.manifest") +foreach(f ${manifest_files}) + crt_version("${f}" manifest_version_list) +endforeach(f) +list(LENGTH manifest_version_list LEN) +if(LEN EQUAL 0) + message(FATAL_ERROR "No .manifest files found, no version check can be done.") +endif() +message("Versions found in ${manifest_files}: ${manifest_version_list}") +if(DEFINED allow_versions) + message("Extra versions allowed: ${allow_versions}") +endif() + +# now find all .exe and .dll files +# and call check_version on each of them +file(GLOB_RECURSE exe_files "*.exe") +file(GLOB_RECURSE dll_files "*.dll") +set(exe_files ${exe_files} ${dll_files}) +foreach(f ${exe_files}) + check_version(${f} "${manifest_version_list}") +endforeach() + +# report a fatal error if there were any so that cmake will return +# a non zero value +if(fatal_error) + message(FATAL_ERROR "This distribution embeds dll " + " versions that it does not ship, and may not work on other machines.") +endif() diff --git a/Modules/CPack.DS_Store.in b/Modules/CPack.DS_Store.in new file mode 100644 index 0000000000000000000000000000000000000000..5be0eeb180e736fd49c5745bcd42616374344970 GIT binary patch literal 12292 zcmeHL%}-N75T6A^kXjLt5KZJI98KP%;sNTxTG2{O&}f8{gnm5Alh`CS@irvZA(;d1jU<4QeMt~7u1Q>z80|ESJD;hZ9f8We< z&j>IA|0M#dJ~(KKrz~$7u1g0xeFXsTgIE*B!)gHTSe~-HWjJO)!kB^^Q(>*p-F7p$NS?3oUE5HZzw7n@Y1Xszht*k3G#L0S8ag^J!-{x zM#^I7JBzX&tOb76Nw{aN z_O0pty5=ZNdP_2Fl>D04J!GOW@k-%<9;ozZvQ^|o2|B1f<-A2+h|YWpCVus{EUO!C zp`?!3k?6_R8{}mr(lvP*bfVvuAHVB|ezt~qOirerU&c(7llK@48dLGmiI2T#Jv8|G zCH1d-#a^zMtt9W){Aw*($TovQQbn0eH-fNGOIp{-gLe|Ai}(_ESU#4Kp(--!B9kSZ z#W?lDDhsK};t0*^AUqv}r-JZI5S|U9BRRWpj*{?zIQA1$Cs#F4jIQF$RB%QDoTjWk zArfb(wh+qvZY?132)fS{w$^U+klncO1;0Ogf#kQmbgL-*|F6==#0YdE&}&2!>i&Nn z6_39IbYjF3M&MsZK=jSun@?kx_HNy=U-kCtpsk`QQhF`JwFx@?f(x!+%)z5qdZp_? zRq>SNEyE!J@rM8n19yx7BftnS0*nA7zz8q`i~u9R2rvSS03*N%FanIgA4T8?E&L#F literal 0 HcmV?d00001 diff --git a/Modules/CPack.Description.plist.in b/Modules/CPack.Description.plist.in new file mode 100644 index 0000000..3d11476 --- /dev/null +++ b/Modules/CPack.Description.plist.in @@ -0,0 +1,12 @@ + + + + + IFPkgDescriptionTitle + @CPACK_PACKAGE_NAME@ + IFPkgDescriptionVersion + @CPACK_PACKAGE_VERSION@ + IFPkgDescriptionDescription + @CPACK_PACKAGE_DESCRIPTION@ + + diff --git a/Modules/CPack.Info.plist.in b/Modules/CPack.Info.plist.in new file mode 100644 index 0000000..6e32500 --- /dev/null +++ b/Modules/CPack.Info.plist.in @@ -0,0 +1,37 @@ + + + + + +IFMajorVersion +@CPACK_PACKAGE_VERSION_MAJOR@ +IFMinorVersion +@CPACK_PACKAGE_VERSION_MINOR@ +IFPkgFlagAllowBackRev + +IFPkgFlagAuthorizationAction +AdminAuthorization +IFPkgFlagDefaultLocation +@CPACK_PACKAGE_DEFAULT_LOCATION@ +IFPkgFlagInstallFat + +IFPkgFlagIsRequired + +IFPkgFlagOverwritePermissions + +IFPkgFlagRelocatable +<@CPACK_PACKAGE_RELOCATABLE@/> +IFPkgFlagRestartAction +NoRestart +IFPkgFlagRootVolumeOnly + +IFPkgFlagUpdateInstalledLanguages + +IFPkgFlagUseUserMask + +IFPkgFormatVersion +0.10000000149011612 +CFBundleIdentifier +com.@CPACK_PACKAGE_VENDOR@.@CPACK_PACKAGE_NAME@@CPACK_MODULE_VERSION_SUFFIX@ + + diff --git a/Modules/CPack.OSXScriptLauncher.in b/Modules/CPack.OSXScriptLauncher.in new file mode 100755 index 0000000000000000000000000000000000000000..c715860463c5434cb471de58b710cbe95976c23f GIT binary patch literal 29592 zcmeHOe{5679sfSZw5EjOu349jG&nS9shVQCG0AB|=Rn+rl0sBMi?(*pFZN4f;$M4y zrcUP)Q$WHBw3#%dcIqf>3~kc1b^lCi*;cAfFxswS?NqT*O;k_`jaFkT+K;Zo`+VQK z=R6!kLEEHmyHn2hx$oWgd*A!qJ;!(N?xpk3{fvk_h#x~l@FOnjz(*tE)rbv5VI-e@ z0v{}sK{6m2kPJu$Bm$_7b0Jb+`9(3YT$i>iw5W^UR528tRHmOVI4=$N_l@_79#c-h*Z_o3nn8w z%+zmQLUfgn$cL1?PQB7JgpJ&IYABObb7p?%Hnv&oLu&|nM~SZGl=nTX02{Dt1;47s za;A|;j|jm`8wxsWldEJ+{|um(xu|3tKQ%c@Jz3;sByM@H52G^4nc7jobDCw@&A)=vpAy zrp91CX9Sapq2M(A{Cqrv$bP|Beg;0$f%)N?1Ku#E^YIDKgKNigrk)D+Cx#5o7!TfM zXes@nj4_rAuE-erTHV-~i0Qe-!;U<7pKjz5nRG7Lb3qN5L*O=e%XNsuk38#xB?|WJrpC~6 zQc&L5wU89n+m3JVB3*5woWi>+Z?f%);p2s`EesIq`9g=tTf%=lQGSlg@3;%H<$ySgf?a=cCEDx1-fEBQpuFW`<$W}3wy5JTp?$VJ!$uTbZKm!}Y(ZlmDSs;|=+kVp z(b!X=~pEK{pP4f%j@Yif_;^f~8ZvP=~hW-U( z5*i|off5KfZrQg_Mb>&xU)Rs&ontd%@vR z^k-d3qh6tpIoPm^$C&5;#MYCA3H^8hbE0|TuGb3_H@#e#!nk8zK8boemz9V%?+CO% zQf}DKxNC=>z+Zs-y?HFq@d)NJ=lL0V{)Nh4#q+SIc;}qL)FvuS?WSTVN=m3i9k6$6 zF*?66)k>k#ml0c0?jf(hMPMIe_|?Hagrdr=@Z(w5VL4=emX&r>2=X75+Ax>#{1tr- z`wyV))g`*LAB1PK74~hrn(!qYYNasbn5$%>oo;?M5WVc*1jZ8M*6))0ATJ8}QcDhB zt9^oxEMxzXhQu?}foBN)_sn(dgiw#$bo6GulCGanR->%no6#Vl%35BiiUH;zOgRxeoG<=t66naLX+n?y6 zE=2fGTBwbp&iL}!I{MvFE!$nn#iFsK8Qq#S#hiNvI?LFenCFdn&UWz}hn<09LqoxB zi|6mQ$v~&z%$m>0FR95dt;vUK^4&H0a816qCf`?+@2|-Z)Z_);rQ>=N^ zls2ZTaXqPx>v1)eiRY8Lnn)+igqBP^tQ%@fOD1!!`iYb_qGOqoPn%U6Bf6>D@-%+u zPTQWAkLp@n=d~IC&{tQl?ayS!^4Yc4s%>R@CEIkhv3hM!JZ|W@+?rv#3YX!BZDwdg z3^q7f2^XvF!)+|4jg&f^Psc20S>dw6jWgC4kDu@pqK{~P^vdI9H7YAf1|$QL0m*=5 zKr$d1kPJu$Bm&?}7vTPOVX3to5l$U~WBtEmG9MAKts+tvA=7 z0$wHX4&YINw*x;W@K)fx0+)af2wVhyL*N4NdjewzLzydZ7I?A1N#Fs2M}bX&@t#rH zCH(XP?-ueX@DCMI@OFZOa>#|>RLJAVE5LRY^7vi&)6;c4ce`-bg*UnIJ{Nw)g*lG9oF8Ns({_}Jl>%H>zP-sH@1Y$GdClNn|$ZuF%5N||mMGPQfXO|WtEKhCM(^Dy(TqlWJauAEmcj8s(L|>WFbjLo+X3s3zii+Dw?^FpPQS~*cGpRQj|8^Sn~iuqQ+KB={do58f!4I`aFVhM*09o?~J)CE1ngCm1vKr$d1 zkPJu$Bm1^0jzE}!*~FvrQzaq@KVXieAwCjeOM9SjmrDxU3lQ!@qz8I z|6Y8|IBOn2fzt=!KlVlJ%L_=c%DME}edt@=$A`N;s8)l$QmSTW_}~v%hwjOLNgJ0w zGv5pwOGOiIKe*pcV0;i!Raf3Ku;$)DM@~zCxDx?8mM8Q(4v2hLYk8%!NLL;RA1egaa4qVbjXX<1q`7{kP|C&6)o&(Gy$= zHaKP9xvmq~C*EA)a^757k2@q`2>H1fV7V(e2mX1p>|!AV{d(oq1OHI0o?91Z{@H(S zi~aH=UT)y$qh4UXe&|AQ_MhNCqSW zk^#xUN1uTWRDOHQsk2+&@lQVJEkDpsJMZz8``f)+UQ}K<=}}&W$ak85sGeI_e*6CW z)^2&Hb28sJ`JjI?;wyj77a%I%=*8!^8}TuD?Y1N3m-5#=%d4<6*L4TYhUI4(mY07u z@5i342lIa@A1lu#)H~C#<)C-czwNdBUv?I}d-=EcByBrrdMZcv^3`uAb9y`O+U|^; zDEGE|4}06c3#+HUL`0Q!Cw4|o3F$GGMj)MxoPrHs+1q}49rX5kVd*gBT;eMi+Z(wr zWwYJOHF&|p=@Qf&XEFFsck%kXP{-jVja&Bkj zEE_lu-6Jm!&s(q+7IBe?>o*^U!)7*?gVSa*tDQc8O3yKiaPS(|`c9=%x$U(h<)bfJ zTGrZi)DWBdL;F8^0CF8?#OjzQz{Kd^ly z`UXfGd8>tO`68G67MGmQpYuih+Kcsk+1@%oj#S>A|3AJvU;nDSbN&2+Yv=VYoc|Mq C-Wl!y literal 0 HcmV?d00001 diff --git a/Modules/CPack.OSXScriptLauncher.rsrc.in b/Modules/CPack.OSXScriptLauncher.rsrc.in new file mode 100644 index 0000000000000000000000000000000000000000..5f5f17a1c7fab5052d21dc81ac1ae05fcefd0a10 GIT binary patch literal 362 zcmZQzU}RumU{nDTAnXRjBMnG7;PWvPND?)SzJymZyZ{Nw0K<#1IJvkA$QCLtD9!-V WatsXr{{v|ThKOn)0cOjw0NDU@1`Y%O literal 0 HcmV?d00001 diff --git a/Modules/CPack.OSXX11.Info.plist.in b/Modules/CPack.OSXX11.Info.plist.in new file mode 100644 index 0000000..851b67b --- /dev/null +++ b/Modules/CPack.OSXX11.Info.plist.in @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + @CPACK_FILE_ASSOCIATION_EXTENSION@ + + CFBundleTypeName + @CPACK_FILE_ASSOCIATION_TYPE@ + CFBundleTypeRole + Editor + + + CFBundleExecutable + @CPACK_PACKAGE_FILE_NAME@ + CFBundleGetInfoString + @CPACK_APPLE_GUI_INFO_STRING@ + CFBundleIconFile + @CPACK_APPLE_GUI_ICON@ + CFBundleIdentifier + @CPACK_APPLE_GUI_IDENTIFIER@ + CFBundleInfoDictionaryVersion + 6.0 + CFBundleLongVersionString + @CPACK_APPLE_GUI_LONG_VERSION_STRING@ + CFBundleName + @CPACK_APPLE_GUI_BUNDLE_NAME@ + CFBundlePackageType + APPL + CFBundleShortVersionString + @CPACK_APPLE_GUI_SHORT_VERSION_STRING@ + CFBundleSignature + ???? + CFBundleVersion + @CPACK_APPLE_GUI_BUNDLE_VERSION@ + CSResourcesFileMapped + + LSRequiresCarbon + + NSHumanReadableCopyright + @CPACK_APPLE_GUI_COPYRIGHT@ + + diff --git a/Modules/CPack.OSXX11.main.scpt.in b/Modules/CPack.OSXX11.main.scpt.in new file mode 100644 index 0000000000000000000000000000000000000000..de30ea11b41465787d5ba8431c7f9c61a29e08e3 GIT binary patch literal 1870 zcma)6TTc{c7=8w*%g(|cC@LZ`BrP>jyE?i$)fWX&6BChtprJ|=0W`{pa*J3TRnX;cRHFuOVGBa2MOa?S3yn&|sjrn) zc`nc7sXUR#@<<-)vWlh-!}`j1jeI^=bR6I)A325(_|xTi**fN$>()37$M$r2Mr+pg zOnc0+a@o-WFGA!P)Ja{QmhK)Z+P>0=99^?U^hcBO-Toc~IuPfmfQ`S9k9LRlLBs=xT{D zSaotoZp(_?lAEZP8&T9jJBet5k2GTlMdaYaMiv%^VWL1e4_}u%e9b%JxrMwxt|Fu2 zpneC^pB;$E?FydivVs~t?;XzTa*LAZ7Y;@EdS&mUs8_^d3B>4qE8f%PMu~!T*fQ0# zD%fQT3Au}=*)Qo#dNT9dLi=KSdMfk#avL?FSd^v0_+6J}S&~HtA|VU9TrbCOgS>09 z3`Thg4V?%vfnV5;6$tw%R1t$9an#7X%*m`=i^%+jCnGY4#!l3Z8NLxf1d_st$ZUm> zMdaFlgoi#LBr|dq4RQr_(|e^tdZWZA$hHKwvHM!1 zXjI$n32ZNC=5oc%Ea2Vav+Z;3>64jx=A%0ObLNL&|4Zh?V%zs^ODaoSm?gGzTrSD9 zT$BrF!VWpF%Oyf@)_!s{DdVNt0T3fcZU-s&OKQ6ylVele03(0PK`Ax=fYw zzERI=a!w(hRfv-ctXVBP72+9%7(=c0XMMT;wLcgS)a^G+JLkLJc}1(sg=*C z2S4O~SI@WgL&cnLXRTqgVCVhyGyhxKwWs=Y_~UQN=Q$!d8^f*Ted#|uWO;6}U|MX^ zI2#_PR!+Q6TSCdF!{7Z%S)+xF_Fvws9osZ~+s%2sBd#-ITN9b# zzGPQNcXHJ7jpRFB>F%CAA9Zm2^!B?s-^%%3@7m+NZ+aU=3mbaV`NAe|<|Nt=gEPkt zW{?XH<81sv46ukld7VybBRT^{VZzQO?e4ujic+dfDYZr^^(G}%)hSMEHDAN3qFWLq z`6G5Cg+30wJRDLnNl6Vvm!v#eMkqO4Z4Sr@WH==IkVF?c(9Qo*YJJ{FlC;6$IT1LM z+)V0dPMDXm+bnfd8o D@o+Lb literal 0 HcmV?d00001 diff --git a/Modules/CPack.RuntimeScript.in b/Modules/CPack.RuntimeScript.in new file mode 100755 index 0000000..f27444f --- /dev/null +++ b/Modules/CPack.RuntimeScript.in @@ -0,0 +1,87 @@ +#!/bin/sh +# +# Modified from: Aaron Voisine + +CWD="`dirname \"$0\"`" +TMP=/tmp/$(id -ru)/TemporaryItems + +version=`sw_vers -productVersion` +if [ "$?" = "0" ]; then + major=${version%%\.*} + rest=${version#*\.} + minor=${rest%%\.*} + build=${rest#*\.} +else + major=10 + minor=4 + build=0 +fi + +echo $version +echo "Major = $major" +echo "Minor = $minor" +echo "Build = $build" + + +# if 10.5 or greater, then all the open-x11 stuff need not occur +if [ "$major" -lt 10 ] || ([ "$major" -eq 10 ] && [ "$minor" -lt 5 ]); then +version=`sw_vers -productVersion` +if [ "$?" = "0" ]; then + major=${version%%\.*} + rest=${version#*\.} + minor=${rest%%\.*} + build=${rest#*\.} +else + major=10 + minor=4 + build=0 +fi + +echo $version +echo "Major = $major" +echo "Minor = $minor" +echo "Build = $build" + + +# if 10.5 or greater, then all the open-x11 stuff need not occur +if [ "$major" -lt 10 ] || ([ "$major" -eq 10 ] && [ "$minor" -lt 5 ]); then +ps -wx -ocommand | grep -e '[X]11.app' > /dev/null +if [ "$?" != "0" -a ! -f ~/.xinitrc ]; then + echo "rm -f ~/.xinitrc" > ~/.xinitrc + sed 's/xterm/# xterm/' /usr/X11R6/lib/X11/xinit/xinitrc >> ~/.xinitrc +fi + +mkdir -p $TMP +cat << __END_OF_GETDISPLAY_SCRIPT__ > "$TMP/getdisplay.sh" +#!/bin/sh +mkdir -p "$TMP" + +if [ "\$DISPLAY"x = "x" ]; then + echo :0 > "$TMP/display" +else + echo \$DISPLAY > "$TMP/display" +fi +__END_OF_GETDISPLAY_SCRIPT__ +fi +chmod +x "$TMP/getdisplay.sh" +rm -f $TMP/display +open-x11 $TMP/getdisplay.sh || \ +open -a XDarwin $TMP/getdisplay.sh || \ +echo ":0" > $TMP/display + +while [ "$?" = "0" -a ! -f $TMP/display ]; +do + #echo "Waiting for display $TMP/display" + sleep 1; +done +export "DISPLAY=`cat $TMP/display`" + +ps -wx -ocommand | grep -e '[X]11' > /dev/null || exit 11 + +cd ~/ +echo "$@" > /tmp/arguments.log +if echo $1 | grep -- "^-psn_"; then + shift +fi +fi +exec "$CWD/bin/@CPACK_EXECUTABLE_NAME@" "$@" > /tmp/slicer.output 2>&1 diff --git a/Modules/CPack.STGZ_Header.sh.in b/Modules/CPack.STGZ_Header.sh.in new file mode 100755 index 0000000..dee576f --- /dev/null +++ b/Modules/CPack.STGZ_Header.sh.in @@ -0,0 +1,141 @@ +#!/bin/sh + +# Display usage +cpack_usage() +{ + cat < /dev/null 2> /dev/null; then + cpack_usage + fi + if echo $a | grep "^--version" > /dev/null 2> /dev/null; then + cpack_version + exit 2 + fi + if echo $a | grep "^--include-subdir" > /dev/null 2> /dev/null; then + cpack_include_subdir=TRUE + fi + if echo $a | grep "^--exclude-subdir" > /dev/null 2> /dev/null; then + cpack_include_subdir=FALSE + fi + if echo $a | grep "^--skip-license" > /dev/null 2> /dev/null; then + cpack_skip_license=TRUE + fi +done + +if [ "x${cpack_include_subdir}x" != "xx" -o "x${cpack_skip_license}x" = "xTRUEx" ] +then + interactive=FALSE +fi + +cpack_version +echo "This is a self-extracting archive." +toplevel="`pwd`" +if [ "x${cpack_prefix_dir}x" != "xx" ] +then + toplevel="${cpack_prefix_dir}" +fi + +echo "The archive will be extracted to: ${toplevel}" + +if [ "x${interactive}x" = "xTRUEx" ] +then + echo "" + echo "If you want to stop extracting, please press ." + + if [ "x${cpack_skip_license}x" != "xTRUEx" ] + then + more << '____cpack__here_doc____' +@CPACK_RESOURCE_FILE_LICENSE_CONTENT@ +____cpack__here_doc____ + echo + echo "Do you accept the license? [yN]: " + read line leftover + case ${line} in + y* | Y*) + cpack_license_accepted=TRUE;; + *) + echo "License not accepted. Exiting ..." + exit 1;; + esac + fi + + if [ "x${cpack_include_subdir}x" = "xx" ] + then + echo "By default the @CPACK_PACKAGE_NAME@ will be installed in:" + echo " \"${toplevel}/@CPACK_PACKAGE_FILE_NAME@\"" + echo "Do you want to include the subdirectory @CPACK_PACKAGE_FILE_NAME@?" + echo "Saying no will install in: \"${toplevel}\" [Yn]: " + read line leftover + cpack_include_subdir=TRUE + case ${line} in + n* | N*) + cpack_include_subdir=FALSE + esac + fi +fi + +if [ "x${cpack_include_subdir}x" = "xTRUEx" ] +then + toplevel="${toplevel}/@CPACK_PACKAGE_FILE_NAME@" + mkdir -p "${toplevel}" +fi +echo +echo "Using target directory: ${toplevel}" +echo "Extracting, please wait..." +echo "" + +# take the archive portion of this file and pipe it to tar +# the NUMERIC parameter in this command should be one more +# than the number of lines in this header file +# there are tails which don't understand the "-n" argument, e.g. on SunOS +# OTOH there are tails which complain when not using the "-n" argument (e.g. GNU) +# so at first try to tail some file to see if tail fails if used with "-n" +# if so, don't use "-n" +use_new_tail_syntax="-n" +tail $use_new_tail_syntax +1 "$0" > /dev/null 2> /dev/null || use_new_tail_syntax="" + +tail $use_new_tail_syntax +###CPACK_HEADER_LENGTH### "$0" | gunzip | (cd "${toplevel}" && tar xf -) || cpack_echo_exit "Problem unpacking the @CPACK_PACKAGE_FILE_NAME@" + +echo "Unpacking finished successfully" + +exit 0 +#----------------------------------------------------------- +# Start of TAR.GZ file +#-----------------------------------------------------------; + diff --git a/Modules/CPack.VolumeIcon.icns.in b/Modules/CPack.VolumeIcon.icns.in new file mode 100644 index 0000000000000000000000000000000000000000..c59217eaef6405e760eacd70925335c6ecc04ac4 GIT binary patch literal 45739 zcmeFZby(C}_xC?^cZYzYViyRaqS%3oN-Cn#oijtnXJ&|@TT)6uQbIbUL%JJgXs|m@ z=x=?7b8bE7j_Z4Wf7f$8|2%p)N6)}}?Y(xbz4vQv3nN=B22+w}fs;Rg!8j&j;MaHf zmGC`|55r613F2ks;pG?LkL07{$^A0Qd@53;h5OyuFNY@+#%3r7y@+9@ZuTj}s=-MeO%=9kW%K7K?|L4N;! z1x4kf*YDT|r4^(`xa-S@VZy#MOKTC*OKTgECc5Tkqy=duv|-wj4$M=e6X{~;?(XS9 zdKLQm`ultCpOfDzB_*?ExAHlSo453DYSEi zSx&Ig!B9--cNWY!*R;pAE!{{jrVr_-9~kH-3@{E34h@YEMv*bP@p0mW;N)bMo+Jkc zCkxLu)vGu4Zrsq()-ogF7_jDAI*6{I&JAqz7LIMCnMGcwRWI6OieC64ipkB_vvOL4HXv2zI@)dp2ff)>4|p(Dvb z9EUZ%simo@aZUZQ+U48USoh@Wr5BU=$3+fqMU`1qu$i?jontGj#5L|`YpYB1vkUJR z=9kxAynIP`MR?7#TIsNXmxq&GL|zwbrhoG$a)V7z@8(TQ8&_u>mf$Fg#~XwA)hm}S zoI7*o>?s9V6{Ck!#fKPJQFXR+{<#&+-P6xeG0vAS*A}OzKYU)8U4H(C@Q&{Nd*lOs z<(&-(4=V@T5o=#xcV|2SyA|)`?BeX?{~#qPJ}&lNOiYkB*2db}!dUP6m5b+2pFOo- zO!`<-j0nx?x*-|mEj=?Yh_6Imzk0SbIr{3;r{$5^wbyUoy?g)u!-w{(pf1eIE@kfR z?e6B{fqv+n?-s^pPlNDI0@je4z^a|4KF@_`uJvTX=b=HN}MGaEU@g*2zXf2-an7L zLS75KT$>-BeD>na`}d2z6DzOYzJFaV!^MekiSw{-v9`0u#x8w$|Ka27JYxeB3o9EN zJO8xgWI~E~YI1UfqlLAVm4%s!sfnpm>e%AS%G^X>$vHOE2HOtJ(A?UNfrVFKW7n$} z%ac8`YtP@jdHsqqIJ5F%^ePt{^hr)G7V#Szmq&A7;c+mzGx6o;_cUKdq&EL0v=h+HG=JXlO`O1lj%OMXdWd zbxmyz^(%TfPpeyMDwiz0yo^+p4SW?*BL;^|6N($V#@1fH1|Pj#9BCPznp=JTd<81> z^3{vyuU@@)0iQq*Tbi3+Tv}OO>%D%{%1-0tiJP|_g2?26U>BnsS1+kuwYNNb=Jb`j zj-EsxZ&wF1T?@ZZoSGbmpd4!un7Mq^^8VxIp7H0X)|=;)-sX`B>f9`41$?sx|AMbq zFQ317@p55?GB>}lw7igV?Y4y@-qFd^lRzYrNQS3Roji5sEcHpEmUNjgAgZEI(gcTztMZM_qls2EJNZ zoFU9|Qs)=O&uiSZ#5%jVyCLp;9v+?+r%qaF9F{+BgLrs(xVs~6+^()JZq}zwB6H%b z6gV-Aw01e|l3vl;H}i_{R{YiKcyn=iRr4@)X>FM@zq&X(yS%zUp-|`MNVDAVpXN)N zcP;E4@i-hFPjF&&adgu^bnK#uGvb87BRC9}x*3Hp36sBYf8p{r*XTiudpv0GMV zGpfiUuNPI=*gdjLc*pT-d91ywtABKOWNgNtrYAgI8kP2_sc&?8ZjQS0y2n)Rf~Jm+ zt}gKgqJwDjYQf5K{kn!}XjxM}PFYr3mZqq1JGP{$XLJ>LNB`zI73pUl9337Wn*mP- zPzbYvGc}>{IUO@&x>wMQVj?3&*JFrW~H@~rrbn1^n3aZ$ol(+UzzIgxc_1bjL_{h}E=)eR*p`*@5 zQ3R=7-kupl(6eS{=U3mpExdSIP5nAigK(X2jrYnfRt`>fR%u*bV|B#vUA+8lRpV8Kyw}D6`QNfq|5a?w6mxe0lfw-OEaclPYJ_)UOe*vtPS# z?xOm&t5?+zvLmeQYyy|!8=gd8-XbMKQ#|FGS=})>^ZNa(m5E-;^yt{c*u)HF9tssn z5u(mb4^FOq`S$zoUq05Gs>mNwJ*#%*DsoNys-`j z)h-j%xvr_pV%S-jn78iTuO`Qgu&{F};dAPf^>#^Z;15JqFZt#^=^CDU`)XyZYkF#E zcxq;9ngVr)_Sr^7C&}d{%GA{SBx(Qdy$Z_5Po2AP>GBozD_7L7?qpZ!BmFJ2;EX1sLulqfxsm7WE|1d<%PtaHketrTS>C25lKS`md!y`zh- zSI4`?hx+?w=BC#>5=cThSD(Fj`Qk;M^7cIn%EwNeId}e|n$IOh_0ytsYy?&k3kNg1 zoWZ^9ScfAr64I!iz>b^uN?Q8H7GKQu^-Vxz2JJ&7%!W~f=b(VF1ie64(}A;l4<0#w z667xUsWD$ZBY|OIW%XgvVz1%rgr*8cIOwW+Srk&(fH*%>Ox zg`#pxG`W|r-@gCwNkd-w_{q~}&z&bX=UC2PJR-)zz{udk z%+4aJM$XO(zOre(bb`lh)2cd#CYR=W$J%>(p7z14K%pWO3=C{xw4Ik%pTBtd3L+yY z;+L;}$|@&L6F`#v?AZ&awhM4durf0fnAn*GP7`x-eATxK^P(;kJ&w<)=^UC^oE>QF z>~3%EnMFG}D9@6ioxzPuiwldhef`7plhX^YK7I8&bX4^u;dI~`=2K_S99G`WLIO!{ z70>J(Uo{C922@h)toy^duHmVrsgb;)p60Ut`30EK=g_I$k0MH)r%v`aWk>q@k;&dS z56Y@~70-DcI&w^va5C@|)5(*k&K=+(F>x?5aws`x=7wAqWu!+%`OcGa>w89~mnNQ8 zjC7V{4KL0UW*OEs#pWj4a>D#WB4c9W!cItS+$6h2PWQ4hXr4e$(w#Wze~NIDQH76= ziHXF>&bH4XEjRLp3?u8c095y~e?epK=*-f1W8+9uZ0X3tJTl8L15WUxh|dk?M+8U4 zMBj@`OtO-e-MVeZj$M19x2qgKPEaMEKvWq{?B`(cW#nMpWs#H@XSkJ#!C8xp3H;8F zxf)v7+&@NH8g1yBDD-a_TY`>6PoYvlwKp{g4Yv}KQqtni$;$2Ay?5`v0}6)@A5~Ey z9HTp~>U$iciX3B7J;+UuVIVMaGBB{n8OG)%Tkm3~;}1a9rM03Pv z;|rkfPm!D(N)L#+7Z1V@va&O8Zr!=>fV_gjK_%tGM~)sPfjYzSRG5#ch+_nJ zn1~GQ%$sgT<~_j4v(ho6(n33K#g(-WO)M-8HBPmA$F@(R!2^{{5t=OxxtDN1B|YEbbVrU7RFI>XBgCVO2e$0vV+3g?$?G9`58V%Q(9@)a z<&ExFbPP|-FAg+NDxEVrC#e*eQNbfZ)V{RHP$qX_O1JrWZ0PydIaJtMVHLn=vy1tt%#iV$gS@kpI)JK45SB> zN_s~iu!2E2>qFT(H(QrqT3%IC-`LXH(bY3JO`Ts_9S^^$x^Mr11N-+MP}Q)>gB=m_ zlJJ^s0K1cenUkLxLrefbZfMjqsAzp~<Km?Kem=4LuupLX{R43Caap?!=5 z0SgtG!^{)rFwkmjbJV%zS06sVzRN_QBVpJXHtI#?KJ+>*$;Xe1OGxY9D{CK~UU;)Q z`s6`o-2Lu>k;z#KEPRXePzMewb*#H@aAXVusX1hUVSaXQ-WQzcPvL}(3B(CA6LV|h z7a7;3B{d@-0`TeVzwt}>{oo#=j2RS;)w?s1rrjA5r2z7kqg5_e}SzW_~G-Xx`} zYiwrq^ZUiV^0fPjb;F%Qs6!T)=Ap)nv#1}C1;RYr;zD5otajin5|s;P`kAS*q0Z`x z9FM(pAsBW#fir}%#w3&7d^A}BC94OuJ>#>_zkYf)TAz^;Q87{1i_9`o7nc_1{3wjj zb_)xn`3(!NrgEdxN}jZJ508wD!tegxr_HsGOLD_5iE*I1^df4c$?jy!1M9^VRB_CD z(mO$U`RkY0v+X%40cDdVoe-!pf+H4SN}z}CLYS8Z^_4gMxpASvF-e)(Ir#;JMUV3H z@`{R6uFHsuu+fC2u9m*-zVDzYz>E4p;EZ!lL;oc8&F{a!;XrX}P|iq3GXV;`u)H`& zhE<({%p-G>3oFlGH)JNpL`S2udwNDzZb8wbEEic}F>y}1Q0Q)=0ncAI#yhJBaHFal z&UxiG4NOws{r>x>wb7c?$e8}rvMK7!_zd(3)Dg%mhDw~1m|s|a{-QcF9-Z2g)6z2@ zq$NZfi3y2_Z4hG(!?5!jFT7bRiuO?zgpmTO7kvv`hNkB~eEa>&tC^OE@qu0UGsos< z$0n!?G*!YZhC-N=pu#@x#Y%lN5h3{a5#6u`sseNv1`&x38+f3soQzlcp1&H4OHRKg z%Ejytx>D*vC2i1sKYsiD*LRD3C5ge+X(`=v^OFNJ3m{BIV7o?~MbKU~56a8AmxLt5 zMEMv=7#4a#DNz(wzhz7 z@w$|ltOv(2c9;9GhMKihL9NV+JHzgON;Yx zana3a2KN;f5dy*7efwGE1w4zWn?*)ff5p+lQrr@`R}H_}t3TwXxQ&nWcp#7~%o5bQIV*vZK-E+A6gz z#YzmpFwwE_2#bp&Vu(14n3$4h#UOQ_G{?FyKQq*HPl1KzAlBoKIgJC;)K|X~zKi_+ z<>hosc4R<6QgP$d@<43|b@69)NjR23&Ve9bB{M&ED z?_w}^X4~__JiX(}>Yq-GH-m8sNgr~Dx-Dje(vO)`j+mIo{EyEb8E;7-O@Zli9)yh)G!Jg z>|19?+H+0$)_?w5NZHdd%Hqdwr0-JSzP_FBc^vD7#8$MnclETC6t~U5@!QJs{3JxI zu)W7nf?zj*0VxDV3;WD0b!NCdA1}eg?1%CH&W6#Bs_2@aE`J8GE#H3o{9>vlH^`m* z;K|dcUENQL3L7St*Va~-C%e0bCMoDC3~Gbs%H|UeZOypHdz_2O(VGnXE$|r_jXnlKB^sBKo8ZPmXmY-GrZgOoe90z{&{l5F#?_b}{ z_mstZxCZAoclGr*mlYS5J)K#5@%;HvMPXI@2)aT;bU*JN5){kS&XloO2i4$W@v9qy|vAv_jqn1$odi6?bci(#8l(O*ZcQPva$7!QrMNC@Wh@Wyj>oYDZ~BB~m3=_Y_u(m9^!W z!H(wEp3%u^IN75HQdnkZ;Oq&;Bw?9(Zmc6mkCVv{;|HDd3{u=aMqPaSEr90nS95(; zX@NfE(8P+N;o3sNW7(3&rPXZ%lY>>2Rn^rsb@i>?!!t`SUMx=yJOu-TqZ4T4G%r3! zq0CHAO-@WsPQl?Vx`SO_o}cI}wB-K7(8Yk#&I#($yKjN(hN!(&5E%!C#N_w%RTL2) ztCp0MS2s4+S5$!=_^Nr**wQsPIlsCxH`deK*w)!QFgP?gJT#2{Gcq7L&6}lQ$(KR`@{NWpHGr#@%=_S~C5JCzF4o|P|Dl77N%urfZUgKLusN7vu z+t}LKH!?Xj4RwLj!wwjaJ-vMcaK!}j5M)8KFD@@m4^(;zFf*^KYu&5rnVw(y_$~Om z08PEGCM&|nKPV`vtg^VUq!f9~SXx$5Ss7flqoTa(NlRznKwnRHM=OYTf;e1X4a2b( zdQ>z&x3s!U8LIK!DaS?A7Q2~L+c&eY`uST3wDhl^Ud;_W$%*mv4-SmV%6|B$1VM{l zQ5jgZ8``0!wzj&eva-6qt+Tzgy&c56d;9x`P;m$cA--K&TcM29Mch^w_Qm*qXUB-& zNv$84U4R3$(C?x!v|cX^H$6%S@C^tHk4?;gFzhk-r820B6~t?6YU`dnA=FF54y6qW z-u1&P)6+9^OKYq1qfK#cdYe#bHjJEEM&l4=@!8jKn)2JF@%GZRP*O-lWORILR{o=s z(uxXDrmLhQnR%d%Dk@J+6MmU>i*G^GYjC2>6S2` z0IPkdG6&|6V}8r<3}pc}Kj9xmKD>MVY+<~+HZLI%@e7ZMj!lGO7nN4f%8b-(sjd5m z^q=jB78=?S-AD|l`UFNq;E$}AS=F_mskN#gJC~3jS|IkQpdc?N<9wkOBL z+)GT$%quRd2&_V?w?Z@iL%FRDc5B@|eSHH%aJWsO3{{fM>^;Jg5#4nhy z$S>kwzkYi6a%rlssr+F=h#%1}JRv^eep(h(q|y(}aG?G1&zc~u!fl;B149$joq6d| zVNuEX)os1?_mje}p=P)-7~QC}qL#kVfGO!z|g^()~Q!mrZ5{r3BBzy0#% z16b;Bsme=<3h?y{2#JaZO9iEsRh7Q$O}&v;rN*Wv*gp3SjP%syrNst@#$^=MJsqK} z&bJpP8>5!EFc|%?jLMFIiB;4PT9-cz(f#%t>37jzKfimiG(FT&SDcv;PWJUB2ZqNa z=U3F$A~nQnx|$lKb`#p6U)uYU$s9=8|A97SObg`o1(y}r_#g?k- z%8JUG%F5#Wyo}`NAiuzfga`TM4IP7%3(wws{QB$r@#bu-3~CCxfo6C?eb4C33$XM@ zjflU}OcB4y{{H)KUq8NiwlF>1)m&4OmvR4IL~u|*Kwx0Vy~M<%r2EM!srQi>>By+i zpunK;n8fs)qN>KH0~2#AFW-Io`rEhPKTfq3xNP*nkkI}hqj#^U3C`1A|LHv9FEmrc z-$~yjP*b1ZzgnH29_@SDR9jw@laZ1b8yy)Q8XQar+8i7b8W9x}mz0{BQ&?Kl*xoxl zIk)oS?Z+>_{`T$L_ivwOI!Xw8P&-f~Y172Aw!w+HH-FTK_zMZG5edwQftg>ve0&Qx z-E-4pgFPM1^)(fxC54aj@(8&idHIiu;4rABp{1i|V04nQxb_k({PG*}4f)Re?K7pb zEMPBcgA;?>*Uul{y?(I<7i*Ja!-IW2 zT~D93x3{&UgT1S#Z*Uk6H(<7Y@%rt@&tHE*3&!&8+h=NbWrXq{HQ42n0Ws3T^AE_U zfX@M6e7^eq!vFQ_m(QO*ynFNN#oEde1k(_WkY@N{Zbn1n6*wh-17{+izkL1b{|ob% zck{h9v8Vq~Q$+GwCzf7(fbwPkj{L^)>n~qFfByLK{rh)s-;&;Nz}?;Z_a8sPkN)y2 z@>}5VET7-KTpX^yukM2(en&8@s=<|m^J}l(eYy8b#8;m$#LqC2k&k{K=stcVKuZR| zUs&G1dcHK-o}v54kEkWLPeF_}zYw>Wv=BE>o@0fGXKt#iz=(}R6J@#msCNRKGej6j z7)%<99rPJs9~>H;80&d#BZPs47j`J-rM<%g{lva;_+stvALuD}{^KJC^OCOqkiItf zV(#rKcMx3v3HsZQ+DW}peMS9IeWYHd_S{=6>mM*^J#6Xm>t$@oiS{8NNGn|RG7@~E zb6R|R8G4#huOc*q45!kXy5Rq`#F^>zU1HENi)-L_%Ca-F zcECG#x-dCmZ7u8{!Z&qPkT$O?F>>1#ws!mUFtsGOx_KhaL?03}k>KU-n%F|>VeIZG za}z_q5!7zvG!>_BYo36K;)a%#9 z__Q(0T7m>0k}%AiSIN1+7=*QiwLWYiHxrwf8fpuIwS-8}2)-C5p%X^VM6!RtJ#vtL zu%DkV5zaM;1SX=Vu34Yi|9nL)}q#*lmFssIzu^*Tf|7xkt{%d|@M;tLaIRbnD4k7q5g-0dD--{+h ziN?hEd$_we-ER@|jJCya?9-tMu*_4O6S z1%y1gM}@`3MMbp(J)Lc>Elmv#)x{6f(^8V6NKQ7UclB;+pV=j+;^8bxGr;l#vr?d8 zR*$07is}Y_U{)=skJ}?YL=SRdT}@SaS#d!@MN3zG6&jj!Q)kirt=Mc=Wle2$Wm!>H zQdE$ywGuDPw2~?Ip&d*4Sjel6(*V9m$pP7nCv(pfjpFyhwC}@@J z<{l6im-J*Ev?`XmXzz%1_HYXuK6vF2F6ATlwu9x$unvr@N>j7%+TtUWSv z5@Vw7r>14)WJLu<-_Oi1Dk*+4IXX%hlNcWvAAMR~_V{s0ab9{tn6In7or`aD@zefB zPbr$C{zh5(>F7BC+J?1tuO3SlRJ?uXj-k1=g}HBHkbihoO#J=S6hAk=$ixS5V^%$Y z3`xUoakK^GTH0$09~I<1$h;p$aJF}FMOdJ;(FKtI>um9=-| zA<>dCF;TG<-A^hST3VZ%8tUQ1qR`JjEhpOKkRUS`>ain#hpcXIQ@V2fs%cP4Jjp*X z+RH0CB_=R9JlfyE5sPhV? z>Z+O?XL5FVrt@(j77kjw{Ef0w-?UHlj%!d{fHNt|ABzi$BH-OU2?z-*k9YMlHT8+j zDk-n1Lbp{g4jXG5a|1%-iW{EP)z#L3dR0YvSy^eMe{Nlo&uKmuR+@z$td$6`R&{5D zWHp@w!U>LUejbikLa>KD4(E^M!Z}~t<$W*n5uApUmscQ_Y}M7Z)%7rq)Kw!@LU5b| z%Fuxei;8Pn>&rvVaI*{lYvQU@S?aPq!Oztm>*?y~;7o)+V2LVWmd`CtW)@=F}F4~)DQ8y}aDl9rJPx2T21q$1(M!h!-+Hv3^#MrLvQG_^)g zT0!MF4V?KKc-0wuMaS5}(8LZ$#4_M;SgarXLD2EAz{cGQsyc>drbZT?{(fF?xdV_X zk}I5(o&E4(R_25BG=Md88%L%({m&dfau}8ViNN9n0_)Ljjk^|iZ(CrU{QeL z;L)?!wRLp0Zy2ADBiv8RBme|0obdqkK=6KILVWy#n!$;VNKKW)>!Lp(EH0pDS{-#Q z98C1hu+C8b02~1;?08;4T2Aqt8n9P7H?H5-+K0s4PkZoyn9iJSnPvxa7OuBz#J77yh+Bk2B(m?Q#f@qh@&I9$4NMeVF^dgs_c_8k?aLo~&ofvnCD zcRb=?c-P&ibn5!x&pt3(hSuKGfUUzNn9qsK2 zK2D&jhX<&tQ^Mc5oO!f&74_4zy#XO;`B>Ar5zCASU9}rhOP6tM*Gszndnof=Z zIB{nWXg$=$DQLt{Qc>MVGO}@U_we+Dz?p;)yxEDKch0I@fgFni`;onDhwes~l}6uD z-bSO>evn)>X_gx2PieTrdhYB=aK`%Mq?}y62)_Ps`r>Qr=o%fDnpf8Flx%2&cX4xb zclYq{^W=p1+1u03<`#5@y?c;dZ2ND7m6k^8Y!~E4%l(7tD#e6^ucNcpj^<6x0fy}_fzy07vTtbt-p(X4#fy8%p^>Y&gZrR1v-T27fJ$rWT+`fI= z&THhN(s;d%TpTp{f6!fZaR%3ROWzG3Ibj`K{5>6E7M8@@YV6}?52EiNgmsB#iG#w*u#4a}_V>>V5&iC6^s6Q?8A(Ghod z|29zHx&_(HvE{Vu!^i11d$`y&XuOyB58kWR&s>q?h*dBY9qZ`q;e_=8@88+Xj+zjY zkdl$zuX5(nRX}ZTz^=~H#>Upxj%bfK5bZ?)oi)yDje-|QN3t*+K z5Nnc+q_s64p~;_@9@Nl%^T@fr6zwZNlun zZ03z~ArkPYhwx69BsPF^3khyg4=i{TdR05uS*EO_sZXkN>x4>7oZ|mRE)4PKhZZI~wqX&6SM#gt<8^}ut3kvY_^NFAH z$$J#3Ey*cEYlt6YSOQ##AGoaNig$GPck{)abHW~#*s*KR-u-~z9XfLKGR`|N-1+wP zYnoap8Gb`oS4Zd8T|4i!-4Rp$p9 zmT;H}vs3+!JyVTtsTKAQ!^J#m&XZ!K;MN$WJoeAxg6&`hyQk(q^XHu71lJf)!^M zoD&Im-U)kY51KG`Uymyi$_2RO}x{F=^*wP)m= zoNO$d+}vCo9PI3@ocnE3@>A{Pr6d6?3j8kigAz-(rKgj)sAKK`;irqcn==u29*@6u zNZ~MQ=j7>g7u3`YoM8Td6*C|#A~HNIA|fouANdTX2Lx|yFDvNR=(;7M%_14o=QA%N`dOu`8`W3|qp z;P_RvQ|sK&HnhXTtm_YR5H}8Mt$zXhc}Ve?44jVn0s1L=C8Df6#bnRAw&Y(hG93*2 z!JFsw9I;NG{(&SnJP9Z4}hI_8VwCG9-^!IZ1!R>HzxTOKZ113bh z+vbSF9{$aTFKFtSn3-9aTbLT?>s~#la^%D*g{}N_ARoxUCVidQSetIABqD^mU-BCCgOkWc2w?I6||zk^+1^o&0cH@%AP#*FrLi zxfA)`bvX%PAz?8|X<4})yZ6JWIU>JNW{aEv9eoG`JBy5Sb7x7Si>fdUT9f)KUS`e9 zpus0+>5MgTB=`pqUGcuStyrvsDa?L`hNiY&;j!noZV(ldlmY3TFuxqwDkdefdFN(M zI{IJ+4m#n>IW29OG2W+yX{e;s-zc+ke0lV%(LMw(q`l;>x? z=t?lZ?C67*92%Dh@|$s3J4-V&OFLI`Y^?DvenH5h<6wtmIxa3A>1{GxJUq;BWE;T1 zMJHwDlUkkOlXL&}hIQgh_V2`5IKL=A!)8Z6s|yD1q(DDUC$K?)O(lYpb%1r*(VZNf z6r{~f%hcoI=H}t$<=YI?@Q#gAQj$V!^nMInTTPw3<4YcwRHR#qa;$SoKk;WGD1VlD ziJp~_@3Ob|g;Q9>KY+Ae5!46=#0ri$Pyfh-q=2&sw;&G>FCQO2zl5CJ_U&?V+qR0Z zF=6O@7`Ttx;hbP@dQw-J=_trXv+~angIHg_zfQ zv7dM}aT<^I;5>$&h3hPdsJheCj}+kN?dpPeg!2OgjB&Vl`i93P#d>M&5#~n(7=?s4 z$ZSNUIb>uuY>*Te;bRj#WK3{^?+VI<+s0f^DaLh|{RE|nuS02GG8krdG5x5!+YURB z{Q~`o9xhl%KP(*%_R<`9S8u=Y*n~KL`)e|Y00X~}m;^ym9LP5baq(@J%$(4v*4x`B zEUUb#GS_P>BP)&b`iV^wUuVOTKhjVuIBn5`wi;EyS z>m3vl5D+4Wa0m;D?z?X3L_}{ikpPas!061zMaRf1ywe7Ifb|F= zC@?Is_K0j&a?AlRk_B2IQ@`Wk00YQd1iB7Sfdjreo>!GFnN>7~`>*~EkN zbpM7`v*X3Eib%+t+}*%@+%r5lJk%d?_DB8Xhur|33vyyz-95d5_4Fr`+`Wmg(m~{p z{`MfavwL_2+%KstedwpcKt@rxpQtslKd7~fOmuvkHXYVJ#>{-wGbSt|JP<*g&~6og z6^3=j5tbWB9;U_nuven3J_I}g$BuXNxtCv7l1)CtN|XKxXxq9Dw1w@!Fo|#5p>%XJ z1EV}HDkdsC$lKh(%N=r@u{b9uyd&x+1do9hM^AfTSTe#E-2nzDC*I8^D6{BM23b!S z!+=6ce_`C@))}`PTQLlq^xl1nhs5Fb)jTZzUR0RPiDR0Uco*pBE-p^c22AK5TwMsx z^iXsnmIZ3!2052b2#yQyWN$-AeUz7#h=wNi9gG*UYVZ|IE6nEI8QkY zhGUoNIY@V*r>DbUR6L^}25n}Cb%SH;H7ukG2L_uf$|+tmh2R4pj^o2x+`5a4DJ*a3 z86Ad<&dZGJ&Hob!$M+`)=dzU!!!CFFf-D1pUKYd1cGxm5{t$)(oyetBZrYJTqeC38 zAKtzH>@71Jtdol~J`l%iW$Ae@B{T1F&C}uG-llYI7Js;j{MR6y+fD`yi_GcM;&cRh zRcLk|1#LTB0WN-iL1BrF`%ddR1SBN}*lHi!wg1$0NW`^wa)tXaJkHU<0Sl9he`ri% zYGy%2+aTD1ora5swyC{P3h!SBL|2~Zk<1J?9{nSS2b_w8=@DL?ubuNcjZ1dGn5;nYE*f2f+_c3sZ7ydx!g*(#>Tyv;7kY$NLWu?)Fv|7y#_xAqFNE z4x02XA=rFNN{EUGOYS^+{^U{B)8{W=*SU4a*uoYEs|PtWDlx0NXP~qCzU`HN#li9Z z$-%|D9TmV}80esx8JSqvxdj6SSOsBcFCn#Y^EPCs%r5!E$4;KPsIGBC-@p`YW-s5M zuzMMm?VU{(_iar71qjCp((52xh><8Ok&c<39)!900|j;o387~Ope(lo_Fzg!AU9O) zs;2I3)FsYth+lAYa$#+K-Q!pn_kRh(asL3}yj2C5A^C`zo{^cIlNU<86G|;6u|a0j z7T6OXIH-)ek5x%mR1CAY7a z8#3~CLOvd3I-Y?;8*M!UV@q3{o41#%XJl?+#Q%tev(P&S$5wPuY*ZVZvRzO_Onieh z>XY63{^64ww++m!>>)_QJA2w0+5J~AoQ2j=DM;x=4M6`E^am5d!lIIJ6ts0aq!TJ0 zhT>niq^_ZR$H>ge&cWKs(%$8Nio=QhjKc-mYaf$j0y~@#pz`^F9U&nRw0&uYp;bi`ahx0MIct}==8$xb)cm_@|hg2mbYiN)#v zU&P`f|1%aR7xe!Zi*x(;SRCOB>VUy=T|C*1BwP&@n zFg7qWG%_|t-()c-m@%7MT3T4!Iv|dS1CzZy`YepUJ%g>awQZRFKcRCBcl300kQ*}k zcMVKTEwFC>!QMpRyI>zt-=TB7==)^7`3@E~t_aCLAS65rxyKrt4rD>r!~1cBSb^w>5POq5 zH+41i3~uR}A^#OQ$1^!u=B;n!;O&7<{E<;nNF-fEB9exr(;lV_A*Q+=0 zUOImPp8Gm-CGbCib4AU6f^+ab*=XNGdsAmmPY*A0L}X+{1TmaGHYEi~l}t-ZPlK$# zu+ZQ@^yu5cNL%%sroOTMm4o}v$p0I3F44U8Cv@(4Uv6+(L-oU~{F36#`-zEhaq)zN zO%Jm2b28IG9H54{Fd)4BNN8)?K(uv8`GW2hIkCA8CmjIC-9~&7S?(b-*t*I=_jSm98z{b+_=4r(v7gfc?Pzyi7 zb3nGi8)e~2%9lO6e!z2+;n5|vPo7jaj7(0B4h{6Q7UX3_)It*W%*?Y-A3h)-B_KCo zd3IrpC{ad@G#ZYYL=V!_e(&)K{Gu!r`(n$D|o_m=?$c8+Y z+Ny?;@xk7wnQpLavJPnI85)E4Ulu;XLuSZF@ed!~E=*1U<2caOOg_UWrl6s(cSrxG zzQzt&8XNR8Kqrp^bXGDl`;HvBR!jrv-u8LMo$q`ZUYt$RQQjEnFvN6xE`sSEJPTZ;-dhJMlN~->%F|jE%v5 zxvj1^BQC_>>-rTdZzAs07MinuBIvHeJ7os^0@7P$WyAy&9*)*JxCg*F1zg$RFRDQl zcJA4KP+8@)eawU6y7r#I;aT)Su-9+iy;~eveYw0cGdwap*!i@nBr`rDC^(2LoIPs(nf0f$Ha4$xV#(=&1iZa;bT#_h{0SM}76UAc2dTkDp=9!6dP z5eaG8?OG8J>w3qgDT_<1$lAu|BTbEs&CLxhGcOk)M-Wm)A?tZ|dN4n`yfVx6@-``2 z=eqlMfbJqaGYc~uC~05bw&%(z8L89SXBFT*qJ8l85;vca=!UJ{iH{+{60&yTSsZxC zW~#Aiy1TZre)c&nsd5RPTYzlH!Hh=@ZIxj& z?&jh-cycq3h?MMRZXzcykASd**MsVwiCHw;ad8RKci9(KN2=>PCYG1sZ;K4@Aj2F& zWuK`pZ0&1Fy}MI(Gi{XoAm}7ef=&T=Z^3;kvg~4eH?VPTR+8oxf$f739|^7qcsb;f ztGmY_MUa-Q$%AI`F28{1*uWxW#6f;4&kUpyLcS(txI52e*VY4~C@!@5@9&m9Mvry3 z?iOa@lonxU6_68QKPh^EIvp_oQ8Z{Dq)UDrKeD4kr|#T zNKzc1oPV}FS!T3b={gOalKneHm%WvVMM#F14Nj6cIXH#H`GrMANvJ%Llb;c;9X+y& z%gQRsYg*g8`^KhcAmw~UXnGo?C&$Of;LU`|rPpsq+>c(?(m;zZ^EZ<2DZ<0S%Ln%{ zoFLB0#ltJ;FM{DE!pm|9hKHVg+wNUEwkVpB!lK%S#wU>}y6GuoQfLC^sj;zR1i z!O^+rFXz+swKXoI@_(i2M&re}MBzG&Pk@)e$pH5;0)8U&q9VKqCmlQJ^TWXp+;}q4 zV`O)1%jkyu&GB)<7~SY7GQx*S!!w(`gR^TdsrlBxv(e=L%GK3wFm&|rju10FW`kmOOYb1Kf-u4iDVwM=GQ>GBG%`4~@?yTk zPV2flD!$<_cwN53<&l2_4W34WfOgT5RZVarROV6c+GXmzr1ecULjd+tc06 zD}CtMYP+lURhoAteg^D9wjbUgEFvf@BD7fo#-nJMh=Q=Vl;}PKtJJ2J+UyvDy@O|1 z`r~?dHm0YyXP`X5FEsuUykFOmK0luxz^>WyDlvD)4OL?ryOK7v>3!@SmHc$O6B6jac+ z+(W#1^~!OSu@n30>9Zi|9RhqCw@C8vO7gSw2!)9#iEh}qW&5rjGTRTFx@~N1>+TK~R8a!;Y=| ze7syR0>gk5+OTQsjy(qycF8JVxozP@3Qx!^EQj}J+6e6uZC!Pt&hTQbo2xSbN^p7Y zK*$@OXpb~dzkHUa{1astEX^-0EO$UuKoBl2`JjtQz_}2t6}$HxgqvN3G1>zP9cT@gKOI)?onvV8mslM4|n7xP)P<5Eqw*cHFC=co;qSREMVz4Y5%f zMU{~8T|=lP)DdbqY8tBI+_8R^robH`25hFj1#PXlIL%Y?s82Zm@pjq+WET&@&MLKe zgOHGfv=B_9l5p9*8Ca%$@&~r>+JEw#y4Fn-N3WQSLdeLjf;?4B74iRT@5-Z_IMRG~ z>sISNx?8s;OSa`p@@-=q+t^@yfdLzW!5roem=FdGV-C0E8-p*dBtRfs2{$>Iup!KB zlF7Wcv)P%=+u7{w+kH7Uo0&{DnN23=WHR)AEgLM!vdHeE_4bd{d&X+H`F>T^RbPKq z^{ZdK#v{RSdwgKtxr(y`p%gZ628poG%9g}ORvy( zlOl>;<0MpkKOz%a3gs$; zGq3*q%9bp9K%LHTk8pRjgH(tRWpbQSF4ZJba(yp}>EwbgL?O&+Sh8&8+SXnDN6%b( z?s@u!fg9utH?C}5!ZMkffNAv5))PPd`Lpds4vR8WO6_mgP;wrkO*hjrp44F{Shueg zbt7ujx_EW#R$$e34jwyu5vb+Q^*-PAoc_eRrX?VbxoBa-f`-;3FTHldU+S;~q@{w0 zbvNscuo0920KM`lc<{CgD6DP*KX?oVgM`-oCG#GeT}}}^=#L5{Zs22fKk%e zFn?bC{Ix?jUcEUm({2h7#fS+q-IW5P5Ui%?6-tGUW^HO=0aqiP`Dn+$=%FJ=pEz+E zB*ZRXzH(*YDtYDV<+ke9)eZCN=gz6CTM0Uuw??Ytj3$;$C7U46oz5p=x|&K-YhZ%C zmqZC^AEFT!we^fX!ESqf>g@SvE?m3_+eR-VmuUF$UnYTTf2{ZMwe#lG)z(ziETu2K za{EZVlcEA_unFGW(E<&ujS+UG&Sa+8T2+H+lS1TP({u3nDUj$sdk%)8^fUeo$TRc> zI`E^raBb(j+UhDGRL@$_e*R~-k2mGz11%D?-X`dBJ!v?C@ilg(KF-!hBC>u27snO+ zXz*yj>KXbh28QW#*!gp3{b!J~zH`L+bLTE~)K#){;);s8N1wWV`&5fJvm!t%n_$Vc z+W81iB#YDN9WDb~xfCz~agjN(ytV)Eu@k3G!SL37<}?uLPo6vmySO@GmHqgWC(mBE z^z^w48*64&l$Vy4&DwbU*6ni}QXPe?b!vhex1Qo50r(_^U!ha$jPVw&mhz7S6!0`gTWUeY^0w|#Q1Ux+_|X22EeosXHLchP ztH^u(+gC1_J$wE`6@}AT-g03$jfmtSl_f4r9UjHem=RQNrkl)GAe!$xreqQjYZ_QXB}5l-ZsDQhRh>a&~rRy4w|J zF&arKE_=b&-s2Y=v+}1+D`3s%WM}2fr7zvOv9E4=VQx72?HG{XcoL;n4yz7oW1J;W z2%VrG(F=939tJMlWU<;nQORa8!R)=BCTx0*!d(8y=+k?XSwTK94`OrP%$oM|H*but zsVK~2A&gK#;1?+7qpvPzp*0Vp5pGK+z-yAYCK^4L}Bfgj(ZW=c@s^R5}yQ z$nbfknKQRvd+pZK9o5qc0+|nEy78oHxdeh=eL`}ak!?f-=oRt=S`vaDIhd2l;4Mv& z)}++*9xzt2>Czi-{IsX8AfGiBN^M(+U}BAwHAW;PJIxTNV+K9w_=sUaTddOR32+Bs zOs7>#B^rxMA0To8A+^UVDcLZ3{q`#Z3-SXM9IBAE8An7qk(ibVbn(gVIAa%-Unc~O zIUMB)6*6F5!;+7hhJ`V`R-;lWq!O{xGHp)w_|i|hr^}0bybb=t$1nVBsA&wr63%Or z=mjFEV6`PN*=d6MR8l$#ioysA7EmQxy9~l!GscGt5Vi%TqDU-Nr_G#SpJNBkE|6*i zAZZ!vpEz>x+|7e4@}VX6GrCZATM;VI@C7)OLv3~^+6+CUTqhA=>@YwqgB>xVE`*P= zm$XPFky}ga9$HpvPjJII1?lOYZYV>>vb_fmpSf{lbzUZGeiFkC)$lPGKH_o>6=ye7 z-6RjjHn7(hWNxJ@b6SQJ3PA-{`-Ea#K^0UlXj->C&z+i<1^|E{_qgXaukJl`^2+`- zc^L*)_AFdZEe^&ls6wliOW6U3p_^2L!o5tTW~pZ~rQYuKs716`1CVl+-jd|W%wM!( z{iZo7De1JQ*Q@ZPx=Zq#x<-zk*u8vOhLc5bgwx%43LYZWgKw8X8`P;(Fyy1jWI_eZ zHXU?h;Gb!Y3Ay=64p)N1nFw^|ESM-MU$SXMNyV(}Oz2EKUZuz5@;FlF?dk6wZfh*` zx>?eYBb@a%q=sR>fUxLAVwIjE)G*NTk*REXaHXCk^=g%tFeew37H6b+GjsBQI$H+B z*}1JdcGG)W*RE@6Eb{ohYL6!^CEj36tlcp%G~8a3lO6yIR$rsW*l!359oA}-@u5Re zdWgpKP%cz0rDerha7HQ_JT{v?Z(rx=yQ76B@ZsCcsqyte|Cjh0bJ4%qlD^D=Djlyd6$d_b*b~ooN_3e-JJnjeab6l&t1^iuyEPh&9H*K>khy9D4j)VYEkdB*p zOvmkT3b2fn0(-mwk&rf5vfE|T;VhB@#-dP@MqHuM!wUsM>r_uhP9eM$XV%THuP!gl zPNx&KE>~hg0{oMdUixtV=y3OnL|c3SDM;B3io`0rJ)-m>N|A{aAh^Mq;sGWnAqOCy zlAsh_G7_e_U@hAStJ&cA`}SL?c=Imi^yv3%^Sm;w;BQf?K4dFxNyE4`=mh~?&K2C3DgM< z-m;1rMFu{^Su!QCQAwi?W}ngnb5R-~FIepCei)Z4@QwjBAWTsfv?0uw?$5Z8O=pPx{JqNa?1VDlqauT+tKot%ca(zgKFuuIDt|o(>b`q#T zMAK$>*z|BHk6NYHfUg1i4oiz*Hz>Ir&{frHou5>Iz%!=ISkpT?OgF%ep8!G-F%GIK zpa<9C-UpK9IkW5Pv-!|J-HgE(<)9R+0J_9PA<0>iYbg|ozdL?O^vA)~43adIIP?5CyIu5uyS^X6+oEAJL(FIcZP!=42)snjPjb>p?s>X+Vz+ z)ZRK~N)CWs93lcgNZ2c2V#;7k@@8aZICLVRh!)ZUm}v#Zpbv#nQBC{M=sxK9iPkZT zLCm%>i!8IPmK*?jm`Ez^mng(SKE{)3O^$f0nUV`=(08X{z(ohlnX16tz^0t!0@EZe z8y>`EgJ2g!h0+5O9)xu~8X{kXUhapS`M@~Fni3i-cMgsWY%Z>x7eT@ehX)mqa0BWZ z$djWyFy#}|626Gf!vTMAC@0JImRGv@_BC1KVm#t{M zADK)QtgN=7p~wuAK73RFyOQFHK@Gl}6`hh7OPhQ4ND2SkKDC9ini2LFR0h51^W=N6_o&EUkeof=FH zq*&5siA%~Xm{HTb#rJ<@gc&0+!n)cYeYj=W!b-X%iJd|yngJ7^OIJL+-S-0{><6K= zSP7-IgfPNd?=r#`T?rLRYq~3xHs^dap|rYjF|)E$5rxu@%^DXpoA&r*p|rBGzX?3U z5gB2l`Qx^o{gW7B2QtR(n)XgDl-6@kD6MU3Mi_mM5%zF&p|l-$8DWjl8DXpLGQ!eE zLWI(Wa#$%eAIzIJMG#6`c26j6#Uw`9xpjuSLTR;K7s7?oF89}KJ0Z&I29dSm=B<1C zx(;=s{>}maeqRsm@95mqy<4zn=js_$kW^ZL3g-JhLTTIbTQ?#|Da5}&r2ls{AR?2~ z)7UvKc9ttRvEPIx__H@>T4`n7g65XBu%tGg;PACoEg(5pRSFCku#%o?f-M~1EAexV zz4`v{L(+$=YB`(6eve&_fBEree*$ewHhl|;{S~-i|M`YZUw`rWr=NWE;RkPBs{CF# z5N~|vuK^vu2mQ~TKMcT$3HM9b;{STk!1wHZ)giub226i{@Ae1(;j?;n7gf|W>(d7h zJ7Mu-{{8Sbe>-vaga7nbDepcR==$!#qXt<_5=O_zj=>2P9H!a#sQ}?64#C0ndS&zq zklo@Ie-L(mM{EDOUvZ0n&45R3fwq6+7XMc!dDJeL_B(Fz|J5QFMC$=1f8-YbeNq+` zzu_xx@jp{aqCWrif94kdJDD&lzK>h?$1pb7D>-!s#13)m{urht8ayJr$Tj}rsS6K( zk-g0A<7b$*sQ6sFKZZFR72onNT$lf9RQ!|=xW@mxsQA-9;Tr$lsQC3?a*h9aRQ#52 zxW>Q3irdp)M+K>?ho3OXzKVY2JVkx zGO;N`uzlRSKZa?UG6LnF<=*`<%t{ne#5N#)j+-tYYIWz7_?lma-pS3?6H^r*G5m%b z#89ixPl@k-KlDy+u6{km(?^i(kGMe$wfY|s+aCL6?H8eUa&tAc18k0k`(qejoJ3CT z+(&u}rt!VzA$+2qI- z&>I`~$1v3q@%g7>5&f}su_59Tgz#E;J#ls26>$zk^$V`>!tI`oxCTW2Q}}&cUB4W0 z2$b+1S9sxe-;zXXfY~u}e+=`HG*Sbs`8+(ITwVV~7O4To%>BU}94IkNN-=YP43i&e z4XP(r?vG&_BXmIQc&ywX!)%MdgAiTis<}FF=&H zG?wn~&i-(G!K1Nse|L_D)jukV$;9L1b_-`oD)w%a_~)M$O{-1cw;p8HJ*#_)`WCGR8$?CssFo` zaA!}*2mlkWjMd!Ncn%IpgF65w-5bm32l8-T7DNL@`S_6-Mn7y7yrK?jfGA%Pv$?PF z`u~kFC;|kTlUK*TkJYbt`#)of|3!Tm zzB{(@-`lyt_3o?>y1nARFJbn=0!2}Y8 z-W>1tWaWa2BxflJr^;{dYS7dw!e*A3Lm8#Z6MO$8bwo6(Z1y9K-z| DDjG{{ literal 0 HcmV?d00001 diff --git a/Modules/CPack.background.png.in b/Modules/CPack.background.png.in new file mode 100644 index 0000000000000000000000000000000000000000..9339e7cad26202c4a27176f2644eaa9105dc2269 GIT binary patch literal 47076 zcmb4qg;&(y7wu3=3rI;xOLsR2NH<6b(#_CANQZQHhcHM<2}6iiOm$2KuBk&UxQ<)>UnLWw(kqjqMNK zNt^k2t5^9W`Nfg^D@9&!*M2O_%^~$)BQH$L(&Y#hh_(B#QR!0yo<9HYdsf*LWGqW* z^kocv2Z^>k;pt-q7<*|n{m!%4Lj!q2g>g;drP^rv*z6*fMicNCywcj%2>MtS%b?O> z=zkw3|Nr{|bUXhbwz#=k)bu-lmF}M{*DcY2ES=s<)0C=Y!7l&!e#i(sx%-m^qVvt) z+m)^x6TX~uo3{U+hdxdTtFEg4}NMs)s)%&(AmA3{%TWJ&o^Y_Yih)bmT2UW?cK{^YbXw zP#L})j{nW`>0<5Y&q3-(i6SWFoq@i-A~Z>4&t30l9AJ)+eDkNqxS6v`MU^0tN|Y#W zfLLMVuk8K$`3>gV39IaPcSp0dZ|NEDbBG39xCu~jGLzoVRCEg3$T8MPfX~!>GOUBB z=&Y>FHU#g}o72>8X2mVSdgLrj^R zOZl2(2pkT#7cj={B+>47NNk&chRSqXx+|0lq$F>pTDrHf5q6lE^liE|z!A~(8lK}W zu$2y<k5v9*e%#tWv%!NI{&LnT6m{GIH+ z!v~NU@`NFKmiM&Skj%2Gbdh`{>W zT#nZ|y`2#MP-AN#C@9+TBaL%VPc&bWw#v#%!&wusLbIzrIn{@Xtkg7EhP6LKUK{Ak z(9_1I%3)MbU}!09UYu;JaeNcF3yl+zEUBtmKhCnb^n$(KVe4Q@Q?4>B)fObygRqp! zL=$9@ST>8Hu!q7v3N+=e1w3^Co5!Z7FX^_?eZKJe?yIh5!A=I6X9iO0_F`MVS~x<^ zLjaD7Auku5tfyz$ut@kSH7AHFiiex^}cG zHlYIHw7LU^jFr{)2h$E>g$6^8OR2S93@ZTzZGkz>xPdJ<5lp&hB}|J)!9LDQ4-tf%yR_ys99{JZ|ECIoWmve^%J`&@(ntpwlh z218w33LH^7DvKtC%S1<@Z~hz_by>XNDIVNTN2R3=lZj@k)FM`3?8o0g{Z%AFi2J}u z{aDSE=M)0gYwgYP&GFr>>tuun*t5S~cQ?<90)8L7zPqCKS>5y!dorYc%3~IAGVt_f z?}dNYepU5{tGupD$_^y7*|?(3^Q~P`;2*F`3ta;V!fO}%n!(GPZsXzR16_Cjx+t~s z1}qy^j`)46v*WVU4h>$v4!-q6z+kMYHGKYP=<;-Q)hvbt)2JH{e#8&0EHBU3y$%+O zq8Th{XgJX=y7~$NrO}_H{Oj&%;E~hoH%HA2K^J{bxy(K-LJ@JLBGm6Tz(ak(+h-=P zxE8?ohGu5a21DEa)r<4GV9B4H26bkE6M_rTr6LpI-01P~@#GQ*9&OnfY?!?@)H)>= z8o&MR>@*#W5~iMMV?aXSY;ye(HO1g~qjzIyVYtjh#OFykdUz5f{TZjkeE2Qee&e8fu$TQ{}Ti+Ic{QNA~R9U{;_mdae8he zCHjuasxc0+d_)(rp zd;a`UV&r=?x#O@^i&(q*S|LReH(+b+ibNvs^T9~kGtZyjsHv!^XlQ8eXQoJ>l4E&a zwbWKM=~J?wB8M0l7zWpMl$Ehg)#6%KUdcUw-lxcnmr9=I#K5A$MoULa0I5f9g={_3 z#K*%c*b(fEdi3-&m=QQkxIde~W>cHj5RVU zpKe%_Q&S6?X?;YRb2YB4b^iO|h`0>Mk(d7Wh|W?D&VtE;386)84auzhak4$6xeM(` zNlDQR`kl7@L&6T7yX*S5Dt9L_cBF?ERsp#e8pOa~>_Z5Hof>XC3Z!XyCzMWl`Zx7M z&T1`dgeaOy;THb#YnurwRL_0NHi5lxa);mrKHF!p6A&+Z~8O%mE-sWua_ z-ppH*AFN?vWm-y2lsKLGwE6Z97LtmW;y*rZHVo0c`JVAo19=NF(%+v*O8ls%1Z#E2 zj>@XhFw5D$RFssIeVf0^TzMD#5_&`|upwMoaT(#nOD>Ze-JxjS-X>uvf}~@wAnB-D zV4Impu;}(tpBl`HFHaLdXrQTuINUAGeO(*a=0+oQ+hD30R7*c}?h4dUB|NNOa zw0%meJNQUtAL+C1@=Aaw(0R30TRYuZcP6MSc;>Sb#9UtV=HHhxSz$=Fuup60(O|gf zAap2^x~|e}|8%519kt#TLyp7U2t|$u$;gP>j*@MtBtRiqyLeOd^f>r+4}~(06lb${Zch{MKd`MInm*(EN}X}~sn$n6Go?H?C3I!k`6xVy zTHO#vJwfrl@2rC$gogk#-?4}oLg0S7Ght9YXWL|>uP2ycg3aF#1qpF)`dylo_thd4 zipUdWBX&Wwg@%TrWL5J~8T8WW+qITsCKhMw8S1-^!k$BzNj(}l8AwyR`idk2j^C{3 zjh^Spa+tK#eEPJy=_XPzS>udO1IwG__WrfeQ;CkMkrqoJOQ52n5(`ere@Do9*(-Cs zj&Y04y76B(Ccd^7OI3Pl_I^(bLpmg)z1`!3c!B5M{=VP0loz&}2`$b`0ROz=%9`Eh zU|DftLlEzz*g1|vYqU27T=^o~2B3I&Z{};)H%~`W^M8D{TzS$%M~I>jqhmROS!4)7 zLVlKgotfd2Hg;1xDZ0BXsu0WRuD2N@t)Bbg(bh=vu;AljLMX|ZMj8^X!WuHkUvPjv z#7dw84n=rqs6|ER_-@*qo(c-Ts4g}-7F}j5BOxynGBO%9gt7s<7#w3SbHs-aAMQ&< z(=SCR;?4PwIamksyN6BrIcbc1dwVt~5M~waCK2<4%5@bI= zgtMq{z!j|=Y2Ryo;fTcTp^J^cR928JILai#k+pY%ic-tDuHW7MwR^E_9Z8dqLc z#<)^!qN|(MBgssWpfL-hq@nq_x0n56>5?$_K4;w0j>E(!C`rum8^Ev4{Z};@C^6mrL+9Kd zQN2-=&_Id~KQ-a_299@};ybW95y=1?EjbHijb+p(evtiwXWI+ocT=_aya>%7fGVuG zOxCZIJdb)=yL@;$GD?j1E*iBoTZ_1~V~s!?-3!eCQm|fvuot-Mf2{fK+T%vpw%zyp zXogwc!oF8#db+i^dCwxu>QIP!1T8!rb#Dvmxg5Zb9pPpP9oH{Te-O^AKzbv^G?$;8 z8-cO>iCrjBifgPtb%YIcn{J!F4at{(tEK<0dOm;teCcy6L8IU4&fVX;+t;S1rha~+ z9g%>%AVrbnX7*u%DxgL~I^w9mop#|WV{v8Y7vQ?b|gv^qu{KYI9L{&xQ_l1!L z21|L8^sR48opGb}NP*8<8|=t9Z^E|On3EKTt_(CDA3pp{Rpq+8-j%+KlD^(tvMVZJ zY3Xs4U4{CzG}De)H`dlpn4>fyJreIxesA{HZs_KNrGBLCt}iyJXE^fD(Fy{3)DrSK zW`L!f_(>Z|<17gwYq`UUOMn3ip$mjdzDR?^y71-~9vjZIak#I+^k3`fY{5DtX_Cgidx%gORA-nz z8W&Et5lvBQef8nR)4(&F*B4<1whdq-R~==$Im#iBs;b64S?Ff)b}{96Rz7Rep>G2o z&W?&f$-B;`MoTPR%7?|tTv#Zv$qs{Za{aAk1g5Q_k_0G7%#09_xbuQzBHcu;?_u8c z0RoEj-!1R~f#=(~Haa?5RaFK4{r%gcZsFj>mwer?b8Tj3CN?$}{6N3jK=M~N8mL;G zubjF^=Q%N&iYd|9u|>UGRwUdsM7N<8emIijSOCNimI{!*ya{^30)NY2!Bi#~rutpY zCL@~kOJqC0B^@T`#DrRfk4Dkz_OGotZqTeu4&ab-wC)zZ$=7)Ht_6&sv5{}5NQ?>} z#7xuDAx!)r!Kdw&SskLZ)DqN^yI+s)AdpfP=<>&yW){QRdEFkUS~uUr74=j`-M;}r zdJ*Jr;1L9wV^R}wNOKKexTK_Hxy@WjG7&y|yVo-~J#-%z4MIe(#D<|QAEx)zAI*(E zQ^(%XY4!nRGH+#hD)`oOG9w}xRIiSYAHN>KUh3)T85lHSil4+%#AXG3!$2j2@oB6kZQFeI|8+g;*(g z&WQ=}^78r>A2-?dWK5tOa@q?^V`L@31Yox9RkR@he;V~Gzuda%+XLRklH$ROS!o+0 zP}Ot1aIajgWVvu+{=z_-QxvjR96j*NN1}#?oGh6*mn>-Q6;?7Tk1)o_&zWn@`>PUam#5Rh zF%wZ0jwHxZWyt49d`o+_enwk$E?t4mV{1-+>Mt**N z_ybfC1bGuX=l%-X)?3j_G@P1W@Mh?hmKse&sCJgRc5)_7!?u;PNz2)vU>6`0X(ZbN zE|+CwV&uIl#LIc!ZW!ug645h~$k5wcHJnlH7H>SDf;v5l>Wh)L{8_k85%jlX-M#U? z-*-iRjZa@|hx(>5C!Ztd(2G~%7!D%=2XmI^K$i?7c2L}hj zP?6c)w6u}092l8TF~HX6mvbmPDi330=9C2c8xpQY{}^@yec`nhUGU}iEWb>B1B1dh zKilx5-hqHVI5)1HU;X)m1G4KT;=%Aj12$IsByNZ^(odUECtq$VNzM+z@FJ1R$XJ+< zjUAia8BK|BRRoVwMut&NM^+A?EXFSnwYU<^(XY6!H)v2~qIkcoB1Lr99`zbNOykTfcDgE+X(h&$*xHQ zWWgD#*sr$O`K%bj%H1CJ_Iv#?k0sbEL>qb_6jpG>pt9o{{-Cf4$`zL_N!!7$4`H_V zyyb`2h`!@2E8a*#Lh9Lf5J*iAv7QPc;I`6O2;?o|`}2Yz#gx;*rTpZ$ll!@5D*Jh^ zpB>t93AsQ0lFOSIbd-g=wtmN*ET-IR#J(2zXg5VOIl!;#a(HE3a0l8vQ05ysaKf~V zjN0s{=__U{=L#mw$95&M<)(g`fvg99B}Tq?(=Fe9@QJ>@{^3Dx5B?Gu8K5ty#iiz! z=~W$?Pl$W=DM+(7AFvh>$m;0H_rASVzYeR3hN8dVSe~A42)emyqqKrLIBYf;ID(gx zQ-Ow^gM&kh?h8B8>qF86Mb>ho0X&g#D32$9L$=b_sHZ^}GoWodofIERdis=%seZ|s zQpmaWuyG99z7KD27mFL<(@mAT&qDG6{oJQ&R?|mr&h4CumrP==e{xp}2+;A$B z>W5FiM^~U7F5ujg#zj`*X`CLg*~7%Ampn(9<`_PQR5hjwp{o$0kR!C=q3QGz5E0Hb)S@=5jcy0HgHFPqUT+MiFzD7QGZOv#d%WHie0TGAJ@|a?<@%fBPH%7T zTzUIRS3KK8MNA74>HM$tuIrySH!Wse->kH_kdTnfiu$TJ`1t&N`T2K7mYKhUWm{5J z73ldjr7ph#A}SDk(A`k*_0VVryNl3@faY?qjj)2YB_R`Od1(5w@2Hwp6|KNgr4F;T zGD-+YB{nLA=iydoldQ5^sKyD4Gpkeyio4LggbD;Pq0iCsfQp-^lYbGbmdfQ)f~fyB zMrZmAh`-;*RPfCr9Tn-Ty?5aJ?|vzHp3kjK{C)1_>znPTcNa&1i%Jy#=_Xd7_JSLM z2H}TU@r~uX820t`k(qj>RG!HwC@6p^lc1R@k&O%$oLde2iyV}+h7?!*I1ax1hwSi? z22|dHsSowPb`SX1-UKmkFE5T7GaAg%&FEf#WuumK8#Ub}9i?Wr`k`o40&N|A^(~hG zC`vchh63N0c`2WvysE0J3hA2>uchDL$EvHV3p6T*wns`hy&mw2h}i$o+)v5qH+l0$ z{7xoj-_Rwtbk%1)5ELgm>1Ky$#doi7e!T3uoN#>*-Xl-XTOedNOX`0sIsulsjI|l1 zTU{7Q95>)m`0NGi4I=m-!UWnjkiIMcSWR(ITlXu9=KDW-`o3ndUa2i9vFN)hkSd}| zs)QsbBBsx1F-YH71q)2+(X#v)n&#ijnM~ZHCl_B5=i}@B+$x%7Xb+&`@v*QeY$wMq zwsa5H;hFtPuxUdxo6maAarCK|)$ox{j66L830t}6{HV;vWLN{YVxBn*tt@>0b6-xI zmOMmGh!sG|e}HqbQV)2QN5L1*XMH}d9A%lpj6|roI5{VN8lpf#bgs&|1NS$ho=*OW zY~%nuz-u3|0#Jnc>33jnxK?rA9IpjdFE~G;)+XlsoPSkaWLI^A0+FF7vQ!_gbU#bW zb)_#QYf#hA%gqHG@~fJCWak^)96*+gvDLi&o4 zsBI_L3I5z=xkLK*FvC4@B3GgXC8{dXV#!gX;Mgddy}mx3`upck?&oaXPK?+X787MnSKy{Tg$ccPs5HZi>w}*+r`s>e)|G zN(7M+sT5T2qW<(@LZJN^O4)|PmFyv6-WPxMZh40Mw3kdBI?fQ`tvjezC}G&}GY~&qUGq51$>O%eMX=WoIqt z$j>^G{0(}Jn@OL~X>+QBbfj^Cmt(Id{U-fG8%-o=UfQTKmOenk)<jVgUodl)2vfk3dL((K1=zC9)oo`!!RDql(070~Y4Pl6QsQ(x5{C>RUS_Y{ zj3XFegurRFyCQq3syg;ANh)_`LBIGA29l({lhEaj2V-f-d|(E%NY#zzsX-_cB|4*= zoOX^~mF!(LZ3x$OgbCpKh-X;K$8SWcyt8%dGTt099=dPy)6o z*N6XP+J+c%{JGdp+WqBC!qP!4Ip6x;_Ix;+kzJtAp*=uu*+X^7V_zCwJ6TU=+R{x3 z8+8pEEQghmwlCO5qYB0<-_EzZ5%k5lzkLg}LNa#&*dX*&LE zp-M{V{wQC*7G&6hg3TqE$_v_hTvTsd>wIlx@OI_l(|})#R!Qz$JN?ylpO=@Hb89aR zqJf5#ApgymC{T?8{ai86U>8pKYEV{zQ7s@pnm%4|^(+{xI4{{zE^$h>A^GOt-@Fe- z9WYLuc2TOtPYZ0jZjW~BFh_*SA)k+6d@*rB?P#=o(ixHq2w1=&5wV zWtqOeu^cpf2eIPA-6uw)tdY@DV`0;X7T>#5CQv09#ro6IJki#Vs!7n<(vmshH{$x2 zNx;f29Dutx*+c4;D^O2B^&cACo=%_}1CbO=5H=B=whxt2pbDcg|xSJT{4h54+ zo`2O{+VK-P`B7bm|LBpO%@Ha6eS=hE($y!-Hei{HEu}RtQ{>pLVxz6gUA&*EOY3aT zA4|WH-AWn$XAxyjk?6;vW%ITt(;2`Y>QOs{a`QDtRv?XO*sX;_ldF#g8Kgc3-`!G` zVz&v-O!-=(K>i%BKgE4u)j)o?KeU}gF@6R398HOni2V-G-5oAB$Hj;?QG3vs@sMBt zL3B;DiI@P{;nUsizY?wJyBFMgFp~}|YxzvZ+$RAFtOH*3p;ZniDw+C92nQ5d;_XJ2 z8Sv4}R~4jk646W}zD_141{E)Z+z%IdXNy|e+n2Xb>MefzO=b30enfh>snRW^z$?O# z*&L<@4RhA^PyU}5fYA!}T;6Kx46vt9G#8fd@sOLyJu8wM0&?74cQ<5ri|W_aK^?zm z#3|YM-I6qZ`b=TrZEEUhigu2zaUrWtZ4Dlu$rIM{rmE;@`DEhQ()V~bc}gx2TCE>U zt&owE!9me@OQdw1eKLJ^^Xn$H%9oZp#`$rGuSZZRgLnhzCie76<&_ zg{Jg&Yu=n=^OCb}vqfdq=&X>Ij*iE)0@>0LtZpH1&VC56_W3JBBGX^KBxiUUyB)%- z9O+R~qJR7yVY6wWDjP#LLlk%vb@YAEY=dUF*5RDdvZDq_pE^E zU%zoF-$j>!Sdvl}F{(s4%yvOR!SCJ7P39dWVRqOMPEO8T1H37JtCfjXyaS+mNlw|v z0aXsP!~DFvHL*+pdRp8{U9J+u$Wu^IWY-H#U4>a80O2$c_wpf{ib#IdHU`gz&O1wEg_NL)IP@1cebXAY1HmjIbl2YW>?}l^boH6=}CSM z=6_yOVJZz zj77!J>NTlHkc^o|+Tjpft0aNW9>Uj<{G{$njyod}mabEIW8=)e*YeRHIs5Lgd>w3D zI3Hab29owA%9yTo2Od5?GZEHgjpQBiRZLC)lD{`l`|4S#jP!r8#s1!Vm-M?PU&`O# zAFPmwAm;DmPkXYg=l|$q9jTurXz6qB!EYkZo@c7rh;=&9c`!?H>GBP9+e%{UaQ8&Y zgLEwtcSzc*;ril5ltb$#zzqcGJx~Oh+!s8LW@O0oZaxH{&b%hSe)pLB`qfv0Mox)` z{P6HlK&WnzE=TPu;B$_p@B}~g-&t@Z?yeTPgphahwI*3yrp7uty*q2a*Qo*dF|o5_ zJ2?Oei3TAG6ky1g_4W0Ig`vAREtN-4r9QcDD;j00;}l}YA?Z^viy5d4P*HN0tg|)V z{=noam-&E7m)@Ae`{YIiXgwIijP8h-U{fVhg5U0{ahZlJ=!)6cwY9ZyCsJ;+aUJYP z0a8@ zAmID&2q7w(n8Pq)J)_scc()Kj1EQv`7P)oGIvt&wvPrG#mYfq_uEY3b84ZHod!>dY zYY}fZ%9FT31%Za$K7N+n?H*d84s>C)1rDJ30=x;rz#MVEV5{@;JjTR|l+%3B-OtD%YOJcG(5Fx%~o(a?{8Gv2xtDTi7%uwE{&rt<%tFW@OCG&lmdbg82KR5)e2^}ezaxE$Ilji*F>e>{SR4MNijdqgXUXLF$bDBM@wQ~Z^7409*C!yL0iMyoy;lPFPq}ic*LH$1bK1zioV>gaMMF^-@nVI@FiVOJsz!RbV^TIkltT3*AoOXwf`8N$K_K=`m|Ib`3qrZSslHyu^25B6`|PU>`NDo7|r zX|GO`bnEL(x|*~`Dr45z`F;ENmJ<5w-_76~+k`WYVf%4b(T`uo8pm}lOiWEXJ$E&1 zTW#k2F(49>m(dsCLtwLTbtWdJ@87>4ni_8M(l;&-`bq?WhzkZO6TVdgWJfPA0UCfU z88Gg3K_&T^fxW%=`9Czj*pNU_SbMV}tK?zNRRCopr)N+>;V@dP8-ONECm6Q4`n6xq zbqPCpl3DFB96aN&Y^39>NS_z+=Xjr*4c^lntEyKO+wkzc3yEQPEUWQv(v-!Fi*jXJ^k?%|;zCJ_xV6h3`N5Iycu0lEExD=beu) z-ZRa@Gk>xNVIC|j2XA}J(*7DZRjzSTS1_ofXsao)5rtVr-Kxj;pg>SFX)_;7EUlSs zP~)WQ%x1!YwFEP)7)fNe+l|XZy`rABTW}EvP#oGr{BNJ^T%wF_=5ffltkW#20a*`t z{IRi4vpU<)ytz$=95rOI`)@NdGuOaM!(jwXvbI(9@~;694crKQsOEEU?$6!2fjZAW zWn6cmSqSKgk+We=(lHkV67cUTs;caO(Hk2>LWK{AtxJTf=SJn90!9FIP@PT-T(f_V z4i2oC)(6M1qme%j4i@TG_9-*0cm?|$#KKfDHuM7D%8q5hKU>MuRhI7L$T@CbyjDGs z_NHyeQf%)4Jqq2z+1oyg**#?&n{rxA4qO587d8;(RJHGFxaPEvJ-!X6>?;}buW+th zi_kASw=_03#>Qfk`YhlgP7rFq7Byh$Ew#d6=3T`F_RQ>YVEE-ulzfH=JuV23cdFA)--}gd;S^U2>L&8QR)TaYkbUALP_E(gLr+abY zLY18sw$fzhid=T->&wLw6zxF?`8=8>=zv12Q-w+!>#l6kLaCO*Gw1q|Xp1iFMXHIh z@uI00Ov<@s@90QS@*mg<@(vQYFSVVWl0c%q_CWJn%Xg9`_vi?vqtD|h{#zCQx>v=M zt9_4t+lIqJEO14AEW_#HpD)iJlZdL{> zdatQF*g;x7_|P$V_D2FB12txK{@<5fxa2J5fq~D3OqPc0OW#wZsB5^fDvt^1s2f8d zAuRO9jQRsu!VkZs6#UUd=~f+ipXBMp~Ri=H@vGk zTmtT%zOTX(2Q^KGPA`p&o;bY{{LGFSrUh~Wkgd0oR{>JWsXOsUKsctC?X?)#&EjjS z<9m_lAEqkZ&8u$QeMOEA;pG}*l&trwdaA}CB5avJ`%y@k|0uK~tO^tx>d^f*f3laog(25!wgB;I!PeL zin`&T4zB+mq;$>x&~~vE*DUu~1F>M)kncGuI_Ly!Iviv0mrf=B`7yINYft}WxG9xX z2B1L7^jXgtEN5WL=wVj)Y_dJ6$&AGOLVsHOd&%?gyOpD(l2Z~Bl^AvE#X2Rd%E5q) zoI3~>Cj`p1UcR*Zb*R^3!b2{wqrQ!l`%qwrD;m%M1TFp`61zwh0SduHp&uA>0aEMy zQxaDG&US@3IQgHthBL(j^pfIGo3$HO4M5q8b3*#4GRPa ze{EtMMhnMrS<*P0xhnk!I07)rzn)YgZrvjO-F?vHK(fF|^LL4Ui9;93z$uq7rPkTH z0{Ba6?8x{>xP(Rr`uN)_D8=RF0|GI@fGUqG9VUKp@psDVS7R96&R0qfc4C;g@2@Yh zB$QE6Ot$JxuZ<@zDsrFa`U}nWC2N%M>EcIY%EymkZ+_M`BV5haC~808#FyVKRejT}=6t&~6$k5*3Q z;iGrjUCU-OaQAX%{)kak0bLiBsN+z<#H z+nfJu<_J&yo5D;vjQJN+{X?^VW0kw+-34};twU+Onp;Q@Au_YZ&zO7pGvK!zeFEk6 zz9*JeD|m1MS-zh=RkgK(&9b)ZF#cNw5$-n{FouX%7lbwf5N==0QOeUJhj&Bl+5xxS-hTA%or*vyL_rAW?Fs1wi>?N}m8b=S0%NpX z>Hu;$J2ts8R*s-Mv|nARxT(o}Ku%2)ItU$y znUCF|>nDxz^7baNRd<~njr2nSvJh|_23Tkk%Pu$BCG{-DM>jV&!zEkVyr(I{bwSH3^AoR8(4QDi_3pvur!gceWGW4#}^oiq8Hm z#A3zA%f;SLui-zVrs7Fo`jUVYTh0O~UL$4h1^a8k<8RC-@~oCn86x9=K2ePles5Vo+Th8&hNCzwfB=jIg5pBF5U0 z?gH(+K&fKskG=P$RsKgU>9%gGf zMxeuh9mz_%_4l8;>oCWWJ|-&$aFsNg=<8?PtNPABBY8ld4qDO&9iY=8QJ97zD4(vW zEkRQmJAsl2sF{9%aHXgJQc+M`O}GY~uB_kw0ji(C2i@%&O#%G_uMVVy@DT;KVY4F%WmVqk8T~9K+Eh~Z-M@gBFJJl%Y?;eoKVYh5m(uMOSD?(4 zip;&tCpLVe|0*>`U`p=AE#SLcp{)V93iQ|sQ%r+Ucvr52F&5+& zVEo(r4=UYD!dKE!*v; zb#&0}#Cqru&MCzVZBh#K-Pn}ADK zjNj0f%IC3yJ8&<;(VWh{+YHQ}PZ4&q2fPNeJy~PVO;9jXF@->x}Bdy^X1dYy1eDLMWQ!EF6l;0O${aV1@gog)d zdp&xTP$uzUJ`9q)KcI3x%wQ#Sl#wm;E-9!*nePPy>p-@X!>q2KFzR0Ndi8*^YAiib#3t%lZ)^MmLO-r4 zi6(HdMU7dRrRE}lh=0H>zRH)m4+4qL)iKdo!uY~Oq9f-j6A_`7g2_U_Q?o;T8sg0n zy)_LSABNeHNmE#}5x@LFy>{_LUj1xg&zw^cIx{8kzH zLSLK0rK4Y)3}ab!fB%)aDNR4Itc<3Z6CSCUdGI)jt&B7*6N158_*-p6K23efX}d){ z#TVOTv=U_FZ=Xx)?ZqF9zx1Tgo@~?|@eE?QX zr@GERdRmla3D9kvx!uzVrS}m!_wq9UJNx-;@bDa9p7ko*^y~gguO_Wf=z5NacYZK` zOiq)z?e49{toOpRh8Ks{^lRQ)SaDY9ECo41Ot#*8sh>jlSFZA!ZZJ8CFqs!Gaz40k zMn}ri6V3{%k?|a(3rk2ikE6zsa?(feEI~D<^z`R|vOw-@CX{#2LUQa4F2xKS=ZrQ6 zjBz5qNx+tgB~Wx{bwL)$rGmc$R5FEKO_a(1I zTL~hWr`zO-t<(Yn8r{#fY4%<-)20)Zuu=Q7=l7#dk)srvEOB%TSX7l0qswkoVp?>C zxxZl@`_h2I1>Y=l4xT>_JbojQK`LsMxm4TSoFSb7<*!)=UY4=CgcSsO1__30zV;X+%xj@n;_*mUcF_OSvCH$eGLxkiO`>2 zR%XEHl!i_89}dNVUc(?{boyamkn;vwY~SGCYTXv)Q~17%2~27jvhUx&=V`4<10K^H z>%vO+UOg*e8bXwy`@P`~*u;?tpRYihx3;`KouDlNy2t0wpY!u7J32aW=q&rJ=W&+r zdp1o|WJ?O6D3L{|SqLv1)VMWa?swuGeMOCs{DGs=cYR>hr}BZFD5mOe6PBxPZCQHbg$ykL&wDxAh#I4&LEEN=;=Fy~ z?z=oG;I<6DJuMO?+kIeAWZ}Okk$`<|j+Uxc!KD@pl*uO&srj4d{(fSfzej+}7w=%9 zNK_y@J+*4yzMRhlSLUhOJH2wA9nUhHz;hRq{dO~ACJYD$-yb39xD&2{e4Px{$wkcL zXTUxjT2HCzhdov6Olt1j(Qu+l(LqxHa?a9GyQi z5yiL$9+*79u|+qI8maMvL%M&=d3vh*zj&U(*9T>D4x*ylx z8L8e$0ZLd;@ySx1ceZ2gw#1?BkIcrmE}VO|YA5;9d-slhBg~?MC^~YEJfjs5$AYAB z-{Drn{CO^<-4D{pJ^<1@VThKkzW zi+t8_lpaEPVZzD!=!uDmNZr}7ZF%Cb9KY)e_w7EzPrePbn9htWE4{PvHZ_QM7)ZmG z^jUtv&-FG&w>^)7%s&-9L5X{svrNnHbRW(980}P(IZs^YhVg(wMglGM_aOA>=!hgk zH6TcoJl%WF5t4kB#WhuYl2t{5D3|9FEKsF>L?4R<9Pe7>3{p}KB$)At!)^to99mp& z;$%ZiO-L)jkC(n;YD>djoPVaQI-X>`b(}brYljSrG<2uw`+{2nYRz_b=($I>0U47V z9SZa*zLHbsgP2P!zMO=-(%Ijn#6(gh%g|kN?4Fn%WmZED(m>?f%A@)9 zb=M6%eE_Rc&mT zrY;bl8dgHl9%gZ`^N6sF@Tor|;$b*1A$;ZN2Ny$^nbUdi9~K^e{!ELFQ9na1lRuIb zQ{zpyoa=YU{q``ET0(Z@ce6Gw#$+$<3rXJt93a&(#L`;{AK3}oVw;|P`L?&WH{2HB z1H7k|-3}cS&Z~G3V`JmeX?y$+Bk@m_@y(%?bB==NYNxYyDy-DhSgcinz9MB!s(SKr ztON1n++!5=WhjsRt^Clcn#*kcwNbMFFwx6e#xSK>_Zo79J6ENTVASnk7z(ghJqhHt*?=V9g!?*JR(jZ|UH)$Fz&*G#uIH18ev# zu)*;8w$Vf+n|8pEZhd&FSzI=7^iy6eIzY_ytlu83OP%yTcKv(_@1a@zLTXjCeEfIU zAkQ}B@iPticiOPYUw;u=Dt-}qnt}o_{saXu2YhO=j~?F#r?pwB3?Kp}rmNP4n_h-ss9j4s<_Qo?c7`)GJK7dtCq7t?I z<$=eQbpSTSVtXDq3xNmqX+nn2`>G%3{s%vP#4k;3pJcPK6=8d_rYHdeYK>W^ai&dB z3Vo(S!AbZCsd059EB9{Hf1Koe!TJmv6Va%l*w|jP1F5e6JF}k&k_OEf6g}kw%hu5n6xD%if=A2Eepzx`qIYMG_I?clemdC3QI##zi~KIGuEJWu zmRmO*dvNJ#br)eYvfFzJqU||wAp`+)&g%wCj6B6dk2Wg&s6ptVybT&8;qSX8DE~0j z#>PgfXv)h7+-mUKEy&8y2YTRXP{l*jjyTqi@6W2;u6!7pJ6xVNs&+RnC?Ftj!ZWNhFYkn2&lQP^BkL zhdhf1BV=?`B^+m^_12tiK!s+?i|yVu@nDJ%xTb-fNOdfW8#t>08xN8ncmY8Wd|zH( zz9s-zU-j>g7728=-`E)(zKsTk=Z8~A3Emvm8HSh-!mnR=#L8e!3!gsWo(u=c8!xKd zFdhGqYNY{sAO(spdc{Axody-w>B4cEUM|gxr&+{&EiWx*zO0ntpv%|M=F=JH z7-F)w3|s9@=%o-sLo#uH4M%}gjbiv41z&$K*OLyfg zQ2M-56X-hauRZ{4I^cqV13N5cJ9krGUvT2VuX+;$hf!d8Ia+LZ2N;JleU651RPOxU zmdaQ*eq+BR!DqnC-TsP;*;_yQP)I~%&rR>*#)FpjfJ&$Ht4LWI7Vti_+l&YFjiV}E zzK_O~As8qtrKh}l2zgtAh(V8naLK-J#Ee>5Zq8kkXw2J>*MI;4#5qjQ!XFL{wxy+E zm(Z&|h6wPKoiBNun7x3W%CY<|GKKt@O9ls$wtzsk%08z_%V8}02OzY9cmV4T7X1*y z?2opkn*9H~09g?PR*wh?bL_-)QR$+6k=_eNwe!F}sS7*!`4c}s2Z!M^LcxhBgV(lA* zz8s@q(#J57(8peBy5^gNGzb->5hT$n`nQMon6EvAB*D#_;2)7lhvcnQ9%r%Ff0H9Q=muuqw~K?CeDZZ+Q79 z04V_z$IZ&R^vSPj-!6r*61>yW0xrrW_<~527BBM8YSyzFZzY-g9@lj9CEax>*)}CPq@JAK3X#7nkQYYK>p(dv1nw(RBw4Yr zB*hO`PO_;GDyw|pBhjKP(lM`7&w=h=wemiB>vfD;PMi$E#!^twhRDg-b?~a$H16NU zK+I%C`W!{qR(t#97K>v)b%Xr;A;ree&CN~B|8f?^?(Vwm(Dv1DAy$Hvxf2cC_RyRo zcu`FGx)d;aa;!&0gGLmGwmZ5-1a4b~Ad1c7d)VDe8_eJuN?`MIxOSboh4+X*MKq*$@RGrAyko2nf5rU6A zuLjM~)W36Dt?ui-Pu9qidt1<*nye>u#;wcWn_@8g_*D#TI##dSZp^1=q@T>VryAGR z%$Vl_tCH;KMVS1aQEL>2AGHAf9S~$O8BpA|?`lBkcXmGHFlw~!3Bzzs7T28pT=`;T z_U%B^QHCAx^}|WvjYi|QH`e+xJwVO(;<%3?{qI* zfsYX@SdbBmW^4%a+2$ef0|R{bXU@aXQaP#}+=agGnD!XTj{YB-&N`~9E?WDCF6j`Y zr4gl5x*O>drAt~wx zzbW*ZUnV@|)~A<=Otm7~X!=v-k0N5^`K9lmoG!)2#U|8tcy>jcinwt=MNGVs_-s zpTmq;=xDP>G~HjzI`%;jz7eZwS1Rwe-`yw|j-BAvgfz8l^ANkSdjoTGdU~$=wt|Nc z+w+%eeVVOEa&=)cS`81gG^6eNr7@iKo~K1kHXLToOXr@%3pU}qqytJ+8s*wNn+CyB z`r(zsx%a>ja&i&a!KJQ)RUr6DXt#__lY{NGi5^r1R*(J%apoc3kMIrtABFM%NP2kpPF$a zxTLp?C*+dgi$f$_3*oV?VqByk(O;8MdHO=9O1+?EE+mWCVVLrBo=P$eZdKgrgx8<@ zi|#4*EIYpacu(?XOmg7nm&G6 zmQZz3RTV!Cf8`T)%s!f5{PPjvLR~aCshaxua5JHJ{6Dg#{XGWKHh8oAlQA$bcxuM` z-O6Iox4-3;p^VQDjN5`d9;mYp1zsDx<*_(O`N}83KLr{U0XMGFqB4n}T*X<*hOFrL z`s{Nzw7C-Y4kBOThYQmk?d@fo=5m_zm^H^ZEDkY-c;dy|W`& z>lh$TGF7Y3;x_U!irf{2MRM!@XE??qNhZ&gvGt9gE1T_ttB*5|A?bzG$5xhaP$1SM zPSsmlSsC|J5jw<$YR1k9WjL;Me@&yghDLzjVrp1e|i;Sz6|V&#A4-ZQ%VcSJLr)!Qt+2;} z4FoSyrxQVXk*^OjgyKIglgA}bkQcX~R_#isI0dJTXqwd;Y5RQN+vA@nkXOw3l2_KA zJGNz=aWGK#9Mr~=hw3$)ksLq!W(A-Ax2Xo0lzX=Z`2r5+XJ3k)u&=qwz^q&1Iz44wNg58he4-o?^SC{i<6#e*$=zUw#muK zKuQbkfrEx+u!uIdx()qIrbwtPa$v&<*Qis)nEgkcX+@nD^1#qEH9W-^Q*~5u>sYN^ z!i9tMZ86Dxzf_CO3xN*fTC)!w|AF!U(@R&c;4a`7Ae9zDw1pJpmV~}~Vd57b^Co-3 zTuFDPi5vytI<8p0-lSf^z^MYMK?3l?lXzZgm6`o?o0+50*>&~yZtm?ZEH7)TsTucn zhxiLjydB$1qdR0|5T)dCz2_zSTq5**byoRX$uX)`O*VorSz(#j) z4Dtw&oxaD};ljzT>NmjXJv1^l9twBEUPT`a_w1kj5wK`n(u~1dLx_TYH&OoQBmtOoxC~u2=hS-BA z1g&V^0gEO)qJajx%JgX!_lJ${X_L?M`Ogrl1IGnin#vy7(utua+%fUBR7SJ8b)kLW zn*B}q0t7W&6!=>{|4Lq7&&ph-iCo6$jmAZmTZ?L|J=)kO)Ltee{S5kLI`4?QOHD1| z7XDR>fqtMG3>av}3QKB+;CFj|6TagkNcgrs$7;i3q%jbz0DGr0B^t&K?@n{sPIEBr!C^Gaaw>L3<)0BN zg1hFr+L_MLG``pn8Uu%XS->B#c9?F8w%xIVj#Db@#Bh{|#(@vWeeA~O6B5}YMJ<80{T?v00?d;2eEsf%up3H0BkkiO2IdZ-;XS|#Du+&6%ero1&+&mao{Tx{_V zMGkU;k<5{9=o?R_kJ$bS*)@1T2b%p!G;QD?FYhER5}U%1gLnUOwC5wkk0j;pFb_ zF#A_?imISiX=A!tr5-?)WM9&!Htto?nZ2T$D=Byd!(7 z0tUlkAb{U~{BP+=-QimIeG2^JFBn(B{|H4__;gc>ySf6neP|)$qoWgA;Lz!#Xm@Q} zS~AmWn6Y#hH#o^D%fbjlY<=gCQ@qXFeVTfF3t@@rdXNqKDwcefd>&etXY^Y5drNnB zUgB3j=PUpf0}>vV>ZdyW;ClPAu;9DzQFTAc>MnP6|g%&Td9kdfFol{R%IRj_&`q!Yi5Bl;lpnG-Hq$& zKk<8?ks7b`Oo^2Gw2Iez4_m*J#YTRxRvQ+m-o{es*XlRGx{YpK$$77JF()VSY3hf{ zchE!^-;llmq5j`L;IU8R&}pn#G#Jw4Iy^W)rF7-$CsFdRzJC3>f@*eXwJ`We&d$u} zO-lRBIV@uY z_pa5`ryVGC;vJKcXQB6HPDf|}*sRC$(MHh5bREA1c%Q`0b@?)Sd zqyJ6BsAjHT=tv}GU6X(w8wW?HKr&mE6-h3P;zMX?#2>$*Hj%c<*N~yo!#2Ke%_@SW+Z-YVeY;HiY3XWD??}2Y{GcWMFnZE%E ztgxQ|TC5nvlJyYZqlB$sU4VmYuS_d9gZFVTU?Psb^cKFT1SJ#L6bA^FvsM?@IU}z9 z2xA=g^PHc(EklX%XrI<$B6_ZWqKsp0ZO^Md4y>=EU|)`AqUA%UiwS2hXqMe#hBxvC zt@({EZ35i_x*uJSmOv8^oX;0ve#Ch4+-mjgV7`w5_)IDcew#H-lb2xRI^#X~@k56_ zZB~@UK4MiuqEo6MCoIg?dEiSVX88O)_hc)?N8Xw55A{s(m2YcNX{^ti*V%o+wGmY_ z)FrWu%OQ?X+#kT9Vzs04OquY9ez+t%73#L;J+9_dH#c8C0$tXRwbhxKRKwv`*iFAJ zZvXm|@In=IOEDy%nkY*w=kHoPJTKMA^omo->G`ZU^|CwyFgUAV2fn(xLasL-KoRN% z5q;-waXbJ4oIBHM5+TSyy0+Dj5lGS#K;{H5fP2?rs}2N;z1L@TI(cHGxR~J22CF`N z%CEYAmv!JQe*E{_&6XKYLNFeEI4E=K%KtChgv%+pUO+O>HZrmjjdu@cNoeMjZ@ZF8 zcF9{oRs<1`9tyz-XiR6ntawIorYhb(TgDA%s&pO|{B&qlY%!Sjhy>Rc%QJRjer9ES zKwk5;OgTD4!{*J7(|`$cxCny4yScg2o`zl~c;)x}sDx%Y866`ISY053sWGZ{qUVip zGP1JPRdsTz+#^MQ*Aw*TdcW>^|IXu!QA1-3!$*(qsm%cQ29-b-UL81;r6GsHR+-A3 zy7;%q^gDNKMM2M`$qwFLIkNL{!6_iq-SqPrhFlQ!++hPFlV2#%N^5#Kv$nPd#apde zq}bNMJXBx|I|g>rz&r6wGvT!$qBaem{T`F5o=@JnYm*o~RAmiPF;X0xKHX~Hn%5cF z$UaU9XX1P*;G+RA*c31 zXD4b38zaE6gw}DvCSgdOzeFh)FbIm5b8X;jyj%y##&y;n2 ziqMnLihXdG*|DB{l3iclX5P64XelG7$&h39f30`2wgMCkNTO#u#^T3hkxEf+&}fer?5tk&*#DTj zFO_~G{FR1SC-6h)@uW>`A9`-sgrAQ?|G0P6<(00Wu<)vsRCkj?`5{lAxXa)Ug+0E|=`lknxkZNPg3Lnp3{Oo4cfW z`5OW}8JffC=@|v`Lwz81(eCRmRf5QE-@@4|%06u-BkXkGgX2M-(3(VV@S5`1DhYiUy#mIy;jk z7oW3I?{GUR1hU|>Ss_!XNt}avz?3p>jOV7W=j&zk2!6D@Y~j^!zZWE$;DD*d||uY86YKB9-> z<#RW!`&|QZNqmH(#jN&ZXNu!dVB^rv32;Gf(a8&F+H6nhQxCfd`K=XMv&CnX&yKPK z7K+{YjVcAOTS?^2xKg7U4xp;6TAxefH*Y&A59$F=O-2MlzTNsm9J#AE`@#HJQ8M|M z8{n3x#l7S;;ujW4-xeBl7=2AbP>VirwPeMUubndP3=WcR%5%c(VkVMbL+`M>-OV5G zR4V?A7NO@Wz3S{#T_q9q0aO+m89e;@G3;SkqVA7;d_-s$bRRx+sp+Mz`&bi&)-}C( zk;UJJ$zSMG`w^2lPtvb3dy*V0X~<^WZ9x%VO3i?;|2Kff1e>_SN03nvQ|6Y8wNEcD z(x{}+Qfl*bVQEAN;a`W|kX7_lM}!wd7AfdAS*^$#Nd)$gy?A}{O(O#n-T8e&^Gp6v zIvn50n5G*TQ3j0kl7;pS9*2ioT3Y4x_;Jq2{yoIh~`rq`>ZLibDiPtx62 z{S=CyHJKv^?@WDXuwIdE(;P<92#$LfZ~}dcoRDeBf&v#4DTTD3spo{vmFDtIZSCRi zZj7J%iDbxLY3ATTt>`;yAU2cQsIKJanfQPXXE+q?HSH}WB_cylf(}KeH(KeK^{PHcJC_;Z3f9br8PS?jTo`;f^`d)zb@n-z z!qz_tgok#vwyYc+&{VCm&++EUa%ej^a9J%E0#uctARw|*^;YdW;}$hPucw=6_>IpI zAU&TwYhhKJKDrIJnMXETt>4;e@D#iNy4nc}{7jK>oPaz~;OSbs99e*lKDu9 z9G$5ih$#r&{-ge#IUxs0xhC8A?d&2xfAUQ{?b1B2&p*1S6$92_z-U-rDq%FD@pSpH1Z(~cC1UL3G-aD2aq zt%-Ci!7LkjGhUzTvjZetO2N;cSYytZ?3*AAjVQtqjK$v;)_1(eNWf<}oDcxrs4pm9 zL0Nyh+)7zDp5OhjgZY(}1CNrnHnl?r-7Pl6EgbZZPlfCM^b;mikU0PCX{@e$RLt3E z#9`;+j_{HkdO={~EQ&nzJY{h`*uIN#c)nyqS?+@-Tm1=z)GBa1PT08scg8&~u8~8Z z^78VohxfQ+Xr7ea%e(_%mbb7(9yf_^kDi!i9dlO%mLU)?`Wry9EqFCFu+U&LQF4b~ z!dq1|AoHDVSn|NA84)w4qv{cHvFUF~x`#rnGN+oovLQIJmk~s2g&B%PbrMgh%_6S6~uk?iV-kVCc zvBo^^S=y-+sIFM_24CSxjX~4$>C>kc_l%X5mCejLd7 zZRpJmx+v2T@N2o#4Qb_xc|vQ-UYi~#nuuQgkw|&vRCAG~@lh660wJ0%uG8c#8LnKz zs^w@^OK;-ARFaD03k}hl$G68)Q`V#T(H}g2Z(sDwKZ&b7?183x=cgPVHCCU01`V{4 zAKls@4PWg&X{*q9rJ@Ad`Kry$O+X2!ZTg*9 zhpW|vpI3m=^H+0t0TrO2^vg6oyH;7O(;Eme(H{pMW2u?X2R}LB!;)(2GUdtO(k~lu zfqL`D`FX07wP+GBD4~pbn#b)0efCYOz8eWptA4v`bdw`_wW?}AHMNm8M-huZlFGC> zb=%D8yU~nDGuohPMz?f`TH{!o|Af3NGWQl8CW*Yl#GIwVXKshBcJFw*m{n~$f^v@u z*Mc1!!ds`{kj=T7IBxSU6s>K=OG8gj56C?B_GQb5_AQoacZ70@ahN}1Mmv6V~kJf#y-0|=YNC6pQ|8eJW`sh=9*ip#O_j=MqU2=Dja5NZ` z=|DSSKKeH~Nh)SoyLzU2Ds{vXpAnO7H~wHwr5kOnVIl_Kg!6>wf`*3rH*-B+-F30a zuO5I=cLuFR?4kJGyRP66jGT+nuDX5m3= zt7HMHD;D{jKHzEl{w2isN%hx#Fllu0(J?e!xpSKXUvdhyF#%u4UWh17RYL=)aerVf=cJ~l zX8+GmUS5p=bGBy|$cPFWbB%n)CMLj1?~<2KGeA0_kpkv@l;2C{W;~6ceT_-OZ8&(r z=Po4`bnk^|#s6smpg=xowj7Fv;q~RXq^MvZ$Nk>ghO_Uu+a+XL?F9vD4%z~^?*T*m(Xhp|v<_Ny1n>a<8jIXF4SL|jbR zW3A^nNvII=MEj#|QeNy8x5UKnO<1So+=6Pb_A48-$bmMXKy`yniaqm$ZxGrE;IsdV zS`4dh@~(;;h9g>ojk(Z*9UT=Yl+k&Wx(bAw3f-Ef~kZb`2>s4P7I68LB@yH!XVCO(GBM8%)NRR}lynW#sVqIC8NDL>0C? z18>_#=*667N`M$i+=(W&{r=>y9bj@k85(yyyeIGi$Wc;Pd!PEhPlVn89MiQ`KZlSI zZfazxn>^*9?1oj$Jhlz%9s1x9C-ugEeTFBRM)(7C?~-TlO21hp*XJl@JfzFCYB}Gy z%ewU&j!Uwil0UpUloRPLfa#p|c+!-hxD|zlpod!qTM6uoMn*uys%i~R;TeODDYgY6 zHD72&sZ>i=g>4(WEu_xhQ>F>CEZZD?L`ia{I0}6G{@Tjpa%kl=JI%7UEo+UxRLtD* z3+|65oK6J2&HaCWPYh|8c#wx~ws}%Bnj^aQ@`fOU%gN2vT3e=yXA>9qyZ(DICG{&W z+m_eD*4EZ#so4o!Taio9k`@pY4A|uS`~lBO6zQp<@uGNvmKIA%cSkpD_?w$|uiK1a zJz+yT)~LwCCQV#S>-`eUw;#A!6sfKRZJx}^f0w~R{G`itYax0jrriOL{Gl*S;QJ5X~fq3%z-$H+q1%0q_UqAa(=o3j9)9x@SaJRa0X?@xi&pteA;|)$yTYGJv8-e5K)SQQ3Y9Y@52C%YC>7)&-dx?T}BeJ)M$*XJ@+)i+I>( z#PeZraF5$HdF0Q=v3nY7s2?jqSrZU=Q9o32cINIFXSiA+>4Ue0T8AhF2aKs&`)rDV z;4Cn2_xK7rauNG+>Ju5N>_aw<3`ro32-=S`)fuMdr{?9Y1lWAXtDJy-X|nY%f3_r* z8)Z80Eg1~!4cKaXG)}6SHpHWt8u?Kt=i_hMcr_3Gf>l%wN29(jnRrlrMlgzf%!+OX*tJcy*JgGYhtOYQIP zLsaqh?ORxc5d25qNX^Rd-pM{)tb5$+_$q23cV$+MJ=#o{B4KgDx*_YiQ7Vmww)P

wkg8TvV|stc;v}ER2mXn(IekMB%!*d47oNcvLspbn9%1he}R2RY7|8kpy{P z2%5Lo!_Eo&??+X2b&R5JD_jnuxXilWhNCC!b7exVLFgVR{TP}i(0}~=J>726zNusN z2p+kuy*(LLq)7{2Y%*>9ius_fLF9U4Q`772Wi=l;9rur5h6mZX9bK<0mWR!z#SF!FhpzuDrARDu;W$Hwo?ca&D&0Z8?7)7<(;X<8 zwl+5>XQEA=D6&tCkF(<23(+qEl-kZtDPE${gom}LO(jhsxC@@^hOf)U&Cnx9y!R<{ z#t=w@j0?O;X_uX>MM>0{synQDNhW;5T_3l+NS)?vDP;u3m=C}o*JwXM2|kj>aDD`d zLQuGkAEDwAUW=S6$%h=-qQH%WvA@BOlXxCdRVx|v5r{N>B%`~ksBW&3HWR3`~|q^nAe*&*u{kn$qU`a^RbYMXSj?8ff>eTkh&52+NNc3c zR{kb#Rj9f8&cFH-h_t!mZcm+*EQw{)k&!#RTUA_*AW;s8O2$6c4S{26oSVu12=kL~ zjJkH}PY6T)2Fs|Gu(dJbN)=?en00)Ib`O0cSPOcJ?&vKV%1^YoC zftpWeKzO*hlXFh9%c9@mp{vxb*r+yKuxS~_yz*7nHCsHVL+lxid6YK^H6tu_?tbAw z-%Md?BkJfL?q*XX%T3UH^lJ0G7*nP7?l!(Q$@HM?Q)ZS}8~GZeCy+=?o!C0bt@^&q zvZO3^bhTEFn{LDMGqSjMGh0m{!4@6wm~`vqaNkmJh1RHbLvpj@<0-y)&I;obrN3lF@^*KFEJR&K3jRq zgQWBB{I$<=ZxVx46aivCF?mHw@yb&o|8%XGxyHapzhlI|B$^u6tyzn1qs@dTavC?{ zR46n4_O^|?z3H}g2nwH;KbPXot&M&ZfKj(VCK!kgn$}+LOJBsR* z;6n&s0H0@iS-FNr=H$7rHKwTZdnl8UIyBVlWi>n;bo<^~LVK@3r)>%S*%<(1s_c+D z;=A;K-d6K_(&-_AE0xXDeAzzI#2UC6IbD(Cu9q>VR2;2RASICIeQN}n9mrFusL&#K zGIfIIZ&$D@%0J|(c-w}9kZ+2jBT&2Pk%cvCcfV{t`x1C3rkIRqDvGo~KZbdce1%EQ zH6?(LN~uAD$za9nCdI5reG7<}R>i0@NNl1a9BC`eQVH)5m72TmQPaZ<0%#tw zC>nxk*(?GZmliW8@18K}V2My%9;$xCK^n31U2FF~214Xp_XUo>|IjOF<<5Qpn5f=C4jp_X2A}LM_%!?oiry{VFyoKGTA(XBCEP>C_ ze`BU*-b&lSZ@7Wvh4C>+R%EgymzO{Tk!3349NpV6*;Qb?OkOWPUVpEk@btf1`&g#)T)#x_q@MH-kQK!Zzz+rz_%!L1*=4TO9W?fp*M4oth9&_&=MJbNDQEy~qXv?kB(qgE-U&7SeCpHXHvZ$c8L1O7v5n*xz*wrr}z}!7Bh1v$o zMz7$eMyk>KxmBCDg;&E0SynAXPuVGN-kh~&{wF#y7_{5(6rN#MaglTOblU zq4Q2?T3r-}AQeF(Ph+C{HcZykh^j!;T^R;VxDQ6~XOKio5;NlzYuI8-aPc9L8%&xl zCedPaQIsls=%GOe^Dm_H*i~7(4x#n4IgB?kA@5L*xv*I^+)`J}K4o(wlqpU)+~c%$ zIiscJOx=U!0aK_Xu^-VdMUK+@&nn|w^IRHA%w1PogrTBc-iq(Xc=-{BlFaG(9nJ+| z$hM-RWtl<|F(#9vMFMPyxy(4b4hs_Xrl#YI9i5XuSDxl8oD>MeP*`$>VmFUK8Jb<Rk=9Lxdta?`EL+EdLt1qmyUzig%@iIOxH9&8w`)26H*N z_Y3^`kh&D=O#hc7{a!Z&U5}zvis|Lq51c8f=X!9jiYV-o3_iTS^)nP?70` zI+pXzCso~#c=@~8B+H&dnuLXg6?@o39P~SB5Jn?4dTpt1h~U|vhCmbqofEzwZi~0} zh?QwcGx!`8#~=CLiz(dKrC<0C(zgJQzc!xhK)ejC>brG z%U7~=y_VSW@L~a1J?a}GNwE?CL0xu&?`Dj=N9Q_|X2VZYk?OXxXbJ-HEe+cIXi zI9ThP!xQ;>Ur2C&r<>Su_0u8{kyvU~sU@R}ZHd=A`-Rd@e>inh+%S`O*dk->o$0WO zLC2P>#G=A6Rc?M*-<{91nq_hf&uLd7Q1wO^y@Y{K(ZAj3%TOL03yJUR_Kt zOV3XVpP${R?mzF(2??4zWANlTmDWYGacMBYG&Qw)DixEu4!w(13q$zY=$B1n z)KvXq;In5zhQqMBXEE_C+rU?rz#vunMw$s1H=<}&tL2ro#Etr5U(5!{pk(iJO8wEz z|GYXL4xppsq7N^M9rUT}823v34&i>1NUp>y?Lo)Eg=_XZi`C9DHGW&u^49|DebPuN z0sWoytU2SQhXfPafsv_c=H|GwBQ9rLO2ErFL28>wj8p@*xFO@UV51ik0jk_Ca(7F( z!g2eU-WwJ!|I|LBr8L|ESO-U!rzGP8R>uZ(h1-HL|M=$B_8!x2!nyQHdk4mmT`ttZ zN}&H}?xTSF?AZu?zTVR&SuCLEsBC4lRl?L7Y1d7W|c(_juFB6nUcm4B*NS zoBJK06V95qX$Ds}H)gR`{GyN?!fQm&dWhxoa}dpKdO*s;gT!{hg#`edqnA{O0|iEH zg3}DtM1Y)Z@#az`mnY<}4J%nohUS5b;H(Q3h0mssG#^*4^eCW7{cjn>; z=(TBY%_seL9@xEN!j(#2Wr~EBUy}zi8(~2;O-E$*N%)iV;f{w8W8HyZH@tr382)2! zuV$EndwDA|ovRJV9ubIB0ZKZ?+G(3)t7eQn{f^z1S9S~*<)S5mB9ssDHXY;M$CS@k z@AG~U8~j_DZP8+eOHrh9nU8ZCY!x{)=C1HzKMstZU>6kyJ{tM$qpg*5c+GbS;SWK& zKS3kX^X5@9tD=zpd_vKN&bx361_~2r^GZoLn z>{R|E{pk1CwVYL{D%D9j>T$!5JPQEfvnRPvHqnsm)O6N{Dy3a&y2DE5QmI=Yv{{*% zspM=O#O@6br=a>9*U}Y5PY_q!9Ixj$Pa?DdoEo0fjJMtE5fu(a!1(xukp zTA@dxZS&B1%Ujj|zKA>g=km9wx|$$+cpkk3mu#x3#!ippFeNHc2qN$o936@2nQ0Q; zQrTm_r&m@UK76`P16z? z^7nWM(qL%-Z*%M*yRF+WWEiRWzah6XWL3&W}@T%G6J(h{RsaF$Q(-=l+nq58ZzoGP=kI1{A|jljF_a34l45$MdpP z9HC#6aU-`jf{Tjm^V^&cpzc7K1Yja16fmG1F_A5}1K?7zR}PZ-$1?v;WXRby7aHv} z0MMx>whG>y9%urivUyg|Q-6!zbPAr&tz(|6Qe|K@v?W5flQz$MDY|_hOsYdOgkV0z~pKUgYbtdvDM;ZGVZ^MMbhC zn22|3zP_+J-8#0Y&VSJh*bc`^@8Nxb$w|JmTB7vgUW&h#p{Dz-EZ1!b_Fs4HV=xG$ zI{cN1SWTqk8aWazZk1*lyP>uh^){tOPmO1cA+h|iK!f7FyZX1SSNh)Zt&k&_-sVu@ zVGK$R$#D$q`F`H-E+i;yZEK@d^?-rF%Sf^yoLtBB2?lfrg!{-?q`rD<1m>=9yCLaqofN( zW;6t7vzOfY2O~fGcNA@n{0+nX_P>RIxlg4+!k46p`*+!Baj|SG)l;kQ{r*%V^5!r( z@MDBz6_K#B(@zFamIAMCEiXPqA_nxOmJoTm#U* znNX*^G|)5i`bI|pu?Wx;(=(QE(Zk+B&xSmBW|k48HMXyR70U$#`~fA>>mYL@qjQkz zR`^`2Gyx^Z@cDDmm_9df?b$MyKia>I_cu)Qb}))`21Pq5hUpDbetSdBS{pR3IF*;& zmr00O-U1WuOn3#z68Sn`m{o~kHGWAYrnZD&i_T%^fxta8-Am$~p@fNvX#)c+%i-gi z1ACW;g8km7=7h%K2Jx=-v!(&3yRq?mK_D3(8yzhUdeUNc^WMX(pJ@fxs&oBML7EI~ z(E!l1Pv1iMXt^sTSy*f!80;3`t5nj}CGF6Cw&)6A-Oc5--P;hU4!9w-Z+CrojOO&~ zNXlj?Z*gJw$9^hWQz9c;S@nh04G-CjYPOF3zOJb=57#Jpt2_Ty@VN0gJ|s8_^S*OX z8G68gNkZ&riG#b|_;;i4Ib*HM+oBMe{5ZALaI`780tctT(Dl%QEPH`XLPWAlOUbg! z_5S|kq&C@X?gAD9`0OY{djz&a{W zVt^J2qbYyOJ93c2%m-VA%+>RQMFkQ6*V(PDtuvxmYO|Uf|I~aAxwC|hXX<*+V{cnG zk@npU|31!w<;PlS{Z3Wv*&z*= z24~!}$XO7)RzWat9%H)Fdp1E@1acNqrRkzHXi|`oQz9%u?|}kwprN<}$N9%XVffHBRTw9&&Dv^ z+>t;appTf}Cb}P&1y_7>aD#Ql!)IftgVE@dVbvPnZTaMl#ZpRxH;B#&w*iiJIo!K+ znRac&TIv#d2AjYBkU#M!$NUQW8^P7E=L#sA4Ie-L^1mP(h(qLYff1KcF?)sc3aHT} zxXFj@N*HyYH7X{G$oGE(s*_mqCt@)>KcD^!jSe|=J*~VWc%HrQAL&2HL>IeS)XLa8 za+{lG78NCUU&E!`SBzIq%^5ett+s`s^1kxPBxkzDotLjK-{>JK(g~vzT)y)1(cU48 zqkoTJs*%MNqkWO)@%^;5SLgCiL+5K3IZ_(tVL7rNR7Ve{?pl&ySs&P1zL(2#YfA87 zOV3Py2J=g1CQAAM_D?Kwd+!yDQMlYI2cd6aUS1%$O#?wn2X{SJ$Vm@<>USY}(vZTB zckPS}f;vnIabkdK!X{>*`x2{t#}Y}nP+L+m@ck_HFml+KxbdNSt1Z)SFj#LML4^Xrn3_9yfONjgaWLgx1MqGgHkeDm*%w@?f znh#n5bK1G8(M7umrUxk}kx{Y2NK`mHl0Wm2Xpj%N%0PjyP~hltVX{?|ben9O+E0`ji~uP7APNp&^-u(E9&k zt|svZm36*Ivu3Vn0jDu*y@@IaszFPuH1!`05^(yFitJOA9R`sL(E6ibSH zc!}(S25;b7{i=^)Z+BW=7QZ*^#%S5Z)@m~R`EiJr%?i6t0o~($VnPgLS6G#&{8HB5 zKs%$+F~7;r<#uvz1oXf+H*H-b-n_ZDWDi2?XoaIi%^Vq4vj{P56<~>wX!r=Wr%n8m zJ?;+p*460?0pY>1cl_A7%&$&=4?}YGrU^Cw(oi8NHJ-#{CkX^ax(7pCXsbs_n_F9@VKfG6 zdNQcRPr$+Qy>kkIpxyxFE^6E`G-N?t_Ya&esuLGHVEXfcSON5`DDxT&bwW>gCJ-?= zs4U=eTMQ85q9Cg;faVp9@AW_3)m>HC-6|<9tyDBaLX>qe1wB3=_|r}H6P-EeM^gW% z1vr~GZEC_-`O!*G(ETeeXj*CCaxCs=X{5a?NfDduL%D_c``!r>tp7f$Q`)^mTZ5_GXk z4K_IRYOn<1m63$*Av9|nMPt>d>tUK!QI6P08&NMoNw^(PcP3Htc$jfGq)ke2iBY*w z+uZE!fZO?I2e$GAT2XDd12BgIq)YZmwo$$m>#zVK>0Di{pTx_4J|@U~bE7eV=}vm1 zUX%0eMQ#0Ak#{{|WxUCH(fFWrsZg2dz*A;MbOhpCy$o8Up_#wr0Kzg<{DxS83K1(| za<9edVOHDIuB5N$_X-nUxDhnV4lAV^(CIP_7Bk{lc20!N{(K>44 z5fJ{W&#*xXFC!yU7|k05p9Tx$0-Pu&2{v%_1J3nz-FMJ{9D%cLwbj*JSvflUP7p}K zP=j#L5ZIvJf$(P^G2_@TIWcL1rk$eB$bY@(DFNxB7 z!JMMW{QH?AcX)YaU@rTf3hcBplZ7%NpyEZL=yQahEEIsB4-2vGxAx=LN#KG*Dd*_3 z&lbOc$&h?;0qF&5OcQ+f0N_(rh2=w{vAKha;2j)x0Kl%vunHT69Bv^rdqHz5fP|gV z0f2|7hVfgl&&Z(AuJAp!A>M>x;Ju(z%L!-$u~-OryrkmrtrvklsgYrK=`RNR=O43~ zrPXUtO1Q4Hr$lqY41sl6KY=g`x7kqEJA_G&WP2i4FCG4pzm3F1BTZ+l@@ zy-(Urjii?4L-5$&O_*U)=mr)fU}OzmD2`eE1ynUSE!aN&eeUD)2sJWdp~xt;l!?AE zv;Q`f3;}!)z~H~jtnP}L$_f$1vx8G~1P}_Y#Gx1H2A|EHZiy_{&L2&zYH$CI64oeb zn`XFoY-KeCBQ8rVkN144Rd?01u+7w~+%TX~aH`+m4W39)lv`(_Oa{h-0hCQXvB<`e;D(n zdLpCDn?u;7?20#Yh~8`m06K&D*i`wedu z4Fds|20x=N(CHk1`{0t>dv)k8Bo|&>Tk8r>9d$bl{s8i%2L=;5X14Tax%ybQtB>^T$1H$#dy<3=7rOCA@o0&( zIC=hV&%*F^m;h9^j8dy+D=h4&*uA+W6D%nl2VHH}r7;p_)IK$v6ehb4WTRM!K-@jp;N`@vrVD6D%|%Gmy8B}%#Os=3XNnp@u?`n#IQo1Kl?7ok|Y`@5BJ9| zo3;IysvuT$IPH_@4dzU%wgiukxcGQAO?O^;g60F9$YeuqLd%~6jXv4s1^%O| z-hWr_&a|KUU{XMf65*t3la}?Qf)Mpf#Dg&5PSOX9kQ8fe1y8SWOqUr`e1K2*m=xUm zW#=TtRltUN1Hz6Bk#->bF7{)|{RX=bZ-mtoHdBk!tX0r|u5evRF}#{!sjq$%)k-Sw zn)*=M`)yEP96y_$T9gY@yV3zVLh(O?itMtxV@OiT;Z}}&*pa02bel!_{c7#&sjdGe z?;CMo<|s8-q+($?85&q*O)InXpfgQ4({Fl2;AAzoikZ?^yrF0`k7mZ$-pRguEA2N`*JH<&?*{0+!5DoE=0!5@|+BpHa)rACmH zR8+wrnzx+-ebLTD?hwNt*lU`wlfj;M4{Xor*XgR)6Nk|y>=ICQ- z^qC&nh7s2t;p!jv>#&;XUJ@*O%=!QG_9pr6@K{MGv0^2j#lWnLk?x!)bp2L@q7qhe z(^D}#I+LxdiMcp+=8vrS45s*Rd~D1#XOEK3r|nvx$SiMTqoShnLy)TCKLNKDu{6{^ z2I6>MC`dq3_U}_&u#!?Otgs)ar4pc(f>zgC7-|cXuSX{)*zWTWp0a6*g5F8yVl(Z@ zn~rUWD%M(EX}<@SbSm51Z$lBL4#xe#8uI}yzYFaN%Z}eQRJ#^>LqeWCJA(;kqtX5p z(2;dTHiWIB$hQ!E{DGqj=r)fG41}ELIQ=Oo5vbkHG=rW9=c3*3#GWk@yp-q&_!_(v zl$8144l8*NBQN9s2i#R5Jh5{UbULkKyKLPM2&pA%XFy45VcbD7QM52`Mb>u^x~(=j zOo2Qbb%@?dowyDM*)p`9KsEP5{a8m^n?1ADW{7CNQ@HR`-Q7WrMXk~d^lr&nNQzJ@ zH?X5DKoq8?hL?RO9AcZ!S}o52h-RGJAtcq4va6}wgaMdhFl7QobAkb@X8K@8eDt}s zT0Uvf70Na&%9=IRC-LDmYTfd1U1v zB_IS4AmYSu9qa+U1cIvvS4dhPhPl95s`~;Z?p;iIz?QQiRyd{N`e|`-@geT!=kbvd z8c{d8vo#{XYJoHkvi{fd-yxpVxT^)}=^1c_V$-gUx_*?&&6br&5fCLi*DO<}5S>j9{^Yyk+nDF&v-z<=SlL_?I)q?loC_$*axJ23vCW3a?Mg zO`GgfxEjrBb!4uDf-o9-v<=BrEi6!OOBLzFTf)w8`nnW?6K8Hq!fx~>?96e)y&%`G zSLnAq)w4fl}jf!-4NJ}>i4N6IufV8A^ zBQm6d(kTLxl7a{?EvSTo;=b7XFKj>fMGriD=9&AxVy$!4&PH$ZGLO!xR9l9uKGuA_ znL=sk`Ltb1L*=OC5ok#H=Q3*SWWq$n=IjDOmFx2cjmJi&T_4W|kV78HW>Lb1>^*lwLdW>D!;-J{+) z68#Yr!%%fZ(AGqucAJTIc@C!Cq?{fGg)1@3Tkw=@gS<>rersDJV%X9VJ_-YS2T_wn zhaVdwBE6|wkIDHl5h_|*ojVnI+mEY1I!-CCE-a{yk%;9bxgiG~{hplj&2$zUy8Hk+ zIkacPtuCmYHPA`IL%%=i0b?62L-wUMk4n-}i18b}3}zin2}@o^+ygHyXvwxu)W*gl zZa;&4<^#og8tF;FP!m+VxjD;?%!ct>FW-0C(_1LhK+p|`Pqc)q1i^G{}8)az2 zLPCu*!`I=ZJjMwEXH=slXlC=(7@BWzk(g?f#KengK>IqWi{_IQUO1$LJF~2p z?BZ$mh=Hg|RvGRP90bq`zxcZgYNI0C3jOOpKVcB%K=)K=e=qP9*t(6hwj#&5KT-wZ z*5@RJRuvx8!b`|E?9}IU&YisPv_hF>y)#fzR;H4sQ2PiJ&z4}qtYHGGwyfAP>I^co zhC_izu3W9-`e3faao-;%8^!X2BH|ZIOOZFFY#)^V=+4+mOu%C_}q(u=TyM+C-Cvk!^tHc{Ff!$`jl*G zVHz=qyZQ78{IDgPk=8qlt~KDnx7wuSiWtCtR}LCXzm>W=>u79a-J`qOetc@i#~7ue zO=Gu%?xtX^rzDCajYXgdrg&ctB0m7(cu&;Qg+xWPU@78a3BwcSf7gaq3}S$`ts#F z!FOnG!8~obinbZhTvf(Mk^-=$5r;M-x4@` z@0E%|vrPDVF54c0z=v@!$|kutCA2!SIlU6=EW1LXA_9N#c)nx?qcLr)KRGXH*SmKG zOjRX$eX*p|CN{$D_}dzgNHS~Rh>J1XQ2It~`)|>r_SYQ^hqt=^ASosi)g&Lws43ri z5yZ!)Y4I3{i6?Ngz7VjE==(w=XoEdATVBIwwNVH0V01ls85#W*uRp4nl8CGzRJm$% zCp&|(9M6A-_x@2-@BG)PltreCyw<_8|9q1RXZB^ghbje%D}(S|;K((~Iz?gx!YS2j z7oR!ED`if=s_B(g6*19BQduQ3+*(DwD>^W?SRaQ}nMR)IF=3^I&KbvM7az~Nz3IuH zQ9ODW%nLT?n9oOpWfgxDRvLbqXRSyNqxkvwUI^K%Ez=UZVduzV5K(ROmg{A3R4sWy zg}BIV3c9qu-85NKuPFZ5?ze}QZdzKl}jjTFmO^~ z)TwAc3%-ZivQowS{(y7PF?w}+@)msk;CBRIXqxiDukT;sM{$&TB*Q18Pw?ViP^;L} z-w^bDEJ!QiS;Q4WEI?HIx430H94-*l&tHEqot%!W``gtbBbJ6o>fip+9nkwO_&d9P zfH#Z7i9091gT3-T&$Dtx9vQ&H%S=x%{Y!1DVe!Z< zj2`FR$hLa+W+UiKAj<>ILb50ZBL|qKMMp|)`Tt|9 zlIfF$3xQ*@xvh;mLCz>a65!^XcWUPk;NAv9E-3sb-_`nUWsS{!YqZ?#VnR)Zc`p%D z*IfpG+O3trNYAj!SS5IWFqg(Sd==5iGcEoGHTy)DvO1;wB5aaAwKM7p$R`E?-6jCy zrJut_7hvZ#s3a*>;L^E1<5D>P8%oz%nzjO4)%f<5{QSG% z2?)d=1>NISDi`w&r2v!(B#q5{`c&)RI92$KR5`#!6KQ%JcGV81-wD*S)h}w&x10Kp zO7Z*f`^iat{Xsq^6CSD?`pJqh?X z_y_LorFN0YnHdE|EQ|X*ew9;uE`hL#r739Mo(871l-=Cfz$o5WR6#)g4u>F z5}RvO*;ZV*(G0@BsJH;KH1QtQ%)Ig;N0^tIP;?P0CooaaZtXU;-e0j~u+?BwAP^R8 z$99Oo3+zVWbPy;#d!c8!MT)Icl}q0ZI#olJYO|2l{M$1I9M@Y1kjwKHGMn1?;!jgX z5pi~d!~5K7jtGHuvj)aw31RinV>i$ZA%}cEju-p>`IejeydYCE;v*~e+cX{ zqTo_`trru`O9fYvWQ+l5q@g6EaBM$On$_QiMO-%(-Vg(c%}_<4?P ziHSs+&tpQ%xo_*UWjsvH*>pBGx^{=EZqQ|lsgkfJ3+$rcqnk_(@blB1-T+O4^Dujy zUE5W>wlD1d(8gfxY^HT%)|)qw9Yxg~TVo|MND4X7H(k}Y9It#k@MdOzr$)p#k=x?1 zJS$;fyvJ+*p_gpH`|6Nl7+9y?XK(JQE9~}+tq3V2r+;AP{71!!{hAM!uO@J(slyW| zFfiNOnTv2=TjewKW^YM2;ms$t*4Kpam6zxubNgjFIIbDLEXmcr)8Z8jXFU&RwS??| zoRdnpppEo>o&l%mVAx*DyO_*6LqQJBft48qxc1=PXb76Cx2PppOS8{uwcg9sl_=11 zS$pPS0HtY~!a~v}*-GU(=p`!XLQG8;VX#O~PY(DMtqlnjbnI8d`pTk3C+(yMxWwCbyY+)IjAOpH zosGoucylT4F7A}PYr_ne5xG&z$I(IdTx#McEiG+SoT@YO>42OIv%dPxfVhxfv zD6&%pU$+=KoyDkzezaI4c;_DADT7^takp&}!K<45wo>(P8RGn>V zEFuhJtdn4ljnrg0;>DCefh>N+8{-WmO@+!}G1)gz@pv)B?$coXnNG`64k(JH8%#@{ zE?(*JGN=5`oBNLvGux$w$XBAXzHWba_hxeRi$;3aO+n}EqKTO4of+QVfw_OvF|AEh zLk7~2g>(tE-FU9((=^JLmU3S_C9YO^;2EAGmuf~sOsn6di*miacs`OH@o;l5Y{+q;AZ#GlF!XDr z$yhTCku<*LoDg543N>Zk43aZufriu$g%KX~EamWT~03>3~Zgz;hMK zJBw;i`_7-AakV*%G!&DYl3Uy2Z&xYkmhlIl8+@9Z)9YJjdv4zA-#bpUvU7G({r*O* zgPMocfkxn6CaL?Z#7s0UtAg6f&os5P#H!IQEUM%!S$h8Z#4)(jF1O^I7=FR@&F|KI zI5`a^jIDiOQ3b1*;>Tn%rTKcbirQ=li){NV`F1jmB)W5)KLH;R79NoyrYI?PS~oNK zGv>Pbz)+^`J+fuF0QuJ#c9JB*qvzGZB-TAipLMe@*-GdfD70j=`2_C~2tBy_z>0NA zL20#u2z%OtVP{>Xx&0FEri{$Y z$$}a-hpH#(2ZaYw74lV9MMBf77C|{Mw5z?WjM(3>zGB=~>JM z132DFLmEWQ<%g&a28S9ms@adq<4;OG#dRg0R-?jIe>$yzBm96IsgC#!r^(15l-_=$ z*psmdx$O)jcw>9GfQzVlF?>1!{gTFvm0C4XxoAQY6}PjOyYN1BlE#=*ouDwUw>3l__lB4T>sWdSlVCA03jQtT8jWzRPXG!Ginrva4E`D>IOclO$pDq4NIMMNo(ur>c7jjn(z{iuHR!G^J-Co_TqD8C8qfQ!4M;Z(P2EF*4-cj zhbXPDYGlIhVH-vV2qJZ{ZkSPq-HVc*HQ@$rVeTYlB97@P2pW?IP!&bXYfto)Gbs zQoT1W+U4?jv`yNJZ!>Jd>>rl(y*I@1`nQud@oVAKvfEiyILsC<(-PESOD-d=OHwW_ zDjFWznbS}Jq0egP7SCbRe7Mr_+~PN{gB}U}maK;wrkF+|ou$BFO}FoP^K^Z)yHgdm zndc+|H=GAd(B$t{s*Q`KqS|??J&Ob7z*WxOKKA3zo~*+tpI%BPy&oQKcI^c$zZV=& zpv5x~V?o>22o6~X2$!MqWhJ116??<&!u#h0u zP6AEzh2A}PadlmYF1cnP?xK-x(-sjCu{^22yBiYPmFT78IeLfPwtu-;(K}Vr$hj;) z=>4uh;OM!vi@t3jA(Q%hbIe@^DB%9X)g=k8+URPNSk#ynC1VectNGPg?&w$ANiyd0z$IEx3uD^0C(bn^JuQ z&C0iTXActvM^S?1k@@)y=USiJ{kZAhD}0&;1M^ISp1HY3;%&;~2c@`|y}i94-HH?I zrqSmvo)ax5e1NoNBm;wtuOwgc*Li{ruICI3MbZ?YD)`EZl)F0alT3_+_H2t=5?NJC zgm`M-x^l)#$=_p|fUtJ?v-_v>w#RJ_+_wh)_}Q6M@RO$dw=uEh>^9N|-E5VP<+=$= zl?Ibg^jXbRCS0n$BI2YDvXI#H2$n>4+;vo%w%TKZj1*?w?c8{qI&jg zt*{spupO%P1HK_2F!#TW#v_>*mHRUmA%6!G-srTKY$G%S!G?z=T|7&0P= ze_0!eTx_uJ1Le%s3J*r;79c&?_)_+aP2l?+0y3bWAqSHy8Xh}?+v3g{1)vQ zi?W>{l?1`U-+}9v3i#HE3!97ELD>d>p8zId*y2h%Bvp2e;&%2MjjS3-v9DQQUk5rj zjL7}KO>W?uE9rCFHO}sFY(<@JE(nidiFkX51HAsM7tH8&fsViHPx--_2N}07&DxTw z=>(FK9VBglhyuxB2_=7afE>8Ada2~U=qA=am6@}hetLSE&3O!ZNI4aH63miO6lK&W zW8poJB9(Ix3_gO%$;92CL@N`w!?y`)>fFQqcpAPw2GroUu78*C?*O+PwzUBuP6BYD z(3><)+5Jc03JwbDKI|hV4vnHryqn<7bGZEB%NFr(tzW0FgO?>FWl3c(j11^Vwxqu} z=`m5%5n`mvsC9p_gW0u%YgkhS{{KD!_j3K+<(^6$Uwq+pjY>? z*Gr&%Cn;8-&w-xl4Z`YK@Mp*^FQd}LKqQoW6jkFOxgo95E-FTj!%xw>GhI1dwt0nt zgzWBbySp}h?-w#6VNqKavQJ?ooEDb zM0@Q+-UHqC4uoF=mIH)9cd`PEO^gGqcskHsgnL?S>r3g{(yA!uM)>n7iHB*5ZvL*$ z&S=wR0MeD4bW0Q!aV668wLkHTobvpr=2w@!JEj~E}Uljk8i2PYH@7CWOcAMX}Wl$$fj(5sUf?OKKar5%xSnKmCvaI zp0KT(uGwkgi!TfP|sm9NL1=ThpiY9W=LY7rj zJbb*FxzBW3%*DgQD*49^yOC8D)(W3KJMi!-sgKM#birHvGIj%)s$i`a5vu6uFgsDd zA}0ARY0SGfACai0Z8v=7L&{kYAmv(l1U6S;Cxou2$y{*_%ZmhJsB1EEpYC)8c;Jbzf|T-unTQQH~dcaE~>axs6>-cT0WP#l>*nGGauTQf|)E zHVMbV#*g(zbp|&vc3Yf5%}42$qJC6u(<_=61WXJ&&+wxoWikb5)XLqK7ShtDAunU+9yZfqpdpEYONelp4 zWt+Ub`y;;wnWn$3dY3}e(14w|i!Z%|C-a`^2-E=S)#S~F()zJ|vPKCy;adEz&!+9g zYiHFWlY*shu$cqF4CGj}L@z9icy8PLuN&RlXQHlphXlKws+{0!j40`cm-2qmQ^h3m zJ-qk@Y@32J(u;H+)lyP?8)HPDP*@0XZqNubB;mw+Iz<^8WIl;p&?|4)eMl@rW1GBH zL|o*1{NE4TC+pm~nBhvYPS+L5T;CG0NIa6BcF;~O0}T(neX%+g%x8;+gzNV<26Q+G;L*4jxQd0`t9Y(&rjQr5^&2MdS^=pTk)OBk!r{L| zjl_M|(1GT|Ic1db-U*LcY0exnsyDAbxQbFWn7tMY9@T;%g14BPfHA1-|_75ZPB^^Ce4GgMjuAyYo3ya1&ZGKW5zb)_SvhHFp z!oI#t!oR0{Cai_Eu5Gn6{VIE(yZgVXy^r;{EZ34_{o|ImOE+h=m(+7H4%!wq<;jA}sOBiyX@4+_ zQ+xuoC~^XDj=V8y-r-cPczSV^!HU@3t90t0Gnm|}Ax`kGqLa4`gxTl533$X z*O+^0Dl6#lA^Yre&@-whfbm4bwV(Oa2W}#e1=G6b!`AxQ-5>a7S>CW1Dhxg6BsRuD zKICXhludUjv3~;baqXNIh9bg>t5x><5^mJl=lCRkst%J4jV#g0>^H z)CD?lRihdKCF%&~6tOpN-t1q3lP{k6xC+}MJse%;`rinaOO?6B;eg@To6@Rm5336v<+jv zd~#5*>OrwUH8jB(N(o9IsYi|t=#!QX+bwxQ2x#ln=`7YtErA|w2qf2?F zY4vW6$7Xb_TGd?xBr~~9bwYDh6{Q--0#Ys%OErttKa_&~y9CqfbnKh6amIfM6buC4 ze&fgY3wH{~i>~GeP5gc_N|u75yjBwT+)H7Ls!}g1QbL({d?h%d>el4VPRv=&KMLJ6 z!V+5&q#q*g{WJc%u-&@b*mx#aY#1&xd{iESBpYo%Kl!w^wf;onq7teXJ26?F6aXPY zMkAzuf+`V|pkPKUSNx%c5%trLg}O?G)f?uiP9p7acR(WXhUu-m{CqbEo7&r}1z{Bk zBZH0@28V`VYzncVFi3(ZD)UD(|LHt@`0dZweb9japF&AONT?B{y^u=OJhtk4rE3Rt z61>(s6(k6meyH?6cLclw2Gzz$`nbI7(kW1L#NFmS0W#FA%$B1eCL#ha3y^X^DG9%7 zNQbK6vfI8MT5eU=f@t5$n7fOc&o*z4JX=`25>j$L$HdE|}M`G578k?B#SZLf_ z>xqm$#H}1Oms#O6e=Q(&K5k@b_^>m0L2Kpr{vmsC&{~>bwRJkN~OQ8&)#^?H2# z?8*+_O*m~o>W@~L1tMwlZ`~&2nGda8Z;QOsNk;POS`1fYxX=RmI7^mBsG!L4W9y%X@FY?aa;CXZX zpRyO}J(PzlzrQc$hU_gB7&xPx^|!|&e9tm>P3sFdjfRBoR_}7WzUakI^0|0`sd7d| za4383ofmhRoqbq>zxj4>>h8kS^8H&CDZ-IxM4yn`#g`d=@wQ`dpuha}=%%1!(4SM; z!dF~0=6m8m^v-HMKE2%#OnT7Yui$XaRhRGVJUXWAK$E$!on^hhe|d)T?%^ILlVqU7 zKOL7U-UaHf=(~rQhg_W(FFWykaxb_v4f9j(9$292^-+7Vda{|xHExkh$;)>#LUU`b z>l#@$zm9M7q9j%nh_ROuOg&4?3nQ5m_k-hk0}-zO#Ghaz^}YSkD*Gfha$(ga z)lwnc+7D|LREKxd$K)Pvrj;v)NAqCoGXI`=Szf;R_w0V~Q4yZk+IG(0zUnXRBdyNn z%$`0U6U*11{BAc=Y<|r-9kR)E_REm$#7jp@vcNogSnl;!)BbgX$)+7|Hgj4PNR0W8iY_jiIAW3k8#J^GY=>HwX*@OZw6Z)Z(taIq z{?-_pb##~p%)T_~a-4j7CqnJMp5`@ZF1$;qnSn}ig?lb4S8h%(3O)#`Loo{YdxIug)*ZPcpS~ zrv!{_%!M$8kNQpFvu|p#%e_#u%p3jEiJ61;w47Qo;`*Y)nu4W_=<~2bI*749`CB?< zX?jbSTiV8CS~X9wRf=ZW_(AJN?q_nPSFM$XkJo2Ms!?$?NrQ*tC;Rng=*y17d+4PL z{lA_?wuWUyM6WMYd&t?*=pXL5i&d1TiV-OB$&>hIHd47v5$Wf zQ%C($x(M)dw`7ee%@Va4a6GV6>|Sp6Rx~nt?n2!d9Pq;*U3DOF%|_O{#*CFbCz~Va z^!WR;iG6xCV(K)mXpI{Yj_-I@Lf9-*?Y(lFi@91debf&fjEL+X=l)=S9c1You-+<{ zW|ONDezk|N(j_4hnH%8sjZ&flWR(GZ~T0XqGmi|o! zxn6OXs4<|vYJ8Ijsk=x@gXyi{+?+=BR!{H^!}J>lWgT_|^K}ZdoQy}Cme#0`3y*qa zj)Wg3KaoE6{jcJ0)5d>c)^GFFPR`Cez$lcdM)lg#V5F()^8z-Sd102A41^nKXUq9{ zYY`36PjvnL)AA5ZSFxBrunmKJv#7bcSAb{; zqu#WHqQ5r9Vnt$$G%r?L#NeM_JG!HsJ~nkzh23dK_e<1sytnn5j_WdtnyDV~4 zlyl6D9P@QdeF(d`KgDBWW1T$eckdhJp3ob{L>grc)AC>M%kP;;njfA1P>;kY!uVi^ z#1#4Nv3eu-m*e`^qujaAm96gS?VJX&61gua6j?gjA)X<+^K9KRZz%6j+?KoHb!CZM zZ1`DNZfwnfz(Io<-@2A=>PQQJ#?q}K_EFBowvp=E;Z7kE7lvZ5s?#I+gLkH^oX4Nu zO?>)^jPDRe{K1!9WBGFyYdf7?_sH6NTy;gL*c(~GVQ16^McX9ayUAy6|A=JtVsvp* zcuA&K3e=qYS$Hd*tFR+|lDYhSL`Gf)QIf`uhdL2h$ukQ8rfa zo%3ws^hxx&Dze`jo}B-|;>m^fKbm+YC>?Ckv>|6jB@sD2mbfPEF_iJ2_&L65Tc3{= zbol31sJ1I1M-@&lQE^Tta}dydbab?_!Aey?eSI+7ITvQu5a9%c;P~|OROYzy9-2|6 z4#}57eP295z)+f_m;IRF3t{=+hdRv;_gIvg}<2!yJlmO{OpRmA@QA3B#_ literal 0 HcmV?d00001 diff --git a/Modules/CPack.cmake b/Modules/CPack.cmake new file mode 100644 index 0000000..571770e --- /dev/null +++ b/Modules/CPack.cmake @@ -0,0 +1,566 @@ +##section Variables common to all CPack generators +##end +##module +# - Build binary and source package installers. +# The CPack module generates binary and source installers in a variety +# of formats using the cpack program. Inclusion of the CPack module +# adds two new targets to the resulting makefiles, package and +# package_source, which build the binary and source installers, +# respectively. The generated binary installers contain everything +# installed via CMake's INSTALL command (and the deprecated +# INSTALL_FILES, INSTALL_PROGRAMS, and INSTALL_TARGETS commands). +# +# For certain kinds of binary installers (including the graphical +# installers on Mac OS X and Windows), CPack generates installers that +# allow users to select individual application components to +# install. See CPackComponent module for that. +# +# The CPACK_GENERATOR variable has different meanings in different +# contexts. In your CMakeLists.txt file, CPACK_GENERATOR is a +# *list of generators*: when run with no other arguments, CPack +# will iterate over that list and produce one package for each +# generator. In a CPACK_PROJECT_CONFIG_FILE, though, CPACK_GENERATOR +# is a *string naming a single generator*. If you need per-cpack- +# generator logic to control *other* cpack settings, then you need +# a CPACK_PROJECT_CONFIG_FILE. +# +# The CMake source tree itself contains a CPACK_PROJECT_CONFIG_FILE. +# See the top level file CMakeCPackOptions.cmake.in for an example. +# +# If set, the CPACK_PROJECT_CONFIG_FILE is included automatically +# on a per-generator basis. It only need contain overrides. +# +# Here's how it works: +# - cpack runs +# - it includes CPackConfig.cmake +# - it iterates over the generators listed in that file's +# CPACK_GENERATOR list variable (unless told to use just a +# specific one via -G on the command line...) +# +# - foreach generator, it then +# - sets CPACK_GENERATOR to the one currently being iterated +# - includes the CPACK_PROJECT_CONFIG_FILE +# - produces the package for that generator +# +# This is the key: For each generator listed in CPACK_GENERATOR +# in CPackConfig.cmake, cpack will *reset* CPACK_GENERATOR +# internally to *the one currently being used* and then include +# the CPACK_PROJECT_CONFIG_FILE. +# +# Before including this CPack module in your CMakeLists.txt file, +# there are a variety of variables that can be set to customize +# the resulting installers. The most commonly-used variables are: +##end +# +##variable +# 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"). +##end +# +##variable +# CPACK_PACKAGE_VERSION_MAJOR - Package major Version +##end +# +##variable +# CPACK_PACKAGE_VERSION_MINOR - Package minor Version +##end +# +##variable +# 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. +##end +# +##variable +# 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. +# 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. 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_PACKAGE_ICON - A branding image that will be displayed inside +# the installer (used by GUI installers). +##end +# +##variable +# 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_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_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_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_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__COMPONENT_INSTALL to 1/TRUE. +##end +# +##variable +# CPACK_GENERATOR - List of CPack generators to use. If not +# specified, CPack will create a set of options CPACK_BINARY_ (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 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). +##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. 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). +##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. +##end +# +##variable +# 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 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. +##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. +##end +# +##variable +# 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. +##end +# +##variable +# CPACK_TOPLEVEL_TAG - Directory for the installed files. +##end +# +##variable +# CPACK_INSTALL_COMMANDS - Extra commands to install components. +##end +# +##variable +# 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 +# + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Define this var in order to avoid (or warn) concerning multiple inclusion +IF(CPack_CMake_INCLUDED) + MESSAGE(WARNING "CPack.cmake has already been included!!") +ELSE(CPack_CMake_INCLUDED) + SET(CPack_CMake_INCLUDED 1) +ENDIF(CPack_CMake_INCLUDED) + +# Pick a configuration file +SET(cpack_input_file "${CMAKE_ROOT}/Templates/CPackConfig.cmake.in") +IF(EXISTS "${CMAKE_SOURCE_DIR}/CPackConfig.cmake.in") + SET(cpack_input_file "${CMAKE_SOURCE_DIR}/CPackConfig.cmake.in") +ENDIF(EXISTS "${CMAKE_SOURCE_DIR}/CPackConfig.cmake.in") +SET(cpack_source_input_file "${CMAKE_ROOT}/Templates/CPackConfig.cmake.in") +IF(EXISTS "${CMAKE_SOURCE_DIR}/CPackSourceConfig.cmake.in") + SET(cpack_source_input_file "${CMAKE_SOURCE_DIR}/CPackSourceConfig.cmake.in") +ENDIF(EXISTS "${CMAKE_SOURCE_DIR}/CPackSourceConfig.cmake.in") + +# Backward compatibility +# Include CPackComponent macros if it has not already been included before. +include(CPackComponent) + +# Macro for setting values if a user did not overwrite them +MACRO(cpack_set_if_not_set name value) + IF(NOT DEFINED "${name}") + SET(${name} "${value}") + ENDIF(NOT DEFINED "${name}") +ENDMACRO(cpack_set_if_not_set) + +# cpack_encode_variables - Macro to encode variables for the configuration file +# find any variable that starts with CPACK and create a variable +# _CPACK_OTHER_VARIABLES_ that contains SET commands for +# each cpack variable. _CPACK_OTHER_VARIABLES_ is then +# used as an @ replacment in configure_file for the CPackConfig. +MACRO(cpack_encode_variables) + SET(_CPACK_OTHER_VARIABLES_) + GET_CMAKE_PROPERTY(res VARIABLES) + FOREACH(var ${res}) + IF("xxx${var}" MATCHES "xxxCPACK") + SET(_CPACK_OTHER_VARIABLES_ + "${_CPACK_OTHER_VARIABLES_}\nSET(${var} \"${${var}}\")") + ENDIF("xxx${var}" MATCHES "xxxCPACK") + ENDFOREACH(var ${res}) +ENDMACRO(cpack_encode_variables) + +# Set the package name +cpack_set_if_not_set(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_NAME}") +cpack_set_if_not_set(CPACK_PACKAGE_VERSION_MAJOR "0") +cpack_set_if_not_set(CPACK_PACKAGE_VERSION_MINOR "1") +cpack_set_if_not_set(CPACK_PACKAGE_VERSION_PATCH "1") +cpack_set_if_not_set(CPACK_PACKAGE_VERSION + "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") +cpack_set_if_not_set(CPACK_PACKAGE_VENDOR "Humanity") +cpack_set_if_not_set(CPACK_PACKAGE_DESCRIPTION_SUMMARY + "${CMAKE_PROJECT_NAME} built using CMake") + +cpack_set_if_not_set(CPACK_PACKAGE_DESCRIPTION_FILE + "${CMAKE_ROOT}/Templates/CPack.GenericDescription.txt") +cpack_set_if_not_set(CPACK_RESOURCE_FILE_LICENSE + "${CMAKE_ROOT}/Templates/CPack.GenericLicense.txt") +cpack_set_if_not_set(CPACK_RESOURCE_FILE_README + "${CMAKE_ROOT}/Templates/CPack.GenericDescription.txt") +cpack_set_if_not_set(CPACK_RESOURCE_FILE_WELCOME + "${CMAKE_ROOT}/Templates/CPack.GenericWelcome.txt") + +cpack_set_if_not_set(CPACK_MODULE_PATH "${CMAKE_MODULE_PATH}") + +IF(CPACK_NSIS_MODIFY_PATH) + SET(CPACK_NSIS_MODIFY_PATH ON) +ENDIF(CPACK_NSIS_MODIFY_PATH) + +SET(__cpack_system_name ${CMAKE_SYSTEM_NAME}) +IF(${__cpack_system_name} MATCHES Windows) + IF(CMAKE_CL_64) + SET(__cpack_system_name win64) + ELSE(CMAKE_CL_64) + SET(__cpack_system_name win32) + ENDIF(CMAKE_CL_64) +ENDIF(${__cpack_system_name} MATCHES Windows) +cpack_set_if_not_set(CPACK_SYSTEM_NAME "${__cpack_system_name}") + +# Root dir: default value should be the string literal "$PROGRAMFILES" +# for backwards compatibility. Projects may set this value to anything. +set(__cpack_root_default "$PROGRAMFILES") +cpack_set_if_not_set(CPACK_NSIS_INSTALL_ROOT "${__cpack_root_default}") + +# -..--. +cpack_set_if_not_set(CPACK_PACKAGE_FILE_NAME + "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}") +cpack_set_if_not_set(CPACK_PACKAGE_INSTALL_DIRECTORY + "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}") +cpack_set_if_not_set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY + "${CPACK_PACKAGE_INSTALL_DIRECTORY}") +cpack_set_if_not_set(CPACK_PACKAGE_DEFAULT_LOCATION "/") +cpack_set_if_not_set(CPACK_PACKAGE_RELOCATABLE "true") + +# always force to exactly "true" or "false" for CPack.Info.plist.in: +if(CPACK_PACKAGE_RELOCATABLE) + set(CPACK_PACKAGE_RELOCATABLE "true") +else(CPACK_PACKAGE_RELOCATABLE) + set(CPACK_PACKAGE_RELOCATABLE "false") +endif(CPACK_PACKAGE_RELOCATABLE) + +macro(cpack_check_file_exists file description) + if(NOT EXISTS "${file}") + message(SEND_ERROR "CPack ${description} file: \"${file}\" could not be found.") + endif(NOT EXISTS "${file}") +endmacro(cpack_check_file_exists) + +cpack_check_file_exists("${CPACK_PACKAGE_DESCRIPTION_FILE}" "package description") +cpack_check_file_exists("${CPACK_RESOURCE_FILE_LICENSE}" "license resource") +cpack_check_file_exists("${CPACK_RESOURCE_FILE_README}" "readme resource") +cpack_check_file_exists("${CPACK_RESOURCE_FILE_WELCOME}" "welcome resource") + +macro(cpack_optional_append _list _cond _item) + if(${_cond}) + set(${_list} ${${_list}} ${_item}) + endif(${_cond}) +endmacro(cpack_optional_append _list _cond _item) + +##variable +# CPACK_BINARY_ - 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 +if(NOT CPACK_GENERATOR) + if(UNIX) + if(CYGWIN) + option(CPACK_BINARY_CYGWIN "Enable to build Cygwin binary packages" ON) + else(CYGWIN) + if(APPLE) + option(CPACK_BINARY_BUNDLE "Enable to build OSX bundles" OFF) + option(CPACK_BINARY_DRAGNDROP "Enable to build OSX Drag And Drop package" OFF) + option(CPACK_BINARY_PACKAGEMAKER "Enable to build PackageMaker packages" ON) + option(CPACK_BINARY_OSXX11 "Enable to build OSX X11 packages" OFF) + else(APPLE) + option(CPACK_BINARY_TZ "Enable to build TZ packages" ON) + endif(APPLE) + option(CPACK_BINARY_STGZ "Enable to build STGZ packages" ON) + option(CPACK_BINARY_TGZ "Enable to build TGZ packages" ON) + option(CPACK_BINARY_TBZ2 "Enable to build TBZ2 packages" OFF) + option(CPACK_BINARY_DEB "Enable to build Debian packages" OFF) + option(CPACK_BINARY_RPM "Enable to build RPM packages" OFF) + option(CPACK_BINARY_NSIS "Enable to build NSIS packages" OFF) + endif(CYGWIN) + else(UNIX) + option(CPACK_BINARY_NSIS "Enable to build NSIS packages" ON) + option(CPACK_BINARY_ZIP "Enable to build ZIP packages" OFF) + endif(UNIX) + + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_BUNDLE Bundle) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_DRAGNDROP DragNDrop) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_PACKAGEMAKER PackageMaker) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_OSXX11 OSXX11) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_CYGWIN CygwinBinary) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_DEB DEB) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_RPM RPM) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_NSIS NSIS) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_STGZ STGZ) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_TGZ TGZ) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_TBZ2 TBZ2) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_TZ TZ) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_ZIP ZIP) + +endif(NOT CPACK_GENERATOR) + +# Provide options to choose source generators +if(NOT CPACK_SOURCE_GENERATOR) + if(UNIX) + if(CYGWIN) + option(CPACK_SOURCE_CYGWIN "Enable to build Cygwin source packages" ON) + else(CYGWIN) + option(CPACK_SOURCE_TBZ2 "Enable to build TBZ2 source packages" ON) + option(CPACK_SOURCE_TGZ "Enable to build TGZ source packages" ON) + option(CPACK_SOURCE_TZ "Enable to build TZ source packages" ON) + option(CPACK_SOURCE_ZIP "Enable to build ZIP source packages" OFF) + endif(CYGWIN) + else(UNIX) + option(CPACK_SOURCE_ZIP "Enable to build ZIP source packages" ON) + endif(UNIX) + + cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_CYGWIN CygwinSource) + cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_TGZ TGZ) + cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_TBZ2 TBZ2) + cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_TZ TZ) + cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_ZIP ZIP) +endif(NOT CPACK_SOURCE_GENERATOR) + +# mark the above options as advanced +mark_as_advanced(CPACK_BINARY_CYGWIN CPACK_BINARY_PACKAGEMAKER CPACK_BINARY_OSXX11 + CPACK_BINARY_STGZ CPACK_BINARY_TGZ CPACK_BINARY_TBZ2 + CPACK_BINARY_DEB CPACK_BINARY_RPM CPACK_BINARY_TZ + CPACK_BINARY_NSIS CPACK_BINARY_ZIP CPACK_BINARY_BUNDLE + CPACK_SOURCE_CYGWIN CPACK_SOURCE_TBZ2 CPACK_SOURCE_TGZ + CPACK_SOURCE_TZ CPACK_SOURCE_ZIP CPACK_BINARY_DRAGNDROP) + +# Set some other variables +cpack_set_if_not_set(CPACK_INSTALL_CMAKE_PROJECTS + "${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME};ALL;/") +cpack_set_if_not_set(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") +cpack_set_if_not_set(CPACK_TOPLEVEL_TAG "${CPACK_SYSTEM_NAME}") +# if the user has set CPACK_NSIS_DISPLAY_NAME remember it +if(DEFINED CPACK_NSIS_DISPLAY_NAME) + SET(CPACK_NSIS_DISPLAY_NAME_SET TRUE) +endif() +# if the user has set CPACK_NSIS_DISPLAY +# explicitly, then use that as the default +# value of CPACK_NSIS_PACKAGE_NAME instead +# of CPACK_PACKAGE_INSTALL_DIRECTORY +cpack_set_if_not_set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") + +if(CPACK_NSIS_DISPLAY_NAME_SET) + string(REPLACE "\\" "\\\\" + _NSIS_DISPLAY_NAME_TMP "${CPACK_NSIS_DISPLAY_NAME}") + cpack_set_if_not_set(CPACK_NSIS_PACKAGE_NAME "${_NSIS_DISPLAY_NAME_TMP}") +else() + cpack_set_if_not_set(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") +endif() + +cpack_set_if_not_set(CPACK_OUTPUT_CONFIG_FILE + "${CMAKE_BINARY_DIR}/CPackConfig.cmake") + +cpack_set_if_not_set(CPACK_SOURCE_OUTPUT_CONFIG_FILE + "${CMAKE_BINARY_DIR}/CPackSourceConfig.cmake") + +cpack_set_if_not_set(CPACK_SET_DESTDIR OFF) +cpack_set_if_not_set(CPACK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +cpack_set_if_not_set(CPACK_NSIS_INSTALLER_ICON_CODE "") +cpack_set_if_not_set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") + +IF(DEFINED CPACK_COMPONENTS_ALL) + IF(CPACK_MONOLITHIC_INSTALL) + MESSAGE("CPack warning: both CPACK_COMPONENTS_ALL and CPACK_MONOLITHIC_INSTALL have been set.\nDefaulting to a monolithic installation.") + SET(CPACK_COMPONENTS_ALL) + ELSE(CPACK_MONOLITHIC_INSTALL) + # The user has provided the set of components to be installed as + # part of a component-based installation; trust her. + SET(CPACK_COMPONENTS_ALL_SET_BY_USER TRUE) + ENDIF(CPACK_MONOLITHIC_INSTALL) +ELSE(DEFINED CPACK_COMPONENTS_ALL) + # If the user has not specifically requested a monolithic installer + # but has specified components in various "install" commands, tell + # CPack about those components. + IF(NOT CPACK_MONOLITHIC_INSTALL) + GET_CMAKE_PROPERTY(CPACK_COMPONENTS_ALL COMPONENTS) + LIST(LENGTH CPACK_COMPONENTS_ALL CPACK_COMPONENTS_LEN) + IF(CPACK_COMPONENTS_LEN EQUAL 1) + # Only one component: this is not a component-based installation + # (at least, it isn't a component-based installation, but may + # become one later if the user uses the cpack_add_* commands). + SET(CPACK_COMPONENTS_ALL) + ENDIF(CPACK_COMPONENTS_LEN EQUAL 1) + SET(CPACK_COMPONENTS_LEN) + ENDIF(NOT CPACK_MONOLITHIC_INSTALL) +ENDIF(DEFINED CPACK_COMPONENTS_ALL) + +# CMake always generates a component named "Unspecified", which is +# used to install everything that doesn't have an explicitly-provided +# component. Since these files should always be installed, we'll make +# them hidden and required. +set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN TRUE) +set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED TRUE) + +cpack_encode_variables() +configure_file("${cpack_input_file}" "${CPACK_OUTPUT_CONFIG_FILE}" @ONLY IMMEDIATE) + +# Generate source file +cpack_set_if_not_set(CPACK_SOURCE_INSTALLED_DIRECTORIES + "${CMAKE_SOURCE_DIR};/") +cpack_set_if_not_set(CPACK_SOURCE_TOPLEVEL_TAG "${CPACK_SYSTEM_NAME}-Source") +cpack_set_if_not_set(CPACK_SOURCE_PACKAGE_FILE_NAME + "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Source") +cpack_set_if_not_set(CPACK_SOURCE_IGNORE_FILES + "/CVS/;/\\\\\\\\.svn/;/\\\\\\\\.bzr/;/\\\\\\\\.hg/;/\\\\\\\\.git/;\\\\\\\\.swp$;\\\\\\\\.#;/#") +SET(CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_SOURCE_INSTALL_CMAKE_PROJECTS}") +SET(CPACK_INSTALLED_DIRECTORIES "${CPACK_SOURCE_INSTALLED_DIRECTORIES}") +SET(CPACK_GENERATOR "${CPACK_SOURCE_GENERATOR}") +SET(CPACK_TOPLEVEL_TAG "${CPACK_SOURCE_TOPLEVEL_TAG}") +SET(CPACK_PACKAGE_FILE_NAME "${CPACK_SOURCE_PACKAGE_FILE_NAME}") +SET(CPACK_IGNORE_FILES "${CPACK_SOURCE_IGNORE_FILES}") +SET(CPACK_STRIP_FILES "${CPACK_SOURCE_STRIP_FILES}") + +cpack_encode_variables() +configure_file("${cpack_source_input_file}" + "${CPACK_SOURCE_OUTPUT_CONFIG_FILE}" @ONLY IMMEDIATE) diff --git a/Modules/CPack.distribution.dist.in b/Modules/CPack.distribution.dist.in new file mode 100644 index 0000000..f20e66c --- /dev/null +++ b/Modules/CPack.distribution.dist.in @@ -0,0 +1,9 @@ + + + @CPACK_PACKAGE_NAME@ + + + + + @CPACK_PACKAGEMAKER_CHOICES@ + diff --git a/Modules/CPackBundle.cmake b/Modules/CPackBundle.cmake new file mode 100644 index 0000000..0da51e3 --- /dev/null +++ b/Modules/CPackBundle.cmake @@ -0,0 +1,48 @@ +##section Variables specific to CPack Bundle generator +##end +##module +# - CPack Bundle generator (Mac OS X) specific options +# +# Installers built on Mac OS X using the Bundle generator use the +# 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. +##end +# +##variable +# 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 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_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 + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +#Bundle Generator specific code should be put here diff --git a/Modules/CPackComponent.cmake b/Modules/CPackComponent.cmake new file mode 100644 index 0000000..1598703 --- /dev/null +++ b/Modules/CPackComponent.cmake @@ -0,0 +1,513 @@ +##section Variables concerning CPack Components +##end +##module +# - Build binary and source package installers +# +# The CPackComponent module is the module which handles +# the component part of CPack. See CPack module for +# general information about CPack. +# +# For certain kinds of binary installers (including the graphical +# installers on Mac OS X and Windows), CPack generates installers that +# allow users to select individual application components to +# install. The contents of each of the components are identified by +# the COMPONENT argument of CMake's INSTALL command. These components +# can be annotated with user-friendly names and descriptions, +# inter-component dependencies, etc., and grouped in various ways to +# customize the resulting installer. See the cpack_add_* commands, +# described below, for more information about component-specific +# installations. +# +# Component-specific installation allows users to select specific sets +# of components to install during the install process. Installation +# components are identified by the COMPONENT argument of CMake's +# INSTALL commands, and should be further described by the following +# CPack commands: +##end +# +##variable +# CPACK_COMPONENTS_ALL - The list of component to install. +# +# The default value of this variable is computed by CPack +# and contains all components defined by the project. The +# user may set it to only include the specified components. +##end +# +##variable +# CPACK__COMPONENT_INSTALL - Enable/Disable component install for +# CPack generator . +# +# Each CPack Generator (RPM, DEB, ARCHIVE, NSIS, DMG, etc...) has a legacy +# default behavior. e.g. RPM builds monolithic whereas NSIS builds component. +# One can change the default behavior by setting this variable to 0/1 or OFF/ON. +##end +##variable +# CPACK_COMPONENTS_GROUPING - Specify how components are grouped for multi-package +# component-aware CPack generators. +# +# Some generators like RPM or ARCHIVE family (TGZ, ZIP, ...) generates several +# packages files when asked for component packaging. They group the component +# differently depending on the value of this variable: +# - ONE_PER_GROUP (default): creates one package file per component group +# - ALL_COMPONENTS_IN_ONE : creates a single package with all (requested) component +# - IGNORE : creates one package per component, i.e. IGNORE component group +# One can specify different grouping for different CPack generator by using +# a CPACK_PROJECT_CONFIG_FILE. +##end +##variable +# CPACK_COMPONENT__DISPLAY_NAME - The name to be displayed for a component. +##end +##variable +# CPACK_COMPONENT__DESCRIPTION - The description of a component. +##end +##variable +# CPACK_COMPONENT__GROUP - The group of a component. +##end +##variable +# CPACK_COMPONENT__DEPENDS - The dependencies (list of components) +# on which this component depends. +##end +##variable +# CPACK_COMPONENT__REQUIRED - True is this component is required. +##end +##macro +# cpack_add_component - Describes a CPack installation component +# named by the COMPONENT argument to a CMake INSTALL command. +# +# cpack_add_component(compname +# [DISPLAY_NAME name] +# [DESCRIPTION description] +# [HIDDEN | REQUIRED | DISABLED ] +# [GROUP group] +# [DEPENDS comp1 comp2 ... ] +# [INSTALL_TYPES type1 type2 ... ] +# [DOWNLOADED] +# [ARCHIVE_FILE filename]) +# +# The cmake_add_component command describes an installation +# component, which the user can opt to install or remove as part of +# the graphical installation process. compname is the name of the +# component, as provided to the COMPONENT argument of one or more +# CMake INSTALL commands. +# +# DISPLAY_NAME is the displayed name of the component, used in +# graphical installers to display the component name. This value can +# be any string. +# +# DESCRIPTION is an extended description of the component, used in +# graphical installers to give the user additional information about +# the component. Descriptions can span multiple lines using "\n" as +# the line separator. Typically, these descriptions should be no +# more than a few lines long. +# +# HIDDEN indicates that this component will be hidden in the +# graphical installer, so that the user cannot directly change +# whether it is installed or not. +# +# REQUIRED indicates that this component is required, and therefore +# will always be installed. It will be visible in the graphical +# installer, but it cannot be unselected. (Typically, required +# components are shown greyed out). +# +# DISABLED indicates that this component should be disabled +# (unselected) by default. The user is free to select this component +# for installation, unless it is also HIDDEN. +# +# DEPENDS lists the components on which this component depends. If +# this component is selected, then each of the components listed +# must also be selected. The dependency information is encoded +# within the installer itself, so that users cannot install +# inconsitent sets of components. +# +# GROUP names the component group of which this component is a +# part. If not provided, the component will be a standalone +# component, not part of any component group. Component groups are +# described with the cpack_add_component_group command, detailed +# below. +# +# INSTALL_TYPES lists the installation types of which this component +# is a part. When one of these installations types is selected, this +# component will automatically be selected. Installation types are +# described with the cpack_add_install_type command, detailed below. +# +# DOWNLOADED indicates that this component should be downloaded +# on-the-fly by the installer, rather than packaged in with the +# installer itself. For more information, see the cpack_configure_downloads +# command. +# +# ARCHIVE_FILE provides a name for the archive file created by CPack +# to be used for downloaded components. If not supplied, CPack will +# create a file with some name based on CPACK_PACKAGE_FILE_NAME and +# the name of the component. See cpack_configure_downloads for more +# information. +##end +# +##macro +# cpack_add_component_group - Describes a group of related CPack +# installation components. +# +# cpack_add_component_group(groupname +# [DISPLAY_NAME name] +# [DESCRIPTION description] +# [PARENT_GROUP parent] +# [EXPANDED] +# [BOLD_TITLE]) +# +# The cpack_add_component_group describes a group of installation +# components, which will be placed together within the listing of +# options. Typically, component groups allow the user to +# select/deselect all of the components within a single group via a +# single group-level option. Use component groups to reduce the +# complexity of installers with many options. groupname is an +# arbitrary name used to identify the group in the GROUP argument of +# the cpack_add_component command, which is used to place a +# component in a group. The name of the group must not conflict with +# the name of any component. +# +# DISPLAY_NAME is the displayed name of the component group, used in +# graphical installers to display the component group name. This +# value can be any string. +# +# DESCRIPTION is an extended description of the component group, +# used in graphical installers to give the user additional +# information about the components within that group. Descriptions +# can span multiple lines using "\n" as the line +# separator. Typically, these descriptions should be no more than a +# few lines long. +# +# PARENT_GROUP, if supplied, names the parent group of this group. +# Parent groups are used to establish a hierarchy of groups, +# providing an arbitrary hierarchy of groups. +# +# EXPANDED indicates that, by default, the group should show up as +# "expanded", so that the user immediately sees all of the +# components within the group. Otherwise, the group will initially +# show up as a single entry. +# +# BOLD_TITLE indicates that the group title should appear in bold, +# to call the user's attention to the group. +##end +# +##macro +# cpack_add_install_type - Add a new installation type containing a +# set of predefined component selections to the graphical installer. +# +# cpack_add_install_type(typename +# [DISPLAY_NAME name]) +# +# The cpack_add_install_type command identifies a set of preselected +# components that represents a common use case for an +# application. For example, a "Developer" install type might include +# an application along with its header and library files, while an +# "End user" install type might just include the application's +# executable. Each component identifies itself with one or more +# install types via the INSTALL_TYPES argument to +# cpack_add_component. +# +# DISPLAY_NAME is the displayed name of the install type, which will +# typically show up in a drop-down box within a graphical +# installer. This value can be any string. +##end +# +##macro +# cpack_configure_downloads - Configure CPack to download selected +# components on-the-fly as part of the installation process. +# +# cpack_configure_downloads(site +# [UPLOAD_DIRECTORY dirname] +# [ALL] +# [ADD_REMOVE|NO_ADD_REMOVE]) +# +# The cpack_configure_downloads command configures installation-time +# downloads of selected components. For each downloadable component, +# CPack will create an archive containing the contents of that +# component, which should be uploaded to the given site. When the +# user selects that component for installation, the installer will +# download and extract the component in place. This feature is +# useful for creating small installers that only download the +# requested components, saving bandwidth. Additionally, the +# installers are small enough that they will be installed as part of +# the normal installation process, and the "Change" button in +# Windows Add/Remove Programs control panel will allow one to add or +# remove parts of the application after the original +# installation. On Windows, the downloaded-components functionality +# requires the ZipDLL plug-in for NSIS, available at: +# +# http://nsis.sourceforge.net/ZipDLL_plug-in +# +# On Mac OS X, installers that download components on-the-fly can +# only be built and installed on system using Mac OS X 10.5 or +# later. +# +# The site argument is a URL where the archives for downloadable +# components will reside, e.g., http://www.cmake.org/files/2.6.1/installer/ +# All of the archives produced by CPack should be uploaded to that location. +# +# UPLOAD_DIRECTORY is the local directory where CPack will create the +# various archives for each of the components. The contents of this +# directory should be uploaded to a location accessible by the URL given +# in the site argument. If omitted, CPack will use the directory +# CPackUploads inside the CMake binary directory to store the generated +# archives. +# +# The ALL flag indicates that all components be downloaded. Otherwise, only +# those components explicitly marked as DOWNLOADED or that have a specified +# ARCHIVE_FILE will be downloaded. Additionally, the ALL option implies +# ADD_REMOVE (unless NO_ADD_REMOVE is specified). +# +# ADD_REMOVE indicates that CPack should install a copy of the installer +# that can be called from Windows' Add/Remove Programs dialog (via the +# "Modify" button) to change the set of installed components. NO_ADD_REMOVE +# turns off this behavior. This option is ignored on Mac OS X. +##endmacro + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Define var in order to avoid multiple inclusion +IF(NOT CPackComponent_CMake_INCLUDED) +SET(CPackComponent_CMake_INCLUDED 1) + +# Argument-parsing macro from http://www.cmake.org/Wiki/CMakeMacroParseArguments +MACRO(cpack_parse_arguments prefix arg_names option_names) + SET(${prefix}_DEFAULT_ARGS) + FOREACH(arg_name ${arg_names}) + SET(${prefix}_${arg_name}) + ENDFOREACH(arg_name) + FOREACH(option ${option_names}) + SET(${prefix}_${option} FALSE) + ENDFOREACH(option) + + SET(current_arg_name DEFAULT_ARGS) + SET(current_arg_list) + FOREACH(arg ${ARGN}) + SET(larg_names ${arg_names}) + LIST(FIND larg_names "${arg}" is_arg_name) + IF (is_arg_name GREATER -1) + SET(${prefix}_${current_arg_name} ${current_arg_list}) + SET(current_arg_name ${arg}) + SET(current_arg_list) + ELSE (is_arg_name GREATER -1) + SET(loption_names ${option_names}) + LIST(FIND loption_names "${arg}" is_option) + IF (is_option GREATER -1) + SET(${prefix}_${arg} TRUE) + ELSE (is_option GREATER -1) + SET(current_arg_list ${current_arg_list} ${arg}) + ENDIF (is_option GREATER -1) + ENDIF (is_arg_name GREATER -1) + ENDFOREACH(arg) + SET(${prefix}_${current_arg_name} ${current_arg_list}) +ENDMACRO(cpack_parse_arguments) + +# Macro that appends a SET command for the given variable name (var) +# to the macro named strvar, but only if the variable named "var" +# has been defined. The string will eventually be appended to a CPack +# configuration file. +MACRO(cpack_append_variable_set_command var strvar) + IF (DEFINED ${var}) + SET(${strvar} "${${strvar}}SET(${var}") + FOREACH(APPENDVAL ${${var}}) + SET(${strvar} "${${strvar}} ${APPENDVAL}") + ENDFOREACH(APPENDVAL) + SET(${strvar} "${${strvar}})\n") + ENDIF (DEFINED ${var}) +ENDMACRO(cpack_append_variable_set_command) + +# Macro that appends a SET command for the given variable name (var) +# to the macro named strvar, but only if the variable named "var" +# has been defined and is a string. The string will eventually be +# appended to a CPack configuration file. +MACRO(cpack_append_string_variable_set_command var strvar) + IF (DEFINED ${var}) + LIST(LENGTH ${var} CPACK_APP_VALUE_LEN) + IF(${CPACK_APP_VALUE_LEN} EQUAL 1) + SET(${strvar} "${${strvar}}SET(${var} \"${${var}}\")\n") + ENDIF(${CPACK_APP_VALUE_LEN} EQUAL 1) + ENDIF (DEFINED ${var}) +ENDMACRO(cpack_append_string_variable_set_command) + +# Macro that appends a SET command for the given variable name (var) +# to the macro named strvar, but only if the variable named "var" +# has been set to true. The string will eventually be +# appended to a CPack configuration file. +MACRO(cpack_append_option_set_command var strvar) + IF (${var}) + LIST(LENGTH ${var} CPACK_APP_VALUE_LEN) + IF(${CPACK_APP_VALUE_LEN} EQUAL 1) + SET(${strvar} "${${strvar}}SET(${var} TRUE)\n") + ENDIF(${CPACK_APP_VALUE_LEN} EQUAL 1) + ENDIF (${var}) +ENDMACRO(cpack_append_option_set_command) + +# Macro that adds a component to the CPack installer +MACRO(cpack_add_component compname) + STRING(TOUPPER ${compname} CPACK_ADDCOMP_UNAME) + cpack_parse_arguments(CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME} + "DISPLAY_NAME;DESCRIPTION;GROUP;DEPENDS;INSTALL_TYPES;ARCHIVE_FILE" + "HIDDEN;REQUIRED;DISABLED;DOWNLOADED" + ${ARGN} + ) + + if (CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DOWNLOADED) + SET(CPACK_ADDCOMP_STR "\n# Configuration for downloaded component \"${compname}\"\n") + else () + SET(CPACK_ADDCOMP_STR "\n# Configuration for component \"${compname}\"\n") + endif () + + IF(NOT CPACK_MONOLITHIC_INSTALL) + # If the user didn't set CPACK_COMPONENTS_ALL explicitly, update the + # value of CPACK_COMPONENTS_ALL in the configuration file. This will + # take care of any components that have been added after the CPack + # moduled was included. + IF(NOT CPACK_COMPONENTS_ALL_SET_BY_USER) + GET_CMAKE_PROPERTY(CPACK_ADDCOMP_COMPONENTS COMPONENTS) + SET(CPACK_ADDCOMP_STR "${CPACK_ADDCOMP_STR}\nSET(CPACK_COMPONENTS_ALL") + FOREACH(COMP ${CPACK_ADDCOMP_COMPONENTS}) + SET(CPACK_ADDCOMP_STR "${CPACK_ADDCOMP_STR} ${COMP}") + ENDFOREACH(COMP) + SET(CPACK_ADDCOMP_STR "${CPACK_ADDCOMP_STR})\n") + ENDIF(NOT CPACK_COMPONENTS_ALL_SET_BY_USER) + ENDIF(NOT CPACK_MONOLITHIC_INSTALL) + + cpack_append_string_variable_set_command( + CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DISPLAY_NAME + CPACK_ADDCOMP_STR) + cpack_append_string_variable_set_command( + CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DESCRIPTION + CPACK_ADDCOMP_STR) + cpack_append_variable_set_command( + CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_GROUP + CPACK_ADDCOMP_STR) + cpack_append_variable_set_command( + CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DEPENDS + CPACK_ADDCOMP_STR) + cpack_append_variable_set_command( + CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_INSTALL_TYPES + CPACK_ADDCOMP_STR) + cpack_append_string_variable_set_command( + CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_ARCHIVE_FILE + CPACK_ADDCOMP_STR) + cpack_append_option_set_command( + CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_HIDDEN + CPACK_ADDCOMP_STR) + cpack_append_option_set_command( + CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_REQUIRED + CPACK_ADDCOMP_STR) + cpack_append_option_set_command( + CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DISABLED + CPACK_ADDCOMP_STR) + cpack_append_option_set_command( + CPACK_COMPONENT_${CPACK_ADDCOMP_UNAME}_DOWNLOADED + CPACK_ADDCOMP_STR) + # Backward compatibility issue. + # Write to config iff the macros is used after CPack.cmake has been + # included, other it's not necessary because the variables + # will be encoded by cpack_encode_variables. + IF(CPack_CMake_INCLUDED) + FILE(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${CPACK_ADDCOMP_STR}") + ENDIF(CPack_CMake_INCLUDED) +ENDMACRO(cpack_add_component) + +# Macro that adds a component group to the CPack installer +MACRO(cpack_add_component_group grpname) + STRING(TOUPPER ${grpname} CPACK_ADDGRP_UNAME) + cpack_parse_arguments(CPACK_COMPONENT_GROUP_${CPACK_ADDGRP_UNAME} + "DISPLAY_NAME;DESCRIPTION" + "EXPANDED;BOLD_TITLE" + ${ARGN} + ) + + SET(CPACK_ADDGRP_STR "\n# Configuration for component group \"${grpname}\"\n") + cpack_append_string_variable_set_command( + CPACK_COMPONENT_GROUP_${CPACK_ADDGRP_UNAME}_DISPLAY_NAME + CPACK_ADDGRP_STR) + cpack_append_string_variable_set_command( + CPACK_COMPONENT_GROUP_${CPACK_ADDGRP_UNAME}_DESCRIPTION + CPACK_ADDGRP_STR) + cpack_append_option_set_command( + CPACK_COMPONENT_GROUP_${CPACK_ADDGRP_UNAME}_EXPANDED + CPACK_ADDGRP_STR) + cpack_append_option_set_command( + CPACK_COMPONENT_GROUP_${CPACK_ADDGRP_UNAME}_BOLD_TITLE + CPACK_ADDGRP_STR) + # Backward compatibility issue. + # Write to config iff the macros is used after CPack.cmake has been + # included, other it's not necessary because the variables + # will be encoded by cpack_encode_variables. + IF(CPack_CMake_INCLUDED) + FILE(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${CPACK_ADDGRP_STR}") + ENDIF(CPack_CMake_INCLUDED) +ENDMACRO(cpack_add_component_group) + +# Macro that adds an installation type to the CPack installer +MACRO(cpack_add_install_type insttype) + STRING(TOUPPER ${insttype} CPACK_INSTTYPE_UNAME) + cpack_parse_arguments(CPACK_INSTALL_TYPE_${CPACK_INSTTYPE_UNAME} + "DISPLAY_NAME" + "" + ${ARGN} + ) + + SET(CPACK_INSTTYPE_STR + "\n# Configuration for installation type \"${insttype}\"\n") + SET(CPACK_INSTTYPE_STR + "${CPACK_INSTTYPE_STR}LIST(APPEND CPACK_ALL_INSTALL_TYPES ${insttype})\n") + cpack_append_string_variable_set_command( + CPACK_INSTALL_TYPE_${CPACK_INSTTYPE_UNAME}_DISPLAY_NAME + CPACK_INSTTYPE_STR) + # Backward compatibility issue. + # Write to config iff the macros is used after CPack.cmake has been + # included, other it's not necessary because the variables + # will be encoded by cpack_encode_variables. + IF(CPack_CMake_INCLUDED) + FILE(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${CPACK_INSTTYPE_STR}") + ENDIF(CPack_CMake_INCLUDED) +ENDMACRO(cpack_add_install_type) + +MACRO(cpack_configure_downloads site) + cpack_parse_arguments(CPACK_DOWNLOAD + "UPLOAD_DIRECTORY" + "ALL;ADD_REMOVE;NO_ADD_REMOVE" + ${ARGN} + ) + + SET(CPACK_CONFIG_DL_STR + "\n# Downloaded components configuration\n") + SET(CPACK_UPLOAD_DIRECTORY ${CPACK_DOWNLOAD_UPLOAD_DIRECTORY}) + SET(CPACK_DOWNLOAD_SITE ${site}) + cpack_append_string_variable_set_command( + CPACK_DOWNLOAD_SITE + CPACK_CONFIG_DL_STR) + cpack_append_string_variable_set_command( + CPACK_UPLOAD_DIRECTORY + CPACK_CONFIG_DL_STR) + cpack_append_option_set_command( + CPACK_DOWNLOAD_ALL + CPACK_CONFIG_DL_STR) + IF (${CPACK_DOWNLOAD_ALL} AND NOT ${CPACK_DOWNLOAD_NO_ADD_REMOVE}) + SET(CPACK_DOWNLOAD_ADD_REMOVE ON) + ENDIF (${CPACK_DOWNLOAD_ALL} AND NOT ${CPACK_DOWNLOAD_NO_ADD_REMOVE}) + SET(CPACK_ADD_REMOVE ${CPACK_DOWNLOAD_ADD_REMOVE}) + cpack_append_option_set_command( + CPACK_ADD_REMOVE + CPACK_CONFIG_DL_STR) + # Backward compatibility issue. + # Write to config iff the macros is used after CPack.cmake has been + # included, other it's not necessary because the variables + # will be encoded by cpack_encode_variables. + IF(CPack_CMake_INCLUDED) + FILE(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "${CPACK_CONFIG_DL_STR}") + ENDIF(CPack_CMake_INCLUDED) +ENDMACRO(cpack_configure_downloads) +ENDIF(NOT CPackComponent_CMake_INCLUDED) 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 new file mode 100644 index 0000000..e866bab --- /dev/null +++ b/Modules/CPackDMG.cmake @@ -0,0 +1,70 @@ +##section Variables specific to CPack DragNDrop generator +##end +##module +# - DragNDrop CPack generator (Mac OS X). +# The following variables are specific to the DragNDrop installers +# built on Mac OS X: +##end +# +##variable +# 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. +##end +# +##variable +# 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 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.) +##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.) +##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.) +##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/CPackDeb.cmake b/Modules/CPackDeb.cmake new file mode 100644 index 0000000..fe81dc9 --- /dev/null +++ b/Modules/CPackDeb.cmake @@ -0,0 +1,393 @@ +##section Variables specific to CPack Debian (DEB) generator +##end +##module +# - The builtin (binary) CPack Deb generator (Unix only) +# CPackDeb may be used to create Deb package using CPack. +# CPackDeb is a CPack generator thus it uses the CPACK_XXX variables +# used by CPack : http://www.cmake.org/Wiki/CMake:CPackConfiguration. +# CPackDeb generator should work on any linux host but it will +# produce better deb package when Debian specific tools 'dpkg-xxx' +# are usable on the build system. +# +# CPackDeb has specific features which are controlled by +# the specifics CPACK_DEBIAN_XXX variables.You'll find a detailed usage on +# the wiki: +# http://www.cmake.org/Wiki/CMake:CPackPackageGenerators#DEB_.28UNIX_only.29 +# However as a handy reminder here comes the list of specific variables: +##end +# +##variable +# CPACK_DEBIAN_PACKAGE_NAME +# Mandatory : YES +# Default : CPACK_PACKAGE_NAME (lower case) +# The debian package summary +##end +##variable +# CPACK_DEBIAN_PACKAGE_VERSION +# Mandatory : YES +# Default : CPACK_PACKAGE_VERSION +# The debian package version +##end +##variable +# CPACK_DEBIAN_PACKAGE_ARCHITECTURE +# Mandatory : YES +# Default : Output of dpkg --print-architecture (or i386 if dpkg is not found) +# The debian package architecture +##end +##variable +# CPACK_DEBIAN_PACKAGE_DEPENDS +# Mandatory : NO +# Default : - +# May be used to set deb dependencies. +##end +##variable +# CPACK_DEBIAN_PACKAGE_MAINTAINER +# Mandatory : YES +# Default : CPACK_PACKAGE_CONTACT +# The debian package maintainer +##end +##variable +# CPACK_DEBIAN_PACKAGE_DESCRIPTION +# Mandatory : YES +# Default : CPACK_PACKAGE_DESCRIPTION_SUMMARY +# The debian package description +##end +##variable +# CPACK_DEBIAN_PACKAGE_SECTION +# Mandatory : YES +# Default : 'devel' +# The debian package section +##end +##variable +# CPACK_DEBIAN_PACKAGE_PRIORITY +# Mandatory : YES +# Default : 'optional' +# The debian package priority +##end +##variable +# CPACK_DEBIAN_PACKAGE_HOMEPAGE +# Mandatory : NO +# Default : - +# The URL of the web site for this package +##end +##variable +# CPACK_DEBIAN_PACKAGE_SHLIBDEPS +# Mandatory : NO +# Default : OFF +# May be set to ON in order to use dpkg-shlibdeps to generate +# better package dependency list. +# You may need set CMAKE_INSTALL_RPATH toi appropriate value +# if you use this feature, because if you don't dpkg-shlibdeps +# may fail to find your own shared libs. +# See http://www.cmake.org/Wiki/CMake_RPATH_handling. +##end +##variable +# CPACK_DEBIAN_PACKAGE_DEBUG +# Mandatory : NO +# Default : - +# May be set when invoking cpack in order to trace debug information +# during CPackDeb run. +##end +##variable +# CPACK_DEBIAN_PACKAGE_PREDEPENDS +# Mandatory : NO +# Default : - +# see http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps +# This field is like Depends, except that it also forces dpkg to complete installation of +# the packages named before even starting the installation of the package which declares +# the pre-dependency. +##end +##variable +# CPACK_DEBIAN_PACKAGE_ENHANCES +# Mandatory : NO +# Default : - +# see http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps +# This field is similar to Suggests but works in the opposite direction. +# It is used to declare that a package can enhance the functionality of another package. +##end +##variable +# CPACK_DEBIAN_PACKAGE_BREAKS +# Mandatory : NO +# Default : - +# see http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps +# When one binary package declares that it breaks another, dpkg will refuse to allow the +# package which declares Breaks be installed unless the broken package is deconfigured first, +# and it will refuse to allow the broken package to be reconfigured. +##end +##variable +# CPACK_DEBIAN_PACKAGE_CONFLICTS +# Mandatory : NO +# Default : - +# see http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps +# When one binary package declares a conflict with another using a Conflicts field, +# dpkg will refuse to allow them to be installed on the system at the same time. +##end +##variable +# CPACK_DEBIAN_PACKAGE_PROVIDES +# Mandatory : NO +# Default : - +# see http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps +# A virtual package is one which appears in the Provides control field of another package. +##end +##variable +# CPACK_DEBIAN_PACKAGE_REPLACES +# Mandatory : NO +# Default : - +# see http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps +# Packages can declare in their control file that they should overwrite +# files in certain other packages, or completely replace other packages. +##end + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# Copyright 2007-2009 Mathieu Malaterre +# +# 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.) + +# CPack script for creating Debian package +# Author: Mathieu Malaterre +# +# http://wiki.debian.org/HowToPackageForDebian + +IF(CMAKE_BINARY_DIR) + MESSAGE(FATAL_ERROR "CPackDeb.cmake may only be used by CPack internally.") +ENDIF(CMAKE_BINARY_DIR) + +IF(NOT UNIX) + MESSAGE(FATAL_ERROR "CPackDeb.cmake may only be used under UNIX.") +ENDIF(NOT UNIX) + +# CPACK_DEBIAN_PACKAGE_SHLIBDEPS +# If specify OFF, only user depends are used +IF(NOT DEFINED CPACK_DEBIAN_PACKAGE_SHLIBDEPS) + SET(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF) +ENDIF(NOT DEFINED CPACK_DEBIAN_PACKAGE_SHLIBDEPS) + +FIND_PROGRAM(FAKEROOT_EXECUTABLE fakeroot) +IF(FAKEROOT_EXECUTABLE) + SET(CPACK_DEBIAN_FAKEROOT_EXECUTABLE ${FAKEROOT_EXECUTABLE}) +ENDIF(FAKEROOT_EXECUTABLE) + +IF(CPACK_DEBIAN_PACKAGE_SHLIBDEPS) + # dpkg-shlibdeps is a Debian utility for generating dependency list + FIND_PROGRAM(SHLIBDEPS_EXECUTABLE dpkg-shlibdeps) + + # Check version of the dpkg-shlibdeps tool using CPackRPM method + IF(SHLIBDEPS_EXECUTABLE) + EXECUTE_PROCESS(COMMAND ${SHLIBDEPS_EXECUTABLE} --version + OUTPUT_VARIABLE _TMP_VERSION + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + STRING(REGEX MATCH "dpkg-shlibdeps version ([0-9]+\\.[0-9]+\\.[0-9]+)" + SHLIBDEPS_EXECUTABLE_VERSION + ${_TMP_VERSION}) + SET(SHLIBDEPS_EXECUTABLE_VERSION "${CMAKE_MATCH_1}") + IF(CPACK_DEBIAN_PACKAGE_DEBUG) + MESSAGE( "CPackDeb Debug: dpkg-shlibdeps version is <${SHLIBDEPS_EXECUTABLE_VERSION}>") + ENDIF(CPACK_DEBIAN_PACKAGE_DEBUG) + + # Generating binary list - Get type of all install files + EXECUTE_PROCESS(COMMAND find -type f + COMMAND xargs file + WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}" + OUTPUT_VARIABLE CPACK_DEB_INSTALL_FILES) + + # Convert to CMake list + STRING(REGEX REPLACE "\n" ";" CPACK_DEB_INSTALL_FILES ${CPACK_DEB_INSTALL_FILES}) + + # Only dynamically linked ELF files are included + # Extract only file name infront of ":" + FOREACH ( _FILE ${CPACK_DEB_INSTALL_FILES}) + IF ( ${_FILE} MATCHES "ELF.*dynamically linked") + STRING(REGEX MATCH "(^.*):" _FILE_NAME ${_FILE}) + LIST(APPEND CPACK_DEB_BINARY_FILES ${CMAKE_MATCH_1}) + ENDIF() + ENDFOREACH() + + MESSAGE( "CPackDeb: - Generating dependency list") + + # Create blank control file for running dpkg-shlibdeps + # There might be some other way to invoke dpkg-shlibdeps without creating this file + # but standard debian package should not have anything that can collide with this file or directory + FILE(MAKE_DIRECTORY ${CPACK_TEMPORARY_DIRECTORY}/debian) + FILE(WRITE ${CPACK_TEMPORARY_DIRECTORY}/debian/control "") + + # Execute dpkg-shlibdeps + # --ignore-missing-info : allow dpkg-shlibdeps to run even if some libs do not belong to a package + # -O : print to STDOUT + EXECUTE_PROCESS(COMMAND ${SHLIBDEPS_EXECUTABLE} --ignore-missing-info -O ${CPACK_DEB_BINARY_FILES} + WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}" + OUTPUT_VARIABLE SHLIBDEPS_OUTPUT + RESULT_VARIABLE SHLIBDEPS_RESULT + ERROR_VARIABLE SHLIBDEPS_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE ) + IF(CPACK_DEBIAN_PACKAGE_DEBUG) + # dpkg-shlibdeps will throw some warnings if some input files are not binary + MESSAGE( "CPackDeb Debug: dpkg-shlibdeps warnings \n${SHLIBDEPS_ERROR}") + ENDIF(CPACK_DEBIAN_PACKAGE_DEBUG) + IF (NOT SHLIBDEPS_RESULT EQUAL 0) + MESSAGE (FATAL_ERROR "CPackDeb: dpkg-shlibdeps: ${SHLIBDEPS_ERROR}") + ENDIF (NOT SHLIBDEPS_RESULT EQUAL 0) + + #Get rid of prefix generated by dpkg-shlibdeps + string (REGEX REPLACE "^.*Depends=" "" CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS ${SHLIBDEPS_OUTPUT}) + + IF(CPACK_DEBIAN_PACKAGE_DEBUG) + MESSAGE( "CPackDeb Debug: Found dependency: ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}") + ENDIF(CPACK_DEBIAN_PACKAGE_DEBUG) + + # Remove blank control file + # Might not be safe if package actual contain file or directory named debian + FILE(REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/debian") + + # Append user depend if set + IF (CPACK_DEBIAN_PACKAGE_DEPENDS) + SET (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}, ${CPACK_DEBIAN_PACKAGE_DEPENDS}") + ELSE (CPACK_DEBIAN_PACKAGE_DEPENDS) + SET (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}") + ENDIF (CPACK_DEBIAN_PACKAGE_DEPENDS) + + ELSE (SHLIBDEPS_EXECUTABLE) + IF(CPACK_DEBIAN_PACKAGE_DEBUG) + MESSAGE( "CPackDeb Debug: Using only user-provided depends because dpkg-shlibdeps is not found.") + ENDIF(CPACK_DEBIAN_PACKAGE_DEBUG) + ENDIF(SHLIBDEPS_EXECUTABLE) + +ELSE (CPACK_DEBIAN_PACKAGE_SHLIBDEPS) + IF(CPACK_DEBIAN_PACKAGE_DEBUG) + MESSAGE( "CPackDeb Debug: Using only user-provided depends") + ENDIF(CPACK_DEBIAN_PACKAGE_DEBUG) +ENDIF(CPACK_DEBIAN_PACKAGE_SHLIBDEPS) + +# Let's define the control file found in debian package: + +# Binary package: +# http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles + +# DEBIAN/control +# debian policy enforce lower case for package name +# Package: (mandatory) +IF(NOT CPACK_DEBIAN_PACKAGE_NAME) + STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME) +ENDIF(NOT CPACK_DEBIAN_PACKAGE_NAME) + +# Version: (mandatory) +IF(NOT CPACK_DEBIAN_PACKAGE_VERSION) + IF(NOT CPACK_PACKAGE_VERSION) + MESSAGE(FATAL_ERROR "CPackDeb: Debian package requires a package version") + ENDIF(NOT CPACK_PACKAGE_VERSION) + SET(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}) +ENDIF(NOT CPACK_DEBIAN_PACKAGE_VERSION) + +# Architecture: (mandatory) +IF(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE) + # There is no such thing as i686 architecture on debian, you should use i386 instead + # $ dpkg --print-architecture + FIND_PROGRAM(DPKG_CMD dpkg) + IF(NOT DPKG_CMD) + MESSAGE(STATUS "CPackDeb: Can not find dpkg in your path, default to i386.") + SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386) + ENDIF(NOT DPKG_CMD) + EXECUTE_PROCESS(COMMAND "${DPKG_CMD}" --print-architecture + OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +ENDIF(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE) + +# have a look at GET_PROPERTY(result GLOBAL PROPERTY ENABLED_FEATURES), +# this returns the successful FIND_PACKAGE() calls, maybe this can help +# Depends: +# You should set: DEBIAN_PACKAGE_DEPENDS +# TODO: automate 'objdump -p | grep NEEDED' +IF(NOT CPACK_DEBIAN_PACKAGE_DEPENDS) + MESSAGE(STATUS "CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.") +ENDIF(NOT CPACK_DEBIAN_PACKAGE_DEPENDS) + +# Maintainer: (mandatory) +IF(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER) + IF(NOT CPACK_PACKAGE_CONTACT) + MESSAGE(FATAL_ERROR "CPackDeb: Debian package requires a maintainer for a package, set CPACK_PACKAGE_CONTACT or CPACK_DEBIAN_PACKAGE_MAINTAINER") + ENDIF(NOT CPACK_PACKAGE_CONTACT) + SET(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT}) +ENDIF(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER) + +# Description: (mandatory) +IF(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION) + IF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY) + MESSAGE(FATAL_ERROR "CPackDeb: Debian package requires a summary for a package, set CPACK_PACKAGE_DESCRIPTION_SUMMARY or CPACK_DEBIAN_PACKAGE_DESCRIPTION") + ENDIF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY) + SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}) +ENDIF(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION) + +# Section: (recommended) +IF(NOT CPACK_DEBIAN_PACKAGE_SECTION) + SET(CPACK_DEBIAN_PACKAGE_SECTION "devel") +ENDIF(NOT CPACK_DEBIAN_PACKAGE_SECTION) + +# Priority: (recommended) +IF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY) + SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") +ENDIF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY ) + +# Recommends: +# You should set: CPACK_DEBIAN_PACKAGE_RECOMMENDS + +# Suggests: +# You should set: CPACK_DEBIAN_PACKAGE_SUGGESTS + +# CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA +# This variable allow advanced user to add custom script to the control.tar.gz (inside the .deb archive) +# Typical examples are: +# - conffiles +# - postinst +# - postrm +# - prerm" +# Usage: +# SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA +# "${CMAKE_CURRENT_SOURCE_DIR/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm") + +# Are we packaging components ? +IF(CPACK_DEB_PACKAGE_COMPONENT) + SET(CPACK_DEB_PACKAGE_COMPONENT_PART_NAME "-${CPACK_DEB_PACKAGE_COMPONENT}") + SET(CPACK_DEB_PACKAGE_COMPONENT_PART_PATH "/${CPACK_DEB_PACKAGE_COMPONENT}") + SET(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${CPACK_DEB_PACKAGE_COMPONENT}") + STRING(TOLOWER "${CPACK_PACKAGE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_NAME}" CPACK_DEBIAN_PACKAGE_NAME) +ELSE(CPACK_DEB_PACKAGE_COMPONENT) + SET(CPACK_DEB_PACKAGE_COMPONENT_PART_NAME "") + SET(CPACK_DEB_PACKAGE_COMPONENT_PART_PATH "") + SET(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}") +ENDIF(CPACK_DEB_PACKAGE_COMPONENT) + +# Print out some debug information if we were asked for that +IF(CPACK_DEBIAN_PACKAGE_DEBUG) + MESSAGE("CPackDeb:Debug: CPACK_TOPLEVEL_DIRECTORY = ${CPACK_TOPLEVEL_DIRECTORY}") + MESSAGE("CPackDeb:Debug: CPACK_TOPLEVEL_TAG = ${CPACK_TOPLEVEL_TAG}") + MESSAGE("CPackDeb:Debug: CPACK_TEMPORARY_DIRECTORY = ${CPACK_TEMPORARY_DIRECTORY}") + MESSAGE("CPackDeb:Debug: CPACK_OUTPUT_FILE_NAME = ${CPACK_OUTPUT_FILE_NAME}") + MESSAGE("CPackDeb:Debug: CPACK_OUTPUT_FILE_PATH = ${CPACK_OUTPUT_FILE_PATH}") + MESSAGE("CPackDeb:Debug: CPACK_PACKAGE_FILE_NAME = ${CPACK_PACKAGE_FILE_NAME}") + MESSAGE("CPackDeb:Debug: CPACK_PACKAGE_INSTALL_DIRECTORY = ${CPACK_PACKAGE_INSTALL_DIRECTORY}") + MESSAGE("CPackDeb:Debug: CPACK_TEMPORARY_PACKAGE_FILE_NAME = ${CPACK_TEMPORARY_PACKAGE_FILE_NAME}") +ENDIF(CPACK_DEBIAN_PACKAGE_DEBUG) + +# For debian source packages: +# debian/control +# http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles + +# .dsc +# http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-debiansourcecontrolfiles + +# Builds-Depends: +#IF(NOT CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS) +# SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS +# "debhelper (>> 5.0.0), libncurses5-dev, tcl8.4" +# ) +#ENDIF(NOT CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS) diff --git a/Modules/CPackNSIS.cmake b/Modules/CPackNSIS.cmake new file mode 100644 index 0000000..5e2ba17 --- /dev/null +++ b/Modules/CPackNSIS.cmake @@ -0,0 +1,131 @@ +##section Variables specific to CPack NSIS generator +##end +##module +# - CPack NSIS generator specific options +# +# The following variables are specific to the graphical installers built +# on Windows using the Nullsoft Installation System. +##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: +# ${CPACK_NSIS_INSTALL_ROOT}/${CPACK_PACKAGE_INSTALL_DIRECTORY} +##end +# +##variable +# CPACK_NSIS_MUI_ICON - An icon filename. +# The name of a *.ico file used as the main icon for the generated +# install program. +##end +# +##variable +# CPACK_NSIS_MUI_UNIICON - An icon filename. +# The name of a *.ico file used as the main icon for the generated +# uninstall program. +##end +# +##variable +# CPACK_NSIS_INSTALLER_MUI_ICON_CODE - undocumented. +##end +# +##variable +# CPACK_NSIS_EXTRA_INSTALL_COMMANDS - Extra NSIS commands that will +# be added to the install Section. +##end +# +##variable +# CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS - Extra NSIS commands that will +# be added to the uninstall Section. +##end +# +##variable +# CPACK_NSIS_COMPRESSOR - The arguments that will be passed to the +# NSIS SetCompressor command. +##end +# +##variable +# CPACK_NSIS_MODIFY_PATH - Modify PATH toggle. +# If this is set to "ON", then an extra page +# will appear in the installer that will allow the user to choose +# whether the program directory should be added to the system PATH +# variable. +##end +# +##variable +# CPACK_NSIS_DISPLAY_NAME - The display name string that appears in +# the Windows Add/Remove Program control panel +##end +# +##variable +# CPACK_NSIS_PACKAGE_NAME - The title displayed at the top of the +# installer. +##end +# +##variable +# CPACK_NSIS_INSTALLED_ICON_NAME - A path to the executable that +# contains the installer icon. +##end +# +##variable +# CPACK_NSIS_HELP_LINK - URL to a web site providing assistance in +# installing your application. +##end +# +##variable +# CPACK_NSIS_URL_INFO_ABOUT - URL to a web site providing more +# information about your application. +##end +# +##variable +# CPACK_NSIS_CONTACT - Contact information for questions and comments +# about the installation process. +##end +# +##variable +# CPACK_NSIS_CREATE_ICONS_EXTRA - Additional NSIS commands for +# creating start menu shortcuts. +##end +# +##variable +# CPACK_NSIS_DELETE_ICONS_EXTRA -Additional NSIS commands to +# uninstall start menu shortcuts. +##end +# +##variable +# CPACK_NSIS_EXECUTABLES_DIRECTORY - Creating NSIS start menu links +# assumes that they are in 'bin' unless this variable is set. +# For example, you would set this to 'exec' if your executables are +# in an exec directory. +##end +# +##variable +# 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. +# +# 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.) + +#FIXME we should put NSIS specific code here +#FIXME but I'm not doing it because I'm not able to test it... diff --git a/Modules/CPackPackageMaker.cmake b/Modules/CPackPackageMaker.cmake new file mode 100644 index 0000000..45ba465 --- /dev/null +++ b/Modules/CPackPackageMaker.cmake @@ -0,0 +1,35 @@ +##section Variables specific to CPack PackageMaker generator +##end +##module +# - 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. +##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/CPackRPM.cmake b/Modules/CPackRPM.cmake new file mode 100644 index 0000000..cba746f --- /dev/null +++ b/Modules/CPackRPM.cmake @@ -0,0 +1,922 @@ +##section Variables specific to CPack RPM generator +##end +##module +# - The builtin (binary) CPack RPM generator (Unix only) +# CPackRPM may be used to create RPM package using CPack. +# CPackRPM is a CPack generator thus it uses the CPACK_XXX variables +# used by CPack : http://www.cmake.org/Wiki/CMake:CPackConfiguration +# +# However CPackRPM has specific features which are controlled by +# the specifics CPACK_RPM_XXX variables. CPackRPM is a component aware +# generator so when CPACK_RPM_COMPONENT_INSTALL is ON some more +# CPACK_RPM__XXXX variables may be used in order +# to have component specific values. Note however that +# refers to the **grouping name**. This may be either a component name +# or a component GROUP name. +# Usually those vars correspond to RPM spec file entities, one may find +# information about spec files here http://www.rpm.org/wiki/Docs. +# You'll find a detailed usage of CPackRPM on the wiki: +# http://www.cmake.org/Wiki/CMake:CPackPackageGenerators#RPM_.28Unix_Only.29 +# However as a handy reminder here comes the list of specific variables: +##end +# +##variable +# CPACK_RPM_PACKAGE_SUMMARY - The RPM package summary. +# Mandatory : YES +# Default : CPACK_PACKAGE_DESCRIPTION_SUMMARY +##end +##variable +# CPACK_RPM_PACKAGE_NAME - The RPM package name. +# Mandatory : YES +# Default : CPACK_PACKAGE_NAME +##end +##variable +# CPACK_RPM_PACKAGE_VERSION - The RPM package version. +# Mandatory : YES +# Default : CPACK_PACKAGE_VERSION +##end +##variable +# CPACK_RPM_PACKAGE_ARCHITECTURE - The RPM package architecture. +# Mandatory : NO +# Default : - +# This may be set to "noarch" if you +# know you are building a noarch package. +##end +##variable +# CPACK_RPM_PACKAGE_RELEASE - The RPM package release. +# Mandatory : YES +# Default : 1 +# This is the numbering of the RPM package +# itself, i.e. the version of the packaging and not the version of the +# content (see CPACK_RPM_PACKAGE_VERSION). One may change the default +# value if the previous packaging was buggy and/or you want to put here +# a fancy Linux distro specific numbering. +##end +##variable +# CPACK_RPM_PACKAGE_LICENSE - The RPM package license policy. +# Mandatory : YES +# Default : "unknown" +##end +##variable +# CPACK_RPM_PACKAGE_GROUP - The RPM package group. +# Mandatory : YES +# Default : "unknown" +##end +##variable +# CPACK_RPM_PACKAGE_VENDOR - The RPM package vendor. +# Mandatory : YES +# Default : CPACK_PACKAGE_VENDOR if set or "unknown" +##end +##variable +# CPACK_RPM_PACKAGE_URL - The projects URL. +# Mandatory : NO +# Default : - +##end +##variable +# CPACK_RPM_PACKAGE_DESCRIPTION - RPM package description. +# Mandatory : YES +# Default : CPACK_PACKAGE_DESCRIPTION_FILE if set or "no package description available" +##end +##variable +# CPACK_RPM_COMPRESSION_TYPE - RPM compression type. +# Mandatory : NO +# Default : - +# May be used to override RPM compression type to be used +# to build the RPM. For example some Linux distribution now default +# to lzma or xz compression whereas older cannot use such RPM. +# Using this one can enforce compression type to be used. +# Possible value are: lzma, xz, bzip2 and gzip. +##end +##variable +# CPACK_RPM_PACKAGE_REQUIRES - RPM spec requires field. +# Mandatory : NO +# Default : - +# May be used to set RPM dependencies (requires). +# Note that you must enclose the complete requires string between quotes, +# for example: +# set(CPACK_RPM_PACKAGE_REQUIRES "python >= 2.5.0, cmake >= 2.8") +# The required package list of an RPM file could be printed with +# rpm -qp --requires file.rpm +##end +##variable +# CPACK_RPM_PACKAGE_SUGGESTS - RPM spec suggest field. +# Mandatory : NO +# Default : - +# May be used to set weak RPM dependencies (suggests). +# Note that you must enclose the complete requires string between quotes. +##end +##variable +# CPACK_RPM_PACKAGE_PROVIDES - RPM spec provides field. +# Mandatory : NO +# Default : - +# May be used to set RPM dependencies (provides). +# The provided package list of an RPM file could be printed with +# rpm -qp --provides file.rpm +##end +##variable +# CPACK_RPM_PACKAGE_OBSOLETES - RPM spec obsoletes field. +# Mandatory : NO +# Default : - +# May be used to set RPM packages that are obsoleted by this one. +##end +##variable +# CPACK_RPM_PACKAGE_RELOCATABLE - build a relocatable RPM. +# Mandatory : NO +# Default : CPACK_PACKAGE_RELOCATABLE +# If this variable is set to TRUE or ON CPackRPM will try +# to build a relocatable RPM package. A relocatable RPM may +# be installed using rpm --prefix or --relocate in order to +# install it at an alternate place see rpm(8). +# Note that currently this may fail if CPACK_SET_DESTDIR is set to ON. +# If CPACK_SET_DESTDIR is set then you will get a warning message +# but if there is file installed with absolute path you'll get +# unexpected behavior. +##end +##variable +# CPACK_RPM_SPEC_INSTALL_POST - [deprecated]. +# Mandatory : NO +# Default : - +# This way of specifying post-install script is deprecated use +# CPACK_RPM_POST_INSTALL_SCRIPT_FILE +# May be used to set an RPM post-install command inside the spec file. +# For example setting it to "/bin/true" may be used to prevent +# rpmbuild to strip binaries. +##end +##variable +# CPACK_RPM_SPEC_MORE_DEFINE - RPM extended spec definitions lines. +# Mandatory : NO +# Default : - +# May be used to add any %define lines to the generated spec file. +##end +##variable +# CPACK_RPM_PACKAGE_DEBUG - Toggle CPackRPM debug output. +# Mandatory : NO +# Default : - +# May be set when invoking cpack in order to trace debug information +# during CPack RPM run. For example you may launch CPack like this +# cpack -D CPACK_RPM_PACKAGE_DEBUG=1 -G RPM +##end +##variable +# CPACK_RPM_USER_BINARY_SPECFILE - A user provided spec file. +# Mandatory : NO +# Default : - +# May be set by the user in order to specify a USER binary spec file +# to be used by CPackRPM instead of generating the file. +# The specified file will be processed by CONFIGURE_FILE( @ONLY). +##end +##variable +# CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE - Spec file template. +# Mandatory : NO +# Default : - +# If set CPack will generate a template for USER specified binary +# spec file and stop with an error. For example launch CPack like this +# cpack -D CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE=1 -G RPM +# The user may then use this file in order to hand-craft is own +# binary spec file which may be used with CPACK_RPM_USER_BINARY_SPECFILE. +##end +##variable +# CPACK_RPM_PRE_INSTALL_SCRIPT_FILE +# CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE +# Mandatory : NO +# Default : - +# May be used to embed a pre (un)installation script in the spec file. +# The refered script file(s) will be read and directly +# put after the %pre or %preun section +# If CPACK_RPM_COMPONENT_INSTALL is set to ON the (un)install script for +# each component can be overridden with +# CPACK_RPM__PRE_INSTALL_SCRIPT_FILE and +# CPACK_RPM__PRE_UNINSTALL_SCRIPT_FILE +# One may verify which scriptlet has been included with +# rpm -qp --scripts package.rpm +##end +##variable +# CPACK_RPM_POST_INSTALL_SCRIPT_FILE +# CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE +# Mandatory : NO +# Default : - +# May be used to embed a post (un)installation script in the spec file. +# The refered script file(s) will be read and directly +# put after the %post or %postun section +# If CPACK_RPM_COMPONENT_INSTALL is set to ON the (un)install script for +# each component can be overridden with +# CPACK_RPM__POST_INSTALL_SCRIPT_FILE and +# CPACK_RPM__POST_UNINSTALL_SCRIPT_FILE +# One may verify which scriptlet has been included with +# rpm -qp --scripts package.rpm +##end +##variable +# CPACK_RPM_USER_FILELIST +# CPACK_RPM__USER_FILELIST +# Mandatory : NO +# Default : - +# May be used to explicitly specify %() file line +# in the spec file. Like %config(noreplace) or any other directive +# that be found in the %files section. Since CPackRPM is generating +# the list of files (and directories) the user specified files of +# the CPACK_RPM__USER_FILELIST list will be removed from the generated list. +##end +##variable +# CPACK_RPM_CHANGELOG_FILE - RPM changelog file. +# Mandatory : NO +# Default : - +# May be used to embed a changelog in the spec file. +# The refered file will be read and directly put after the %changelog +# section. +##end + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Author: Eric Noulard with the help of Alexander Neundorf. + +IF(CMAKE_BINARY_DIR) + MESSAGE(FATAL_ERROR "CPackRPM.cmake may only be used by CPack internally.") +ENDIF(CMAKE_BINARY_DIR) + +IF(NOT UNIX) + MESSAGE(FATAL_ERROR "CPackRPM.cmake may only be used under UNIX.") +ENDIF(NOT UNIX) + +# rpmbuild is the basic command for building RPM package +# it may be a simple (symbolic) link to rpm command. +FIND_PROGRAM(RPMBUILD_EXECUTABLE rpmbuild) + +# Check version of the rpmbuild tool this would be easier to +# track bugs with users and CPackRPM debug mode. +# We may use RPM version in order to check for available version dependent features +IF(RPMBUILD_EXECUTABLE) + execute_process(COMMAND ${RPMBUILD_EXECUTABLE} --version + OUTPUT_VARIABLE _TMP_VERSION + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX REPLACE "^.*\ " "" + RPMBUILD_EXECUTABLE_VERSION + ${_TMP_VERSION}) + IF(CPACK_RPM_PACKAGE_DEBUG) + MESSAGE("CPackRPM:Debug: rpmbuild version is <${RPMBUILD_EXECUTABLE_VERSION}>") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) +ENDIF(RPMBUILD_EXECUTABLE) + +IF(NOT RPMBUILD_EXECUTABLE) + MESSAGE(FATAL_ERROR "RPM package requires rpmbuild executable") +ENDIF(NOT RPMBUILD_EXECUTABLE) + +# Display lsb_release output if DEBUG mode enable +# This will help to diagnose problem with CPackRPM +# because we will know on which kind of Linux we are +IF(CPACK_RPM_PACKAGE_DEBUG) + find_program(LSB_RELEASE_EXECUTABLE lsb_release) + if(LSB_RELEASE_EXECUTABLE) + execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -a + OUTPUT_VARIABLE _TMP_LSB_RELEASE_OUTPUT + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX REPLACE "\n" ", " + LSB_RELEASE_OUTPUT + ${_TMP_LSB_RELEASE_OUTPUT}) + else (LSB_RELEASE_EXECUTABLE) + set(LSB_RELEASE_OUTPUT "lsb_release not installed/found!") + endif(LSB_RELEASE_EXECUTABLE) + MESSAGE("CPackRPM:Debug: LSB_RELEASE = ${LSB_RELEASE_OUTPUT}") +ENDIF(CPACK_RPM_PACKAGE_DEBUG) + +# We may use RPM version in the future in order +# to shut down warning about space in buildtree +# some recent RPM version should support space in different places. +# not checked [yet]. +IF(CPACK_TOPLEVEL_DIRECTORY MATCHES ".* .*") + MESSAGE(FATAL_ERROR "${RPMBUILD_EXECUTABLE} can't handle paths with spaces, use a build directory without spaces for building RPMs.") +ENDIF(CPACK_TOPLEVEL_DIRECTORY MATCHES ".* .*") + +# If rpmbuild is found +# we try to discover alien since we may be on non RPM distro like Debian. +# In this case we may try to to use more advanced features +# like generating RPM directly from DEB using alien. +# FIXME feature not finished (yet) +FIND_PROGRAM(ALIEN_EXECUTABLE alien) +IF(ALIEN_EXECUTABLE) + MESSAGE(STATUS "alien found, we may be on a Debian based distro.") +ENDIF(ALIEN_EXECUTABLE) + +# Are we packaging components ? +IF(CPACK_RPM_PACKAGE_COMPONENT) + SET(CPACK_RPM_PACKAGE_COMPONENT_PART_NAME "-${CPACK_RPM_PACKAGE_COMPONENT}") + SET(CPACK_RPM_PACKAGE_COMPONENT_PART_PATH "/${CPACK_RPM_PACKAGE_COMPONENT}") + SET(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${CPACK_RPM_PACKAGE_COMPONENT}") +ELSE(CPACK_RPM_PACKAGE_COMPONENT) + SET(CPACK_RPM_PACKAGE_COMPONENT_PART_NAME "") + SET(CPACK_RPM_PACKAGE_COMPONENT_PART_PATH "") + SET(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}") +ENDIF(CPACK_RPM_PACKAGE_COMPONENT) + +# +# Use user-defined RPM specific variables value +# or generate reasonable default value from +# CPACK_xxx generic values. +# The variables comes from the needed (mandatory or not) +# values found in the RPM specification file aka ".spec" file. +# The variables which may/should be defined are: +# + +# CPACK_RPM_PACKAGE_SUMMARY (mandatory) +IF(NOT CPACK_RPM_PACKAGE_SUMMARY) + # if neither var is defined lets use the name as summary + IF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY) + STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_RPM_PACKAGE_SUMMARY) + ELSE(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY) + SET(CPACK_RPM_PACKAGE_SUMMARY ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}) + ENDIF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY) +ENDIF(NOT CPACK_RPM_PACKAGE_SUMMARY) + +# CPACK_RPM_PACKAGE_NAME (mandatory) +IF(NOT CPACK_RPM_PACKAGE_NAME) + STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_RPM_PACKAGE_NAME) +ENDIF(NOT CPACK_RPM_PACKAGE_NAME) + +# CPACK_RPM_PACKAGE_VERSION (mandatory) +IF(NOT CPACK_RPM_PACKAGE_VERSION) + IF(NOT CPACK_PACKAGE_VERSION) + MESSAGE(FATAL_ERROR "RPM package requires a package version") + ENDIF(NOT CPACK_PACKAGE_VERSION) + SET(CPACK_RPM_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}) +ENDIF(NOT CPACK_RPM_PACKAGE_VERSION) +# Replace '-' in version with '_' +# '-' character is an Illegal RPM version character +# it is illegal because it is used to separate +# RPM "Version" from RPM "Release" +STRING(REPLACE "-" "_" CPACK_RPM_PACKAGE_VERSION ${CPACK_RPM_PACKAGE_VERSION}) + +# CPACK_RPM_PACKAGE_ARCHITECTURE (optional) +IF(CPACK_RPM_PACKAGE_ARCHITECTURE) + SET(TMP_RPM_BUILDARCH "Buildarch: ${CPACK_RPM_PACKAGE_ARCHITECTURE}") + IF(CPACK_RPM_PACKAGE_DEBUG) + MESSAGE("CPackRPM:Debug: using user-specified build arch = ${CPACK_RPM_PACKAGE_ARCHITECTURE}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) +ELSE(CPACK_RPM_PACKAGE_ARCHITECTURE) + SET(TMP_RPM_BUILDARCH "") +ENDIF(CPACK_RPM_PACKAGE_ARCHITECTURE) + +# CPACK_RPM_PACKAGE_RELEASE +# The RPM release is the numbering of the RPM package ITSELF +# this is the version of the PACKAGING and NOT the version +# of the CONTENT of the package. +# You may well need to generate a new RPM package release +# without changing the version of the packaged software. +# This is the case when the packaging is buggy (not) the software :=) +# If not set, 1 is a good candidate +IF(NOT CPACK_RPM_PACKAGE_RELEASE) + SET(CPACK_RPM_PACKAGE_RELEASE 1) +ENDIF(NOT CPACK_RPM_PACKAGE_RELEASE) + +# CPACK_RPM_PACKAGE_LICENSE +IF(NOT CPACK_RPM_PACKAGE_LICENSE) + SET(CPACK_RPM_PACKAGE_LICENSE "unknown") +ENDIF(NOT CPACK_RPM_PACKAGE_LICENSE) + +# CPACK_RPM_PACKAGE_GROUP +IF(NOT CPACK_RPM_PACKAGE_GROUP) + SET(CPACK_RPM_PACKAGE_GROUP "unknown") +ENDIF(NOT CPACK_RPM_PACKAGE_GROUP) + +# CPACK_RPM_PACKAGE_VENDOR +IF(NOT CPACK_RPM_PACKAGE_VENDOR) + IF(CPACK_PACKAGE_VENDOR) + SET(CPACK_RPM_PACKAGE_VENDOR "${CPACK_PACKAGE_VENDOR}") + ELSE(CPACK_PACKAGE_VENDOR) + SET(CPACK_RPM_PACKAGE_VENDOR "unknown") + ENDIF(CPACK_PACKAGE_VENDOR) +ENDIF(NOT CPACK_RPM_PACKAGE_VENDOR) + +# CPACK_RPM_PACKAGE_SOURCE +# The name of the source tarball in case we generate a source RPM + +# CPACK_RPM_PACKAGE_DESCRIPTION +# The variable content may be either +# - explicitly given by the user or +# - filled with the content of CPACK_PACKAGE_DESCRIPTION_FILE +# if it is defined +# - set to a default value +# +IF (NOT CPACK_RPM_PACKAGE_DESCRIPTION) + IF (CPACK_PACKAGE_DESCRIPTION_FILE) + FILE(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_RPM_PACKAGE_DESCRIPTION) + ELSE (CPACK_PACKAGE_DESCRIPTION_FILE) + SET(CPACK_RPM_PACKAGE_DESCRIPTION "no package description available") + ENDIF (CPACK_PACKAGE_DESCRIPTION_FILE) +ENDIF (NOT CPACK_RPM_PACKAGE_DESCRIPTION) + +# CPACK_RPM_COMPRESSION_TYPE +# +IF (CPACK_RPM_COMPRESSION_TYPE) + IF(CPACK_RPM_PACKAGE_DEBUG) + MESSAGE("CPackRPM:Debug: User Specified RPM compression type: ${CPACK_RPM_COMPRESSION_TYPE}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) + IF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "lzma") + SET(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.lzdio") + ENDIF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "lzma") + IF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "xz") + SET(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w7.xzdio") + ENDIF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "xz") + IF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "bzip2") + SET(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.bzdio") + ENDIF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "bzip2") + IF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "gzip") + SET(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.gzdio") + ENDIF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "gzip") +ELSE(CPACK_RPM_COMPRESSION_TYPE) + SET(CPACK_RPM_COMPRESSION_TYPE_TMP "") +ENDIF(CPACK_RPM_COMPRESSION_TYPE) + +if(CPACK_PACKAGE_RELOCATABLE) + set(CPACK_RPM_PACKAGE_RELOCATABLE TRUE) +endif(CPACK_PACKAGE_RELOCATABLE) +if(CPACK_RPM_PACKAGE_RELOCATABLE) + if(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: Trying to build a relocatable package") + endif(CPACK_RPM_PACKAGE_DEBUG) + if(CPACK_SET_DESTDIR AND (NOT CPACK_SET_DESTDIR STREQUAL "I_ON")) + message("CPackRPM:Warning: CPACK_SET_DESTDIR is set (=${CPACK_SET_DESTDIR}) while requesting a relocatable package (CPACK_RPM_PACKAGE_RELOCATABLE is set): this is not supported, the package won't be relocatable.") + else(CPACK_SET_DESTDIR AND (NOT CPACK_SET_DESTDIR STREQUAL "I_ON")) + set(CPACK_RPM_PACKAGE_PREFIX ${CPACK_PACKAGING_INSTALL_PREFIX}) + endif(CPACK_SET_DESTDIR AND (NOT CPACK_SET_DESTDIR STREQUAL "I_ON")) +endif(CPACK_RPM_PACKAGE_RELOCATABLE) + +# Check if additional fields for RPM spec header are given +# There may be some COMPONENT specific variables as well +FOREACH(_RPM_SPEC_HEADER URL REQUIRES SUGGESTS PROVIDES OBSOLETES PREFIX CONFLICTS AUTOPROV AUTOREQ AUTOREQPROV) + IF(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: processing ${_RPM_SPEC_HEADER}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) + if(CPACK_RPM_PACKAGE_COMPONENT) + if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${_RPM_SPEC_HEADER}) + IF(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: using CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${_RPM_SPEC_HEADER}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) + set(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${_RPM_SPEC_HEADER}}) + else() + IF(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${_RPM_SPEC_HEADER} not defined") + message("CPackRPM:Debug: using CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) + set(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}}) + endif() + else() + IF(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: using CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) + set(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}}) + endif() + + IF(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP) + STRING(LENGTH ${_RPM_SPEC_HEADER} _PACKAGE_HEADER_STRLENGTH) + MATH(EXPR _PACKAGE_HEADER_STRLENGTH "${_PACKAGE_HEADER_STRLENGTH} - 1") + STRING(SUBSTRING ${_RPM_SPEC_HEADER} 1 ${_PACKAGE_HEADER_STRLENGTH} _PACKAGE_HEADER_TAIL) + STRING(TOLOWER "${_PACKAGE_HEADER_TAIL}" _PACKAGE_HEADER_TAIL) + STRING(SUBSTRING ${_RPM_SPEC_HEADER} 0 1 _PACKAGE_HEADER_NAME) + SET(_PACKAGE_HEADER_NAME "${_PACKAGE_HEADER_NAME}${_PACKAGE_HEADER_TAIL}") + IF(CPACK_RPM_PACKAGE_DEBUG) + MESSAGE("CPackRPM:Debug: User defined ${_PACKAGE_HEADER_NAME}:\n ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) + SET(TMP_RPM_${_RPM_SPEC_HEADER} "${_PACKAGE_HEADER_NAME}: ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP}") +ENDIF(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP) +ENDFOREACH(_RPM_SPEC_HEADER) + +# CPACK_RPM_SPEC_INSTALL_POST +# May be used to define a RPM post intallation script +# for example setting it to "/bin/true" may prevent +# rpmbuild from stripping binaries. +IF(CPACK_RPM_SPEC_INSTALL_POST) + IF(CPACK_RPM_PACKAGE_DEBUG) + MESSAGE("CPackRPM:Debug: User defined CPACK_RPM_SPEC_INSTALL_POST = ${CPACK_RPM_SPEC_INSTALL_POST}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) + SET(TMP_RPM_SPEC_INSTALL_POST "%define __spec_install_post ${CPACK_RPM_SPEC_INSTALL_POST}") +ENDIF(CPACK_RPM_SPEC_INSTALL_POST) + +# CPACK_RPM_POST_INSTALL_SCRIPT_FILE (or CPACK_RPM__POST_INSTALL_SCRIPT_FILE) +# CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE (or CPACK_RPM__POST_UNINSTALL_SCRIPT_FILE) +# May be used to embed a post (un)installation script in the spec file. +# The refered script file(s) will be read and directly +# put after the %post or %postun section +if(CPACK_RPM_PACKAGE_COMPONENT) + if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_INSTALL_SCRIPT_FILE) + set(CPACK_RPM_POST_INSTALL_READ_FILE ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_INSTALL_SCRIPT_FILE}) + else() + set(CPACK_RPM_POST_INSTALL_READ_FILE ${CPACK_RPM_POST_INSTALL_SCRIPT_FILE}) + endif() + if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_UNINSTALL_SCRIPT_FILE) + set(CPACK_RPM_POST_UNINSTALL_READ_FILE ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_UNINSTALL_SCRIPT_FILE}) + else(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_UNINSTALL_SCRIPT_FILE) + set(CPACK_RPM_POST_UNINSTALL_READ_FILE ${CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE}) + endif(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_UNINSTALL_SCRIPT_FILE) +else(CPACK_RPM_PACKAGE_COMPONENT) + set(CPACK_RPM_POST_INSTALL_READ_FILE ${CPACK_RPM_POST_INSTALL_SCRIPT_FILE}) + set(CPACK_RPM_POST_UNINSTALL_READ_FILE ${CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE}) +endif(CPACK_RPM_PACKAGE_COMPONENT) + +# Handle post-install file if it has been specified +if(CPACK_RPM_POST_INSTALL_READ_FILE) + if(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE}) + file(READ ${CPACK_RPM_POST_INSTALL_READ_FILE} CPACK_RPM_SPEC_POSTINSTALL) + else(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE}) + message("CPackRPM:Warning: CPACK_RPM_POST_INSTALL_SCRIPT_FILE <${CPACK_RPM_POST_INSTALL_READ_FILE}> does not exists - ignoring") + endif(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE}) +else(CPACK_RPM_POST_INSTALL_READ_FILE) + # reset SPEC var value if no post install file has been specified + # (either globally or component-wise) + set(CPACK_RPM_SPEC_POSTINSTALL "") +endif(CPACK_RPM_POST_INSTALL_READ_FILE) + +# Handle post-uninstall file if it has been specified +if(CPACK_RPM_POST_UNINSTALL_READ_FILE) + if(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE}) + file(READ ${CPACK_RPM_POST_UNINSTALL_READ_FILE} CPACK_RPM_SPEC_POSTUNINSTALL) + else(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE}) + message("CPackRPM:Warning: CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE <${CPACK_RPM_POST_UNINSTALL_READ_FILE}> does not exists - ignoring") + endif(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE}) +else(CPACK_RPM_POST_UNINSTALL_READ_FILE) + # reset SPEC var value if no post uninstall file has been specified + # (either globally or component-wise) + set(CPACK_RPM_SPEC_POSTUNINSTALL "") +endif(CPACK_RPM_POST_UNINSTALL_READ_FILE) + +# CPACK_RPM_PRE_INSTALL_SCRIPT_FILE (or CPACK_RPM__PRE_INSTALL_SCRIPT_FILE) +# CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE (or CPACK_RPM__PRE_UNINSTALL_SCRIPT_FILE) +# May be used to embed a pre (un)installation script in the spec file. +# The refered script file(s) will be read and directly +# put after the %pre or %preun section +if(CPACK_RPM_PACKAGE_COMPONENT) + if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_INSTALL_SCRIPT_FILE) + set(CPACK_RPM_PRE_INSTALL_READ_FILE ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_INSTALL_SCRIPT_FILE}) + else(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_INSTALL_SCRIPT_FILE) + set(CPACK_RPM_PRE_INSTALL_READ_FILE ${CPACK_RPM_PRE_INSTALL_SCRIPT_FILE}) + endif(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_INSTALL_SCRIPT_FILE) + if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_UNINSTALL_SCRIPT_FILE) + set(CPACK_RPM_PRE_UNINSTALL_READ_FILE ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_UNINSTALL_SCRIPT_FILE}) + else(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_UNINSTALL_SCRIPT_FILE) + set(CPACK_RPM_PRE_UNINSTALL_READ_FILE ${CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE}) + endif(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_UNINSTALL_SCRIPT_FILE) +else(CPACK_RPM_PACKAGE_COMPONENT) + set(CPACK_RPM_PRE_INSTALL_READ_FILE ${CPACK_RPM_PRE_INSTALL_SCRIPT_FILE}) + set(CPACK_RPM_PRE_UNINSTALL_READ_FILE ${CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE}) +endif(CPACK_RPM_PACKAGE_COMPONENT) + +# Handle pre-install file if it has been specified +if(CPACK_RPM_PRE_INSTALL_READ_FILE) + if(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE}) + file(READ ${CPACK_RPM_PRE_INSTALL_READ_FILE} CPACK_RPM_SPEC_PREINSTALL) + else(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE}) + message("CPackRPM:Warning: CPACK_RPM_PRE_INSTALL_SCRIPT_FILE <${CPACK_RPM_PRE_INSTALL_READ_FILE}> does not exists - ignoring") + endif(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE}) +else(CPACK_RPM_PRE_INSTALL_READ_FILE) + # reset SPEC var value if no pre-install file has been specified + # (either globally or component-wise) + set(CPACK_RPM_SPEC_PREINSTALL "") +endif(CPACK_RPM_PRE_INSTALL_READ_FILE) + +# Handle pre-uninstall file if it has been specified +if(CPACK_RPM_PRE_UNINSTALL_READ_FILE) + if(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE}) + file(READ ${CPACK_RPM_PRE_UNINSTALL_READ_FILE} CPACK_RPM_SPEC_PREUNINSTALL) + else(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE}) + message("CPackRPM:Warning: CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE <${CPACK_RPM_PRE_UNINSTALL_READ_FILE}> does not exists - ignoring") + endif(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE}) +else(CPACK_RPM_PRE_UNINSTALL_READ_FILE) + # reset SPEC var value if no pre-uninstall file has been specified + # (either globally or component-wise) + set(CPACK_RPM_SPEC_PREUNINSTALL "") +endif(CPACK_RPM_PRE_UNINSTALL_READ_FILE) + +# CPACK_RPM_CHANGELOG_FILE +# May be used to embed a changelog in the spec file. +# The refered file will be read and directly put after the %changelog section +if(CPACK_RPM_CHANGELOG_FILE) + if(EXISTS ${CPACK_RPM_CHANGELOG_FILE}) + file(READ ${CPACK_RPM_CHANGELOG_FILE} CPACK_RPM_SPEC_CHANGELOG) + else(EXISTS ${CPACK_RPM_CHANGELOG_FILE}) + message(SEND_ERROR "CPackRPM:Warning: CPACK_RPM_CHANGELOG_FILE <${CPACK_RPM_CHANGELOG_FILE}> does not exists - ignoring") + endif(EXISTS ${CPACK_RPM_CHANGELOG_FILE}) +else(CPACK_RPM_CHANGELOG_FILE) + set(CPACK_RPM_SPEC_CHANGELOG "* Sun Jul 4 2010 Erk \n Generated by CPack RPM (no Changelog file were provided)") +endif(CPACK_RPM_CHANGELOG_FILE) + +# CPACK_RPM_SPEC_MORE_DEFINE +# This is a generated spec rpm file spaceholder +IF(CPACK_RPM_SPEC_MORE_DEFINE) + IF(CPACK_RPM_PACKAGE_DEBUG) + MESSAGE("CPackRPM:Debug: User defined more define spec line specified:\n ${CPACK_RPM_SPEC_MORE_DEFINE}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) +ENDIF(CPACK_RPM_SPEC_MORE_DEFINE) + +# Now we may create the RPM build tree structure +SET(CPACK_RPM_ROOTDIR "${CPACK_TOPLEVEL_DIRECTORY}") +MESSAGE(STATUS "CPackRPM:Debug: Using CPACK_RPM_ROOTDIR=${CPACK_RPM_ROOTDIR}") +# Prepare RPM build tree +FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}) +FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/tmp) +FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/BUILD) +FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/RPMS) +FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SOURCES) +FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SPECS) +FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SRPMS) + +#SET(CPACK_RPM_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}-${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm") +SET(CPACK_RPM_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}") +# it seems rpmbuild can't handle spaces in the path +# neither escaping (as below) nor putting quotes around the path seem to help +#STRING(REGEX REPLACE " " "\\\\ " CPACK_RPM_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}") +SET(CPACK_RPM_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}") + +# Use files tree to construct files command (spec file) +# We should not forget to include symlinks (thus -o -type l) +# We should include directory as well (thus -type d) +# but not the main local dir "." (thus -a -not -name ".") +# We must remove the './' due to the local search and escape the +# file name by enclosing it between double quotes (thus the sed) +# Then we must authorize any man pages extension (adding * at the end) +# because rpmbuild may automatically compress those files +EXECUTE_PROCESS(COMMAND find . -type f -o -type l -o (-type d -a -not -name ".") + COMMAND sed s:.*/man.*/.*:&*: + COMMAND sed s/\\.\\\(.*\\\)/\"\\1\"/ + WORKING_DIRECTORY "${WDIR}" + OUTPUT_VARIABLE CPACK_RPM_INSTALL_FILES) + +# In component case, put CPACK_ABSOLUTE_DESTINATION_FILES_ +# into CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL +# otherwise, put CPACK_ABSOLUTE_DESTINATION_FILES +# This must be done BEFORE the CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL handling +if(CPACK_RPM_PACKAGE_COMPONENT) + if(CPACK_ABSOLUTE_DESTINATION_FILES) + set(COMPONENT_FILES_TAG "CPACK_ABSOLUTE_DESTINATION_FILES_${CPACK_RPM_PACKAGE_COMPONENT}") + set(CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL "${${COMPONENT_FILES_TAG}}") + if(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: Handling Absolute Destination Files: <${CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL}>") + message("CPackRPM:Debug: in component = ${CPACK_RPM_PACKAGE_COMPONENT}") + endif(CPACK_RPM_PACKAGE_DEBUG) + endif() +else() + if(CPACK_ABSOLUTE_DESTINATION_FILES) + set(CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL "${CPACK_ABSOLUTE_DESTINATION_FILES}") + endif() +endif() + +# In component case, set CPACK_RPM_USER_FILELIST_INTERNAL with CPACK_RPM__USER_FILELIST. +if(CPACK_RPM_PACKAGE_COMPONENT) + if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_USER_FILELIST) + set(CPACK_RPM_USER_FILELIST_INTERNAL ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_USER_FILELIST}) + if(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: Handling User Filelist: <${CPACK_RPM_USER_FILELIST_INTERNAL}>") + message("CPackRPM:Debug: in component = ${CPACK_RPM_PACKAGE_COMPONENT}") + endif(CPACK_RPM_PACKAGE_DEBUG) + else() + set(CPACK_RPM_USER_FILELIST_INTERNAL "") + endif() +else() + if(CPACK_RPM_USER_FILELIST) + set(CPACK_RPM_USER_FILELIST_INTERNAL "${CPACK_RPM_USER_FILELIST}") + else() + set(CPACK_RPM_USER_FILELIST_INTERNAL "") + endif() +endif() + +# Handle user specified file line list in CPACK_RPM_USER_FILELIST_INTERNAL +# Remove those files from CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL +# or CPACK_RPM_INSTALL_FILES, +# hence it must be done before these auto-generated lists are processed. +if(CPACK_RPM_USER_FILELIST_INTERNAL) + IF(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: Handling User Filelist: <${CPACK_RPM_USER_FILELIST_INTERNAL}>") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) + + # Create CMake list from CPACK_RPM_INSTALL_FILES + string(STRIP "${CPACK_RPM_INSTALL_FILES}" CPACK_RPM_INSTALL_FILES_LIST) + string(REPLACE "\n" ";" CPACK_RPM_INSTALL_FILES_LIST + "${CPACK_RPM_INSTALL_FILES_LIST}") + string(REPLACE "\"" "" CPACK_RPM_INSTALL_FILES_LIST + "${CPACK_RPM_INSTALL_FILES_LIST}") + + set(CPACK_RPM_USER_INSTALL_FILES "") + foreach(F IN LISTS CPACK_RPM_USER_FILELIST_INTERNAL) + string(REGEX REPLACE "%[A-Za-z\(\)]* " "" F_PATH ${F}) + string(REGEX MATCH "%[A-Za-z\(\)]*" F_PREFIX ${F}) + + if(F_PREFIX) + set(F_PREFIX "${F_PREFIX} ") + endif() + # Rebuild the user list file + set(CPACK_RPM_USER_INSTALL_FILES "${CPACK_RPM_USER_INSTALL_FILES}${F_PREFIX}\"${F_PATH}\"\n") + + # Remove from CPACK_RPM_INSTALL_FILES and CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL + list(REMOVE_ITEM CPACK_RPM_INSTALL_FILES_LIST ${F_PATH}) + list(REMOVE_ITEM CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL ${F_PATH}) + + endforeach() + + # Rebuild CPACK_RPM_INSTALL_FILES + set(CPACK_RPM_INSTALL_FILES "") + foreach(F IN LISTS CPACK_RPM_INSTALL_FILES_LIST) + set(CPACK_RPM_INSTALL_FILES "${CPACK_RPM_INSTALL_FILES}\"${F}\"\n") + endforeach(F) +else() + set(CPACK_RPM_USER_INSTALL_FILES "") +endif() + +if (CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL) + IF(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: Handling Absolute Destination Files: ${CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) + # Remove trailing space + string(STRIP "${CPACK_RPM_INSTALL_FILES}" CPACK_RPM_INSTALL_FILES_LIST) + # Transform endline separated - string into CMake List + string(REPLACE "\n" ";" CPACK_RPM_INSTALL_FILES_LIST "${CPACK_RPM_INSTALL_FILES_LIST}") + # Remove unecessary quotes + string(REPLACE "\"" "" CPACK_RPM_INSTALL_FILES_LIST "${CPACK_RPM_INSTALL_FILES_LIST}") + # Remove ABSOLUTE install file from INSTALL FILE LIST + list(REMOVE_ITEM CPACK_RPM_INSTALL_FILES_LIST ${CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL}) + # Rebuild INSTALL_FILES + set(CPACK_RPM_INSTALL_FILES "") + foreach(F IN LISTS CPACK_RPM_INSTALL_FILES_LIST) + set(CPACK_RPM_INSTALL_FILES "${CPACK_RPM_INSTALL_FILES}\"${F}\"\n") + endforeach(F) + # Build ABSOLUTE_INSTALL_FILES + set(CPACK_RPM_ABSOLUTE_INSTALL_FILES "") + foreach(F IN LISTS CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL) + set(CPACK_RPM_ABSOLUTE_INSTALL_FILES "${CPACK_RPM_ABSOLUTE_INSTALL_FILES}%config \"${F}\"\n") + endforeach(F) + IF(CPACK_RPM_PACKAGE_DEBUG) + message("CPackRPM:Debug: CPACK_RPM_ABSOLUTE_INSTALL_FILES=${CPACK_RPM_ABSOLUTE_INSTALL_FILES}") + message("CPackRPM:Debug: CPACK_RPM_INSTALL_FILES=${CPACK_RPM_INSTALL_FILES}") + ENDIF(CPACK_RPM_PACKAGE_DEBUG) +else() + # reset vars in order to avoid leakage of value(s) from one component to another + set(CPACK_RPM_ABSOLUTE_INSTALL_FILES "") +endif(CPACK_ABSOLUTE_DESTINATION_FILES_INTERNAL) + +# Prepend directories in ${CPACK_RPM_INSTALL_FILES} with %dir +# This is necessary to avoid duplicate files since rpmbuild do +# recursion on its own when encountering a pathname which is a directory +# which is not flagged as %dir +string(STRIP "${CPACK_RPM_INSTALL_FILES}" CPACK_RPM_INSTALL_FILES_LIST) +string(REPLACE "\n" ";" CPACK_RPM_INSTALL_FILES_LIST + "${CPACK_RPM_INSTALL_FILES_LIST}") +string(REPLACE "\"" "" CPACK_RPM_INSTALL_FILES_LIST + "${CPACK_RPM_INSTALL_FILES_LIST}") +set(CPACK_RPM_INSTALL_FILES "") +foreach(F IN LISTS CPACK_RPM_INSTALL_FILES_LIST) + if(IS_DIRECTORY "${WDIR}/${F}") + set(CPACK_RPM_INSTALL_FILES "${CPACK_RPM_INSTALL_FILES}%dir \"${F}\"\n") + else() + set(CPACK_RPM_INSTALL_FILES "${CPACK_RPM_INSTALL_FILES}\"${F}\"\n") + endif() +endforeach(F) +set(CPACK_RPM_INSTALL_FILES_LIST "") + +# The name of the final spec file to be used by rpmbuild +SET(CPACK_RPM_BINARY_SPECFILE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.spec") + +# Print out some debug information if we were asked for that +IF(CPACK_RPM_PACKAGE_DEBUG) + MESSAGE("CPackRPM:Debug: CPACK_TOPLEVEL_DIRECTORY = ${CPACK_TOPLEVEL_DIRECTORY}") + MESSAGE("CPackRPM:Debug: CPACK_TOPLEVEL_TAG = ${CPACK_TOPLEVEL_TAG}") + MESSAGE("CPackRPM:Debug: CPACK_TEMPORARY_DIRECTORY = ${CPACK_TEMPORARY_DIRECTORY}") + MESSAGE("CPackRPM:Debug: CPACK_OUTPUT_FILE_NAME = ${CPACK_OUTPUT_FILE_NAME}") + MESSAGE("CPackRPM:Debug: CPACK_OUTPUT_FILE_PATH = ${CPACK_OUTPUT_FILE_PATH}") + MESSAGE("CPackRPM:Debug: CPACK_PACKAGE_FILE_NAME = ${CPACK_PACKAGE_FILE_NAME}") + MESSAGE("CPackRPM:Debug: CPACK_RPM_BINARY_SPECFILE = ${CPACK_RPM_BINARY_SPECFILE}") + MESSAGE("CPackRPM:Debug: CPACK_PACKAGE_INSTALL_DIRECTORY = ${CPACK_PACKAGE_INSTALL_DIRECTORY}") + MESSAGE("CPackRPM:Debug: CPACK_TEMPORARY_PACKAGE_FILE_NAME = ${CPACK_TEMPORARY_PACKAGE_FILE_NAME}") +ENDIF(CPACK_RPM_PACKAGE_DEBUG) + +# USER generated spec file handling. +# We should generate a spec file template: +# - either because the user asked for it : CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE +# - or the user did not provide one : NOT CPACK_RPM_USER_BINARY_SPECFILE +# +IF(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE OR NOT CPACK_RPM_USER_BINARY_SPECFILE) + FILE(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in + "# -*- rpm-spec -*- +BuildRoot: \@CPACK_RPM_DIRECTORY\@/\@CPACK_PACKAGE_FILE_NAME\@\@CPACK_RPM_PACKAGE_COMPONENT_PART_PATH\@ +Summary: \@CPACK_RPM_PACKAGE_SUMMARY\@ +Name: \@CPACK_RPM_PACKAGE_NAME\@\@CPACK_RPM_PACKAGE_COMPONENT_PART_NAME\@ +Version: \@CPACK_RPM_PACKAGE_VERSION\@ +Release: \@CPACK_RPM_PACKAGE_RELEASE\@ +License: \@CPACK_RPM_PACKAGE_LICENSE\@ +Group: \@CPACK_RPM_PACKAGE_GROUP\@ +Vendor: \@CPACK_RPM_PACKAGE_VENDOR\@ +\@TMP_RPM_URL\@ +\@TMP_RPM_REQUIRES\@ +\@TMP_RPM_PROVIDES\@ +\@TMP_RPM_OBSOLETES\@ +\@TMP_RPM_CONFLICTS\@ +\@TMP_RPM_AUTOPROV\@ +\@TMP_RPM_AUTOREQ\@ +\@TMP_RPM_AUTOREQPROV\@ +\@TMP_RPM_BUILDARCH\@ +\@TMP_RPM_PREFIX\@ + +%define _rpmdir \@CPACK_RPM_DIRECTORY\@ +%define _rpmfilename \@CPACK_RPM_FILE_NAME\@ +%define _unpackaged_files_terminate_build 0 +%define _topdir \@CPACK_RPM_DIRECTORY\@ +\@TMP_RPM_SPEC_INSTALL_POST\@ +\@CPACK_RPM_SPEC_MORE_DEFINE\@ +\@CPACK_RPM_COMPRESSION_TYPE_TMP\@ + +%description +\@CPACK_RPM_PACKAGE_DESCRIPTION\@ + +# This is a shortcutted spec file generated by CMake RPM generator +# we skip _install step because CPack does that for us. +# We do only save CPack installed tree in _prepr +# and then restore it in build. +%prep +mv $RPM_BUILD_ROOT \"\@CPACK_TOPLEVEL_DIRECTORY\@/tmpBBroot\" + +#p build + +%install +if [ -e $RPM_BUILD_ROOT ]; +then + rm -rf $RPM_BUILD_ROOT +fi +mv \"\@CPACK_TOPLEVEL_DIRECTORY\@/tmpBBroot\" $RPM_BUILD_ROOT + +%clean + +%post +\@CPACK_RPM_SPEC_POSTINSTALL\@ + +%postun +\@CPACK_RPM_SPEC_POSTUNINSTALL\@ + +%pre +\@CPACK_RPM_SPEC_PREINSTALL\@ + +%preun +\@CPACK_RPM_SPEC_PREUNINSTALL\@ + +%files +%defattr(-,root,root,-) +${CPACK_RPM_INSTALL_FILES} +${CPACK_RPM_ABSOLUTE_INSTALL_FILES} +${CPACK_RPM_USER_INSTALL_FILES} + +%changelog +\@CPACK_RPM_SPEC_CHANGELOG\@ +") + # Stop here if we were asked to only generate a template USER spec file + # The generated file may then be used as a template by user who wants + # to customize their own spec file. + IF(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE) + MESSAGE(FATAL_ERROR "CPackRPM: STOP here Generated USER binary spec file templare is: ${CPACK_RPM_BINARY_SPECFILE}.in") + ENDIF(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE) +ENDIF(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE OR NOT CPACK_RPM_USER_BINARY_SPECFILE) + +# After that we may either use a user provided spec file +# or generate one using appropriate variables value. +IF(CPACK_RPM_USER_BINARY_SPECFILE) + # User may have specified SPECFILE just use it + MESSAGE("CPackRPM: Will use USER specified spec file: ${CPACK_RPM_USER_BINARY_SPECFILE}") + # The user provided file is processed for @var replacement + CONFIGURE_FILE(${CPACK_RPM_USER_BINARY_SPECFILE} ${CPACK_RPM_BINARY_SPECFILE} @ONLY) +ELSE(CPACK_RPM_USER_BINARY_SPECFILE) + # No User specified spec file, will use the generated spec file + MESSAGE("CPackRPM: Will use GENERATED spec file: ${CPACK_RPM_BINARY_SPECFILE}") + # Note the just created file is processed for @var replacement + CONFIGURE_FILE(${CPACK_RPM_BINARY_SPECFILE}.in ${CPACK_RPM_BINARY_SPECFILE} @ONLY) +ENDIF(CPACK_RPM_USER_BINARY_SPECFILE) + +IF(RPMBUILD_EXECUTABLE) + # Now call rpmbuild using the SPECFILE + EXECUTE_PROCESS( + COMMAND "${RPMBUILD_EXECUTABLE}" -bb + --define "_topdir ${CPACK_RPM_DIRECTORY}" + --buildroot "${CPACK_RPM_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}" + "${CPACK_RPM_BINARY_SPECFILE}" + WORKING_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}" + RESULT_VARIABLE CPACK_RPMBUILD_EXEC_RESULT + ERROR_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.err" + OUTPUT_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.out") + IF(CPACK_RPM_PACKAGE_DEBUG OR CPACK_RPMBUILD_EXEC_RESULT) + FILE(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.err RPMBUILDERR) + FILE(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.out RPMBUILDOUT) + MESSAGE("CPackRPM:Debug: You may consult rpmbuild logs in: ") + MESSAGE("CPackRPM:Debug: - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.err") + MESSAGE("CPackRPM:Debug: *** ${RPMBUILDERR} ***") + MESSAGE("CPackRPM:Debug: - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.out") + MESSAGE("CPackRPM:Debug: *** ${RPMBUILDERR} ***") + ENDIF(CPACK_RPM_PACKAGE_DEBUG OR CPACK_RPMBUILD_EXEC_RESULT) +ELSE(RPMBUILD_EXECUTABLE) + IF(ALIEN_EXECUTABLE) + MESSAGE(FATAL_ERROR "RPM packaging through alien not done (yet)") + ENDIF(ALIEN_EXECUTABLE) +ENDIF(RPMBUILD_EXECUTABLE) diff --git a/Modules/CPackZIP.cmake b/Modules/CPackZIP.cmake new file mode 100644 index 0000000..99963cf --- /dev/null +++ b/Modules/CPackZIP.cmake @@ -0,0 +1,41 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(CMAKE_BINARY_DIR) + MESSAGE(FATAL_ERROR "CPackZIP.cmake may only be used by CPack internally.") +ENDIF(CMAKE_BINARY_DIR) + +FIND_PROGRAM(ZIP_EXECUTABLE wzzip PATHS "$ENV{ProgramFiles}/WinZip") +IF(ZIP_EXECUTABLE) + SET(CPACK_ZIP_COMMAND "\"${ZIP_EXECUTABLE}\" -P \"\" @") + SET(CPACK_ZIP_NEED_QUOTES TRUE) +ENDIF(ZIP_EXECUTABLE) + +IF(NOT ZIP_EXECUTABLE) + FIND_PROGRAM(ZIP_EXECUTABLE 7z PATHS "$ENV{ProgramFiles}/7-Zip") + IF(ZIP_EXECUTABLE) + SET(CPACK_ZIP_COMMAND "\"${ZIP_EXECUTABLE}\" a -tzip \"\" @") + SET(CPACK_ZIP_NEED_QUOTES TRUE) + ENDIF(ZIP_EXECUTABLE) +ENDIF(NOT ZIP_EXECUTABLE) + +IF(NOT ZIP_EXECUTABLE) + FIND_PACKAGE(Cygwin) + FIND_PROGRAM(ZIP_EXECUTABLE zip PATHS "${CYGWIN_INSTALL_PATH}/bin") + IF(ZIP_EXECUTABLE) + SET(CPACK_ZIP_COMMAND "\"${ZIP_EXECUTABLE}\" -r \"\" . -i@") + SET(CPACK_ZIP_NEED_QUOTES FALSE) + ENDIF(ZIP_EXECUTABLE) +ENDIF(NOT ZIP_EXECUTABLE) + diff --git a/Modules/CTest.cmake b/Modules/CTest.cmake new file mode 100644 index 0000000..ec9dbeb --- /dev/null +++ b/Modules/CTest.cmake @@ -0,0 +1,286 @@ +# - Configure a project for testing with CTest/CDash +# Include this module in the top CMakeLists.txt file of a project to +# enable testing with CTest and dashboard submissions to CDash: +# project(MyProject) +# ... +# include(CTest) +# The module automatically creates a BUILD_TESTING option that selects +# whether to enable testing support (ON by default). After including +# the module, use code like +# if(BUILD_TESTING) +# # ... CMake code to create tests ... +# endif() +# to creating tests when testing is enabled. +# +# To enable submissions to a CDash server, create a CTestConfig.cmake +# file at the top of the project with content such as +# set(CTEST_PROJECT_NAME "MyProject") +# set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC") +# set(CTEST_DROP_METHOD "http") +# set(CTEST_DROP_SITE "my.cdash.org") +# set(CTEST_DROP_LOCATION "/submit.php?project=MyProject") +# set(CTEST_DROP_SITE_CDASH TRUE) +# (the CDash server can provide the file to a project administrator +# who configures 'MyProject'). +# Settings in the config file are shared by both this CTest module and +# the CTest command-line tool's dashboard script mode (ctest -S). +# +# While building a project for submission to CDash, CTest scans the +# build output for errors and warnings and reports them with +# surrounding context from the build log. This generic approach works +# for all build tools, but does not give details about the command +# invocation that produced a given problem. One may get more detailed +# reports by adding +# set(CTEST_USE_LAUNCHERS 1) +# to the CTestConfig.cmake file. When this option is enabled, the +# CTest module tells CMake's Makefile generators to invoke every +# command in the generated build system through a CTest launcher +# program. (Currently the CTEST_USE_LAUNCHERS option is ignored on +# non-Makefile generators.) During a manual build each launcher +# transparently runs the command it wraps. During a CTest-driven +# build for submission to CDash each launcher reports detailed +# information when its command fails or warns. +# (Setting CTEST_USE_LAUNCHERS in CTestConfig.cmake is convenient, but +# also adds the launcher overhead even for manual builds. One may +# instead set it in a CTest dashboard script and add it to the CMake +# cache for the build tree.) + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +OPTION(BUILD_TESTING "Build the testing tree." ON) + +# function to turn generator name into a version string +# like vs7 vs71 vs8 vs9 +FUNCTION(GET_VS_VERSION_STRING generator var) + STRING(REGEX REPLACE "Visual Studio ([0-9][0-9]?)($|.*)" "\\1" + NUMBER "${generator}") + IF("${generator}" MATCHES "Visual Studio 7 .NET 2003") + SET(ver_string "vs71") + ELSE("${generator}" MATCHES "Visual Studio 7 .NET 2003") + SET(ver_string "vs${NUMBER}") + ENDIF("${generator}" MATCHES "Visual Studio 7 .NET 2003") + SET(${var} ${ver_string} PARENT_SCOPE) +ENDFUNCTION(GET_VS_VERSION_STRING) + +IF(BUILD_TESTING) + # Setup some auxilary macros + MACRO(SET_IF_NOT_SET var val) + IF(NOT DEFINED "${var}") + SET("${var}" "${val}") + ENDIF(NOT DEFINED "${var}") + ENDMACRO(SET_IF_NOT_SET) + + MACRO(SET_IF_SET var val) + IF(NOT "${val}" MATCHES "^$") + SET("${var}" "${val}") + ENDIF(NOT "${val}" MATCHES "^$") + ENDMACRO(SET_IF_SET) + + MACRO(SET_IF_SET_AND_NOT_SET var val) + IF(NOT "${val}" MATCHES "^$") + SET_IF_NOT_SET("${var}" "${val}") + ENDIF(NOT "${val}" MATCHES "^$") + ENDMACRO(SET_IF_SET_AND_NOT_SET) + + # Make sure testing is enabled + ENABLE_TESTING() + + IF(EXISTS "${PROJECT_SOURCE_DIR}/CTestConfig.cmake") + INCLUDE("${PROJECT_SOURCE_DIR}/CTestConfig.cmake") + SET_IF_SET_AND_NOT_SET(NIGHTLY_START_TIME "${CTEST_NIGHTLY_START_TIME}") + SET_IF_SET_AND_NOT_SET(DROP_METHOD "${CTEST_DROP_METHOD}") + SET_IF_SET_AND_NOT_SET(DROP_SITE "${CTEST_DROP_SITE}") + SET_IF_SET_AND_NOT_SET(DROP_SITE_USER "${CTEST_DROP_SITE_USER}") + SET_IF_SET_AND_NOT_SET(DROP_SITE_PASSWORD "${CTEST_DROP_SITE_PASWORD}") + SET_IF_SET_AND_NOT_SET(DROP_SITE_MODE "${CTEST_DROP_SITE_MODE}") + SET_IF_SET_AND_NOT_SET(DROP_LOCATION "${CTEST_DROP_LOCATION}") + SET_IF_SET_AND_NOT_SET(TRIGGER_SITE "${CTEST_TRIGGER_SITE}") + SET_IF_SET_AND_NOT_SET(UPDATE_TYPE "${CTEST_UPDATE_TYPE}") + ENDIF(EXISTS "${PROJECT_SOURCE_DIR}/CTestConfig.cmake") + + # the project can have a DartConfig.cmake file + IF(EXISTS "${PROJECT_SOURCE_DIR}/DartConfig.cmake") + INCLUDE("${PROJECT_SOURCE_DIR}/DartConfig.cmake") + ELSE(EXISTS "${PROJECT_SOURCE_DIR}/DartConfig.cmake") + # Dashboard is opened for submissions for a 24 hour period starting at + # the specified NIGHTLY_START_TIME. Time is specified in 24 hour format. + SET_IF_NOT_SET (NIGHTLY_START_TIME "00:00:00 EDT") + SET_IF_NOT_SET(DROP_METHOD "http") + SET_IF_NOT_SET (COMPRESS_SUBMISSION ON) + ENDIF(EXISTS "${PROJECT_SOURCE_DIR}/DartConfig.cmake") + SET_IF_NOT_SET (NIGHTLY_START_TIME "00:00:00 EDT") + + FIND_PROGRAM(CVSCOMMAND cvs ) + SET(CVS_UPDATE_OPTIONS "-d -A -P" CACHE STRING + "Options passed to the cvs update command.") + FIND_PROGRAM(SVNCOMMAND svn) + FIND_PROGRAM(BZRCOMMAND bzr) + FIND_PROGRAM(HGCOMMAND hg) + FIND_PROGRAM(GITCOMMAND git) + + IF(NOT UPDATE_TYPE) + IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CVS") + SET(UPDATE_TYPE cvs) + ELSEIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.svn") + SET(UPDATE_TYPE svn) + ELSEIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.bzr") + SET(UPDATE_TYPE bzr) + ELSEIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.hg") + SET(UPDATE_TYPE hg) + ELSEIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") + SET(UPDATE_TYPE git) + ENDIF() + ENDIF(NOT UPDATE_TYPE) + + STRING(TOLOWER "${UPDATE_TYPE}" _update_type) + IF("${_update_type}" STREQUAL "cvs") + SET(UPDATE_COMMAND "${CVSCOMMAND}") + SET(UPDATE_OPTIONS "${CVS_UPDATE_OPTIONS}") + ELSEIF("${_update_type}" STREQUAL "svn") + SET(UPDATE_COMMAND "${SVNCOMMAND}") + SET(UPDATE_OPTIONS "${SVN_UPDATE_OPTIONS}") + ELSEIF("${_update_type}" STREQUAL "bzr") + SET(UPDATE_COMMAND "${BZRCOMMAND}") + SET(UPDATE_OPTIONS "${BZR_UPDATE_OPTIONS}") + ELSEIF("${_update_type}" STREQUAL "hg") + SET(UPDATE_COMMAND "${HGCOMMAND}") + SET(UPDATE_OPTIONS "${HG_UPDATE_OPTIONS}") + ELSEIF("${_update_type}" STREQUAL "git") + SET(UPDATE_COMMAND "${GITCOMMAND}") + SET(UPDATE_OPTIONS "${GIT_UPDATE_OPTIONS}") + ENDIF() + + SET(DART_TESTING_TIMEOUT 1500 CACHE STRING + "Maximum time allowed before CTest will kill the test.") + + SET(CTEST_SUBMIT_RETRY_DELAY 5 CACHE STRING + "How long to wait between timed-out CTest submissions.") + SET(CTEST_SUBMIT_RETRY_COUNT 3 CACHE STRING + "How many times to retry timed-out CTest submissions.") + + FIND_PROGRAM(MEMORYCHECK_COMMAND + NAMES purify valgrind boundscheck + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Rational Software\\Purify\\Setup;InstallFolder]" + DOC "Path to the memory checking command, used for memory error detection." + ) + FIND_PROGRAM(SLURM_SBATCH_COMMAND sbatch DOC + "Path to the SLURM sbatch executable" + ) + FIND_PROGRAM(SLURM_SRUN_COMMAND srun DOC + "Path to the SLURM srun executable" + ) + SET(MEMORYCHECK_SUPPRESSIONS_FILE "" CACHE FILEPATH + "File that contains suppressions for the memory checker") + FIND_PROGRAM(SCPCOMMAND scp DOC + "Path to scp command, used by CTest for submitting results to a Dart server" + ) + FIND_PROGRAM(COVERAGE_COMMAND gcov DOC + "Path to the coverage program that CTest uses for performing coverage inspection" + ) + SET(COVERAGE_EXTRA_FLAGS "-l" CACHE STRING + "Extra command line flags to pass to the coverage tool") + + # set the site name + SITE_NAME(SITE) + # set the build name + IF(NOT BUILDNAME) + SET(DART_COMPILER "${CMAKE_CXX_COMPILER}") + IF(NOT DART_COMPILER) + SET(DART_COMPILER "${CMAKE_C_COMPILER}") + ENDIF(NOT DART_COMPILER) + IF(NOT DART_COMPILER) + SET(DART_COMPILER "unknown") + ENDIF(NOT DART_COMPILER) + IF(WIN32) + SET(DART_NAME_COMPONENT "NAME_WE") + ELSE(WIN32) + SET(DART_NAME_COMPONENT "NAME") + ENDIF(WIN32) + IF(NOT BUILD_NAME_SYSTEM_NAME) + SET(BUILD_NAME_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}") + ENDIF(NOT BUILD_NAME_SYSTEM_NAME) + IF(WIN32) + SET(BUILD_NAME_SYSTEM_NAME "Win32") + ENDIF(WIN32) + IF(UNIX OR BORLAND) + GET_FILENAME_COMPONENT(DART_CXX_NAME + "${CMAKE_CXX_COMPILER}" ${DART_NAME_COMPONENT}) + ELSE(UNIX OR BORLAND) + GET_FILENAME_COMPONENT(DART_CXX_NAME + "${CMAKE_BUILD_TOOL}" ${DART_NAME_COMPONENT}) + ENDIF(UNIX OR BORLAND) + IF(DART_CXX_NAME MATCHES "msdev") + SET(DART_CXX_NAME "vs60") + ENDIF(DART_CXX_NAME MATCHES "msdev") + IF(DART_CXX_NAME MATCHES "devenv") + GET_VS_VERSION_STRING("${CMAKE_GENERATOR}" DART_CXX_NAME) + ENDIF(DART_CXX_NAME MATCHES "devenv") + SET(BUILDNAME "${BUILD_NAME_SYSTEM_NAME}-${DART_CXX_NAME}") + ENDIF(NOT BUILDNAME) + + # the build command + BUILD_COMMAND(MAKECOMMAND_DEFAULT_VALUE + CONFIGURATION "\${CTEST_CONFIGURATION_TYPE}") + SET(MAKECOMMAND ${MAKECOMMAND_DEFAULT_VALUE} + CACHE STRING "Command to build the project") + + # the default build configuration the ctest build handler will use + # if there is no -C arg given to ctest: + SET(DEFAULT_CTEST_CONFIGURATION_TYPE "$ENV{CMAKE_CONFIG_TYPE}") + IF(DEFAULT_CTEST_CONFIGURATION_TYPE STREQUAL "") + SET(DEFAULT_CTEST_CONFIGURATION_TYPE "Release") + ENDIF(DEFAULT_CTEST_CONFIGURATION_TYPE STREQUAL "") + + IF(NOT "${CMAKE_GENERATOR}" MATCHES "Make") + SET(CTEST_USE_LAUNCHERS 0) + ENDIF(NOT "${CMAKE_GENERATOR}" MATCHES "Make") + IF(CTEST_USE_LAUNCHERS) + SET(CTEST_LAUNCH_COMPILE "\"${CMAKE_CTEST_COMMAND}\" --launch --target-name --build-dir --output --source --language --") + SET(CTEST_LAUNCH_LINK "\"${CMAKE_CTEST_COMMAND}\" --launch --target-name --build-dir --output --target-type --language --") + SET(CTEST_LAUNCH_CUSTOM "\"${CMAKE_CTEST_COMMAND}\" --launch --target-name --build-dir --output --") + SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CTEST_LAUNCH_COMPILE}") + SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CTEST_LAUNCH_LINK}") + SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_CUSTOM "${CTEST_LAUNCH_CUSTOM}") + ENDIF(CTEST_USE_LAUNCHERS) + + MARK_AS_ADVANCED( + BZRCOMMAND + BZR_UPDATE_OPTIONS + COVERAGE_COMMAND + COVERAGE_EXTRA_FLAGS + CTEST_SUBMIT_RETRY_DELAY + CTEST_SUBMIT_RETRY_COUNT + CVSCOMMAND + CVS_UPDATE_OPTIONS + DART_TESTING_TIMEOUT + GITCOMMAND + HGCOMMAND + MAKECOMMAND + MEMORYCHECK_COMMAND + MEMORYCHECK_SUPPRESSIONS_FILE + PURIFYCOMMAND + SCPCOMMAND + SLURM_SBATCH_COMMAND + SLURM_SRUN_COMMAND + SITE + SVNCOMMAND + SVN_UPDATE_OPTIONS + ) + IF(NOT RUN_FROM_DART) + SET(RUN_FROM_CTEST_OR_DART 1) + INCLUDE(CTestTargets) + SET(RUN_FROM_CTEST_OR_DART) + ENDIF(NOT RUN_FROM_DART) +ENDIF(BUILD_TESTING) diff --git a/Modules/CTestScriptMode.cmake b/Modules/CTestScriptMode.cmake new file mode 100644 index 0000000..e459c1d --- /dev/null +++ b/Modules/CTestScriptMode.cmake @@ -0,0 +1,24 @@ +# This file is read by ctest in script mode (-S) + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2009 Alexander Neundorf +# +# 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.) + +# Determine the current system, so this information can be used +# in ctest scripts +include(CMakeDetermineSystem) + +# Also load the system specific file, which sets up e.g. the search paths. +# This makes the FIND_XXX() calls work much better +include(CMakeSystemSpecificInformation) + diff --git a/Modules/CTestTargets.cmake b/Modules/CTestTargets.cmake new file mode 100644 index 0000000..bc4d964 --- /dev/null +++ b/Modules/CTestTargets.cmake @@ -0,0 +1,95 @@ + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(NOT RUN_FROM_CTEST_OR_DART) + MESSAGE(FATAL_ERROR "Do not incldue CTestTargets.cmake directly") +ENDIF(NOT RUN_FROM_CTEST_OR_DART) + +# make directories in the binary tree +FILE(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/Testing/Temporary) +GET_FILENAME_COMPONENT(CMAKE_HOST_PATH ${CMAKE_COMMAND} PATH) +SET(CMAKE_TARGET_PATH ${EXECUTABLE_OUTPUT_PATH}) +FIND_PROGRAM(CMAKE_CTEST_COMMAND ctest ${CMAKE_HOST_PATH} ${CMAKE_TARGET_PATH}) +MARK_AS_ADVANCED(CMAKE_CTEST_COMMAND) + +# Use CTest +# configure files + +IF(CTEST_NEW_FORMAT) + CONFIGURE_FILE( + ${CMAKE_ROOT}/Modules/DartConfiguration.tcl.in + ${PROJECT_BINARY_DIR}/CTestConfiguration.ini ) +ELSE(CTEST_NEW_FORMAT) + CONFIGURE_FILE( + ${CMAKE_ROOT}/Modules/DartConfiguration.tcl.in + ${PROJECT_BINARY_DIR}/DartConfiguration.tcl ) +ENDIF(CTEST_NEW_FORMAT) + +# +# Section 3: +# +# Custom targets to perform dashboard builds and submissions. +# These should NOT need to be modified from project to project. +# + +SET(__conf_types "") +IF(CMAKE_CONFIGURATION_TYPES) + # We need to pass the configuration type on the test command line. + SET(__conf_types -C "${CMAKE_CFG_INTDIR}") +ENDIF(CMAKE_CONFIGURATION_TYPES) + +# Add convenience targets. Do this at most once in case of nested +# projects. +DEFINE_PROPERTY(GLOBAL PROPERTY CTEST_TARGETS_ADDED + BRIEF_DOCS "Internal property used by CTestTargets module." + FULL_DOCS "Set by the CTestTargets module to track addition of testing targets." + ) +GET_PROPERTY(_CTEST_TARGETS_ADDED GLOBAL PROPERTY CTEST_TARGETS_ADDED) +IF(NOT _CTEST_TARGETS_ADDED) + SET_PROPERTY(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1) + + # For all generators add basic testing targets. + FOREACH(mode Experimental Nightly Continuous NightlyMemoryCheck) + ADD_CUSTOM_TARGET(${mode} + ${CMAKE_CTEST_COMMAND} ${__conf_types} -D ${mode} + ) + SET_PROPERTY(TARGET ${mode} PROPERTY RULE_LAUNCH_CUSTOM "") + SET_PROPERTY(TARGET ${mode} PROPERTY FOLDER "CTestDashboardTargets") + ENDFOREACH(mode) + + # For Makefile generators add more granular targets. + IF("${CMAKE_GENERATOR}" MATCHES "(Ninja|Make)") + # Make targets for Experimental builds + FOREACH(mode Nightly Experimental Continuous) + FOREACH(testtype + Start Update Configure Build Test Coverage MemCheck Submit + # missing purify + ) + ADD_CUSTOM_TARGET(${mode}${testtype} + ${CMAKE_CTEST_COMMAND} ${__conf_types} -D ${mode}${testtype} + ) + SET_PROPERTY(TARGET ${mode}${testtype} PROPERTY RULE_LAUNCH_CUSTOM "") + SET_PROPERTY(TARGET ${mode}${testtype} PROPERTY FOLDER "CTestDashboardTargets") + ENDFOREACH(testtype) + ENDFOREACH(mode) + ENDIF("${CMAKE_GENERATOR}" MATCHES "(Ninja|Make)") + + # If requested, add an alias that is the equivalent of the built-in "test" + # or "RUN_TESTS" target: + IF(CTEST_TEST_TARGET_ALIAS) + ADD_CUSTOM_TARGET(${CTEST_TEST_TARGET_ALIAS} + ${CMAKE_CTEST_COMMAND} ${__conf_types} + ) + ENDIF() +ENDIF(NOT _CTEST_TARGETS_ADDED) diff --git a/Modules/CheckCCompilerFlag.cmake b/Modules/CheckCCompilerFlag.cmake new file mode 100644 index 0000000..1c08c59 --- /dev/null +++ b/Modules/CheckCCompilerFlag.cmake @@ -0,0 +1,43 @@ +# - Check whether the C compiler supports a given flag. +# CHECK_C_COMPILER_FLAG( ) +# - the compiler flag +# - variable to store the result +# This internally calls the check_c_source_compiles macro. +# See help for CheckCSourceCompiles for a listing of variables +# that can modify the build. + +#============================================================================= +# Copyright 2006-2011 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# Copyright 2011 Matthias Kretz +# +# 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(CheckCSourceCompiles) + +MACRO (CHECK_C_COMPILER_FLAG _FLAG _RESULT) + SET(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") + SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}") + CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${_RESULT} + # Some compilers do not fail with a bad flag + FAIL_REGEX "command line option .* is valid for .* but not for C" # GNU + FAIL_REGEX "unrecognized .*option" # GNU + 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 + FAIL_REGEX "WARNING: unknown flag:" # Open64 + ) + SET (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}") +ENDMACRO (CHECK_C_COMPILER_FLAG) diff --git a/Modules/CheckCSourceCompiles.cmake b/Modules/CheckCSourceCompiles.cmake new file mode 100644 index 0000000..2669336 --- /dev/null +++ b/Modules/CheckCSourceCompiles.cmake @@ -0,0 +1,95 @@ +# - Check if given C source compiles and links into an executable +# CHECK_C_SOURCE_COMPILES( [FAIL_REGEX ]) +# - source code to try to compile, must define 'main' +# - variable to store whether the source code compiled +# - fail if test output matches this regex +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + + +MACRO(CHECK_C_SOURCE_COMPILES SOURCE VAR) + IF("${VAR}" MATCHES "^${VAR}$") + SET(_FAIL_REGEX) + SET(_key) + FOREACH(arg ${ARGN}) + IF("${arg}" MATCHES "^(FAIL_REGEX)$") + SET(_key "${arg}") + ELSEIF(_key) + LIST(APPEND _${_key} "${arg}") + ELSE() + MESSAGE(FATAL_ERROR "Unknown argument:\n ${arg}\n") + ENDIF() + ENDFOREACH() + SET(MACRO_CHECK_FUNCTION_DEFINITIONS + "-D${VAR} ${CMAKE_REQUIRED_FLAGS}") + IF(CMAKE_REQUIRED_LIBRARIES) + # this one translates potentially used imported library targets to their files on disk + CMAKE_EXPAND_IMPORTED_TARGETS(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + SET(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}") + ELSE(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES) + ENDIF(CMAKE_REQUIRED_LIBRARIES) + IF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES) + ENDIF(CMAKE_REQUIRED_INCLUDES) + FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c" + "${SOURCE}\n") + + MESSAGE(STATUS "Performing Test ${VAR}") + TRY_COMPILE(${VAR} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} + "${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}" + "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}" + OUTPUT_VARIABLE OUTPUT) + + FOREACH(_regex ${_FAIL_REGEX}) + IF("${OUTPUT}" MATCHES "${_regex}") + SET(${VAR} 0) + ENDIF() + ENDFOREACH() + + IF(${VAR}) + SET(${VAR} 1 CACHE INTERNAL "Test ${VAR}") + MESSAGE(STATUS "Performing Test ${VAR} - Success") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Performing C SOURCE FILE Test ${VAR} succeded with the following output:\n" + "${OUTPUT}\n" + "Source file was:\n${SOURCE}\n") + ELSE(${VAR}) + MESSAGE(STATUS "Performing Test ${VAR} - Failed") + SET(${VAR} "" CACHE INTERNAL "Test ${VAR}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Performing C SOURCE FILE Test ${VAR} failed with the following output:\n" + "${OUTPUT}\n" + "Source file was:\n${SOURCE}\n") + ENDIF(${VAR}) + ENDIF("${VAR}" MATCHES "^${VAR}$") +ENDMACRO(CHECK_C_SOURCE_COMPILES) + diff --git a/Modules/CheckCSourceRuns.cmake b/Modules/CheckCSourceRuns.cmake new file mode 100644 index 0000000..feee93a --- /dev/null +++ b/Modules/CheckCSourceRuns.cmake @@ -0,0 +1,91 @@ +# - Check if the given C source code compiles and runs. +# CHECK_C_SOURCE_RUNS( ) +# - source code to try to compile +# - variable to store the result +# (1 for success, empty for failure) +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + + +MACRO(CHECK_C_SOURCE_RUNS SOURCE VAR) + IF("${VAR}" MATCHES "^${VAR}$") + SET(MACRO_CHECK_FUNCTION_DEFINITIONS + "-D${VAR} ${CMAKE_REQUIRED_FLAGS}") + IF(CMAKE_REQUIRED_LIBRARIES) + # this one translates potentially used imported library targets to their files on disk + CMAKE_EXPAND_IMPORTED_TARGETS(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + SET(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}") + ELSE(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES) + ENDIF(CMAKE_REQUIRED_LIBRARIES) + IF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES) + ENDIF(CMAKE_REQUIRED_INCLUDES) + FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c" + "${SOURCE}\n") + + MESSAGE(STATUS "Performing Test ${VAR}") + TRY_RUN(${VAR}_EXITCODE ${VAR}_COMPILED + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} + -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH} + "${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}" + "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}" + COMPILE_OUTPUT_VARIABLE OUTPUT) + # if it did not compile make the return value fail code of 1 + IF(NOT ${VAR}_COMPILED) + SET(${VAR}_EXITCODE 1) + ENDIF(NOT ${VAR}_COMPILED) + # if the return value was 0 then it worked + IF("${${VAR}_EXITCODE}" EQUAL 0) + SET(${VAR} 1 CACHE INTERNAL "Test ${VAR}") + MESSAGE(STATUS "Performing Test ${VAR} - Success") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Performing C SOURCE FILE Test ${VAR} succeded with the following output:\n" + "${OUTPUT}\n" + "Return value: ${${VAR}}\n" + "Source file was:\n${SOURCE}\n") + ELSE("${${VAR}_EXITCODE}" EQUAL 0) + IF(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES "FAILED_TO_RUN") + SET(${VAR} "${${VAR}_EXITCODE}") + ELSE(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES "FAILED_TO_RUN") + SET(${VAR} "" CACHE INTERNAL "Test ${VAR}") + ENDIF(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES "FAILED_TO_RUN") + + MESSAGE(STATUS "Performing Test ${VAR} - Failed") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Performing C SOURCE FILE Test ${VAR} failed with the following output:\n" + "${OUTPUT}\n" + "Return value: ${${VAR}_EXITCODE}\n" + "Source file was:\n${SOURCE}\n") + + ENDIF("${${VAR}_EXITCODE}" EQUAL 0) + ENDIF("${VAR}" MATCHES "^${VAR}$") +ENDMACRO(CHECK_C_SOURCE_RUNS) + diff --git a/Modules/CheckCXXCompilerFlag.cmake b/Modules/CheckCXXCompilerFlag.cmake new file mode 100644 index 0000000..6fa69b1 --- /dev/null +++ b/Modules/CheckCXXCompilerFlag.cmake @@ -0,0 +1,46 @@ +# - Check whether the CXX compiler supports a given flag. +# CHECK_CXX_COMPILER_FLAG( ) +# - the compiler flag +# - variable to store the result +# This internally calls the check_cxx_source_compiles macro. See help +# for CheckCXXSourceCompiles for a listing of variables that can +# modify the build. + +#============================================================================= +# Copyright 2006-2010 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# Copyright 2011 Matthias Kretz +# +# 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(CheckCXXSourceCompiles) + +MACRO (CHECK_CXX_COMPILER_FLAG _FLAG _RESULT) + SET(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") + SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}") + CHECK_CXX_SOURCE_COMPILES("int main() { return 0;}" ${_RESULT} + # Some compilers do not fail with a bad flag + FAIL_REGEX "command line option .* is valid for .* but not for C\\\\+\\\\+" # GNU + FAIL_REGEX "unrecognized .*option" # GNU + 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 + FAIL_REGEX "not supported in this configuration; ignored" # AIX + FAIL_REGEX "File with unknown suffix passed to linker" # PGI + FAIL_REGEX "WARNING: unknown flag:" # Open64 + ) + SET (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}") +ENDMACRO (CHECK_CXX_COMPILER_FLAG) + diff --git a/Modules/CheckCXXSourceCompiles.cmake b/Modules/CheckCXXSourceCompiles.cmake new file mode 100644 index 0000000..7f7336e --- /dev/null +++ b/Modules/CheckCXXSourceCompiles.cmake @@ -0,0 +1,96 @@ +# - Check if given C++ source compiles and links into an executable +# CHECK_CXX_SOURCE_COMPILES( [FAIL_REGEX ]) +# - source code to try to compile, must define 'main' +# - variable to store whether the source code compiled +# - fail if test output matches this regex +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + + +MACRO(CHECK_CXX_SOURCE_COMPILES SOURCE VAR) + IF("${VAR}" MATCHES "^${VAR}$") + SET(_FAIL_REGEX) + SET(_key) + FOREACH(arg ${ARGN}) + IF("${arg}" MATCHES "^(FAIL_REGEX)$") + SET(_key "${arg}") + ELSEIF(_key) + LIST(APPEND _${_key} "${arg}") + ELSE() + MESSAGE(FATAL_ERROR "Unknown argument:\n ${arg}\n") + ENDIF() + ENDFOREACH() + + SET(MACRO_CHECK_FUNCTION_DEFINITIONS + "-D${VAR} ${CMAKE_REQUIRED_FLAGS}") + IF(CMAKE_REQUIRED_LIBRARIES) + # this one translates potentially used imported library targets to their files on disk + CMAKE_EXPAND_IMPORTED_TARGETS(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + SET(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}") + ELSE(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES) + ENDIF(CMAKE_REQUIRED_LIBRARIES) + IF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES) + ENDIF(CMAKE_REQUIRED_INCLUDES) + FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx" + "${SOURCE}\n") + + MESSAGE(STATUS "Performing Test ${VAR}") + TRY_COMPILE(${VAR} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} + "${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}" + "${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}" + OUTPUT_VARIABLE OUTPUT) + + FOREACH(_regex ${_FAIL_REGEX}) + IF("${OUTPUT}" MATCHES "${_regex}") + SET(${VAR} 0) + ENDIF() + ENDFOREACH() + + IF(${VAR}) + SET(${VAR} 1 CACHE INTERNAL "Test ${VAR}") + MESSAGE(STATUS "Performing Test ${VAR} - Success") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Performing C++ SOURCE FILE Test ${VAR} succeded with the following output:\n" + "${OUTPUT}\n" + "Source file was:\n${SOURCE}\n") + ELSE(${VAR}) + MESSAGE(STATUS "Performing Test ${VAR} - Failed") + SET(${VAR} "" CACHE INTERNAL "Test ${VAR}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Performing C++ SOURCE FILE Test ${VAR} failed with the following output:\n" + "${OUTPUT}\n" + "Source file was:\n${SOURCE}\n") + ENDIF(${VAR}) + ENDIF("${VAR}" MATCHES "^${VAR}$") +ENDMACRO(CHECK_CXX_SOURCE_COMPILES) + diff --git a/Modules/CheckCXXSourceRuns.cmake b/Modules/CheckCXXSourceRuns.cmake new file mode 100644 index 0000000..cd68d57 --- /dev/null +++ b/Modules/CheckCXXSourceRuns.cmake @@ -0,0 +1,91 @@ +# - Check if the given C++ source code compiles and runs. +# CHECK_CXX_SOURCE_RUNS( ) +# - source code to try to compile +# - variable to store the result +# (1 for success, empty for failure) +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + + +MACRO(CHECK_CXX_SOURCE_RUNS SOURCE VAR) + IF("${VAR}" MATCHES "^${VAR}$") + SET(MACRO_CHECK_FUNCTION_DEFINITIONS + "-D${VAR} ${CMAKE_REQUIRED_FLAGS}") + IF(CMAKE_REQUIRED_LIBRARIES) + # this one translates potentially used imported library targets to their files on disk + CMAKE_EXPAND_IMPORTED_TARGETS(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + SET(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}") + ELSE(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES) + ENDIF(CMAKE_REQUIRED_LIBRARIES) + IF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES) + ENDIF(CMAKE_REQUIRED_INCLUDES) + FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx" + "${SOURCE}\n") + + MESSAGE(STATUS "Performing Test ${VAR}") + TRY_RUN(${VAR}_EXITCODE ${VAR}_COMPILED + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} + -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH} + "${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}" + "${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}" + COMPILE_OUTPUT_VARIABLE OUTPUT) + + # if it did not compile make the return value fail code of 1 + IF(NOT ${VAR}_COMPILED) + SET(${VAR}_EXITCODE 1) + ENDIF(NOT ${VAR}_COMPILED) + # if the return value was 0 then it worked + IF("${${VAR}_EXITCODE}" EQUAL 0) + SET(${VAR} 1 CACHE INTERNAL "Test ${VAR}") + MESSAGE(STATUS "Performing Test ${VAR} - Success") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Performing C++ SOURCE FILE Test ${VAR} succeded with the following output:\n" + "${OUTPUT}\n" + "Return value: ${${VAR}}\n" + "Source file was:\n${SOURCE}\n") + ELSE("${${VAR}_EXITCODE}" EQUAL 0) + IF(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES "FAILED_TO_RUN") + SET(${VAR} "${${VAR}_EXITCODE}") + ELSE(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES "FAILED_TO_RUN") + SET(${VAR} "" CACHE INTERNAL "Test ${VAR}") + ENDIF(CMAKE_CROSSCOMPILING AND "${${VAR}_EXITCODE}" MATCHES "FAILED_TO_RUN") + + MESSAGE(STATUS "Performing Test ${VAR} - Failed") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Performing C++ SOURCE FILE Test ${VAR} failed with the following output:\n" + "${OUTPUT}\n" + "Return value: ${${VAR}_EXITCODE}\n" + "Source file was:\n${SOURCE}\n") + ENDIF("${${VAR}_EXITCODE}" EQUAL 0) + ENDIF("${VAR}" MATCHES "^${VAR}$") +ENDMACRO(CHECK_CXX_SOURCE_RUNS) + diff --git a/Modules/CheckCXXSymbolExists.cmake b/Modules/CheckCXXSymbolExists.cmake new file mode 100644 index 0000000..1b012ae --- /dev/null +++ b/Modules/CheckCXXSymbolExists.cmake @@ -0,0 +1,42 @@ +# - Check if a symbol exists as a function, variable, or macro in C++ +# CHECK_CXX_SYMBOL_EXISTS( ) +# +# Check that the is available after including given header +# and store the result in a . Specify the list +# of files in one argument as a semicolon-separated list. +# CHECK_CXX_SYMBOL_EXISTS() can be used to check in C++ files, as opposed +# to CHECK_SYMBOL_EXISTS(), which works only for C. +# +# If the header files define the symbol as a macro it is considered +# available and assumed to work. If the header files declare the +# symbol as a function or variable then the symbol must also be +# available for linking. If the symbol is a type or enum value +# it will not be recognized (consider using CheckTypeSize or +# CheckCSourceCompiles). +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2003-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(CheckSymbolExists) + +MACRO(CHECK_CXX_SYMBOL_EXISTS SYMBOL FILES VARIABLE) + _CHECK_SYMBOL_EXISTS("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.cxx" "${SYMBOL}" "${FILES}" "${VARIABLE}" ) +ENDMACRO(CHECK_CXX_SYMBOL_EXISTS) diff --git a/Modules/CheckForPthreads.c b/Modules/CheckForPthreads.c new file mode 100644 index 0000000..d831078 --- /dev/null +++ b/Modules/CheckForPthreads.c @@ -0,0 +1,38 @@ +#include +#include +#include + +void* runner(void*); + +int res = 0; +#ifdef __CLASSIC_C__ +int main(){ + int ac; + char*av[]; +#else +int main(int ac, char*av[]){ +#endif + pthread_t tid[2]; + pthread_create(&tid[0], 0, runner, (void*)1); + pthread_create(&tid[1], 0, runner, (void*)2); + +#if defined(__BEOS__) && !defined(__ZETA__) && !defined(__HAIKU__) // (no usleep on BeOS 5.) + usleep(1); // for strange behavior on single-processor sun +#endif + + pthread_join(tid[0], 0); + pthread_join(tid[1], 0); + if(ac > 1000){return *av[0];} + return res; +} + +void* runner(void* args) +{ + int cc; + for ( cc = 0; cc < 10; cc ++ ) + { + printf("%d CC: %d\n", (int)args, cc); + } + res ++; + return 0; +} diff --git a/Modules/CheckFortranFunctionExists.cmake b/Modules/CheckFortranFunctionExists.cmake new file mode 100644 index 0000000..abec9f7 --- /dev/null +++ b/Modules/CheckFortranFunctionExists.cmake @@ -0,0 +1,69 @@ +# - Check if the Fortran function exists. +# CHECK_FORTRAN_FUNCTION_EXISTS(FUNCTION VARIABLE) +# - macro which checks if the Fortran function exists +# FUNCTION - the name of the Fortran function +# VARIABLE - variable to store the result +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + + +macro(CHECK_FORTRAN_FUNCTION_EXISTS FUNCTION VARIABLE) + if(NOT DEFINED ${VARIABLE}) + message(STATUS "Looking for Fortran ${FUNCTION}") + if(CMAKE_REQUIRED_LIBRARIES) + # this one translates potentially used imported library targets to their files on disk + cmake_expand_imported_targets(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}") + else(CMAKE_REQUIRED_LIBRARIES) + set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES) + endif(CMAKE_REQUIRED_LIBRARIES) + FILE(WRITE + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f + " + program TESTFortran + external ${FUNCTION} + call ${FUNCTION}() + end program TESTFortran + " + ) + try_compile(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler.f + CMAKE_FLAGS "${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}" + OUTPUT_VARIABLE OUTPUT + ) +# message(STATUS "${OUTPUT}") + if(${VARIABLE}) + set(${VARIABLE} 1 CACHE INTERNAL "Have Fortran function ${FUNCTION}") + message(STATUS "Looking for Fortran ${FUNCTION} - found") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the Fortran ${FUNCTION} exists passed with the following output:\n" + "${OUTPUT}\n\n") + else(${VARIABLE}) + message(STATUS "Looking for Fortran ${FUNCTION} - not found") + set(${VARIABLE} "" CACHE INTERNAL "Have Fortran function ${FUNCTION}") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the Fortran ${FUNCTION} exists failed with the following output:\n" + "${OUTPUT}\n\n") + endif(${VARIABLE}) + endif(NOT DEFINED ${VARIABLE}) +endmacro(CHECK_FORTRAN_FUNCTION_EXISTS) diff --git a/Modules/CheckFunctionExists.c b/Modules/CheckFunctionExists.c new file mode 100644 index 0000000..607b3e8 --- /dev/null +++ b/Modules/CheckFunctionExists.c @@ -0,0 +1,23 @@ +#ifdef CHECK_FUNCTION_EXISTS + +char CHECK_FUNCTION_EXISTS(); +#ifdef __CLASSIC_C__ +int main(){ + int ac; + char*av[]; +#else +int main(int ac, char*av[]){ +#endif + CHECK_FUNCTION_EXISTS(); + if(ac > 1000) + { + return *av[0]; + } + return 0; +} + +#else /* CHECK_FUNCTION_EXISTS */ + +# error "CHECK_FUNCTION_EXISTS has to specify the function" + +#endif /* CHECK_FUNCTION_EXISTS */ diff --git a/Modules/CheckFunctionExists.cmake b/Modules/CheckFunctionExists.cmake new file mode 100644 index 0000000..8c469f0 --- /dev/null +++ b/Modules/CheckFunctionExists.cmake @@ -0,0 +1,74 @@ +# - Check if a C function can be linked +# CHECK_FUNCTION_EXISTS( ) +# +# Check that the is provided by libraries on the system and +# store the result in a . This does not verify that any +# system header file declares the function, only that it can be found +# at link time (considure using CheckSymbolExists). +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2002-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + + +MACRO(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + SET(MACRO_CHECK_FUNCTION_DEFINITIONS + "-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}") + MESSAGE(STATUS "Looking for ${FUNCTION}") + IF(CMAKE_REQUIRED_LIBRARIES) + # this one translates potentially used imported library targets to their files on disk + CMAKE_EXPAND_IMPORTED_TARGETS(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + SET(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}") + ELSE(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES) + ENDIF(CMAKE_REQUIRED_LIBRARIES) + IF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_FUNCTION_EXISTS_ADD_INCLUDES + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_FUNCTION_EXISTS_ADD_INCLUDES) + ENDIF(CMAKE_REQUIRED_INCLUDES) + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_ROOT}/Modules/CheckFunctionExists.c + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} + "${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}" + "${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}" + OUTPUT_VARIABLE OUTPUT) + IF(${VARIABLE}) + SET(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}") + MESSAGE(STATUS "Looking for ${FUNCTION} - found") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the function ${FUNCTION} exists passed with the following output:\n" + "${OUTPUT}\n\n") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Looking for ${FUNCTION} - not found") + SET(${VARIABLE} "" CACHE INTERNAL "Have function ${FUNCTION}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the function ${FUNCTION} exists failed with the following output:\n" + "${OUTPUT}\n\n") + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(CHECK_FUNCTION_EXISTS) diff --git a/Modules/CheckIncludeFile.c.in b/Modules/CheckIncludeFile.c.in new file mode 100644 index 0000000..ddfbee8 --- /dev/null +++ b/Modules/CheckIncludeFile.c.in @@ -0,0 +1,13 @@ +#include <${CHECK_INCLUDE_FILE_VAR}> + +#ifdef __CLASSIC_C__ +int main() +{ + return 0; +} +#else +int main(void) +{ + return 0; +} +#endif diff --git a/Modules/CheckIncludeFile.cmake b/Modules/CheckIncludeFile.cmake new file mode 100644 index 0000000..eb732d2 --- /dev/null +++ b/Modules/CheckIncludeFile.cmake @@ -0,0 +1,77 @@ +# - Check if the include file exists. +# CHECK_INCLUDE_FILE(INCLUDE VARIABLE) +# - macro which checks the include file exists. +# INCLUDE - name of include file +# VARIABLE - variable to return result +# +# an optional third argument is the CFlags to add to the compile line +# or you can use CMAKE_REQUIRED_FLAGS +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +MACRO(CHECK_INCLUDE_FILE INCLUDE VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + IF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_INCLUDE_FILE_C_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_INCLUDE_FILE_C_INCLUDE_DIRS) + ENDIF(CMAKE_REQUIRED_INCLUDES) + SET(MACRO_CHECK_INCLUDE_FILE_FLAGS ${CMAKE_REQUIRED_FLAGS}) + SET(CHECK_INCLUDE_FILE_VAR ${INCLUDE}) + CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CheckIncludeFile.c.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.c IMMEDIATE) + MESSAGE(STATUS "Looking for ${INCLUDE}") + IF(${ARGC} EQUAL 3) + SET(CMAKE_C_FLAGS_SAVE ${CMAKE_C_FLAGS}) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARGV2}") + ENDIF(${ARGC} EQUAL 3) + + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.c + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS + -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS} + "${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}" + OUTPUT_VARIABLE OUTPUT) + + IF(${ARGC} EQUAL 3) + SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_SAVE}) + ENDIF(${ARGC} EQUAL 3) + + IF(${VARIABLE}) + MESSAGE(STATUS "Looking for ${INCLUDE} - found") + SET(${VARIABLE} 1 CACHE INTERNAL "Have include ${INCLUDE}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the include file ${INCLUDE} " + "exists passed with the following output:\n" + "${OUTPUT}\n\n") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Looking for ${INCLUDE} - not found") + SET(${VARIABLE} "" CACHE INTERNAL "Have include ${INCLUDE}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the include file ${INCLUDE} " + "exists failed with the following output:\n" + "${OUTPUT}\n\n") + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(CHECK_INCLUDE_FILE) diff --git a/Modules/CheckIncludeFile.cxx.in b/Modules/CheckIncludeFile.cxx.in new file mode 100644 index 0000000..40441f1 --- /dev/null +++ b/Modules/CheckIncludeFile.cxx.in @@ -0,0 +1,6 @@ +#include <${CHECK_INCLUDE_FILE_VAR}> + +int main() +{ + return 0; +} diff --git a/Modules/CheckIncludeFileCXX.cmake b/Modules/CheckIncludeFileCXX.cmake new file mode 100644 index 0000000..c5d8f9a --- /dev/null +++ b/Modules/CheckIncludeFileCXX.cmake @@ -0,0 +1,77 @@ +# - Check if the include file exists. +# CHECK_INCLUDE_FILE_CXX(INCLUDE VARIABLE) +# +# INCLUDE - name of include file +# VARIABLE - variable to return result +# +# An optional third argument is the CFlags to add to the compile line +# or you can use CMAKE_REQUIRED_FLAGS. +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +MACRO(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + IF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS) + ENDIF(CMAKE_REQUIRED_INCLUDES) + SET(MACRO_CHECK_INCLUDE_FILE_FLAGS ${CMAKE_REQUIRED_FLAGS}) + SET(CHECK_INCLUDE_FILE_VAR ${INCLUDE}) + CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CheckIncludeFile.cxx.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.cxx IMMEDIATE) + MESSAGE(STATUS "Looking for C++ include ${INCLUDE}") + IF(${ARGC} EQUAL 3) + SET(CMAKE_CXX_FLAGS_SAVE ${CMAKE_CXX_FLAGS}) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARGV2}") + ENDIF(${ARGC} EQUAL 3) + + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.cxx + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS + -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS} + "${CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS}" + OUTPUT_VARIABLE OUTPUT) + + IF(${ARGC} EQUAL 3) + SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_SAVE}) + ENDIF(${ARGC} EQUAL 3) + + IF(${VARIABLE}) + MESSAGE(STATUS "Looking for C++ include ${INCLUDE} - found") + SET(${VARIABLE} 1 CACHE INTERNAL "Have include ${INCLUDE}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the include file ${INCLUDE} " + "exists passed with the following output:\n" + "${OUTPUT}\n\n") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Looking for C++ include ${INCLUDE} - not found") + SET(${VARIABLE} "" CACHE INTERNAL "Have include ${INCLUDE}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the include file ${INCLUDE} " + "exists failed with the following output:\n" + "${OUTPUT}\n\n") + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(CHECK_INCLUDE_FILE_CXX) diff --git a/Modules/CheckIncludeFiles.cmake b/Modules/CheckIncludeFiles.cmake new file mode 100644 index 0000000..a94644e --- /dev/null +++ b/Modules/CheckIncludeFiles.cmake @@ -0,0 +1,82 @@ +# - Check if the files can be included +# +# CHECK_INCLUDE_FILES(INCLUDE VARIABLE) +# +# INCLUDE - list of files to include +# VARIABLE - variable to return result +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories + +#============================================================================= +# Copyright 2003-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.) + +MACRO(CHECK_INCLUDE_FILES INCLUDE VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + SET(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n") + IF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_INCLUDE_FILES_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_INCLUDE_FILES_INCLUDE_DIRS) + ENDIF(CMAKE_REQUIRED_INCLUDES) + SET(CHECK_INCLUDE_FILES_CONTENT "/* */\n") + SET(MACRO_CHECK_INCLUDE_FILES_FLAGS ${CMAKE_REQUIRED_FLAGS}) + FOREACH(FILE ${INCLUDE}) + SET(CMAKE_CONFIGURABLE_FILE_CONTENT + "${CMAKE_CONFIGURABLE_FILE_CONTENT}#include <${FILE}>\n") + ENDFOREACH(FILE) + SET(CMAKE_CONFIGURABLE_FILE_CONTENT + "${CMAKE_CONFIGURABLE_FILE_CONTENT}\n\nint main(){return 0;}\n") + CONFIGURE_FILE("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in" + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFiles.c" @ONLY IMMEDIATE) + + SET(_INCLUDE ${INCLUDE}) # remove empty elements + IF("${_INCLUDE}" MATCHES "^([^;]+);.+;([^;]+)$") + LIST(LENGTH _INCLUDE _INCLUDE_LEN) + SET(_description "${_INCLUDE_LEN} include files ${CMAKE_MATCH_1}, ..., ${CMAKE_MATCH_2}") + ELSEIF("${_INCLUDE}" MATCHES "^([^;]+);([^;]+)$") + SET(_description "include files ${CMAKE_MATCH_1}, ${CMAKE_MATCH_2}") + ELSE() + SET(_description "include file ${_INCLUDE}") + ENDIF() + + MESSAGE(STATUS "Looking for ${_description}") + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFiles.c + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS + -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS} + "${CHECK_INCLUDE_FILES_INCLUDE_DIRS}" + OUTPUT_VARIABLE OUTPUT) + IF(${VARIABLE}) + MESSAGE(STATUS "Looking for ${_description} - found") + SET(${VARIABLE} 1 CACHE INTERNAL "Have include ${INCLUDE}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if files ${INCLUDE} " + "exist passed with the following output:\n" + "${OUTPUT}\n\n") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Looking for ${_description} - not found.") + SET(${VARIABLE} "" CACHE INTERNAL "Have includes ${INCLUDE}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if files ${INCLUDE} " + "exist failed with the following output:\n" + "${OUTPUT}\nSource:\n${CMAKE_CONFIGURABLE_FILE_CONTENT}\n") + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(CHECK_INCLUDE_FILES) diff --git a/Modules/CheckLanguage.cmake b/Modules/CheckLanguage.cmake new file mode 100644 index 0000000..87a4018 --- /dev/null +++ b/Modules/CheckLanguage.cmake @@ -0,0 +1,65 @@ +# - Check if a language can be enabled +# Usage: +# check_language() +# where is a language that may be passed to enable_language() +# such as "Fortran". If CMAKE__COMPILER is already defined the +# check does nothing. Otherwise it tries enabling the language in a +# test project. The result is cached in CMAKE__COMPILER as the +# compiler that was found, or NOTFOUND if the language cannot be enabled. +# +# Example: +# check_language(Fortran) +# if(CMAKE_Fortran_COMPILER) +# enable_language(Fortran) +# else() +# message(STATUS "No Fortran support") +# endif() + +#============================================================================= +# Copyright 2009-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.) + +macro(check_language lang) + if(NOT DEFINED CMAKE_${lang}_COMPILER) + set(_desc "Looking for a ${lang} compiler") + message(STATUS ${_desc}) + file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}) + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/CMakeLists.txt" + "cmake_minimum_required(VERSION 2.8) +project(Check${lang} ${lang}) +file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\" + \"set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\\n\" + ) +") + execute_process( + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang} + COMMAND ${CMAKE_COMMAND} . -G ${CMAKE_GENERATOR} + OUTPUT_VARIABLE output + ERROR_VARIABLE output + RESULT_VARIABLE result + ) + include(${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/result.cmake OPTIONAL) + if(CMAKE_${lang}_COMPILER AND "${result}" STREQUAL "0") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "${_desc} passed with the following output:\n" + "${output}\n") + else() + set(CMAKE_${lang}_COMPILER NOTFOUND) + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "${_desc} failed with the following output:\n" + "${output}\n") + endif() + message(STATUS "${_desc} - ${CMAKE_${lang}_COMPILER}") + set(CMAKE_${lang}_COMPILER "${CMAKE_${lang}_COMPILER}" CACHE FILEPATH "${lang} compiler") + mark_as_advanced(CMAKE_${lang}_COMPILER) + endif() +endmacro() diff --git a/Modules/CheckLibraryExists.cmake b/Modules/CheckLibraryExists.cmake new file mode 100644 index 0000000..59fca0a --- /dev/null +++ b/Modules/CheckLibraryExists.cmake @@ -0,0 +1,70 @@ +# - Check if the function exists. +# CHECK_LIBRARY_EXISTS (LIBRARY FUNCTION LOCATION VARIABLE) +# +# LIBRARY - the name of the library you are looking for +# FUNCTION - the name of the function +# LOCATION - location where the library should be found +# VARIABLE - variable to store the result +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + + +MACRO(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + SET(MACRO_CHECK_LIBRARY_EXISTS_DEFINITION + "-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}") + MESSAGE(STATUS "Looking for ${FUNCTION} in ${LIBRARY}") + SET(CHECK_LIBRARY_EXISTS_LIBRARIES ${LIBRARY}) + IF(CMAKE_REQUIRED_LIBRARIES) + # this one translates potentially used imported library targets to their files on disk + CMAKE_EXPAND_IMPORTED_TARGETS(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + SET(CHECK_LIBRARY_EXISTS_LIBRARIES + ${CHECK_LIBRARY_EXISTS_LIBRARIES} ${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}) + ENDIF(CMAKE_REQUIRED_LIBRARIES) + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_ROOT}/Modules/CheckFunctionExists.c + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS + -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_LIBRARY_EXISTS_DEFINITION} + -DLINK_DIRECTORIES:STRING=${LOCATION} + "-DLINK_LIBRARIES:STRING=${CHECK_LIBRARY_EXISTS_LIBRARIES}" + OUTPUT_VARIABLE OUTPUT) + + IF(${VARIABLE}) + MESSAGE(STATUS "Looking for ${FUNCTION} in ${LIBRARY} - found") + SET(${VARIABLE} 1 CACHE INTERNAL "Have library ${LIBRARY}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the function ${FUNCTION} exists in the ${LIBRARY} " + "passed with the following output:\n" + "${OUTPUT}\n\n") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Looking for ${FUNCTION} in ${LIBRARY} - not found") + SET(${VARIABLE} "" CACHE INTERNAL "Have library ${LIBRARY}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the function ${FUNCTION} exists in the ${LIBRARY} " + "failed with the following output:\n" + "${OUTPUT}\n\n") + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(CHECK_LIBRARY_EXISTS) diff --git a/Modules/CheckLibraryExists.lists.in b/Modules/CheckLibraryExists.lists.in new file mode 100644 index 0000000..741b87d --- /dev/null +++ b/Modules/CheckLibraryExists.lists.in @@ -0,0 +1,8 @@ +PROJECT(CHECK_LIBRARY_EXISTS) + + +ADD_DEFINITIONS(-DCHECK_FUNCTION_EXISTS=${CHECK_LIBRARY_EXISTS_FUNCTION}) +LINK_DIRECTORIES(${CHECK_LIBRARY_EXISTS_LOCATION}) +ADD_EXECUTABLE(CheckLibraryExists ${CHECK_LIBRARY_EXISTS_SOURCE}) +TARGET_LINK_LIBRARIES(CheckLibraryExists ${CHECK_LIBRARY_EXISTS_LIBRARY}) + diff --git a/Modules/CheckPrototypeDefinition.c.in b/Modules/CheckPrototypeDefinition.c.in new file mode 100644 index 0000000..a97344a --- /dev/null +++ b/Modules/CheckPrototypeDefinition.c.in @@ -0,0 +1,29 @@ +@CHECK_PROTOTYPE_DEFINITION_HEADER@ + +static void cmakeRequireSymbol(int dummy, ...) { + (void) dummy; +} + +static void checkSymbol(void) { +#ifndef @CHECK_PROTOTYPE_DEFINITION_SYMBOL@ + cmakeRequireSymbol(0, &@CHECK_PROTOTYPE_DEFINITION_SYMBOL@); +#endif +} + +@CHECK_PROTOTYPE_DEFINITION_PROTO@ { + return @CHECK_PROTOTYPE_DEFINITION_RETURN@; +} + +#ifdef __CLASSIC_C__ +int main() { + int ac; + char*av[]; +#else +int main(int ac, char *av[]) { +#endif + checkSymbol(); + if (ac > 1000) { + return *av[0]; + } + return 0; +} diff --git a/Modules/CheckPrototypeDefinition.cmake b/Modules/CheckPrototypeDefinition.cmake new file mode 100644 index 0000000..63d4242 --- /dev/null +++ b/Modules/CheckPrototypeDefinition.cmake @@ -0,0 +1,101 @@ +# - Check if the protoype we expect is correct. +# check_prototype_definition(FUNCTION PROTOTYPE RETURN HEADER VARIABLE) +# FUNCTION - The name of the function (used to check if prototype exists) +# PROTOTYPE- The prototype to check. +# RETURN - The return value of the function. +# HEADER - The header files required. +# VARIABLE - The variable to store the result. +# Example: +# check_prototype_definition(getpwent_r +# "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)" +# "NULL" +# "unistd.h;pwd.h" +# SOLARIS_GETPWENT_R) +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# Copyright 2010-2011 Andreas Schneider +# +# 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("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + +get_filename_component(__check_proto_def_dir "${CMAKE_CURRENT_LIST_FILE}" PATH) + + +function(CHECK_PROTOTYPE_DEFINITION _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIABLE) + + if ("${_VARIABLE}" MATCHES "^${_VARIABLE}$") + set(CHECK_PROTOTYPE_DEFINITION_CONTENT "/* */\n") + + set(CHECK_PROTOTYPE_DEFINITION_FLAGS ${CMAKE_REQUIRED_FLAGS}) + if (CMAKE_REQUIRED_LIBRARIES) + # this one translates potentially used imported library targets to their files on disk + cmake_expand_imported_targets(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + set(CHECK_PROTOTYPE_DEFINITION_LIBS + "-DLINK_LIBRARIES:STRING=${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}") + else(CMAKE_REQUIRED_LIBRARIES) + set(CHECK_PROTOTYPE_DEFINITION_LIBS) + endif(CMAKE_REQUIRED_LIBRARIES) + if (CMAKE_REQUIRED_INCLUDES) + set(CMAKE_SYMBOL_EXISTS_INCLUDES + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") + else(CMAKE_REQUIRED_INCLUDES) + set(CMAKE_SYMBOL_EXISTS_INCLUDES) + endif(CMAKE_REQUIRED_INCLUDES) + + foreach(_FILE ${_HEADER}) + set(CHECK_PROTOTYPE_DEFINITION_HEADER + "${CHECK_PROTOTYPE_DEFINITION_HEADER}#include <${_FILE}>\n") + endforeach(_FILE) + + set(CHECK_PROTOTYPE_DEFINITION_SYMBOL ${_FUNCTION}) + set(CHECK_PROTOTYPE_DEFINITION_PROTO ${_PROTOTYPE}) + set(CHECK_PROTOTYPE_DEFINITION_RETURN ${_RETURN}) + + configure_file("${__check_proto_def_dir}/CheckPrototypeDefinition.c.in" + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c" @ONLY) + + file(READ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c _SOURCE) + + try_compile(${_VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckPrototypeDefinition.c + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS} + "${CHECK_PROTOTYPE_DEFINITION_LIBS}" + "${CMAKE_SYMBOL_EXISTS_INCLUDES}" + OUTPUT_VARIABLE OUTPUT) + + if (${_VARIABLE}) + set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}") + message(STATUS "Checking prototype ${_FUNCTION} for ${_VARIABLE} - True") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} passed with the following output:\n" + "${OUTPUT}\n\n") + else (${_VARIABLE}) + message(STATUS "Checking prototype ${_FUNCTION} for ${_VARIABLE} - False") + set(${_VARIABLE} 0 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the prototype ${_FUNCTION} exists for ${_VARIABLE} failed with the following output:\n" + "${OUTPUT}\n\n${_SOURCE}\n\n") + endif (${_VARIABLE}) + endif("${_VARIABLE}" MATCHES "^${_VARIABLE}$") + +endfunction(CHECK_PROTOTYPE_DEFINITION) diff --git a/Modules/CheckSizeOf.cmake b/Modules/CheckSizeOf.cmake new file mode 100644 index 0000000..f6d6636 --- /dev/null +++ b/Modules/CheckSizeOf.cmake @@ -0,0 +1,18 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +MESSAGE(SEND_ERROR + "Modules/CheckSizeOf.cmake has been removed. " + "Use Modules/CheckTypeSize.cmake instead. This " + "compatability check may be removed before the next release!") diff --git a/Modules/CheckStructHasMember.cmake b/Modules/CheckStructHasMember.cmake new file mode 100644 index 0000000..18e80e3 --- /dev/null +++ b/Modules/CheckStructHasMember.cmake @@ -0,0 +1,51 @@ +# - Check if the given struct or class has the specified member variable +# CHECK_STRUCT_HAS_MEMBER (STRUCT MEMBER HEADER VARIABLE) +# +# STRUCT - the name of the struct or class you are interested in +# MEMBER - the member which existence you want to check +# HEADER - the header(s) where the prototype should be declared +# VARIABLE - variable to store the result +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# +# Example: CHECK_STRUCT_HAS_MEMBER("struct timeval" tv_sec sys/select.h HAVE_TIMEVAL_TV_SEC) + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(CheckCSourceCompiles) + +MACRO (CHECK_STRUCT_HAS_MEMBER _STRUCT _MEMBER _HEADER _RESULT) + SET(_INCLUDE_FILES) + FOREACH (it ${_HEADER}) + SET(_INCLUDE_FILES "${_INCLUDE_FILES}#include <${it}>\n") + ENDFOREACH (it) + + SET(_CHECK_STRUCT_MEMBER_SOURCE_CODE " +${_INCLUDE_FILES} +int main() +{ + ${_STRUCT}* tmp; + tmp->${_MEMBER}; + return 0; +} +") + CHECK_C_SOURCE_COMPILES("${_CHECK_STRUCT_MEMBER_SOURCE_CODE}" ${_RESULT}) + +ENDMACRO (CHECK_STRUCT_HAS_MEMBER) + diff --git a/Modules/CheckSymbolExists.cmake b/Modules/CheckSymbolExists.cmake new file mode 100644 index 0000000..e6e677d --- /dev/null +++ b/Modules/CheckSymbolExists.cmake @@ -0,0 +1,101 @@ +# - Check if a symbol exists as a function, variable, or macro +# CHECK_SYMBOL_EXISTS( ) +# +# Check that the is available after including given header +# and store the result in a . Specify the list +# of files in one argument as a semicolon-separated list. +# +# If the header files define the symbol as a macro it is considered +# available and assumed to work. If the header files declare the +# symbol as a function or variable then the symbol must also be +# available for linking. If the symbol is a type or enum value +# it will not be recognized (consider using CheckTypeSize or +# CheckCSourceCompiles). +# If the check needs to be done in C++, consider using CHECK_CXX_SYMBOL_EXISTS(), +# which does the same as CHECK_SYMBOL_EXISTS(), but in C++. +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2003-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + + +MACRO(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE) + _CHECK_SYMBOL_EXISTS("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.c" "${SYMBOL}" "${FILES}" "${VARIABLE}" ) +ENDMACRO(CHECK_SYMBOL_EXISTS) + +MACRO(_CHECK_SYMBOL_EXISTS SOURCEFILE SYMBOL FILES VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + SET(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n") + SET(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS}) + IF(CMAKE_REQUIRED_LIBRARIES) + # this one translates potentially used imported library targets to their files on disk + CMAKE_EXPAND_IMPORTED_TARGETS(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + SET(CHECK_SYMBOL_EXISTS_LIBS + "-DLINK_LIBRARIES:STRING=${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}") + ELSE(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_SYMBOL_EXISTS_LIBS) + ENDIF(CMAKE_REQUIRED_LIBRARIES) + IF(CMAKE_REQUIRED_INCLUDES) + SET(CMAKE_SYMBOL_EXISTS_INCLUDES + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") + ELSE(CMAKE_REQUIRED_INCLUDES) + SET(CMAKE_SYMBOL_EXISTS_INCLUDES) + ENDIF(CMAKE_REQUIRED_INCLUDES) + FOREACH(FILE ${FILES}) + SET(CMAKE_CONFIGURABLE_FILE_CONTENT + "${CMAKE_CONFIGURABLE_FILE_CONTENT}#include <${FILE}>\n") + ENDFOREACH(FILE) + SET(CMAKE_CONFIGURABLE_FILE_CONTENT + "${CMAKE_CONFIGURABLE_FILE_CONTENT}\nint main(int argc, char** argv)\n{\n (void)argv;\n#ifndef ${SYMBOL}\n return ((int*)(&${SYMBOL}))[argc];\n#else\n (void)argc;\n return 0;\n#endif\n}\n") + + CONFIGURE_FILE("${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in" + "${SOURCEFILE}" @ONLY IMMEDIATE) + + MESSAGE(STATUS "Looking for ${SYMBOL}") + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + "${SOURCEFILE}" + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS + -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS} + "${CHECK_SYMBOL_EXISTS_LIBS}" + "${CMAKE_SYMBOL_EXISTS_INCLUDES}" + OUTPUT_VARIABLE OUTPUT) + IF(${VARIABLE}) + MESSAGE(STATUS "Looking for ${SYMBOL} - found") + SET(${VARIABLE} 1 CACHE INTERNAL "Have symbol ${SYMBOL}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the ${SYMBOL} " + "exist passed with the following output:\n" + "${OUTPUT}\nFile ${SOURCEFILE}:\n" + "${CMAKE_CONFIGURABLE_FILE_CONTENT}\n") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Looking for ${SYMBOL} - not found.") + SET(${VARIABLE} "" CACHE INTERNAL "Have symbol ${SYMBOL}") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the ${SYMBOL} " + "exist failed with the following output:\n" + "${OUTPUT}\nFile ${SOURCEFILE}:\n" + "${CMAKE_CONFIGURABLE_FILE_CONTENT}\n") + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(_CHECK_SYMBOL_EXISTS) diff --git a/Modules/CheckTypeSize.c.in b/Modules/CheckTypeSize.c.in new file mode 100644 index 0000000..b6c3688 --- /dev/null +++ b/Modules/CheckTypeSize.c.in @@ -0,0 +1,37 @@ +@headers@ + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(@type@)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/Modules/CheckTypeSize.cmake b/Modules/CheckTypeSize.cmake new file mode 100644 index 0000000..1717718 --- /dev/null +++ b/Modules/CheckTypeSize.cmake @@ -0,0 +1,196 @@ +# - Check sizeof a type +# CHECK_TYPE_SIZE(TYPE VARIABLE [BUILTIN_TYPES_ONLY]) +# Check if the type exists and determine its size. +# On return, "HAVE_${VARIABLE}" holds the existence of the type, +# and "${VARIABLE}" holds one of the following: +# = type has non-zero size +# "0" = type has arch-dependent size (see below) +# "" = type does not exist +# Furthermore, the variable "${VARIABLE}_CODE" holds C preprocessor +# code to define the macro "${VARIABLE}" to the size of the type, or +# leave the macro undefined if the type does not exist. +# +# The variable "${VARIABLE}" may be "0" when CMAKE_OSX_ARCHITECTURES +# has multiple architectures for building OS X universal binaries. +# This indicates that the type size varies across architectures. +# In this case "${VARIABLE}_CODE" contains C preprocessor tests +# mapping from each architecture macro to the corresponding type size. +# The list of architecture macros is stored in "${VARIABLE}_KEYS", and +# the value for each key is stored in "${VARIABLE}-${KEY}". +# +# If the BUILTIN_TYPES_ONLY option is not given, the macro checks for +# headers , , and , and saves results +# in HAVE_SYS_TYPES_H, HAVE_STDINT_H, and HAVE_STDDEF_H. The type +# size check automatically includes the available headers, thus +# supporting checks of types defined in the headers. +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_INCLUDES = list of include directories +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link +# CMAKE_EXTRA_INCLUDE_FILES = list of extra headers to include + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +include(CheckIncludeFile) +include("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + +cmake_policy(PUSH) +cmake_minimum_required(VERSION 2.6 FATAL_ERROR) + +get_filename_component(__check_type_size_dir "${CMAKE_CURRENT_LIST_FILE}" PATH) + +#----------------------------------------------------------------------------- +# Helper function. DO NOT CALL DIRECTLY. +function(__check_type_size_impl type var map builtin) + message(STATUS "Check size of ${type}") + + # Include header files. + set(headers) + if(builtin) + if(HAVE_SYS_TYPES_H) + set(headers "${headers}#include \n") + endif() + if(HAVE_STDINT_H) + set(headers "${headers}#include \n") + endif() + if(HAVE_STDDEF_H) + set(headers "${headers}#include \n") + endif() + endif() + foreach(h ${CMAKE_EXTRA_INCLUDE_FILES}) + set(headers "${headers}#include \"${h}\"\n") + endforeach() + + # Perform the check. + + # this one translates potentially used imported library targets to their files on disk + cmake_expand_imported_targets(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + + set(src ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.c) + set(bin ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.bin) + configure_file(${__check_type_size_dir}/CheckTypeSize.c.in ${src} @ONLY) + try_compile(HAVE_${var} ${CMAKE_BINARY_DIR} ${src} + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS + "-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}" + "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}" + "-DLINK_LIBRARIES:STRING=${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}" + OUTPUT_VARIABLE output + COPY_FILE ${bin} + ) + + if(HAVE_${var}) + # The check compiled. Load information from the binary. + file(STRINGS ${bin} strings LIMIT_COUNT 10 REGEX "INFO:size") + + # Parse the information strings. + set(regex_size ".*INFO:size\\[0*([^]]*)\\].*") + set(regex_key " key\\[([^]]*)\\]") + set(keys) + set(code) + set(mismatch) + set(first 1) + foreach(info ${strings}) + if("${info}" MATCHES "${regex_size}") + # Get the type size. + string(REGEX REPLACE "${regex_size}" "\\1" size "${info}") + if(first) + set(${var} ${size}) + elseif(NOT "${size}" STREQUAL "${${var}}") + set(mismatch 1) + endif() + set(first 0) + + # Get the architecture map key. + string(REGEX MATCH "${regex_key}" key "${info}") + string(REGEX REPLACE "${regex_key}" "\\1" key "${key}") + if(key) + set(code "${code}\nset(${var}-${key} \"${size}\")") + list(APPEND keys ${key}) + endif() + endif() + endforeach() + + # Update the architecture-to-size map. + if(mismatch AND keys) + configure_file(${__check_type_size_dir}/CheckTypeSizeMap.cmake.in ${map} @ONLY) + set(${var} 0) + else() + file(REMOVE ${map}) + endif() + + if(mismatch AND NOT keys) + message(SEND_ERROR "CHECK_TYPE_SIZE found different results, consider setting CMAKE_OSX_ARCHITECTURES or CMAKE_TRY_COMPILE_OSX_ARCHITECTURES to one or no architecture !") + endif() + + message(STATUS "Check size of ${type} - done") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining size of ${type} passed with the following output:\n${output}\n\n") + set(${var} "${${var}}" CACHE INTERNAL "CHECK_TYPE_SIZE: sizeof(${type})") + else(HAVE_${var}) + # The check failed to compile. + message(STATUS "Check size of ${type} - failed") + file(READ ${src} content) + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining size of ${type} failed with the following output:\n${output}\n${src}:\n${content}\n\n") + set(${var} "" CACHE INTERNAL "CHECK_TYPE_SIZE: ${type} unknown") + file(REMOVE ${map}) + endif(HAVE_${var}) +endfunction() + +#----------------------------------------------------------------------------- +macro(CHECK_TYPE_SIZE TYPE VARIABLE) + # Optionally check for standard headers. + if("${ARGV2}" STREQUAL "BUILTIN_TYPES_ONLY") + set(_builtin 0) + else() + set(_builtin 1) + check_include_file(sys/types.h HAVE_SYS_TYPES_H) + check_include_file(stdint.h HAVE_STDINT_H) + check_include_file(stddef.h HAVE_STDDEF_H) + endif() + + # Compute or load the size or size map. + set(${VARIABLE}_KEYS) + set(_map_file ${CMAKE_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${VARIABLE}.cmake) + if(NOT DEFINED HAVE_${VARIABLE}) + __check_type_size_impl(${TYPE} ${VARIABLE} ${_map_file} ${_builtin}) + endif() + include(${_map_file} OPTIONAL) + set(_map_file) + set(_builtin) + + # Create preprocessor code. + if(${VARIABLE}_KEYS) + set(${VARIABLE}_CODE) + set(_if if) + foreach(key ${${VARIABLE}_KEYS}) + set(${VARIABLE}_CODE "${${VARIABLE}_CODE}#${_if} defined(${key})\n# define ${VARIABLE} ${${VARIABLE}-${key}}\n") + set(_if elif) + endforeach() + set(${VARIABLE}_CODE "${${VARIABLE}_CODE}#else\n# error ${VARIABLE} unknown\n#endif") + set(_if) + elseif(${VARIABLE}) + set(${VARIABLE}_CODE "#define ${VARIABLE} ${${VARIABLE}}") + else() + set(${VARIABLE}_CODE "/* #undef ${VARIABLE} */") + endif() +endmacro() + +#----------------------------------------------------------------------------- +cmake_policy(POP) diff --git a/Modules/CheckTypeSizeMap.cmake.in b/Modules/CheckTypeSizeMap.cmake.in new file mode 100644 index 0000000..1e73cff --- /dev/null +++ b/Modules/CheckTypeSizeMap.cmake.in @@ -0,0 +1 @@ +set(@var@_KEYS "@keys@")@code@ diff --git a/Modules/CheckVariableExists.c b/Modules/CheckVariableExists.c new file mode 100644 index 0000000..752f6e4 --- /dev/null +++ b/Modules/CheckVariableExists.c @@ -0,0 +1,20 @@ +#ifdef CHECK_VARIABLE_EXISTS + +extern int CHECK_VARIABLE_EXISTS; + +#ifdef __CLASSIC_C__ +int main(){ + int ac; + char*av[]; +#else +int main(int ac, char*av[]){ +#endif + if(ac > 1000){return *av[0];} + return CHECK_VARIABLE_EXISTS; +} + +#else /* CHECK_VARIABLE_EXISTS */ + +# error "CHECK_VARIABLE_EXISTS has to specify the variable" + +#endif /* CHECK_VARIABLE_EXISTS */ diff --git a/Modules/CheckVariableExists.cmake b/Modules/CheckVariableExists.cmake new file mode 100644 index 0000000..7d6c794 --- /dev/null +++ b/Modules/CheckVariableExists.cmake @@ -0,0 +1,66 @@ +# - Check if the variable exists. +# CHECK_VARIABLE_EXISTS(VAR VARIABLE) +# +# VAR - the name of the variable +# VARIABLE - variable to store the result +# +# This macro is only for C variables. +# +# The following variables may be set before calling this macro to +# modify the way the check is run: +# +# CMAKE_REQUIRED_FLAGS = string of compile command line flags +# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) +# CMAKE_REQUIRED_LIBRARIES = list of libraries to link + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/CMakeExpandImportedTargets.cmake") + + +MACRO(CHECK_VARIABLE_EXISTS VAR VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + SET(MACRO_CHECK_VARIABLE_DEFINITIONS + "-DCHECK_VARIABLE_EXISTS=${VAR} ${CMAKE_REQUIRED_FLAGS}") + MESSAGE(STATUS "Looking for ${VAR}") + IF(CMAKE_REQUIRED_LIBRARIES) + # this one translates potentially used imported library targets to their files on disk + CMAKE_EXPAND_IMPORTED_TARGETS(_ADJUSTED_CMAKE_REQUIRED_LIBRARIES LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + SET(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${_ADJUSTED_CMAKE_REQUIRED_LIBRARIES}") + ELSE(CMAKE_REQUIRED_LIBRARIES) + SET(CHECK_VARIABLE_EXISTS_ADD_LIBRARIES) + ENDIF(CMAKE_REQUIRED_LIBRARIES) + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_ROOT}/Modules/CheckVariableExists.c + COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_VARIABLE_DEFINITIONS} + "${CHECK_VARIABLE_EXISTS_ADD_LIBRARIES}" + OUTPUT_VARIABLE OUTPUT) + IF(${VARIABLE}) + SET(${VARIABLE} 1 CACHE INTERNAL "Have variable ${VAR}") + MESSAGE(STATUS "Looking for ${VAR} - found") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the variable ${VAR} exists passed with the following output:\n" + "${OUTPUT}\n\n") + ELSE(${VARIABLE}) + SET(${VARIABLE} "" CACHE INTERNAL "Have variable ${VAR}") + MESSAGE(STATUS "Looking for ${VAR} - not found") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the variable ${VAR} exists failed with the following output:\n" + "${OUTPUT}\n\n") + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(CHECK_VARIABLE_EXISTS) diff --git a/Modules/Compiler/Absoft-Fortran.cmake b/Modules/Compiler/Absoft-Fortran.cmake new file mode 100644 index 0000000..1bb7b1f --- /dev/null +++ b/Modules/Compiler/Absoft-Fortran.cmake @@ -0,0 +1,10 @@ +SET(CMAKE_Fortran_FLAGS_INIT "") +SET(CMAKE_Fortran_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "") +SET(CMAKE_Fortran_FLAGS_RELEASE_INIT "-O3") +SET(CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") +SET(CMAKE_Fortran_MODDIR_FLAG "-YMOD_OUT_DIR=") +SET(CMAKE_Fortran_MODPATH_FLAG "-p") +SET(CMAKE_Fortran_VERBOSE_FLAG "-v") +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-ffixed") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-ffree") diff --git a/Modules/Compiler/Clang-C.cmake b/Modules/Compiler/Clang-C.cmake new file mode 100644 index 0000000..f7baf68 --- /dev/null +++ b/Modules/Compiler/Clang-C.cmake @@ -0,0 +1 @@ +include(Compiler/GNU-C) diff --git a/Modules/Compiler/Clang-CXX.cmake b/Modules/Compiler/Clang-CXX.cmake new file mode 100644 index 0000000..d3c403a --- /dev/null +++ b/Modules/Compiler/Clang-CXX.cmake @@ -0,0 +1 @@ +include(Compiler/GNU-CXX) diff --git a/Modules/Compiler/Cray-C.cmake b/Modules/Compiler/Cray-C.cmake new file mode 100644 index 0000000..675560c --- /dev/null +++ b/Modules/Compiler/Cray-C.cmake @@ -0,0 +1 @@ +set(CMAKE_C_VERBOSE_FLAG "-v") diff --git a/Modules/Compiler/Cray-CXX.cmake b/Modules/Compiler/Cray-CXX.cmake new file mode 100644 index 0000000..9fb191c --- /dev/null +++ b/Modules/Compiler/Cray-CXX.cmake @@ -0,0 +1 @@ +set(CMAKE_CXX_VERBOSE_FLAG "-v") diff --git a/Modules/Compiler/Cray-Fortran.cmake b/Modules/Compiler/Cray-Fortran.cmake new file mode 100644 index 0000000..5d81bb0 --- /dev/null +++ b/Modules/Compiler/Cray-Fortran.cmake @@ -0,0 +1,6 @@ +set(CMAKE_Fortran_VERBOSE_FLAG "-v") +set(CMAKE_Fortran_MODOUT_FLAG -em) +set(CMAKE_Fortran_MODDIR_FLAG -J) +set(CMAKE_Fortran_MODDIR_DEFAULT .) +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-f fixed") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-f free") diff --git a/Modules/Compiler/G95-Fortran.cmake b/Modules/Compiler/G95-Fortran.cmake new file mode 100644 index 0000000..fd84848 --- /dev/null +++ b/Modules/Compiler/G95-Fortran.cmake @@ -0,0 +1,9 @@ +set(CMAKE_Fortran_FLAGS_INIT "") +set(CMAKE_Fortran_FLAGS_DEBUG_INIT "-g") +set(CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "-Os") +set(CMAKE_Fortran_FLAGS_RELEASE_INIT "-O3") +set(CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") +set(CMAKE_Fortran_MODDIR_FLAG "-fmod=") +set(CMAKE_Fortran_VERBOSE_FLAG "-v") +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-ffixed-form") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-ffree-form") diff --git a/Modules/Compiler/GNU-ASM.cmake b/Modules/Compiler/GNU-ASM.cmake new file mode 100644 index 0000000..e07401d --- /dev/null +++ b/Modules/Compiler/GNU-ASM.cmake @@ -0,0 +1,6 @@ +# This file is loaded when gcc/g++ is used for assembler files (the "ASM" cmake language) +include(Compiler/GNU) + +set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;S;asm) + +__compiler_gnu(ASM) diff --git a/Modules/Compiler/GNU-C.cmake b/Modules/Compiler/GNU-C.cmake new file mode 100644 index 0000000..9a5137a --- /dev/null +++ b/Modules/Compiler/GNU-C.cmake @@ -0,0 +1,2 @@ +include(Compiler/GNU) +__compiler_gnu(C) diff --git a/Modules/Compiler/GNU-CXX.cmake b/Modules/Compiler/GNU-CXX.cmake new file mode 100644 index 0000000..879ab8f --- /dev/null +++ b/Modules/Compiler/GNU-CXX.cmake @@ -0,0 +1,2 @@ +include(Compiler/GNU) +__compiler_gnu(CXX) diff --git a/Modules/Compiler/GNU-Fortran.cmake b/Modules/Compiler/GNU-Fortran.cmake new file mode 100644 index 0000000..c710e86 --- /dev/null +++ b/Modules/Compiler/GNU-Fortran.cmake @@ -0,0 +1,17 @@ +include(Compiler/GNU) +__compiler_gnu(Fortran) + +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-ffixed-form") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-ffree-form") + +# No -DNDEBUG for Fortran. +SET(CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "-Os") +SET(CMAKE_Fortran_FLAGS_RELEASE_INIT "-O3") + +# We require updates to CMake C++ code to support preprocessing rules +# for Fortran. +SET(CMAKE_Fortran_CREATE_PREPROCESSED_SOURCE) +SET(CMAKE_Fortran_CREATE_ASSEMBLY_SOURCE) + +# Fortran-specific feature flags. +SET(CMAKE_Fortran_MODDIR_FLAG -J) diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake new file mode 100644 index 0000000..c74c179 --- /dev/null +++ b/Modules/Compiler/GNU.cmake @@ -0,0 +1,50 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__COMPILER_GNU) + return() +endif() +set(__COMPILER_GNU 1) + +macro(__compiler_gnu lang) + # Feature flags. + set(CMAKE_${lang}_VERBOSE_FLAG "-v") + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared") + + # Older versions of gcc (< 4.5) contain a bug causing them to report a missing + # header file as a warning if depfiles are enabled, causing check_header_file + # tests to always succeed. Work around this by disabling dependency tracking + # in try_compile mode. + GET_PROPERTY(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE) + if(NOT _IN_TC OR CMAKE_FORCE_DEPFILES) + # distcc does not transform -o to -MT when invoking the preprocessor + # internally, as it ought to. Work around this bug by setting -MT here + # even though it isn't strictly necessary. + set(CMAKE_DEPFILE_FLAGS_${lang} "-MMD -MT -MF ") + endif() + + # Initial configuration flags. + set(CMAKE_${lang}_FLAGS_INIT "") + set(CMAKE_${lang}_FLAGS_DEBUG_INIT "-g") + set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") + set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") + set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") + set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE " -E > ") + set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE " -S -o ") + if(NOT APPLE) + set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-isystem ") + endif(NOT APPLE) +endmacro() diff --git a/Modules/Compiler/HP-ASM.cmake b/Modules/Compiler/HP-ASM.cmake new file mode 100644 index 0000000..8aa7bdb --- /dev/null +++ b/Modules/Compiler/HP-ASM.cmake @@ -0,0 +1,3 @@ +SET(CMAKE_ASM_VERBOSE_FLAG "-v") + +set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s ) diff --git a/Modules/Compiler/HP-C.cmake b/Modules/Compiler/HP-C.cmake new file mode 100644 index 0000000..dc7fbb2 --- /dev/null +++ b/Modules/Compiler/HP-C.cmake @@ -0,0 +1,4 @@ +SET(CMAKE_C_VERBOSE_FLAG "-v") + +SET(CMAKE_C_CREATE_ASSEMBLY_SOURCE " -S -o ") +SET(CMAKE_C_CREATE_PREPROCESSED_SOURCE " -E > ") diff --git a/Modules/Compiler/HP-CXX.cmake b/Modules/Compiler/HP-CXX.cmake new file mode 100644 index 0000000..82c1a86 --- /dev/null +++ b/Modules/Compiler/HP-CXX.cmake @@ -0,0 +1,4 @@ +SET(CMAKE_CXX_VERBOSE_FLAG "-v") + +SET(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE " -S -o ") +SET(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE " -E > ") diff --git a/Modules/Compiler/HP-Fortran.cmake b/Modules/Compiler/HP-Fortran.cmake new file mode 100644 index 0000000..04fb96e --- /dev/null +++ b/Modules/Compiler/HP-Fortran.cmake @@ -0,0 +1,3 @@ +SET(CMAKE_Fortran_VERBOSE_FLAG "-v") +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "+source=fixed") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "+source=free") diff --git a/Modules/Compiler/Intel-ASM.cmake b/Modules/Compiler/Intel-ASM.cmake new file mode 100644 index 0000000..59b50a1 --- /dev/null +++ b/Modules/Compiler/Intel-ASM.cmake @@ -0,0 +1,13 @@ +SET(CMAKE_ASM_VERBOSE_FLAG "-v") + +SET(CMAKE_ASM_FLAGS_INIT "") +SET(CMAKE_ASM_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_ASM_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") +SET(CMAKE_ASM_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") +SET(CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") + +IF(UNIX) + SET(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;S) +ELSE(UNIX) + SET(CMAKE_ASM_SOURCE_FILE_EXTENSIONS asm) +ENDIF(UNIX) diff --git a/Modules/Compiler/Intel-C.cmake b/Modules/Compiler/Intel-C.cmake new file mode 100644 index 0000000..4be91d0 --- /dev/null +++ b/Modules/Compiler/Intel-C.cmake @@ -0,0 +1,10 @@ +SET(CMAKE_C_VERBOSE_FLAG "-v") + +SET(CMAKE_C_FLAGS_INIT "") +SET(CMAKE_C_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") +SET(CMAKE_C_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") +SET(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") + +SET(CMAKE_C_CREATE_PREPROCESSED_SOURCE " -E > ") +SET(CMAKE_C_CREATE_ASSEMBLY_SOURCE " -S -o ") diff --git a/Modules/Compiler/Intel-CXX.cmake b/Modules/Compiler/Intel-CXX.cmake new file mode 100644 index 0000000..ff01a81 --- /dev/null +++ b/Modules/Compiler/Intel-CXX.cmake @@ -0,0 +1,10 @@ +SET(CMAKE_CXX_VERBOSE_FLAG "-v") + +SET(CMAKE_CXX_FLAGS_INIT "") +SET(CMAKE_CXX_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") +SET(CMAKE_CXX_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") +SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") + +SET(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE " -E > ") +SET(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE " -S -o ") diff --git a/Modules/Compiler/Intel-Fortran.cmake b/Modules/Compiler/Intel-Fortran.cmake new file mode 100644 index 0000000..467abdc --- /dev/null +++ b/Modules/Compiler/Intel-Fortran.cmake @@ -0,0 +1,9 @@ +SET(CMAKE_Fortran_FLAGS_INIT "") +SET(CMAKE_Fortran_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "-Os") +SET(CMAKE_Fortran_FLAGS_RELEASE_INIT "-O3") +SET(CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") +SET(CMAKE_Fortran_MODDIR_FLAG "-module ") +SET(CMAKE_Fortran_VERBOSE_FLAG "-v") +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixed") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-free") diff --git a/Modules/Compiler/MIPSpro-C.cmake b/Modules/Compiler/MIPSpro-C.cmake new file mode 100644 index 0000000..abf384a --- /dev/null +++ b/Modules/Compiler/MIPSpro-C.cmake @@ -0,0 +1 @@ +SET(CMAKE_C_VERBOSE_FLAG "-v") diff --git a/Modules/Compiler/MIPSpro-CXX.cmake b/Modules/Compiler/MIPSpro-CXX.cmake new file mode 100644 index 0000000..f3c6b5f --- /dev/null +++ b/Modules/Compiler/MIPSpro-CXX.cmake @@ -0,0 +1 @@ +SET(CMAKE_CXX_VERBOSE_FLAG "-v") diff --git a/Modules/Compiler/MIPSpro-Fortran.cmake b/Modules/Compiler/MIPSpro-Fortran.cmake new file mode 100644 index 0000000..9220d3b --- /dev/null +++ b/Modules/Compiler/MIPSpro-Fortran.cmake @@ -0,0 +1,3 @@ +SET(CMAKE_Fortran_VERBOSE_FLAG "-v") +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixedform") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-freeform") diff --git a/Modules/Compiler/NAG-Fortran.cmake b/Modules/Compiler/NAG-Fortran.cmake new file mode 100644 index 0000000..9a89746 --- /dev/null +++ b/Modules/Compiler/NAG-Fortran.cmake @@ -0,0 +1,34 @@ +# Help CMAKE_PARSE_IMPLICIT_LINK_INFO detect NAG Fortran object files. +if(NOT CMAKE_Fortran_COMPILER_WORKS AND NOT CMAKE_Fortran_COMPILER_FORCED) + message(STATUS "Detecting NAG Fortran directory") + # Run with -dryrun to see sample "link" line. + execute_process( + COMMAND ${CMAKE_Fortran_COMPILER} dummy.o -dryrun + OUTPUT_VARIABLE _dryrun + ERROR_VARIABLE _dryrun + ) + # Match an object file. + string(REGEX MATCH "/[^ ]*/[^ /][^ /]*\\.o" _nag_obj "${_dryrun}") + if(_nag_obj) + # Parse object directory and convert to a regex. + string(REGEX REPLACE "/[^/]*$" "" _nag_dir "${_nag_obj}") + string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" _nag_regex "${_nag_dir}") + set(CMAKE_Fortran_IMPLICIT_OBJECT_REGEX "^${_nag_regex}/") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Detecting NAG Fortran directory with -dryrun found\n" + " object: ${_nag_obj}\n" + " directory: ${_nag_dir}\n" + " regex: ${CMAKE_Fortran_IMPLICIT_OBJECT_REGEX}\n" + "from output:\n${_dryrun}\n\n") + message(STATUS "Detecting NAG Fortran directory - ${_nag_dir}") + else() + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Detecting NAG Fortran directory with -dryrun failed:\n${_dryrun}\n\n") + message(STATUS "Detecting NAG Fortran directory - failed") + endif() +endif() + +set(CMAKE_Fortran_MODDIR_FLAG "-mdir ") +set(CMAKE_SHARED_LIBRARY_Fortran_FLAGS "-PIC") +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixed") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-free") diff --git a/Modules/Compiler/PGI-C.cmake b/Modules/Compiler/PGI-C.cmake new file mode 100644 index 0000000..da88c01 --- /dev/null +++ b/Modules/Compiler/PGI-C.cmake @@ -0,0 +1,4 @@ +include(Compiler/PGI) +__compiler_pgi(C) +set(CMAKE_C_FLAGS_MINSIZEREL_INIT "${CMAKE_C_FLAGS_MINSIZEREL_INIT} -DNDEBUG") +set(CMAKE_C_FLAGS_RELEASE_INIT "${CMAKE_C_FLAGS_RELEASE_INIT} -DNDEBUG") diff --git a/Modules/Compiler/PGI-CXX.cmake b/Modules/Compiler/PGI-CXX.cmake new file mode 100644 index 0000000..97c9555 --- /dev/null +++ b/Modules/Compiler/PGI-CXX.cmake @@ -0,0 +1,4 @@ +include(Compiler/PGI) +__compiler_pgi(CXX) +set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "${CMAKE_CXX_FLAGS_MINSIZEREL_INIT} -DNDEBUG") +set(CMAKE_CXX_FLAGS_RELEASE_INIT "${CMAKE_CXX_FLAGS_RELEASE_INIT} -DNDEBUG") diff --git a/Modules/Compiler/PGI-Fortran.cmake b/Modules/Compiler/PGI-Fortran.cmake new file mode 100644 index 0000000..aebc7b1 --- /dev/null +++ b/Modules/Compiler/PGI-Fortran.cmake @@ -0,0 +1,15 @@ +include(Compiler/PGI) +__compiler_pgi(Fortran) + +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-Mnofreeform") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-Mfreeform") + +SET(CMAKE_Fortran_FLAGS_INIT "${CMAKE_Fortran_FLAGS_INIT} -Mpreprocess -Kieee") +SET(CMAKE_Fortran_FLAGS_DEBUG_INIT "${CMAKE_Fortran_FLAGS_DEBUG_INIT} -Mbounds") + +# We require updates to CMake C++ code to support preprocessing rules +# for Fortran. +SET(CMAKE_Fortran_CREATE_PREPROCESSED_SOURCE) +SET(CMAKE_Fortran_CREATE_ASSEMBLY_SOURCE) + +SET(CMAKE_Fortran_MODDIR_FLAG "-module ") diff --git a/Modules/Compiler/PGI.cmake b/Modules/Compiler/PGI.cmake new file mode 100644 index 0000000..162e3c9 --- /dev/null +++ b/Modules/Compiler/PGI.cmake @@ -0,0 +1,35 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__COMPILER_PGI) + return() +endif() +set(__COMPILER_PGI 1) + +macro(__compiler_pgi lang) + # Feature flags. + set(CMAKE_${lang}_VERBOSE_FLAG "-v") + + # Initial configuration flags. + set(CMAKE_${lang}_FLAGS_INIT "") + set(CMAKE_${lang}_FLAGS_DEBUG_INIT "-g -O0") + set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "-O2 -s") + set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-fast -O3 -Mipa=fast") + set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "-O2 -gopt") + + # Preprocessing and assembly rules. + set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE " -E > ") + set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE " -S -o ") +endmacro() diff --git a/Modules/Compiler/PathScale-C.cmake b/Modules/Compiler/PathScale-C.cmake new file mode 100644 index 0000000..9db54af --- /dev/null +++ b/Modules/Compiler/PathScale-C.cmake @@ -0,0 +1,4 @@ +include(Compiler/PathScale) +__compiler_pathscale(C) +set(CMAKE_C_FLAGS_MINSIZEREL_INIT "${CMAKE_C_FLAGS_MINSIZEREL_INIT} -DNDEBUG") +set(CMAKE_C_FLAGS_RELEASE_INIT "${CMAKE_C_FLAGS_RELEASE_INIT} -DNDEBUG") diff --git a/Modules/Compiler/PathScale-CXX.cmake b/Modules/Compiler/PathScale-CXX.cmake new file mode 100644 index 0000000..4dd7660 --- /dev/null +++ b/Modules/Compiler/PathScale-CXX.cmake @@ -0,0 +1,4 @@ +include(Compiler/PathScale) +__compiler_pathscale(CXX) +set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "${CMAKE_CXX_FLAGS_MINSIZEREL_INIT} -DNDEBUG") +set(CMAKE_CXX_FLAGS_RELEASE_INIT "${CMAKE_CXX_FLAGS_RELEASE_INIT} -DNDEBUG") diff --git a/Modules/Compiler/PathScale-Fortran.cmake b/Modules/Compiler/PathScale-Fortran.cmake new file mode 100644 index 0000000..e05bf2a --- /dev/null +++ b/Modules/Compiler/PathScale-Fortran.cmake @@ -0,0 +1,6 @@ +include(Compiler/PathScale) +__compiler_pathscale(Fortran) + +SET(CMAKE_Fortran_MODDIR_FLAG "-module ") +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixedform") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-freeform") diff --git a/Modules/Compiler/PathScale.cmake b/Modules/Compiler/PathScale.cmake new file mode 100644 index 0000000..107f779 --- /dev/null +++ b/Modules/Compiler/PathScale.cmake @@ -0,0 +1,31 @@ + +#============================================================================= +# Copyright 2002-2010 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.) + +# This module is shared by multiple languages; use include blocker. +if(__COMPILER_PATHSCALE) + return() +endif() +set(__COMPILER_PATHSCALE 1) + +macro(__compiler_pathscale lang) + # Feature flags. + set(CMAKE_${lang}_VERBOSE_FLAG "-v") + + # Initial configuration flags. + set(CMAKE_${lang}_FLAGS_INIT "") + set(CMAKE_${lang}_FLAGS_DEBUG_INIT "-g -O0") + set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "-Os") + set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-O3") + set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "-g -O2") +endmacro() diff --git a/Modules/Compiler/SCO-C.cmake b/Modules/Compiler/SCO-C.cmake new file mode 100644 index 0000000..6e762cc --- /dev/null +++ b/Modules/Compiler/SCO-C.cmake @@ -0,0 +1,2 @@ +include(Compiler/SCO) +__compiler_sco(C) diff --git a/Modules/Compiler/SCO-CXX.cmake b/Modules/Compiler/SCO-CXX.cmake new file mode 100644 index 0000000..5b713a0 --- /dev/null +++ b/Modules/Compiler/SCO-CXX.cmake @@ -0,0 +1,2 @@ +include(Compiler/SCO) +__compiler_sco(CXX) diff --git a/Modules/Compiler/SCO.cmake b/Modules/Compiler/SCO.cmake new file mode 100644 index 0000000..d3deeb1 --- /dev/null +++ b/Modules/Compiler/SCO.cmake @@ -0,0 +1,25 @@ + +#============================================================================= +# Copyright 2002-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__COMPILER_SCO) + return() +endif() +set(__COMPILER_SCO 1) + +macro(__compiler_sco lang) + # Feature flags. + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-Kpic -belf") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-belf -Wl,-Bexport") +endmacro() diff --git a/Modules/Compiler/SunPro-ASM.cmake b/Modules/Compiler/SunPro-ASM.cmake new file mode 100644 index 0000000..dfc5702 --- /dev/null +++ b/Modules/Compiler/SunPro-ASM.cmake @@ -0,0 +1,24 @@ +set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s ) + +SET(CMAKE_ASM_VERBOSE_FLAG "-#") + +SET(CMAKE_SHARED_LIBRARY_ASM_FLAGS "-KPIC") +SET(CMAKE_SHARED_LIBRARY_CREATE_ASM_FLAGS "-G") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_ASM_FLAG "-R") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_ASM_FLAG_SEP ":") +SET(CMAKE_SHARED_LIBRARY_SONAME_ASM_FLAG "-h") + +SET(CMAKE_ASM_FLAGS_INIT "") +SET(CMAKE_ASM_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_ASM_FLAGS_MINSIZEREL_INIT "-xO2 -xspace -DNDEBUG") +SET(CMAKE_ASM_FLAGS_RELEASE_INIT "-xO3 -DNDEBUG") +SET(CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT "-g -xO2") + +# Initialize ASM link type selection flags. These flags are used when +# building a shared library, shared module, or executable that links +# to other libraries to select whether to use the static or shared +# versions of the libraries. +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_ASM_FLAGS "-Bstatic") + SET(CMAKE_${type}_LINK_DYNAMIC_ASM_FLAGS "-Bdynamic") +ENDFOREACH(type) diff --git a/Modules/Compiler/SunPro-C.cmake b/Modules/Compiler/SunPro-C.cmake new file mode 100644 index 0000000..656eea6 --- /dev/null +++ b/Modules/Compiler/SunPro-C.cmake @@ -0,0 +1,25 @@ +SET(CMAKE_C_VERBOSE_FLAG "-#") + +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-KPIC") +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-G") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-R") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") +SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-h") + +SET(CMAKE_C_FLAGS_INIT "") +SET(CMAKE_C_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_C_FLAGS_MINSIZEREL_INIT "-xO2 -xspace -DNDEBUG") +SET(CMAKE_C_FLAGS_RELEASE_INIT "-xO3 -DNDEBUG") +SET(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-g -xO2") + +# Initialize C link type selection flags. These flags are used when +# building a shared library, shared module, or executable that links +# to other libraries to select whether to use the static or shared +# versions of the libraries. +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Bstatic") + SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Bdynamic") +ENDFOREACH(type) + +SET(CMAKE_C_CREATE_PREPROCESSED_SOURCE " -E > ") +SET(CMAKE_C_CREATE_ASSEMBLY_SOURCE " -S -o ") diff --git a/Modules/Compiler/SunPro-CXX.cmake b/Modules/Compiler/SunPro-CXX.cmake new file mode 100644 index 0000000..3e07e8e --- /dev/null +++ b/Modules/Compiler/SunPro-CXX.cmake @@ -0,0 +1,31 @@ +SET(CMAKE_CXX_VERBOSE_FLAG "-v") + +SET(CMAKE_SHARED_LIBRARY_CXX_FLAGS "-KPIC") +SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-G") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG "-R") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP ":") +SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-h") + +SET(CMAKE_CXX_FLAGS_INIT "") +SET(CMAKE_CXX_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-xO2 -xspace -DNDEBUG") +SET(CMAKE_CXX_FLAGS_RELEASE_INIT "-xO3 -DNDEBUG") +SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-g -xO2") + +# Initialize C link type selection flags. These flags are used when +# building a shared library, shared module, or executable that links +# to other libraries to select whether to use the static or shared +# versions of the libraries. +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_CXX_FLAGS "-Bstatic") + SET(CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS "-Bdynamic") +ENDFOREACH(type) + +SET(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE " -E > ") +SET(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE " -S -o ") + +# Create archives with "CC -xar" in case user adds "-instances=extern" +# so that template instantiations are available to archive members. +SET(CMAKE_CXX_CREATE_STATIC_LIBRARY + " -xar -o " + " ") diff --git a/Modules/Compiler/SunPro-Fortran.cmake b/Modules/Compiler/SunPro-Fortran.cmake new file mode 100644 index 0000000..86d6def --- /dev/null +++ b/Modules/Compiler/SunPro-Fortran.cmake @@ -0,0 +1,18 @@ +SET(CMAKE_Fortran_VERBOSE_FLAG "-v") +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixed") +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-free") + +SET(CMAKE_SHARED_LIBRARY_Fortran_FLAGS "-KPIC") +SET(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS "-G") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG "-R") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP ":") +SET(CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG "-h") +set(CMAKE_EXECUTABLE_RUNTIME_Fortran_FLAG "-R") + +SET(CMAKE_Fortran_FLAGS_INIT "") +SET(CMAKE_Fortran_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "-xO2 -xspace -DNDEBUG") +SET(CMAKE_Fortran_FLAGS_RELEASE_INIT "-xO3 -DNDEBUG") +SET(CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "-g -xO2") +SET(CMAKE_Fortran_MODDIR_FLAG "-moddir=") +SET(CMAKE_Fortran_MODPATH_FLAG "-M") diff --git a/Modules/Compiler/TinyCC-C.cmake b/Modules/Compiler/TinyCC-C.cmake new file mode 100644 index 0000000..4a48c0a --- /dev/null +++ b/Modules/Compiler/TinyCC-C.cmake @@ -0,0 +1,8 @@ +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") + +# no optimization in tcc: +SET (CMAKE_C_FLAGS_INIT "") +SET (CMAKE_C_FLAGS_DEBUG_INIT "-g") +SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "-DNDEBUG") +SET (CMAKE_C_FLAGS_RELEASE_INIT "-DNDEBUG") +SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-g") diff --git a/Modules/Compiler/VisualAge-C.cmake b/Modules/Compiler/VisualAge-C.cmake new file mode 100644 index 0000000..40b609e --- /dev/null +++ b/Modules/Compiler/VisualAge-C.cmake @@ -0,0 +1 @@ +include(Compiler/XL-C) diff --git a/Modules/Compiler/VisualAge-CXX.cmake b/Modules/Compiler/VisualAge-CXX.cmake new file mode 100644 index 0000000..2509b43 --- /dev/null +++ b/Modules/Compiler/VisualAge-CXX.cmake @@ -0,0 +1 @@ +include(Compiler/XL-CXX) diff --git a/Modules/Compiler/VisualAge-Fortran.cmake b/Modules/Compiler/VisualAge-Fortran.cmake new file mode 100644 index 0000000..3ef3178 --- /dev/null +++ b/Modules/Compiler/VisualAge-Fortran.cmake @@ -0,0 +1 @@ +include(Compiler/XL-Fortran) diff --git a/Modules/Compiler/XL-ASM.cmake b/Modules/Compiler/XL-ASM.cmake new file mode 100644 index 0000000..e5d4ffa --- /dev/null +++ b/Modules/Compiler/XL-ASM.cmake @@ -0,0 +1,13 @@ +SET(CMAKE_ASM_VERBOSE_FLAG "-V") + +# -qthreaded = Ensures that all optimizations will be thread-safe +# -qalias=noansi = Turns off type-based aliasing completely (safer optimizer) +# -qhalt=e = Halt on error messages (rather than just severe errors) +SET(CMAKE_ASM_FLAGS_INIT "-qthreaded -qalias=noansi -qhalt=e -qsourcetype=assembler") + +SET(CMAKE_ASM_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_ASM_FLAGS_RELEASE_INIT "-O -DNDEBUG") +SET(CMAKE_ASM_FLAGS_MINSIZEREL_INIT "-O -DNDEBUG") +SET(CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT "-g") + +SET(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s ) diff --git a/Modules/Compiler/XL-C.cmake b/Modules/Compiler/XL-C.cmake new file mode 100644 index 0000000..ae869e3 --- /dev/null +++ b/Modules/Compiler/XL-C.cmake @@ -0,0 +1,9 @@ +include(Compiler/XL) +__compiler_xl(C) +set(CMAKE_C_FLAGS_RELEASE_INIT "${CMAKE_C_FLAGS_RELEASE_INIT} -DNDEBUG") +set(CMAKE_C_FLAGS_MINSIZEREL_INIT "${CMAKE_C_FLAGS_MINSIZEREL_INIT} -DNDEBUG") + +# -qthreaded = Ensures that all optimizations will be thread-safe +# -qalias=noansi = Turns off type-based aliasing completely (safer optimizer) +# -qhalt=e = Halt on error messages (rather than just severe errors) +SET(CMAKE_C_FLAGS_INIT "-qthreaded -qalias=noansi -qhalt=e") diff --git a/Modules/Compiler/XL-CXX.cmake b/Modules/Compiler/XL-CXX.cmake new file mode 100644 index 0000000..29c4b5e --- /dev/null +++ b/Modules/Compiler/XL-CXX.cmake @@ -0,0 +1,11 @@ +include(Compiler/XL) +__compiler_xl(CXX) +set(CMAKE_CXX_FLAGS_RELEASE_INIT "${CMAKE_CXX_FLAGS_RELEASE_INIT} -DNDEBUG") +set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "${CMAKE_CXX_FLAGS_MINSIZEREL_INIT} -DNDEBUG") + +# -qthreaded = Ensures that all optimizations will be thread-safe +# -qhalt=e = Halt on error messages (rather than just severe errors) +SET(CMAKE_CXX_FLAGS_INIT "-qthreaded -qhalt=e") + +SET(CMAKE_CXX_COMPILE_OBJECT + " -+ -o -c ") diff --git a/Modules/Compiler/XL-Fortran.cmake b/Modules/Compiler/XL-Fortran.cmake new file mode 100644 index 0000000..e7026f1 --- /dev/null +++ b/Modules/Compiler/XL-Fortran.cmake @@ -0,0 +1,17 @@ +include(Compiler/XL) +__compiler_xl(Fortran) + +set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-qfixed") # [=] +set(CMAKE_Fortran_FORMAT_FREE_FLAG "-qfree") # [=f90|ibm] + +SET(CMAKE_Fortran_MODDIR_FLAG "-qmoddir=") + +SET(CMAKE_Fortran_DEFINE_FLAG "-WF,-D") + +# -qthreaded = Ensures that all optimizations will be thread-safe +# -qhalt=e = Halt on error messages (rather than just severe errors) +SET(CMAKE_Fortran_FLAGS_INIT "-qthreaded -qhalt=e") + +# We require updates to CMake C++ code to support preprocessing rules for Fortran. +SET(CMAKE_Fortran_CREATE_PREPROCESSED_SOURCE) +SET(CMAKE_Fortran_CREATE_ASSEMBLY_SOURCE) diff --git a/Modules/Compiler/XL.cmake b/Modules/Compiler/XL.cmake new file mode 100644 index 0000000..d2567d5 --- /dev/null +++ b/Modules/Compiler/XL.cmake @@ -0,0 +1,53 @@ + +#============================================================================= +# Copyright 2002-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__COMPILER_XL) + return() +endif() +set(__COMPILER_XL 1) + +# Find the CreateExportList program that comes with this toolchain. +find_program(CMAKE_XL_CreateExportList + NAMES CreateExportList + DOC "IBM XL CreateExportList tool" + ) + +macro(__compiler_xl lang) + # Feature flags. + set(CMAKE_${lang}_VERBOSE_FLAG "-V") + + set(CMAKE_${lang}_FLAGS_DEBUG_INIT "-g") + set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-O") + set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "-O") + set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "-g") + set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE " -E > ") + set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE " -S -o ") + + # CMAKE_XL_CreateExportList is part of the AIX XL compilers but not the linux ones. + # If we found the tool, we'll use it to create exports, otherwise stick with the regular + # create shared library compile line. + if (CMAKE_XL_CreateExportList) + # The compiler front-end passes all object files, archive files, and shared + # library files named on the command line to CreateExportList to create a + # list of all symbols to be exported from the shared library. This causes + # all archive members to be copied into the shared library whether they are + # needed or not. Instead we run the tool ourselves to pass only the object + # files so that we export only the symbols actually provided by the sources. + set(CMAKE_${lang}_CREATE_SHARED_LIBRARY + "${CMAKE_XL_CreateExportList} /objects.exp " + " -Wl,-bE:/objects.exp -o " + ) + endif() +endmacro() diff --git a/Modules/Dart.cmake b/Modules/Dart.cmake new file mode 100644 index 0000000..8705454 --- /dev/null +++ b/Modules/Dart.cmake @@ -0,0 +1,124 @@ +# - Configure a project for testing with CTest or old Dart Tcl Client +# This file is the backwards-compatibility version of the CTest module. +# It supports using the old Dart 1 Tcl client for driving dashboard +# submissions as well as testing with CTest. This module should be included +# in the CMakeLists.txt file at the top of a project. Typical usage: +# INCLUDE(Dart) +# IF(BUILD_TESTING) +# # ... testing related CMake code ... +# ENDIF(BUILD_TESTING) +# The BUILD_TESTING option is created by the Dart module to determine +# whether testing support should be enabled. The default is ON. + +# This file configures a project to use the Dart testing/dashboard process. +# It is broken into 3 sections. +# +# Section #1: Locate programs on the client and determine site and build name +# Section #2: Configure or copy Tcl scripts from the source tree to build tree +# Section #3: Custom targets for performing dashboard builds. +# +# + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +OPTION(BUILD_TESTING "Build the testing tree." ON) + +IF(BUILD_TESTING) + FIND_PACKAGE(Dart QUIET) + + # + # Section #1: + # + # CMake commands that will not vary from project to project. Locates programs + # on the client and configure site name and build name. + # + + SET(RUN_FROM_DART 1) + INCLUDE(CTest) + SET(RUN_FROM_DART) + + FIND_PROGRAM(COMPRESSIONCOMMAND NAMES gzip compress zip + DOC "Path to program used to compress files for transfer to the dart server") + FIND_PROGRAM(GUNZIPCOMMAND gunzip DOC "Path to gunzip executable") + FIND_PROGRAM(JAVACOMMAND java DOC "Path to java command, used by the Dart server to create html.") + OPTION(DART_VERBOSE_BUILD "Show the actual output of the build, or if off show a . for each 1024 bytes." + OFF) + OPTION(DART_BUILD_ERROR_REPORT_LIMIT "Limit of reported errors, -1 reports all." -1 ) + OPTION(DART_BUILD_WARNING_REPORT_LIMIT "Limit of reported warnings, -1 reports all." -1 ) + + SET(VERBOSE_BUILD ${DART_VERBOSE_BUILD}) + SET(BUILD_ERROR_REPORT_LIMIT ${DART_BUILD_ERROR_REPORT_LIMIT}) + SET(BUILD_WARNING_REPORT_LIMIT ${DART_BUILD_WARNING_REPORT_LIMIT}) + SET (DELIVER_CONTINUOUS_EMAIL "Off" CACHE BOOL "Should Dart server send email when build errors are found in Continuous builds?") + + MARK_AS_ADVANCED( + COMPRESSIONCOMMAND + DART_BUILD_ERROR_REPORT_LIMIT + DART_BUILD_WARNING_REPORT_LIMIT + DART_TESTING_TIMEOUT + DART_VERBOSE_BUILD + DELIVER_CONTINUOUS_EMAIL + GUNZIPCOMMAND + JAVACOMMAND + ) + + SET(HAVE_DART) + IF(EXISTS "${DART_ROOT}/Source/Client/Dart.conf.in") + SET(HAVE_DART 1) + ENDIF(EXISTS "${DART_ROOT}/Source/Client/Dart.conf.in") + + # + # Section #2: + # + # Make necessary directories and configure testing scripts + # + # find a tcl shell command + IF(HAVE_DART) + FIND_PACKAGE(Tclsh) + ENDIF(HAVE_DART) + + + IF (HAVE_DART) + # make directories in the binary tree + FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/Testing/HTML/TestingResults/Dashboard" + "${PROJECT_BINARY_DIR}/Testing/HTML/TestingResults/Sites/${SITE}/${BUILDNAME}") + + # configure files + CONFIGURE_FILE( + "${DART_ROOT}/Source/Client/Dart.conf.in" + "${PROJECT_BINARY_DIR}/DartConfiguration.tcl" ) + + # + # Section 3: + # + # Custom targets to perform dashboard builds and submissions. + # These should NOT need to be modified from project to project. + # + + # add testing targets + SET(DART_EXPERIMENTAL_NAME Experimental) + IF(DART_EXPERIMENTAL_USE_PROJECT_NAME) + SET(DART_EXPERIMENTAL_NAME "${DART_EXPERIMENTAL_NAME}${PROJECT_NAME}") + ENDIF(DART_EXPERIMENTAL_USE_PROJECT_NAME) + ENDIF (HAVE_DART) + + SET(RUN_FROM_CTEST_OR_DART 1) + INCLUDE(CTestTargets) + SET(RUN_FROM_CTEST_OR_DART) +ENDIF(BUILD_TESTING) + +# +# End of Dart.cmake +# + diff --git a/Modules/DartConfiguration.tcl.in b/Modules/DartConfiguration.tcl.in new file mode 100644 index 0000000..ad7f805 --- /dev/null +++ b/Modules/DartConfiguration.tcl.in @@ -0,0 +1,93 @@ +# This file is configured by CMake automatically as DartConfiguration.tcl +# If you choose not to use CMake, this file may be hand configured, by +# filling in the required variables. + + +# Configuration directories and files +SourceDirectory: @PROJECT_SOURCE_DIR@ +BuildDirectory: @PROJECT_BINARY_DIR@ + +# Where to place the cost data store +CostDataFile: @CTEST_COST_DATA_FILE@ + +# Site is something like machine.domain, i.e. pragmatic.crd +Site: @SITE@ + +# Build name is osname-revision-compiler, i.e. Linux-2.4.2-2smp-c++ +BuildName: @BUILDNAME@ + +# Submission information +IsCDash: @CTEST_DROP_SITE_CDASH@ +CDashVersion: @CTEST_CDASH_VERSION@ +QueryCDashVersion: @CTEST_CDASH_QUERY_VERSION@ +DropSite: @DROP_SITE@ +DropLocation: @DROP_LOCATION@ +DropSiteUser: @DROP_SITE_USER@ +DropSitePassword: @DROP_SITE_PASSWORD@ +DropSiteMode: @DROP_SITE_MODE@ +DropMethod: @DROP_METHOD@ +TriggerSite: @TRIGGER_SITE@ +ScpCommand: @SCPCOMMAND@ + +# Dashboard start time +NightlyStartTime: @NIGHTLY_START_TIME@ + +# Commands for the build/test/submit cycle +ConfigureCommand: "@CMAKE_COMMAND@" "@PROJECT_SOURCE_DIR@" +MakeCommand: @MAKECOMMAND@ +DefaultCTestConfigurationType: @DEFAULT_CTEST_CONFIGURATION_TYPE@ + +# CVS options +# Default is "-d -P -A" +CVSCommand: @CVSCOMMAND@ +CVSUpdateOptions: @CVS_UPDATE_OPTIONS@ + +# Subversion options +SVNCommand: @SVNCOMMAND@ +SVNUpdateOptions: @SVN_UPDATE_OPTIONS@ + +# Git options +GITCommand: @GITCOMMAND@ +GITUpdateOptions: @GIT_UPDATE_OPTIONS@ +GITUpdateCustom: @CTEST_GIT_UPDATE_CUSTOM@ + +# Generic update command +UpdateCommand: @UPDATE_COMMAND@ +UpdateOptions: @UPDATE_OPTIONS@ +UpdateType: @UPDATE_TYPE@ + +# Compiler info +Compiler: @CMAKE_CXX_COMPILER@ + +# Dynamic analysis (MemCheck) +PurifyCommand: @PURIFYCOMMAND@ +ValgrindCommand: @VALGRIND_COMMAND@ +ValgrindCommandOptions: @VALGRIND_COMMAND_OPTIONS@ +MemoryCheckCommand: @MEMORYCHECK_COMMAND@ +MemoryCheckCommandOptions: @MEMORYCHECK_COMMAND_OPTIONS@ +MemoryCheckSuppressionFile: @MEMORYCHECK_SUPPRESSIONS_FILE@ + +# Coverage +CoverageCommand: @COVERAGE_COMMAND@ +CoverageExtraFlags: @COVERAGE_EXTRA_FLAGS@ + +# Cluster commands +SlurmBatchCommand: @SLURM_SBATCH_COMMAND@ +SlurmRunCommand: @SLURM_SRUN_COMMAND@ + +# Testing options +# TimeOut is the amount of time in seconds to wait for processes +# to complete during testing. After TimeOut seconds, the +# process will be summarily terminated. +# Currently set to 25 minutes +TimeOut: @DART_TESTING_TIMEOUT@ + +UseLaunchers: @CTEST_USE_LAUNCHERS@ +CurlOptions: @CTEST_CURL_OPTIONS@ +# warning, if you add new options here that have to do with submit, +# you have to update cmCTestSubmitCommand.cxx + +# For CTest submissions that timeout, these options +# specify behavior for retrying the submission +CTestSubmitRetryDelay: @CTEST_SUBMIT_RETRY_DELAY@ +CTestSubmitRetryCount: @CTEST_SUBMIT_RETRY_COUNT@ diff --git a/Modules/DeployQt4.cmake b/Modules/DeployQt4.cmake new file mode 100644 index 0000000..b37695d --- /dev/null +++ b/Modules/DeployQt4.cmake @@ -0,0 +1,301 @@ +# - Functions to help assemble a standalone Qt4 executable. +# A collection of CMake utility functions useful for deploying +# Qt4 executables. +# +# The following functions are provided by this module: +# write_qt4_conf +# resolve_qt4_paths +# fixup_qt4_executable +# install_qt4_plugin_path +# install_qt4_plugin +# install_qt4_executable +# Requires CMake 2.6 or greater because it uses function and +# PARENT_SCOPE. Also depends on BundleUtilities.cmake. +# +# WRITE_QT4_CONF( ) +# Writes a qt.conf file with the into . +# +# RESOLVE_QT4_PATHS( []) +# Loop through list and if any don't exist resolve them +# relative to the (if supplied) or the CMAKE_INSTALL_PREFIX. +# +# FIXUP_QT4_EXECUTABLE( [ ]) +# Copies Qt plugins, writes a Qt configuration file (if needed) and fixes up a +# Qt4 executable using BundleUtilities so it is standalone and can be +# drag-and-drop copied to another machine as long as all of the system +# libraries are compatible. +# +# should point to the executable to be fixed-up. +# +# should contain a list of the names or paths of any Qt plugins +# to be installed. +# +# will be passed to BundleUtilities and should be a list of any already +# installed plugins, libraries or executables to also be fixed-up. +# +# will be passed to BundleUtilities and should contain and directories +# to be searched to find library dependencies. +# +# allows an custom plugins directory to be used. +# +# will force a qt.conf file to be written even if not needed. +# +# INSTALL_QT4_PLUGIN_PATH(plugin executable copy installed_plugin_path_var ) +# Install (or copy) a resolved to the default plugins directory +# (or ) relative to and store the result in +# . +# +# If is set to TRUE then the plugins will be copied rather than +# installed. This is to allow this module to be used at CMake time rather than +# install time. +# +# If is set then anything installed will use this COMPONENT. +# +# INSTALL_QT4_PLUGIN(plugin executable copy installed_plugin_path_var ) +# Install (or copy) an unresolved to the default plugins directory +# (or ) relative to and store the result in +# . See documentation of INSTALL_QT4_PLUGIN_PATH. +# +# INSTALL_QT4_EXECUTABLE( [ ]) +# Installs Qt plugins, writes a Qt configuration file (if needed) and fixes up +# a Qt4 executable using BundleUtilities so it is standalone and can be +# drag-and-drop copied to another machine as long as all of the system +# libraries are compatible. The executable will be fixed-up at install time. +# is the COMPONENT used for bundle fixup and plugin installation. +# See documentation of FIXUP_QT4_BUNDLE. + +#============================================================================= +# Copyright 2011 Mike McQuaid +# +# 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.) + +# The functions defined in this file depend on the fixup_bundle function +# (and others) found in BundleUtilities.cmake + +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") + message(STATUS "Writing ${qt_conf_path}") + file(WRITE "${qt_conf_path}" "${qt_conf_contents}") +endfunction() + +function(resolve_qt4_paths paths_var) + set(executable_path ${ARGV1}) + + set(paths_resolved) + foreach(path ${${paths_var}}) + if(EXISTS "${path}") + list(APPEND paths_resolved "${path}") + else() + if(${executable_path}) + list(APPEND paths_resolved "${executable_path}/${path}") + else() + list(APPEND paths_resolved "\${CMAKE_INSTALL_PREFIX}/${path}") + endif() + endif() + endforeach() + set(${paths_var} ${paths_resolved} PARENT_SCOPE) +endfunction() + +function(fixup_qt4_executable executable) + set(qtplugins ${ARGV1}) + set(libs ${ARGV2}) + set(dirs ${ARGV3}) + set(plugins_dir ${ARGV4}) + set(request_qt_conf ${ARGV5}) + + message(STATUS "fixup_qt4_executable") + message(STATUS " executable='${executable}'") + message(STATUS " qtplugins='${qtplugins}'") + message(STATUS " libs='${libs}'") + message(STATUS " dirs='${dirs}'") + message(STATUS " plugins_dir='${plugins_dir}'") + message(STATUS " request_qt_conf='${request_qt_conf}'") + + 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) + set(executable_path ".") + endif() + set(qt_conf_dir "${executable_path}") + set(write_qt_conf ${request_qt_conf}) + endif() + + foreach(plugin ${qtplugins}) + set(installed_plugin_path "") + install_qt4_plugin("${plugin}" "${executable}" 1 installed_plugin_path) + list(APPEND libs ${installed_plugin_path}) + endforeach() + + foreach(lib ${libs}) + if(NOT EXISTS "${lib}") + message(FATAL_ERROR "Library does not exist: ${lib}") + endif() + endforeach() + + resolve_qt4_paths(libs "${executable_path}") + + if(write_qt_conf) + set(qt_conf_contents "[Paths]\nPlugins = ${plugins_dir}") + write_qt4_conf("${qt_conf_dir}" "${qt_conf_contents}") + endif() + + fixup_bundle("${executable}" "${libs}" "${dirs}") +endfunction() + +function(install_qt4_plugin_path plugin executable copy installed_plugin_path_var) + set(plugins_dir ${ARGV4}) + set(component ${ARGV5}) + set(configurations ${ARGV6}) + if(EXISTS "${plugin}") + 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(plugins_path "${executable}" PATH) + if(NOT plugins_path) + set(plugins_path ".") + endif() + if(plugins_dir) + set(plugins_path "${plugins_path}/${plugins_dir}") + endif() + endif() + + set(plugin_group "") + + get_filename_component(plugin_path "${plugin}" PATH) + get_filename_component(plugin_parent_path "${plugin_path}" PATH) + get_filename_component(plugin_parent_dir_name "${plugin_parent_path}" NAME) + get_filename_component(plugin_name "${plugin}" NAME) + string(TOLOWER "${plugin_parent_dir_name}" plugin_parent_dir_name) + + if("${plugin_parent_dir_name}" STREQUAL "plugins") + get_filename_component(plugin_group "${plugin_path}" NAME) + set(${plugin_group_var} "${plugin_group}") + endif() + set(plugins_path "${plugins_path}/${plugin_group}") + + if(${copy}) + file(MAKE_DIRECTORY "${plugins_path}") + file(COPY "${plugin}" DESTINATION "${plugins_path}") + else() + if(configurations AND (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)) + set(configurations CONFIGURATIONS ${configurations}) + else() + unset(configurations) + endif() + install(FILES "${plugin}" DESTINATION "${plugins_path}" ${configurations} ${component}) + endif() + set(${installed_plugin_path_var} "${plugins_path}/${plugin_name}" PARENT_SCOPE) + endif() +endfunction() + +function(install_qt4_plugin plugin executable copy installed_plugin_path_var) + set(plugins_dir ${ARGV4}) + set(component ${ARGV5}) + if(EXISTS "${plugin}") + install_qt4_plugin_path("${plugin}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}") + else() + 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}}") + set(plugin_debug "${${plugin_debug_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() + 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) +endfunction() + +function(install_qt4_executable executable) + set(qtplugins ${ARGV1}) + set(libs ${ARGV2}) + set(dirs ${ARGV3}) + set(plugins_dir ${ARGV4}) + set(request_qt_conf ${ARGV5}) + set(component ${ARGV6}) + 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() + unset(component) + endif() + + get_filename_component(executable_absolute "${executable}" ABSOLUTE) + if(EXISTS "${QT_QTCORE_LIBRARY_RELEASE}") + gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY_RELEASE}" qtcore_type) + elseif(EXISTS "${QT_QTCORE_LIBRARY_DEBUG}") + gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY_DEBUG}" qtcore_type) + endif() + if(qtcore_type STREQUAL "system") + set(qt_plugins_dir "") + endif() + + 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() + + resolve_qt4_paths(libs) + + install(CODE + "INCLUDE(\"${DeployQt4_cmake_dir}/DeployQt4.cmake\") + SET(BU_CHMOD_BUNDLE_ITEMS TRUE) + FIXUP_QT4_EXECUTABLE(\"\${CMAKE_INSTALL_PREFIX}/${executable}\" \"\" \"${libs}\" \"${dirs}\" \"${plugins_dir}\" \"${request_qt_conf}\")" + ${component} + ) +endfunction() diff --git a/Modules/Documentation.cmake b/Modules/Documentation.cmake new file mode 100644 index 0000000..ffeb371 --- /dev/null +++ b/Modules/Documentation.cmake @@ -0,0 +1,52 @@ +# - DocumentationVTK.cmake +# This file provides support for the VTK documentation framework. +# It relies on several tools (Doxygen, Perl, etc). + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# +# Build the documentation ? +# +OPTION(BUILD_DOCUMENTATION "Build the documentation (Doxygen)." OFF) +MARK_AS_ADVANCED(BUILD_DOCUMENTATION) + +IF (BUILD_DOCUMENTATION) + + # + # Check for the tools + # + FIND_PACKAGE(UnixCommands) + FIND_PACKAGE(Doxygen) + FIND_PACKAGE(Gnuplot) + FIND_PACKAGE(HTMLHelp) + FIND_PACKAGE(Perl) + FIND_PACKAGE(Wget) + + OPTION(DOCUMENTATION_HTML_HELP + "Build the HTML Help file (CHM)." OFF) + + OPTION(DOCUMENTATION_HTML_TARZ + "Build a compressed tar archive of the HTML doc." OFF) + + MARK_AS_ADVANCED( + DOCUMENTATION_HTML_HELP + DOCUMENTATION_HTML_TARZ + ) + + # + # The documentation process is controled by a batch file. + # We will probably need bash to create the custom target + # + +ENDIF (BUILD_DOCUMENTATION) diff --git a/Modules/DummyCXXFile.cxx b/Modules/DummyCXXFile.cxx new file mode 100644 index 0000000..f8b643a --- /dev/null +++ b/Modules/DummyCXXFile.cxx @@ -0,0 +1,4 @@ +int main() +{ + return 0; +} diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake new file mode 100644 index 0000000..b6fe190 --- /dev/null +++ b/Modules/ExternalProject.cmake @@ -0,0 +1,1505 @@ +# - Create custom targets to build projects in external trees +# The 'ExternalProject_Add' function creates a custom target to drive +# download, update/patch, configure, build, install and test steps of an +# external project: +# ExternalProject_Add( # Name for custom target +# [DEPENDS projects...] # Targets on which the project depends +# [PREFIX dir] # Root dir for entire project +# [LIST_SEPARATOR sep] # Sep to be replaced by ; in cmd lines +# [TMP_DIR dir] # Directory to store temporary files +# [STAMP_DIR dir] # Directory to store step timestamps +# #--Download step-------------- +# [DOWNLOAD_DIR dir] # Directory to store downloaded files +# [DOWNLOAD_COMMAND cmd...] # Command to download source tree +# [CVS_REPOSITORY cvsroot] # CVSROOT of CVS repository +# [CVS_MODULE mod] # Module to checkout from CVS repo +# [CVS_TAG tag] # Tag to checkout from CVS repo +# [SVN_REPOSITORY url] # URL of Subversion repo +# [SVN_REVISION rev] # Revision to checkout from Subversion repo +# [SVN_USERNAME john ] # Username for Subversion checkout and update +# [SVN_PASSWORD doe ] # Password for Subversion checkout and update +# [SVN_TRUST_CERT 1 ] # Trust the Subversion server site certificate +# [GIT_REPOSITORY url] # URL of git repo +# [GIT_TAG tag] # Git branch name, commit id or tag +# [URL /.../src.tgz] # Full path or URL of source +# [URL_MD5 md5] # MD5 checksum of file at URL +# [TIMEOUT seconds] # Time allowed for file download operations +# #--Update/Patch step---------- +# [UPDATE_COMMAND cmd...] # Source work-tree update command +# [PATCH_COMMAND cmd...] # Command to patch downloaded source +# #--Configure step------------- +# [SOURCE_DIR dir] # Source dir to be used for build +# [CONFIGURE_COMMAND cmd...] # Build tree configuration command +# [CMAKE_COMMAND /.../cmake] # Specify alternative cmake executable +# [CMAKE_GENERATOR gen] # Specify generator for native build +# [CMAKE_ARGS args...] # Arguments to CMake command line +# [CMAKE_CACHE_ARGS args...] # Initial cache arguments, of the form -Dvar:string=on +# #--Build step----------------- +# [BINARY_DIR dir] # Specify build dir location +# [BUILD_COMMAND cmd...] # Command to drive the native build +# [BUILD_IN_SOURCE 1] # Use source dir for build dir +# #--Install step--------------- +# [INSTALL_DIR dir] # Installation prefix +# [INSTALL_COMMAND cmd...] # Command to drive install after build +# #--Test step------------------ +# [TEST_BEFORE_INSTALL 1] # Add test step executed before install step +# [TEST_AFTER_INSTALL 1] # Add test step executed after install step +# [TEST_COMMAND cmd...] # Command to drive test +# #--Output logging------------- +# [LOG_DOWNLOAD 1] # Wrap download in script to log output +# [LOG_UPDATE 1] # Wrap update in script to log output +# [LOG_CONFIGURE 1] # Wrap configure in script to log output +# [LOG_BUILD 1] # Wrap build in script to log output +# [LOG_TEST 1] # Wrap test in script to log output +# [LOG_INSTALL 1] # Wrap install in script to log output +# #--Custom targets------------- +# [STEP_TARGETS st1 st2 ...] # Generate custom targets for these steps +# ) +# The *_DIR options specify directories for the project, with default +# directories computed as follows. +# If the PREFIX option is given to ExternalProject_Add() or the EP_PREFIX +# directory property is set, then an external project is built and installed +# under the specified prefix: +# TMP_DIR = /tmp +# STAMP_DIR = /src/-stamp +# DOWNLOAD_DIR = /src +# SOURCE_DIR = /src/ +# BINARY_DIR = /src/-build +# INSTALL_DIR = +# Otherwise, if the EP_BASE directory property is set then components +# of an external project are stored under the specified base: +# TMP_DIR = /tmp/ +# STAMP_DIR = /Stamp/ +# DOWNLOAD_DIR = /Download/ +# SOURCE_DIR = /Source/ +# BINARY_DIR = /Build/ +# INSTALL_DIR = /Install/ +# If no PREFIX, EP_PREFIX, or EP_BASE is specified then the default +# is to set PREFIX to "-prefix". +# Relative paths are interpreted with respect to the build directory +# corresponding to the source directory in which ExternalProject_Add is +# invoked. +# +# If SOURCE_DIR is explicitly set to an existing directory the project +# will be built from it. +# Otherwise a download step must be specified using one of the +# DOWNLOAD_COMMAND, CVS_*, SVN_*, or URL options. +# The URL option may refer locally to a directory or source tarball, +# or refer to a remote tarball (e.g. http://.../src.tgz). +# +# The 'ExternalProject_Add_Step' function adds a custom step to an external +# project: +# ExternalProject_Add_Step( # Names of project and custom step +# [COMMAND cmd...] # Command line invoked by this step +# [COMMENT "text..."] # Text printed when step executes +# [DEPENDEES steps...] # Steps on which this step depends +# [DEPENDERS steps...] # Steps that depend on this step +# [DEPENDS files...] # Files on which this step depends +# [ALWAYS 1] # No stamp file, step always runs +# [WORKING_DIRECTORY dir] # Working directory for command +# [LOG 1] # Wrap step in script to log output +# ) +# The command line, comment, and working directory of every standard +# and custom step is processed to replace tokens +# , +# , +# , +# and +# with corresponding property values. +# +# The 'ExternalProject_Get_Property' function retrieves external project +# target properties: +# ExternalProject_Get_Property( [prop1 [prop2 [...]]]) +# It stores property values in variables of the same name. +# Property names correspond to the keyword argument names of +# 'ExternalProject_Add'. +# +# The 'ExternalProject_Add_StepTargets' function generates custom targets for +# the steps listed: +# ExternalProject_Add_StepTargets( [step1 [step2 [...]]]) +# +# If STEP_TARGETS is set then ExternalProject_Add_StepTargets is automatically +# called at the end of matching calls to ExternalProject_Add_Step. Pass +# STEP_TARGETS explicitly to individual ExternalProject_Add calls, or +# implicitly to all ExternalProject_Add calls by setting the directory property +# EP_STEP_TARGETS. +# +# If STEP_TARGETS is not set, clients may still manually call +# ExternalProject_Add_StepTargets after calling ExternalProject_Add or +# ExternalProject_Add_Step. +# +# This functionality is provided to make it easy to drive the steps +# independently of each other by specifying targets on build command lines. +# For example, you may be submitting to a sub-project based dashboard, where +# you want to drive the configure portion of the build, then submit to the +# dashboard, followed by the build portion, followed by tests. If you invoke +# a custom target that depends on a step halfway through the step dependency +# chain, then all the previous steps will also run to ensure everything is +# up to date. +# +# For example, to drive configure, build and test steps independently for each +# ExternalProject_Add call in your project, write the following line prior to +# any ExternalProject_Add calls in your CMakeLists file: +# +# set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test) + +#============================================================================= +# Copyright 2008-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.) + +# Pre-compute a regex to match documented keywords for each command. +math(EXPR _ep_documentation_line_count "${CMAKE_CURRENT_LIST_LINE} - 16") +file(STRINGS "${CMAKE_CURRENT_LIST_FILE}" lines + LIMIT_COUNT ${_ep_documentation_line_count} + REGEX "^# ( \\[[A-Z0-9_]+ [^]]*\\] +#.*$|[A-Za-z0-9_]+\\()") +foreach(line IN LISTS lines) + if("${line}" MATCHES "^# [A-Za-z0-9_]+\\(") + if(_ep_func) + set(_ep_keywords_${_ep_func} "${_ep_keywords_${_ep_func}})$") + endif() + string(REGEX REPLACE "^# ([A-Za-z0-9_]+)\\(.*" "\\1" _ep_func "${line}") + #message("function [${_ep_func}]") + set(_ep_keywords_${_ep_func} "^(") + set(_ep_keyword_sep) + else() + string(REGEX REPLACE "^# \\[([A-Z0-9_]+) .*" "\\1" _ep_key "${line}") + #message(" keyword [${_ep_key}]") + set(_ep_keywords_${_ep_func} + "${_ep_keywords_${_ep_func}}${_ep_keyword_sep}${_ep_key}") + set(_ep_keyword_sep "|") + endif() +endforeach() +if(_ep_func) + set(_ep_keywords_${_ep_func} "${_ep_keywords_${_ep_func}})$") +endif() + + +function(_ep_parse_arguments f name ns args) + # Transfer the arguments to this function into target properties for the + # new custom target we just added so that we can set up all the build steps + # correctly based on target properties. + # + # We loop through ARGN and consider the namespace starting with an + # upper-case letter followed by at least two more upper-case letters, + # numbers or underscores to be keywords. + set(key) + + foreach(arg IN LISTS args) + set(is_value 1) + + if(arg MATCHES "^[A-Z][A-Z0-9_][A-Z0-9_]+$" AND + NOT ((arg STREQUAL "${key}") AND (key STREQUAL "COMMAND")) AND + NOT arg MATCHES "^(TRUE|FALSE)$") + if(_ep_keywords_${f} AND arg MATCHES "${_ep_keywords_${f}}") + set(is_value 0) + endif() + endif() + + if(is_value) + if(key) + # Value + if(NOT arg STREQUAL "") + set_property(TARGET ${name} APPEND PROPERTY ${ns}${key} "${arg}") + else() + get_property(have_key TARGET ${name} PROPERTY ${ns}${key} SET) + if(have_key) + get_property(value TARGET ${name} PROPERTY ${ns}${key}) + set_property(TARGET ${name} PROPERTY ${ns}${key} "${value};${arg}") + else() + set_property(TARGET ${name} PROPERTY ${ns}${key} "${arg}") + endif() + endif() + else() + # Missing Keyword + message(AUTHOR_WARNING "value '${arg}' with no previous keyword in ${f}") + endif() + else() + set(key "${arg}") + endif() + endforeach() +endfunction(_ep_parse_arguments) + + +define_property(DIRECTORY PROPERTY "EP_BASE" INHERITED + BRIEF_DOCS "Base directory for External Project storage." + FULL_DOCS + "See documentation of the ExternalProject_Add() function in the " + "ExternalProject module." + ) + +define_property(DIRECTORY PROPERTY "EP_PREFIX" INHERITED + BRIEF_DOCS "Top prefix for External Project storage." + FULL_DOCS + "See documentation of the ExternalProject_Add() function in the " + "ExternalProject module." + ) + +define_property(DIRECTORY PROPERTY "EP_STEP_TARGETS" INHERITED + BRIEF_DOCS + "List of ExternalProject steps that automatically get corresponding targets" + FULL_DOCS + "See documentation of the ExternalProject_Add_StepTargets() function in the " + "ExternalProject module." + ) + + +function(_ep_write_gitclone_script script_filename source_dir git_EXECUTABLE git_repository git_tag src_name work_dir) + file(WRITE ${script_filename} +"if(\"${git_tag}\" STREQUAL \"\") + message(FATAL_ERROR \"Tag for git checkout should not be empty.\") +endif() + +execute_process( + COMMAND \${CMAKE_COMMAND} -E remove_directory \"${source_dir}\" + RESULT_VARIABLE error_code + ) +if(error_code) + message(FATAL_ERROR \"Failed to remove directory: '${source_dir}'\") +endif() + +execute_process( + COMMAND \"${git_EXECUTABLE}\" clone \"${git_repository}\" \"${src_name}\" + WORKING_DIRECTORY \"${work_dir}\" + RESULT_VARIABLE error_code + ) +if(error_code) + message(FATAL_ERROR \"Failed to clone repository: '${git_repository}'\") +endif() + +execute_process( + COMMAND \"${git_EXECUTABLE}\" checkout ${git_tag} + WORKING_DIRECTORY \"${work_dir}/${src_name}\" + RESULT_VARIABLE error_code + ) +if(error_code) + message(FATAL_ERROR \"Failed to checkout tag: '${git_tag}'\") +endif() + +execute_process( + COMMAND \"${git_EXECUTABLE}\" submodule init + WORKING_DIRECTORY \"${work_dir}/${src_name}\" + RESULT_VARIABLE error_code + ) +if(error_code) + message(FATAL_ERROR \"Failed to init submodules in: '${work_dir}/${src_name}'\") +endif() + +execute_process( + COMMAND \"${git_EXECUTABLE}\" submodule update --recursive + WORKING_DIRECTORY \"${work_dir}/${src_name}\" + RESULT_VARIABLE error_code + ) +if(error_code) + message(FATAL_ERROR \"Failed to update submodules in: '${work_dir}/${src_name}'\") +endif() + +" +) + +endfunction(_ep_write_gitclone_script) + + +function(_ep_write_downloadfile_script script_filename remote local timeout md5) + if(timeout) + set(timeout_args TIMEOUT ${timeout}) + set(timeout_msg "${timeout} seconds") + else() + set(timeout_args "# no TIMEOUT") + set(timeout_msg "none") + endif() + + if(md5) + set(md5_args EXPECTED_MD5 ${md5}) + else() + set(md5_args "# no EXPECTED_MD5") + endif() + + file(WRITE ${script_filename} +"message(STATUS \"downloading... + src='${remote}' + dst='${local}' + timeout='${timeout_msg}'\") + +file(DOWNLOAD + \"${remote}\" + \"${local}\" + SHOW_PROGRESS + ${md5_args} + ${timeout_args} + STATUS status + LOG log) + +list(GET status 0 status_code) +list(GET status 1 status_string) + +if(NOT status_code EQUAL 0) + message(FATAL_ERROR \"error: downloading '${remote}' failed + status_code: \${status_code} + status_string: \${status_string} + log: \${log} +\") +endif() + +message(STATUS \"downloading... done\") +" +) + +endfunction(_ep_write_downloadfile_script) + + +function(_ep_write_verifyfile_script script_filename local md5) + file(WRITE ${script_filename} +"message(STATUS \"verifying file... + file='${local}'\") + +set(verified 0) + +# If an expected md5 checksum exists, compare against it: +# +if(NOT \"${md5}\" STREQUAL \"\") + execute_process(COMMAND \${CMAKE_COMMAND} -E md5sum \"${local}\" + OUTPUT_VARIABLE ov + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE rv) + + if(NOT rv EQUAL 0) + message(FATAL_ERROR \"error: computing md5sum of '${local}' failed\") + endif() + + string(REGEX MATCH \"^([0-9A-Fa-f]+)\" md5_actual \"\${ov}\") + + string(TOLOWER \"\${md5_actual}\" md5_actual) + string(TOLOWER \"${md5}\" md5) + + if(NOT \"\${md5}\" STREQUAL \"\${md5_actual}\") + message(FATAL_ERROR \"error: md5sum of '${local}' does not match expected value + md5_expected: \${md5} + md5_actual: \${md5_actual} +\") + endif() + + set(verified 1) +endif() + +if(verified) + message(STATUS \"verifying file... done\") +else() + message(STATUS \"verifying file... warning: did not verify file - no URL_MD5 checksum argument? corrupt file?\") +endif() +" +) + +endfunction(_ep_write_verifyfile_script) + + +function(_ep_write_extractfile_script script_filename name filename directory) + set(args "") + + if(filename MATCHES "(\\.|=)(bz2|tar\\.gz|tgz|zip)$") + set(args xfz) + endif() + + if(filename MATCHES "(\\.|=)tar$") + set(args xf) + endif() + + if(args STREQUAL "") + message(SEND_ERROR "error: do not know how to extract '${filename}' -- known types are .bz2, .tar, .tar.gz, .tgz and .zip") + return() + endif() + + file(WRITE ${script_filename} +"# Make file names absolute: +# +get_filename_component(filename \"${filename}\" ABSOLUTE) +get_filename_component(directory \"${directory}\" ABSOLUTE) + +message(STATUS \"extracting... + src='\${filename}' + dst='\${directory}'\") + +if(NOT EXISTS \"\${filename}\") + message(FATAL_ERROR \"error: file to extract does not exist: '\${filename}'\") +endif() + +# Prepare a space for extracting: +# +set(i 1234) +while(EXISTS \"\${directory}/../ex-${name}\${i}\") + math(EXPR i \"\${i} + 1\") +endwhile() +set(ut_dir \"\${directory}/../ex-${name}\${i}\") +file(MAKE_DIRECTORY \"\${ut_dir}\") + +# Extract it: +# +message(STATUS \"extracting... [tar ${args}]\") +execute_process(COMMAND \${CMAKE_COMMAND} -E tar ${args} \${filename} + WORKING_DIRECTORY \${ut_dir} + RESULT_VARIABLE rv) + +if(NOT rv EQUAL 0) + message(STATUS \"extracting... [error clean up]\") + file(REMOVE_RECURSE \"\${ut_dir}\") + message(FATAL_ERROR \"error: extract of '\${filename}' failed\") +endif() + +# Analyze what came out of the tar file: +# +message(STATUS \"extracting... [analysis]\") +file(GLOB contents \"\${ut_dir}/*\") +list(LENGTH contents n) +if(NOT n EQUAL 1 OR NOT IS_DIRECTORY \"\${contents}\") + set(contents \"\${ut_dir}\") +endif() + +# Move \"the one\" directory to the final directory: +# +message(STATUS \"extracting... [rename]\") +file(REMOVE_RECURSE \${directory}) +get_filename_component(contents \${contents} ABSOLUTE) +file(RENAME \${contents} \${directory}) + +# Clean up: +# +message(STATUS \"extracting... [clean up]\") +file(REMOVE_RECURSE \"\${ut_dir}\") + +message(STATUS \"extracting... done\") +" +) + +endfunction(_ep_write_extractfile_script) + + +function(_ep_set_directories name) + get_property(prefix TARGET ${name} PROPERTY _EP_PREFIX) + if(NOT prefix) + get_property(prefix DIRECTORY PROPERTY EP_PREFIX) + if(NOT prefix) + get_property(base DIRECTORY PROPERTY EP_BASE) + if(NOT base) + set(prefix "${name}-prefix") + endif() + endif() + endif() + if(prefix) + set(tmp_default "${prefix}/tmp") + set(download_default "${prefix}/src") + set(source_default "${prefix}/src/${name}") + set(binary_default "${prefix}/src/${name}-build") + set(stamp_default "${prefix}/src/${name}-stamp") + set(install_default "${prefix}") + else() # assert(base) + set(tmp_default "${base}/tmp/${name}") + set(download_default "${base}/Download/${name}") + set(source_default "${base}/Source/${name}") + set(binary_default "${base}/Build/${name}") + set(stamp_default "${base}/Stamp/${name}") + set(install_default "${base}/Install/${name}") + endif() + get_property(build_in_source TARGET ${name} PROPERTY _EP_BUILD_IN_SOURCE) + if(build_in_source) + get_property(have_binary_dir TARGET ${name} PROPERTY _EP_BINARY_DIR SET) + if(have_binary_dir) + message(FATAL_ERROR + "External project ${name} has both BINARY_DIR and BUILD_IN_SOURCE!") + endif() + endif() + set(top "${CMAKE_CURRENT_BINARY_DIR}") + set(places stamp download source binary install tmp) + foreach(var ${places}) + string(TOUPPER "${var}" VAR) + get_property(${var}_dir TARGET ${name} PROPERTY _EP_${VAR}_DIR) + if(NOT ${var}_dir) + set(${var}_dir "${${var}_default}") + endif() + if(NOT IS_ABSOLUTE "${${var}_dir}") + get_filename_component(${var}_dir "${top}/${${var}_dir}" ABSOLUTE) + endif() + set_property(TARGET ${name} PROPERTY _EP_${VAR}_DIR "${${var}_dir}") + endforeach() + if(build_in_source) + get_property(source_dir TARGET ${name} PROPERTY _EP_SOURCE_DIR) + set_property(TARGET ${name} PROPERTY _EP_BINARY_DIR "${source_dir}") + endif() + + # Make the directories at CMake configure time *and* add a custom command + # to make them at build time. They need to exist at makefile generation + # time for Borland make and wmake so that CMake may generate makefiles + # with "cd C:\short\paths\with\no\spaces" commands in them. + # + # Additionally, the add_custom_command is still used in case somebody + # removes one of the necessary directories and tries to rebuild without + # re-running cmake. + foreach(var ${places}) + string(TOUPPER "${var}" VAR) + get_property(dir TARGET ${name} PROPERTY _EP_${VAR}_DIR) + file(MAKE_DIRECTORY "${dir}") + if(NOT EXISTS "${dir}") + message(FATAL_ERROR "dir '${dir}' does not exist after file(MAKE_DIRECTORY)") + endif() + endforeach() +endfunction(_ep_set_directories) + + +# IMPORTANT: this MUST be a macro and not a function because of the +# in-place replacements that occur in each ${var} +# +macro(_ep_replace_location_tags target_name) + set(vars ${ARGN}) + foreach(var ${vars}) + if(${var}) + foreach(dir SOURCE_DIR BINARY_DIR INSTALL_DIR TMP_DIR) + get_property(val TARGET ${target_name} PROPERTY _EP_${dir}) + string(REPLACE "<${dir}>" "${val}" ${var} "${${var}}") + endforeach() + endif() + endforeach() +endmacro() + + +function(_ep_write_initial_cache target_name script_filename args) + # Write out values into an initial cache, that will be passed to CMake with -C + set(script_initial_cache "") + set(regex "^([^:]+):([^=]+)=(.*)$") + set(setArg "") + foreach(line ${args}) + if("${line}" MATCHES "^-D") + if(setArg) + # This is required to build up lists in variables, or complete an entry + set(setArg "${setArg}${accumulator}\" CACHE ${type} \"Initial cache\" FORCE)") + set(script_initial_cache "${script_initial_cache}\n${setArg}") + set(accumulator "") + set(setArg "") + endif() + string(REGEX REPLACE "^-D" "" line ${line}) + if("${line}" MATCHES "${regex}") + string(REGEX MATCH "${regex}" match "${line}") + set(name "${CMAKE_MATCH_1}") + set(type "${CMAKE_MATCH_2}") + set(value "${CMAKE_MATCH_3}") + set(setArg "set(${name} \"${value}") + else() + message(WARNING "Line '${line}' does not match regex. Ignoring.") + endif() + else() + # Assume this is a list to append to the last var + set(accumulator "${accumulator};${line}") + endif() + endforeach() + # Catch the final line of the args + if(setArg) + set(setArg "${setArg}${accumulator}\" CACHE ${type} \"Initial cache\" FORCE)") + set(script_initial_cache "${script_initial_cache}\n${setArg}") + endif() + # Replace location tags. + _ep_replace_location_tags(${target_name} script_initial_cache) + # Write out the initial cache file to the location specified. + if(NOT EXISTS "${script_filename}.in") + file(WRITE "${script_filename}.in" "\@script_initial_cache\@\n") + endif() + configure_file("${script_filename}.in" "${script_filename}") +endfunction(_ep_write_initial_cache) + + +function(ExternalProject_Get_Property name) + foreach(var ${ARGN}) + string(TOUPPER "${var}" VAR) + get_property(${var} TARGET ${name} PROPERTY _EP_${VAR}) + if(NOT ${var}) + message(FATAL_ERROR "External project \"${name}\" has no ${var}") + endif() + set(${var} "${${var}}" PARENT_SCOPE) + endforeach() +endfunction(ExternalProject_Get_Property) + + +function(_ep_get_configure_command_id name cfg_cmd_id_var) + get_target_property(cmd ${name} _EP_CONFIGURE_COMMAND) + + if(cmd STREQUAL "") + # Explicit empty string means no configure step for this project + set(${cfg_cmd_id_var} "none" PARENT_SCOPE) + else() + if(NOT cmd) + # Default is "use cmake": + set(${cfg_cmd_id_var} "cmake" PARENT_SCOPE) + else() + # Otherwise we have to analyze the value: + if(cmd MATCHES "^[^;]*/configure") + set(${cfg_cmd_id_var} "configure" PARENT_SCOPE) + elseif(cmd MATCHES "^[^;]*/cmake" AND NOT cmd MATCHES ";-[PE];") + set(${cfg_cmd_id_var} "cmake" PARENT_SCOPE) + elseif(cmd MATCHES "config") + set(${cfg_cmd_id_var} "configure" PARENT_SCOPE) + else() + set(${cfg_cmd_id_var} "unknown:${cmd}" PARENT_SCOPE) + endif() + endif() + endif() +endfunction(_ep_get_configure_command_id) + + +function(_ep_get_build_command name step cmd_var) + set(cmd "${${cmd_var}}") + if(NOT cmd) + set(args) + _ep_get_configure_command_id(${name} cfg_cmd_id) + if(cfg_cmd_id STREQUAL "cmake") + # CMake project. Select build command based on generator. + get_target_property(cmake_generator ${name} _EP_CMAKE_GENERATOR) + if("${CMAKE_GENERATOR}" MATCHES "Make" AND + ("${cmake_generator}" MATCHES "Make" OR NOT cmake_generator)) + # The project uses the same Makefile generator. Use recursive make. + set(cmd "$(MAKE)") + if(step STREQUAL "INSTALL") + set(args install) + endif() + if(step STREQUAL "TEST") + set(args test) + endif() + else() + # Drive the project with "cmake --build". + get_target_property(cmake_command ${name} _EP_CMAKE_COMMAND) + if(cmake_command) + set(cmd "${cmake_command}") + else() + set(cmd "${CMAKE_COMMAND}") + endif() + set(args --build ${binary_dir} --config ${CMAKE_CFG_INTDIR}) + if(step STREQUAL "INSTALL") + list(APPEND args --target install) + endif() + # But for "TEST" drive the project with corresponding "ctest". + if(step STREQUAL "TEST") + string(REGEX REPLACE "^(.*/)cmake([^/]*)$" "\\1ctest\\2" cmd "${cmd}") + set(args "") + endif() + endif() + else() # if(cfg_cmd_id STREQUAL "configure") + # Non-CMake project. Guess "make" and "make install" and "make test". + # But use "$(MAKE)" to get recursive parallel make. + set(cmd "$(MAKE)") + if(step STREQUAL "INSTALL") + set(args install) + endif() + if(step STREQUAL "TEST") + set(args test) + endif() + endif() + + # Use user-specified arguments instead of default arguments, if any. + get_property(have_args TARGET ${name} PROPERTY _EP_${step}_ARGS SET) + if(have_args) + get_target_property(args ${name} _EP_${step}_ARGS) + endif() + + list(APPEND cmd ${args}) + endif() + + set(${cmd_var} "${cmd}" PARENT_SCOPE) +endfunction(_ep_get_build_command) + +function(_ep_write_log_script name step cmd_var) + ExternalProject_Get_Property(${name} stamp_dir) + set(command "${${cmd_var}}") + + set(make "") + set(code_cygpath_make "") + if("${command}" MATCHES "^\\$\\(MAKE\\)") + # GNU make recognizes the string "$(MAKE)" as recursive make, so + # ensure that it appears directly in the makefile. + string(REGEX REPLACE "^\\$\\(MAKE\\)" "\${make}" command "${command}") + set(make "-Dmake=$(MAKE)") + + if(WIN32 AND NOT CYGWIN) + set(code_cygpath_make " +if(\${make} MATCHES \"^/\") + execute_process( + COMMAND cygpath -w \${make} + OUTPUT_VARIABLE cygpath_make + ERROR_VARIABLE cygpath_make + RESULT_VARIABLE cygpath_error + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(NOT cygpath_error) + set(make \${cygpath_make}) + endif() +endif() +") + endif() + endif() + + set(config "") + if("${CMAKE_CFG_INTDIR}" MATCHES "^\\$") + string(REPLACE "${CMAKE_CFG_INTDIR}" "\${config}" command "${command}") + set(config "-Dconfig=${CMAKE_CFG_INTDIR}") + endif() + + # Wrap multiple 'COMMAND' lines up into a second-level wrapper + # script so all output can be sent to one log file. + if("${command}" MATCHES ";COMMAND;") + set(code_execute_process " +${code_cygpath_make} +execute_process(COMMAND \${command} RESULT_VARIABLE result) +if(result) + set(msg \"Command failed (\${result}):\\n\") + foreach(arg IN LISTS command) + set(msg \"\${msg} '\${arg}'\") + endforeach(arg) + message(FATAL_ERROR \"\${msg}\") +endif() +") + set(code "") + set(cmd "") + set(sep "") + foreach(arg IN LISTS command) + if("x${arg}" STREQUAL "xCOMMAND") + set(code "${code}set(command \"${cmd}\")${code_execute_process}") + set(cmd "") + set(sep "") + else() + set(cmd "${cmd}${sep}${arg}") + set(sep ";") + endif() + endforeach() + set(code "set(ENV{VS_UNICODE_OUTPUT} \"\")\n${code}set(command \"${cmd}\")${code_execute_process}") + file(WRITE ${stamp_dir}/${name}-${step}-impl.cmake "${code}") + set(command ${CMAKE_COMMAND} "-Dmake=\${make}" "-Dconfig=\${config}" -P ${stamp_dir}/${name}-${step}-impl.cmake) + endif() + + # Wrap the command in a script to log output to files. + set(script ${stamp_dir}/${name}-${step}.cmake) + set(logbase ${stamp_dir}/${name}-${step}) + file(WRITE ${script} " +${code_cygpath_make} +set(ENV{VS_UNICODE_OUTPUT} \"\") +set(command \"${command}\") +execute_process( + COMMAND \${command} + RESULT_VARIABLE result + OUTPUT_FILE \"${logbase}-out.log\" + ERROR_FILE \"${logbase}-err.log\" + ) +if(result) + set(msg \"Command failed: \${result}\\n\") + foreach(arg IN LISTS command) + set(msg \"\${msg} '\${arg}'\") + endforeach(arg) + set(msg \"\${msg}\\nSee also\\n ${logbase}-*.log\\n\") + message(FATAL_ERROR \"\${msg}\") +else() + set(msg \"${name} ${step} command succeeded. See also ${logbase}-*.log\\n\") + message(STATUS \"\${msg}\") +endif() +") + set(command ${CMAKE_COMMAND} ${make} ${config} -P ${script}) + set(${cmd_var} "${command}" PARENT_SCOPE) +endfunction(_ep_write_log_script) + +# This module used to use "/${CMAKE_CFG_INTDIR}" directly and produced +# makefiles with "/./" in paths for custom command dependencies. Which +# resulted in problems with parallel make -j invocations. +# +# This function was added so that the suffix (search below for ${cfgdir}) is +# only set to "/${CMAKE_CFG_INTDIR}" when ${CMAKE_CFG_INTDIR} is not going to +# be "." (multi-configuration build systems like Visual Studio and Xcode...) +# +function(_ep_get_configuration_subdir_suffix suffix_var) + set(suffix "") + if(CMAKE_CONFIGURATION_TYPES) + set(suffix "/${CMAKE_CFG_INTDIR}") + endif() + set(${suffix_var} "${suffix}" PARENT_SCOPE) +endfunction(_ep_get_configuration_subdir_suffix) + + +function(ExternalProject_Add_StepTargets name) + set(steps ${ARGN}) + + _ep_get_configuration_subdir_suffix(cfgdir) + ExternalProject_Get_Property(${name} stamp_dir) + + foreach(step ${steps}) + add_custom_target(${name}-${step} + DEPENDS ${stamp_dir}${cfgdir}/${name}-${step}) + + # Depend on other external projects (target-level). + get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS) + foreach(arg IN LISTS deps) + add_dependencies(${name}-${step} ${arg}) + endforeach() + endforeach() +endfunction(ExternalProject_Add_StepTargets) + + +function(ExternalProject_Add_Step name step) + set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles) + ExternalProject_Get_Property(${name} stamp_dir) + + _ep_get_configuration_subdir_suffix(cfgdir) + + add_custom_command(APPEND + OUTPUT ${cmf_dir}${cfgdir}/${name}-complete + DEPENDS ${stamp_dir}${cfgdir}/${name}-${step} + ) + _ep_parse_arguments(ExternalProject_Add_Step + ${name} _EP_${step}_ "${ARGN}") + + # Steps depending on this step. + get_property(dependers TARGET ${name} PROPERTY _EP_${step}_DEPENDERS) + foreach(depender IN LISTS dependers) + add_custom_command(APPEND + OUTPUT ${stamp_dir}${cfgdir}/${name}-${depender} + DEPENDS ${stamp_dir}${cfgdir}/${name}-${step} + ) + endforeach() + + # Dependencies on files. + get_property(depends TARGET ${name} PROPERTY _EP_${step}_DEPENDS) + + # Dependencies on steps. + get_property(dependees TARGET ${name} PROPERTY _EP_${step}_DEPENDEES) + foreach(dependee IN LISTS dependees) + list(APPEND depends ${stamp_dir}${cfgdir}/${name}-${dependee}) + endforeach() + + # The command to run. + get_property(command TARGET ${name} PROPERTY _EP_${step}_COMMAND) + if(command) + set(comment "Performing ${step} step for '${name}'") + else() + set(comment "No ${step} step for '${name}'") + endif() + get_property(work_dir TARGET ${name} PROPERTY _EP_${step}_WORKING_DIRECTORY) + + # Replace list separators. + get_property(sep TARGET ${name} PROPERTY _EP_LIST_SEPARATOR) + if(sep AND command) + string(REPLACE "${sep}" "\\;" command "${command}") + endif() + + # Replace location tags. + _ep_replace_location_tags(${name} comment command work_dir) + + # Custom comment? + get_property(comment_set TARGET ${name} PROPERTY _EP_${step}_COMMENT SET) + if(comment_set) + get_property(comment TARGET ${name} PROPERTY _EP_${step}_COMMENT) + endif() + + # Run every time? + get_property(always TARGET ${name} PROPERTY _EP_${step}_ALWAYS) + if(always) + set_property(SOURCE ${stamp_dir}${cfgdir}/${name}-${step} PROPERTY SYMBOLIC 1) + set(touch) + else() + set(touch ${CMAKE_COMMAND} -E touch ${stamp_dir}${cfgdir}/${name}-${step}) + endif() + + # Wrap with log script? + get_property(log TARGET ${name} PROPERTY _EP_${step}_LOG) + if(command AND log) + _ep_write_log_script(${name} ${step} command) + endif() + + add_custom_command( + OUTPUT ${stamp_dir}${cfgdir}/${name}-${step} + COMMENT ${comment} + COMMAND ${command} + COMMAND ${touch} + DEPENDS ${depends} + WORKING_DIRECTORY ${work_dir} + VERBATIM + ) + + # Add custom "step target"? + get_property(step_targets TARGET ${name} PROPERTY _EP_STEP_TARGETS) + if(NOT step_targets) + get_property(step_targets DIRECTORY PROPERTY EP_STEP_TARGETS) + endif() + foreach(st ${step_targets}) + if("${st}" STREQUAL "${step}") + ExternalProject_Add_StepTargets(${name} ${step}) + break() + endif() + endforeach() +endfunction(ExternalProject_Add_Step) + + +function(_ep_add_mkdir_command name) + ExternalProject_Get_Property(${name} + source_dir binary_dir install_dir stamp_dir download_dir tmp_dir) + + _ep_get_configuration_subdir_suffix(cfgdir) + + ExternalProject_Add_Step(${name} mkdir + COMMENT "Creating directories for '${name}'" + COMMAND ${CMAKE_COMMAND} -E make_directory ${source_dir} + COMMAND ${CMAKE_COMMAND} -E make_directory ${binary_dir} + COMMAND ${CMAKE_COMMAND} -E make_directory ${install_dir} + COMMAND ${CMAKE_COMMAND} -E make_directory ${tmp_dir} + COMMAND ${CMAKE_COMMAND} -E make_directory ${stamp_dir}${cfgdir} + COMMAND ${CMAKE_COMMAND} -E make_directory ${download_dir} + ) +endfunction(_ep_add_mkdir_command) + + +function(_ep_get_git_version git_EXECUTABLE git_version_var) + if(git_EXECUTABLE) + execute_process( + COMMAND "${git_EXECUTABLE}" --version + OUTPUT_VARIABLE ov + ERROR_VARIABLE ev + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(REGEX REPLACE "^git version (.+)$" "\\1" version "${ov}") + set(${git_version_var} "${version}" PARENT_SCOPE) + endif() +endfunction() + + +function(_ep_is_dir_empty dir empty_var) + file(GLOB gr "${dir}/*") + if("${gr}" STREQUAL "") + set(${empty_var} 1 PARENT_SCOPE) + else() + set(${empty_var} 0 PARENT_SCOPE) + endif() +endfunction() + + +function(_ep_add_download_command name) + ExternalProject_Get_Property(${name} source_dir stamp_dir download_dir tmp_dir) + + get_property(cmd_set TARGET ${name} PROPERTY _EP_DOWNLOAD_COMMAND SET) + get_property(cmd TARGET ${name} PROPERTY _EP_DOWNLOAD_COMMAND) + get_property(cvs_repository TARGET ${name} PROPERTY _EP_CVS_REPOSITORY) + get_property(svn_repository TARGET ${name} PROPERTY _EP_SVN_REPOSITORY) + get_property(git_repository TARGET ${name} PROPERTY _EP_GIT_REPOSITORY) + get_property(url TARGET ${name} PROPERTY _EP_URL) + + # TODO: Perhaps file:// should be copied to download dir before extraction. + string(REGEX REPLACE "^file://" "" url "${url}") + + set(depends) + set(comment) + set(work_dir) + + if(cmd_set) + set(work_dir ${download_dir}) + elseif(cvs_repository) + find_package(CVS) + if(NOT CVS_EXECUTABLE) + message(FATAL_ERROR "error: could not find cvs for checkout of ${name}") + endif() + + get_target_property(cvs_module ${name} _EP_CVS_MODULE) + if(NOT cvs_module) + message(FATAL_ERROR "error: no CVS_MODULE") + endif() + + get_property(cvs_tag TARGET ${name} PROPERTY _EP_CVS_TAG) + + set(repository ${cvs_repository}) + set(module ${cvs_module}) + set(tag ${cvs_tag}) + configure_file( + "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in" + "${stamp_dir}/${name}-cvsinfo.txt" + @ONLY + ) + + get_filename_component(src_name "${source_dir}" NAME) + get_filename_component(work_dir "${source_dir}" PATH) + set(comment "Performing download step (CVS checkout) for '${name}'") + set(cmd ${CVS_EXECUTABLE} -d ${cvs_repository} -q co ${cvs_tag} -d ${src_name} ${cvs_module}) + list(APPEND depends ${stamp_dir}/${name}-cvsinfo.txt) + elseif(svn_repository) + find_package(Subversion) + if(NOT Subversion_SVN_EXECUTABLE) + message(FATAL_ERROR "error: could not find svn for checkout of ${name}") + endif() + + get_property(svn_revision TARGET ${name} PROPERTY _EP_SVN_REVISION) + get_property(svn_username TARGET ${name} PROPERTY _EP_SVN_USERNAME) + get_property(svn_password TARGET ${name} PROPERTY _EP_SVN_PASSWORD) + get_property(svn_trust_cert TARGET ${name} PROPERTY _EP_SVN_TRUST_CERT) + + set(repository "${svn_repository} user=${svn_username} password=${svn_password}") + set(module) + set(tag ${svn_revision}) + configure_file( + "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in" + "${stamp_dir}/${name}-svninfo.txt" + @ONLY + ) + + get_filename_component(src_name "${source_dir}" NAME) + get_filename_component(work_dir "${source_dir}" PATH) + set(comment "Performing download step (SVN checkout) for '${name}'") + set(svn_user_pw_args "") + if(svn_username) + set(svn_user_pw_args ${svn_user_pw_args} "--username=${svn_username}") + endif() + if(svn_password) + set(svn_user_pw_args ${svn_user_pw_args} "--password=${svn_password}") + endif() + if(svn_trust_cert) + set(svn_trust_cert_args --trust-server-cert) + endif() + set(cmd ${Subversion_SVN_EXECUTABLE} co ${svn_repository} ${svn_revision} + --non-interactive ${svn_trust_cert_args} ${svn_user_pw_args} ${src_name}) + list(APPEND depends ${stamp_dir}/${name}-svninfo.txt) + elseif(git_repository) + find_package(Git) + if(NOT GIT_EXECUTABLE) + message(FATAL_ERROR "error: could not find git for clone of ${name}") + endif() + + # The git submodule update '--recursive' flag requires git >= v1.6.5 + # + _ep_get_git_version("${GIT_EXECUTABLE}" git_version) + if(git_version VERSION_LESS 1.6.5) + message(FATAL_ERROR "error: git version 1.6.5 or later required for 'git submodule update --recursive': git_version='${git_version}'") + endif() + + get_property(git_tag TARGET ${name} PROPERTY _EP_GIT_TAG) + if(NOT git_tag) + set(git_tag "master") + endif() + + set(repository ${git_repository}) + set(module) + set(tag ${git_tag}) + configure_file( + "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in" + "${stamp_dir}/${name}-gitinfo.txt" + @ONLY + ) + + get_filename_component(src_name "${source_dir}" NAME) + get_filename_component(work_dir "${source_dir}" PATH) + + # Since git clone doesn't succeed if the non-empty source_dir exists, + # create a cmake script to invoke as download command. + # The script will delete the source directory and then call git clone. + # + _ep_write_gitclone_script(${tmp_dir}/${name}-gitclone.cmake ${source_dir} + ${GIT_EXECUTABLE} ${git_repository} ${git_tag} ${src_name} ${work_dir} + ) + set(comment "Performing download step (git clone) for '${name}'") + set(cmd ${CMAKE_COMMAND} -P ${tmp_dir}/${name}-gitclone.cmake) + list(APPEND depends ${stamp_dir}/${name}-gitinfo.txt) + elseif(url) + get_filename_component(work_dir "${source_dir}" PATH) + get_property(md5 TARGET ${name} PROPERTY _EP_URL_MD5) + set(repository "external project URL") + set(module "${url}") + set(tag "${md5}") + configure_file( + "${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in" + "${stamp_dir}/${name}-urlinfo.txt" + @ONLY + ) + list(APPEND depends ${stamp_dir}/${name}-urlinfo.txt) + if(IS_DIRECTORY "${url}") + get_filename_component(abs_dir "${url}" ABSOLUTE) + set(comment "Performing download step (DIR copy) for '${name}'") + set(cmd ${CMAKE_COMMAND} -E remove_directory ${source_dir} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${abs_dir} ${source_dir}) + else() + if("${url}" MATCHES "^[a-z]+://") + # TODO: Should download and extraction be different steps? + string(REGEX MATCH "[^/\\?]*$" fname "${url}") + if(NOT "${fname}" MATCHES "(\\.|=)(bz2|tar|tgz|tar\\.gz|zip)$") + string(REGEX MATCH "([^/\\?]+(\\.|=)(bz2|tar|tgz|tar\\.gz|zip))/.*$" match_result "${url}") + set(fname "${CMAKE_MATCH_1}") + endif() + if(NOT "${fname}" MATCHES "(\\.|=)(bz2|tar|tgz|tar\\.gz|zip)$") + message(FATAL_ERROR "Could not extract tarball filename from url:\n ${url}") + endif() + string(REPLACE ";" "-" fname "${fname}") + set(file ${download_dir}/${fname}) + get_property(timeout TARGET ${name} PROPERTY _EP_TIMEOUT) + _ep_write_downloadfile_script("${stamp_dir}/download-${name}.cmake" "${url}" "${file}" "${timeout}" "${md5}") + set(cmd ${CMAKE_COMMAND} -P ${stamp_dir}/download-${name}.cmake + COMMAND) + set(comment "Performing download step (download, verify and extract) for '${name}'") + else() + set(file "${url}") + set(comment "Performing download step (verify and extract) for '${name}'") + endif() + _ep_write_verifyfile_script("${stamp_dir}/verify-${name}.cmake" "${file}" "${md5}") + list(APPEND cmd ${CMAKE_COMMAND} -P ${stamp_dir}/verify-${name}.cmake) + _ep_write_extractfile_script("${stamp_dir}/extract-${name}.cmake" "${name}" "${file}" "${source_dir}") + list(APPEND cmd ${CMAKE_COMMAND} -P ${stamp_dir}/extract-${name}.cmake) + endif() + else() + _ep_is_dir_empty("${source_dir}" empty) + if(${empty}) + message(SEND_ERROR "error: no download info for '${name}' -- please specify existing/non-empty SOURCE_DIR or one of URL, CVS_REPOSITORY and CVS_MODULE, SVN_REPOSITORY, GIT_REPOSITORY or DOWNLOAD_COMMAND") + endif() + endif() + + get_property(log TARGET ${name} PROPERTY _EP_LOG_DOWNLOAD) + if(log) + set(log LOG 1) + else() + set(log "") + endif() + + ExternalProject_Add_Step(${name} download + COMMENT ${comment} + COMMAND ${cmd} + WORKING_DIRECTORY ${work_dir} + DEPENDS ${depends} + DEPENDEES mkdir + ${log} + ) +endfunction(_ep_add_download_command) + + +function(_ep_add_update_command name) + ExternalProject_Get_Property(${name} source_dir) + + get_property(cmd_set TARGET ${name} PROPERTY _EP_UPDATE_COMMAND SET) + get_property(cmd TARGET ${name} PROPERTY _EP_UPDATE_COMMAND) + get_property(cvs_repository TARGET ${name} PROPERTY _EP_CVS_REPOSITORY) + get_property(svn_repository TARGET ${name} PROPERTY _EP_SVN_REPOSITORY) + get_property(git_repository TARGET ${name} PROPERTY _EP_GIT_REPOSITORY) + + set(work_dir) + set(comment) + set(always) + + if(cmd_set) + set(work_dir ${source_dir}) + elseif(cvs_repository) + if(NOT CVS_EXECUTABLE) + message(FATAL_ERROR "error: could not find cvs for update of ${name}") + endif() + set(work_dir ${source_dir}) + set(comment "Performing update step (CVS update) for '${name}'") + get_property(cvs_tag TARGET ${name} PROPERTY _EP_CVS_TAG) + set(cmd ${CVS_EXECUTABLE} -d ${cvs_repository} -q up -dP ${cvs_tag}) + set(always 1) + elseif(svn_repository) + if(NOT Subversion_SVN_EXECUTABLE) + message(FATAL_ERROR "error: could not find svn for update of ${name}") + endif() + set(work_dir ${source_dir}) + set(comment "Performing update step (SVN update) for '${name}'") + get_property(svn_revision TARGET ${name} PROPERTY _EP_SVN_REVISION) + get_property(svn_username TARGET ${name} PROPERTY _EP_SVN_USERNAME) + get_property(svn_password TARGET ${name} PROPERTY _EP_SVN_PASSWORD) + get_property(svn_trust_cert TARGET ${name} PROPERTY _EP_SVN_TRUST_CERT) + set(svn_user_pw_args "") + if(svn_username) + set(svn_user_pw_args ${svn_user_pw_args} "--username=${svn_username}") + endif() + if(svn_password) + set(svn_user_pw_args ${svn_user_pw_args} "--password=${svn_password}") + endif() + if(svn_trust_cert) + set(svn_trust_cert_args --trust-server-cert) + endif() + set(cmd ${Subversion_SVN_EXECUTABLE} up ${svn_revision} + --non-interactive ${svn_trust_cert_args} ${svn_user_pw_args}) + set(always 1) + elseif(git_repository) + if(NOT GIT_EXECUTABLE) + message(FATAL_ERROR "error: could not find git for fetch of ${name}") + endif() + set(work_dir ${source_dir}) + set(comment "Performing update step (git fetch) for '${name}'") + get_property(git_tag TARGET ${name} PROPERTY _EP_GIT_TAG) + if(NOT git_tag) + set(git_tag "master") + endif() + set(cmd ${GIT_EXECUTABLE} fetch + COMMAND ${GIT_EXECUTABLE} checkout ${git_tag} + COMMAND ${GIT_EXECUTABLE} submodule update --recursive + ) + set(always 1) + endif() + + get_property(log TARGET ${name} PROPERTY _EP_LOG_UPDATE) + if(log) + set(log LOG 1) + else() + set(log "") + endif() + + ExternalProject_Add_Step(${name} update + COMMENT ${comment} + COMMAND ${cmd} + ALWAYS ${always} + WORKING_DIRECTORY ${work_dir} + DEPENDEES download + ${log} + ) +endfunction(_ep_add_update_command) + + +function(_ep_add_patch_command name) + ExternalProject_Get_Property(${name} source_dir) + + get_property(cmd_set TARGET ${name} PROPERTY _EP_PATCH_COMMAND SET) + get_property(cmd TARGET ${name} PROPERTY _EP_PATCH_COMMAND) + + set(work_dir) + + if(cmd_set) + set(work_dir ${source_dir}) + endif() + + ExternalProject_Add_Step(${name} patch + COMMAND ${cmd} + WORKING_DIRECTORY ${work_dir} + DEPENDEES download + ) +endfunction(_ep_add_patch_command) + + +# TODO: Make sure external projects use the proper compiler +function(_ep_add_configure_command name) + ExternalProject_Get_Property(${name} source_dir binary_dir tmp_dir) + + _ep_get_configuration_subdir_suffix(cfgdir) + + # Depend on other external projects (file-level). + set(file_deps) + get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS) + foreach(dep IN LISTS deps) + get_property(dep_stamp_dir TARGET ${dep} PROPERTY _EP_STAMP_DIR) + list(APPEND file_deps ${dep_stamp_dir}${cfgdir}/${dep}-done) + endforeach() + + get_property(cmd_set TARGET ${name} PROPERTY _EP_CONFIGURE_COMMAND SET) + if(cmd_set) + get_property(cmd TARGET ${name} PROPERTY _EP_CONFIGURE_COMMAND) + else() + get_target_property(cmake_command ${name} _EP_CMAKE_COMMAND) + if(cmake_command) + set(cmd "${cmake_command}") + else() + set(cmd "${CMAKE_COMMAND}") + endif() + + get_property(cmake_args TARGET ${name} PROPERTY _EP_CMAKE_ARGS) + list(APPEND cmd ${cmake_args}) + + # If there are any CMAKE_CACHE_ARGS, write an initial cache and use it + get_property(cmake_cache_args TARGET ${name} PROPERTY _EP_CMAKE_CACHE_ARGS) + if(cmake_cache_args) + set(_ep_cache_args_script "${tmp_dir}/${name}-cache.cmake") + _ep_write_initial_cache(${name} "${_ep_cache_args_script}" "${cmake_cache_args}") + list(APPEND cmd "-C${_ep_cache_args_script}") + endif() + + get_target_property(cmake_generator ${name} _EP_CMAKE_GENERATOR) + if(cmake_generator) + list(APPEND cmd "-G${cmake_generator}" "${source_dir}") + else() + if(CMAKE_EXTRA_GENERATOR) + list(APPEND cmd "-G${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}" + "${source_dir}") + else() + list(APPEND cmd "-G${CMAKE_GENERATOR}" "${source_dir}") + endif() + endif() + endif() + + # If anything about the configure command changes, (command itself, cmake + # used, cmake args or cmake generator) then re-run the configure step. + # Fixes issue http://public.kitware.com/Bug/view.php?id=10258 + # + if(NOT EXISTS ${tmp_dir}/${name}-cfgcmd.txt.in) + file(WRITE ${tmp_dir}/${name}-cfgcmd.txt.in "cmd='\@cmd\@'\n") + endif() + configure_file(${tmp_dir}/${name}-cfgcmd.txt.in ${tmp_dir}/${name}-cfgcmd.txt) + list(APPEND file_deps ${tmp_dir}/${name}-cfgcmd.txt) + list(APPEND file_deps ${_ep_cache_args_script}) + + get_property(log TARGET ${name} PROPERTY _EP_LOG_CONFIGURE) + if(log) + set(log LOG 1) + else() + set(log "") + endif() + + ExternalProject_Add_Step(${name} configure + COMMAND ${cmd} + WORKING_DIRECTORY ${binary_dir} + DEPENDEES update patch + DEPENDS ${file_deps} + ${log} + ) +endfunction(_ep_add_configure_command) + + +function(_ep_add_build_command name) + ExternalProject_Get_Property(${name} binary_dir) + + get_property(cmd_set TARGET ${name} PROPERTY _EP_BUILD_COMMAND SET) + if(cmd_set) + get_property(cmd TARGET ${name} PROPERTY _EP_BUILD_COMMAND) + else() + _ep_get_build_command(${name} BUILD cmd) + endif() + + get_property(log TARGET ${name} PROPERTY _EP_LOG_BUILD) + if(log) + set(log LOG 1) + else() + set(log "") + endif() + + ExternalProject_Add_Step(${name} build + COMMAND ${cmd} + WORKING_DIRECTORY ${binary_dir} + DEPENDEES configure + ${log} + ) +endfunction(_ep_add_build_command) + + +function(_ep_add_install_command name) + ExternalProject_Get_Property(${name} binary_dir) + + get_property(cmd_set TARGET ${name} PROPERTY _EP_INSTALL_COMMAND SET) + if(cmd_set) + get_property(cmd TARGET ${name} PROPERTY _EP_INSTALL_COMMAND) + else() + _ep_get_build_command(${name} INSTALL cmd) + endif() + + get_property(log TARGET ${name} PROPERTY _EP_LOG_INSTALL) + if(log) + set(log LOG 1) + else() + set(log "") + endif() + + ExternalProject_Add_Step(${name} install + COMMAND ${cmd} + WORKING_DIRECTORY ${binary_dir} + DEPENDEES build + ${log} + ) +endfunction(_ep_add_install_command) + + +function(_ep_add_test_command name) + ExternalProject_Get_Property(${name} binary_dir) + + get_property(before TARGET ${name} PROPERTY _EP_TEST_BEFORE_INSTALL) + get_property(after TARGET ${name} PROPERTY _EP_TEST_AFTER_INSTALL) + get_property(cmd_set TARGET ${name} PROPERTY _EP_TEST_COMMAND SET) + + # Only actually add the test step if one of the test related properties is + # explicitly set. (i.e. the test step is omitted unless requested...) + # + if(cmd_set OR before OR after) + if(cmd_set) + get_property(cmd TARGET ${name} PROPERTY _EP_TEST_COMMAND) + else() + _ep_get_build_command(${name} TEST cmd) + endif() + + if(before) + set(dep_args DEPENDEES build DEPENDERS install) + else() + set(dep_args DEPENDEES install) + endif() + + get_property(log TARGET ${name} PROPERTY _EP_LOG_TEST) + if(log) + set(log LOG 1) + else() + set(log "") + endif() + + ExternalProject_Add_Step(${name} test + COMMAND ${cmd} + WORKING_DIRECTORY ${binary_dir} + ${dep_args} + ${log} + ) + endif() +endfunction(_ep_add_test_command) + + +function(ExternalProject_Add name) + _ep_get_configuration_subdir_suffix(cfgdir) + + # Add a custom target for the external project. + set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles) + add_custom_target(${name} ALL DEPENDS ${cmf_dir}${cfgdir}/${name}-complete) + set_property(TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT 1) + _ep_parse_arguments(ExternalProject_Add ${name} _EP_ "${ARGN}") + _ep_set_directories(${name}) + ExternalProject_Get_Property(${name} stamp_dir) + + # The 'complete' step depends on all other steps and creates a + # 'done' mark. A dependent external project's 'configure' step + # depends on the 'done' mark so that it rebuilds when this project + # rebuilds. It is important that 'done' is not the output of any + # custom command so that CMake does not propagate build rules to + # other external project targets, which may cause problems during + # parallel builds. However, the Ninja generator needs to see the entire + # dependency graph, and can cope with custom commands belonging to + # multiple targets, so we add the 'done' mark as an output for Ninja only. + set(complete_outputs ${cmf_dir}${cfgdir}/${name}-complete) + if(${CMAKE_GENERATOR} MATCHES "Ninja") + set(complete_outputs + ${complete_outputs} ${stamp_dir}${cfgdir}/${name}-done) + endif() + + add_custom_command( + OUTPUT ${complete_outputs} + COMMENT "Completed '${name}'" + COMMAND ${CMAKE_COMMAND} -E make_directory ${cmf_dir}${cfgdir} + COMMAND ${CMAKE_COMMAND} -E touch ${cmf_dir}${cfgdir}/${name}-complete + COMMAND ${CMAKE_COMMAND} -E touch ${stamp_dir}${cfgdir}/${name}-done + DEPENDS ${stamp_dir}${cfgdir}/${name}-install + VERBATIM + ) + + + # Depend on other external projects (target-level). + get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS) + foreach(arg IN LISTS deps) + add_dependencies(${name} ${arg}) + endforeach() + + # Set up custom build steps based on the target properties. + # Each step depends on the previous one. + # + # The target depends on the output of the final step. + # (Already set up above in the DEPENDS of the add_custom_target command.) + # + _ep_add_mkdir_command(${name}) + _ep_add_download_command(${name}) + _ep_add_update_command(${name}) + _ep_add_patch_command(${name}) + _ep_add_configure_command(${name}) + _ep_add_build_command(${name}) + _ep_add_install_command(${name}) + + # Test is special in that it might depend on build, or it might depend + # on install. + # + _ep_add_test_command(${name}) +endfunction(ExternalProject_Add) diff --git a/Modules/FLTKCompatibility.cmake b/Modules/FLTKCompatibility.cmake new file mode 100644 index 0000000..6b6f960 --- /dev/null +++ b/Modules/FLTKCompatibility.cmake @@ -0,0 +1,15 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(CheckIncludeFile) diff --git a/Modules/FeatureSummary.cmake b/Modules/FeatureSummary.cmake new file mode 100644 index 0000000..cef647e --- /dev/null +++ b/Modules/FeatureSummary.cmake @@ -0,0 +1,466 @@ +# - Macros for generating a summary of enabled/disabled features +# +# This module provides the macros feature_summary(), set_package_properties() and +# add_feature_info(). +# For compatibility it also still provides set_package_info(), set_feature_info(), +# print_enabled_features() and print_disabled_features(). +# +# These macros can be used to generate a summary of enabled and disabled +# packages and/or feature for a build tree: +# +# -- The following OPTIONAL packages have been found: +# LibXml2 (required version >= 2.4) , XML processing library. , +# * Enables HTML-import in MyWordProcessor +# * Enables odt-export in MyWordProcessor +# PNG , A PNG image library. , +# * Enables saving screenshots +# -- The following OPTIONAL packages have not been found: +# Lua51 , The Lua scripting language. , +# * Enables macros in MyWordProcessor +# Foo , Foo provides cool stuff. +# +# +# FEATURE_SUMMARY( [FILENAME ] +# [APPEND] +# [VAR ] +# [INCLUDE_QUIET_PACKAGES] +# [FATAL_ON_MISSING_REQUIRED_PACKAGES] +# [DESCRIPTION "Found packages:"] +# WHAT (ALL | PACKAGES_FOUND | PACKAGES_NOT_FOUND +# | ENABLED_FEATURES | DISABLED_FEATURES] +# ) +# +# The FEATURE_SUMMARY() macro can be used to print information about enabled +# or disabled packages or features of a project. +# By default, only the names of the features/packages will be printed and their +# required version when one was specified. Use SET_PACKAGE_PROPERTIES() to add more +# useful information, like e.g. a download URL for the respective package or their +# purpose in the project. +# +# The WHAT option is the only mandatory option. Here you specify what information +# will be printed: +# ALL: print everything +# ENABLED_FEATURES: the list of all features which are enabled +# DISABLED_FEATURES: the list of all features which are disabled +# PACKAGES_FOUND: the list of all packages which have been found +# PACKAGES_NOT_FOUND: the list of all packages which have not been found +# OPTIONAL_PACKAGES_FOUND: only those packages which have been found which have the type OPTIONAL +# OPTIONAL_PACKAGES_NOT_FOUND: only those packages which have not been found which have the type OPTIONAL +# RECOMMENDED_PACKAGES_FOUND: only those packages which have been found which have the type RECOMMENDED +# RECOMMENDED_PACKAGES_NOT_FOUND: only those packages which have not been found which have the type RECOMMENDED +# REQUIRED_PACKAGES_FOUND: only those packages which have been found which have the type REQUIRED +# REQUIRED_PACKAGES_NOT_FOUND: only those packages which have not been found which have the type REQUIRED +# RUNTIME_PACKAGES_FOUND: only those packages which have been found which have the type RUNTIME +# RUNTIME_PACKAGES_NOT_FOUND: only those packages which have not been found which have the type RUNTIME +# +# If a FILENAME is given, the information is printed into this file. If APPEND +# is used, it is appended to this file, otherwise the file is overwritten if +# it already existed. +# If the VAR option is used, the information is "printed" into the specified +# variable. +# If FILENAME is not used, the information is printed to the terminal. +# Using the DESCRIPTION option a description or headline can be set which will +# be printed above the actual content. +# If INCLUDE_QUIET_PACKAGES is given, packages which have been searched with find_package(... QUIET) will +# also be listed. By default they are skipped. +# If FATAL_ON_MISSING_REQUIRED_PACKAGES is given, CMake will abort if a package which is marked as REQUIRED +# has not been found. +# +# Example 1, append everything to a file: +# feature_summary(WHAT ALL +# FILENAME ${CMAKE_BINARY_DIR}/all.log APPEND) +# +# Example 2, print the enabled features into the variable enabledFeaturesText, including QUIET packages: +# feature_summary(WHAT ENABLED_FEATURES +# INCLUDE_QUIET_PACKAGES +# DESCRIPTION "Enabled Features:" +# VAR enabledFeaturesText) +# message(STATUS "${enabledFeaturesText}") +# +# +# SET_PACKAGE_PROPERTIES( PROPERTIES [ URL ] +# [ DESCRIPTION ] +# [ TYPE (RUNTIME|OPTIONAL|RECOMMENDED|REQUIRED) ] +# [ PURPOSE ] +# ) +# +# Use this macro to set up information about the named package, which can +# then be displayed via FEATURE_SUMMARY(). +# This can be done either directly in the Find-module or in the project +# which uses the module after the FIND_PACKAGE() call. +# The features for which information can be set are added automatically by the +# find_package() command. +# +# URL: this should be the homepage of the package, or something similar. Ideally this is set +# already directly in the Find-module. +# +# DESCRIPTION: A short description what that package is, at most one sentence. +# Ideally this is set already directly in the Find-module. +# +# TYPE: What type of dependency has the using project on that package. Default is OPTIONAL. +# In this case it is a package which can be used by the project when available at buildtime, +# but it also work without. RECOMMENDED is similar to OPTIONAL, i.e. the project will build +# if the package is not present, but the functionality of the resulting binaries will be severly +# limited. If a REQUIRED package is not available at buildtime, the project may not even build. This +# can be combined with the FATAL_ON_MISSING_REQUIRED_PACKAGES argument for feature_summary(). +# Last, a RUNTIME package is a package which is actually not used at all during the build, but +# which is required for actually running the resulting binaries. So if such a package is missing, +# the project can still be built, but it may not work later on. If set_package_properties() is called +# multiple times for the same package with different TYPEs, the TYPE is only changed to higher +# TYPEs ( RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED ), lower TYPEs are ignored. +# The TYPE property is project-specific, so it cannot be set by the Find-module, but must be set in the project. +# +# PURPOSE: This describes which features this package enables in the project, i.e. it tells the user +# what functionality he gets in the resulting binaries. +# If set_package_properties() is called multiple times for a package, all PURPOSE properties are appended +# to a list of purposes of the package in the project. +# As the TYPE property, also the PURPOSE property +# is project-specific, so it cannot be set by the Find-module, but must be set in the project. +# +# +# Example for setting the info for a package: +# find_package(LibXml2) +# set_package_properties(LibXml2 PROPERTIES DESCRIPTION "A XML processing library." +# URL "http://xmlsoft.org/") +# +# set_package_properties(LibXml2 PROPERTIES TYPE RECOMMENDED +# PURPOSE "Enables HTML-import in MyWordProcessor") +# ... +# set_package_properties(LibXml2 PROPERTIES TYPE OPTIONAL +# PURPOSE "Enables odt-export in MyWordProcessor") +# +# find_package(DBUS) +# set_package_properties(DBUS PROPERTIES TYPE RUNTIME +# PURPOSE "Necessary to disable the screensaver during a presentation" ) +# +# ADD_FEATURE_INFO( ) +# Use this macro to add information about a feature with the given . +# contains whether this feature is enabled or not, +# is a text describing the feature. +# The information can be displayed using feature_summary() for ENABLED_FEATURES +# and DISABLED_FEATURES respectively. +# +# Example for setting the info for a feature: +# option(WITH_FOO "Help for foo" ON) +# add_feature_info(Foo WITH_FOO "The Foo feature provides very cool stuff.") +# +# +# The following macros are provided for compatibility with previous CMake versions: +# +# SET_PACKAGE_INFO( [ [] ] ) +# Use this macro to set up information about the named package, which can +# then be displayed via FEATURE_SUMMARY(). +# This can be done either directly in the Find-module or in the project +# which uses the module after the FIND_PACKAGE() call. +# The features for which information can be set are added automatically by the +# find_package() command. +# +# PRINT_ENABLED_FEATURES() +# Does the same as FEATURE_SUMMARY(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:") +# +# PRINT_DISABLED_FEATURES() +# Does the same as FEATURE_SUMMARY(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:") +# +# SET_FEATURE_INFO( [] ) +# Does the same as SET_PACKAGE_INFO( ) + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(CMakeParseArguments) + + +FUNCTION(ADD_FEATURE_INFO _name _enabled _desc) + IF (${_enabled}) + SET_PROPERTY(GLOBAL APPEND PROPERTY ENABLED_FEATURES "${_name}") + ELSE () + SET_PROPERTY(GLOBAL APPEND PROPERTY DISABLED_FEATURES "${_name}") + ENDIF () + + SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_desc}" ) +ENDFUNCTION(ADD_FEATURE_INFO) + + + +FUNCTION(SET_PACKAGE_PROPERTIES _name _props) + IF(NOT "${_props}" STREQUAL "PROPERTIES") + MESSAGE(FATAL_ERROR "PROPERTIES keyword is missing in SET_PACKAGE_PROPERTIES() call.") + ENDIF() + + SET(options ) # none + SET(oneValueArgs DESCRIPTION URL TYPE PURPOSE ) + SET(multiValueArgs ) # none + + CMAKE_PARSE_ARGUMENTS(_SPP "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + IF(_SPP_UNPARSED_ARGUMENTS) + MESSAGE(FATAL_ERROR "Unknown keywords given to SET_PACKAGE_PROPERTIES(): \"${_SPP_UNPARSED_ARGUMENTS}\"") + ENDIF() + + IF(_SPP_DESCRIPTION) + GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION) + IF(_info AND NOT "${_info}" STREQUAL "${_SPP_DESCRIPTION}") + MESSAGE(STATUS "Warning: Property DESCRIPTION for package ${_name} already set to \"${_info}\", overriding it with \"${_SPP_DESCRIPTION}\"") + ENDIF() + + SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_SPP_DESCRIPTION}" ) + ENDIF() + + + IF(_SPP_URL) + GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_name}_URL) + IF(_info AND NOT "${_info}" STREQUAL "${_SPP_URL}") + MESSAGE(STATUS "Warning: Property URL already set to \"${_info}\", overriding it with \"${_SPP_URL}\"") + ENDIF() + + SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_SPP_URL}" ) + ENDIF() + + + # handle the PURPOSE: use APPEND, since there can be multiple purposes for one package inside a project + IF(_SPP_PURPOSE) + SET_PROPERTY(GLOBAL APPEND PROPERTY _CMAKE_${_name}_PURPOSE "${_SPP_PURPOSE}" ) + ENDIF() + + # handle the TYPE + IF(NOT _SPP_TYPE) + SET(_SPP_TYPE OPTIONAL) + ENDIF() + + # List the supported types, according to their priority + SET(validTypes "RUNTIME" "OPTIONAL" "RECOMMENDED" "REQUIRED" ) + LIST(FIND validTypes ${_SPP_TYPE} _typeIndexInList) + IF("${_typeIndexInList}" STREQUAL "-1" ) + MESSAGE(FATAL_ERROR "Bad package property type ${_SPP_TYPE} used in SET_PACKAGE_PROPERTIES(). " + "Valid types are OPTIONAL, RECOMMENDED, REQUIRED and RUNTIME." ) + ENDIF() + + GET_PROPERTY(_previousType GLOBAL PROPERTY _CMAKE_${_name}_TYPE) + LIST(FIND validTypes "${_previousType}" _prevTypeIndexInList) + + # make sure a previously set TYPE is not overridden with a lower new TYPE: + IF("${_typeIndexInList}" GREATER "${_prevTypeIndexInList}") + SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_TYPE "${_SPP_TYPE}" ) + ENDIF() + +ENDFUNCTION(SET_PACKAGE_PROPERTIES) + + + +FUNCTION(_FS_GET_FEATURE_SUMMARY _property _var _includeQuiet) + + SET(_type "ANY") + IF("${_property}" MATCHES "REQUIRED_") + SET(_type "REQUIRED") + ELSEIF("${_property}" MATCHES "RECOMMENDED_") + SET(_type "RECOMMENDED") + ELSEIF("${_property}" MATCHES "RUNTIME_") + SET(_type "RUNTIME") + ELSEIF("${_property}" MATCHES "OPTIONAL_") + SET(_type "OPTIONAL") + ENDIF() + + IF("${_property}" MATCHES "PACKAGES_FOUND") + SET(_property "PACKAGES_FOUND") + ELSEIF("${_property}" MATCHES "PACKAGES_NOT_FOUND") + SET(_property "PACKAGES_NOT_FOUND") + ENDIF() + + + SET(_currentFeatureText "") + GET_PROPERTY(_EnabledFeatures GLOBAL PROPERTY ${_property}) + + FOREACH(_currentFeature ${_EnabledFeatures}) + + # does this package belong to the type we currently want to list ? + GET_PROPERTY(_currentType GLOBAL PROPERTY _CMAKE_${_currentFeature}_TYPE) + IF(NOT _currentType) + SET(_currentType OPTIONAL) + ENDIF() + + IF("${_type}" STREQUAL ANY OR "${_type}" STREQUAL "${_currentType}") + + # check whether the current feature/package should be in the output depending on whether it was QUIET or not + SET(includeThisOne TRUE) + # skip QUIET packages, except if they are REQUIRED or INCLUDE_QUIET_PACKAGES has been set + IF((NOT "${_currentType}" STREQUAL "REQUIRED") AND NOT _includeQuiet) + GET_PROPERTY(_isQuiet GLOBAL PROPERTY _CMAKE_${_currentFeature}_QUIET) + IF(_isQuiet) + SET(includeThisOne FALSE) + ENDIF() + ENDIF() + + IF(includeThisOne) + + SET(_currentFeatureText "${_currentFeatureText}\n * ${_currentFeature}") + GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_REQUIRED_VERSION) + IF(_info) + SET(_currentFeatureText "${_currentFeatureText} (required version ${_info})") + ENDIF(_info) + GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_DESCRIPTION) + IF(_info) + SET(_currentFeatureText "${_currentFeatureText} , ${_info}") + ENDIF(_info) + GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_URL) + IF(_info) + SET(_currentFeatureText "${_currentFeatureText} , <${_info}>") + ENDIF(_info) + + GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_PURPOSE) + FOREACH(_purpose ${_info}) + SET(_currentFeatureText "${_currentFeatureText}\n * ${_purpose}") + ENDFOREACH() + + ENDIF(includeThisOne) + + ENDIF("${_type}" STREQUAL ANY OR "${_type}" STREQUAL "${_currentType}") + + ENDFOREACH(_currentFeature) + SET(${_var} "${_currentFeatureText}" PARENT_SCOPE) +ENDFUNCTION(_FS_GET_FEATURE_SUMMARY) + + + +FUNCTION(FEATURE_SUMMARY) +# CMAKE_PARSE_ARGUMENTS( args...) + SET(options APPEND INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) + SET(oneValueArgs FILENAME VAR DESCRIPTION WHAT) + SET(multiValueArgs ) # none + + CMAKE_PARSE_ARGUMENTS(_FS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${_FIRST_ARG} ${ARGN}) + + IF(_FS_UNPARSED_ARGUMENTS) + MESSAGE(FATAL_ERROR "Unknown keywords given to FEATURE_SUMMARY(): \"${_FS_UNPARSED_ARGUMENTS}\"") + ENDIF() + + IF(NOT _FS_WHAT) + MESSAGE(FATAL_ERROR "The call to FEATURE_SUMMARY() doesn't set the required WHAT argument.") + ENDIF() + + SET(validWhatParts "ENABLED_FEATURES" + "DISABLED_FEATURES" + "PACKAGES_FOUND" + "PACKAGES_NOT_FOUND" + "OPTIONAL_PACKAGES_FOUND" + "OPTIONAL_PACKAGES_NOT_FOUND" + "RECOMMENDED_PACKAGES_FOUND" + "RECOMMENDED_PACKAGES_NOT_FOUND" + "REQUIRED_PACKAGES_FOUND" + "REQUIRED_PACKAGES_NOT_FOUND" + "RUNTIME_PACKAGES_FOUND" + "RUNTIME_PACKAGES_NOT_FOUND") + + LIST(FIND validWhatParts "${_FS_WHAT}" indexInList) + IF(NOT "${indexInList}" STREQUAL "-1") + _FS_GET_FEATURE_SUMMARY( ${_FS_WHAT} _featureSummary ${_FS_INCLUDE_QUIET_PACKAGES} ) + SET(_fullText "${_FS_DESCRIPTION}${_featureSummary}\n") + IF (("${_FS_WHAT}" STREQUAL "REQUIRED_PACKAGES_NOT_FOUND") AND _featureSummary) + SET(requiredPackagesNotFound TRUE) + ENDIF() + + ELSEIF("${_FS_WHAT}" STREQUAL "ALL") + + SET(allWhatParts "ENABLED_FEATURES" + "RUNTIME_PACKAGES_FOUND" + "OPTIONAL_PACKAGES_FOUND" + "RECOMMENDED_PACKAGES_FOUND" + "REQUIRED_PACKAGES_FOUND" + + "DISABLED_FEATURES" + "RUNTIME_PACKAGES_NOT_FOUND" + "OPTIONAL_PACKAGES_NOT_FOUND" + "RECOMMENDED_PACKAGES_NOT_FOUND" + "REQUIRED_PACKAGES_NOT_FOUND" + ) + + SET(title_ENABLED_FEATURES "The following features have been enabled:") + SET(title_DISABLED_FEATURES "The following features have been disabled:") + SET(title_OPTIONAL_PACKAGES_FOUND "The following OPTIONAL packages have been found:") + SET(title_OPTIONAL_PACKAGES_NOT_FOUND "The following OPTIONAL packages have not been found:") + SET(title_RECOMMENDED_PACKAGES_FOUND "The following RECOMMENDED packages have been found:") + SET(title_RECOMMENDED_PACKAGES_NOT_FOUND "The following RECOMMENDED packages have not been found:") + SET(title_REQUIRED_PACKAGES_FOUND "The following REQUIRED packages have been found:") + SET(title_REQUIRED_PACKAGES_NOT_FOUND "The following REQUIRED packages have not been found:") + SET(title_RUNTIME_PACKAGES_FOUND "The following RUNTIME packages have been found:") + SET(title_RUNTIME_PACKAGES_NOT_FOUND "The following RUNTIME packages have not been found:") + + SET(_fullText "${_FS_DESCRIPTION}") + FOREACH(part ${allWhatParts}) + SET(_tmp) + _FS_GET_FEATURE_SUMMARY( ${part} _tmp ${_FS_INCLUDE_QUIET_PACKAGES}) + IF(_tmp) + SET(_fullText "${_fullText}\n\n-- ${title_${part}}\n${_tmp}") + IF("${part}" STREQUAL "REQUIRED_PACKAGES_NOT_FOUND") + SET(requiredPackagesNotFound TRUE) + ENDIF() + ENDIF() + ENDFOREACH() + ELSE() + MESSAGE(FATAL_ERROR "The WHAT argument of FEATURE_SUMMARY() is set to ${_FS_WHAT}, which is not a valid value.") + ENDIF() + + IF(_FS_FILENAME) + IF(_FS_APPEND) + FILE(APPEND "${_FS_FILENAME}" "${_fullText}") + ELSE(_FS_APPEND) + FILE(WRITE "${_FS_FILENAME}" "${_fullText}") + ENDIF() + + ELSE(_FS_FILENAME) + IF(NOT _FS_VAR) + MESSAGE(STATUS "${_fullText}") + ENDIF() + ENDIF() + + IF(_FS_VAR) + SET(${_FS_VAR} "${_fullText}" PARENT_SCOPE) + ENDIF() + + IF(requiredPackagesNotFound AND _FS_FATAL_ON_MISSING_REQUIRED_PACKAGES) + MESSAGE(FATAL_ERROR "feature_summary() Error: REQUIRED package(s) are missing, aborting CMake run.") + ENDIF() + +ENDFUNCTION(FEATURE_SUMMARY) + + +# The stuff below is only kept for compatibility + +FUNCTION(SET_PACKAGE_INFO _name _desc) + SET(_url "${ARGV2}") + SET(_purpose "${ARGV3}") + SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_desc}" ) + IF(_url MATCHES ".+") + SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_url}" ) + ENDIF() + IF(_purpose MATCHES ".+") + SET_PROPERTY(GLOBAL APPEND PROPERTY _CMAKE_${_name}_PURPOSE "${_purpose}" ) + ENDIF() +ENDFUNCTION(SET_PACKAGE_INFO) + + + +FUNCTION(SET_FEATURE_INFO) + SET_PACKAGE_INFO(${ARGN}) +ENDFUNCTION(SET_FEATURE_INFO) + + + +FUNCTION(PRINT_ENABLED_FEATURES) + FEATURE_SUMMARY(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:") +ENDFUNCTION(PRINT_ENABLED_FEATURES) + + + +FUNCTION(PRINT_DISABLED_FEATURES) + FEATURE_SUMMARY(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:") +ENDFUNCTION(PRINT_DISABLED_FEATURES) diff --git a/Modules/FindALSA.cmake b/Modules/FindALSA.cmake new file mode 100644 index 0000000..4a0b693 --- /dev/null +++ b/Modules/FindALSA.cmake @@ -0,0 +1,55 @@ +# - Find alsa +# Find the alsa libraries (asound) +# +# This module defines the following variables: +# ALSA_FOUND - True if ALSA_INCLUDE_DIR & ALSA_LIBRARY are found +# ALSA_LIBRARIES - Set when ALSA_LIBRARY is found +# ALSA_INCLUDE_DIRS - Set when ALSA_INCLUDE_DIR is found +# +# ALSA_INCLUDE_DIR - where to find asoundlib.h, etc. +# ALSA_LIBRARY - the asound library +# ALSA_VERSION_STRING - the version of alsa found (since CMake 2.8.8) +# + +#============================================================================= +# Copyright 2009-2011 Kitware, Inc. +# Copyright 2009-2011 Philip Lowman +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +find_path(ALSA_INCLUDE_DIR NAMES alsa/asoundlib.h + DOC "The ALSA (asound) include directory" +) + +find_library(ALSA_LIBRARY NAMES asound + DOC "The ALSA (asound) library" +) + +if(ALSA_INCLUDE_DIR AND EXISTS "${ALSA_INCLUDE_DIR}/alsa/version.h") + file(STRINGS "${ALSA_INCLUDE_DIR}/alsa/version.h" alsa_version_str REGEX "^#define[\t ]+SND_LIB_VERSION_STR[\t ]+\".*\"") + + string(REGEX REPLACE "^.*SND_LIB_VERSION_STR[\t ]+\"([^\"]*)\".*$" "\\1" ALSA_VERSION_STRING "${alsa_version_str}") + unset(alsa_version_str) +endif() + +# handle the QUIETLY and REQUIRED arguments and set ALSA_FOUND to TRUE if +# all listed variables are TRUE +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALSA + REQUIRED_VARS ALSA_LIBRARY ALSA_INCLUDE_DIR + VERSION_VAR ALSA_VERSION_STRING) + +if(ALSA_FOUND) + set( ALSA_LIBRARIES ${ALSA_LIBRARY} ) + set( ALSA_INCLUDE_DIRS ${ALSA_INCLUDE_DIR} ) +endif() + +mark_as_advanced(ALSA_INCLUDE_DIR ALSA_LIBRARY) diff --git a/Modules/FindASPELL.cmake b/Modules/FindASPELL.cmake new file mode 100644 index 0000000..713ab7e --- /dev/null +++ b/Modules/FindASPELL.cmake @@ -0,0 +1,37 @@ +# - Try to find ASPELL +# Once done this will define +# +# ASPELL_FOUND - system has ASPELL +# ASPELL_EXECUTABLE - the ASPELL executable +# ASPELL_INCLUDE_DIR - the ASPELL include directory +# ASPELL_LIBRARIES - The libraries needed to use ASPELL +# ASPELL_DEFINITIONS - Compiler switches required for using ASPELL + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(ASPELL_INCLUDE_DIR aspell.h ) + +FIND_PROGRAM(ASPELL_EXECUTABLE + NAMES aspell +) + +FIND_LIBRARY(ASPELL_LIBRARIES NAMES aspell aspell-15 libaspell-15 libaspell) + +# handle the QUIETLY and REQUIRED arguments and set ASPELL_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ASPELL DEFAULT_MSG ASPELL_LIBRARIES ASPELL_INCLUDE_DIR ASPELL_EXECUTABLE) + +MARK_AS_ADVANCED(ASPELL_INCLUDE_DIR ASPELL_LIBRARIES ASPELL_EXECUTABLE) diff --git a/Modules/FindAVIFile.cmake b/Modules/FindAVIFile.cmake new file mode 100644 index 0000000..8b5b05a --- /dev/null +++ b/Modules/FindAVIFile.cmake @@ -0,0 +1,48 @@ +# - Locate AVIFILE library and include paths +# AVIFILE (http://avifile.sourceforge.net/)is a set of libraries for +# i386 machines +# to use various AVI codecs. Support is limited beyond Linux. Windows +# provides native AVI support, and so doesn't need this library. +# This module defines +# AVIFILE_INCLUDE_DIR, where to find avifile.h , etc. +# AVIFILE_LIBRARIES, the libraries to link against +# AVIFILE_DEFINITIONS, definitions to use when compiling +# AVIFILE_FOUND, If false, don't try to use AVIFILE + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF (UNIX) + + FIND_PATH(AVIFILE_INCLUDE_DIR avifile.h + /usr/local/avifile/include + /usr/local/include/avifile + ) + + FIND_LIBRARY(AVIFILE_AVIPLAY_LIBRARY aviplay + /usr/local/avifile/lib + ) + +ENDIF (UNIX) + +# handle the QUIETLY and REQUIRED arguments and set AVIFILE_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(AVIFile DEFAULT_MSG AVIFILE_INCLUDE_DIR AVIFILE_AVIPLAY_LIBRARY) + +IF (AVIFILE_FOUND) + SET(AVIFILE_LIBRARIES ${AVIFILE_AVIPLAY_LIBRARY}) + SET(AVIFILE_DEFINITIONS "") +ENDIF() + +MARK_AS_ADVANCED(AVIFILE_INCLUDE_DIR AVIFILE_AVIPLAY_LIBRARY) diff --git a/Modules/FindArmadillo.cmake b/Modules/FindArmadillo.cmake new file mode 100644 index 0000000..50eb787 --- /dev/null +++ b/Modules/FindArmadillo.cmake @@ -0,0 +1,95 @@ +# - Find Armadillo +# Find the Armadillo C++ library +# +# Using Armadillo: +# find_package(Armadillo REQUIRED) +# include_directories(${ARMADILLO_INCLUDE_DIRS}) +# add_executable(foo foo.cc) +# target_link_libraries(foo ${ARMADILLO_LIBRARIES}) +# This module sets the following variables: +# ARMADILLO_FOUND - set to true if the library is found +# ARMADILLO_INCLUDE_DIRS - list of required include directories +# ARMADILLO_LIBRARIES - list of libraries to be linked +# ARMADILLO_VERSION_MAJOR - major version number +# ARMADILLO_VERSION_MINOR - minor version number +# ARMADILLO_VERSION_PATCH - patch version number +# ARMADILLO_VERSION_STRING - version number as a string (ex: "1.0.4") +# ARMADILLO_VERSION_NAME - name of the version (ex: "Antipodean Antileech") + +#============================================================================= +# Copyright 2011 Clement Creusot +# +# 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.) + + +# UNIX paths are standard, no need to write. +find_library(ARMADILLO_LIBRARY + NAMES armadillo + PATHS "$ENV{ProgramFiles}/Armadillo/lib" "$ENV{ProgramFiles}/Armadillo/lib64" "$ENV{ProgramFiles}/Armadillo" + ) +find_path(ARMADILLO_INCLUDE_DIR + NAMES armadillo + PATHS "$ENV{ProgramFiles}/Armadillo/include" + ) + + +if(ARMADILLO_INCLUDE_DIR) + + # ------------------------------------------------------------------------ + # Extract version information from + # ------------------------------------------------------------------------ + + # WARNING: Early releases of Armadillo didn't have the arma_version.hpp file. + # (e.g. v.0.9.8-1 in ubuntu maverick packages (2001-03-15)) + # If the file is missing, set all values to 0 + set(ARMADILLO_VERSION_MAJOR 0) + set(ARMADILLO_VERSION_MINOR 0) + set(ARMADILLO_VERSION_PATCH 0) + set(ARMADILLO_VERSION_NAME "EARLY RELEASE") + + if(EXISTS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/arma_version.hpp") + + # Read and parse armdillo version header file for version number + file(READ "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/arma_version.hpp" _armadillo_HEADER_CONTENTS) + string(REGEX REPLACE ".*#define ARMA_VERSION_MAJOR ([0-9]+).*" "\\1" ARMADILLO_VERSION_MAJOR "${_armadillo_HEADER_CONTENTS}") + string(REGEX REPLACE ".*#define ARMA_VERSION_MINOR ([0-9]+).*" "\\1" ARMADILLO_VERSION_MINOR "${_armadillo_HEADER_CONTENTS}") + string(REGEX REPLACE ".*#define ARMA_VERSION_PATCH ([0-9]+).*" "\\1" ARMADILLO_VERSION_PATCH "${_armadillo_HEADER_CONTENTS}") + + # WARNING: The number of spaces before the version name is not one. + string(REGEX REPLACE ".*#define ARMA_VERSION_NAME\ +\"([0-9a-zA-Z\ _-]+)\".*" "\\1" ARMADILLO_VERSION_NAME "${_armadillo_HEADER_CONTENTS}") + + endif(EXISTS "${ARMADILLO_INCLUDE_DIR}/armadillo_bits/arma_version.hpp") + + set(ARMADILLO_VERSION_STRING "${ARMADILLO_VERSION_MAJOR}.${ARMADILLO_VERSION_MINOR}.${ARMADILLO_VERSION_PATCH}") +endif (ARMADILLO_INCLUDE_DIR) + +#====================== + + +# Checks 'RECQUIRED', 'QUIET' and versions. +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Armadillo + REQUIRED_VARS ARMADILLO_LIBRARY ARMADILLO_INCLUDE_DIR + VERSION_VAR ARMADILLO_VERSION_STRING) +# version_var fails with cmake < 2.8.4. + +if (ARMADILLO_FOUND) + set(ARMADILLO_INCLUDE_DIRS ${ARMADILLO_INCLUDE_DIR}) + set(ARMADILLO_LIBRARIES ${ARMADILLO_LIBRARY}) +endif (ARMADILLO_FOUND) + + +# Hide internal variables +mark_as_advanced( + ARMADILLO_INCLUDE_DIR + ARMADILLO_LIBRARY) + +#====================== diff --git a/Modules/FindBISON.cmake b/Modules/FindBISON.cmake new file mode 100644 index 0000000..7af3367 --- /dev/null +++ b/Modules/FindBISON.cmake @@ -0,0 +1,175 @@ +# - Find bison executable and provides macros to generate custom build rules +# The module defines the following variables: +# +# BISON_EXECUTABLE - path to the bison program +# BISON_VERSION - version of bison +# BISON_FOUND - true if the program was found +# +# The minimum required version of bison can be specified using the +# standard CMake syntax, e.g. find_package(BISON 2.1.3) +# +# If bison is found, the module defines the macros: +# BISON_TARGET( [VERBOSE ] +# [COMPILE_FLAGS ]) +# which will create a custom rule to generate a parser. is +# the path to a yacc file. is the name of the source file +# generated by bison. A header file is also be generated, and contains +# the token list. If COMPILE_FLAGS option is specified, the next +# parameter is added in the bison command line. if VERBOSE option is +# specified, is created and contains verbose descriptions of the +# grammar and parser. The macro defines a set of variables: +# BISON_${Name}_DEFINED - true is the macro ran successfully +# BISON_${Name}_INPUT - The input source file, an alias for +# BISON_${Name}_OUTPUT_SOURCE - The source file generated by bison +# BISON_${Name}_OUTPUT_HEADER - The header file generated by bison +# BISON_${Name}_OUTPUTS - The sources files generated by bison +# BISON_${Name}_COMPILE_FLAGS - Options used in the bison command line +# +# ==================================================================== +# Example: +# +# find_package(BISON) +# BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp) +# add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS}) +# ==================================================================== + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2006 Tristan Carel +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(BISON_EXECUTABLE bison DOC "path to the bison executable") +MARK_AS_ADVANCED(BISON_EXECUTABLE) + +IF(BISON_EXECUTABLE) + # the bison commands should be executed with the C locale, otherwise + # the message (which are parsed) may be translated + SET(_Bison_SAVED_LC_ALL "$ENV{LC_ALL}") + SET(ENV{LC_ALL} C) + + EXECUTE_PROCESS(COMMAND ${BISON_EXECUTABLE} --version + OUTPUT_VARIABLE BISON_version_output + ERROR_VARIABLE BISON_version_error + RESULT_VARIABLE BISON_version_result + OUTPUT_STRIP_TRAILING_WHITESPACE) + + SET(ENV{LC_ALL} ${_Bison_SAVED_LC_ALL}) + + IF(NOT ${BISON_version_result} EQUAL 0) + MESSAGE(SEND_ERROR "Command \"${BISON_EXECUTABLE} --version\" failed with output:\n${BISON_version_error}") + ELSE() + # Bison++ + IF("${BISON_version_output}" MATCHES "^bison\\+\\+") + STRING(REGEX REPLACE "^bison\\+\\+ Version ([^,]+).*" "\\1" + BISON_VERSION "${BISON_version_output}") + # GNU Bison + ELSEIF("${BISON_version_output}" MATCHES "^bison[^+]") + STRING(REGEX REPLACE "^bison \\(GNU Bison\\) ([^\n]+)\n.*" "\\1" + BISON_VERSION "${BISON_version_output}") + ELSEIF("${BISON_version_output}" MATCHES "^GNU Bison ") + STRING(REGEX REPLACE "^GNU Bison (version )?([^\n]+).*" "\\2" + BISON_VERSION "${BISON_version_output}") + ENDIF() + ENDIF() + + # internal macro + MACRO(BISON_TARGET_option_verbose Name BisonOutput filename) + LIST(APPEND BISON_TARGET_cmdopt "--verbose") + GET_FILENAME_COMPONENT(BISON_TARGET_output_path "${BisonOutput}" PATH) + GET_FILENAME_COMPONENT(BISON_TARGET_output_name "${BisonOutput}" NAME_WE) + ADD_CUSTOM_COMMAND(OUTPUT ${filename} + COMMAND ${CMAKE_COMMAND} + ARGS -E copy + "${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output" + "${filename}" + DEPENDS + "${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output" + COMMENT "[BISON][${Name}] Copying bison verbose table to ${filename}" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) + SET(BISON_${Name}_VERBOSE_FILE ${filename}) + LIST(APPEND BISON_TARGET_extraoutputs + "${BISON_TARGET_output_path}/${BISON_TARGET_output_name}.output") + ENDMACRO(BISON_TARGET_option_verbose) + + # internal macro + MACRO(BISON_TARGET_option_extraopts Options) + SET(BISON_TARGET_extraopts "${Options}") + SEPARATE_ARGUMENTS(BISON_TARGET_extraopts) + LIST(APPEND BISON_TARGET_cmdopt ${BISON_TARGET_extraopts}) + ENDMACRO(BISON_TARGET_option_extraopts) + + #============================================================ + # BISON_TARGET (public macro) + #============================================================ + # + MACRO(BISON_TARGET Name BisonInput BisonOutput) + SET(BISON_TARGET_output_header "") + SET(BISON_TARGET_cmdopt "") + SET(BISON_TARGET_outputs "${BisonOutput}") + IF(NOT ${ARGC} EQUAL 3 AND NOT ${ARGC} EQUAL 5 AND NOT ${ARGC} EQUAL 7) + MESSAGE(SEND_ERROR "Usage") + ELSE() + # Parsing parameters + IF(${ARGC} GREATER 5 OR ${ARGC} EQUAL 5) + IF("${ARGV3}" STREQUAL "VERBOSE") + BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${ARGV4}") + ENDIF() + IF("${ARGV3}" STREQUAL "COMPILE_FLAGS") + BISON_TARGET_option_extraopts("${ARGV4}") + ENDIF() + ENDIF() + + IF(${ARGC} EQUAL 7) + IF("${ARGV5}" STREQUAL "VERBOSE") + BISON_TARGET_option_verbose(${Name} ${BisonOutput} "${ARGV6}") + ENDIF() + + IF("${ARGV5}" STREQUAL "COMPILE_FLAGS") + BISON_TARGET_option_extraopts("${ARGV6}") + ENDIF() + ENDIF() + + # Header's name generated by bison (see option -d) + LIST(APPEND BISON_TARGET_cmdopt "-d") + STRING(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\2" _fileext "${ARGV2}") + STRING(REPLACE "c" "h" _fileext ${_fileext}) + STRING(REGEX REPLACE "^(.*)(\\.[^.]*)$" "\\1${_fileext}" + BISON_${Name}_OUTPUT_HEADER "${ARGV2}") + LIST(APPEND BISON_TARGET_outputs "${BISON_${Name}_OUTPUT_HEADER}") + + ADD_CUSTOM_COMMAND(OUTPUT ${BISON_TARGET_outputs} + ${BISON_TARGET_extraoutputs} + COMMAND ${BISON_EXECUTABLE} + ARGS ${BISON_TARGET_cmdopt} -o ${ARGV2} ${ARGV1} + DEPENDS ${ARGV1} + COMMENT "[BISON][${Name}] Building parser with bison ${BISON_VERSION}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + + # define target variables + SET(BISON_${Name}_DEFINED TRUE) + SET(BISON_${Name}_INPUT ${ARGV1}) + SET(BISON_${Name}_OUTPUTS ${BISON_TARGET_outputs}) + SET(BISON_${Name}_COMPILE_FLAGS ${BISON_TARGET_cmdopt}) + SET(BISON_${Name}_OUTPUT_SOURCE "${BisonOutput}") + + ENDIF(NOT ${ARGC} EQUAL 3 AND NOT ${ARGC} EQUAL 5 AND NOT ${ARGC} EQUAL 7) + ENDMACRO(BISON_TARGET) + # + #============================================================ + +ENDIF(BISON_EXECUTABLE) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(BISON REQUIRED_VARS BISON_EXECUTABLE + VERSION_VAR BISON_VERSION) + +# FindBISON.cmake ends here diff --git a/Modules/FindBLAS.cmake b/Modules/FindBLAS.cmake new file mode 100644 index 0000000..9eadfd1 --- /dev/null +++ b/Modules/FindBLAS.cmake @@ -0,0 +1,608 @@ +# - Find BLAS library +# This module finds an installed fortran library that implements the BLAS +# linear-algebra interface (see http://www.netlib.org/blas/). +# The list of libraries searched for is taken +# from the autoconf macro file, acx_blas.m4 (distributed at +# http://ac-archive.sourceforge.net/ac-archive/acx_blas.html). +# +# This module sets the following variables: +# BLAS_FOUND - set to true if a library implementing the BLAS interface +# is found +# BLAS_LINKER_FLAGS - uncached list of required linker flags (excluding -l +# and -L). +# BLAS_LIBRARIES - uncached list of libraries (using full path name) to +# link against to use BLAS +# BLAS95_LIBRARIES - uncached list of libraries (using full path name) +# to link against to use BLAS95 interface +# BLAS95_FOUND - set to true if a library implementing the BLAS f95 interface +# is found +# BLA_STATIC if set on this determines what kind of linkage we do (static) +# BLA_VENDOR if set checks only the specified vendor, if not set checks +# all the possibilities +# BLA_F95 if set on tries to find the f95 interfaces for BLAS/LAPACK +########## +### List of vendors (BLA_VENDOR) valid in this module +## Goto,ATLAS PhiPACK,CXML,DXML,SunPerf,SCSL,SGIMATH,IBMESSL,Intel10_32 (intel mkl v10 32 bit),Intel10_64lp (intel mkl v10 64 bit,lp thread model, lp64 model), +## Intel10_64lp_seq (intel mkl v10 64 bit,sequential code, lp64 model), +## Intel( older versions of mkl 32 and 64 bit), ACML,ACML_MP,ACML_GPU,Apple, NAS, Generic +# C/CXX should be enabled to use Intel mkl + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +include(CheckFunctionExists) +include(CheckFortranFunctionExists) + +set(_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) + +# Check the language being used +get_property( _LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES ) +if( _LANGUAGES_ MATCHES Fortran ) + set( _CHECK_FORTRAN TRUE ) +elseif( (_LANGUAGES_ MATCHES C) OR (_LANGUAGES_ MATCHES CXX) ) + set( _CHECK_FORTRAN FALSE ) +else() + if(BLAS_FIND_REQUIRED) + message(FATAL_ERROR "FindBLAS requires Fortran, C, or C++ to be enabled.") + else(BLAS_FIND_REQUIRED) + message(STATUS "Looking for BLAS... - NOT found (Unsupported languages)") + return() + endif(BLAS_FIND_REQUIRED) +endif( ) + +macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _thread) +# This macro checks for the existence of the combination of fortran libraries +# given by _list. If the combination is found, this macro checks (using the +# Check_Fortran_Function_Exists macro) whether can link against that library +# combination using the name of a routine given by _name using the linker +# flags given by _flags. If the combination of libraries is found and passes +# the link test, LIBRARIES is set to the list of complete library paths that +# have been found. Otherwise, LIBRARIES is set to FALSE. + +# N.B. _prefix is the prefix applied to the names of all cached variables that +# are generated internally and marked advanced by this macro. + +set(_libdir ${ARGN}) + +set(_libraries_work TRUE) +set(${LIBRARIES}) +set(_combined_name) +if (NOT _libdir) + if (WIN32) + set(_libdir ENV LIB) + elseif (APPLE) + set(_libdir /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64 ENV DYLD_LIBRARY_PATH) + else () + set(_libdir /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64 ENV LD_LIBRARY_PATH) + endif () +endif () + +foreach(_library ${_list}) + set(_combined_name ${_combined_name}_${_library}) + + if(_libraries_work) + if (BLA_STATIC) + if (WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif ( WIN32 ) + if (APPLE) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + else (APPLE) + set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif (APPLE) + else (BLA_STATIC) + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + # for ubuntu's libblas3gf and liblapack3gf packages + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf) + endif () + endif (BLA_STATIC) + find_library(${_prefix}_${_library}_LIBRARY + NAMES ${_library} + PATHS ${_libdir} + ) + mark_as_advanced(${_prefix}_${_library}_LIBRARY) + set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY}) + set(_libraries_work ${${_prefix}_${_library}_LIBRARY}) + endif(_libraries_work) +endforeach(_library ${_list}) +if(_libraries_work) + # Test this combination of libraries. + set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_thread}) +# message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}") + if (_CHECK_FORTRAN) + check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS) + else() + check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS) + endif() + set(CMAKE_REQUIRED_LIBRARIES) + mark_as_advanced(${_prefix}${_combined_name}_WORKS) + set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) +endif(_libraries_work) +if(NOT _libraries_work) + set(${LIBRARIES} FALSE) +endif(NOT _libraries_work) +#message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}") +endmacro(Check_Fortran_Libraries) + +set(BLAS_LINKER_FLAGS) +set(BLAS_LIBRARIES) +set(BLAS95_LIBRARIES) +if ($ENV{BLA_VENDOR} MATCHES ".+") + set(BLA_VENDOR $ENV{BLA_VENDOR}) +else ($ENV{BLA_VENDOR} MATCHES ".+") + if(NOT BLA_VENDOR) + set(BLA_VENDOR "All") + endif(NOT BLA_VENDOR) +endif ($ENV{BLA_VENDOR} MATCHES ".+") + +if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + # gotoblas (http://www.tacc.utexas.edu/tacc-projects/gotoblas2) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "goto2" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") + +if (BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + dgemm + "" + "f77blas;atlas" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All") + +# BLAS in PhiPACK libraries? (requires generic BLAS lib, too) +if (BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "sgemm;dgemm;blas" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All") + +# BLAS in Alpha CXML library? +if (BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "cxml" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All") + +# BLAS in Alpha DXML library? (now called CXML, see above) +if (BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "dxml" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All") + +# BLAS in Sun Performance library? +if (BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "-xlic_lib=sunperf" + "sunperf;sunmath" + "" + ) + if(BLAS_LIBRARIES) + set(BLAS_LINKER_FLAGS "-xlic_lib=sunperf") + endif(BLAS_LIBRARIES) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All") + +# BLAS in SCSL library? (SGI/Cray Scientific Library) +if (BLA_VENDOR STREQUAL "SCSL" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "scsl" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "SCSL" OR BLA_VENDOR STREQUAL "All") + +# BLAS in SGIMATH library? +if (BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "complib.sgimath" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All") + +# BLAS in IBM ESSL library? (requires generic BLAS lib, too) +if (BLA_VENDOR STREQUAL "IBMESSL" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "essl;blas" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "IBMESSL" OR BLA_VENDOR STREQUAL "All") + +#BLAS in acml library? +if (BLA_VENDOR MATCHES "ACML.*" OR BLA_VENDOR STREQUAL "All") + if( ((BLA_VENDOR STREQUAL "ACML") AND (NOT BLAS_ACML_LIB_DIRS)) OR + ((BLA_VENDOR STREQUAL "ACML_MP") AND (NOT BLAS_ACML_MP_LIB_DIRS)) OR + ((BLA_VENDOR STREQUAL "ACML_GPU") AND (NOT BLAS_ACML_GPU_LIB_DIRS)) + ) + # try to find acml in "standard" paths + if( WIN32 ) + file( GLOB _ACML_ROOT "C:/AMD/acml*/ACML-EULA.txt" ) + else() + file( GLOB _ACML_ROOT "/opt/acml*/ACML-EULA.txt" ) + endif() + if( WIN32 ) + file( GLOB _ACML_GPU_ROOT "C:/AMD/acml*/GPGPUexamples" ) + else() + file( GLOB _ACML_GPU_ROOT "/opt/acml*/GPGPUexamples" ) + endif() + list(GET _ACML_ROOT 0 _ACML_ROOT) + list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT) + if( _ACML_ROOT ) + get_filename_component( _ACML_ROOT ${_ACML_ROOT} PATH ) + if( SIZEOF_INTEGER EQUAL 8 ) + set( _ACML_PATH_SUFFIX "_int64" ) + else() + set( _ACML_PATH_SUFFIX "" ) + endif() + if( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" ) + set( _ACML_COMPILER32 "ifort32" ) + set( _ACML_COMPILER64 "ifort64" ) + elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" ) + set( _ACML_COMPILER32 "sun32" ) + set( _ACML_COMPILER64 "sun64" ) + elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "PGI" ) + set( _ACML_COMPILER32 "pgi32" ) + if( WIN32 ) + set( _ACML_COMPILER64 "win64" ) + else() + set( _ACML_COMPILER64 "pgi64" ) + endif() + elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "Open64" ) + # 32 bit builds not supported on Open64 but for code simplicity + # We'll just use the same directory twice + set( _ACML_COMPILER32 "open64_64" ) + set( _ACML_COMPILER64 "open64_64" ) + elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "NAG" ) + set( _ACML_COMPILER32 "nag32" ) + set( _ACML_COMPILER64 "nag64" ) + else() #if( CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" ) + set( _ACML_COMPILER32 "gfortran32" ) + set( _ACML_COMPILER64 "gfortran64" ) + endif() + + if( BLA_VENDOR STREQUAL "ACML_MP" ) + set(_ACML_MP_LIB_DIRS + "${_ACML_ROOT}/${_ACML_COMPILER32}_mp${_ACML_PATH_SUFFIX}/lib" + "${_ACML_ROOT}/${_ACML_COMPILER64}_mp${_ACML_PATH_SUFFIX}/lib" ) + else() #if( _BLAS_VENDOR STREQUAL "ACML" ) + set(_ACML_LIB_DIRS + "${_ACML_ROOT}/${_ACML_COMPILER32}${_ACML_PATH_SUFFIX}/lib" + "${_ACML_ROOT}/${_ACML_COMPILER64}${_ACML_PATH_SUFFIX}/lib" ) + endif() + endif() + elseif(BLAS_${BLA_VENDOR}_LIB_DIRS) + set(_${BLA_VENDOR}_LIB_DIRS ${BLAS_${BLA_VENDOR}_LIB_DIRS}) + endif() + + if( BLA_VENDOR STREQUAL "ACML_MP" ) + foreach( BLAS_ACML_MP_LIB_DIRS ${_ACML_MP_LIB_DIRS}) + check_fortran_libraries ( + BLAS_LIBRARIES + BLAS + sgemm + "" "acml_mp;acml_mv" "" ${BLAS_ACML_MP_LIB_DIRS} + ) + if( BLAS_LIBRARIES ) + break() + endif() + endforeach() + elseif( BLA_VENDOR STREQUAL "ACML_GPU" ) + foreach( BLAS_ACML_GPU_LIB_DIRS ${_ACML_GPU_LIB_DIRS}) + check_fortran_libraries ( + BLAS_LIBRARIES + BLAS + sgemm + "" "acml;acml_mv;CALBLAS" "" ${BLAS_ACML_GPU_LIB_DIRS} + ) + if( BLAS_LIBRARIES ) + break() + endif() + endforeach() + else() #if( _BLAS_VENDOR STREQUAL "ACML" ) + foreach( BLAS_ACML_LIB_DIRS ${_ACML_LIB_DIRS} ) + check_fortran_libraries ( + BLAS_LIBRARIES + BLAS + sgemm + "" "acml;acml_mv" "" ${BLAS_ACML_LIB_DIRS} + ) + if( BLAS_LIBRARIES ) + break() + endif() + endforeach() + endif() + + # Either acml or acml_mp should be in LD_LIBRARY_PATH but not both + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "acml;acml_mv" + "" + ) + endif(NOT BLAS_LIBRARIES) + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "acml_mp;acml_mv" + "" + ) + endif(NOT BLAS_LIBRARIES) + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "acml;acml_mv;CALBLAS" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif () # ACML + +# Apple BLAS library? +if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") +if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + dgemm + "" + "Accelerate" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") + +if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") + if ( NOT BLAS_LIBRARIES ) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + dgemm + "" + "vecLib" + "" + ) + endif ( NOT BLAS_LIBRARIES ) +endif (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") +# Generic BLAS library? +if (BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "blas" + "" + ) + endif(NOT BLAS_LIBRARIES) +endif (BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All") + +#BLAS in intel mkl 10 library? (em64t 64bit) +if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All") + if (NOT WIN32) + set(LM "-lm") + endif () + if (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX) + if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) + find_package(Threads) + else(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) + find_package(Threads REQUIRED) + endif(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) + + set(BLAS_SEARCH_LIBS "") + + if(BLA_F95) + set(BLAS_mkl_SEARCH_SYMBOL SGEMM) + set(_LIBRARIES BLAS95_LIBRARIES) + if (WIN32) + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95 mkl_intel_c mkl_intel_thread mkl_core libguide40") + else (WIN32) + if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95 mkl_intel mkl_intel_thread mkl_core guide") + endif () + if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All") + # old version + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95 mkl_intel_lp64 mkl_intel_thread mkl_core guide") + + # mkl >= 10.3 + if (CMAKE_C_COMPILER MATCHES ".+gcc.*") + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95_lp64 mkl_intel_lp64 mkl_gnu_thread mkl_core") + set(LM "${LM};-lgomp") + else () + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95_lp64 mkl_intel_lp64 mkl_intel_thread mkl_core iomp5") + endif () + endif () + endif (WIN32) + if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95_lp64 mkl_intel_lp64 mkl_sequential mkl_core") + endif () + else (BLA_F95) + set(BLAS_mkl_SEARCH_SYMBOL sgemm) + set(_LIBRARIES BLAS_LIBRARIES) + if (WIN32) + list(APPEND BLAS_SEARCH_LIBS + "mkl_c_dll mkl_intel_thread_dll mkl_core_dll libguide40") + else (WIN32) + if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl_intel mkl_intel_thread mkl_core guide") + endif () + if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All") + + # old version + list(APPEND BLAS_SEARCH_LIBS + "mkl_intel_lp64 mkl_intel_thread mkl_core guide") + + # mkl >= 10.3 + if (CMAKE_C_COMPILER MATCHES ".+gcc.*") + list(APPEND BLAS_SEARCH_LIBS + "mkl_intel_lp64 mkl_gnu_thread mkl_core") + set(LM "${LM};-lgomp") + else () + list(APPEND BLAS_SEARCH_LIBS + "mkl_intel_lp64 mkl_intel_thread mkl_core iomp5") + endif () + endif () + + #older vesions of intel mkl libs + if (BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl") + list(APPEND BLAS_SEARCH_LIBS + "mkl_ia32") + list(APPEND BLAS_SEARCH_LIBS + "mkl_em64t") + endif () + endif (WIN32) + if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl_intel_lp64 mkl_sequential mkl_core") + endif () + endif (BLA_F95) + + foreach (IT ${BLAS_SEARCH_LIBS}) + string(REPLACE " " ";" SEARCH_LIBS ${IT}) + if (${_LIBRARIES}) + else () + check_fortran_libraries( + ${_LIBRARIES} + BLAS + ${BLAS_mkl_SEARCH_SYMBOL} + "" + "${SEARCH_LIBS}" + "${CMAKE_THREAD_LIBS_INIT};${LM}" + ) + endif () + endforeach () + + endif (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX) +endif (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All") + + +if(BLA_F95) + if(BLAS95_LIBRARIES) + set(BLAS95_FOUND TRUE) + else(BLAS95_LIBRARIES) + set(BLAS95_FOUND FALSE) + endif(BLAS95_LIBRARIES) + + if(NOT BLAS_FIND_QUIETLY) + if(BLAS95_FOUND) + message(STATUS "A library with BLAS95 API found.") + else(BLAS95_FOUND) + if(BLAS_FIND_REQUIRED) + message(FATAL_ERROR + "A required library with BLAS95 API not found. Please specify library location.") + else(BLAS_FIND_REQUIRED) + message(STATUS + "A library with BLAS95 API not found. Please specify library location.") + endif(BLAS_FIND_REQUIRED) + endif(BLAS95_FOUND) + endif(NOT BLAS_FIND_QUIETLY) + set(BLAS_FOUND TRUE) + set(BLAS_LIBRARIES "${BLAS95_LIBRARIES}") +else(BLA_F95) + if(BLAS_LIBRARIES) + set(BLAS_FOUND TRUE) + else(BLAS_LIBRARIES) + set(BLAS_FOUND FALSE) + endif(BLAS_LIBRARIES) + + if(NOT BLAS_FIND_QUIETLY) + if(BLAS_FOUND) + message(STATUS "A library with BLAS API found.") + else(BLAS_FOUND) + if(BLAS_FIND_REQUIRED) + message(FATAL_ERROR + "A required library with BLAS API not found. Please specify library location." + ) + else(BLAS_FIND_REQUIRED) + message(STATUS + "A library with BLAS API not found. Please specify library location." + ) + endif(BLAS_FIND_REQUIRED) + endif(BLAS_FOUND) + endif(NOT BLAS_FIND_QUIETLY) +endif(BLA_F95) + +set(CMAKE_FIND_LIBRARY_SUFFIXES ${_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/Modules/FindBZip2.cmake b/Modules/FindBZip2.cmake new file mode 100644 index 0000000..7130192 --- /dev/null +++ b/Modules/FindBZip2.cmake @@ -0,0 +1,52 @@ +# - Try to find BZip2 +# Once done this will define +# +# BZIP2_FOUND - system has BZip2 +# BZIP2_INCLUDE_DIR - the BZip2 include directory +# BZIP2_LIBRARIES - Link these to use BZip2 +# BZIP2_NEED_PREFIX - this is set if the functions are prefixed with BZ2_ +# BZIP2_VERSION_STRING - the version of BZip2 found (since CMake 2.8.8) + +#============================================================================= +# Copyright 2006-2012 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# Copyright 2012 Rolf Eike Beer +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(BZIP2_INCLUDE_DIR bzlib.h ) + +IF (NOT BZIP2_LIBRARIES) + FIND_LIBRARY(BZIP2_LIBRARY_RELEASE NAMES bz2 bzip2 ) + FIND_LIBRARY(BZIP2_LIBRARY_DEBUG NAMES bzip2d ) + + INCLUDE(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) + SELECT_LIBRARY_CONFIGURATIONS(BZIP2) +ENDIF (NOT BZIP2_LIBRARIES) + +IF (BZIP2_INCLUDE_DIR AND EXISTS "${BZIP2_INCLUDE_DIR}/bzlib.h") + FILE(STRINGS "${BZIP2_INCLUDE_DIR}/bzlib.h" BZLIB_H REGEX "bzip2/libbzip2 version [0-9]+\\.[^ ]+ of [0-9]+ ") + STRING(REGEX REPLACE ".* bzip2/libbzip2 version ([0-9]+\\.[^ ]+) of [0-9]+ .*" "\\1" BZIP2_VERSION_STRING "${BZLIB_H}") +ENDIF (BZIP2_INCLUDE_DIR AND EXISTS "${BZIP2_INCLUDE_DIR}/bzlib.h") + +# handle the QUIETLY and REQUIRED arguments and set BZip2_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(BZip2 + REQUIRED_VARS BZIP2_LIBRARIES BZIP2_INCLUDE_DIR + VERSION_VAR BZIP2_VERSION_STRING) + +IF (BZIP2_FOUND) + INCLUDE(CheckLibraryExists) + CHECK_LIBRARY_EXISTS("${BZIP2_LIBRARIES}" BZ2_bzCompressInit "" BZIP2_NEED_PREFIX) +ENDIF (BZIP2_FOUND) + +MARK_AS_ADVANCED(BZIP2_INCLUDE_DIR) diff --git a/Modules/FindBoost.cmake b/Modules/FindBoost.cmake new file mode 100644 index 0000000..7504ea4 --- /dev/null +++ b/Modules/FindBoost.cmake @@ -0,0 +1,1221 @@ +# - Try to find Boost include dirs and libraries +# Usage of this module as follows: +# +# NOTE: Take note of the Boost_ADDITIONAL_VERSIONS variable below. +# Due to Boost naming conventions and limitations in CMake this find +# module is NOT future safe with respect to Boost version numbers, +# and may break. +# +# == Using Header-Only libraries from within Boost: == +# +# find_package( Boost 1.36.0 ) +# if(Boost_FOUND) +# include_directories(${Boost_INCLUDE_DIRS}) +# add_executable(foo foo.cc) +# endif() +# +# +# == Using actual libraries from within Boost: == +# +# set(Boost_USE_STATIC_LIBS ON) +# set(Boost_USE_MULTITHREADED ON) +# set(Boost_USE_STATIC_RUNTIME OFF) +# find_package( Boost 1.36.0 COMPONENTS date_time filesystem system ... ) +# +# if(Boost_FOUND) +# include_directories(${Boost_INCLUDE_DIRS}) +# add_executable(foo foo.cc) +# target_link_libraries(foo ${Boost_LIBRARIES}) +# endif() +# +# +# The components list needs to contain actual names of boost libraries only, +# such as "date_time" for "libboost_date_time". If you're using parts of +# Boost that contain header files only (e.g. foreach) you do not need to +# specify COMPONENTS. +# +# You should provide a minimum version number that should be used. If you provide this +# version number and specify the REQUIRED attribute, this module will fail if it +# can't find the specified or a later version. If you specify a version number this is +# automatically put into the considered list of version numbers and thus doesn't need +# to be specified in the Boost_ADDITIONAL_VERSIONS variable (see below). +# +# NOTE for Visual Studio Users: +# Automatic linking is used on MSVC & Borland compilers by default when +# #including things in Boost. It's important to note that setting +# Boost_USE_STATIC_LIBS to OFF is NOT enough to get you dynamic linking, +# should you need this feature. Automatic linking typically uses static +# libraries with a few exceptions (Boost.Python is one). +# +# Please see the section below near Boost_LIB_DIAGNOSTIC_DEFINITIONS for +# more details. Adding a TARGET_LINK_LIBRARIES() as shown in the example +# above appears to cause VS to link dynamically if Boost_USE_STATIC_LIBS +# gets set to OFF. It is suggested you avoid automatic linking since it +# will make your application less portable. +# +# =========== The mess that is Boost_ADDITIONAL_VERSIONS (sorry?) ============ +# +# OK, so the Boost_ADDITIONAL_VERSIONS variable can be used to specify a list of +# boost version numbers that should be taken into account when searching +# for Boost. Unfortunately boost puts the version number into the +# actual filename for the libraries, so this variable will certainly be needed +# in the future when new Boost versions are released. +# +# Currently this module searches for the following version numbers: +# 1.33, 1.33.0, 1.33.1, 1.34, 1.34.0, 1.34.1, 1.35, 1.35.0, 1.35.1, +# 1.36, 1.36.0, 1.36.1, 1.37, 1.37.0, 1.38, 1.38.0, 1.39, 1.39.0, +# 1.40, 1.40.0, 1.41, 1.41.0, 1.42, 1.42.0, 1.43, 1.43.0, 1.44, 1.44.0, +# 1.45, 1.45.0, 1.46, 1.46.0, 1.46.1, 1.47, 1.47.0, 1.48, 1.48.0, +# 1.49, 1.49.0, 1.50, 1.50.0 +# +# NOTE: If you add a new major 1.x version in Boost_ADDITIONAL_VERSIONS you should +# add both 1.x and 1.x.0 as shown above. Official Boost include directories +# omit the 3rd version number from include paths if it is 0 although not all +# binary Boost releases do so. +# +# set(Boost_ADDITIONAL_VERSIONS "1.78" "1.78.0" "1.79" "1.79.0") +# +# ===================================== ============= ======================== +# +# Variables used by this module, they can change the default behaviour and +# need to be set before calling find_package: +# +# Boost_USE_MULTITHREADED Can be set to OFF to use the non-multithreaded +# boost libraries. If not specified, defaults +# to ON. +# +# Boost_USE_STATIC_LIBS Can be set to ON to force the use of the static +# boost libraries. Defaults to OFF. +# +# Boost_NO_SYSTEM_PATHS Set to TRUE to suppress searching in system +# paths (or other locations outside of BOOST_ROOT +# or BOOST_INCLUDEDIR). Useful when specifying +# BOOST_ROOT. Defaults to OFF. +# [Since CMake 2.8.3] +# +# Boost_NO_BOOST_CMAKE Do not do a find_package call in config mode +# before searching for a regular boost install. +# This will avoid finding boost-cmake installs. +# Defaults to OFF. +# [Since CMake 2.8.6] +# +# Boost_USE_STATIC_RUNTIME If enabled, searches for boost libraries +# linked against a static C++ standard library +# ('s' ABI tag). This option should be set to +# ON or OFF because the default behavior +# if not specified is platform dependent +# for backwards compatibility. +# [Since CMake 2.8.3] +# +# Boost_USE_DEBUG_PYTHON If enabled, searches for boost libraries +# compiled against a special debug build of +# Python ('y' ABI tag). Defaults to OFF. +# [Since CMake 2.8.3] +# +# Boost_USE_STLPORT If enabled, searches for boost libraries +# compiled against the STLPort standard +# library ('p' ABI tag). Defaults to OFF. +# [Since CMake 2.8.3] +# +# Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS +# If enabled, searches for boost libraries +# compiled against the deprecated STLPort +# "native iostreams" feature ('n' ABI tag). +# Defaults to OFF. +# [Since CMake 2.8.3] +# +# Other Variables used by this module which you may want to set. +# +# Boost_ADDITIONAL_VERSIONS A list of version numbers to use for searching +# the boost include directory. Please see +# the documentation above regarding this +# annoying, but necessary variable :( +# +# Boost_DEBUG Set this to TRUE to enable debugging output +# of FindBoost.cmake if you are having problems. +# Please enable this before filing any bug +# reports. +# +# Boost_DETAILED_FAILURE_MSG FindBoost doesn't output detailed information +# about why it failed or how to fix the problem +# unless this is set to TRUE or the REQUIRED +# keyword is specified in find_package(). +# [Since CMake 2.8.0] +# +# Boost_COMPILER Set this to the compiler suffix used by Boost +# (e.g. "-gcc43") if FindBoost has problems finding +# the proper Boost installation +# +# Boost_THREADAPI When building boost.thread, sometimes the name of the +# library contains an additional "pthread" or "win32" +# string known as the threadapi. This can happen when +# compiling against pthreads on Windows or win32 threads +# on Cygwin. You may specify this variable and if set +# when FindBoost searches for the Boost threading library +# it will first try to match the threadapi you specify. +# For Example: libboost_thread_win32-mgw45-mt-1_43.a +# might be found if you specified "win32" here before +# falling back on libboost_thread-mgw45-mt-1_43.a. +# [Since CMake 2.8.3] +# +# Boost_REALPATH Resolves symbolic links for discovered boost libraries +# to assist with packaging. For example, instead of +# Boost_SYSTEM_LIBRARY_RELEASE being resolved to +# "/usr/lib/libboost_system.so" it would be +# "/usr/lib/libboost_system.so.1.42.0" instead. +# This does not affect linking and should not be +# enabled unless the user needs this information. +# [Since CMake 2.8.3] +# + + +# +# These last three variables are available also as environment variables: +# Also, note they are completely UPPERCASE, except Boost_DIR. +# +# Boost_DIR or The preferred installation prefix for searching for +# BOOST_ROOT or BOOSTROOT Boost. Set this if the module has problems finding +# the proper Boost installation. +# +# Note that Boost_DIR behaves exactly as _DIR +# variables are documented to behave in find_package's +# Config mode. That is, if it is set as a -D argument +# to CMake, it must point to the location of the +# BoostConfig.cmake or Boost-config.cmake file. If it +# is set as an environment variable, it must point to +# the root of the boost installation. BOOST_ROOT and +# BOOSTROOT, on the other hand, will point to the root +# in either case. +# +# To prevent falling back on the system paths, set +# Boost_NO_SYSTEM_PATHS to true. +# +# To avoid finding boost-cmake installations, set +# Boost_NO_BOOST_CMAKE to true. +# +# BOOST_INCLUDEDIR Set this to the include directory of Boost, if the +# module has problems finding the proper Boost installation +# +# BOOST_LIBRARYDIR Set this to the lib directory of Boost, if the +# module has problems finding the proper Boost installation +# +# Variables defined by this module: +# +# Boost_FOUND System has Boost, this means the include dir was +# found, as well as all the libraries specified in +# the COMPONENTS list. +# +# Boost_INCLUDE_DIRS Boost include directories: not cached +# +# Boost_INCLUDE_DIR This is almost the same as above, but this one is +# cached and may be modified by advanced users +# +# Boost_LIBRARIES Link to these to use the Boost libraries that you +# specified: not cached +# +# Boost_LIBRARY_DIRS The path to where the Boost library files are. +# +# Boost_VERSION The version number of the boost libraries that +# have been found, same as in version.hpp from Boost +# +# Boost_LIB_VERSION The version number in filename form as +# it's appended to the library filenames +# +# Boost_MAJOR_VERSION major version number of boost +# Boost_MINOR_VERSION minor version number of boost +# Boost_SUBMINOR_VERSION subminor version number of boost +# +# Boost_LIB_DIAGNOSTIC_DEFINITIONS [WIN32 Only] You can call +# add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS}) +# to have diagnostic information about Boost's +# automatic linking outputted during compilation time. +# +# For each component you specify in find_package(), the following (UPPER-CASE) +# variables are set. You can use these variables if you would like to pick and +# choose components for your targets instead of just using Boost_LIBRARIES. +# +# Boost_${COMPONENT}_FOUND True IF the Boost library "component" was found. +# +# Boost_${COMPONENT}_LIBRARY Contains the libraries for the specified Boost +# "component" (includes debug and optimized keywords +# when needed). + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006-2008 Andreas Schneider +# Copyright 2007 Wengo +# Copyright 2007 Mike Jackson +# Copyright 2008 Andreas Pakulat +# Copyright 2008-2010 Philip Lowman +# +# 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.) + + +#------------------------------------------------------------------------------- +# Before we go searching, check whether boost-cmake is avaialble, unless the +# user specifically asked NOT to search for boost-cmake. +# +# If Boost_DIR is set, this behaves as any find_package call would. If not, +# it looks at BOOST_ROOT and BOOSTROOT to find Boost. +# +if (NOT Boost_NO_BOOST_CMAKE) + # If Boost_DIR is not set, look for BOOSTROOT and BOOST_ROOT as alternatives, + # since these are more conventional for Boost. + if ("$ENV{Boost_DIR}" STREQUAL "") + if (NOT "$ENV{BOOST_ROOT}" STREQUAL "") + set(ENV{Boost_DIR} $ENV{BOOST_ROOT}) + elseif (NOT "$ENV{BOOSTROOT}" STREQUAL "") + set(ENV{Boost_DIR} $ENV{BOOSTROOT}) + endif() + endif() + + # Do the same find_package call but look specifically for the CMake version. + # Note that args are passed in the Boost_FIND_xxxxx variables, so there is no + # need to delegate them to this find_package call. + find_package(Boost QUIET NO_MODULE) + + # If we found boost-cmake, then we're done. Print out what we found. + # Otherwise let the rest of the module try to find it. + if (Boost_FOUND) + message("Boost ${Boost_FIND_VERSION} found.") + if (Boost_FIND_COMPONENTS) + message("Found Boost components:") + message(" ${Boost_FIND_COMPONENTS}") + endif() + return() + endif() +endif() + + +#------------------------------------------------------------------------------- +# FindBoost functions & macros +# +############################################ +# +# Check the existence of the libraries. +# +############################################ +# This macro was taken directly from the FindQt4.cmake file that is included +# with the CMake distribution. This is NOT my work. All work was done by the +# original authors of the FindQt4.cmake file. Only minor modifications were +# made to remove references to Qt and make this file more generally applicable +# And ELSE/ENDIF pairs were removed for readability. +######################################################################### + +macro(_Boost_ADJUST_LIB_VARS basename) + if(Boost_INCLUDE_DIR ) + if(Boost_${basename}_LIBRARY_DEBUG AND Boost_${basename}_LIBRARY_RELEASE) + # if the generator supports configuration types then set + # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value + if(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) + set(Boost_${basename}_LIBRARY optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG}) + else() + # if there are no configuration types and CMAKE_BUILD_TYPE has no value + # then just use the release libraries + set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} ) + endif() + # FIXME: This probably should be set for both cases + set(Boost_${basename}_LIBRARIES optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG}) + endif() + + # if only the release version was found, set the debug variable also to the release version + if(Boost_${basename}_LIBRARY_RELEASE AND NOT Boost_${basename}_LIBRARY_DEBUG) + set(Boost_${basename}_LIBRARY_DEBUG ${Boost_${basename}_LIBRARY_RELEASE}) + set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE}) + set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_RELEASE}) + endif() + + # if only the debug version was found, set the release variable also to the debug version + if(Boost_${basename}_LIBRARY_DEBUG AND NOT Boost_${basename}_LIBRARY_RELEASE) + set(Boost_${basename}_LIBRARY_RELEASE ${Boost_${basename}_LIBRARY_DEBUG}) + set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_DEBUG}) + set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_DEBUG}) + endif() + + # If the debug & release library ends up being the same, omit the keywords + if(${Boost_${basename}_LIBRARY_RELEASE} STREQUAL ${Boost_${basename}_LIBRARY_DEBUG}) + set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} ) + set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_RELEASE} ) + endif() + + if(Boost_${basename}_LIBRARY) + set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY} CACHE FILEPATH "The Boost ${basename} library") + + # Remove superfluous "debug" / "optimized" keywords from + # Boost_LIBRARY_DIRS + foreach(_boost_my_lib ${Boost_${basename}_LIBRARY}) + get_filename_component(_boost_my_lib_path "${_boost_my_lib}" PATH) + list(APPEND Boost_LIBRARY_DIRS ${_boost_my_lib_path}) + endforeach() + list(REMOVE_DUPLICATES Boost_LIBRARY_DIRS) + + set(Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIRS} CACHE FILEPATH "Boost library directory") + set(Boost_${basename}_FOUND ON CACHE INTERNAL "Whether the Boost ${basename} library found") + endif(Boost_${basename}_LIBRARY) + + endif(Boost_INCLUDE_DIR ) + # Make variables changeble to the advanced user + mark_as_advanced( + Boost_${basename}_LIBRARY + Boost_${basename}_LIBRARY_RELEASE + Boost_${basename}_LIBRARY_DEBUG + ) +endmacro(_Boost_ADJUST_LIB_VARS) + +#------------------------------------------------------------------------------- + +# +# Runs compiler with "-dumpversion" and parses major/minor +# version with a regex. +# +function(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION) + + exec_program(${CMAKE_CXX_COMPILER} + ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion + OUTPUT_VARIABLE _boost_COMPILER_VERSION + ) + string(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2" + _boost_COMPILER_VERSION ${_boost_COMPILER_VERSION}) + + set(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE) +endfunction() + +# +# A convenience function for marking desired components +# as found or not +# +function(_Boost_MARK_COMPONENTS_FOUND _yes_or_no) + foreach(COMPONENT ${Boost_FIND_COMPONENTS}) + string(TOUPPER ${COMPONENT} UPPERCOMPONENT) + set(Boost_${UPPERCOMPONENT}_FOUND ${_yes_or_no} CACHE INTERNAL "Whether the Boost ${COMPONENT} library found" FORCE) + endforeach() +endfunction() + +# +# Take a list of libraries with "thread" in it +# and prepend duplicates with "thread_${Boost_THREADAPI}" +# at the front of the list +# +function(_Boost_PREPEND_LIST_WITH_THREADAPI _output) + set(_orig_libnames ${ARGN}) + string(REPLACE "thread" "thread_${Boost_THREADAPI}" _threadapi_libnames "${_orig_libnames}") + set(${_output} ${_threadapi_libnames} ${_orig_libnames} PARENT_SCOPE) +endfunction() + +# +# If a library is found, replace its cache entry with its REALPATH +# +function(_Boost_SWAP_WITH_REALPATH _library _docstring) + if(${_library}) + get_filename_component(_boost_filepathreal ${${_library}} REALPATH) + unset(${_library} CACHE) + set(${_library} ${_boost_filepathreal} CACHE FILEPATH "${_docstring}") + endif() +endfunction() + +function(_Boost_CHECK_SPELLING _var) + if(${_var}) + string(TOUPPER ${_var} _var_UC) + message(FATAL_ERROR "ERROR: ${_var} is not the correct spelling. The proper spelling is ${_var_UC}.") + endif() +endfunction() + +# +# End functions/macros +# +#------------------------------------------------------------------------------- + + + + +if(NOT DEFINED Boost_USE_MULTITHREADED) + set(Boost_USE_MULTITHREADED TRUE) +endif() + +if(Boost_FIND_VERSION_EXACT) + # The version may appear in a directory with or without the patch + # level, even when the patch level is non-zero. + set(_boost_TEST_VERSIONS + "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}.${Boost_FIND_VERSION_PATCH}" + "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}") +else(Boost_FIND_VERSION_EXACT) + # The user has not requested an exact version. Among known + # versions, find those that are acceptable to the user request. + set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS} + "1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1" + "1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42" + "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37" + "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0" + "1.34" "1.33.1" "1.33.0" "1.33") + set(_boost_TEST_VERSIONS) + if(Boost_FIND_VERSION) + set(_Boost_FIND_VERSION_SHORT "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}") + # Select acceptable versions. + foreach(version ${_Boost_KNOWN_VERSIONS}) + if(NOT "${version}" VERSION_LESS "${Boost_FIND_VERSION}") + # This version is high enough. + list(APPEND _boost_TEST_VERSIONS "${version}") + elseif("${version}.99" VERSION_EQUAL "${_Boost_FIND_VERSION_SHORT}.99") + # This version is a short-form for the requested version with + # the patch level dropped. + list(APPEND _boost_TEST_VERSIONS "${version}") + endif() + endforeach(version) + else(Boost_FIND_VERSION) + # Any version is acceptable. + set(_boost_TEST_VERSIONS "${_Boost_KNOWN_VERSIONS}") + endif(Boost_FIND_VERSION) +endif(Boost_FIND_VERSION_EXACT) + +# The reason that we failed to find Boost. This will be set to a +# user-friendly message when we fail to find some necessary piece of +# Boost. +set(Boost_ERROR_REASON) + +set( _boost_IN_CACHE TRUE) +if(Boost_INCLUDE_DIR) + + # On versions < 1.35, remove the System library from the considered list + # since it wasn't added until 1.35. + if(Boost_VERSION AND Boost_FIND_COMPONENTS) + if(Boost_VERSION LESS 103500) + list(REMOVE_ITEM Boost_FIND_COMPONENTS system) + endif() + endif() + + foreach(COMPONENT ${Boost_FIND_COMPONENTS}) + string(TOUPPER ${COMPONENT} COMPONENT) + if(NOT Boost_${COMPONENT}_FOUND) + set( _boost_IN_CACHE FALSE) + endif(NOT Boost_${COMPONENT}_FOUND) + endforeach(COMPONENT) +else(Boost_INCLUDE_DIR) + set( _boost_IN_CACHE FALSE) +endif(Boost_INCLUDE_DIR) + +if(_boost_IN_CACHE) + # in cache already + set(Boost_FOUND TRUE) + foreach(COMPONENT ${Boost_FIND_COMPONENTS}) + string(TOUPPER ${COMPONENT} COMPONENT) + _Boost_ADJUST_LIB_VARS( ${COMPONENT} ) + set(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${COMPONENT}_LIBRARY}) + endforeach(COMPONENT) + set(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR}) + if(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0") + math(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000") + math(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000") + math(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100") + endif(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0") + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "boost ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION} " + "is already in the cache. To view debugging messages, please clear the cache.") + endif() +else(_boost_IN_CACHE) + # Need to search for boost + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Boost not in cache") + # Output some of their choices + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Boost_USE_MULTITHREADED = ${Boost_USE_MULTITHREADED}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Boost_USE_STATIC_LIBS = ${Boost_USE_STATIC_LIBS}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Boost_USE_STATIC_RUNTIME = ${Boost_USE_STATIC_RUNTIME}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Boost_ADDITIONAL_VERSIONS = ${Boost_ADDITIONAL_VERSIONS}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Boost_NO_SYSTEM_PATHS = ${Boost_NO_SYSTEM_PATHS}") + endif() + + if(WIN32) + # In windows, automatic linking is performed, so you do not have + # to specify the libraries. If you are linking to a dynamic + # runtime, then you can choose to link to either a static or a + # dynamic Boost library, the default is to do a static link. You + # can alter this for a specific library "whatever" by defining + # BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to be + # linked dynamically. Alternatively you can force all Boost + # libraries to dynamic link by defining BOOST_ALL_DYN_LINK. + + # This feature can be disabled for Boost library "whatever" by + # defining BOOST_WHATEVER_NO_LIB, or for all of Boost by defining + # BOOST_ALL_NO_LIB. + + # If you want to observe which libraries are being linked against + # then defining BOOST_LIB_DIAGNOSTIC will cause the auto-linking + # code to emit a #pragma message each time a library is selected + # for linking. + set(Boost_LIB_DIAGNOSTIC_DEFINITIONS + "-DBOOST_LIB_DIAGNOSTIC" CACHE STRING "Boost diagnostic define") + endif(WIN32) + + set(_boost_INCLUDE_SEARCH_DIRS_SYSTEM + C:/boost/include + C:/boost + "$ENV{ProgramFiles}/boost/include" + "$ENV{ProgramFiles}/boost" + /sw/local/include + ) + + _Boost_CHECK_SPELLING(Boost_ROOT) + _Boost_CHECK_SPELLING(Boost_LIBRARYDIR) + _Boost_CHECK_SPELLING(Boost_INCLUDEDIR) + + # If BOOST_ROOT was defined in the environment, use it. + if (NOT BOOST_ROOT AND NOT $ENV{Boost_DIR} STREQUAL "") + set(BOOST_ROOT $ENV{Boost_DIR}) + endif() + + # If BOOST_ROOT was defined in the environment, use it. + if (NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "") + set(BOOST_ROOT $ENV{BOOST_ROOT}) + endif() + + # If BOOSTROOT was defined in the environment, use it. + if (NOT BOOST_ROOT AND NOT $ENV{BOOSTROOT} STREQUAL "") + set(BOOST_ROOT $ENV{BOOSTROOT}) + endif() + + # If BOOST_INCLUDEDIR was defined in the environment, use it. + if( NOT $ENV{BOOST_INCLUDEDIR} STREQUAL "" ) + set(BOOST_INCLUDEDIR $ENV{BOOST_INCLUDEDIR}) + endif() + + # If BOOST_LIBRARYDIR was defined in the environment, use it. + if( NOT $ENV{BOOST_LIBRARYDIR} STREQUAL "" ) + set(BOOST_LIBRARYDIR $ENV{BOOST_LIBRARYDIR}) + endif() + + if( BOOST_ROOT ) + file(TO_CMAKE_PATH ${BOOST_ROOT} BOOST_ROOT) + endif() + + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Declared as CMake or Environmental Variables:") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + " BOOST_ROOT = ${BOOST_ROOT}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + " BOOST_INCLUDEDIR = ${BOOST_INCLUDEDIR}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + " BOOST_LIBRARYDIR = ${BOOST_LIBRARYDIR}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}") + endif() + + if( Boost_NO_SYSTEM_PATHS) + set(_boost_FIND_OPTIONS NO_CMAKE_SYSTEM_PATH) + else() + set(_boost_INCLUDE_SEARCH_DIRS ${_boost_INCLUDE_SEARCH_DIRS_SYSTEM}) + endif() + + if( BOOST_ROOT ) + set(_boost_INCLUDE_SEARCH_DIRS + ${BOOST_ROOT}/include + ${BOOST_ROOT} + ${_boost_INCLUDE_SEARCH_DIRS}) + endif() + + # prepend BOOST_INCLUDEDIR to search path if specified + if( BOOST_INCLUDEDIR ) + file(TO_CMAKE_PATH ${BOOST_INCLUDEDIR} BOOST_INCLUDEDIR) + set(_boost_INCLUDE_SEARCH_DIRS + ${BOOST_INCLUDEDIR} ${_boost_INCLUDE_SEARCH_DIRS}) + endif( BOOST_INCLUDEDIR ) + + # ------------------------------------------------------------------------ + # Search for Boost include DIR + # ------------------------------------------------------------------------ + # Try to find Boost by stepping backwards through the Boost versions + # we know about. + if( NOT Boost_INCLUDE_DIR ) + # Build a list of path suffixes for each version. + set(_boost_PATH_SUFFIXES) + foreach(_boost_VER ${_boost_TEST_VERSIONS}) + # Add in a path suffix, based on the required version, ideally + # we could read this from version.hpp, but for that to work we'd + # need to know the include dir already + set(_boost_BOOSTIFIED_VERSION) + + # Transform 1.35 => 1_35 and 1.36.0 => 1_36_0 + if(_boost_VER MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+") + string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1_\\2_\\3" + _boost_BOOSTIFIED_VERSION ${_boost_VER}) + elseif(_boost_VER MATCHES "[0-9]+\\.[0-9]+") + string(REGEX REPLACE "([0-9]+)\\.([0-9]+)" "\\1_\\2" + _boost_BOOSTIFIED_VERSION ${_boost_VER}) + endif() + + list(APPEND _boost_PATH_SUFFIXES "boost-${_boost_BOOSTIFIED_VERSION}") + list(APPEND _boost_PATH_SUFFIXES "boost_${_boost_BOOSTIFIED_VERSION}") + + endforeach(_boost_VER) + + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Include debugging info:") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + " _boost_INCLUDE_SEARCH_DIRS = ${_boost_INCLUDE_SEARCH_DIRS}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + " _boost_PATH_SUFFIXES = ${_boost_PATH_SUFFIXES}") + endif() + + # Look for a standard boost header file. + find_path(Boost_INCLUDE_DIR + NAMES boost/config.hpp + HINTS ${_boost_INCLUDE_SEARCH_DIRS} + PATH_SUFFIXES ${_boost_PATH_SUFFIXES} + ${_boost_FIND_OPTIONS} + ) + endif( NOT Boost_INCLUDE_DIR ) + + # ------------------------------------------------------------------------ + # Extract version information from version.hpp + # ------------------------------------------------------------------------ + + if(Boost_INCLUDE_DIR) + # Extract Boost_VERSION and Boost_LIB_VERSION from version.hpp + # Read the whole file: + # + set(BOOST_VERSION 0) + set(BOOST_LIB_VERSION "") + file(READ "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS) + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "location of version.hpp: ${Boost_INCLUDE_DIR}/boost/version.hpp") + endif() + + string(REGEX REPLACE ".*#define BOOST_VERSION ([0-9]+).*" "\\1" Boost_VERSION "${_boost_VERSION_HPP_CONTENTS}") + string(REGEX REPLACE ".*#define BOOST_LIB_VERSION \"([0-9_]+)\".*" "\\1" Boost_LIB_VERSION "${_boost_VERSION_HPP_CONTENTS}") + + set(Boost_LIB_VERSION ${Boost_LIB_VERSION} CACHE INTERNAL "The library version string for boost libraries") + set(Boost_VERSION ${Boost_VERSION} CACHE INTERNAL "The version number for boost libraries") + + if(NOT "${Boost_VERSION}" STREQUAL "0") + math(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000") + math(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000") + math(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100") + + set(Boost_ERROR_REASON + "${Boost_ERROR_REASON}Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}\nBoost include path: ${Boost_INCLUDE_DIR}") + endif(NOT "${Boost_VERSION}" STREQUAL "0") + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "version.hpp reveals boost " + "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}") + endif() + else(Boost_INCLUDE_DIR) + set(Boost_ERROR_REASON + "${Boost_ERROR_REASON}Unable to find the Boost header files. Please set BOOST_ROOT to the root directory containing Boost or BOOST_INCLUDEDIR to the directory containing Boost's headers.") + endif(Boost_INCLUDE_DIR) + + # ------------------------------------------------------------------------ + # Suffix initialization and compiler suffix detection. + # ------------------------------------------------------------------------ + + # Setting some more suffixes for the library + set(Boost_LIB_PREFIX "") + if ( WIN32 AND Boost_USE_STATIC_LIBS AND NOT CYGWIN) + set(Boost_LIB_PREFIX "lib") + endif() + + if (Boost_COMPILER) + set(_boost_COMPILER ${Boost_COMPILER}) + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "using user-specified Boost_COMPILER = ${_boost_COMPILER}") + endif() + else(Boost_COMPILER) + # Attempt to guess the compiler suffix + # NOTE: this is not perfect yet, if you experience any issues + # please report them and use the Boost_COMPILER variable + # to work around the problems. + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" + OR "${CMAKE_CXX_COMPILER}" MATCHES "icl" + OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc") + if(WIN32) + set (_boost_COMPILER "-iw") + else() + set (_boost_COMPILER "-il") + endif() + elseif (MSVC11) + set(_boost_COMPILER "-vc110") + elseif (MSVC10) + set(_boost_COMPILER "-vc100") + elseif (MSVC90) + set(_boost_COMPILER "-vc90") + elseif (MSVC80) + set(_boost_COMPILER "-vc80") + elseif (MSVC71) + set(_boost_COMPILER "-vc71") + elseif (MSVC70) # Good luck! + set(_boost_COMPILER "-vc7") # yes, this is correct + elseif (MSVC60) # Good luck! + set(_boost_COMPILER "-vc6") # yes, this is correct + elseif (BORLAND) + set(_boost_COMPILER "-bcb") + elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "SunPro") + set(_boost_COMPILER "-sw") + elseif (MINGW) + if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34) + set(_boost_COMPILER "-mgw") # no GCC version encoding prior to 1.34 + else() + _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION) + set(_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}") + endif() + elseif (UNIX) + if (CMAKE_COMPILER_IS_GNUCXX) + if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34) + set(_boost_COMPILER "-gcc") # no GCC version encoding prior to 1.34 + else() + _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION) + # Determine which version of GCC we have. + if(APPLE) + if(Boost_MINOR_VERSION) + if(${Boost_MINOR_VERSION} GREATER 35) + # In Boost 1.36.0 and newer, the mangled compiler name used + # on Mac OS X/Darwin is "xgcc". + set(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}") + else(${Boost_MINOR_VERSION} GREATER 35) + # In Boost <= 1.35.0, there is no mangled compiler name for + # the Mac OS X/Darwin version of GCC. + set(_boost_COMPILER "") + endif(${Boost_MINOR_VERSION} GREATER 35) + else(Boost_MINOR_VERSION) + # We don't know the Boost version, so assume it's + # pre-1.36.0. + set(_boost_COMPILER "") + endif(Boost_MINOR_VERSION) + else() + set(_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}") + endif() + endif() + endif (CMAKE_COMPILER_IS_GNUCXX) + endif() + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "guessed _boost_COMPILER = ${_boost_COMPILER}") + endif() + endif(Boost_COMPILER) + + set (_boost_MULTITHREADED "-mt") + if( NOT Boost_USE_MULTITHREADED ) + set (_boost_MULTITHREADED "") + endif() + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "_boost_MULTITHREADED = ${_boost_MULTITHREADED}") + endif() + + #====================== + # Systematically build up the Boost ABI tag + # http://boost.org/doc/libs/1_41_0/more/getting_started/windows.html#library-naming + set( _boost_RELEASE_ABI_TAG "-") + set( _boost_DEBUG_ABI_TAG "-") + # Key Use this library when: + # s linking statically to the C++ standard library and + # compiler runtime support libraries. + if(Boost_USE_STATIC_RUNTIME) + set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}s") + set( _boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}s") + endif() + # g using debug versions of the standard and runtime + # support libraries + if(WIN32) + if(MSVC OR "${CMAKE_CXX_COMPILER}" MATCHES "icl" + OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc") + set(_boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}g") + endif() + endif() + # y using special debug build of python + if(Boost_USE_DEBUG_PYTHON) + set(_boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}y") + endif() + # d using a debug version of your code + set(_boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}d") + # p using the STLport standard library rather than the + # default one supplied with your compiler + if(Boost_USE_STLPORT) + set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}p") + set( _boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}p") + endif() + # n using the STLport deprecated "native iostreams" feature + if(Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS) + set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}n") + set( _boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}n") + endif() + + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "_boost_RELEASE_ABI_TAG = ${_boost_RELEASE_ABI_TAG}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "_boost_DEBUG_ABI_TAG = ${_boost_DEBUG_ABI_TAG}") + endif() + + # ------------------------------------------------------------------------ + # Begin finding boost libraries + # ------------------------------------------------------------------------ + + if(BOOST_ROOT) + set(_boost_LIBRARY_SEARCH_DIRS_ALWAYS + ${BOOST_ROOT}/lib + ${BOOST_ROOT}/stage/lib) + endif() + set(_boost_LIBRARY_SEARCH_DIRS_ALWAYS + ${_boost_LIBRARY_SEARCH_DIRS_ALWAYS} + ${Boost_INCLUDE_DIR}/lib + ${Boost_INCLUDE_DIR}/../lib + ${Boost_INCLUDE_DIR}/stage/lib + ) + set(_boost_LIBRARY_SEARCH_DIRS_SYSTEM + C:/boost/lib + C:/boost + "$ENV{ProgramFiles}/boost/boost_${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION}_${Boost_SUBMINOR_VERSION}/lib" + "$ENV{ProgramFiles}/boost/boost_${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION}/lib" + "$ENV{ProgramFiles}/boost/lib" + "$ENV{ProgramFiles}/boost" + /sw/local/lib + ) + set(_boost_LIBRARY_SEARCH_DIRS ${_boost_LIBRARY_SEARCH_DIRS_ALWAYS}) + if( Boost_NO_SYSTEM_PATHS ) + set(_boost_FIND_OPTIONS NO_CMAKE_SYSTEM_PATH) + else() + list(APPEND _boost_LIBRARY_SEARCH_DIRS ${_boost_LIBRARY_SEARCH_DIRS_SYSTEM}) + endif() + + # prepend BOOST_LIBRARYDIR to search path if specified + if( BOOST_LIBRARYDIR ) + file(TO_CMAKE_PATH ${BOOST_LIBRARYDIR} BOOST_LIBRARYDIR) + set(_boost_LIBRARY_SEARCH_DIRS + ${BOOST_LIBRARYDIR} ${_boost_LIBRARY_SEARCH_DIRS}) + endif() + + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "_boost_LIBRARY_SEARCH_DIRS = ${_boost_LIBRARY_SEARCH_DIRS}") + endif() + + # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES + if( Boost_USE_STATIC_LIBS ) + set( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) + if(WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + else() + set(CMAKE_FIND_LIBRARY_SUFFIXES .a ) + endif() + endif() + + # We want to use the tag inline below without risking double dashes + if(_boost_RELEASE_ABI_TAG) + if(${_boost_RELEASE_ABI_TAG} STREQUAL "-") + set(_boost_RELEASE_ABI_TAG "") + endif() + endif() + if(_boost_DEBUG_ABI_TAG) + if(${_boost_DEBUG_ABI_TAG} STREQUAL "-") + set(_boost_DEBUG_ABI_TAG "") + endif() + endif() + + # The previous behavior of FindBoost when Boost_USE_STATIC_LIBS was enabled + # on WIN32 was to: + # 1. Search for static libs compiled against a SHARED C++ standard runtime library (use if found) + # 2. Search for static libs compiled against a STATIC C++ standard runtime library (use if found) + # We maintain this behavior since changing it could break people's builds. + # To disable the ambiguous behavior, the user need only + # set Boost_USE_STATIC_RUNTIME either ON or OFF. + set(_boost_STATIC_RUNTIME_WORKAROUND false) + if(WIN32 AND Boost_USE_STATIC_LIBS) + if(NOT DEFINED Boost_USE_STATIC_RUNTIME) + set(_boost_STATIC_RUNTIME_WORKAROUND true) + endif() + endif() + + + foreach(COMPONENT ${Boost_FIND_COMPONENTS}) + string(TOUPPER ${COMPONENT} UPPERCOMPONENT) + set( Boost_${UPPERCOMPONENT}_LIBRARY "Boost_${UPPERCOMPONENT}_LIBRARY-NOTFOUND" ) + set( Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE-NOTFOUND" ) + set( Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG "Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG-NOTFOUND") + + set( _boost_docstring_release "Boost ${COMPONENT} library (release)") + set( _boost_docstring_debug "Boost ${COMPONENT} library (debug)") + + # + # Find RELEASE libraries + # + set(_boost_RELEASE_NAMES + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG} + ${Boost_LIB_PREFIX}boost_${COMPONENT} ) + if(_boost_STATIC_RUNTIME_WORKAROUND) + set(_boost_RELEASE_STATIC_ABI_TAG "-s${_boost_RELEASE_ABI_TAG}") + list(APPEND _boost_RELEASE_NAMES + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} ) + endif() + if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread") + _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_RELEASE_NAMES ${_boost_RELEASE_NAMES}) + endif() + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Searching for ${UPPERCOMPONENT}_LIBRARY_RELEASE: ${_boost_RELEASE_NAMES}") + endif() + find_library(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE + NAMES ${_boost_RELEASE_NAMES} + HINTS ${_boost_LIBRARY_SEARCH_DIRS} + ${_boost_FIND_OPTIONS} + DOC "${_boost_docstring_release}" + ) + + # + # Find DEBUG libraries + # + set(_boost_DEBUG_NAMES + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED} + ${Boost_LIB_PREFIX}boost_${COMPONENT} ) + if(_boost_STATIC_RUNTIME_WORKAROUND) + set(_boost_DEBUG_STATIC_ABI_TAG "-s${_boost_DEBUG_ABI_TAG}") + list(APPEND _boost_DEBUG_NAMES + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} ) + endif() + if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread") + _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_DEBUG_NAMES ${_boost_DEBUG_NAMES}) + endif() + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Searching for ${UPPERCOMPONENT}_LIBRARY_DEBUG: ${_boost_DEBUG_NAMES}") + endif() + find_library(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG + NAMES ${_boost_DEBUG_NAMES} + HINTS ${_boost_LIBRARY_SEARCH_DIRS} + ${_boost_FIND_OPTIONS} + DOC "${_boost_docstring_debug}" + ) + + if(Boost_REALPATH) + _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "${_boost_docstring_release}") + _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG "${_boost_docstring_debug}" ) + endif() + + _Boost_ADJUST_LIB_VARS(${UPPERCOMPONENT}) + + endforeach(COMPONENT) + + # Restore the original find library ordering + if( Boost_USE_STATIC_LIBS ) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${_boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) + endif() + # ------------------------------------------------------------------------ + # End finding boost libraries + # ------------------------------------------------------------------------ + + set(Boost_INCLUDE_DIRS + ${Boost_INCLUDE_DIR} + ) + + set(Boost_FOUND FALSE) + if(Boost_INCLUDE_DIR) + set( Boost_FOUND TRUE ) + + # Check the version of Boost against the requested version. + if (Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR) + message(SEND_ERROR "When requesting a specific version of Boost, you must provide at least the major and minor version numbers, e.g., 1.34") + endif (Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR) + if(Boost_MAJOR_VERSION LESS "${Boost_FIND_VERSION_MAJOR}" ) + set( Boost_FOUND FALSE ) + set(_Boost_VERSION_AGE "old") + elseif(Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" ) + if(Boost_MINOR_VERSION LESS "${Boost_FIND_VERSION_MINOR}" ) + set( Boost_FOUND FALSE ) + set(_Boost_VERSION_AGE "old") + elseif(Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" ) + if( Boost_FIND_VERSION_PATCH AND Boost_SUBMINOR_VERSION LESS "${Boost_FIND_VERSION_PATCH}" ) + set( Boost_FOUND FALSE ) + set(_Boost_VERSION_AGE "old") + endif( Boost_FIND_VERSION_PATCH AND Boost_SUBMINOR_VERSION LESS "${Boost_FIND_VERSION_PATCH}" ) + endif( Boost_MINOR_VERSION LESS "${Boost_FIND_VERSION_MINOR}" ) + endif( Boost_MAJOR_VERSION LESS "${Boost_FIND_VERSION_MAJOR}" ) + + if (NOT Boost_FOUND) + _Boost_MARK_COMPONENTS_FOUND(OFF) + endif() + + if (Boost_FOUND AND Boost_FIND_VERSION_EXACT) + # If the user requested an exact version of Boost, check + # that. We already know that the Boost version we have is >= the + # requested version. + set(_Boost_VERSION_AGE "new") + + # If the user didn't specify a patchlevel, it's 0. + if (NOT Boost_FIND_VERSION_PATCH) + set(Boost_FIND_VERSION_PATCH 0) + endif (NOT Boost_FIND_VERSION_PATCH) + + # We'll set Boost_FOUND true again if we have an exact version match. + set(Boost_FOUND FALSE) + _Boost_MARK_COMPONENTS_FOUND(OFF) + if(Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" ) + if(Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" ) + if(Boost_SUBMINOR_VERSION EQUAL "${Boost_FIND_VERSION_PATCH}" ) + set( Boost_FOUND TRUE ) + _Boost_MARK_COMPONENTS_FOUND(ON) + endif(Boost_SUBMINOR_VERSION EQUAL "${Boost_FIND_VERSION_PATCH}" ) + endif( Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" ) + endif( Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" ) + endif (Boost_FOUND AND Boost_FIND_VERSION_EXACT) + + if(NOT Boost_FOUND) + # State that we found a version of Boost that is too new or too old. + set(Boost_ERROR_REASON + "${Boost_ERROR_REASON}\nDetected version of Boost is too ${_Boost_VERSION_AGE}. Requested version was ${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}") + if (Boost_FIND_VERSION_PATCH) + set(Boost_ERROR_REASON + "${Boost_ERROR_REASON}.${Boost_FIND_VERSION_PATCH}") + endif (Boost_FIND_VERSION_PATCH) + if (NOT Boost_FIND_VERSION_EXACT) + set(Boost_ERROR_REASON "${Boost_ERROR_REASON} (or newer)") + endif (NOT Boost_FIND_VERSION_EXACT) + set(Boost_ERROR_REASON "${Boost_ERROR_REASON}.") + endif (NOT Boost_FOUND) + + # Always check for missing components + set(_boost_CHECKED_COMPONENT FALSE) + set(_Boost_MISSING_COMPONENTS "") + foreach(COMPONENT ${Boost_FIND_COMPONENTS}) + string(TOUPPER ${COMPONENT} COMPONENT) + set(_boost_CHECKED_COMPONENT TRUE) + if(NOT Boost_${COMPONENT}_FOUND) + string(TOLOWER ${COMPONENT} COMPONENT) + list(APPEND _Boost_MISSING_COMPONENTS ${COMPONENT}) + set( Boost_FOUND FALSE) + endif() + endforeach(COMPONENT) + + if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] Boost_FOUND = ${Boost_FOUND}") + endif() + + if (_Boost_MISSING_COMPONENTS) + # We were unable to find some libraries, so generate a sensible + # error message that lists the libraries we were unable to find. + set(Boost_ERROR_REASON + "${Boost_ERROR_REASON}\nThe following Boost libraries could not be found:\n") + foreach(COMPONENT ${_Boost_MISSING_COMPONENTS}) + set(Boost_ERROR_REASON + "${Boost_ERROR_REASON} boost_${COMPONENT}\n") + endforeach(COMPONENT) + + list(LENGTH Boost_FIND_COMPONENTS Boost_NUM_COMPONENTS_WANTED) + list(LENGTH _Boost_MISSING_COMPONENTS Boost_NUM_MISSING_COMPONENTS) + if (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS}) + set(Boost_ERROR_REASON + "${Boost_ERROR_REASON}No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.") + else (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS}) + set(Boost_ERROR_REASON + "${Boost_ERROR_REASON}Some (but not all) of the required Boost libraries were found. You may need to install these additional Boost libraries. Alternatively, set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.") + endif (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS}) + endif (_Boost_MISSING_COMPONENTS) + + if( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT ) + # Compatibility Code for backwards compatibility with CMake + # 2.4's FindBoost module. + + # Look for the boost library path. + # Note that the user may not have installed any libraries + # so it is quite possible the Boost_LIBRARY_PATH may not exist. + set(_boost_LIB_DIR ${Boost_INCLUDE_DIR}) + + if("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+") + get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH) + endif() + + if("${_boost_LIB_DIR}" MATCHES "/include$") + # Strip off the trailing "/include" in the path. + get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH) + endif() + + if(EXISTS "${_boost_LIB_DIR}/lib") + set(_boost_LIB_DIR ${_boost_LIB_DIR}/lib) + else() + if(EXISTS "${_boost_LIB_DIR}/stage/lib") + set(_boost_LIB_DIR ${_boost_LIB_DIR}/stage/lib) + else() + set(_boost_LIB_DIR "") + endif() + endif() + + if(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}") + set(Boost_LIBRARY_DIRS ${_boost_LIB_DIR} CACHE FILEPATH "Boost library directory") + endif() + + endif( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT ) + + else(Boost_INCLUDE_DIR) + set( Boost_FOUND FALSE) + endif(Boost_INCLUDE_DIR) + + if(Boost_FOUND) + if(NOT Boost_FIND_QUIETLY) + message(STATUS "Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}") + if(Boost_FIND_COMPONENTS) + message(STATUS "Found the following Boost libraries:") + endif() + endif(NOT Boost_FIND_QUIETLY) + foreach( COMPONENT ${Boost_FIND_COMPONENTS} ) + string( TOUPPER ${COMPONENT} UPPERCOMPONENT ) + if( Boost_${UPPERCOMPONENT}_FOUND ) + if(NOT Boost_FIND_QUIETLY) + message (STATUS " ${COMPONENT}") + endif(NOT Boost_FIND_QUIETLY) + set(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${UPPERCOMPONENT}_LIBRARY}) + endif( Boost_${UPPERCOMPONENT}_FOUND ) + endforeach(COMPONENT) + else() + if(Boost_FIND_REQUIRED) + message(SEND_ERROR "Unable to find the requested Boost libraries.\n${Boost_ERROR_REASON}") + else() + if(NOT Boost_FIND_QUIETLY) + # we opt not to automatically output Boost_ERROR_REASON here as + # it could be quite lengthy and somewhat imposing in it's requests + # Since Boost is not always a required dependency we'll leave this + # up to the end-user. + if(Boost_DEBUG OR Boost_DETAILED_FAILURE_MSG) + message(STATUS "Could NOT find Boost\n${Boost_ERROR_REASON}") + else() + message(STATUS "Could NOT find Boost") + endif() + endif() + endif(Boost_FIND_REQUIRED) + endif() + + # show the Boost_INCLUDE_DIRS AND Boost_LIBRARIES variables only in the advanced view + mark_as_advanced(Boost_INCLUDE_DIR + Boost_INCLUDE_DIRS + Boost_LIBRARY_DIRS + ) +endif(_boost_IN_CACHE) diff --git a/Modules/FindBullet.cmake b/Modules/FindBullet.cmake new file mode 100644 index 0000000..aea9158 --- /dev/null +++ b/Modules/FindBullet.cmake @@ -0,0 +1,84 @@ +# - Try to find the Bullet physics engine +# +# This module defines the following variables +# +# BULLET_FOUND - Was bullet found +# BULLET_INCLUDE_DIRS - the Bullet include directories +# BULLET_LIBRARIES - Link to this, by default it includes +# all bullet components (Dynamics, +# Collision, LinearMath, & SoftBody) +# +# This module accepts the following variables +# +# BULLET_ROOT - Can be set to bullet install path or Windows build path +# + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2009 Philip Lowman +# +# 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.) + +macro(_FIND_BULLET_LIBRARY _var) + find_library(${_var} + NAMES + ${ARGN} + HINTS + ${BULLET_ROOT} + ${BULLET_ROOT}/out/release8/libs + ${BULLET_ROOT}/out/debug8/libs + PATH_SUFFIXES lib + ) + mark_as_advanced(${_var}) +endmacro() + +macro(_BULLET_APPEND_LIBRARIES _list _release) + set(_debug ${_release}_DEBUG) + if(${_debug}) + set(${_list} ${${_list}} optimized ${${_release}} debug ${${_debug}}) + else() + set(${_list} ${${_list}} ${${_release}}) + endif() +endmacro() + +find_path(BULLET_INCLUDE_DIR NAMES btBulletCollisionCommon.h + HINTS + ${BULLET_ROOT}/include + ${BULLET_ROOT}/src + PATH_SUFFIXES bullet +) + +# Find the libraries + +_FIND_BULLET_LIBRARY(BULLET_DYNAMICS_LIBRARY BulletDynamics) +_FIND_BULLET_LIBRARY(BULLET_DYNAMICS_LIBRARY_DEBUG BulletDynamics_Debug BulletDynamics_d) +_FIND_BULLET_LIBRARY(BULLET_COLLISION_LIBRARY BulletCollision) +_FIND_BULLET_LIBRARY(BULLET_COLLISION_LIBRARY_DEBUG BulletCollision_Debug BulletCollision_d) +_FIND_BULLET_LIBRARY(BULLET_MATH_LIBRARY BulletMath LinearMath) +_FIND_BULLET_LIBRARY(BULLET_MATH_LIBRARY_DEBUG BulletMath_Debug BulletMath_d LinearMath_d) +_FIND_BULLET_LIBRARY(BULLET_SOFTBODY_LIBRARY BulletSoftBody) +_FIND_BULLET_LIBRARY(BULLET_SOFTBODY_LIBRARY_DEBUG BulletSoftBody_Debug BulletSoftBody_d) + + +# handle the QUIETLY and REQUIRED arguments and set BULLET_FOUND to TRUE if +# all listed variables are TRUE +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Bullet DEFAULT_MSG + BULLET_DYNAMICS_LIBRARY BULLET_COLLISION_LIBRARY BULLET_MATH_LIBRARY + BULLET_SOFTBODY_LIBRARY BULLET_INCLUDE_DIR) + +set(BULLET_INCLUDE_DIRS ${BULLET_INCLUDE_DIR}) +if(BULLET_FOUND) + _BULLET_APPEND_LIBRARIES(BULLET_LIBRARIES BULLET_DYNAMICS_LIBRARY) + _BULLET_APPEND_LIBRARIES(BULLET_LIBRARIES BULLET_COLLISION_LIBRARY) + _BULLET_APPEND_LIBRARIES(BULLET_LIBRARIES BULLET_MATH_LIBRARY) + _BULLET_APPEND_LIBRARIES(BULLET_LIBRARIES BULLET_SOFTBODY_LIBRARY) +endif() diff --git a/Modules/FindCABLE.cmake b/Modules/FindCABLE.cmake new file mode 100644 index 0000000..678fb07 --- /dev/null +++ b/Modules/FindCABLE.cmake @@ -0,0 +1,81 @@ +# - Find CABLE +# This module finds if CABLE is installed and determines where the +# include files and libraries are. This code sets the following variables: +# +# CABLE the path to the cable executable +# CABLE_TCL_LIBRARY the path to the Tcl wrapper library +# CABLE_INCLUDE_DIR the path to the include directory +# +# To build Tcl wrappers, you should add shared library and link it to +# ${CABLE_TCL_LIBRARY}. You should also add ${CABLE_INCLUDE_DIR} as +# an include directory. + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(NOT CABLE) + FIND_PATH(CABLE_BUILD_DIR cableVersion.h) +ENDIF(NOT CABLE) + +IF(CABLE_BUILD_DIR) + LOAD_CACHE(${CABLE_BUILD_DIR} + EXCLUDE + BUILD_SHARED_LIBS + LIBRARY_OUTPUT_PATH + EXECUTABLE_OUTPUT_PATH + MAKECOMMAND + CMAKE_INSTALL_PREFIX + INCLUDE_INTERNALS + CABLE_LIBRARY_PATH + CABLE_EXECUTABLE_PATH) + + IF(CABLE_LIBRARY_PATH) + FIND_LIBRARY(CABLE_TCL_LIBRARY NAMES CableTclFacility PATHS + ${CABLE_LIBRARY_PATH} + ${CABLE_LIBRARY_PATH}/*) + ELSE(CABLE_LIBRARY_PATH) + FIND_LIBRARY(CABLE_TCL_LIBRARY NAMES CableTclFacility PATHS + ${CABLE_BINARY_DIR}/CableTclFacility + ${CABLE_BINARY_DIR}/CableTclFacility/*) + ENDIF(CABLE_LIBRARY_PATH) + + IF(CABLE_EXECUTABLE_PATH) + FIND_PROGRAM(CABLE NAMES cable PATHS + ${CABLE_EXECUTABLE_PATH} + ${CABLE_EXECUTABLE_PATH}/*) + ELSE(CABLE_EXECUTABLE_PATH) + FIND_PROGRAM(CABLE NAMES cable PATHS + ${CABLE_BINARY_DIR}/Executables + ${CABLE_BINARY_DIR}/Executables/*) + ENDIF(CABLE_EXECUTABLE_PATH) + + FIND_PATH(CABLE_INCLUDE_DIR CableTclFacility/ctCalls.h + ${CABLE_SOURCE_DIR}) +ELSE(CABLE_BUILD_DIR) + # Find the cable executable in the path. + FIND_PROGRAM(CABLE NAMES cable) + + # Get the path where the executable sits, but without the executable + # name on it. + GET_FILENAME_COMPONENT(CABLE_ROOT_BIN ${CABLE} PATH) + + # Find the cable include directory in a path relative to the cable + # executable. + FIND_PATH(CABLE_INCLUDE_DIR CableTclFacility/ctCalls.h + ${CABLE_ROOT_BIN}/../include/Cable) + + # Find the WrapTclFacility library in a path relative to the cable + # executable. + FIND_LIBRARY(CABLE_TCL_LIBRARY NAMES CableTclFacility PATHS + ${CABLE_ROOT_BIN}/../lib/Cable) +ENDIF(CABLE_BUILD_DIR) diff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake new file mode 100644 index 0000000..9f8d575 --- /dev/null +++ b/Modules/FindCUDA.cmake @@ -0,0 +1,1367 @@ +# - Tools for building CUDA C files: libraries and build dependencies. +# This script locates the NVIDIA CUDA C tools. It should work on linux, windows, +# and mac and should be reasonably up to date with CUDA C releases. +# +# This script makes use of the standard find_package arguments of , +# REQUIRED and QUIET. CUDA_FOUND will report if an acceptable version of CUDA +# was found. +# +# The script will prompt the user to specify CUDA_TOOLKIT_ROOT_DIR if the prefix +# cannot be determined by the location of nvcc in the system path and REQUIRED +# is specified to find_package(). To use a different installed version of the +# toolkit set the environment variable CUDA_BIN_PATH before running cmake +# (e.g. CUDA_BIN_PATH=/usr/local/cuda1.0 instead of the default /usr/local/cuda) +# or set CUDA_TOOLKIT_ROOT_DIR after configuring. If you change the value of +# CUDA_TOOLKIT_ROOT_DIR, various components that depend on the path will be +# relocated. +# +# It might be necessary to set CUDA_TOOLKIT_ROOT_DIR manually on certain +# platforms, or to use a cuda runtime not installed in the default location. In +# newer versions of the toolkit the cuda library is included with the graphics +# driver- be sure that the driver version matches what is needed by the cuda +# runtime version. +# +# The following variables affect the behavior of the macros in the script (in +# alphebetical order). Note that any of these flags can be changed multiple +# times in the same directory before calling CUDA_ADD_EXECUTABLE, +# CUDA_ADD_LIBRARY, CUDA_COMPILE, CUDA_COMPILE_PTX or CUDA_WRAP_SRCS. +# +# CUDA_64_BIT_DEVICE_CODE (Default matches host bit size) +# -- Set to ON to compile for 64 bit device code, OFF for 32 bit device code. +# Note that making this different from the host code when generating object +# or C files from CUDA code just won't work, because size_t gets defined by +# nvcc in the generated source. If you compile to PTX and then load the +# file yourself, you can mix bit sizes between device and host. +# +# CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE (Default ON) +# -- Set to ON if you want the custom build rule to be attached to the source +# file in Visual Studio. Turn OFF if you add the same cuda file to multiple +# targets. +# +# This allows the user to build the target from the CUDA file; however, bad +# things can happen if the CUDA source file is added to multiple targets. +# When performing parallel builds it is possible for the custom build +# command to be run more than once and in parallel causing cryptic build +# errors. VS runs the rules for every source file in the target, and a +# source can have only one rule no matter how many projects it is added to. +# When the rule is run from multiple targets race conditions can occur on +# the generated file. Eventually everything will get built, but if the user +# is unaware of this behavior, there may be confusion. It would be nice if +# this script could detect the reuse of source files across multiple targets +# and turn the option off for the user, but no good solution could be found. +# +# CUDA_BUILD_CUBIN (Default OFF) +# -- Set to ON to enable and extra compilation pass with the -cubin option in +# Device mode. The output is parsed and register, shared memory usage is +# printed during build. +# +# CUDA_BUILD_EMULATION (Default OFF for device mode) +# -- Set to ON for Emulation mode. -D_DEVICEEMU is defined for CUDA C files +# when CUDA_BUILD_EMULATION is TRUE. +# +# CUDA_GENERATED_OUTPUT_DIR (Default CMAKE_CURRENT_BINARY_DIR) +# -- Set to the path you wish to have the generated files placed. If it is +# blank output files will be placed in CMAKE_CURRENT_BINARY_DIR. +# Intermediate files will always be placed in +# CMAKE_CURRENT_BINARY_DIR/CMakeFiles. +# +# CUDA_HOST_COMPILATION_CPP (Default ON) +# -- Set to OFF for C compilation of host code. +# +# CUDA_NVCC_FLAGS +# CUDA_NVCC_FLAGS_ +# -- Additional NVCC command line arguments. NOTE: multiple arguments must be +# semi-colon delimited (e.g. --compiler-options;-Wall) +# +# CUDA_PROPAGATE_HOST_FLAGS (Default ON) +# -- Set to ON to propagate CMAKE_{C,CXX}_FLAGS and their configuration +# dependent counterparts (e.g. CMAKE_C_FLAGS_DEBUG) automatically to the +# host compiler through nvcc's -Xcompiler flag. This helps make the +# generated host code match the rest of the system better. Sometimes +# certain flags give nvcc problems, and this will help you turn the flag +# propagation off. This does not affect the flags supplied directly to nvcc +# via CUDA_NVCC_FLAGS or through the OPTION flags specified through +# CUDA_ADD_LIBRARY, CUDA_ADD_EXECUTABLE, or CUDA_WRAP_SRCS. Flags used for +# shared library compilation are not affected by this flag. +# +# CUDA_VERBOSE_BUILD (Default OFF) +# -- Set to ON to see all the commands used when building the CUDA file. When +# using a Makefile generator the value defaults to VERBOSE (run make +# VERBOSE=1 to see output), although setting CUDA_VERBOSE_BUILD to ON will +# always print the output. +# +# The script creates the following macros (in alphebetical order): +# +# CUDA_ADD_CUFFT_TO_TARGET( cuda_target ) +# -- Adds the cufft library to the target (can be any target). Handles whether +# you are in emulation mode or not. +# +# CUDA_ADD_CUBLAS_TO_TARGET( cuda_target ) +# -- Adds the cublas library to the target (can be any target). Handles +# whether you are in emulation mode or not. +# +# CUDA_ADD_EXECUTABLE( cuda_target file0 file1 ... +# [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [OPTIONS ...] ) +# -- Creates an executable "cuda_target" which is made up of the files +# specified. All of the non CUDA C files are compiled using the standard +# build rules specified by CMAKE and the cuda files are compiled to object +# files using nvcc and the host compiler. In addition CUDA_INCLUDE_DIRS is +# added automatically to include_directories(). Some standard CMake target +# calls can be used on the target after calling this macro +# (e.g. set_target_properties and target_link_libraries), but setting +# properties that adjust compilation flags will not affect code compiled by +# nvcc. Such flags should be modified before calling CUDA_ADD_EXECUTABLE, +# CUDA_ADD_LIBRARY or CUDA_WRAP_SRCS. +# +# CUDA_ADD_LIBRARY( cuda_target file0 file1 ... +# [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [OPTIONS ...] ) +# -- Same as CUDA_ADD_EXECUTABLE except that a library is created. +# +# CUDA_BUILD_CLEAN_TARGET() +# -- Creates a convience target that deletes all the dependency files +# generated. You should make clean after running this target to ensure the +# dependency files get regenerated. +# +# CUDA_COMPILE( generated_files file0 file1 ... [STATIC | SHARED | MODULE] +# [OPTIONS ...] ) +# -- Returns a list of generated files from the input source files to be used +# with ADD_LIBRARY or ADD_EXECUTABLE. +# +# CUDA_COMPILE_PTX( generated_files file0 file1 ... [OPTIONS ...] ) +# -- Returns a list of PTX files generated from the input source files. +# +# CUDA_INCLUDE_DIRECTORIES( path0 path1 ... ) +# -- Sets the directories that should be passed to nvcc +# (e.g. nvcc -Ipath0 -Ipath1 ... ). These paths usually contain other .cu +# files. +# +# CUDA_WRAP_SRCS ( cuda_target format generated_files file0 file1 ... +# [STATIC | SHARED | MODULE] [OPTIONS ...] ) +# -- This is where all the magic happens. CUDA_ADD_EXECUTABLE, +# CUDA_ADD_LIBRARY, CUDA_COMPILE, and CUDA_COMPILE_PTX all call this +# function under the hood. +# +# Given the list of files (file0 file1 ... fileN) this macro generates +# custom commands that generate either PTX or linkable objects (use "PTX" or +# "OBJ" for the format argument to switch). Files that don't end with .cu +# or have the HEADER_FILE_ONLY property are ignored. +# +# The arguments passed in after OPTIONS are extra command line options to +# give to nvcc. You can also specify per configuration options by +# specifying the name of the configuration followed by the options. General +# options must preceed configuration specific options. Not all +# configurations need to be specified, only the ones provided will be used. +# +# OPTIONS -DFLAG=2 "-DFLAG_OTHER=space in flag" +# DEBUG -g +# RELEASE --use_fast_math +# RELWITHDEBINFO --use_fast_math;-g +# MINSIZEREL --use_fast_math +# +# For certain configurations (namely VS generating object files with +# CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE set to ON), no generated file will +# be produced for the given cuda file. This is because when you add the +# cuda file to Visual Studio it knows that this file produces an object file +# and will link in the resulting object file automatically. +# +# This script will also generate a separate cmake script that is used at +# build time to invoke nvcc. This is for several reasons. +# +# 1. nvcc can return negative numbers as return values which confuses +# Visual Studio into thinking that the command succeeded. The script now +# checks the error codes and produces errors when there was a problem. +# +# 2. nvcc has been known to not delete incomplete results when it +# encounters problems. This confuses build systems into thinking the +# target was generated when in fact an unusable file exists. The script +# now deletes the output files if there was an error. +# +# 3. By putting all the options that affect the build into a file and then +# make the build rule dependent on the file, the output files will be +# regenerated when the options change. +# +# This script also looks at optional arguments STATIC, SHARED, or MODULE to +# determine when to target the object compilation for a shared library. +# BUILD_SHARED_LIBS is ignored in CUDA_WRAP_SRCS, but it is respected in +# CUDA_ADD_LIBRARY. On some systems special flags are added for building +# objects intended for shared libraries. A preprocessor macro, +# _EXPORTS is defined when a shared library compilation is +# detected. +# +# Flags passed into add_definitions with -D or /D are passed along to nvcc. +# +# The script defines the following variables: +# +# CUDA_VERSION_MAJOR -- The major version of cuda as reported by nvcc. +# CUDA_VERSION_MINOR -- The minor version. +# CUDA_VERSION +# CUDA_VERSION_STRING -- CUDA_VERSION_MAJOR.CUDA_VERSION_MINOR +# +# CUDA_TOOLKIT_ROOT_DIR -- Path to the CUDA Toolkit (defined if not set). +# CUDA_SDK_ROOT_DIR -- Path to the CUDA SDK. Use this to find files in the +# SDK. This script will not directly support finding +# specific libraries or headers, as that isn't +# supported by NVIDIA. If you want to change +# libraries when the path changes see the +# FindCUDA.cmake script for an example of how to clear +# these variables. There are also examples of how to +# use the CUDA_SDK_ROOT_DIR to locate headers or +# libraries, if you so choose (at your own risk). +# CUDA_INCLUDE_DIRS -- Include directory for cuda headers. Added automatically +# for CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY. +# CUDA_LIBRARIES -- Cuda RT library. +# CUDA_CUFFT_LIBRARIES -- Device or emulation library for the Cuda FFT +# implementation (alternative to: +# CUDA_ADD_CUFFT_TO_TARGET macro) +# CUDA_CUBLAS_LIBRARIES -- Device or emulation library for the Cuda BLAS +# implementation (alterative to: +# CUDA_ADD_CUBLAS_TO_TARGET macro). +# CUDA_curand_LIBRARY -- CUDA Random Number Generation library. +# Only available for CUDA version 3.2+. +# CUDA_cusparse_LIBRARY -- CUDA Sparse Matrix library. +# Only available for CUDA version 3.2+. +# CUDA_npp_LIBRARY -- NVIDIA Performance Primitives library. +# Only available for CUDA version 4.0+. +# CUDA_nvcuvenc_LIBRARY -- CUDA Video Encoder library. +# Only available for CUDA version 3.2+. +# Windows only. +# CUDA_nvcuvid_LIBRARY -- CUDA Video Decoder library. +# Only available for CUDA version 3.2+. +# Windows only. +# +# +# James Bigler, NVIDIA Corp (nvidia.com - jbigler) +# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html +# +# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved. +# +# Copyright (c) 2007-2009 +# Scientific Computing and Imaging Institute, University of Utah +# +# This code is licensed under the MIT License. See the FindCUDA.cmake script +# for the text of the license. + +# The MIT License +# +# License for the specific language governing rights and limitations under +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### + +# FindCUDA.cmake + +# We need to have at least this version to support the VERSION_LESS argument to 'if' (2.6.2) and unset (2.6.3) +cmake_policy(PUSH) +cmake_minimum_required(VERSION 2.6.3) +cmake_policy(POP) + +# This macro helps us find the location of helper files we will need the full path to +macro(CUDA_FIND_HELPER_FILE _name _extension) + set(_full_name "${_name}.${_extension}") + # CMAKE_CURRENT_LIST_FILE contains the full path to the file currently being + # processed. Using this variable, we can pull out the current path, and + # provide a way to get access to the other files we need local to here. + get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) + set(CUDA_${_name} "${CMAKE_CURRENT_LIST_DIR}/FindCUDA/${_full_name}") + if(NOT EXISTS "${CUDA_${_name}}") + set(error_message "${_full_name} not found in ${CMAKE_CURRENT_LIST_DIR}/FindCUDA") + if(CUDA_FIND_REQUIRED) + message(FATAL_ERROR "${error_message}") + else() + if(NOT CUDA_FIND_QUIETLY) + message(STATUS "${error_message}") + endif() + endif() + endif() + # Set this variable as internal, so the user isn't bugged with it. + set(CUDA_${_name} ${CUDA_${_name}} CACHE INTERNAL "Location of ${_full_name}" FORCE) +endmacro(CUDA_FIND_HELPER_FILE) + +##################################################################### +## CUDA_INCLUDE_NVCC_DEPENDENCIES +## + +# So we want to try and include the dependency file if it exists. If +# it doesn't exist then we need to create an empty one, so we can +# include it. + +# If it does exist, then we need to check to see if all the files it +# depends on exist. If they don't then we should clear the dependency +# file and regenerate it later. This covers the case where a header +# file has disappeared or moved. + +macro(CUDA_INCLUDE_NVCC_DEPENDENCIES dependency_file) + set(CUDA_NVCC_DEPEND) + set(CUDA_NVCC_DEPEND_REGENERATE FALSE) + + + # Include the dependency file. Create it first if it doesn't exist . The + # INCLUDE puts a dependency that will force CMake to rerun and bring in the + # new info when it changes. DO NOT REMOVE THIS (as I did and spent a few + # hours figuring out why it didn't work. + if(NOT EXISTS ${dependency_file}) + file(WRITE ${dependency_file} "#FindCUDA.cmake generated file. Do not edit.\n") + endif() + # Always include this file to force CMake to run again next + # invocation and rebuild the dependencies. + #message("including dependency_file = ${dependency_file}") + include(${dependency_file}) + + # Now we need to verify the existence of all the included files + # here. If they aren't there we need to just blank this variable and + # make the file regenerate again. +# if(DEFINED CUDA_NVCC_DEPEND) +# message("CUDA_NVCC_DEPEND set") +# else() +# message("CUDA_NVCC_DEPEND NOT set") +# endif() + if(CUDA_NVCC_DEPEND) + #message("CUDA_NVCC_DEPEND found") + foreach(f ${CUDA_NVCC_DEPEND}) + # message("searching for ${f}") + if(NOT EXISTS ${f}) + #message("file ${f} not found") + set(CUDA_NVCC_DEPEND_REGENERATE TRUE) + endif() + endforeach(f) + else(CUDA_NVCC_DEPEND) + #message("CUDA_NVCC_DEPEND false") + # No dependencies, so regenerate the file. + set(CUDA_NVCC_DEPEND_REGENERATE TRUE) + endif(CUDA_NVCC_DEPEND) + + #message("CUDA_NVCC_DEPEND_REGENERATE = ${CUDA_NVCC_DEPEND_REGENERATE}") + # No incoming dependencies, so we need to generate them. Make the + # output depend on the dependency file itself, which should cause the + # rule to re-run. + if(CUDA_NVCC_DEPEND_REGENERATE) + set(CUDA_NVCC_DEPEND ${dependency_file}) + #message("Generating an empty dependency_file: ${dependency_file}") + file(WRITE ${dependency_file} "#FindCUDA.cmake generated file. Do not edit.\n") + endif(CUDA_NVCC_DEPEND_REGENERATE) + +endmacro(CUDA_INCLUDE_NVCC_DEPENDENCIES) + +############################################################################### +############################################################################### +# Setup variables' defaults +############################################################################### +############################################################################### + +# Allow the user to specify if the device code is supposed to be 32 or 64 bit. +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(CUDA_64_BIT_DEVICE_CODE_DEFAULT ON) +else() + set(CUDA_64_BIT_DEVICE_CODE_DEFAULT OFF) +endif() +option(CUDA_64_BIT_DEVICE_CODE "Compile device code in 64 bit mode" ${CUDA_64_BIT_DEVICE_CODE_DEFAULT}) + +# Attach the build rule to the source file in VS. This option +option(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE "Attach the build rule to the CUDA source file. Enable only when the CUDA source file is added to at most one target." ON) + +# Prints out extra information about the cuda file during compilation +option(CUDA_BUILD_CUBIN "Generate and parse .cubin files in Device mode." OFF) + +# Set whether we are using emulation or device mode. +option(CUDA_BUILD_EMULATION "Build in Emulation mode" OFF) + +# Where to put the generated output. +set(CUDA_GENERATED_OUTPUT_DIR "" CACHE PATH "Directory to put all the output files. If blank it will default to the CMAKE_CURRENT_BINARY_DIR") + +# Parse HOST_COMPILATION mode. +option(CUDA_HOST_COMPILATION_CPP "Generated file extension" ON) + +# Extra user settable flags +set(CUDA_NVCC_FLAGS "" CACHE STRING "Semi-colon delimit multiple arguments.") + +# Propagate the host flags to the host compiler via -Xcompiler +option(CUDA_PROPAGATE_HOST_FLAGS "Propage C/CXX_FLAGS and friends to the host compiler via -Xcompile" ON) + +# Specifies whether the commands used when compiling the .cu file will be printed out. +option(CUDA_VERBOSE_BUILD "Print out the commands run while compiling the CUDA source file. With the Makefile generator this defaults to VERBOSE variable specified on the command line, but can be forced on with this option." OFF) + +mark_as_advanced( + CUDA_64_BIT_DEVICE_CODE + CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE + CUDA_GENERATED_OUTPUT_DIR + CUDA_HOST_COMPILATION_CPP + CUDA_NVCC_FLAGS + CUDA_PROPAGATE_HOST_FLAGS + ) + +# Makefile and similar generators don't define CMAKE_CONFIGURATION_TYPES, so we +# need to add another entry for the CMAKE_BUILD_TYPE. We also need to add the +# standerd set of 4 build types (Debug, MinSizeRel, Release, and RelWithDebInfo) +# for completeness. We need run this loop in order to accomodate the addition +# of extra configuration types. Duplicate entries will be removed by +# REMOVE_DUPLICATES. +set(CUDA_configuration_types ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE} Debug MinSizeRel Release RelWithDebInfo) +list(REMOVE_DUPLICATES CUDA_configuration_types) +foreach(config ${CUDA_configuration_types}) + string(TOUPPER ${config} config_upper) + set(CUDA_NVCC_FLAGS_${config_upper} "" CACHE STRING "Semi-colon delimit multiple arguments.") + mark_as_advanced(CUDA_NVCC_FLAGS_${config_upper}) +endforeach() + +############################################################################### +############################################################################### +# Locate CUDA, Set Build Type, etc. +############################################################################### +############################################################################### + +# Check to see if the CUDA_TOOLKIT_ROOT_DIR and CUDA_SDK_ROOT_DIR have changed, +# if they have then clear the cache variables, so that will be detected again. +if(NOT "${CUDA_TOOLKIT_ROOT_DIR}" STREQUAL "${CUDA_TOOLKIT_ROOT_DIR_INTERNAL}") + unset(CUDA_NVCC_EXECUTABLE CACHE) + unset(CUDA_TOOLKIT_INCLUDE CACHE) + unset(CUDA_CUDART_LIBRARY CACHE) + # Make sure you run this before you unset CUDA_VERSION. + if(CUDA_VERSION VERSION_EQUAL "3.0") + # This only existed in the 3.0 version of the CUDA toolkit + unset(CUDA_CUDARTEMU_LIBRARY CACHE) + endif() + unset(CUDA_VERSION CACHE) + unset(CUDA_CUDA_LIBRARY CACHE) + unset(CUDA_cublas_LIBRARY CACHE) + unset(CUDA_cublasemu_LIBRARY CACHE) + unset(CUDA_cufft_LIBRARY CACHE) + unset(CUDA_cufftemu_LIBRARY CACHE) + unset(CUDA_curand_LIBRARY CACHE) + unset(CUDA_cusparse_LIBRARY CACHE) + unset(CUDA_npp_LIBRARY CACHE) + unset(CUDA_nvcuvenc_LIBRARY CACHE) + unset(CUDA_nvcuvid_LIBRARY CACHE) +endif() + +if(NOT "${CUDA_SDK_ROOT_DIR}" STREQUAL "${CUDA_SDK_ROOT_DIR_INTERNAL}") + # No specific variables to catch. Use this kind of code before calling + # find_package(CUDA) to clean up any variables that may depend on this path. + + # unset(MY_SPECIAL_CUDA_SDK_INCLUDE_DIR CACHE) + # unset(MY_SPECIAL_CUDA_SDK_LIBRARY CACHE) +endif() + +# Search for the cuda distribution. +if(NOT CUDA_TOOLKIT_ROOT_DIR) + + # Search in the CUDA_BIN_PATH first. + find_path(CUDA_TOOLKIT_ROOT_DIR + NAMES nvcc nvcc.exe + PATHS + ENV CUDA_PATH + ENV CUDA_BIN_PATH + PATH_SUFFIXES bin bin64 + DOC "Toolkit location." + NO_DEFAULT_PATH + ) + # Now search default paths + find_path(CUDA_TOOLKIT_ROOT_DIR + NAMES nvcc nvcc.exe + PATHS /usr/local/bin + /usr/local/cuda/bin + DOC "Toolkit location." + ) + + if (CUDA_TOOLKIT_ROOT_DIR) + string(REGEX REPLACE "[/\\\\]?bin[64]*[/\\\\]?$" "" CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT_DIR}) + # We need to force this back into the cache. + set(CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT_DIR} CACHE PATH "Toolkit location." FORCE) + endif(CUDA_TOOLKIT_ROOT_DIR) + if (NOT EXISTS ${CUDA_TOOLKIT_ROOT_DIR}) + if(CUDA_FIND_REQUIRED) + message(FATAL_ERROR "Specify CUDA_TOOLKIT_ROOT_DIR") + elseif(NOT CUDA_FIND_QUIETLY) + message("CUDA_TOOLKIT_ROOT_DIR not found or specified") + endif() + endif (NOT EXISTS ${CUDA_TOOLKIT_ROOT_DIR}) +endif (NOT CUDA_TOOLKIT_ROOT_DIR) + +# CUDA_NVCC_EXECUTABLE +find_program(CUDA_NVCC_EXECUTABLE + NAMES nvcc + PATHS "${CUDA_TOOLKIT_ROOT_DIR}" + ENV CUDA_PATH + ENV CUDA_BIN_PATH + PATH_SUFFIXES bin bin64 + NO_DEFAULT_PATH + ) +# Search default search paths, after we search our own set of paths. +find_program(CUDA_NVCC_EXECUTABLE nvcc) +mark_as_advanced(CUDA_NVCC_EXECUTABLE) + +if(CUDA_NVCC_EXECUTABLE AND NOT CUDA_VERSION) + # Compute the version. + execute_process (COMMAND ${CUDA_NVCC_EXECUTABLE} "--version" OUTPUT_VARIABLE NVCC_OUT) + string(REGEX REPLACE ".*release ([0-9]+)\\.([0-9]+).*" "\\1" CUDA_VERSION_MAJOR ${NVCC_OUT}) + string(REGEX REPLACE ".*release ([0-9]+)\\.([0-9]+).*" "\\2" CUDA_VERSION_MINOR ${NVCC_OUT}) + set(CUDA_VERSION "${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR}" CACHE STRING "Version of CUDA as computed from nvcc.") + mark_as_advanced(CUDA_VERSION) +else() + # Need to set these based off of the cached value + string(REGEX REPLACE "([0-9]+)\\.([0-9]+).*" "\\1" CUDA_VERSION_MAJOR "${CUDA_VERSION}") + string(REGEX REPLACE "([0-9]+)\\.([0-9]+).*" "\\2" CUDA_VERSION_MINOR "${CUDA_VERSION}") +endif() + +# Always set this convenience variable +set(CUDA_VERSION_STRING "${CUDA_VERSION}") + +# CUDA_TOOLKIT_INCLUDE +find_path(CUDA_TOOLKIT_INCLUDE + device_functions.h # Header included in toolkit + PATHS "${CUDA_TOOLKIT_ROOT_DIR}" + ENV CUDA_PATH + ENV CUDA_INC_PATH + PATH_SUFFIXES include + NO_DEFAULT_PATH + ) +# Search default search paths, after we search our own set of paths. +find_path(CUDA_TOOLKIT_INCLUDE device_functions.h) +mark_as_advanced(CUDA_TOOLKIT_INCLUDE) + +# Set the user list of include dir to nothing to initialize it. +set (CUDA_NVCC_INCLUDE_ARGS_USER "") +set (CUDA_INCLUDE_DIRS ${CUDA_TOOLKIT_INCLUDE}) + +macro(FIND_LIBRARY_LOCAL_FIRST _var _names _doc) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + # CUDA 3.2+ on Windows moved the library directoryies, so we need the new + # and old paths. + set(_cuda_64bit_lib_dir "lib/x64" "lib64" ) + endif() + # CUDA 3.2+ on Windows moved the library directories, so we need to new + # (lib/Win32) and the old path (lib). + find_library(${_var} + NAMES ${_names} + PATHS "${CUDA_TOOLKIT_ROOT_DIR}" + ENV CUDA_PATH + ENV CUDA_LIB_PATH + PATH_SUFFIXES ${_cuda_64bit_lib_dir} "lib/Win32" "lib" + DOC ${_doc} + NO_DEFAULT_PATH + ) + # Search default search paths, after we search our own set of paths. + find_library(${_var} NAMES ${_names} DOC ${_doc}) +endmacro() + +# CUDA_LIBRARIES +find_library_local_first(CUDA_CUDART_LIBRARY cudart "\"cudart\" library") +if(CUDA_VERSION VERSION_EQUAL "3.0") + # The cudartemu library only existed for the 3.0 version of CUDA. + find_library_local_first(CUDA_CUDARTEMU_LIBRARY cudartemu "\"cudartemu\" library") + mark_as_advanced( + CUDA_CUDARTEMU_LIBRARY + ) +endif() +# If we are using emulation mode and we found the cudartemu library then use +# that one instead of cudart. +if(CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY) + set(CUDA_LIBRARIES ${CUDA_CUDARTEMU_LIBRARY}) +else() + set(CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY}) +endif() +if(APPLE) + # We need to add the path to cudart to the linker using rpath, since the + # library name for the cuda libraries is prepended with @rpath. + if(CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY) + get_filename_component(_cuda_path_to_cudart "${CUDA_CUDARTEMU_LIBRARY}" PATH) + else() + get_filename_component(_cuda_path_to_cudart "${CUDA_CUDART_LIBRARY}" PATH) + endif() + if(_cuda_path_to_cudart) + list(APPEND CUDA_LIBRARIES -Wl,-rpath "-Wl,${_cuda_path_to_cudart}") + endif() +endif() + +# 1.1 toolkit on linux doesn't appear to have a separate library on +# some platforms. +find_library_local_first(CUDA_CUDA_LIBRARY cuda "\"cuda\" library (older versions only).") + +# Add cuda library to the link line only if it is found. +if (CUDA_CUDA_LIBRARY) + set(CUDA_LIBRARIES ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) +endif(CUDA_CUDA_LIBRARY) + +mark_as_advanced( + CUDA_CUDA_LIBRARY + CUDA_CUDART_LIBRARY + ) + +####################### +# Look for some of the toolkit helper libraries +macro(FIND_CUDA_HELPER_LIBS _name) + find_library_local_first(CUDA_${_name}_LIBRARY ${_name} "\"${_name}\" library") + mark_as_advanced(CUDA_${_name}_LIBRARY) +endmacro(FIND_CUDA_HELPER_LIBS) + +####################### +# Disable emulation for v3.1 onward +if(CUDA_VERSION VERSION_GREATER "3.0") + if(CUDA_BUILD_EMULATION) + message(FATAL_ERROR "CUDA_BUILD_EMULATION is not supported in version 3.1 and onwards. You must disable it to proceed. You have version ${CUDA_VERSION}.") + endif() +endif() + +# Search for additional CUDA toolkit libraries. +if(CUDA_VERSION VERSION_LESS "3.1") + # Emulation libraries aren't available in version 3.1 onward. + find_cuda_helper_libs(cufftemu) + find_cuda_helper_libs(cublasemu) +endif() +find_cuda_helper_libs(cufft) +find_cuda_helper_libs(cublas) +if(NOT CUDA_VERSION VERSION_LESS "3.2") + # cusparse showed up in version 3.2 + find_cuda_helper_libs(cusparse) + find_cuda_helper_libs(curand) + if (WIN32) + find_cuda_helper_libs(nvcuvenc) + find_cuda_helper_libs(nvcuvid) + endif() +endif() +if(NOT CUDA_VERSION VERSION_LESS "4.0") + find_cuda_helper_libs(npp) +endif() + +if (CUDA_BUILD_EMULATION) + set(CUDA_CUFFT_LIBRARIES ${CUDA_cufftemu_LIBRARY}) + set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublasemu_LIBRARY}) +else() + set(CUDA_CUFFT_LIBRARIES ${CUDA_cufft_LIBRARY}) + set(CUDA_CUBLAS_LIBRARIES ${CUDA_cublas_LIBRARY}) +endif() + +######################## +# Look for the SDK stuff. As of CUDA 3.0 NVSDKCUDA_ROOT has been replaced with +# NVSDKCOMPUTE_ROOT with the old CUDA C contents moved into the C subdirectory +find_path(CUDA_SDK_ROOT_DIR common/inc/cutil.h + "$ENV{NVSDKCOMPUTE_ROOT}/C" + "$ENV{NVSDKCUDA_ROOT}" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]" + "/Developer/GPU\ Computing/C" + ) + +# Keep the CUDA_SDK_ROOT_DIR first in order to be able to override the +# environment variables. +set(CUDA_SDK_SEARCH_PATH + "${CUDA_SDK_ROOT_DIR}" + "${CUDA_TOOLKIT_ROOT_DIR}/local/NVSDK0.2" + "${CUDA_TOOLKIT_ROOT_DIR}/NVSDK0.2" + "${CUDA_TOOLKIT_ROOT_DIR}/NV_CUDA_SDK" + "$ENV{HOME}/NVIDIA_CUDA_SDK" + "$ENV{HOME}/NVIDIA_CUDA_SDK_MACOSX" + "/Developer/CUDA" + ) + +# Example of how to find an include file from the CUDA_SDK_ROOT_DIR + +# find_path(CUDA_CUT_INCLUDE_DIR +# cutil.h +# PATHS ${CUDA_SDK_SEARCH_PATH} +# PATH_SUFFIXES "common/inc" +# DOC "Location of cutil.h" +# NO_DEFAULT_PATH +# ) +# # Now search system paths +# find_path(CUDA_CUT_INCLUDE_DIR cutil.h DOC "Location of cutil.h") + +# mark_as_advanced(CUDA_CUT_INCLUDE_DIR) + + +# Example of how to find a library in the CUDA_SDK_ROOT_DIR + +# # cutil library is called cutil64 for 64 bit builds on windows. We don't want +# # to get these confused, so we are setting the name based on the word size of +# # the build. + +# if(CMAKE_SIZEOF_VOID_P EQUAL 8) +# set(cuda_cutil_name cutil64) +# else(CMAKE_SIZEOF_VOID_P EQUAL 8) +# set(cuda_cutil_name cutil32) +# endif(CMAKE_SIZEOF_VOID_P EQUAL 8) + +# find_library(CUDA_CUT_LIBRARY +# NAMES cutil ${cuda_cutil_name} +# PATHS ${CUDA_SDK_SEARCH_PATH} +# # The new version of the sdk shows up in common/lib, but the old one is in lib +# PATH_SUFFIXES "common/lib" "lib" +# DOC "Location of cutil library" +# NO_DEFAULT_PATH +# ) +# # Now search system paths +# find_library(CUDA_CUT_LIBRARY NAMES cutil ${cuda_cutil_name} DOC "Location of cutil library") +# mark_as_advanced(CUDA_CUT_LIBRARY) +# set(CUDA_CUT_LIBRARIES ${CUDA_CUT_LIBRARY}) + + + +############################# +# Check for required components +set(CUDA_FOUND TRUE) + +set(CUDA_TOOLKIT_ROOT_DIR_INTERNAL "${CUDA_TOOLKIT_ROOT_DIR}" CACHE INTERNAL + "This is the value of the last time CUDA_TOOLKIT_ROOT_DIR was set successfully." FORCE) +set(CUDA_SDK_ROOT_DIR_INTERNAL "${CUDA_SDK_ROOT_DIR}" CACHE INTERNAL + "This is the value of the last time CUDA_SDK_ROOT_DIR was set successfully." FORCE) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +find_package_handle_standard_args(CUDA + REQUIRED_VARS + CUDA_TOOLKIT_ROOT_DIR + CUDA_NVCC_EXECUTABLE + CUDA_INCLUDE_DIRS + CUDA_CUDART_LIBRARY + VERSION_VAR + CUDA_VERSION + ) + + + +############################################################################### +############################################################################### +# Macros +############################################################################### +############################################################################### + +############################################################################### +# Add include directories to pass to the nvcc command. +macro(CUDA_INCLUDE_DIRECTORIES) + foreach(dir ${ARGN}) + list(APPEND CUDA_NVCC_INCLUDE_ARGS_USER -I${dir}) + endforeach(dir ${ARGN}) +endmacro(CUDA_INCLUDE_DIRECTORIES) + + +############################################################################## +cuda_find_helper_file(parse_cubin cmake) +cuda_find_helper_file(make2cmake cmake) +cuda_find_helper_file(run_nvcc cmake) + +############################################################################## +# Separate the OPTIONS out from the sources +# +macro(CUDA_GET_SOURCES_AND_OPTIONS _sources _cmake_options _options) + set( ${_sources} ) + set( ${_cmake_options} ) + set( ${_options} ) + set( _found_options FALSE ) + foreach(arg ${ARGN}) + if(arg STREQUAL "OPTIONS") + set( _found_options TRUE ) + elseif( + arg STREQUAL "WIN32" OR + arg STREQUAL "MACOSX_BUNDLE" OR + arg STREQUAL "EXCLUDE_FROM_ALL" OR + arg STREQUAL "STATIC" OR + arg STREQUAL "SHARED" OR + arg STREQUAL "MODULE" + ) + list(APPEND ${_cmake_options} ${arg}) + else() + if ( _found_options ) + list(APPEND ${_options} ${arg}) + else() + # Assume this is a file + list(APPEND ${_sources} ${arg}) + endif() + endif() + endforeach() +endmacro() + +############################################################################## +# Parse the OPTIONS from ARGN and set the variables prefixed by _option_prefix +# +macro(CUDA_PARSE_NVCC_OPTIONS _option_prefix) + set( _found_config ) + foreach(arg ${ARGN}) + # Determine if we are dealing with a perconfiguration flag + foreach(config ${CUDA_configuration_types}) + string(TOUPPER ${config} config_upper) + if (arg STREQUAL "${config_upper}") + set( _found_config _${arg}) + # Set arg to nothing to keep it from being processed further + set( arg ) + endif() + endforeach() + + if ( arg ) + list(APPEND ${_option_prefix}${_found_config} "${arg}") + endif() + endforeach() +endmacro() + +############################################################################## +# Helper to add the include directory for CUDA only once +function(CUDA_ADD_CUDA_INCLUDE_ONCE) + get_directory_property(_include_directories INCLUDE_DIRECTORIES) + set(_add TRUE) + if(_include_directories) + foreach(dir ${_include_directories}) + if("${dir}" STREQUAL "${CUDA_INCLUDE_DIRS}") + set(_add FALSE) + endif() + endforeach() + endif() + if(_add) + include_directories(${CUDA_INCLUDE_DIRS}) + endif() +endfunction() + +function(CUDA_BUILD_SHARED_LIBRARY shared_flag) + set(cmake_args ${ARGN}) + # If SHARED, MODULE, or STATIC aren't already in the list of arguments, then + # add SHARED or STATIC based on the value of BUILD_SHARED_LIBS. + list(FIND cmake_args SHARED _cuda_found_SHARED) + list(FIND cmake_args MODULE _cuda_found_MODULE) + list(FIND cmake_args STATIC _cuda_found_STATIC) + if( _cuda_found_SHARED GREATER -1 OR + _cuda_found_MODULE GREATER -1 OR + _cuda_found_STATIC GREATER -1) + set(_cuda_build_shared_libs) + else() + if (BUILD_SHARED_LIBS) + set(_cuda_build_shared_libs SHARED) + else() + set(_cuda_build_shared_libs STATIC) + endif() + endif() + set(${shared_flag} ${_cuda_build_shared_libs} PARENT_SCOPE) +endfunction() + +############################################################################## +# Helper to avoid clashes of files with the same basename but different paths. +# This doesn't attempt to do exactly what CMake internals do, which is to only +# add this path when there is a conflict, since by the time a second collision +# in names is detected it's already too late to fix the first one. For +# consistency sake the relative path will be added to all files. +function(CUDA_COMPUTE_BUILD_PATH path build_path) + #message("CUDA_COMPUTE_BUILD_PATH([${path}] ${build_path})") + # Only deal with CMake style paths from here on out + file(TO_CMAKE_PATH "${path}" bpath) + if (IS_ABSOLUTE "${bpath}") + # Absolute paths are generally unnessary, especially if something like + # FILE(GLOB_RECURSE) is used to pick up the files. + file(RELATIVE_PATH bpath "${CMAKE_CURRENT_SOURCE_DIR}" "${bpath}") + endif() + + # This recipie is from cmLocalGenerator::CreateSafeUniqueObjectFileName in the + # CMake source. + + # Remove leading / + string(REGEX REPLACE "^[/]+" "" bpath "${bpath}") + # Avoid absolute paths by removing ':' + string(REPLACE ":" "_" bpath "${bpath}") + # Avoid relative paths that go up the tree + string(REPLACE "../" "__/" bpath "${bpath}") + # Avoid spaces + string(REPLACE " " "_" bpath "${bpath}") + + # Strip off the filename. I wait until here to do it, since removin the + # basename can make a path that looked like path/../basename turn into + # path/.. (notice the trailing slash). + get_filename_component(bpath "${bpath}" PATH) + + set(${build_path} "${bpath}" PARENT_SCOPE) + #message("${build_path} = ${bpath}") +endfunction() + +############################################################################## +# This helper macro populates the following variables and setups up custom +# commands and targets to invoke the nvcc compiler to generate C or PTX source +# dependent upon the format parameter. The compiler is invoked once with -M +# to generate a dependency file and a second time with -cuda or -ptx to generate +# a .cpp or .ptx file. +# INPUT: +# cuda_target - Target name +# format - PTX or OBJ +# FILE1 .. FILEN - The remaining arguments are the sources to be wrapped. +# OPTIONS - Extra options to NVCC +# OUTPUT: +# generated_files - List of generated files +############################################################################## +############################################################################## + +macro(CUDA_WRAP_SRCS cuda_target format generated_files) + + if( ${format} MATCHES "PTX" ) + set( compile_to_ptx ON ) + elseif( ${format} MATCHES "OBJ") + set( compile_to_ptx OFF ) + else() + message( FATAL_ERROR "Invalid format flag passed to CUDA_WRAP_SRCS: '${format}'. Use OBJ or PTX.") + endif() + + # Set up all the command line flags here, so that they can be overridden on a per target basis. + + set(nvcc_flags "") + + # Emulation if the card isn't present. + if (CUDA_BUILD_EMULATION) + # Emulation. + set(nvcc_flags ${nvcc_flags} --device-emulation -D_DEVICEEMU -g) + else(CUDA_BUILD_EMULATION) + # Device mode. No flags necessary. + endif(CUDA_BUILD_EMULATION) + + if(CUDA_HOST_COMPILATION_CPP) + set(CUDA_C_OR_CXX CXX) + else(CUDA_HOST_COMPILATION_CPP) + if(CUDA_VERSION VERSION_LESS "3.0") + set(nvcc_flags ${nvcc_flags} --host-compilation C) + else() + message(WARNING "--host-compilation flag is deprecated in CUDA version >= 3.0. Removing --host-compilation C flag" ) + endif() + set(CUDA_C_OR_CXX C) + endif(CUDA_HOST_COMPILATION_CPP) + + set(generated_extension ${CMAKE_${CUDA_C_OR_CXX}_OUTPUT_EXTENSION}) + + if(CUDA_64_BIT_DEVICE_CODE) + set(nvcc_flags ${nvcc_flags} -m64) + else() + set(nvcc_flags ${nvcc_flags} -m32) + endif() + + # This needs to be passed in at this stage, because VS needs to fill out the + # value of VCInstallDir from within VS. + if(CMAKE_GENERATOR MATCHES "Visual Studio") + if( CMAKE_SIZEOF_VOID_P EQUAL 8 ) + # Add nvcc flag for 64b Windows + set(ccbin_flags -D "\"CCBIN:PATH=$(VCInstallDir)bin\"" ) + endif() + endif() + + # Figure out which configure we will use and pass that in as an argument to + # the script. We need to defer the decision until compilation time, because + # for VS projects we won't know if we are making a debug or release build + # until build time. + if(CMAKE_GENERATOR MATCHES "Visual Studio") + set( CUDA_build_configuration "$(ConfigurationName)" ) + else() + set( CUDA_build_configuration "${CMAKE_BUILD_TYPE}") + endif() + + # Initialize our list of includes with the user ones followed by the CUDA system ones. + set(CUDA_NVCC_INCLUDE_ARGS ${CUDA_NVCC_INCLUDE_ARGS_USER} "-I${CUDA_INCLUDE_DIRS}") + # Get the include directories for this directory and use them for our nvcc command. + get_directory_property(CUDA_NVCC_INCLUDE_DIRECTORIES INCLUDE_DIRECTORIES) + if(CUDA_NVCC_INCLUDE_DIRECTORIES) + foreach(dir ${CUDA_NVCC_INCLUDE_DIRECTORIES}) + list(APPEND CUDA_NVCC_INCLUDE_ARGS -I${dir}) + endforeach() + endif() + + # Reset these variables + set(CUDA_WRAP_OPTION_NVCC_FLAGS) + foreach(config ${CUDA_configuration_types}) + string(TOUPPER ${config} config_upper) + set(CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper}) + endforeach() + + CUDA_GET_SOURCES_AND_OPTIONS(_cuda_wrap_sources _cuda_wrap_cmake_options _cuda_wrap_options ${ARGN}) + CUDA_PARSE_NVCC_OPTIONS(CUDA_WRAP_OPTION_NVCC_FLAGS ${_cuda_wrap_options}) + + # Figure out if we are building a shared library. BUILD_SHARED_LIBS is + # respected in CUDA_ADD_LIBRARY. + set(_cuda_build_shared_libs FALSE) + # SHARED, MODULE + list(FIND _cuda_wrap_cmake_options SHARED _cuda_found_SHARED) + list(FIND _cuda_wrap_cmake_options MODULE _cuda_found_MODULE) + if(_cuda_found_SHARED GREATER -1 OR _cuda_found_MODULE GREATER -1) + set(_cuda_build_shared_libs TRUE) + endif() + # STATIC + list(FIND _cuda_wrap_cmake_options STATIC _cuda_found_STATIC) + if(_cuda_found_STATIC GREATER -1) + set(_cuda_build_shared_libs FALSE) + endif() + + # CUDA_HOST_FLAGS + if(_cuda_build_shared_libs) + # If we are setting up code for a shared library, then we need to add extra flags for + # compiling objects for shared libraries. + set(CUDA_HOST_SHARED_FLAGS ${CMAKE_SHARED_LIBRARY_${CUDA_C_OR_CXX}_FLAGS}) + else() + set(CUDA_HOST_SHARED_FLAGS) + endif() + # Only add the CMAKE_{C,CXX}_FLAGS if we are propagating host flags. We + # always need to set the SHARED_FLAGS, though. + if(CUDA_PROPAGATE_HOST_FLAGS) + set(CUDA_HOST_FLAGS "set(CMAKE_HOST_FLAGS ${CMAKE_${CUDA_C_OR_CXX}_FLAGS} ${CUDA_HOST_SHARED_FLAGS})") + else() + set(CUDA_HOST_FLAGS "set(CMAKE_HOST_FLAGS ${CUDA_HOST_SHARED_FLAGS})") + endif() + + set(CUDA_NVCC_FLAGS_CONFIG "# Build specific configuration flags") + # Loop over all the configuration types to generate appropriate flags for run_nvcc.cmake + foreach(config ${CUDA_configuration_types}) + string(TOUPPER ${config} config_upper) + # CMAKE_FLAGS are strings and not lists. By not putting quotes around CMAKE_FLAGS + # we convert the strings to lists (like we want). + + if(CUDA_PROPAGATE_HOST_FLAGS) + # nvcc chokes on -g3 in versions previous to 3.0, so replace it with -g + if(CMAKE_COMPILER_IS_GNUCC AND CUDA_VERSION VERSION_LESS "3.0") + string(REPLACE "-g3" "-g" _cuda_C_FLAGS "${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}") + else() + set(_cuda_C_FLAGS "${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}}") + endif() + + set(CUDA_HOST_FLAGS "${CUDA_HOST_FLAGS}\nset(CMAKE_HOST_FLAGS_${config_upper} ${_cuda_C_FLAGS})") + endif() + + # Note that if we ever want CUDA_NVCC_FLAGS_ to be string (instead of a list + # like it is currently), we can remove the quotes around the + # ${CUDA_NVCC_FLAGS_${config_upper}} variable like the CMAKE_HOST_FLAGS_ variable. + set(CUDA_NVCC_FLAGS_CONFIG "${CUDA_NVCC_FLAGS_CONFIG}\nset(CUDA_NVCC_FLAGS_${config_upper} ${CUDA_NVCC_FLAGS_${config_upper}} ;; ${CUDA_WRAP_OPTION_NVCC_FLAGS_${config_upper}})") + endforeach() + + if(compile_to_ptx) + # Don't use any of the host compilation flags for PTX targets. + set(CUDA_HOST_FLAGS) + set(CUDA_NVCC_FLAGS_CONFIG) + endif() + + # Get the list of definitions from the directory property + get_directory_property(CUDA_NVCC_DEFINITIONS COMPILE_DEFINITIONS) + if(CUDA_NVCC_DEFINITIONS) + foreach(_definition ${CUDA_NVCC_DEFINITIONS}) + list(APPEND nvcc_flags "-D${_definition}") + endforeach() + endif() + + if(_cuda_build_shared_libs) + list(APPEND nvcc_flags "-D${cuda_target}_EXPORTS") + endif() + + # Reset the output variable + set(_cuda_wrap_generated_files "") + + # Iterate over the macro arguments and create custom + # commands for all the .cu files. + foreach(file ${ARGN}) + # Ignore any file marked as a HEADER_FILE_ONLY + get_source_file_property(_is_header ${file} HEADER_FILE_ONLY) + if(${file} MATCHES ".*\\.cu$" AND NOT _is_header) + + # Determine output directory + cuda_compute_build_path("${file}" cuda_build_path) + set(cuda_compile_intermediate_directory "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${cuda_target}.dir/${cuda_build_path}") + if(CUDA_GENERATED_OUTPUT_DIR) + set(cuda_compile_output_dir "${CUDA_GENERATED_OUTPUT_DIR}") + else() + if ( compile_to_ptx ) + set(cuda_compile_output_dir "${CMAKE_CURRENT_BINARY_DIR}") + else() + set(cuda_compile_output_dir "${cuda_compile_intermediate_directory}") + endif() + endif() + + # Add a custom target to generate a c or ptx file. ###################### + + get_filename_component( basename ${file} NAME ) + if( compile_to_ptx ) + set(generated_file_path "${cuda_compile_output_dir}") + set(generated_file_basename "${cuda_target}_generated_${basename}.ptx") + set(format_flag "-ptx") + file(MAKE_DIRECTORY "${cuda_compile_output_dir}") + else( compile_to_ptx ) + set(generated_file_path "${cuda_compile_output_dir}/${CMAKE_CFG_INTDIR}") + set(generated_file_basename "${cuda_target}_generated_${basename}${generated_extension}") + set(format_flag "-c") + endif( compile_to_ptx ) + + # Set all of our file names. Make sure that whatever filenames that have + # generated_file_path in them get passed in through as a command line + # argument, so that the ${CMAKE_CFG_INTDIR} gets expanded at run time + # instead of configure time. + set(generated_file "${generated_file_path}/${generated_file_basename}") + set(cmake_dependency_file "${cuda_compile_intermediate_directory}/${generated_file_basename}.depend") + set(NVCC_generated_dependency_file "${cuda_compile_intermediate_directory}/${generated_file_basename}.NVCC-depend") + set(generated_cubin_file "${generated_file_path}/${generated_file_basename}.cubin.txt") + set(custom_target_script "${cuda_compile_intermediate_directory}/${generated_file_basename}.cmake") + + # Setup properties for obj files: + if( NOT compile_to_ptx ) + set_source_files_properties("${generated_file}" + PROPERTIES + EXTERNAL_OBJECT true # This is an object file not to be compiled, but only be linked. + ) + endif() + + # Don't add CMAKE_CURRENT_SOURCE_DIR if the path is already an absolute path. + get_filename_component(file_path "${file}" PATH) + if(IS_ABSOLUTE "${file_path}") + set(source_file "${file}") + else() + set(source_file "${CMAKE_CURRENT_SOURCE_DIR}/${file}") + endif() + + # Bring in the dependencies. Creates a variable CUDA_NVCC_DEPEND ####### + cuda_include_nvcc_dependencies(${cmake_dependency_file}) + + # Convience string for output ########################################### + if(CUDA_BUILD_EMULATION) + set(cuda_build_type "Emulation") + else(CUDA_BUILD_EMULATION) + set(cuda_build_type "Device") + endif(CUDA_BUILD_EMULATION) + + # Build the NVCC made dependency file ################################### + set(build_cubin OFF) + if ( NOT CUDA_BUILD_EMULATION AND CUDA_BUILD_CUBIN ) + if ( NOT compile_to_ptx ) + set ( build_cubin ON ) + endif( NOT compile_to_ptx ) + endif( NOT CUDA_BUILD_EMULATION AND CUDA_BUILD_CUBIN ) + + # Configure the build script + configure_file("${CUDA_run_nvcc}" "${custom_target_script}" @ONLY) + + # So if a user specifies the same cuda file as input more than once, you + # can have bad things happen with dependencies. Here we check an option + # to see if this is the behavior they want. + if(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE) + set(main_dep MAIN_DEPENDENCY ${source_file}) + else() + set(main_dep DEPENDS ${source_file}) + endif() + + if(CUDA_VERBOSE_BUILD) + set(verbose_output ON) + elseif(CMAKE_GENERATOR MATCHES "Makefiles") + set(verbose_output "$(VERBOSE)") + else() + set(verbose_output OFF) + endif() + + # Create up the comment string + file(RELATIVE_PATH generated_file_relative_path "${CMAKE_BINARY_DIR}" "${generated_file}") + if(compile_to_ptx) + set(cuda_build_comment_string "Building NVCC ptx file ${generated_file_relative_path}") + else() + set(cuda_build_comment_string "Building NVCC (${cuda_build_type}) object ${generated_file_relative_path}") + endif() + + # Build the generated file and dependency file ########################## + add_custom_command( + OUTPUT ${generated_file} + # These output files depend on the source_file and the contents of cmake_dependency_file + ${main_dep} + DEPENDS ${CUDA_NVCC_DEPEND} + DEPENDS ${custom_target_script} + # Make sure the output directory exists before trying to write to it. + COMMAND ${CMAKE_COMMAND} -E make_directory "${generated_file_path}" + COMMAND ${CMAKE_COMMAND} ARGS + -D verbose:BOOL=${verbose_output} + ${ccbin_flags} + -D build_configuration:STRING=${CUDA_build_configuration} + -D "generated_file:STRING=${generated_file}" + -D "generated_cubin_file:STRING=${generated_cubin_file}" + -P "${custom_target_script}" + WORKING_DIRECTORY "${cuda_compile_intermediate_directory}" + COMMENT "${cuda_build_comment_string}" + ) + + # Make sure the build system knows the file is generated. + set_source_files_properties(${generated_file} PROPERTIES GENERATED TRUE) + + # Don't add the object file to the list of generated files if we are using + # visual studio and we are attaching the build rule to the cuda file. VS + # will add our object file to the linker automatically for us. + set(cuda_add_generated_file TRUE) + + if(NOT compile_to_ptx AND CMAKE_GENERATOR MATCHES "Visual Studio" AND CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE) + # Visual Studio 8 crashes when you close the solution when you don't add the object file. + if(NOT CMAKE_GENERATOR MATCHES "Visual Studio 8") + #message("Not adding ${generated_file}") + set(cuda_add_generated_file FALSE) + endif() + endif() + + if(cuda_add_generated_file) + list(APPEND _cuda_wrap_generated_files ${generated_file}) + endif() + + # Add the other files that we want cmake to clean on a cleanup ########## + list(APPEND CUDA_ADDITIONAL_CLEAN_FILES "${cmake_dependency_file}") + list(REMOVE_DUPLICATES CUDA_ADDITIONAL_CLEAN_FILES) + set(CUDA_ADDITIONAL_CLEAN_FILES ${CUDA_ADDITIONAL_CLEAN_FILES} CACHE INTERNAL "List of intermediate files that are part of the cuda dependency scanning.") + + endif(${file} MATCHES ".*\\.cu$" AND NOT _is_header) + endforeach(file) + + # Set the return parameter + set(${generated_files} ${_cuda_wrap_generated_files}) +endmacro(CUDA_WRAP_SRCS) + + +############################################################################### +############################################################################### +# ADD LIBRARY +############################################################################### +############################################################################### +macro(CUDA_ADD_LIBRARY cuda_target) + + CUDA_ADD_CUDA_INCLUDE_ONCE() + + # Separate the sources from the options + CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN}) + CUDA_BUILD_SHARED_LIBRARY(_cuda_shared_flag ${ARGN}) + # Create custom commands and targets for each file. + CUDA_WRAP_SRCS( ${cuda_target} OBJ _generated_files ${_sources} + ${_cmake_options} ${_cuda_shared_flag} + OPTIONS ${_options} ) + + # Add the library. + add_library(${cuda_target} ${_cmake_options} + ${_generated_files} + ${_sources} + ) + + target_link_libraries(${cuda_target} + ${CUDA_LIBRARIES} + ) + + # We need to set the linker language based on what the expected generated file + # would be. CUDA_C_OR_CXX is computed based on CUDA_HOST_COMPILATION_CPP. + set_target_properties(${cuda_target} + PROPERTIES + LINKER_LANGUAGE ${CUDA_C_OR_CXX} + ) + +endmacro(CUDA_ADD_LIBRARY cuda_target) + + +############################################################################### +############################################################################### +# ADD EXECUTABLE +############################################################################### +############################################################################### +macro(CUDA_ADD_EXECUTABLE cuda_target) + + CUDA_ADD_CUDA_INCLUDE_ONCE() + + # Separate the sources from the options + CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN}) + # Create custom commands and targets for each file. + CUDA_WRAP_SRCS( ${cuda_target} OBJ _generated_files ${_sources} OPTIONS ${_options} ) + + # Add the library. + add_executable(${cuda_target} ${_cmake_options} + ${_generated_files} + ${_sources} + ) + + target_link_libraries(${cuda_target} + ${CUDA_LIBRARIES} + ) + + # We need to set the linker language based on what the expected generated file + # would be. CUDA_C_OR_CXX is computed based on CUDA_HOST_COMPILATION_CPP. + set_target_properties(${cuda_target} + PROPERTIES + LINKER_LANGUAGE ${CUDA_C_OR_CXX} + ) + +endmacro(CUDA_ADD_EXECUTABLE cuda_target) + + +############################################################################### +############################################################################### +# CUDA COMPILE +############################################################################### +############################################################################### +macro(CUDA_COMPILE generated_files) + + # Separate the sources from the options + CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN}) + # Create custom commands and targets for each file. + CUDA_WRAP_SRCS( cuda_compile OBJ _generated_files ${_sources} ${_cmake_options} + OPTIONS ${_options} ) + + set( ${generated_files} ${_generated_files}) + +endmacro(CUDA_COMPILE) + + +############################################################################### +############################################################################### +# CUDA COMPILE PTX +############################################################################### +############################################################################### +macro(CUDA_COMPILE_PTX generated_files) + + # Separate the sources from the options + CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN}) + # Create custom commands and targets for each file. + CUDA_WRAP_SRCS( cuda_compile_ptx PTX _generated_files ${_sources} ${_cmake_options} + OPTIONS ${_options} ) + + set( ${generated_files} ${_generated_files}) + +endmacro(CUDA_COMPILE_PTX) + +############################################################################### +############################################################################### +# CUDA ADD CUFFT TO TARGET +############################################################################### +############################################################################### +macro(CUDA_ADD_CUFFT_TO_TARGET target) + if (CUDA_BUILD_EMULATION) + target_link_libraries(${target} ${CUDA_cufftemu_LIBRARY}) + else() + target_link_libraries(${target} ${CUDA_cufft_LIBRARY}) + endif() +endmacro() + +############################################################################### +############################################################################### +# CUDA ADD CUBLAS TO TARGET +############################################################################### +############################################################################### +macro(CUDA_ADD_CUBLAS_TO_TARGET target) + if (CUDA_BUILD_EMULATION) + target_link_libraries(${target} ${CUDA_cublasemu_LIBRARY}) + else() + target_link_libraries(${target} ${CUDA_cublas_LIBRARY}) + endif() +endmacro() + +############################################################################### +############################################################################### +# CUDA BUILD CLEAN TARGET +############################################################################### +############################################################################### +macro(CUDA_BUILD_CLEAN_TARGET) + # Call this after you add all your CUDA targets, and you will get a convience + # target. You should also make clean after running this target to get the + # build system to generate all the code again. + + set(cuda_clean_target_name clean_cuda_depends) + if (CMAKE_GENERATOR MATCHES "Visual Studio") + string(TOUPPER ${cuda_clean_target_name} cuda_clean_target_name) + endif() + add_custom_target(${cuda_clean_target_name} + COMMAND ${CMAKE_COMMAND} -E remove ${CUDA_ADDITIONAL_CLEAN_FILES}) + + # Clear out the variable, so the next time we configure it will be empty. + # This is useful so that the files won't persist in the list after targets + # have been removed. + set(CUDA_ADDITIONAL_CLEAN_FILES "" CACHE INTERNAL "List of intermediate files that are part of the cuda dependency scanning.") +endmacro(CUDA_BUILD_CLEAN_TARGET) diff --git a/Modules/FindCUDA/make2cmake.cmake b/Modules/FindCUDA/make2cmake.cmake new file mode 100644 index 0000000..d41b72d --- /dev/null +++ b/Modules/FindCUDA/make2cmake.cmake @@ -0,0 +1,93 @@ +# James Bigler, NVIDIA Corp (nvidia.com - jbigler) +# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html +# +# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved. +# +# Copyright (c) 2007-2009 +# Scientific Computing and Imaging Institute, University of Utah +# +# This code is licensed under the MIT License. See the FindCUDA.cmake script +# for the text of the license. + +# The MIT License +# +# License for the specific language governing rights and limitations under +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +####################################################################### +# This converts a file written in makefile syntax into one that can be included +# by CMake. + +file(READ ${input_file} depend_text) + +if (${depend_text} MATCHES ".+") + + # message("FOUND DEPENDS") + + # Remember, four backslashes is escaped to one backslash in the string. + string(REGEX REPLACE "\\\\ " " " depend_text ${depend_text}) + + # This works for the nvcc -M generated dependency files. + string(REGEX REPLACE "^.* : " "" depend_text ${depend_text}) + string(REGEX REPLACE "[ \\\\]*\n" ";" depend_text ${depend_text}) + + set(dependency_list "") + + foreach(file ${depend_text}) + + string(REGEX REPLACE "^ +" "" file ${file}) + + # OK, now if we had a UNC path, nvcc has a tendency to only output the first '/' + # instead of '//'. Here we will test to see if the file exists, if it doesn't then + # try to prepend another '/' to the path and test again. If it still fails remove the + # path. + + if(NOT EXISTS "${file}") + if (EXISTS "/${file}") + set(file "/${file}") + else() + message(WARNING " Removing non-existant dependency file: ${file}") + set(file "") + endif() + endif() + + if(NOT IS_DIRECTORY "${file}") + # If softlinks start to matter, we should change this to REALPATH. For now we need + # to flatten paths, because nvcc can generate stuff like /bin/../include instead of + # just /include. + get_filename_component(file_absolute "${file}" ABSOLUTE) + list(APPEND dependency_list "${file_absolute}") + endif() + + endforeach(file) + +else() + # message("FOUND NO DEPENDS") +endif() + +# Remove the duplicate entries and sort them. +list(REMOVE_DUPLICATES dependency_list) +list(SORT dependency_list) + +foreach(file ${dependency_list}) + set(cuda_nvcc_depend "${cuda_nvcc_depend} \"${file}\"\n") +endforeach() + +file(WRITE ${output_file} "# Generated by: make2cmake.cmake\nSET(CUDA_NVCC_DEPEND\n ${cuda_nvcc_depend})\n\n") diff --git a/Modules/FindCUDA/parse_cubin.cmake b/Modules/FindCUDA/parse_cubin.cmake new file mode 100644 index 0000000..2518c68 --- /dev/null +++ b/Modules/FindCUDA/parse_cubin.cmake @@ -0,0 +1,112 @@ +# James Bigler, NVIDIA Corp (nvidia.com - jbigler) +# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html +# +# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved. +# +# Copyright (c) 2007-2009 +# Scientific Computing and Imaging Institute, University of Utah +# +# This code is licensed under the MIT License. See the FindCUDA.cmake script +# for the text of the license. + +# The MIT License +# +# License for the specific language governing rights and limitations under +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +####################################################################### +# Parses a .cubin file produced by nvcc and reports statistics about the file. + + +file(READ ${input_file} file_text) + +if (${file_text} MATCHES ".+") + + # Remember, four backslashes is escaped to one backslash in the string. + string(REGEX REPLACE ";" "\\\\;" file_text ${file_text}) + string(REGEX REPLACE "\ncode" ";code" file_text ${file_text}) + + list(LENGTH file_text len) + + foreach(line ${file_text}) + + # Only look at "code { }" blocks. + if(line MATCHES "^code") + + # Break into individual lines. + string(REGEX REPLACE "\n" ";" line ${line}) + + foreach(entry ${line}) + + # Extract kernel names. + if (${entry} MATCHES "[^g]name = ([^ ]+)") + string(REGEX REPLACE ".* = ([^ ]+)" "\\1" entry ${entry}) + + # Check to see if the kernel name starts with "_" + set(skip FALSE) + # if (${entry} MATCHES "^_") + # Skip the rest of this block. + # message("Skipping ${entry}") + # set(skip TRUE) + # else (${entry} MATCHES "^_") + message("Kernel: ${entry}") + # endif (${entry} MATCHES "^_") + + endif(${entry} MATCHES "[^g]name = ([^ ]+)") + + # Skip the rest of the block if necessary + if(NOT skip) + + # Registers + if (${entry} MATCHES "reg([ ]+)=([ ]+)([^ ]+)") + string(REGEX REPLACE ".*([ ]+)=([ ]+)([^ ]+)" "\\3" entry ${entry}) + message("Registers: ${entry}") + endif() + + # Local memory + if (${entry} MATCHES "lmem([ ]+)=([ ]+)([^ ]+)") + string(REGEX REPLACE ".*([ ]+)=([ ]+)([^ ]+)" "\\3" entry ${entry}) + message("Local: ${entry}") + endif() + + # Shared memory + if (${entry} MATCHES "smem([ ]+)=([ ]+)([^ ]+)") + string(REGEX REPLACE ".*([ ]+)=([ ]+)([^ ]+)" "\\3" entry ${entry}) + message("Shared: ${entry}") + endif() + + if (${entry} MATCHES "^}") + message("") + endif() + + endif(NOT skip) + + + endforeach(entry) + + endif(line MATCHES "^code") + + endforeach(line) + +else() + # message("FOUND NO DEPENDS") +endif() + + diff --git a/Modules/FindCUDA/run_nvcc.cmake b/Modules/FindCUDA/run_nvcc.cmake new file mode 100644 index 0000000..b31011c --- /dev/null +++ b/Modules/FindCUDA/run_nvcc.cmake @@ -0,0 +1,280 @@ +# James Bigler, NVIDIA Corp (nvidia.com - jbigler) +# +# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved. +# +# This code is licensed under the MIT License. See the FindCUDA.cmake script +# for the text of the license. + +# The MIT License +# +# License for the specific language governing rights and limitations under +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + +########################################################################## +# This file runs the nvcc commands to produce the desired output file along with +# the dependency file needed by CMake to compute dependencies. In addition the +# file checks the output of each command and if the command fails it deletes the +# output files. + +# Input variables +# +# verbose:BOOL=<> OFF: Be as quiet as possible (default) +# ON : Describe each step +# +# build_configuration:STRING=<> Typically one of Debug, MinSizeRel, Release, or +# RelWithDebInfo, but it should match one of the +# entries in CUDA_HOST_FLAGS. This is the build +# configuration used when compiling the code. If +# blank or unspecified Debug is assumed as this is +# what CMake does. +# +# generated_file:STRING=<> File to generate. This argument must be passed in. +# +# generated_cubin_file:STRING=<> File to generate. This argument must be passed +# in if build_cubin is true. + +if(NOT generated_file) + message(FATAL_ERROR "You must specify generated_file on the command line") +endif() + +# Set these up as variables to make reading the generated file easier +set(CMAKE_COMMAND "@CMAKE_COMMAND@") # path +set(source_file "@source_file@") # path +set(NVCC_generated_dependency_file "@NVCC_generated_dependency_file@") # path +set(cmake_dependency_file "@cmake_dependency_file@") # path +set(CUDA_make2cmake "@CUDA_make2cmake@") # path +set(CUDA_parse_cubin "@CUDA_parse_cubin@") # path +set(build_cubin @build_cubin@) # bool +# We won't actually use these variables for now, but we need to set this, in +# order to force this file to be run again if it changes. +set(generated_file_path "@generated_file_path@") # path +set(generated_file_internal "@generated_file@") # path +set(generated_cubin_file_internal "@generated_cubin_file@") # path + +set(CUDA_NVCC_EXECUTABLE "@CUDA_NVCC_EXECUTABLE@") # path +set(CUDA_NVCC_FLAGS @CUDA_NVCC_FLAGS@ ;; @CUDA_WRAP_OPTION_NVCC_FLAGS@) # list +@CUDA_NVCC_FLAGS_CONFIG@ +set(nvcc_flags @nvcc_flags@) # list +set(CUDA_NVCC_INCLUDE_ARGS "@CUDA_NVCC_INCLUDE_ARGS@") # list (needs to be in quotes to handle spaces properly). +set(format_flag "@format_flag@") # string + +if(build_cubin AND NOT generated_cubin_file) + message(FATAL_ERROR "You must specify generated_cubin_file on the command line") +endif() + +# This is the list of host compilation flags. It C or CXX should already have +# been chosen by FindCUDA.cmake. +@CUDA_HOST_FLAGS@ + +# Take the compiler flags and package them up to be sent to the compiler via -Xcompiler +set(nvcc_host_compiler_flags "") +# If we weren't given a build_configuration, use Debug. +if(NOT build_configuration) + set(build_configuration Debug) +endif() +string(TOUPPER "${build_configuration}" build_configuration) +#message("CUDA_NVCC_HOST_COMPILER_FLAGS = ${CUDA_NVCC_HOST_COMPILER_FLAGS}") +foreach(flag ${CMAKE_HOST_FLAGS} ${CMAKE_HOST_FLAGS_${build_configuration}}) + # Extra quotes are added around each flag to help nvcc parse out flags with spaces. + set(nvcc_host_compiler_flags "${nvcc_host_compiler_flags},\"${flag}\"") +endforeach() +if (nvcc_host_compiler_flags) + set(nvcc_host_compiler_flags "-Xcompiler" ${nvcc_host_compiler_flags}) +endif() +#message("nvcc_host_compiler_flags = \"${nvcc_host_compiler_flags}\"") +# Add the build specific configuration flags +list(APPEND CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS_${build_configuration}}) + +if(DEFINED CCBIN) + set(CCBIN -ccbin "${CCBIN}") +endif() + +# cuda_execute_process - Executes a command with optional command echo and status message. +# +# status - Status message to print if verbose is true +# command - COMMAND argument from the usual execute_process argument structure +# ARGN - Remaining arguments are the command with arguments +# +# CUDA_result - return value from running the command +# +# Make this a macro instead of a function, so that things like RESULT_VARIABLE +# and other return variables are present after executing the process. +macro(cuda_execute_process status command) + set(_command ${command}) + if(NOT _command STREQUAL "COMMAND") + message(FATAL_ERROR "Malformed call to cuda_execute_process. Missing COMMAND as second argument. (command = ${command})") + endif() + if(verbose) + execute_process(COMMAND "${CMAKE_COMMAND}" -E echo -- ${status}) + # Now we need to build up our command string. We are accounting for quotes + # and spaces, anything else is left up to the user to fix if they want to + # copy and paste a runnable command line. + set(cuda_execute_process_string) + foreach(arg ${ARGN}) + # If there are quotes, excape them, so they come through. + string(REPLACE "\"" "\\\"" arg ${arg}) + # Args with spaces need quotes around them to get them to be parsed as a single argument. + if(arg MATCHES " ") + list(APPEND cuda_execute_process_string "\"${arg}\"") + else() + list(APPEND cuda_execute_process_string ${arg}) + endif() + endforeach() + # Echo the command + execute_process(COMMAND ${CMAKE_COMMAND} -E echo ${cuda_execute_process_string}) + endif(verbose) + # Run the command + execute_process(COMMAND ${ARGN} RESULT_VARIABLE CUDA_result ) +endmacro() + +# Delete the target file +cuda_execute_process( + "Removing ${generated_file}" + COMMAND "${CMAKE_COMMAND}" -E remove "${generated_file}" + ) + +# For CUDA 2.3 and below, -G -M doesn't work, so remove the -G flag +# for dependency generation and hope for the best. +set(depends_CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}") +set(CUDA_VERSION @CUDA_VERSION@) +if(CUDA_VERSION VERSION_LESS "3.0") + cmake_policy(PUSH) + # CMake policy 0007 NEW states that empty list elements are not + # ignored. I'm just setting it to avoid the warning that's printed. + cmake_policy(SET CMP0007 NEW) + # Note that this will remove all occurances of -G. + list(REMOVE_ITEM depends_CUDA_NVCC_FLAGS "-G") + cmake_policy(POP) +endif() + +# nvcc doesn't define __CUDACC__ for some reason when generating dependency files. This +# can cause incorrect dependencies when #including files based on this macro which is +# defined in the generating passes of nvcc invokation. We will go ahead and manually +# define this for now until a future version fixes this bug. +set(CUDACC_DEFINE -D__CUDACC__) + +# Generate the dependency file +cuda_execute_process( + "Generating dependency file: ${NVCC_generated_dependency_file}" + COMMAND "${CUDA_NVCC_EXECUTABLE}" + -M + ${CUDACC_DEFINE} + "${source_file}" + -o "${NVCC_generated_dependency_file}" + ${CCBIN} + ${nvcc_flags} + ${nvcc_host_compiler_flags} + ${depends_CUDA_NVCC_FLAGS} + -DNVCC + ${CUDA_NVCC_INCLUDE_ARGS} + ) + +if(CUDA_result) + message(FATAL_ERROR "Error generating ${generated_file}") +endif() + +# Generate the cmake readable dependency file to a temp file. Don't put the +# quotes just around the filenames for the input_file and output_file variables. +# CMake will pass the quotes through and not be able to find the file. +cuda_execute_process( + "Generating temporary cmake readable file: ${cmake_dependency_file}.tmp" + COMMAND "${CMAKE_COMMAND}" + -D "input_file:FILEPATH=${NVCC_generated_dependency_file}" + -D "output_file:FILEPATH=${cmake_dependency_file}.tmp" + -P "${CUDA_make2cmake}" + ) + +if(CUDA_result) + message(FATAL_ERROR "Error generating ${generated_file}") +endif() + +# Copy the file if it is different +cuda_execute_process( + "Copy if different ${cmake_dependency_file}.tmp to ${cmake_dependency_file}" + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${cmake_dependency_file}.tmp" "${cmake_dependency_file}" + ) + +if(CUDA_result) + message(FATAL_ERROR "Error generating ${generated_file}") +endif() + +# Delete the temporary file +cuda_execute_process( + "Removing ${cmake_dependency_file}.tmp and ${NVCC_generated_dependency_file}" + COMMAND "${CMAKE_COMMAND}" -E remove "${cmake_dependency_file}.tmp" "${NVCC_generated_dependency_file}" + ) + +if(CUDA_result) + message(FATAL_ERROR "Error generating ${generated_file}") +endif() + +# Generate the code +cuda_execute_process( + "Generating ${generated_file}" + COMMAND "${CUDA_NVCC_EXECUTABLE}" + "${source_file}" + ${format_flag} -o "${generated_file}" + ${CCBIN} + ${nvcc_flags} + ${nvcc_host_compiler_flags} + ${CUDA_NVCC_FLAGS} + -DNVCC + ${CUDA_NVCC_INCLUDE_ARGS} + ) + +if(CUDA_result) + # Since nvcc can sometimes leave half done files make sure that we delete the output file. + cuda_execute_process( + "Removing ${generated_file}" + COMMAND "${CMAKE_COMMAND}" -E remove "${generated_file}" + ) + message(FATAL_ERROR "Error generating file ${generated_file}") +else() + if(verbose) + message("Generated ${generated_file} successfully.") + endif() +endif() + +# Cubin resource report commands. +if( build_cubin ) + # Run with -cubin to produce resource usage report. + cuda_execute_process( + "Generating ${generated_cubin_file}" + COMMAND "${CUDA_NVCC_EXECUTABLE}" + "${source_file}" + ${CUDA_NVCC_FLAGS} + ${nvcc_flags} + ${CCBIN} + ${nvcc_host_compiler_flags} + -DNVCC + -cubin + -o "${generated_cubin_file}" + ${CUDA_NVCC_INCLUDE_ARGS} + ) + + # Execute the parser script. + cuda_execute_process( + "Executing the parser script" + COMMAND "${CMAKE_COMMAND}" + -D "input_file:STRING=${generated_cubin_file}" + -P "${CUDA_parse_cubin}" + ) + +endif( build_cubin ) diff --git a/Modules/FindCURL.cmake b/Modules/FindCURL.cmake new file mode 100644 index 0000000..cc00d53 --- /dev/null +++ b/Modules/FindCURL.cmake @@ -0,0 +1,59 @@ +# - Find curl +# Find the native CURL headers and libraries. +# +# CURL_INCLUDE_DIRS - where to find curl/curl.h, etc. +# CURL_LIBRARIES - List of libraries when using curl. +# CURL_FOUND - True if curl found. +# CURL_VERSION_STRING - the version of curl found (since CMake 2.8.8) + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2012 Rolf Eike Beer +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Look for the header file. +FIND_PATH(CURL_INCLUDE_DIR NAMES curl/curl.h) +MARK_AS_ADVANCED(CURL_INCLUDE_DIR) + +# Look for the library. +FIND_LIBRARY(CURL_LIBRARY NAMES + curl + # Windows MSVC prebuilts: + curllib + libcurl_imp + curllib_static +) +MARK_AS_ADVANCED(CURL_LIBRARY) + +IF(CURL_INCLUDE_DIR) + FOREACH(_curl_version_header curlver.h curl.h) + IF(EXISTS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}") + FILE(STRINGS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}" curl_version_str REGEX "^#define[\t ]+LIBCURL_VERSION[\t ]+\".*\"") + + STRING(REGEX REPLACE "^#define[\t ]+LIBCURL_VERSION[\t ]+\"([^\"]*)\".*" "\\1" CURL_VERSION_STRING "${curl_version_str}") + UNSET(curl_version_str) + BREAK() + ENDIF() + ENDFOREACH(_curl_version_header) +ENDIF() + +# handle the QUIETLY and REQUIRED arguments and set CURL_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(CURL + REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR + VERSION_VAR CURL_VERSION_STRING) + +IF(CURL_FOUND) + SET(CURL_LIBRARIES ${CURL_LIBRARY}) + SET(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR}) +ENDIF(CURL_FOUND) diff --git a/Modules/FindCVS.cmake b/Modules/FindCVS.cmake new file mode 100644 index 0000000..57680bd --- /dev/null +++ b/Modules/FindCVS.cmake @@ -0,0 +1,69 @@ +# The module defines the following variables: +# CVS_EXECUTABLE - path to cvs command line client +# CVS_FOUND - true if the command line client was found +# Example usage: +# find_package(CVS) +# if(CVS_FOUND) +# message("CVS found: ${CVS_EXECUTABLE}") +# endif(CVS_FOUND) + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# CVSNT + +get_filename_component( + CVSNT_TypeLib_Win32 + "[HKEY_CLASSES_ROOT\\TypeLib\\{2BDF7A65-0BFE-4B1A-9205-9AB900C7D0DA}\\1.0\\0\\win32]" + PATH) + +get_filename_component( + CVSNT_Services_EventMessagePath + "[HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\Eventlog\\Application\\cvsnt;EventMessageFile]" + PATH) + +# WinCVS (in case CVSNT was installed in the same directory) + +get_filename_component( + WinCVS_Folder_Command + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\Folder\\shell\\wincvs\\command]" + PATH) + +# TortoiseCVS (in case CVSNT was installed in the same directory) + +get_filename_component( + TortoiseCVS_Folder_Command + "[HKEY_CLASSES_ROOT\\CVS\\shell\\open\\command]" + PATH) + +get_filename_component( + TortoiseCVS_DefaultIcon + "[HKEY_CLASSES_ROOT\\CVS\\DefaultIcon]" + PATH) + +find_program(CVS_EXECUTABLE cvs + ${TortoiseCVS_DefaultIcon} + ${TortoiseCVS_Folder_Command} + ${WinCVS_Folder_Command} + ${CVSNT_Services_EventMessagePath} + ${CVSNT_TypeLib_Win32} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\CVS\\Pserver;InstallPath]" + DOC "CVS command line client" + ) +mark_as_advanced(CVS_EXECUTABLE) + +# Handle the QUIETLY and REQUIRED arguments and set CVS_FOUND to TRUE if +# all listed variables are TRUE + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +find_package_handle_standard_args(CVS DEFAULT_MSG CVS_EXECUTABLE) diff --git a/Modules/FindCoin3D.cmake b/Modules/FindCoin3D.cmake new file mode 100644 index 0000000..8bfe97a --- /dev/null +++ b/Modules/FindCoin3D.cmake @@ -0,0 +1,84 @@ +# - Find Coin3D (Open Inventor) +# Coin3D is an implementation of the Open Inventor API. +# It provides data structures and algorithms for 3D visualization +# http://www.coin3d.org/ +# +# This module defines the following variables +# COIN3D_FOUND - system has Coin3D - Open Inventor +# COIN3D_INCLUDE_DIRS - where the Inventor include directory can be found +# COIN3D_LIBRARIES - Link to this to use Coin3D +# + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF (WIN32) + IF (CYGWIN) + + FIND_PATH(COIN3D_INCLUDE_DIRS Inventor/So.h) + FIND_LIBRARY(COIN3D_LIBRARIES Coin) + + ELSE (CYGWIN) + + FIND_PATH(COIN3D_INCLUDE_DIRS Inventor/So.h + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\Coin3D\\2;Installation Path]/include" + ) + + FIND_LIBRARY(COIN3D_LIBRARY_DEBUG coin2d + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\Coin3D\\2;Installation Path]/lib" + ) + + FIND_LIBRARY(COIN3D_LIBRARY_RELEASE coin2 + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\Coin3D\\2;Installation Path]/lib" + ) + + IF (COIN3D_LIBRARY_DEBUG AND COIN3D_LIBRARY_RELEASE) + SET(COIN3D_LIBRARIES optimized ${COIN3D_LIBRARY_RELEASE} + debug ${COIN3D_LIBRARY_DEBUG}) + ELSE (COIN3D_LIBRARY_DEBUG AND COIN3D_LIBRARY_RELEASE) + IF (COIN3D_LIBRARY_DEBUG) + SET (COIN3D_LIBRARIES ${COIN3D_LIBRARY_DEBUG}) + ENDIF (COIN3D_LIBRARY_DEBUG) + IF (COIN3D_LIBRARY_RELEASE) + SET (COIN3D_LIBRARIES ${COIN3D_LIBRARY_RELEASE}) + ENDIF (COIN3D_LIBRARY_RELEASE) + ENDIF (COIN3D_LIBRARY_DEBUG AND COIN3D_LIBRARY_RELEASE) + + ENDIF (CYGWIN) + +ELSE (WIN32) + IF(APPLE) + FIND_PATH(COIN3D_INCLUDE_DIRS Inventor/So.h + /Library/Frameworks/Inventor.framework/Headers + ) + FIND_LIBRARY(COIN3D_LIBRARIES Coin + /Library/Frameworks/Inventor.framework/Libraries + ) + SET(COIN3D_LIBRARIES "-framework Coin3d" CACHE STRING "Coin3D library for OSX") + ELSE(APPLE) + + FIND_PATH(COIN3D_INCLUDE_DIRS Inventor/So.h) + FIND_LIBRARY(COIN3D_LIBRARIES Coin) + + ENDIF(APPLE) + +ENDIF (WIN32) + +# handle the QUIETLY and REQUIRED arguments and set COIN3D_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Coin3D DEFAULT_MSG COIN3D_LIBRARIES COIN3D_INCLUDE_DIRS) + +MARK_AS_ADVANCED(COIN3D_INCLUDE_DIRS COIN3D_LIBRARIES ) + + diff --git a/Modules/FindCups.cmake b/Modules/FindCups.cmake new file mode 100644 index 0000000..3862f7d --- /dev/null +++ b/Modules/FindCups.cmake @@ -0,0 +1,69 @@ +# - Try to find the Cups printing system +# Once done this will define +# +# CUPS_FOUND - system has Cups +# CUPS_INCLUDE_DIR - the Cups include directory +# CUPS_LIBRARIES - Libraries needed to use Cups +# CUPS_VERSION_STRING - version of Cups found (since CMake 2.8.8) +# Set CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE to TRUE if you need a version which +# features this function (i.e. at least 1.1.19) + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# Copyright 2012 Rolf Eike Beer +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +find_path(CUPS_INCLUDE_DIR cups/cups.h ) + +find_library(CUPS_LIBRARIES NAMES cups ) + +if (CUPS_INCLUDE_DIR AND CUPS_LIBRARIES AND CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE) + include(CheckLibraryExists) + + # ippDeleteAttribute is new in cups-1.1.19 (and used by kdeprint) + CHECK_LIBRARY_EXISTS(cups ippDeleteAttribute "" CUPS_HAS_IPP_DELETE_ATTRIBUTE) +endif (CUPS_INCLUDE_DIR AND CUPS_LIBRARIES AND CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE) + +if (CUPS_INCLUDE_DIR AND EXISTS "${CUPS_INCLUDE_DIR}/cups/cups.h") + file(STRINGS "${CUPS_INCLUDE_DIR}/cups/cups.h" cups_version_str + REGEX "^#[\t ]*define[\t ]+CUPS_VERSION_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$") + + unset(CUPS_VERSION_STRING) + foreach(VPART MAJOR MINOR PATCH) + foreach(VLINE ${cups_version_str}) + if(VLINE MATCHES "^#[\t ]*define[\t ]+CUPS_VERSION_${VPART}") + string(REGEX REPLACE "^#[\t ]*define[\t ]+CUPS_VERSION_${VPART}[\t ]+([0-9]+)$" "\\1" + CUPS_VERSION_PART "${VLINE}") + if(CUPS_VERSION_STRING) + set(CUPS_VERSION_STRING "${CUPS_VERSION_STRING}.${CUPS_VERSION_PART}") + else(CUPS_VERSION_STRING) + set(CUPS_VERSION_STRING "${CUPS_VERSION_PART}") + endif(CUPS_VERSION_STRING) + endif() + endforeach(VLINE) + endforeach(VPART) +endif (CUPS_INCLUDE_DIR AND EXISTS "${CUPS_INCLUDE_DIR}/cups/cups.h") + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +if (CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cups + REQUIRED_VARS CUPS_LIBRARIES CUPS_INCLUDE_DIR CUPS_HAS_IPP_DELETE_ATTRIBUTE + VERSION_VAR CUPS_VERSION_STRING) +else (CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cups + REQUIRED_VARS CUPS_LIBRARIES CUPS_INCLUDE_DIR + VERSION_VAR CUPS_VERSION_STRING) +endif (CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE) + +mark_as_advanced(CUPS_INCLUDE_DIR CUPS_LIBRARIES) diff --git a/Modules/FindCurses.cmake b/Modules/FindCurses.cmake new file mode 100644 index 0000000..d1e1311 --- /dev/null +++ b/Modules/FindCurses.cmake @@ -0,0 +1,176 @@ +# - Find the curses include file and library +# +# CURSES_FOUND - system has Curses +# CURSES_INCLUDE_DIR - the Curses include directory +# CURSES_LIBRARIES - The libraries needed to use Curses +# CURSES_HAVE_CURSES_H - true if curses.h is available +# CURSES_HAVE_NCURSES_H - true if ncurses.h is available +# CURSES_HAVE_NCURSES_NCURSES_H - true if ncurses/ncurses.h is available +# CURSES_HAVE_NCURSES_CURSES_H - true if ncurses/curses.h is available +# CURSES_LIBRARY - set for backwards compatibility with 2.4 CMake +# +# Set CURSES_NEED_NCURSES to TRUE before the FIND_PACKAGE() command if NCurses +# functionality is required. + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_LIBRARY(CURSES_CURSES_LIBRARY NAMES curses ) + +FIND_LIBRARY(CURSES_NCURSES_LIBRARY NAMES ncurses ) +SET(CURSES_USE_NCURSES FALSE) + +IF(CURSES_NCURSES_LIBRARY AND NOT CURSES_CURSES_LIBRARY) + SET(CURSES_USE_NCURSES TRUE) +ENDIF(CURSES_NCURSES_LIBRARY AND NOT CURSES_CURSES_LIBRARY) +# http://cygwin.com/ml/cygwin-announce/2010-01/msg00002.html +# cygwin ncurses stopped providing curses.h symlinks see above +# message. Cygwin is an ncurses package, so force ncurses on +# cygwin if the curses.h is missing +IF(CYGWIN) + IF(NOT EXISTS /usr/include/curses.h) + SET(CURSES_USE_NCURSES TRUE) + ENDIF() +ENDIF() + + +# Not sure the logic is correct here. +# If NCurses is required, use the function wsyncup() to check if the library +# has NCurses functionality (at least this is where it breaks on NetBSD). +# If wsyncup is in curses, use this one. +# If not, try to find ncurses and check if this has the symbol. +# Once the ncurses library is found, search the ncurses.h header first, but +# some web pages also say that even with ncurses there is not always a ncurses.h: +# http://osdir.com/ml/gnome.apps.mc.devel/2002-06/msg00029.html +# So at first try ncurses.h, if not found, try to find curses.h under the same +# prefix as the library was found, if still not found, try curses.h with the +# default search paths. +IF(CURSES_CURSES_LIBRARY AND CURSES_NEED_NCURSES) + INCLUDE(CheckLibraryExists) + CHECK_LIBRARY_EXISTS("${CURSES_CURSES_LIBRARY}" + wsyncup "" CURSES_CURSES_HAS_WSYNCUP) + + IF(CURSES_NCURSES_LIBRARY AND NOT CURSES_CURSES_HAS_WSYNCUP) + CHECK_LIBRARY_EXISTS("${CURSES_NCURSES_LIBRARY}" + wsyncup "" CURSES_NCURSES_HAS_WSYNCUP) + IF( CURSES_NCURSES_HAS_WSYNCUP) + SET(CURSES_USE_NCURSES TRUE) + ENDIF( CURSES_NCURSES_HAS_WSYNCUP) + ENDIF(CURSES_NCURSES_LIBRARY AND NOT CURSES_CURSES_HAS_WSYNCUP) + +ENDIF(CURSES_CURSES_LIBRARY AND CURSES_NEED_NCURSES) + + +IF(NOT CURSES_USE_NCURSES) + FIND_FILE(CURSES_HAVE_CURSES_H curses.h ) + FIND_PATH(CURSES_CURSES_H_PATH curses.h ) + GET_FILENAME_COMPONENT(_cursesLibDir "${CURSES_CURSES_LIBRARY}" PATH) + GET_FILENAME_COMPONENT(_cursesParentDir "${_cursesLibDir}" PATH) + + # for compatibility with older FindCurses.cmake this has to be in the cache + # FORCE must not be used since this would break builds which preload a cache wqith these variables set + SET(CURSES_INCLUDE_PATH "${CURSES_CURSES_H_PATH}" + CACHE FILEPATH "The curses include path") + SET(CURSES_LIBRARY "${CURSES_CURSES_LIBRARY}" + CACHE FILEPATH "The curses library") +ELSE(NOT CURSES_USE_NCURSES) +# we need to find ncurses + GET_FILENAME_COMPONENT(_cursesLibDir "${CURSES_NCURSES_LIBRARY}" PATH) + GET_FILENAME_COMPONENT(_cursesParentDir "${_cursesLibDir}" PATH) + + FIND_FILE(CURSES_HAVE_NCURSES_H ncurses.h) + FIND_FILE(CURSES_HAVE_NCURSES_NCURSES_H ncurses/ncurses.h) + FIND_FILE(CURSES_HAVE_NCURSES_CURSES_H ncurses/curses.h) + FIND_FILE(CURSES_HAVE_CURSES_H curses.h + HINTS "${_cursesParentDir}/include") + + FIND_PATH(CURSES_NCURSES_INCLUDE_PATH ncurses.h ncurses/ncurses.h + ncurses/curses.h) + FIND_PATH(CURSES_NCURSES_INCLUDE_PATH curses.h + HINTS "${_cursesParentDir}/include") + + # for compatibility with older FindCurses.cmake this has to be in the cache + # FORCE must not be used since this would break builds which preload + # however if the value of the variable has NOTFOUND in it, then + # it is OK to force, and we need to force in order to have it work. + # a cache wqith these variables set + # only put ncurses include and library into + # variables if they are found + IF(NOT CURSES_NCURSES_INCLUDE_PATH AND CURSES_HAVE_NCURSES_NCURSES_H) + GET_FILENAME_COMPONENT(CURSES_NCURSES_INCLUDE_PATH + "${CURSES_HAVE_NCURSES_NCURSES_H}" PATH) + ENDIF(NOT CURSES_NCURSES_INCLUDE_PATH AND CURSES_HAVE_NCURSES_NCURSES_H) + IF(CURSES_NCURSES_INCLUDE_PATH AND CURSES_NCURSES_LIBRARY) + SET( FORCE_IT ) + IF(CURSES_INCLUDE_PATH MATCHES NOTFOUND) + SET(FORCE_IT FORCE) + ENDIF(CURSES_INCLUDE_PATH MATCHES NOTFOUND) + SET(CURSES_INCLUDE_PATH "${CURSES_NCURSES_INCLUDE_PATH}" + CACHE FILEPATH "The curses include path" ${FORCE_IT}) + SET( FORCE_IT) + IF(CURSES_LIBRARY MATCHES NOTFOUND) + SET(FORCE_IT FORCE) + ENDIF(CURSES_LIBRARY MATCHES NOTFOUND) + SET(CURSES_LIBRARY "${CURSES_NCURSES_LIBRARY}" + CACHE FILEPATH "The curses library" ${FORCE_IT}) + ENDIF(CURSES_NCURSES_INCLUDE_PATH AND CURSES_NCURSES_LIBRARY) + +ENDIF(NOT CURSES_USE_NCURSES) + +FIND_LIBRARY(CURSES_EXTRA_LIBRARY cur_colr HINTS "${_cursesLibDir}") +FIND_LIBRARY(CURSES_EXTRA_LIBRARY cur_colr ) + +FIND_LIBRARY(CURSES_FORM_LIBRARY form HINTS "${_cursesLibDir}") +FIND_LIBRARY(CURSES_FORM_LIBRARY form ) + +# for compatibility with older FindCurses.cmake this has to be in the cache +# FORCE must not be used since this would break builds which preload a cache +# qith these variables set +SET(FORM_LIBRARY "${CURSES_FORM_LIBRARY}" + CACHE FILEPATH "The curses form library") + +# Need to provide the *_LIBRARIES +SET(CURSES_LIBRARIES ${CURSES_LIBRARY}) + +IF(CURSES_EXTRA_LIBRARY) + SET(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_EXTRA_LIBRARY}) +ENDIF(CURSES_EXTRA_LIBRARY) + +IF(CURSES_FORM_LIBRARY) + SET(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_FORM_LIBRARY}) +ENDIF(CURSES_FORM_LIBRARY) + +# Proper name is *_INCLUDE_DIR +SET(CURSES_INCLUDE_DIR ${CURSES_INCLUDE_PATH}) + +# handle the QUIETLY and REQUIRED arguments and set CURSES_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Curses DEFAULT_MSG + CURSES_LIBRARY CURSES_INCLUDE_PATH) + +MARK_AS_ADVANCED( + CURSES_INCLUDE_PATH + CURSES_LIBRARY + CURSES_CURSES_INCLUDE_PATH + CURSES_CURSES_LIBRARY + CURSES_NCURSES_INCLUDE_PATH + CURSES_NCURSES_LIBRARY + CURSES_EXTRA_LIBRARY + FORM_LIBRARY + CURSES_LIBRARIES + CURSES_INCLUDE_DIR + CURSES_CURSES_HAS_WSYNCUP + CURSES_NCURSES_HAS_WSYNCUP + ) + diff --git a/Modules/FindCxxTest.cmake b/Modules/FindCxxTest.cmake new file mode 100644 index 0000000..a4d1504 --- /dev/null +++ b/Modules/FindCxxTest.cmake @@ -0,0 +1,200 @@ +# - Find CxxTest +# Find the CxxTest suite and declare a helper macro for creating unit tests +# and integrating them with CTest. +# For more details on CxxTest see http://cxxtest.tigris.org +# +# INPUT Variables +# +# CXXTEST_USE_PYTHON [deprecated since 1.3] +# Only used in the case both Python & Perl +# are detected on the system to control +# which CxxTest code generator is used. +# Valid only for CxxTest version 3. +# +# NOTE: In older versions of this Find Module, +# this variable controlled if the Python test +# generator was used instead of the Perl one, +# regardless of which scripting language the +# user had installed. +# +# CXXTEST_TESTGEN_ARGS (since CMake 2.8.3) +# Specify a list of options to pass to the CxxTest code +# generator. If not defined, --error-printer is +# passed. +# +# OUTPUT Variables +# +# CXXTEST_FOUND +# True if the CxxTest framework was found +# CXXTEST_INCLUDE_DIRS +# Where to find the CxxTest include directory +# CXXTEST_PERL_TESTGEN_EXECUTABLE +# The perl-based test generator +# CXXTEST_PYTHON_TESTGEN_EXECUTABLE +# The python-based test generator +# CXXTEST_TESTGEN_EXECUTABLE (since CMake 2.8.3) +# The test generator that is actually used (chosen using user preferences +# and interpreters found in the system) +# CXXTEST_TESTGEN_INTERPRETER (since CMake 2.8.3) +# The full path to the Perl or Python executable on the system +# +# MACROS for optional use by CMake users: +# +# CXXTEST_ADD_TEST( ) +# Creates a CxxTest runner and adds it to the CTest testing suite +# Parameters: +# test_name The name of the test +# gen_source_file The generated source filename to be +# generated by CxxTest +# input_files_to_testgen The list of header files containing the +# CxxTest::TestSuite's to be included in +# this runner +# +# #============== +# Example Usage: +# +# find_package(CxxTest) +# if(CXXTEST_FOUND) +# include_directories(${CXXTEST_INCLUDE_DIR}) +# enable_testing() +# +# CXXTEST_ADD_TEST(unittest_foo foo_test.cc +# ${CMAKE_CURRENT_SOURCE_DIR}/foo_test.h) +# target_link_libraries(unittest_foo foo) # as needed +# endif() +# +# This will (if CxxTest is found): +# 1. Invoke the testgen executable to autogenerate foo_test.cc in the +# binary tree from "foo_test.h" in the current source directory. +# 2. Create an executable and test called unittest_foo. +# +# #============= +# Example foo_test.h: +# +# #include +# +# class MyTestSuite : public CxxTest::TestSuite +# { +# public: +# void testAddition( void ) +# { +# TS_ASSERT( 1 + 1 > 1 ); +# TS_ASSERT_EQUALS( 1 + 1, 2 ); +# } +# }; +# + +#============================================================================= +# Copyright 2008-2010 Kitware, Inc. +# Copyright 2008-2010 Philip Lowman +# +# 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.) + +# Version 1.4 (11/18/10) (CMake 2.8.4) +# Issue 11384: Added support to the CXX_ADD_TEST macro so header +# files (containing the tests themselves) show up in +# Visual Studio and other IDEs. +# +# Version 1.3 (8/19/10) (CMake 2.8.3) +# Included patch by Simone Rossetto to check if either Python or Perl +# are present in the system. Whichever intepreter that is detected +# is now used to run the test generator program. If both interpreters +# are detected, the CXXTEST_USE_PYTHON variable is obeyed. +# +# Also added support for CXXTEST_TESTGEN_ARGS, for manually specifying +# options to the CxxTest code generator. +# Version 1.2 (3/2/08) +# Included patch from Tyler Roscoe to have the perl & python binaries +# detected based on CXXTEST_INCLUDE_DIR +# Version 1.1 (2/9/08) +# Clarified example to illustrate need to call target_link_libraries() +# Changed commands to lowercase +# Added licensing info +# Version 1.0 (1/8/08) +# Fixed CXXTEST_INCLUDE_DIRS so it will work properly +# Eliminated superfluous CXXTEST_FOUND assignment +# Cleaned up and added more documentation + +#============================================================= +# CXXTEST_ADD_TEST (public macro) +#============================================================= +macro(CXXTEST_ADD_TEST _cxxtest_testname _cxxtest_outfname) + set(_cxxtest_real_outfname ${CMAKE_CURRENT_BINARY_DIR}/${_cxxtest_outfname}) + + add_custom_command( + OUTPUT ${_cxxtest_real_outfname} + DEPENDS ${ARGN} + COMMAND ${CXXTEST_TESTGEN_INTERPRETER} + ${CXXTEST_TESTGEN_EXECUTABLE} ${CXXTEST_TESTGEN_ARGS} -o ${_cxxtest_real_outfname} ${ARGN} + ) + + set_source_files_properties(${_cxxtest_real_outfname} PROPERTIES GENERATED true) + add_executable(${_cxxtest_testname} ${_cxxtest_real_outfname} ${ARGN}) + + if(CMAKE_RUNTIME_OUTPUT_DIRECTORY) + add_test(${_cxxtest_testname} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${_cxxtest_testname}) + elseif(EXECUTABLE_OUTPUT_PATH) + add_test(${_cxxtest_testname} ${EXECUTABLE_OUTPUT_PATH}/${_cxxtest_testname}) + else() + add_test(${_cxxtest_testname} ${CMAKE_CURRENT_BINARY_DIR}/${_cxxtest_testname}) + endif() + +endmacro(CXXTEST_ADD_TEST) + +#============================================================= +# main() +#============================================================= +if(NOT DEFINED CXXTEST_TESTGEN_ARGS) + set(CXXTEST_TESTGEN_ARGS --error-printer) +endif() + +find_package(PythonInterp QUIET) +find_package(Perl QUIET) + +find_path(CXXTEST_INCLUDE_DIR cxxtest/TestSuite.h) +find_program(CXXTEST_PYTHON_TESTGEN_EXECUTABLE + NAMES cxxtestgen cxxtestgen.py + PATHS ${CXXTEST_INCLUDE_DIR}) +find_program(CXXTEST_PERL_TESTGEN_EXECUTABLE cxxtestgen.pl + PATHS ${CXXTEST_INCLUDE_DIR}) + +if(PYTHONINTERP_FOUND OR PERL_FOUND) + include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + + if(PYTHONINTERP_FOUND AND (CXXTEST_USE_PYTHON OR NOT PERL_FOUND OR NOT DEFINED CXXTEST_USE_PYTHON)) + set(CXXTEST_TESTGEN_EXECUTABLE ${CXXTEST_PYTHON_TESTGEN_EXECUTABLE}) + set(CXXTEST_TESTGEN_INTERPRETER ${PYTHON_EXECUTABLE}) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(CxxTest DEFAULT_MSG + CXXTEST_INCLUDE_DIR CXXTEST_PYTHON_TESTGEN_EXECUTABLE) + + elseif(PERL_FOUND) + set(CXXTEST_TESTGEN_EXECUTABLE ${CXXTEST_PERL_TESTGEN_EXECUTABLE}) + set(CXXTEST_TESTGEN_INTERPRETER ${PERL_EXECUTABLE}) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(CxxTest DEFAULT_MSG + CXXTEST_INCLUDE_DIR CXXTEST_PERL_TESTGEN_EXECUTABLE) + endif() + + if(CXXTEST_FOUND) + set(CXXTEST_INCLUDE_DIRS ${CXXTEST_INCLUDE_DIR}) + endif() + +else() + + set(CXXTEST_FOUND false) + if(NOT CxxTest_FIND_QUIETLY) + if(CxxTest_FIND_REQUIRED) + message(FATAL_ERROR "Neither Python nor Perl found, cannot use CxxTest, aborting!") + else() + message(STATUS "Neither Python nor Perl found, CxxTest will not be used.") + endif() + endif() + +endif() diff --git a/Modules/FindCygwin.cmake b/Modules/FindCygwin.cmake new file mode 100644 index 0000000..28f55ba --- /dev/null +++ b/Modules/FindCygwin.cmake @@ -0,0 +1,28 @@ +# - this module looks for Cygwin +# + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF (WIN32) + FIND_PATH(CYGWIN_INSTALL_PATH + cygwin.bat + "C:/Cygwin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Cygwin\\setup;rootdir]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Cygnus Solutions\\Cygwin\\mounts v2\\/;native]" + ) + + MARK_AS_ADVANCED( + CYGWIN_INSTALL_PATH + ) +ENDIF (WIN32) diff --git a/Modules/FindDCMTK.cmake b/Modules/FindDCMTK.cmake new file mode 100644 index 0000000..361d09e --- /dev/null +++ b/Modules/FindDCMTK.cmake @@ -0,0 +1,154 @@ +# - find DCMTK libraries and applications +# + +# DCMTK_INCLUDE_DIRS - Directories to include to use DCMTK +# DCMTK_LIBRARIES - Files to link against to use DCMTK +# DCMTK_FOUND - If false, don't try to use DCMTK +# DCMTK_DIR - (optional) Source directory for DCMTK +# +# DCMTK_DIR can be used to make it simpler to find the various include +# directories and compiled libraries if you've just compiled it in the +# source tree. Just set it to the root of the tree where you extracted +# the source (default to /usr/include/dcmtk/) + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# Copyright 2009-2010 Mathieu Malaterre +# Copyright 2010 Thomas Sondergaard +# +# 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.) + +# +# Written for VXL by Amitha Perera. +# Upgraded for GDCM by Mathieu Malaterre. +# Modified for EasyViz by Thomas Sondergaard. +# + +if(NOT DCMTK_FOUND AND NOT DCMTK_DIR) + set(DCMTK_DIR + "/usr/include/dcmtk/" + CACHE + PATH + "Root of DCMTK source tree (optional).") + mark_as_advanced(DCMTK_DIR) +endif() + + +foreach(lib + dcmdata + dcmimage + dcmimgle + dcmjpeg + dcmnet + dcmpstat + dcmqrdb + dcmsign + dcmsr + dcmtls + ijg12 + ijg16 + ijg8 + ofstd) + + find_library(DCMTK_${lib}_LIBRARY + ${lib} + PATHS + ${DCMTK_DIR}/${lib}/libsrc + ${DCMTK_DIR}/${lib}/libsrc/Release + ${DCMTK_DIR}/${lib}/libsrc/Debug + ${DCMTK_DIR}/${lib}/Release + ${DCMTK_DIR}/${lib}/Debug + ${DCMTK_DIR}/lib) + + mark_as_advanced(DCMTK_${lib}_LIBRARY) + + if(DCMTK_${lib}_LIBRARY) + list(APPEND DCMTK_LIBRARIES ${DCMTK_${lib}_LIBRARY}) + endif() + +endforeach() + + +set(DCMTK_config_TEST_HEADER osconfig.h) +set(DCMTK_dcmdata_TEST_HEADER dctypes.h) +set(DCMTK_dcmimage_TEST_HEADER dicoimg.h) +set(DCMTK_dcmimgle_TEST_HEADER dcmimage.h) +set(DCMTK_dcmjpeg_TEST_HEADER djdecode.h) +set(DCMTK_dcmnet_TEST_HEADER assoc.h) +set(DCMTK_dcmpstat_TEST_HEADER dcmpstat.h) +set(DCMTK_dcmqrdb_TEST_HEADER dcmqrdba.h) +set(DCMTK_dcmsign_TEST_HEADER sicert.h) +set(DCMTK_dcmsr_TEST_HEADER dsrtree.h) +set(DCMTK_dcmtls_TEST_HEADER tlslayer.h) +set(DCMTK_ofstd_TEST_HEADER ofstdinc.h) + +foreach(dir + config + dcmdata + dcmimage + dcmimgle + dcmjpeg + dcmnet + dcmpstat + dcmqrdb + dcmsign + dcmsr + dcmtls + ofstd) + find_path(DCMTK_${dir}_INCLUDE_DIR + ${DCMTK_${dir}_TEST_HEADER} + PATHS + ${DCMTK_DIR}/${dir}/include + ${DCMTK_DIR}/${dir} + ${DCMTK_DIR}/include/${dir} + ${DCMTK_DIR}/include/dcmtk/${dir} + ${DCMTK_DIR}/${dir}/include/dcmtk/${dir} + ) + mark_as_advanced(DCMTK_${dir}_INCLUDE_DIR) + + if(DCMTK_${dir}_INCLUDE_DIR) + list(APPEND + DCMTK_INCLUDE_DIRS + ${DCMTK_${dir}_INCLUDE_DIR}) + endif() +endforeach() + +if(WIN32) + list(APPEND DCMTK_LIBRARIES netapi32 wsock32) +endif() + +if(DCMTK_ofstd_INCLUDE_DIR) + get_filename_component(DCMTK_dcmtk_INCLUDE_DIR + ${DCMTK_ofstd_INCLUDE_DIR} + PATH + CACHE) + list(APPEND DCMTK_INCLUDE_DIRS ${DCMTK_dcmtk_INCLUDE_DIR}) + mark_as_advanced(DCMTK_dcmtk_INCLUDE_DIR) +endif() + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +find_package_handle_standard_args(DCMTK DEFAULT_MSG + DCMTK_config_INCLUDE_DIR + DCMTK_ofstd_INCLUDE_DIR + DCMTK_ofstd_LIBRARY + DCMTK_dcmdata_INCLUDE_DIR + DCMTK_dcmdata_LIBRARY + DCMTK_dcmimgle_INCLUDE_DIR + DCMTK_dcmimgle_LIBRARY) + +# Compatibility: This variable is deprecated +set(DCMTK_INCLUDE_DIR ${DCMTK_INCLUDE_DIRS}) + +foreach(executable dcmdump dcmdjpeg dcmdrle) + string(TOUPPER ${executable} EXECUTABLE) + find_program(DCMTK_${EXECUTABLE}_EXECUTABLE ${executable} ${DCMTK_DIR}/bin) + mark_as_advanced(DCMTK_${EXECUTABLE}_EXECUTABLE) +endforeach() diff --git a/Modules/FindDart.cmake b/Modules/FindDart.cmake new file mode 100644 index 0000000..f7c54df --- /dev/null +++ b/Modules/FindDart.cmake @@ -0,0 +1,36 @@ +# - Find DART +# This module looks for the dart testing software and sets DART_ROOT +# to point to where it found it. +# + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(DART_ROOT README.INSTALL + $ENV{DART_ROOT} + ${PROJECT_SOURCE_DIR}/Dart + /usr/share/Dart + C:/Dart + "$ENV{ProgramFiles}/Dart" + "C:/Program Files/Dart" + ${PROJECT_SOURCE_DIR}/../Dart + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Dart\\InstallPath] + DOC "If you have Dart installed, where is it located?" + ) + +# handle the QUIETLY and REQUIRED arguments and set DART_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Dart DEFAULT_MSG DART_ROOT) + +MARK_AS_ADVANCED(DART_ROOT) diff --git a/Modules/FindDevIL.cmake b/Modules/FindDevIL.cmake new file mode 100644 index 0000000..0e21284 --- /dev/null +++ b/Modules/FindDevIL.cmake @@ -0,0 +1,63 @@ +# This module locates the developer's image library. +# http://openil.sourceforge.net/ +# +# This module sets: +# IL_LIBRARIES the name of the IL library. These include the full path to the core DevIL library. This one has to be linked into the application. +# ILU_LIBRARIES the name of the ILU library. Again, the full path. This library is for filters and effects, not actual loading. It doesn't have to be linked if the functionality it provides is not used. +# ILUT_LIBRARIES the name of the ILUT library. Full path. This part of the library interfaces with OpenGL. It is not strictly needed in applications. +# IL_INCLUDE_DIR where to find the il.h, ilu.h and ilut.h files. +# IL_FOUND this is set to TRUE if all the above variables were set. This will be set to false if ILU or ILUT are not found, even if they are not needed. In most systems, if one library is found all the others are as well. That's the way the DevIL developers release it. + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# Copyright 2008 Christopher Harvey +# +# 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.) + +# TODO: Add version support. +# Tested under Linux and Windows (MSVC) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +FIND_PATH(IL_INCLUDE_DIR il.h + PATH_SUFFIXES include IL + DOC "The path the the directory that contains il.h" +) + +#MESSAGE("IL_INCLUDE_DIR is ${IL_INCLUDE_DIR}") + +FIND_LIBRARY(IL_LIBRARIES + NAMES IL DEVIL + PATH_SUFFIXES lib64 lib lib32 + DOC "The file that corresponds to the base il library." +) + +#MESSAGE("IL_LIBRARIES is ${IL_LIBRARIES}") + +FIND_LIBRARY(ILUT_LIBRARIES + NAMES ILUT + PATH_SUFFIXES lib64 lib lib32 + DOC "The file that corresponds to the il (system?) utility library." +) + +#MESSAGE("ILUT_LIBRARIES is ${ILUT_LIBRARIES}") + +FIND_LIBRARY(ILU_LIBRARIES + NAMES ILU + PATH_SUFFIXES lib64 lib lib32 + DOC "The file that corresponds to the il utility library." +) + +#MESSAGE("ILU_LIBRARIES is ${ILU_LIBRARIES}") + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(IL DEFAULT_MSG + IL_LIBRARIES ILU_LIBRARIES + ILUT_LIBRARIES IL_INCLUDE_DIR) diff --git a/Modules/FindDoxygen.cmake b/Modules/FindDoxygen.cmake new file mode 100644 index 0000000..6cc9efb --- /dev/null +++ b/Modules/FindDoxygen.cmake @@ -0,0 +1,144 @@ +# - This module looks for Doxygen and the path to Graphviz's dot +# Doxygen is a documentation generation tool. Please see +# http://www.doxygen.org +# +# This module accepts the following optional variables: +# +# DOXYGEN_SKIP_DOT = If true this module will skip trying to find Dot +# (an optional component often used by Doxygen) +# +# This modules defines the following variables: +# +# DOXYGEN_EXECUTABLE = The path to the doxygen command. +# DOXYGEN_FOUND = Was Doxygen found or not? +# DOXYGEN_VERSION = The version reported by doxygen --version +# +# DOXYGEN_DOT_EXECUTABLE = The path to the dot program used by doxygen. +# DOXYGEN_DOT_FOUND = Was Dot found or not? +# DOXYGEN_DOT_PATH = The path to dot not including the executable +# +# + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# For backwards compatibility support +IF(Doxygen_FIND_QUIETLY) + SET(DOXYGEN_FIND_QUIETLY TRUE) +ENDIF(Doxygen_FIND_QUIETLY) + +# ===== Rationale for OS X AppBundle mods below ===== +# With the OS X GUI version, Doxygen likes to be installed to /Applications and +# it contains the doxygen executable in the bundle. In the versions I've +# seen, it is located in Resources, but in general, more often binaries are +# located in MacOS. +# +# NOTE: The official Doxygen.app that is distributed for OS X uses non-standard +# conventions. Instead of the command-line "doxygen" tool being placed in +# Doxygen.app/Contents/MacOS, "Doxywizard" is placed there instead and +# "doxygen" is placed in Contents/Resources. This is most likely done +# so that something happens when people double-click on the Doxygen.app +# package. Unfortunately, CMake gets confused by this as when it sees the +# bundle it uses "Doxywizard" as the executable to use instead of +# "doxygen". Therefore to work-around this issue we temporarily disable +# the app-bundle feature, just for this CMake module: +if(APPLE) + # Save the old setting + SET(TEMP_DOXYGEN_SAVE_CMAKE_FIND_APPBUNDLE ${CMAKE_FIND_APPBUNDLE}) + # Disable the App-bundle detection feature + SET(CMAKE_FIND_APPBUNDLE "NEVER") +endif() +# FYI: +# In the older versions of OS X Doxygen, dot was included with the +# Doxygen bundle. But the new versions require you to download +# Graphviz.app which contains "dot" in it's bundle. +# ============== End OSX stuff ================ + +# +# Find Doxygen... +# + +FIND_PROGRAM(DOXYGEN_EXECUTABLE + NAMES doxygen + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\doxygen_is1;Inno Setup: App Path]/bin" + /Applications/Doxygen.app/Contents/Resources + /Applications/Doxygen.app/Contents/MacOS + DOC "Doxygen documentation generation tool (http://www.doxygen.org)" +) + +IF(DOXYGEN_EXECUTABLE) + EXECUTE_PROCESS(COMMAND ${DOXYGEN_EXECUTABLE} "--version" OUTPUT_VARIABLE DOXYGEN_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) +ENDIF() + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Doxygen REQUIRED_VARS DOXYGEN_EXECUTABLE VERSION_VAR DOXYGEN_VERSION) + +# +# Find Dot... +# + +IF(NOT DOXYGEN_SKIP_DOT) + FIND_PROGRAM(DOXYGEN_DOT_EXECUTABLE + NAMES dot + PATHS + "$ENV{ProgramFiles}/Graphviz 2.21/bin" + "C:/Program Files/Graphviz 2.21/bin" + "$ENV{ProgramFiles}/ATT/Graphviz/bin" + "C:/Program Files/ATT/Graphviz/bin" + [HKEY_LOCAL_MACHINE\\SOFTWARE\\ATT\\Graphviz;InstallPath]/bin + /Applications/Graphviz.app/Contents/MacOS + /Applications/Doxygen.app/Contents/Resources + /Applications/Doxygen.app/Contents/MacOS + DOC "Graphviz Dot tool for using Doxygen" + ) + + if(DOXYGEN_DOT_EXECUTABLE) + set(DOXYGEN_DOT_FOUND TRUE) + # The Doxyfile wants the path to Dot, not the entire path and executable + get_filename_component(DOXYGEN_DOT_PATH "${DOXYGEN_DOT_EXECUTABLE}" PATH CACHE) + endif() + +endif(NOT DOXYGEN_SKIP_DOT) + +# +# Backwards compatibility... +# + +if(APPLE) + # Restore the old app-bundle setting setting + SET(CMAKE_FIND_APPBUNDLE ${TEMP_DOXYGEN_SAVE_CMAKE_FIND_APPBUNDLE}) +endif() + +# Maintain the _FOUND variables as "YES" or "NO" for backwards compatibility +# (allows people to stuff them directly into Doxyfile with configure_file()) +if(DOXYGEN_FOUND) + set(DOXYGEN_FOUND "YES") +else() + set(DOXYGEN_FOUND "NO") +endif() +if(DOXYGEN_DOT_FOUND) + set(DOXYGEN_DOT_FOUND "YES") +else() + set(DOXYGEN_DOT_FOUND "NO") +endif() + +# For backwards compatibility support +SET (DOXYGEN ${DOXYGEN_EXECUTABLE} ) +SET (DOT ${DOXYGEN_DOT_EXECUTABLE} ) + +MARK_AS_ADVANCED( + DOXYGEN_EXECUTABLE + DOXYGEN_DOT_EXECUTABLE + DOXYGEN_DOT_PATH + ) diff --git a/Modules/FindEXPAT.cmake b/Modules/FindEXPAT.cmake new file mode 100644 index 0000000..1bf0743 --- /dev/null +++ b/Modules/FindEXPAT.cmake @@ -0,0 +1,60 @@ +# - Find expat +# Find the native EXPAT headers and libraries. +# +# EXPAT_INCLUDE_DIRS - where to find expat.h, etc. +# EXPAT_LIBRARIES - List of libraries when using expat. +# EXPAT_FOUND - True if expat found. + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Look for the header file. +FIND_PATH(EXPAT_INCLUDE_DIR NAMES expat.h) + +# Look for the library. +FIND_LIBRARY(EXPAT_LIBRARY NAMES expat libexpat) + +if (EXPAT_INCLUDE_DIR AND EXISTS "${EXPAT_INCLUDE_DIR}/expat.h") + file(STRINGS "${EXPAT_INCLUDE_DIR}/expat.h" expat_version_str + REGEX "^#[\t ]*define[\t ]+XML_(MAJOR|MINOR|MICRO)_VERSION[\t ]+[0-9]+$") + + unset(EXPAT_VERSION_STRING) + foreach(VPART MAJOR MINOR MICRO) + foreach(VLINE ${expat_version_str}) + if(VLINE MATCHES "^#[\t ]*define[\t ]+XML_${VPART}_VERSION") + string(REGEX REPLACE "^#[\t ]*define[\t ]+XML_${VPART}_VERSION[\t ]+([0-9]+)$" "\\1" + EXPAT_VERSION_PART "${VLINE}") + if(EXPAT_VERSION_STRING) + set(EXPAT_VERSION_STRING "${EXPAT_VERSION_STRING}.${EXPAT_VERSION_PART}") + else(EXPAT_VERSION_STRING) + set(EXPAT_VERSION_STRING "${EXPAT_VERSION_PART}") + endif(EXPAT_VERSION_STRING) + endif() + endforeach(VLINE) + endforeach(VPART) +endif (EXPAT_INCLUDE_DIR AND EXISTS "${EXPAT_INCLUDE_DIR}/expat.h") + +# handle the QUIETLY and REQUIRED arguments and set EXPAT_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(EXPAT + REQUIRED_VARS EXPAT_LIBRARY EXPAT_INCLUDE_DIR + VERSION_VAR EXPAT_VERSION_STRING) + +# Copy the results to the output variables. +IF(EXPAT_FOUND) + SET(EXPAT_LIBRARIES ${EXPAT_LIBRARY}) + SET(EXPAT_INCLUDE_DIRS ${EXPAT_INCLUDE_DIR}) +ENDIF(EXPAT_FOUND) + +MARK_AS_ADVANCED(EXPAT_INCLUDE_DIR EXPAT_LIBRARY) diff --git a/Modules/FindFLEX.cmake b/Modules/FindFLEX.cmake new file mode 100644 index 0000000..586f77a --- /dev/null +++ b/Modules/FindFLEX.cmake @@ -0,0 +1,161 @@ +# - Find flex executable and provides a macro to generate custom build rules +# +# The module defines the following variables: +# FLEX_FOUND - true is flex executable is found +# FLEX_EXECUTABLE - the path to the flex executable +# FLEX_VERSION - the version of flex +# FLEX_LIBRARIES - The flex libraries +# FLEX_INCLUDE_DIRS - The path to the flex headers +# +# The minimum required version of flex can be specified using the +# standard syntax, e.g. FIND_PACKAGE(FLEX 2.5.13) +# +# +# If flex is found on the system, the module provides the macro: +# FLEX_TARGET(Name FlexInput FlexOutput [COMPILE_FLAGS ]) +# which creates a custom command to generate the file from +# the file. If COMPILE_FLAGS option is specified, the next +# parameter is added to the flex command line. Name is an alias used to +# get details of this custom command. Indeed the macro defines the +# following variables: +# FLEX_${Name}_DEFINED - true is the macro ran successfully +# FLEX_${Name}_OUTPUTS - the source file generated by the custom rule, an +# alias for FlexOutput +# FLEX_${Name}_INPUT - the flex source file, an alias for ${FlexInput} +# +# Flex scanners oftenly use tokens defined by Bison: the code generated +# by Flex depends of the header generated by Bison. This module also +# defines a macro: +# ADD_FLEX_BISON_DEPENDENCY(FlexTarget BisonTarget) +# which adds the required dependency between a scanner and a parser +# where and are the first parameters of +# respectively FLEX_TARGET and BISON_TARGET macros. +# +# ==================================================================== +# Example: +# +# find_package(BISON) +# find_package(FLEX) +# +# BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp) +# FLEX_TARGET(MyScanner lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp) +# ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser) +# +# include_directories(${CMAKE_CURRENT_BINARY_DIR}) +# add_executable(Foo +# Foo.cc +# ${BISON_MyParser_OUTPUTS} +# ${FLEX_MyScanner_OUTPUTS} +# ) +# ==================================================================== + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2006 Tristan Carel +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(FLEX_EXECUTABLE flex DOC "path to the flex executable") +MARK_AS_ADVANCED(FLEX_EXECUTABLE) + +FIND_LIBRARY(FL_LIBRARY NAMES fl + DOC "Path to the fl library") + +FIND_PATH(FLEX_INCLUDE_DIR FlexLexer.h + DOC "Path to the flex headers") + +MARK_AS_ADVANCED(FL_LIBRARY FLEX_INCLUDE_DIR) + +SET(FLEX_INCLUDE_DIRS ${FLEX_INCLUDE_DIR}) +SET(FLEX_LIBRARIES ${FL_LIBRARY}) + +IF(FLEX_EXECUTABLE) + + EXECUTE_PROCESS(COMMAND ${FLEX_EXECUTABLE} --version + OUTPUT_VARIABLE FLEX_version_output + ERROR_VARIABLE FLEX_version_error + RESULT_VARIABLE FLEX_version_result + OUTPUT_STRIP_TRAILING_WHITESPACE) + IF(NOT ${FLEX_version_result} EQUAL 0) + IF(FLEX_FIND_REQUIRED) + MESSAGE(SEND_ERROR "Command \"${FLEX_EXECUTABLE} --version\" failed with output:\n${FLEX_version_output}\n${FLEX_version_error}") + ELSE() + MESSAGE("Command \"${FLEX_EXECUTABLE} --version\" failed with output:\n${FLEX_version_output}\n${FLEX_version_error}\nFLEX_VERSION will not be available") + ENDIF() + ELSE() + # older versions of flex printed "/full/path/to/executable version X.Y" + # newer versions use "basename(executable) X.Y" + GET_FILENAME_COMPONENT(FLEX_EXE_NAME "${FLEX_EXECUTABLE}" NAME) + STRING(REGEX REPLACE "^.*${FLEX_EXE_NAME}\"? (version )?([0-9]+[^ ]*)$" "\\2" + FLEX_VERSION "${FLEX_version_output}") + UNSET(FLEX_EXE_NAME) + ENDIF() + + #============================================================ + # FLEX_TARGET (public macro) + #============================================================ + # + MACRO(FLEX_TARGET Name Input Output) + SET(FLEX_TARGET_usage "FLEX_TARGET( [COMPILE_FLAGS ]") + IF(${ARGC} GREATER 3) + IF(${ARGC} EQUAL 5) + IF("${ARGV3}" STREQUAL "COMPILE_FLAGS") + SET(FLEX_EXECUTABLE_opts "${ARGV4}") + SEPARATE_ARGUMENTS(FLEX_EXECUTABLE_opts) + ELSE() + MESSAGE(SEND_ERROR ${FLEX_TARGET_usage}) + ENDIF() + ELSE() + MESSAGE(SEND_ERROR ${FLEX_TARGET_usage}) + ENDIF() + ENDIF() + + ADD_CUSTOM_COMMAND(OUTPUT ${Output} + COMMAND ${FLEX_EXECUTABLE} + ARGS ${FLEX_EXECUTABLE_opts} -o${Output} ${Input} + DEPENDS ${Input} + COMMENT "[FLEX][${Name}] Building scanner with flex ${FLEX_VERSION}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + + SET(FLEX_${Name}_DEFINED TRUE) + SET(FLEX_${Name}_OUTPUTS ${Output}) + SET(FLEX_${Name}_INPUT ${Input}) + SET(FLEX_${Name}_COMPILE_FLAGS ${FLEX_EXECUTABLE_opts}) + ENDMACRO(FLEX_TARGET) + #============================================================ + + + #============================================================ + # ADD_FLEX_BISON_DEPENDENCY (public macro) + #============================================================ + # + MACRO(ADD_FLEX_BISON_DEPENDENCY FlexTarget BisonTarget) + + IF(NOT FLEX_${FlexTarget}_OUTPUTS) + MESSAGE(SEND_ERROR "Flex target `${FlexTarget}' does not exists.") + ENDIF() + + IF(NOT BISON_${BisonTarget}_OUTPUT_HEADER) + MESSAGE(SEND_ERROR "Bison target `${BisonTarget}' does not exists.") + ENDIF() + + SET_SOURCE_FILES_PROPERTIES(${FLEX_${FlexTarget}_OUTPUTS} + PROPERTIES OBJECT_DEPENDS ${BISON_${BisonTarget}_OUTPUT_HEADER}) + ENDMACRO(ADD_FLEX_BISON_DEPENDENCY) + #============================================================ + +ENDIF(FLEX_EXECUTABLE) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(FLEX REQUIRED_VARS FLEX_EXECUTABLE + VERSION_VAR FLEX_VERSION) + +# FindFLEX.cmake ends here diff --git a/Modules/FindFLTK.cmake b/Modules/FindFLTK.cmake new file mode 100644 index 0000000..bb18a2e --- /dev/null +++ b/Modules/FindFLTK.cmake @@ -0,0 +1,315 @@ +# - Find the native FLTK includes and library +# +# By default FindFLTK.cmake will search for all of the FLTK components and +# add them to the FLTK_LIBRARIES variable. +# +# You can limit the components which get placed in FLTK_LIBRARIES by +# defining one or more of the following three options: +# +# FLTK_SKIP_OPENGL, set to true to disable searching for opengl and +# the FLTK GL library +# FLTK_SKIP_FORMS, set to true to disable searching for fltk_forms +# FLTK_SKIP_IMAGES, set to true to disable searching for fltk_images +# +# FLTK_SKIP_FLUID, set to true if the fluid binary need not be present +# at build time +# +# The following variables will be defined: +# FLTK_FOUND, True if all components not skipped were found +# FLTK_INCLUDE_DIR, where to find include files +# FLTK_LIBRARIES, list of fltk libraries you should link against +# FLTK_FLUID_EXECUTABLE, where to find the Fluid tool +# FLTK_WRAP_UI, This enables the FLTK_WRAP_UI command +# +# The following cache variables are assigned but should not be used. +# See the FLTK_LIBRARIES variable instead. +# +# FLTK_BASE_LIBRARY = the full path to fltk.lib +# FLTK_GL_LIBRARY = the full path to fltk_gl.lib +# FLTK_FORMS_LIBRARY = the full path to fltk_forms.lib +# FLTK_IMAGES_LIBRARY = the full path to fltk_images.lib + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(NOT FLTK_SKIP_OPENGL) + FIND_PACKAGE(OpenGL) +ENDIF() + +# Platform dependent libraries required by FLTK +IF(WIN32) + IF(NOT CYGWIN) + IF(BORLAND) + SET( FLTK_PLATFORM_DEPENDENT_LIBS import32 ) + ELSE(BORLAND) + SET( FLTK_PLATFORM_DEPENDENT_LIBS wsock32 comctl32 ) + ENDIF(BORLAND) + ENDIF(NOT CYGWIN) +ENDIF(WIN32) + +IF(UNIX) + INCLUDE(FindX11) + FIND_LIBRARY(FLTK_MATH_LIBRARY m) + SET( FLTK_PLATFORM_DEPENDENT_LIBS ${X11_LIBRARIES} ${FLTK_MATH_LIBRARY}) +ENDIF(UNIX) + +IF(APPLE) + SET( FLTK_PLATFORM_DEPENDENT_LIBS "-framework Carbon -framework Cocoa -framework ApplicationServices -lz") +ENDIF(APPLE) + +# If FLTK_INCLUDE_DIR is already defined we assigne its value to FLTK_DIR +IF(FLTK_INCLUDE_DIR) + SET(FLTK_DIR ${FLTK_INCLUDE_DIR}) +ENDIF(FLTK_INCLUDE_DIR) + + +# If FLTK has been built using CMake we try to find everything directly +SET(FLTK_DIR_STRING "directory containing FLTKConfig.cmake. This is either the root of the build tree, or PREFIX/lib/fltk for an installation.") + +# Search only if the location is not already known. +IF(NOT FLTK_DIR) + # Get the system search path as a list. + IF(UNIX) + STRING(REGEX MATCHALL "[^:]+" FLTK_DIR_SEARCH1 "$ENV{PATH}") + ELSE(UNIX) + STRING(REGEX REPLACE "\\\\" "/" FLTK_DIR_SEARCH1 "$ENV{PATH}") + ENDIF(UNIX) + STRING(REGEX REPLACE "/;" ";" FLTK_DIR_SEARCH2 ${FLTK_DIR_SEARCH1}) + + # Construct a set of paths relative to the system search path. + SET(FLTK_DIR_SEARCH "") + FOREACH(dir ${FLTK_DIR_SEARCH2}) + SET(FLTK_DIR_SEARCH ${FLTK_DIR_SEARCH} "${dir}/../lib/fltk") + ENDFOREACH(dir) + + # + # Look for an installation or build tree. + # + FIND_PATH(FLTK_DIR FLTKConfig.cmake + # Look for an environment variable FLTK_DIR. + $ENV{FLTK_DIR} + + # Look in places relative to the system executable search path. + ${FLTK_DIR_SEARCH} + + # Look in standard UNIX install locations. + /usr/local/lib/fltk + /usr/lib/fltk + /usr/local/include + /usr/include + /usr/local/fltk + /usr/X11R6/include + + # Read from the CMakeSetup registry entries. It is likely that + # FLTK will have been recently built. + # TODO: Is this really a good idea? I can already hear the user screaming, "But + # it worked when I configured the build LAST week!" + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild1] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild2] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild3] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild4] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild5] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild6] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild7] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild8] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild9] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild10] + + # Help the user find it if we cannot. + DOC "The ${FLTK_DIR_STRING}" + ) +ENDIF(NOT FLTK_DIR) + + # Check if FLTK was built using CMake + IF(EXISTS ${FLTK_DIR}/FLTKConfig.cmake) + SET(FLTK_BUILT_WITH_CMAKE 1) + ENDIF(EXISTS ${FLTK_DIR}/FLTKConfig.cmake) + + IF(FLTK_BUILT_WITH_CMAKE) + SET(FLTK_FOUND 1) + INCLUDE(${FLTK_DIR}/FLTKConfig.cmake) + + # Fluid + IF(FLUID_COMMAND) + SET(FLTK_FLUID_EXECUTABLE ${FLUID_COMMAND} CACHE FILEPATH "Fluid executable") + ELSE(FLUID_COMMAND) + FIND_PROGRAM(FLTK_FLUID_EXECUTABLE fluid PATHS + ${FLTK_EXECUTABLE_DIRS} + ${FLTK_EXECUTABLE_DIRS}/RelWithDebInfo + ${FLTK_EXECUTABLE_DIRS}/Debug + ${FLTK_EXECUTABLE_DIRS}/Release + NO_SYSTEM_PATH) + ENDIF(FLUID_COMMAND) + # MARK_AS_ADVANCED(FLTK_FLUID_EXECUTABLE) + + SET(FLTK_INCLUDE_DIR ${FLTK_DIR}) + LINK_DIRECTORIES(${FLTK_LIBRARY_DIRS}) + + SET(FLTK_BASE_LIBRARY fltk) + SET(FLTK_GL_LIBRARY fltk_gl) + SET(FLTK_FORMS_LIBRARY fltk_forms) + SET(FLTK_IMAGES_LIBRARY fltk_images) + + # Add the extra libraries + LOAD_CACHE(${FLTK_DIR} + READ_WITH_PREFIX + FL FLTK_USE_SYSTEM_JPEG + FL FLTK_USE_SYSTEM_PNG + FL FLTK_USE_SYSTEM_ZLIB + ) + + SET(FLTK_IMAGES_LIBS "") + IF(FLFLTK_USE_SYSTEM_JPEG) + SET(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_jpeg) + ENDIF(FLFLTK_USE_SYSTEM_JPEG) + IF(FLFLTK_USE_SYSTEM_PNG) + SET(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_png) + ENDIF(FLFLTK_USE_SYSTEM_PNG) + IF(FLFLTK_USE_SYSTEM_ZLIB) + SET(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_zlib) + ENDIF(FLFLTK_USE_SYSTEM_ZLIB) + SET(FLTK_IMAGES_LIBS "${FLTK_IMAGES_LIBS}" CACHE INTERNAL + "Extra libraries for fltk_images library.") + + ELSE(FLTK_BUILT_WITH_CMAKE) + + # if FLTK was not built using CMake + # Find fluid executable. + FIND_PROGRAM(FLTK_FLUID_EXECUTABLE fluid ${FLTK_INCLUDE_DIR}/fluid) + + # Use location of fluid to help find everything else. + SET(FLTK_INCLUDE_SEARCH_PATH "") + SET(FLTK_LIBRARY_SEARCH_PATH "") + IF(FLTK_FLUID_EXECUTABLE) + GET_FILENAME_COMPONENT(FLTK_BIN_DIR "${FLTK_FLUID_EXECUTABLE}" PATH) + SET(FLTK_INCLUDE_SEARCH_PATH ${FLTK_INCLUDE_SEARCH_PATH} + ${FLTK_BIN_DIR}/../include ${FLTK_BIN_DIR}/..) + SET(FLTK_LIBRARY_SEARCH_PATH ${FLTK_LIBRARY_SEARCH_PATH} + ${FLTK_BIN_DIR}/../lib) + SET(FLTK_WRAP_UI 1) + ENDIF(FLTK_FLUID_EXECUTABLE) + + # + # Try to find FLTK include dir using fltk-config + # + IF(UNIX) + # Use fltk-config to generate a list of possible include directories + FIND_PROGRAM(FLTK_CONFIG_SCRIPT fltk-config PATHS ${FLTK_BIN_DIR}) + IF(FLTK_CONFIG_SCRIPT) + IF(NOT FLTK_INCLUDE_DIR) + EXEC_PROGRAM(${FLTK_CONFIG_SCRIPT} ARGS --cxxflags OUTPUT_VARIABLE FLTK_CXXFLAGS) + IF(FLTK_CXXFLAGS) + STRING(REGEX MATCHALL "-I[^ ]*" _fltk_temp_dirs ${FLTK_CXXFLAGS}) + STRING(REPLACE "-I" "" _fltk_temp_dirs "${_fltk_temp_dirs}") + FOREACH(_dir ${_fltk_temp_dirs}) + STRING(STRIP ${_dir} _output) + LIST(APPEND _FLTK_POSSIBLE_INCLUDE_DIRS ${_output}) + ENDFOREACH() + ENDIF(FLTK_CXXFLAGS) + ENDIF() + ENDIF() + ENDIF() + + SET(FLTK_INCLUDE_SEARCH_PATH ${FLTK_INCLUDE_SEARCH_PATH} + /usr/local/fltk + /usr/X11R6/include + ${_FLTK_POSSIBLE_INCLUDE_DIRS} + ) + + FIND_PATH(FLTK_INCLUDE_DIR + NAMES FL/Fl.h FL/Fl.H # fltk 1.1.9 has Fl.H (#8376) + PATHS ${FLTK_INCLUDE_SEARCH_PATH}) + + # + # Try to find FLTK library + IF(UNIX) + IF(FLTK_CONFIG_SCRIPT) + EXEC_PROGRAM(${FLTK_CONFIG_SCRIPT} ARGS --libs OUTPUT_VARIABLE _FLTK_POSSIBLE_LIBS) + IF(_FLTK_POSSIBLE_LIBS) + GET_FILENAME_COMPONENT(_FLTK_POSSIBLE_LIBRARY_DIR ${_FLTK_POSSIBLE_LIBS} PATH) + ENDIF() + ENDIF() + ENDIF() + + SET(FLTK_LIBRARY_SEARCH_PATH ${FLTK_LIBRARY_SEARCH_PATH} + /usr/local/fltk/lib + /usr/X11R6/lib + ${FLTK_INCLUDE_DIR}/lib + ${_FLTK_POSSIBLE_LIBRARY_DIR} + ) + + FIND_LIBRARY(FLTK_BASE_LIBRARY NAMES fltk fltkd + PATHS ${FLTK_LIBRARY_SEARCH_PATH}) + FIND_LIBRARY(FLTK_GL_LIBRARY NAMES fltkgl fltkgld fltk_gl + PATHS ${FLTK_LIBRARY_SEARCH_PATH}) + FIND_LIBRARY(FLTK_FORMS_LIBRARY NAMES fltkforms fltkformsd fltk_forms + PATHS ${FLTK_LIBRARY_SEARCH_PATH}) + FIND_LIBRARY(FLTK_IMAGES_LIBRARY NAMES fltkimages fltkimagesd fltk_images + PATHS ${FLTK_LIBRARY_SEARCH_PATH}) + + # Find the extra libraries needed for the fltk_images library. + IF(UNIX) + IF(FLTK_CONFIG_SCRIPT) + EXEC_PROGRAM(${FLTK_CONFIG_SCRIPT} ARGS --use-images --ldflags + OUTPUT_VARIABLE FLTK_IMAGES_LDFLAGS) + SET(FLTK_LIBS_EXTRACT_REGEX ".*-lfltk_images (.*) -lfltk.*") + IF("${FLTK_IMAGES_LDFLAGS}" MATCHES "${FLTK_LIBS_EXTRACT_REGEX}") + STRING(REGEX REPLACE "${FLTK_LIBS_EXTRACT_REGEX}" "\\1" + FLTK_IMAGES_LIBS "${FLTK_IMAGES_LDFLAGS}") + STRING(REGEX REPLACE " +" ";" FLTK_IMAGES_LIBS "${FLTK_IMAGES_LIBS}") + # The EXEC_PROGRAM will not be inherited into subdirectories from + # the file that originally included this module. Save the answer. + SET(FLTK_IMAGES_LIBS "${FLTK_IMAGES_LIBS}" CACHE INTERNAL + "Extra libraries for fltk_images library.") + ENDIF("${FLTK_IMAGES_LDFLAGS}" MATCHES "${FLTK_LIBS_EXTRACT_REGEX}") + ENDIF(FLTK_CONFIG_SCRIPT) + ENDIF(UNIX) + + ENDIF(FLTK_BUILT_WITH_CMAKE) + + # Append all of the required libraries together (by default, everything) + SET(FLTK_LIBRARIES) + IF(NOT FLTK_SKIP_IMAGES) + LIST(APPEND FLTK_LIBRARIES ${FLTK_IMAGES_LIBRARY}) + ENDIF() + IF(NOT FLTK_SKIP_FORMS) + LIST(APPEND FLTK_LIBRARIES ${FLTK_FORMS_LIBRARY}) + ENDIF() + IF(NOT FLTK_SKIP_OPENGL) + LIST(APPEND FLTK_LIBRARIES ${FLTK_GL_LIBRARY} ${OPENGL_gl_LIBRARY}) + LIST(APPEND FLTK_INCLUDE_DIR ${OPENGL_INCLUDE_DIR}) + LIST(REMOVE_DUPLICATES FLTK_INCLUDE_DIR) + ENDIF() + LIST(APPEND FLTK_LIBRARIES ${FLTK_BASE_LIBRARY}) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +IF(FLTK_SKIP_FLUID) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(FLTK DEFAULT_MSG FLTK_LIBRARIES FLTK_INCLUDE_DIR) +ELSE() + FIND_PACKAGE_HANDLE_STANDARD_ARGS(FLTK DEFAULT_MSG FLTK_LIBRARIES FLTK_INCLUDE_DIR FLTK_FLUID_EXECUTABLE) +ENDIF() + +IF(FLTK_FOUND) + IF(APPLE) + SET(FLTK_LIBRARIES ${FLTK_PLATFORM_DEPENDENT_LIBS} ${FLTK_LIBRARIES}) + ELSE(APPLE) + SET(FLTK_LIBRARIES ${FLTK_LIBRARIES} ${FLTK_PLATFORM_DEPENDENT_LIBS}) + ENDIF(APPLE) + + # The following deprecated settings are for compatibility with CMake 1.4 + SET (HAS_FLTK ${FLTK_FOUND}) + SET (FLTK_INCLUDE_PATH ${FLTK_INCLUDE_DIR}) + SET (FLTK_FLUID_EXE ${FLTK_FLUID_EXECUTABLE}) + SET (FLTK_LIBRARY ${FLTK_LIBRARIES}) +ENDIF(FLTK_FOUND) + diff --git a/Modules/FindFLTK2.cmake b/Modules/FindFLTK2.cmake new file mode 100644 index 0000000..436e280 --- /dev/null +++ b/Modules/FindFLTK2.cmake @@ -0,0 +1,277 @@ +# - Find the native FLTK2 includes and library +# The following settings are defined +# FLTK2_FLUID_EXECUTABLE, where to find the Fluid tool +# FLTK2_WRAP_UI, This enables the FLTK2_WRAP_UI command +# FLTK2_INCLUDE_DIR, where to find include files +# FLTK2_LIBRARIES, list of fltk2 libraries +# FLTK2_FOUND, Don't use FLTK2 if false. +# The following settings should not be used in general. +# FLTK2_BASE_LIBRARY = the full path to fltk2.lib +# FLTK2_GL_LIBRARY = the full path to fltk2_gl.lib +# FLTK2_IMAGES_LIBRARY = the full path to fltk2_images.lib + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET (FLTK2_DIR $ENV{FLTK2_DIR} ) + +# Platform dependent libraries required by FLTK2 +IF(WIN32) + IF(NOT CYGWIN) + IF(BORLAND) + SET( FLTK2_PLATFORM_DEPENDENT_LIBS import32 ) + ELSE(BORLAND) + SET( FLTK2_PLATFORM_DEPENDENT_LIBS wsock32 comctl32 ) + ENDIF(BORLAND) + ENDIF(NOT CYGWIN) +ENDIF(WIN32) + +IF(UNIX) + INCLUDE(${CMAKE_ROOT}/Modules/FindX11.cmake) + SET( FLTK2_PLATFORM_DEPENDENT_LIBS ${X11_LIBRARIES} -lm) +ENDIF(UNIX) + +IF(APPLE) + SET( FLTK2_PLATFORM_DEPENDENT_LIBS "-framework Carbon -framework Cocoa -framework ApplicationServices -lz") +ENDIF(APPLE) + +# If FLTK2_INCLUDE_DIR is already defined we assigne its value to FLTK2_DIR +IF(FLTK2_INCLUDE_DIR) + SET(FLTK2_DIR ${FLTK2_INCLUDE_DIR}) +ELSE(FLTK2_INCLUDE_DIR) + SET(FLTK2_INCLUDE_DIR ${FLTK2_DIR}) +ENDIF(FLTK2_INCLUDE_DIR) + + +# If FLTK2 has been built using CMake we try to find everything directly +SET(FLTK2_DIR_STRING "directory containing FLTK2Config.cmake. This is either the root of the build tree, or PREFIX/lib/fltk for an installation.") + +# Search only if the location is not already known. +IF(NOT FLTK2_DIR) + # Get the system search path as a list. + IF(UNIX) + STRING(REGEX MATCHALL "[^:]+" FLTK2_DIR_SEARCH1 "$ENV{PATH}") + ELSE(UNIX) + STRING(REGEX REPLACE "\\\\" "/" FLTK2_DIR_SEARCH1 "$ENV{PATH}") + ENDIF(UNIX) + STRING(REGEX REPLACE "/;" ";" FLTK2_DIR_SEARCH2 ${FLTK2_DIR_SEARCH1}) + + # Construct a set of paths relative to the system search path. + SET(FLTK2_DIR_SEARCH "") + FOREACH(dir ${FLTK2_DIR_SEARCH2}) + SET(FLTK2_DIR_SEARCH ${FLTK2_DIR_SEARCH} "${dir}/../lib/fltk") + ENDFOREACH(dir) + + # + # Look for an installation or build tree. + # + FIND_PATH(FLTK2_DIR FLTK2Config.cmake + # Look for an environment variable FLTK2_DIR. + $ENV{FLTK2_DIR} + + # Look in places relative to the system executable search path. + ${FLTK2_DIR_SEARCH} + + # Look in standard UNIX install locations. + /usr/local/lib/fltk2 + /usr/lib/fltk2 + /usr/local/include + /usr/include + /usr/local/fltk2 + /usr/X11R6/include + + # Read from the CMakeSetup registry entries. It is likely that + # FLTK2 will have been recently built. + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild1] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild2] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild3] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild4] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild5] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild6] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild7] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild8] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild9] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild10] + + # Help the user find it if we cannot. + DOC "The ${FLTK2_DIR_STRING}" + ) + + IF(NOT FLTK2_DIR) + FIND_PATH(FLTK2_DIR fltk/run.h ${FLTK2_INCLUDE_SEARCH_PATH}) + ENDIF(NOT FLTK2_DIR) + +ENDIF(NOT FLTK2_DIR) + + +# If FLTK2 was found, load the configuration file to get the rest of the +# settings. +IF(FLTK2_DIR) + + # Check if FLTK2 was built using CMake + IF(EXISTS ${FLTK2_DIR}/FLTK2Config.cmake) + SET(FLTK2_BUILT_WITH_CMAKE 1) + ENDIF(EXISTS ${FLTK2_DIR}/FLTK2Config.cmake) + + IF(FLTK2_BUILT_WITH_CMAKE) + SET(FLTK2_FOUND 1) + INCLUDE(${FLTK2_DIR}/FLTK2Config.cmake) + + # Fluid + IF(FLUID_COMMAND) + SET(FLTK2_FLUID_EXECUTABLE ${FLUID_COMMAND} CACHE FILEPATH "Fluid executable") + ELSE(FLUID_COMMAND) + FIND_PROGRAM(FLTK2_FLUID_EXECUTABLE fluid2 PATHS + ${FLTK2_EXECUTABLE_DIRS} + ${FLTK2_EXECUTABLE_DIRS}/RelWithDebInfo + ${FLTK2_EXECUTABLE_DIRS}/Debug + ${FLTK2_EXECUTABLE_DIRS}/Release + NO_SYSTEM_PATH) + ENDIF(FLUID_COMMAND) + + MARK_AS_ADVANCED(FLTK2_FLUID_EXECUTABLE) + SET( FLTK_FLUID_EXECUTABLE ${FLTK2_FLUID_EXECUTABLE} ) + + + + + SET(FLTK2_INCLUDE_DIR ${FLTK2_DIR}) + LINK_DIRECTORIES(${FLTK2_LIBRARY_DIRS}) + + SET(FLTK2_BASE_LIBRARY fltk2) + SET(FLTK2_GL_LIBRARY fltk2_gl) + SET(FLTK2_IMAGES_LIBRARY fltk2_images) + + # Add the extra libraries + LOAD_CACHE(${FLTK2_DIR} + READ_WITH_PREFIX + FL FLTK2_USE_SYSTEM_JPEG + FL FLTK2_USE_SYSTEM_PNG + FL FLTK2_USE_SYSTEM_ZLIB + ) + + SET(FLTK2_IMAGES_LIBS "") + IF(FLFLTK2_USE_SYSTEM_JPEG) + SET(FLTK2_IMAGES_LIBS ${FLTK2_IMAGES_LIBS} fltk2_jpeg) + ENDIF(FLFLTK2_USE_SYSTEM_JPEG) + IF(FLFLTK2_USE_SYSTEM_PNG) + SET(FLTK2_IMAGES_LIBS ${FLTK2_IMAGES_LIBS} fltk2_png) + ENDIF(FLFLTK2_USE_SYSTEM_PNG) + IF(FLFLTK2_USE_SYSTEM_ZLIB) + SET(FLTK2_IMAGES_LIBS ${FLTK2_IMAGES_LIBS} fltk2_zlib) + ENDIF(FLFLTK2_USE_SYSTEM_ZLIB) + SET(FLTK2_IMAGES_LIBS "${FLTK2_IMAGES_LIBS}" CACHE INTERNAL + "Extra libraries for fltk2_images library.") + + ELSE(FLTK2_BUILT_WITH_CMAKE) + + # if FLTK2 was not built using CMake + # Find fluid executable. + FIND_PROGRAM(FLTK2_FLUID_EXECUTABLE fluid2 ${FLTK2_INCLUDE_DIR}/fluid) + + # Use location of fluid to help find everything else. + SET(FLTK2_INCLUDE_SEARCH_PATH "") + SET(FLTK2_LIBRARY_SEARCH_PATH "") + IF(FLTK2_FLUID_EXECUTABLE) + SET( FLTK_FLUID_EXECUTABLE ${FLTK2_FLUID_EXECUTABLE} ) + GET_FILENAME_COMPONENT(FLTK2_BIN_DIR "${FLTK2_FLUID_EXECUTABLE}" PATH) + SET(FLTK2_INCLUDE_SEARCH_PATH ${FLTK2_INCLUDE_SEARCH_PATH} + ${FLTK2_BIN_DIR}/../include ${FLTK2_BIN_DIR}/..) + SET(FLTK2_LIBRARY_SEARCH_PATH ${FLTK2_LIBRARY_SEARCH_PATH} + ${FLTK2_BIN_DIR}/../lib) + SET(FLTK2_WRAP_UI 1) + ENDIF(FLTK2_FLUID_EXECUTABLE) + + SET(FLTK2_INCLUDE_SEARCH_PATH ${FLTK2_INCLUDE_SEARCH_PATH} + /usr/local/include + /usr/include + /usr/local/fltk2 + /usr/X11R6/include + ) + + FIND_PATH(FLTK2_INCLUDE_DIR fltk/run.h ${FLTK2_INCLUDE_SEARCH_PATH}) + + SET(FLTK2_LIBRARY_SEARCH_PATH ${FLTK2_LIBRARY_SEARCH_PATH} + /usr/lib + /usr/local/lib + /usr/local/fltk2/lib + /usr/X11R6/lib + ${FLTK2_INCLUDE_DIR}/lib + ) + + FIND_LIBRARY(FLTK2_BASE_LIBRARY NAMES fltk2 + PATHS ${FLTK2_LIBRARY_SEARCH_PATH}) + FIND_LIBRARY(FLTK2_GL_LIBRARY NAMES fltk2_gl + PATHS ${FLTK2_LIBRARY_SEARCH_PATH}) + FIND_LIBRARY(FLTK2_IMAGES_LIBRARY NAMES fltk2_images + PATHS ${FLTK2_LIBRARY_SEARCH_PATH}) + + # Find the extra libraries needed for the fltk_images library. + IF(UNIX) + FIND_PROGRAM(FLTK2_CONFIG_SCRIPT fltk2-config PATHS ${FLTK2_BIN_DIR}) + IF(FLTK2_CONFIG_SCRIPT) + EXEC_PROGRAM(${FLTK2_CONFIG_SCRIPT} ARGS --use-images --ldflags + OUTPUT_VARIABLE FLTK2_IMAGES_LDFLAGS) + SET(FLTK2_LIBS_EXTRACT_REGEX ".*-lfltk2_images (.*) -lfltk2.*") + IF("${FLTK2_IMAGES_LDFLAGS}" MATCHES "${FLTK2_LIBS_EXTRACT_REGEX}") + STRING(REGEX REPLACE "${FLTK2_LIBS_EXTRACT_REGEX}" "\\1" + FLTK2_IMAGES_LIBS "${FLTK2_IMAGES_LDFLAGS}") + STRING(REGEX REPLACE " +" ";" FLTK2_IMAGES_LIBS "${FLTK2_IMAGES_LIBS}") + # The EXEC_PROGRAM will not be inherited into subdirectories from + # the file that originally included this module. Save the answer. + SET(FLTK2_IMAGES_LIBS "${FLTK2_IMAGES_LIBS}" CACHE INTERNAL + "Extra libraries for fltk_images library.") + ENDIF("${FLTK2_IMAGES_LDFLAGS}" MATCHES "${FLTK2_LIBS_EXTRACT_REGEX}") + ENDIF(FLTK2_CONFIG_SCRIPT) + ENDIF(UNIX) + + ENDIF(FLTK2_BUILT_WITH_CMAKE) +ENDIF(FLTK2_DIR) + + +SET(FLTK2_FOUND 1) +FOREACH(var FLTK2_FLUID_EXECUTABLE FLTK2_INCLUDE_DIR + FLTK2_BASE_LIBRARY FLTK2_GL_LIBRARY + FLTK2_IMAGES_LIBRARY) + IF(NOT ${var}) + MESSAGE( STATUS "${var} not found" ) + SET(FLTK2_FOUND 0) + ENDIF(NOT ${var}) +ENDFOREACH(var) + + +IF(FLTK2_FOUND) + SET(FLTK2_LIBRARIES ${FLTK2_IMAGES_LIBRARY} ${FLTK2_IMAGES_LIBS} ${FLTK2_BASE_LIBRARY} ${FLTK2_GL_LIBRARY} ) + IF(APPLE) + SET(FLTK2_LIBRARIES ${FLTK2_PLATFORM_DEPENDENT_LIBS} ${FLTK2_LIBRARIES}) + ELSE(APPLE) + SET(FLTK2_LIBRARIES ${FLTK2_LIBRARIES} ${FLTK2_PLATFORM_DEPENDENT_LIBS}) + ENDIF(APPLE) + + # The following deprecated settings are for compatibility with CMake 1.4 + SET (HAS_FLTK2 ${FLTK2_FOUND}) + SET (FLTK2_INCLUDE_PATH ${FLTK2_INCLUDE_DIR}) + SET (FLTK2_FLUID_EXE ${FLTK2_FLUID_EXECUTABLE}) + SET (FLTK2_LIBRARY ${FLTK2_LIBRARIES}) +ELSE(FLTK2_FOUND) + # make FIND_PACKAGE friendly + IF(NOT FLTK2_FIND_QUIETLY) + IF(FLTK2_FIND_REQUIRED) + MESSAGE(FATAL_ERROR + "FLTK2 required, please specify its location with FLTK2_DIR.") + ELSE(FLTK2_FIND_REQUIRED) + MESSAGE(STATUS "FLTK2 was not found.") + ENDIF(FLTK2_FIND_REQUIRED) + ENDIF(NOT FLTK2_FIND_QUIETLY) +ENDIF(FLTK2_FOUND) + diff --git a/Modules/FindFreetype.cmake b/Modules/FindFreetype.cmake new file mode 100644 index 0000000..e6f6702 --- /dev/null +++ b/Modules/FindFreetype.cmake @@ -0,0 +1,110 @@ +# - Locate FreeType library +# This module defines +# FREETYPE_LIBRARIES, the library to link against +# FREETYPE_FOUND, if false, do not try to link to FREETYPE +# FREETYPE_INCLUDE_DIRS, where to find headers. +# FREETYPE_VERSION_STRING, the version of freetype found (since CMake 2.8.8) +# This is the concatenation of the paths: +# FREETYPE_INCLUDE_DIR_ft2build +# FREETYPE_INCLUDE_DIR_freetype2 +# +# $FREETYPE_DIR is an environment variable that would +# correspond to the ./configure --prefix=$FREETYPE_DIR +# used in building FREETYPE. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Created by Eric Wing. +# Modifications by Alexander Neundorf. +# This file has been renamed to "FindFreetype.cmake" instead of the correct +# "FindFreeType.cmake" in order to be compatible with the one from KDE4, Alex. + +# Ugh, FreeType seems to use some #include trickery which +# makes this harder than it should be. It looks like they +# put ft2build.h in a common/easier-to-find location which +# then contains a #include to a more specific header in a +# more specific location (#include ). +# Then from there, they need to set a bunch of #define's +# so you can do something like: +# #include FT_FREETYPE_H +# Unfortunately, using CMake's mechanisms like INCLUDE_DIRECTORIES() +# wants explicit full paths and this trickery doesn't work too well. +# I'm going to attempt to cut out the middleman and hope +# everything still works. +FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h + HINTS + $ENV{FREETYPE_DIR} + PATHS + /usr/local/X11R6/include + /usr/local/X11/include + /usr/freeware/include +) + +FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h + HINTS + $ENV{FREETYPE_DIR}/include/freetype2 + PATHS + /usr/local/X11R6/include + /usr/local/X11/include + /usr/freeware/include + PATH_SUFFIXES freetype2 +) + +FIND_LIBRARY(FREETYPE_LIBRARY + NAMES freetype libfreetype freetype219 + HINTS + $ENV{FREETYPE_DIR} + PATH_SUFFIXES lib64 lib + PATHS + /usr/local/X11R6 + /usr/local/X11 + /usr/freeware +) + +# set the user variables +IF(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2) + SET(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}") +ENDIF(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2) +SET(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}") + +IF(FREETYPE_INCLUDE_DIR_freetype2 AND EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h") + FILE(STRINGS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h" freetype_version_str + REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$") + + UNSET(FREETYPE_VERSION_STRING) + FOREACH(VPART MAJOR MINOR PATCH) + FOREACH(VLINE ${freetype_version_str}) + IF(VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}") + STRING(REGEX REPLACE "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$" "\\1" + FREETYPE_VERSION_PART "${VLINE}") + IF(FREETYPE_VERSION_STRING) + SET(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_STRING}.${FREETYPE_VERSION_PART}") + ELSE(FREETYPE_VERSION_STRING) + SET(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_PART}") + ENDIF(FREETYPE_VERSION_STRING) + UNSET(FREETYPE_VERSION_PART) + ENDIF() + ENDFOREACH(VLINE) + ENDFOREACH(VPART) +ENDIF(FREETYPE_INCLUDE_DIR_freetype2 AND EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h") + + +# handle the QUIETLY and REQUIRED arguments and set FREETYPE_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Freetype + REQUIRED_VARS FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS + VERSION_VAR FREETYPE_VERSION_STRING) + +MARK_AS_ADVANCED(FREETYPE_LIBRARY FREETYPE_INCLUDE_DIR_freetype2 FREETYPE_INCLUDE_DIR_ft2build) diff --git a/Modules/FindGCCXML.cmake b/Modules/FindGCCXML.cmake new file mode 100644 index 0000000..261a5d1 --- /dev/null +++ b/Modules/FindGCCXML.cmake @@ -0,0 +1,27 @@ +# - Find the GCC-XML front-end executable. +# +# This module will define the following variables: +# GCCXML - the GCC-XML front-end executable. + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(GCCXML + NAMES gccxml + ../GCC_XML/gccxml + PATHS [HKEY_CURRENT_USER\\Software\\Kitware\\GCC_XML;loc] + "$ENV{ProgramFiles}/GCC_XML" + "C:/Program Files/GCC_XML" +) + +MARK_AS_ADVANCED(GCCXML) diff --git a/Modules/FindGDAL.cmake b/Modules/FindGDAL.cmake new file mode 100644 index 0000000..c31bef5 --- /dev/null +++ b/Modules/FindGDAL.cmake @@ -0,0 +1,107 @@ +# Locate gdal +# +# This module accepts the following environment variables: +# +# GDAL_DIR or GDAL_ROOT - Specify the location of GDAL +# +# This module defines the following CMake variables: +# +# GDAL_FOUND - True if libgdal is found +# GDAL_LIBRARY - A variable pointing to the GDAL library +# GDAL_INCLUDE_DIR - Where to find the headers + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# +# $GDALDIR is an environment variable that would +# correspond to the ./configure --prefix=$GDAL_DIR +# used in building gdal. +# +# Created by Eric Wing. I'm not a gdal user, but OpenSceneGraph uses it +# for osgTerrain so I whipped this module together for completeness. +# I actually don't know the conventions or where files are typically +# placed in distros. +# Any real gdal users are encouraged to correct this (but please don't +# break the OS X framework stuff when doing so which is what usually seems +# to happen). + +# This makes the presumption that you are include gdal.h like +# +#include "gdal.h" + +FIND_PATH(GDAL_INCLUDE_DIR gdal.h + HINTS + $ENV{GDAL_DIR} + $ENV{GDAL_ROOT} + PATH_SUFFIXES + include/gdal + include/GDAL + include + PATHS + ~/Library/Frameworks/gdal.framework/Headers + /Library/Frameworks/gdal.framework/Headers + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +IF(UNIX) + # Use gdal-config to obtain the library version (this should hopefully + # allow us to -lgdal1.x.y where x.y are correct version) + # For some reason, libgdal development packages do not contain + # libgdal.so... + FIND_PROGRAM(GDAL_CONFIG gdal-config + HINTS + $ENV{GDAL_DIR} + $ENV{GDAL_ROOT} + PATH_SUFFIXES bin + PATHS + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt + ) + + if(GDAL_CONFIG) + exec_program(${GDAL_CONFIG} ARGS --libs OUTPUT_VARIABLE GDAL_CONFIG_LIBS) + if(GDAL_CONFIG_LIBS) + string(REGEX MATCHALL "-l[^ ]+" _gdal_dashl ${GDAL_CONFIG_LIBS}) + string(REGEX REPLACE "-l" "" _gdal_lib "${_gdal_dashl}") + string(REGEX MATCHALL "-L[^ ]+" _gdal_dashL ${GDAL_CONFIG_LIBS}) + string(REGEX REPLACE "-L" "" _gdal_libpath "${_gdal_dashL}") + endif() + endif() +endif() + +FIND_LIBRARY(GDAL_LIBRARY + NAMES ${_gdal_lib} gdal gdal_i gdal1.5.0 gdal1.4.0 gdal1.3.2 GDAL + HINTS + $ENV{GDAL_DIR} + $ENV{GDAL_ROOT} + ${_gdal_libpath} + PATH_SUFFIXES lib64 lib + PATHS + /sw + /opt/local + /opt/csw + /opt + /usr/freeware +) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GDAL DEFAULT_MSG GDAL_LIBRARY GDAL_INCLUDE_DIR) + +set(GDAL_LIBRARIES ${GDAL_LIBRARY}) +set(GDAL_INCLUDE_DIRS ${GDAL_INCLUDE_DIR}) diff --git a/Modules/FindGIF.cmake b/Modules/FindGIF.cmake new file mode 100644 index 0000000..41e9098 --- /dev/null +++ b/Modules/FindGIF.cmake @@ -0,0 +1,80 @@ +# This module searches giflib and defines +# GIF_LIBRARIES - libraries to link to in order to use GIF +# GIF_FOUND, if false, do not try to link +# GIF_INCLUDE_DIR, where to find the headers +# GIF_VERSION, reports either version 4 or 3 (for everything before version 4) +# +# The minimum required version of giflib can be specified using the +# standard syntax, e.g. FIND_PACKAGE(GIF 4) +# +# $GIF_DIR is an environment variable that would +# correspond to the ./configure --prefix=$GIF_DIR + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Created by Eric Wing. +# Modifications by Alexander Neundorf + +FIND_PATH(GIF_INCLUDE_DIR gif_lib.h + HINTS + $ENV{GIF_DIR} + PATH_SUFFIXES include + PATHS + ~/Library/Frameworks + /usr/freeware +) + +# the gif library can have many names :-/ +SET(POTENTIAL_GIF_LIBS gif libgif ungif libungif giflib giflib4) + +FIND_LIBRARY(GIF_LIBRARY + NAMES ${POTENTIAL_GIF_LIBS} + HINTS + $ENV{GIF_DIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /usr/freeware +) + +# see readme.txt +SET(GIF_LIBRARIES ${GIF_LIBRARY}) + +# Very basic version detection. +# The GIF_LIB_VERSION string in gif_lib.h seems to be unreliable, since it seems +# to be always " Version 2.0, " in versions 3.x of giflib. +# In version 4 the member UserData was added to GifFileType, so we check for this +# one. +# http://giflib.sourcearchive.com/documentation/4.1.4/files.html +IF(GIF_INCLUDE_DIR) + INCLUDE(CMakePushCheckState) + INCLUDE(CheckStructHasMember) + CMAKE_PUSH_CHECK_STATE() + SET(GIF_VERSION 3) + SET(CMAKE_REQUIRED_INCLUDES "${GIF_INCLUDE_DIR}") + CHECK_STRUCT_HAS_MEMBER(GifFileType UserData gif_lib.h GIF_GifFileType_UserData ) + IF(GIF_GifFileType_UserData) + SET(GIF_VERSION 4) + ENDIF() + CMAKE_POP_CHECK_STATE() +ENDIF() + + +# handle the QUIETLY and REQUIRED arguments and set GIF_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GIF REQUIRED_VARS GIF_LIBRARY GIF_INCLUDE_DIR + VERSION_VAR GIF_VERSION ) + +MARK_AS_ADVANCED(GIF_INCLUDE_DIR GIF_LIBRARY) diff --git a/Modules/FindGLU.cmake b/Modules/FindGLU.cmake new file mode 100644 index 0000000..5198f11 --- /dev/null +++ b/Modules/FindGLU.cmake @@ -0,0 +1,28 @@ + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Use of this file is deprecated, and is here for backwards compatibility with CMake 1.4 +# GLU library is now found by FindOpenGL.cmake +# + +MESSAGE(STATUS + "WARNING: you are using the obsolete 'GLU' package, please use 'OpenGL' instead") + +INCLUDE(FindOpenGL) + +IF (OPENGL_GLU_FOUND) + SET (GLU_LIBRARY ${OPENGL_LIBRARIES}) + SET (GLU_INCLUDE_PATH ${OPENGL_INCLUDE_DIR}) +ENDIF (OPENGL_GLU_FOUND) + diff --git a/Modules/FindGLUT.cmake b/Modules/FindGLUT.cmake new file mode 100644 index 0000000..8205779 --- /dev/null +++ b/Modules/FindGLUT.cmake @@ -0,0 +1,90 @@ +# - try to find glut library and include files +# GLUT_INCLUDE_DIR, where to find GL/glut.h, etc. +# GLUT_LIBRARIES, the libraries to link against +# GLUT_FOUND, If false, do not try to use GLUT. +# Also defined, but not for general use are: +# GLUT_glut_LIBRARY = the full path to the glut library. +# GLUT_Xmu_LIBRARY = the full path to the Xmu library. +# GLUT_Xi_LIBRARY = the full path to the Xi Library. + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF (WIN32) + FIND_PATH( GLUT_INCLUDE_DIR NAMES GL/glut.h + PATHS ${GLUT_ROOT_PATH}/include ) + FIND_LIBRARY( GLUT_glut_LIBRARY NAMES glut glut32 freeglut + PATHS + ${OPENGL_LIBRARY_DIR} + ${GLUT_ROOT_PATH}/Release + ) +ELSE (WIN32) + + IF (APPLE) + # These values for Apple could probably do with improvement. + FIND_PATH( GLUT_INCLUDE_DIR glut.h + /System/Library/Frameworks/GLUT.framework/Versions/A/Headers + ${OPENGL_LIBRARY_DIR} + ) + SET(GLUT_glut_LIBRARY "-framework GLUT" CACHE STRING "GLUT library for OSX") + SET(GLUT_cocoa_LIBRARY "-framework Cocoa" CACHE STRING "Cocoa framework for OSX") + ELSE (APPLE) + + FIND_PATH( GLUT_INCLUDE_DIR GL/glut.h + /usr/include/GL + /usr/openwin/share/include + /usr/openwin/include + /opt/graphics/OpenGL/include + /opt/graphics/OpenGL/contrib/libglut + ) + + FIND_LIBRARY( GLUT_glut_LIBRARY glut + /usr/openwin/lib + ) + + FIND_LIBRARY( GLUT_Xi_LIBRARY Xi + /usr/openwin/lib + ) + + FIND_LIBRARY( GLUT_Xmu_LIBRARY Xmu + /usr/openwin/lib + ) + + ENDIF (APPLE) + +ENDIF (WIN32) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLUT REQUIRED_VARS GLUT_glut_LIBRARY GLUT_INCLUDE_DIR) + +IF (GLUT_FOUND) + # Is -lXi and -lXmu required on all platforms that have it? + # If not, we need some way to figure out what platform we are on. + SET( GLUT_LIBRARIES + ${GLUT_glut_LIBRARY} + ${GLUT_Xmu_LIBRARY} + ${GLUT_Xi_LIBRARY} + ${GLUT_cocoa_LIBRARY} + ) + + #The following deprecated settings are for backwards compatibility with CMake1.4 + SET (GLUT_LIBRARY ${GLUT_LIBRARIES}) + SET (GLUT_INCLUDE_PATH ${GLUT_INCLUDE_DIR}) +ENDIF(GLUT_FOUND) + +MARK_AS_ADVANCED( + GLUT_INCLUDE_DIR + GLUT_glut_LIBRARY + GLUT_Xmu_LIBRARY + GLUT_Xi_LIBRARY + ) diff --git a/Modules/FindGTK.cmake b/Modules/FindGTK.cmake new file mode 100644 index 0000000..e9cc62f --- /dev/null +++ b/Modules/FindGTK.cmake @@ -0,0 +1,165 @@ +# - try to find GTK (and glib) and GTKGLArea +# GTK_INCLUDE_DIR - Directories to include to use GTK +# GTK_LIBRARIES - Files to link against to use GTK +# GTK_FOUND - GTK was found +# GTK_GL_FOUND - GTK's GL features were found + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# don't even bother under WIN32 +IF(UNIX) + + FIND_PATH( GTK_gtk_INCLUDE_PATH NAMES gtk/gtk.h + PATH_SUFFIXES gtk-1.2 gtk12 + PATHS + /usr/openwin/share/include + /usr/openwin/include + /opt/gnome/include + ) + + # Some Linux distributions (e.g. Red Hat) have glibconfig.h + # and glib.h in different directories, so we need to look + # for both. + # - Atanas Georgiev + + FIND_PATH( GTK_glibconfig_INCLUDE_PATH NAMES glibconfig.h + PATHS + /usr/openwin/share/include + /usr/local/include/glib12 + /usr/lib/glib/include + /usr/local/lib/glib/include + /opt/gnome/include + /opt/gnome/lib/glib/include + ) + + FIND_PATH( GTK_glib_INCLUDE_PATH NAMES glib.h + PATH_SUFFIXES gtk-1.2 glib-1.2 glib12 + PATHS + /usr/openwin/share/include + /usr/lib/glib/include + /opt/gnome/include + ) + + FIND_PATH( GTK_gtkgl_INCLUDE_PATH NAMES gtkgl/gtkglarea.h + PATHS /usr/openwin/share/include + /opt/gnome/include + ) + + FIND_LIBRARY( GTK_gtkgl_LIBRARY gtkgl + /usr/openwin/lib + /opt/gnome/lib + ) + + # + # The 12 suffix is thanks to the FreeBSD ports collection + # + + FIND_LIBRARY( GTK_gtk_LIBRARY + NAMES gtk gtk12 + PATHS /usr/openwin/lib + /opt/gnome/lib + ) + + FIND_LIBRARY( GTK_gdk_LIBRARY + NAMES gdk gdk12 + PATHS /usr/openwin/lib + /opt/gnome/lib + ) + + FIND_LIBRARY( GTK_gmodule_LIBRARY + NAMES gmodule gmodule12 + PATHS /usr/openwin/lib + /opt/gnome/lib + ) + + FIND_LIBRARY( GTK_glib_LIBRARY + NAMES glib glib12 + PATHS /usr/openwin/lib + /opt/gnome/lib + ) + + FIND_LIBRARY( GTK_Xi_LIBRARY + NAMES Xi + PATHS /usr/openwin/lib + /opt/gnome/lib + ) + + FIND_LIBRARY( GTK_gthread_LIBRARY + NAMES gthread gthread12 + PATHS /usr/openwin/lib + /opt/gnome/lib + ) + + IF(GTK_gtk_INCLUDE_PATH + AND GTK_glibconfig_INCLUDE_PATH + AND GTK_glib_INCLUDE_PATH + AND GTK_gtk_LIBRARY + AND GTK_glib_LIBRARY) + + # Assume that if gtk and glib were found, the other + # supporting libraries have also been found. + + SET( GTK_FOUND "YES" ) + SET( GTK_INCLUDE_DIR ${GTK_gtk_INCLUDE_PATH} + ${GTK_glibconfig_INCLUDE_PATH} + ${GTK_glib_INCLUDE_PATH} ) + SET( GTK_LIBRARIES ${GTK_gtk_LIBRARY} + ${GTK_gdk_LIBRARY} + ${GTK_glib_LIBRARY} ) + + IF(GTK_gmodule_LIBRARY) + SET(GTK_LIBRARIES ${GTK_LIBRARIES} ${GTK_gmodule_LIBRARY}) + ENDIF(GTK_gmodule_LIBRARY) + IF(GTK_gthread_LIBRARY) + SET(GTK_LIBRARIES ${GTK_LIBRARIES} ${GTK_gthread_LIBRARY}) + ENDIF(GTK_gthread_LIBRARY) + IF(GTK_Xi_LIBRARY) + SET(GTK_LIBRARIES ${GTK_LIBRARIES} ${GTK_Xi_LIBRARY}) + ENDIF(GTK_Xi_LIBRARY) + + IF(GTK_gtkgl_INCLUDE_PATH AND GTK_gtkgl_LIBRARY) + SET( GTK_GL_FOUND "YES" ) + SET( GTK_INCLUDE_DIR ${GTK_INCLUDE_DIR} + ${GTK_gtkgl_INCLUDE_PATH} ) + SET( GTK_LIBRARIES ${GTK_gtkgl_LIBRARY} ${GTK_LIBRARIES} ) + MARK_AS_ADVANCED( + GTK_gtkgl_LIBRARY + GTK_gtkgl_INCLUDE_PATH + ) + ENDIF(GTK_gtkgl_INCLUDE_PATH AND GTK_gtkgl_LIBRARY) + + ENDIF(GTK_gtk_INCLUDE_PATH + AND GTK_glibconfig_INCLUDE_PATH + AND GTK_glib_INCLUDE_PATH + AND GTK_gtk_LIBRARY + AND GTK_glib_LIBRARY) + + MARK_AS_ADVANCED( + GTK_gdk_LIBRARY + GTK_glib_INCLUDE_PATH + GTK_glib_LIBRARY + GTK_glibconfig_INCLUDE_PATH + GTK_gmodule_LIBRARY + GTK_gthread_LIBRARY + GTK_Xi_LIBRARY + GTK_gtk_INCLUDE_PATH + GTK_gtk_LIBRARY + GTK_gtkgl_INCLUDE_PATH + GTK_gtkgl_LIBRARY + ) + +ENDIF(UNIX) + + + diff --git a/Modules/FindGTK2.cmake b/Modules/FindGTK2.cmake new file mode 100644 index 0000000..a03c023 --- /dev/null +++ b/Modules/FindGTK2.cmake @@ -0,0 +1,590 @@ +# - FindGTK2.cmake +# This module can find the GTK2 widget libraries and several of its other +# optional components like gtkmm, glade, and glademm. +# +# NOTE: If you intend to use version checking, CMake 2.6.2 or later is +# required. +# +# Specify one or more of the following components +# as you call this find module. See example below. +# +# gtk +# gtkmm +# glade +# glademm +# +# The following variables will be defined for your use +# +# GTK2_FOUND - Were all of your specified components found? +# GTK2_INCLUDE_DIRS - All include directories +# GTK2_LIBRARIES - All libraries +# +# GTK2_VERSION - The version of GTK2 found (x.y.z) +# GTK2_MAJOR_VERSION - The major version of GTK2 +# GTK2_MINOR_VERSION - The minor version of GTK2 +# GTK2_PATCH_VERSION - The patch version of GTK2 +# +# Optional variables you can define prior to calling this module: +# +# GTK2_DEBUG - Enables verbose debugging of the module +# GTK2_SKIP_MARK_AS_ADVANCED - Disable marking cache variables as advanced +# GTK2_ADDITIONAL_SUFFIXES - Allows defining additional directories to +# search for include files +# +#================= +# Example Usage: +# +# Call find_package() once, here are some examples to pick from: +# +# Require GTK 2.6 or later +# find_package(GTK2 2.6 REQUIRED gtk) +# +# Require GTK 2.10 or later and Glade +# find_package(GTK2 2.10 REQUIRED gtk glade) +# +# Search for GTK/GTKMM 2.8 or later +# find_package(GTK2 2.8 COMPONENTS gtk gtkmm) +# +# if(GTK2_FOUND) +# include_directories(${GTK2_INCLUDE_DIRS}) +# add_executable(mygui mygui.cc) +# target_link_libraries(mygui ${GTK2_LIBRARIES}) +# endif() +# + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2008-2009 Philip Lowman +# +# 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.) + +# Version 1.3 (11/9/2010) (CMake 2.8.4) +# * 11429: Add support for detecting GTK2 built with Visual Studio 10. +# Thanks to Vincent Levesque for the patch. + +# Version 1.2 (8/30/2010) (CMake 2.8.3) +# * Merge patch for detecting gdk-pixbuf library (split off +# from core GTK in 2.21). Thanks to Vincent Untz for the patch +# and Ricardo Cruz for the heads up. +# Version 1.1 (8/19/2010) (CMake 2.8.3) +# * Add support for detecting GTK2 under macports (thanks to Gary Kramlich) +# Version 1.0 (8/12/2010) (CMake 2.8.3) +# * Add support for detecting new pangommconfig.h header file +# (Thanks to Sune Vuorela & the Debian Project for the patch) +# * Add support for detecting fontconfig.h header +# * Call find_package(Freetype) since it's required +# * Add support for allowing users to add additional library directories +# via the GTK2_ADDITIONAL_SUFFIXES variable (kind of a future-kludge in +# case the GTK developers change versions on any of the directories in the +# future). +# Version 0.8 (1/4/2010) +# * Get module working under MacOSX fink by adding /sw/include, /sw/lib +# to PATHS and the gobject library +# Version 0.7 (3/22/09) +# * Checked into CMake CVS +# * Added versioning support +# * Module now defaults to searching for GTK if COMPONENTS not specified. +# * Added HKCU prior to HKLM registry key and GTKMM specific environment +# variable as per mailing list discussion. +# * Added lib64 to include search path and a few other search paths where GTK +# may be installed on Unix systems. +# * Switched to lowercase CMake commands +# * Prefaced internal variables with _GTK2 to prevent collision +# * Changed internal macros to functions +# * Enhanced documentation +# Version 0.6 (1/8/08) +# Added GTK2_SKIP_MARK_AS_ADVANCED option +# Version 0.5 (12/19/08) +# Second release to cmake mailing list + +#============================================================= +# _GTK2_GET_VERSION +# Internal function to parse the version number in gtkversion.h +# _OUT_major = Major version number +# _OUT_minor = Minor version number +# _OUT_micro = Micro version number +# _gtkversion_hdr = Header file to parse +#============================================================= +function(_GTK2_GET_VERSION _OUT_major _OUT_minor _OUT_micro _gtkversion_hdr) + file(READ ${_gtkversion_hdr} _contents) + if(_contents) + string(REGEX REPLACE ".*#define GTK_MAJOR_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_major} "${_contents}") + string(REGEX REPLACE ".*#define GTK_MINOR_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_minor} "${_contents}") + string(REGEX REPLACE ".*#define GTK_MICRO_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_micro} "${_contents}") + + if(NOT ${_OUT_major} MATCHES "[0-9]+") + message(FATAL_ERROR "Version parsing failed for GTK2_MAJOR_VERSION!") + endif() + if(NOT ${_OUT_minor} MATCHES "[0-9]+") + message(FATAL_ERROR "Version parsing failed for GTK2_MINOR_VERSION!") + endif() + if(NOT ${_OUT_micro} MATCHES "[0-9]+") + message(FATAL_ERROR "Version parsing failed for GTK2_MICRO_VERSION!") + endif() + + set(${_OUT_major} ${${_OUT_major}} PARENT_SCOPE) + set(${_OUT_minor} ${${_OUT_minor}} PARENT_SCOPE) + set(${_OUT_micro} ${${_OUT_micro}} PARENT_SCOPE) + else() + message(FATAL_ERROR "Include file ${_gtkversion_hdr} does not exist") + endif() +endfunction() + +#============================================================= +# _GTK2_FIND_INCLUDE_DIR +# Internal function to find the GTK include directories +# _var = variable to set +# _hdr = header file to look for +#============================================================= +function(_GTK2_FIND_INCLUDE_DIR _var _hdr) + + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "_GTK2_FIND_INCLUDE_DIR( ${_var} ${_hdr} )") + endif() + + set(_relatives + # If these ever change, things will break. + ${GTK2_ADDITIONAL_SUFFIXES} + glibmm-2.4 + glib-2.0 + atk-1.0 + atkmm-1.6 + cairo + cairomm-1.0 + gdk-pixbuf-2.0 + gdkmm-2.4 + giomm-2.4 + gtk-2.0 + gtkmm-2.4 + libglade-2.0 + libglademm-2.4 + pango-1.0 + pangomm-1.4 + sigc++-2.0 + ) + + set(_suffixes) + foreach(_d ${_relatives}) + list(APPEND _suffixes ${_d}) + list(APPEND _suffixes ${_d}/include) # for /usr/lib/gtk-2.0/include + endforeach() + + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "include suffixes = ${_suffixes}") + endif() + + find_path(${_var} ${_hdr} + PATHS + /usr/local/lib64 + /usr/local/lib + /usr/lib64 + /usr/lib + /opt/gnome/include + /opt/gnome/lib + /opt/openwin/include + /usr/openwin/lib + /sw/include + /sw/lib + /opt/local/include + /opt/local/lib + $ENV{GTKMM_BASEPATH}/include + $ENV{GTKMM_BASEPATH}/lib + [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/include + [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib + [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/include + [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib + PATH_SUFFIXES + ${_suffixes} + ) + + if(${_var}) + set(GTK2_INCLUDE_DIRS ${GTK2_INCLUDE_DIRS} ${${_var}} PARENT_SCOPE) + if(NOT GTK2_SKIP_MARK_AS_ADVANCED) + mark_as_advanced(${_var}) + endif() + endif() + +endfunction(_GTK2_FIND_INCLUDE_DIR) + +#============================================================= +# _GTK2_FIND_LIBRARY +# Internal function to find libraries packaged with GTK2 +# _var = library variable to create +#============================================================= +function(_GTK2_FIND_LIBRARY _var _lib _expand_vc _append_version) + + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "_GTK2_FIND_LIBRARY( ${_var} ${_lib} ${_expand_vc} ${_append_version} )") + endif() + + # Not GTK versions per se but the versions encoded into Windows + # import libraries (GtkMM 2.14.1 has a gtkmm-vc80-2_4.lib for example) + # Also the MSVC libraries use _ for . (this is handled below) + set(_versions 2.20 2.18 2.16 2.14 2.12 + 2.10 2.8 2.6 2.4 2.2 2.0 + 1.20 1.18 1.16 1.14 1.12 + 1.10 1.8 1.6 1.4 1.2 1.0) + + set(_library) + set(_library_d) + + set(_library ${_lib}) + + if(_expand_vc AND MSVC) + # Add vc80/vc90/vc100 midfixes + if(MSVC80) + set(_library ${_library}-vc80) + elseif(MSVC90) + set(_library ${_library}-vc90) + elseif(MSVC10) + set(_library ${_library}-vc100) + endif() + set(_library_d ${_library}-d) + endif() + + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "After midfix addition = ${_library} and ${_library_d}") + endif() + + set(_lib_list) + set(_libd_list) + if(_append_version) + foreach(_ver ${_versions}) + list(APPEND _lib_list "${_library}-${_ver}") + list(APPEND _libd_list "${_library_d}-${_ver}") + endforeach() + else() + set(_lib_list ${_library}) + set(_libd_list ${_library_d}) + endif() + + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "library list = ${_lib_list} and library debug list = ${_libd_list}") + endif() + + # For some silly reason the MSVC libraries use _ instead of . + # in the version fields + if(_expand_vc AND MSVC) + set(_no_dots_lib_list) + set(_no_dots_libd_list) + foreach(_l ${_lib_list}) + string(REPLACE "." "_" _no_dots_library ${_l}) + list(APPEND _no_dots_lib_list ${_no_dots_library}) + endforeach() + # And for debug + set(_no_dots_libsd_list) + foreach(_l ${_libd_list}) + string(REPLACE "." "_" _no_dots_libraryd ${_l}) + list(APPEND _no_dots_libd_list ${_no_dots_libraryd}) + endforeach() + + # Copy list back to original names + set(_lib_list ${_no_dots_lib_list}) + set(_libd_list ${_no_dots_libd_list}) + endif() + + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "While searching for ${_var}, our proposed library list is ${_lib_list}") + endif() + + find_library(${_var} + NAMES ${_lib_list} + PATHS + /opt/gnome/lib + /opt/gnome/lib64 + /usr/openwin/lib + /usr/openwin/lib64 + /sw/lib + $ENV{GTKMM_BASEPATH}/lib + [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib + [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib + ) + + if(_expand_vc AND MSVC) + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "While searching for ${_var}_DEBUG our proposed library list is ${_libd_list}") + endif() + + find_library(${_var}_DEBUG + NAMES ${_libd_list} + PATHS + $ENV{GTKMM_BASEPATH}/lib + [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib + [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib + ) + + if(${_var} AND ${_var}_DEBUG) + if(NOT GTK2_SKIP_MARK_AS_ADVANCED) + mark_as_advanced(${_var}_DEBUG) + endif() + set(GTK2_LIBRARIES ${GTK2_LIBRARIES} optimized ${${_var}} debug ${${_var}_DEBUG}) + set(GTK2_LIBRARIES ${GTK2_LIBRARIES} PARENT_SCOPE) + endif() + else() + if(NOT GTK2_SKIP_MARK_AS_ADVANCED) + mark_as_advanced(${_var}) + endif() + set(GTK2_LIBRARIES ${GTK2_LIBRARIES} ${${_var}}) + set(GTK2_LIBRARIES ${GTK2_LIBRARIES} PARENT_SCOPE) + # Set debug to release + set(${_var}_DEBUG ${${_var}}) + set(${_var}_DEBUG ${${_var}} PARENT_SCOPE) + endif() +endfunction(_GTK2_FIND_LIBRARY) + +#============================================================= + +# +# main() +# + +set(GTK2_FOUND) +set(GTK2_INCLUDE_DIRS) +set(GTK2_LIBRARIES) + +if(NOT GTK2_FIND_COMPONENTS) + # Assume they only want GTK + set(GTK2_FIND_COMPONENTS gtk) +endif() + +# +# If specified, enforce version number +# +if(GTK2_FIND_VERSION) + cmake_minimum_required(VERSION 2.6.2) + set(GTK2_FAILED_VERSION_CHECK true) + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "Searching for version ${GTK2_FIND_VERSION}") + endif() + _GTK2_FIND_INCLUDE_DIR(GTK2_GTK_INCLUDE_DIR gtk/gtk.h) + if(GTK2_GTK_INCLUDE_DIR) + _GTK2_GET_VERSION(GTK2_MAJOR_VERSION + GTK2_MINOR_VERSION + GTK2_PATCH_VERSION + ${GTK2_GTK_INCLUDE_DIR}/gtk/gtkversion.h) + set(GTK2_VERSION + ${GTK2_MAJOR_VERSION}.${GTK2_MINOR_VERSION}.${GTK2_PATCH_VERSION}) + if(GTK2_FIND_VERSION_EXACT) + if(GTK2_VERSION VERSION_EQUAL GTK2_FIND_VERSION) + set(GTK2_FAILED_VERSION_CHECK false) + endif() + else() + if(GTK2_VERSION VERSION_EQUAL GTK2_FIND_VERSION OR + GTK2_VERSION VERSION_GREATER GTK2_FIND_VERSION) + set(GTK2_FAILED_VERSION_CHECK false) + endif() + endif() + else() + # If we can't find the GTK include dir, we can't do version checking + if(GTK2_FIND_REQUIRED AND NOT GTK2_FIND_QUIETLY) + message(FATAL_ERROR "Could not find GTK2 include directory") + endif() + return() + endif() + + if(GTK2_FAILED_VERSION_CHECK) + if(GTK2_FIND_REQUIRED AND NOT GTK2_FIND_QUIETLY) + if(GTK2_FIND_VERSION_EXACT) + message(FATAL_ERROR "GTK2 version check failed. Version ${GTK2_VERSION} was found, version ${GTK2_FIND_VERSION} is needed exactly.") + else() + message(FATAL_ERROR "GTK2 version check failed. Version ${GTK2_VERSION} was found, at least version ${GTK2_FIND_VERSION} is required") + endif() + endif() + + # If the version check fails, exit out of the module here + return() + endif() +endif() + +# +# Find all components +# + +find_package(Freetype) +list(APPEND GTK2_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS}) +list(APPEND GTK2_LIBRARIES ${FREETYPE_LIBRARIES}) + +foreach(_GTK2_component ${GTK2_FIND_COMPONENTS}) + if(_GTK2_component STREQUAL "gtk") + _GTK2_FIND_INCLUDE_DIR(GTK2_GLIB_INCLUDE_DIR glib.h) + _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBCONFIG_INCLUDE_DIR glibconfig.h) + _GTK2_FIND_LIBRARY (GTK2_GLIB_LIBRARY glib false true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_GOBJECT_INCLUDE_DIR gobject/gobject.h) + _GTK2_FIND_LIBRARY (GTK2_GOBJECT_LIBRARY gobject false true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_GDK_PIXBUF_INCLUDE_DIR gdk-pixbuf/gdk-pixbuf.h) + _GTK2_FIND_LIBRARY (GTK2_GDK_PIXBUF_LIBRARY gdk_pixbuf false true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_GDK_INCLUDE_DIR gdk/gdk.h) + _GTK2_FIND_INCLUDE_DIR(GTK2_GDKCONFIG_INCLUDE_DIR gdkconfig.h) + _GTK2_FIND_INCLUDE_DIR(GTK2_GTK_INCLUDE_DIR gtk/gtk.h) + + if(UNIX) + _GTK2_FIND_LIBRARY (GTK2_GDK_LIBRARY gdk-x11 false true) + _GTK2_FIND_LIBRARY (GTK2_GTK_LIBRARY gtk-x11 false true) + else() + _GTK2_FIND_LIBRARY (GTK2_GDK_LIBRARY gdk-win32 false true) + _GTK2_FIND_LIBRARY (GTK2_GTK_LIBRARY gtk-win32 false true) + endif() + + _GTK2_FIND_INCLUDE_DIR(GTK2_CAIRO_INCLUDE_DIR cairo.h) + _GTK2_FIND_LIBRARY (GTK2_CAIRO_LIBRARY cairo false false) + + _GTK2_FIND_INCLUDE_DIR(GTK2_FONTCONFIG_INCLUDE_DIR fontconfig/fontconfig.h) + + _GTK2_FIND_INCLUDE_DIR(GTK2_PANGO_INCLUDE_DIR pango/pango.h) + _GTK2_FIND_LIBRARY (GTK2_PANGO_LIBRARY pango false true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_ATK_INCLUDE_DIR atk/atk.h) + _GTK2_FIND_LIBRARY (GTK2_ATK_LIBRARY atk false true) + + + elseif(_GTK2_component STREQUAL "gtkmm") + + _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBMM_INCLUDE_DIR glibmm.h) + _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBMMCONFIG_INCLUDE_DIR glibmmconfig.h) + _GTK2_FIND_LIBRARY (GTK2_GLIBMM_LIBRARY glibmm true true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_GDKMM_INCLUDE_DIR gdkmm.h) + _GTK2_FIND_INCLUDE_DIR(GTK2_GDKMMCONFIG_INCLUDE_DIR gdkmmconfig.h) + _GTK2_FIND_LIBRARY (GTK2_GDKMM_LIBRARY gdkmm true true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_GTKMM_INCLUDE_DIR gtkmm.h) + _GTK2_FIND_INCLUDE_DIR(GTK2_GTKMMCONFIG_INCLUDE_DIR gtkmmconfig.h) + _GTK2_FIND_LIBRARY (GTK2_GTKMM_LIBRARY gtkmm true true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_CAIROMM_INCLUDE_DIR cairomm/cairomm.h) + _GTK2_FIND_LIBRARY (GTK2_CAIROMM_LIBRARY cairomm true true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_PANGOMM_INCLUDE_DIR pangomm.h) + _GTK2_FIND_INCLUDE_DIR(GTK2_PANGOMMCONFIG_INCLUDE_DIR pangommconfig.h) + _GTK2_FIND_LIBRARY (GTK2_PANGOMM_LIBRARY pangomm true true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_SIGC++_INCLUDE_DIR sigc++/sigc++.h) + _GTK2_FIND_INCLUDE_DIR(GTK2_SIGC++CONFIG_INCLUDE_DIR sigc++config.h) + _GTK2_FIND_LIBRARY (GTK2_SIGC++_LIBRARY sigc true true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_GIOMM_INCLUDE_DIR giomm.h) + _GTK2_FIND_INCLUDE_DIR(GTK2_GIOMMCONFIG_INCLUDE_DIR giommconfig.h) + _GTK2_FIND_LIBRARY (GTK2_GIOMM_LIBRARY giomm true true) + + _GTK2_FIND_INCLUDE_DIR(GTK2_ATKMM_INCLUDE_DIR atkmm.h) + _GTK2_FIND_LIBRARY (GTK2_ATKMM_LIBRARY atkmm true true) + + elseif(_GTK2_component STREQUAL "glade") + + _GTK2_FIND_INCLUDE_DIR(GTK2_GLADE_INCLUDE_DIR glade/glade.h) + _GTK2_FIND_LIBRARY (GTK2_GLADE_LIBRARY glade false true) + + elseif(_GTK2_component STREQUAL "glademm") + + _GTK2_FIND_INCLUDE_DIR(GTK2_GLADEMM_INCLUDE_DIR libglademm.h) + _GTK2_FIND_INCLUDE_DIR(GTK2_GLADEMMCONFIG_INCLUDE_DIR libglademmconfig.h) + _GTK2_FIND_LIBRARY (GTK2_GLADEMM_LIBRARY glademm true true) + + else() + message(FATAL_ERROR "Unknown GTK2 component ${_component}") + endif() +endforeach() + +# +# Solve for the GTK2 version if we haven't already +# +if(NOT GTK2_FIND_VERSION AND GTK2_GTK_INCLUDE_DIR) + _GTK2_GET_VERSION(GTK2_MAJOR_VERSION + GTK2_MINOR_VERSION + GTK2_PATCH_VERSION + ${GTK2_GTK_INCLUDE_DIR}/gtk/gtkversion.h) + set(GTK2_VERSION ${GTK2_MAJOR_VERSION}.${GTK2_MINOR_VERSION}.${GTK2_PATCH_VERSION}) +endif() + +# +# Try to enforce components +# + +set(_GTK2_did_we_find_everything true) # This gets set to GTK2_FOUND + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +foreach(_GTK2_component ${GTK2_FIND_COMPONENTS}) + string(TOUPPER ${_GTK2_component} _COMPONENT_UPPER) + + if(_GTK2_component STREQUAL "gtk") + FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "Some or all of the gtk libraries were not found." + GTK2_GTK_LIBRARY + GTK2_GTK_INCLUDE_DIR + + GTK2_GLIB_INCLUDE_DIR + GTK2_GLIBCONFIG_INCLUDE_DIR + GTK2_GLIB_LIBRARY + + GTK2_GDK_INCLUDE_DIR + GTK2_GDKCONFIG_INCLUDE_DIR + GTK2_GDK_LIBRARY + ) + elseif(_GTK2_component STREQUAL "gtkmm") + FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "Some or all of the gtkmm libraries were not found." + GTK2_GTKMM_LIBRARY + GTK2_GTKMM_INCLUDE_DIR + GTK2_GTKMMCONFIG_INCLUDE_DIR + + GTK2_GLIBMM_INCLUDE_DIR + GTK2_GLIBMMCONFIG_INCLUDE_DIR + GTK2_GLIBMM_LIBRARY + + GTK2_GDKMM_INCLUDE_DIR + GTK2_GDKMMCONFIG_INCLUDE_DIR + GTK2_GDKMM_LIBRARY + ) + elseif(_GTK2_component STREQUAL "glade") + FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "The glade library was not found." + GTK2_GLADE_LIBRARY + GTK2_GLADE_INCLUDE_DIR + ) + elseif(_GTK2_component STREQUAL "glademm") + FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "The glademm library was not found." + GTK2_GLADEMM_LIBRARY + GTK2_GLADEMM_INCLUDE_DIR + GTK2_GLADEMMCONFIG_INCLUDE_DIR + ) + endif() + + if(NOT GTK2_${_COMPONENT_UPPER}_FOUND) + set(_GTK2_did_we_find_everything false) + endif() +endforeach() + +if(_GTK2_did_we_find_everything AND NOT GTK2_VERSION_CHECK_FAILED) + set(GTK2_FOUND true) +else() + # Unset our variables. + set(GTK2_FOUND false) + set(GTK2_VERSION) + set(GTK2_VERSION_MAJOR) + set(GTK2_VERSION_MINOR) + set(GTK2_VERSION_PATCH) + set(GTK2_INCLUDE_DIRS) + set(GTK2_LIBRARIES) +endif() + +if(GTK2_INCLUDE_DIRS) + list(REMOVE_DUPLICATES GTK2_INCLUDE_DIRS) +endif() + diff --git a/Modules/FindGTest.cmake b/Modules/FindGTest.cmake new file mode 100644 index 0000000..6cffb5c --- /dev/null +++ b/Modules/FindGTest.cmake @@ -0,0 +1,158 @@ +# Locate the Google C++ Testing Framework. +# +# Defines the following variables: +# +# GTEST_FOUND - Found the Google Testing framework +# GTEST_INCLUDE_DIRS - Include directories +# +# Also defines the library variables below as normal +# variables. These contain debug/optimized keywords when +# a debugging library is found. +# +# GTEST_BOTH_LIBRARIES - Both libgtest & libgtest-main +# GTEST_LIBRARIES - libgtest +# GTEST_MAIN_LIBRARIES - libgtest-main +# +# Accepts the following variables as input: +# +# GTEST_ROOT - (as a CMake or environment variable) +# The root directory of the gtest install prefix +# +# GTEST_MSVC_SEARCH - If compiling with MSVC, this variable can be set to +# "MD" or "MT" to enable searching a GTest build tree +# (defaults: "MD") +# +#----------------------- +# Example Usage: +# +# enable_testing() +# find_package(GTest REQUIRED) +# include_directories(${GTEST_INCLUDE_DIRS}) +# +# add_executable(foo foo.cc) +# target_link_libraries(foo ${GTEST_BOTH_LIBRARIES}) +# +# add_test(AllTestsInFoo foo) +# +#----------------------- +# +# If you would like each Google test to show up in CTest as +# a test you may use the following macro. +# NOTE: It will slow down your tests by running an executable +# for each test and test fixture. You will also have to rerun +# CMake after adding or removing tests or test fixtures. +# +# GTEST_ADD_TESTS(executable extra_args ARGN) +# executable = The path to the test executable +# extra_args = Pass a list of extra arguments to be passed to +# executable enclosed in quotes (or "" for none) +# ARGN = A list of source files to search for tests & test +# fixtures. +# +# Example: +# set(FooTestArgs --foo 1 --bar 2) +# add_executable(FooTest FooUnitTest.cc) +# GTEST_ADD_TESTS(FooTest "${FooTestArgs}" FooUnitTest.cc) + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2009 Philip Lowman +# Copyright 2009 Daniel Blezek +# +# 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.) +# +# Thanks to Daniel Blezek for the GTEST_ADD_TESTS code + +function(GTEST_ADD_TESTS executable extra_args) + if(NOT ARGN) + message(FATAL_ERROR "Missing ARGN: Read the documentation for GTEST_ADD_TESTS") + endif() + foreach(source ${ARGN}) + file(READ "${source}" contents) + string(REGEX MATCHALL "TEST_?F?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents}) + foreach(hit ${found_tests}) + string(REGEX REPLACE ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*" "\\1.\\2" test_name ${hit}) + add_test(${test_name} ${executable} --gtest_filter=${test_name} ${extra_args}) + endforeach() + endforeach() +endfunction() + +function(_gtest_append_debugs _endvar _library) + if(${_library} AND ${_library}_DEBUG) + set(_output optimized ${${_library}} debug ${${_library}_DEBUG}) + else() + set(_output ${${_library}}) + endif() + set(${_endvar} ${_output} PARENT_SCOPE) +endfunction() + +function(_gtest_find_library _name) + find_library(${_name} + NAMES ${ARGN} + HINTS + $ENV{GTEST_ROOT} + ${GTEST_ROOT} + PATH_SUFFIXES ${_gtest_libpath_suffixes} + ) + mark_as_advanced(${_name}) +endfunction() + +# + +if(NOT DEFINED GTEST_MSVC_SEARCH) + set(GTEST_MSVC_SEARCH MD) +endif() + +set(_gtest_libpath_suffixes lib) +if(MSVC) + if(GTEST_MSVC_SEARCH STREQUAL "MD") + list(APPEND _gtest_libpath_suffixes + msvc/gtest-md/Debug + msvc/gtest-md/Release) + elseif(GTEST_MSVC_SEARCH STREQUAL "MT") + list(APPEND _gtest_libpath_suffixes + msvc/gtest/Debug + msvc/gtest/Release) + endif() +endif() + + +find_path(GTEST_INCLUDE_DIR gtest/gtest.h + HINTS + $ENV{GTEST_ROOT}/include + ${GTEST_ROOT}/include +) +mark_as_advanced(GTEST_INCLUDE_DIR) + +if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD") + # The provided /MD project files for Google Test add -md suffixes to the + # library names. + _gtest_find_library(GTEST_LIBRARY gtest-md gtest) + _gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd) + _gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main) + _gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind) +else() + _gtest_find_library(GTEST_LIBRARY gtest) + _gtest_find_library(GTEST_LIBRARY_DEBUG gtestd) + _gtest_find_library(GTEST_MAIN_LIBRARY gtest_main) + _gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind) +endif() + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY) + +if(GTEST_FOUND) + set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR}) + _gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY) + _gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY) + set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES}) +endif() + diff --git a/Modules/FindGettext.cmake b/Modules/FindGettext.cmake new file mode 100644 index 0000000..6dbc026 --- /dev/null +++ b/Modules/FindGettext.cmake @@ -0,0 +1,220 @@ +# - Find GNU gettext tools +# This module looks for the GNU gettext tools. This module defines the +# following values: +# GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool. +# GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool. +# GETTEXT_FOUND: True if gettext has been found. +# GETTEXT_VERSION_STRING: the version of gettext found (since CMake 2.8.8) +# +# Additionally it provides the following macros: +# GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN ) +# This will create a target "translations" which will convert the +# given input po files into the binary output mo file. If the +# ALL option is used, the translations will also be created when +# building the default target. +# GETTEXT_PROCESS_POT( [ALL] [INSTALL_DESTINATION ] LANGUAGES ... ) +# Process the given pot file to mo files. +# If INSTALL_DESTINATION is given then automatically install rules will be created, +# the language subdirectory will be taken into account (by default use share/locale/). +# If ALL is specified, the pot file is processed when building the all traget. +# It creates a custom target "potfile". +# GETTEXT_PROCESS_PO_FILES( [ALL] [INSTALL_DESTINATION ] PO_FILES ... ) +# Process the given po files to mo files for the given language. +# If INSTALL_DESTINATION is given then automatically install rules will be created, +# the language subdirectory will be taken into account (by default use share/locale/). +# If ALL is specified, the po files are processed when building the all traget. +# It creates a custom target "pofiles". + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# Copyright 2007 Alexander Neundorf +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(GETTEXT_MSGMERGE_EXECUTABLE msgmerge) + +FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) + +IF(GETTEXT_MSGMERGE_EXECUTABLE) + EXECUTE_PROCESS(COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --version + OUTPUT_VARIABLE gettext_version + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + IF (gettext_version MATCHES "^msgmerge \\(.*\\) [0-9]") + STRING(REGEX REPLACE "^msgmerge \\([^\\)]*\\) ([0-9\\.]+[^ \n]*).*" "\\1" GETTEXT_VERSION_STRING "${gettext_version}") + ENDIF() + UNSET(gettext_version) +ENDIF(GETTEXT_MSGMERGE_EXECUTABLE) + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Gettext + REQUIRED_VARS GETTEXT_MSGMERGE_EXECUTABLE GETTEXT_MSGFMT_EXECUTABLE + VERSION_VAR GETTEXT_VERSION_STRING) + +INCLUDE(CMakeParseArguments) + +FUNCTION(_GETTEXT_GET_UNIQUE_TARGET_NAME _name _unique_name) + SET(propertyName "_GETTEXT_UNIQUE_COUNTER_${_name}") + GET_PROPERTY(currentCounter GLOBAL PROPERTY "${propertyName}") + IF(NOT currentCounter) + SET(currentCounter 1) + ENDIF() + SET(${_unique_name} "${_name}_${currentCounter}" PARENT_SCOPE) + MATH(EXPR currentCounter "${currentCounter} + 1") + SET_PROPERTY(GLOBAL PROPERTY ${propertyName} ${currentCounter} ) +ENDFUNCTION() + +MACRO(GETTEXT_CREATE_TRANSLATIONS _potFile _firstPoFileArg) + # make it a real variable, so we can modify it here + SET(_firstPoFile "${_firstPoFileArg}") + + SET(_gmoFiles) + GET_FILENAME_COMPONENT(_potName ${_potFile} NAME) + STRING(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName}) + GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE) + + SET(_addToAll) + IF(${_firstPoFile} STREQUAL "ALL") + SET(_addToAll "ALL") + SET(_firstPoFile) + ENDIF(${_firstPoFile} STREQUAL "ALL") + + FOREACH (_currentPoFile ${_firstPoFile} ${ARGN}) + GET_FILENAME_COMPONENT(_absFile ${_currentPoFile} ABSOLUTE) + GET_FILENAME_COMPONENT(_abs_PATH ${_absFile} PATH) + GET_FILENAME_COMPONENT(_lang ${_absFile} NAME_WE) + SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) + + ADD_CUSTOM_COMMAND( + OUTPUT ${_gmoFile} + COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_absFile} ${_absPotFile} + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_absFile} + DEPENDS ${_absPotFile} ${_absFile} + ) + + INSTALL(FILES ${_gmoFile} DESTINATION share/locale/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo) + SET(_gmoFiles ${_gmoFiles} ${_gmoFile}) + + ENDFOREACH (_currentPoFile ) + + IF(NOT TARGET translations) + ADD_CUSTOM_TARGET(translations) + ENDIF() + + _GETTEXT_GET_UNIQUE_TARGET_NAME(translations uniqueTargetName) + + ADD_CUSTOM_TARGET(${uniqueTargetName} ${_addToAll} DEPENDS ${_gmoFiles}) + + ADD_DEPENDENCIES(translations ${uniqueTargetName}) + +ENDMACRO(GETTEXT_CREATE_TRANSLATIONS ) + + +FUNCTION(GETTEXT_PROCESS_POT_FILE _potFile) + SET(_gmoFiles) + SET(_options ALL) + SET(_oneValueArgs INSTALL_DESTINATION) + SET(_multiValueArgs LANGUAGES) + + CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) + + GET_FILENAME_COMPONENT(_potName ${_potFile} NAME) + STRING(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _potBasename ${_potName}) + GET_FILENAME_COMPONENT(_absPotFile ${_potFile} ABSOLUTE) + + FOREACH (_lang ${_parsedArguments_LANGUAGES}) + SET(_poFile "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.po") + SET(_gmoFile "${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo") + + ADD_CUSTOM_COMMAND( + OUTPUT "${_poFile}" + COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_poFile} ${_absPotFile} + DEPENDS ${_absPotFile} + ) + + ADD_CUSTOM_COMMAND( + OUTPUT "${_gmoFile}" + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_poFile} + DEPENDS ${_absPotFile} ${_poFile} + ) + + IF(_parsedArguments_INSTALL_DESTINATION) + INSTALL(FILES ${_gmoFile} DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES RENAME ${_potBasename}.mo) + ENDIF(_parsedArguments_INSTALL_DESTINATION) + LIST(APPEND _gmoFiles ${_gmoFile}) + ENDFOREACH (_lang ) + + IF(NOT TARGET potfiles) + ADD_CUSTOM_TARGET(potfiles) + ENDIF() + + _GETTEXT_GET_UNIQUE_TARGET_NAME( potfiles uniqueTargetName) + + IF(_parsedArguments_ALL) + ADD_CUSTOM_TARGET(${uniqueTargetName} ALL DEPENDS ${_gmoFiles}) + ELSE(_parsedArguments_ALL) + ADD_CUSTOM_TARGET(${uniqueTargetName} DEPENDS ${_gmoFiles}) + ENDIF(_parsedArguments_ALL) + + ADD_DEPENDENCIES(potfiles ${uniqueTargetName}) + +ENDFUNCTION(GETTEXT_PROCESS_POT_FILE) + + +FUNCTION(GETTEXT_PROCESS_PO_FILES _lang) + SET(_options ALL) + SET(_oneValueArgs INSTALL_DESTINATION) + SET(_multiValueArgs PO_FILES) + SET(_gmoFiles) + + CMAKE_PARSE_ARGUMENTS(_parsedArguments "${_options}" "${_oneValueArgs}" "${_multiValueArgs}" ${ARGN}) + + FOREACH(_current_PO_FILE ${_parsedArguments_PO_FILES}) + GET_FILENAME_COMPONENT(_name ${_current_PO_FILE} NAME) + STRING(REGEX REPLACE "^(.+)(\\.[^.]+)$" "\\1" _basename ${_name}) + SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo) + ADD_CUSTOM_COMMAND(OUTPUT ${_gmoFile} + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmoFile} ${_current_PO_FILE} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + DEPENDS ${_current_PO_FILE} + ) + + IF(_parsedArguments_INSTALL_DESTINATION) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.gmo DESTINATION ${_parsedArguments_INSTALL_DESTINATION}/${_lang}/LC_MESSAGES/ RENAME ${_basename}.mo) + ENDIF(_parsedArguments_INSTALL_DESTINATION) + LIST(APPEND _gmoFiles ${_gmoFile}) + ENDFOREACH(_current_PO_FILE) + + + IF(NOT TARGET pofiles) + ADD_CUSTOM_TARGET(pofiles) + ENDIF() + + _GETTEXT_GET_UNIQUE_TARGET_NAME( pofiles uniqueTargetName) + + IF(_parsedArguments_ALL) + ADD_CUSTOM_TARGET(${uniqueTargetName} ALL DEPENDS ${_gmoFiles}) + ELSE(_parsedArguments_ALL) + ADD_CUSTOM_TARGET(${uniqueTargetName} DEPENDS ${_gmoFiles}) + ENDIF(_parsedArguments_ALL) + + ADD_DEPENDENCIES(pofiles ${uniqueTargetName}) + +ENDFUNCTION(GETTEXT_PROCESS_PO_FILES) + +IF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE ) + SET(GETTEXT_FOUND TRUE) +ELSE (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE ) + SET(GETTEXT_FOUND FALSE) + IF (GetText_REQUIRED) + MESSAGE(FATAL_ERROR "GetText not found") + ENDIF (GetText_REQUIRED) +ENDIF (GETTEXT_MSGMERGE_EXECUTABLE AND GETTEXT_MSGFMT_EXECUTABLE ) diff --git a/Modules/FindGit.cmake b/Modules/FindGit.cmake new file mode 100644 index 0000000..f89d1af --- /dev/null +++ b/Modules/FindGit.cmake @@ -0,0 +1,62 @@ +# The module defines the following variables: +# GIT_EXECUTABLE - path to git command line client +# GIT_FOUND - true if the command line client was found +# GIT_VERSION_STRING - the version of git found (since CMake 2.8.8) +# Example usage: +# find_package(Git) +# if(GIT_FOUND) +# message("git found: ${GIT_EXECUTABLE}") +# endif() + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2012 Rolf Eike Beer +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Look for 'git' or 'eg' (easy git) +# +set(git_names git eg) + +# Prefer .cmd variants on Windows unless running in a Makefile +# in the MSYS shell. +# +if(WIN32) + if(NOT CMAKE_GENERATOR MATCHES "MSYS") + set(git_names git.cmd git eg.cmd eg) + endif() +endif() + +find_program(GIT_EXECUTABLE + NAMES ${git_names} + PATH_SUFFIXES Git/cmd Git/bin + DOC "git command line client" + ) +mark_as_advanced(GIT_EXECUTABLE) + +if(GIT_EXECUTABLE) + execute_process(COMMAND ${GIT_EXECUTABLE} --version + OUTPUT_VARIABLE git_version + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (git_version MATCHES "^git version [0-9]") + string(REPLACE "git version " "" GIT_VERSION_STRING "${git_version}") + endif() + unset(git_version) +endif(GIT_EXECUTABLE) + +# Handle the QUIETLY and REQUIRED arguments and set GIT_FOUND to TRUE if +# all listed variables are TRUE + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +find_package_handle_standard_args(Git + REQUIRED_VARS GIT_EXECUTABLE + VERSION_VAR GIT_VERSION_STRING) diff --git a/Modules/FindGnuTLS.cmake b/Modules/FindGnuTLS.cmake new file mode 100644 index 0000000..02f2964 --- /dev/null +++ b/Modules/FindGnuTLS.cmake @@ -0,0 +1,69 @@ +# - Try to find the GNU Transport Layer Security library (gnutls) +# +# Once done this will define +# +# GNUTLS_FOUND - System has gnutls +# GNUTLS_INCLUDE_DIR - The gnutls include directory +# GNUTLS_LIBRARIES - The libraries needed to use gnutls +# GNUTLS_DEFINITIONS - Compiler switches required for using gnutls + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2009 Philip Lowman +# Copyright 2009 Brad Hards +# Copyright 2006 Alexander Neundorf +# +# 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.) + +# Note that this doesn't try to find the gnutls-extra package. + + +IF (GNUTLS_INCLUDE_DIR AND GNUTLS_LIBRARY) + # in cache already + SET(gnutls_FIND_QUIETLY TRUE) +ENDIF (GNUTLS_INCLUDE_DIR AND GNUTLS_LIBRARY) + +IF (NOT WIN32) + # try using pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + # also fills in GNUTLS_DEFINITIONS, although that isn't normally useful + FIND_PACKAGE(PkgConfig QUIET) + PKG_CHECK_MODULES(PC_GNUTLS QUIET gnutls) + SET(GNUTLS_DEFINITIONS ${PC_GNUTLS_CFLAGS_OTHER}) + SET(GNUTLS_VERSION_STRING ${PC_GNUTLS_VERSION}) +ENDIF (NOT WIN32) + +FIND_PATH(GNUTLS_INCLUDE_DIR gnutls/gnutls.h + HINTS + ${PC_GNUTLS_INCLUDEDIR} + ${PC_GNUTLS_INCLUDE_DIRS} + ) + +FIND_LIBRARY(GNUTLS_LIBRARY NAMES gnutls libgnutls + HINTS + ${PC_GNUTLS_LIBDIR} + ${PC_GNUTLS_LIBRARY_DIRS} + ) + +MARK_AS_ADVANCED(GNUTLS_INCLUDE_DIR GNUTLS_LIBRARY) + +# handle the QUIETLY and REQUIRED arguments and set GNUTLS_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GnuTLS + REQUIRED_VARS GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR + VERSION_VAR GNUTLS_VERSION_STRING) + +IF(GNUTLS_FOUND) + SET(GNUTLS_LIBRARIES ${GNUTLS_LIBRARY}) + SET(GNUTLS_INCLUDE_DIRS ${GNUTLS_INCLUDE_DIR}) +ENDIF() + diff --git a/Modules/FindGnuplot.cmake b/Modules/FindGnuplot.cmake new file mode 100644 index 0000000..b8dc3f4 --- /dev/null +++ b/Modules/FindGnuplot.cmake @@ -0,0 +1,57 @@ +# - this module looks for gnuplot +# +# Once done this will define +# +# 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. +# +# 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(FindCygwin) + +FIND_PROGRAM(GNUPLOT_EXECUTABLE + NAMES + gnuplot + pgnuplot + wgnupl32 + PATHS + ${CYGWIN_INSTALL_PATH}/bin +) + +IF (GNUPLOT_EXECUTABLE) + EXECUTE_PROCESS(COMMAND "${GNUPLOT_EXECUTABLE}" --version + OUTPUT_VARIABLE GNUPLOT_OUTPUT_VARIABLE + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + + STRING(REGEX REPLACE "^gnuplot ([0-9\\.]+)( patchlevel )?" "\\1." GNUPLOT_VERSION_STRING "${GNUPLOT_OUTPUT_VARIABLE}") + STRING(REGEX REPLACE "\\.$" "" GNUPLOT_VERSION_STRING "${GNUPLOT_VERSION_STRING}") + UNSET(GNUPLOT_OUTPUT_VARIABLE) +ENDIF() + +# for compatibility +SET(GNUPLOT ${GNUPLOT_EXECUTABLE}) + +# handle the QUIETLY and REQUIRED arguments and set GNUPLOT_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Gnuplot + REQUIRED_VARS GNUPLOT_EXECUTABLE + VERSION_VAR GNUPLOT_VERSION_STRING) + +MARK_AS_ADVANCED( GNUPLOT_EXECUTABLE ) + diff --git a/Modules/FindHDF5.cmake b/Modules/FindHDF5.cmake new file mode 100644 index 0000000..bc60638 --- /dev/null +++ b/Modules/FindHDF5.cmake @@ -0,0 +1,385 @@ +# - Find HDF5, a library for reading and writing self describing array data. +# +# This module invokes the HDF5 wrapper compiler that should be installed +# alongside HDF5. Depending upon the HDF5 Configuration, the wrapper compiler +# is called either h5cc or h5pcc. If this succeeds, the module will then call +# the compiler with the -show argument to see what flags are used when compiling +# an HDF5 client application. +# +# The module will optionally accept the COMPONENTS argument. If no COMPONENTS +# are specified, then the find module will default to finding only the HDF5 C +# library. If one or more COMPONENTS are specified, the module will attempt to +# find the language bindings for the specified components. The only valid +# components are C, CXX, Fortran, HL, and Fortran_HL. If the COMPONENTS +# argument is not given, the module will attempt to find only the C bindings. +# +# On UNIX systems, this module will read the variable HDF5_USE_STATIC_LIBRARIES +# to determine whether or not to prefer a static link to a dynamic link for HDF5 +# and all of it's dependencies. To use this feature, make sure that the +# HDF5_USE_STATIC_LIBRARIES variable is set before the call to find_package. +# +# To provide the module with a hint about where to find your HDF5 installation, +# you can set the environment variable HDF5_ROOT. The Find module will then +# look in this path when searching for HDF5 executables, paths, and libraries. +# +# In addition to finding the includes and libraries required to compile an HDF5 +# client application, this module also makes an effort to find tools that come +# with the HDF5 distribution that may be useful for regression testing. +# +# This module will define the following variables: +# HDF5_INCLUDE_DIRS - Location of the hdf5 includes +# HDF5_INCLUDE_DIR - Location of the hdf5 includes (deprecated) +# HDF5_DEFINITIONS - Required compiler definitions for HDF5 +# HDF5_C_LIBRARIES - Required libraries for the HDF5 C bindings. +# HDF5_CXX_LIBRARIES - Required libraries for the HDF5 C++ bindings +# HDF5_Fortran_LIBRARIES - Required libraries for the HDF5 Fortran bindings +# HDF5_HL_LIBRARIES - Required libraries for the HDF5 high level API +# HDF5_Fortran_HL_LIBRARIES - Required libraries for the high level Fortran +# bindings. +# HDF5_LIBRARIES - Required libraries for all requested bindings +# HDF5_FOUND - true if HDF5 was found on the system +# HDF5_LIBRARY_DIRS - the full set of library directories +# HDF5_IS_PARALLEL - Whether or not HDF5 was found with parallel IO support +# HDF5_C_COMPILER_EXECUTABLE - the path to the HDF5 C wrapper compiler +# HDF5_CXX_COMPILER_EXECUTABLE - the path to the HDF5 C++ wrapper compiler +# HDF5_Fortran_COMPILER_EXECUTABLE - the path to the HDF5 Fortran wrapper compiler +# HDF5_DIFF_EXECUTABLE - the path to the HDF5 dataset comparison tool + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is maintained by Will Dicharry . + +include(SelectLibraryConfigurations) +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +# List of the valid HDF5 components +set( HDF5_VALID_COMPONENTS + C + CXX + Fortran + HL + Fortran_HL +) + +# Validate the list of find components. +if( NOT HDF5_FIND_COMPONENTS ) + set( HDF5_LANGUAGE_BINDINGS "C" ) +else() + # add the extra specified components, ensuring that they are valid. + foreach( component ${HDF5_FIND_COMPONENTS} ) + list( FIND HDF5_VALID_COMPONENTS ${component} component_location ) + if( ${component_location} EQUAL -1 ) + message( FATAL_ERROR + "\"${component}\" is not a valid HDF5 component." ) + else() + list( APPEND HDF5_LANGUAGE_BINDINGS ${component} ) + endif() + endforeach() +endif() + +# try to find the HDF5 wrapper compilers +find_program( HDF5_C_COMPILER_EXECUTABLE + NAMES h5cc h5pcc + HINTS ENV HDF5_ROOT + PATH_SUFFIXES bin Bin + DOC "HDF5 Wrapper compiler. Used only to detect HDF5 compile flags." ) +mark_as_advanced( HDF5_C_COMPILER_EXECUTABLE ) + +find_program( HDF5_CXX_COMPILER_EXECUTABLE + NAMES h5c++ h5pc++ + HINTS ENV HDF5_ROOT + PATH_SUFFIXES bin Bin + DOC "HDF5 C++ Wrapper compiler. Used only to detect HDF5 compile flags." ) +mark_as_advanced( HDF5_CXX_COMPILER_EXECUTABLE ) + +find_program( HDF5_Fortran_COMPILER_EXECUTABLE + NAMES h5fc h5pfc + HINTS ENV HDF5_ROOT + PATH_SUFFIXES bin Bin + DOC "HDF5 Fortran Wrapper compiler. Used only to detect HDF5 compile flags." ) +mark_as_advanced( HDF5_Fortran_COMPILER_EXECUTABLE ) + +find_program( HDF5_DIFF_EXECUTABLE + NAMES h5diff + HINTS ENV HDF5_ROOT + PATH_SUFFIXES bin Bin + DOC "HDF5 file differencing tool." ) +mark_as_advanced( HDF5_DIFF_EXECUTABLE ) + +# Invoke the HDF5 wrapper compiler. The compiler return value is stored to the +# return_value argument, the text output is stored to the output variable. +macro( _HDF5_invoke_compiler language output return_value ) + if( HDF5_${language}_COMPILER_EXECUTABLE ) + exec_program( ${HDF5_${language}_COMPILER_EXECUTABLE} + ARGS -show + OUTPUT_VARIABLE ${output} + RETURN_VALUE ${return_value} + ) + if( ${${return_value}} EQUAL 0 ) + # do nothing + else() + message( STATUS + "Unable to determine HDF5 ${language} flags from HDF5 wrapper." ) + endif() + endif() +endmacro() + +# Parse a compile line for definitions, includes, library paths, and libraries. +macro( _HDF5_parse_compile_line + compile_line_var + include_paths + definitions + library_paths + libraries ) + + # Match the include paths + string( REGEX MATCHALL "-I([^\" ]+)" include_path_flags + "${${compile_line_var}}" + ) + foreach( IPATH ${include_path_flags} ) + string( REGEX REPLACE "^-I" "" IPATH ${IPATH} ) + string( REGEX REPLACE "//" "/" IPATH ${IPATH} ) + list( APPEND ${include_paths} ${IPATH} ) + endforeach() + + # Match the definitions + string( REGEX MATCHALL "-D[^ ]*" definition_flags "${${compile_line_var}}" ) + foreach( DEF ${definition_flags} ) + list( APPEND ${definitions} ${DEF} ) + endforeach() + + # Match the library paths + string( REGEX MATCHALL "-L([^\" ]+|\"[^\"]+\")" library_path_flags + "${${compile_line_var}}" + ) + + foreach( LPATH ${library_path_flags} ) + string( REGEX REPLACE "^-L" "" LPATH ${LPATH} ) + string( REGEX REPLACE "//" "/" LPATH ${LPATH} ) + list( APPEND ${library_paths} ${LPATH} ) + endforeach() + + # now search for the library names specified in the compile line (match -l...) + # match only -l's preceded by a space or comma + # this is to exclude directory names like xxx-linux/ + string( REGEX MATCHALL "[, ]-l([^\", ]+)" library_name_flags + "${${compile_line_var}}" ) + # strip the -l from all of the library flags and add to the search list + foreach( LIB ${library_name_flags} ) + string( REGEX REPLACE "^[, ]-l" "" LIB ${LIB} ) + list( APPEND ${libraries} ${LIB} ) + endforeach() +endmacro() + +# Try to find HDF5 using an installed hdf5-config.cmake +if( NOT HDF5_FOUND ) + find_package( HDF5 QUIET NO_MODULE ) + if( HDF5_FOUND ) + set( HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIR} ) + set( HDF5_LIBRARIES ) + set( HDF5_C_TARGET hdf5 ) + set( HDF5_CXX_TARGET hdf5_cpp ) + set( HDF5_HL_TARGET hdf5_hl ) + set( HDF5_Fortran_TARGET hdf5_fortran ) + set( HDF5_Fortran_HL_TARGET hdf5_hl_fortran ) + foreach( _component ${HDF5_LANGUAGE_BINDINGS} ) + list( FIND HDF5_VALID_COMPONENTS ${_component} _component_location ) + get_target_property( _comp_location ${HDF5_${_component}_TARGET} LOCATION ) + if( _comp_location ) + set( HDF5_${_component}_LIBRARY ${_comp_location} CACHE PATH + "HDF5 ${_component} library" ) + mark_as_advanced( HDF5_${_component}_LIBRARY ) + list( APPEND HDF5_LIBRARIES ${HDF5_${_component}_LIBRARY} ) + endif() + endforeach() + endif() +endif() + +if( NOT HDF5_FOUND ) + _HDF5_invoke_compiler( C HDF5_C_COMPILE_LINE HDF5_C_RETURN_VALUE ) + _HDF5_invoke_compiler( CXX HDF5_CXX_COMPILE_LINE HDF5_CXX_RETURN_VALUE ) + _HDF5_invoke_compiler( Fortran HDF5_Fortran_COMPILE_LINE HDF5_Fortran_RETURN_VALUE ) + + # seed the initial lists of libraries to find with items we know we need + set( HDF5_C_LIBRARY_NAMES_INIT hdf5 ) + set( HDF5_HL_LIBRARY_NAMES_INIT hdf5_hl ${HDF5_C_LIBRARY_NAMES_INIT} ) + set( HDF5_CXX_LIBRARY_NAMES_INIT hdf5_cpp ${HDF5_C_LIBRARY_NAMES_INIT} ) + set( HDF5_Fortran_LIBRARY_NAMES_INIT hdf5_fortran + ${HDF5_C_LIBRARY_NAMES_INIT} ) + set( HDF5_Fortran_HL_LIBRARY_NAMES_INIT hdf5hl_fortran + ${HDF5_Fortran_LIBRARY_NAMES_INIT} ) + + foreach( LANGUAGE ${HDF5_LANGUAGE_BINDINGS} ) + if( HDF5_${LANGUAGE}_COMPILE_LINE ) + _HDF5_parse_compile_line( HDF5_${LANGUAGE}_COMPILE_LINE + HDF5_${LANGUAGE}_INCLUDE_FLAGS + HDF5_${LANGUAGE}_DEFINITIONS + HDF5_${LANGUAGE}_LIBRARY_DIRS + HDF5_${LANGUAGE}_LIBRARY_NAMES + ) + + # take a guess that the includes may be in the 'include' sibling + # directory of a library directory. + foreach( dir ${HDF5_${LANGUAGE}_LIBRARY_DIRS} ) + list( APPEND HDF5_${LANGUAGE}_INCLUDE_FLAGS ${dir}/../include ) + endforeach() + endif() + + # set the definitions for the language bindings. + list( APPEND HDF5_DEFINITIONS ${HDF5_${LANGUAGE}_DEFINITIONS} ) + + # find the HDF5 include directories + if(${LANGUAGE} MATCHES "Fortran.*") + set(HDF5_INCLUDE_FILENAME hdf5.mod) + else() + set(HDF5_INCLUDE_FILENAME hdf5.h) + endif() + + find_path( HDF5_${LANGUAGE}_INCLUDE_DIR ${HDF5_INCLUDE_FILENAME} + HINTS + ${HDF5_${LANGUAGE}_INCLUDE_FLAGS} + ENV + HDF5_ROOT + PATHS + $ENV{HOME}/.local/include + PATH_SUFFIXES + include + Include + ) + mark_as_advanced( HDF5_${LANGUAGE}_INCLUDE_DIR ) + list( APPEND HDF5_INCLUDE_DIRS ${HDF5_${LANGUAGE}_INCLUDE_DIR} ) + + set( HDF5_${LANGUAGE}_LIBRARY_NAMES + ${HDF5_${LANGUAGE}_LIBRARY_NAMES_INIT} + ${HDF5_${LANGUAGE}_LIBRARY_NAMES} ) + + # find the HDF5 libraries + foreach( LIB ${HDF5_${LANGUAGE}_LIBRARY_NAMES} ) + if( UNIX AND HDF5_USE_STATIC_LIBRARIES ) + # According to bug 1643 on the CMake bug tracker, this is the + # preferred method for searching for a static library. + # See http://www.cmake.org/Bug/view.php?id=1643. We search + # first for the full static library name, but fall back to a + # generic search on the name if the static search fails. + set( THIS_LIBRARY_SEARCH_DEBUG lib${LIB}d.a ${LIB}d ) + set( THIS_LIBRARY_SEARCH_RELEASE lib${LIB}.a ${LIB} ) + else() + set( THIS_LIBRARY_SEARCH_DEBUG ${LIB}d ) + set( THIS_LIBRARY_SEARCH_RELEASE ${LIB} ) + endif() + find_library( HDF5_${LIB}_LIBRARY_DEBUG + NAMES ${THIS_LIBRARY_SEARCH_DEBUG} + HINTS ${HDF5_${LANGUAGE}_LIBRARY_DIRS} + ENV HDF5_ROOT + PATH_SUFFIXES lib Lib ) + find_library( HDF5_${LIB}_LIBRARY_RELEASE + NAMES ${THIS_LIBRARY_SEARCH_RELEASE} + HINTS ${HDF5_${LANGUAGE}_LIBRARY_DIRS} + ENV HDF5_ROOT + PATH_SUFFIXES lib Lib ) + select_library_configurations( HDF5_${LIB} ) + # even though we adjusted the individual library names in + # select_library_configurations, we still need to distinguish + # between debug and release variants because HDF5_LIBRARIES will + # need to specify different lists for debug and optimized builds. + # We can't just use the HDF5_${LIB}_LIBRARY variable (which was set + # up by the selection macro above) because it may specify debug and + # optimized variants for a particular library, but a list of + # libraries is allowed to specify debug and optimized only once. + list( APPEND HDF5_${LANGUAGE}_LIBRARIES_DEBUG + ${HDF5_${LIB}_LIBRARY_DEBUG} ) + list( APPEND HDF5_${LANGUAGE}_LIBRARIES_RELEASE + ${HDF5_${LIB}_LIBRARY_RELEASE} ) + endforeach() + list( APPEND HDF5_LIBRARY_DIRS ${HDF5_${LANGUAGE}_LIBRARY_DIRS} ) + + # Append the libraries for this language binding to the list of all + # required libraries. + list( APPEND HDF5_LIBRARIES_DEBUG + ${HDF5_${LANGUAGE}_LIBRARIES_DEBUG} ) + list( APPEND HDF5_LIBRARIES_RELEASE + ${HDF5_${LANGUAGE}_LIBRARIES_RELEASE} ) + endforeach() + + # We may have picked up some duplicates in various lists during the above + # process for the language bindings (both the C and C++ bindings depend on + # libz for example). Remove the duplicates. It appears that the default + # CMake behavior is to remove duplicates from the end of a list. However, + # for link lines, this is incorrect since unresolved symbols are searched + # for down the link line. Therefore, we reverse the list, remove the + # duplicates, and then reverse it again to get the duplicates removed from + # the beginning. + macro( _remove_duplicates_from_beginning _list_name ) + list( REVERSE ${_list_name} ) + list( REMOVE_DUPLICATES ${_list_name} ) + list( REVERSE ${_list_name} ) + endmacro() + + if( HDF5_INCLUDE_DIRS ) + _remove_duplicates_from_beginning( HDF5_INCLUDE_DIRS ) + endif() + if( HDF5_LIBRARIES_DEBUG ) + _remove_duplicates_from_beginning( HDF5_LIBRARIES_DEBUG ) + endif() + if( HDF5_LIBRARIES_RELEASE ) + _remove_duplicates_from_beginning( HDF5_LIBRARIES_RELEASE ) + endif() + if( HDF5_LIBRARY_DIRS ) + _remove_duplicates_from_beginning( HDF5_LIBRARY_DIRS ) + endif() + + # Construct the complete list of HDF5 libraries with debug and optimized + # variants when the generator supports them. + if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) + set( HDF5_LIBRARIES ) + foreach( _lib ${HDF5_LIBRARIES_DEBUG} ) + list( APPEND HDF5_LIBRARIES debug ${_lib} ) + endforeach() + foreach( _lib ${HDF5_LIBRARIES_RELEASE} ) + list( APPEND HDF5_LIBRARIES optimized ${_lib} ) + endforeach() + else() + set( HDF5_LIBRARIES ${HDF5_LIBRARIES_RELEASE} ) + endif() + + # If the HDF5 include directory was found, open H5pubconf.h to determine if + # HDF5 was compiled with parallel IO support + set( HDF5_IS_PARALLEL FALSE ) + foreach( _dir IN LISTS HDF5_INCLUDE_DIRS ) + if( EXISTS "${_dir}/H5pubconf.h" ) + file( STRINGS "${_dir}/H5pubconf.h" + HDF5_HAVE_PARALLEL_DEFINE + REGEX "HAVE_PARALLEL 1" ) + if( HDF5_HAVE_PARALLEL_DEFINE ) + set( HDF5_IS_PARALLEL TRUE ) + endif() + endif() + endforeach() + set( HDF5_IS_PARALLEL ${HDF5_IS_PARALLEL} CACHE BOOL + "HDF5 library compiled with parallel IO support" ) + mark_as_advanced( HDF5_IS_PARALLEL ) + + # For backwards compatibility we set HDF5_INCLUDE_DIR to the value of + # HDF5_INCLUDE_DIRS + if( HDF5_INCLUDE_DIRS ) + set( HDF5_INCLUDE_DIR "${HDF5_INCLUDE_DIRS}" ) + endif() + +endif() + +find_package_handle_standard_args( HDF5 DEFAULT_MSG + HDF5_LIBRARIES + HDF5_INCLUDE_DIRS +) + diff --git a/Modules/FindHSPELL.cmake b/Modules/FindHSPELL.cmake new file mode 100644 index 0000000..ca5709b --- /dev/null +++ b/Modules/FindHSPELL.cmake @@ -0,0 +1,46 @@ +# - Try to find Hspell +# Once done this will define +# +# HSPELL_FOUND - system has Hspell +# HSPELL_INCLUDE_DIR - the Hspell include directory +# HSPELL_LIBRARIES - The libraries needed to use Hspell +# HSPELL_DEFINITIONS - Compiler switches required for using Hspell +# +# HSPELL_VERSION_STRING - The version of Hspell found (x.y) +# HSPELL_MAJOR_VERSION - the major version of Hspell +# HSPELL_MINOR_VERSION - The minor version of Hspell + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(HSPELL_INCLUDE_DIR hspell.h) + +FIND_LIBRARY(HSPELL_LIBRARIES NAMES hspell) + +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 + REQUIRED_VARS HSPELL_LIBRARIES HSPELL_INCLUDE_DIR + VERSION_VAR HSPELL_VERSION_STRING) + +MARK_AS_ADVANCED(HSPELL_INCLUDE_DIR HSPELL_LIBRARIES) + diff --git a/Modules/FindHTMLHelp.cmake b/Modules/FindHTMLHelp.cmake new file mode 100644 index 0000000..4455b07 --- /dev/null +++ b/Modules/FindHTMLHelp.cmake @@ -0,0 +1,54 @@ +# - This module looks for Microsoft HTML Help Compiler +# It defines: +# HTML_HELP_COMPILER : full path to the Compiler (hhc.exe) +# HTML_HELP_INCLUDE_PATH : include path to the API (htmlhelp.h) +# HTML_HELP_LIBRARY : full path to the library (htmlhelp.lib) +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(WIN32) + + FIND_PROGRAM(HTML_HELP_COMPILER + hhc + "[HKEY_CURRENT_USER\\Software\\Microsoft\\HTML Help Workshop;InstallDir]" + "$ENV{ProgramFiles}/HTML Help Workshop" + "C:/Program Files/HTML Help Workshop" + ) + + GET_FILENAME_COMPONENT(HTML_HELP_COMPILER_PATH "${HTML_HELP_COMPILER}" PATH) + + FIND_PATH(HTML_HELP_INCLUDE_PATH + htmlhelp.h + "${HTML_HELP_COMPILER_PATH}/include" + "[HKEY_CURRENT_USER\\Software\\Microsoft\\HTML Help Workshop;InstallDir]/include" + "$ENV{ProgramFiles}/HTML Help Workshop/include" + "C:/Program Files/HTML Help Workshop/include" + ) + + FIND_LIBRARY(HTML_HELP_LIBRARY + htmlhelp + "${HTML_HELP_COMPILER_PATH}/lib" + "[HKEY_CURRENT_USER\\Software\\Microsoft\\HTML Help Workshop;InstallDir]/lib" + "$ENV{ProgramFiles}/HTML Help Workshop/lib" + "C:/Program Files/HTML Help Workshop/lib" + ) + + MARK_AS_ADVANCED( + HTML_HELP_COMPILER + HTML_HELP_INCLUDE_PATH + HTML_HELP_LIBRARY + ) + +ENDIF(WIN32) diff --git a/Modules/FindITK.cmake b/Modules/FindITK.cmake new file mode 100644 index 0000000..a3ca998 --- /dev/null +++ b/Modules/FindITK.cmake @@ -0,0 +1,57 @@ +# - Find an ITK installation or build tree. + +# When ITK is found, the ITKConfig.cmake file is sourced to setup the +# location and configuration of ITK. Please read this file, or +# ITKConfig.cmake.in from the ITK source tree for the full list of +# definitions. Of particular interest is ITK_USE_FILE, a CMake source file +# that can be included to set the include directories, library directories, +# and preprocessor macros. In addition to the variables read from +# ITKConfig.cmake, this find module also defines +# ITK_DIR - The directory containing ITKConfig.cmake. +# This is either the root of the build tree, +# or the lib/InsightToolkit directory. +# This is the only cache entry. +# +# ITK_FOUND - Whether ITK was found. If this is true, +# ITK_DIR is okay. +# +# USE_ITK_FILE - The full path to the UseITK.cmake file. +# This is provided for backward +# compatability. Use ITK_USE_FILE +# instead. + +#============================================================================= +# Copyright 2001-2010 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.) + +# Use the Config mode of the find_package() command to find ITKConfig. +# If this succeeds (possibly because ITK_DIR is already set), the +# command will have already loaded ITKConfig.cmake and set ITK_FOUND. +IF(NOT ITK_FOUND) + SET(_ITK_REQUIRED "") + IF(ITK_FIND_REQUIRED) + SET(_ITK_REQUIRED REQUIRED) + ENDIF() + SET(_ITK_QUIET "") + IF(ITK_FIND_QUIETLY) + SET(_ITK_QUIET QUIET) + ENDIF() + FIND_PACKAGE(ITK ${_ITK_REQUIRED} ${_ITK_QUIET} NO_MODULE + NAMES ITK InsightToolkit + CONFIGS ITKConfig.cmake + ) +ENDIF() + +IF(ITK_FOUND) + # Set USE_ITK_FILE for backward-compatability. + SET(USE_ITK_FILE ${ITK_USE_FILE}) +ENDIF() diff --git a/Modules/FindImageMagick.cmake b/Modules/FindImageMagick.cmake new file mode 100644 index 0000000..f21b630 --- /dev/null +++ b/Modules/FindImageMagick.cmake @@ -0,0 +1,237 @@ +# - Find the ImageMagick binary suite. +# This module will search for a set of ImageMagick tools specified +# as components in the FIND_PACKAGE call. Typical components include, +# but are not limited to (future versions of ImageMagick might have +# additional components not listed here): +# +# animate +# compare +# composite +# conjure +# convert +# display +# identify +# import +# mogrify +# montage +# stream +# +# If no component is specified in the FIND_PACKAGE call, then it only +# searches for the ImageMagick executable directory. This code defines +# the following variables: +# +# ImageMagick_FOUND - TRUE if all components are found. +# ImageMagick_EXECUTABLE_DIR - Full path to executables directory. +# ImageMagick__FOUND - TRUE if is found. +# ImageMagick__EXECUTABLE - Full path to executable. +# 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++ +# MagickWand +# MagickCore +# +# For these components the following variables are set: +# +# ImageMagick_FOUND - TRUE if all components are found. +# ImageMagick_INCLUDE_DIRS - Full paths to all include dirs. +# ImageMagick_LIBRARIES - Full paths to all libraries. +# ImageMagick__FOUND - TRUE if is found. +# ImageMagick__INCLUDE_DIRS - Full path to include dirs. +# ImageMagick__LIBRARIES - Full path to libraries. +# +# Example Usages: +# FIND_PACKAGE(ImageMagick) +# FIND_PACKAGE(ImageMagick COMPONENTS convert) +# FIND_PACKAGE(ImageMagick COMPONENTS convert mogrify display) +# FIND_PACKAGE(ImageMagick COMPONENTS Magick++) +# FIND_PACKAGE(ImageMagick COMPONENTS Magick++ convert) +# +# Note that the standard FIND_PACKAGE features are supported +# (i.e., QUIET, REQUIRED, etc.). + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# Copyright 2007-2008 Miguel A. Figueroa-Villanueva +# Copyright 2012 Rolf Eike Beer +# +# 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.) + +#--------------------------------------------------------------------- +# Helper functions +#--------------------------------------------------------------------- +FUNCTION(FIND_IMAGEMAGICK_API component header) + SET(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE) + + FIND_PATH(ImageMagick_${component}_INCLUDE_DIR + NAMES ${header} + PATHS + ${ImageMagick_INCLUDE_DIRS} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/include" + PATH_SUFFIXES + ImageMagick + DOC "Path to the ImageMagick include dir." + ) + FIND_LIBRARY(ImageMagick_${component}_LIBRARY + NAMES ${ARGN} + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/lib" + DOC "Path to the ImageMagick Magick++ library." + ) + + IF(ImageMagick_${component}_INCLUDE_DIR AND ImageMagick_${component}_LIBRARY) + SET(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE) + + LIST(APPEND ImageMagick_INCLUDE_DIRS + ${ImageMagick_${component}_INCLUDE_DIR} + ) + LIST(REMOVE_DUPLICATES ImageMagick_INCLUDE_DIRS) + SET(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS} PARENT_SCOPE) + + LIST(APPEND ImageMagick_LIBRARIES + ${ImageMagick_${component}_LIBRARY} + ) + SET(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES} PARENT_SCOPE) + ENDIF(ImageMagick_${component}_INCLUDE_DIR AND ImageMagick_${component}_LIBRARY) +ENDFUNCTION(FIND_IMAGEMAGICK_API) + +FUNCTION(FIND_IMAGEMAGICK_EXE component) + SET(_IMAGEMAGICK_EXECUTABLE + ${ImageMagick_EXECUTABLE_DIR}/${component}${CMAKE_EXECUTABLE_SUFFIX}) + IF(EXISTS ${_IMAGEMAGICK_EXECUTABLE}) + SET(ImageMagick_${component}_EXECUTABLE + ${_IMAGEMAGICK_EXECUTABLE} + PARENT_SCOPE + ) + SET(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE) + ELSE(EXISTS ${_IMAGEMAGICK_EXECUTABLE}) + SET(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE) + ENDIF(EXISTS ${_IMAGEMAGICK_EXECUTABLE}) +ENDFUNCTION(FIND_IMAGEMAGICK_EXE) + +#--------------------------------------------------------------------- +# Start Actual Work +#--------------------------------------------------------------------- +# Try to find a ImageMagick installation binary path. +FIND_PATH(ImageMagick_EXECUTABLE_DIR + NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX} + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]" + DOC "Path to the ImageMagick binary directory." + NO_DEFAULT_PATH + ) +FIND_PATH(ImageMagick_EXECUTABLE_DIR + NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX} + ) + +# Find each component. Search for all tools in same dir +# ; otherwise they should be found +# independently and not in a cohesive module such as this one. +UNSET(ImageMagick_REQUIRED_VARS) +UNSET(ImageMagick_DEFAULT_EXECUTABLES) +FOREACH(component ${ImageMagick_FIND_COMPONENTS} + # DEPRECATED: forced components for backward compatibility + convert mogrify import montage composite + ) + IF(component STREQUAL "Magick++") + FIND_IMAGEMAGICK_API(Magick++ Magick++.h + Magick++ CORE_RL_Magick++_ + ) + LIST(APPEND ImageMagick_REQUIRED_VARS ImageMagick_Magick++_LIBRARY) + ELSEIF(component STREQUAL "MagickWand") + FIND_IMAGEMAGICK_API(MagickWand wand/MagickWand.h + Wand MagickWand CORE_RL_wand_ + ) + LIST(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickWand_LIBRARY) + ELSEIF(component STREQUAL "MagickCore") + FIND_IMAGEMAGICK_API(MagickCore magick/MagickCore.h + Magick MagickCore CORE_RL_magick_ + ) + LIST(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickCore_LIBRARY) + ELSE(component STREQUAL "Magick++") + IF(ImageMagick_EXECUTABLE_DIR) + FIND_IMAGEMAGICK_EXE(${component}) + ENDIF(ImageMagick_EXECUTABLE_DIR) + + IF(ImageMagick_FIND_COMPONENTS) + LIST(FIND ImageMagick_FIND_COMPONENTS ${component} is_requested) + IF(is_requested GREATER -1) + LIST(APPEND ImageMagick_REQUIRED_VARS ImageMagick_${component}_EXECUTABLE) + ENDIF(is_requested GREATER -1) + 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) + ENDIF(ImageMagick_FIND_COMPONENTS) + ENDIF(component STREQUAL "Magick++") +ENDFOREACH(component) + +IF(NOT ImageMagick_FIND_COMPONENTS AND NOT ImageMagick_DEFAULT_EXECUTABLES) + # No components were requested, and none of the default components were + # found. Just insert mogrify into the list of the default components to + # find so FPHSA below has something to check + LIST(APPEND ImageMagick_REQUIRED_VARS ImageMagick_mogrify_EXECUTABLE) +ELSEIF(ImageMagick_DEFAULT_EXECUTABLES) + LIST(APPEND ImageMagick_REQUIRED_VARS ${ImageMagick_DEFAULT_EXECUTABLES}) +ENDIF() + +SET(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS}) +SET(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES}) + +IF(ImageMagick_mogrify_EXECUTABLE) + EXECUTE_PROCESS(COMMAND ${ImageMagick_mogrify_EXECUTABLE} -version + OUTPUT_VARIABLE imagemagick_version + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + IF(imagemagick_version MATCHES "^Version: ImageMagick [0-9]") + STRING(REGEX REPLACE "^Version: ImageMagick ([-0-9\\.]+).*" "\\1" ImageMagick_VERSION_STRING "${imagemagick_version}") + ENDIF() + UNSET(imagemagick_version) +ENDIF(ImageMagick_mogrify_EXECUTABLE) + +#--------------------------------------------------------------------- +# Standard Package Output +#--------------------------------------------------------------------- +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ImageMagick + REQUIRED_VARS ${ImageMagick_REQUIRED_VARS} + VERSION_VAR ImageMagick_VERSION_STRING + ) +# Maintain consistency with all other variables. +SET(ImageMagick_FOUND ${IMAGEMAGICK_FOUND}) + +#--------------------------------------------------------------------- +# DEPRECATED: Setting variables for backward compatibility. +#--------------------------------------------------------------------- +SET(IMAGEMAGICK_BINARY_PATH ${ImageMagick_EXECUTABLE_DIR} + CACHE PATH "Path to the ImageMagick binary directory.") +SET(IMAGEMAGICK_CONVERT_EXECUTABLE ${ImageMagick_convert_EXECUTABLE} + CACHE FILEPATH "Path to ImageMagick's convert executable.") +SET(IMAGEMAGICK_MOGRIFY_EXECUTABLE ${ImageMagick_mogrify_EXECUTABLE} + CACHE FILEPATH "Path to ImageMagick's mogrify executable.") +SET(IMAGEMAGICK_IMPORT_EXECUTABLE ${ImageMagick_import_EXECUTABLE} + CACHE FILEPATH "Path to ImageMagick's import executable.") +SET(IMAGEMAGICK_MONTAGE_EXECUTABLE ${ImageMagick_montage_EXECUTABLE} + CACHE FILEPATH "Path to ImageMagick's montage executable.") +SET(IMAGEMAGICK_COMPOSITE_EXECUTABLE ${ImageMagick_composite_EXECUTABLE} + CACHE FILEPATH "Path to ImageMagick's composite executable.") +MARK_AS_ADVANCED( + IMAGEMAGICK_BINARY_PATH + IMAGEMAGICK_CONVERT_EXECUTABLE + IMAGEMAGICK_MOGRIFY_EXECUTABLE + IMAGEMAGICK_IMPORT_EXECUTABLE + IMAGEMAGICK_MONTAGE_EXECUTABLE + IMAGEMAGICK_COMPOSITE_EXECUTABLE + ) diff --git a/Modules/FindJNI.cmake b/Modules/FindJNI.cmake new file mode 100644 index 0000000..d49b44a --- /dev/null +++ b/Modules/FindJNI.cmake @@ -0,0 +1,261 @@ +# - Find JNI java libraries. +# This module finds if Java is installed and determines where the +# include files and libraries are. It also determines what the name of +# the library is. This code sets the following variables: +# +# JNI_INCLUDE_DIRS = the include dirs to use +# JNI_LIBRARIES = the libraries to use +# JNI_FOUND = TRUE if JNI headers and libraries were found. +# JAVA_AWT_LIBRARY = the path to the jawt library +# JAVA_JVM_LIBRARY = the path to the jvm library +# JAVA_INCLUDE_PATH = the include path to jni.h +# JAVA_INCLUDE_PATH2 = the include path to jni_md.h +# JAVA_AWT_INCLUDE_PATH = the include path to jawt.h +# + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Expand {libarch} occurences to java_libarch subdirectory(-ies) and set ${_var} +MACRO(java_append_library_directories _var) + # Determine java arch-specific library subdir + # Mostly based on openjdk/jdk/make/common/shared/Platform.gmk as of openjdk + # 1.6.0_18 + icedtea patches. However, it would be much better to base the + # guess on the first part of the GNU config.guess platform triplet. + IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + SET(_java_libarch "amd64") + ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") + SET(_java_libarch "i386") + ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^alpha") + SET(_java_libarch "alpha") + ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") + # Subdir is "arm" for both big-endian (arm) and little-endian (armel). + SET(_java_libarch "arm") + ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") + # mips* machines are bi-endian mostly so processor does not tell + # endianess of the underlying system. + SET(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "mips" "mipsel" "mipseb") + ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") + SET(_java_libarch "ppc64") + ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)") + SET(_java_libarch "ppc") + ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc") + # Both flavours can run on the same processor + SET(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "sparc" "sparcv9") + ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(parisc|hppa)") + SET(_java_libarch "parisc" "parisc64") + ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390") + # s390 binaries can run on s390x machines + SET(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "s390" "s390x") + ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh") + SET(_java_libarch "sh") + ELSE(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + SET(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}") + ENDIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + + # Append default list architectures if CMAKE_SYSTEM_PROCESSOR was empty or + # system is non-Linux (where the code above has not been well tested) + IF(NOT _java_libarch OR NOT (CMAKE_SYSTEM_NAME MATCHES "Linux")) + LIST(APPEND _java_libarch "i386" "amd64" "ppc") + ENDIF(NOT _java_libarch OR NOT (CMAKE_SYSTEM_NAME MATCHES "Linux")) + + # Sometimes ${CMAKE_SYSTEM_PROCESSOR} is added to the list to prefer + # current value to a hardcoded list. Remove possible duplicates. + LIST(REMOVE_DUPLICATES _java_libarch) + + FOREACH(_path ${ARGN}) + IF(_path MATCHES "{libarch}") + FOREACH(_libarch ${_java_libarch}) + STRING(REPLACE "{libarch}" "${_libarch}" _newpath "${_path}") + LIST(APPEND ${_var} "${_newpath}") + ENDFOREACH(_libarch) + ELSE(_path MATCHES "{libarch}") + LIST(APPEND ${_var} "${_path}") + ENDIF(_path MATCHES "{libarch}") + ENDFOREACH(_path) +ENDMACRO(java_append_library_directories) + +GET_FILENAME_COMPONENT(java_install_version + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit;CurrentVersion]" NAME) + +SET(JAVA_AWT_LIBRARY_DIRECTORIES + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/lib" + ) + +FILE(TO_CMAKE_PATH "$ENV{JAVA_HOME}" _JAVA_HOME) + +JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES + ${_JAVA_HOME}/jre/lib/{libarch} + ${_JAVA_HOME}/jre/lib + ${_JAVA_HOME}/lib + ${_JAVA_HOME} + /usr/lib + /usr/local/lib + /usr/lib/jvm/java/lib + /usr/lib/java/jre/lib/{libarch} + /usr/lib/jvm/jre/lib/{libarch} + /usr/local/lib/java/jre/lib/{libarch} + /usr/local/share/java/jre/lib/{libarch} + /usr/lib/j2sdk1.4-sun/jre/lib/{libarch} + /usr/lib/j2sdk1.5-sun/jre/lib/{libarch} + /opt/sun-jdk-1.5.0.04/jre/lib/{libarch} + /usr/lib/jvm/java-6-sun/jre/lib/{libarch} + /usr/lib/jvm/java-1.5.0-sun/jre/lib/{libarch} + /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/{libarch} # can this one be removed according to #8821 ? Alex + /usr/lib/jvm/java-6-openjdk/jre/lib/{libarch} + /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/{libarch} # fedora + # Debian specific paths for default JVM + /usr/lib/jvm/default-java/jre/lib/{libarch} + /usr/lib/jvm/default-java/jre/lib + /usr/lib/jvm/default-java/lib + ) + +SET(JAVA_JVM_LIBRARY_DIRECTORIES) +FOREACH(dir ${JAVA_AWT_LIBRARY_DIRECTORIES}) + SET(JAVA_JVM_LIBRARY_DIRECTORIES + ${JAVA_JVM_LIBRARY_DIRECTORIES} + "${dir}" + "${dir}/client" + "${dir}/server" + ) +ENDFOREACH(dir) + + +SET(JAVA_AWT_INCLUDE_DIRECTORIES + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/include" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/include" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/include" + ${_JAVA_HOME}/include + /usr/include + /usr/local/include + /usr/lib/java/include + /usr/local/lib/java/include + /usr/lib/jvm/java/include + /usr/lib/jvm/java-6-sun/include + /usr/lib/jvm/java-1.5.0-sun/include + /usr/lib/jvm/java-6-sun-1.6.0.00/include # can this one be removed according to #8821 ? Alex + /usr/lib/jvm/java-6-openjdk/include + /usr/local/share/java/include + /usr/lib/j2sdk1.4-sun/include + /usr/lib/j2sdk1.5-sun/include + /opt/sun-jdk-1.5.0.04/include + # Debian specific path for default JVM + /usr/lib/jvm/default-java/include + ) + +FOREACH(JAVA_PROG "${JAVA_RUNTIME}" "${JAVA_COMPILE}" "${JAVA_ARCHIVE}") + GET_FILENAME_COMPONENT(jpath "${JAVA_PROG}" PATH) + FOREACH(JAVA_INC_PATH ../include ../java/include ../share/java/include) + IF(EXISTS ${jpath}/${JAVA_INC_PATH}) + SET(JAVA_AWT_INCLUDE_DIRECTORIES ${JAVA_AWT_INCLUDE_DIRECTORIES} "${jpath}/${JAVA_INC_PATH}") + ENDIF(EXISTS ${jpath}/${JAVA_INC_PATH}) + ENDFOREACH(JAVA_INC_PATH) + FOREACH(JAVA_LIB_PATH + ../lib ../jre/lib ../jre/lib/i386 + ../java/lib ../java/jre/lib ../java/jre/lib/i386 + ../share/java/lib ../share/java/jre/lib ../share/java/jre/lib/i386) + IF(EXISTS ${jpath}/${JAVA_LIB_PATH}) + SET(JAVA_AWT_LIBRARY_DIRECTORIES ${JAVA_AWT_LIBRARY_DIRECTORIES} "${jpath}/${JAVA_LIB_PATH}") + ENDIF(EXISTS ${jpath}/${JAVA_LIB_PATH}) + ENDFOREACH(JAVA_LIB_PATH) +ENDFOREACH(JAVA_PROG) + +IF(APPLE) + IF(EXISTS ~/Library/Frameworks/JavaVM.framework) + SET(JAVA_HAVE_FRAMEWORK 1) + ENDIF(EXISTS ~/Library/Frameworks/JavaVM.framework) + IF(EXISTS /Library/Frameworks/JavaVM.framework) + SET(JAVA_HAVE_FRAMEWORK 1) + ENDIF(EXISTS /Library/Frameworks/JavaVM.framework) + IF(EXISTS /System/Library/Frameworks/JavaVM.framework) + SET(JAVA_HAVE_FRAMEWORK 1) + ENDIF(EXISTS /System/Library/Frameworks/JavaVM.framework) + + IF(JAVA_HAVE_FRAMEWORK) + IF(NOT JAVA_AWT_LIBRARY) + SET (JAVA_AWT_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE) + ENDIF(NOT JAVA_AWT_LIBRARY) + + IF(NOT JAVA_JVM_LIBRARY) + SET (JAVA_JVM_LIBRARY "-framework JavaVM" CACHE FILEPATH "Java Frameworks" FORCE) + ENDIF(NOT JAVA_JVM_LIBRARY) + + IF(NOT JAVA_AWT_INCLUDE_PATH) + IF(EXISTS /System/Library/Frameworks/JavaVM.framework/Headers/jawt.h) + SET (JAVA_AWT_INCLUDE_PATH "/System/Library/Frameworks/JavaVM.framework/Headers" CACHE FILEPATH "jawt.h location" FORCE) + ENDIF(EXISTS /System/Library/Frameworks/JavaVM.framework/Headers/jawt.h) + ENDIF(NOT JAVA_AWT_INCLUDE_PATH) + + # If using "-framework JavaVM", prefer its headers *before* the others in + # JAVA_AWT_INCLUDE_DIRECTORIES... (*prepend* to the list here) + # + SET(JAVA_AWT_INCLUDE_DIRECTORIES + ~/Library/Frameworks/JavaVM.framework/Headers + /Library/Frameworks/JavaVM.framework/Headers + /System/Library/Frameworks/JavaVM.framework/Headers + ${JAVA_AWT_INCLUDE_DIRECTORIES} + ) + ENDIF(JAVA_HAVE_FRAMEWORK) +ELSE(APPLE) + FIND_LIBRARY(JAVA_AWT_LIBRARY jawt + PATHS ${JAVA_AWT_LIBRARY_DIRECTORIES} + ) + FIND_LIBRARY(JAVA_JVM_LIBRARY NAMES jvm JavaVM + PATHS ${JAVA_JVM_LIBRARY_DIRECTORIES} + ) +ENDIF(APPLE) + +# add in the include path +FIND_PATH(JAVA_INCLUDE_PATH jni.h + ${JAVA_AWT_INCLUDE_DIRECTORIES} +) + +FIND_PATH(JAVA_INCLUDE_PATH2 jni_md.h + ${JAVA_INCLUDE_PATH} + ${JAVA_INCLUDE_PATH}/win32 + ${JAVA_INCLUDE_PATH}/linux + ${JAVA_INCLUDE_PATH}/freebsd + ${JAVA_INCLUDE_PATH}/solaris + ${JAVA_INCLUDE_PATH}/hp-ux + ${JAVA_INCLUDE_PATH}/alpha +) + +FIND_PATH(JAVA_AWT_INCLUDE_PATH jawt.h + ${JAVA_INCLUDE_PATH} +) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(JNI DEFAULT_MSG JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY + JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH) + +MARK_AS_ADVANCED( + JAVA_AWT_LIBRARY + JAVA_JVM_LIBRARY + JAVA_AWT_INCLUDE_PATH + JAVA_INCLUDE_PATH + JAVA_INCLUDE_PATH2 +) + +SET(JNI_LIBRARIES + ${JAVA_AWT_LIBRARY} + ${JAVA_JVM_LIBRARY} +) + +SET(JNI_INCLUDE_DIRS + ${JAVA_INCLUDE_PATH} + ${JAVA_INCLUDE_PATH2} + ${JAVA_AWT_INCLUDE_PATH} +) + diff --git a/Modules/FindJPEG.cmake b/Modules/FindJPEG.cmake new file mode 100644 index 0000000..349e7e1 --- /dev/null +++ b/Modules/FindJPEG.cmake @@ -0,0 +1,43 @@ +# - Find JPEG +# Find the native JPEG includes and library +# This module defines +# JPEG_INCLUDE_DIR, where to find jpeglib.h, etc. +# JPEG_LIBRARIES, the libraries needed to use JPEG. +# JPEG_FOUND, If false, do not try to use JPEG. +# also defined, but not for general use are +# JPEG_LIBRARY, where to find the JPEG library. + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(JPEG_INCLUDE_DIR jpeglib.h) + +SET(JPEG_NAMES ${JPEG_NAMES} jpeg) +FIND_LIBRARY(JPEG_LIBRARY NAMES ${JPEG_NAMES} ) + +# handle the QUIETLY and REQUIRED arguments and set JPEG_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(JPEG DEFAULT_MSG JPEG_LIBRARY JPEG_INCLUDE_DIR) + +IF(JPEG_FOUND) + SET(JPEG_LIBRARIES ${JPEG_LIBRARY}) +ENDIF(JPEG_FOUND) + +# Deprecated declarations. +SET (NATIVE_JPEG_INCLUDE_PATH ${JPEG_INCLUDE_DIR} ) +IF(JPEG_LIBRARY) + GET_FILENAME_COMPONENT (NATIVE_JPEG_LIB_PATH ${JPEG_LIBRARY} PATH) +ENDIF(JPEG_LIBRARY) + +MARK_AS_ADVANCED(JPEG_LIBRARY JPEG_INCLUDE_DIR ) diff --git a/Modules/FindJasper.cmake b/Modules/FindJasper.cmake new file mode 100644 index 0000000..6dc7e4d --- /dev/null +++ b/Modules/FindJasper.cmake @@ -0,0 +1,53 @@ +# - Try to find the Jasper JPEG2000 library +# Once done this will define +# +# JASPER_FOUND - system has Jasper +# JASPER_INCLUDE_DIR - the Jasper include directory +# JASPER_LIBRARIES - the libraries needed to use Jasper +# JASPER_VERSION_STRING - the version of Jasper found (since CMake 2.8.8) + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# Copyright 2012 Rolf Eike Beer +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(JASPER_INCLUDE_DIR jasper/jasper.h) + +IF (NOT JASPER_LIBRARIES) + FIND_PACKAGE(JPEG) + + FIND_LIBRARY(JASPER_LIBRARY_RELEASE NAMES jasper libjasper) + FIND_LIBRARY(JASPER_LIBRARY_DEBUG NAMES jasperd) + + INCLUDE(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) + SELECT_LIBRARY_CONFIGURATIONS(JASPER) +ENDIF (NOT JASPER_LIBRARIES) + +IF (JASPER_INCLUDE_DIR AND EXISTS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h") + FILE(STRINGS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h" jasper_version_str REGEX "^#define[\t ]+JAS_VERSION[\t ]+\".*\".*") + + STRING(REGEX REPLACE "^#define[\t ]+JAS_VERSION[\t ]+\"([^\"]+)\".*" "\\1" JASPER_VERSION_STRING "${jasper_version_str}") +ENDIF (JASPER_INCLUDE_DIR AND EXISTS "${JASPER_INCLUDE_DIR}/jasper/jas_config.h") + +# handle the QUIETLY and REQUIRED arguments and set JASPER_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Jasper + REQUIRED_VARS JASPER_LIBRARIES JASPER_INCLUDE_DIR JPEG_LIBRARIES + VERSION_VAR JASPER_VERSION_STRING) + +IF (JASPER_FOUND) + SET(JASPER_LIBRARIES ${JASPER_LIBRARIES} ${JPEG_LIBRARIES} ) +ENDIF (JASPER_FOUND) + +MARK_AS_ADVANCED(JASPER_INCLUDE_DIR) diff --git a/Modules/FindJava.cmake b/Modules/FindJava.cmake new file mode 100644 index 0000000..34a7077 --- /dev/null +++ b/Modules/FindJava.cmake @@ -0,0 +1,204 @@ +# - Find Java +# This module finds if Java is installed and determines where the +# include files and libraries are. This code sets the following +# variables: +# +# Java_JAVA_EXECUTABLE = the full path to the Java runtime +# Java_JAVAC_EXECUTABLE = the full path to the Java compiler +# Java_JAVAH_EXECUTABLE = the full path to the Java header generator +# Java_JAVADOC_EXECUTABLE = the full path to the Java documention generator +# Java_JAR_EXECUTABLE = the full path to the Java archiver +# Java_VERSION_STRING = Version of the package found (java version), eg. 1.6.0_12 +# Java_VERSION_MAJOR = The major version of the package found. +# Java_VERSION_MINOR = The minor version of the package found. +# Java_VERSION_PATCH = The patch version of the package found. +# Java_VERSION_TWEAK = The tweak version of the package found (after '_') +# Java_VERSION = This is set to: $major.$minor.$patch(.$tweak) +# +# The minimum required version of Java can be specified using the +# standard CMake syntax, e.g. FIND_PACKAGE(Java 1.5) +# +# NOTE: ${Java_VERSION} and ${Java_VERSION_STRING} are not guaranteed to be +# identical. For example some java version may return: +# Java_VERSION_STRING = 1.5.0_17 +# and +# Java_VERSION = 1.5.0.17 +# +# another example is the Java OEM, with: +# Java_VERSION_STRING = 1.6.0-oem +# and +# Java_VERSION = 1.6.0 +# +# For these components the following variables are set: +# +# Java_FOUND - TRUE if all components are found. +# Java_INCLUDE_DIRS - Full paths to all include dirs. +# Java_LIBRARIES - Full paths to all libraries. +# Java__FOUND - TRUE if is found. +# +# Example Usages: +# FIND_PACKAGE(Java) +# FIND_PACKAGE(Java COMPONENTS Runtime) +# FIND_PACKAGE(Java COMPONENTS Development) +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# Copyright 2009-2011 Mathieu Malaterre +# +# 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.) + +# The HINTS option should only be used for values computed from the system. +SET(_JAVA_HINTS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\2.0;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.9;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.8;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.7;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.6;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.5;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/bin" + $ENV{JAVA_HOME}/bin + ) +# Hard-coded guesses should still go in PATHS. This ensures that the user +# environment can always override hard guesses. +SET(_JAVA_PATHS + /usr/lib/java/bin + /usr/share/java/bin + /usr/local/java/bin + /usr/local/java/share/bin + /usr/java/j2sdk1.4.2_04 + /usr/lib/j2sdk1.4-sun/bin + /usr/java/j2sdk1.4.2_09/bin + /usr/lib/j2sdk1.5-sun/bin + /opt/sun-jdk-1.5.0.04/bin + ) +FIND_PROGRAM(Java_JAVA_EXECUTABLE + NAMES java + HINTS ${_JAVA_HINTS} + PATHS ${_JAVA_PATHS} +) + +IF(Java_JAVA_EXECUTABLE) + EXECUTE_PROCESS(COMMAND ${Java_JAVA_EXECUTABLE} -version + RESULT_VARIABLE res + OUTPUT_VARIABLE var + ERROR_VARIABLE var # sun-java output to stderr + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE) + IF( res ) + IF(${Java_FIND_REQUIRED}) + MESSAGE( FATAL_ERROR "Error executing java -version" ) + ELSE() + MESSAGE( STATUS "Warning, could not run java --version") + ENDIF() + ELSE() + # extract major/minor version and patch level from "java -version" output + # Tested on linux using + # 1. Sun / Sun OEM + # 2. OpenJDK 1.6 + # 3. GCJ 1.5 + # 4. Kaffe 1.4.2 + IF(var MATCHES "java version \"[0-9]+\\.[0-9]+\\.[0-9_.]+[oem-]*\".*") + # This is most likely Sun / OpenJDK, or maybe GCJ-java compat layer + STRING( REGEX REPLACE ".* version \"([0-9]+\\.[0-9]+\\.[0-9_.]+)[oem-]*\".*" + "\\1" Java_VERSION_STRING "${var}" ) + ELSEIF(var MATCHES "java full version \"kaffe-[0-9]+\\.[0-9]+\\.[0-9_]+\".*") + # Kaffe style + STRING( REGEX REPLACE "java full version \"kaffe-([0-9]+\\.[0-9]+\\.[0-9_]+).*" + "\\1" Java_VERSION_STRING "${var}" ) + ELSE() + IF(NOT Java_FIND_QUIETLY) + message(WARNING "regex not supported: ${var}. Please report") + ENDIF(NOT Java_FIND_QUIETLY) + ENDIF() + STRING( REGEX REPLACE "([0-9]+).*" "\\1" Java_VERSION_MAJOR "${Java_VERSION_STRING}" ) + STRING( REGEX REPLACE "[0-9]+\\.([0-9]+).*" "\\1" Java_VERSION_MINOR "${Java_VERSION_STRING}" ) + STRING( REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" Java_VERSION_PATCH "${Java_VERSION_STRING}" ) + # warning tweak version can be empty: + STRING( REGEX REPLACE "[0-9]+\\.[0-9]+\\.[0-9]+\\_?\\.?([0-9]*)$" "\\1" Java_VERSION_TWEAK "${Java_VERSION_STRING}" ) + if( Java_VERSION_TWEAK STREQUAL "" ) # check case where tweak is not defined + set(Java_VERSION ${Java_VERSION_MAJOR}.${Java_VERSION_MINOR}.${Java_VERSION_PATCH}) + else( ) + set(Java_VERSION ${Java_VERSION_MAJOR}.${Java_VERSION_MINOR}.${Java_VERSION_PATCH}.${Java_VERSION_TWEAK}) + endif( ) + ENDIF() + +ENDIF(Java_JAVA_EXECUTABLE) + + +FIND_PROGRAM(Java_JAR_EXECUTABLE + NAMES jar + HINTS ${_JAVA_HINTS} + PATHS ${_JAVA_PATHS} +) + +FIND_PROGRAM(Java_JAVAC_EXECUTABLE + NAMES javac + HINTS ${_JAVA_HINTS} + PATHS ${_JAVA_PATHS} +) + +FIND_PROGRAM(Java_JAVAH_EXECUTABLE + NAMES javah + HINTS ${_JAVA_HINTS} + PATHS ${_JAVA_PATHS} +) + +FIND_PROGRAM(Java_JAVADOC_EXECUTABLE + NAMES javadoc + HINTS ${_JAVA_HINTS} + PATHS ${_JAVA_PATHS} +) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +if(Java_FIND_COMPONENTS) + foreach(component ${Java_FIND_COMPONENTS}) + # User just want to execute some Java byte-compiled + if(component STREQUAL "Runtime") + find_package_handle_standard_args(Java + REQUIRED_VARS Java_JAVA_EXECUTABLE + VERSION_VAR Java_VERSION + ) + elseif(component STREQUAL "Development") + find_package_handle_standard_args(Java + REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAR_EXECUTABLE Java_JAVAC_EXECUTABLE + Java_JAVAH_EXECUTABLE Java_JAVADOC_EXECUTABLE + VERSION_VAR Java_VERSION + ) + else() + message(FATAL_ERROR "Comp: ${component} is not handled") + endif() + set(Java_${component}_FOUND TRUE) + endforeach(component) +else() + # Check for everything + find_package_handle_standard_args(Java + REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAR_EXECUTABLE Java_JAVAC_EXECUTABLE + Java_JAVAH_EXECUTABLE Java_JAVADOC_EXECUTABLE + VERSION_VAR Java_VERSION + ) +endif() + + +MARK_AS_ADVANCED( + Java_JAVA_EXECUTABLE + Java_JAR_EXECUTABLE + Java_JAVAC_EXECUTABLE + Java_JAVAH_EXECUTABLE + Java_JAVADOC_EXECUTABLE + ) + +# LEGACY +SET(JAVA_RUNTIME ${Java_JAVA_EXECUTABLE}) +SET(JAVA_ARCHIVE ${Java_JAR_EXECUTABLE}) +SET(JAVA_COMPILE ${Java_JAVAC_EXECUTABLE}) + diff --git a/Modules/FindKDE3.cmake b/Modules/FindKDE3.cmake new file mode 100644 index 0000000..9d10814 --- /dev/null +++ b/Modules/FindKDE3.cmake @@ -0,0 +1,299 @@ +# - Find the KDE3 include and library dirs, KDE preprocessors and define a some macros +# +# This module defines the following variables: +# KDE3_DEFINITIONS - compiler definitions required for compiling KDE software +# KDE3_INCLUDE_DIR - the KDE include directory +# KDE3_INCLUDE_DIRS - the KDE and the Qt include directory, for use with INCLUDE_DIRECTORIES() +# KDE3_LIB_DIR - the directory where the KDE libraries are installed, for use with LINK_DIRECTORIES() +# QT_AND_KDECORE_LIBS - this contains both the Qt and the kdecore library +# KDE3_DCOPIDL_EXECUTABLE - the dcopidl executable +# KDE3_DCOPIDL2CPP_EXECUTABLE - the dcopidl2cpp executable +# KDE3_KCFGC_EXECUTABLE - the kconfig_compiler executable +# KDE3_FOUND - set to TRUE if all of the above has been found +# +# The following user adjustable options are provided: +# +# KDE3_BUILD_TESTS - enable this to build KDE testcases +# +# +# It also adds the following macros (from KDE3Macros.cmake) +# SRCS_VAR is always the variable which contains the list of source files for your application or library. +# +# KDE3_AUTOMOC(file1 ... fileN) +# Call this if you want to have automatic moc file handling. +# This means if you include "foo.moc" in the source file foo.cpp +# a moc file for the header foo.h will be created automatically. +# You can set the property SKIP_AUTOMAKE using SET_SOURCE_FILES_PROPERTIES() +# to exclude some files in the list from being processed. +# +# KDE3_ADD_MOC_FILES(SRCS_VAR file1 ... fileN ) +# If you don't use the KDE3_AUTOMOC() macro, for the files +# listed here moc files will be created (named "foo.moc.cpp") +# +# KDE3_ADD_DCOP_SKELS(SRCS_VAR header1.h ... headerN.h ) +# Use this to generate DCOP skeletions from the listed headers. +# +# KDE3_ADD_DCOP_STUBS(SRCS_VAR header1.h ... headerN.h ) +# Use this to generate DCOP stubs from the listed headers. +# +# KDE3_ADD_UI_FILES(SRCS_VAR file1.ui ... fileN.ui ) +# Use this to add the Qt designer ui files to your application/library. +# +# KDE3_ADD_KCFG_FILES(SRCS_VAR file1.kcfgc ... fileN.kcfgc ) +# Use this to add KDE kconfig compiler files to your application/library. +# +# KDE3_INSTALL_LIBTOOL_FILE(target) +# This will create and install a simple libtool file for the given target. +# +# KDE3_ADD_EXECUTABLE(name file1 ... fileN ) +# Currently identical to ADD_EXECUTABLE(), may provide some advanced features in the future. +# +# KDE3_ADD_KPART(name [WITH_PREFIX] file1 ... fileN ) +# Create a KDE plugin (KPart, kioslave, etc.) from the given source files. +# If WITH_PREFIX is given, the resulting plugin will have the prefix "lib", otherwise it won't. +# It creates and installs an appropriate libtool la-file. +# +# KDE3_ADD_KDEINIT_EXECUTABLE(name file1 ... fileN ) +# Create a KDE application in the form of a module loadable via kdeinit. +# A library named kdeinit_ will be created and a small executable which links to it. +# +# The option KDE3_ENABLE_FINAL to enable all-in-one compilation is +# no longer supported. +# +# +# Author: Alexander Neundorf + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# +# 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.) + +IF(NOT UNIX AND KDE3_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Compiling KDE3 applications and libraries under Windows is not supported") +ENDIF(NOT UNIX AND KDE3_FIND_REQUIRED) + +# If Qt4 has already been found, fail. +IF(QT4_FOUND) + IF(KDE3_FIND_REQUIRED) + MESSAGE( FATAL_ERROR "KDE3/Qt3 and Qt4 cannot be used together in one project.") + ELSE(KDE3_FIND_REQUIRED) + IF(NOT KDE3_FIND_QUIETLY) + MESSAGE( STATUS "KDE3/Qt3 and Qt4 cannot be used together in one project.") + ENDIF(NOT KDE3_FIND_QUIETLY) + RETURN() + ENDIF(KDE3_FIND_REQUIRED) +ENDIF(QT4_FOUND) + + +SET(QT_MT_REQUIRED TRUE) +#SET(QT_MIN_VERSION "3.0.0") + +#this line includes FindQt.cmake, which searches the Qt library and headers +IF(KDE3_FIND_REQUIRED) + SET(_REQ_STRING_KDE3 "REQUIRED") +ENDIF(KDE3_FIND_REQUIRED) + +FIND_PACKAGE(Qt3 ${_REQ_STRING_KDE3}) +FIND_PACKAGE(X11 ${_REQ_STRING_KDE3}) + + +#now try to find some kde stuff +FIND_PROGRAM(KDECONFIG_EXECUTABLE NAMES kde-config + HINTS + $ENV{KDEDIR}/bin + PATHS + /opt/kde3/bin + /opt/kde/bin + ) + +SET(KDE3PREFIX) +IF(KDECONFIG_EXECUTABLE) + EXECUTE_PROCESS(COMMAND ${KDECONFIG_EXECUTABLE} --version + OUTPUT_VARIABLE kde_config_version ) + + STRING(REGEX MATCH "KDE: .\\." kde_version "${kde_config_version}") + IF ("${kde_version}" MATCHES "KDE: 3\\.") + EXECUTE_PROCESS(COMMAND ${KDECONFIG_EXECUTABLE} --prefix + OUTPUT_VARIABLE kdedir ) + STRING(REGEX REPLACE "\n" "" KDE3PREFIX "${kdedir}") + + ENDIF ("${kde_version}" MATCHES "KDE: 3\\.") +ENDIF(KDECONFIG_EXECUTABLE) + + + +# at first the KDE include direcory +# kpassdlg.h comes from kdeui and doesn't exist in KDE4 anymore +FIND_PATH(KDE3_INCLUDE_DIR kpassdlg.h + HINTS + $ENV{KDEDIR}/include + ${KDE3PREFIX}/include + PATHS + /opt/kde3/include + /opt/kde/include + /usr/include/kde + /usr/local/include/kde + ) + +#now the KDE library directory +FIND_LIBRARY(KDE3_KDECORE_LIBRARY NAMES kdecore + HINTS + $ENV{KDEDIR}/lib + ${KDE3PREFIX}/lib + PATHS + /opt/kde3/lib + /opt/kde/lib +) + +SET(QT_AND_KDECORE_LIBS ${QT_LIBRARIES} ${KDE3_KDECORE_LIBRARY}) + +GET_FILENAME_COMPONENT(KDE3_LIB_DIR ${KDE3_KDECORE_LIBRARY} PATH ) + +IF(NOT KDE3_LIBTOOL_DIR) + IF(KDE3_KDECORE_LIBRARY MATCHES lib64) + SET(KDE3_LIBTOOL_DIR /lib64/kde3) + ELSE(KDE3_KDECORE_LIBRARY MATCHES lib64) + SET(KDE3_LIBTOOL_DIR /lib/kde3) + ENDIF(KDE3_KDECORE_LIBRARY MATCHES lib64) +ENDIF(NOT KDE3_LIBTOOL_DIR) + +#now search for the dcop utilities +FIND_PROGRAM(KDE3_DCOPIDL_EXECUTABLE NAMES dcopidl + HINTS + $ENV{KDEDIR}/bin + ${KDE3PREFIX}/bin + PATHS + /opt/kde3/bin + /opt/kde/bin + ) + +FIND_PROGRAM(KDE3_DCOPIDL2CPP_EXECUTABLE NAMES dcopidl2cpp + HINTS + $ENV{KDEDIR}/bin + ${KDE3PREFIX}/bin + PATHS + /opt/kde3/bin + /opt/kde/bin + ) + +FIND_PROGRAM(KDE3_KCFGC_EXECUTABLE NAMES kconfig_compiler + HINTS + $ENV{KDEDIR}/bin + ${KDE3PREFIX}/bin + PATHS + /opt/kde3/bin + /opt/kde/bin + ) + + +#SET KDE3_FOUND +IF (KDE3_INCLUDE_DIR AND KDE3_LIB_DIR AND KDE3_DCOPIDL_EXECUTABLE AND KDE3_DCOPIDL2CPP_EXECUTABLE AND KDE3_KCFGC_EXECUTABLE) + SET(KDE3_FOUND TRUE) +ELSE (KDE3_INCLUDE_DIR AND KDE3_LIB_DIR AND KDE3_DCOPIDL_EXECUTABLE AND KDE3_DCOPIDL2CPP_EXECUTABLE AND KDE3_KCFGC_EXECUTABLE) + SET(KDE3_FOUND FALSE) +ENDIF (KDE3_INCLUDE_DIR AND KDE3_LIB_DIR AND KDE3_DCOPIDL_EXECUTABLE AND KDE3_DCOPIDL2CPP_EXECUTABLE AND KDE3_KCFGC_EXECUTABLE) + +# add some KDE specific stuff +SET(KDE3_DEFINITIONS -DQT_CLEAN_NAMESPACE -D_GNU_SOURCE) + +# set compiler flags only if KDE3 has actually been found +IF(KDE3_FOUND) + SET(_KDE3_USE_FLAGS FALSE) + IF(CMAKE_COMPILER_IS_GNUCXX) + SET(_KDE3_USE_FLAGS TRUE) # use flags for gnu compiler + EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version + OUTPUT_VARIABLE out) + # gnu gcc 2.96 does not work with flags + # I guess 2.95 also doesn't then + IF("${out}" MATCHES "2.9[56]") + SET(_KDE3_USE_FLAGS FALSE) + ENDIF("${out}" MATCHES "2.9[56]") + ENDIF(CMAKE_COMPILER_IS_GNUCXX) + + #only on linux, but NOT e.g. on FreeBSD: + IF(CMAKE_SYSTEM_NAME MATCHES "Linux" AND _KDE3_USE_FLAGS) + SET (KDE3_DEFINITIONS ${KDE3_DEFINITIONS} -D_XOPEN_SOURCE=500 -D_BSD_SOURCE) + SET ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-long-long -ansi -Wundef -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common") + SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -fno-exceptions -fno-check-new -fno-common") + ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux" AND _KDE3_USE_FLAGS) + + # works on FreeBSD, NOT tested on NetBSD and OpenBSD + IF (CMAKE_SYSTEM_NAME MATCHES BSD AND _KDE3_USE_FLAGS) + SET ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-long-long -ansi -Wundef -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common") + SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -Wundef -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-exceptions -fno-check-new -fno-common") + ENDIF (CMAKE_SYSTEM_NAME MATCHES BSD AND _KDE3_USE_FLAGS) + + # if no special buildtype is selected, add -O2 as default optimization + IF (NOT CMAKE_BUILD_TYPE AND _KDE3_USE_FLAGS) + SET ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") + SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") + ENDIF (NOT CMAKE_BUILD_TYPE AND _KDE3_USE_FLAGS) + +#SET(CMAKE_SHARED_LINKER_FLAGS "-avoid-version -module -Wl,--no-undefined -Wl,--allow-shlib-undefined") +#SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings -avoid-version -Wl,--no-undefined -lc") +#SET(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings -avoid-version -Wl,--no-undefined -lc") +ENDIF(KDE3_FOUND) + + +# KDE3Macros.cmake contains all the KDE specific macros +INCLUDE(KDE3Macros) + + +MACRO (KDE3_PRINT_RESULTS) + IF(KDE3_INCLUDE_DIR) + MESSAGE(STATUS "Found KDE3 include dir: ${KDE3_INCLUDE_DIR}") + ELSE(KDE3_INCLUDE_DIR) + MESSAGE(STATUS "Didn't find KDE3 headers") + ENDIF(KDE3_INCLUDE_DIR) + + IF(KDE3_LIB_DIR) + MESSAGE(STATUS "Found KDE3 library dir: ${KDE3_LIB_DIR}") + ELSE(KDE3_LIB_DIR) + MESSAGE(STATUS "Didn't find KDE3 core library") + ENDIF(KDE3_LIB_DIR) + + IF(KDE3_DCOPIDL_EXECUTABLE) + MESSAGE(STATUS "Found KDE3 dcopidl preprocessor: ${KDE3_DCOPIDL_EXECUTABLE}") + ELSE(KDE3_DCOPIDL_EXECUTABLE) + MESSAGE(STATUS "Didn't find the KDE3 dcopidl preprocessor") + ENDIF(KDE3_DCOPIDL_EXECUTABLE) + + IF(KDE3_DCOPIDL2CPP_EXECUTABLE) + MESSAGE(STATUS "Found KDE3 dcopidl2cpp preprocessor: ${KDE3_DCOPIDL2CPP_EXECUTABLE}") + ELSE(KDE3_DCOPIDL2CPP_EXECUTABLE) + MESSAGE(STATUS "Didn't find the KDE3 dcopidl2cpp preprocessor") + ENDIF(KDE3_DCOPIDL2CPP_EXECUTABLE) + + IF(KDE3_KCFGC_EXECUTABLE) + MESSAGE(STATUS "Found KDE3 kconfig_compiler preprocessor: ${KDE3_KCFGC_EXECUTABLE}") + ELSE(KDE3_KCFGC_EXECUTABLE) + MESSAGE(STATUS "Didn't find the KDE3 kconfig_compiler preprocessor") + ENDIF(KDE3_KCFGC_EXECUTABLE) + +ENDMACRO (KDE3_PRINT_RESULTS) + + +IF (KDE3_FIND_REQUIRED AND NOT KDE3_FOUND) + #bail out if something wasn't found + KDE3_PRINT_RESULTS() + MESSAGE(FATAL_ERROR "Could NOT find everything required for compiling KDE 3 programs") + +ENDIF (KDE3_FIND_REQUIRED AND NOT KDE3_FOUND) + + +IF (NOT KDE3_FIND_QUIETLY) + KDE3_PRINT_RESULTS() +ENDIF (NOT KDE3_FIND_QUIETLY) + +#add the found Qt and KDE include directories to the current include path +SET(KDE3_INCLUDE_DIRS ${QT_INCLUDE_DIR} ${KDE3_INCLUDE_DIR}) + diff --git a/Modules/FindKDE4.cmake b/Modules/FindKDE4.cmake new file mode 100644 index 0000000..ed4f270 --- /dev/null +++ b/Modules/FindKDE4.cmake @@ -0,0 +1,100 @@ +# Find KDE4 and provide all necessary variables and macros to compile software for it. +# It looks for KDE 4 in the following directories in the given order: +# CMAKE_INSTALL_PREFIX +# KDEDIRS +# /opt/kde4 +# +# Please look in FindKDE4Internal.cmake and KDE4Macros.cmake for more information. +# They are installed with the KDE 4 libraries in $KDEDIRS/share/apps/cmake/modules/. +# +# Author: Alexander Neundorf + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# +# 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.) + +# If Qt3 has already been found, fail. +IF(QT_QT_LIBRARY) + IF(KDE4_FIND_REQUIRED) + MESSAGE( FATAL_ERROR "KDE4/Qt4 and Qt3 cannot be used together in one project.") + ELSE(KDE4_FIND_REQUIRED) + IF(NOT KDE4_FIND_QUIETLY) + MESSAGE( STATUS "KDE4/Qt4 and Qt3 cannot be used together in one project.") + ENDIF(NOT KDE4_FIND_QUIETLY) + RETURN() + ENDIF(KDE4_FIND_REQUIRED) +ENDIF(QT_QT_LIBRARY) + +FILE(TO_CMAKE_PATH "$ENV{KDEDIRS}" _KDEDIRS) + +# when cross compiling, searching kde4-config in order to run it later on +# doesn't make a lot of sense. We'll have to do something about this. +# Searching always in the target environment ? Then we get at least the correct one, +# still it can't be used to run it. Alex + +# For KDE4 kde-config has been renamed to kde4-config +FIND_PROGRAM(KDE4_KDECONFIG_EXECUTABLE NAMES kde4-config + # the suffix must be used since KDEDIRS can be a list of directories which don't have bin/ appended + PATH_SUFFIXES bin + HINTS + ${CMAKE_INSTALL_PREFIX} + ${_KDEDIRS} + /opt/kde4 + ONLY_CMAKE_FIND_ROOT_PATH + ) + +IF (NOT KDE4_KDECONFIG_EXECUTABLE) + IF (KDE4_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "ERROR: Could not find KDE4 kde4-config") + ENDIF (KDE4_FIND_REQUIRED) +ENDIF (NOT KDE4_KDECONFIG_EXECUTABLE) + + +# when cross compiling, KDE4_DATA_DIR may be already preset +IF(NOT KDE4_DATA_DIR) + IF(CMAKE_CROSSCOMPILING) + # when cross compiling, don't run kde4-config but use its location as install dir + GET_FILENAME_COMPONENT(KDE4_DATA_DIR "${KDE4_KDECONFIG_EXECUTABLE}" PATH) + GET_FILENAME_COMPONENT(KDE4_DATA_DIR "${KDE4_DATA_DIR}" PATH) + ELSE(CMAKE_CROSSCOMPILING) + # then ask kde4-config for the kde data dirs + + IF(KDE4_KDECONFIG_EXECUTABLE) + EXECUTE_PROCESS(COMMAND "${KDE4_KDECONFIG_EXECUTABLE}" --path data OUTPUT_VARIABLE _data_DIR ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + FILE(TO_CMAKE_PATH "${_data_DIR}" _data_DIR) + # then check the data dirs for FindKDE4Internal.cmake + FIND_PATH(KDE4_DATA_DIR cmake/modules/FindKDE4Internal.cmake HINTS ${_data_DIR}) + ENDIF(KDE4_KDECONFIG_EXECUTABLE) + ENDIF(CMAKE_CROSSCOMPILING) +ENDIF(NOT KDE4_DATA_DIR) + +# if it has been found... +IF (KDE4_DATA_DIR) + + SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${KDE4_DATA_DIR}/cmake/modules) + + IF (KDE4_FIND_QUIETLY) + SET(_quiet QUIET) + ENDIF (KDE4_FIND_QUIETLY) + + IF (KDE4_FIND_REQUIRED) + SET(_req REQUIRED) + ENDIF (KDE4_FIND_REQUIRED) + + # use FindKDE4Internal.cmake to do the rest + FIND_PACKAGE(KDE4Internal ${_req} ${_quiet}) +ELSE (KDE4_DATA_DIR) + IF (KDE4_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "ERROR: cmake/modules/FindKDE4Internal.cmake not found in ${_data_DIR}") + ENDIF (KDE4_FIND_REQUIRED) +ENDIF (KDE4_DATA_DIR) diff --git a/Modules/FindLAPACK.cmake b/Modules/FindLAPACK.cmake new file mode 100644 index 0000000..0ae98df --- /dev/null +++ b/Modules/FindLAPACK.cmake @@ -0,0 +1,336 @@ +# - Find LAPACK library +# This module finds an installed fortran library that implements the LAPACK +# linear-algebra interface (see http://www.netlib.org/lapack/). +# +# The approach follows that taken for the autoconf macro file, acx_lapack.m4 +# (distributed at http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html). +# +# This module sets the following variables: +# LAPACK_FOUND - set to true if a library implementing the LAPACK interface +# is found +# LAPACK_LINKER_FLAGS - uncached list of required linker flags (excluding -l +# and -L). +# LAPACK_LIBRARIES - uncached list of libraries (using full path name) to +# link against to use LAPACK +# LAPACK95_LIBRARIES - uncached list of libraries (using full path name) to +# link against to use LAPACK95 +# LAPACK95_FOUND - set to true if a library implementing the LAPACK f95 +# interface is found +# BLA_STATIC if set on this determines what kind of linkage we do (static) +# BLA_VENDOR if set checks only the specified vendor, if not set checks +# all the possibilities +# BLA_F95 if set on tries to find the f95 interfaces for BLAS/LAPACK +### List of vendors (BLA_VENDOR) valid in this module +## Intel(mkl), ACML,Apple, NAS, Generic + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +set(_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) + +get_property(_LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES) +if (NOT _LANGUAGES_ MATCHES Fortran) +include(CheckFunctionExists) +else (NOT _LANGUAGES_ MATCHES Fortran) +include(CheckFortranFunctionExists) +endif (NOT _LANGUAGES_ MATCHES Fortran) + +set(LAPACK_FOUND FALSE) +set(LAPACK95_FOUND FALSE) + +# TODO: move this stuff to separate module + +macro(Check_Lapack_Libraries LIBRARIES _prefix _name _flags _list _blas _threads) +# This macro checks for the existence of the combination of fortran libraries +# given by _list. If the combination is found, this macro checks (using the +# Check_Fortran_Function_Exists macro) whether can link against that library +# combination using the name of a routine given by _name using the linker +# flags given by _flags. If the combination of libraries is found and passes +# the link test, LIBRARIES is set to the list of complete library paths that +# have been found. Otherwise, LIBRARIES is set to FALSE. + +# N.B. _prefix is the prefix applied to the names of all cached variables that +# are generated internally and marked advanced by this macro. + +set(_libraries_work TRUE) +set(${LIBRARIES}) +set(_combined_name) +if (NOT _libdir) + if (WIN32) + set(_libdir ENV LIB) + elseif (APPLE) + set(_libdir /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64 ENV DYLD_LIBRARY_PATH) + else () + set(_libdir /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64 ENV LD_LIBRARY_PATH) + endif () +endif () +foreach(_library ${_list}) + set(_combined_name ${_combined_name}_${_library}) + + if(_libraries_work) + if (BLA_STATIC) + if (WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif ( WIN32 ) + if (APPLE) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + else (APPLE) + set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif (APPLE) + else (BLA_STATIC) + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + # for ubuntu's libblas3gf and liblapack3gf packages + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf) + endif () + endif (BLA_STATIC) + find_library(${_prefix}_${_library}_LIBRARY + NAMES ${_library} + PATHS ${_libdir} + ) + mark_as_advanced(${_prefix}_${_library}_LIBRARY) + set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY}) + set(_libraries_work ${${_prefix}_${_library}_LIBRARY}) + endif(_libraries_work) +endforeach(_library ${_list}) + +if(_libraries_work) + # Test this combination of libraries. + if(UNIX AND BLA_STATIC) + set(CMAKE_REQUIRED_LIBRARIES ${_flags} "-Wl,--start-group" ${${LIBRARIES}} ${_blas} "-Wl,--end-group" ${_threads}) + else(UNIX AND BLA_STATIC) + set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_blas} ${_threads}) + endif(UNIX AND BLA_STATIC) +# message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}") + if (NOT _LANGUAGES_ MATCHES Fortran) + check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS) + else (NOT _LANGUAGES_ MATCHES Fortran) + check_fortran_function_exists(${_name} ${_prefix}${_combined_name}_WORKS) + endif (NOT _LANGUAGES_ MATCHES Fortran) + set(CMAKE_REQUIRED_LIBRARIES) + mark_as_advanced(${_prefix}${_combined_name}_WORKS) + set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) + #message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}") +endif(_libraries_work) + + if(_libraries_work) + set(${LIBRARIES} ${${LIBRARIES}} ${_blas} ${_threads}) + else(_libraries_work) + set(${LIBRARIES} FALSE) + endif(_libraries_work) + +endmacro(Check_Lapack_Libraries) + + +set(LAPACK_LINKER_FLAGS) +set(LAPACK_LIBRARIES) +set(LAPACK95_LIBRARIES) + + +if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) + find_package(BLAS) +else(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) + find_package(BLAS REQUIRED) +endif(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) + + +if(BLAS_FOUND) + set(LAPACK_LINKER_FLAGS ${BLAS_LINKER_FLAGS}) + if ($ENV{BLA_VENDOR} MATCHES ".+") + set(BLA_VENDOR $ENV{BLA_VENDOR}) + else ($ENV{BLA_VENDOR} MATCHES ".+") + if(NOT BLA_VENDOR) + set(BLA_VENDOR "All") + endif(NOT BLA_VENDOR) + endif ($ENV{BLA_VENDOR} MATCHES ".+") + +if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") + if(NOT LAPACK_LIBRARIES) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "goto2" + "${BLAS_LIBRARIES}" + "" + ) + endif(NOT LAPACK_LIBRARIES) +endif (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") + + +#acml lapack + if (BLA_VENDOR MATCHES "ACML.*" OR BLA_VENDOR STREQUAL "All") + if (BLAS_LIBRARIES MATCHES ".+acml.+") + set (LAPACK_LIBRARIES ${BLAS_LIBRARIES}) + endif () + endif () + +# Apple LAPACK library? +if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") + if(NOT LAPACK_LIBRARIES) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "Accelerate" + "${BLAS_LIBRARIES}" + "" + ) + endif(NOT LAPACK_LIBRARIES) +endif (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") +if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") + if ( NOT LAPACK_LIBRARIES ) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "vecLib" + "${BLAS_LIBRARIES}" + "" + ) + endif ( NOT LAPACK_LIBRARIES ) +endif (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") +# Generic LAPACK library? +if (BLA_VENDOR STREQUAL "Generic" OR + BLA_VENDOR STREQUAL "ATLAS" OR + BLA_VENDOR STREQUAL "All") + if ( NOT LAPACK_LIBRARIES ) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "lapack" + "${BLAS_LIBRARIES}" + "" + ) + endif ( NOT LAPACK_LIBRARIES ) +endif () +#intel lapack +if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All") + if (NOT WIN32) + set(LM "-lm") + endif () + if (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX) + if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) + find_PACKAGE(Threads) + else(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) + find_package(Threads REQUIRED) + endif(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED) + if (BLA_F95) + if(NOT LAPACK95_LIBRARIES) + # old + check_lapack_libraries( + LAPACK95_LIBRARIES + LAPACK + cheev + "" + "mkl_lapack95" + "${BLAS95_LIBRARIES}" + "${CMAKE_THREAD_LIBS_INIT};${LM}" + ) + endif(NOT LAPACK95_LIBRARIES) + if(NOT LAPACK95_LIBRARIES) + # new >= 10.3 + check_lapack_libraries( + LAPACK95_LIBRARIES + LAPACK + CHEEV + "" + "mkl_intel_lp64" + "${BLAS95_LIBRARIES}" + "${CMAKE_THREAD_LIBS_INIT};${LM}" + ) + endif(NOT LAPACK95_LIBRARIES) + else(BLA_F95) + if(NOT LAPACK_LIBRARIES) + # old + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "mkl_lapack" + "${BLAS_LIBRARIES}" + "${CMAKE_THREAD_LIBS_INIT};${LM}" + ) + endif(NOT LAPACK_LIBRARIES) + if(NOT LAPACK_LIBRARIES) + # new >= 10.3 + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "mkl_gf_lp64" + "${BLAS_LIBRARIES}" + "${CMAKE_THREAD_LIBS_INIT};${LM}" + ) + endif(NOT LAPACK_LIBRARIES) + endif(BLA_F95) + endif (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX) +endif(BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All") +else(BLAS_FOUND) + message(STATUS "LAPACK requires BLAS") +endif(BLAS_FOUND) + +if(BLA_F95) + if(LAPACK95_LIBRARIES) + set(LAPACK95_FOUND TRUE) + else(LAPACK95_LIBRARIES) + set(LAPACK95_FOUND FALSE) + endif(LAPACK95_LIBRARIES) + if(NOT LAPACK_FIND_QUIETLY) + if(LAPACK95_FOUND) + message(STATUS "A library with LAPACK95 API found.") + else(LAPACK95_FOUND) + if(LAPACK_FIND_REQUIRED) + message(FATAL_ERROR + "A required library with LAPACK95 API not found. Please specify library location." + ) + else(LAPACK_FIND_REQUIRED) + message(STATUS + "A library with LAPACK95 API not found. Please specify library location." + ) + endif(LAPACK_FIND_REQUIRED) + endif(LAPACK95_FOUND) + endif(NOT LAPACK_FIND_QUIETLY) + set(LAPACK_FOUND "${LAPACK95_FOUND}") + set(LAPACK_LIBRARIES "${LAPACK95_LIBRARIES}") +else(BLA_F95) + if(LAPACK_LIBRARIES) + set(LAPACK_FOUND TRUE) + else(LAPACK_LIBRARIES) + set(LAPACK_FOUND FALSE) + endif(LAPACK_LIBRARIES) + + if(NOT LAPACK_FIND_QUIETLY) + if(LAPACK_FOUND) + message(STATUS "A library with LAPACK API found.") + else(LAPACK_FOUND) + if(LAPACK_FIND_REQUIRED) + message(FATAL_ERROR + "A required library with LAPACK API not found. Please specify library location." + ) + else(LAPACK_FIND_REQUIRED) + message(STATUS + "A library with LAPACK API not found. Please specify library location." + ) + endif(LAPACK_FIND_REQUIRED) + endif(LAPACK_FOUND) + endif(NOT LAPACK_FIND_QUIETLY) +endif(BLA_F95) + +set(CMAKE_FIND_LIBRARY_SUFFIXES ${_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/Modules/FindLATEX.cmake b/Modules/FindLATEX.cmake new file mode 100644 index 0000000..950daca --- /dev/null +++ b/Modules/FindLATEX.cmake @@ -0,0 +1,126 @@ +# - Find Latex +# This module finds if Latex is installed and determines where the +# executables are. This code sets the following variables: +# +# LATEX_COMPILER: path to the LaTeX compiler +# PDFLATEX_COMPILER: path to the PdfLaTeX compiler +# BIBTEX_COMPILER: path to the BibTeX compiler +# MAKEINDEX_COMPILER: path to the MakeIndex compiler +# DVIPS_CONVERTER: path to the DVIPS converter +# PS2PDF_CONVERTER: path to the PS2PDF converter +# LATEX2HTML_CONVERTER: path to the LaTeX2Html converter +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF (WIN32) + + # Try to find the MikTex binary path (look for its package manager). + + FIND_PATH(MIKTEX_BINARY_PATH mpm.exe + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MiK\\MiKTeX\\CurrentVersion\\MiKTeX;Install Root]/miktex/bin" + DOC + "Path to the MikTex binary directory." + ) + MARK_AS_ADVANCED(MIKTEX_BINARY_PATH) + + # Try to find the GhostScript binary path (look for gswin32). + + GET_FILENAME_COMPONENT(GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_8_00 + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\AFPL Ghostscript\\8.00;GS_DLL]" PATH + ) + + GET_FILENAME_COMPONENT(GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_7_04 + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\AFPL Ghostscript\\7.04;GS_DLL]" PATH + ) + + FIND_PATH(GHOSTSCRIPT_BINARY_PATH gswin32.exe + ${GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_8_00} + ${GHOSTSCRIPT_BINARY_PATH_FROM_REGISTERY_7_04} + DOC "Path to the GhostScript binary directory." + ) + MARK_AS_ADVANCED(GHOSTSCRIPT_BINARY_PATH) + + FIND_PATH(GHOSTSCRIPT_LIBRARY_PATH ps2pdf13.bat + "${GHOSTSCRIPT_BINARY_PATH}/../lib" + DOC "Path to the GhostScript library directory." + ) + MARK_AS_ADVANCED(GHOSTSCRIPT_LIBRARY_PATH) + +ENDIF (WIN32) + +FIND_PROGRAM(LATEX_COMPILER + NAMES latex + PATHS ${MIKTEX_BINARY_PATH} + /usr/bin +) + +FIND_PROGRAM(PDFLATEX_COMPILER + NAMES pdflatex + PATHS ${MIKTEX_BINARY_PATH} + /usr/bin +) + +FIND_PROGRAM(BIBTEX_COMPILER + NAMES bibtex + PATHS ${MIKTEX_BINARY_PATH} + /usr/bin +) + +FIND_PROGRAM(MAKEINDEX_COMPILER + NAMES makeindex + PATHS ${MIKTEX_BINARY_PATH} + /usr/bin +) + +FIND_PROGRAM(DVIPS_CONVERTER + NAMES dvips + PATHS ${MIKTEX_BINARY_PATH} + /usr/bin +) + +FIND_PROGRAM(DVIPDF_CONVERTER + NAMES dvipdfm dvipdft dvipdf + PATHS ${MIKTEX_BINARY_PATH} + /usr/bin +) + +IF (WIN32) + FIND_PROGRAM(PS2PDF_CONVERTER + NAMES ps2pdf14.bat + PATHS ${GHOSTSCRIPT_LIBRARY_PATH} + ) +ELSE (WIN32) + FIND_PROGRAM(PS2PDF_CONVERTER + NAMES ps2pdf14 ps2pdf + ) +ENDIF (WIN32) + +FIND_PROGRAM(LATEX2HTML_CONVERTER + NAMES latex2html + PATHS ${MIKTEX_BINARY_PATH} + /usr/bin +) + + +MARK_AS_ADVANCED( + LATEX_COMPILER + PDFLATEX_COMPILER + BIBTEX_COMPILER + MAKEINDEX_COMPILER + DVIPS_CONVERTER + DVIPDF_CONVERTER + PS2PDF_CONVERTER + LATEX2HTML_CONVERTER +) diff --git a/Modules/FindLibArchive.cmake b/Modules/FindLibArchive.cmake new file mode 100644 index 0000000..be931c5 --- /dev/null +++ b/Modules/FindLibArchive.cmake @@ -0,0 +1,67 @@ +# - Find libarchive library and headers +# The module defines the following variables: +# +# LibArchive_FOUND - true if libarchive was found +# LibArchive_INCLUDE_DIRS - include search path +# LibArchive_LIBRARIES - libraries to link +# LibArchive_VERSION - libarchive 3-component version number + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +find_path(LibArchive_INCLUDE_DIR + NAMES archive.h + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\LibArchive;InstallPath]/include" + ) + +find_library(LibArchive_LIBRARY + NAMES archive libarchive + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\LibArchive;InstallPath]/lib" + ) + +mark_as_advanced(LibArchive_INCLUDE_DIR LibArchive_LIBRARY) + +# Extract the version number from the header. +if(LibArchive_INCLUDE_DIR AND EXISTS "${LibArchive_INCLUDE_DIR}/archive.h") + # The version string appears in one of two known formats in the header: + # #define ARCHIVE_LIBRARY_VERSION "libarchive 2.4.12" + # #define ARCHIVE_VERSION_STRING "libarchive 2.8.4" + # Match either format. + set(_LibArchive_VERSION_REGEX "^#define[ \t]+ARCHIVE[_A-Z]+VERSION[_A-Z]*[ \t]+\"libarchive +([0-9]+)\\.([0-9]+)\\.([0-9]+)[^\"]*\".*$") + file(STRINGS "${LibArchive_INCLUDE_DIR}/archive.h" _LibArchive_VERSION_STRING LIMIT_COUNT 1 REGEX "${_LibArchive_VERSION_REGEX}") + if(_LibArchive_VERSION_STRING) + string(REGEX REPLACE "${_LibArchive_VERSION_REGEX}" "\\1.\\2.\\3" LibArchive_VERSION "${_LibArchive_VERSION_STRING}") + endif() + unset(_LibArchive_VERSION_REGEX) + unset(_LibArchive_VERSION_STRING) +endif() + +# Handle the QUIETLY and REQUIRED arguments and set LIBARCHIVE_FOUND +# to TRUE if all listed variables are TRUE. +# (Use ${CMAKE_ROOT}/Modules instead of ${CMAKE_CURRENT_LIST_DIR} because CMake +# itself includes this FindLibArchive when built with an older CMake that does +# not provide it. The older CMake also does not have CMAKE_CURRENT_LIST_DIR.) +include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) +find_package_handle_standard_args(LibArchive + REQUIRED_VARS LibArchive_LIBRARY LibArchive_INCLUDE_DIR + VERSION_VAR LibArchive_VERSION + ) +set(LibArchive_FOUND ${LIBARCHIVE_FOUND}) +unset(LIBARCHIVE_FOUND) + +if(LibArchive_FOUND) + set(LibArchive_INCLUDE_DIRS ${LibArchive_INCLUDE_DIR}) + set(LibArchive_LIBRARIES ${LibArchive_LIBRARY}) +endif() diff --git a/Modules/FindLibXml2.cmake b/Modules/FindLibXml2.cmake new file mode 100644 index 0000000..48a5498 --- /dev/null +++ b/Modules/FindLibXml2.cmake @@ -0,0 +1,66 @@ +# - Try to find the LibXml2 xml processing library +# Once done this will define +# +# LIBXML2_FOUND - System has LibXml2 +# LIBXML2_INCLUDE_DIR - The LibXml2 include directory +# LIBXML2_LIBRARIES - The libraries needed to use LibXml2 +# LIBXML2_DEFINITIONS - Compiler switches required for using LibXml2 +# LIBXML2_XMLLINT_EXECUTABLE - The XML checking tool xmllint coming with LibXml2 +# LIBXML2_VERSION_STRING - the version of LibXml2 found (since CMake 2.8.8) + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# +# 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.) + +# use pkg-config to get the directories and then use these values +# in the FIND_PATH() and FIND_LIBRARY() calls +FIND_PACKAGE(PkgConfig QUIET) +PKG_CHECK_MODULES(PC_LIBXML QUIET libxml-2.0) +SET(LIBXML2_DEFINITIONS ${PC_LIBXML_CFLAGS_OTHER}) + +FIND_PATH(LIBXML2_INCLUDE_DIR NAMES libxml/xpath.h + HINTS + ${PC_LIBXML_INCLUDEDIR} + ${PC_LIBXML_INCLUDE_DIRS} + PATH_SUFFIXES libxml2 + ) + +FIND_LIBRARY(LIBXML2_LIBRARIES NAMES xml2 libxml2 + HINTS + ${PC_LIBXML_LIBDIR} + ${PC_LIBXML_LIBRARY_DIRS} + ) + +FIND_PROGRAM(LIBXML2_XMLLINT_EXECUTABLE xmllint) +# for backwards compat. with KDE 4.0.x: +SET(XMLLINT_EXECUTABLE "${LIBXML2_XMLLINT_EXECUTABLE}") + +IF(PC_LIBXML_VERSION) + SET(LIBXML2_VERSION_STRING ${PC_LIBXML_VERSION}) +ELSEIF(LIBXML2_INCLUDE_DIR AND EXISTS "${LIBXML2_INCLUDE_DIR}/libxml/xmlversion.h") + FILE(STRINGS "${LIBXML2_INCLUDE_DIR}/libxml/xmlversion.h" libxml2_version_str + REGEX "^#define[\t ]+LIBXML_DOTTED_VERSION[\t ]+\".*\"") + + STRING(REGEX REPLACE "^#define[\t ]+LIBXML_DOTTED_VERSION[\t ]+\"([^\"]*)\".*" "\\1" + LIBXML2_VERSION_STRING "${libxml2_version_str}") + UNSET(libxml2_version_str) +ENDIF() + +# handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 + REQUIRED_VARS LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIR + VERSION_VAR LIBXML2_VERSION_STRING) + +MARK_AS_ADVANCED(LIBXML2_INCLUDE_DIR LIBXML2_LIBRARIES LIBXML2_XMLLINT_EXECUTABLE) diff --git a/Modules/FindLibXslt.cmake b/Modules/FindLibXslt.cmake new file mode 100644 index 0000000..dd5aac4 --- /dev/null +++ b/Modules/FindLibXslt.cmake @@ -0,0 +1,74 @@ +# - Try to find the LibXslt library +# Once done this will define +# +# LIBXSLT_FOUND - system has LibXslt +# LIBXSLT_INCLUDE_DIR - the LibXslt include directory +# LIBXSLT_LIBRARIES - Link these to LibXslt +# LIBXSLT_DEFINITIONS - Compiler switches required for using LibXslt +# LIBXSLT_VERSION_STRING - version of LibXslt found (since CMake 2.8.8) +# Additionally, the following two variables are set (but not required for using xslt): +# LIBXSLT_EXSLT_LIBRARIES - Link to these if you need to link against the exslt library +# LIBXSLT_XSLTPROC_EXECUTABLE - Contains the full path to the xsltproc executable if found + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# +# 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.) + +# use pkg-config to get the directories and then use these values +# in the FIND_PATH() and FIND_LIBRARY() calls +FIND_PACKAGE(PkgConfig QUIET) +PKG_CHECK_MODULES(PC_LIBXSLT QUIET libxslt) +SET(LIBXSLT_DEFINITIONS ${PC_LIBXSLT_CFLAGS_OTHER}) + +FIND_PATH(LIBXSLT_INCLUDE_DIR NAMES libxslt/xslt.h + HINTS + ${PC_LIBXSLT_INCLUDEDIR} + ${PC_LIBXSLT_INCLUDE_DIRS} + ) + +FIND_LIBRARY(LIBXSLT_LIBRARIES NAMES xslt libxslt + HINTS + ${PC_LIBXSLT_LIBDIR} + ${PC_LIBXSLT_LIBRARY_DIRS} + ) + +FIND_LIBRARY(LIBXSLT_EXSLT_LIBRARY NAMES exslt libexslt + HINTS + ${PC_LIBXSLT_LIBDIR} + ${PC_LIBXSLT_LIBRARY_DIRS} + ) + +SET(LIBXSLT_EXSLT_LIBRARIES ${LIBXSLT_EXSLT_LIBRARY} ) + +FIND_PROGRAM(LIBXSLT_XSLTPROC_EXECUTABLE xsltproc) + +IF(PC_LIBXSLT_VERSION) + SET(LIBXSLT_VERSION_STRING ${PC_LIBXSLT_VERSION}) +ELSEIF(LIBXSLT_INCLUDE_DIR AND EXISTS "${LIBXSLT_INCLUDE_DIR}/libxslt/xsltconfig.h") + FILE(STRINGS "${LIBXSLT_INCLUDE_DIR}/libxslt/xsltconfig.h" libxslt_version_str + REGEX "^#define[\t ]+LIBXSLT_DOTTED_VERSION[\t ]+\".*\"") + + STRING(REGEX REPLACE "^#define[\t ]+LIBXSLT_DOTTED_VERSION[\t ]+\"([^\"]*)\".*" "\\1" + LIBXSLT_VERSION_STRING "${libxslt_version_str}") + UNSET(libxslt_version_str) +ENDIF() + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXslt + REQUIRED_VARS LIBXSLT_LIBRARIES LIBXSLT_INCLUDE_DIR + VERSION_VAR LIBXSLT_VERSION_STRING) + +MARK_AS_ADVANCED(LIBXSLT_INCLUDE_DIR + LIBXSLT_LIBRARIES + LIBXSLT_EXSLT_LIBRARY + LIBXSLT_XSLTPROC_EXECUTABLE) diff --git a/Modules/FindLua50.cmake b/Modules/FindLua50.cmake new file mode 100644 index 0000000..ee8b84e --- /dev/null +++ b/Modules/FindLua50.cmake @@ -0,0 +1,96 @@ +# Locate Lua library +# This module defines +# LUA50_FOUND, if false, do not try to link to Lua +# LUA_LIBRARIES, both lua and lualib +# LUA_INCLUDE_DIR, where to find lua.h and lualib.h (and probably lauxlib.h) +# +# Note that the expected include convention is +# #include "lua.h" +# and not +# #include +# This is because, the lua location is not standardized and may exist +# in locations other than lua/ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(LUA_INCLUDE_DIR lua.h + HINTS + $ENV{LUA_DIR} + PATH_SUFFIXES include/lua50 include/lua5.0 include/lua5 include/lua include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +FIND_LIBRARY(LUA_LIBRARY_lua + NAMES lua50 lua5.0 lua-5.0 lua5 lua + HINTS + $ENV{LUA_DIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt +) + +# In an OS X framework, lualib is usually included as part of the framework +# (like GLU in OpenGL.framework) +IF(${LUA_LIBRARY_lua} MATCHES "framework") + SET( LUA_LIBRARIES "${LUA_LIBRARY_lua}" CACHE STRING "Lua framework") +ELSE(${LUA_LIBRARY_lua} MATCHES "framework") + FIND_LIBRARY(LUA_LIBRARY_lualib + NAMES lualib50 lualib5.0 lualib5 lualib + HINTS + $ENV{LUALIB_DIR} + $ENV{LUA_DIR} + PATH_SUFFIXES lib64 lib + PATHS + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt + ) + IF(LUA_LIBRARY_lualib AND LUA_LIBRARY_lua) + # include the math library for Unix + IF(UNIX AND NOT APPLE) + FIND_LIBRARY(MATH_LIBRARY_FOR_LUA m) + SET( LUA_LIBRARIES "${LUA_LIBRARY_lualib};${LUA_LIBRARY_lua};${MATH_LIBRARY_FOR_LUA}" CACHE STRING "This is the concatentation of lua and lualib libraries") + # For Windows and Mac, don't need to explicitly include the math library + ELSE(UNIX AND NOT APPLE) + SET( LUA_LIBRARIES "${LUA_LIBRARY_lualib};${LUA_LIBRARY_lua}" CACHE STRING "This is the concatentation of lua and lualib libraries") + ENDIF(UNIX AND NOT APPLE) + ENDIF(LUA_LIBRARY_lualib AND LUA_LIBRARY_lua) +ENDIF(${LUA_LIBRARY_lua} MATCHES "framework") + + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if +# all listed variables are TRUE +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua50 DEFAULT_MSG LUA_LIBRARIES LUA_INCLUDE_DIR) + +MARK_AS_ADVANCED(LUA_INCLUDE_DIR LUA_LIBRARIES) + diff --git a/Modules/FindLua51.cmake b/Modules/FindLua51.cmake new file mode 100644 index 0000000..b67dd4c --- /dev/null +++ b/Modules/FindLua51.cmake @@ -0,0 +1,85 @@ +# Locate Lua library +# This module defines +# LUA51_FOUND, if false, do not try to link to Lua +# LUA_LIBRARIES +# LUA_INCLUDE_DIR, where to find lua.h +# LUA_VERSION_STRING, the version of Lua found (since CMake 2.8.8) +# +# Note that the expected include convention is +# #include "lua.h" +# and not +# #include +# This is because, the lua location is not standardized and may exist +# in locations other than lua/ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(LUA_INCLUDE_DIR lua.h + HINTS + $ENV{LUA_DIR} + PATH_SUFFIXES include/lua51 include/lua5.1 include/lua include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +FIND_LIBRARY(LUA_LIBRARY + NAMES lua51 lua5.1 lua-5.1 lua + HINTS + $ENV{LUA_DIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt +) + +IF(LUA_LIBRARY) + # include the math library for Unix + IF(UNIX AND NOT APPLE) + FIND_LIBRARY(LUA_MATH_LIBRARY m) + SET( LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}" CACHE STRING "Lua Libraries") + # For Windows and Mac, don't need to explicitly include the math library + ELSE(UNIX AND NOT APPLE) + SET( LUA_LIBRARIES "${LUA_LIBRARY}" CACHE STRING "Lua Libraries") + ENDIF(UNIX AND NOT APPLE) +ENDIF(LUA_LIBRARY) + +IF(LUA_INCLUDE_DIR AND EXISTS "${LUA_INCLUDE_DIR}/lua.h") + FILE(STRINGS "${LUA_INCLUDE_DIR}/lua.h" lua_version_str REGEX "^#define[ \t]+LUA_RELEASE[ \t]+\"Lua .+\"") + + STRING(REGEX REPLACE "^#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([^\"]+)\".*" "\\1" LUA_VERSION_STRING "${lua_version_str}") + UNSET(lua_version_str) +ENDIF() + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if +# all listed variables are TRUE +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua51 + REQUIRED_VARS LUA_LIBRARIES LUA_INCLUDE_DIR + VERSION_VAR LUA_VERSION_STRING) + +MARK_AS_ADVANCED(LUA_INCLUDE_DIR LUA_LIBRARIES LUA_LIBRARY LUA_MATH_LIBRARY) + diff --git a/Modules/FindMFC.cmake b/Modules/FindMFC.cmake new file mode 100644 index 0000000..3df2842 --- /dev/null +++ b/Modules/FindMFC.cmake @@ -0,0 +1,60 @@ +# - Find MFC on Windows +# Find the native MFC - i.e. decide if an application can link to the MFC +# libraries. +# MFC_FOUND - Was MFC support found +# You don't need to include anything or link anything to use it. + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Assume no MFC support +SET(MFC_FOUND "NO") + +# Only attempt the try_compile call if it has a chance to succeed: +SET(MFC_ATTEMPT_TRY_COMPILE 0) +IF(WIN32 AND NOT UNIX AND NOT BORLAND AND NOT MINGW) + SET(MFC_ATTEMPT_TRY_COMPILE 1) +ENDIF(WIN32 AND NOT UNIX AND NOT BORLAND AND NOT MINGW) + +IF(MFC_ATTEMPT_TRY_COMPILE) + IF("MFC_HAVE_MFC" MATCHES "^MFC_HAVE_MFC$") + SET(CHECK_INCLUDE_FILE_VAR "afxwin.h") + CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CheckIncludeFile.cxx.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.cxx) + MESSAGE(STATUS "Looking for MFC") + TRY_COMPILE(MFC_HAVE_MFC + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckIncludeFile.cxx + CMAKE_FLAGS + -DCMAKE_MFC_FLAG:STRING=2 + -DCOMPILE_DEFINITIONS:STRING=-D_AFXDLL + OUTPUT_VARIABLE OUTPUT) + IF(MFC_HAVE_MFC) + MESSAGE(STATUS "Looking for MFC - found") + SET(MFC_HAVE_MFC 1 CACHE INTERNAL "Have MFC?") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if MFC exists passed with the following output:\n" + "${OUTPUT}\n\n") + ELSE(MFC_HAVE_MFC) + MESSAGE(STATUS "Looking for MFC - not found") + SET(MFC_HAVE_MFC 0 CACHE INTERNAL "Have MFC?") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if MFC exists failed with the following output:\n" + "${OUTPUT}\n\n") + ENDIF(MFC_HAVE_MFC) + ENDIF("MFC_HAVE_MFC" MATCHES "^MFC_HAVE_MFC$") + + IF(MFC_HAVE_MFC) + SET(MFC_FOUND "YES") + ENDIF(MFC_HAVE_MFC) +ENDIF(MFC_ATTEMPT_TRY_COMPILE) diff --git a/Modules/FindMPEG.cmake b/Modules/FindMPEG.cmake new file mode 100644 index 0000000..cf4ef58 --- /dev/null +++ b/Modules/FindMPEG.cmake @@ -0,0 +1,44 @@ +# - Find the native MPEG includes and library +# This module defines +# MPEG_INCLUDE_DIR, where to find MPEG.h, etc. +# MPEG_LIBRARIES, the libraries required to use MPEG. +# MPEG_FOUND, If false, do not try to use MPEG. +# also defined, but not for general use are +# MPEG_mpeg2_LIBRARY, where to find the MPEG library. +# MPEG_vo_LIBRARY, where to find the vo library. + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(MPEG_INCLUDE_DIR mpeg2dec/include/video_out.h + /usr/local/livid +) + +FIND_LIBRARY(MPEG_mpeg2_LIBRARY mpeg2 + /usr/local/livid/mpeg2dec/libmpeg2/.libs +) + +FIND_LIBRARY( MPEG_vo_LIBRARY vo + /usr/local/livid/mpeg2dec/libvo/.libs +) + +# handle the QUIETLY and REQUIRED arguments and set MPEG2_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(MPEG DEFAULT_MSG MPEG_INCLUDE_DIR MPEG_mpeg2_LIBRARY MPEG_vo_LIBRARY) + +IF(MPEG_FOUND) + SET( MPEG_LIBRARIES ${MPEG_mpeg2_LIBRARY} ${MPEG_vo_LIBRARY} ) +ENDIF(MPEG_FOUND) + +MARK_AS_ADVANCED(MPEG_INCLUDE_DIR MPEG_mpeg2_LIBRARY MPEG_vo_LIBRARY) diff --git a/Modules/FindMPEG2.cmake b/Modules/FindMPEG2.cmake new file mode 100644 index 0000000..fab37cf --- /dev/null +++ b/Modules/FindMPEG2.cmake @@ -0,0 +1,54 @@ +# - Find the native MPEG2 includes and library +# This module defines +# MPEG2_INCLUDE_DIR, path to mpeg2dec/mpeg2.h, etc. +# MPEG2_LIBRARIES, the libraries required to use MPEG2. +# MPEG2_FOUND, If false, do not try to use MPEG2. +# also defined, but not for general use are +# MPEG2_mpeg2_LIBRARY, where to find the MPEG2 library. +# MPEG2_vo_LIBRARY, where to find the vo library. + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(MPEG2_INCLUDE_DIR + NAMES mpeg2.h mpeg2dec/mpeg2.h + PATHS /usr/local/livid +) + +FIND_LIBRARY(MPEG2_mpeg2_LIBRARY mpeg2 + /usr/local/livid/mpeg2dec/libmpeg2/.libs +) + +FIND_LIBRARY( MPEG2_vo_LIBRARY vo + /usr/local/livid/mpeg2dec/libvo/.libs +) + + +# handle the QUIETLY and REQUIRED arguments and set MPEG2_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(MPEG2 DEFAULT_MSG MPEG2_mpeg2_LIBRARY MPEG2_INCLUDE_DIR) + +IF(MPEG2_FOUND) + SET( MPEG2_LIBRARIES ${MPEG2_mpeg2_LIBRARY} + ${MPEG2_vo_LIBRARY}) + + #some native mpeg2 installations will depend + #on libSDL, if found, add it in. + INCLUDE( FindSDL ) + IF(SDL_FOUND) + SET( MPEG2_LIBRARIES ${MPEG2_LIBRARIES} ${SDL_LIBRARY}) + ENDIF(SDL_FOUND) +ENDIF(MPEG2_FOUND) + +MARK_AS_ADVANCED(MPEG2_INCLUDE_DIR MPEG2_mpeg2_LIBRARY MPEG2_vo_LIBRARY) diff --git a/Modules/FindMPI.cmake b/Modules/FindMPI.cmake new file mode 100644 index 0000000..ae50ca7 --- /dev/null +++ b/Modules/FindMPI.cmake @@ -0,0 +1,631 @@ +# - Find a Message Passing Interface (MPI) implementation +# The Message Passing Interface (MPI) is a library used to write +# high-performance distributed-memory parallel applications, and +# is typically deployed on a cluster. MPI is a standard interface +# (defined by the MPI forum) for which many implementations are +# available. All of them have somewhat different include paths, +# libraries to link against, etc., and this module tries to smooth +# out those differences. +# +# === Variables === +# +# This module will set the following variables per language in your project, +# where is one of C, CXX, or Fortran: +# MPI__FOUND TRUE if FindMPI found MPI flags for +# MPI__COMPILER MPI Compiler wrapper for +# MPI__COMPILE_FLAGS Compilation flags for MPI programs +# MPI__INCLUDE_PATH Include path(s) for MPI header +# MPI__LINK_FLAGS Linking flags for MPI programs +# MPI__LIBRARIES All libraries to link MPI programs against +# Additionally, FindMPI sets the following variables for running MPI +# programs from the command line: +# MPIEXEC Executable for running MPI programs +# MPIEXEC_NUMPROC_FLAG Flag to pass to MPIEXEC before giving +# it the number of processors to run on +# MPIEXEC_PREFLAGS Flags to pass to MPIEXEC directly +# before the executable to run. +# MPIEXEC_POSTFLAGS Flags to pass to MPIEXEC after other flags +# === Usage === +# +# To use this module, simply call FindMPI from a CMakeLists.txt file, or +# run find_package(MPI), then run CMake. If you are happy with the auto- +# detected configuration for your language, then you're done. If not, you +# have two options: +# 1. Set MPI__COMPILER to the MPI wrapper (mpicc, etc.) of your +# choice and reconfigure. FindMPI will attempt to determine all the +# necessary variables using THAT compiler's compile and link flags. +# 2. If this fails, or if your MPI implementation does not come with +# a compiler wrapper, then set both MPI__LIBRARIES and +# MPI__INCLUDE_PATH. You may also set any other variables +# listed above, but these two are required. This will circumvent +# autodetection entirely. +# When configuration is successful, MPI__COMPILER will be set to the +# compiler wrapper for , if it was found. MPI__FOUND and other +# variables above will be set if any MPI implementation was found for , +# regardless of whether a compiler was found. +# +# When using MPIEXEC to execute MPI applications, you should typically use +# all of the MPIEXEC flags as follows: +# ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} PROCS +# ${MPIEXEC_PREFLAGS} EXECUTABLE ${MPIEXEC_POSTFLAGS} ARGS +# where PROCS is the number of processors on which to execute the program, +# EXECUTABLE is the MPI program, and ARGS are the arguments to pass to the +# MPI program. +# +# === Backward Compatibility === +# +# For backward compatibility with older versions of FindMPI, these +# variables are set, but deprecated: +# MPI_FOUND MPI_COMPILER MPI_LIBRARY +# MPI_COMPILE_FLAGS MPI_INCLUDE_PATH MPI_EXTRA_LIBRARY +# MPI_LINK_FLAGS MPI_LIBRARIES +# In new projects, please use the MPI__XXX equivalents. + +#============================================================================= +# Copyright 2001-2011 Kitware, Inc. +# Copyright 2010-2011 Todd Gamblin tgamblin@llnl.gov +# Copyright 2001-2009 Dave Partyka +# +# 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 this to handle the QUIETLY and REQUIRED arguments +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +include(GetPrerequisites) + +# +# This part detects MPI compilers, attempting to wade through the mess of compiler names in +# a sensible way. +# +# The compilers are detected in this order: +# +# 1. Try to find the most generic availble MPI compiler, as this is usually set up by +# cluster admins. e.g., if plain old mpicc is available, we'll use it and assume it's +# the right compiler. +# +# 2. If a generic mpicc is NOT found, then we attempt to find one that matches +# CMAKE__COMPILER_ID. e.g. if you are using XL compilers, we'll try to find mpixlc +# and company, but not mpiicc. This hopefully prevents toolchain mismatches. +# +# If you want to force a particular MPI compiler other than what we autodetect (e.g. if you +# want to compile regular stuff with GNU and parallel stuff with Intel), you can always set +# your favorite MPI__COMPILER explicitly and this stuff will be ignored. +# + +# Start out with the generic MPI compiler names, as these are most commonly used. +set(_MPI_C_COMPILER_NAMES mpicc mpcc mpicc_r mpcc_r) +set(_MPI_CXX_COMPILER_NAMES mpicxx mpiCC mpcxx mpCC mpic++ mpc++ + mpicxx_r mpiCC_r mpcxx_r mpCC_r mpic++_r mpc++_r) +set(_MPI_Fortran_COMPILER_NAMES mpif95 mpif95_r mpf95 mpf95_r + mpif90 mpif90_r mpf90 mpf90_r + mpif77 mpif77_r mpf77 mpf77_r) + +# GNU compiler names +set(_MPI_GNU_C_COMPILER_NAMES mpigcc mpgcc mpigcc_r mpgcc_r) +set(_MPI_GNU_CXX_COMPILER_NAMES mpig++ mpg++ mpig++_r mpg++_r) +set(_MPI_GNU_Fortran_COMPILER_NAMES mpigfortran mpgfortran mpigfortran_r mpgfortran_r + mpig77 mpig77_r mpg77 mpg77_r) + +# Intel MPI compiler names +set(_MPI_Intel_C_COMPILER_NAMES mpiicc) +set(_MPI_Intel_CXX_COMPILER_NAMES mpiicpc mpiicxx mpiic++ mpiiCC) +set(_MPI_Intel_Fortran_COMPILER_NAMES mpiifort mpiif95 mpiif90 mpiif77) + +# PGI compiler names +set(_MPI_PGI_C_COMPILER_NAMES mpipgcc mppgcc) +set(_MPI_PGI_CXX_COMPILER_NAMES mpipgCC mppgCC) +set(_MPI_PGI_Fortran_COMPILER_NAMES mpipgf95 mpipgf90 mppgf95 mppgf90 mpipgf77 mppgf77) + +# XLC MPI Compiler names +set(_MPI_XL_C_COMPILER_NAMES mpxlc mpxlc_r mpixlc mpixlc_r) +set(_MPI_XL_CXX_COMPILER_NAMES mpixlcxx mpixlC mpixlc++ mpxlcxx mpxlc++ mpixlc++ mpxlCC + mpixlcxx_r mpixlC_r mpixlc++_r mpxlcxx_r mpxlc++_r mpixlc++_r mpxlCC_r) +set(_MPI_XL_Fortran_COMPILER_NAMES mpixlf95 mpixlf95_r mpxlf95 mpxlf95_r + mpixlf90 mpixlf90_r mpxlf90 mpxlf90_r + mpixlf77 mpixlf77_r mpxlf77 mpxlf77_r + mpixlf mpixlf_r mpxlf mpxlf_r) + +# append vendor-specific compilers to the list if we either don't know the compiler id, +# or if we know it matches the regular compiler. +foreach (lang C CXX Fortran) + foreach (id GNU Intel PGI XL) + if (NOT CMAKE_${lang}_COMPILER_ID OR "${CMAKE_${lang}_COMPILER_ID}" STREQUAL "${id}") + list(APPEND _MPI_${lang}_COMPILER_NAMES ${_MPI_${id}_${lang}_COMPILER_NAMES}) + endif() + unset(_MPI_${id}_${lang}_COMPILER_NAMES) # clean up the namespace here + endforeach() +endforeach() + + +# Names to try for MPI exec +set(_MPI_EXEC_NAMES mpiexec mpirun lamexec srun) + +# Grab the path to MPI from the registry if we're on windows. +set(_MPI_PREFIX_PATH) +if(WIN32) + list(APPEND _MPI_PREFIX_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH\\SMPD;binary]/..") + list(APPEND _MPI_PREFIX_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MPICH2;Path]") + list(APPEND _MPI_PREFIX_PATH "$ENV{ProgramW6432}/MPICH2/") +endif() + +# Build a list of prefixes to search for MPI. +foreach(SystemPrefixDir ${CMAKE_SYSTEM_PREFIX_PATH}) + foreach(MpiPackageDir ${_MPI_PREFIX_PATH}) + if(EXISTS ${SystemPrefixDir}/${MpiPackageDir}) + list(APPEND _MPI_PREFIX_PATH "${SystemPrefixDir}/${MpiPackageDir}") + endif() + endforeach() +endforeach() + + +# +# interrogate_mpi_compiler(lang try_libs) +# +# Attempts to extract compiler and linker args from an MPI compiler. The arguments set +# by this function are: +# +# MPI__INCLUDE_PATH MPI__LINK_FLAGS MPI__FOUND +# MPI__COMPILE_FLAGS MPI__LIBRARIES +# +# MPI__COMPILER must be set beforehand to the absolute path to an MPI compiler for +# . Additionally, MPI__INCLUDE_PATH and MPI__LIBRARIES may be set +# to skip autodetection. +# +# If try_libs is TRUE, this will also attempt to find plain MPI libraries in the usual +# way. In general, this is not as effective as interrogating the compilers, as it +# ignores language-specific flags and libraries. However, some MPI implementations +# (Windows implementations) do not have compiler wrappers, so this approach must be used. +# +function (interrogate_mpi_compiler lang try_libs) + # MPI_${lang}_NO_INTERROGATE will be set to a compiler name when the *regular* compiler was + # discovered to be the MPI compiler. This happens on machines like the Cray XE6 that use + # modules to set cc, CC, and ftn to the MPI compilers. If the user force-sets another MPI + # compiler, MPI_${lang}_COMPILER won't be equal to MPI_${lang}_NO_INTERROGATE, and we'll + # inspect that compiler anew. This allows users to set new compilers w/o rm'ing cache. + string(COMPARE NOTEQUAL "${MPI_${lang}_NO_INTERROGATE}" "${MPI_${lang}_COMPILER}" interrogate) + + # If MPI is set already in the cache, don't bother with interrogating the compiler. + if (interrogate AND ((NOT MPI_${lang}_INCLUDE_PATH) OR (NOT MPI_${lang}_LIBRARIES))) + if (MPI_${lang}_COMPILER) + # Check whether the -showme:compile option works. This indicates that we have either OpenMPI + # or a newer version of LAM-MPI, and implies that -showme:link will also work. + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -showme:compile + OUTPUT_VARIABLE MPI_COMPILE_CMDLINE OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_COMPILE_CMDLINE ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE MPI_COMPILER_RETURN) + + if (MPI_COMPILER_RETURN EQUAL 0) + # If we appear to have -showme:compile, then we should + # also have -showme:link. Try it. + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -showme:link + OUTPUT_VARIABLE MPI_LINK_CMDLINE OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_LINK_CMDLINE ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE MPI_COMPILER_RETURN) + + if (MPI_COMPILER_RETURN EQUAL 0) + # We probably have -showme:incdirs and -showme:libdirs as well, + # so grab that while we're at it. + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -showme:incdirs + OUTPUT_VARIABLE MPI_INCDIRS OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_INCDIRS ERROR_STRIP_TRAILING_WHITESPACE) + + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -showme:libdirs + OUTPUT_VARIABLE MPI_LIBDIRS OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_LIBDIRS ERROR_STRIP_TRAILING_WHITESPACE) + + else() + # reset things here if something went wrong. + set(MPI_COMPILE_CMDLINE) + set(MPI_LINK_CMDLINE) + endif() + endif () + + # Older versions of LAM-MPI have "-showme". Try to find that. + if (NOT MPI_COMPILER_RETURN EQUAL 0) + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -showme + OUTPUT_VARIABLE MPI_COMPILE_CMDLINE OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_COMPILE_CMDLINE ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE MPI_COMPILER_RETURN) + endif() + + # MVAPICH uses -compile-info and -link-info. Try them. + if (NOT MPI_COMPILER_RETURN EQUAL 0) + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -compile-info + OUTPUT_VARIABLE MPI_COMPILE_CMDLINE OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_COMPILE_CMDLINE ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE MPI_COMPILER_RETURN) + + # If we have compile-info, also have link-info. + if (MPI_COMPILER_RETURN EQUAL 0) + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -link-info + OUTPUT_VARIABLE MPI_LINK_CMDLINE OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_LINK_CMDLINE ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE MPI_COMPILER_RETURN) + endif() + + # make sure we got compile and link. Reset vars if something's wrong. + if (NOT MPI_COMPILER_RETURN EQUAL 0) + set(MPI_COMPILE_CMDLINE) + set(MPI_LINK_CMDLINE) + endif() + endif() + + # MPICH just uses "-show". Try it. + if (NOT MPI_COMPILER_RETURN EQUAL 0) + execute_process( + COMMAND ${MPI_${lang}_COMPILER} -show + OUTPUT_VARIABLE MPI_COMPILE_CMDLINE OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE MPI_COMPILE_CMDLINE ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE MPI_COMPILER_RETURN) + endif() + + if (MPI_COMPILER_RETURN EQUAL 0) + # We have our command lines, but we might need to copy MPI_COMPILE_CMDLINE + # into MPI_LINK_CMDLINE, if we didn't find the link line. + if (NOT MPI_LINK_CMDLINE) + set(MPI_LINK_CMDLINE ${MPI_COMPILE_CMDLINE}) + endif() + else() + message(STATUS "Unable to determine MPI from MPI driver ${MPI_${lang}_COMPILER}") + set(MPI_COMPILE_CMDLINE) + set(MPI_LINK_CMDLINE) + endif() + + # Here, we're done with the interrogation part, and we'll try to extract args we care + # about from what we learned from the compiler wrapper scripts. + + # If interrogation came back with something, extract our variable from the MPI command line + if (MPI_COMPILE_CMDLINE OR MPI_LINK_CMDLINE) + # Extract compile flags from the compile command line. + string(REGEX MATCHALL "(^| )-[Df]([^\" ]+|\"[^\"]+\")" MPI_ALL_COMPILE_FLAGS "${MPI_COMPILE_CMDLINE}") + set(MPI_COMPILE_FLAGS_WORK) + + foreach(FLAG ${MPI_ALL_COMPILE_FLAGS}) + if (MPI_COMPILE_FLAGS_WORK) + set(MPI_COMPILE_FLAGS_WORK "${MPI_COMPILE_FLAGS_WORK} ${FLAG}") + else() + set(MPI_COMPILE_FLAGS_WORK ${FLAG}) + endif() + endforeach() + + # Extract include paths from compile command line + string(REGEX MATCHALL "(^| )-I([^\" ]+|\"[^\"]+\")" MPI_ALL_INCLUDE_PATHS "${MPI_COMPILE_CMDLINE}") + foreach(IPATH ${MPI_ALL_INCLUDE_PATHS}) + string(REGEX REPLACE "^ ?-I" "" IPATH ${IPATH}) + string(REGEX REPLACE "//" "/" IPATH ${IPATH}) + list(APPEND MPI_INCLUDE_PATH_WORK ${IPATH}) + endforeach() + + # try using showme:incdirs if extracting didn't work. + if (NOT MPI_INCLUDE_PATH_WORK) + set(MPI_INCLUDE_PATH_WORK ${MPI_INCDIRS}) + separate_arguments(MPI_INCLUDE_PATH_WORK) + endif() + + # If all else fails, just search for mpi.h in the normal include paths. + if (NOT MPI_INCLUDE_PATH_WORK) + set(MPI_HEADER_PATH "MPI_HEADER_PATH-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + find_path(MPI_HEADER_PATH mpi.h + HINTS ${_MPI_BASE_DIR} ${_MPI_PREFIX_PATH} + PATH_SUFFIXES include) + set(MPI_INCLUDE_PATH_WORK ${MPI_HEADER_PATH}) + endif() + + # Extract linker paths from the link command line + string(REGEX MATCHALL "(^| |-Wl,)-L([^\" ]+|\"[^\"]+\")" MPI_ALL_LINK_PATHS "${MPI_LINK_CMDLINE}") + set(MPI_LINK_PATH) + foreach(LPATH ${MPI_ALL_LINK_PATHS}) + string(REGEX REPLACE "^(| |-Wl,)-L" "" LPATH ${LPATH}) + string(REGEX REPLACE "//" "/" LPATH ${LPATH}) + list(APPEND MPI_LINK_PATH ${LPATH}) + endforeach() + + # try using showme:libdirs if extracting didn't work. + if (NOT MPI_LINK_PATH) + set(MPI_LINK_PATH ${MPI_LIBDIRS}) + separate_arguments(MPI_LINK_PATH) + endif() + + # Extract linker flags from the link command line + string(REGEX MATCHALL "(^| )-Wl,([^\" ]+|\"[^\"]+\")" MPI_ALL_LINK_FLAGS "${MPI_LINK_CMDLINE}") + set(MPI_LINK_FLAGS_WORK) + foreach(FLAG ${MPI_ALL_LINK_FLAGS}) + if (MPI_LINK_FLAGS_WORK) + set(MPI_LINK_FLAGS_WORK "${MPI_LINK_FLAGS_WORK} ${FLAG}") + else() + set(MPI_LINK_FLAGS_WORK ${FLAG}) + endif() + endforeach() + + # Extract the set of libraries to link against from the link command + # line + string(REGEX MATCHALL "(^| )-l([^\" ]+|\"[^\"]+\")" MPI_LIBNAMES "${MPI_LINK_CMDLINE}") + # add the compiler implicit directories because some compilers + # such as the intel compiler have libraries that show up + # in the showme list that can only be found in the implicit + # link directories of the compiler. Do this for C++ and C + # compilers if the implicit link directories are defined. + if (DEFINED CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES) + set(MPI_LINK_PATH + "${MPI_LINK_PATH};${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES}") + endif () + + if (DEFINED CMAKE_C_IMPLICIT_LINK_DIRECTORIES) + set(MPI_LINK_PATH + "${MPI_LINK_PATH};${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}") + endif () + + # Determine full path names for all of the libraries that one needs + # to link against in an MPI program + foreach(LIB ${MPI_LIBNAMES}) + string(REGEX REPLACE "^ ?-l" "" LIB ${LIB}) + # MPI_LIB is cached by find_library, but we don't want that. Clear it first. + set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + find_library(MPI_LIB NAMES ${LIB} HINTS ${MPI_LINK_PATH}) + + if (MPI_LIB) + list(APPEND MPI_LIBRARIES_WORK ${MPI_LIB}) + elseif (NOT MPI_FIND_QUIETLY) + message(WARNING "Unable to find MPI library ${LIB}") + endif() + endforeach() + + # Sanity check MPI_LIBRARIES to make sure there are enough libraries + list(LENGTH MPI_LIBRARIES_WORK MPI_NUMLIBS) + list(LENGTH MPI_LIBNAMES MPI_NUMLIBS_EXPECTED) + if (NOT MPI_NUMLIBS EQUAL MPI_NUMLIBS_EXPECTED) + set(MPI_LIBRARIES_WORK "MPI_${lang}_LIBRARIES-NOTFOUND") + endif() + endif() + + elseif(try_libs) + # If we didn't have an MPI compiler script to interrogate, attempt to find everything + # with plain old find functions. This is nasty because MPI implementations have LOTS of + # different library names, so this section isn't going to be very generic. We need to + # make sure it works for MS MPI, though, since there are no compiler wrappers for that. + find_path(MPI_HEADER_PATH mpi.h + HINTS ${_MPI_BASE_DIR} ${_MPI_PREFIX_PATH} + PATH_SUFFIXES include Inc) + set(MPI_INCLUDE_PATH_WORK ${MPI_HEADER_PATH}) + + # Decide between 32-bit and 64-bit libraries for Microsoft's MPI + if("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) + set(MS_MPI_ARCH_DIR amd64) + else() + set(MS_MPI_ARCH_DIR i386) + endif() + + set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + find_library(MPI_LIB + NAMES mpi mpich mpich2 msmpi + HINTS ${_MPI_BASE_DIR} ${_MPI_PREFIX_PATH} + PATH_SUFFIXES lib lib/${MS_MPI_ARCH_DIR} Lib Lib/${MS_MPI_ARCH_DIR}) + set(MPI_LIBRARIES_WORK ${MPI_LIB}) + + # Right now, we only know about the extra libs for C++. + # We could add Fortran here (as there is usually libfmpich, etc.), but + # this really only has to work with MS MPI on Windows. + # Assume that other MPI's are covered by the compiler wrappers. + if (${lang} STREQUAL CXX) + set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + find_library(MPI_LIB + NAMES mpi++ mpicxx cxx mpi_cxx + HINTS ${_MPI_BASE_DIR} ${_MPI_PREFIX_PATH} + PATH_SUFFIXES lib) + if (MPI_LIBRARIES_WORK AND MPI_LIB) + list(APPEND MPI_LIBRARIES_WORK ${MPI_LIB}) + endif() + endif() + + if (NOT MPI_LIBRARIES_WORK) + set(MPI_LIBRARIES_WORK "MPI_${lang}_LIBRARIES-NOTFOUND") + endif() + endif() + + # If we found MPI, set up all of the appropriate cache entries + set(MPI_${lang}_COMPILE_FLAGS ${MPI_COMPILE_FLAGS_WORK} CACHE STRING "MPI ${lang} compilation flags" FORCE) + set(MPI_${lang}_INCLUDE_PATH ${MPI_INCLUDE_PATH_WORK} CACHE STRING "MPI ${lang} include path" FORCE) + set(MPI_${lang}_LINK_FLAGS ${MPI_LINK_FLAGS_WORK} CACHE STRING "MPI ${lang} linking flags" FORCE) + set(MPI_${lang}_LIBRARIES ${MPI_LIBRARIES_WORK} CACHE STRING "MPI ${lang} libraries to link against" FORCE) + mark_as_advanced(MPI_${lang}_COMPILE_FLAGS MPI_${lang}_INCLUDE_PATH MPI_${lang}_LINK_FLAGS MPI_${lang}_LIBRARIES) + + # clear out our temporary lib/header detectionv variable here. + set(MPI_LIB "MPI_LIB-NOTFOUND" CACHE INTERNAL "Scratch variable for MPI lib detection" FORCE) + set(MPI_HEADER_PATH "MPI_HEADER_PATH-NOTFOUND" CACHE INTERNAL "Scratch variable for MPI header detection" FORCE) + endif() + + # finally set a found variable for each MPI language + if (MPI_${lang}_INCLUDE_PATH AND MPI_${lang}_LIBRARIES) + set(MPI_${lang}_FOUND TRUE PARENT_SCOPE) + else() + set(MPI_${lang}_FOUND FALSE PARENT_SCOPE) + endif() +endfunction() + + +# This function attempts to compile with the regular compiler, to see if MPI programs +# work with it. This is a last ditch attempt after we've tried interrogating mpicc and +# friends, and after we've tried to find generic libraries. Works on machines like +# Cray XE6, where the modules environment changes what MPI version cc, CC, and ftn use. +function(try_regular_compiler lang success) + set(scratch_directory ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}) + if (${lang} STREQUAL Fortran) + set(test_file ${scratch_directory}/cmake_mpi_test.f90) + file(WRITE ${test_file} + "program hello\n" + "include 'mpif.h'\n" + "integer ierror\n" + "call MPI_INIT(ierror)\n" + "call MPI_FINALIZE(ierror)\n" + "end\n") + else() + if (${lang} STREQUAL CXX) + set(test_file ${scratch_directory}/cmake_mpi_test.cpp) + else() + set(test_file ${scratch_directory}/cmake_mpi_test.c) + endif() + file(WRITE ${test_file} + "#include \n" + "int main(int argc, char **argv) {\n" + " MPI_Init(&argc, &argv);\n" + " MPI_Finalize();\n" + "}\n") + endif() + try_compile(compiler_has_mpi ${scratch_directory} ${test_file}) + if (compiler_has_mpi) + set(MPI_${lang}_NO_INTERROGATE ${CMAKE_${lang}_COMPILER} CACHE STRING "Whether to interrogate MPI ${lang} compiler" FORCE) + set(MPI_${lang}_COMPILER ${CMAKE_${lang}_COMPILER} CACHE STRING "MPI ${lang} compiler" FORCE) + set(MPI_${lang}_COMPILE_FLAGS "" CACHE STRING "MPI ${lang} compilation flags" FORCE) + set(MPI_${lang}_INCLUDE_PATH "" CACHE STRING "MPI ${lang} include path" FORCE) + set(MPI_${lang}_LINK_FLAGS "" CACHE STRING "MPI ${lang} linking flags" FORCE) + set(MPI_${lang}_LIBRARIES "" CACHE STRING "MPI ${lang} libraries to link against" FORCE) + endif() + set(${success} ${compiler_has_mpi} PARENT_SCOPE) + unset(compiler_has_mpi CACHE) +endfunction() + +# End definitions, commence real work here. + +# Most mpi distros have some form of mpiexec which gives us something we can reliably look for. +find_program(MPIEXEC + NAMES ${_MPI_EXEC_NAMES} + PATHS ${_MPI_PREFIX_PATH} + PATH_SUFFIXES bin + DOC "Executable for running MPI programs.") + +# call get_filename_component twice to remove mpiexec and the directory it exists in (typically bin). +# This gives us a fairly reliable base directory to search for /bin /lib and /include from. +get_filename_component(_MPI_BASE_DIR "${MPIEXEC}" PATH) +get_filename_component(_MPI_BASE_DIR "${_MPI_BASE_DIR}" PATH) + +set(MPIEXEC_NUMPROC_FLAG "-np" CACHE STRING "Flag used by MPI to specify the number of processes for MPIEXEC; the next option will be the number of processes.") +set(MPIEXEC_PREFLAGS "" CACHE STRING "These flags will be directly before the executable that is being run by MPIEXEC.") +set(MPIEXEC_POSTFLAGS "" CACHE STRING "These flags will come after all flags given to MPIEXEC.") +set(MPIEXEC_MAX_NUMPROCS "2" CACHE STRING "Maximum number of processors available to run MPI applications.") +mark_as_advanced(MPIEXEC MPIEXEC_NUMPROC_FLAG MPIEXEC_PREFLAGS MPIEXEC_POSTFLAGS MPIEXEC_MAX_NUMPROCS) + + +#============================================================================= +# Backward compatibility input hacks. Propagate the FindMPI hints to C and +# CXX if the respective new versions are not defined. Translate the old +# MPI_LIBRARY and MPI_EXTRA_LIBRARY to respective MPI_${lang}_LIBRARIES. +# +# Once we find the new variables, we translate them back into their old +# equivalents below. +foreach (lang C CXX) + # Old input variables. + set(_MPI_OLD_INPUT_VARS COMPILER COMPILE_FLAGS INCLUDE_PATH LINK_FLAGS) + + # Set new vars based on their old equivalents, if the new versions are not already set. + foreach (var ${_MPI_OLD_INPUT_VARS}) + if (NOT MPI_${lang}_${var} AND MPI_${var}) + set(MPI_${lang}_${var} "${MPI_${var}}") + endif() + endforeach() + + # Special handling for MPI_LIBRARY and MPI_EXTRA_LIBRARY, which we nixed in the + # new FindMPI. These need to be merged into MPI__LIBRARIES + if (NOT MPI_${lang}_LIBRARIES AND (MPI_LIBRARY OR MPI_EXTRA_LIBRARY)) + set(MPI_${lang}_LIBRARIES ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARY}) + endif() +endforeach() +#============================================================================= + + +# This loop finds the compilers and sends them off for interrogation. +foreach (lang C CXX Fortran) + if (CMAKE_${lang}_COMPILER_WORKS) + # If the user supplies a compiler *name* instead of an absolute path, assume that we need to find THAT compiler. + if (MPI_${lang}_COMPILER) + is_file_executable(MPI_${lang}_COMPILER MPI_COMPILER_IS_EXECUTABLE) + if (NOT MPI_COMPILER_IS_EXECUTABLE) + # Get rid of our default list of names and just search for the name the user wants. + set(_MPI_${lang}_COMPILER_NAMES ${MPI_${lang}_COMPILER}) + set(MPI_${lang}_COMPILER "MPI_${lang}_COMPILER-NOTFOUND" CACHE FILEPATH "Cleared" FORCE) + # If the user specifies a compiler, we don't want to try to search libraries either. + set(try_libs FALSE) + endif() + else() + set(try_libs TRUE) + endif() + + find_program(MPI_${lang}_COMPILER + NAMES ${_MPI_${lang}_COMPILER_NAMES} + PATHS "${MPI_HOME}/bin" "$ENV{MPI_HOME}/bin" ${_MPI_PREFIX_PATH}) + interrogate_mpi_compiler(${lang} ${try_libs}) + mark_as_advanced(MPI_${lang}_COMPILER) + + # last ditch try -- if nothing works so far, just try running the regular compiler and + # see if we can create an MPI executable. + set(regular_compiler_worked 0) + if (NOT MPI_${lang}_LIBRARIES OR NOT MPI_${lang}_INCLUDE_PATH) + try_regular_compiler(${lang} regular_compiler_worked) + endif() + + if (regular_compiler_worked) + find_package_handle_standard_args(MPI_${lang} DEFAULT_MSG MPI_${lang}_COMPILER) + else() + find_package_handle_standard_args(MPI_${lang} DEFAULT_MSG MPI_${lang}_LIBRARIES MPI_${lang}_INCLUDE_PATH) + endif() + endif() +endforeach() + + +#============================================================================= +# More backward compatibility stuff +# +# Bare MPI sans ${lang} vars are set to CXX then C, depending on what was found. +# This mimics the behavior of the old language-oblivious FindMPI. +set(_MPI_OLD_VARS FOUND COMPILER INCLUDE_PATH COMPILE_FLAGS LINK_FLAGS LIBRARIES) +if (MPI_CXX_FOUND) + foreach (var ${_MPI_OLD_VARS}) + set(MPI_${var} ${MPI_CXX_${var}}) + endforeach() +elseif (MPI_C_FOUND) + foreach (var ${_MPI_OLD_VARS}) + set(MPI_${var} ${MPI_C_${var}}) + endforeach() +else() + # Note that we might still have found Fortran, but you'll need to use MPI_Fortran_FOUND + set(MPI_FOUND FALSE) +endif() + +# Chop MPI_LIBRARIES into the old-style MPI_LIBRARY and MPI_EXTRA_LIBRARY, and set them in cache. +if (MPI_LIBRARIES) + list(GET MPI_LIBRARIES 0 MPI_LIBRARY_WORK) + set(MPI_LIBRARY ${MPI_LIBRARY_WORK} CACHE FILEPATH "MPI library to link against" FORCE) +else() + set(MPI_LIBRARY "MPI_LIBRARY-NOTFOUND" CACHE FILEPATH "MPI library to link against" FORCE) +endif() + +list(LENGTH MPI_LIBRARIES MPI_NUMLIBS) +if (MPI_NUMLIBS GREATER 1) + set(MPI_EXTRA_LIBRARY_WORK ${MPI_LIBRARIES}) + list(REMOVE_AT MPI_EXTRA_LIBRARY_WORK 0) + set(MPI_EXTRA_LIBRARY ${MPI_EXTRA_LIBRARY_WORK} CACHE STRING "Extra MPI libraries to link against" FORCE) +else() + set(MPI_EXTRA_LIBRARY "MPI_EXTRA_LIBRARY-NOTFOUND" CACHE STRING "Extra MPI libraries to link against" FORCE) +endif() +#============================================================================= + +# unset these vars to cleanup namespace +unset(_MPI_OLD_VARS) +unset(_MPI_PREFIX_PATH) +unset(_MPI_BASE_DIR) +foreach (lang C CXX Fortran) + unset(_MPI_${lang}_COMPILER_NAMES) +endforeach() diff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake new file mode 100644 index 0000000..1cdb071 --- /dev/null +++ b/Modules/FindMatlab.cmake @@ -0,0 +1,120 @@ +# - this module looks for Matlab +# Defines: +# MATLAB_INCLUDE_DIR: include path for mex.h, engine.h +# MATLAB_LIBRARIES: required libraries: libmex, etc +# MATLAB_MEX_LIBRARY: path to libmex.lib +# MATLAB_MX_LIBRARY: path to libmx.lib +# MATLAB_ENG_LIBRARY: path to libeng.lib + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET(MATLAB_FOUND 0) +IF(WIN32) + IF(${CMAKE_GENERATOR} MATCHES "Visual Studio 6") + SET(MATLAB_ROOT "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\7.0;MATLABROOT]/extern/lib/win32/microsoft/msvc60") + ELSE(${CMAKE_GENERATOR} MATCHES "Visual Studio 6") + IF(${CMAKE_GENERATOR} MATCHES "Visual Studio 7") + # Assume people are generally using 7.1, + # if using 7.0 need to link to: ../extern/lib/win32/microsoft/msvc70 + SET(MATLAB_ROOT "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\7.0;MATLABROOT]/extern/lib/win32/microsoft/msvc71") + ELSE(${CMAKE_GENERATOR} MATCHES "Visual Studio 7") + IF(${CMAKE_GENERATOR} MATCHES "Borland") + # Same here, there are also: bcc50 and bcc51 directories + SET(MATLAB_ROOT "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\7.0;MATLABROOT]/extern/lib/win32/microsoft/bcc54") + ELSE(${CMAKE_GENERATOR} MATCHES "Borland") + IF(MATLAB_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Generator not compatible: ${CMAKE_GENERATOR}") + ENDIF(MATLAB_FIND_REQUIRED) + ENDIF(${CMAKE_GENERATOR} MATCHES "Borland") + ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio 7") + ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio 6") + FIND_LIBRARY(MATLAB_MEX_LIBRARY + libmex + ${MATLAB_ROOT} + ) + FIND_LIBRARY(MATLAB_MX_LIBRARY + libmx + ${MATLAB_ROOT} + ) + FIND_LIBRARY(MATLAB_ENG_LIBRARY + libeng + ${MATLAB_ROOT} + ) + + FIND_PATH(MATLAB_INCLUDE_DIR + "mex.h" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\7.0;MATLABROOT]/extern/include" + ) +ELSE( WIN32 ) + IF(CMAKE_SIZEOF_VOID_P EQUAL 4) + # Regular x86 + SET(MATLAB_ROOT + /usr/local/matlab-7sp1/bin/glnx86/ + /opt/matlab-7sp1/bin/glnx86/ + $ENV{HOME}/matlab-7sp1/bin/glnx86/ + $ENV{HOME}/redhat-matlab/bin/glnx86/ + ) + ELSE(CMAKE_SIZEOF_VOID_P EQUAL 4) + # AMD64: + SET(MATLAB_ROOT + /usr/local/matlab-7sp1/bin/glnxa64/ + /opt/matlab-7sp1/bin/glnxa64/ + $ENV{HOME}/matlab7_64/bin/glnxa64/ + $ENV{HOME}/matlab-7sp1/bin/glnxa64/ + $ENV{HOME}/redhat-matlab/bin/glnxa64/ + ) + ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 4) + FIND_LIBRARY(MATLAB_MEX_LIBRARY + mex + ${MATLAB_ROOT} + ) + FIND_LIBRARY(MATLAB_MX_LIBRARY + mx + ${MATLAB_ROOT} + ) + FIND_LIBRARY(MATLAB_ENG_LIBRARY + eng + ${MATLAB_ROOT} + ) + FIND_PATH(MATLAB_INCLUDE_DIR + "mex.h" + "/usr/local/matlab-7sp1/extern/include/" + "/opt/matlab-7sp1/extern/include/" + "$ENV{HOME}/matlab-7sp1/extern/include/" + "$ENV{HOME}/redhat-matlab/extern/include/" + ) + +ENDIF(WIN32) + +# This is common to UNIX and Win32: +SET(MATLAB_LIBRARIES + ${MATLAB_MEX_LIBRARY} + ${MATLAB_MX_LIBRARY} + ${MATLAB_ENG_LIBRARY} +) + +IF(MATLAB_INCLUDE_DIR AND MATLAB_LIBRARIES) + SET(MATLAB_FOUND 1) +ENDIF(MATLAB_INCLUDE_DIR AND MATLAB_LIBRARIES) + +MARK_AS_ADVANCED( + MATLAB_LIBRARIES + MATLAB_MEX_LIBRARY + MATLAB_MX_LIBRARY + MATLAB_ENG_LIBRARY + MATLAB_INCLUDE_DIR + MATLAB_FOUND + MATLAB_ROOT +) + diff --git a/Modules/FindMotif.cmake b/Modules/FindMotif.cmake new file mode 100644 index 0000000..e354112 --- /dev/null +++ b/Modules/FindMotif.cmake @@ -0,0 +1,44 @@ +# - Try to find Motif (or lesstif) +# Once done this will define: +# MOTIF_FOUND - system has MOTIF +# MOTIF_INCLUDE_DIR - include paths to use Motif +# MOTIF_LIBRARIES - Link these to use Motif + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET(MOTIF_FOUND 0) + +IF(UNIX) + FIND_PATH(MOTIF_INCLUDE_DIR + Xm/Xm.h + /usr/openwin/include + ) + + FIND_LIBRARY(MOTIF_LIBRARIES + Xm + /usr/openwin/lib + ) + +ENDIF(UNIX) + +# handle the QUIETLY and REQUIRED arguments and set MOTIF_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Motif DEFAULT_MSG MOTIF_LIBRARIES MOTIF_INCLUDE_DIR) + + +MARK_AS_ADVANCED( + MOTIF_INCLUDE_DIR + MOTIF_LIBRARIES +) diff --git a/Modules/FindOpenAL.cmake b/Modules/FindOpenAL.cmake new file mode 100644 index 0000000..bcba6e2 --- /dev/null +++ b/Modules/FindOpenAL.cmake @@ -0,0 +1,103 @@ +# Locate OpenAL +# This module defines +# OPENAL_LIBRARY +# OPENAL_FOUND, if false, do not try to link to OpenAL +# OPENAL_INCLUDE_DIR, where to find the headers +# +# $OPENALDIR is an environment variable that would +# correspond to the ./configure --prefix=$OPENALDIR +# used in building OpenAL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake module. + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This makes the presumption that you are include al.h like +# #include "al.h" +# and not +# #include +# The reason for this is that the latter is not entirely portable. +# Windows/Creative Labs does not by default put their headers in AL/ and +# OS X uses the convention . +# +# For Windows, Creative Labs seems to have added a registry key for their +# OpenAL 1.1 installer. I have added that key to the list of search paths, +# however, the key looks like it could be a little fragile depending on +# if they decide to change the 1.00.0000 number for bug fix releases. +# Also, they seem to have laid down groundwork for multiple library platforms +# which puts the library in an extra subdirectory. Currently there is only +# Win32 and I have hardcoded that here. This may need to be adjusted as +# platforms are introduced. +# The OpenAL 1.0 installer doesn't seem to have a useful key I can use. +# I do not know if the Nvidia OpenAL SDK has a registry key. +# +# For OS X, remember that OpenAL was added by Apple in 10.4 (Tiger). +# To support the framework, I originally wrote special framework detection +# code in this module which I have now removed with CMake's introduction +# of native support for frameworks. +# In addition, OpenAL is open source, and it is possible to compile on Panther. +# Furthermore, due to bugs in the initial OpenAL release, and the +# transition to OpenAL 1.1, it is common to need to override the built-in +# framework. +# Per my request, CMake should search for frameworks first in +# the following order: +# ~/Library/Frameworks/OpenAL.framework/Headers +# /Library/Frameworks/OpenAL.framework/Headers +# /System/Library/Frameworks/OpenAL.framework/Headers +# +# On OS X, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# OPENAL_LIBRARY to override this selection or set the CMake environment +# CMAKE_INCLUDE_PATH to modify the search paths. + +FIND_PATH(OPENAL_INCLUDE_DIR al.h + HINTS + $ENV{OPENALDIR} + PATH_SUFFIXES include/AL include/OpenAL include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Creative\ Labs\\OpenAL\ 1.1\ Software\ Development\ Kit\\1.00.0000;InstallDir] +) + +FIND_LIBRARY(OPENAL_LIBRARY + NAMES OpenAL al openal OpenAL32 + HINTS + $ENV{OPENALDIR} + PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64 + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Creative\ Labs\\OpenAL\ 1.1\ Software\ Development\ Kit\\1.00.0000;InstallDir] +) + + +# handle the QUIETLY and REQUIRED arguments and set OPENAL_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenAL DEFAULT_MSG OPENAL_LIBRARY OPENAL_INCLUDE_DIR) + +MARK_AS_ADVANCED(OPENAL_LIBRARY OPENAL_INCLUDE_DIR) diff --git a/Modules/FindOpenGL.cmake b/Modules/FindOpenGL.cmake new file mode 100644 index 0000000..98d8808 --- /dev/null +++ b/Modules/FindOpenGL.cmake @@ -0,0 +1,160 @@ +# - Try to find OpenGL +# Once done this will define +# +# OPENGL_FOUND - system has OpenGL +# OPENGL_XMESA_FOUND - system has XMESA +# OPENGL_GLU_FOUND - system has GLU +# OPENGL_INCLUDE_DIR - the GL include directory +# OPENGL_LIBRARIES - Link these to use OpenGL and GLU +# +# If you want to use just GL you can use these values +# OPENGL_gl_LIBRARY - Path to OpenGL Library +# OPENGL_glu_LIBRARY - Path to GLU Library +# +# On OSX default to using the framework version of opengl +# People will have to change the cache values of OPENGL_glu_LIBRARY +# and OPENGL_gl_LIBRARY to use OpenGL with X11 on OSX + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF (WIN32) + IF (CYGWIN) + + FIND_PATH(OPENGL_INCLUDE_DIR GL/gl.h ) + + FIND_LIBRARY(OPENGL_gl_LIBRARY opengl32 ) + + FIND_LIBRARY(OPENGL_glu_LIBRARY glu32 ) + + ELSE (CYGWIN) + + IF(BORLAND) + SET (OPENGL_gl_LIBRARY import32 CACHE STRING "OpenGL library for win32") + SET (OPENGL_glu_LIBRARY import32 CACHE STRING "GLU library for win32") + ELSE(BORLAND) + SET (OPENGL_gl_LIBRARY opengl32 CACHE STRING "OpenGL library for win32") + SET (OPENGL_glu_LIBRARY glu32 CACHE STRING "GLU library for win32") + ENDIF(BORLAND) + + ENDIF (CYGWIN) + +ELSE (WIN32) + + IF (APPLE) + + FIND_LIBRARY(OPENGL_gl_LIBRARY OpenGL DOC "OpenGL lib for OSX") + FIND_LIBRARY(OPENGL_glu_LIBRARY AGL DOC "AGL lib for OSX") + FIND_PATH(OPENGL_INCLUDE_DIR OpenGL/gl.h DOC "Include for OpenGL on OSX") + + ELSE(APPLE) + # Handle HP-UX cases where we only want to find OpenGL in either hpux64 + # or hpux32 depending on if we're doing a 64 bit build. + IF(CMAKE_SIZEOF_VOID_P EQUAL 4) + SET(HPUX_IA_OPENGL_LIB_PATH /opt/graphics/OpenGL/lib/hpux32/) + ELSE(CMAKE_SIZEOF_VOID_P EQUAL 4) + SET(HPUX_IA_OPENGL_LIB_PATH + /opt/graphics/OpenGL/lib/hpux64/ + /opt/graphics/OpenGL/lib/pa20_64) + ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 4) + + # The first line below is to make sure that the proper headers + # are used on a Linux machine with the NVidia drivers installed. + # They replace Mesa with NVidia's own library but normally do not + # install headers and that causes the linking to + # fail since the compiler finds the Mesa headers but NVidia's library. + # Make sure the NVIDIA directory comes BEFORE the others. + # - Atanas Georgiev + + FIND_PATH(OPENGL_INCLUDE_DIR GL/gl.h + /usr/share/doc/NVIDIA_GLX-1.0/include + /usr/openwin/share/include + /opt/graphics/OpenGL/include /usr/X11R6/include + ) + + FIND_PATH(OPENGL_xmesa_INCLUDE_DIR GL/xmesa.h + /usr/share/doc/NVIDIA_GLX-1.0/include + /usr/openwin/share/include + /opt/graphics/OpenGL/include /usr/X11R6/include + ) + + FIND_LIBRARY(OPENGL_gl_LIBRARY + NAMES GL MesaGL + PATHS /opt/graphics/OpenGL/lib + /usr/openwin/lib + /usr/shlib /usr/X11R6/lib + ${HPUX_IA_OPENGL_LIB_PATH} + ) + + # On Unix OpenGL most certainly always requires X11. + # Feel free to tighten up these conditions if you don't + # think this is always true. + # It's not true on OSX. + + IF (OPENGL_gl_LIBRARY) + IF(NOT X11_FOUND) + INCLUDE(FindX11) + ENDIF(NOT X11_FOUND) + IF (X11_FOUND) + IF (NOT APPLE) + SET (OPENGL_LIBRARIES ${X11_LIBRARIES}) + ENDIF (NOT APPLE) + ENDIF (X11_FOUND) + ENDIF (OPENGL_gl_LIBRARY) + + FIND_LIBRARY(OPENGL_glu_LIBRARY + NAMES GLU MesaGLU + PATHS ${OPENGL_gl_LIBRARY} + /opt/graphics/OpenGL/lib + /usr/openwin/lib + /usr/shlib /usr/X11R6/lib + ) + + ENDIF(APPLE) +ENDIF (WIN32) + +IF(OPENGL_gl_LIBRARY) + + IF(OPENGL_xmesa_INCLUDE_DIR) + SET( OPENGL_XMESA_FOUND "YES" ) + ELSE(OPENGL_xmesa_INCLUDE_DIR) + SET( OPENGL_XMESA_FOUND "NO" ) + ENDIF(OPENGL_xmesa_INCLUDE_DIR) + + SET( OPENGL_LIBRARIES ${OPENGL_gl_LIBRARY} ${OPENGL_LIBRARIES}) + IF(OPENGL_glu_LIBRARY) + SET( OPENGL_GLU_FOUND "YES" ) + SET( OPENGL_LIBRARIES ${OPENGL_glu_LIBRARY} ${OPENGL_LIBRARIES} ) + ELSE(OPENGL_glu_LIBRARY) + SET( OPENGL_GLU_FOUND "NO" ) + ENDIF(OPENGL_glu_LIBRARY) + + # This deprecated setting is for backward compatibility with CMake1.4 + SET (OPENGL_LIBRARY ${OPENGL_LIBRARIES}) + +ENDIF(OPENGL_gl_LIBRARY) + +# This deprecated setting is for backward compatibility with CMake1.4 +SET(OPENGL_INCLUDE_PATH ${OPENGL_INCLUDE_DIR}) + +# handle the QUIETLY and REQUIRED arguments and set OPENGL_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenGL DEFAULT_MSG OPENGL_gl_LIBRARY) + +MARK_AS_ADVANCED( + OPENGL_INCLUDE_DIR + OPENGL_xmesa_INCLUDE_DIR + OPENGL_glu_LIBRARY + OPENGL_gl_LIBRARY +) diff --git a/Modules/FindOpenMP.cmake b/Modules/FindOpenMP.cmake new file mode 100644 index 0000000..b96a2ec --- /dev/null +++ b/Modules/FindOpenMP.cmake @@ -0,0 +1,167 @@ +# - Finds OpenMP support +# This module can be used to detect OpenMP support in a compiler. +# If the compiler supports OpenMP, the flags required to compile with +# openmp support are set. +# +# The following variables are set: +# OpenMP_C_FLAGS - flags to add to the C compiler for OpenMP support +# OpenMP_CXX_FLAGS - flags to add to the CXX compiler for OpenMP support +# OPENMP_FOUND - true if openmp is detected +# +# Supported compilers can be found at http://openmp.org/wp/openmp-compilers/ + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2008-2009 André Rigland Brodtkorb +# Copyright 2012 Rolf Eike Beer +# +# 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.) + +set(_OPENMP_REQUIRED_VARS) + +function(_OPENMP_FLAG_CANDIDATES LANG) + set(OpenMP_FLAG_CANDIDATES + #GNU + "-fopenmp" + #Microsoft Visual Studio + "/openmp" + #Intel windows + "-Qopenmp" + #PathScale, Intel + "-openmp" + #Empty, if compiler automatically accepts openmp + " " + #Sun + "-xopenmp" + #HP + "+Oopenmp" + #IBM XL C/c++ + "-qsmp" + #Portland Group, MIPSpro + "-mp" + ) + + set(OMP_FLAG_GNU "-fopenmp") + set(OMP_FLAG_HP "+Oopenmp") + if(WIN32) + set(OMP_FLAG_Intel "-Qopenmp") + else() + set(OMP_FLAG_Intel "-openmp") + endif() + set(OMP_FLAG_MIPSpro "-mp") + set(OMP_FLAG_MSVC "/openmp") + set(OMP_FLAG_PathScale "-openmp") + set(OMP_FLAG_PGI "-mp") + set(OMP_FLAG_SunPro "-xopenmp") + set(OMP_FLAG_XL "-qsmp") + + # Move the flag that matches the compiler to the head of the list, + # this is faster and doesn't clutter the output that much. If that + # flag doesn't work we will still try all. + if(OMP_FLAG_${CMAKE_${LANG}_COMPILER_ID}) + list(REMOVE_ITEM OpenMP_FLAG_CANDIDATES "${OMP_FLAG_${CMAKE_${LANG}_COMPILER_ID}}") + list(INSERT OpenMP_FLAG_CANDIDATES 0 "${OMP_FLAG_${CMAKE_${LANG}_COMPILER_ID}}") + endif() + + set(OpenMP_${LANG}_FLAG_CANDIDATES "${OpenMP_FLAG_CANDIDATES}" PARENT_SCOPE) +endfunction(_OPENMP_FLAG_CANDIDATES) + +# sample openmp source code to test +set(OpenMP_C_TEST_SOURCE +" +#include +int main() { +#ifdef _OPENMP + return 0; +#else + breaks_on_purpose +#endif +} +") + +# check c compiler +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) + unset(OpenMP_C_FLAG_CANDIDATES) + else() + _OPENMP_FLAG_CANDIDATES("C") + include(CheckCSourceCompiles) + endif() + + foreach(FLAG ${OpenMP_C_FLAG_CANDIDATES}) + set(SAFE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${FLAG}") + unset(OpenMP_FLAG_DETECTED CACHE) + message(STATUS "Try OpenMP C flag = [${FLAG}]") + check_c_source_compiles("${OpenMP_C_TEST_SOURCE}" OpenMP_FLAG_DETECTED) + set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}") + if(OpenMP_FLAG_DETECTED) + set(OpenMP_C_FLAGS_INTERNAL "${FLAG}") + break() + endif(OpenMP_FLAG_DETECTED) + endforeach(FLAG ${OpenMP_C_FLAG_CANDIDATES}) + + set(OpenMP_C_FLAGS "${OpenMP_C_FLAGS_INTERNAL}" + CACHE STRING "C compiler flags for OpenMP parallization") + + list(APPEND _OPENMP_REQUIRED_VARS OpenMP_C_FLAGS) + unset(OpenMP_C_FLAG_CANDIDATES) +endif() + +# check cxx compiler +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) + unset(OpenMP_CXX_FLAG_CANDIDATES) + else() + _OPENMP_FLAG_CANDIDATES("CXX") + include(CheckCXXSourceCompiles) + + # use the same source for CXX as C for now + set(OpenMP_CXX_TEST_SOURCE ${OpenMP_C_TEST_SOURCE}) + endif() + + foreach(FLAG ${OpenMP_CXX_FLAG_CANDIDATES}) + set(SAFE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${FLAG}") + unset(OpenMP_FLAG_DETECTED CACHE) + message(STATUS "Try OpenMP CXX flag = [${FLAG}]") + check_cxx_source_compiles("${OpenMP_CXX_TEST_SOURCE}" OpenMP_FLAG_DETECTED) + set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}") + if(OpenMP_FLAG_DETECTED) + set(OpenMP_CXX_FLAGS_INTERNAL "${FLAG}") + break() + endif(OpenMP_FLAG_DETECTED) + endforeach(FLAG ${OpenMP_CXX_FLAG_CANDIDATES}) + + set(OpenMP_CXX_FLAGS "${OpenMP_CXX_FLAGS_INTERNAL}" + CACHE STRING "C++ compiler flags for OpenMP parallization") + + list(APPEND _OPENMP_REQUIRED_VARS OpenMP_CXX_FLAGS) + unset(OpenMP_CXX_FLAG_CANDIDATES) + unset(OpenMP_CXX_TEST_SOURCE) +endif() + +if(_OPENMP_REQUIRED_VARS) + include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + + find_package_handle_standard_args(OpenMP + REQUIRED_VARS ${_OPENMP_REQUIRED_VARS}) + + mark_as_advanced(${_OPENMP_REQUIRED_VARS}) + + unset(_OPENMP_REQUIRED_VARS) +else() + message(SEND_ERROR "FindOpenMP requires C or CXX language to be enabled") +endif() diff --git a/Modules/FindOpenSSL.cmake b/Modules/FindOpenSSL.cmake new file mode 100644 index 0000000..d1fc2d2 --- /dev/null +++ b/Modules/FindOpenSSL.cmake @@ -0,0 +1,304 @@ +# - Try to find the OpenSSL encryption library +# Once done this will define +# +# OPENSSL_ROOT_DIR - Set this variable to the root installation of OpenSSL +# +# Read-Only variables: +# OPENSSL_FOUND - system has the OpenSSL library +# OPENSSL_INCLUDE_DIR - the OpenSSL include directory +# OPENSSL_LIBRARIES - The libraries needed to use OpenSSL +# OPENSSL_VERSION - This is set to $major.$minor.$revision$path (eg. 0.9.8s) + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# Copyright 2009-2011 Mathieu Malaterre +# +# 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.) + +if (UNIX) + find_package(PkgConfig QUIET) + pkg_check_modules(_OPENSSL QUIET openssl) +endif (UNIX) + +# http://www.slproweb.com/products/Win32OpenSSL.html +SET(_OPENSSL_ROOT_HINTS + $ENV{OPENSSL_ROOT_DIR} + ${OPENSSL_ROOT_DIR} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]" + ) +SET(_OPENSSL_ROOT_PATHS + "$ENV{PROGRAMFILES}/OpenSSL" + "$ENV{PROGRAMFILES}/OpenSSL-Win32" + "$ENV{PROGRAMFILES}/OpenSSL-Win64" + "C:/OpenSSL/" + "C:/OpenSSL-Win32/" + "C:/OpenSSL-Win64/" + ) +SET(_OPENSSL_ROOT_HINTS_AND_PATHS + HINTS ${_OPENSSL_ROOT_HINTS} + PATHS ${_OPENSSL_ROOT_PATHS} + ) + +FIND_PATH(OPENSSL_INCLUDE_DIR + NAMES + openssl/ssl.h + HINTS + ${_OPENSSL_INCLUDEDIR} + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + include +) + +IF(WIN32 AND NOT CYGWIN) + # MINGW should go here too + IF(MSVC) + # /MD and /MDd are the standard values - if someone wants to use + # others, the libnames have to change here too + # use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b + # TODO: handle /MT and static lib + # In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix: + # * MD for dynamic-release + # * MDd for dynamic-debug + # * MT for static-release + # * MTd for static-debug + + # Implementation details: + # We are using the libraries located in the VC subdir instead of the parent directory eventhough : + # libeay32MD.lib is identical to ../libeay32.lib, and + # ssleay32MD.lib is identical to ../ssleay32.lib + FIND_LIBRARY(LIB_EAY_DEBUG + NAMES + libeay32MDd + libeay32 + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + "lib" + "VC" + "lib/VC" + ) + + FIND_LIBRARY(LIB_EAY_RELEASE + NAMES + libeay32MD + libeay32 + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + "lib" + "VC" + "lib/VC" + ) + + FIND_LIBRARY(SSL_EAY_DEBUG + NAMES + ssleay32MDd + ssleay32 + ssl + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + "lib" + "VC" + "lib/VC" + ) + + FIND_LIBRARY(SSL_EAY_RELEASE + NAMES + ssleay32MD + ssleay32 + ssl + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + "lib" + "VC" + "lib/VC" + ) + + if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) + set( OPENSSL_LIBRARIES + optimized ${SSL_EAY_RELEASE} debug ${SSL_EAY_DEBUG} + optimized ${LIB_EAY_RELEASE} debug ${LIB_EAY_DEBUG} + ) + else() + set( OPENSSL_LIBRARIES ${SSL_EAY_RELEASE} ${LIB_EAY_RELEASE} ) + endif() + MARK_AS_ADVANCED(SSL_EAY_DEBUG SSL_EAY_RELEASE) + MARK_AS_ADVANCED(LIB_EAY_DEBUG LIB_EAY_RELEASE) + ELSEIF(MINGW) + # same player, for MingW + FIND_LIBRARY(LIB_EAY + NAMES + libeay32 + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + "lib" + "lib/MinGW" + ) + + FIND_LIBRARY(SSL_EAY + NAMES + ssleay32 + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + "lib" + "lib/MinGW" + ) + + MARK_AS_ADVANCED(SSL_EAY LIB_EAY) + set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} ) + ELSE(MSVC) + # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues: + FIND_LIBRARY(LIB_EAY + NAMES + libeay32 + HINTS + ${_OPENSSL_LIBDIR} + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + lib + ) + + FIND_LIBRARY(SSL_EAY + NAMES + ssleay32 + HINTS + ${_OPENSSL_LIBDIR} + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + lib + ) + + MARK_AS_ADVANCED(SSL_EAY LIB_EAY) + set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} ) + ENDIF(MSVC) +ELSE(WIN32 AND NOT CYGWIN) + + FIND_LIBRARY(OPENSSL_SSL_LIBRARY + NAMES + ssl + ssleay32 + ssleay32MD + HINTS + ${_OPENSSL_LIBDIR} + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + lib + ) + + FIND_LIBRARY(OPENSSL_CRYPTO_LIBRARY + NAMES + crypto + HINTS + ${_OPENSSL_LIBDIR} + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + lib + ) + + MARK_AS_ADVANCED(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY) + + # compat defines + SET(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY}) + SET(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY}) + + SET(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) + +ENDIF(WIN32 AND NOT CYGWIN) + +function(from_hex HEX DEC) + string(TOUPPER "${HEX}" HEX) + set(_res 0) + string(LENGTH "${HEX}" _strlen) + + while (_strlen GREATER 0) + math(EXPR _res "${_res} * 16") + string(SUBSTRING "${HEX}" 0 1 NIBBLE) + string(SUBSTRING "${HEX}" 1 -1 HEX) + if (NIBBLE STREQUAL "A") + math(EXPR _res "${_res} + 10") + elseif (NIBBLE STREQUAL "B") + math(EXPR _res "${_res} + 11") + elseif (NIBBLE STREQUAL "C") + math(EXPR _res "${_res} + 12") + elseif (NIBBLE STREQUAL "D") + math(EXPR _res "${_res} + 13") + elseif (NIBBLE STREQUAL "E") + math(EXPR _res "${_res} + 14") + elseif (NIBBLE STREQUAL "F") + math(EXPR _res "${_res} + 15") + else() + math(EXPR _res "${_res} + ${NIBBLE}") + endif() + + string(LENGTH "${HEX}" _strlen) + endwhile() + + set(${DEC} ${_res} PARENT_SCOPE) +endfunction(from_hex) + +if (OPENSSL_INCLUDE_DIR) + if (_OPENSSL_VERSION) + set(OPENSSL_VERSION "${_OPENSSL_VERSION}") + elseif(OPENSSL_INCLUDE_DIR AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h") + file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str + REGEX "^#define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*") + + # The version number is encoded as 0xMNNFFPPS: major minor fix patch status + # The status gives if this is a developer or prerelease and is ignored here. + # Major, minor, and fix directly translate into the version numbers shown in + # the string. The patch field translates to the single character suffix that + # indicates the bug fix state, which 00 -> nothing, 01 -> a, 02 -> b and so + # on. + + string(REGEX REPLACE "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]).*$" + "\\1;\\2;\\3;\\4;\\5" OPENSSL_VERSION_LIST "${openssl_version_str}") + list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR) + list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR) + from_hex("${OPENSSL_VERSION_MINOR}" OPENSSL_VERSION_MINOR) + list(GET OPENSSL_VERSION_LIST 2 OPENSSL_VERSION_FIX) + from_hex("${OPENSSL_VERSION_FIX}" OPENSSL_VERSION_FIX) + list(GET OPENSSL_VERSION_LIST 3 OPENSSL_VERSION_PATCH) + + if (NOT OPENSSL_VERSION_PATCH STREQUAL "00") + from_hex("${OPENSSL_VERSION_PATCH}" _tmp) + # 96 is the ASCII code of 'a' minus 1 + math(EXPR OPENSSL_VERSION_PATCH_ASCII "${_tmp} + 96") + unset(_tmp) + # Once anyone knows how OpenSSL would call the patch versions beyond 'z' + # this should be updated to handle that, too. This has not happened yet + # so it is simply ignored here for now. + string(ASCII "${OPENSSL_VERSION_PATCH_ASCII}" OPENSSL_VERSION_PATCH_STRING) + endif (NOT OPENSSL_VERSION_PATCH STREQUAL "00") + + set(OPENSSL_VERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_FIX}${OPENSSL_VERSION_PATCH_STRING}") + endif (_OPENSSL_VERSION) +endif (OPENSSL_INCLUDE_DIR) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +if (OPENSSL_VERSION) + find_package_handle_standard_args(OpenSSL + REQUIRED_VARS + OPENSSL_LIBRARIES + OPENSSL_INCLUDE_DIR + VERSION_VAR + OPENSSL_VERSION + FAIL_MESSAGE + "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR" + ) +else (OPENSSL_VERSION) + find_package_handle_standard_args(OpenSSL "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR" + OPENSSL_LIBRARIES + OPENSSL_INCLUDE_DIR + ) +endif (OPENSSL_VERSION) + +MARK_AS_ADVANCED(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES) diff --git a/Modules/FindOpenSceneGraph.cmake b/Modules/FindOpenSceneGraph.cmake new file mode 100644 index 0000000..52f9316 --- /dev/null +++ b/Modules/FindOpenSceneGraph.cmake @@ -0,0 +1,246 @@ +# - Find OpenSceneGraph +# This module searches for the OpenSceneGraph core "osg" library as well as +# OpenThreads, and whatever additional COMPONENTS (nodekits) that you specify. +# See http://www.openscenegraph.org +# +# NOTE: To use this module effectively you must either require CMake >= 2.6.3 +# with cmake_minimum_required(VERSION 2.6.3) or download and place +# FindOpenThreads.cmake, Findosg_functions.cmake, Findosg.cmake, +# and Find.cmake files into your CMAKE_MODULE_PATH. +# +#================================== +# +# This module accepts the following variables (note mixed case) +# +# OpenSceneGraph_DEBUG - Enable debugging output +# +# OpenSceneGraph_MARK_AS_ADVANCED - Mark cache variables as advanced +# automatically +# +# The following environment variables are also respected for finding the OSG +# and it's various components. CMAKE_PREFIX_PATH can also be used for this +# (see find_library() CMake documentation). +# +# _DIR (where MODULE is of the form "OSGVOLUME" and there is a FindosgVolume.cmake file) +# OSG_DIR +# OSGDIR +# OSG_ROOT +# +# This module defines the following output variables: +# +# OPENSCENEGRAPH_FOUND - Was the OSG and all of the specified components found? +# +# OPENSCENEGRAPH_VERSION - The version of the OSG which was found +# +# OPENSCENEGRAPH_INCLUDE_DIRS - Where to find the headers +# +# OPENSCENEGRAPH_LIBRARIES - The OSG libraries +# +#================================== +# Example Usage: +# +# find_package(OpenSceneGraph 2.0.0 REQUIRED osgDB osgUtil) +# # libOpenThreads & libosg automatically searched +# include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS}) +# +# add_executable(foo foo.cc) +# target_link_libraries(foo ${OPENSCENEGRAPH_LIBRARIES}) +# + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2009 Philip Lowman +# +# 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.) + +# +# Naming convention: +# Local variables of the form _osg_foo +# Input variables of the form OpenSceneGraph_FOO +# Output variables of the form OPENSCENEGRAPH_FOO +# + +include(Findosg_functions) + +set(_osg_modules_to_process) +foreach(_osg_component ${OpenSceneGraph_FIND_COMPONENTS}) + list(APPEND _osg_modules_to_process ${_osg_component}) +endforeach() +list(APPEND _osg_modules_to_process "osg" "OpenThreads") +list(REMOVE_DUPLICATES _osg_modules_to_process) + +if(OpenSceneGraph_DEBUG) + message(STATUS "[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] " + "Components = ${_osg_modules_to_process}") +endif() + +# +# First we need to find and parse osg/Version +# +OSG_FIND_PATH(OSG osg/Version) +if(OpenSceneGraph_MARK_AS_ADVANCED) + OSG_MARK_AS_ADVANCED(OSG) +endif() + +# Try to ascertain the version... +if(OSG_INCLUDE_DIR) + if(OpenSceneGraph_DEBUG) + message(STATUS "[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] " + "Detected OSG_INCLUDE_DIR = ${OSG_INCLUDE_DIR}") + endif() + + set(_osg_Version_file "${OSG_INCLUDE_DIR}/osg/Version") + if("${OSG_INCLUDE_DIR}" MATCHES "\\.framework$" AND NOT EXISTS "${_osg_Version_file}") + set(_osg_Version_file "${OSG_INCLUDE_DIR}/Headers/Version") + endif() + + if(EXISTS "${_osg_Version_file}") + file(READ "${_osg_Version_file}" _osg_Version_contents) + else() + set(_osg_Version_contents "unknown") + endif() + + string(REGEX MATCH ".*#define OSG_VERSION_MAJOR[ \t]+[0-9]+.*" + _osg_old_defines "${_osg_Version_contents}") + string(REGEX MATCH ".*#define OPENSCENEGRAPH_MAJOR_VERSION[ \t]+[0-9]+.*" + _osg_new_defines "${_osg_Version_contents}") + if(_osg_old_defines) + string(REGEX REPLACE ".*#define OSG_VERSION_MAJOR[ \t]+([0-9]+).*" + "\\1" _osg_VERSION_MAJOR ${_osg_Version_contents}) + string(REGEX REPLACE ".*#define OSG_VERSION_MINOR[ \t]+([0-9]+).*" + "\\1" _osg_VERSION_MINOR ${_osg_Version_contents}) + string(REGEX REPLACE ".*#define OSG_VERSION_PATCH[ \t]+([0-9]+).*" + "\\1" _osg_VERSION_PATCH ${_osg_Version_contents}) + elseif(_osg_new_defines) + string(REGEX REPLACE ".*#define OPENSCENEGRAPH_MAJOR_VERSION[ \t]+([0-9]+).*" + "\\1" _osg_VERSION_MAJOR ${_osg_Version_contents}) + string(REGEX REPLACE ".*#define OPENSCENEGRAPH_MINOR_VERSION[ \t]+([0-9]+).*" + "\\1" _osg_VERSION_MINOR ${_osg_Version_contents}) + string(REGEX REPLACE ".*#define OPENSCENEGRAPH_PATCH_VERSION[ \t]+([0-9]+).*" + "\\1" _osg_VERSION_PATCH ${_osg_Version_contents}) + else() + 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(STATUS "[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] " + "Detected version ${OPENSCENEGRAPH_VERSION}") + endif() +endif() + +# +# Version checking +# +if(OpenSceneGraph_FIND_VERSION AND OPENSCENEGRAPH_VERSION) + if(OpenSceneGraph_FIND_VERSION_EXACT) + if(NOT OPENSCENEGRAPH_VERSION VERSION_EQUAL ${OpenSceneGraph_FIND_VERSION}) + set(_osg_version_not_exact TRUE) + endif() + else() + # version is too low + if(NOT OPENSCENEGRAPH_VERSION VERSION_EQUAL ${OpenSceneGraph_FIND_VERSION} AND + NOT OPENSCENEGRAPH_VERSION VERSION_GREATER ${OpenSceneGraph_FIND_VERSION}) + set(_osg_version_not_high_enough TRUE) + endif() + endif() +endif() + +set(_osg_quiet) +if(OpenSceneGraph_FIND_QUIETLY) + set(_osg_quiet "QUIET") +endif() +# +# Here we call FIND_PACKAGE() on all of the components +# +foreach(_osg_module ${_osg_modules_to_process}) + if(OpenSceneGraph_DEBUG) + message(STATUS "[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] " + "Calling find_package(${_osg_module} ${_osg_required} ${_osg_quiet})") + endif() + find_package(${_osg_module} ${_osg_quiet}) + + string(TOUPPER ${_osg_module} _osg_module_UC) + list(APPEND OPENSCENEGRAPH_INCLUDE_DIR ${${_osg_module_UC}_INCLUDE_DIR}) + list(APPEND OPENSCENEGRAPH_LIBRARIES ${${_osg_module_UC}_LIBRARIES}) + + if(OpenSceneGraph_MARK_AS_ADVANCED) + OSG_MARK_AS_ADVANCED(${_osg_module}) + endif() +endforeach() + +if(OPENSCENEGRAPH_INCLUDE_DIR) + list(REMOVE_DUPLICATES OPENSCENEGRAPH_INCLUDE_DIR) +endif() + +# +# Inform the users with an error message based on +# what version they have vs. what version was +# required. +# +if(OpenSceneGraph_FIND_REQUIRED) + set(_osg_version_output_type FATAL_ERROR) +else() + set(_osg_version_output_type STATUS) +endif() +if(_osg_version_not_high_enough) + set(_osg_EPIC_FAIL TRUE) + if(NOT OpenSceneGraph_FIND_QUIETLY) + message(${_osg_version_output_type} + "ERROR: Version ${OpenSceneGraph_FIND_VERSION} or higher of the OSG " + "is required. Version ${OPENSCENEGRAPH_VERSION} was found.") + endif() +elseif(_osg_version_not_exact) + set(_osg_EPIC_FAIL TRUE) + if(NOT OpenSceneGraph_FIND_QUIETLY) + message(${_osg_version_output_type} + "ERROR: Version ${OpenSceneGraph_FIND_VERSION} of the OSG is required " + "(exactly), version ${OPENSCENEGRAPH_VERSION} was found.") + endif() +else() + + # + # Check each module to see if it's found + # + if(OpenSceneGraph_FIND_REQUIRED) + set(_osg_missing_message) + foreach(_osg_module ${_osg_modules_to_process}) + string(TOUPPER ${_osg_module} _osg_module_UC) + if(NOT ${_osg_module_UC}_FOUND) + set(_osg_missing_nodekit_fail true) + set(_osg_missing_message "${_osg_missing_message} ${_osg_module}") + endif() + endforeach() + + if(_osg_missing_nodekit_fail) + message(FATAL_ERROR "ERROR: Missing the following osg " + "libraries: ${_osg_missing_message}.\n" + "Consider using CMAKE_PREFIX_PATH or the OSG_DIR " + "environment variable. See the " + "${CMAKE_CURRENT_LIST_FILE} for more details.") + endif() + endif() + + include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenSceneGraph DEFAULT_MSG OPENSCENEGRAPH_LIBRARIES OPENSCENEGRAPH_INCLUDE_DIR) +endif() + +if(_osg_EPIC_FAIL) + # Zero out everything, we didn't meet version requirements + set(OPENSCENEGRAPH_FOUND FALSE) + set(OPENSCENEGRAPH_LIBRARIES) + set(OPENSCENEGRAPH_INCLUDE_DIR) +endif() + +set(OPENSCENEGRAPH_INCLUDE_DIRS ${OPENSCENEGRAPH_INCLUDE_DIR}) + diff --git a/Modules/FindOpenThreads.cmake b/Modules/FindOpenThreads.cmake new file mode 100644 index 0000000..6b81fbe --- /dev/null +++ b/Modules/FindOpenThreads.cmake @@ -0,0 +1,123 @@ +# OpenThreads is a C++ based threading library. Its largest userbase +# seems to OpenSceneGraph so you might notice I accept OSGDIR as an +# environment path. +# I consider this part of the Findosg* suite used to find OpenSceneGraph +# components. +# Each component is separate and you must opt in to each module. +# +# Locate OpenThreads +# This module defines +# OPENTHREADS_LIBRARY +# OPENTHREADS_FOUND, if false, do not try to link to OpenThreads +# OPENTHREADS_INCLUDE_DIR, where to find the headers +# +# $OPENTHREADS_DIR is an environment variable that would +# correspond to the ./configure --prefix=$OPENTHREADS_DIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include + +# To make it easier for one-step automated configuration/builds, +# we leverage environmental paths. This is preferable +# to the -DVAR=value switches because it insulates the +# users from changes we may make in this script. +# It also offers a little more flexibility than setting +# the CMAKE_*_PATH since we can target specific components. +# However, the default CMake behavior will search system paths +# before anything else. This is problematic in the cases +# where you have an older (stable) version installed, but +# are trying to build a newer version. +# CMake doesn't offer a nice way to globally control this behavior +# so we have to do a nasty "double FIND_" in this module. +# The first FIND disables the CMAKE_ search paths and only checks +# the environmental paths. +# If nothing is found, then the second find will search the +# standard install paths. +# Explicit -DVAR=value arguments should still be able to override everything. + +find_path(OPENTHREADS_INCLUDE_DIR OpenThreads/Thread + HINTS + # enough environment variables? + $ENV{OPENTHREADS_INCLUDE_DIR} + $ENV{OPENTHREADS_DIR} + $ENV{OSG_INCLUDE_DIR} + $ENV{OSG_DIR} + $ENV{OSGDIR} + $ENV{OpenThreads_ROOT} + $ENV{OSG_ROOT} + PATHS + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt + /usr/freeware + PATH_SUFFIXES include +) + + +find_library(OPENTHREADS_LIBRARY + NAMES OpenThreads OpenThreadsWin32 + HINTS + $ENV{OPENTHREADS_LIBRARY_DIR} + $ENV{OPENTHREADS_DIR} + $ENV{OSG_LIBRARY_DIR} + $ENV{OSG_DIR} + $ENV{OSGDIR} + $ENV{OpenThreads_ROOT} + $ENV{OSG_ROOT} + PATHS + /sw + /opt/local + /opt/csw + /opt + /usr/freeware + PATH_SUFFIXES lib64 lib +) + +find_library(OPENTHREADS_LIBRARY_DEBUG + NAMES OpenThreadsd OpenThreadsWin32d + HINTS + $ENV{OPENTHREADS_DEBUG_LIBRARY_DIR} + $ENV{OPENTHREADS_LIBRARY_DIR} + $ENV{OPENTHREADS_DIR} + $ENV{OSG_LIBRARY_DIR} + $ENV{OSG_DIR} + $ENV{OSGDIR} + $ENV{OpenThreads_ROOT} + $ENV{OSG_ROOT} + PATHS + /sw + /opt/local + /opt/csw + /opt + /usr/freeware + PATH_SUFFIXES lib64 lib +) + +if(OPENTHREADS_LIBRARY_DEBUG) + set(OPENTHREADS_LIBRARIES + optimized ${OPENTHREADS_LIBRARY} + debug ${OPENTHREADS_LIBRARY_DEBUG}) +else() + set(OPENTHREADS_LIBRARIES ${OPENTHREADS_LIBRARY}) +endif() + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenThreads DEFAULT_MSG + OPENTHREADS_LIBRARY OPENTHREADS_INCLUDE_DIR) diff --git a/Modules/FindPHP4.cmake b/Modules/FindPHP4.cmake new file mode 100644 index 0000000..6c2965a --- /dev/null +++ b/Modules/FindPHP4.cmake @@ -0,0 +1,85 @@ +# - Find PHP4 +# This module finds if PHP4 is installed and determines where the include files +# and libraries are. It also determines what the name of the library is. This +# code sets the following variables: +# +# PHP4_INCLUDE_PATH = path to where php.h can be found +# PHP4_EXECUTABLE = full path to the php4 binary +# + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET(PHP4_POSSIBLE_INCLUDE_PATHS + /usr/include/php4 + /usr/local/include/php4 + /usr/include/php + /usr/local/include/php + /usr/local/apache/php + ) + +SET(PHP4_POSSIBLE_LIB_PATHS + /usr/lib + ) + +FIND_PATH(PHP4_FOUND_INCLUDE_PATH main/php.h + ${PHP4_POSSIBLE_INCLUDE_PATHS}) + +IF(PHP4_FOUND_INCLUDE_PATH) + SET(php4_paths "${PHP4_POSSIBLE_INCLUDE_PATHS}") + FOREACH(php4_path Zend main TSRM) + SET(php4_paths ${php4_paths} "${PHP4_FOUND_INCLUDE_PATH}/${php4_path}") + ENDFOREACH(php4_path Zend main TSRM) + SET(PHP4_INCLUDE_PATH "${php4_paths}" INTERNAL "PHP4 include paths") +ENDIF(PHP4_FOUND_INCLUDE_PATH) + +FIND_PROGRAM(PHP4_EXECUTABLE NAMES php4 php ) + +MARK_AS_ADVANCED( + PHP4_EXECUTABLE + PHP4_FOUND_INCLUDE_PATH + ) + +IF(APPLE) +# this is a hack for now + SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS + "${CMAKE_SHARED_MODULE_CREATE_C_FLAGS} -Wl,-flat_namespace") + FOREACH(symbol + __efree + __emalloc + __estrdup + __object_init_ex + __zend_get_parameters_array_ex + __zend_list_find + __zval_copy_ctor + _add_property_zval_ex + _alloc_globals + _compiler_globals + _convert_to_double + _convert_to_long + _zend_error + _zend_hash_find + _zend_register_internal_class_ex + _zend_register_list_destructors_ex + _zend_register_resource + _zend_rsrc_list_get_rsrc_type + _zend_wrong_param_count + _zval_used_for_init + ) + SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS + "${CMAKE_SHARED_MODULE_CREATE_C_FLAGS},-U,${symbol}") + ENDFOREACH(symbol) +ENDIF(APPLE) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(PHP4 DEFAULT_MSG PHP4_EXECUTABLE PHP4_INCLUDE_PATH) diff --git a/Modules/FindPNG.cmake b/Modules/FindPNG.cmake new file mode 100644 index 0000000..a6c181c --- /dev/null +++ b/Modules/FindPNG.cmake @@ -0,0 +1,75 @@ +# - Find the native PNG includes and library +# +# This module searches libpng, the library for working with PNG images. +# +# It defines the following variables +# PNG_INCLUDE_DIRS, where to find png.h, etc. +# PNG_LIBRARIES, the libraries to link against to use PNG. +# PNG_DEFINITIONS - You should add_definitons(${PNG_DEFINITIONS}) before compiling code that includes png library files. +# PNG_FOUND, If false, do not try to use PNG. +# PNG_VERSION_STRING - the version of the PNG library found (since CMake 2.8.8) +# Also defined, but not for general use are +# PNG_LIBRARY, where to find the PNG library. +# For backward compatiblity the variable PNG_INCLUDE_DIR is also set. It has the same value as PNG_INCLUDE_DIRS. +# +# Since PNG depends on the ZLib compression library, none of the above will be +# defined unless ZLib can be found. + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +if(PNG_FIND_QUIETLY) + set(_FIND_ZLIB_ARG QUIET) +endif(PNG_FIND_QUIETLY) +find_package(ZLIB ${_FIND_ZLIB_ARG}) + +if(ZLIB_FOUND) + find_path(PNG_PNG_INCLUDE_DIR png.h + /usr/local/include/libpng # OpenBSD + ) + + set(PNG_NAMES ${PNG_NAMES} png libpng png15 libpng15 png15d libpng15d png14 libpng14 png14d libpng14d png12 libpng12 png12d libpng12d) + find_library(PNG_LIBRARY NAMES ${PNG_NAMES} ) + + if (PNG_LIBRARY AND PNG_PNG_INCLUDE_DIR) + # png.h includes zlib.h. Sigh. + SET(PNG_INCLUDE_DIRS ${PNG_PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ) + SET(PNG_INCLUDE_DIR ${PNG_INCLUDE_DIRS} ) # for backward compatiblity + SET(PNG_LIBRARIES ${PNG_LIBRARY} ${ZLIB_LIBRARY}) + + if (CYGWIN) + if(BUILD_SHARED_LIBS) + # No need to define PNG_USE_DLL here, because it's default for Cygwin. + else(BUILD_SHARED_LIBS) + SET (PNG_DEFINITIONS -DPNG_STATIC) + endif(BUILD_SHARED_LIBS) + endif (CYGWIN) + + endif (PNG_LIBRARY AND PNG_PNG_INCLUDE_DIR) + + if (PNG_PNG_INCLUDE_DIR AND EXISTS "${PNG_PNG_INCLUDE_DIR}/png.h") + file(STRINGS "${PNG_PNG_INCLUDE_DIR}/png.h" png_version_str REGEX "^#define[ \t]+PNG_LIBPNG_VER_STRING[ \t]+\".+\"") + + string(REGEX REPLACE "^#define[ \t]+PNG_LIBPNG_VER_STRING[ \t]+\"([^\"]+)\".*" "\\1" PNG_VERSION_STRING "${png_version_str}") + unset(png_version_str) + endif (PNG_PNG_INCLUDE_DIR AND EXISTS "${PNG_PNG_INCLUDE_DIR}/png.h") +endif(ZLIB_FOUND) + +# handle the QUIETLY and REQUIRED arguments and set PNG_FOUND to TRUE if +# all listed variables are TRUE +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +find_package_handle_standard_args(PNG + REQUIRED_VARS PNG_LIBRARY PNG_PNG_INCLUDE_DIR + VERSION_VAR PNG_VERSION_STRING) + +mark_as_advanced(PNG_PNG_INCLUDE_DIR PNG_LIBRARY ) diff --git a/Modules/FindPackageHandleStandardArgs.cmake b/Modules/FindPackageHandleStandardArgs.cmake new file mode 100644 index 0000000..cdcf9ca --- /dev/null +++ b/Modules/FindPackageHandleStandardArgs.cmake @@ -0,0 +1,296 @@ +# FIND_PACKAGE_HANDLE_STANDARD_ARGS( ... ) +# +# This function is intended to be used in FindXXX.cmake modules files. +# It handles the REQUIRED, QUIET and version-related arguments to FIND_PACKAGE(). +# It also sets the _FOUND variable. +# The package is considered found if all variables ... listed contain +# valid results, e.g. valid filepaths. +# +# There are two modes of this function. The first argument in both modes is +# the name of the Find-module where it is called (in original casing). +# +# The first simple mode looks like this: +# FIND_PACKAGE_HANDLE_STANDARD_ARGS( (DEFAULT_MSG|"Custom failure message") ... ) +# If the variables to are all valid, then _FOUND +# will be set to TRUE. +# If DEFAULT_MSG is given as second argument, then the function will generate +# itself useful success and error messages. You can also supply a custom error message +# for the failure case. This is not recommended. +# +# The second mode is more powerful and also supports version checking: +# FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME [REQUIRED_VARS ...] +# [VERSION_VAR ] +# [HANDLE_COMPONENTS] +# [CONFIG_MODE] +# [FAIL_MESSAGE "Custom failure message"] ) +# +# As above, if through are all valid, _FOUND +# will be set to TRUE. +# After REQUIRED_VARS the variables which are required for this package are listed. +# Following VERSION_VAR the name of the variable can be specified which holds +# the version of the package which has been found. If this is done, this version +# will be checked against the (potentially) specified required version used +# in the find_package() call. The EXACT keyword is also handled. The default +# messages include information about the required version and the version +# which has been actually found, both if the version is ok or not. +# If the package supports components, use the HANDLE_COMPONENTS option to enable +# handling them. In this case, find_package_handle_standard_args() will report +# which components have been found and which are missing, and the _FOUND +# variable will be set to FALSE if any of the required components (i.e. not the +# ones listed after OPTIONAL_COMPONENTS) are missing. +# Use the option CONFIG_MODE if your FindXXX.cmake module is a wrapper for +# a find_package(... NO_MODULE) call. In this case VERSION_VAR will be set +# to _VERSION and the macro will automatically check whether the +# Config module was found. +# Via FAIL_MESSAGE a custom failure message can be specified, if this is not +# used, the default message will be displayed. +# +# Example for mode 1: +# +# FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 DEFAULT_MSG LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR) +# +# LibXml2 is considered to be found, if both LIBXML2_LIBRARY and +# LIBXML2_INCLUDE_DIR are valid. Then also LIBXML2_FOUND is set to TRUE. +# If it is not found and REQUIRED was used, it fails with FATAL_ERROR, +# independent whether QUIET was used or not. +# If it is found, success will be reported, including the content of . +# On repeated Cmake runs, the same message won't be printed again. +# +# Example for mode 2: +# +# FIND_PACKAGE_HANDLE_STANDARD_ARGS(BISON REQUIRED_VARS BISON_EXECUTABLE +# VERSION_VAR BISON_VERSION) +# In this case, BISON is considered to be found if the variable(s) listed +# after REQUIRED_VAR are all valid, i.e. BISON_EXECUTABLE in this case. +# Also the version of BISON will be checked by using the version contained +# in BISON_VERSION. +# Since no FAIL_MESSAGE is given, the default messages will be printed. +# +# Another example for mode 2: +# +# FIND_PACKAGE(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4) +# FIND_PACKAGE_HANDLE_STANDARD_ARGS(Automoc4 CONFIG_MODE) +# In this case, FindAutmoc4.cmake wraps a call to FIND_PACKAGE(Automoc4 NO_MODULE) +# and adds an additional search directory for automoc4. +# The following FIND_PACKAGE_HANDLE_STANDARD_ARGS() call produces a proper +# success/error message. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(FindPackageMessage) +INCLUDE(CMakeParseArguments) + +# internal helper macro +MACRO(_FPHSA_FAILURE_MESSAGE _msg) + IF (${_NAME}_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "${_msg}") + ELSE (${_NAME}_FIND_REQUIRED) + IF (NOT ${_NAME}_FIND_QUIETLY) + MESSAGE(STATUS "${_msg}") + ENDIF (NOT ${_NAME}_FIND_QUIETLY) + ENDIF (${_NAME}_FIND_REQUIRED) +ENDMACRO(_FPHSA_FAILURE_MESSAGE _msg) + + +# internal helper macro to generate the failure message when used in CONFIG_MODE: +MACRO(_FPHSA_HANDLE_FAILURE_CONFIG_MODE) + # _CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found: + IF(${_NAME}_CONFIG) + _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing: ${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})") + ELSE(${_NAME}_CONFIG) + # If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version. + # List them all in the error message: + IF(${_NAME}_CONSIDERED_CONFIGS) + SET(configsText "") + LIST(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount) + MATH(EXPR configsCount "${configsCount} - 1") + FOREACH(currentConfigIndex RANGE ${configsCount}) + LIST(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename) + LIST(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version) + SET(configsText "${configsText} ${filename} (version ${version})\n") + ENDFOREACH(currentConfigIndex) + _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:\n${configsText}") + + ELSE(${_NAME}_CONSIDERED_CONFIGS) + # Simple case: No Config-file was found at all: + _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}") + ENDIF(${_NAME}_CONSIDERED_CONFIGS) + ENDIF(${_NAME}_CONFIG) +ENDMACRO(_FPHSA_HANDLE_FAILURE_CONFIG_MODE) + + +FUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG) + +# set up the arguments for CMAKE_PARSE_ARGUMENTS and check whether we are in +# new extended or in the "old" mode: + SET(options CONFIG_MODE HANDLE_COMPONENTS) + SET(oneValueArgs FAIL_MESSAGE VERSION_VAR) + SET(multiValueArgs REQUIRED_VARS) + SET(_KEYWORDS_FOR_EXTENDED_MODE ${options} ${oneValueArgs} ${multiValueArgs} ) + LIST(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX) + + IF(${INDEX} EQUAL -1) + SET(FPHSA_FAIL_MESSAGE ${_FIRST_ARG}) + SET(FPHSA_REQUIRED_VARS ${ARGN}) + SET(FPHSA_VERSION_VAR) + ELSE(${INDEX} EQUAL -1) + + CMAKE_PARSE_ARGUMENTS(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${_FIRST_ARG} ${ARGN}) + + IF(FPHSA_UNPARSED_ARGUMENTS) + MESSAGE(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"") + ENDIF(FPHSA_UNPARSED_ARGUMENTS) + + IF(NOT FPHSA_FAIL_MESSAGE) + SET(FPHSA_FAIL_MESSAGE "DEFAULT_MSG") + ENDIF(NOT FPHSA_FAIL_MESSAGE) + ENDIF(${INDEX} EQUAL -1) + +# now that we collected all arguments, process them + + IF("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG") + SET(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}") + ENDIF("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG") + + # In config-mode, we rely on the variable _CONFIG, which is set by find_package() + # when it successfully found the config-file, including version checking: + IF(FPHSA_CONFIG_MODE) + LIST(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG) + LIST(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS) + SET(FPHSA_VERSION_VAR ${_NAME}_VERSION) + ENDIF(FPHSA_CONFIG_MODE) + + IF(NOT FPHSA_REQUIRED_VARS) + MESSAGE(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()") + ENDIF(NOT FPHSA_REQUIRED_VARS) + + LIST(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR) + + STRING(TOUPPER ${_NAME} _NAME_UPPER) + STRING(TOLOWER ${_NAME} _NAME_LOWER) + + # collect all variables which were not found, so they can be printed, so the + # user knows better what went wrong (#6375) + SET(MISSING_VARS "") + SET(DETAILS "") + SET(${_NAME_UPPER}_FOUND TRUE) + # check if all passed variables are valid + FOREACH(_CURRENT_VAR ${FPHSA_REQUIRED_VARS}) + IF(NOT ${_CURRENT_VAR}) + SET(${_NAME_UPPER}_FOUND FALSE) + SET(MISSING_VARS "${MISSING_VARS} ${_CURRENT_VAR}") + ELSE(NOT ${_CURRENT_VAR}) + SET(DETAILS "${DETAILS}[${${_CURRENT_VAR}}]") + ENDIF(NOT ${_CURRENT_VAR}) + ENDFOREACH(_CURRENT_VAR) + + # component handling + UNSET(FOUND_COMPONENTS_MSG) + UNSET(MISSING_COMPONENTS_MSG) + + IF(FPHSA_HANDLE_COMPONENTS) + FOREACH(comp ${${_NAME}_FIND_COMPONENTS}) + IF(${_NAME}_${comp}_FOUND) + + IF(NOT DEFINED FOUND_COMPONENTS_MSG) + SET(FOUND_COMPONENTS_MSG "found components: ") + ENDIF() + SET(FOUND_COMPONENTS_MSG "${FOUND_COMPONENTS_MSG} ${comp}") + + ELSE() + + IF(NOT DEFINED MISSING_COMPONENTS_MSG) + SET(MISSING_COMPONENTS_MSG "missing components: ") + ENDIF() + SET(MISSING_COMPONENTS_MSG "${MISSING_COMPONENTS_MSG} ${comp}") + + IF(${_NAME}_FIND_REQUIRED_${comp}) + SET(${_NAME_UPPER}_FOUND FALSE) + SET(MISSING_VARS "${MISSING_VARS} ${comp}") + ENDIF() + + ENDIF() + ENDFOREACH(comp) + SET(COMPONENT_MSG "${FOUND_COMPONENTS_MSG} ${MISSING_COMPONENTS_MSG}") + SET(DETAILS "${DETAILS}[c${COMPONENT_MSG}]") + ENDIF(FPHSA_HANDLE_COMPONENTS) + + # version handling: + SET(VERSION_MSG "") + SET(VERSION_OK TRUE) + SET(VERSION ${${FPHSA_VERSION_VAR}} ) + IF (${_NAME}_FIND_VERSION) + + IF(VERSION) + + IF(${_NAME}_FIND_VERSION_EXACT) # exact version required + IF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}") + SET(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is exact version \"${${_NAME}_FIND_VERSION}\"") + SET(VERSION_OK FALSE) + ELSE (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}") + SET(VERSION_MSG "(found suitable exact version \"${VERSION}\")") + ENDIF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}") + + ELSE(${_NAME}_FIND_VERSION_EXACT) # minimum version specified: + IF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}") + SET(VERSION_MSG "Found unsuitable version \"${VERSION}\", but required is at least \"${${_NAME}_FIND_VERSION}\"") + SET(VERSION_OK FALSE) + ELSE ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}") + SET(VERSION_MSG "(found suitable version \"${VERSION}\", required is \"${${_NAME}_FIND_VERSION}\")") + ENDIF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}") + ENDIF(${_NAME}_FIND_VERSION_EXACT) + + ELSE(VERSION) + + # if the package was not found, but a version was given, add that to the output: + IF(${_NAME}_FIND_VERSION_EXACT) + SET(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")") + ELSE(${_NAME}_FIND_VERSION_EXACT) + SET(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")") + ENDIF(${_NAME}_FIND_VERSION_EXACT) + + ENDIF(VERSION) + ELSE (${_NAME}_FIND_VERSION) + IF(VERSION) + SET(VERSION_MSG "(found version \"${VERSION}\")") + ENDIF(VERSION) + ENDIF (${_NAME}_FIND_VERSION) + + IF(VERSION_OK) + SET(DETAILS "${DETAILS}[v${VERSION}(${${_NAME}_FIND_VERSION})]") + ELSE(VERSION_OK) + SET(${_NAME_UPPER}_FOUND FALSE) + ENDIF(VERSION_OK) + + + # print the result: + IF (${_NAME_UPPER}_FOUND) + FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG} ${COMPONENT_MSG}" "${DETAILS}") + ELSE (${_NAME_UPPER}_FOUND) + + IF(FPHSA_CONFIG_MODE) + _FPHSA_HANDLE_FAILURE_CONFIG_MODE() + ELSE(FPHSA_CONFIG_MODE) + IF(NOT VERSION_OK) + _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (found ${${_FIRST_REQUIRED_VAR}})") + ELSE(NOT VERSION_OK) + _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing: ${MISSING_VARS}) ${VERSION_MSG}") + ENDIF(NOT VERSION_OK) + ENDIF(FPHSA_CONFIG_MODE) + + ENDIF (${_NAME_UPPER}_FOUND) + + SET(${_NAME_UPPER}_FOUND ${${_NAME_UPPER}_FOUND} PARENT_SCOPE) + +ENDFUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _FIRST_ARG) diff --git a/Modules/FindPackageMessage.cmake b/Modules/FindPackageMessage.cmake new file mode 100644 index 0000000..48d3472 --- /dev/null +++ b/Modules/FindPackageMessage.cmake @@ -0,0 +1,49 @@ +# FIND_PACKAGE_MESSAGE( "message for user" "find result details") +# +# This macro is intended to be used in FindXXX.cmake modules files. +# It will print a message once for each unique find result. +# This is useful for telling the user where a package was found. +# The first argument specifies the name (XXX) of the package. +# The second argument specifies the message to display. +# The third argument lists details about the find result so that +# if they change the message will be displayed again. +# The macro also obeys the QUIET argument to the find_package command. +# +# Example: +# +# IF(X11_FOUND) +# FIND_PACKAGE_MESSAGE(X11 "Found X11: ${X11_X11_LIB}" +# "[${X11_X11_LIB}][${X11_INCLUDE_DIR}]") +# ELSE(X11_FOUND) +# ... +# ENDIF(X11_FOUND) + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FUNCTION(FIND_PACKAGE_MESSAGE pkg msg details) + # Avoid printing a message repeatedly for the same find result. + IF(NOT ${pkg}_FIND_QUIETLY) + STRING(REGEX REPLACE "[\n]" "" details "${details}") + SET(DETAILS_VAR FIND_PACKAGE_MESSAGE_DETAILS_${pkg}) + IF(NOT "${details}" STREQUAL "${${DETAILS_VAR}}") + # The message has not yet been printed. + MESSAGE(STATUS "${msg}") + + # Save the find details in the cache to avoid printing the same + # message again. + SET("${DETAILS_VAR}" "${details}" + CACHE INTERNAL "Details about finding ${pkg}") + ENDIF(NOT "${details}" STREQUAL "${${DETAILS_VAR}}") + ENDIF(NOT ${pkg}_FIND_QUIETLY) +ENDFUNCTION(FIND_PACKAGE_MESSAGE) diff --git a/Modules/FindPerl.cmake b/Modules/FindPerl.cmake new file mode 100644 index 0000000..ae686df --- /dev/null +++ b/Modules/FindPerl.cmake @@ -0,0 +1,83 @@ +# - Find perl +# this module looks for Perl +# +# PERL_EXECUTABLE - the full path to perl +# PERL_FOUND - If false, don't attempt to use perl. +# PERL_VERSION_STRING - version of perl found (since CMake 2.8.8) + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(FindCygwin) + +SET(PERL_POSSIBLE_BIN_PATHS + ${CYGWIN_INSTALL_PATH}/bin + ) + +IF(WIN32) + GET_FILENAME_COMPONENT( + ActivePerl_CurrentVersion + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl;CurrentVersion]" + NAME) + SET(PERL_POSSIBLE_BIN_PATHS ${PERL_POSSIBLE_BIN_PATHS} + "C:/Perl/bin" + [HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActivePerl\\${ActivePerl_CurrentVersion}]/bin + ) +ENDIF(WIN32) + +FIND_PROGRAM(PERL_EXECUTABLE + NAMES perl + PATHS ${PERL_POSSIBLE_BIN_PATHS} + ) + +IF(PERL_EXECUTABLE) + ### PERL_VERSION + EXECUTE_PROCESS( + COMMAND + ${PERL_EXECUTABLE} -V:version + OUTPUT_VARIABLE + PERL_VERSION_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_VERSION_RESULT_VARIABLE + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF(NOT PERL_VERSION_RESULT_VARIABLE AND NOT PERL_VERSION_OUTPUT_VARIABLE MATCHES "^version='UNKNOWN'") + STRING(REGEX REPLACE "version='([^']+)'.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE}) + ELSE() + EXECUTE_PROCESS( + COMMAND ${PERL_EXECUTABLE} -v + OUTPUT_VARIABLE PERL_VERSION_OUTPUT_VARIABLE + RESULT_VARIABLE PERL_VERSION_RESULT_VARIABLE + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + IF(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl.*[ \\(]v([0-9\\._]+)[ \\)]") + STRING(REGEX REPLACE ".*This is perl.*[ \\(]v([0-9\\._]+)[ \\)].*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE}) + ELSEIF(NOT PERL_VERSION_RESULT_VARIABLE AND PERL_VERSION_OUTPUT_VARIABLE MATCHES "This is perl, version ([0-9\\._]+) +") + STRING(REGEX REPLACE ".*This is perl, version ([0-9\\._]+) +.*" "\\1" PERL_VERSION_STRING ${PERL_VERSION_OUTPUT_VARIABLE}) + ENDIF() + ENDIF() +ENDIF(PERL_EXECUTABLE) + +# Deprecated settings for compatibility with CMake1.4 +SET(PERL ${PERL_EXECUTABLE}) + +# handle the QUIETLY and REQUIRED arguments and set PERL_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Perl + REQUIRED_VARS PERL_EXECUTABLE + VERSION_VAR PERL_VERSION_STRING) + +MARK_AS_ADVANCED(PERL_EXECUTABLE) diff --git a/Modules/FindPerlLibs.cmake b/Modules/FindPerlLibs.cmake new file mode 100644 index 0000000..b2ffd3c --- /dev/null +++ b/Modules/FindPerlLibs.cmake @@ -0,0 +1,255 @@ +# - Find Perl libraries +# This module finds if PERL is installed and determines where the include files +# and libraries are. It also determines what the name of the library is. This +# code sets the following variables: +# +# PERLLIBS_FOUND = True if perl.h & libperl were found +# PERL_INCLUDE_PATH = path to where perl.h is found +# PERL_LIBRARY = path to libperl +# PERL_EXECUTABLE = full path to the perl binary +# +# The minimum required version of Perl can be specified using the +# standard syntax, e.g. FIND_PACKAGE(PerlLibs 6.0) +# +# The following variables are also available if needed +# (introduced after CMake 2.6.4) +# +# PERL_SITESEARCH = path to the sitesearch install dir +# PERL_SITELIB = path to the sitelib install directory +# PERL_VENDORARCH = path to the vendor arch install directory +# PERL_VENDORLIB = path to the vendor lib install directory +# PERL_ARCHLIB = path to the arch lib install directory +# PERL_PRIVLIB = path to the priv lib install directory +# PERL_EXTRA_C_FLAGS = Compilation flags used to build perl +# + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# Copyright 2008 Andreas Schneider +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# find the perl executable +include(FindPerl) + +if (PERL_EXECUTABLE) + ### PERL_PREFIX + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:prefix + OUTPUT_VARIABLE + PERL_PREFIX_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_PREFIX_RESULT_VARIABLE + ) + + if (NOT PERL_PREFIX_RESULT_VARIABLE) + string(REGEX REPLACE "prefix='([^']+)'.*" "\\1" PERL_PREFIX ${PERL_PREFIX_OUTPUT_VARIABLE}) + endif (NOT PERL_PREFIX_RESULT_VARIABLE) + + ### PERL_ARCHNAME + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:archname + OUTPUT_VARIABLE + PERL_ARCHNAME_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_ARCHNAME_RESULT_VARIABLE + ) + if (NOT PERL_ARCHNAME_RESULT_VARIABLE) + string(REGEX REPLACE "archname='([^']+)'.*" "\\1" PERL_ARCHNAME ${PERL_ARCHNAME_OUTPUT_VARIABLE}) + endif (NOT PERL_ARCHNAME_RESULT_VARIABLE) + + + + ### PERL_EXTRA_C_FLAGS + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:cppflags + OUTPUT_VARIABLE + PERL_CPPFLAGS_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_CPPFLAGS_RESULT_VARIABLE + ) + if (NOT PERL_CPPFLAGS_RESULT_VARIABLE) + string(REGEX REPLACE "cppflags='([^']+)'.*" "\\1" PERL_EXTRA_C_FLAGS ${PERL_CPPFLAGS_OUTPUT_VARIABLE}) + endif (NOT PERL_CPPFLAGS_RESULT_VARIABLE) + + ### PERL_SITESEARCH + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installsitesearch + OUTPUT_VARIABLE + PERL_SITESEARCH_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_SITESEARCH_RESULT_VARIABLE + ) + if (NOT PERL_SITESEARCH_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITESEARCH ${PERL_SITESEARCH_OUTPUT_VARIABLE}) + file(TO_CMAKE_PATH "${PERL_SITESEARCH}" PERL_SITESEARCH) + endif (NOT PERL_SITESEARCH_RESULT_VARIABLE) + + ### PERL_SITELIB + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installsitelib + OUTPUT_VARIABLE + PERL_SITELIB_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_SITELIB_RESULT_VARIABLE + ) + if (NOT PERL_SITELIB_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_SITELIB ${PERL_SITELIB_OUTPUT_VARIABLE}) + file(TO_CMAKE_PATH "${PERL_SITELIB}" PERL_SITELIB) + endif (NOT PERL_SITELIB_RESULT_VARIABLE) + + ### PERL_VENDORARCH + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installvendorarch + OUTPUT_VARIABLE + PERL_VENDORARCH_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_VENDORARCH_RESULT_VARIABLE + ) + if (NOT PERL_VENDORARCH_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORARCH ${PERL_VENDORARCH_OUTPUT_VARIABLE}) + file(TO_CMAKE_PATH "${PERL_VENDORARCH}" PERL_VENDORARCH) + endif (NOT PERL_VENDORARCH_RESULT_VARIABLE) + + ### PERL_VENDORLIB + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installvendorlib + OUTPUT_VARIABLE + PERL_VENDORLIB_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_VENDORLIB_RESULT_VARIABLE + ) + if (NOT PERL_VENDORLIB_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_VENDORLIB ${PERL_VENDORLIB_OUTPUT_VARIABLE}) + file(TO_CMAKE_PATH "${PERL_VENDORLIB}" PERL_VENDORLIB) + endif (NOT PERL_VENDORLIB_RESULT_VARIABLE) + + macro(perl_adjust_darwin_lib_variable varname) + string( TOUPPER PERL_${varname} FINDPERL_VARNAME ) + string( TOLOWER install${varname} PERL_VARNAME ) + + if (NOT PERL_MINUSV_OUTPUT_VARIABLE) + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V + OUTPUT_VARIABLE + PERL_MINUSV_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_MINUSV_RESULT_VARIABLE + ) + endif() + + if (NOT PERL_MINUSV_RESULT_VARIABLE) + string(REGEX MATCH "(${PERL_VARNAME}.*points? to the Updates directory)" + PERL_NEEDS_ADJUSTMENT ${PERL_MINUSV_OUTPUT_VARIABLE}) + + if (PERL_NEEDS_ADJUSTMENT) + string(REGEX REPLACE "(.*)/Updates/" "/System/\\1/" ${FINDPERL_VARNAME} ${${FINDPERL_VARNAME}}) + endif (PERL_NEEDS_ADJUSTMENT) + + endif (NOT PERL_MINUSV_RESULT_VARIABLE) + endmacro() + + ### PERL_ARCHLIB + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installarchlib + OUTPUT_VARIABLE + PERL_ARCHLIB_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_ARCHLIB_RESULT_VARIABLE + ) + if (NOT PERL_ARCHLIB_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_ARCHLIB ${PERL_ARCHLIB_OUTPUT_VARIABLE}) + perl_adjust_darwin_lib_variable( ARCHLIB ) + file(TO_CMAKE_PATH "${PERL_ARCHLIB}" PERL_ARCHLIB) + endif (NOT PERL_ARCHLIB_RESULT_VARIABLE) + + ### PERL_PRIVLIB + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:installprivlib + OUTPUT_VARIABLE + PERL_PRIVLIB_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_PRIVLIB_RESULT_VARIABLE + ) + if (NOT PERL_PRIVLIB_RESULT_VARIABLE) + string(REGEX REPLACE "install[a-z]+='([^']+)'.*" "\\1" PERL_PRIVLIB ${PERL_PRIVLIB_OUTPUT_VARIABLE}) + perl_adjust_darwin_lib_variable( PRIVLIB ) + file(TO_CMAKE_PATH "${PERL_PRIVLIB}" PERL_PRIVLIB) + endif (NOT PERL_PRIVLIB_RESULT_VARIABLE) + + ### PERL_POSSIBLE_LIBRARY_NAMES + execute_process( + COMMAND + ${PERL_EXECUTABLE} -V:libperl + OUTPUT_VARIABLE + PERL_LIBRARY_OUTPUT_VARIABLE + RESULT_VARIABLE + PERL_LIBRARY_RESULT_VARIABLE + ) + if (NOT PERL_LIBRARY_RESULT_VARIABLE) + string(REGEX REPLACE "libperl='([^']+)'.*" "\\1" PERL_POSSIBLE_LIBRARY_NAMES ${PERL_LIBRARY_OUTPUT_VARIABLE}) + else (NOT PERL_LIBRARY_RESULT_VARIABLE) + set(PERL_POSSIBLE_LIBRARY_NAMES perl${PERL_VERSION_STRING} perl) + endif (NOT PERL_LIBRARY_RESULT_VARIABLE) + + ### PERL_INCLUDE_PATH + find_path(PERL_INCLUDE_PATH + NAMES + perl.h + PATHS + ${PERL_ARCHLIB}/CORE + /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE + /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE + /usr/lib/perl5/${PERL_VERSION_STRING}/CORE + /usr/lib/perl/${PERL_VERSION_STRING}/CORE + ) + + ### PERL_LIBRARY + find_library(PERL_LIBRARY + NAMES + ${PERL_POSSIBLE_LIBRARY_NAMES} + PATHS + ${PERL_ARCHLIB}/CORE + /usr/lib/perl5/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE + /usr/lib/perl/${PERL_VERSION_STRING}/${PERL_ARCHNAME}/CORE + /usr/lib/perl5/${PERL_VERSION_STRING}/CORE + /usr/lib/perl/${PERL_VERSION_STRING}/CORE + ) + +endif (PERL_EXECUTABLE) + +# handle the QUIETLY and REQUIRED arguments and set PERLLIBS_FOUND to TRUE if +# all listed variables are TRUE +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +find_package_handle_standard_args(PerlLibs REQUIRED_VARS PERL_LIBRARY PERL_INCLUDE_PATH + VERSION_VAR PERL_VERSION_STRING) + +# Introduced after CMake 2.6.4 to bring module into compliance +set(PERL_INCLUDE_DIR ${PERL_INCLUDE_PATH}) +set(PERL_INCLUDE_DIRS ${PERL_INCLUDE_PATH}) +set(PERL_LIBRARIES ${PERL_LIBRARY}) +# For backward compatibility with CMake before 2.8.8 +set(PERL_VERSION ${PERL_VERSION_STRING}) + +mark_as_advanced( + PERL_INCLUDE_PATH + PERL_LIBRARY +) diff --git a/Modules/FindPhysFS.cmake b/Modules/FindPhysFS.cmake new file mode 100644 index 0000000..80dfd51 --- /dev/null +++ b/Modules/FindPhysFS.cmake @@ -0,0 +1,61 @@ +# Locate PhysFS library +# This module defines +# PHYSFS_LIBRARY, the name of the library to link against +# PHYSFS_FOUND, if false, do not try to link to PHYSFS +# PHYSFS_INCLUDE_DIR, where to find physfs.h +# +# $PHYSFSDIR is an environment variable that would +# correspond to the ./configure --prefix=$PHYSFSDIR +# used in building PHYSFS. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(PHYSFS_INCLUDE_DIR physfs.h + HINTS + $ENV{PHYSFSDIR} + PATH_SUFFIXES include/physfs include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +FIND_LIBRARY(PHYSFS_LIBRARY + NAMES physfs + HINTS + $ENV{PHYSFSDIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt +) + +# handle the QUIETLY and REQUIRED arguments and set PHYSFS_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(PhysFS DEFAULT_MSG PHYSFS_LIBRARY PHYSFS_INCLUDE_DIR) + diff --git a/Modules/FindPike.cmake b/Modules/FindPike.cmake new file mode 100644 index 0000000..125e428 --- /dev/null +++ b/Modules/FindPike.cmake @@ -0,0 +1,37 @@ +# - Find Pike +# This module finds if PIKE is installed and determines where the include files +# and libraries are. It also determines what the name of the library is. This +# code sets the following variables: +# +# PIKE_INCLUDE_PATH = path to where program.h is found +# PIKE_EXECUTABLE = full path to the pike binary +# + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FILE(GLOB PIKE_POSSIBLE_INCLUDE_PATHS + /usr/include/pike/* + /usr/local/include/pike/*) + +FIND_PATH(PIKE_INCLUDE_PATH program.h + ${PIKE_POSSIBLE_INCLUDE_PATHS}) + +FIND_PROGRAM(PIKE_EXECUTABLE + NAMES pike7.4 + ) + +MARK_AS_ADVANCED( + PIKE_EXECUTABLE + PIKE_INCLUDE_PATH + ) diff --git a/Modules/FindPkgConfig.cmake b/Modules/FindPkgConfig.cmake new file mode 100644 index 0000000..5d93ab1 --- /dev/null +++ b/Modules/FindPkgConfig.cmake @@ -0,0 +1,369 @@ +# - a pkg-config module for CMake +# +# Usage: +# pkg_check_modules( [REQUIRED] [QUIET] []*) +# checks for all the given modules +# +# pkg_search_module( [REQUIRED] [QUIET] []*) +# checks for given modules and uses the first working one +# +# When the 'REQUIRED' argument was set, macros will fail with an error +# when module(s) could not be found +# +# When the 'QUIET' argument is set, no status messages will be printed. +# +# It sets the following variables: +# PKG_CONFIG_FOUND ... true if pkg-config works on the system +# PKG_CONFIG_EXECUTABLE ... pathname of the pkg-config program +# PKG_CONFIG_VERSION_STRING ... the version of the pkg-config program found +# (since CMake 2.8.8) +# PKG_CONFIG_FOUND ... if pkg-config executable was found +# +# For the following variables two sets of values exist; first one is the +# common one and has the given PREFIX. The second set contains flags +# which are given out when pkgconfig was called with the '--static' +# option. +# _FOUND ... set to 1 if module(s) exist +# _LIBRARIES ... only the libraries (w/o the '-l') +# _LIBRARY_DIRS ... the paths of the libraries (w/o the '-L') +# _LDFLAGS ... all required linker flags +# _LDFLAGS_OTHER ... all other linker flags +# _INCLUDE_DIRS ... the '-I' preprocessor flags (w/o the '-I') +# _CFLAGS ... all required cflags +# _CFLAGS_OTHER ... the other compiler flags +# +# = for common case +# = _STATIC for static linking +# +# There are some special variables whose prefix depends on the count +# of given modules. When there is only one module, stays +# unchanged. When there are multiple modules, the prefix will be +# changed to _: +# _VERSION ... version of the module +# _PREFIX ... prefix-directory of the module +# _INCLUDEDIR ... include-dir of the module +# _LIBDIR ... lib-dir of the module +# +# = when |MODULES| == 1, else +# = _ +# +# A parameter can have the following formats: +# {MODNAME} ... matches any version +# {MODNAME}>={VERSION} ... at least version is required +# {MODNAME}={VERSION} ... exactly version is required +# {MODNAME}<={VERSION} ... modules must not be newer than +# +# Examples +# pkg_check_modules (GLIB2 glib-2.0) +# +# pkg_check_modules (GLIB2 glib-2.0>=2.10) +# requires at least version 2.10 of glib2 and defines e.g. +# GLIB2_VERSION=2.10.3 +# +# pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0) +# requires both glib2 and gtk2, and defines e.g. +# FOO_glib-2.0_VERSION=2.10.3 +# FOO_gtk+-2.0_VERSION=2.8.20 +# +# pkg_check_modules (XRENDER REQUIRED xrender) +# defines e.g.: +# XRENDER_LIBRARIES=Xrender;X11 +# XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp +# +# pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2) + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Enrico Scholz +# +# 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.) + +### Common stuff #### +set(PKG_CONFIG_VERSION 1) + +find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config DOC "pkg-config executable") +mark_as_advanced(PKG_CONFIG_EXECUTABLE) + +if (PKG_CONFIG_EXECUTABLE) + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --version + OUTPUT_VARIABLE PKG_CONFIG_VERSION_STRING + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) +endif (PKG_CONFIG_EXECUTABLE) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +find_package_handle_standard_args(PkgConfig + REQUIRED_VARS PKG_CONFIG_EXECUTABLE + VERSION_VAR PKG_CONFIG_VERSION_STRING) + +# Unsets the given variables +macro(_pkgconfig_unset var) + set(${var} "" CACHE INTERNAL "") +endmacro(_pkgconfig_unset) + +macro(_pkgconfig_set var value) + set(${var} ${value} CACHE INTERNAL "") +endmacro(_pkgconfig_set) + +# Invokes pkgconfig, cleans up the result and sets variables +macro(_pkgconfig_invoke _pkglist _prefix _varname _regexp) + set(_pkgconfig_invoke_result) + + execute_process( + COMMAND ${PKG_CONFIG_EXECUTABLE} ${ARGN} ${_pkglist} + OUTPUT_VARIABLE _pkgconfig_invoke_result + RESULT_VARIABLE _pkgconfig_failed) + + if (_pkgconfig_failed) + set(_pkgconfig_${_varname} "") + _pkgconfig_unset(${_prefix}_${_varname}) + else(_pkgconfig_failed) + string(REGEX REPLACE "[\r\n]" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") + string(REGEX REPLACE " +$" "" _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") + + if (NOT ${_regexp} STREQUAL "") + string(REGEX REPLACE "${_regexp}" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") + endif(NOT ${_regexp} STREQUAL "") + + separate_arguments(_pkgconfig_invoke_result) + + #message(STATUS " ${_varname} ... ${_pkgconfig_invoke_result}") + set(_pkgconfig_${_varname} ${_pkgconfig_invoke_result}) + _pkgconfig_set(${_prefix}_${_varname} "${_pkgconfig_invoke_result}") + endif(_pkgconfig_failed) +endmacro(_pkgconfig_invoke) + +# Invokes pkgconfig two times; once without '--static' and once with +# '--static' +macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp) + _pkgconfig_invoke("${_pkglist}" ${_prefix} ${_varname} "${cleanup_regexp}" ${ARGN}) + _pkgconfig_invoke("${_pkglist}" ${_prefix} STATIC_${_varname} "${cleanup_regexp}" --static ${ARGN}) +endmacro(_pkgconfig_invoke_dyn) + +# Splits given arguments into options and a package list +macro(_pkgconfig_parse_options _result _is_req _is_silent) + set(${_is_req} 0) + set(${_is_silent} 0) + + foreach(_pkg ${ARGN}) + if (_pkg STREQUAL "REQUIRED") + set(${_is_req} 1) + endif (_pkg STREQUAL "REQUIRED") + if (_pkg STREQUAL "QUIET") + set(${_is_silent} 1) + endif (_pkg STREQUAL "QUIET") + endforeach(_pkg ${ARGN}) + + set(${_result} ${ARGN}) + list(REMOVE_ITEM ${_result} "REQUIRED") + list(REMOVE_ITEM ${_result} "QUIET") +endmacro(_pkgconfig_parse_options) + +### +macro(_pkg_check_modules_internal _is_required _is_silent _prefix) + _pkgconfig_unset(${_prefix}_FOUND) + _pkgconfig_unset(${_prefix}_VERSION) + _pkgconfig_unset(${_prefix}_PREFIX) + _pkgconfig_unset(${_prefix}_INCLUDEDIR) + _pkgconfig_unset(${_prefix}_LIBDIR) + _pkgconfig_unset(${_prefix}_LIBS) + _pkgconfig_unset(${_prefix}_LIBS_L) + _pkgconfig_unset(${_prefix}_LIBS_PATHS) + _pkgconfig_unset(${_prefix}_LIBS_OTHER) + _pkgconfig_unset(${_prefix}_CFLAGS) + _pkgconfig_unset(${_prefix}_CFLAGS_I) + _pkgconfig_unset(${_prefix}_CFLAGS_OTHER) + _pkgconfig_unset(${_prefix}_STATIC_LIBDIR) + _pkgconfig_unset(${_prefix}_STATIC_LIBS) + _pkgconfig_unset(${_prefix}_STATIC_LIBS_L) + _pkgconfig_unset(${_prefix}_STATIC_LIBS_PATHS) + _pkgconfig_unset(${_prefix}_STATIC_LIBS_OTHER) + _pkgconfig_unset(${_prefix}_STATIC_CFLAGS) + _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_I) + _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_OTHER) + + # create a better addressable variable of the modules and calculate its size + set(_pkg_check_modules_list ${ARGN}) + list(LENGTH _pkg_check_modules_list _pkg_check_modules_cnt) + + if(PKG_CONFIG_EXECUTABLE) + # give out status message telling checked module + if (NOT ${_is_silent}) + if (_pkg_check_modules_cnt EQUAL 1) + message(STATUS "checking for module '${_pkg_check_modules_list}'") + else(_pkg_check_modules_cnt EQUAL 1) + message(STATUS "checking for modules '${_pkg_check_modules_list}'") + endif(_pkg_check_modules_cnt EQUAL 1) + endif(NOT ${_is_silent}) + + set(_pkg_check_modules_packages) + set(_pkg_check_modules_failed) + + # iterate through module list and check whether they exist and match the required version + foreach (_pkg_check_modules_pkg ${_pkg_check_modules_list}) + set(_pkg_check_modules_exist_query) + + # check whether version is given + if (_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") + string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\1" _pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}") + string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\2" _pkg_check_modules_pkg_op "${_pkg_check_modules_pkg}") + string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\3" _pkg_check_modules_pkg_ver "${_pkg_check_modules_pkg}") + else(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") + set(_pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}") + set(_pkg_check_modules_pkg_op) + set(_pkg_check_modules_pkg_ver) + endif(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") + + # handle the operands + if (_pkg_check_modules_pkg_op STREQUAL ">=") + list(APPEND _pkg_check_modules_exist_query --atleast-version) + endif(_pkg_check_modules_pkg_op STREQUAL ">=") + + if (_pkg_check_modules_pkg_op STREQUAL "=") + list(APPEND _pkg_check_modules_exist_query --exact-version) + endif(_pkg_check_modules_pkg_op STREQUAL "=") + + if (_pkg_check_modules_pkg_op STREQUAL "<=") + list(APPEND _pkg_check_modules_exist_query --max-version) + endif(_pkg_check_modules_pkg_op STREQUAL "<=") + + # create the final query which is of the format: + # * --atleast-version + # * --exact-version + # * --max-version + # * --exists + if (_pkg_check_modules_pkg_op) + list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_ver}") + else(_pkg_check_modules_pkg_op) + list(APPEND _pkg_check_modules_exist_query --exists) + endif(_pkg_check_modules_pkg_op) + + _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_VERSION) + _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_PREFIX) + _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_INCLUDEDIR) + _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_LIBDIR) + + list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_name}") + list(APPEND _pkg_check_modules_packages "${_pkg_check_modules_pkg_name}") + + # execute the query + execute_process( + COMMAND ${PKG_CONFIG_EXECUTABLE} ${_pkg_check_modules_exist_query} + RESULT_VARIABLE _pkgconfig_retval) + + # evaluate result and tell failures + if (_pkgconfig_retval) + if(NOT ${_is_silent}) + message(STATUS " package '${_pkg_check_modules_pkg}' not found") + endif(NOT ${_is_silent}) + + set(_pkg_check_modules_failed 1) + endif(_pkgconfig_retval) + endforeach(_pkg_check_modules_pkg) + + if(_pkg_check_modules_failed) + # fail when requested + if (${_is_required}) + message(SEND_ERROR "A required package was not found") + endif (${_is_required}) + else(_pkg_check_modules_failed) + # when we are here, we checked whether requested modules + # exist. Now, go through them and set variables + + _pkgconfig_set(${_prefix}_FOUND 1) + list(LENGTH _pkg_check_modules_packages pkg_count) + + # iterate through all modules again and set individual variables + foreach (_pkg_check_modules_pkg ${_pkg_check_modules_packages}) + # handle case when there is only one package required + if (pkg_count EQUAL 1) + set(_pkg_check_prefix "${_prefix}") + else(pkg_count EQUAL 1) + set(_pkg_check_prefix "${_prefix}_${_pkg_check_modules_pkg}") + endif(pkg_count EQUAL 1) + + _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION "" --modversion ) + _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" PREFIX "" --variable=prefix ) + _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" INCLUDEDIR "" --variable=includedir ) + _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" LIBDIR "" --variable=libdir ) + + if (NOT ${_is_silent}) + message(STATUS " found ${_pkg_check_modules_pkg}, version ${_pkgconfig_VERSION}") + endif (NOT ${_is_silent}) + endforeach(_pkg_check_modules_pkg) + + # set variables which are combined for multiple modules + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARIES "(^| )-l" --libs-only-l ) + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARY_DIRS "(^| )-L" --libs-only-L ) + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS "" --libs ) + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS_OTHER "" --libs-only-other ) + + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" INCLUDE_DIRS "(^| )-I" --cflags-only-I ) + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS "" --cflags ) + _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS_OTHER "" --cflags-only-other ) + endif(_pkg_check_modules_failed) + else(PKG_CONFIG_EXECUTABLE) + if (${_is_required}) + message(SEND_ERROR "pkg-config tool not found") + endif (${_is_required}) + endif(PKG_CONFIG_EXECUTABLE) +endmacro(_pkg_check_modules_internal) + +### +### User visible macros start here +### + +### +macro(pkg_check_modules _prefix _module0) + # check cached value + if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) + _pkgconfig_parse_options (_pkg_modules _pkg_is_required _pkg_is_silent "${_module0}" ${ARGN}) + _pkg_check_modules_internal("${_pkg_is_required}" "${_pkg_is_silent}" "${_prefix}" ${_pkg_modules}) + + _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) + endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) +endmacro(pkg_check_modules) + +### +macro(pkg_search_module _prefix _module0) + # check cached value + if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) + set(_pkg_modules_found 0) + _pkgconfig_parse_options(_pkg_modules_alt _pkg_is_required _pkg_is_silent "${_module0}" ${ARGN}) + + if (NOT ${_pkg_is_silent}) + message(STATUS "checking for one of the modules '${_pkg_modules_alt}'") + endif (NOT ${_pkg_is_silent}) + + # iterate through all modules and stop at the first working one. + foreach(_pkg_alt ${_pkg_modules_alt}) + if(NOT _pkg_modules_found) + _pkg_check_modules_internal(0 1 "${_prefix}" "${_pkg_alt}") + endif(NOT _pkg_modules_found) + + if (${_prefix}_FOUND) + set(_pkg_modules_found 1) + endif(${_prefix}_FOUND) + endforeach(_pkg_alt) + + if (NOT ${_prefix}_FOUND) + if(${_pkg_is_required}) + message(SEND_ERROR "None of the required '${_pkg_modules_alt}' found") + endif(${_pkg_is_required}) + endif(NOT ${_prefix}_FOUND) + + _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) + endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) +endmacro(pkg_search_module) + +### Local Variables: +### mode: cmake +### End: diff --git a/Modules/FindPostgreSQL.cmake b/Modules/FindPostgreSQL.cmake new file mode 100644 index 0000000..94e5676 --- /dev/null +++ b/Modules/FindPostgreSQL.cmake @@ -0,0 +1,172 @@ +# - Find the PostgreSQL installation. +# In Windows, we make the assumption that, if the PostgreSQL files are installed, the default directory +# will be C:\Program Files\PostgreSQL. +# +# This module defines +# PostgreSQL_LIBRARIES - the PostgreSQL libraries needed for linking +# PostgreSQL_INCLUDE_DIRS - the directories of the PostgreSQL headers +# PostgreSQL_VERSION_STRING - the version of PostgreSQL found (since CMake 2.8.8) + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# ---------------------------------------------------------------------------- +# History: +# This module is derived from the module originally found in the VTK source tree. +# +# ---------------------------------------------------------------------------- +# Note: +# PostgreSQL_ADDITIONAL_VERSIONS is a variable that can be used to set the +# version mumber of the implementation of PostgreSQL. +# In Windows the default installation of PostgreSQL uses that as part of the path. +# E.g C:\Program Files\PostgreSQL\8.4. +# Currently, the following version numbers are known to this module: +# "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0" +# +# To use this variable just do something like this: +# set(PostgreSQL_ADDITIONAL_VERSIONS "9.2" "8.4.4") +# before calling FIND_PACKAGE(PostgreSQL) in your CMakeLists.txt file. +# This will mean that the versions you set here will be found first in the order +# specified before the default ones are searched. +# +# ---------------------------------------------------------------------------- +# You may need to manually set: +# PostgreSQL_INCLUDE_DIR - the path to where the PostgreSQL include files are. +# PostgreSQL_LIBRARY_DIR - The path to where the PostgreSQL library files are. +# If FindPostgreSQL.cmake cannot find the include files or the library files. +# +# ---------------------------------------------------------------------------- +# The following variables are set if PostgreSQL is found: +# PostgreSQL_FOUND - Set to true when PostgreSQL is found. +# PostgreSQL_INCLUDE_DIRS - Include directories for PostgreSQL +# PostgreSQL_LIBRARY_DIRS - Link directories for PostgreSQL libraries +# PostgreSQL_LIBRARIES - The PostgreSQL libraries. +# +# ---------------------------------------------------------------------------- +# If you have installed PostgreSQL in a non-standard location. +# (Please note that in the following comments, it is assumed that +# points to the root directory of the include directory of PostgreSQL.) +# Then you have three options. +# 1) After CMake runs, set PostgreSQL_INCLUDE_DIR to /include and +# PostgreSQL_LIBRARY_DIR to wherever the library pq (or libpq in windows) is +# 2) Use CMAKE_INCLUDE_PATH to set a path to /PostgreSQL<-version>. This will allow find_path() +# to locate PostgreSQL_INCLUDE_DIR by utilizing the PATH_SUFFIXES option. e.g. In your CMakeLists.txt file +# SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "/include") +# 3) Set an environment variable called ${PostgreSQL_ROOT} that points to the root of where you have +# installed PostgreSQL, e.g. . +# +# ---------------------------------------------------------------------------- + +set(PostgreSQL_INCLUDE_PATH_DESCRIPTION "top-level directory containing the PostgreSQL include directories. E.g /usr/local/include/PostgreSQL/8.4 or C:/Program Files/PostgreSQL/8.4/include") +set(PostgreSQL_INCLUDE_DIR_MESSAGE "Set the PostgreSQL_INCLUDE_DIR cmake cache entry to the ${PostgreSQL_INCLUDE_PATH_DESCRIPTION}") +set(PostgreSQL_LIBRARY_PATH_DESCRIPTION "top-level directory containing the PostgreSQL libraries.") +set(PostgreSQL_LIBRARY_DIR_MESSAGE "Set the PostgreSQL_LIBRARY_DIR cmake cache entry to the ${PostgreSQL_LIBRARY_PATH_DESCRIPTION}") +set(PostgreSQL_ROOT_DIR_MESSAGE "Set the PostgreSQL_ROOT system variable to where PostgreSQL is found on the machine E.g C:/Program Files/PostgreSQL/8.4") + + +set(PostgreSQL_ROOT_DIRECTORIES $ENV{PostgreSQL_ROOT}) +if(PostgreSQL_ROOT_DIRECTORIES) + file(TO_CMAKE_PATH ${PostgreSQL_ROOT_DIRECTORIES} PostgreSQL_ROOT_DIRECTORIES) +endif(PostgreSQL_ROOT_DIRECTORIES) + +set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS} + "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0") + +# Define additional search paths for root directories. +if ( WIN32 ) + foreach (suffix ${PostgreSQL_KNOWN_VERSIONS} ) + set(PostgreSQL_ADDITIONAL_SEARCH_PATHS ${PostgreSQL_ADDITIONAL_SEARCH_PATHS} "C:/Program Files/PostgreSQL/${suffix}" ) + endforeach(suffix) +endif( WIN32 ) +set( PostgreSQL_ROOT_DIRECTORIES + ${PostgreSQL_ROOT_DIRECTORIES} + ${PostgreSQL_ROOT} + ${PostgreSQL_ADDITIONAL_SEARCH_PATHS} +) + +# +# Look for an installation. +# +find_path(PostgreSQL_INCLUDE_DIR + NAMES libpq-fe.h + PATHS + # Look in other places. + ${PostgreSQL_ROOT_DIRECTORIES} + PATH_SUFFIXES + pgsql + postgresql + include + # Help the user find it if we cannot. + DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}" +) + +find_path(PostgreSQL_TYPE_INCLUDE_DIR + NAMES catalog/pg_type.h + PATHS + # Look in other places. + ${PostgreSQL_ROOT_DIRECTORIES} + PATH_SUFFIXES + pgsql/server + postgresql/server + include/server + # Help the user find it if we cannot. + DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}" +) + +# The PostgreSQL library. +set (PostgreSQL_LIBRARY_TO_FIND pq) +# Setting some more prefixes for the library +set (PostgreSQL_LIB_PREFIX "") +if ( WIN32 ) + set (PostgreSQL_LIB_PREFIX ${PostgreSQL_LIB_PREFIX} "lib") + set ( PostgreSQL_LIBRARY_TO_FIND ${PostgreSQL_LIB_PREFIX}${PostgreSQL_LIBRARY_TO_FIND}) +endif() + +find_library( PostgreSQL_LIBRARY + NAMES ${PostgreSQL_LIBRARY_TO_FIND} + PATHS + ${PostgreSQL_ROOT_DIRECTORIES} + PATH_SUFFIXES + lib +) +get_filename_component(PostgreSQL_LIBRARY_DIR ${PostgreSQL_LIBRARY} PATH) + +if (PostgreSQL_INCLUDE_DIR AND EXISTS "${PostgreSQL_INCLUDE_DIR}/pg_config.h") + file(STRINGS "${PostgreSQL_INCLUDE_DIR}/pg_config.h" pgsql_version_str + REGEX "^#define[\t ]+PG_VERSION[\t ]+\".*\"") + + string(REGEX REPLACE "^#define[\t ]+PG_VERSION[\t ]+\"([^\"]*)\".*" "\\1" + PostgreSQL_VERSION_STRING "${pgsql_version_str}") + unset(pgsql_version_str) +endif() + +# Did we find anything? +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PostgreSQL + REQUIRED_VARS PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR + VERSION_VAR PostgreSQL_VERSION_STRING) +set( PostgreSQL_FOUND ${POSTGRESQL_FOUND}) + +# Now try to get the include and library path. +if(PostgreSQL_FOUND) + + set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR} ${PostgreSQL_TYPE_INCLUDE_DIR} ) + set(PostgreSQL_LIBRARY_DIRS ${PostgreSQL_LIBRARY_DIR} ) + set(PostgreSQL_LIBRARIES ${PostgreSQL_LIBRARY_TO_FIND}) + + #message("Final PostgreSQL include dir: ${PostgreSQL_INCLUDE_DIRS}") + #message("Final PostgreSQL library dir: ${PostgreSQL_LIBRARY_DIRS}") + #message("Final PostgreSQL libraries: ${PostgreSQL_LIBRARIES}") +endif(PostgreSQL_FOUND) + +mark_as_advanced(PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR PostgreSQL_LIBRARY ) diff --git a/Modules/FindProducer.cmake b/Modules/FindProducer.cmake new file mode 100644 index 0000000..39a9436 --- /dev/null +++ b/Modules/FindProducer.cmake @@ -0,0 +1,82 @@ +# Though Producer isn't directly part of OpenSceneGraph, its primary user +# is OSG so I consider this part of the Findosg* suite used to find +# OpenSceneGraph components. You'll notice that I accept OSGDIR as an +# environment path. +# +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL (and OpenThreads?) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate Producer +# This module defines +# PRODUCER_LIBRARY +# PRODUCER_FOUND, if false, do not try to link to Producer +# PRODUCER_INCLUDE_DIR, where to find the headers +# +# $PRODUCER_DIR is an environment variable that would +# correspond to the ./configure --prefix=$PRODUCER_DIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include + +# Try the user's environment request before anything else. +FIND_PATH(PRODUCER_INCLUDE_DIR Producer/CameraGroup + HINTS + $ENV{PRODUCER_DIR} + $ENV{OSG_DIR} + $ENV{OSGDIR} + PATH_SUFFIXES include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/include + /usr/include + /sw/include # Fink + /opt/local/include # DarwinPorts + /opt/csw/include # Blastwave + /opt/include + [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;OpenThreads_ROOT]/include + [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;OSG_ROOT]/include +) + +FIND_LIBRARY(PRODUCER_LIBRARY + NAMES Producer + HINTS + $ENV{PRODUCER_DIR} + $ENV{OSG_DIR} + $ENV{OSGDIR} + PATH_SUFFIXES lib64 lib + PATHS + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt +) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Producer DEFAULT_MSG + PRODUCER_LIBRARY PRODUCER_INCLUDE_DIR) diff --git a/Modules/FindProtobuf.cmake b/Modules/FindProtobuf.cmake new file mode 100644 index 0000000..1e1e493 --- /dev/null +++ b/Modules/FindProtobuf.cmake @@ -0,0 +1,218 @@ +# Locate and configure the Google Protocol Buffers library. +# +# The following variables can be set and are optional: +# +# PROTOBUF_SRC_ROOT_FOLDER - When compiling with MSVC, if this cache variable is set +# the protobuf-default VS project build locations +# (vsprojects/Debug & vsprojects/Release) will be searched +# for libraries and binaries. +# +# PROTOBUF_IMPORT_DIRS - List of additional directories to be searched for +# imported .proto files. (New in CMake 2.8.8) +# +# Defines the following variables: +# +# PROTOBUF_FOUND - Found the Google Protocol Buffers library (libprotobuf & header files) +# PROTOBUF_INCLUDE_DIRS - Include directories for Google Protocol Buffers +# PROTOBUF_LIBRARIES - The protobuf libraries +# [New in CMake 2.8.5] +# PROTOBUF_PROTOC_LIBRARIES - The protoc libraries +# PROTOBUF_LITE_LIBRARIES - The protobuf-lite libraries +# +# The following cache variables are also available to set or use: +# PROTOBUF_LIBRARY - The protobuf library +# PROTOBUF_PROTOC_LIBRARY - The protoc library +# PROTOBUF_INCLUDE_DIR - The include directory for protocol buffers +# PROTOBUF_PROTOC_EXECUTABLE - The protoc compiler +# [New in CMake 2.8.5] +# PROTOBUF_LIBRARY_DEBUG - The protobuf library (debug) +# PROTOBUF_PROTOC_LIBRARY_DEBUG - The protoc library (debug) +# PROTOBUF_LITE_LIBRARY - The protobuf lite library +# PROTOBUF_LITE_LIBRARY_DEBUG - The protobuf lite library (debug) +# +# ==================================================================== +# Example: +# +# find_package(Protobuf REQUIRED) +# include_directories(${PROTOBUF_INCLUDE_DIRS}) +# +# include_directories(${CMAKE_CURRENT_BINARY_DIR}) +# PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS foo.proto) +# add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS}) +# target_link_libraries(bar ${PROTOBUF_LIBRARIES}) +# +# NOTE: You may need to link against pthreads, depending +# on the platform. +# +# NOTE: The PROTOBUF_GENERATE_CPP macro & add_executable() or add_library() +# calls only work properly within the same directory. +# +# ==================================================================== +# +# PROTOBUF_GENERATE_CPP (public function) +# SRCS = Variable to define with autogenerated +# source files +# HDRS = Variable to define with autogenerated +# header files +# ARGN = proto files +# +# ==================================================================== + + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2009-2011 Philip Lowman +# Copyright 2008 Esben Mose Hansen, Ange Optimization ApS +# +# 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.) + +function(PROTOBUF_GENERATE_CPP SRCS HDRS) + if(NOT ARGN) + message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files") + return() + endif(NOT ARGN) + + if(PROTOBUF_GENERATE_CPP_APPEND_PATH) + # Create an include path for each file specified + foreach(FIL ${ARGN}) + get_filename_component(ABS_FIL ${FIL} ABSOLUTE) + get_filename_component(ABS_PATH ${ABS_FIL} PATH) + list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${ABS_PATH}) + endif() + endforeach() + else() + set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) + endif() + + if(DEFINED PROTOBUF_IMPORT_DIRS) + foreach(DIR ${PROTOBUF_IMPORT_DIRS}) + get_filename_component(ABS_PATH ${DIR} ABSOLUTE) + list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${ABS_PATH}) + endif() + endforeach() + endif() + + set(${SRCS}) + set(${HDRS}) + foreach(FIL ${ARGN}) + get_filename_component(ABS_FIL ${FIL} ABSOLUTE) + get_filename_component(FIL_WE ${FIL} NAME_WE) + + list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc") + list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h") + + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc" + "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h" + COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} + ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL} + DEPENDS ${ABS_FIL} + COMMENT "Running C++ protocol buffer compiler on ${FIL}" + VERBATIM ) + endforeach() + + set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE) + set(${SRCS} ${${SRCS}} PARENT_SCOPE) + set(${HDRS} ${${HDRS}} PARENT_SCOPE) +endfunction() + +# Internal function: search for normal library as well as a debug one +# if the debug one is specified also include debug/optimized keywords +# in *_LIBRARIES variable +function(_protobuf_find_libraries name filename) + find_library(${name}_LIBRARY + NAMES ${filename} + PATHS ${PROTOBUF_SRC_ROOT_FOLDER}/vsprojects/Release) + mark_as_advanced(${name}_LIBRARY) + + find_library(${name}_LIBRARY_DEBUG + NAMES ${filename} + PATHS ${PROTOBUF_SRC_ROOT_FOLDER}/vsprojects/Debug) + mark_as_advanced(${name}_LIBRARY_DEBUG) + + if(NOT ${name}_LIBRARY_DEBUG) + # There is no debug library + set(${name}_LIBRARY_DEBUG ${${name}_LIBRARY} PARENT_SCOPE) + set(${name}_LIBRARIES ${${name}_LIBRARY} PARENT_SCOPE) + else() + # There IS a debug library + set(${name}_LIBRARIES + optimized ${${name}_LIBRARY} + debug ${${name}_LIBRARY_DEBUG} + PARENT_SCOPE + ) + endif() +endfunction() + +# +# Main. +# + +# By default have PROTOBUF_GENERATE_CPP macro pass -I to protoc +# for each directory where a proto file is referenced. +if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH) + set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE) +endif() + + +# Google's provided vcproj files generate libraries with a "lib" +# prefix on Windows +if(MSVC) + set(PROTOBUF_ORIG_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}") + set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "") + + find_path(PROTOBUF_SRC_ROOT_FOLDER protobuf.pc.in) +endif() + +# The Protobuf library +_protobuf_find_libraries(PROTOBUF protobuf) +#DOC "The Google Protocol Buffers RELEASE Library" + +_protobuf_find_libraries(PROTOBUF_LITE protobuf-lite) + +# The Protobuf Protoc Library +_protobuf_find_libraries(PROTOBUF_PROTOC protoc) + +# Restore original find library prefixes +if(MSVC) + set(CMAKE_FIND_LIBRARY_PREFIXES "${PROTOBUF_ORIG_FIND_LIBRARY_PREFIXES}") +endif() + + +# Find the include directory +find_path(PROTOBUF_INCLUDE_DIR + google/protobuf/service.h + PATHS ${PROTOBUF_SRC_ROOT_FOLDER}/src +) +mark_as_advanced(PROTOBUF_INCLUDE_DIR) + +# Find the protoc Executable +find_program(PROTOBUF_PROTOC_EXECUTABLE + NAMES protoc + DOC "The Google Protocol Buffers Compiler" + PATHS + ${PROTOBUF_SRC_ROOT_FOLDER}/vsprojects/Release + ${PROTOBUF_SRC_ROOT_FOLDER}/vsprojects/Debug +) +mark_as_advanced(PROTOBUF_PROTOC_EXECUTABLE) + + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROTOBUF DEFAULT_MSG + PROTOBUF_LIBRARY PROTOBUF_INCLUDE_DIR) + +if(PROTOBUF_FOUND) + set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIR}) +endif() diff --git a/Modules/FindPythonInterp.cmake b/Modules/FindPythonInterp.cmake new file mode 100644 index 0000000..a131c5f --- /dev/null +++ b/Modules/FindPythonInterp.cmake @@ -0,0 +1,141 @@ +# - Find python interpreter +# This module finds if Python interpreter is installed and determines where the +# executables are. This code sets the following variables: +# +# PYTHONINTERP_FOUND - Was the Python executable found +# PYTHON_EXECUTABLE - path to the Python interpreter +# +# PYTHON_VERSION_STRING - Python version found e.g. 2.5.2 +# PYTHON_VERSION_MAJOR - Python major version found e.g. 2 +# PYTHON_VERSION_MINOR - Python minor version found e.g. 5 +# PYTHON_VERSION_PATCH - Python patch version found e.g. 2 +# +# 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 +# Copyright 2012 Rolf Eike Beer +# +# 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.) + +unset(_Python_NAMES) + +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(PythonInterp_FIND_VERSION) + if(PythonInterp_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$") + string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*" "\\1" _PYTHON_FIND_MAJ_MIN "${PythonInterp_FIND_VERSION}") + string(REGEX REPLACE "^([0-9]+).*" "\\1" _PYTHON_FIND_MAJ "${_PYTHON_FIND_MAJ_MIN}") + list(APPEND _Python_NAMES python${_PYTHON_FIND_MAJ_MIN} python${_PYTHON_FIND_MAJ}) + unset(_PYTHON_FIND_OTHER_VERSIONS) + if(NOT PythonInterp_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 PythonInterp_FIND_VERSION_EXACT) + unset(_PYTHON_FIND_MAJ_MIN) + unset(_PYTHON_FIND_MAJ) + else(PythonInterp_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$") + list(APPEND _Python_NAMES python${PythonInterp_FIND_VERSION}) + set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON${PythonInterp_FIND_VERSION}_VERSIONS}) + endif(PythonInterp_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$") +else(PythonInterp_FIND_VERSION) + set(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON3_VERSIONS} ${_PYTHON2_VERSIONS} ${_PYTHON1_VERSIONS}) +endif(PythonInterp_FIND_VERSION) + +list(APPEND _Python_NAMES python) + +# Search for the current active python version first +find_program(PYTHON_EXECUTABLE NAMES ${_Python_NAMES}) + +# 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 + ${Python_ADDITIONAL_VERSIONS} + ${_PYTHON_FIND_OTHER_VERSIONS} + ) + +unset(_PYTHON_FIND_OTHER_VERSIONS) +unset(_PYTHON1_VERSIONS) +unset(_PYTHON2_VERSIONS) +unset(_PYTHON3_VERSIONS) + +# Search for newest python version if python executable isn't found +if(NOT PYTHON_EXECUTABLE) + foreach(_CURRENT_VERSION ${_Python_VERSIONS}) + set(_Python_NAMES python${_CURRENT_VERSION}) + if(WIN32) + list(APPEND _Python_NAMES python) + endif() + find_program(PYTHON_EXECUTABLE + NAMES ${_Python_NAMES} + PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath] + ) + endforeach() +endif() + +# determine python version string +if(PYTHON_EXECUTABLE) + 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 + 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 + 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) + unset(_VERSION) +endif(PYTHON_EXECUTABLE) + +# handle the QUIETLY and REQUIRED arguments and set PYTHONINTERP_FOUND to TRUE if +# all listed variables are TRUE +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonInterp REQUIRED_VARS PYTHON_EXECUTABLE VERSION_VAR PYTHON_VERSION_STRING) + +mark_as_advanced(PYTHON_EXECUTABLE) diff --git a/Modules/FindPythonLibs.cmake b/Modules/FindPythonLibs.cmake new file mode 100644 index 0000000..fcd0838 --- /dev/null +++ b/Modules/FindPythonLibs.cmake @@ -0,0 +1,257 @@ +# - Find python libraries +# This module finds if Python is installed and determines where the +# include files and libraries are. It also determines what the name of +# the library is. This code sets the following variables: +# +# PYTHONLIBS_FOUND - have the Python libs been found +# 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 (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. +# +# 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(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 + ${Python_ADDITIONAL_VERSIONS} + ${_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}) + IF(WIN32) + FIND_LIBRARY(PYTHON_DEBUG_LIBRARY + NAMES python${_CURRENT_VERSION_NO_DOTS}_d python + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs + ) + ENDIF(WIN32) + + FIND_LIBRARY(PYTHON_LIBRARY + NAMES python${_CURRENT_VERSION_NO_DOTS} python${_CURRENT_VERSION} + PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs + # Avoid finding the .dll in the PATH. We want the .lib. + NO_SYSTEM_ENVIRONMENT_PATH + ) + # Look for the static library in the Python config directory + FIND_LIBRARY(PYTHON_LIBRARY + NAMES python${_CURRENT_VERSION_NO_DOTS} python${_CURRENT_VERSION} + # Avoid finding the .dll in the PATH. We want the .lib. + NO_SYSTEM_ENVIRONMENT_PATH + # This is where the static library is usually located + PATH_SUFFIXES python${_CURRENT_VERSION}/config + ) + + # For backward compatibility, honour value of PYTHON_INCLUDE_PATH, if + # PYTHON_INCLUDE_DIR is not set. + IF(DEFINED PYTHON_INCLUDE_PATH AND NOT DEFINED PYTHON_INCLUDE_DIR) + SET(PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_PATH}" CACHE PATH + "Path to where Python.h is found" FORCE) + ENDIF(DEFINED PYTHON_INCLUDE_PATH AND NOT DEFINED PYTHON_INCLUDE_DIR) + + SET(PYTHON_FRAMEWORK_INCLUDES) + IF(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR) + FOREACH(dir ${Python_FRAMEWORKS}) + SET(PYTHON_FRAMEWORK_INCLUDES ${PYTHON_FRAMEWORK_INCLUDES} + ${dir}/Versions/${_CURRENT_VERSION}/include/python${_CURRENT_VERSION}) + ENDFOREACH(dir) + ENDIF(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR) + + FIND_PATH(PYTHON_INCLUDE_DIR + NAMES Python.h + PATHS + ${PYTHON_FRAMEWORK_INCLUDES} + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include + PATH_SUFFIXES + python${_CURRENT_VERSION} + ) + + # For backward compatibility, set PYTHON_INCLUDE_PATH, but make it internal. + 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( + PYTHON_DEBUG_LIBRARY + PYTHON_LIBRARY + PYTHON_INCLUDE_DIR +) + +# We use PYTHON_INCLUDE_DIR, PYTHON_LIBRARY and PYTHON_DEBUG_LIBRARY for the +# cache entries because they are meant to specify the location of a single +# library. We now set the variables listed by the documentation for this +# module. +SET(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}") +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 + REQUIRED_VARS PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS + VERSION_VAR PYTHONLIBS_VERSION_STRING) + +# PYTHON_ADD_MODULE( src1 src2 ... srcN) is used to build modules for python. +# PYTHON_WRITE_MODULES_HEADER() writes a header file you can include +# in your sources to initialize the static python modules +FUNCTION(PYTHON_ADD_MODULE _NAME ) + GET_PROPERTY(_TARGET_SUPPORTS_SHARED_LIBS + GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS) + OPTION(PYTHON_ENABLE_MODULE_${_NAME} "Add module ${_NAME}" TRUE) + OPTION(PYTHON_MODULE_${_NAME}_BUILD_SHARED + "Add module ${_NAME} shared" ${_TARGET_SUPPORTS_SHARED_LIBS}) + + # Mark these options as advanced + MARK_AS_ADVANCED(PYTHON_ENABLE_MODULE_${_NAME} + PYTHON_MODULE_${_NAME}_BUILD_SHARED) + + IF(PYTHON_ENABLE_MODULE_${_NAME}) + IF(PYTHON_MODULE_${_NAME}_BUILD_SHARED) + SET(PY_MODULE_TYPE MODULE) + ELSE(PYTHON_MODULE_${_NAME}_BUILD_SHARED) + SET(PY_MODULE_TYPE STATIC) + SET_PROPERTY(GLOBAL APPEND PROPERTY PY_STATIC_MODULES_LIST ${_NAME}) + ENDIF(PYTHON_MODULE_${_NAME}_BUILD_SHARED) + + SET_PROPERTY(GLOBAL APPEND PROPERTY PY_MODULES_LIST ${_NAME}) + ADD_LIBRARY(${_NAME} ${PY_MODULE_TYPE} ${ARGN}) +# TARGET_LINK_LIBRARIES(${_NAME} ${PYTHON_LIBRARIES}) + + IF(PYTHON_MODULE_${_NAME}_BUILD_SHARED) + SET_TARGET_PROPERTIES(${_NAME} PROPERTIES PREFIX "${PYTHON_MODULE_PREFIX}") + IF(WIN32 AND NOT CYGWIN) + SET_TARGET_PROPERTIES(${_NAME} PROPERTIES SUFFIX ".pyd") + ENDIF(WIN32 AND NOT CYGWIN) + ENDIF(PYTHON_MODULE_${_NAME}_BUILD_SHARED) + + ENDIF(PYTHON_ENABLE_MODULE_${_NAME}) +ENDFUNCTION(PYTHON_ADD_MODULE) + +FUNCTION(PYTHON_WRITE_MODULES_HEADER _filename) + + GET_PROPERTY(PY_STATIC_MODULES_LIST GLOBAL PROPERTY PY_STATIC_MODULES_LIST) + + GET_FILENAME_COMPONENT(_name "${_filename}" NAME) + STRING(REPLACE "." "_" _name "${_name}") + STRING(TOUPPER ${_name} _nameUpper) + SET(_filename ${CMAKE_CURRENT_BINARY_DIR}/${_filename}) + + SET(_filenameTmp "${_filename}.in") + FILE(WRITE ${_filenameTmp} "/*Created by cmake, do not edit, changes will be lost*/\n") + FILE(APPEND ${_filenameTmp} +"#ifndef ${_nameUpper} +#define ${_nameUpper} + +#include + +#ifdef __cplusplus +extern \"C\" { +#endif /* __cplusplus */ + +") + + FOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) + FILE(APPEND ${_filenameTmp} "extern void init${PYTHON_MODULE_PREFIX}${_currentModule}(void);\n\n") + ENDFOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) + + FILE(APPEND ${_filenameTmp} +"#ifdef __cplusplus +} +#endif /* __cplusplus */ + +") + + + FOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) + FILE(APPEND ${_filenameTmp} "int ${_name}_${_currentModule}(void) \n{\n static char name[]=\"${PYTHON_MODULE_PREFIX}${_currentModule}\"; return PyImport_AppendInittab(name, init${PYTHON_MODULE_PREFIX}${_currentModule});\n}\n\n") + ENDFOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) + + FILE(APPEND ${_filenameTmp} "void ${_name}_LoadAllPythonModules(void)\n{\n") + FOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) + FILE(APPEND ${_filenameTmp} " ${_name}_${_currentModule}();\n") + ENDFOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) + FILE(APPEND ${_filenameTmp} "}\n\n") + FILE(APPEND ${_filenameTmp} "#ifndef EXCLUDE_LOAD_ALL_FUNCTION\nvoid CMakeLoadAllPythonModules(void)\n{\n ${_name}_LoadAllPythonModules();\n}\n#endif\n\n#endif\n") + +# with CONFIGURE_FILE() cmake complains that you may not use a file created using FILE(WRITE) as input file for CONFIGURE_FILE() + EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_filenameTmp}" "${_filename}" OUTPUT_QUIET ERROR_QUIET) + +ENDFUNCTION(PYTHON_WRITE_MODULES_HEADER) diff --git a/Modules/FindQt.cmake b/Modules/FindQt.cmake new file mode 100644 index 0000000..2b8dfd7 --- /dev/null +++ b/Modules/FindQt.cmake @@ -0,0 +1,160 @@ +# - Searches for all installed versions of QT. +# This should only be used if your project can work with multiple +# versions of QT. If not, you should just directly use FindQt4 or FindQt3. +# If multiple versions of QT are found on the machine, then +# The user must set the option DESIRED_QT_VERSION to the version +# they want to use. If only one version of qt is found on the machine, +# then the DESIRED_QT_VERSION is set to that version and the +# matching FindQt3 or FindQt4 module is included. +# Once the user sets DESIRED_QT_VERSION, then the FindQt3 or FindQt4 module +# is included. +# +# QT_REQUIRED if this is set to TRUE then if CMake can +# not find QT4 or QT3 an error is raised +# and a message is sent to the user. +# +# DESIRED_QT_VERSION OPTION is created +# QT4_INSTALLED is set to TRUE if qt4 is found. +# QT3_INSTALLED is set to TRUE if qt3 is found. + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# look for signs of qt3 installations +FILE(GLOB GLOB_TEMP_VAR /usr/lib/qt-3*/bin/qmake) +IF(GLOB_TEMP_VAR) + SET(QT3_INSTALLED TRUE) +ENDIF(GLOB_TEMP_VAR) +SET(GLOB_TEMP_VAR) + +FILE(GLOB GLOB_TEMP_VAR /usr/local/qt-x11-commercial-3*/bin/qmake) +IF(GLOB_TEMP_VAR) + SET(QT3_INSTALLED TRUE) +ENDIF(GLOB_TEMP_VAR) +SET(GLOB_TEMP_VAR) + +# look for qt4 installations +FILE(GLOB GLOB_TEMP_VAR /usr/local/qt-x11-commercial-4*/bin/qmake) +IF(GLOB_TEMP_VAR) + SET(QT4_INSTALLED TRUE) +ENDIF(GLOB_TEMP_VAR) +SET(GLOB_TEMP_VAR) + +FILE(GLOB GLOB_TEMP_VAR /usr/local/Trolltech/Qt-4*/bin/qmake) +IF(GLOB_TEMP_VAR) + SET(QT4_INSTALLED TRUE) +ENDIF(GLOB_TEMP_VAR) +SET(GLOB_TEMP_VAR) + +# now find qmake +FIND_PROGRAM(QT_QMAKE_EXECUTABLE_FINDQT NAMES qmake PATHS "${QT_SEARCH_PATH}/bin" "$ENV{QTDIR}/bin") +IF(QT_QMAKE_EXECUTABLE_FINDQT) + EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE_FINDQT} ARGS "-query QT_VERSION" + OUTPUT_VARIABLE QTVERSION) + IF(QTVERSION MATCHES "4.*") + SET(QT_QMAKE_EXECUTABLE ${QT_QMAKE_EXECUTABLE_FINDQT} CACHE PATH "QT4 qmake program.") + SET(QT4_INSTALLED TRUE) + ENDIF(QTVERSION MATCHES "4.*") + IF(QTVERSION MATCHES "Unknown") + SET(QT3_INSTALLED TRUE) + ENDIF(QTVERSION MATCHES "Unknown") +ENDIF(QT_QMAKE_EXECUTABLE_FINDQT) + +IF(QT_QMAKE_EXECUTABLE_FINDQT) + EXEC_PROGRAM( ${QT_QMAKE_EXECUTABLE_FINDQT} + ARGS "-query QT_INSTALL_HEADERS" + OUTPUT_VARIABLE qt_headers ) +ENDIF(QT_QMAKE_EXECUTABLE_FINDQT) + +FIND_FILE( QT4_QGLOBAL_H_FILE qglobal.h + "${QT_SEARCH_PATH}/Qt/include" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/include/Qt" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/include/Qt" + ${qt_headers}/Qt + $ENV{QTDIR}/include/Qt + /usr/local/qt/include/Qt + /usr/local/include/Qt + /usr/lib/qt/include/Qt + /usr/include/Qt + /usr/share/qt4/include/Qt + C:/Progra~1/qt/include/Qt ) + +IF(QT4_QGLOBAL_H_FILE) + SET(QT4_INSTALLED TRUE) +ENDIF(QT4_QGLOBAL_H_FILE) + +FIND_FILE( QT3_QGLOBAL_H_FILE qglobal.h + "${QT_SEARCH_PATH}/Qt/include" + "[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" + C:/Qt/3.3.3Educational/include + $ENV{QTDIR}/include + /usr/include/qt3/Qt + /usr/local/qt/include + /usr/local/include + /usr/lib/qt/include + /usr/include + /usr/share/qt3/include + C:/Progra~1/qt/include + /usr/include/qt3 ) + +IF(QT3_QGLOBAL_H_FILE) + SET(QT3_INSTALLED TRUE) +ENDIF(QT3_QGLOBAL_H_FILE) + +IF(QT3_INSTALLED AND QT4_INSTALLED ) + # force user to pick if we have both + SET(DESIRED_QT_VERSION 0 CACHE STRING "Pick a version of QT to use: 3 or 4") +ELSE(QT3_INSTALLED AND QT4_INSTALLED ) + # if only one found then pick that one + IF(QT3_INSTALLED) + SET(DESIRED_QT_VERSION 3 CACHE STRING "Pick a version of QT to use: 3 or 4") + ENDIF(QT3_INSTALLED) + IF(QT4_INSTALLED) + SET(DESIRED_QT_VERSION 4 CACHE STRING "Pick a version of QT to use: 3 or 4") + ENDIF(QT4_INSTALLED) +ENDIF(QT3_INSTALLED AND QT4_INSTALLED ) + +IF(DESIRED_QT_VERSION MATCHES 3) + SET(Qt3_FIND_REQUIRED ${Qt_FIND_REQUIRED}) + SET(Qt3_FIND_QUIETLY ${Qt_FIND_QUIETLY}) + INCLUDE(FindQt3) +ENDIF(DESIRED_QT_VERSION MATCHES 3) +IF(DESIRED_QT_VERSION MATCHES 4) + SET(Qt4_FIND_REQUIRED ${Qt_FIND_REQUIRED}) + SET(Qt4_FIND_QUIETLY ${Qt_FIND_QUIETLY}) + INCLUDE(FindQt4) +ENDIF(DESIRED_QT_VERSION MATCHES 4) + +IF(NOT QT3_INSTALLED AND NOT QT4_INSTALLED) + IF(QT_REQUIRED) + MESSAGE(SEND_ERROR "CMake was unable to find any QT versions, put qmake in your path, or set QT_QMAKE_EXECUTABLE.") + ENDIF(QT_REQUIRED) +ELSE(NOT QT3_INSTALLED AND NOT QT4_INSTALLED) + IF(NOT QT_FOUND AND NOT DESIRED_QT_VERSION) + IF(QT_REQUIRED) + MESSAGE(SEND_ERROR "Multiple versions of QT found please set DESIRED_QT_VERSION") + ELSE(QT_REQUIRED) + MESSAGE("Multiple versions of QT found please set DESIRED_QT_VERSION") + ENDIF(QT_REQUIRED) + ENDIF(NOT QT_FOUND AND NOT DESIRED_QT_VERSION) + IF(NOT QT_FOUND AND DESIRED_QT_VERSION) + IF(QT_REQUIRED) + MESSAGE(FATAL_ERROR "CMake was unable to find QT version: ${DESIRED_QT_VERSION}. Set advanced values QT_QMAKE_EXECUTABLE and QT${DESIRED_QT_VERSION}_QGLOBAL_FILE, if those are set then QT_QT_LIBRARY or QT_LIBRARY_DIR.") + ELSE(QT_REQUIRED) + MESSAGE( "CMake was unable to find desired QT version: ${DESIRED_QT_VERSION}. Set advanced values QT_QMAKE_EXECUTABLE and QT${DESIRED_QT_VERSION}_QGLOBAL_FILE.") + ENDIF(QT_REQUIRED) + ENDIF(NOT QT_FOUND AND DESIRED_QT_VERSION) +ENDIF(NOT QT3_INSTALLED AND NOT QT4_INSTALLED) +MARK_AS_ADVANCED(QT3_QGLOBAL_H_FILE QT4_QGLOBAL_H_FILE QT_QMAKE_EXECUTABLE_FINDQT) diff --git a/Modules/FindQt3.cmake b/Modules/FindQt3.cmake new file mode 100644 index 0000000..2d8dbde --- /dev/null +++ b/Modules/FindQt3.cmake @@ -0,0 +1,302 @@ +# - 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_VERSION_STRING - the version of Qt found +# +# If you need the multithreaded version of Qt, set QT_MT_REQUIRED to TRUE +# +# Also defined, but not for general use are: +# QT_MOC_EXECUTABLE, where to find the moc tool. +# QT_UIC_EXECUTABLE, where to find the uic tool. +# QT_QT_LIBRARY, where to find the Qt library. +# QT_QTMAIN_LIBRARY, where to find the qtmain +# library. This is only required by Qt3 on Windows. + +# These are around for backwards compatibility +# they will be set +# QT_WRAP_CPP, set true if QT_MOC_EXECUTABLE is found +# QT_WRAP_UI set true if QT_UIC_EXECUTABLE is found + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# If Qt4 has already been found, fail. +IF(QT4_FOUND) + IF(Qt3_FIND_REQUIRED) + MESSAGE( FATAL_ERROR "Qt3 and Qt4 cannot be used together in one project.") + ELSE(Qt3_FIND_REQUIRED) + IF(NOT Qt3_FIND_QUIETLY) + MESSAGE( STATUS "Qt3 and Qt4 cannot be used together in one project.") + ENDIF(NOT Qt3_FIND_QUIETLY) + RETURN() + ENDIF(Qt3_FIND_REQUIRED) +ENDIF(QT4_FOUND) + + +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} + /usr/local/qt/include + /usr/lib/qt/include + /usr/lib/qt3/include + /usr/include/qt + /usr/share/qt3/include + C:/Progra~1/qt/include + /usr/include/qt3 + ) + +# if qglobal.h is not in the qt_include_dir then set +# QT_INCLUDE_DIR to NOTFOUND +IF(NOT EXISTS ${QT_INCLUDE_DIR}/qglobal.h) + SET(QT_INCLUDE_DIR QT_INCLUDE_DIR-NOTFOUND CACHE PATH "path to Qt3 include directory" FORCE) +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]+[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/) +IF (QT_MT_REQUIRED) + FIND_LIBRARY(QT_QT_LIBRARY + NAMES + qt-mt qt-mt${qt_version_str_lib} qt-mtnc${qt_version_str_lib} + qt-mtedu${qt_version_str_lib} qt-mt230nc qt-mtnc321 qt-mt3 + PATHS + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/lib" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/lib" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/lib" + $ENV{QTDIR}/lib + ${GLOB_PATHS_LIB} + /usr/local/qt/lib + /usr/lib/qt/lib + /usr/lib/qt3/lib + /usr/lib/qt3/lib64 + /usr/share/qt3/lib + C:/Progra~1/qt/lib + ) + +ELSE (QT_MT_REQUIRED) + FIND_LIBRARY(QT_QT_LIBRARY + NAMES + qt qt-${qt_version_str_lib} qt-edu${qt_version_str_lib} + qt-mt qt-mt${qt_version_str_lib} qt-mtnc${qt_version_str_lib} + qt-mtedu${qt_version_str_lib} qt-mt230nc qt-mtnc321 qt-mt3 + PATHS + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/lib" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/lib" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/lib" + $ENV{QTDIR}/lib + ${GLOB_PATHS_LIB} + /usr/local/qt/lib + /usr/lib/qt/lib + /usr/lib/qt3/lib + /usr/lib/qt3/lib64 + /usr/share/qt3/lib + C:/Progra~1/qt/lib + ) +ENDIF (QT_MT_REQUIRED) + + +FIND_LIBRARY(QT_QASSISTANTCLIENT_LIBRARY + NAMES qassistantclient + PATHS + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/lib" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/lib" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/lib" + $ENV{QTDIR}/lib + ${GLOB_PATHS_LIB} + /usr/local/qt/lib + /usr/lib/qt3/lib + /usr/lib/qt3/lib64 + /usr/share/qt3/lib + C:/Progra~1/qt/lib + ) + +# qt 3 should prefer QTDIR over the PATH +FIND_PROGRAM(QT_MOC_EXECUTABLE + NAMES moc-qt3 moc + HINTS + $ENV{QTDIR}/bin + PATHS + "[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}/bin + ${GLOB_PATHS_BIN} + /usr/local/qt/bin + /usr/lib/qt/bin + /usr/lib/qt3/bin + /usr/share/qt3/bin + C:/Progra~1/qt/bin + /usr/X11R6/bin + ) + +IF(QT_MOC_EXECUTABLE) + SET ( QT_WRAP_CPP "YES") +ENDIF(QT_MOC_EXECUTABLE) + +# qt 3 should prefer QTDIR over the PATH +FIND_PROGRAM(QT_UIC_EXECUTABLE + NAMES uic-qt3 uic + HINTS + $ENV{QTDIR}/bin + PATHS + "[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" + ${GLOB_PATHS_BIN} + /usr/local/qt/bin + /usr/lib/qt/bin + /usr/lib/qt3/bin + /usr/share/qt3/bin + C:/Progra~1/qt/bin + /usr/X11R6/bin + ) + +IF(QT_UIC_EXECUTABLE) + SET ( QT_WRAP_UI "YES") +ENDIF(QT_UIC_EXECUTABLE) + +IF (WIN32) + FIND_LIBRARY(QT_QTMAIN_LIBRARY qtmain + HINTS + $ENV{QTDIR}/lib + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/lib" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/lib" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/lib" + PATHS + "$ENV{ProgramFiles}/qt/lib" + "C:/Program Files/qt/lib" + DOC "This Library is only needed by and included with Qt3 on MSWindows. It should be NOTFOUND, undefined or IGNORE otherwise." + ) +ENDIF (WIN32) + +#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 + REQUIRED_VARS QT_QT_LIBRARY QT_INCLUDE_DIR QT_MOC_EXECUTABLE + VERSION_VAR QT_VERSION_STRING) +SET(QT_FOUND ${QT3_FOUND} ) + +IF(QT_FOUND) + SET( QT_LIBRARIES ${QT_LIBRARIES} ${QT_QT_LIBRARY} ) + SET( QT_DEFINITIONS "") + + IF (WIN32 AND NOT CYGWIN) + IF (QT_QTMAIN_LIBRARY) + # for version 3 + SET (QT_DEFINITIONS -DQT_DLL -DQT_THREAD_SUPPORT -DNO_DEBUG) + SET (QT_LIBRARIES imm32.lib ${QT_QT_LIBRARY} ${QT_QTMAIN_LIBRARY} ) + SET (QT_LIBRARIES ${QT_LIBRARIES} winmm wsock32) + ELSE (QT_QTMAIN_LIBRARY) + # for version 2 + SET (QT_LIBRARIES imm32.lib ws2_32.lib ${QT_QT_LIBRARY} ) + ENDIF (QT_QTMAIN_LIBRARY) + ELSE (WIN32 AND NOT CYGWIN) + SET (QT_LIBRARIES ${QT_QT_LIBRARY} ) + + SET (QT_DEFINITIONS -DQT_SHARED -DQT_NO_DEBUG) + IF(QT_QT_LIBRARY MATCHES "qt-mt") + SET (QT_DEFINITIONS ${QT_DEFINITIONS} -DQT_THREAD_SUPPORT -D_REENTRANT) + ENDIF(QT_QT_LIBRARY MATCHES "qt-mt") + + ENDIF (WIN32 AND NOT CYGWIN) + + IF (QT_QASSISTANTCLIENT_LIBRARY) + SET (QT_LIBRARIES ${QT_QASSISTANTCLIENT_LIBRARY} ${QT_LIBRARIES}) + ENDIF (QT_QASSISTANTCLIENT_LIBRARY) + + # Backwards compatibility for CMake1.4 and 1.2 + SET (QT_MOC_EXE ${QT_MOC_EXECUTABLE} ) + SET (QT_UIC_EXE ${QT_UIC_EXECUTABLE} ) + # for unix add X11 stuff + IF(UNIX) + FIND_PACKAGE(X11) + IF (X11_FOUND) + SET (QT_LIBRARIES ${QT_LIBRARIES} ${X11_LIBRARIES}) + ENDIF (X11_FOUND) + IF (CMAKE_DL_LIBS) + SET (QT_LIBRARIES ${QT_LIBRARIES} ${CMAKE_DL_LIBS}) + ENDIF (CMAKE_DL_LIBS) + ENDIF(UNIX) + IF(QT_QT_LIBRARY MATCHES "qt-mt") + FIND_PACKAGE(Threads) + SET(QT_LIBRARIES ${QT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) + ENDIF(QT_QT_LIBRARY MATCHES "qt-mt") +ENDIF(QT_FOUND) + +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..*") + SET(_QT_UIC_VERSION_3 TRUE) +ENDIF("${QTVERSION_UIC}" MATCHES ".* 3..*") + +SET(_QT_MOC_VERSION_3 FALSE) +IF("${QTVERSION_MOC}" MATCHES ".* 3..*") + SET(_QT_MOC_VERSION_3 TRUE) +ENDIF("${QTVERSION_MOC}" MATCHES ".* 3..*") + +SET(QT_WRAP_CPP FALSE) +IF (QT_MOC_EXECUTABLE AND _QT_MOC_VERSION_3) + SET ( QT_WRAP_CPP TRUE) +ENDIF (QT_MOC_EXECUTABLE AND _QT_MOC_VERSION_3) + +SET(QT_WRAP_UI FALSE) +IF (QT_UIC_EXECUTABLE AND _QT_UIC_VERSION_3) + SET ( QT_WRAP_UI TRUE) +ENDIF (QT_UIC_EXECUTABLE AND _QT_UIC_VERSION_3) + +MARK_AS_ADVANCED( + QT_INCLUDE_DIR + QT_QT_LIBRARY + QT_QTMAIN_LIBRARY + QT_QASSISTANTCLIENT_LIBRARY + QT_UIC_EXECUTABLE + QT_MOC_EXECUTABLE + QT_WRAP_CPP + QT_WRAP_UI + ) diff --git a/Modules/FindQt4.cmake b/Modules/FindQt4.cmake new file mode 100644 index 0000000..9b646b4 --- /dev/null +++ b/Modules/FindQt4.cmake @@ -0,0 +1,1187 @@ +# - Find QT 4 +# This module can be used to find Qt4. +# The most important issue is that the Qt4 qmake is available via the system path. +# This qmake is then used to detect basically everything else. +# This module defines a number of key variables and macros. +# The variable QT_USE_FILE is set which is the path to a CMake file that can be included +# to compile Qt 4 applications and libraries. It sets up the compilation +# environment for include directories, preprocessor defines and populates a +# QT_LIBRARIES variable. +# +# Typical usage could be something like: +# find_package(Qt4 4.4.3 REQUIRED QtCore QtGui QtXml) +# include(${QT_USE_FILE}) +# add_executable(myexe main.cpp) +# target_link_libraries(myexe ${QT_LIBRARIES}) +# +# The minimum required version can be specified using the standard find_package()-syntax +# (see example above). +# For compatibility with older versions of FindQt4.cmake it is also possible to +# set the variable QT_MIN_VERSION to the minimum required version of Qt4 before the +# find_package(Qt4) command. +# If both are used, the version used in the find_package() command overrides the +# one from QT_MIN_VERSION. +# +# When using the components argument, QT_USE_QT* variables are automatically set +# for the QT_USE_FILE to pick up. If one wishes to manually set them, the +# available ones to set include: +# QT_DONT_USE_QTCORE +# QT_DONT_USE_QTGUI +# QT_USE_QT3SUPPORT +# QT_USE_QTASSISTANT +# QT_USE_QAXCONTAINER +# QT_USE_QAXSERVER +# QT_USE_QTDESIGNER +# QT_USE_QTMOTIF +# QT_USE_QTMAIN +# QT_USE_QTMULTIMEDIA +# QT_USE_QTNETWORK +# QT_USE_QTNSPLUGIN +# QT_USE_QTOPENGL +# QT_USE_QTSQL +# QT_USE_QTXML +# QT_USE_QTSVG +# QT_USE_QTTEST +# QT_USE_QTUITOOLS +# QT_USE_QTDBUS +# QT_USE_QTSCRIPT +# QT_USE_QTASSISTANTCLIENT +# QT_USE_QTHELP +# QT_USE_QTWEBKIT +# QT_USE_QTXMLPATTERNS +# QT_USE_PHONON +# QT_USE_QTSCRIPTTOOLS +# QT_USE_QTDECLARATIVE +# +# QT_USE_IMPORTED_TARGETS +# If this variable is set to TRUE, FindQt4.cmake will create imported +# library targets for the various Qt libraries and set the +# library variables like QT_QTCORE_LIBRARY to point at these imported +# targets instead of the library file on disk. This provides much better +# handling of the release and debug versions of the Qt libraries and is +# also always backwards compatible, except for the case that dependencies +# of libraries are exported, these will then also list the names of the +# imported targets as dependency and not the file location on disk. This +# is much more flexible, but requires that FindQt4.cmake is executed before +# such an exported dependency file is processed. +# +# There are also some files that need processing by some Qt tools such as moc +# and uic. Listed below are macros that may be used to process those files. +# +# macro QT4_WRAP_CPP(outfiles inputfile ... OPTIONS ...) +# create moc code from a list of files containing Qt class with +# the Q_OBJECT declaration. Per-direcotry preprocessor definitions +# are also added. Options may be given to moc, such as those found +# when executing "moc -help". +# +# macro QT4_WRAP_UI(outfiles inputfile ... OPTIONS ...) +# create code from a list of Qt designer ui files. +# Options may be given to uic, such as those found +# when executing "uic -help" +# +# macro QT4_ADD_RESOURCES(outfiles inputfile ... OPTIONS ...) +# create code from a list of Qt resource files. +# Options may be given to rcc, such as those found +# when executing "rcc -help" +# +# macro QT4_GENERATE_MOC(inputfile outputfile ) +# creates a rule to run moc on infile and create outfile. +# Use this if for some reason QT4_WRAP_CPP() isn't appropriate, e.g. +# because you need a custom filename for the moc file or something similar. +# +# macro QT4_AUTOMOC(sourcefile1 sourcefile2 ... ) +# This macro is still experimental. +# It can be used to have moc automatically handled. +# So if you have the files foo.h and foo.cpp, and in foo.h a +# a class uses the Q_OBJECT macro, moc has to run on it. If you don't +# want to use QT4_WRAP_CPP() (which is reliable and mature), you can insert +# #include "foo.moc" +# in foo.cpp and then give foo.cpp as argument to QT4_AUTOMOC(). This will the +# scan all listed files at cmake-time for such included moc files and if it finds +# them cause a rule to be generated to run moc at build time on the +# accompanying header file foo.h. +# If a source file has the SKIP_AUTOMOC property set it will be ignored by this macro. +# +# macro QT4_ADD_DBUS_INTERFACE(outfiles interface basename) +# create a the interface header and implementation files with the +# given basename from the given interface xml file and add it to +# the list of sources +# +# macro QT4_ADD_DBUS_INTERFACES(outfiles inputfile ... ) +# create the interface header and implementation files +# for all listed interface xml files +# the name will be automatically determined from the name of the xml file +# +# macro QT4_ADD_DBUS_ADAPTOR(outfiles xmlfile parentheader parentclassname [basename] [classname]) +# create a dbus adaptor (header and implementation file) from the xml file +# describing the interface, and add it to the list of sources. The adaptor +# forwards the calls to a parent class, defined in parentheader and named +# parentclassname. The name of the generated files will be +# adaptor.{cpp,h} where basename defaults to the basename of the xml file. +# If is provided, then it will be used as the classname of the +# adaptor itself. +# +# macro QT4_GENERATE_DBUS_INTERFACE( header [interfacename] OPTIONS ...) +# generate the xml interface file from the given header. +# If the optional argument interfacename is omitted, the name of the +# interface file is constructed from the basename of the header with +# the suffix .xml appended. +# Options may be given to qdbuscpp2xml, such as those found when executing "qdbuscpp2xml --help" +# +# macro QT4_CREATE_TRANSLATION( qm_files directories ... sources ... +# ts_files ... OPTIONS ...) +# out: qm_files +# in: directories sources ts_files +# options: flags to pass to lupdate, such as -extensions to specify +# extensions for a directory scan. +# generates commands to create .ts (vie lupdate) and .qm +# (via lrelease) - files from directories and/or sources. The ts files are +# created and/or updated in the source tree (unless given with full paths). +# The qm files are generated in the build tree. +# Updating the translations can be done by adding the qm_files +# to the source list of your library/executable, so they are +# always updated, or by adding a custom target to control when +# they get updated/generated. +# +# macro QT4_ADD_TRANSLATION( qm_files ts_files ... ) +# out: qm_files +# in: ts_files +# generates commands to create .qm from .ts - files. The generated +# filenames can be found in qm_files. The ts_files +# must exists and are not updated in any way. +# +# +# Below is a detailed list of variables that FindQt4.cmake sets. +# QT_FOUND If false, don't try to use Qt. +# QT4_FOUND If false, don't try to use Qt 4. +# +# QT_VERSION_MAJOR The major version of Qt found. +# QT_VERSION_MINOR The minor version of Qt found. +# QT_VERSION_PATCH The patch version of Qt found. +# +# QT_EDITION Set to the edition of Qt (i.e. DesktopLight) +# QT_EDITION_DESKTOPLIGHT True if QT_EDITION == DesktopLight +# QT_QTCORE_FOUND True if QtCore was found. +# QT_QTGUI_FOUND True if QtGui was found. +# QT_QT3SUPPORT_FOUND True if Qt3Support was found. +# QT_QTASSISTANT_FOUND True if QtAssistant was found. +# QT_QTASSISTANTCLIENT_FOUND True if QtAssistantClient was found. +# QT_QAXCONTAINER_FOUND True if QAxContainer was found (Windows only). +# QT_QAXSERVER_FOUND True if QAxServer was found (Windows only). +# QT_QTDBUS_FOUND True if QtDBus was found. +# QT_QTDESIGNER_FOUND True if QtDesigner was found. +# QT_QTDESIGNERCOMPONENTS True if QtDesignerComponents was found. +# QT_QTHELP_FOUND True if QtHelp was found. +# QT_QTMOTIF_FOUND True if QtMotif was found. +# QT_QTMULTIMEDIA_FOUND True if QtMultimedia was found (since Qt 4.6.0). +# QT_QTNETWORK_FOUND True if QtNetwork was found. +# QT_QTNSPLUGIN_FOUND True if QtNsPlugin was found. +# QT_QTOPENGL_FOUND True if QtOpenGL was found. +# QT_QTSQL_FOUND True if QtSql was found. +# QT_QTSVG_FOUND True if QtSvg was found. +# QT_QTSCRIPT_FOUND True if QtScript was found. +# QT_QTSCRIPTTOOLS_FOUND True if QtScriptTools was found. +# QT_QTTEST_FOUND True if QtTest was found. +# QT_QTUITOOLS_FOUND True if QtUiTools was found. +# QT_QTWEBKIT_FOUND True if QtWebKit was found. +# QT_QTXML_FOUND True if QtXml was found. +# QT_QTXMLPATTERNS_FOUND True if QtXmlPatterns was found. +# QT_PHONON_FOUND True if phonon was found. +# QT_QTDECLARATIVE_FOUND True if QtDeclarative was found. +# +# QT_MAC_USE_COCOA For Mac OS X, its whether Cocoa or Carbon is used. +# In general, this should not be used, but its useful +# when having platform specific code. +# +# QT_DEFINITIONS Definitions to use when compiling code that uses Qt. +# You do not need to use this if you include QT_USE_FILE. +# The QT_USE_FILE will also define QT_DEBUG and QT_NO_DEBUG +# to fit your current build type. Those are not contained +# in QT_DEFINITIONS. +# +# QT_INCLUDES List of paths to all include directories of +# Qt4 QT_INCLUDE_DIR and QT_QTCORE_INCLUDE_DIR are +# always in this variable even if NOTFOUND, +# all other INCLUDE_DIRS are +# only added if they are found. +# You do not need to use this if you include QT_USE_FILE. +# +# +# Include directories for the Qt modules are listed here. +# You do not need to use these variables if you include QT_USE_FILE. +# +# QT_INCLUDE_DIR Path to "include" of Qt4 +# QT_QT3SUPPORT_INCLUDE_DIR Path to "include/Qt3Support" +# QT_QTASSISTANT_INCLUDE_DIR Path to "include/QtAssistant" +# QT_QTASSISTANTCLIENT_INCLUDE_DIR Path to "include/QtAssistant" +# QT_QAXCONTAINER_INCLUDE_DIR Path to "include/ActiveQt" (Windows only) +# QT_QAXSERVER_INCLUDE_DIR Path to "include/ActiveQt" (Windows only) +# QT_QTCORE_INCLUDE_DIR Path to "include/QtCore" +# QT_QTDBUS_INCLUDE_DIR Path to "include/QtDBus" +# QT_QTDESIGNER_INCLUDE_DIR Path to "include/QtDesigner" +# QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR Path to "include/QtDesigner" +# QT_QTGUI_INCLUDE_DIR Path to "include/QtGui" +# QT_QTHELP_INCLUDE_DIR Path to "include/QtHelp" +# QT_QTMOTIF_INCLUDE_DIR Path to "include/QtMotif" +# QT_QTMULTIMEDIA_INCLUDE_DIR Path to "include/QtMultimedia" +# QT_QTNETWORK_INCLUDE_DIR Path to "include/QtNetwork" +# QT_QTNSPLUGIN_INCLUDE_DIR Path to "include/QtNsPlugin" +# QT_QTOPENGL_INCLUDE_DIR Path to "include/QtOpenGL" +# QT_QTSCRIPT_INCLUDE_DIR Path to "include/QtScript" +# QT_QTSQL_INCLUDE_DIR Path to "include/QtSql" +# QT_QTSVG_INCLUDE_DIR Path to "include/QtSvg" +# QT_QTTEST_INCLUDE_DIR Path to "include/QtTest" +# QT_QTWEBKIT_INCLUDE_DIR Path to "include/QtWebKit" +# QT_QTXML_INCLUDE_DIR Path to "include/QtXml" +# QT_QTXMLPATTERNS_INCLUDE_DIR Path to "include/QtXmlPatterns" +# QT_PHONON_INCLUDE_DIR Path to "include/phonon" +# QT_QTSCRIPTTOOLS_INCLUDE_DIR Path to "include/QtScriptTools" +# QT_QTDECLARATIVE_INCLUDE_DIR Path to "include/QtDeclarative" +# +# QT_BINARY_DIR Path to "bin" of Qt4 +# QT_LIBRARY_DIR Path to "lib" of Qt4 +# QT_PLUGINS_DIR Path to "plugins" for Qt4 +# QT_TRANSLATIONS_DIR Path to "translations" of Qt4 +# QT_IMPORTS_DIR Path to "imports" of Qt4 +# QT_DOC_DIR Path to "doc" of Qt4 +# QT_MKSPECS_DIR Path to "mkspecs" of Qt4 +# +# +# The Qt toolkit may contain both debug and release libraries. +# In that case, the following library variables will contain both. +# You do not need to use these variables if you include QT_USE_FILE, +# and use QT_LIBRARIES. +# +# QT_QT3SUPPORT_LIBRARY The Qt3Support library +# QT_QTASSISTANT_LIBRARY The QtAssistant library +# QT_QTASSISTANTCLIENT_LIBRARY The QtAssistantClient library +# QT_QAXCONTAINER_LIBRARY The QAxContainer library (Windows only) +# QT_QAXSERVER_LIBRARY The QAxServer library (Windows only) +# QT_QTCORE_LIBRARY The QtCore library +# QT_QTDBUS_LIBRARY The QtDBus library +# QT_QTDESIGNER_LIBRARY The QtDesigner library +# QT_QTDESIGNERCOMPONENTS_LIBRARY The QtDesignerComponents library +# QT_QTGUI_LIBRARY The QtGui library +# QT_QTHELP_LIBRARY The QtHelp library +# QT_QTMOTIF_LIBRARY The QtMotif library +# QT_QTMULTIMEDIA_LIBRARY The QtMultimedia library +# QT_QTNETWORK_LIBRARY The QtNetwork library +# QT_QTNSPLUGIN_LIBRARY The QtNsPLugin library +# QT_QTOPENGL_LIBRARY The QtOpenGL library +# QT_QTSCRIPT_LIBRARY The QtScript library +# QT_QTSQL_LIBRARY The QtSql library +# QT_QTSVG_LIBRARY The QtSvg library +# QT_QTTEST_LIBRARY The QtTest library +# QT_QTUITOOLS_LIBRARY The QtUiTools library +# QT_QTWEBKIT_LIBRARY The QtWebKit library +# QT_QTXML_LIBRARY The QtXml library +# QT_QTXMLPATTERNS_LIBRARY The QtXmlPatterns library +# QT_QTMAIN_LIBRARY The qtmain library for Windows +# QT_PHONON_LIBRARY The phonon library +# QT_QTSCRIPTTOOLS_LIBRARY The QtScriptTools library +# +# The QtDeclarative library: QT_QTDECLARATIVE_LIBRARY +# +# also defined, but NOT for general use are +# QT_MOC_EXECUTABLE Where to find the moc tool. +# QT_UIC_EXECUTABLE Where to find the uic tool. +# QT_UIC3_EXECUTABLE Where to find the uic3 tool. +# QT_RCC_EXECUTABLE Where to find the rcc tool +# QT_DBUSCPP2XML_EXECUTABLE Where to find the qdbuscpp2xml tool. +# QT_DBUSXML2CPP_EXECUTABLE Where to find the qdbusxml2cpp tool. +# QT_LUPDATE_EXECUTABLE Where to find the lupdate tool. +# QT_LRELEASE_EXECUTABLE Where to find the lrelease tool. +# QT_QCOLLECTIONGENERATOR_EXECUTABLE Where to find the qcollectiongenerator tool. +# QT_DESIGNER_EXECUTABLE Where to find the Qt designer tool. +# QT_LINGUIST_EXECUTABLE Where to find the Qt linguist tool. +# +# +# These are around for backwards compatibility +# they will be set +# QT_WRAP_CPP Set true if QT_MOC_EXECUTABLE is found +# QT_WRAP_UI Set true if QT_UIC_EXECUTABLE is found +# +# These variables do _NOT_ have any effect anymore (compared to FindQt.cmake) +# QT_MT_REQUIRED Qt4 is now always multithreaded +# +# These variables are set to "" Because Qt structure changed +# (They make no sense in Qt4) +# QT_QT_LIBRARY Qt-Library is now split + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Use FIND_PACKAGE( Qt4 COMPONENTS ... ) to enable modules +IF( Qt4_FIND_COMPONENTS ) + FOREACH( component ${Qt4_FIND_COMPONENTS} ) + STRING( TOUPPER ${component} _COMPONENT ) + SET( QT_USE_${_COMPONENT} 1 ) + ENDFOREACH( component ) + + # To make sure we don't use QtCore or QtGui when not in COMPONENTS + IF(NOT QT_USE_QTCORE) + SET( QT_DONT_USE_QTCORE 1 ) + ENDIF(NOT QT_USE_QTCORE) + + IF(NOT QT_USE_QTGUI) + SET( QT_DONT_USE_QTGUI 1 ) + ENDIF(NOT QT_USE_QTGUI) + +ENDIF( Qt4_FIND_COMPONENTS ) + +# If Qt3 has already been found, fail. +IF(QT_QT_LIBRARY) + IF(Qt4_FIND_REQUIRED) + MESSAGE( FATAL_ERROR "Qt3 and Qt4 cannot be used together in one project. If switching to Qt4, the CMakeCache.txt needs to be cleaned.") + ELSE(Qt4_FIND_REQUIRED) + IF(NOT Qt4_FIND_QUIETLY) + MESSAGE( STATUS "Qt3 and Qt4 cannot be used together in one project. If switching to Qt4, the CMakeCache.txt needs to be cleaned.") + ENDIF(NOT Qt4_FIND_QUIETLY) + RETURN() + ENDIF(Qt4_FIND_REQUIRED) +ENDIF(QT_QT_LIBRARY) + + +INCLUDE(CheckCXXSymbolExists) +INCLUDE(MacroAddFileDependencies) +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +SET(QT_USE_FILE ${CMAKE_ROOT}/Modules/UseQt4.cmake) + +SET( QT_DEFINITIONS "") + +# convenience macro for dealing with debug/release library names +MACRO (_QT4_ADJUST_LIB_VARS _camelCaseBasename) + + STRING(TOUPPER "${_camelCaseBasename}" basename) + + # The name of the imported targets, i.e. the prefix "Qt4::" must not change, + # since it is stored in EXPORT-files as name of a required library. If the name would change + # here, this would lead to the imported Qt4-library targets not being resolved by cmake anymore. + IF (QT_${basename}_LIBRARY_RELEASE OR QT_${basename}_LIBRARY_DEBUG) + + IF(NOT TARGET Qt4::${_camelCaseBasename}) + ADD_LIBRARY(Qt4::${_camelCaseBasename} UNKNOWN IMPORTED ) + + IF (QT_${basename}_LIBRARY_RELEASE) + SET_PROPERTY(TARGET Qt4::${_camelCaseBasename} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) + if(QT_USE_FRAMEWORKS) + SET_PROPERTY(TARGET Qt4::${_camelCaseBasename} PROPERTY IMPORTED_LOCATION_RELEASE "${QT_${basename}_LIBRARY_RELEASE}/${_camelCaseBasename}" ) + else() + SET_PROPERTY(TARGET Qt4::${_camelCaseBasename} PROPERTY IMPORTED_LOCATION_RELEASE "${QT_${basename}_LIBRARY_RELEASE}" ) + endif() + ENDIF (QT_${basename}_LIBRARY_RELEASE) + + IF (QT_${basename}_LIBRARY_DEBUG) + SET_PROPERTY(TARGET Qt4::${_camelCaseBasename} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) + if(QT_USE_FRAMEWORKS) + SET_PROPERTY(TARGET Qt4::${_camelCaseBasename} PROPERTY IMPORTED_LOCATION_DEBUG "${QT_${basename}_LIBRARY_DEBUG}/${_camelCaseBasename}" ) + else() + SET_PROPERTY(TARGET Qt4::${_camelCaseBasename} PROPERTY IMPORTED_LOCATION_DEBUG "${QT_${basename}_LIBRARY_DEBUG}" ) + endif() + ENDIF (QT_${basename}_LIBRARY_DEBUG) + ENDIF(NOT TARGET Qt4::${_camelCaseBasename}) + + # If QT_USE_IMPORTED_TARGETS is enabled, the QT_QTFOO_LIBRARY variables are set to point at these + # imported targets. This works better in general, and is also in almost all cases fully + # backward compatible. The only issue is when a project A which had this enabled then exports its + # libraries via export or EXPORT_LIBRARY_DEPENDENCIES(). In this case the libraries from project + # A will depend on the imported Qt targets, and the names of these imported targets will be stored + # in the dependency files on disk. This means when a project B then uses project A, these imported + # targets must be created again, otherwise e.g. "Qt4__QtCore" will be interpreted as name of a + # library file on disk, and not as a target, and linking will fail: + IF(QT_USE_IMPORTED_TARGETS) + SET(QT_${basename}_LIBRARY Qt4::${_camelCaseBasename} ) + SET(QT_${basename}_LIBRARIES Qt4::${_camelCaseBasename} ) + ELSE(QT_USE_IMPORTED_TARGETS) + + # if the release- as well as the debug-version of the library have been found: + IF (QT_${basename}_LIBRARY_DEBUG AND QT_${basename}_LIBRARY_RELEASE) + # if the generator supports configuration types then set + # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value + IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) + SET(QT_${basename}_LIBRARY optimized ${QT_${basename}_LIBRARY_RELEASE} debug ${QT_${basename}_LIBRARY_DEBUG}) + ELSE(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) + # if there are no configuration types and CMAKE_BUILD_TYPE has no value + # then just use the release libraries + SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY_RELEASE} ) + ENDIF(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) + SET(QT_${basename}_LIBRARIES optimized ${QT_${basename}_LIBRARY_RELEASE} debug ${QT_${basename}_LIBRARY_DEBUG}) + ENDIF (QT_${basename}_LIBRARY_DEBUG AND QT_${basename}_LIBRARY_RELEASE) + + # if only the release version was found, set the debug variable also to the release version + IF (QT_${basename}_LIBRARY_RELEASE AND NOT QT_${basename}_LIBRARY_DEBUG) + SET(QT_${basename}_LIBRARY_DEBUG ${QT_${basename}_LIBRARY_RELEASE}) + SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY_RELEASE}) + SET(QT_${basename}_LIBRARIES ${QT_${basename}_LIBRARY_RELEASE}) + ENDIF (QT_${basename}_LIBRARY_RELEASE AND NOT QT_${basename}_LIBRARY_DEBUG) + + # if only the debug version was found, set the release variable also to the debug version + IF (QT_${basename}_LIBRARY_DEBUG AND NOT QT_${basename}_LIBRARY_RELEASE) + SET(QT_${basename}_LIBRARY_RELEASE ${QT_${basename}_LIBRARY_DEBUG}) + SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY_DEBUG}) + SET(QT_${basename}_LIBRARIES ${QT_${basename}_LIBRARY_DEBUG}) + ENDIF (QT_${basename}_LIBRARY_DEBUG AND NOT QT_${basename}_LIBRARY_RELEASE) + + # put the value in the cache: + SET(QT_${basename}_LIBRARY ${QT_${basename}_LIBRARY} CACHE STRING "The Qt ${basename} library" FORCE) + + ENDIF(QT_USE_IMPORTED_TARGETS) + + SET(QT_${basename}_FOUND 1) + + ELSE (QT_${basename}_LIBRARY_RELEASE OR QT_${basename}_LIBRARY_DEBUG) + + SET(QT_${basename}_LIBRARY "" CACHE STRING "The Qt ${basename} library" FORCE) + + ENDIF (QT_${basename}_LIBRARY_RELEASE OR QT_${basename}_LIBRARY_DEBUG) + + IF (QT_${basename}_INCLUDE_DIR) + #add the include directory to QT_INCLUDES + SET(QT_INCLUDES "${QT_${basename}_INCLUDE_DIR}" ${QT_INCLUDES}) + ENDIF (QT_${basename}_INCLUDE_DIR) + + # Make variables changeble to the advanced user + MARK_AS_ADVANCED(QT_${basename}_LIBRARY QT_${basename}_LIBRARY_RELEASE QT_${basename}_LIBRARY_DEBUG QT_${basename}_INCLUDE_DIR) +ENDMACRO (_QT4_ADJUST_LIB_VARS) + +function(_QT4_QUERY_QMAKE VAR RESULT) + execute_process(COMMAND "${QT_QMAKE_EXECUTABLE}" -query ${VAR} + RESULT_VARIABLE return_code + OUTPUT_VARIABLE output ERROR_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE) + if(NOT return_code) + file(TO_CMAKE_PATH "${output}" output) + set(${RESULT} ${output} PARENT_SCOPE) + endif(NOT return_code) +endfunction(_QT4_QUERY_QMAKE) + + +SET(QT4_INSTALLED_VERSION_TOO_OLD FALSE) + +GET_FILENAME_COMPONENT(qt_install_version "[HKEY_CURRENT_USER\\Software\\trolltech\\Versions;DefaultQtVersion]" NAME) +# check for qmake +# Debian uses qmake-qt4 +# macports' Qt uses qmake-mac +FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake4 qmake-qt4 qmake-mac PATHS + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\${qt_install_version};InstallDir]/bin" + $ENV{QTDIR}/bin + DOC "The qmake executable for the Qt installation to use" +) + +# double check that it was a Qt4 qmake, if not, re-find with different names +IF (QT_QMAKE_EXECUTABLE) + + IF(QT_QMAKE_EXECUTABLE_LAST) + STRING(COMPARE NOTEQUAL "${QT_QMAKE_EXECUTABLE_LAST}" "${QT_QMAKE_EXECUTABLE}" QT_QMAKE_CHANGED) + ENDIF(QT_QMAKE_EXECUTABLE_LAST) + + SET(QT_QMAKE_EXECUTABLE_LAST "${QT_QMAKE_EXECUTABLE}" CACHE INTERNAL "" FORCE) + + _qt4_query_qmake(QT_VERSION QTVERSION) + + # check for qt3 qmake and then try and find qmake4 or qmake-qt4 in the path + IF(NOT QTVERSION) + SET(QT_QMAKE_EXECUTABLE NOTFOUND CACHE FILEPATH "" FORCE) + FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake4 qmake-qt4 PATHS + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin" + "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin" + $ENV{QTDIR}/bin + DOC "The qmake executable for the Qt installation to use" + ) + IF(QT_QMAKE_EXECUTABLE) + _qt4_query_qmake(QT_VERSION QTVERSION) + ENDIF(QT_QMAKE_EXECUTABLE) + ENDIF(NOT QTVERSION) + +ENDIF (QT_QMAKE_EXECUTABLE) + +IF (QT_QMAKE_EXECUTABLE AND QTVERSION) + + # ask qmake for the mkspecs directory + # we do this first because QT_LIBINFIX might be set + IF (NOT QT_MKSPECS_DIR OR QT_QMAKE_CHANGED) + _qt4_query_qmake(QMAKE_MKSPECS qt_mkspecs_dirs) + # do not replace : on windows as it might be a drive letter + # and windows should already use ; as a separator + IF(NOT WIN32) + STRING(REPLACE ":" ";" qt_mkspecs_dirs "${qt_mkspecs_dirs}") + ENDIF(NOT WIN32) + set(qt_cross_paths) + foreach(qt_cross_path ${CMAKE_FIND_ROOT_PATH}) + set(qt_cross_paths ${qt_cross_paths} "${qt_cross_path}/mkspecs") + endforeach(qt_cross_path) + SET(QT_MKSPECS_DIR NOTFOUND) + FIND_PATH(QT_MKSPECS_DIR NAMES qconfig.pri + HINTS ${qt_cross_paths} ${qt_mkspecs_dirs} + DOC "The location of the Qt mkspecs containing qconfig.pri") + ENDIF() + + IF(EXISTS "${QT_MKSPECS_DIR}/qconfig.pri") + FILE(READ ${QT_MKSPECS_DIR}/qconfig.pri _qconfig_FILE_contents) + STRING(REGEX MATCH "QT_CONFIG[^\n]+" QT_QCONFIG "${_qconfig_FILE_contents}") + STRING(REGEX MATCH "CONFIG[^\n]+" QT_CONFIG "${_qconfig_FILE_contents}") + STRING(REGEX MATCH "EDITION[^\n]+" QT_EDITION "${_qconfig_FILE_contents}") + STRING(REGEX MATCH "QT_LIBINFIX[^\n]+" _qconfig_qt_libinfix "${_qconfig_FILE_contents}") + STRING(REGEX REPLACE "QT_LIBINFIX *= *([^\n]*)" "\\1" QT_LIBINFIX "${_qconfig_qt_libinfix}") + ENDIF(EXISTS "${QT_MKSPECS_DIR}/qconfig.pri") + IF("${QT_EDITION}" MATCHES "DesktopLight") + SET(QT_EDITION_DESKTOPLIGHT 1) + ENDIF("${QT_EDITION}" MATCHES "DesktopLight") + + # ask qmake for the library dir as a hint, then search for QtCore library and use that as a reference for finding the + # others and for setting QT_LIBRARY_DIR + IF (NOT (QT_QTCORE_LIBRARY_RELEASE OR QT_QTCORE_LIBRARY_DEBUG) OR QT_QMAKE_CHANGED) + _qt4_query_qmake(QT_INSTALL_LIBS QT_LIBRARY_DIR_TMP) + SET(QT_QTCORE_LIBRARY_RELEASE NOTFOUND) + SET(QT_QTCORE_LIBRARY_DEBUG NOTFOUND) + FIND_LIBRARY(QT_QTCORE_LIBRARY_RELEASE + NAMES QtCore${QT_LIBINFIX} QtCore${QT_LIBINFIX}4 + HINTS ${QT_LIBRARY_DIR_TMP} + NO_DEFAULT_PATH + ) + FIND_LIBRARY(QT_QTCORE_LIBRARY_DEBUG + NAMES QtCore${QT_LIBINFIX}_debug QtCore${QT_LIBINFIX}d QtCore${QT_LIBINFIX}d4 + HINTS ${QT_LIBRARY_DIR_TMP} + NO_DEFAULT_PATH + ) + + IF(NOT QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTCORE_LIBRARY_DEBUG) + FIND_LIBRARY(QT_QTCORE_LIBRARY_RELEASE + NAMES QtCore${QT_LIBINFIX} QtCore${QT_LIBINFIX}4 + HINTS ${QT_LIBRARY_DIR_TMP} + ) + FIND_LIBRARY(QT_QTCORE_LIBRARY_DEBUG + NAMES QtCore${QT_LIBINFIX}_debug QtCore${QT_LIBINFIX}d QtCore${QT_LIBINFIX}d4 + HINTS ${QT_LIBRARY_DIR_TMP} + ) + ENDIF(NOT QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTCORE_LIBRARY_DEBUG) + + # try dropping a hint if trying to use Visual Studio with Qt built by mingw + IF(NOT QT_QTCORE_LIBRARY_RELEASE AND MSVC) + IF(EXISTS ${QT_LIBRARY_DIR_TMP}/libqtmain.a) + MESSAGE( FATAL_ERROR "It appears you're trying to use Visual Studio with Qt built by mingw. Those compilers do not produce code compatible with each other.") + ENDIF(EXISTS ${QT_LIBRARY_DIR_TMP}/libqtmain.a) + ENDIF(NOT QT_QTCORE_LIBRARY_RELEASE AND MSVC) + + ENDIF () + + # set QT_LIBRARY_DIR based on location of QtCore found. + IF(QT_QTCORE_LIBRARY_RELEASE) + GET_FILENAME_COMPONENT(QT_LIBRARY_DIR_TMP "${QT_QTCORE_LIBRARY_RELEASE}" PATH) + SET(QT_LIBRARY_DIR ${QT_LIBRARY_DIR_TMP} CACHE INTERNAL "Qt library dir" FORCE) + SET(QT_QTCORE_FOUND 1) + ELSEIF(QT_QTCORE_LIBRARY_DEBUG) + GET_FILENAME_COMPONENT(QT_LIBRARY_DIR_TMP "${QT_QTCORE_LIBRARY_DEBUG}" PATH) + SET(QT_LIBRARY_DIR ${QT_LIBRARY_DIR_TMP} CACHE INTERNAL "Qt library dir" FORCE) + SET(QT_QTCORE_FOUND 1) + ELSE() + MESSAGE(WARNING "${QT_QMAKE_EXECUTABLE} reported QT_INSTALL_LIBS as \"${QT_LIBRARY_DIR_TMP}\" " + "but QtCore could not be found there. " + "Qt is NOT installed correctly for the target build environment.") + IF(Qt4_FIND_REQUIRED) + MESSAGE( FATAL_ERROR "Could NOT find QtCore. Check ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log for more details.") + ENDIF(Qt4_FIND_REQUIRED) + ENDIF() + + # ask qmake for the binary dir + IF (NOT QT_BINARY_DIR OR QT_QMAKE_CHANGED) + _qt4_query_qmake(QT_INSTALL_BINS qt_bins) + SET(QT_BINARY_DIR ${qt_bins} CACHE INTERNAL "" FORCE) + ENDIF (NOT QT_BINARY_DIR OR QT_QMAKE_CHANGED) + + IF (APPLE) + SET(CMAKE_FIND_FRAMEWORK_OLD ${CMAKE_FIND_FRAMEWORK}) + IF (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework) + SET(QT_USE_FRAMEWORKS ON CACHE INTERNAL "" FORCE) + SET(CMAKE_FIND_FRAMEWORK FIRST) + ELSE (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework) + SET(QT_USE_FRAMEWORKS OFF CACHE INTERNAL "" FORCE) + SET(CMAKE_FIND_FRAMEWORK LAST) + ENDIF (EXISTS ${QT_LIBRARY_DIR}/QtCore.framework) + ENDIF (APPLE) + + # ask qmake for the include dir + IF (QT_LIBRARY_DIR AND (NOT QT_QTCORE_INCLUDE_DIR OR NOT QT_HEADERS_DIR OR QT_QMAKE_CHANGED)) + _qt4_query_qmake(QT_INSTALL_HEADERS qt_headers) + SET(QT_QTCORE_INCLUDE_DIR NOTFOUND) + FIND_PATH(QT_QTCORE_INCLUDE_DIR QtCore + HINTS ${qt_headers} ${QT_LIBRARY_DIR} + PATH_SUFFIXES QtCore qt4/QtCore + ) + + # Set QT_HEADERS_DIR based on finding QtCore header + IF(QT_QTCORE_INCLUDE_DIR) + IF(QT_USE_FRAMEWORKS) + SET(QT_HEADERS_DIR "${qt_headers}" CACHE INTERNAL "" FORCE) + ELSE(QT_USE_FRAMEWORKS) + GET_FILENAME_COMPONENT(qt_headers "${QT_QTCORE_INCLUDE_DIR}/../" ABSOLUTE) + SET(QT_HEADERS_DIR "${qt_headers}" CACHE INTERNAL "" FORCE) + ENDIF(QT_USE_FRAMEWORKS) + ELSEIF() + MESSAGE("Warning: QT_QMAKE_EXECUTABLE reported QT_INSTALL_HEADERS as ${qt_headers}") + MESSAGE("Warning: But QtCore couldn't be found. Qt must NOT be installed correctly.") + ENDIF() + ENDIF() + + IF(APPLE) + SET(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_OLD}) + ENDIF(APPLE) + + # Set QT_INCLUDE_DIR based on QT_HEADERS_DIR + IF(QT_HEADERS_DIR) + IF(QT_USE_FRAMEWORKS) + # Qt/Mac frameworks has two include dirs. + # One is the framework include for which CMake will add a -F flag + # and the other is an include dir for non-framework Qt modules + SET(QT_INCLUDE_DIR ${QT_HEADERS_DIR} ${QT_QTCORE_LIBRARY_RELEASE} ) + ELSE(QT_USE_FRAMEWORKS) + SET(QT_INCLUDE_DIR ${QT_HEADERS_DIR}) + ENDIF(QT_USE_FRAMEWORKS) + ENDIF(QT_HEADERS_DIR) + + # Set QT_INCLUDES + SET( QT_INCLUDES ${QT_MKSPECS_DIR}/default ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR}) + + + # ask qmake for the documentation directory + IF (QT_LIBRARY_DIR AND NOT QT_DOC_DIR OR QT_QMAKE_CHANGED) + _qt4_query_qmake(QT_INSTALL_DOCS qt_doc_dir) + SET(QT_DOC_DIR ${qt_doc_dir} CACHE PATH "The location of the Qt docs" FORCE) + ENDIF (QT_LIBRARY_DIR AND NOT QT_DOC_DIR OR QT_QMAKE_CHANGED) + + + # ask qmake for the plugins directory + IF (QT_LIBRARY_DIR AND NOT QT_PLUGINS_DIR OR QT_QMAKE_CHANGED) + _qt4_query_qmake(QT_INSTALL_PLUGINS qt_plugins_dir) + SET(QT_PLUGINS_DIR NOTFOUND) + foreach(qt_cross_path ${CMAKE_FIND_ROOT_PATH}) + set(qt_cross_paths ${qt_cross_paths} "${qt_cross_path}/plugins") + endforeach(qt_cross_path) + FIND_PATH(QT_PLUGINS_DIR NAMES accessible imageformats sqldrivers codecs designer + HINTS ${qt_cross_paths} ${qt_plugins_dir} + DOC "The location of the Qt plugins") + ENDIF (QT_LIBRARY_DIR AND NOT QT_PLUGINS_DIR OR QT_QMAKE_CHANGED) + + # ask qmake for the translations directory + IF (QT_LIBRARY_DIR AND NOT QT_TRANSLATIONS_DIR OR QT_QMAKE_CHANGED) + _qt4_query_qmake(QT_INSTALL_TRANSLATIONS qt_translations_dir) + SET(QT_TRANSLATIONS_DIR ${qt_translations_dir} CACHE PATH "The location of the Qt translations" FORCE) + ENDIF (QT_LIBRARY_DIR AND NOT QT_TRANSLATIONS_DIR OR QT_QMAKE_CHANGED) + + # ask qmake for the imports directory + IF (QT_LIBRARY_DIR AND NOT QT_IMPORTS_DIR OR QT_QMAKE_CHANGED) + _qt4_query_qmake(QT_INSTALL_IMPORTS qt_imports_dir) + if(qt_imports_dir) + SET(QT_IMPORTS_DIR NOTFOUND) + foreach(qt_cross_path ${CMAKE_FIND_ROOT_PATH}) + set(qt_cross_paths ${qt_cross_paths} "${qt_cross_path}/imports") + endforeach(qt_cross_path) + FIND_PATH(QT_IMPORTS_DIR NAMES Qt + HINTS ${qt_cross_paths} ${qt_imports_dir} + DOC "The location of the Qt imports" + NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH) + mark_as_advanced(QT_IMPORTS_DIR) + endif(qt_imports_dir) + ENDIF (QT_LIBRARY_DIR AND NOT QT_IMPORTS_DIR OR QT_QMAKE_CHANGED) + + # Make variables changeble to the advanced user + MARK_AS_ADVANCED( QT_LIBRARY_DIR QT_DOC_DIR QT_MKSPECS_DIR + QT_PLUGINS_DIR QT_TRANSLATIONS_DIR) + + + + + ############################################# + # + # Find out what window system we're using + # + ############################################# + # Save required variable + SET(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) + SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) + # Add QT_INCLUDE_DIR to CMAKE_REQUIRED_INCLUDES + SET(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES};${QT_INCLUDE_DIR}") + # Check for Window system symbols (note: only one should end up being set) + CHECK_CXX_SYMBOL_EXISTS(Q_WS_X11 "QtCore/qglobal.h" Q_WS_X11) + CHECK_CXX_SYMBOL_EXISTS(Q_WS_WIN "QtCore/qglobal.h" Q_WS_WIN) + CHECK_CXX_SYMBOL_EXISTS(Q_WS_QWS "QtCore/qglobal.h" Q_WS_QWS) + CHECK_CXX_SYMBOL_EXISTS(Q_WS_MAC "QtCore/qglobal.h" Q_WS_MAC) + IF(Q_WS_MAC) + IF(QT_QMAKE_CHANGED) + UNSET(QT_MAC_USE_COCOA CACHE) + ENDIF(QT_QMAKE_CHANGED) + CHECK_CXX_SYMBOL_EXISTS(QT_MAC_USE_COCOA "QtCore/qconfig.h" QT_MAC_USE_COCOA) + ENDIF(Q_WS_MAC) + + IF (QT_QTCOPY_REQUIRED) + CHECK_CXX_SYMBOL_EXISTS(QT_IS_QTCOPY "QtCore/qglobal.h" QT_KDE_QT_COPY) + IF (NOT QT_IS_QTCOPY) + MESSAGE(FATAL_ERROR "qt-copy is required, but hasn't been found") + ENDIF (NOT QT_IS_QTCOPY) + ENDIF (QT_QTCOPY_REQUIRED) + + # Restore CMAKE_REQUIRED_INCLUDES and CMAKE_REQUIRED_FLAGS variables + SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) + SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) + # + ############################################# + + + + ######################################## + # + # Setting the INCLUDE-Variables + # + ######################################## + + SET(QT_MODULES QtGui Qt3Support QtSvg QtScript QtTest QtUiTools + QtHelp QtWebKit QtXmlPatterns phonon QtNetwork QtMultimedia + QtNsPlugin QtOpenGL QtSql QtXml QtDesigner QtDBus QtScriptTools + QtDeclarative) + + IF(Q_WS_X11) + SET(QT_MODULES ${QT_MODULES} QtMotif) + ENDIF(Q_WS_X11) + + IF(QT_QMAKE_CHANGED) + FOREACH(QT_MODULE ${QT_MODULES}) + STRING(TOUPPER ${QT_MODULE} _upper_qt_module) + SET(QT_${_upper_qt_module}_INCLUDE_DIR NOTFOUND) + SET(QT_${_upper_qt_module}_LIBRARY_RELEASE NOTFOUND) + SET(QT_${_upper_qt_module}_LIBRARY_DEBUG NOTFOUND) + ENDFOREACH(QT_MODULE) + SET(QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR NOTFOUND) + SET(QT_QTDESIGNERCOMPONENTS_LIBRARY_RELEASE NOTFOUND) + SET(QT_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG NOTFOUND) + SET(QT_QTASSISTANTCLIENT_INCLUDE_DIR NOTFOUND) + SET(QT_QTASSISTANTCLIENT_LIBRARY_RELEASE NOTFOUND) + SET(QT_QTASSISTANTCLIENT_LIBRARY_DEBUG NOTFOUND) + SET(QT_QTASSISTANT_INCLUDE_DIR NOTFOUND) + SET(QT_QTASSISTANT_LIBRARY_RELEASE NOTFOUND) + SET(QT_QTASSISTANT_LIBRARY_DEBUG NOTFOUND) + SET(QT_QTCLUCENE_LIBRARY_RELEASE NOTFOUND) + SET(QT_QTCLUCENE_LIBRARY_DEBUG NOTFOUND) + SET(QT_QAXCONTAINER_INCLUDE_DIR NOTFOUND) + SET(QT_QAXCONTAINER_LIBRARY_RELEASE NOTFOUND) + SET(QT_QAXCONTAINER_LIBRARY_DEBUG NOTFOUND) + SET(QT_QAXSERVER_INCLUDE_DIR NOTFOUND) + SET(QT_QAXSERVER_LIBRARY_RELEASE NOTFOUND) + SET(QT_QAXSERVER_LIBRARY_DEBUG NOTFOUND) + IF(Q_WS_WIN) + SET(QT_QTMAIN_LIBRARY_DEBUG NOTFOUND) + SET(QT_QTMAIN_LIBRARY_RELEASE NOTFOUND) + ENDIF(Q_WS_WIN) + ENDIF(QT_QMAKE_CHANGED) + + FOREACH(QT_MODULE ${QT_MODULES}) + STRING(TOUPPER ${QT_MODULE} _upper_qt_module) + FIND_PATH(QT_${_upper_qt_module}_INCLUDE_DIR ${QT_MODULE} + PATHS + ${QT_HEADERS_DIR}/${QT_MODULE} + ${QT_LIBRARY_DIR}/${QT_MODULE}.framework/Headers + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + # phonon doesn't seem consistent, let's try phonondefs.h for some + # installations + IF(${QT_MODULE} STREQUAL "phonon") + FIND_PATH(QT_${_upper_qt_module}_INCLUDE_DIR phonondefs.h + PATHS + ${QT_HEADERS_DIR}/${QT_MODULE} + ${QT_LIBRARY_DIR}/${QT_MODULE}.framework/Headers + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + ENDIF(${QT_MODULE} STREQUAL "phonon") + ENDFOREACH(QT_MODULE) + + IF(Q_WS_WIN) + SET(QT_MODULES ${QT_MODULES} QAxContainer QAxServer) + # Set QT_AXCONTAINER_INCLUDE_DIR and QT_AXSERVER_INCLUDE_DIR + FIND_PATH(QT_QAXCONTAINER_INCLUDE_DIR ActiveQt + PATHS ${QT_HEADERS_DIR}/ActiveQt + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + FIND_PATH(QT_QAXSERVER_INCLUDE_DIR ActiveQt + PATHS ${QT_HEADERS_DIR}/ActiveQt + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + ENDIF(Q_WS_WIN) + + # Set QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR + FIND_PATH(QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR QDesignerComponents + PATHS + ${QT_HEADERS_DIR}/QtDesigner + ${QT_LIBRARY_DIR}/QtDesigner.framework/Headers + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + # Set QT_QTASSISTANT_INCLUDE_DIR + FIND_PATH(QT_QTASSISTANT_INCLUDE_DIR QtAssistant + PATHS + ${QT_HEADERS_DIR}/QtAssistant + ${QT_LIBRARY_DIR}/QtAssistant.framework/Headers + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + # Set QT_QTASSISTANTCLIENT_INCLUDE_DIR + FIND_PATH(QT_QTASSISTANTCLIENT_INCLUDE_DIR QAssistantClient + PATHS + ${QT_HEADERS_DIR}/QtAssistant + ${QT_LIBRARY_DIR}/QtAssistant.framework/Headers + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + ######################################## + # + # Setting the LIBRARY-Variables + # + ######################################## + + # find the libraries + FOREACH(QT_MODULE ${QT_MODULES}) + STRING(TOUPPER ${QT_MODULE} _upper_qt_module) + FIND_LIBRARY(QT_${_upper_qt_module}_LIBRARY_RELEASE + NAMES ${QT_MODULE}${QT_LIBINFIX} ${QT_MODULE}${QT_LIBINFIX}4 + PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + FIND_LIBRARY(QT_${_upper_qt_module}_LIBRARY_DEBUG + NAMES ${QT_MODULE}${QT_LIBINFIX}_debug ${QT_MODULE}${QT_LIBINFIX}d ${QT_MODULE}${QT_LIBINFIX}d4 + PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + ENDFOREACH(QT_MODULE) + + # QtUiTools is sometimes not in the same directory as the other found libraries + # e.g. on Mac, its never a framework like the others are + IF(QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTUITOOLS_LIBRARY_RELEASE) + FIND_LIBRARY(QT_QTUITOOLS_LIBRARY_RELEASE NAMES QtUiTools${QT_LIBINFIX} PATHS ${QT_LIBRARY_DIR}) + ENDIF(QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTUITOOLS_LIBRARY_RELEASE) + + # Set QT_QTDESIGNERCOMPONENTS_LIBRARY + FIND_LIBRARY(QT_QTDESIGNERCOMPONENTS_LIBRARY_RELEASE NAMES QtDesignerComponents${QT_LIBINFIX} QtDesignerComponents${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + FIND_LIBRARY(QT_QTDESIGNERCOMPONENTS_LIBRARY_DEBUG NAMES QtDesignerComponents${QT_LIBINFIX}_debug QtDesignerComponents${QT_LIBINFIX}d QtDesignerComponents${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + + # Set QT_QTMAIN_LIBRARY + IF(Q_WS_WIN) + FIND_LIBRARY(QT_QTMAIN_LIBRARY_RELEASE NAMES qtmain${QT_LIBINFIX} PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + FIND_LIBRARY(QT_QTMAIN_LIBRARY_DEBUG NAMES qtmain${QT_LIBINFIX}d PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + ENDIF(Q_WS_WIN) + + # Set QT_QTASSISTANTCLIENT_LIBRARY + FIND_LIBRARY(QT_QTASSISTANTCLIENT_LIBRARY_RELEASE NAMES QtAssistantClient${QT_LIBINFIX} QtAssistantClient${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + FIND_LIBRARY(QT_QTASSISTANTCLIENT_LIBRARY_DEBUG NAMES QtAssistantClient${QT_LIBINFIX}_debug QtAssistantClient${QT_LIBINFIX}d QtAssistantClient${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + + # Set QT_QTASSISTANT_LIBRARY + FIND_LIBRARY(QT_QTASSISTANT_LIBRARY_RELEASE NAMES QtAssistantClient${QT_LIBINFIX} QtAssistantClient${QT_LIBINFIX}4 QtAssistant${QT_LIBINFIX} QtAssistant${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + FIND_LIBRARY(QT_QTASSISTANT_LIBRARY_DEBUG NAMES QtAssistantClient${QT_LIBINFIX}_debug QtAssistantClient${QT_LIBINFIX}d QtAssistantClient${QT_LIBINFIX}d4 QtAssistant${QT_LIBINFIX}_debug QtAssistant${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + + # Set QT_QTHELP_LIBRARY + FIND_LIBRARY(QT_QTCLUCENE_LIBRARY_RELEASE NAMES QtCLucene${QT_LIBINFIX} QtCLucene${QT_LIBINFIX}4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + FIND_LIBRARY(QT_QTCLUCENE_LIBRARY_DEBUG NAMES QtCLucene${QT_LIBINFIX}_debug QtCLucene${QT_LIBINFIX}d QtCLucene${QT_LIBINFIX}d4 PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + IF(Q_WS_MAC AND QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTCLUCENE_LIBRARY_RELEASE) + FIND_LIBRARY(QT_QTCLUCENE_LIBRARY_RELEASE NAMES QtCLucene${QT_LIBINFIX} PATHS ${QT_LIBRARY_DIR}) + ENDIF(Q_WS_MAC AND QT_QTCORE_LIBRARY_RELEASE AND NOT QT_QTCLUCENE_LIBRARY_RELEASE) + + + ############################################ + # + # Check the existence of the libraries. + # + ############################################ + + + # Set QT_xyz_LIBRARY variable and add + # library include path to QT_INCLUDES + _QT4_ADJUST_LIB_VARS(QtCore) + + FOREACH(QT_MODULE ${QT_MODULES}) + _QT4_ADJUST_LIB_VARS(${QT_MODULE}) + ENDFOREACH(QT_MODULE) + + _QT4_ADJUST_LIB_VARS(QtAssistant) + _QT4_ADJUST_LIB_VARS(QtAssistantClient) + _QT4_ADJUST_LIB_VARS(QtCLucene) + _QT4_ADJUST_LIB_VARS(QtDesignerComponents) + + # platform dependent libraries + IF(Q_WS_WIN) + _QT4_ADJUST_LIB_VARS(qtmain) + _QT4_ADJUST_LIB_VARS(QAxServer) + _QT4_ADJUST_LIB_VARS(QAxContainer) + ENDIF(Q_WS_WIN) + + + ####################################### + # + # Check the executables of Qt + # ( moc, uic, rcc ) + # + ####################################### + + + IF(QT_QMAKE_CHANGED) + SET(QT_UIC_EXECUTABLE NOTFOUND) + SET(QT_MOC_EXECUTABLE NOTFOUND) + SET(QT_UIC3_EXECUTABLE NOTFOUND) + SET(QT_RCC_EXECUTABLE NOTFOUND) + SET(QT_DBUSCPP2XML_EXECUTABLE NOTFOUND) + SET(QT_DBUSXML2CPP_EXECUTABLE NOTFOUND) + SET(QT_LUPDATE_EXECUTABLE NOTFOUND) + SET(QT_LRELEASE_EXECUTABLE NOTFOUND) + SET(QT_QCOLLECTIONGENERATOR_EXECUTABLE NOTFOUND) + SET(QT_DESIGNER_EXECUTABLE NOTFOUND) + SET(QT_LINGUIST_EXECUTABLE NOTFOUND) + ENDIF(QT_QMAKE_CHANGED) + + FIND_PROGRAM(QT_MOC_EXECUTABLE + NAMES moc-qt4 moc + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + FIND_PROGRAM(QT_UIC_EXECUTABLE + NAMES uic-qt4 uic + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + FIND_PROGRAM(QT_UIC3_EXECUTABLE + NAMES uic3 + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + FIND_PROGRAM(QT_RCC_EXECUTABLE + NAMES rcc + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + FIND_PROGRAM(QT_DBUSCPP2XML_EXECUTABLE + NAMES qdbuscpp2xml + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + FIND_PROGRAM(QT_DBUSXML2CPP_EXECUTABLE + NAMES qdbusxml2cpp + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + FIND_PROGRAM(QT_LUPDATE_EXECUTABLE + NAMES lupdate-qt4 lupdate + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + FIND_PROGRAM(QT_LRELEASE_EXECUTABLE + NAMES lrelease-qt4 lrelease + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + FIND_PROGRAM(QT_QCOLLECTIONGENERATOR_EXECUTABLE + NAMES qcollectiongenerator-qt4 qcollectiongenerator + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + FIND_PROGRAM(QT_DESIGNER_EXECUTABLE + NAMES designer-qt4 designer + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + FIND_PROGRAM(QT_LINGUIST_EXECUTABLE + NAMES linguist-qt4 linguist + PATHS ${QT_BINARY_DIR} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + IF (QT_MOC_EXECUTABLE) + SET(QT_WRAP_CPP "YES") + ENDIF (QT_MOC_EXECUTABLE) + + IF (QT_UIC_EXECUTABLE) + SET(QT_WRAP_UI "YES") + ENDIF (QT_UIC_EXECUTABLE) + + + + MARK_AS_ADVANCED( QT_UIC_EXECUTABLE QT_UIC3_EXECUTABLE QT_MOC_EXECUTABLE + QT_RCC_EXECUTABLE QT_DBUSXML2CPP_EXECUTABLE QT_DBUSCPP2XML_EXECUTABLE + QT_LUPDATE_EXECUTABLE QT_LRELEASE_EXECUTABLE QT_QCOLLECTIONGENERATOR_EXECUTABLE + QT_DESIGNER_EXECUTABLE QT_LINGUIST_EXECUTABLE) + + + # get the directory of the current file, used later on in the file + GET_FILENAME_COMPONENT( _qt4_current_dir "${CMAKE_CURRENT_LIST_FILE}" PATH) + + + ############################################### + # + # configuration/system dependent settings + # + ############################################### + + INCLUDE("${_qt4_current_dir}/Qt4ConfigDependentSettings.cmake") + + + ####################################### + # + # Check the plugins of Qt + # + ####################################### + + SET( QT_PLUGIN_TYPES accessible bearer codecs decorations designer gfxdrivers graphicssystems iconengines imageformats inputmethods mousedrivers phonon_backend script sqldrivers ) + + SET( QT_ACCESSIBLE_PLUGINS qtaccessiblecompatwidgets qtaccessiblewidgets ) + SET( QT_BEARER_PLUGINS qcorewlanbearer qgenericbearer ) + SET( QT_CODECS_PLUGINS qcncodecs qjpcodecs qkrcodecs qtwcodecs ) + SET( QT_DECORATIONS_PLUGINS qdecorationdefault qdecorationwindows ) + SET( QT_DESIGNER_PLUGINS arthurplugin containerextension customwidgetplugin phononwidgets qdeclarativeview qt3supportwidgets qwebview taskmenuextension worldtimeclockplugin ) + SET( QT_GRAPHICSDRIVERS_PLUGINS qgfxtransformed qgfxvnc qscreenvfb ) + SET( QT_GRAPHICSSYSTEMS_PLUGINS qglgraphicssystem qtracegraphicssystem ) + SET( QT_ICONENGINES_PLUGINS qsvgicon ) + SET( QT_IMAGEFORMATS_PLUGINS qgif qjpeg qmng qico qsvg qtiff ) + SET( QT_INPUTMETHODS_PLUGINS qimsw_multi ) + SET( QT_MOUSEDRIVERS_PLUGINS qwstslibmousehandler ) + SET( QT_PHONON_BACKEND_PLUGINS phonon_qt7 ) + SET( QT_SCRIPT_PLUGINS qtscriptdbus ) + SET( QT_SQLDRIVERS_PLUGINS qsqldb2 qsqlibase qsqlite qsqlite2 qsqlmysql qsqloci qsqlodbc qsqlpsql qsqltds ) + + SET( QT_PHONON_PLUGINS ${QT_PHONON_BACKEND_PLUGINS} ) + SET( QT_QT3SUPPORT_PLUGINS qtaccessiblecompatwidgets ) + SET( QT_QTCORE_PLUGINS ${QT_BEARER_PLUGINS} ${QT_CODECS_PLUGINS} ) + SET( QT_QTGUI_PLUGINS qtaccessiblewidgets qgif qjpeg qmng qico qtiff ${QT_DECORATIONS_PLUGINS} ${QT_GRAPHICSDRIVERS_PLUGINS} ${QT_GRAPHICSSYSTEMS_PLUGINS} ${QT_INPUTMETHODS_PLUGINS} ${QT_MOUSEDRIVERS_PLUGINS} ) + SET( QT_QTSCRIPT_PLUGINS ${QT_SCRIPT_PLUGINS} ) + SET( QT_QTSQL_PLUGINS ${QT_SQLDRIVERS_PLUGINS} ) + SET( QT_QTSVG_PLUGINS qsvg qsvgicon ) + + IF(QT_QMAKE_CHANGED) + FOREACH(QT_PLUGIN_TYPE ${QT_PLUGIN_TYPES}) + STRING(TOUPPER ${QT_PLUGIN_TYPE} _upper_qt_plugin_type) + SET(QT_${_upper_qt_plugin_type}_PLUGINS_DIR ${QT_PLUGINS_DIR}/${QT_PLUGIN_TYPE}) + FOREACH(QT_PLUGIN ${QT_${_upper_qt_plugin_type}_PLUGINS}) + STRING(TOUPPER ${QT_PLUGIN} _upper_qt_plugin) + UNSET(QT_${_upper_qt_plugin}_LIBRARY_RELEASE CACHE) + UNSET(QT_${_upper_qt_plugin}_LIBRARY_DEBUG CACHE) + UNSET(QT_${_upper_qt_plugin}_LIBRARY CACHE) + UNSET(QT_${_upper_qt_plugin}_PLUGIN_RELEASE CACHE) + UNSET(QT_${_upper_qt_plugin}_PLUGIN_DEBUG CACHE) + UNSET(QT_${_upper_qt_plugin}_PLUGIN CACHE) + ENDFOREACH(QT_PLUGIN) + ENDFOREACH(QT_PLUGIN_TYPE) + ENDIF(QT_QMAKE_CHANGED) + + # find_library works better than find_file but we need to set prefixes to only match plugins + FOREACH(QT_PLUGIN_TYPE ${QT_PLUGIN_TYPES}) + STRING(TOUPPER ${QT_PLUGIN_TYPE} _upper_qt_plugin_type) + SET(QT_${_upper_qt_plugin_type}_PLUGINS_DIR ${QT_PLUGINS_DIR}/${QT_PLUGIN_TYPE}) + FOREACH(QT_PLUGIN ${QT_${_upper_qt_plugin_type}_PLUGINS}) + STRING(TOUPPER ${QT_PLUGIN} _upper_qt_plugin) + IF(QT_IS_STATIC) + FIND_LIBRARY(QT_${_upper_qt_plugin}_LIBRARY_RELEASE + NAMES ${QT_PLUGIN}${QT_LIBINFIX} ${QT_PLUGIN}${QT_LIBINFIX}4 + PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + FIND_LIBRARY(QT_${_upper_qt_plugin}_LIBRARY_DEBUG + NAMES ${QT_PLUGIN}${QT_LIBINFIX}_debug ${QT_PLUGIN}${QT_LIBINFIX}d ${QT_PLUGIN}${QT_LIBINFIX}d4 + PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + _QT4_ADJUST_LIB_VARS(${QT_PLUGIN}) + ELSE(QT_IS_STATIC) + # find_library works easier/better than find_file but we need to set suffixes to only match plugins + SET(CMAKE_FIND_LIBRARY_SUFFIXES_DEFAULT ${CMAKE_FIND_LIBRARY_SUFFIXES}) + SET(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_MODULE_SUFFIX} ${CMAKE_SHARED_LIBRARY_SUFFIX}) + FIND_LIBRARY(QT_${_upper_qt_plugin}_PLUGIN_RELEASE + NAMES ${QT_PLUGIN}${QT_LIBINFIX} ${QT_PLUGIN}${QT_LIBINFIX}4 + PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + FIND_LIBRARY(QT_${_upper_qt_plugin}_PLUGIN_DEBUG + NAMES ${QT_PLUGIN}${QT_LIBINFIX}_debug ${QT_PLUGIN}${QT_LIBINFIX}d ${QT_PLUGIN}${QT_LIBINFIX}d4 + PATHS ${QT_${_upper_qt_plugin_type}_PLUGINS_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + MARK_AS_ADVANCED(QT_${_upper_qt_plugin}_PLUGIN_RELEASE QT_${_upper_qt_plugin}_PLUGIN_DEBUG) + SET(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_DEFAULT}) + ENDIF(QT_IS_STATIC) + ENDFOREACH(QT_PLUGIN) + ENDFOREACH(QT_PLUGIN_TYPE) + + + ###################################### + # + # Macros for building Qt files + # + ###################################### + + INCLUDE("${_qt4_current_dir}/Qt4Macros.cmake") + + # set version variables + STRING(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" QT_VERSION_MAJOR "${QTVERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.([0-9])+\\.[0-9]+.*" "\\1" QT_VERSION_MINOR "${QTVERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" QT_VERSION_PATCH "${QTVERSION}") + +ENDIF(QT_QMAKE_EXECUTABLE AND QTVERSION) + +#support old QT_MIN_VERSION if set, but not if version is supplied by find_package() +IF(NOT Qt4_FIND_VERSION AND QT_MIN_VERSION) + SET(Qt4_FIND_VERSION ${QT_MIN_VERSION}) +ENDIF(NOT Qt4_FIND_VERSION AND QT_MIN_VERSION) + +IF( Qt4_FIND_COMPONENTS ) + + # if components specified in find_package(), make sure each of those pieces were found + SET(_QT4_FOUND_REQUIRED_VARS QT_QMAKE_EXECUTABLE QT_MOC_EXECUTABLE QT_RCC_EXECUTABLE QT_INCLUDE_DIR QT_LIBRARY_DIR) + FOREACH( component ${Qt4_FIND_COMPONENTS} ) + STRING( TOUPPER ${component} _COMPONENT ) + if(${_COMPONENT} STREQUAL "QTMAIN") + IF(Q_WS_WIN) + SET(_QT4_FOUND_REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS} QT_${_COMPONENT}_LIBRARY) + ENDIF(Q_WS_WIN) + else(${_COMPONENT} STREQUAL "QTMAIN") + SET(_QT4_FOUND_REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS} QT_${_COMPONENT}_INCLUDE_DIR QT_${_COMPONENT}_LIBRARY) + endif(${_COMPONENT} STREQUAL "QTMAIN") + ENDFOREACH( component ) + + if(Qt4_FIND_COMPONENTS MATCHES QtGui) + SET(_QT4_FOUND_REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS} QT_UIC_EXECUTABLE) + endif(Qt4_FIND_COMPONENTS MATCHES QtGui) + +ELSE( Qt4_FIND_COMPONENTS ) + + # if no components specified, we'll make a default set of required variables to say Qt is found + SET(_QT4_FOUND_REQUIRED_VARS QT_QMAKE_EXECUTABLE QT_MOC_EXECUTABLE QT_RCC_EXECUTABLE QT_UIC_EXECUTABLE QT_INCLUDE_DIR + QT_LIBRARY_DIR QT_QTCORE_LIBRARY) + +ENDIF( Qt4_FIND_COMPONENTS ) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qt4 + REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS} + VERSION_VAR QTVERSION + ) + +####################################### +# +# compatibility settings +# +####################################### +# Backwards compatibility for CMake1.4 and 1.2 +SET (QT_MOC_EXE ${QT_MOC_EXECUTABLE} ) +SET (QT_UIC_EXE ${QT_UIC_EXECUTABLE} ) +SET( QT_QT_LIBRARY "") +SET(QT_FOUND ${QT4_FOUND}) + diff --git a/Modules/FindQuickTime.cmake b/Modules/FindQuickTime.cmake new file mode 100644 index 0000000..038c2dd --- /dev/null +++ b/Modules/FindQuickTime.cmake @@ -0,0 +1,47 @@ +# Locate QuickTime +# This module defines +# QUICKTIME_LIBRARY +# QUICKTIME_FOUND, if false, do not try to link to gdal +# QUICKTIME_INCLUDE_DIR, where to find the headers +# +# $QUICKTIME_DIR is an environment variable that would +# correspond to the ./configure --prefix=$QUICKTIME_DIR +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# QuickTime on OS X looks different than QuickTime for Windows, +# so I am going to case the two. + +IF(APPLE) + FIND_PATH(QUICKTIME_INCLUDE_DIR QuickTime/QuickTime.h) + FIND_LIBRARY(QUICKTIME_LIBRARY QuickTime) +ELSE(APPLE) + FIND_PATH(QUICKTIME_INCLUDE_DIR QuickTime.h + HINTS + $ENV{QUICKTIME_DIR}/include + $ENV{QUICKTIME_DIR} + ) + FIND_LIBRARY(QUICKTIME_LIBRARY QuickTime + HINTS + $ENV{QUICKTIME_DIR}/lib + $ENV{QUICKTIME_DIR} + ) +ENDIF(APPLE) + +# handle the QUIETLY and REQUIRED arguments and set QUICKTIME_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(QuickTime DEFAULT_MSG QUICKTIME_LIBRARY QUICKTIME_INCLUDE_DIR) diff --git a/Modules/FindRTI.cmake b/Modules/FindRTI.cmake new file mode 100644 index 0000000..031c138 --- /dev/null +++ b/Modules/FindRTI.cmake @@ -0,0 +1,102 @@ +# - Try to find M&S HLA RTI libraries +# This module finds if any HLA RTI is installed and locates the standard RTI +# include files and libraries. +# +# RTI is a simulation infrastructure standardized by IEEE and SISO. It has a +# well defined C++ API that assures that simulation applications are +# independent on a particular RTI implementation. +# http://en.wikipedia.org/wiki/Run-Time_Infrastructure_(simulation) +# +# This code sets the following variables: +# RTI_INCLUDE_DIR = the directory where RTI includes file are found +# RTI_LIBRARIES = The libraries to link against to use RTI +# RTI_DEFINITIONS = -DRTI_USES_STD_FSTREAM +# RTI_FOUND = Set to FALSE if any HLA RTI was not found +# +# Report problems to + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# Copyright 2008 Petr Gotthard +# +# 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.) + +MACRO(RTI_MESSAGE_QUIETLY QUIET TYPE MSG) + IF(NOT ${QUIET}) + MESSAGE(${TYPE} "${MSG}") + ENDIF(NOT ${QUIET}) +ENDMACRO(RTI_MESSAGE_QUIETLY QUIET TYPE MSG) + +# Detect the CERTI installation, http://www.cert.fr/CERTI +IF ("$ENV{CERTI_HOME}" STRGREATER "") + FILE(TO_CMAKE_PATH "$ENV{CERTI_HOME}" CERTI_HOME) + RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "Using environment defined CERTI_HOME: ${CERTI_HOME}") +ENDIF ("$ENV{CERTI_HOME}" STRGREATER "") + +SET(RTI_DEFINITIONS "-DRTI_USES_STD_FSTREAM") + +# Detect the MAK Technologies RTI installation, http://www.mak.com/products/rti.php +# note: the following list is ordered to find the most recent version first +SET(RTI_POSSIBLE_DIRS + ${CERTI_HOME} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MAK Technologies\\MAK RTI 3.2 MSVC++ 8.0;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MAK RTI 3.2-win32-msvc++8.0;InstallLocation]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MAK Technologies\\MAK RTI 2.2;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MAK RTI 2.2;InstallLocation]") + +SET(RTI_OLD_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}") +# The MAK RTI has the "lib" prefix even on Windows. +SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "") + +FIND_LIBRARY(RTI_LIBRARY + NAMES RTI RTI-NG + PATHS ${RTI_POSSIBLE_DIRS} + PATH_SUFFIXES lib + DOC "The RTI Library") + +IF (RTI_LIBRARY) + SET(RTI_LIBRARIES ${RTI_LIBRARY}) + RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI library found: ${RTI_LIBRARY}") +ELSE (RTI_LIBRARY) + RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI library NOT found") +ENDIF (RTI_LIBRARY) + +FIND_LIBRARY(RTI_FEDTIME_LIBRARY + NAMES FedTime + PATHS ${RTI_POSSIBLE_DIRS} + PATH_SUFFIXES lib + DOC "The FedTime Library") + +IF (RTI_FEDTIME_LIBRARY) + SET(RTI_LIBRARIES ${RTI_LIBRARIES} ${RTI_FEDTIME_LIBRARY}) + RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI FedTime found: ${RTI_FEDTIME_LIBRARY}") +ENDIF (RTI_FEDTIME_LIBRARY) + +FIND_PATH(RTI_INCLUDE_DIR + NAMES RTI.hh + PATHS ${RTI_POSSIBLE_DIRS} + PATH_SUFFIXES include + DOC "The RTI Include Files") + +IF (RTI_INCLUDE_DIR) + RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI headers found: ${RTI_INCLUDE_DIR}") +ELSE (RTI_INCLUDE_DIR) + RTI_MESSAGE_QUIETLY(RTI_FIND_QUIETLY STATUS "RTI headers NOT found") +ENDIF (RTI_INCLUDE_DIR) + +# Set the modified system variables back to the original value. +SET(CMAKE_FIND_LIBRARY_PREFIXES "${RTI_OLD_FIND_LIBRARY_PREFIXES}") + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(RTI DEFAULT_MSG + RTI_LIBRARY RTI_INCLUDE_DIR) + +# $Id$ diff --git a/Modules/FindRuby.cmake b/Modules/FindRuby.cmake new file mode 100644 index 0000000..5e973e4 --- /dev/null +++ b/Modules/FindRuby.cmake @@ -0,0 +1,243 @@ +# - Find Ruby +# This module finds if Ruby is installed and determines where the include files +# and libraries are. Ruby 1.8 and 1.9 are supported. +# +# The minimum required version of Ruby can be specified using the +# standard syntax, e.g. FIND_PACKAGE(Ruby 1.8) +# +# It also determines what the name of the library is. This +# code sets the following variables: +# +# RUBY_EXECUTABLE = full path to the ruby binary +# RUBY_INCLUDE_DIRS = include dirs to be used when using the ruby library +# RUBY_LIBRARY = full path to the ruby library +# RUBY_VERSION = the version of ruby which was found, e.g. "1.8.7" +# RUBY_FOUND = set to true if ruby ws found successfully +# +# RUBY_INCLUDE_PATH = same as RUBY_INCLUDE_DIRS, only provided for compatibility reasons, don't use it + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# Copyright 2008-2009 Alexander Neundorf +# +# 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.) + +# RUBY_ARCHDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"archdir"@:>@)'` +# RUBY_SITEARCHDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"sitearchdir"@:>@)'` +# RUBY_SITEDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"sitelibdir"@:>@)'` +# RUBY_LIBDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"libdir"@:>@)'` +# RUBY_LIBRUBYARG=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"LIBRUBYARG_SHARED"@:>@)'` + +# uncomment the following line to get debug output for this file +# SET(_RUBY_DEBUG_OUTPUT TRUE) + +# Determine the list of possible names of the ruby executable depending +# on which version of ruby is required +SET(_RUBY_POSSIBLE_EXECUTABLE_NAMES ruby) + +# if 1.9 is required, don't look for ruby18 and ruby1.8, default to version 1.8 +IF(Ruby_FIND_VERSION_MAJOR AND Ruby_FIND_VERSION_MINOR) + SET(Ruby_FIND_VERSION_SHORT_NODOT "${Ruby_FIND_VERSION_MAJOR}${RUBY_FIND_VERSION_MINOR}") +ELSE(Ruby_FIND_VERSION_MAJOR AND Ruby_FIND_VERSION_MINOR) + SET(Ruby_FIND_VERSION_SHORT_NODOT "18") +ENDIF(Ruby_FIND_VERSION_MAJOR AND Ruby_FIND_VERSION_MINOR) + +SET(_RUBY_POSSIBLE_EXECUTABLE_NAMES ${_RUBY_POSSIBLE_EXECUTABLE_NAMES} ruby1.9 ruby19) + +# if we want a version below 1.9, also look for ruby 1.8 +IF("${Ruby_FIND_VERSION_SHORT_NODOT}" VERSION_LESS "19") + SET(_RUBY_POSSIBLE_EXECUTABLE_NAMES ${_RUBY_POSSIBLE_EXECUTABLE_NAMES} ruby1.8 ruby18) +ENDIF("${Ruby_FIND_VERSION_SHORT_NODOT}" VERSION_LESS "19") + +FIND_PROGRAM(RUBY_EXECUTABLE NAMES ${_RUBY_POSSIBLE_EXECUTABLE_NAMES}) + + +IF(RUBY_EXECUTABLE AND NOT RUBY_VERSION_MAJOR) + FUNCTION(_RUBY_CONFIG_VAR RBVAR OUTVAR) + EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['${RBVAR}']" + RESULT_VARIABLE _RUBY_SUCCESS + OUTPUT_VARIABLE _RUBY_OUTPUT + ERROR_QUIET) + IF(_RUBY_SUCCESS OR NOT _RUBY_OUTPUT) + EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print Config::CONFIG['${RBVAR}']" + RESULT_VARIABLE _RUBY_SUCCESS + OUTPUT_VARIABLE _RUBY_OUTPUT + ERROR_QUIET) + ENDIF(_RUBY_SUCCESS OR NOT _RUBY_OUTPUT) + SET(${OUTVAR} "${_RUBY_OUTPUT}" PARENT_SCOPE) + ENDFUNCTION(_RUBY_CONFIG_VAR) + + + # query the ruby version + _RUBY_CONFIG_VAR("MAJOR" RUBY_VERSION_MAJOR) + _RUBY_CONFIG_VAR("MINOR" RUBY_VERSION_MINOR) + _RUBY_CONFIG_VAR("TEENY" RUBY_VERSION_PATCH) + + # query the different directories + _RUBY_CONFIG_VAR("archdir" RUBY_ARCH_DIR) + _RUBY_CONFIG_VAR("arch" RUBY_ARCH) + _RUBY_CONFIG_VAR("rubyhdrdir" RUBY_HDR_DIR) + _RUBY_CONFIG_VAR("libdir" RUBY_POSSIBLE_LIB_DIR) + _RUBY_CONFIG_VAR("rubylibdir" RUBY_RUBY_LIB_DIR) + + # site_ruby + _RUBY_CONFIG_VAR("sitearchdir" RUBY_SITEARCH_DIR) + _RUBY_CONFIG_VAR("sitelibdir" RUBY_SITELIB_DIR) + + # vendor_ruby available ? + EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r vendor-specific -e "print 'true'" + OUTPUT_VARIABLE RUBY_HAS_VENDOR_RUBY ERROR_QUIET) + + IF(RUBY_HAS_VENDOR_RUBY) + _RUBY_CONFIG_VAR("vendorlibdir" RUBY_VENDORLIB_DIR) + _RUBY_CONFIG_VAR("vendorarchdir" RUBY_VENDORARCH_DIR) + ENDIF(RUBY_HAS_VENDOR_RUBY) + + # save the results in the cache so we don't have to run ruby the next time again + SET(RUBY_VERSION_MAJOR ${RUBY_VERSION_MAJOR} CACHE PATH "The Ruby major version" FORCE) + SET(RUBY_VERSION_MINOR ${RUBY_VERSION_MINOR} CACHE PATH "The Ruby minor version" FORCE) + SET(RUBY_VERSION_PATCH ${RUBY_VERSION_PATCH} CACHE PATH "The Ruby patch version" FORCE) + SET(RUBY_ARCH_DIR ${RUBY_ARCH_DIR} CACHE PATH "The Ruby arch dir" FORCE) + SET(RUBY_HDR_DIR ${RUBY_HDR_DIR} CACHE PATH "The Ruby header dir (1.9)" FORCE) + SET(RUBY_POSSIBLE_LIB_DIR ${RUBY_POSSIBLE_LIB_DIR} CACHE PATH "The Ruby lib dir" FORCE) + SET(RUBY_RUBY_LIB_DIR ${RUBY_RUBY_LIB_DIR} CACHE PATH "The Ruby ruby-lib dir" FORCE) + SET(RUBY_SITEARCH_DIR ${RUBY_SITEARCH_DIR} CACHE PATH "The Ruby site arch dir" FORCE) + SET(RUBY_SITELIB_DIR ${RUBY_SITELIB_DIR} CACHE PATH "The Ruby site lib dir" FORCE) + SET(RUBY_HAS_VENDOR_RUBY ${RUBY_HAS_VENDOR_RUBY} CACHE BOOL "Vendor Ruby is available" FORCE) + SET(RUBY_VENDORARCH_DIR ${RUBY_VENDORARCH_DIR} CACHE PATH "The Ruby vendor arch dir" FORCE) + SET(RUBY_VENDORLIB_DIR ${RUBY_VENDORLIB_DIR} CACHE PATH "The Ruby vendor lib dir" FORCE) + + MARK_AS_ADVANCED( + RUBY_ARCH_DIR + RUBY_ARCH + RUBY_HDR_DIR + RUBY_POSSIBLE_LIB_DIR + RUBY_RUBY_LIB_DIR + RUBY_SITEARCH_DIR + RUBY_SITELIB_DIR + RUBY_HAS_VENDOR_RUBY + RUBY_VENDORARCH_DIR + RUBY_VENDORLIB_DIR + RUBY_VERSION_MAJOR + RUBY_VERSION_MINOR + RUBY_VERSION_PATCH + ) +ENDIF(RUBY_EXECUTABLE AND NOT RUBY_VERSION_MAJOR) + +# In case RUBY_EXECUTABLE could not be executed (e.g. cross compiling) +# try to detect which version we found. This is not too good. +IF(RUBY_EXECUTABLE AND NOT RUBY_VERSION_MAJOR) + # by default assume 1.8.0 + SET(RUBY_VERSION_MAJOR 1) + SET(RUBY_VERSION_MINOR 8) + SET(RUBY_VERSION_PATCH 0) + # check whether we found 1.9.x + IF(${RUBY_EXECUTABLE} MATCHES "ruby1.?9" OR RUBY_HDR_DIR) + SET(RUBY_VERSION_MAJOR 1) + SET(RUBY_VERSION_MINOR 9) + ENDIF(${RUBY_EXECUTABLE} MATCHES "ruby1.?9" OR RUBY_HDR_DIR) +ENDIF(RUBY_EXECUTABLE AND NOT RUBY_VERSION_MAJOR) + +IF(RUBY_VERSION_MAJOR) + SET(RUBY_VERSION "${RUBY_VERSION_MAJOR}.${RUBY_VERSION_MINOR}.${RUBY_VERSION_PATCH}") + SET(_RUBY_VERSION_SHORT "${RUBY_VERSION_MAJOR}.${RUBY_VERSION_MINOR}") + SET(_RUBY_VERSION_SHORT_NODOT "${RUBY_VERSION_MAJOR}${RUBY_VERSION_MINOR}") + SET(_RUBY_NODOT_VERSION "${RUBY_VERSION_MAJOR}${RUBY_VERSION_MINOR}${RUBY_VERSION_PATCH}") +ENDIF(RUBY_VERSION_MAJOR) + +FIND_PATH(RUBY_INCLUDE_DIR + NAMES ruby.h + HINTS + ${RUBY_HDR_DIR} + ${RUBY_ARCH_DIR} + /usr/lib/ruby/${_RUBY_VERSION_SHORT}/i586-linux-gnu/ ) + +SET(RUBY_INCLUDE_DIRS ${RUBY_INCLUDE_DIR} ) + +# if ruby > 1.8 is required or if ruby > 1.8 was found, search for the config.h dir +IF( "${Ruby_FIND_VERSION_SHORT_NODOT}" GREATER 18 OR "${_RUBY_VERSION_SHORT_NODOT}" GREATER 18 OR RUBY_HDR_DIR) + FIND_PATH(RUBY_CONFIG_INCLUDE_DIR + NAMES ruby/config.h config.h + HINTS + ${RUBY_HDR_DIR}/${RUBY_ARCH} + ${RUBY_ARCH_DIR} + ) + + SET(RUBY_INCLUDE_DIRS ${RUBY_INCLUDE_DIRS} ${RUBY_CONFIG_INCLUDE_DIR} ) +ENDIF( "${Ruby_FIND_VERSION_SHORT_NODOT}" GREATER 18 OR "${_RUBY_VERSION_SHORT_NODOT}" GREATER 18 OR RUBY_HDR_DIR) + + +# Determine the list of possible names for the ruby library +SET(_RUBY_POSSIBLE_LIB_NAMES ruby ruby-static ruby${_RUBY_VERSION_SHORT} ruby${_RUBY_VERSION_SHORT_NODOT} ruby-${_RUBY_VERSION_SHORT} ruby-${RUBY_VERSION}) + +IF(WIN32) + SET( _RUBY_MSVC_RUNTIME "" ) + IF( MSVC60 ) + SET( _RUBY_MSVC_RUNTIME "60" ) + ENDIF( MSVC60 ) + IF( MSVC70 ) + SET( _RUBY_MSVC_RUNTIME "70" ) + ENDIF( MSVC70 ) + IF( MSVC71 ) + SET( _RUBY_MSVC_RUNTIME "71" ) + ENDIF( MSVC71 ) + IF( MSVC80 ) + SET( _RUBY_MSVC_RUNTIME "80" ) + ENDIF( MSVC80 ) + IF( MSVC90 ) + SET( _RUBY_MSVC_RUNTIME "90" ) + ENDIF( MSVC90 ) + + LIST(APPEND _RUBY_POSSIBLE_LIB_NAMES + "msvcr${_RUBY_MSVC_RUNTIME}-ruby${_RUBY_NODOT_VERSION}" + "msvcr${_RUBY_MSVC_RUNTIME}-ruby${_RUBY_NODOT_VERSION}-static" + "msvcrt-ruby${_RUBY_NODOT_VERSION}" + "msvcrt-ruby${_RUBY_NODOT_VERSION}-static" ) +ENDIF(WIN32) + +FIND_LIBRARY(RUBY_LIBRARY NAMES ${_RUBY_POSSIBLE_LIB_NAMES} HINTS ${RUBY_POSSIBLE_LIB_DIR} ) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +SET(_RUBY_REQUIRED_VARS RUBY_EXECUTABLE RUBY_INCLUDE_DIR RUBY_LIBRARY) +IF(_RUBY_VERSION_SHORT_NODOT GREATER 18) + LIST(APPEND _RUBY_REQUIRED_VARS RUBY_CONFIG_INCLUDE_DIR) +ENDIF(_RUBY_VERSION_SHORT_NODOT GREATER 18) + +IF(_RUBY_DEBUG_OUTPUT) + MESSAGE(STATUS "--------FindRuby.cmake debug------------") + MESSAGE(STATUS "_RUBY_POSSIBLE_EXECUTABLE_NAMES: ${_RUBY_POSSIBLE_EXECUTABLE_NAMES}") + MESSAGE(STATUS "_RUBY_POSSIBLE_LIB_NAMES: ${_RUBY_POSSIBLE_LIB_NAMES}") + MESSAGE(STATUS "RUBY_ARCH_DIR: ${RUBY_ARCH_DIR}") + MESSAGE(STATUS "RUBY_HDR_DIR: ${RUBY_HDR_DIR}") + MESSAGE(STATUS "RUBY_POSSIBLE_LIB_DIR: ${RUBY_POSSIBLE_LIB_DIR}") + MESSAGE(STATUS "Found RUBY_VERSION: \"${RUBY_VERSION}\" , short: \"${_RUBY_VERSION_SHORT}\", nodot: \"${_RUBY_VERSION_SHORT_NODOT}\"") + MESSAGE(STATUS "_RUBY_REQUIRED_VARS: ${_RUBY_REQUIRED_VARS}") + MESSAGE(STATUS "RUBY_EXECUTABLE: ${RUBY_EXECUTABLE}") + MESSAGE(STATUS "RUBY_LIBRARY: ${RUBY_LIBRARY}") + MESSAGE(STATUS "RUBY_INCLUDE_DIR: ${RUBY_INCLUDE_DIR}") + MESSAGE(STATUS "RUBY_CONFIG_INCLUDE_DIR: ${RUBY_CONFIG_INCLUDE_DIR}") + MESSAGE(STATUS "--------------------") +ENDIF(_RUBY_DEBUG_OUTPUT) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ruby REQUIRED_VARS ${_RUBY_REQUIRED_VARS} + VERSION_VAR RUBY_VERSION ) + +MARK_AS_ADVANCED( + RUBY_EXECUTABLE + RUBY_LIBRARY + RUBY_INCLUDE_DIR + RUBY_CONFIG_INCLUDE_DIR + ) + +# Set some variables for compatibility with previous version of this file +SET(RUBY_POSSIBLE_LIB_PATH ${RUBY_POSSIBLE_LIB_DIR}) +SET(RUBY_RUBY_LIB_PATH ${RUBY_RUBY_LIB_DIR}) +SET(RUBY_INCLUDE_PATH ${RUBY_INCLUDE_DIRS}) diff --git a/Modules/FindSDL.cmake b/Modules/FindSDL.cmake new file mode 100644 index 0000000..1c04726 --- /dev/null +++ b/Modules/FindSDL.cmake @@ -0,0 +1,173 @@ +# Locate SDL library +# This module defines +# SDL_LIBRARY, the name of the library to link against +# SDL_FOUND, if false, do not try to link to SDL +# SDL_INCLUDE_DIR, where to find SDL.h +# +# This module responds to the the flag: +# SDL_BUILDING_LIBRARY +# If this is defined, then no SDL_main will be linked in because +# only applications need main(). +# Otherwise, it is assumed you are building an application and this +# module will attempt to locate and set the the proper link flags +# as part of the returned SDL_LIBRARY variable. +# +# Don't forget to include SDLmain.h and SDLmain.m your project for the +# OS X framework based version. (Other versions link to -lSDLmain which +# this module will try to find on your behalf.) Also for OS X, this +# module will automatically add the -framework Cocoa on your behalf. +# +# +# Additional Note: If you see an empty SDL_LIBRARY_TEMP in your configuration +# and no SDL_LIBRARY, it means CMake did not find your SDL library +# (SDL.dll, libsdl.so, SDL.framework, etc). +# Set SDL_LIBRARY_TEMP to point to your SDL library, and configure again. +# Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this value +# as appropriate. These values are used to generate the final SDL_LIBRARY +# variable, but when these values are unset, SDL_LIBRARY does not get created. +# +# +# $SDLDIR is an environment variable that would +# correspond to the ./configure --prefix=$SDLDIR +# used in building SDL. +# l.e.galup 9-20-02 +# +# Modified by Eric Wing. +# Added code to assist with automated building by using environmental variables +# and providing a more controlled/consistent search behavior. +# Added new modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). +# Also corrected the header search path to follow "proper" SDL guidelines. +# Added a search for SDLmain which is needed by some platforms. +# Added a search for threads which is needed by some platforms. +# Added needed compile switches for MinGW. +# +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDL_LIBRARY to override this selection or set the CMake environment +# CMAKE_INCLUDE_PATH to modify the search paths. +# +# Note that the header path has changed from SDL/SDL.h to just SDL.h +# This needed to change because "proper" SDL convention +# is #include "SDL.h", not . This is done for portability +# reasons because not all systems place things in SDL/ (see FreeBSD). + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(SDL_INCLUDE_DIR SDL.h + HINTS + $ENV{SDLDIR} + PATH_SUFFIXES include/SDL include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports + /usr/include/SDL12 + /usr/include/SDL11 + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +# SDL-1.1 is the name used by FreeBSD ports... +# don't confuse it for the version number. +FIND_LIBRARY(SDL_LIBRARY_TEMP + NAMES SDL SDL-1.1 + HINTS + $ENV{SDLDIR} + PATH_SUFFIXES lib64 lib + PATHS + /sw + /opt/local + /opt/csw + /opt +) + +IF(NOT SDL_BUILDING_LIBRARY) + IF(NOT ${SDL_INCLUDE_DIR} MATCHES ".framework") + # Non-OS X framework versions expect you to also dynamically link to + # SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms + # seem to provide SDLmain for compatibility even though they don't + # necessarily need it. + FIND_LIBRARY(SDLMAIN_LIBRARY + NAMES SDLmain SDLmain-1.1 + HINTS + $ENV{SDLDIR} + PATH_SUFFIXES lib64 lib + PATHS + /sw + /opt/local + /opt/csw + /opt + ) + ENDIF(NOT ${SDL_INCLUDE_DIR} MATCHES ".framework") +ENDIF(NOT SDL_BUILDING_LIBRARY) + +# SDL may require threads on your system. +# The Apple build may not need an explicit flag because one of the +# frameworks may already provide it. +# But for non-OSX systems, I will use the CMake Threads package. +IF(NOT APPLE) + FIND_PACKAGE(Threads) +ENDIF(NOT APPLE) + +# MinGW needs an additional library, mwindows +# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -lmwindows +# (Actually on second look, I think it only needs one of the m* libraries.) +IF(MINGW) + SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") +ENDIF(MINGW) + +IF(SDL_LIBRARY_TEMP) + # For SDLmain + IF(NOT SDL_BUILDING_LIBRARY) + IF(SDLMAIN_LIBRARY) + SET(SDL_LIBRARY_TEMP ${SDLMAIN_LIBRARY} ${SDL_LIBRARY_TEMP}) + ENDIF(SDLMAIN_LIBRARY) + ENDIF(NOT SDL_BUILDING_LIBRARY) + + # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa. + # CMake doesn't display the -framework Cocoa string in the UI even + # though it actually is there if I modify a pre-used variable. + # I think it has something to do with the CACHE STRING. + # So I use a temporary variable until the end so I can set the + # "real" variable in one-shot. + IF(APPLE) + SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} "-framework Cocoa") + ENDIF(APPLE) + + # For threads, as mentioned Apple doesn't need this. + # In fact, there seems to be a problem if I used the Threads package + # and try using this line, so I'm just skipping it entirely for OS X. + IF(NOT APPLE) + SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) + ENDIF(NOT APPLE) + + # For MinGW library + IF(MINGW) + SET(SDL_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL_LIBRARY_TEMP}) + ENDIF(MINGW) + + # Set the final string here so the GUI reflects the final state. + SET(SDL_LIBRARY ${SDL_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found") + # Set the temp variable to INTERNAL so it is not seen in the CMake GUI + SET(SDL_LIBRARY_TEMP "${SDL_LIBRARY_TEMP}" CACHE INTERNAL "") +ENDIF(SDL_LIBRARY_TEMP) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL + REQUIRED_VARS SDL_LIBRARY SDL_INCLUDE_DIR) diff --git a/Modules/FindSDL_image.cmake b/Modules/FindSDL_image.cmake new file mode 100644 index 0000000..9a130fa --- /dev/null +++ b/Modules/FindSDL_image.cmake @@ -0,0 +1,74 @@ +# Locate SDL_image library +# This module defines +# SDLIMAGE_LIBRARY, the name of the library to link against +# SDLIMAGE_FOUND, if false, do not try to link to SDL +# SDLIMAGE_INCLUDE_DIR, where to find SDL/SDL.h +# +# $SDLDIR is an environment variable that would +# correspond to the ./configure --prefix=$SDLDIR +# used in building SDL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module, but with modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(SDLIMAGE_INCLUDE_DIR SDL_image.h + HINTS + $ENV{SDLIMAGEDIR} + $ENV{SDLDIR} + PATH_SUFFIXES include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/include/SDL + /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports + /usr/include/SDL12 + /usr/include/SDL11 + /usr/local/include + /usr/include + /sw/include/SDL # Fink + /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include +) + +FIND_LIBRARY(SDLIMAGE_LIBRARY + NAMES SDL_image + HINTS + $ENV{SDLIMAGEDIR} + $ENV{SDLDIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt +) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDLIMAGE + REQUIRED_VARS SDLIMAGE_LIBRARY SDLIMAGE_INCLUDE_DIR) diff --git a/Modules/FindSDL_mixer.cmake b/Modules/FindSDL_mixer.cmake new file mode 100644 index 0000000..ce1ae9e --- /dev/null +++ b/Modules/FindSDL_mixer.cmake @@ -0,0 +1,74 @@ +# Locate SDL_mixer library +# This module defines +# SDLMIXER_LIBRARY, the name of the library to link against +# SDLMIXER_FOUND, if false, do not try to link to SDL +# SDLMIXER_INCLUDE_DIR, where to find SDL/SDL.h +# +# $SDLDIR is an environment variable that would +# correspond to the ./configure --prefix=$SDLDIR +# used in building SDL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module, but with modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(SDLMIXER_INCLUDE_DIR SDL_mixer.h + HINTS + $ENV{SDLMIXERDIR} + $ENV{SDLDIR} + PATH_SUFFIXES include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/include/SDL + /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports + /usr/include/SDL12 + /usr/include/SDL11 + /usr/local/include + /usr/include + /sw/include/SDL # Fink + /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include +) + +FIND_LIBRARY(SDLMIXER_LIBRARY + NAMES SDL_mixer + HINTS + $ENV{SDLMIXERDIR} + $ENV{SDLDIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt +) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDLMIXER + REQUIRED_VARS SDLMIXER_LIBRARY SDLMIXER_INCLUDE_DIR) diff --git a/Modules/FindSDL_net.cmake b/Modules/FindSDL_net.cmake new file mode 100644 index 0000000..b5ada54 --- /dev/null +++ b/Modules/FindSDL_net.cmake @@ -0,0 +1,73 @@ +# Locate SDL_net library +# This module defines +# SDLNET_LIBRARY, the name of the library to link against +# SDLNET_FOUND, if false, do not try to link against +# SDLNET_INCLUDE_DIR, where to find the headers +# +# $SDLDIR is an environment variable that would +# correspond to the ./configure --prefix=$SDLDIR +# used in building SDL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module, but with modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(SDLNET_INCLUDE_DIR SDL_net.h + HINTS + $ENV{SDLNETDIR} + $ENV{SDLDIR} + PATH_SUFFIXES include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/include/SDL + /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports + /usr/include/SDL12 + /usr/include/SDL11 + /usr/local/include + /usr/include + /sw/include/SDL # Fink + /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include +) +FIND_LIBRARY(SDLNET_LIBRARY + NAMES SDL_net + HINTS + $ENV{SDLNETDIR} + $ENV{SDLDIR} + PATH_SUFFIXES lib64 lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt +) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDLNET + REQUIRED_VARS SDLNET_LIBRARY SDLNET_INCLUDE_DIR) diff --git a/Modules/FindSDL_sound.cmake b/Modules/FindSDL_sound.cmake new file mode 100644 index 0000000..8edf6ca --- /dev/null +++ b/Modules/FindSDL_sound.cmake @@ -0,0 +1,421 @@ +# Locates the SDL_sound library + +# This module depends on SDL being found and +# must be called AFTER FindSDL.cmake is called. + +# This module defines +# SDL_SOUND_INCLUDE_DIR, where to find SDL_sound.h +# SDL_SOUND_FOUND, if false, do not try to link to SDL +# SDL_SOUND_LIBRARIES, this contains the list of libraries that you need +# to link against. This is a read-only variable and is marked INTERNAL. +# SDL_SOUND_EXTRAS, this is an optional variable for you to add your own +# flags to SDL_SOUND_LIBRARIES. This is prepended to SDL_SOUND_LIBRARIES. +# This is available mostly for cases this module failed to anticipate for +# and you must add additional flags. This is marked as ADVANCED. + +# +# This module also defines (but you shouldn't need to use directly) +# SDL_SOUND_LIBRARY, the name of just the SDL_sound library you would link +# against. Use SDL_SOUND_LIBRARIES for you link instructions and not this one. +# And might define the following as needed +# MIKMOD_LIBRARY +# MODPLUG_LIBRARY +# OGG_LIBRARY +# VORBIS_LIBRARY +# SMPEG_LIBRARY +# FLAC_LIBRARY +# SPEEX_LIBRARY +# +# Typically, you should not use these variables directly, and you should use +# SDL_SOUND_LIBRARIES which contains SDL_SOUND_LIBRARY and the other audio libraries +# (if needed) to successfully compile on your system . +# +# Created by Eric Wing. +# This module is a bit more complicated than the other FindSDL* family modules. +# The reason is that SDL_sound can be compiled in a large variety of different ways +# which are independent of platform. SDL_sound may dynamically link against other 3rd +# party libraries to get additional codec support, such as Ogg Vorbis, SMPEG, ModPlug, +# MikMod, FLAC, Speex, and potentially others. +# Under some circumstances which I don't fully understand, +# there seems to be a requirement +# that dependent libraries of libraries you use must also be explicitly +# linked against in order to successfully compile. SDL_sound does not currently +# have any system in place to know how it was compiled. +# So this CMake module does the hard work in trying to discover which 3rd party +# libraries are required for building (if any). +# This module uses a brute force approach to create a test program that uses SDL_sound, +# and then tries to build it. If the build fails, it parses the error output for +# known symbol names to figure out which libraries are needed. +# +# Responds to the $SDLDIR and $SDLSOUNDDIR environmental variable that would +# correspond to the ./configure --prefix=$SDLDIR used in building SDL. +# +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDL_LIBRARY to override this selectionor set the CMake environment +# CMAKE_INCLUDE_PATH to modify the search paths. +# + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET(SDL_SOUND_EXTRAS "" CACHE STRING "SDL_sound extra flags") +MARK_AS_ADVANCED(SDL_SOUND_EXTRAS) + +# Find SDL_sound.h +FIND_PATH(SDL_SOUND_INCLUDE_DIR SDL_sound.h + HINTS + $ENV{SDLSOUNDDIR}/include + $ENV{SDLSOUNDDIR} + $ENV{SDLDIR}/include + $ENV{SDLDIR} + PATHS + /usr/local/include/SDL + /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports + /usr/include/SDL12 + /usr/include/SDL11 + /usr/local/include + /usr/include + /sw/include/SDL # Fink + /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include + ) + +FIND_LIBRARY(SDL_SOUND_LIBRARY + NAMES SDL_sound + HINTS + $ENV{SDLSOUNDDIR}/lib + $ENV{SDLSOUNDDIR} + $ENV{SDLDIR}/lib + $ENV{SDLDIR} + PATHS + /usr/local/lib + /usr/lib + /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib + ) + +IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) + + # CMake is giving me problems using TRY_COMPILE with the CMAKE_FLAGS + # for the :STRING syntax if I have multiple values contained in a + # single variable. This is a problem for the SDL_LIBRARY variable + # because it does just that. When I feed this variable to the command, + # only the first value gets the appropriate modifier (e.g. -I) and + # the rest get dropped. + # To get multiple single variables to work, I must separate them with a "\;" + # I could go back and modify the FindSDL.cmake module, but that's kind of painful. + # The solution would be to try something like: + # SET(SDL_TRY_COMPILE_LIBRARY_LIST "${SDL_TRY_COMPILE_LIBRARY_LIST}\;${CMAKE_THREAD_LIBS_INIT}") + # Instead, it was suggested on the mailing list to write a temporary CMakeLists.txt + # with a temporary test project and invoke that with TRY_COMPILE. + # See message thread "Figuring out dependencies for a library in order to build" + # 2005-07-16 + # TRY_COMPILE( + # MY_RESULT + # ${CMAKE_BINARY_DIR} + # ${PROJECT_SOURCE_DIR}/DetermineSoundLibs.c + # CMAKE_FLAGS + # -DINCLUDE_DIRECTORIES:STRING=${SDL_INCLUDE_DIR}\;${SDL_SOUND_INCLUDE_DIR} + # -DLINK_LIBRARIES:STRING=${SDL_SOUND_LIBRARY}\;${SDL_LIBRARY} + # OUTPUT_VARIABLE MY_OUTPUT + # ) + + # To minimize external dependencies, create a sdlsound test program + # which will be used to figure out if additional link dependencies are + # required for the link phase. + FILE(WRITE ${PROJECT_BINARY_DIR}/CMakeTmp/DetermineSoundLibs.c + "#include \"SDL_sound.h\" + #include \"SDL.h\" + int main(int argc, char* argv[]) + { + Sound_AudioInfo desired; + Sound_Sample* sample; + + SDL_Init(0); + Sound_Init(); + + /* This doesn't actually have to work, but Init() is a no-op + * for some of the decoders, so this should force more symbols + * to be pulled in. + */ + sample = Sound_NewSampleFromFile(argv[1], &desired, 4096); + + Sound_Quit(); + SDL_Quit(); + return 0; + }" + ) + + # Calling + # TARGET_LINK_LIBRARIES(DetermineSoundLibs "${SDL_SOUND_LIBRARY} ${SDL_LIBRARY}) + # causes problems when SDL_LIBRARY looks like + # /Library/Frameworks/SDL.framework;-framework Cocoa + # The ;-framework Cocoa seems to be confusing CMake once the OS X + # framework support was added. I was told that breaking up the list + # would fix the problem. + SET(TMP_TRY_LIBS) + FOREACH(lib ${SDL_SOUND_LIBRARY} ${SDL_LIBRARY}) + SET(TMP_TRY_LIBS "${TMP_TRY_LIBS} \"${lib}\"") + ENDFOREACH(lib) + + # MESSAGE("TMP_TRY_LIBS ${TMP_TRY_LIBS}") + + # Write the CMakeLists.txt and test project + # Weird, this is still sketchy. If I don't quote the variables + # in the TARGET_LINK_LIBRARIES, I seem to loose everything + # in the SDL_LIBRARY string after the "-framework". + # But if I quote the stuff in INCLUDE_DIRECTORIES, it doesn't work. + FILE(WRITE ${PROJECT_BINARY_DIR}/CMakeTmp/CMakeLists.txt + "PROJECT(DetermineSoundLibs) + INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR} ${SDL_SOUND_INCLUDE_DIR}) + ADD_EXECUTABLE(DetermineSoundLibs DetermineSoundLibs.c) + TARGET_LINK_LIBRARIES(DetermineSoundLibs ${TMP_TRY_LIBS})" + ) + + TRY_COMPILE( + MY_RESULT + ${PROJECT_BINARY_DIR}/CMakeTmp + ${PROJECT_BINARY_DIR}/CMakeTmp + DetermineSoundLibs + OUTPUT_VARIABLE MY_OUTPUT + ) + + # MESSAGE("${MY_RESULT}") + # MESSAGE(${MY_OUTPUT}) + + IF(NOT MY_RESULT) + + # I expect that MPGLIB, VOC, WAV, AIFF, and SHN are compiled in statically. + # I think Timidity is also compiled in statically. + # I've never had to explcitly link against Quicktime, so I'll skip that for now. + + SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARY}) + + # Find MikMod + IF("${MY_OUTPUT}" MATCHES "MikMod_") + FIND_LIBRARY(MIKMOD_LIBRARY + NAMES libmikmod-coreaudio mikmod + PATHS + $ENV{MIKMODDIR}/lib + $ENV{MIKMODDIR} + $ENV{SDLSOUNDDIR}/lib + $ENV{SDLSOUNDDIR} + $ENV{SDLDIR}/lib + $ENV{SDLDIR} + /usr/local/lib + /usr/lib + /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib + ) + IF(MIKMOD_LIBRARY) + SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${MIKMOD_LIBRARY}) + ENDIF(MIKMOD_LIBRARY) + ENDIF("${MY_OUTPUT}" MATCHES "MikMod_") + + # Find ModPlug + IF("${MY_OUTPUT}" MATCHES "MODPLUG_") + FIND_LIBRARY(MODPLUG_LIBRARY + NAMES modplug + PATHS + $ENV{MODPLUGDIR}/lib + $ENV{MODPLUGDIR} + $ENV{SDLSOUNDDIR}/lib + $ENV{SDLSOUNDDIR} + $ENV{SDLDIR}/lib + $ENV{SDLDIR} + /usr/local/lib + /usr/lib + /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib + ) + IF(MODPLUG_LIBRARY) + SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${MODPLUG_LIBRARY}) + ENDIF(MODPLUG_LIBRARY) + ENDIF("${MY_OUTPUT}" MATCHES "MODPLUG_") + + + # Find Ogg and Vorbis + IF("${MY_OUTPUT}" MATCHES "ov_") + FIND_LIBRARY(VORBIS_LIBRARY + NAMES vorbis Vorbis VORBIS + PATHS + $ENV{VORBISDIR}/lib + $ENV{VORBISDIR} + $ENV{OGGDIR}/lib + $ENV{OGGDIR} + $ENV{SDLSOUNDDIR}/lib + $ENV{SDLSOUNDDIR} + $ENV{SDLDIR}/lib + $ENV{SDLDIR} + /usr/local/lib + /usr/lib + /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib + ) + IF(VORBIS_LIBRARY) + SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${VORBIS_LIBRARY}) + ENDIF(VORBIS_LIBRARY) + + FIND_LIBRARY(OGG_LIBRARY + NAMES ogg Ogg OGG + PATHS + $ENV{OGGDIR}/lib + $ENV{OGGDIR} + $ENV{VORBISDIR}/lib + $ENV{VORBISDIR} + $ENV{SDLSOUNDDIR}/lib + $ENV{SDLSOUNDDIR} + $ENV{SDLDIR}/lib + $ENV{SDLDIR} + /usr/local/lib + /usr/lib + /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib + ) + IF(OGG_LIBRARY) + SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${OGG_LIBRARY}) + ENDIF(OGG_LIBRARY) + ENDIF("${MY_OUTPUT}" MATCHES "ov_") + + + # Find SMPEG + IF("${MY_OUTPUT}" MATCHES "SMPEG_") + FIND_LIBRARY(SMPEG_LIBRARY + NAMES smpeg SMPEG Smpeg SMpeg + PATHS + $ENV{SMPEGDIR}/lib + $ENV{SMPEGDIR} + $ENV{SDLSOUNDDIR}/lib + $ENV{SDLSOUNDDIR} + $ENV{SDLDIR}/lib + $ENV{SDLDIR} + /usr/local/lib + /usr/lib + /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib + ) + IF(SMPEG_LIBRARY) + SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${SMPEG_LIBRARY}) + ENDIF(SMPEG_LIBRARY) + ENDIF("${MY_OUTPUT}" MATCHES "SMPEG_") + + + # Find FLAC + IF("${MY_OUTPUT}" MATCHES "FLAC_") + FIND_LIBRARY(FLAC_LIBRARY + NAMES flac FLAC + PATHS + $ENV{FLACDIR}/lib + $ENV{FLACDIR} + $ENV{SDLSOUNDDIR}/lib + $ENV{SDLSOUNDDIR} + $ENV{SDLDIR}/lib + $ENV{SDLDIR} + /usr/local/lib + /usr/lib + /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib + ) + IF(FLAC_LIBRARY) + SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${FLAC_LIBRARY}) + ENDIF(FLAC_LIBRARY) + ENDIF("${MY_OUTPUT}" MATCHES "FLAC_") + + + # Hmmm...Speex seems to depend on Ogg. This might be a problem if + # the TRY_COMPILE attempt gets blocked at SPEEX before it can pull + # in the Ogg symbols. I'm not sure if I should duplicate the ogg stuff + # above for here or if two ogg entries will screw up things. + IF("${MY_OUTPUT}" MATCHES "speex_") + FIND_LIBRARY(SPEEX_LIBRARY + NAMES speex SPEEX + PATHS + $ENV{SPEEXDIR}/lib + $ENV{SPEEXDIR} + $ENV{SDLSOUNDDIR}/lib + $ENV{SDLSOUNDDIR} + $ENV{SDLDIR}/lib + $ENV{SDLDIR} + /usr/local/lib + /usr/lib + /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib + ) + IF(SPEEX_LIBRARY) + SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${SPEEX_LIBRARY}) + ENDIF(SPEEX_LIBRARY) + + # Find OGG (needed for Speex) + # We might have already found Ogg for Vorbis, so skip it if so. + IF(NOT OGG_LIBRARY) + FIND_LIBRARY(OGG_LIBRARY + NAMES ogg Ogg OGG + PATHS + $ENV{OGGDIR}/lib + $ENV{OGGDIR} + $ENV{VORBISDIR}/lib + $ENV{VORBISDIR} + $ENV{SPEEXDIR}/lib + $ENV{SPEEXDIR} + $ENV{SDLSOUNDDIR}/lib + $ENV{SDLSOUNDDIR} + $ENV{SDLDIR}/lib + $ENV{SDLDIR} + /usr/local/lib + /usr/lib + /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib + ) + IF(OGG_LIBRARY) + SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${OGG_LIBRARY}) + ENDIF(OGG_LIBRARY) + ENDIF(NOT OGG_LIBRARY) + ENDIF("${MY_OUTPUT}" MATCHES "speex_") + + ELSE(NOT MY_RESULT) + SET(SDL_SOUND_LIBRARIES "${SDL_SOUND_EXTRAS} ${SDL_SOUND_LIBRARY}" CACHE INTERNAL "SDL_sound and dependent libraries") + ENDIF(NOT MY_RESULT) + + SET(SDL_SOUND_LIBRARIES "${SDL_SOUND_EXTRAS} ${SDL_SOUND_LIBRARIES_TMP}" CACHE INTERNAL "SDL_sound and dependent libraries") + ENDIF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL_SOUND + REQUIRED_VARS SDL_SOUND_LIBRARIES SDL_SOUND_INCLUDE_DIR) diff --git a/Modules/FindSDL_ttf.cmake b/Modules/FindSDL_ttf.cmake new file mode 100644 index 0000000..3d07ab7 --- /dev/null +++ b/Modules/FindSDL_ttf.cmake @@ -0,0 +1,74 @@ +# Locate SDL_ttf library +# This module defines +# SDLTTF_LIBRARY, the name of the library to link against +# SDLTTF_FOUND, if false, do not try to link to SDL +# SDLTTF_INCLUDE_DIR, where to find SDL/SDL.h +# +# $SDLDIR is an environment variable that would +# correspond to the ./configure --prefix=$SDLDIR +# used in building SDL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module, but with modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(SDLTTF_INCLUDE_DIR SDL_ttf.h + HINTS + $ENV{SDLTTFDIR} + $ENV{SDLDIR} + PATH_SUFFIXES include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/include/SDL + /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports + /usr/include/SDL12 + /usr/include/SDL11 + /usr/local/include + /usr/include + /sw/include/SDL # Fink + /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include +) + +FIND_LIBRARY(SDLTTF_LIBRARY + NAMES SDL_ttf + HINTS + $ENV{SDLTTFDIR} + $ENV{SDLDIR} + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw + /opt/local + /opt/csw + /opt + PATH_SUFFIXES lib64 lib +) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDLTTF + REQUIRED_VARS SDLTTF_LIBRARY SDLTTF_INCLUDE_DIR) diff --git a/Modules/FindSWIG.cmake b/Modules/FindSWIG.cmake new file mode 100644 index 0000000..2e34eb1 --- /dev/null +++ b/Modules/FindSWIG.cmake @@ -0,0 +1,68 @@ +# - Find SWIG +# This module finds an installed SWIG. It sets the following variables: +# SWIG_FOUND - set to true if SWIG is found +# SWIG_DIR - the directory where swig is installed +# SWIG_EXECUTABLE - the path to the swig executable +# SWIG_VERSION - the version number of the swig executable +# +# The minimum required version of SWIG can be specified using the +# standard syntax, e.g. FIND_PACKAGE(SWIG 1.1) +# +# All information is collected from the SWIG_EXECUTABLE so the +# version to be found can be changed from the command line by +# means of setting SWIG_EXECUTABLE +# + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# Copyright 2011 Mathieu Malaterre +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(SWIG_EXECUTABLE NAMES swig2.0 swig) + +IF(SWIG_EXECUTABLE) + EXECUTE_PROCESS(COMMAND ${SWIG_EXECUTABLE} -swiglib + OUTPUT_VARIABLE SWIG_swiglib_output + ERROR_VARIABLE SWIG_swiglib_error + RESULT_VARIABLE SWIG_swiglib_result) + + IF(SWIG_swiglib_result) + IF(SWIG_FIND_REQUIRED) + MESSAGE(SEND_ERROR "Command \"${SWIG_EXECUTABLE} -swiglib\" failed with output:\n${SWIG_swiglib_error}") + ELSE(SWIG_FIND_REQUIRED) + MESSAGE(STATUS "Command \"${SWIG_EXECUTABLE} -swiglib\" failed with output:\n${SWIG_swiglib_error}") + ENDIF(SWIG_FIND_REQUIRED) + ELSE(SWIG_swiglib_result) + STRING(REGEX REPLACE "[\n\r]+" ";" SWIG_swiglib_output ${SWIG_swiglib_output}) + # force the path to be computed each time in case SWIG_EXECUTABLE has changed. + SET(SWIG_DIR SWIG_DIR-NOTFOUND) + FIND_PATH(SWIG_DIR swig.swg PATHS ${SWIG_swiglib_output}) + IF(SWIG_DIR) + SET(SWIG_USE_FILE ${CMAKE_ROOT}/Modules/UseSWIG.cmake) + EXECUTE_PROCESS(COMMAND ${SWIG_EXECUTABLE} -version + OUTPUT_VARIABLE SWIG_version_output + ERROR_VARIABLE SWIG_version_output + RESULT_VARIABLE SWIG_version_result) + IF(SWIG_version_result) + MESSAGE(SEND_ERROR "Command \"${SWIG_EXECUTABLE} -version\" failed with output:\n${SWIG_version_output}") + ELSE(SWIG_version_result) + STRING(REGEX REPLACE ".*SWIG Version[^0-9.]*\([0-9.]+\).*" "\\1" + SWIG_version_output "${SWIG_version_output}") + SET(SWIG_VERSION ${SWIG_version_output} CACHE STRING "Swig version" FORCE) + ENDIF(SWIG_version_result) + ENDIF(SWIG_DIR) + ENDIF(SWIG_swiglib_result) +ENDIF(SWIG_EXECUTABLE) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SWIG REQUIRED_VARS SWIG_EXECUTABLE SWIG_DIR + VERSION_VAR SWIG_VERSION ) diff --git a/Modules/FindSelfPackers.cmake b/Modules/FindSelfPackers.cmake new file mode 100644 index 0000000..ffca842 --- /dev/null +++ b/Modules/FindSelfPackers.cmake @@ -0,0 +1,68 @@ +# - Find upx +# This module looks for some executable packers (i.e. softwares that +# compress executables or shared libs into on-the-fly self-extracting +# executables or shared libs. +# Examples: +# UPX: http://wildsau.idv.uni-linz.ac.at/mfx/upx.html + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(FindCygwin) + +FIND_PROGRAM(SELF_PACKER_FOR_EXECUTABLE + upx + ${CYGWIN_INSTALL_PATH}/bin + /bin + /usr/bin + /usr/local/bin + /sbin +) + +FIND_PROGRAM(SELF_PACKER_FOR_SHARED_LIB + upx + ${CYGWIN_INSTALL_PATH}/bin + /bin + /usr/bin + /usr/local/bin + /sbin +) + +MARK_AS_ADVANCED( + SELF_PACKER_FOR_EXECUTABLE + SELF_PACKER_FOR_SHARED_LIB +) + +# +# Set flags +# +IF (SELF_PACKER_FOR_EXECUTABLE MATCHES "upx") + SET (SELF_PACKER_FOR_EXECUTABLE_FLAGS "-q" CACHE STRING + "Flags for the executable self-packer.") +ELSE (SELF_PACKER_FOR_EXECUTABLE MATCHES "upx") + SET (SELF_PACKER_FOR_EXECUTABLE_FLAGS "" CACHE STRING + "Flags for the executable self-packer.") +ENDIF (SELF_PACKER_FOR_EXECUTABLE MATCHES "upx") + +IF (SELF_PACKER_FOR_SHARED_LIB MATCHES "upx") + SET (SELF_PACKER_FOR_SHARED_LIB_FLAGS "-q" CACHE STRING + "Flags for the shared lib self-packer.") +ELSE (SELF_PACKER_FOR_SHARED_LIB MATCHES "upx") + SET (SELF_PACKER_FOR_SHARED_LIB_FLAGS "" CACHE STRING + "Flags for the shared lib self-packer.") +ENDIF (SELF_PACKER_FOR_SHARED_LIB MATCHES "upx") + +MARK_AS_ADVANCED( + SELF_PACKER_FOR_EXECUTABLE_FLAGS + SELF_PACKER_FOR_SHARED_LIB_FLAGS +) diff --git a/Modules/FindSquish.cmake b/Modules/FindSquish.cmake new file mode 100644 index 0000000..b0b6b2f --- /dev/null +++ b/Modules/FindSquish.cmake @@ -0,0 +1,129 @@ +# +# ---- Find Squish +# This module can be used to find Squish (currently support is aimed at version 3). +# +# ---- Variables and Macros +# SQUISH_FOUND If false, don't try to use Squish +# +# SQUISH_INSTALL_DIR The Squish installation directory (containing bin, lib, etc) +# SQUISH_SERVER_EXECUTABLE The squishserver executable +# SQUISH_CLIENT_EXECUTABLE The squishrunner executable +# +# SQUISH_INSTALL_DIR_FOUND Was the install directory found? +# SQUISH_SERVER_EXECUTABLE_FOUND Was the server executable found? +# SQUISH_CLIENT_EXECUTABLE_FOUND Was the client executable found? +# +# macro SQUISH_ADD_TEST(testName applicationUnderTest testSuite testCase) +# +# ---- Typical Use +# ENABLE_TESTING() +# FIND_PACKAGE(Squish) +# IF (SQUISH_FOUND) +# SQUISH_ADD_TEST(myTestName myApplication testSuiteName testCaseName) +# ENDIF (SQUISH_FOUND) +# + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET(SQUISH_INSTALL_DIR_STRING "Directory containing the bin, doc, and lib directories for Squish; this should be the root of the installation directory.") +SET(SQUISH_SERVER_EXECUTABLE_STRING "The squishserver executable program.") +SET(SQUISH_CLIENT_EXECUTABLE_STRING "The squishclient executable program.") + +# Search only if the location is not already known. +IF(NOT SQUISH_INSTALL_DIR) + # Get the system search path as a list. + IF(UNIX) + STRING(REGEX MATCHALL "[^:]+" SQUISH_INSTALL_DIR_SEARCH1 "$ENV{PATH}") + ELSE(UNIX) + STRING(REGEX REPLACE "\\\\" "/" SQUISH_INSTALL_DIR_SEARCH1 "$ENV{PATH}") + ENDIF(UNIX) + STRING(REGEX REPLACE "/;" ";" SQUISH_INSTALL_DIR_SEARCH2 ${SQUISH_INSTALL_DIR_SEARCH1}) + + # Construct a set of paths relative to the system search path. + SET(SQUISH_INSTALL_DIR_SEARCH "") + FOREACH(dir ${SQUISH_INSTALL_DIR_SEARCH2}) + SET(SQUISH_INSTALL_DIR_SEARCH ${SQUISH_INSTALL_DIR_SEARCH} "${dir}/../lib/fltk") + ENDFOREACH(dir) + + # Look for an installation + FIND_PATH(SQUISH_INSTALL_DIR bin/squishrunner + # Look for an environment variable SQUISH_INSTALL_DIR. + $ENV{SQUISH_INSTALL_DIR} + + # Look in places relative to the system executable search path. + ${SQUISH_INSTALL_DIR_SEARCH} + + # Look in standard UNIX install locations. + #/usr/local/squish + + DOC "The ${SQUISH_INSTALL_DIR_STRING}" + ) +ENDIF(NOT SQUISH_INSTALL_DIR) + +# search for the executables +IF(SQUISH_INSTALL_DIR) + SET(SQUISH_INSTALL_DIR_FOUND 1) + + # find the client program + IF(NOT SQUISH_CLIENT_EXECUTABLE) + FIND_PROGRAM(SQUISH_CLIENT_EXECUTABLE ${SQUISH_INSTALL_DIR}/bin/squishrunner DOC "The ${SQUISH_CLIENT_EXECUTABLE_STRING}") + ENDIF(NOT SQUISH_CLIENT_EXECUTABLE) + + # find the server program + IF(NOT SQUISH_SERVER_EXECUTABLE) + FIND_PROGRAM(SQUISH_SERVER_EXECUTABLE ${SQUISH_INSTALL_DIR}/bin/squishserver DOC "The ${SQUISH_SERVER_EXECUTABLE_STRING}") + ENDIF(NOT SQUISH_SERVER_EXECUTABLE) + +ELSE(SQUISH_INSTALL_DIR) + SET(SQUISH_INSTALL_DIR_FOUND 0) +ENDIF(SQUISH_INSTALL_DIR) + +# record if executables are set +IF(SQUISH_CLIENT_EXECUTABLE) + SET(SQUISH_CLIENT_EXECUTABLE_FOUND 1) +ELSE(SQUISH_CLIENT_EXECUTABLE) + SET(SQUISH_CLIENT_EXECUTABLE_FOUND 0) +ENDIF(SQUISH_CLIENT_EXECUTABLE) + +IF(SQUISH_SERVER_EXECUTABLE) + SET(SQUISH_SERVER_EXECUTABLE_FOUND 1) +ELSE(SQUISH_SERVER_EXECUTABLE) + SET(SQUISH_SERVER_EXECUTABLE_FOUND 0) +ENDIF(SQUISH_SERVER_EXECUTABLE) + +# record if Squish was found +SET(SQUISH_FOUND 1) +FOREACH(var SQUISH_INSTALL_DIR_FOUND SQUISH_CLIENT_EXECUTABLE_FOUND SQUISH_SERVER_EXECUTABLE_FOUND) + IF(NOT ${var}) + SET(SQUISH_FOUND 0) + ENDIF(NOT ${var}) +ENDFOREACH(var) + +MACRO(SQUISH_ADD_TEST testName testAUT testCase envVars testWraper) + ADD_TEST(${testName} + ${CMAKE_COMMAND} -V -VV + "-Dsquish_aut:STRING=${testAUT}" + "-Dsquish_server_executable:STRING=${SQUISH_SERVER_EXECUTABLE}" + "-Dsquish_client_executable:STRING=${SQUISH_CLIENT_EXECUTABLE}" + "-Dsquish_libqtdir:STRING=${QT_LIBRARY_DIR}" + "-Dsquish_test_case:STRING=${testCase}" + "-Dsquish_env_vars:STRING=${envVars}" + "-Dsquish_wrapper:STRING=${testWraper}" + -P "${CMAKE_ROOT}/Modules/SquishTestScript.cmake" + ) + SET_TESTS_PROPERTIES(${testName} + PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED;ERROR;FATAL" + ) +ENDMACRO(SQUISH_ADD_TEST) + diff --git a/Modules/FindSubversion.cmake b/Modules/FindSubversion.cmake new file mode 100644 index 0000000..4166d99 --- /dev/null +++ b/Modules/FindSubversion.cmake @@ -0,0 +1,131 @@ +# - Extract information from a subversion working copy +# The module defines the following variables: +# Subversion_SVN_EXECUTABLE - path to svn command line client +# Subversion_VERSION_SVN - version of svn command line client +# Subversion_FOUND - true if the command line client was found +# SUBVERSION_FOUND - same as Subversion_FOUND, set for compatiblity reasons +# +# The minimum required version of Subversion can be specified using the +# standard syntax, e.g. FIND_PACKAGE(Subversion 1.4) +# +# If the command line client executable is found two macros are defined: +# Subversion_WC_INFO( ) +# Subversion_WC_LOG( ) +# Subversion_WC_INFO extracts information of a subversion working copy at +# a given location. This macro defines the following variables: +# _WC_URL - url of the repository (at ) +# _WC_ROOT - root url of the repository +# _WC_REVISION - current revision +# _WC_LAST_CHANGED_AUTHOR - author of last commit +# _WC_LAST_CHANGED_DATE - date of last commit +# _WC_LAST_CHANGED_REV - revision of last commit +# _WC_INFO - output of command `svn info ' +# Subversion_WC_LOG retrieves the log message of the base revision of a +# subversion working copy at a given location. This macro defines the +# variable: +# _LAST_CHANGED_LOG - last log of base revision +# Example usage: +# FIND_PACKAGE(Subversion) +# IF(SUBVERSION_FOUND) +# Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project) +# MESSAGE("Current revision is ${Project_WC_REVISION}") +# Subversion_WC_LOG(${PROJECT_SOURCE_DIR} Project) +# MESSAGE("Last changed log is ${Project_LAST_CHANGED_LOG}") +# ENDIF(SUBVERSION_FOUND) + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Tristan Carel +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(Subversion_SVN_EXECUTABLE svn + DOC "subversion command line client") +MARK_AS_ADVANCED(Subversion_SVN_EXECUTABLE) + +IF(Subversion_SVN_EXECUTABLE) + # the subversion commands should be executed with the C locale, otherwise + # the message (which are parsed) may be translated, Alex + SET(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}") + SET(ENV{LC_ALL} C) + + EXECUTE_PROCESS(COMMAND ${Subversion_SVN_EXECUTABLE} --version + OUTPUT_VARIABLE Subversion_VERSION_SVN + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # restore the previous LC_ALL + SET(ENV{LC_ALL} ${_Subversion_SAVED_LC_ALL}) + + STRING(REGEX REPLACE "^(.*\n)?svn, version ([.0-9]+).*" + "\\2" Subversion_VERSION_SVN "${Subversion_VERSION_SVN}") + + MACRO(Subversion_WC_INFO dir prefix) + # the subversion commands should be executed with the C locale, otherwise + # the message (which are parsed) may be translated, Alex + SET(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}") + SET(ENV{LC_ALL} C) + + EXECUTE_PROCESS(COMMAND ${Subversion_SVN_EXECUTABLE} info ${dir} + OUTPUT_VARIABLE ${prefix}_WC_INFO + ERROR_VARIABLE Subversion_svn_info_error + RESULT_VARIABLE Subversion_svn_info_result + OUTPUT_STRIP_TRAILING_WHITESPACE) + + IF(NOT ${Subversion_svn_info_result} EQUAL 0) + MESSAGE(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}") + ELSE(NOT ${Subversion_svn_info_result} EQUAL 0) + + STRING(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*" + "\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}") + STRING(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*" + "\\2" ${prefix}_WC_ROOT "${${prefix}_WC_INFO}") + STRING(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*" + "\\2" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}") + STRING(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*" + "\\2" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}") + STRING(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*" + "\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}") + STRING(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*" + "\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}") + + ENDIF(NOT ${Subversion_svn_info_result} EQUAL 0) + + # restore the previous LC_ALL + SET(ENV{LC_ALL} ${_Subversion_SAVED_LC_ALL}) + + ENDMACRO(Subversion_WC_INFO) + + MACRO(Subversion_WC_LOG dir prefix) + # This macro can block if the certificate is not signed: + # svn ask you to accept the certificate and wait for your answer + # This macro requires a svn server network access (Internet most of the time) + # and can also be slow since it access the svn server + EXECUTE_PROCESS(COMMAND + ${Subversion_SVN_EXECUTABLE} --non-interactive log -r BASE ${dir} + OUTPUT_VARIABLE ${prefix}_LAST_CHANGED_LOG + ERROR_VARIABLE Subversion_svn_log_error + RESULT_VARIABLE Subversion_svn_log_result + OUTPUT_STRIP_TRAILING_WHITESPACE) + + IF(NOT ${Subversion_svn_log_result} EQUAL 0) + MESSAGE(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} log -r BASE ${dir}\" failed with output:\n${Subversion_svn_log_error}") + ENDIF(NOT ${Subversion_svn_log_result} EQUAL 0) + ENDMACRO(Subversion_WC_LOG) + +ENDIF(Subversion_SVN_EXECUTABLE) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Subversion REQUIRED_VARS Subversion_SVN_EXECUTABLE + VERSION_VAR Subversion_VERSION_SVN ) + +# for compatibility +SET(Subversion_FOUND ${SUBVERSION_FOUND}) +SET(Subversion_SVN_FOUND ${SUBVERSION_FOUND}) diff --git a/Modules/FindTCL.cmake b/Modules/FindTCL.cmake new file mode 100644 index 0000000..f2c776f --- /dev/null +++ b/Modules/FindTCL.cmake @@ -0,0 +1,219 @@ +# - Find Tcl includes and libraries. +# This module finds if Tcl is installed and determines where the +# include files and libraries are. It also determines what the name of +# the library is. This code sets the following variables: +# TCL_FOUND = Tcl was found +# TK_FOUND = Tk was found +# TCLTK_FOUND = Tcl and Tk were found +# TCL_LIBRARY = path to Tcl library (tcl tcl80) +# TCL_INCLUDE_PATH = path to where tcl.h can be found +# TCL_TCLSH = path to tclsh binary (tcl tcl80) +# TK_LIBRARY = path to Tk library (tk tk80 etc) +# TK_INCLUDE_PATH = path to where tk.h can be found +# TK_WISH = full path to the wish executable +# +# In an effort to remove some clutter and clear up some issues for people +# who are not necessarily Tcl/Tk gurus/developpers, some variables were +# moved or removed. Changes compared to CMake 2.4 are: +# - The stub libraries are now found in FindTclStub.cmake +# => they were only useful for people writing Tcl/Tk extensions. +# - TCL_LIBRARY_DEBUG and TK_LIBRARY_DEBUG were removed. +# => these libs are not packaged by default with Tcl/Tk distributions. +# Even when Tcl/Tk is built from source, several flavors of debug libs +# are created and there is no real reason to pick a single one +# specifically (say, amongst tcl84g, tcl84gs, or tcl84sgx). +# Let's leave that choice to the user by allowing him to assign +# TCL_LIBRARY to any Tcl library, debug or not. +# - TK_INTERNAL_PATH was removed. +# => this ended up being only a Win32 variable, and there is a lot of +# confusion regarding the location of this file in an installed Tcl/Tk +# tree anyway (see 8.5 for example). If you need the internal path at +# this point it is safer you ask directly where the *source* tree is +# and dig from there. + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(CMakeFindFrameworks) +INCLUDE(FindTclsh) +INCLUDE(FindWish) + +IF(TCLSH_VERSION_STRING) + SET(TCL_TCLSH_VERSION "${TCLSH_VERSION_STRING}") +ELSE(TCLSH_VERSION_STRING) + GET_FILENAME_COMPONENT(TCL_TCLSH_PATH "${TCL_TCLSH}" PATH) + GET_FILENAME_COMPONENT(TCL_TCLSH_PATH_PARENT "${TCL_TCLSH_PATH}" PATH) + STRING(REGEX REPLACE + "^.*tclsh([0-9]\\.*[0-9]).*$" "\\1" TCL_TCLSH_VERSION "${TCL_TCLSH}") +ENDIF(TCLSH_VERSION_STRING) + +GET_FILENAME_COMPONENT(TK_WISH_PATH "${TK_WISH}" PATH) +GET_FILENAME_COMPONENT(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH) +STRING(REGEX REPLACE + "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}") + +GET_FILENAME_COMPONENT(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH) +GET_FILENAME_COMPONENT(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH) + +GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH) +GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH) +STRING(REGEX REPLACE + "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}") + +GET_FILENAME_COMPONENT(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH) +GET_FILENAME_COMPONENT(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH) +STRING(REGEX REPLACE + "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}") + +SET(TCLTK_POSSIBLE_LIB_PATHS + "${TCL_INCLUDE_PATH_PARENT}/lib" + "${TK_INCLUDE_PATH_PARENT}/lib" + "${TCL_LIBRARY_PATH}" + "${TK_LIBRARY_PATH}" + "${TCL_TCLSH_PATH_PARENT}/lib" + "${TK_WISH_PATH_PARENT}/lib" + /usr/lib + /usr/local/lib + ) + +IF(WIN32) + GET_FILENAME_COMPONENT( + ActiveTcl_CurrentVersion + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]" + NAME) + SET(TCLTK_POSSIBLE_LIB_PATHS ${TCLTK_POSSIBLE_LIB_PATHS} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/lib" + "$ENV{ProgramFiles}/Tcl/Lib" + "C:/Program Files/Tcl/lib" + "C:/Tcl/lib" + ) +ENDIF(WIN32) + +FIND_LIBRARY(TCL_LIBRARY + NAMES + tcl + tcl${TCL_LIBRARY_VERSION} tcl${TCL_TCLSH_VERSION} tcl${TK_WISH_VERSION} + tcl86 tcl8.6 + tcl85 tcl8.5 + tcl84 tcl8.4 + tcl83 tcl8.3 + tcl82 tcl8.2 + tcl80 tcl8.0 + PATHS ${TCLTK_POSSIBLE_LIB_PATHS} + ) + +FIND_LIBRARY(TK_LIBRARY + NAMES + tk + tk${TK_LIBRARY_VERSION} tk${TCL_TCLSH_VERSION} tk${TK_WISH_VERSION} + tk86 tk8.6 + tk85 tk8.5 + tk84 tk8.4 + tk83 tk8.3 + tk82 tk8.2 + tk80 tk8.0 + PATHS ${TCLTK_POSSIBLE_LIB_PATHS} + ) + +CMAKE_FIND_FRAMEWORKS(Tcl) +CMAKE_FIND_FRAMEWORKS(Tk) + +SET(TCL_FRAMEWORK_INCLUDES) +IF(Tcl_FRAMEWORKS) + IF(NOT TCL_INCLUDE_PATH) + FOREACH(dir ${Tcl_FRAMEWORKS}) + SET(TCL_FRAMEWORK_INCLUDES ${TCL_FRAMEWORK_INCLUDES} ${dir}/Headers) + ENDFOREACH(dir) + ENDIF(NOT TCL_INCLUDE_PATH) +ENDIF(Tcl_FRAMEWORKS) + +SET(TK_FRAMEWORK_INCLUDES) +IF(Tk_FRAMEWORKS) + IF(NOT TK_INCLUDE_PATH) + FOREACH(dir ${Tk_FRAMEWORKS}) + SET(TK_FRAMEWORK_INCLUDES ${TK_FRAMEWORK_INCLUDES} + ${dir}/Headers ${dir}/PrivateHeaders) + ENDFOREACH(dir) + ENDIF(NOT TK_INCLUDE_PATH) +ENDIF(Tk_FRAMEWORKS) + +SET(TCLTK_POSSIBLE_INCLUDE_PATHS + "${TCL_LIBRARY_PATH_PARENT}/include" + "${TK_LIBRARY_PATH_PARENT}/include" + "${TCL_INCLUDE_PATH}" + "${TK_INCLUDE_PATH}" + ${TCL_FRAMEWORK_INCLUDES} + ${TK_FRAMEWORK_INCLUDES} + "${TCL_TCLSH_PATH_PARENT}/include" + "${TK_WISH_PATH_PARENT}/include" + /usr/include + /usr/local/include + /usr/include/tcl${TK_LIBRARY_VERSION} + /usr/include/tcl${TCL_LIBRARY_VERSION} + /usr/include/tcl8.6 + /usr/include/tcl8.5 + /usr/include/tcl8.4 + /usr/include/tcl8.3 + /usr/include/tcl8.2 + /usr/include/tcl8.0 + ) + +IF(WIN32) + SET(TCLTK_POSSIBLE_INCLUDE_PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/include" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/include" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/include" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/include" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/include" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/include" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/include" + "$ENV{ProgramFiles}/Tcl/include" + "C:/Program Files/Tcl/include" + "C:/Tcl/include" + ) +ENDIF(WIN32) + +FIND_PATH(TCL_INCLUDE_PATH + NAMES tcl.h + HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS} + ) + +FIND_PATH(TK_INCLUDE_PATH + NAMES tk.h + HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS} + ) + +# handle the QUIETLY and REQUIRED arguments and set TCL_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCL DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH) +SET(TCLTK_FIND_REQUIRED ${TCL_FIND_REQUIRED}) +SET(TCLTK_FIND_QUIETLY ${TCL_FIND_QUIETLY}) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCLTK DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH TK_LIBRARY TK_INCLUDE_PATH) +SET(TK_FIND_REQUIRED ${TCL_FIND_REQUIRED}) +SET(TK_FIND_QUIETLY ${TCL_FIND_QUIETLY}) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(TK DEFAULT_MSG TK_LIBRARY TK_INCLUDE_PATH) + +MARK_AS_ADVANCED( + TCL_INCLUDE_PATH + TK_INCLUDE_PATH + TCL_LIBRARY + TK_LIBRARY + ) diff --git a/Modules/FindTIFF.cmake b/Modules/FindTIFF.cmake new file mode 100644 index 0000000..16f9e23 --- /dev/null +++ b/Modules/FindTIFF.cmake @@ -0,0 +1,48 @@ +# - Find TIFF library +# Find the native TIFF includes and library +# This module defines +# TIFF_INCLUDE_DIR, where to find tiff.h, etc. +# TIFF_LIBRARIES, libraries to link against to use TIFF. +# TIFF_FOUND, If false, do not try to use TIFF. +# also defined, but not for general use are +# TIFF_LIBRARY, where to find the TIFF library. + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PATH(TIFF_INCLUDE_DIR tiff.h) + +SET(TIFF_NAMES ${TIFF_NAMES} tiff libtiff tiff3 libtiff3) +FIND_LIBRARY(TIFF_LIBRARY NAMES ${TIFF_NAMES} ) + +IF(TIFF_INCLUDE_DIR AND EXISTS "${TIFF_INCLUDE_DIR}/tiffvers.h") + FILE(STRINGS "${TIFF_INCLUDE_DIR}/tiffvers.h" tiff_version_str + REGEX "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version .*") + + STRING(REGEX REPLACE "^#define[\t ]+TIFFLIB_VERSION_STR[\t ]+\"LIBTIFF, Version +([^ \\n]*).*" + "\\1" TIFF_VERSION_STRING "${tiff_version_str}") + UNSET(tiff_version_str) +ENDIF() + +# handle the QUIETLY and REQUIRED arguments and set TIFF_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(TIFF + REQUIRED_VARS TIFF_LIBRARY TIFF_INCLUDE_DIR + VERSION_VAR TIFF_VERSION_STRING) + +IF(TIFF_FOUND) + SET( TIFF_LIBRARIES ${TIFF_LIBRARY} ) +ENDIF(TIFF_FOUND) + +MARK_AS_ADVANCED(TIFF_INCLUDE_DIR TIFF_LIBRARY) diff --git a/Modules/FindTclStub.cmake b/Modules/FindTclStub.cmake new file mode 100644 index 0000000..4db2716 --- /dev/null +++ b/Modules/FindTclStub.cmake @@ -0,0 +1,132 @@ +# - Find Tcl stub libraries. +# This module finds Tcl stub libraries. It first finds Tcl include files and +# libraries by calling FindTCL.cmake. +# How to Use the Tcl Stubs Library: +# http://tcl.activestate.com/doc/howto/stubs.html +# Using Stub Libraries: +# http://safari.oreilly.com/0130385603/ch48lev1sec3 +# This code sets the following variables: +# TCL_STUB_LIBRARY = path to Tcl stub library +# TK_STUB_LIBRARY = path to Tk stub library +# TTK_STUB_LIBRARY = path to ttk stub library +# +# In an effort to remove some clutter and clear up some issues for people +# who are not necessarily Tcl/Tk gurus/developpers, some variables were +# moved or removed. Changes compared to CMake 2.4 are: +# - TCL_STUB_LIBRARY_DEBUG and TK_STUB_LIBRARY_DEBUG were removed. +# => these libs are not packaged by default with Tcl/Tk distributions. +# Even when Tcl/Tk is built from source, several flavors of debug libs +# are created and there is no real reason to pick a single one +# specifically (say, amongst tclstub84g, tclstub84gs, or tclstub84sgx). +# Let's leave that choice to the user by allowing him to assign +# TCL_STUB_LIBRARY to any Tcl library, debug or not. + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(FindTCL) + +GET_FILENAME_COMPONENT(TCL_TCLSH_PATH "${TCL_TCLSH}" PATH) +GET_FILENAME_COMPONENT(TCL_TCLSH_PATH_PARENT "${TCL_TCLSH_PATH}" PATH) +STRING(REGEX REPLACE + "^.*tclsh([0-9]\\.*[0-9]).*$" "\\1" TCL_TCLSH_VERSION "${TCL_TCLSH}") + +GET_FILENAME_COMPONENT(TK_WISH_PATH "${TK_WISH}" PATH) +GET_FILENAME_COMPONENT(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH) +STRING(REGEX REPLACE + "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}") + +GET_FILENAME_COMPONENT(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH) +GET_FILENAME_COMPONENT(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH) + +GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH) +GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH) +STRING(REGEX REPLACE + "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}") + +GET_FILENAME_COMPONENT(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH) +GET_FILENAME_COMPONENT(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH) +STRING(REGEX REPLACE + "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}") + +SET(TCLTK_POSSIBLE_LIB_PATHS + "${TCL_INCLUDE_PATH_PARENT}/lib" + "${TK_INCLUDE_PATH_PARENT}/lib" + "${TCL_LIBRARY_PATH}" + "${TK_LIBRARY_PATH}" + "${TCL_TCLSH_PATH_PARENT}/lib" + "${TK_WISH_PATH_PARENT}/lib" + /usr/lib + /usr/local/lib +) + +IF(WIN32) + GET_FILENAME_COMPONENT( + ActiveTcl_CurrentVersion + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]" + NAME) + SET(TCLTK_POSSIBLE_LIB_PATHS ${TCLTK_POSSIBLE_LIB_PATHS} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/lib" + "$ENV{ProgramFiles}/Tcl/Lib" + "C:/Program Files/Tcl/lib" + "C:/Tcl/lib" + ) +ENDIF(WIN32) + +FIND_LIBRARY(TCL_STUB_LIBRARY + NAMES + tclstub + tclstub${TK_LIBRARY_VERSION} tclstub${TCL_TCLSH_VERSION} tclstub${TK_WISH_VERSION} + tclstub86 tclstub8.6 + tclstub85 tclstub8.5 + tclstub84 tclstub8.4 + tclstub83 tclstub8.3 + tclstub82 tclstub8.2 + tclstub80 tclstub8.0 + PATHS ${TCLTK_POSSIBLE_LIB_PATHS} +) + +FIND_LIBRARY(TK_STUB_LIBRARY + NAMES + tkstub + tkstub${TCL_LIBRARY_VERSION} tkstub${TCL_TCLSH_VERSION} tkstub${TK_WISH_VERSION} + tkstub86 tkstub8.6 + tkstub85 tkstub8.5 + tkstub84 tkstub8.4 + tkstub83 tkstub8.3 + tkstub82 tkstub8.2 + tkstub80 tkstub8.0 + PATHS ${TCLTK_POSSIBLE_LIB_PATHS} +) + +FIND_LIBRARY(TTK_STUB_LIBRARY + NAMES + ttkstub + ttkstub${TCL_LIBRARY_VERSION} ttkstub${TCL_TCLSH_VERSION} ttkstub${TK_WISH_VERSION} + ttkstub88 ttkstub8.8 + ttkstub87 ttkstub8.7 + ttkstub86 ttkstub8.6 + ttkstub85 ttkstub8.5 + PATHS ${TCLTK_POSSIBLE_LIB_PATHS} +) + +MARK_AS_ADVANCED( + TCL_STUB_LIBRARY + TK_STUB_LIBRARY + ) diff --git a/Modules/FindTclsh.cmake b/Modules/FindTclsh.cmake new file mode 100644 index 0000000..a45f285 --- /dev/null +++ b/Modules/FindTclsh.cmake @@ -0,0 +1,100 @@ +# - Find tclsh +# This module finds if TCL is installed and determines where the +# include files and libraries are. It also determines what the name of +# the library is. This code sets the following variables: +# TCLSH_FOUND = TRUE if tclsh has been found +# TCL_TCLSH = the path to the tclsh executable +# In cygwin, look for the cygwin version first. Don't look for it later to +# avoid finding the cygwin version on a Win32 build. + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(CYGWIN) + FIND_PROGRAM(TCL_TCLSH NAMES cygtclsh83 cygtclsh80) +ENDIF(CYGWIN) + +GET_FILENAME_COMPONENT(TK_WISH_PATH "${TK_WISH}" PATH) +GET_FILENAME_COMPONENT(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH) +STRING(REGEX REPLACE + "^.*wish([0-9]\\.*[0-9]).*$" "\\1" TK_WISH_VERSION "${TK_WISH}") + +GET_FILENAME_COMPONENT(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH) +GET_FILENAME_COMPONENT(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH) + +GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH) +GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH) +STRING(REGEX REPLACE + "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}") + +GET_FILENAME_COMPONENT(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH) +GET_FILENAME_COMPONENT(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH) +STRING(REGEX REPLACE + "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}") + +SET(TCLTK_POSSIBLE_BIN_PATHS + "${TCL_INCLUDE_PATH_PARENT}/bin" + "${TK_INCLUDE_PATH_PARENT}/bin" + "${TCL_LIBRARY_PATH_PARENT}/bin" + "${TK_LIBRARY_PATH_PARENT}/bin" + "${TK_WISH_PATH_PARENT}/bin" + ) + +IF(WIN32) + GET_FILENAME_COMPONENT( + ActiveTcl_CurrentVersion + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]" + NAME) + SET(TCLTK_POSSIBLE_BIN_PATHS ${TCLTK_POSSIBLE_BIN_PATHS} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/bin" + ) +ENDIF(WIN32) + +SET(TCL_TCLSH_NAMES + tclsh + tclsh${TCL_LIBRARY_VERSION} tclsh${TK_LIBRARY_VERSION} tclsh${TK_WISH_VERSION} + tclsh86 tclsh8.6 + tclsh85 tclsh8.5 + tclsh84 tclsh8.4 + tclsh83 tclsh8.3 + tclsh82 tclsh8.2 + tclsh80 tclsh8.0 + ) + +FIND_PROGRAM(TCL_TCLSH + NAMES ${TCL_TCLSH_NAMES} + HINTS ${TCLTK_POSSIBLE_BIN_PATHS} + ) + +IF(TCL_TCLSH) + EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -E echo puts "\$tcl_version" + COMMAND "${TCL_TCLSH}" + OUTPUT_VARIABLE TCLSH_VERSION_STRING + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) +ENDIF(TCL_TCLSH) + +# handle the QUIETLY and REQUIRED arguments and set TIFF_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Tclsh + REQUIRED_VARS TCL_TCLSH + VERSION_VAR TCLSH_VERSION_STRING) + +MARK_AS_ADVANCED(TCL_TCLSH) diff --git a/Modules/FindThreads.cmake b/Modules/FindThreads.cmake new file mode 100644 index 0000000..21614fb --- /dev/null +++ b/Modules/FindThreads.cmake @@ -0,0 +1,166 @@ +# - This module determines the thread library of the system. +# The following variables are set +# CMAKE_THREAD_LIBS_INIT - the thread library +# CMAKE_USE_SPROC_INIT - are we using sproc? +# CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads? +# CMAKE_USE_PTHREADS_INIT - are we using pthreads +# CMAKE_HP_PTHREADS_INIT - are we using hp pthreads +# For systems with multiple thread libraries, caller can set +# CMAKE_THREAD_PREFER_PTHREAD + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE (CheckIncludeFiles) +INCLUDE (CheckLibraryExists) +INCLUDE (CheckSymbolExists) +SET(Threads_FOUND FALSE) + +# Do we have sproc? +IF(CMAKE_SYSTEM MATCHES IRIX AND NOT CMAKE_THREAD_PREFER_PTHREAD) + CHECK_INCLUDE_FILES("sys/types.h;sys/prctl.h" CMAKE_HAVE_SPROC_H) +ENDIF() + +IF(CMAKE_HAVE_SPROC_H AND NOT CMAKE_THREAD_PREFER_PTHREAD) + # We have sproc + SET(CMAKE_USE_SPROC_INIT 1) +ELSE() + # Do we have pthreads? + CHECK_INCLUDE_FILES("pthread.h" CMAKE_HAVE_PTHREAD_H) + IF(CMAKE_HAVE_PTHREAD_H) + + # + # We have pthread.h + # Let's check for the library now. + # + SET(CMAKE_HAVE_THREADS_LIBRARY) + IF(NOT THREADS_HAVE_PTHREAD_ARG) + # Check if pthread functions are in normal C library + CHECK_SYMBOL_EXISTS(pthread_create pthread.h CMAKE_HAVE_LIBC_CREATE) + IF(CMAKE_HAVE_LIBC_CREATE) + SET(CMAKE_THREAD_LIBS_INIT "") + SET(CMAKE_HAVE_THREADS_LIBRARY 1) + SET(Threads_FOUND TRUE) + ENDIF() + + IF(NOT CMAKE_HAVE_THREADS_LIBRARY) + # Do we have -lpthreads + CHECK_LIBRARY_EXISTS(pthreads pthread_create "" CMAKE_HAVE_PTHREADS_CREATE) + IF(CMAKE_HAVE_PTHREADS_CREATE) + SET(CMAKE_THREAD_LIBS_INIT "-lpthreads") + SET(CMAKE_HAVE_THREADS_LIBRARY 1) + SET(Threads_FOUND TRUE) + ENDIF() + + # Ok, how about -lpthread + CHECK_LIBRARY_EXISTS(pthread pthread_create "" CMAKE_HAVE_PTHREAD_CREATE) + IF(CMAKE_HAVE_PTHREAD_CREATE) + SET(CMAKE_THREAD_LIBS_INIT "-lpthread") + SET(CMAKE_HAVE_THREADS_LIBRARY 1) + SET(Threads_FOUND TRUE) + ENDIF() + + IF(CMAKE_SYSTEM MATCHES "SunOS.*") + # On sun also check for -lthread + CHECK_LIBRARY_EXISTS(thread thr_create "" CMAKE_HAVE_THR_CREATE) + IF(CMAKE_HAVE_THR_CREATE) + SET(CMAKE_THREAD_LIBS_INIT "-lthread") + SET(CMAKE_HAVE_THREADS_LIBRARY 1) + SET(Threads_FOUND TRUE) + ENDIF() + ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*") + ENDIF(NOT CMAKE_HAVE_THREADS_LIBRARY) + ENDIF(NOT THREADS_HAVE_PTHREAD_ARG) + + IF(NOT CMAKE_HAVE_THREADS_LIBRARY) + # If we did not found -lpthread, -lpthread, or -lthread, look for -pthread + IF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG") + MESSAGE(STATUS "Check if compiler accepts -pthread") + TRY_RUN(THREADS_PTHREAD_ARG THREADS_HAVE_PTHREAD_ARG + ${CMAKE_BINARY_DIR} + ${CMAKE_ROOT}/Modules/CheckForPthreads.c + CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread + COMPILE_OUTPUT_VARIABLE OUTPUT) + + IF(THREADS_HAVE_PTHREAD_ARG) + IF(THREADS_PTHREAD_ARG MATCHES "^2$") + SET(Threads_FOUND TRUE) + MESSAGE(STATUS "Check if compiler accepts -pthread - yes") + ELSE() + MESSAGE(STATUS "Check if compiler accepts -pthread - no") + FILE(APPEND + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if compiler accepts -pthread returned ${THREADS_PTHREAD_ARG} instead of 2. The compiler had the following output:\n${OUTPUT}\n\n") + ENDIF() + ELSE() + MESSAGE(STATUS "Check if compiler accepts -pthread - no") + FILE(APPEND + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if compiler accepts -pthread failed with the following output:\n${OUTPUT}\n\n") + ENDIF() + + ENDIF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG") + + IF(THREADS_HAVE_PTHREAD_ARG) + SET(Threads_FOUND TRUE) + SET(CMAKE_THREAD_LIBS_INIT "-pthread") + ENDIF() + + ENDIF(NOT CMAKE_HAVE_THREADS_LIBRARY) + ENDIF(CMAKE_HAVE_PTHREAD_H) +ENDIF() + +IF(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_CREATE) + SET(CMAKE_USE_PTHREADS_INIT 1) + SET(Threads_FOUND TRUE) +ENDIF() + +IF(CMAKE_SYSTEM MATCHES "Windows") + SET(CMAKE_USE_WIN32_THREADS_INIT 1) + SET(Threads_FOUND TRUE) +ENDIF() + +IF(CMAKE_USE_PTHREADS_INIT) + IF(CMAKE_SYSTEM MATCHES "HP-UX-*") + # Use libcma if it exists and can be used. It provides more + # symbols than the plain pthread library. CMA threads + # have actually been deprecated: + # http://docs.hp.com/en/B3920-90091/ch12s03.html#d0e11395 + # http://docs.hp.com/en/947/d8.html + # but we need to maintain compatibility here. + # The CMAKE_HP_PTHREADS setting actually indicates whether CMA threads + # are available. + CHECK_LIBRARY_EXISTS(cma pthread_attr_create "" CMAKE_HAVE_HP_CMA) + IF(CMAKE_HAVE_HP_CMA) + SET(CMAKE_THREAD_LIBS_INIT "-lcma") + SET(CMAKE_HP_PTHREADS_INIT 1) + SET(Threads_FOUND TRUE) + ENDIF(CMAKE_HAVE_HP_CMA) + SET(CMAKE_USE_PTHREADS_INIT 1) + ENDIF() + + IF(CMAKE_SYSTEM MATCHES "OSF1-V*") + SET(CMAKE_USE_PTHREADS_INIT 0) + SET(CMAKE_THREAD_LIBS_INIT ) + ENDIF() + + IF(CMAKE_SYSTEM MATCHES "CYGWIN_NT*") + SET(CMAKE_USE_PTHREADS_INIT 1) + SET(Threads_FOUND TRUE) + SET(CMAKE_THREAD_LIBS_INIT ) + SET(CMAKE_USE_WIN32_THREADS_INIT 0) + ENDIF() +ENDIF(CMAKE_USE_PTHREADS_INIT) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Threads DEFAULT_MSG Threads_FOUND) diff --git a/Modules/FindUnixCommands.cmake b/Modules/FindUnixCommands.cmake new file mode 100644 index 0000000..9c0264d --- /dev/null +++ b/Modules/FindUnixCommands.cmake @@ -0,0 +1,93 @@ +# - Find unix commands from cygwin +# This module looks for some usual Unix commands. +# + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(FindCygwin) + +FIND_PROGRAM(BASH + bash + ${CYGWIN_INSTALL_PATH}/bin + /bin + /usr/bin + /usr/local/bin + /sbin +) +MARK_AS_ADVANCED( + BASH +) + +FIND_PROGRAM(CP + cp + ${CYGWIN_INSTALL_PATH}/bin + /bin + /usr/bin + /usr/local/bin + /sbin +) +MARK_AS_ADVANCED( + CP +) + +FIND_PROGRAM(GZIP + gzip + ${CYGWIN_INSTALL_PATH}/bin + /bin + /usr/bin + /usr/local/bin + /sbin +) +MARK_AS_ADVANCED( + GZIP +) + +FIND_PROGRAM(MV + mv + ${CYGWIN_INSTALL_PATH}/bin + /bin + /usr/bin + /usr/local/bin + /sbin +) +MARK_AS_ADVANCED( + MV +) + +FIND_PROGRAM(RM + rm + ${CYGWIN_INSTALL_PATH}/bin + /bin + /usr/bin + /usr/local/bin + /sbin +) +MARK_AS_ADVANCED( + RM +) + +FIND_PROGRAM(TAR + NAMES + tar + gtar + PATH + ${CYGWIN_INSTALL_PATH}/bin + /bin + /usr/bin + /usr/local/bin + /sbin +) +MARK_AS_ADVANCED( + TAR +) diff --git a/Modules/FindVTK.cmake b/Modules/FindVTK.cmake new file mode 100644 index 0000000..6b1772f --- /dev/null +++ b/Modules/FindVTK.cmake @@ -0,0 +1,141 @@ +# - Find a VTK installation or build tree. +# The following variables are set if VTK is found. If VTK is not +# found, VTK_FOUND is set to false. +# VTK_FOUND - Set to true when VTK is found. +# VTK_USE_FILE - CMake file to use VTK. +# VTK_MAJOR_VERSION - The VTK major version number. +# VTK_MINOR_VERSION - The VTK minor version number +# (odd non-release). +# VTK_BUILD_VERSION - The VTK patch level +# (meaningless for odd minor). +# VTK_INCLUDE_DIRS - Include directories for VTK +# VTK_LIBRARY_DIRS - Link directories for VTK libraries +# VTK_KITS - List of VTK kits, in CAPS +# (COMMON,IO,) etc. +# VTK_LANGUAGES - List of wrapped languages, in CAPS +# (TCL, PYHTON,) etc. +# The following cache entries must be set by the user to locate VTK: +# VTK_DIR - The directory containing VTKConfig.cmake. +# This is either the root of the build tree, +# or the lib/vtk directory. This is the +# only cache entry. +# The following variables are set for backward compatibility and +# should not be used in new code: +# USE_VTK_FILE - The full path to the UseVTK.cmake file. +# This is provided for backward +# compatibility. Use VTK_USE_FILE +# instead. +# + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Assume not found. +SET(VTK_FOUND 0) + +# VTK 4.0 did not provide VTKConfig.cmake. +IF("${VTK_FIND_VERSION}" VERSION_LESS 4.1) + SET(_VTK_40_ALLOW 1) + IF(VTK_FIND_VERSION) + SET(_VTK_40_ONLY 1) + ENDIF() +ENDIF() + +# Construct consitent error messages for use below. +SET(VTK_DIR_DESCRIPTION "directory containing VTKConfig.cmake. This is either the root of the build tree, or PREFIX/lib/vtk for an installation.") +IF(_VTK_40_ALLOW) + SET(VTK_DIR_DESCRIPTION "${VTK_DIR_DESCRIPTION} For VTK 4.0, this is the location of UseVTK.cmake. This is either the root of the build tree or PREFIX/include/vtk for an installation.") +ENDIF() +SET(VTK_DIR_MESSAGE "VTK not found. Set the VTK_DIR cmake cache entry to the ${VTK_DIR_DESCRIPTION}") + +# Check whether VTK 4.0 has already been found. +IF(_VTK_40_ALLOW AND VTK_DIR) + IF(EXISTS ${VTK_DIR}/UseVTK.cmake AND NOT EXISTS ${VTK_DIR}/VTKConfig.cmake) + SET(VTK_FOUND 1) + INCLUDE(UseVTKConfig40) # No VTKConfig; load VTK 4.0 settings. + ENDIF() +ENDIF() + +# Use the Config mode of the find_package() command to find VTKConfig. +# If this succeeds (possibly because VTK_DIR is already set), the +# command will have already loaded VTKConfig.cmake and set VTK_FOUND. +IF(NOT _VTK_40_ONLY AND NOT VTK_FOUND) + FIND_PACKAGE(VTK QUIET NO_MODULE) +ENDIF() + +# Special search for VTK 4.0. +IF(_VTK_40_ALLOW AND NOT VTK_DIR) + # Old scripts may set these directories in the CMakeCache.txt file. + # They can tell us where to find VTKConfig.cmake. + SET(VTK_DIR_SEARCH_LEGACY "") + IF(VTK_BINARY_PATH AND USE_BUILT_VTK) + SET(VTK_DIR_SEARCH_LEGACY ${VTK_DIR_SEARCH_LEGACY} ${VTK_BINARY_PATH}) + ENDIF(VTK_BINARY_PATH AND USE_BUILT_VTK) + IF(VTK_INSTALL_PATH AND USE_INSTALLED_VTK) + SET(VTK_DIR_SEARCH_LEGACY ${VTK_DIR_SEARCH_LEGACY} + ${VTK_INSTALL_PATH}/lib/vtk) + ENDIF(VTK_INSTALL_PATH AND USE_INSTALLED_VTK) + + # Look for UseVTK.cmake in build trees or under /include/vtk. + FIND_PATH(VTK_DIR + NAMES UseVTK.cmake + PATH_SUFFIXES vtk-4.0 vtk + HINTS $ENV{VTK_DIR} + + PATHS + + # Support legacy cache files. + ${VTK_DIR_SEARCH_LEGACY} + + # Read from the CMakeSetup registry entries. It is likely that + # VTK will have been recently built. + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild1] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild2] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild3] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild4] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild5] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild6] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild7] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild8] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild9] + [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild10] + + # Help the user find it if we cannot. + DOC "The ${VTK_DIR_DESCRIPTION}" + ) + + IF(VTK_DIR) + IF(EXISTS ${VTK_DIR}/UseVTK.cmake AND NOT EXISTS ${VTK_DIR}/VTKConfig.cmake) + SET(VTK_FOUND 1) + INCLUDE(UseVTKConfig40) # No VTKConfig; load VTK 4.0 settings. + ELSE() + # We found the wrong version. Pretend we did not find it. + SET(VTK_DIR "VTK_DIR-NOTFOUND" CACHE PATH "The ${VTK_DIR_DESCRIPTION}" FORCE) + ENDIF() + ENDIF() +ENDIF() + +#----------------------------------------------------------------------------- +IF(VTK_FOUND) + # Set USE_VTK_FILE for backward-compatability. + SET(USE_VTK_FILE ${VTK_USE_FILE}) +ELSE(VTK_FOUND) + # VTK not found, explain to the user how to specify its location. + IF(VTK_FIND_REQUIRED) + MESSAGE(FATAL_ERROR ${VTK_DIR_MESSAGE}) + ELSE(VTK_FIND_REQUIRED) + IF(NOT VTK_FIND_QUIETLY) + MESSAGE(STATUS ${VTK_DIR_MESSAGE}) + ENDIF(NOT VTK_FIND_QUIETLY) + ENDIF(VTK_FIND_REQUIRED) +ENDIF(VTK_FOUND) diff --git a/Modules/FindWget.cmake b/Modules/FindWget.cmake new file mode 100644 index 0000000..c94132c --- /dev/null +++ b/Modules/FindWget.cmake @@ -0,0 +1,36 @@ +# - Find wget +# This module looks for wget. This module defines the +# following values: +# WGET_EXECUTABLE: the full path to the wget tool. +# WGET_FOUND: True if wget has been found. + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(FindCygwin) + +FIND_PROGRAM(WGET_EXECUTABLE + wget + ${CYGWIN_INSTALL_PATH}/bin +) + +# handle the QUIETLY and REQUIRED arguments and set WGET_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Wget DEFAULT_MSG WGET_EXECUTABLE) + +MARK_AS_ADVANCED( WGET_EXECUTABLE ) + +# WGET option is deprecated. +# use WGET_EXECUTABLE instead. +SET (WGET ${WGET_EXECUTABLE} ) diff --git a/Modules/FindWish.cmake b/Modules/FindWish.cmake new file mode 100644 index 0000000..a4960cd --- /dev/null +++ b/Modules/FindWish.cmake @@ -0,0 +1,85 @@ +# - Find wish installation +# This module finds if TCL is installed and determines where the +# include files and libraries are. It also determines what the name of +# the library is. This code sets the following variables: +# +# TK_WISH = the path to the wish executable +# +# if UNIX is defined, then it will look for the cygwin version first + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(UNIX) + FIND_PROGRAM(TK_WISH cygwish80 ) +ENDIF(UNIX) + +GET_FILENAME_COMPONENT(TCL_TCLSH_PATH "${TCL_TCLSH}" PATH) +GET_FILENAME_COMPONENT(TCL_TCLSH_PATH_PARENT "${TCL_TCLSH_PATH}" PATH) +STRING(REGEX REPLACE + "^.*tclsh([0-9]\\.*[0-9]).*$" "\\1" TCL_TCLSH_VERSION "${TCL_TCLSH}") + +GET_FILENAME_COMPONENT(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH) +GET_FILENAME_COMPONENT(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH) + +GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH) +GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH) +STRING(REGEX REPLACE + "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY}") + +GET_FILENAME_COMPONENT(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH) +GET_FILENAME_COMPONENT(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH) +STRING(REGEX REPLACE + "^.*tk([0-9]\\.*[0-9]).*$" "\\1" TK_LIBRARY_VERSION "${TK_LIBRARY}") + +SET(TCLTK_POSSIBLE_BIN_PATHS + "${TCL_INCLUDE_PATH_PARENT}/bin" + "${TK_INCLUDE_PATH_PARENT}/bin" + "${TCL_LIBRARY_PATH_PARENT}/bin" + "${TK_LIBRARY_PATH_PARENT}/bin" + "${TCL_TCLSH_PATH_PARENT}/bin" + ) + +IF(WIN32) + GET_FILENAME_COMPONENT( + ActiveTcl_CurrentVersion + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]" + NAME) + SET(TCLTK_POSSIBLE_BIN_PATHS ${TCLTK_POSSIBLE_BIN_PATHS} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/bin" + ) +ENDIF(WIN32) + +SET(TK_WISH_NAMES + wish + wish${TCL_LIBRARY_VERSION} wish${TK_LIBRARY_VERSION} wish${TCL_TCLSH_VERSION} + wish86 wish8.6 + wish85 wish8.5 + wish84 wish8.4 + wish83 wish8.3 + wish82 wish8.2 + wish80 wish8.0 + ) + +FIND_PROGRAM(TK_WISH + NAMES ${TK_WISH_NAMES} + HINTS ${TCLTK_POSSIBLE_BIN_PATHS} + ) + +MARK_AS_ADVANCED(TK_WISH) diff --git a/Modules/FindX11.cmake b/Modules/FindX11.cmake new file mode 100644 index 0000000..76fb3c9 --- /dev/null +++ b/Modules/FindX11.cmake @@ -0,0 +1,492 @@ +# - Find X11 installation +# Try to find X11 on UNIX systems. The following values are defined +# X11_FOUND - True if X11 is available +# X11_INCLUDE_DIR - include directories to use X11 +# X11_LIBRARIES - link against these to use X11 +# +# and also the following more fine grained variables: +# Include paths: X11_ICE_INCLUDE_PATH, X11_ICE_LIB, X11_ICE_FOUND +# X11_SM_INCLUDE_PATH, X11_SM_LIB, X11_SM_FOUND +# X11_X11_INCLUDE_PATH, X11_X11_LIB +# X11_Xaccessrules_INCLUDE_PATH, X11_Xaccess_FOUND +# X11_Xaccessstr_INCLUDE_PATH, X11_Xaccess_FOUND +# X11_Xau_INCLUDE_PATH, X11_Xau_LIB, X11_Xau_FOUND +# X11_Xcomposite_INCLUDE_PATH, X11_Xcomposite_LIB, X11_Xcomposite_FOUND +# X11_Xcursor_INCLUDE_PATH, X11_Xcursor_LIB, X11_Xcursor_FOUND +# X11_Xdamage_INCLUDE_PATH, X11_Xdamage_LIB, X11_Xdamage_FOUND +# X11_Xdmcp_INCLUDE_PATH, X11_Xdmcp_LIB, X11_Xdmcp_FOUND +# X11_Xext_LIB, X11_Xext_FOUND +# X11_dpms_INCLUDE_PATH, (in X11_Xext_LIB), X11_dpms_FOUND +# X11_XShm_INCLUDE_PATH, (in X11_Xext_LIB), X11_XShm_FOUND +# X11_Xshape_INCLUDE_PATH, (in X11_Xext_LIB), X11_Xshape_FOUND +# X11_xf86misc_INCLUDE_PATH, X11_Xxf86misc_LIB, X11_xf86misc_FOUND +# X11_xf86vmode_INCLUDE_PATH, X11_Xxf86vm_LIB X11_xf86vmode_FOUND +# X11_Xfixes_INCLUDE_PATH, X11_Xfixes_LIB, X11_Xfixes_FOUND +# X11_Xft_INCLUDE_PATH, X11_Xft_LIB, X11_Xft_FOUND +# X11_Xi_INCLUDE_PATH, X11_Xi_LIB, X11_Xi_FOUND +# X11_Xinerama_INCLUDE_PATH, X11_Xinerama_LIB, X11_Xinerama_FOUND +# X11_Xinput_INCLUDE_PATH, X11_Xinput_LIB, X11_Xinput_FOUND +# X11_Xkb_INCLUDE_PATH, X11_Xkb_FOUND +# X11_Xkblib_INCLUDE_PATH, X11_Xkb_FOUND +# X11_Xkbfile_INCLUDE_PATH, X11_Xkbfile_LIB, X11_Xkbfile_FOUND +# X11_Xmu_INCLUDE_PATH, X11_Xmu_LIB, X11_Xmu_FOUND +# X11_Xpm_INCLUDE_PATH, X11_Xpm_LIB, X11_Xpm_FOUND +# X11_XTest_INCLUDE_PATH, X11_XTest_LIB, X11_XTest_FOUND +# X11_Xrandr_INCLUDE_PATH, X11_Xrandr_LIB, X11_Xrandr_FOUND +# X11_Xrender_INCLUDE_PATH, X11_Xrender_LIB, X11_Xrender_FOUND +# X11_Xscreensaver_INCLUDE_PATH, X11_Xscreensaver_LIB, X11_Xscreensaver_FOUND +# X11_Xt_INCLUDE_PATH, X11_Xt_LIB, X11_Xt_FOUND +# X11_Xutil_INCLUDE_PATH, X11_Xutil_FOUND +# X11_Xv_INCLUDE_PATH, X11_Xv_LIB, X11_Xv_FOUND +# X11_XSync_INCLUDE_PATH, (in X11_Xext_LIB), X11_XSync_FOUND + + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF (UNIX) + SET(X11_FOUND 0) + # X11 is never a framework and some header files may be + # found in tcl on the mac + SET(CMAKE_FIND_FRAMEWORK_SAVE ${CMAKE_FIND_FRAMEWORK}) + SET(CMAKE_FIND_FRAMEWORK NEVER) + SET(X11_INC_SEARCH_PATH + /usr/pkg/xorg/include + /usr/X11R6/include + /usr/X11R7/include + /usr/include/X11 + /usr/openwin/include + /usr/openwin/share/include + /opt/graphics/OpenGL/include + ) + + SET(X11_LIB_SEARCH_PATH + /usr/pkg/xorg/lib + /usr/X11R6/lib + /usr/X11R7/lib + /usr/openwin/lib + ) + + FIND_PATH(X11_X11_INCLUDE_PATH X11/X.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xlib_INCLUDE_PATH X11/Xlib.h ${X11_INC_SEARCH_PATH}) + + # Look for includes; keep the list sorted by name of the cmake *_INCLUDE_PATH + # variable (which doesn't need to match the include file name). + + # Solaris lacks XKBrules.h, so we should skip kxkbd there. + FIND_PATH(X11_ICE_INCLUDE_PATH X11/ICE/ICE.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_SM_INCLUDE_PATH X11/SM/SM.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xaccessrules_INCLUDE_PATH X11/extensions/XKBrules.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xaccessstr_INCLUDE_PATH X11/extensions/XKBstr.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xau_INCLUDE_PATH X11/Xauth.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xcomposite_INCLUDE_PATH X11/extensions/Xcomposite.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xcursor_INCLUDE_PATH X11/Xcursor/Xcursor.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xdamage_INCLUDE_PATH X11/extensions/Xdamage.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xdmcp_INCLUDE_PATH X11/Xdmcp.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_dpms_INCLUDE_PATH X11/extensions/dpms.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_xf86misc_INCLUDE_PATH X11/extensions/xf86misc.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_xf86vmode_INCLUDE_PATH X11/extensions/xf86vmode.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xfixes_INCLUDE_PATH X11/extensions/Xfixes.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xft_INCLUDE_PATH X11/Xft/Xft.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xi_INCLUDE_PATH X11/extensions/XInput.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xinerama_INCLUDE_PATH X11/extensions/Xinerama.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xinput_INCLUDE_PATH X11/extensions/XInput.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xkb_INCLUDE_PATH X11/extensions/XKB.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xkblib_INCLUDE_PATH X11/XKBlib.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xkbfile_INCLUDE_PATH X11/extensions/XKBfile.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xmu_INCLUDE_PATH X11/Xmu/Xmu.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xpm_INCLUDE_PATH X11/xpm.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_XTest_INCLUDE_PATH X11/extensions/XTest.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_XShm_INCLUDE_PATH X11/extensions/XShm.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xrandr_INCLUDE_PATH X11/extensions/Xrandr.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xrender_INCLUDE_PATH X11/extensions/Xrender.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_XRes_INCLUDE_PATH X11/extensions/XRes.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xscreensaver_INCLUDE_PATH X11/extensions/scrnsaver.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xshape_INCLUDE_PATH X11/extensions/shape.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xutil_INCLUDE_PATH X11/Xutil.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xt_INCLUDE_PATH X11/Intrinsic.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_Xv_INCLUDE_PATH X11/extensions/Xvlib.h ${X11_INC_SEARCH_PATH}) + FIND_PATH(X11_XSync_INCLUDE_PATH X11/extensions/sync.h ${X11_INC_SEARCH_PATH}) + + + FIND_LIBRARY(X11_X11_LIB X11 ${X11_LIB_SEARCH_PATH}) + + # Find additional X libraries. Keep list sorted by library name. + FIND_LIBRARY(X11_ICE_LIB ICE ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_SM_LIB SM ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xau_LIB Xau ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xcomposite_LIB Xcomposite ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xcursor_LIB Xcursor ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xdamage_LIB Xdamage ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xdmcp_LIB Xdmcp ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xext_LIB Xext ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xfixes_LIB Xfixes ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xft_LIB Xft ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xi_LIB Xi ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xinerama_LIB Xinerama ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xinput_LIB Xi ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xkbfile_LIB xkbfile ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xmu_LIB Xmu ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xpm_LIB Xpm ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xrandr_LIB Xrandr ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xrender_LIB Xrender ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_XRes_LIB XRes ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xscreensaver_LIB Xss ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xt_LIB Xt ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xv_LIB Xv ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xxf86misc_LIB Xxf86misc ${X11_LIB_SEARCH_PATH}) + FIND_LIBRARY(X11_Xxf86vm_LIB Xxf86vm ${X11_LIB_SEARCH_PATH}) + + SET(X11_LIBRARY_DIR "") + IF(X11_X11_LIB) + GET_FILENAME_COMPONENT(X11_LIBRARY_DIR ${X11_X11_LIB} PATH) + ENDIF(X11_X11_LIB) + + SET(X11_INCLUDE_DIR) # start with empty list + IF(X11_X11_INCLUDE_PATH) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_X11_INCLUDE_PATH}) + ENDIF(X11_X11_INCLUDE_PATH) + + IF(X11_Xlib_INCLUDE_PATH) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xlib_INCLUDE_PATH}) + ENDIF(X11_Xlib_INCLUDE_PATH) + + IF(X11_Xutil_INCLUDE_PATH) + SET(X11_Xutil_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xutil_INCLUDE_PATH}) + ENDIF(X11_Xutil_INCLUDE_PATH) + + IF(X11_Xshape_INCLUDE_PATH) + SET(X11_Xshape_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xshape_INCLUDE_PATH}) + ENDIF(X11_Xshape_INCLUDE_PATH) + + SET(X11_LIBRARIES) # start with empty list + IF(X11_X11_LIB) + SET(X11_LIBRARIES ${X11_LIBRARIES} ${X11_X11_LIB}) + ENDIF(X11_X11_LIB) + + IF(X11_Xext_LIB) + SET(X11_Xext_FOUND TRUE) + SET(X11_LIBRARIES ${X11_LIBRARIES} ${X11_Xext_LIB}) + ENDIF(X11_Xext_LIB) + + IF(X11_Xt_LIB AND X11_Xt_INCLUDE_PATH) + SET(X11_Xt_FOUND TRUE) + ENDIF(X11_Xt_LIB AND X11_Xt_INCLUDE_PATH) + + IF(X11_Xft_LIB AND X11_Xft_INCLUDE_PATH) + SET(X11_Xft_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xft_INCLUDE_PATH}) + ENDIF(X11_Xft_LIB AND X11_Xft_INCLUDE_PATH) + + IF(X11_Xv_LIB AND X11_Xv_INCLUDE_PATH) + SET(X11_Xv_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xv_INCLUDE_PATH}) + ENDIF(X11_Xv_LIB AND X11_Xv_INCLUDE_PATH) + + IF (X11_Xau_LIB AND X11_Xau_INCLUDE_PATH) + SET(X11_Xau_FOUND TRUE) + ENDIF (X11_Xau_LIB AND X11_Xau_INCLUDE_PATH) + + IF (X11_Xdmcp_INCLUDE_PATH AND X11_Xdmcp_LIB) + SET(X11_Xdmcp_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xdmcp_INCLUDE_PATH}) + ENDIF (X11_Xdmcp_INCLUDE_PATH AND X11_Xdmcp_LIB) + + IF (X11_Xaccessrules_INCLUDE_PATH AND X11_Xaccessstr_INCLUDE_PATH) + SET(X11_Xaccess_FOUND TRUE) + SET(X11_Xaccess_INCLUDE_PATH ${X11_Xaccessstr_INCLUDE_PATH}) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xaccess_INCLUDE_PATH}) + ENDIF (X11_Xaccessrules_INCLUDE_PATH AND X11_Xaccessstr_INCLUDE_PATH) + + IF (X11_Xpm_INCLUDE_PATH AND X11_Xpm_LIB) + SET(X11_Xpm_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xpm_INCLUDE_PATH}) + ENDIF (X11_Xpm_INCLUDE_PATH AND X11_Xpm_LIB) + + IF (X11_Xcomposite_INCLUDE_PATH AND X11_Xcomposite_LIB) + SET(X11_Xcomposite_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xcomposite_INCLUDE_PATH}) + ENDIF (X11_Xcomposite_INCLUDE_PATH AND X11_Xcomposite_LIB) + + IF (X11_Xdamage_INCLUDE_PATH AND X11_Xdamage_LIB) + SET(X11_Xdamage_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xdamage_INCLUDE_PATH}) + ENDIF (X11_Xdamage_INCLUDE_PATH AND X11_Xdamage_LIB) + + IF (X11_XShm_INCLUDE_PATH) + SET(X11_XShm_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_XShm_INCLUDE_PATH}) + ENDIF (X11_XShm_INCLUDE_PATH) + + IF (X11_XTest_INCLUDE_PATH AND X11_XTest_LIB) + SET(X11_XTest_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_XTest_INCLUDE_PATH}) + ENDIF (X11_XTest_INCLUDE_PATH AND X11_XTest_LIB) + + IF (X11_Xi_INCLUDE_PATH AND X11_Xi_LIB) + SET(X11_Xi_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xi_INCLUDE_PATH}) + ENDIF (X11_Xi_INCLUDE_PATH AND X11_Xi_LIB) + + IF (X11_Xinerama_INCLUDE_PATH AND X11_Xinerama_LIB) + SET(X11_Xinerama_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xinerama_INCLUDE_PATH}) + ENDIF (X11_Xinerama_INCLUDE_PATH AND X11_Xinerama_LIB) + + IF (X11_Xfixes_INCLUDE_PATH AND X11_Xfixes_LIB) + SET(X11_Xfixes_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xfixes_INCLUDE_PATH}) + ENDIF (X11_Xfixes_INCLUDE_PATH AND X11_Xfixes_LIB) + + IF (X11_Xrender_INCLUDE_PATH AND X11_Xrender_LIB) + SET(X11_Xrender_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xrender_INCLUDE_PATH}) + ENDIF (X11_Xrender_INCLUDE_PATH AND X11_Xrender_LIB) + + IF (X11_XRes_INCLUDE_PATH AND X11_XRes_LIB) + SET(X11_XRes_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_XRes_INCLUDE_PATH}) + ENDIF (X11_XRes_INCLUDE_PATH AND X11_XRes_LIB) + + IF (X11_Xrandr_INCLUDE_PATH AND X11_Xrandr_LIB) + SET(X11_Xrandr_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xrandr_INCLUDE_PATH}) + ENDIF (X11_Xrandr_INCLUDE_PATH AND X11_Xrandr_LIB) + + IF (X11_xf86misc_INCLUDE_PATH AND X11_Xxf86misc_LIB) + SET(X11_xf86misc_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_xf86misc_INCLUDE_PATH}) + ENDIF (X11_xf86misc_INCLUDE_PATH AND X11_Xxf86misc_LIB) + + IF (X11_xf86vmode_INCLUDE_PATH AND X11_Xxf86vm_LIB) + SET(X11_xf86vmode_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_xf86vmode_INCLUDE_PATH}) + ENDIF (X11_xf86vmode_INCLUDE_PATH AND X11_Xxf86vm_LIB) + + IF (X11_Xcursor_INCLUDE_PATH AND X11_Xcursor_LIB) + SET(X11_Xcursor_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xcursor_INCLUDE_PATH}) + ENDIF (X11_Xcursor_INCLUDE_PATH AND X11_Xcursor_LIB) + + IF (X11_Xscreensaver_INCLUDE_PATH AND X11_Xscreensaver_LIB) + SET(X11_Xscreensaver_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xscreensaver_INCLUDE_PATH}) + ENDIF (X11_Xscreensaver_INCLUDE_PATH AND X11_Xscreensaver_LIB) + + IF (X11_dpms_INCLUDE_PATH) + SET(X11_dpms_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_dpms_INCLUDE_PATH}) + ENDIF (X11_dpms_INCLUDE_PATH) + + IF (X11_Xkb_INCLUDE_PATH AND X11_Xkblib_INCLUDE_PATH AND X11_Xlib_INCLUDE_PATH) + SET(X11_Xkb_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xkb_INCLUDE_PATH} ) + ENDIF (X11_Xkb_INCLUDE_PATH AND X11_Xkblib_INCLUDE_PATH AND X11_Xlib_INCLUDE_PATH) + + IF (X11_Xkbfile_INCLUDE_PATH AND X11_Xkbfile_LIB AND X11_Xlib_INCLUDE_PATH) + SET(X11_Xkbfile_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xkbfile_INCLUDE_PATH} ) + ENDIF (X11_Xkbfile_INCLUDE_PATH AND X11_Xkbfile_LIB AND X11_Xlib_INCLUDE_PATH) + + IF (X11_Xmu_INCLUDE_PATH AND X11_Xmu_LIB) + SET(X11_Xmu_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xmu_INCLUDE_PATH}) + ENDIF (X11_Xmu_INCLUDE_PATH AND X11_Xmu_LIB) + + IF (X11_Xinput_INCLUDE_PATH AND X11_Xinput_LIB) + SET(X11_Xinput_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xinput_INCLUDE_PATH}) + ENDIF (X11_Xinput_INCLUDE_PATH AND X11_Xinput_LIB) + + IF (X11_XSync_INCLUDE_PATH) + SET(X11_XSync_FOUND TRUE) + SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_XSync_INCLUDE_PATH}) + ENDIF (X11_XSync_INCLUDE_PATH) + + IF(X11_ICE_LIB AND X11_ICE_INCLUDE_PATH) + SET(X11_ICE_FOUND TRUE) + ENDIF(X11_ICE_LIB AND X11_ICE_INCLUDE_PATH) + + IF(X11_SM_LIB AND X11_SM_INCLUDE_PATH) + SET(X11_SM_FOUND TRUE) + ENDIF(X11_SM_LIB AND X11_SM_INCLUDE_PATH) + + + # Deprecated variable for backwards compatibility with CMake 1.4 + IF (X11_X11_INCLUDE_PATH AND X11_LIBRARIES) + SET(X11_FOUND 1) + ENDIF (X11_X11_INCLUDE_PATH AND X11_LIBRARIES) + + IF(X11_FOUND) + INCLUDE(CheckFunctionExists) + INCLUDE(CheckLibraryExists) + + # Translated from an autoconf-generated configure script. + # See libs.m4 in autoconf's m4 directory. + IF($ENV{ISC} MATCHES "^yes$") + SET(X11_X_EXTRA_LIBS -lnsl_s -linet) + ELSE($ENV{ISC} MATCHES "^yes$") + SET(X11_X_EXTRA_LIBS "") + + # See if XOpenDisplay in X11 works by itself. + CHECK_LIBRARY_EXISTS("${X11_LIBRARIES}" "XOpenDisplay" "${X11_LIBRARY_DIR}" X11_LIB_X11_SOLO) + IF(NOT X11_LIB_X11_SOLO) + # Find library needed for dnet_ntoa. + CHECK_LIBRARY_EXISTS("dnet" "dnet_ntoa" "" X11_LIB_DNET_HAS_DNET_NTOA) + IF (X11_LIB_DNET_HAS_DNET_NTOA) + SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -ldnet) + ELSE (X11_LIB_DNET_HAS_DNET_NTOA) + CHECK_LIBRARY_EXISTS("dnet_stub" "dnet_ntoa" "" X11_LIB_DNET_STUB_HAS_DNET_NTOA) + IF (X11_LIB_DNET_STUB_HAS_DNET_NTOA) + SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -ldnet_stub) + ENDIF (X11_LIB_DNET_STUB_HAS_DNET_NTOA) + ENDIF (X11_LIB_DNET_HAS_DNET_NTOA) + ENDIF(NOT X11_LIB_X11_SOLO) + + # Find library needed for gethostbyname. + CHECK_FUNCTION_EXISTS("gethostbyname" CMAKE_HAVE_GETHOSTBYNAME) + IF(NOT CMAKE_HAVE_GETHOSTBYNAME) + CHECK_LIBRARY_EXISTS("nsl" "gethostbyname" "" CMAKE_LIB_NSL_HAS_GETHOSTBYNAME) + IF (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME) + SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lnsl) + ELSE (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME) + CHECK_LIBRARY_EXISTS("bsd" "gethostbyname" "" CMAKE_LIB_BSD_HAS_GETHOSTBYNAME) + IF (CMAKE_LIB_BSD_HAS_GETHOSTBYNAME) + SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lbsd) + ENDIF (CMAKE_LIB_BSD_HAS_GETHOSTBYNAME) + ENDIF (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME) + ENDIF(NOT CMAKE_HAVE_GETHOSTBYNAME) + + # Find library needed for connect. + CHECK_FUNCTION_EXISTS("connect" CMAKE_HAVE_CONNECT) + IF(NOT CMAKE_HAVE_CONNECT) + CHECK_LIBRARY_EXISTS("socket" "connect" "" CMAKE_LIB_SOCKET_HAS_CONNECT) + IF (CMAKE_LIB_SOCKET_HAS_CONNECT) + SET (X11_X_EXTRA_LIBS -lsocket ${X11_X_EXTRA_LIBS}) + ENDIF (CMAKE_LIB_SOCKET_HAS_CONNECT) + ENDIF(NOT CMAKE_HAVE_CONNECT) + + # Find library needed for remove. + CHECK_FUNCTION_EXISTS("remove" CMAKE_HAVE_REMOVE) + IF(NOT CMAKE_HAVE_REMOVE) + CHECK_LIBRARY_EXISTS("posix" "remove" "" CMAKE_LIB_POSIX_HAS_REMOVE) + IF (CMAKE_LIB_POSIX_HAS_REMOVE) + SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lposix) + ENDIF (CMAKE_LIB_POSIX_HAS_REMOVE) + ENDIF(NOT CMAKE_HAVE_REMOVE) + + # Find library needed for shmat. + CHECK_FUNCTION_EXISTS("shmat" CMAKE_HAVE_SHMAT) + IF(NOT CMAKE_HAVE_SHMAT) + CHECK_LIBRARY_EXISTS("ipc" "shmat" "" CMAKE_LIB_IPS_HAS_SHMAT) + IF (CMAKE_LIB_IPS_HAS_SHMAT) + SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lipc) + ENDIF (CMAKE_LIB_IPS_HAS_SHMAT) + ENDIF(NOT CMAKE_HAVE_SHMAT) + ENDIF($ENV{ISC} MATCHES "^yes$") + + IF (X11_ICE_FOUND) + CHECK_LIBRARY_EXISTS("ICE" "IceConnectionNumber" "${X11_LIBRARY_DIR}" + CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER) + IF(CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER) + SET (X11_X_PRE_LIBS ${X11_ICE_LIB}) + IF(X11_SM_LIB) + SET (X11_X_PRE_LIBS ${X11_SM_LIB} ${X11_X_PRE_LIBS}) + ENDIF(X11_SM_LIB) + ENDIF(CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER) + ENDIF (X11_ICE_FOUND) + + # Build the final list of libraries. + SET(X11_LIBRARIES ${X11_X_PRE_LIBS} ${X11_LIBRARIES} ${X11_X_EXTRA_LIBS}) + + INCLUDE(FindPackageMessage) + FIND_PACKAGE_MESSAGE(X11 "Found X11: ${X11_X11_LIB}" + "[${X11_X11_LIB}][${X11_INCLUDE_DIR}]") + ELSE (X11_FOUND) + IF (X11_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find X11") + ENDIF (X11_FIND_REQUIRED) + ENDIF (X11_FOUND) + + MARK_AS_ADVANCED( + X11_X11_INCLUDE_PATH + X11_X11_LIB + X11_Xext_LIB + X11_Xau_LIB + X11_Xau_INCLUDE_PATH + X11_Xlib_INCLUDE_PATH + X11_Xutil_INCLUDE_PATH + X11_Xcomposite_INCLUDE_PATH + X11_Xcomposite_LIB + X11_Xaccess_INCLUDE_PATH + X11_Xfixes_LIB + X11_Xfixes_INCLUDE_PATH + X11_Xrandr_LIB + X11_Xrandr_INCLUDE_PATH + X11_Xdamage_LIB + X11_Xdamage_INCLUDE_PATH + X11_Xrender_LIB + X11_Xrender_INCLUDE_PATH + X11_XRes_LIB + X11_XRes_INCLUDE_PATH + X11_Xxf86misc_LIB + X11_xf86misc_INCLUDE_PATH + X11_Xxf86vm_LIB + X11_xf86vmode_INCLUDE_PATH + X11_Xi_LIB + X11_Xi_INCLUDE_PATH + X11_Xinerama_LIB + X11_Xinerama_INCLUDE_PATH + X11_XTest_LIB + X11_XTest_INCLUDE_PATH + X11_Xcursor_LIB + X11_Xcursor_INCLUDE_PATH + X11_dpms_INCLUDE_PATH + X11_Xt_LIB + X11_Xt_INCLUDE_PATH + X11_Xdmcp_LIB + X11_LIBRARIES + X11_Xaccessrules_INCLUDE_PATH + X11_Xaccessstr_INCLUDE_PATH + X11_Xdmcp_INCLUDE_PATH + X11_Xkb_INCLUDE_PATH + X11_Xkblib_INCLUDE_PATH + X11_Xkbfile_INCLUDE_PATH + X11_Xkbfile_LIB + X11_Xmu_INCLUDE_PATH + X11_Xmu_LIB + X11_Xscreensaver_INCLUDE_PATH + X11_Xscreensaver_LIB + X11_Xpm_INCLUDE_PATH + X11_Xpm_LIB + X11_Xinput_LIB + X11_Xinput_INCLUDE_PATH + X11_Xft_LIB + X11_Xft_INCLUDE_PATH + X11_Xshape_INCLUDE_PATH + X11_Xv_LIB + X11_Xv_INCLUDE_PATH + X11_XShm_INCLUDE_PATH + X11_ICE_LIB + X11_ICE_INCLUDE_PATH + X11_SM_LIB + X11_SM_INCLUDE_PATH + X11_XSync_INCLUDE_PATH + ) + SET(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_SAVE}) +ENDIF (UNIX) + +# X11_FIND_REQUIRED_ could be checked too diff --git a/Modules/FindXMLRPC.cmake b/Modules/FindXMLRPC.cmake new file mode 100644 index 0000000..eccfb48 --- /dev/null +++ b/Modules/FindXMLRPC.cmake @@ -0,0 +1,146 @@ +# - Find xmlrpc +# Find the native XMLRPC headers and libraries. +# XMLRPC_INCLUDE_DIRS - where to find xmlrpc.h, etc. +# XMLRPC_LIBRARIES - List of libraries when using xmlrpc. +# XMLRPC_FOUND - True if xmlrpc found. +# XMLRPC modules may be specified as components for this find module. +# Modules may be listed by running "xmlrpc-c-config". Modules include: +# c++ C++ wrapper code +# libwww-client libwww-based client +# cgi-server CGI-based server +# abyss-server ABYSS-based server +# Typical usage: +# FIND_PACKAGE(XMLRPC REQUIRED libwww-client) + +#============================================================================= +# Copyright 2001-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# First find the config script from which to obtain other values. +FIND_PROGRAM(XMLRPC_C_CONFIG NAMES xmlrpc-c-config) + +# Check whether we found anything. +IF(XMLRPC_C_CONFIG) + SET(XMLRPC_FOUND 1) +ELSE(XMLRPC_C_CONFIG) + SET(XMLRPC_FOUND 0) +ENDIF(XMLRPC_C_CONFIG) + +# Lookup the include directories needed for the components requested. +IF(XMLRPC_FOUND) + # Use the newer EXECUTE_PROCESS command if it is available. + IF(COMMAND EXECUTE_PROCESS) + EXECUTE_PROCESS( + COMMAND ${XMLRPC_C_CONFIG} ${XMLRPC_FIND_COMPONENTS} --cflags + OUTPUT_VARIABLE XMLRPC_C_CONFIG_CFLAGS + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE XMLRPC_C_CONFIG_RESULT + ) + ELSE(COMMAND EXECUTE_PROCESS) + EXEC_PROGRAM(${XMLRPC_C_CONFIG} ARGS "${XMLRPC_FIND_COMPONENTS} --cflags" + OUTPUT_VARIABLE XMLRPC_C_CONFIG_CFLAGS + RETURN_VALUE XMLRPC_C_CONFIG_RESULT + ) + ENDIF(COMMAND EXECUTE_PROCESS) + + # Parse the include flags. + IF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") + # Convert the compile flags to a CMake list. + STRING(REGEX REPLACE " +" ";" + XMLRPC_C_CONFIG_CFLAGS "${XMLRPC_C_CONFIG_CFLAGS}") + + # Look for -I options. + SET(XMLRPC_INCLUDE_DIRS) + FOREACH(flag ${XMLRPC_C_CONFIG_CFLAGS}) + IF("${flag}" MATCHES "^-I") + STRING(REGEX REPLACE "^-I" "" DIR "${flag}") + FILE(TO_CMAKE_PATH "${DIR}" DIR) + SET(XMLRPC_INCLUDE_DIRS ${XMLRPC_INCLUDE_DIRS} "${DIR}") + ENDIF("${flag}" MATCHES "^-I") + ENDFOREACH(flag) + ELSE("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") + MESSAGE("Error running ${XMLRPC_C_CONFIG}: [${XMLRPC_C_CONFIG_RESULT}]") + SET(XMLRPC_FOUND 0) + ENDIF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") +ENDIF(XMLRPC_FOUND) + +# Lookup the libraries needed for the components requested. +IF(XMLRPC_FOUND) + # Use the newer EXECUTE_PROCESS command if it is available. + IF(COMMAND EXECUTE_PROCESS) + EXECUTE_PROCESS( + COMMAND ${XMLRPC_C_CONFIG} ${XMLRPC_FIND_COMPONENTS} --libs + OUTPUT_VARIABLE XMLRPC_C_CONFIG_LIBS + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE XMLRPC_C_CONFIG_RESULT + ) + ELSE(COMMAND EXECUTE_PROCESS) + EXEC_PROGRAM(${XMLRPC_C_CONFIG} ARGS "${XMLRPC_FIND_COMPONENTS} --libs" + OUTPUT_VARIABLE XMLRPC_C_CONFIG_LIBS + RETURN_VALUE XMLRPC_C_CONFIG_RESULT + ) + ENDIF(COMMAND EXECUTE_PROCESS) + + # Parse the library names and directories. + IF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") + STRING(REGEX REPLACE " +" ";" + XMLRPC_C_CONFIG_LIBS "${XMLRPC_C_CONFIG_LIBS}") + + # Look for -L flags for directories and -l flags for library names. + SET(XMLRPC_LIBRARY_DIRS) + SET(XMLRPC_LIBRARY_NAMES) + FOREACH(flag ${XMLRPC_C_CONFIG_LIBS}) + IF("${flag}" MATCHES "^-L") + STRING(REGEX REPLACE "^-L" "" DIR "${flag}") + FILE(TO_CMAKE_PATH "${DIR}" DIR) + SET(XMLRPC_LIBRARY_DIRS ${XMLRPC_LIBRARY_DIRS} "${DIR}") + ELSEIF("${flag}" MATCHES "^-l") + STRING(REGEX REPLACE "^-l" "" NAME "${flag}") + SET(XMLRPC_LIBRARY_NAMES ${XMLRPC_LIBRARY_NAMES} "${NAME}") + ENDIF("${flag}" MATCHES "^-L") + ENDFOREACH(flag) + + # Search for each library needed using the directories given. + FOREACH(name ${XMLRPC_LIBRARY_NAMES}) + # Look for this library. + FIND_LIBRARY(XMLRPC_${name}_LIBRARY + NAMES ${name} + HINTS ${XMLRPC_LIBRARY_DIRS} + ) + MARK_AS_ADVANCED(XMLRPC_${name}_LIBRARY) + + # If any library is not found then the whole package is not found. + IF(NOT XMLRPC_${name}_LIBRARY) + SET(XMLRPC_FOUND 0) + ENDIF(NOT XMLRPC_${name}_LIBRARY) + + # Build an ordered list of all the libraries needed. + SET(XMLRPC_LIBRARIES ${XMLRPC_LIBRARIES} "${XMLRPC_${name}_LIBRARY}") + ENDFOREACH(name) + ELSE("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") + MESSAGE("Error running ${XMLRPC_C_CONFIG}: [${XMLRPC_C_CONFIG_RESULT}]") + SET(XMLRPC_FOUND 0) + ENDIF("${XMLRPC_C_CONFIG_RESULT}" MATCHES "^0$") +ENDIF(XMLRPC_FOUND) + +# Report the results. +IF(NOT XMLRPC_FOUND) + SET(XMLRPC_DIR_MESSAGE + "XMLRPC was not found. Make sure the entries XMLRPC_* are set.") + IF(NOT XMLRPC_FIND_QUIETLY) + MESSAGE(STATUS "${XMLRPC_DIR_MESSAGE}") + ELSE(NOT XMLRPC_FIND_QUIETLY) + IF(XMLRPC_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "${XMLRPC_DIR_MESSAGE}") + ENDIF(XMLRPC_FIND_REQUIRED) + ENDIF(NOT XMLRPC_FIND_QUIETLY) +ENDIF(NOT XMLRPC_FOUND) diff --git a/Modules/FindZLIB.cmake b/Modules/FindZLIB.cmake new file mode 100644 index 0000000..166e291 --- /dev/null +++ b/Modules/FindZLIB.cmake @@ -0,0 +1,92 @@ +# - Find zlib +# Find the native ZLIB includes and library. +# Once done this will define +# +# ZLIB_INCLUDE_DIRS - where to find zlib.h, etc. +# ZLIB_LIBRARIES - List of libraries when using zlib. +# ZLIB_FOUND - True if zlib found. +# +# ZLIB_VERSION_STRING - The version of zlib found (x.y.z) +# ZLIB_VERSION_MAJOR - The major version of zlib +# ZLIB_VERSION_MINOR - The minor version of zlib +# ZLIB_VERSION_PATCH - The patch version of zlib +# ZLIB_VERSION_TWEAK - The tweak version of zlib +# +# The following variable are provided for backward compatibility +# +# ZLIB_MAJOR_VERSION - The major version of zlib +# ZLIB_MINOR_VERSION - The minor version of zlib +# ZLIB_PATCH_VERSION - The patch version of zlib +# +# An includer may set ZLIB_ROOT to a zlib installation root to tell +# this module where to look. + +#============================================================================= +# Copyright 2001-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET(_ZLIB_SEARCHES) + +# Search ZLIB_ROOT first if it is set. +IF(ZLIB_ROOT) + SET(_ZLIB_SEARCH_ROOT PATHS ${ZLIB_ROOT} NO_DEFAULT_PATH) + LIST(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_ROOT) +ENDIF() + +# Normal search. +SET(_ZLIB_SEARCH_NORMAL + PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]" + "$ENV{PROGRAMFILES}/zlib" + ) +LIST(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_NORMAL) + +SET(ZLIB_NAMES z zlib zdll zlib1 zlibd zlibd1) + +# Try each search configuration. +FOREACH(search ${_ZLIB_SEARCHES}) + FIND_PATH(ZLIB_INCLUDE_DIR NAMES zlib.h ${${search}} PATH_SUFFIXES include) + FIND_LIBRARY(ZLIB_LIBRARY NAMES ${ZLIB_NAMES} ${${search}} PATH_SUFFIXES lib) +ENDFOREACH() + +MARK_AS_ADVANCED(ZLIB_LIBRARY ZLIB_INCLUDE_DIR) + +IF(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h") + FILE(STRINGS "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_H REGEX "^#define ZLIB_VERSION \"[^\"]*\"$") + + STRING(REGEX REPLACE "^.*ZLIB_VERSION \"([0-9]+).*$" "\\1" ZLIB_VERSION_MAJOR "${ZLIB_H}") + STRING(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_MINOR "${ZLIB_H}") + STRING(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_PATCH "${ZLIB_H}") + SET(ZLIB_VERSION_STRING "${ZLIB_VERSION_MAJOR}.${ZLIB_VERSION_MINOR}.${ZLIB_VERSION_PATCH}") + + # only append a TWEAK version if it exists: + SET(ZLIB_VERSION_TWEAK "") + IF( "${ZLIB_H}" MATCHES "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+).*$") + SET(ZLIB_VERSION_TWEAK "${CMAKE_MATCH_1}") + SET(ZLIB_VERSION_STRING "${ZLIB_VERSION_STRING}.${ZLIB_VERSION_TWEAK}") + ENDIF( "${ZLIB_H}" MATCHES "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+).*$") + + SET(ZLIB_MAJOR_VERSION "${ZLIB_VERSION_MAJOR}") + SET(ZLIB_MINOR_VERSION "${ZLIB_VERSION_MINOR}") + SET(ZLIB_PATCH_VERSION "${ZLIB_VERSION_PATCH}") +ENDIF() + +# handle the QUIETLY and REQUIRED arguments and set ZLIB_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB REQUIRED_VARS ZLIB_LIBRARY ZLIB_INCLUDE_DIR + VERSION_VAR ZLIB_VERSION_STRING) + +IF(ZLIB_FOUND) + SET(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) + SET(ZLIB_LIBRARIES ${ZLIB_LIBRARY}) +ENDIF() + diff --git a/Modules/Findosg.cmake b/Modules/Findosg.cmake new file mode 100644 index 0000000..0106372 --- /dev/null +++ b/Modules/Findosg.cmake @@ -0,0 +1,54 @@ +# +# NOTE: It is highly recommended that you use the new FindOpenSceneGraph.cmake +# introduced in CMake 2.6.3 and not use this Find module directly. +# +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osg +# This module defines +# +# OSG_FOUND - Was the Osg found? +# OSG_INCLUDE_DIR - Where to find the headers +# OSG_LIBRARIES - The libraries to link against for the OSG (use this) +# +# OSG_LIBRARY - The OSG library +# OSG_LIBRARY_DEBUG - The OSG debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSG osg/PositionAttitudeTransform) +OSG_FIND_LIBRARY(OSG osg) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osg DEFAULT_MSG OSG_LIBRARY OSG_INCLUDE_DIR) diff --git a/Modules/FindosgAnimation.cmake b/Modules/FindosgAnimation.cmake new file mode 100644 index 0000000..b9b44a0 --- /dev/null +++ b/Modules/FindosgAnimation.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgAnimation +# This module defines +# +# OSGANIMATION_FOUND - Was osgAnimation found? +# OSGANIMATION_INCLUDE_DIR - Where to find the headers +# OSGANIMATION_LIBRARIES - The libraries to link against for the OSG (use this) +# +# OSGANIMATION_LIBRARY - The OSG library +# OSGANIMATION_LIBRARY_DEBUG - The OSG debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGANIMATION osgAnimation/Animation) +OSG_FIND_LIBRARY(OSGANIMATION osgAnimation) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgAnimation DEFAULT_MSG + OSGANIMATION_LIBRARY OSGANIMATION_INCLUDE_DIR) diff --git a/Modules/FindosgDB.cmake b/Modules/FindosgDB.cmake new file mode 100644 index 0000000..eabdde7 --- /dev/null +++ b/Modules/FindosgDB.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgDB +# This module defines +# +# OSGDB_FOUND - Was osgDB found? +# OSGDB_INCLUDE_DIR - Where to find the headers +# OSGDB_LIBRARIES - The libraries to link against for the osgDB (use this) +# +# OSGDB_LIBRARY - The osgDB library +# OSGDB_LIBRARY_DEBUG - The osgDB debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGDB osgDB/DatabasePager) +OSG_FIND_LIBRARY(OSGDB osgDB) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgDB DEFAULT_MSG + OSGDB_LIBRARY OSGDB_INCLUDE_DIR) diff --git a/Modules/FindosgFX.cmake b/Modules/FindosgFX.cmake new file mode 100644 index 0000000..81d5af5 --- /dev/null +++ b/Modules/FindosgFX.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgFX +# This module defines +# +# OSGFX_FOUND - Was osgFX found? +# OSGFX_INCLUDE_DIR - Where to find the headers +# OSGFX_LIBRARIES - The libraries to link against for the osgFX (use this) +# +# OSGFX_LIBRARY - The osgFX library +# OSGFX_LIBRARY_DEBUG - The osgFX debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGFX osgFX/BumpMapping) +OSG_FIND_LIBRARY(OSGFX osgFX) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgFX DEFAULT_MSG + OSGFX_LIBRARY OSGFX_INCLUDE_DIR) diff --git a/Modules/FindosgGA.cmake b/Modules/FindosgGA.cmake new file mode 100644 index 0000000..a4fe79b --- /dev/null +++ b/Modules/FindosgGA.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgGA +# This module defines +# +# OSGGA_FOUND - Was osgGA found? +# OSGGA_INCLUDE_DIR - Where to find the headers +# OSGGA_LIBRARIES - The libraries to link against for the osgGA (use this) +# +# OSGGA_LIBRARY - The osgGA library +# OSGGA_LIBRARY_DEBUG - The osgGA debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGGA osgGA/FlightManipulator) +OSG_FIND_LIBRARY(OSGGA osgGA) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgGA DEFAULT_MSG + OSGGA_LIBRARY OSGGA_INCLUDE_DIR) diff --git a/Modules/FindosgIntrospection.cmake b/Modules/FindosgIntrospection.cmake new file mode 100644 index 0000000..24e6ed5 --- /dev/null +++ b/Modules/FindosgIntrospection.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgINTROSPECTION +# This module defines +# +# OSGINTROSPECTION_FOUND - Was osgIntrospection found? +# OSGINTROSPECTION_INCLUDE_DIR - Where to find the headers +# OSGINTROSPECTION_LIBRARIES - The libraries to link for osgIntrospection (use this) +# +# OSGINTROSPECTION_LIBRARY - The osgIntrospection library +# OSGINTROSPECTION_LIBRARY_DEBUG - The osgIntrospection debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGINTROSPECTION osgIntrospection/Reflection) +OSG_FIND_LIBRARY(OSGINTROSPECTION osgIntrospection) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgIntrospection DEFAULT_MSG + OSGINTROSPECTION_LIBRARY OSGINTROSPECTION_INCLUDE_DIR) diff --git a/Modules/FindosgManipulator.cmake b/Modules/FindosgManipulator.cmake new file mode 100644 index 0000000..f71b5fd --- /dev/null +++ b/Modules/FindosgManipulator.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgManipulator +# This module defines +# +# OSGMANIPULATOR_FOUND - Was osgManipulator found? +# OSGMANIPULATOR_INCLUDE_DIR - Where to find the headers +# OSGMANIPULATOR_LIBRARIES - The libraries to link for osgManipulator (use this) +# +# OSGMANIPULATOR_LIBRARY - The osgManipulator library +# OSGMANIPULATOR_LIBRARY_DEBUG - The osgManipulator debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGMANIPULATOR osgManipulator/TrackballDragger) +OSG_FIND_LIBRARY(OSGMANIPULATOR osgManipulator) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgManipulator DEFAULT_MSG + OSGMANIPULATOR_LIBRARY OSGMANIPULATOR_INCLUDE_DIR) diff --git a/Modules/FindosgParticle.cmake b/Modules/FindosgParticle.cmake new file mode 100644 index 0000000..f23a83f --- /dev/null +++ b/Modules/FindosgParticle.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgParticle +# This module defines +# +# OSGPARTICLE_FOUND - Was osgParticle found? +# OSGPARTICLE_INCLUDE_DIR - Where to find the headers +# OSGPARTICLE_LIBRARIES - The libraries to link for osgParticle (use this) +# +# OSGPARTICLE_LIBRARY - The osgParticle library +# OSGPARTICLE_LIBRARY_DEBUG - The osgParticle debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGPARTICLE osgParticle/FireEffect) +OSG_FIND_LIBRARY(OSGPARTICLE osgParticle) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgParticle DEFAULT_MSG + OSGPARTICLE_LIBRARY OSGPARTICLE_INCLUDE_DIR) diff --git a/Modules/FindosgPresentation.cmake b/Modules/FindosgPresentation.cmake new file mode 100644 index 0000000..f89e25f --- /dev/null +++ b/Modules/FindosgPresentation.cmake @@ -0,0 +1,52 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgPresentation +# This module defines +# +# OSGPRESENTATION_FOUND - Was osgPresentation found? +# OSGPRESENTATION_INCLUDE_DIR - Where to find the headers +# OSGPRESENTATION_LIBRARIES - The libraries to link for osgPresentation (use this) +# +# OSGPRESENTATION_LIBRARY - The osgPresentation library +# OSGPRESENTATION_LIBRARY_DEBUG - The osgPresentation debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. +# Modified to work with osgPresentation by Robert Osfield, January 2012. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGPRESENTATION osgPresentation/SlideEventHandler) +OSG_FIND_LIBRARY(OSGPRESENTATION osgPresentation) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgPresentation DEFAULT_MSG + OSGPRESENTATION_LIBRARY OSGPRESENTATION_INCLUDE_DIR) diff --git a/Modules/FindosgProducer.cmake b/Modules/FindosgProducer.cmake new file mode 100644 index 0000000..51f6090 --- /dev/null +++ b/Modules/FindosgProducer.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgProducer +# This module defines +# +# OSGPRODUCER_FOUND - Was osgProducer found? +# OSGPRODUCER_INCLUDE_DIR - Where to find the headers +# OSGPRODUCER_LIBRARIES - The libraries to link for osgProducer (use this) +# +# OSGPRODUCER_LIBRARY - The osgProducer library +# OSGPRODUCER_LIBRARY_DEBUG - The osgProducer debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGPRODUCER osgProducer/OsgSceneHandler) +OSG_FIND_LIBRARY(OSGPRODUCER osgProducer) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgProducer DEFAULT_MSG + OSGPRODUCER_LIBRARY OSGPRODUCER_INCLUDE_DIR) diff --git a/Modules/FindosgQt.cmake b/Modules/FindosgQt.cmake new file mode 100644 index 0000000..ddc9128 --- /dev/null +++ b/Modules/FindosgQt.cmake @@ -0,0 +1,52 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgQt +# This module defines +# +# OSGQT_FOUND - Was osgQt found? +# OSGQT_INCLUDE_DIR - Where to find the headers +# OSGQT_LIBRARIES - The libraries to link for osgQt (use this) +# +# OSGQT_LIBRARY - The osgQt library +# OSGQT_LIBRARY_DEBUG - The osgQt debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. +# Modified to work with osgQt by Robert Osfield, January 2012. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGQT osgQt/GraphicsWindowQt) +OSG_FIND_LIBRARY(OSGQT osgQt) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgQt DEFAULT_MSG + OSGQT_LIBRARY OSGQT_INCLUDE_DIR) diff --git a/Modules/FindosgShadow.cmake b/Modules/FindosgShadow.cmake new file mode 100644 index 0000000..278f8ae --- /dev/null +++ b/Modules/FindosgShadow.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgShadow +# This module defines +# +# OSGSHADOW_FOUND - Was osgShadow found? +# OSGSHADOW_INCLUDE_DIR - Where to find the headers +# OSGSHADOW_LIBRARIES - The libraries to link for osgShadow (use this) +# +# OSGSHADOW_LIBRARY - The osgShadow library +# OSGSHADOW_LIBRARY_DEBUG - The osgShadow debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGSHADOW osgShadow/ShadowTexture) +OSG_FIND_LIBRARY(OSGSHADOW osgShadow) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgShadow DEFAULT_MSG + OSGSHADOW_LIBRARY OSGSHADOW_INCLUDE_DIR) diff --git a/Modules/FindosgSim.cmake b/Modules/FindosgSim.cmake new file mode 100644 index 0000000..15daf64 --- /dev/null +++ b/Modules/FindosgSim.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgSim +# This module defines +# +# OSGSIM_FOUND - Was osgSim found? +# OSGSIM_INCLUDE_DIR - Where to find the headers +# OSGSIM_LIBRARIES - The libraries to link for osgSim (use this) +# +# OSGSIM_LIBRARY - The osgSim library +# OSGSIM_LIBRARY_DEBUG - The osgSim debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGSIM osgSim/ImpostorSprite) +OSG_FIND_LIBRARY(OSGSIM osgSim) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgSim DEFAULT_MSG + OSGSIM_LIBRARY OSGSIM_INCLUDE_DIR) diff --git a/Modules/FindosgTerrain.cmake b/Modules/FindosgTerrain.cmake new file mode 100644 index 0000000..fbf373e --- /dev/null +++ b/Modules/FindosgTerrain.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgTerrain +# This module defines +# +# OSGTERRAIN_FOUND - Was osgTerrain found? +# OSGTERRAIN_INCLUDE_DIR - Where to find the headers +# OSGTERRAIN_LIBRARIES - The libraries to link for osgTerrain (use this) +# +# OSGTERRAIN_LIBRARY - The osgTerrain library +# OSGTERRAIN_LIBRARY_DEBUG - The osgTerrain debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGTERRAIN osgTerrain/Terrain) +OSG_FIND_LIBRARY(OSGTERRAIN osgTerrain) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgTerrain DEFAULT_MSG + OSGTERRAIN_LIBRARY OSGTERRAIN_INCLUDE_DIR) diff --git a/Modules/FindosgText.cmake b/Modules/FindosgText.cmake new file mode 100644 index 0000000..22f825f --- /dev/null +++ b/Modules/FindosgText.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgText +# This module defines +# +# OSGTEXT_FOUND - Was osgText found? +# OSGTEXT_INCLUDE_DIR - Where to find the headers +# OSGTEXT_LIBRARIES - The libraries to link for osgText (use this) +# +# OSGTEXT_LIBRARY - The osgText library +# OSGTEXT_LIBRARY_DEBUG - The osgText debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGTEXT osgText/Text) +OSG_FIND_LIBRARY(OSGTEXT osgText) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgText DEFAULT_MSG + OSGTEXT_LIBRARY OSGTEXT_INCLUDE_DIR) diff --git a/Modules/FindosgUtil.cmake b/Modules/FindosgUtil.cmake new file mode 100644 index 0000000..05a74df --- /dev/null +++ b/Modules/FindosgUtil.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgUtil +# This module defines +# +# OSGUTIL_FOUND - Was osgUtil found? +# OSGUTIL_INCLUDE_DIR - Where to find the headers +# OSGUTIL_LIBRARIES - The libraries to link for osgUtil (use this) +# +# OSGUTIL_LIBRARY - The osgUtil library +# OSGUTIL_LIBRARY_DEBUG - The osgUtil debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGUTIL osgUtil/SceneView) +OSG_FIND_LIBRARY(OSGUTIL osgUtil) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgUtil DEFAULT_MSG + OSGUTIL_LIBRARY OSGUTIL_INCLUDE_DIR) diff --git a/Modules/FindosgViewer.cmake b/Modules/FindosgViewer.cmake new file mode 100644 index 0000000..650dbd7 --- /dev/null +++ b/Modules/FindosgViewer.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgViewer +# This module defines +# +# OSGVIEWER_FOUND - Was osgViewer found? +# OSGVIEWER_INCLUDE_DIR - Where to find the headers +# OSGVIEWER_LIBRARIES - The libraries to link for osgViewer (use this) +# +# OSGVIEWER_LIBRARY - The osgViewer library +# OSGVIEWER_LIBRARY_DEBUG - The osgViewer debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGVIEWER osgViewer/Viewer) +OSG_FIND_LIBRARY(OSGVIEWER osgViewer) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgViewer DEFAULT_MSG + OSGVIEWER_LIBRARY OSGVIEWER_INCLUDE_DIR) diff --git a/Modules/FindosgVolume.cmake b/Modules/FindosgVolume.cmake new file mode 100644 index 0000000..3ad7edc --- /dev/null +++ b/Modules/FindosgVolume.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgVolume +# This module defines +# +# OSGVOLUME_FOUND - Was osgVolume found? +# OSGVOLUME_INCLUDE_DIR - Where to find the headers +# OSGVOLUME_LIBRARIES - The libraries to link for osgVolume (use this) +# +# OSGVOLUME_LIBRARY - The osgVolume library +# OSGVOLUME_LIBRARY_DEBUG - The osgVolume debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# Created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGVOLUME osgVolume/Volume) +OSG_FIND_LIBRARY(OSGVOLUME osgVolume) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgVolume DEFAULT_MSG + OSGVOLUME_LIBRARY OSGVOLUME_INCLUDE_DIR) diff --git a/Modules/FindosgWidget.cmake b/Modules/FindosgWidget.cmake new file mode 100644 index 0000000..206a8b7 --- /dev/null +++ b/Modules/FindosgWidget.cmake @@ -0,0 +1,51 @@ +# This is part of the Findosg* suite used to find OpenSceneGraph components. +# Each component is separate and you must opt in to each module. You must +# also opt into OpenGL and OpenThreads (and Producer if needed) as these +# modules won't do it for you. This is to allow you control over your own +# system piece by piece in case you need to opt out of certain components +# or change the Find behavior for a particular module (perhaps because the +# default FindOpenGL.cmake module doesn't work with your system as an +# example). +# If you want to use a more convenient module that includes everything, +# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. +# +# Locate osgWidget +# This module defines +# +# OSGWIDGET_FOUND - Was osgWidget found? +# OSGWIDGET_INCLUDE_DIR - Where to find the headers +# OSGWIDGET_LIBRARIES - The libraries to link for osgWidget (use this) +# +# OSGWIDGET_LIBRARY - The osgWidget library +# OSGWIDGET_LIBRARY_DEBUG - The osgWidget debug library +# +# $OSGDIR is an environment variable that would +# correspond to the ./configure --prefix=$OSGDIR +# used in building osg. +# +# FindosgWidget.cmake tweaked from Findosg* suite as created by Eric Wing. + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Header files are presumed to be included like +# #include +# #include + +include(Findosg_functions) +OSG_FIND_PATH (OSGWIDGET osgWidget/Widget) +OSG_FIND_LIBRARY(OSGWIDGET osgWidget) + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(osgWidget DEFAULT_MSG + OSGWIDGET_LIBRARY OSGWIDGET_INCLUDE_DIR) diff --git a/Modules/Findosg_functions.cmake b/Modules/Findosg_functions.cmake new file mode 100644 index 0000000..ab836ff --- /dev/null +++ b/Modules/Findosg_functions.cmake @@ -0,0 +1,105 @@ +# +# This CMake file contains two macros to assist with searching for OSG +# libraries and nodekits. +# + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2009 Philip Lowman +# +# 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.) + +# +# OSG_FIND_PATH +# +function(OSG_FIND_PATH module header) + string(TOUPPER ${module} module_uc) + + # Try the user's environment request before anything else. + find_path(${module_uc}_INCLUDE_DIR ${header} + HINTS + $ENV{${module_uc}_DIR} + $ENV{OSG_DIR} + $ENV{OSGDIR} + $ENV{OSG_ROOT} + PATH_SUFFIXES include + PATHS + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt + /usr/freeware + ) +endfunction(OSG_FIND_PATH module header) + + +# +# OSG_FIND_LIBRARY +# +function(OSG_FIND_LIBRARY module library) + string(TOUPPER ${module} module_uc) + + find_library(${module_uc}_LIBRARY + NAMES ${library} + HINTS + $ENV{${module_uc}_DIR} + $ENV{OSG_DIR} + $ENV{OSGDIR} + $ENV{OSG_ROOT} + PATH_SUFFIXES lib64 lib + PATHS + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt + /usr/freeware + ) + + find_library(${module_uc}_LIBRARY_DEBUG + NAMES ${library}d + HINTS + $ENV{${module_uc}_DIR} + $ENV{OSG_DIR} + $ENV{OSGDIR} + $ENV{OSG_ROOT} + PATH_SUFFIXES lib64 lib + PATHS + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt + /usr/freeware + ) + + if(NOT ${module_uc}_LIBRARY_DEBUG) + # They don't have a debug library + set(${module_uc}_LIBRARY_DEBUG ${${module_uc}_LIBRARY} PARENT_SCOPE) + set(${module_uc}_LIBRARIES ${${module_uc}_LIBRARY} PARENT_SCOPE) + else() + # They really have a FOO_LIBRARY_DEBUG + set(${module_uc}_LIBRARIES + optimized ${${module_uc}_LIBRARY} + debug ${${module_uc}_LIBRARY_DEBUG} + PARENT_SCOPE + ) + endif() +endfunction(OSG_FIND_LIBRARY module library) + +# +# OSG_MARK_AS_ADVANCED +# Just a convenience function for calling MARK_AS_ADVANCED +# +function(OSG_MARK_AS_ADVANCED _module) + string(TOUPPER ${_module} _module_UC) + mark_as_advanced(${_module_UC}_INCLUDE_DIR) + mark_as_advanced(${_module_UC}_LIBRARY) + mark_as_advanced(${_module_UC}_LIBRARY_DEBUG) +endfunction() diff --git a/Modules/FindwxWidgets.cmake b/Modules/FindwxWidgets.cmake new file mode 100644 index 0000000..0bc6172 --- /dev/null +++ b/Modules/FindwxWidgets.cmake @@ -0,0 +1,1044 @@ +# - Find a wxWidgets (a.k.a., wxWindows) installation. +# This module finds if wxWidgets is installed and selects a default +# configuration to use. wxWidgets is a modular library. To specify the +# modules that you will use, you need to name them as components to +# the package: +# +# FIND_PACKAGE(wxWidgets COMPONENTS core base ...) +# +# There are two search branches: a windows style and a unix style. For +# windows, the following variables are searched for and set to +# defaults in case of multiple choices. Change them if the defaults +# are not desired (i.e., these are the only variables you should +# change to select a configuration): +# +# wxWidgets_ROOT_DIR - Base wxWidgets directory +# (e.g., C:/wxWidgets-2.6.3). +# wxWidgets_LIB_DIR - Path to wxWidgets libraries +# (e.g., C:/wxWidgets-2.6.3/lib/vc_lib). +# wxWidgets_CONFIGURATION - Configuration to use +# (e.g., msw, mswd, mswu, mswunivud, etc.) +# wxWidgets_EXCLUDE_COMMON_LIBRARIES +# - Set to TRUE to exclude linking of +# commonly required libs (e.g., png tiff +# jpeg zlib regex expat). +# +# For unix style it uses the wx-config utility. You can select between +# debug/release, unicode/ansi, universal/non-universal, and +# static/shared in the QtDialog or ccmake interfaces by turning ON/OFF +# the following variables: +# +# wxWidgets_USE_DEBUG +# wxWidgets_USE_UNICODE +# wxWidgets_USE_UNIVERSAL +# wxWidgets_USE_STATIC +# +# There is also a wxWidgets_CONFIG_OPTIONS variable for all other +# options that need to be passed to the wx-config utility. For +# example, to use the base toolkit found in the /usr/local path, set +# the variable (before calling the FIND_PACKAGE command) as such: +# +# SET(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr) +# +# The following are set after the configuration is done for both +# windows and unix style: +# +# wxWidgets_FOUND - Set to TRUE if wxWidgets was found. +# wxWidgets_INCLUDE_DIRS - Include directories for WIN32 +# i.e., where to find "wx/wx.h" and +# "wx/setup.h"; possibly empty for unices. +# wxWidgets_LIBRARIES - Path to the wxWidgets libraries. +# wxWidgets_LIBRARY_DIRS - compile time link dirs, useful for +# rpath on UNIX. Typically an empty string +# in WIN32 environment. +# wxWidgets_DEFINITIONS - Contains defines required to compile/link +# against WX, e.g. WXUSINGDLL +# wxWidgets_DEFINITIONS_DEBUG- Contains defines required to compile/link +# against WX debug builds, e.g. __WXDEBUG__ +# wxWidgets_CXX_FLAGS - Include dirs and compiler flags for +# unices, empty on WIN32. Essentially +# "`wx-config --cxxflags`". +# wxWidgets_USE_FILE - Convenience include file. +# +# Sample usage: +# # Note that for MinGW users the order of libs is important! +# FIND_PACKAGE(wxWidgets COMPONENTS net gl core base) +# IF(wxWidgets_FOUND) +# INCLUDE(${wxWidgets_USE_FILE}) +# # and for each of your dependent executable/library targets: +# TARGET_LINK_LIBRARIES( ${wxWidgets_LIBRARIES}) +# ENDIF(wxWidgets_FOUND) +# +# If wxWidgets is required (i.e., not an optional part): +# FIND_PACKAGE(wxWidgets REQUIRED net gl core base) +# INCLUDE(${wxWidgets_USE_FILE}) +# # and for each of your dependent executable/library targets: +# TARGET_LINK_LIBRARIES( ${wxWidgets_LIBRARIES}) + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# Copyright 2007-2009 Miguel A. Figueroa-Villanueva +# +# 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.) + +# +# FIXME: check this and provide a correct sample usage... +# Remember to connect back to the upper text. +# Sample usage with monolithic wx build: +# +# FIND_PACKAGE(wxWidgets COMPONENTS mono) +# ... + +# NOTES +# +# This module has been tested on the WIN32 platform with wxWidgets +# 2.6.2, 2.6.3, and 2.5.3. However, it has been designed to +# easily extend support to all possible builds, e.g., static/shared, +# debug/release, unicode, universal, multilib/monolithic, etc.. +# +# If you want to use the module and your build type is not supported +# out-of-the-box, please contact me to exchange information on how +# your system is setup and I'll try to add support for it. +# +# AUTHOR +# +# Miguel A. Figueroa-Villanueva (miguelf at ieee dot org). +# Jan Woetzel (jw at mip.informatik.uni-kiel.de). +# +# Based on previous works of: +# Jan Woetzel (FindwxWindows.cmake), +# Jorgen Bodde and Jerry Fath (FindwxWin.cmake). + +# TODO/ideas +# +# (1) Option/Setting to use all available wx libs +# In contrast to expert developer who lists the +# minimal set of required libs in wxWidgets_USE_LIBS +# there is the newbie user: +# - who just wants to link against WX with more 'magic' +# - doesn't know the internal structure of WX or how it was built, +# in particular if it is monolithic or not +# - want to link against all available WX libs +# Basically, the intent here is to mimic what wx-config would do by +# default (i.e., `wx-config --libs`). +# +# Possible solution: +# Add a reserved keyword "std" that initializes to what wx-config +# would default to. If the user has not set the wxWidgets_USE_LIBS, +# default to "std" instead of "base core" as it is now. To implement +# "std" will basically boil down to a FOR_EACH lib-FOUND, but maybe +# checking whether a minimal set was found. + + +# FIXME: This and all the DBG_MSG calls should be removed after the +# module stabilizes. +# +# Helper macro to control the debugging output globally. There are +# two versions for controlling how verbose your output should be. +MACRO(DBG_MSG _MSG) +# MESSAGE(STATUS +# "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}") +ENDMACRO(DBG_MSG) +MACRO(DBG_MSG_V _MSG) +# MESSAGE(STATUS +# "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}") +ENDMACRO(DBG_MSG_V) + +# Clear return values in case the module is loaded more than once. +SET(wxWidgets_FOUND FALSE) +SET(wxWidgets_INCLUDE_DIRS "") +SET(wxWidgets_LIBRARIES "") +SET(wxWidgets_LIBRARY_DIRS "") +SET(wxWidgets_CXX_FLAGS "") + +# Using SYSTEM with INCLUDE_DIRECTORIES in conjunction with wxWidgets on +# the Mac produces compiler errors. Set wxWidgets_INCLUDE_DIRS_NO_SYSTEM +# to prevent UsewxWidgets.cmake from using SYSTEM. +# +# See cmake mailing list discussions for more info: +# http://www.cmake.org/pipermail/cmake/2008-April/021115.html +# http://www.cmake.org/pipermail/cmake/2008-April/021146.html +# +IF(APPLE) + SET(wxWidgets_INCLUDE_DIRS_NO_SYSTEM 1) +ENDIF(APPLE) + +# DEPRECATED: This is a patch to support the DEPRECATED use of +# wxWidgets_USE_LIBS. +# +# If wxWidgets_USE_LIBS is set: +# - if using , then override wxWidgets_USE_LIBS +# - else set wxWidgets_FIND_COMPONENTS to wxWidgets_USE_LIBS +IF(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS) + SET(wxWidgets_FIND_COMPONENTS ${wxWidgets_USE_LIBS}) +ENDIF(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS) +DBG_MSG("wxWidgets_FIND_COMPONENTS : ${wxWidgets_FIND_COMPONENTS}") + +# Add the convenience use file if available. +# +# Get dir of this file which may reside in: +# - CMAKE_MAKE_ROOT/Modules on CMake installation +# - CMAKE_MODULE_PATH if user prefers his own specialized version +SET(wxWidgets_USE_FILE "") +GET_FILENAME_COMPONENT( + wxWidgets_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) +# Prefer an existing customized version, but the user might override +# the FindwxWidgets module and not the UsewxWidgets one. +IF(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") + SET(wxWidgets_USE_FILE + "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") +ELSE(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") + SET(wxWidgets_USE_FILE UsewxWidgets) +ENDIF(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") + +#===================================================================== +#===================================================================== +IF(WIN32 AND NOT CYGWIN AND NOT MSYS) + SET(wxWidgets_FIND_STYLE "win32") +ELSE(WIN32 AND NOT CYGWIN AND NOT MSYS) + IF(UNIX OR MSYS) + SET(wxWidgets_FIND_STYLE "unix") + ENDIF(UNIX OR MSYS) +ENDIF(WIN32 AND NOT CYGWIN AND NOT MSYS) + +#===================================================================== +# WIN32_FIND_STYLE +#===================================================================== +IF(wxWidgets_FIND_STYLE STREQUAL "win32") + # Useful common wx libs needed by almost all components. + SET(wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat) + + # DEPRECATED: Use FIND_PACKAGE(wxWidgets COMPONENTS mono) instead. + IF(NOT wxWidgets_FIND_COMPONENTS) + IF(wxWidgets_USE_MONOLITHIC) + SET(wxWidgets_FIND_COMPONENTS mono) + ELSE(wxWidgets_USE_MONOLITHIC) + SET(wxWidgets_FIND_COMPONENTS core base) # this is default + ENDIF(wxWidgets_USE_MONOLITHIC) + ENDIF(NOT wxWidgets_FIND_COMPONENTS) + + # Add the common (usually required libs) unless + # wxWidgets_EXCLUDE_COMMON_LIBRARIES has been set. + IF(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES) + LIST(APPEND wxWidgets_FIND_COMPONENTS + ${wxWidgets_COMMON_LIBRARIES}) + ENDIF(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES) + + #------------------------------------------------------------------- + # WIN32: Helper MACROS + #------------------------------------------------------------------- + # + # Get filename components for a configuration. For example, + # if _CONFIGURATION = mswunivud, then _UNV=univ, _UCD=u _DBG=d + # if _CONFIGURATION = mswu, then _UNV="", _UCD=u _DBG="" + # + MACRO(WX_GET_NAME_COMPONENTS _CONFIGURATION _UNV _UCD _DBG) + STRING(REGEX MATCH "univ" ${_UNV} "${_CONFIGURATION}") + STRING(REGEX REPLACE "msw.*(u)[d]*$" "u" ${_UCD} "${_CONFIGURATION}") + IF(${_UCD} STREQUAL ${_CONFIGURATION}) + SET(${_UCD} "") + ENDIF(${_UCD} STREQUAL ${_CONFIGURATION}) + STRING(REGEX MATCH "d$" ${_DBG} "${_CONFIGURATION}") + ENDMACRO(WX_GET_NAME_COMPONENTS) + + # + # Find libraries associated to a configuration. + # + MACRO(WX_FIND_LIBS _UNV _UCD _DBG) + DBG_MSG_V("m_unv = ${_UNV}") + DBG_MSG_V("m_ucd = ${_UCD}") + DBG_MSG_V("m_dbg = ${_DBG}") + + # FIXME: What if both regex libs are available. regex should be + # found outside the loop and only wx${LIB}${_UCD}${_DBG}. + # Find wxWidgets common libraries. + FOREACH(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla) + FIND_LIBRARY(WX_${LIB}${_DBG} + NAMES + wx${LIB}${_UCD}${_DBG} # for regex + wx${LIB}${_DBG} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + MARK_AS_ADVANCED(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + + # Find wxWidgets multilib base libraries. + FIND_LIBRARY(WX_base${_DBG} + NAMES + wxbase29${_UCD}${_DBG} + wxbase28${_UCD}${_DBG} + wxbase27${_UCD}${_DBG} + wxbase26${_UCD}${_DBG} + wxbase25${_UCD}${_DBG} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + MARK_AS_ADVANCED(WX_base${_DBG}) + FOREACH(LIB net odbc xml) + FIND_LIBRARY(WX_${LIB}${_DBG} + NAMES + wxbase29${_UCD}${_DBG}_${LIB} + wxbase28${_UCD}${_DBG}_${LIB} + wxbase27${_UCD}${_DBG}_${LIB} + wxbase26${_UCD}${_DBG}_${LIB} + wxbase25${_UCD}${_DBG}_${LIB} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + MARK_AS_ADVANCED(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + + # Find wxWidgets monolithic library. + FIND_LIBRARY(WX_mono${_DBG} + NAMES + wxmsw${_UNV}29${_UCD}${_DBG} + wxmsw${_UNV}28${_UCD}${_DBG} + wxmsw${_UNV}27${_UCD}${_DBG} + wxmsw${_UNV}26${_UCD}${_DBG} + wxmsw${_UNV}25${_UCD}${_DBG} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + MARK_AS_ADVANCED(WX_mono${_DBG}) + + # Find wxWidgets multilib libraries. + FOREACH(LIB core adv aui html media xrc dbgrid gl qa richtext + stc ribbon propgrid webview) + FIND_LIBRARY(WX_${LIB}${_DBG} + NAMES + wxmsw${_UNV}29${_UCD}${_DBG}_${LIB} + wxmsw${_UNV}28${_UCD}${_DBG}_${LIB} + wxmsw${_UNV}27${_UCD}${_DBG}_${LIB} + wxmsw${_UNV}26${_UCD}${_DBG}_${LIB} + wxmsw${_UNV}25${_UCD}${_DBG}_${LIB} + PATHS ${WX_LIB_DIR} + NO_DEFAULT_PATH + ) + MARK_AS_ADVANCED(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + ENDMACRO(WX_FIND_LIBS) + + # + # Clear all library paths, so that FIND_LIBRARY refinds them. + # + # Clear a lib, reset its found flag, and mark as advanced. + MACRO(WX_CLEAR_LIB _LIB) + SET(${_LIB} "${_LIB}-NOTFOUND" CACHE FILEPATH "Cleared." FORCE) + SET(${_LIB}_FOUND FALSE) + MARK_AS_ADVANCED(${_LIB}) + ENDMACRO(WX_CLEAR_LIB) + # Clear all debug or release library paths (arguments are "d" or ""). + MACRO(WX_CLEAR_ALL_LIBS _DBG) + # Clear wxWidgets common libraries. + FOREACH(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla) + WX_CLEAR_LIB(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + + # Clear wxWidgets multilib base libraries. + WX_CLEAR_LIB(WX_base${_DBG}) + FOREACH(LIB net odbc xml) + WX_CLEAR_LIB(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + + # Clear wxWidgets monolithic library. + WX_CLEAR_LIB(WX_mono${_DBG}) + + # Clear wxWidgets multilib libraries. + FOREACH(LIB core adv aui html media xrc dbgrid gl qa richtext + stc ribbon propgrid) + WX_CLEAR_LIB(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + ENDMACRO(WX_CLEAR_ALL_LIBS) + # Clear all wxWidgets debug libraries. + MACRO(WX_CLEAR_ALL_DBG_LIBS) + WX_CLEAR_ALL_LIBS("d") + ENDMACRO(WX_CLEAR_ALL_DBG_LIBS) + # Clear all wxWidgets release libraries. + MACRO(WX_CLEAR_ALL_REL_LIBS) + WX_CLEAR_ALL_LIBS("") + ENDMACRO(WX_CLEAR_ALL_REL_LIBS) + + # + # Set the wxWidgets_LIBRARIES variable. + # Also, Sets output variable wxWidgets_FOUND to FALSE if it fails. + # + MACRO(WX_SET_LIBRARIES _LIBS _DBG) + DBG_MSG_V("Looking for ${${_LIBS}}") + IF(WX_USE_REL_AND_DBG) + FOREACH(LIB ${${_LIBS}}) + DBG_MSG_V("Searching for ${LIB} and ${LIB}d") + DBG_MSG_V("WX_${LIB} : ${WX_${LIB}}") + DBG_MSG_V("WX_${LIB}d : ${WX_${LIB}d}") + IF(WX_${LIB} AND WX_${LIB}d) + DBG_MSG_V("Found ${LIB} and ${LIB}d") + LIST(APPEND wxWidgets_LIBRARIES + debug ${WX_${LIB}d} optimized ${WX_${LIB}} + ) + ELSE(WX_${LIB} AND WX_${LIB}d) + DBG_MSG_V("- not found due to missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}") + SET(wxWidgets_FOUND FALSE) + ENDIF(WX_${LIB} AND WX_${LIB}d) + ENDFOREACH(LIB) + ELSE(WX_USE_REL_AND_DBG) + FOREACH(LIB ${${_LIBS}}) + DBG_MSG_V("Searching for ${LIB}${_DBG}") + DBG_MSG_V("WX_${LIB}${_DBG} : ${WX_${LIB}${_DBG}}") + IF(WX_${LIB}${_DBG}) + DBG_MSG_V("Found ${LIB}${_DBG}") + LIST(APPEND wxWidgets_LIBRARIES ${WX_${LIB}${_DBG}}) + ELSE(WX_${LIB}${_DBG}) + DBG_MSG_V( + "- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}") + SET(wxWidgets_FOUND FALSE) + ENDIF(WX_${LIB}${_DBG}) + ENDFOREACH(LIB) + ENDIF(WX_USE_REL_AND_DBG) + + DBG_MSG_V("OpenGL") + LIST(FIND ${_LIBS} gl WX_USE_GL) + IF(NOT WX_USE_GL EQUAL -1) + DBG_MSG_V("- is required.") + LIST(APPEND wxWidgets_LIBRARIES opengl32 glu32) + ENDIF(NOT WX_USE_GL EQUAL -1) + + LIST(APPEND wxWidgets_LIBRARIES winmm comctl32 rpcrt4 wsock32) + ENDMACRO(WX_SET_LIBRARIES) + + #------------------------------------------------------------------- + # WIN32: Start actual work. + #------------------------------------------------------------------- + + # Look for an installation tree. + FIND_PATH(wxWidgets_ROOT_DIR + NAMES include/wx/wx.h + PATHS + $ENV{wxWidgets_ROOT_DIR} + $ENV{WXWIN} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]" # WX 2.6.x + C:/ + D:/ + $ENV{ProgramFiles} + PATH_SUFFIXES + wxWidgets-2.9.4 + wxWidgets-2.9.3 + wxWidgets-2.9.2 + wxWidgets-2.9.1 + wxWidgets-2.9.0 + wxWidgets-2.8.9 + wxWidgets-2.8.8 + wxWidgets-2.8.7 + wxWidgets-2.8.6 + wxWidgets-2.8.5 + wxWidgets-2.8.4 + wxWidgets-2.8.3 + wxWidgets-2.8.2 + wxWidgets-2.8.1 + wxWidgets-2.8.0 + wxWidgets-2.7.4 + wxWidgets-2.7.3 + wxWidgets-2.7.2 + wxWidgets-2.7.1 + wxWidgets-2.7.0 + wxWidgets-2.7.0-1 + wxWidgets-2.6.4 + wxWidgets-2.6.3 + wxWidgets-2.6.2 + wxWidgets-2.6.1 + wxWidgets-2.5.4 + wxWidgets-2.5.3 + wxWidgets-2.5.2 + wxWidgets-2.5.1 + wxWidgets + DOC "wxWidgets base/installation directory?" + ) + + # If wxWidgets_ROOT_DIR changed, clear lib dir. + IF(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR) + SET(WX_ROOT_DIR ${wxWidgets_ROOT_DIR} + CACHE INTERNAL "wxWidgets_ROOT_DIR") + SET(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND" + CACHE PATH "Cleared." FORCE) + ENDIF(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR) + + IF(WX_ROOT_DIR) + # Select one default tree inside the already determined wx tree. + # Prefer static/shared order usually consistent with build + # settings. + IF(MINGW) + SET(WX_LIB_DIR_PREFIX gcc) + ELSE(MINGW) + SET(WX_LIB_DIR_PREFIX vc) + ENDIF(MINGW) + IF(BUILD_SHARED_LIBS) + FIND_PATH(wxWidgets_LIB_DIR + NAMES + msw/wx/setup.h + mswd/wx/setup.h + mswu/wx/setup.h + mswud/wx/setup.h + mswuniv/wx/setup.h + mswunivd/wx/setup.h + mswunivu/wx/setup.h + mswunivud/wx/setup.h + PATHS + ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_dll # prefer shared + ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_lib + DOC "Path to wxWidgets libraries?" + NO_DEFAULT_PATH + ) + ELSE(BUILD_SHARED_LIBS) + FIND_PATH(wxWidgets_LIB_DIR + NAMES + msw/wx/setup.h + mswd/wx/setup.h + mswu/wx/setup.h + mswud/wx/setup.h + mswuniv/wx/setup.h + mswunivd/wx/setup.h + mswunivu/wx/setup.h + mswunivud/wx/setup.h + PATHS + ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_lib # prefer static + ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_dll + DOC "Path to wxWidgets libraries?" + NO_DEFAULT_PATH + ) + ENDIF(BUILD_SHARED_LIBS) + + # If wxWidgets_LIB_DIR changed, clear all libraries. + IF(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR) + SET(WX_LIB_DIR ${wxWidgets_LIB_DIR} CACHE INTERNAL "wxWidgets_LIB_DIR") + WX_CLEAR_ALL_DBG_LIBS() + WX_CLEAR_ALL_REL_LIBS() + ENDIF(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR) + + IF(WX_LIB_DIR) + # If building shared libs, define WXUSINGDLL to use dllimport. + IF(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*") + SET(wxWidgets_DEFINITIONS WXUSINGDLL) + DBG_MSG_V("detected SHARED/DLL tree WX_LIB_DIR=${WX_LIB_DIR}") + ENDIF(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*") + + # Search for available configuration types. + FOREACH(CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw) + SET(WX_${CFG}_FOUND FALSE) + IF(EXISTS ${WX_LIB_DIR}/${CFG}) + LIST(APPEND WX_CONFIGURATION_LIST ${CFG}) + SET(WX_${CFG}_FOUND TRUE) + SET(WX_CONFIGURATION ${CFG}) + ENDIF(EXISTS ${WX_LIB_DIR}/${CFG}) + ENDFOREACH(CFG) + DBG_MSG_V("WX_CONFIGURATION_LIST=${WX_CONFIGURATION_LIST}") + + IF(WX_CONFIGURATION) + SET(wxWidgets_FOUND TRUE) + + # If the selected configuration wasn't found force the default + # one. Otherwise, use it but still force a refresh for + # updating the doc string with the current list of available + # configurations. + IF(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) + SET(wxWidgets_CONFIGURATION ${WX_CONFIGURATION} CACHE STRING + "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE) + ELSE(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) + SET(wxWidgets_CONFIGURATION ${wxWidgets_CONFIGURATION} CACHE STRING + "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE) + ENDIF(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) + + # If release config selected, and both release/debug exist. + IF(WX_${wxWidgets_CONFIGURATION}d_FOUND) + OPTION(wxWidgets_USE_REL_AND_DBG + "Use release and debug configurations?" TRUE) + SET(WX_USE_REL_AND_DBG ${wxWidgets_USE_REL_AND_DBG}) + ELSE(WX_${wxWidgets_CONFIGURATION}d_FOUND) + # If the option exists (already in cache), force it false. + IF(wxWidgets_USE_REL_AND_DBG) + SET(wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL + "No ${wxWidgets_CONFIGURATION}d found." FORCE) + ENDIF(wxWidgets_USE_REL_AND_DBG) + SET(WX_USE_REL_AND_DBG FALSE) + ENDIF(WX_${wxWidgets_CONFIGURATION}d_FOUND) + + # Get configuration parameters from the name. + WX_GET_NAME_COMPONENTS(${wxWidgets_CONFIGURATION} UNV UCD DBG) + + # Set wxWidgets lib setup include directory. + IF(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) + SET(wxWidgets_INCLUDE_DIRS + ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}) + ELSE(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) + DBG_MSG("wxWidgets_FOUND FALSE because ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h does not exists.") + SET(wxWidgets_FOUND FALSE) + ENDIF(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) + + # Set wxWidgets main include directory. + IF(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) + LIST(APPEND wxWidgets_INCLUDE_DIRS ${WX_ROOT_DIR}/include) + ELSE(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) + DBG_MSG("wxWidgets_FOUND FALSE because WX_ROOT_DIR=${WX_ROOT_DIR} has no ${WX_ROOT_DIR}/include/wx/wx.h") + SET(wxWidgets_FOUND FALSE) + ENDIF(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) + + # Find wxWidgets libraries. + WX_FIND_LIBS("${UNV}" "${UCD}" "${DBG}") + IF(WX_USE_REL_AND_DBG) + WX_FIND_LIBS("${UNV}" "${UCD}" "d") + ENDIF(WX_USE_REL_AND_DBG) + + # Settings for requested libs (i.e., include dir, libraries, etc.). + WX_SET_LIBRARIES(wxWidgets_FIND_COMPONENTS "${DBG}") + + # Add necessary definitions for unicode builds + IF("${UCD}" STREQUAL "u") + LIST(APPEND wxWidgets_DEFINITIONS UNICODE _UNICODE) + ENDIF("${UCD}" STREQUAL "u") + + # Add necessary definitions for debug builds + SET(wxWidgets_DEFINITIONS_DEBUG _DEBUG __WXDEBUG__) + + ENDIF(WX_CONFIGURATION) + ENDIF(WX_LIB_DIR) + ENDIF(WX_ROOT_DIR) + +#===================================================================== +# UNIX_FIND_STYLE +#===================================================================== +ELSE(wxWidgets_FIND_STYLE STREQUAL "win32") + IF(wxWidgets_FIND_STYLE STREQUAL "unix") + #----------------------------------------------------------------- + # UNIX: Helper MACROS + #----------------------------------------------------------------- + # + # Set the default values based on "wx-config --selected-config". + # + MACRO(WX_CONFIG_SELECT_GET_DEFAULT) + EXECUTE_PROCESS( + COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" + ${wxWidgets_CONFIG_OPTIONS} --selected-config + OUTPUT_VARIABLE _wx_selected_config + RESULT_VARIABLE _wx_result + ERROR_QUIET + ) + IF(_wx_result EQUAL 0) + FOREACH(_opt_name debug static unicode universal) + STRING(TOUPPER ${_opt_name} _upper_opt_name) + IF(_wx_selected_config MATCHES ".*${_opt_name}.*") + SET(wxWidgets_DEFAULT_${_upper_opt_name} ON) + ELSE(_wx_selected_config MATCHES ".*${_opt_name}.*") + SET(wxWidgets_DEFAULT_${_upper_opt_name} OFF) + ENDIF(_wx_selected_config MATCHES ".*${_opt_name}.*") + ENDFOREACH(_opt_name) + ELSE(_wx_result EQUAL 0) + FOREACH(_upper_opt_name DEBUG STATIC UNICODE UNIVERSAL) + SET(wxWidgets_DEFAULT_${_upper_opt_name} OFF) + ENDFOREACH(_upper_opt_name) + ENDIF(_wx_result EQUAL 0) + ENDMACRO(WX_CONFIG_SELECT_GET_DEFAULT) + + # + # Query a boolean configuration option to determine if the system + # has both builds available. If so, provide the selection option + # to the user. + # + MACRO(WX_CONFIG_SELECT_QUERY_BOOL _OPT_NAME _OPT_HELP) + EXECUTE_PROCESS( + COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" + ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=yes + RESULT_VARIABLE _wx_result_yes + OUTPUT_QUIET + ERROR_QUIET + ) + EXECUTE_PROCESS( + COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" + ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=no + RESULT_VARIABLE _wx_result_no + OUTPUT_QUIET + ERROR_QUIET + ) + STRING(TOUPPER ${_OPT_NAME} _UPPER_OPT_NAME) + IF(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0) + OPTION(wxWidgets_USE_${_UPPER_OPT_NAME} + ${_OPT_HELP} ${wxWidgets_DEFAULT_${_UPPER_OPT_NAME}}) + ELSE(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0) + # If option exists (already in cache), force to available one. + IF(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME}) + IF(_wx_result_yes EQUAL 0) + SET(wxWidgets_USE_${_UPPER_OPT_NAME} ON CACHE BOOL ${_OPT_HELP} FORCE) + ELSE(_wx_result_yes EQUAL 0) + SET(wxWidgets_USE_${_UPPER_OPT_NAME} OFF CACHE BOOL ${_OPT_HELP} FORCE) + ENDIF(_wx_result_yes EQUAL 0) + ENDIF(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME}) + ENDIF(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0) + ENDMACRO(WX_CONFIG_SELECT_QUERY_BOOL) + + # + # Set wxWidgets_SELECT_OPTIONS to wx-config options for selecting + # among multiple builds. + # + MACRO(WX_CONFIG_SELECT_SET_OPTIONS) + SET(wxWidgets_SELECT_OPTIONS ${wxWidgets_CONFIG_OPTIONS}) + FOREACH(_opt_name debug static unicode universal) + STRING(TOUPPER ${_opt_name} _upper_opt_name) + IF(DEFINED wxWidgets_USE_${_upper_opt_name}) + IF(wxWidgets_USE_${_upper_opt_name}) + LIST(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=yes) + ELSE(wxWidgets_USE_${_upper_opt_name}) + LIST(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=no) + ENDIF(wxWidgets_USE_${_upper_opt_name}) + ENDIF(DEFINED wxWidgets_USE_${_upper_opt_name}) + ENDFOREACH(_opt_name) + ENDMACRO(WX_CONFIG_SELECT_SET_OPTIONS) + + #----------------------------------------------------------------- + # UNIX: Start actual work. + #----------------------------------------------------------------- + # Support cross-compiling, only search in the target platform. + FIND_PROGRAM(wxWidgets_CONFIG_EXECUTABLE wx-config + ONLY_CMAKE_FIND_ROOT_PATH + ) + + IF(wxWidgets_CONFIG_EXECUTABLE) + SET(wxWidgets_FOUND TRUE) + + # get defaults based on "wx-config --selected-config" + WX_CONFIG_SELECT_GET_DEFAULT() + + # for each option: if both builds are available, provide option + WX_CONFIG_SELECT_QUERY_BOOL(debug "Use debug build?") + WX_CONFIG_SELECT_QUERY_BOOL(unicode "Use unicode build?") + WX_CONFIG_SELECT_QUERY_BOOL(universal "Use universal build?") + WX_CONFIG_SELECT_QUERY_BOOL(static "Link libraries statically?") + + # process selection to set wxWidgets_SELECT_OPTIONS + WX_CONFIG_SELECT_SET_OPTIONS() + DBG_MSG("wxWidgets_SELECT_OPTIONS=${wxWidgets_SELECT_OPTIONS}") + + # run the wx-config program to get cxxflags + EXECUTE_PROCESS( + COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" + ${wxWidgets_SELECT_OPTIONS} --cxxflags + OUTPUT_VARIABLE wxWidgets_CXX_FLAGS + RESULT_VARIABLE RET + ERROR_QUIET + ) + IF(RET EQUAL 0) + STRING(STRIP "${wxWidgets_CXX_FLAGS}" wxWidgets_CXX_FLAGS) + SEPARATE_ARGUMENTS(wxWidgets_CXX_FLAGS) + + DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") + + # parse definitions from cxxflags; + # drop -D* from CXXFLAGS and the -D prefix + STRING(REGEX MATCHALL "-D[^;]+" + wxWidgets_DEFINITIONS "${wxWidgets_CXX_FLAGS}") + STRING(REGEX REPLACE "-D[^;]+(;|$)" "" + wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}") + STRING(REGEX REPLACE ";$" "" + wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}") + STRING(REPLACE "-D" "" + wxWidgets_DEFINITIONS "${wxWidgets_DEFINITIONS}") + + # parse include dirs from cxxflags; drop -I prefix + STRING(REGEX MATCHALL "-I[^;]+" + wxWidgets_INCLUDE_DIRS "${wxWidgets_CXX_FLAGS}") + STRING(REGEX REPLACE "-I[^;]+;" "" + wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}") + STRING(REPLACE "-I" "" + wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}") + + DBG_MSG_V("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}") + DBG_MSG_V("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}") + DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") + + ELSE(RET EQUAL 0) + SET(wxWidgets_FOUND FALSE) + DBG_MSG_V( + "${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}") + ENDIF(RET EQUAL 0) + + # run the wx-config program to get the libs + # - NOTE: wx-config doesn't verify that the libs requested exist + # it just produces the names. Maybe a TRY_COMPILE would + # be useful here... + STRING(REPLACE ";" "," + wxWidgets_FIND_COMPONENTS "${wxWidgets_FIND_COMPONENTS}") + EXECUTE_PROCESS( + COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" + ${wxWidgets_SELECT_OPTIONS} --libs ${wxWidgets_FIND_COMPONENTS} + OUTPUT_VARIABLE wxWidgets_LIBRARIES + RESULT_VARIABLE RET + ERROR_QUIET + ) + IF(RET EQUAL 0) + STRING(STRIP "${wxWidgets_LIBRARIES}" wxWidgets_LIBRARIES) + SEPARATE_ARGUMENTS(wxWidgets_LIBRARIES) + STRING(REPLACE "-framework;" "-framework " + wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") + STRING(REPLACE "-arch;" "-arch " + wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") + STRING(REPLACE "-isysroot;" "-isysroot " + wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") + + # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES) + STRING(REGEX MATCHALL "-L[^;]+" + wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARIES}") + STRING(REPLACE "-L" "" + wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}") + + DBG_MSG_V("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}") + DBG_MSG_V("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}") + + ELSE(RET EQUAL 0) + SET(wxWidgets_FOUND FALSE) + DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --libs ${wxWidgets_FIND_COMPONENTS} FAILED with RET=${RET}") + ENDIF(RET EQUAL 0) + ENDIF(wxWidgets_CONFIG_EXECUTABLE) + +#===================================================================== +# Neither UNIX_FIND_STYLE, nor WIN32_FIND_STYLE +#===================================================================== + ELSE(wxWidgets_FIND_STYLE STREQUAL "unix") + IF(NOT wxWidgets_FIND_QUIETLY) + MESSAGE(STATUS + "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n" + " Platform unknown/unsupported. It's neither WIN32 nor UNIX " + "find style." + ) + ENDIF(NOT wxWidgets_FIND_QUIETLY) + ENDIF(wxWidgets_FIND_STYLE STREQUAL "unix") +ENDIF(wxWidgets_FIND_STYLE STREQUAL "win32") + +# Debug output: +DBG_MSG("wxWidgets_FOUND : ${wxWidgets_FOUND}") +DBG_MSG("wxWidgets_INCLUDE_DIRS : ${wxWidgets_INCLUDE_DIRS}") +DBG_MSG("wxWidgets_LIBRARY_DIRS : ${wxWidgets_LIBRARY_DIRS}") +DBG_MSG("wxWidgets_LIBRARIES : ${wxWidgets_LIBRARIES}") +DBG_MSG("wxWidgets_CXX_FLAGS : ${wxWidgets_CXX_FLAGS}") +DBG_MSG("wxWidgets_USE_FILE : ${wxWidgets_USE_FILE}") + +#===================================================================== +#===================================================================== +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(wxWidgets DEFAULT_MSG wxWidgets_FOUND) +# Maintain consistency with all other variables. +SET(wxWidgets_FOUND ${WXWIDGETS_FOUND}) + +#===================================================================== +# Macros for use in wxWidgets apps. +# - This module will not fail to find wxWidgets based on the code +# below. Hence, it's required to check for validity of: +# +# wxWidgets_wxrc_EXECUTABLE +#===================================================================== + +# Resource file compiler. +FIND_PROGRAM(wxWidgets_wxrc_EXECUTABLE wxrc + ${wxWidgets_ROOT_DIR}/utils/wxrc/vc_msw + ) + +# +# WX_SPLIT_ARGUMENTS_ON( ...) +# +# Sets and to contain arguments to the left and right, +# respectively, of . +# +# Example usage: +# FUNCTION(WXWIDGETS_ADD_RESOURCES outfiles) +# WX_SPLIT_ARGUMENTS_ON(OPTIONS wxrc_files wxrc_options ${ARGN}) +# ... +# ENDFUNCTION(WXWIDGETS_ADD_RESOURCES) +# +# WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o file.C) +# +# NOTE: This is a generic piece of code that should be renamed to +# SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as +# FindPackageStandardArgs.cmake. At the time of this writing +# FindQt4.cmake has a QT4_EXTRACT_OPTIONS, which I basically copied +# here a bit more generalized. So, there are already two find modules +# using this approach. +# +FUNCTION(WX_SPLIT_ARGUMENTS_ON _keyword _leftvar _rightvar) + # FIXME: Document that the input variables will be cleared. + #LIST(APPEND ${_leftvar} "") + #LIST(APPEND ${_rightvar} "") + SET(${_leftvar} "") + SET(${_rightvar} "") + + SET(_doing_right FALSE) + FOREACH(element ${ARGN}) + IF("${element}" STREQUAL "${_keyword}") + SET(_doing_right TRUE) + ELSE("${element}" STREQUAL "${_keyword}") + IF(_doing_right) + LIST(APPEND ${_rightvar} "${element}") + ELSE(_doing_right) + LIST(APPEND ${_leftvar} "${element}") + ENDIF(_doing_right) + ENDIF("${element}" STREQUAL "${_keyword}") + ENDFOREACH(element) + + SET(${_leftvar} ${${_leftvar}} PARENT_SCOPE) + SET(${_rightvar} ${${_rightvar}} PARENT_SCOPE) +ENDFUNCTION(WX_SPLIT_ARGUMENTS_ON) + +# +# WX_GET_DEPENDENCIES_FROM_XML( +# +# +# +# +# +# ) +# +# FIXME: Add documentation here... +# +FUNCTION(WX_GET_DEPENDENCIES_FROM_XML + _depends + _match_patt + _clean_patt + _xml_contents + _depends_path + ) + + STRING(REGEX MATCHALL + ${_match_patt} + dep_file_list + "${${_xml_contents}}" + ) + FOREACH(dep_file ${dep_file_list}) + STRING(REGEX REPLACE ${_clean_patt} "" dep_file "${dep_file}") + + # make the file have an absolute path + IF(NOT IS_ABSOLUTE "${dep_file}") + SET(dep_file "${${_depends_path}}/${dep_file}") + ENDIF(NOT IS_ABSOLUTE "${dep_file}") + + # append file to dependency list + LIST(APPEND ${_depends} "${dep_file}") + ENDFOREACH(dep_file) + + SET(${_depends} ${${_depends}} PARENT_SCOPE) +ENDFUNCTION(WX_GET_DEPENDENCIES_FROM_XML) + +# +# WXWIDGETS_ADD_RESOURCES( +# OPTIONS [NO_CPP_CODE]) +# +# Adds a custom command for resource file compilation of the +# and appends the output files to . +# +# Example usages: +# WXWIDGETS_ADD_RESOURCES(sources xrc/main_frame.xrc) +# WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o altname.cxx) +# +FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles) + WX_SPLIT_ARGUMENTS_ON(OPTIONS rc_file_list rc_options ${ARGN}) + + # Parse files for dependencies. + SET(rc_file_list_abs "") + SET(rc_depends "") + FOREACH(rc_file ${rc_file_list}) + GET_FILENAME_COMPONENT(depends_path ${rc_file} PATH) + + GET_FILENAME_COMPONENT(rc_file_abs ${rc_file} ABSOLUTE) + LIST(APPEND rc_file_list_abs "${rc_file_abs}") + + # All files have absolute paths or paths relative to the location + # of the rc file. + FILE(READ "${rc_file_abs}" rc_file_contents) + + # get bitmap/bitmap2 files + WX_GET_DEPENDENCIES_FROM_XML( + rc_depends + "]*>" + rc_file_contents + depends_path + ) + + # get url files + WX_GET_DEPENDENCIES_FROM_XML( + rc_depends + "]*>" + rc_file_contents + depends_path + ) + + # get wxIcon files + WX_GET_DEPENDENCIES_FROM_XML( + rc_depends + "]*class=\"wxIcon\"[^<]+" + "^]*>" + rc_file_contents + depends_path + ) + ENDFOREACH(rc_file) + + # + # Parse options. + # + # If NO_CPP_CODE option specified, then produce .xrs file rather + # than a .cpp file (i.e., don't add the default --cpp-code option). + LIST(FIND rc_options NO_CPP_CODE index) + IF(index EQUAL -1) + LIST(APPEND rc_options --cpp-code) + # wxrc's default output filename for cpp code. + SET(outfile resource.cpp) + ELSE(index EQUAL -1) + LIST(REMOVE_AT rc_options ${index}) + # wxrc's default output filename for xrs file. + SET(outfile resource.xrs) + ENDIF(index EQUAL -1) + + # Get output name for use in ADD_CUSTOM_COMMAND. + # - short option scanning + LIST(FIND rc_options -o index) + IF(NOT index EQUAL -1) + MATH(EXPR filename_index "${index} + 1") + LIST(GET rc_options ${filename_index} outfile) + #LIST(REMOVE_AT rc_options ${index} ${filename_index}) + ENDIF(NOT index EQUAL -1) + # - long option scanning + STRING(REGEX MATCH "--output=[^;]*" outfile_opt "${rc_options}") + IF(outfile_opt) + STRING(REPLACE "--output=" "" outfile "${outfile_opt}") + ENDIF(outfile_opt) + #STRING(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}") + #STRING(REGEX REPLACE ";$" "" rc_options "${rc_options}") + + IF(NOT IS_ABSOLUTE "${outfile}") + SET(outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}") + ENDIF(NOT IS_ABSOLUTE "${outfile}") + ADD_CUSTOM_COMMAND( + OUTPUT "${outfile}" + COMMAND ${wxWidgets_wxrc_EXECUTABLE} ${rc_options} ${rc_file_list_abs} + DEPENDS ${rc_file_list_abs} ${rc_depends} + ) + + # Add generated header to output file list. + LIST(FIND rc_options -e short_index) + LIST(FIND rc_options --extra-cpp-code long_index) + IF(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1) + GET_FILENAME_COMPONENT(outfile_ext ${outfile} EXT) + STRING(REPLACE "${outfile_ext}" ".h" outfile_header "${outfile}") + LIST(APPEND ${_outfiles} "${outfile_header}") + SET_SOURCE_FILES_PROPERTIES( + "${outfile_header}" PROPERTIES GENERATED TRUE + ) + ENDIF(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1) + + # Add generated file to output file list. + LIST(APPEND ${_outfiles} "${outfile}") + + SET(${_outfiles} ${${_outfiles}} PARENT_SCOPE) +ENDFUNCTION(WXWIDGETS_ADD_RESOURCES) diff --git a/Modules/FindwxWindows.cmake b/Modules/FindwxWindows.cmake new file mode 100644 index 0000000..f55cf00 --- /dev/null +++ b/Modules/FindwxWindows.cmake @@ -0,0 +1,706 @@ +# - Find wxWindows (wxWidgets) installation +# This module finds if wxWindows/wxWidgets is installed and determines where +# the include files and libraries are. It also determines what the name of +# the library is. +# Please note this file is DEPRECATED and replaced by FindwxWidgets.cmake. +# This code sets the following variables: +# +# WXWINDOWS_FOUND = system has WxWindows +# WXWINDOWS_LIBRARIES = path to the wxWindows libraries +# on Unix/Linux with additional +# linker flags from +# "wx-config --libs" +# CMAKE_WXWINDOWS_CXX_FLAGS = Compiler flags for wxWindows, +# essentially "`wx-config --cxxflags`" +# on Linux +# WXWINDOWS_INCLUDE_DIR = where to find "wx/wx.h" and "wx/setup.h" +# WXWINDOWS_LINK_DIRECTORIES = link directories, useful for rpath on +# Unix +# WXWINDOWS_DEFINITIONS = extra defines +# +# OPTIONS +# If you need OpenGL support please +# SET(WXWINDOWS_USE_GL 1) +# in your CMakeLists.txt *before* you include this file. +# +# HAVE_ISYSTEM - true required to replace -I by -isystem on g++ +# +# For convenience include Use_wxWindows.cmake in your project's +# CMakeLists.txt using INCLUDE(Use_wxWindows). +# +# USAGE +# SET(WXWINDOWS_USE_GL 1) +# FIND_PACKAGE(wxWindows) +# +# NOTES +# wxWidgets 2.6.x is supported for monolithic builds +# e.g. compiled in wx/build/msw dir as: +# nmake -f makefile.vc BUILD=debug SHARED=0 USE_OPENGL=1 MONOLITHIC=1 +# +# DEPRECATED +# +# CMAKE_WX_CAN_COMPILE +# WXWINDOWS_LIBRARY +# CMAKE_WX_CXX_FLAGS +# WXWINDOWS_INCLUDE_PATH +# +# AUTHOR +# Jan Woetzel (07/2003-01/2006) + +#============================================================================= +# Copyright 2000-2009 Kitware, Inc. +# Copyright 2003-2006 Jan Woetzel +# +# 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.) + +# ------------------------------------------------------------------ +# +# -removed OPTION for CMAKE_WXWINDOWS_USE_GL. Force the developer to SET it before calling this. +# -major update for wx 2.6.2 and monolithic build option. (10/2005) +# +# STATUS +# tested with: +# cmake 1.6.7, Linux (Suse 7.3), wxWindows 2.4.0, gcc 2.95 +# cmake 1.6.7, Linux (Suse 8.2), wxWindows 2.4.0, gcc 3.3 +# cmake 1.6.7, Linux (Suse 8.2), wxWindows 2.4.1-patch1, gcc 3.3 +# cmake 1.6.7, MS Windows XP home, wxWindows 2.4.1, MS Visual Studio .net 7 2002 (static build) +# cmake 2.0.5 on Windows XP and Suse Linux 9.2 +# cmake 2.0.6 on Windows XP and Suse Linux 9.2, wxWidgets 2.6.2 MONOLITHIC build +# cmake 2.2.2 on Windows XP, MS Visual Studio .net 2003 7.1 wxWidgets 2.6.2 MONOLITHIC build +# +# TODO +# -OPTION for unicode builds +# -further testing of DLL linking under MS WIN32 +# -better support for non-monolithic builds +# + + +IF(WIN32) + SET(WIN32_STYLE_FIND 1) +ENDIF(WIN32) +IF(MINGW) + SET(WIN32_STYLE_FIND 0) + SET(UNIX_STYLE_FIND 1) +ENDIF(MINGW) +IF(UNIX) + SET(UNIX_STYLE_FIND 1) +ENDIF(UNIX) + + +IF(WIN32_STYLE_FIND) + + ## ###################################################################### + ## + ## Windows specific: + ## + ## candidates for root/base directory of wxwindows + ## should have subdirs include and lib containing include/wx/wx.h + ## fix the root dir to avoid mixing of headers/libs from different + ## versions/builds: + + SET (WXWINDOWS_POSSIBLE_ROOT_PATHS + $ENV{WXWIN} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]" ## WX 2.6.x + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWindows_is1;Inno Setup: App Path]" ## WX 2.4.x + C:\\wxWidgets-2.6.2 + D:\\wxWidgets-2.6.2 + C:\\wxWidgets-2.6.1 + D:\\wxWidgets-2.6.1 + C:\\wxWindows-2.4.2 + D:\\wxWindows-2.4.2 + ) + + ## WX supports monolithic and multiple smaller libs (since 2.5.x), we prefer monolithic for now. + ## monolithic = WX is built as a single big library + ## e.g. compile on WIN32 as "nmake -f makefile.vc MONOLITHIC=1 BUILD=debug SHARED=0 USE_OPENGL=1" (JW) + OPTION(WXWINDOWS_USE_MONOLITHIC "Use monolithic build of WX??" ON) + MARK_AS_ADVANCED(WXWINDOWS_USE_MONOLITHIC) + + ## GL libs used? + OPTION(WXWINDOWS_USE_GL "Use Wx with GL support(glcanvas)?" ON) + MARK_AS_ADVANCED(WXWINDOWS_USE_GL) + + + ## avoid mixing of headers and libs between multiple installed WX versions, + ## select just one tree here: + FIND_PATH(WXWINDOWS_ROOT_DIR include/wx/wx.h + ${WXWINDOWS_POSSIBLE_ROOT_PATHS} ) + # MESSAGE("DBG found WXWINDOWS_ROOT_DIR: ${WXWINDOWS_ROOT_DIR}") + + + ## find libs for combination of static/shared with release/debug + ## be careful if you add something here, + ## avoid mixing of headers and libs of different wx versions, + ## there may be multiple WX version s installed. + SET (WXWINDOWS_POSSIBLE_LIB_PATHS + "${WXWINDOWS_ROOT_DIR}/lib" + ) + + ## monolithic? + IF (WXWINDOWS_USE_MONOLITHIC) + + FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY + NAMES wx wxmsw wxmsw26 + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static release build library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY + NAMES wxd wxmswd wxmsw26d + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static debug build library" ) + + FIND_LIBRARY(WXWINDOWS_SHARED_LIBRARY + NAMES wxmsw26 wxmsw262 wxmsw24 wxmsw242 wxmsw241 wxmsw240 wx23_2 wx22_9 + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_dll" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows shared release build library" ) + + FIND_LIBRARY(WXWINDOWS_SHARED_DEBUG_LIBRARY + NAMES wxmsw26d wxmsw262d wxmsw24d wxmsw241d wxmsw240d wx23_2d wx22_9d + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_dll" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows shared debug build library " ) + + + ## + ## required for WXWINDOWS_USE_GL + ## gl lib is always build separate: + ## + FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_GL + NAMES wx_gl wxmsw_gl wxmsw26_gl + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static release build GL library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_GL + NAMES wxd_gl wxmswd_gl wxmsw26d_gl + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static debug build GL library" ) + + + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_PNG + NAMES wxpngd + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static debug png library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_PNG + NAMES wxpng + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static png library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_TIFF + NAMES wxtiffd + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static debug tiff library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_TIFF + NAMES wxtiff + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static tiff library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_JPEG + NAMES wxjpegd wxjpgd + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static debug jpeg library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_JPEG + NAMES wxjpeg wxjpg + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static jpeg library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_ZLIB + NAMES wxzlibd + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static debug zlib library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_ZLIB + NAMES wxzlib + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static zib library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_DEBUG_LIBRARY_REGEX + NAMES wxregexd + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static debug regex library" ) + + FIND_LIBRARY(WXWINDOWS_STATIC_LIBRARY_REGEX + NAMES wxregex + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_lib" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows static regex library" ) + + + + ## untested: + FIND_LIBRARY(WXWINDOWS_SHARED_LIBRARY_GL + NAMES wx_gl wxmsw_gl wxmsw26_gl + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_dll" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows shared release build GL library" ) + + FIND_LIBRARY(WXWINDOWS_SHARED_DEBUG_LIBRARY_GL + NAMES wxd_gl wxmswd_gl wxmsw26d_gl + PATHS + "${WXWINDOWS_ROOT_DIR}/lib/vc_dll" + ${WXWINDOWS_POSSIBLE_LIB_PATHS} + DOC "wxWindows shared debug build GL library" ) + + + ELSE (WXWINDOWS_USE_MONOLITHIC) + ## WX is built as multiple small pieces libraries instead of monolithic + + ## DEPECATED (jw) replaced by more general WXWINDOWS_USE_MONOLITHIC ON/OFF + # OPTION(WXWINDOWS_SEPARATE_LIBS_BUILD "Is wxWindows build with separate libs?" OFF) + + ## HACK: This is very dirty. + ## because the libs of a particular version are explicitly listed + ## and NOT searched/verified. + ## TODO: Really search for each lib, then decide for + ## monolithic x debug x shared x GL (=16 combinations) for at least 18 libs + ## --> about 288 combinations + ## thus we need a different approach so solve this correctly ... + + MESSAGE(STATUS "Warning: You are trying to use wxWidgets without monolithic build (WXWINDOWS_SEPARATE_LIBS_BUILD). This is a HACK, libraries are not verified! (JW).") + + SET(WXWINDOWS_STATIC_LIBS ${WXWINDOWS_STATIC_LIBS} + wxbase26 + wxbase26_net + wxbase26_odbc + wxbase26_xml + wxmsw26_adv + wxmsw26_core + wxmsw26_dbgrid + wxmsw26_gl + wxmsw26_html + wxmsw26_media + wxmsw26_qa + wxmsw26_xrc + wxexpat + wxjpeg + wxpng + wxregex + wxtiff + wxzlib + comctl32 + rpcrt4 + wsock32 + ) + ## HACK: feed in to optimized / debug libaries if both were FOUND. + SET(WXWINDOWS_STATIC_DEBUG_LIBS ${WXWINDOWS_STATIC_DEBUG_LIBS} + wxbase26d + wxbase26d_net + wxbase26d_odbc + wxbase26d_xml + wxmsw26d_adv + wxmsw26d_core + wxmsw26d_dbgrid + wxmsw26d_gl + wxmsw26d_html + wxmsw26d_media + wxmsw26d_qa + wxmsw26d_xrc + wxexpatd + wxjpegd + wxpngd + wxregexd + wxtiffd + wxzlibd + comctl32 + rpcrt4 + wsock32 + ) + ENDIF (WXWINDOWS_USE_MONOLITHIC) + + + ## + ## now we should have found all WX libs available on the system. + ## let the user decide which of the available onse to use. + ## + + ## if there is at least one shared lib available + ## let user choose wether to use shared or static wxwindows libs + IF(WXWINDOWS_SHARED_LIBRARY OR WXWINDOWS_SHARED_DEBUG_LIBRARY) + ## default value OFF because wxWindows MSVS default build is static + OPTION(WXWINDOWS_USE_SHARED_LIBS + "Use shared versions (dll) of wxWindows libraries?" OFF) + MARK_AS_ADVANCED(WXWINDOWS_USE_SHARED_LIBS) + ENDIF(WXWINDOWS_SHARED_LIBRARY OR WXWINDOWS_SHARED_DEBUG_LIBRARY) + + ## add system libraries wxwindows always seems to depend on + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + comctl32 + rpcrt4 + wsock32 + ) + + IF (NOT WXWINDOWS_USE_SHARED_LIBS) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + ## these ones dont seem required, in particular ctl3d32 is not neccesary (Jan Woetzel 07/2003) + # ctl3d32 + debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_ZLIB} optimized ${WXWINDOWS_STATIC_LIBRARY_ZLIB} + debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_REGEX} optimized ${WXWINDOWS_STATIC_LIBRARY_REGEX} + debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_PNG} optimized ${WXWINDOWS_STATIC_LIBRARY_PNG} + debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_JPEG} optimized ${WXWINDOWS_STATIC_LIBRARY_JPEG} + debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_TIFF} optimized ${WXWINDOWS_STATIC_LIBRARY_TIFF} + ) + ENDIF (NOT WXWINDOWS_USE_SHARED_LIBS) + + ## opengl/glu: TODO/FIXME: better use FindOpenGL.cmake here + ## assume release versions of glu an dopengl, here. + IF (WXWINDOWS_USE_GL) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + opengl32 + glu32 ) + ENDIF (WXWINDOWS_USE_GL) + + ## + ## select between use of shared or static wxWindows lib then set libs to use + ## for debug and optimized build. so the user can switch between debug and + ## release build e.g. within MS Visual Studio without running cmake with a + ## different build directory again. + ## + ## then add the build specific include dir for wx/setup.h + ## + + IF(WXWINDOWS_USE_SHARED_LIBS) + ##MESSAGE("DBG wxWindows use shared lib selected.") + ## assume that both builds use the same setup(.h) for simplicity + + ## shared: both wx (debug and release) found? + ## assume that both builds use the same setup(.h) for simplicity + IF(WXWINDOWS_SHARED_DEBUG_LIBRARY AND WXWINDOWS_SHARED_LIBRARY) + ##MESSAGE("DBG wx shared: debug and optimized found.") + FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h + ${WXWINDOWS_ROOT_DIR}/lib/mswdlld + ${WXWINDOWS_ROOT_DIR}/lib/mswdll + ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/mswd + ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/msw ) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + debug ${WXWINDOWS_SHARED_DEBUG_LIBRARY} + optimized ${WXWINDOWS_SHARED_LIBRARY} ) + IF (WXWINDOWS_USE_GL) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + debug ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL} + optimized ${WXWINDOWS_SHARED_LIBRARY_GL} ) + ENDIF (WXWINDOWS_USE_GL) + ENDIF(WXWINDOWS_SHARED_DEBUG_LIBRARY AND WXWINDOWS_SHARED_LIBRARY) + + ## shared: only debug wx lib found? + IF(WXWINDOWS_SHARED_DEBUG_LIBRARY) + IF(NOT WXWINDOWS_SHARED_LIBRARY) + ##MESSAGE("DBG wx shared: debug (but no optimized) found.") + FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h + ${WXWINDOWS_ROOT_DIR}/lib/mswdlld + ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/mswd ) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + ${WXWINDOWS_SHARED_DEBUG_LIBRARY} ) + IF (WXWINDOWS_USE_GL) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL} ) + ENDIF (WXWINDOWS_USE_GL) + ENDIF(NOT WXWINDOWS_SHARED_LIBRARY) + ENDIF(WXWINDOWS_SHARED_DEBUG_LIBRARY) + + ## shared: only release wx lib found? + IF(NOT WXWINDOWS_SHARED_DEBUG_LIBRARY) + IF(WXWINDOWS_SHARED_LIBRARY) + ##MESSAGE("DBG wx shared: optimized (but no debug) found.") + FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h + ${WXWINDOWS_ROOT_DIR}/lib/mswdll + ${WXWINDOWS_ROOT_DIR}/lib/vc_dll/msw ) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + ${WXWINDOWS_SHARED_DEBUG_LIBRARY} ) + IF (WXWINDOWS_USE_GL) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + ${WXWINDOWS_SHARED_DEBUG_LIBRARY_GL} ) + ENDIF (WXWINDOWS_USE_GL) + ENDIF(WXWINDOWS_SHARED_LIBRARY) + ENDIF(NOT WXWINDOWS_SHARED_DEBUG_LIBRARY) + + ## shared: none found? + IF(NOT WXWINDOWS_SHARED_DEBUG_LIBRARY) + IF(NOT WXWINDOWS_SHARED_LIBRARY) + MESSAGE(STATUS + "No shared wxWindows lib found, but WXWINDOWS_USE_SHARED_LIBS=${WXWINDOWS_USE_SHARED_LIBS}.") + ENDIF(NOT WXWINDOWS_SHARED_LIBRARY) + ENDIF(NOT WXWINDOWS_SHARED_DEBUG_LIBRARY) + + ######################################################################################### + ELSE(WXWINDOWS_USE_SHARED_LIBS) + + ##jw: DEPRECATED IF(NOT WXWINDOWS_SEPARATE_LIBS_BUILD) + + ## static: both wx (debug and release) found? + ## assume that both builds use the same setup(.h) for simplicity + IF(WXWINDOWS_STATIC_DEBUG_LIBRARY AND WXWINDOWS_STATIC_LIBRARY) + ##MESSAGE("DBG wx static: debug and optimized found.") + FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h + ${WXWINDOWS_ROOT_DIR}/lib/mswd + ${WXWINDOWS_ROOT_DIR}/lib/msw + ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/mswd + ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/msw ) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY} + optimized ${WXWINDOWS_STATIC_LIBRARY} ) + IF (WXWINDOWS_USE_GL) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + debug ${WXWINDOWS_STATIC_DEBUG_LIBRARY_GL} + optimized ${WXWINDOWS_STATIC_LIBRARY_GL} ) + ENDIF (WXWINDOWS_USE_GL) + ENDIF(WXWINDOWS_STATIC_DEBUG_LIBRARY AND WXWINDOWS_STATIC_LIBRARY) + + ## static: only debug wx lib found? + IF(WXWINDOWS_STATIC_DEBUG_LIBRARY) + IF(NOT WXWINDOWS_STATIC_LIBRARY) + ##MESSAGE("DBG wx static: debug (but no optimized) found.") + FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h + ${WXWINDOWS_ROOT_DIR}/lib/mswd + ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/mswd ) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + ${WXWINDOWS_STATIC_DEBUG_LIBRARY} ) + IF (WXWINDOWS_USE_GL) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + ${WXWINDOWS_STATIC_DEBUG_LIBRARY_GL} ) + ENDIF (WXWINDOWS_USE_GL) + ENDIF(NOT WXWINDOWS_STATIC_LIBRARY) + ENDIF(WXWINDOWS_STATIC_DEBUG_LIBRARY) + + ## static: only release wx lib found? + IF(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY) + IF(WXWINDOWS_STATIC_LIBRARY) + ##MESSAGE("DBG wx static: optimized (but no debug) found.") + FIND_PATH(WXWINDOWS_INCLUDE_DIR_SETUPH wx/setup.h + ${WXWINDOWS_ROOT_DIR}/lib/msw + ${WXWINDOWS_ROOT_DIR}/lib/vc_lib/msw ) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + ${WXWINDOWS_STATIC_LIBRARY} ) + IF (WXWINDOWS_USE_GL) + SET(WXWINDOWS_LIBRARIES ${WXWINDOWS_LIBRARIES} + ${WXWINDOWS_STATIC_LIBRARY_GL} ) + ENDIF (WXWINDOWS_USE_GL) + ENDIF(WXWINDOWS_STATIC_LIBRARY) + ENDIF(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY) + + ## static: none found? + IF(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY AND NOT WXWINDOWS_SEPARATE_LIBS_BUILD) + IF(NOT WXWINDOWS_STATIC_LIBRARY) + MESSAGE(STATUS + "No static wxWindows lib found, but WXWINDOWS_USE_SHARED_LIBS=${WXWINDOWS_USE_SHARED_LIBS}.") + ENDIF(NOT WXWINDOWS_STATIC_LIBRARY) + ENDIF(NOT WXWINDOWS_STATIC_DEBUG_LIBRARY AND NOT WXWINDOWS_SEPARATE_LIBS_BUILD) + ENDIF(WXWINDOWS_USE_SHARED_LIBS) + + + ## not neccessary in wxWindows 2.4.1 and 2.6.2 + ## but it may fix a previous bug, see + ## http://lists.wxwindows.org/cgi-bin/ezmlm-cgi?8:mss:37574:200305:mpdioeneabobmgjenoap + OPTION(WXWINDOWS_SET_DEFINITIONS "Set additional defines for wxWindows" OFF) + MARK_AS_ADVANCED(WXWINDOWS_SET_DEFINITIONS) + IF (WXWINDOWS_SET_DEFINITIONS) + SET(WXWINDOWS_DEFINITIONS "-DWINVER=0x400") + ELSE (WXWINDOWS_SET_DEFINITIONS) + # clear: + SET(WXWINDOWS_DEFINITIONS "") + ENDIF (WXWINDOWS_SET_DEFINITIONS) + + + + ## Find the include directories for wxwindows + ## the first, build specific for wx/setup.h was determined before. + ## add inc dir for general for "wx/wx.h" + FIND_PATH(WXWINDOWS_INCLUDE_DIR wx/wx.h + "${WXWINDOWS_ROOT_DIR}/include" ) + ## append the build specific include dir for wx/setup.h: + IF (WXWINDOWS_INCLUDE_DIR_SETUPH) + SET(WXWINDOWS_INCLUDE_DIR ${WXWINDOWS_INCLUDE_DIR} ${WXWINDOWS_INCLUDE_DIR_SETUPH} ) + ENDIF (WXWINDOWS_INCLUDE_DIR_SETUPH) + + + + MARK_AS_ADVANCED( + WXWINDOWS_ROOT_DIR + WXWINDOWS_INCLUDE_DIR + WXWINDOWS_INCLUDE_DIR_SETUPH + WXWINDOWS_STATIC_LIBRARY + WXWINDOWS_STATIC_LIBRARY_GL + WXWINDOWS_STATIC_DEBUG_LIBRARY + WXWINDOWS_STATIC_DEBUG_LIBRARY_GL + WXWINDOWS_STATIC_LIBRARY_ZLIB + WXWINDOWS_STATIC_DEBUG_LIBRARY_ZLIB + WXWINDOWS_STATIC_LIBRARY_REGEX + WXWINDOWS_STATIC_DEBUG_LIBRARY_REGEX + WXWINDOWS_STATIC_LIBRARY_PNG + WXWINDOWS_STATIC_DEBUG_LIBRARY_PNG + WXWINDOWS_STATIC_LIBRARY_JPEG + WXWINDOWS_STATIC_DEBUG_LIBRARY_JPEG + WXWINDOWS_STATIC_DEBUG_LIBRARY_TIFF + WXWINDOWS_STATIC_LIBRARY_TIFF + WXWINDOWS_SHARED_LIBRARY + WXWINDOWS_SHARED_DEBUG_LIBRARY + WXWINDOWS_SHARED_LIBRARY_GL + WXWINDOWS_SHARED_DEBUG_LIBRARY_GL + ) + + +ELSE(WIN32_STYLE_FIND) + + IF (UNIX_STYLE_FIND) + ## ###################################################################### + ## + ## UNIX/Linux specific: + ## + ## use backquoted wx-config to query and set flags and libs: + ## 06/2003 Jan Woetzel + ## + + OPTION(WXWINDOWS_USE_SHARED_LIBS "Use shared versions (.so) of wxWindows libraries" ON) + MARK_AS_ADVANCED(WXWINDOWS_USE_SHARED_LIBS) + + # JW removed option and force the develper th SET it. + # OPTION(WXWINDOWS_USE_GL "use wxWindows with GL support (use additional + # --gl-libs for wx-config)?" OFF) + + # wx-config should be in your path anyhow, usually no need to set WXWIN or + # search in ../wx or ../../wx + FIND_PROGRAM(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE wx-config + $ENV{WXWIN} + $ENV{WXWIN}/bin + ../wx/bin + ../../wx/bin ) + + # check wether wx-config was found: + IF(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE) + + # use shared/static wx lib? + # remember: always link shared to use systems GL etc. libs (no static + # linking, just link *against* static .a libs) + IF(WXWINDOWS_USE_SHARED_LIBS) + SET(WX_CONFIG_ARGS_LIBS "--libs") + ELSE(WXWINDOWS_USE_SHARED_LIBS) + SET(WX_CONFIG_ARGS_LIBS "--static --libs") + ENDIF(WXWINDOWS_USE_SHARED_LIBS) + + # do we need additionial wx GL stuff like GLCanvas ? + IF(WXWINDOWS_USE_GL) + SET(WX_CONFIG_ARGS_LIBS "${WX_CONFIG_ARGS_LIBS} --gl-libs" ) + ENDIF(WXWINDOWS_USE_GL) + ##MESSAGE("DBG: WX_CONFIG_ARGS_LIBS=${WX_CONFIG_ARGS_LIBS}===") + + # set CXXFLAGS to be fed into CMAKE_CXX_FLAGS by the user: + IF (HAVE_ISYSTEM) # does the compiler support -isystem ? + IF (NOT APPLE) # -isystem seem sto be unsuppored on Mac + IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX ) + IF (CMAKE_CXX_COMPILER MATCHES g\\+\\+) + SET(CMAKE_WXWINDOWS_CXX_FLAGS "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} --cxxflags|sed -e s/-I/-isystem/g`") + ELSE(CMAKE_CXX_COMPILER MATCHES g\\+\\+) + SET(CMAKE_WXWINDOWS_CXX_FLAGS "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} --cxxflags`") + ENDIF(CMAKE_CXX_COMPILER MATCHES g\\+\\+) + ENDIF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX ) + ENDIF (NOT APPLE) + ENDIF (HAVE_ISYSTEM) + ##MESSAGE("DBG: for compilation: + ##CMAKE_WXWINDOWS_CXX_FLAGS=${CMAKE_WXWINDOWS_CXX_FLAGS}===") + + # keep the back-quoted string for clarity + SET(WXWINDOWS_LIBRARIES "`${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} ${WX_CONFIG_ARGS_LIBS}`") + ##MESSAGE("DBG2: for linking: + ##WXWINDOWS_LIBRARIES=${WXWINDOWS_LIBRARIES}===") + + # evaluate wx-config output to separate linker flags and linkdirs for + # rpath: + EXEC_PROGRAM(${CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE} + ARGS ${WX_CONFIG_ARGS_LIBS} + OUTPUT_VARIABLE WX_CONFIG_LIBS ) + + ## extract linkdirs (-L) for rpath + ## use regular expression to match wildcard equivalent "-L*" + ## with is a space or a semicolon + STRING(REGEX MATCHALL "[-][L]([^ ;])+" WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX "${WX_CONFIG_LIBS}" ) + # MESSAGE("DBG WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX=${WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX}") + + ## remove prefix -L because we need the pure directory for LINK_DIRECTORIES + ## replace -L by ; because the separator seems to be lost otherwise (bug or + ## feature?) + IF(WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX) + STRING(REGEX REPLACE "[-][L]" ";" WXWINDOWS_LINK_DIRECTORIES ${WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX} ) + # MESSAGE("DBG WXWINDOWS_LINK_DIRECTORIES=${WXWINDOWS_LINK_DIRECTORIES}") + ENDIF(WXWINDOWS_LINK_DIRECTORIES_WITH_PREFIX) + + + ## replace space separated string by semicolon separated vector to make it + ## work with LINK_DIRECTORIES + SEPARATE_ARGUMENTS(WXWINDOWS_LINK_DIRECTORIES) + + MARK_AS_ADVANCED( + CMAKE_WXWINDOWS_CXX_FLAGS + WXWINDOWS_INCLUDE_DIR + WXWINDOWS_LIBRARIES + CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE + ) + + + ## we really need wx-config... + ELSE(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE) + MESSAGE(STATUS "Cannot find wx-config anywhere on the system. Please put the file into your path or specify it in CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE.") + MARK_AS_ADVANCED(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE) + ENDIF(CMAKE_WXWINDOWS_WXCONFIG_EXECUTABLE) + + + + ELSE(UNIX_STYLE_FIND) + MESSAGE(STATUS "FindwxWindows.cmake: Platform unknown/unsupported by FindwxWindows.cmake. It's neither WIN32 nor UNIX") + ENDIF(UNIX_STYLE_FIND) +ENDIF(WIN32_STYLE_FIND) + + +IF(WXWINDOWS_LIBRARIES) + IF(WXWINDOWS_INCLUDE_DIR OR CMAKE_WXWINDOWS_CXX_FLAGS) + ## found all we need. + SET(WXWINDOWS_FOUND 1) + + ## set deprecated variables for backward compatibility: + SET(CMAKE_WX_CAN_COMPILE ${WXWINDOWS_FOUND}) + SET(WXWINDOWS_LIBRARY ${WXWINDOWS_LIBRARIES}) + SET(WXWINDOWS_INCLUDE_PATH ${WXWINDOWS_INCLUDE_DIR}) + SET(WXWINDOWS_LINK_DIRECTORIES ${WXWINDOWS_LINK_DIRECTORIES}) + SET(CMAKE_WX_CXX_FLAGS ${CMAKE_WXWINDOWS_CXX_FLAGS}) + + ENDIF(WXWINDOWS_INCLUDE_DIR OR CMAKE_WXWINDOWS_CXX_FLAGS) +ENDIF(WXWINDOWS_LIBRARIES) diff --git a/Modules/FortranCInterface.cmake b/Modules/FortranCInterface.cmake new file mode 100644 index 0000000..2455c5f --- /dev/null +++ b/Modules/FortranCInterface.cmake @@ -0,0 +1,293 @@ +# - Fortran/C Interface Detection +# This module automatically detects the API by which C and Fortran +# languages interact. Variables indicate if the mangling is found: +# FortranCInterface_GLOBAL_FOUND = Global subroutines and functions +# FortranCInterface_MODULE_FOUND = Module subroutines and functions +# (declared by "MODULE PROCEDURE") +# A function is provided to generate a C header file containing macros +# to mangle symbol names: +# FortranCInterface_HEADER( +# [MACRO_NAMESPACE ] +# [SYMBOL_NAMESPACE ] +# [SYMBOLS [:] ...]) +# It generates in definitions of the following macros: +# #define FortranCInterface_GLOBAL (name,NAME) ... +# #define FortranCInterface_GLOBAL_(name,NAME) ... +# #define FortranCInterface_MODULE (mod,name, MOD,NAME) ... +# #define FortranCInterface_MODULE_(mod,name, MOD,NAME) ... +# These macros mangle four categories of Fortran symbols, +# respectively: +# - Global symbols without '_': call mysub() +# - Global symbols with '_' : call my_sub() +# - Module symbols without '_': use mymod; call mysub() +# - Module symbols with '_' : use mymod; call my_sub() +# If mangling for a category is not known, its macro is left undefined. +# All macros require raw names in both lower case and upper case. +# The MACRO_NAMESPACE option replaces the default "FortranCInterface_" +# prefix with a given namespace "". +# +# The SYMBOLS option lists symbols to mangle automatically with C +# preprocessor definitions: +# ==> #define ... +# : ==> #define _ ... +# If the mangling for some symbol is not known then no preprocessor +# definition is created, and a warning is displayed. +# The SYMBOL_NAMESPACE option prefixes all preprocessor definitions +# generated by the SYMBOLS option with a given namespace "". +# +# Example usage: +# include(FortranCInterface) +# FortranCInterface_HEADER(FC.h MACRO_NAMESPACE "FC_") +# This creates a "FC.h" header that defines mangling macros +# FC_GLOBAL(), FC_GLOBAL_(), FC_MODULE(), and FC_MODULE_(). +# +# Example usage: +# include(FortranCInterface) +# FortranCInterface_HEADER(FCMangle.h +# MACRO_NAMESPACE "FC_" +# SYMBOL_NAMESPACE "FC_" +# SYMBOLS mysub mymod:my_sub) +# This creates a "FCMangle.h" header that defines the same FC_*() +# mangling macros as the previous example plus preprocessor symbols +# FC_mysub and FC_mymod_my_sub. +# +# Another function is provided to verify that the Fortran and C/C++ +# compilers work together: +# FortranCInterface_VERIFY([CXX] [QUIET]) +# It tests whether a simple test executable using Fortran and C (and +# C++ when the CXX option is given) compiles and links successfully. +# The result is stored in the cache entry FortranCInterface_VERIFIED_C +# (or FortranCInterface_VERIFIED_CXX if CXX is given) as a boolean. +# If the check fails and QUIET is not given the function terminates +# with a FATAL_ERROR message describing the problem. The purpose of +# this check is to stop a build early for incompatible compiler +# combinations. +# +# FortranCInterface is aware of possible GLOBAL and MODULE manglings +# for many Fortran compilers, but it also provides an interface to +# specify new possible manglings. Set the variables +# FortranCInterface_GLOBAL_SYMBOLS +# FortranCInterface_MODULE_SYMBOLS +# before including FortranCInterface to specify manglings of the +# symbols "MySub", "My_Sub", "MyModule:MySub", and "My_Module:My_Sub". +# For example, the code: +# set(FortranCInterface_GLOBAL_SYMBOLS mysub_ my_sub__ MYSUB_) +# # ^^^^^ ^^^^^^ ^^^^^ +# set(FortranCInterface_MODULE_SYMBOLS +# __mymodule_MOD_mysub __my_module_MOD_my_sub) +# # ^^^^^^^^ ^^^^^ ^^^^^^^^^ ^^^^^^ +# include(FortranCInterface) +# tells FortranCInterface to try given GLOBAL and MODULE manglings. +# (The carets point at raw symbol names for clarity in this example +# but are not needed.) + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +#----------------------------------------------------------------------------- +# Execute at most once in a project. +if(FortranCInterface_SOURCE_DIR) + return() +endif() + +# Use CMake 2.8.0 behavior for this module regardless of including context. +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.0) + +#----------------------------------------------------------------------------- +# Verify that C and Fortran are available. +foreach(lang C Fortran) + if(NOT CMAKE_${lang}_COMPILER_LOADED) + message(FATAL_ERROR + "FortranCInterface requires the ${lang} language to be enabled.") + endif() +endforeach() + +#----------------------------------------------------------------------------- +set(FortranCInterface_SOURCE_DIR ${CMAKE_ROOT}/Modules/FortranCInterface) + +# MinGW's make tool does not always like () in the path +if("${CMAKE_GENERATOR}" MATCHES "MinGW" AND + "${FortranCInterface_SOURCE_DIR}" MATCHES "[()]") + file(COPY ${FortranCInterface_SOURCE_DIR}/ + DESTINATION ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterfaceMinGW) + set(FortranCInterface_SOURCE_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterfaceMinGW) +endif() + +# Create the interface detection project if it does not exist. +if(NOT FortranCInterface_BINARY_DIR) + set(FortranCInterface_BINARY_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterface) + include(${FortranCInterface_SOURCE_DIR}/Detect.cmake) +endif() + +# Load the detection results. +include(${FortranCInterface_BINARY_DIR}/Output.cmake) + +#----------------------------------------------------------------------------- +function(FortranCInterface_HEADER file) + # Parse arguments. + if(IS_ABSOLUTE "${file}") + set(FILE "${file}") + else() + set(FILE "${CMAKE_CURRENT_BINARY_DIR}/${file}") + endif() + set(MACRO_NAMESPACE "FortranCInterface_") + set(SYMBOL_NAMESPACE) + set(SYMBOLS) + set(doing) + foreach(arg ${ARGN}) + if("x${arg}" MATCHES "^x(SYMBOLS|SYMBOL_NAMESPACE|MACRO_NAMESPACE)$") + set(doing "${arg}") + elseif("x${doing}" MATCHES "^x(SYMBOLS)$") + list(APPEND "${doing}" "${arg}") + elseif("x${doing}" MATCHES "^x(SYMBOL_NAMESPACE|MACRO_NAMESPACE)$") + set("${doing}" "${arg}") + set(doing) + else() + message(AUTHOR_WARNING "Unknown argument: \"${arg}\"") + endif() + endforeach() + + # Generate macro definitions. + set(HEADER_CONTENT) + set(_desc_GLOBAL "/* Mangling for Fortran global symbols without underscores. */") + set(_desc_GLOBAL_ "/* Mangling for Fortran global symbols with underscores. */") + set(_desc_MODULE "/* Mangling for Fortran module symbols without underscores. */") + set(_desc_MODULE_ "/* Mangling for Fortran module symbols with underscores. */") + foreach(macro GLOBAL GLOBAL_ MODULE MODULE_) + if(FortranCInterface_${macro}_MACRO) + set(HEADER_CONTENT "${HEADER_CONTENT} +${_desc_${macro}} +#define ${MACRO_NAMESPACE}${macro}${FortranCInterface_${macro}_MACRO} +") + endif() + endforeach() + + # Generate symbol mangling definitions. + if(SYMBOLS) + set(HEADER_CONTENT "${HEADER_CONTENT} +/*--------------------------------------------------------------------------*/ +/* Mangle some symbols automatically. */ +") + endif() + foreach(f ${SYMBOLS}) + if("${f}" MATCHES ":") + # Module symbol name. Parse ":" syntax. + string(REPLACE ":" ";" pieces "${f}") + list(GET pieces 0 module) + list(GET pieces 1 function) + string(TOUPPER "${module}" m_upper) + string(TOLOWER "${module}" m_lower) + string(TOUPPER "${function}" f_upper) + string(TOLOWER "${function}" f_lower) + if("${function}" MATCHES "_") + set(form "_") + else() + set(form "") + endif() + if(FortranCInterface_MODULE${form}_MACRO) + set(HEADER_CONTENT "${HEADER_CONTENT}#define ${SYMBOL_NAMESPACE}${module}_${function} ${MACRO_NAMESPACE}MODULE${form}(${m_lower},${f_lower}, ${m_upper},${f_upper})\n") + else() + message(AUTHOR_WARNING "No FortranCInterface mangling known for ${f}") + endif() + else() + # Global symbol name. + if("${f}" MATCHES "_") + set(form "_") + else() + set(form "") + endif() + string(TOUPPER "${f}" f_upper) + string(TOLOWER "${f}" f_lower) + if(FortranCInterface_GLOBAL${form}_MACRO) + set(HEADER_CONTENT "${HEADER_CONTENT}#define ${SYMBOL_NAMESPACE}${f} ${MACRO_NAMESPACE}GLOBAL${form}(${f_lower}, ${f_upper})\n") + else() + message(AUTHOR_WARNING "No FortranCInterface mangling known for ${f}") + endif() + endif() + endforeach(f) + + # Store the content. + configure_file(${FortranCInterface_SOURCE_DIR}/Macro.h.in ${FILE} @ONLY) +endfunction() + +function(FortranCInterface_VERIFY) + # Check arguments. + + set(lang C) + set(quiet 0) + set(verify_cxx 0) + foreach(arg ${ARGN}) + if("${arg}" STREQUAL "QUIET") + set(quiet 1) + elseif("${arg}" STREQUAL "CXX") + set(lang CXX) + set(verify_cxx 1) + else() + message(FATAL_ERROR + "FortranCInterface_VERIFY - called with unknown argument:\n ${arg}") + endif() + endforeach() + + if(NOT CMAKE_${lang}_COMPILER_LOADED) + message(FATAL_ERROR + "FortranCInterface_VERIFY(${lang}) requires ${lang} to be enabled.") + endif() + + # Build the verification project if not yet built. + if(NOT DEFINED FortranCInterface_VERIFIED_${lang}) + set(_desc "Verifying Fortran/${lang} Compiler Compatibility") + message(STATUS "${_desc}") + + # Build a sample project which reports symbols. + try_compile(FortranCInterface_VERIFY_${lang}_COMPILED + ${FortranCInterface_BINARY_DIR}/Verify${lang} + ${FortranCInterface_SOURCE_DIR}/Verify + VerifyFortranC + CMAKE_FLAGS -DVERIFY_CXX=${verify_cxx} + -DCMAKE_VERBOSE_MAKEFILE=ON + "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}" + "-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}" + "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}" + OUTPUT_VARIABLE _output) + file(WRITE "${FortranCInterface_BINARY_DIR}/Verify${lang}/output.txt" "${_output}") + + # Report results. + if(FortranCInterface_VERIFY_${lang}_COMPILED) + message(STATUS "${_desc} - Success") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "${_desc} passed with the following output:\n${_output}\n\n") + set(FortranCInterface_VERIFIED_${lang} 1 CACHE INTERNAL "Fortran/${lang} compatibility") + else() + message(STATUS "${_desc} - Failed") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "${_desc} failed with the following output:\n${_output}\n\n") + set(FortranCInterface_VERIFIED_${lang} 0 CACHE INTERNAL "Fortran/${lang} compatibility") + endif() + unset(FortranCInterface_VERIFY_${lang}_COMPILED CACHE) + endif() + + # Error if compilers are incompatible. + if(NOT FortranCInterface_VERIFIED_${lang} AND NOT quiet) + file(READ "${FortranCInterface_BINARY_DIR}/Verify${lang}/output.txt" _output) + string(REGEX REPLACE "\n" "\n " _output "${_output}") + message(FATAL_ERROR + "The Fortran compiler:\n ${CMAKE_Fortran_COMPILER}\n" + "and the ${lang} compiler:\n ${CMAKE_${lang}_COMPILER}\n" + "failed to compile a simple test project using both languages. " + "The output was:\n ${_output}") + endif() +endfunction() + +# Restore including context policies. +cmake_policy(POP) diff --git a/Modules/FortranCInterface/CMakeLists.txt b/Modules/FortranCInterface/CMakeLists.txt new file mode 100644 index 0000000..d35a72c --- /dev/null +++ b/Modules/FortranCInterface/CMakeLists.txt @@ -0,0 +1,108 @@ +#============================================================================= +# Copyright 2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +cmake_minimum_required(VERSION 2.6.3) +project(FortranCInterface C Fortran) +include(${FortranCInterface_BINARY_DIR}/Input.cmake OPTIONAL) + +# Check if the C compiler supports '$' in identifiers. +include(CheckCSourceCompiles) +check_c_source_compiles(" +extern int dollar$(void); +int main() { return 0; } +" C_SUPPORTS_DOLLAR) + +# List manglings of global symbol names to try. +set(global_symbols + my_sub # VisualAge + my_sub_ # GNU, Intel, HP, SunPro, MIPSpro + my_sub__ # GNU g77 + MY_SUB # Intel on Windows + mysub # VisualAge + mysub_ # GNU, Intel, HP, SunPro, MIPSpro + MYSUB # Intel on Windows + ${FortranCInterface_GLOBAL_SYMBOLS} + ) +list(REMOVE_DUPLICATES global_symbols) + +# List manglings of module symbol names to try. +set(module_symbols + __my_module_MOD_my_sub # GNU 4.3 + __my_module_NMOD_my_sub # VisualAge + __my_module__my_sub # GNU 4.2 + __mymodule_MOD_mysub # GNU 4.3 + __mymodule_NMOD_mysub # VisualAge + __mymodule__mysub # GNU 4.2 + my_module$my_sub # HP + my_module_mp_my_sub_ # Intel + MY_MODULE_mp_MY_SUB # Intel on Windows + my_module_my_sub_ # PGI + my_module_MP_my_sub # NAG + mymodule$mysub # HP + mymodule_mp_mysub_ # Intel + MYMODULE_mp_MYSUB # Intel on Windows + mymodule_mysub_ # PGI + mymodule_MP_mysub # NAG + ${FortranCInterface_MODULE_SYMBOLS} + ) +list(REMOVE_DUPLICATES module_symbols) + +# Note that some compiler manglings cannot be invoked from C: +# MIPSpro uses "MY_SUB.in.MY_MODULE" +# SunPro uses "my_module.my_sub_" +# PathScale uses "MY_SUB.in.MY_MODULE" + +# Add module symbols only with Fortran90. +if(CMAKE_Fortran_COMPILER_SUPPORTS_F90) + set(myfort_modules mymodule.f90 my_module.f90) + set(call_mod call_mod.f90) + set_property(SOURCE main.F PROPERTY COMPILE_DEFINITIONS CALL_MOD) +else() + set(module_symbols) +endif() + +# Generate C symbol sources. +set(symbol_sources) +if(NOT "${CMAKE_Fortran_COMPILER_ID}" MATCHES "^(PathScale|Cray)$") + # Provide mymodule_ and my_module_ init symbols because: + # - PGI Fortran uses module init symbols + # but not for: + # - PathScale Fortran uses module init symbols but module symbols + # use '.in.' so we cannot provide them anyway. + # - Cray Fortran >= 7.3.2 uses module init symbols but module symbols + # use 'mysub$mymodule_' so we cannot provide them anyway. + list(APPEND symbol_sources mymodule_.c my_module_.c) +endif() +foreach(symbol IN LISTS global_symbols module_symbols) + # Skip symbols with '$' if C cannot handle them. + if(C_SUPPORTS_DOLLAR OR NOT "${symbol}" MATCHES "\\$") + if("${symbol}" MATCHES "SUB") + set(upper "-UPPER") + else() + set(upper) + endif() + string(REPLACE "$" "S" name "${symbol}") + set(source ${CMAKE_CURRENT_BINARY_DIR}/symbols/${name}${upper}.c) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/symbol.c.in ${source} @ONLY) + list(APPEND symbol_sources ${source}) + endif() +endforeach() + +# Provide symbols through Fortran. +add_library(myfort STATIC mysub.f my_sub.f ${myfort_modules}) + +# Provide symbols through C but fall back to Fortran. +add_library(symbols STATIC ${symbol_sources}) +target_link_libraries(symbols myfort) + +# Require symbols through Fortran. +add_executable(FortranCInterface main.F call_sub.f ${call_mod}) +target_link_libraries(FortranCInterface symbols) diff --git a/Modules/FortranCInterface/Detect.cmake b/Modules/FortranCInterface/Detect.cmake new file mode 100644 index 0000000..2ea43d1 --- /dev/null +++ b/Modules/FortranCInterface/Detect.cmake @@ -0,0 +1,183 @@ +#============================================================================= +# Copyright 2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +configure_file(${FortranCInterface_SOURCE_DIR}/Input.cmake.in + ${FortranCInterface_BINARY_DIR}/Input.cmake @ONLY) + +# Detect the Fortran/C interface on the first run or when the +# configuration changes. +if(${FortranCInterface_BINARY_DIR}/Input.cmake + IS_NEWER_THAN ${FortranCInterface_BINARY_DIR}/Output.cmake + OR ${FortranCInterface_SOURCE_DIR}/Output.cmake.in + IS_NEWER_THAN ${FortranCInterface_BINARY_DIR}/Output.cmake + OR ${FortranCInterface_SOURCE_DIR}/CMakeLists.txt + IS_NEWER_THAN ${FortranCInterface_BINARY_DIR}/Output.cmake + OR ${CMAKE_CURRENT_LIST_FILE} + IS_NEWER_THAN ${FortranCInterface_BINARY_DIR}/Output.cmake + ) + message(STATUS "Detecting Fortran/C Interface") +else() + return() +endif() + +# Invalidate verification results. +unset(FortranCInterface_VERIFIED_C CACHE) +unset(FortranCInterface_VERIFIED_CXX CACHE) + +set(_result) + +# Build a sample project which reports symbols. +try_compile(FortranCInterface_COMPILED + ${FortranCInterface_BINARY_DIR} + ${FortranCInterface_SOURCE_DIR} + FortranCInterface + CMAKE_FLAGS + "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}" + "-DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}" + OUTPUT_VARIABLE FortranCInterface_OUTPUT) +set(FortranCInterface_COMPILED ${FortranCInterface_COMPILED}) +unset(FortranCInterface_COMPILED CACHE) + +# Locate the sample project executable. +if(FortranCInterface_COMPILED) + find_program(FortranCInterface_EXE + NAMES FortranCInterface + PATHS ${FortranCInterface_BINARY_DIR} ${FortranCInterface_BINARY_DIR}/Debug + NO_DEFAULT_PATH + ) + set(FortranCInterface_EXE ${FortranCInterface_EXE}) + unset(FortranCInterface_EXE CACHE) +else() + set(_result "Failed to compile") + set(FortranCInterface_EXE) + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Fortran/C interface test project failed with the following output:\n" + "${FortranCInterface_OUTPUT}\n") +endif() + +# Load symbols from INFO:symbol[] strings in the executable. +set(FortranCInterface_SYMBOLS) +if(FortranCInterface_EXE) + file(STRINGS "${FortranCInterface_EXE}" _info_strings + LIMIT_COUNT 8 REGEX "INFO:[^[]*\\[") + foreach(info ${_info_strings}) + if("${info}" MATCHES ".*INFO:symbol\\[([^]]*)\\].*") + string(REGEX REPLACE ".*INFO:symbol\\[([^]]*)\\].*" "\\1" symbol "${info}") + list(APPEND FortranCInterface_SYMBOLS ${symbol}) + endif() + endforeach() +elseif(NOT _result) + set(_result "Failed to load sample executable") +endif() + +set(_case_mysub "LOWER") +set(_case_my_sub "LOWER") +set(_case_MYSUB "UPPER") +set(_case_MY_SUB "UPPER") +set(_global_regex "^(_*)(mysub|MYSUB)([_$]*)$") +set(_global__regex "^(_*)(my_sub|MY_SUB)([_$]*)$") +set(_module_regex "^(_*)(mymodule|MYMODULE)([A-Za-z_$]*)(mysub|MYSUB)([_$]*)$") +set(_module__regex "^(_*)(my_module|MY_MODULE)([A-Za-z_$]*)(my_sub|MY_SUB)([_$]*)$") + +# Parse the symbol names. +foreach(symbol ${FortranCInterface_SYMBOLS}) + foreach(form "" "_") + # Look for global symbols. + string(REGEX REPLACE "${_global_${form}regex}" + "\\1;\\2;\\3" pieces "${symbol}") + list(LENGTH pieces len) + if(len EQUAL 3) + set(FortranCInterface_GLOBAL_${form}SYMBOL "${symbol}") + list(GET pieces 0 FortranCInterface_GLOBAL_${form}PREFIX) + list(GET pieces 1 name) + list(GET pieces 2 FortranCInterface_GLOBAL_${form}SUFFIX) + set(FortranCInterface_GLOBAL_${form}CASE "${_case_${name}}") + endif() + + # Look for module symbols. + string(REGEX REPLACE "${_module_${form}regex}" + "\\1;\\2;\\3;\\4;\\5" pieces "${symbol}") + list(LENGTH pieces len) + if(len EQUAL 5) + set(FortranCInterface_MODULE_${form}SYMBOL "${symbol}") + list(GET pieces 0 FortranCInterface_MODULE_${form}PREFIX) + list(GET pieces 1 module) + list(GET pieces 2 FortranCInterface_MODULE_${form}MIDDLE) + list(GET pieces 3 name) + list(GET pieces 4 FortranCInterface_MODULE_${form}SUFFIX) + set(FortranCInterface_MODULE_${form}CASE "${_case_${name}}") + endif() + endforeach() +endforeach() + +# Construct mangling macro definitions. +set(_name_LOWER "name") +set(_name_UPPER "NAME") +foreach(form "" "_") + if(FortranCInterface_GLOBAL_${form}SYMBOL) + if(FortranCInterface_GLOBAL_${form}PREFIX) + set(_prefix "${FortranCInterface_GLOBAL_${form}PREFIX}##") + else() + set(_prefix "") + endif() + if(FortranCInterface_GLOBAL_${form}SUFFIX) + set(_suffix "##${FortranCInterface_GLOBAL_${form}SUFFIX}") + else() + set(_suffix "") + endif() + set(_name "${_name_${FortranCInterface_GLOBAL_${form}CASE}}") + set(FortranCInterface_GLOBAL${form}_MACRO + "(name,NAME) ${_prefix}${_name}${_suffix}") + endif() + if(FortranCInterface_MODULE_${form}SYMBOL) + if(FortranCInterface_MODULE_${form}PREFIX) + set(_prefix "${FortranCInterface_MODULE_${form}PREFIX}##") + else() + set(_prefix "") + endif() + if(FortranCInterface_MODULE_${form}SUFFIX) + set(_suffix "##${FortranCInterface_MODULE_${form}SUFFIX}") + else() + set(_suffix "") + endif() + set(_name "${_name_${FortranCInterface_MODULE_${form}CASE}}") + set(_middle "##${FortranCInterface_MODULE_${form}MIDDLE}##") + set(FortranCInterface_MODULE${form}_MACRO + "(mod_name,name, mod_NAME,NAME) ${_prefix}mod_${_name}${_middle}${_name}${_suffix}") + endif() +endforeach() + +# Summarize what is available. +foreach(scope GLOBAL MODULE) + if(FortranCInterface_${scope}_SYMBOL AND + FortranCInterface_${scope}__SYMBOL) + set(FortranCInterface_${scope}_FOUND 1) + else() + set(FortranCInterface_${scope}_FOUND 0) + endif() +endforeach() + +# Record the detection results. +configure_file(${FortranCInterface_SOURCE_DIR}/Output.cmake.in + ${FortranCInterface_BINARY_DIR}/Output.cmake @ONLY) +file(APPEND ${FortranCInterface_BINARY_DIR}/Output.cmake "\n") + +# Report the results. +if(FortranCInterface_GLOBAL_FOUND) + if(FortranCInterface_MODULE_FOUND) + set(_result "Found GLOBAL and MODULE mangling") + else(FortranCInterface_MODULE_FOUND) + set(_result "Found GLOBAL but not MODULE mangling") + endif() +elseif(NOT _result) + set(_result "Failed to recognize symbols") +endif() +message(STATUS "Detecting Fortran/C Interface - ${_result}") diff --git a/Modules/FortranCInterface/Input.cmake.in b/Modules/FortranCInterface/Input.cmake.in new file mode 100644 index 0000000..f261e3b --- /dev/null +++ b/Modules/FortranCInterface/Input.cmake.in @@ -0,0 +1,3 @@ +set(CMAKE_Fortran_COMPILER_ID "@CMAKE_Fortran_COMPILER_ID@") +set(FortranCInterface_GLOBAL_SYMBOLS "@FortranCInterface_GLOBAL_SYMBOLS@") +set(FortranCInterface_MODULE_SYMBOLS "@FortranCInterface_MODULE_SYMBOLS@") diff --git a/Modules/FortranCInterface/Macro.h.in b/Modules/FortranCInterface/Macro.h.in new file mode 100644 index 0000000..d015a62 --- /dev/null +++ b/Modules/FortranCInterface/Macro.h.in @@ -0,0 +1,4 @@ +#ifndef @MACRO_NAMESPACE@HEADER_INCLUDED +#define @MACRO_NAMESPACE@HEADER_INCLUDED +@HEADER_CONTENT@ +#endif diff --git a/Modules/FortranCInterface/Output.cmake.in b/Modules/FortranCInterface/Output.cmake.in new file mode 100644 index 0000000..bce410e --- /dev/null +++ b/Modules/FortranCInterface/Output.cmake.in @@ -0,0 +1,33 @@ +# Global symbol without underscore. +set(FortranCInterface_GLOBAL_SYMBOL "@FortranCInterface_GLOBAL_SYMBOL@") +set(FortranCInterface_GLOBAL_PREFIX "@FortranCInterface_GLOBAL_PREFIX@") +set(FortranCInterface_GLOBAL_SUFFIX "@FortranCInterface_GLOBAL_SUFFIX@") +set(FortranCInterface_GLOBAL_CASE "@FortranCInterface_GLOBAL_CASE@") +set(FortranCInterface_GLOBAL_MACRO "@FortranCInterface_GLOBAL_MACRO@") + +# Global symbol with underscore. +set(FortranCInterface_GLOBAL__SYMBOL "@FortranCInterface_GLOBAL__SYMBOL@") +set(FortranCInterface_GLOBAL__PREFIX "@FortranCInterface_GLOBAL__PREFIX@") +set(FortranCInterface_GLOBAL__SUFFIX "@FortranCInterface_GLOBAL__SUFFIX@") +set(FortranCInterface_GLOBAL__CASE "@FortranCInterface_GLOBAL__CASE@") +set(FortranCInterface_GLOBAL__MACRO "@FortranCInterface_GLOBAL__MACRO@") + +# Module symbol without underscore. +set(FortranCInterface_MODULE_SYMBOL "@FortranCInterface_MODULE_SYMBOL@") +set(FortranCInterface_MODULE_PREFIX "@FortranCInterface_MODULE_PREFIX@") +set(FortranCInterface_MODULE_MIDDLE "@FortranCInterface_MODULE_MIDDLE@") +set(FortranCInterface_MODULE_SUFFIX "@FortranCInterface_MODULE_SUFFIX@") +set(FortranCInterface_MODULE_CASE "@FortranCInterface_MODULE_CASE@") +set(FortranCInterface_MODULE_MACRO "@FortranCInterface_MODULE_MACRO@") + +# Module symbol with underscore. +set(FortranCInterface_MODULE__SYMBOL "@FortranCInterface_MODULE__SYMBOL@") +set(FortranCInterface_MODULE__PREFIX "@FortranCInterface_MODULE__PREFIX@") +set(FortranCInterface_MODULE__MIDDLE "@FortranCInterface_MODULE__MIDDLE@") +set(FortranCInterface_MODULE__SUFFIX "@FortranCInterface_MODULE__SUFFIX@") +set(FortranCInterface_MODULE__CASE "@FortranCInterface_MODULE__CASE@") +set(FortranCInterface_MODULE__MACRO "@FortranCInterface_MODULE__MACRO@") + +# Summarize what was found. +set(FortranCInterface_GLOBAL_FOUND @FortranCInterface_GLOBAL_FOUND@) +set(FortranCInterface_MODULE_FOUND @FortranCInterface_MODULE_FOUND@) diff --git a/Modules/FortranCInterface/Verify/CMakeLists.txt b/Modules/FortranCInterface/Verify/CMakeLists.txt new file mode 100644 index 0000000..e969f24 --- /dev/null +++ b/Modules/FortranCInterface/Verify/CMakeLists.txt @@ -0,0 +1,34 @@ +#============================================================================= +# Copyright 2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +cmake_minimum_required(VERSION 2.7) +project(VerifyFortranC C Fortran) + +option(VERIFY_CXX "Whether to verify C++ and Fortran" OFF) +if(VERIFY_CXX) + enable_language(CXX) + set(VerifyCXX VerifyCXX.cxx) + add_definitions(-DVERIFY_CXX) +endif() + +include(FortranCInterface) + +FortranCInterface_HEADER(VerifyFortran.h SYMBOLS VerifyFortran) +include_directories(${VerifyFortranC_BINARY_DIR}) + +add_library(VerifyFortran STATIC VerifyFortran.f) +add_executable(VerifyFortranC main.c VerifyC.c ${VerifyCXX}) +target_link_libraries(VerifyFortranC VerifyFortran) + +if(NOT VERIFY_CXX) + # The entry point (main) is defined in C; link with the C compiler. + set_property(TARGET VerifyFortranC PROPERTY LINKER_LANGUAGE C) +endif() diff --git a/Modules/FortranCInterface/Verify/VerifyC.c b/Modules/FortranCInterface/Verify/VerifyC.c new file mode 100644 index 0000000..7f847ef --- /dev/null +++ b/Modules/FortranCInterface/Verify/VerifyC.c @@ -0,0 +1,5 @@ +#include +void VerifyC(void) +{ + printf("VerifyC\n"); +} diff --git a/Modules/FortranCInterface/Verify/VerifyCXX.cxx b/Modules/FortranCInterface/Verify/VerifyCXX.cxx new file mode 100644 index 0000000..689fac5 --- /dev/null +++ b/Modules/FortranCInterface/Verify/VerifyCXX.cxx @@ -0,0 +1,4 @@ +extern "C" void VerifyCXX(void) +{ + delete new int; +} diff --git a/Modules/FortranCInterface/Verify/VerifyFortran.f b/Modules/FortranCInterface/Verify/VerifyFortran.f new file mode 100644 index 0000000..a17e48d --- /dev/null +++ b/Modules/FortranCInterface/Verify/VerifyFortran.f @@ -0,0 +1,3 @@ + subroutine VerifyFortran + print *, 'VerifyFortran' + end diff --git a/Modules/FortranCInterface/Verify/main.c b/Modules/FortranCInterface/Verify/main.c new file mode 100644 index 0000000..582ef1d --- /dev/null +++ b/Modules/FortranCInterface/Verify/main.c @@ -0,0 +1,16 @@ +extern void VerifyC(void); +#ifdef VERIFY_CXX +extern void VerifyCXX(void); +#endif +#include "VerifyFortran.h" +extern void VerifyFortran(void); + +int main(void) +{ + VerifyC(); +#ifdef VERIFY_CXX + VerifyCXX(); +#endif + VerifyFortran(); + return 0; +} diff --git a/Modules/FortranCInterface/call_mod.f90 b/Modules/FortranCInterface/call_mod.f90 new file mode 100644 index 0000000..9b6af64 --- /dev/null +++ b/Modules/FortranCInterface/call_mod.f90 @@ -0,0 +1,6 @@ +subroutine call_mod + use mymodule + use my_module + call mysub() + call my_sub() +end subroutine call_mod diff --git a/Modules/FortranCInterface/call_sub.f b/Modules/FortranCInterface/call_sub.f new file mode 100644 index 0000000..ce3d50b --- /dev/null +++ b/Modules/FortranCInterface/call_sub.f @@ -0,0 +1,4 @@ + subroutine call_sub + call mysub() + call my_sub() + end diff --git a/Modules/FortranCInterface/main.F b/Modules/FortranCInterface/main.F new file mode 100644 index 0000000..84991b0 --- /dev/null +++ b/Modules/FortranCInterface/main.F @@ -0,0 +1,6 @@ + program main + call call_sub() +#ifdef CALL_MOD + call call_mod() +#endif + end diff --git a/Modules/FortranCInterface/my_module.f90 b/Modules/FortranCInterface/my_module.f90 new file mode 100644 index 0000000..82713b4 --- /dev/null +++ b/Modules/FortranCInterface/my_module.f90 @@ -0,0 +1,8 @@ +module my_module + interface my_interface + module procedure my_sub + end interface +contains + subroutine my_sub + end subroutine my_sub +end module my_module diff --git a/Modules/FortranCInterface/my_module_.c b/Modules/FortranCInterface/my_module_.c new file mode 100644 index 0000000..6510ae9 --- /dev/null +++ b/Modules/FortranCInterface/my_module_.c @@ -0,0 +1 @@ +void my_module_(void) {} diff --git a/Modules/FortranCInterface/my_sub.f b/Modules/FortranCInterface/my_sub.f new file mode 100644 index 0000000..247ba06 --- /dev/null +++ b/Modules/FortranCInterface/my_sub.f @@ -0,0 +1,2 @@ + subroutine my_sub + end diff --git a/Modules/FortranCInterface/mymodule.f90 b/Modules/FortranCInterface/mymodule.f90 new file mode 100644 index 0000000..ef6281a --- /dev/null +++ b/Modules/FortranCInterface/mymodule.f90 @@ -0,0 +1,8 @@ +module mymodule + interface myinterface + module procedure mysub + end interface +contains + subroutine mysub + end subroutine mysub +end module mymodule diff --git a/Modules/FortranCInterface/mymodule_.c b/Modules/FortranCInterface/mymodule_.c new file mode 100644 index 0000000..5270605 --- /dev/null +++ b/Modules/FortranCInterface/mymodule_.c @@ -0,0 +1 @@ +void mymodule_(void) {} diff --git a/Modules/FortranCInterface/mysub.f b/Modules/FortranCInterface/mysub.f new file mode 100644 index 0000000..1c27ff4 --- /dev/null +++ b/Modules/FortranCInterface/mysub.f @@ -0,0 +1,2 @@ + subroutine mysub + end diff --git a/Modules/FortranCInterface/symbol.c.in b/Modules/FortranCInterface/symbol.c.in new file mode 100644 index 0000000..369fa45 --- /dev/null +++ b/Modules/FortranCInterface/symbol.c.in @@ -0,0 +1,4 @@ +const char* @symbol@(void) +{ + return "INFO:symbol[@symbol@]"; +} diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake new file mode 100644 index 0000000..0302e4b --- /dev/null +++ b/Modules/GNUInstallDirs.cmake @@ -0,0 +1,188 @@ +# - Define GNU standard installation directories +# Provides install directory variables as defined for GNU software: +# http://www.gnu.org/prep/standards/html_node/Directory-Variables.html +# Inclusion of this module defines the following variables: +# CMAKE_INSTALL_ - destination for files of a given type +# CMAKE_INSTALL_FULL_ - corresponding absolute path +# where is one of: +# BINDIR - user executables (bin) +# SBINDIR - system admin executables (sbin) +# LIBEXECDIR - program executables (libexec) +# SYSCONFDIR - read-only single-machine data (etc) +# SHAREDSTATEDIR - modifiable architecture-independent data (com) +# LOCALSTATEDIR - modifiable single-machine data (var) +# LIBDIR - object code libraries (lib or lib64 or lib/ on Debian) +# INCLUDEDIR - C header files (include) +# OLDINCLUDEDIR - C header files for non-gcc (/usr/include) +# DATAROOTDIR - read-only architecture-independent data root (share) +# DATADIR - read-only architecture-independent data (DATAROOTDIR) +# INFODIR - info documentation (DATAROOTDIR/info) +# LOCALEDIR - locale-dependent data (DATAROOTDIR/locale) +# MANDIR - man documentation (DATAROOTDIR/man) +# DOCDIR - documentation root (DATAROOTDIR/doc/PROJECT_NAME) +# Each CMAKE_INSTALL_ value may be passed to the DESTINATION options of +# install() commands for the corresponding file type. If the includer does +# not define a value the above-shown default will be used and the value will +# appear in the cache for editing by the user. +# Each CMAKE_INSTALL_FULL_ value contains an absolute path constructed +# from the corresponding destination by prepending (if necessary) the value +# of CMAKE_INSTALL_PREFIX. + +#============================================================================= +# Copyright 2011 Nikita Krupen'ko +# Copyright 2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Installation directories +# +if(NOT DEFINED CMAKE_INSTALL_BINDIR) + set(CMAKE_INSTALL_BINDIR "bin" CACHE PATH "user executables (bin)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_SBINDIR) + set(CMAKE_INSTALL_SBINDIR "sbin" CACHE PATH "system admin executables (sbin)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_LIBEXECDIR) + set(CMAKE_INSTALL_LIBEXECDIR "libexec" CACHE PATH "program executables (libexec)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR) + set(CMAKE_INSTALL_SYSCONFDIR "etc" CACHE PATH "read-only single-machine data (etc)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_SHAREDSTATEDIR) + set(CMAKE_INSTALL_SHAREDSTATEDIR "com" CACHE PATH "modifiable architecture-independent data (com)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR) + set(CMAKE_INSTALL_LOCALSTATEDIR "var" CACHE PATH "modifiable single-machine data (var)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_LIBDIR) + set(_LIBDIR_DEFAULT "lib") + # Override this default 'lib' with 'lib64' iff: + # - we are on Linux system but NOT cross-compiling + # - we are NOT on debian + # - we are on a 64 bits system + # reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf + # For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if + # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu" + # See http://wiki.debian.org/Multiarch + if(CMAKE_SYSTEM_NAME MATCHES "Linux" + AND NOT CMAKE_CROSSCOMPILING) + if (EXISTS "/etc/debian_version") # is this a debian system ? + if(CMAKE_LIBRARY_ARCHITECTURE) + set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}") + endif() + else() # not debian, rely on CMAKE_SIZEOF_VOID_P: + if(NOT DEFINED CMAKE_SIZEOF_VOID_P) + message(AUTHOR_WARNING + "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. " + "Please enable at least one language before including GNUInstallDirs.") + else() + if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") + set(_LIBDIR_DEFAULT "lib64") + endif() + endif() + endif() + endif() + set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "object code libraries (${_LIBDIR_DEFAULT})") +endif() + +if(NOT DEFINED CMAKE_INSTALL_INCLUDEDIR) + set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE PATH "C header files (include)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_OLDINCLUDEDIR) + set(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" CACHE PATH "C header files for non-gcc (/usr/include)") +endif() + +if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR) + set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)") +endif() + +#----------------------------------------------------------------------------- +# Values whose defaults are relative to DATAROOTDIR. Store empty values in +# the cache and store the defaults in local variables if the cache values are +# not set explicitly. This auto-updates the defaults as DATAROOTDIR changes. + +if(NOT CMAKE_INSTALL_DATADIR) + set(CMAKE_INSTALL_DATADIR "" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)") + set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}") +endif() + +if(NOT CMAKE_INSTALL_INFODIR) + set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)") + set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info") +endif() + +if(NOT CMAKE_INSTALL_LOCALEDIR) + set(CMAKE_INSTALL_LOCALEDIR "" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)") + set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale") +endif() + +if(NOT CMAKE_INSTALL_MANDIR) + set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)") + set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man") +endif() + +if(NOT CMAKE_INSTALL_DOCDIR) + set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)") + set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}") +endif() + +#----------------------------------------------------------------------------- + +mark_as_advanced( + CMAKE_INSTALL_BINDIR + CMAKE_INSTALL_SBINDIR + CMAKE_INSTALL_LIBEXECDIR + CMAKE_INSTALL_SYSCONFDIR + CMAKE_INSTALL_SHAREDSTATEDIR + CMAKE_INSTALL_LOCALSTATEDIR + CMAKE_INSTALL_LIBDIR + CMAKE_INSTALL_INCLUDEDIR + CMAKE_INSTALL_OLDINCLUDEDIR + CMAKE_INSTALL_DATAROOTDIR + CMAKE_INSTALL_DATADIR + CMAKE_INSTALL_INFODIR + CMAKE_INSTALL_LOCALEDIR + CMAKE_INSTALL_MANDIR + CMAKE_INSTALL_DOCDIR + ) + +# Result directories +# +foreach(dir + BINDIR + SBINDIR + LIBEXECDIR + SYSCONFDIR + SHAREDSTATEDIR + LOCALSTATEDIR + LIBDIR + INCLUDEDIR + OLDINCLUDEDIR + DATAROOTDIR + DATADIR + INFODIR + LOCALEDIR + MANDIR + DOCDIR + ) + if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}}) + set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}") + else() + set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}") + endif() +endforeach() diff --git a/Modules/GenerateExportHeader.cmake b/Modules/GenerateExportHeader.cmake new file mode 100644 index 0000000..ce23d5d --- /dev/null +++ b/Modules/GenerateExportHeader.cmake @@ -0,0 +1,351 @@ +# - Function for generation of export macros for libraries +# This module provides the function GENERATE_EXPORT_HEADER() and the +# accompanying ADD_COMPILER_EXPORT_FLAGS() function. +# +# The GENERATE_EXPORT_HEADER function can be used to generate a file suitable +# for preprocessor inclusion which contains EXPORT macros to be used in +# library classes. +# +# GENERATE_EXPORT_HEADER( LIBRARY_TARGET +# [BASE_NAME ] +# [EXPORT_MACRO_NAME ] +# [EXPORT_FILE_NAME ] +# [DEPRECATED_MACRO_NAME ] +# [NO_EXPORT_MACRO_NAME ] +# [STATIC_DEFINE ] +# [NO_DEPRECATED_MACRO_NAME ] +# [DEFINE_NO_DEPRECATED] +# [PREFIX_NAME ] +# ) +# +# ADD_COMPILER_EXPORT_FLAGS( [] ) +# +# 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 +# adds -fvisibility=hidden to CMAKE_CXX_FLAGS if supported, and is a no-op on +# Windows which does not need extra compiler flags for exporting support. You +# may optionally pass a single argument to ADD_COMPILER_EXPORT_FLAGS that will +# be populated with the required CXX_FLAGS required to enable visibility support +# for the compiler/architecture in use. +# +# This means that in the simplest case, users of these functions will be +# equivalent to: +# +# add_compiler_export_flags() +# add_library(somelib someclass.cpp) +# generate_export_header(somelib) +# install(TARGETS somelib DESTINATION ${LIBRARY_INSTALL_DIR}) +# install(FILES +# someclass.h +# ${PROJECT_BINARY_DIR}/somelib_export.h DESTINATION ${INCLUDE_INSTALL_DIR} +# ) +# +# And in the ABI header files: +# +# #include "somelib_export.h" +# class SOMELIB_EXPORT SomeClass { +# ... +# }; +# +# The CMake fragment will generate a file in the ${CMAKE_CURRENT_BUILD_DIR} +# called somelib_export.h containing the macros SOMELIB_EXPORT, SOMELIB_NO_EXPORT, +# SOMELIB_DEPRECATED, SOMELIB_DEPRECATED_EXPORT and SOMELIB_DEPRECATED_NO_EXPORT. +# The resulting file should be installed with other headers in the library. +# +# The BASE_NAME argument can be used to override the file name and the names +# used for the macros +# +# add_library(somelib someclass.cpp) +# generate_export_header(somelib +# BASE_NAME other_name +# ) +# +# Generates a file called other_name_export.h containing the macros +# OTHER_NAME_EXPORT, OTHER_NAME_NO_EXPORT and OTHER_NAME_DEPRECATED etc. +# +# The BASE_NAME may be overridden by specifiying other options in the function. +# For example: +# +# add_library(somelib someclass.cpp) +# generate_export_header(somelib +# EXPORT_MACRO_NAME OTHER_NAME_EXPORT +# ) +# +# creates the macro OTHER_NAME_EXPORT instead of SOMELIB_EXPORT, but other macros +# and the generated file name is as default. +# +# add_library(somelib someclass.cpp) +# generate_export_header(somelib +# DEPRECATED_MACRO_NAME KDE_DEPRECATED +# ) +# +# creates the macro KDE_DEPRECATED instead of SOMELIB_DEPRECATED. +# +# If LIBRARY_TARGET is a static library, macros are defined without values. +# +# If the same sources are used to create both a shared and a static library, the +# uppercased symbol ${BASE_NAME}_STATIC_DEFINE should be used when building the +# static library +# +# add_library(shared_variant SHARED ${lib_SRCS}) +# add_library(static_variant ${lib_SRCS}) +# generate_export_header(shared_variant BASE_NAME libshared_and_static) +# set_target_properties(static_variant PROPERTIES +# COMPILE_FLAGS -DLIBSHARED_AND_STATIC_STATIC_DEFINE) +# +# This will cause the export macros to expand to nothing when building the +# static library. +# +# If DEFINE_NO_DEPRECATED is specified, then a macro ${BASE_NAME}_NO_DEPRECATED +# will be defined +# This macro can be used to remove deprecated code from preprocessor output. +# +# option(EXCLUDE_DEPRECATED "Exclude deprecated parts of the library" FALSE) +# if (EXCLUDE_DEPRECATED) +# set(NO_BUILD_DEPRECATED DEFINE_NO_DEPRECATED) +# endif() +# generate_export_header(somelib ${NO_BUILD_DEPRECATED}) +# +# And then in somelib: +# +# class SOMELIB_EXPORT SomeClass +# { +# public: +# #ifndef SOMELIB_NO_DEPRECATED +# SOMELIB_DEPRECATED void oldMethod(); +# #endif +# }; +# +# #ifndef SOMELIB_NO_DEPRECATED +# void SomeClass::oldMethod() { } +# #endif +# +# If PREFIX_NAME is specified, the argument will be used as a prefix to all +# generated macros. +# +# For example: +# +# generate_export_header(somelib PREFIX_NAME VTK_) +# +# Generates the macros VTK_SOMELIB_EXPORT etc. + +#============================================================================= +# Copyright 2011 Stephen Kelly +# +# 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(CheckCXXCompilerFlag) + +# TODO: Install this macro separately? +macro(_check_cxx_compiler_attribute _ATTRIBUTE _RESULT) + check_cxx_source_compiles("${_ATTRIBUTE} int somefunc() { return 0; } + int main() { return somefunc();}" ${_RESULT} + ) +endmacro() + +macro(_test_compiler_hidden_visibility) + + 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() + + + # Exclude XL here because it misinterprets -fvisibility=hidden even though + # the check_cxx_compiler_flag passes + # http://www.cdash.org/CDash/testDetails.php?test=109109951&build=1419259 + if(NOT GCC_TOO_OLD + AND NOT _INTEL_TOO_OLD + AND NOT WIN32 + AND NOT CYGWIN + AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES XL + AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES PGI + AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES Watcom) + check_cxx_compiler_flag(-fvisibility=hidden COMPILER_HAS_HIDDEN_VISIBILITY) + check_cxx_compiler_flag(-fvisibility-inlines-hidden + COMPILER_HAS_HIDDEN_INLINE_VISIBILITY) + option(USE_COMPILER_HIDDEN_VISIBILITY + "Use HIDDEN visibility support if available." ON) + mark_as_advanced(USE_COMPILER_HIDDEN_VISIBILITY) + endif() +endmacro() + +macro(_test_compiler_has_deprecated) + if("${CMAKE_CXX_COMPILER_ID}" MATCHES Borland + OR "${CMAKE_CXX_COMPILER_ID}" MATCHES HP + OR GCC_TOO_OLD + OR "${CMAKE_CXX_COMPILER_ID}" MATCHES PGI + OR "${CMAKE_CXX_COMPILER_ID}" MATCHES Watcom) + set(COMPILER_HAS_DEPRECATED "" CACHE INTERNAL + "Compiler support for a deprecated attribute") + else() + _check_cxx_compiler_attribute("__attribute__((__deprecated__))" + COMPILER_HAS_DEPRECATED_ATTR) + if(COMPILER_HAS_DEPRECATED_ATTR) + set(COMPILER_HAS_DEPRECATED "${COMPILER_HAS_DEPRECATED_ATTR}" + CACHE INTERNAL "Compiler support for a deprecated attribute") + else() + _check_cxx_compiler_attribute("__declspec(deprecated)" + COMPILER_HAS_DEPRECATED) + endif() + endif() +endmacro() + +get_filename_component(_GENERATE_EXPORT_HEADER_MODULE_DIR + "${CMAKE_CURRENT_LIST_FILE}" PATH) + +macro(_DO_SET_MACRO_VALUES TARGET_LIBRARY) + set(DEFINE_DEPRECATED) + set(DEFINE_EXPORT) + set(DEFINE_IMPORT) + set(DEFINE_NO_EXPORT) + + if (COMPILER_HAS_DEPRECATED_ATTR) + set(DEFINE_DEPRECATED "__attribute__ ((__deprecated__))") + elseif(COMPILER_HAS_DEPRECATED) + set(DEFINE_DEPRECATED "__declspec(deprecated)") + endif() + + get_property(type TARGET ${TARGET_LIBRARY} PROPERTY TYPE) + + if(NOT ${type} STREQUAL "STATIC_LIBRARY") + if(WIN32) + set(DEFINE_EXPORT "__declspec(dllexport)") + set(DEFINE_IMPORT "__declspec(dllimport)") + elseif(COMPILER_HAS_HIDDEN_VISIBILITY AND USE_COMPILER_HIDDEN_VISIBILITY) + set(DEFINE_EXPORT "__attribute__((visibility(\"default\")))") + set(DEFINE_IMPORT "__attribute__((visibility(\"default\")))") + set(DEFINE_NO_EXPORT "__attribute__((visibility(\"hidden\")))") + endif() + endif() +endmacro() + +macro(_DO_GENERATE_EXPORT_HEADER TARGET_LIBRARY) + # Option overrides + set(options DEFINE_NO_DEPRECATED) + set(oneValueArgs PREFIX_NAME BASE_NAME EXPORT_MACRO_NAME EXPORT_FILE_NAME + DEPRECATED_MACRO_NAME NO_EXPORT_MACRO_NAME STATIC_DEFINE + NO_DEPRECATED_MACRO_NAME) + set(multiValueArgs) + + cmake_parse_arguments(_GEH "${options}" "${oneValueArgs}" "${multiValueArgs}" + ${ARGN}) + + set(BASE_NAME "${TARGET_LIBRARY}") + + if(_GEH_BASE_NAME) + set(BASE_NAME ${_GEH_BASE_NAME}) + endif() + + string(TOUPPER ${BASE_NAME} BASE_NAME_UPPER) + string(TOLOWER ${BASE_NAME} BASE_NAME_LOWER) + + # Default options + set(EXPORT_MACRO_NAME "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_EXPORT") + set(NO_EXPORT_MACRO_NAME "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_NO_EXPORT") + set(EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${BASE_NAME_LOWER}_export.h") + set(DEPRECATED_MACRO_NAME "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_DEPRECATED") + set(STATIC_DEFINE "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_STATIC_DEFINE") + set(NO_DEPRECATED_MACRO_NAME + "${_GEH_PREFIX_NAME}${BASE_NAME_UPPER}_NO_DEPRECATED") + + if(_GEH_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Unknown keywords given to GENERATE_EXPORT_HEADER(): \"${_GEH_UNPARSED_ARGUMENTS}\"") + endif() + + if(_GEH_EXPORT_MACRO_NAME) + set(EXPORT_MACRO_NAME ${_GEH_PREFIX_NAME}${_GEH_EXPORT_MACRO_NAME}) + endif() + if(_GEH_EXPORT_FILE_NAME) + if(IS_ABSOLUTE ${_GEH_EXPORT_FILE_NAME}) + set(EXPORT_FILE_NAME ${_GEH_EXPORT_FILE_NAME}) + else() + set(EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/${_GEH_EXPORT_FILE_NAME}") + endif() + endif() + if(_GEH_DEPRECATED_MACRO_NAME) + set(DEPRECATED_MACRO_NAME ${_GEH_PREFIX_NAME}${_GEH_DEPRECATED_MACRO_NAME}) + endif() + if(_GEH_NO_EXPORT_MACRO_NAME) + set(NO_EXPORT_MACRO_NAME ${_GEH_PREFIX_NAME}${_GEH_NO_EXPORT_MACRO_NAME}) + endif() + if(_GEH_STATIC_DEFINE) + set(STATIC_DEFINE ${_GEH_PREFIX_NAME}${_GEH_STATIC_DEFINE}) + endif() + + if(_GEH_DEFINE_NO_DEPRECATED) + set(DEFINE_NO_DEPRECATED TRUE) + endif() + + if(_GEH_NO_DEPRECATED_MACRO_NAME) + set(NO_DEPRECATED_MACRO_NAME + ${_GEH_PREFIX_NAME}${_GEH_NO_DEPRECATED_MACRO_NAME}) + endif() + + set(INCLUDE_GUARD_NAME "${EXPORT_MACRO_NAME}_H") + + get_target_property(EXPORT_IMPORT_CONDITION ${TARGET_LIBRARY} DEFINE_SYMBOL) + + if(NOT EXPORT_IMPORT_CONDITION) + set(EXPORT_IMPORT_CONDITION ${TARGET_LIBRARY}_EXPORTS) + endif() + + configure_file("${_GENERATE_EXPORT_HEADER_MODULE_DIR}/exportheader.cmake.in" + "${EXPORT_FILE_NAME}" @ONLY) +endmacro() + +function(GENERATE_EXPORT_HEADER TARGET_LIBRARY) + get_property(type TARGET ${TARGET_LIBRARY} PROPERTY TYPE) + if(${type} STREQUAL "MODULE") + message(WARNING "This macro should not be used with libraries of type MODULE") + return() + endif() + if(NOT ${type} STREQUAL "STATIC_LIBRARY" AND NOT ${type} STREQUAL "SHARED_LIBRARY") + message(WARNING "This macro can only be used with libraries") + return() + endif() + _test_compiler_hidden_visibility() + _test_compiler_has_deprecated() + _do_set_macro_values(${TARGET_LIBRARY}) + _do_generate_export_header(${TARGET_LIBRARY} ${ARGN}) +endfunction() + +function(add_compiler_export_flags) + + _test_compiler_hidden_visibility() + _test_compiler_has_deprecated() + + if(NOT (USE_COMPILER_HIDDEN_VISIBILITY AND COMPILER_HAS_HIDDEN_VISIBILITY)) + # Just return if there are no flags to add. + return() + endif() + + set (EXTRA_FLAGS "-fvisibility=hidden") + + if(COMPILER_HAS_HIDDEN_INLINE_VISIBILITY) + set (EXTRA_FLAGS "${EXTRA_FLAGS} -fvisibility-inlines-hidden") + endif() + + # Either return the extra flags needed in the supplied argument, or to the + # CMAKE_CXX_FLAGS if no argument is supplied. + if(ARGV0) + set(${ARGV0} "${EXTRA_FLAGS}" PARENT_SCOPE) + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_FLAGS}" PARENT_SCOPE) + endif() +endfunction() diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake new file mode 100644 index 0000000..8761f40 --- /dev/null +++ b/Modules/GetPrerequisites.cmake @@ -0,0 +1,869 @@ +# - Functions to analyze and list executable file prerequisites. +# This module provides functions to list the .dll, .dylib or .so +# files that an executable or shared library file depends on. (Its +# prerequisites.) +# +# It uses various tools to obtain the list of required shared library files: +# dumpbin (Windows) +# ldd (Linux/Unix) +# otool (Mac OSX) +# The following functions are provided by this module: +# get_prerequisites +# list_prerequisites +# list_prerequisites_by_glob +# gp_append_unique +# is_file_executable +# gp_item_default_embedded_path +# (projects can override with gp_item_default_embedded_path_override) +# gp_resolve_item +# (projects can override with gp_resolve_item_override) +# gp_resolved_file_type +# (projects can override with gp_resolved_file_type_override) +# gp_file_type +# Requires CMake 2.6 or greater because it uses function, break, return and +# PARENT_SCOPE. +# +# GET_PREREQUISITES( +# ) +# Get the list of shared library files required by . The list in +# the variable named should be empty on first entry to +# this function. On exit, will contain the list of +# required shared library files. +# +# is the full path to an executable file. is the +# name of a CMake variable to contain the results. must be 0 +# or 1 indicating whether to include or exclude "system" prerequisites. If +# is set to 1 all prerequisites will be found recursively, if set to +# 0 only direct prerequisites are listed. is the path to the top +# level executable used for @executable_path replacment on the Mac. is +# a list of paths where libraries might be found: these paths are searched +# first when a target without any path info is given. Then standard system +# locations are also searched: PATH, Framework locations, /usr/lib... +# +# LIST_PREREQUISITES( [ [ []]]) +# Print a message listing the prerequisites of . +# +# is the name of a shared library or executable target or the full +# path to a shared library or executable file. If is set to 1 all +# prerequisites will be found recursively, if set to 0 only direct +# prerequisites are listed. must be 0 or 1 indicating whether +# to include or exclude "system" prerequisites. With set to 0 only +# the full path names of the prerequisites are printed, set to 1 extra +# informatin will be displayed. +# +# LIST_PREREQUISITES_BY_GLOB( ) +# Print the prerequisites of shared library and executable files matching a +# globbing pattern. is GLOB or GLOB_RECURSE and is a +# globbing expression used with "file(GLOB" or "file(GLOB_RECURSE" to retrieve +# a list of matching files. If a matching file is executable, its prerequisites +# are listed. +# +# Any additional (optional) arguments provided are passed along as the +# optional arguments to the list_prerequisites calls. +# +# GP_APPEND_UNIQUE( ) +# Append to the list variable only if the value is not +# already in the list. +# +# IS_FILE_EXECUTABLE( ) +# Return 1 in if is a binary executable, 0 otherwise. +# +# GP_ITEM_DEFAULT_EMBEDDED_PATH( ) +# Return the path that others should refer to the item by when the item +# is embedded inside a bundle. +# +# Override on a per-project basis by providing a project-specific +# gp_item_default_embedded_path_override function. +# +# GP_RESOLVE_ITEM( ) +# Resolve an item into an existing full path file. +# +# Override on a per-project basis by providing a project-specific +# gp_resolve_item_override function. +# +# GP_RESOLVED_FILE_TYPE( ) +# Return the type of with respect to . String +# describing type of prerequisite is returned in variable named . +# +# Use and if necessary to resolve non-absolute +# values -- but only for non-embedded items. +# +# Possible types are: +# system +# local +# embedded +# other +# Override on a per-project basis by providing a project-specific +# gp_resolved_file_type_override function. +# +# GP_FILE_TYPE( ) +# Return the type of with respect to . String +# describing type of prerequisite is returned in variable named . +# +# Possible types are: +# system +# local +# embedded +# other + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +function(gp_append_unique list_var value) + set(contains 0) + + foreach(item ${${list_var}}) + if("${item}" STREQUAL "${value}") + set(contains 1) + break() + endif("${item}" STREQUAL "${value}") + endforeach(item) + + if(NOT contains) + set(${list_var} ${${list_var}} "${value}" PARENT_SCOPE) + endif(NOT contains) +endfunction(gp_append_unique) + + +function(is_file_executable file result_var) + # + # A file is not executable until proven otherwise: + # + set(${result_var} 0 PARENT_SCOPE) + + get_filename_component(file_full "${file}" ABSOLUTE) + string(TOLOWER "${file_full}" file_full_lower) + + # If file name ends in .exe on Windows, *assume* executable: + # + if(WIN32 AND NOT UNIX) + if("${file_full_lower}" MATCHES "\\.exe$") + set(${result_var} 1 PARENT_SCOPE) + return() + endif("${file_full_lower}" MATCHES "\\.exe$") + + # A clause could be added here that uses output or return value of dumpbin + # to determine ${result_var}. In 99%+? practical cases, the exe name + # match will be sufficient... + # + endif(WIN32 AND NOT UNIX) + + # Use the information returned from the Unix shell command "file" to + # determine if ${file_full} should be considered an executable file... + # + # If the file command's output contains "executable" and does *not* contain + # "text" then it is likely an executable suitable for prerequisite analysis + # via the get_prerequisites macro. + # + if(UNIX) + if(NOT file_cmd) + find_program(file_cmd "file") + endif(NOT file_cmd) + + if(file_cmd) + execute_process(COMMAND "${file_cmd}" "${file_full}" + OUTPUT_VARIABLE file_ov + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + # Replace the name of the file in the output with a placeholder token + # (the string " _file_full_ ") so that just in case the path name of + # the file contains the word "text" or "executable" we are not fooled + # into thinking "the wrong thing" because the file name matches the + # other 'file' command output we are looking for... + # + string(REPLACE "${file_full}" " _file_full_ " file_ov "${file_ov}") + string(TOLOWER "${file_ov}" file_ov) + + #message(STATUS "file_ov='${file_ov}'") + if("${file_ov}" MATCHES "executable") + #message(STATUS "executable!") + if("${file_ov}" MATCHES "text") + #message(STATUS "but text, so *not* a binary executable!") + else("${file_ov}" MATCHES "text") + set(${result_var} 1 PARENT_SCOPE) + return() + endif("${file_ov}" MATCHES "text") + endif("${file_ov}" MATCHES "executable") + else(file_cmd) + message(STATUS "warning: No 'file' command, skipping execute_process...") + endif(file_cmd) + endif(UNIX) +endfunction(is_file_executable) + + +function(gp_item_default_embedded_path item default_embedded_path_var) + + # On Windows and Linux, "embed" prerequisites in the same directory + # as the executable by default: + # + set(path "@executable_path") + set(overridden 0) + + # On the Mac, relative to the executable depending on the type + # of the thing we are embedding: + # + if(APPLE) + # + # The assumption here is that all executables in the bundle will be + # in same-level-directories inside the bundle. The parent directory + # of an executable inside the bundle should be MacOS or a sibling of + # MacOS and all embedded paths returned from here will begin with + # "@executable_path/../" and will work from all executables in all + # such same-level-directories inside the bundle. + # + + # By default, embed things right next to the main bundle executable: + # + set(path "@executable_path/../../Contents/MacOS") + + # Embed .dylibs right next to the main bundle executable: + # + if(item MATCHES "\\.dylib$") + set(path "@executable_path/../MacOS") + set(overridden 1) + endif(item MATCHES "\\.dylib$") + + # Embed frameworks in the embedded "Frameworks" directory (sibling of MacOS): + # + if(NOT overridden) + if(item MATCHES "[^/]+\\.framework/") + set(path "@executable_path/../Frameworks") + set(overridden 1) + endif(item MATCHES "[^/]+\\.framework/") + endif(NOT overridden) + endif() + + # Provide a hook so that projects can override the default embedded location + # of any given library by whatever logic they choose: + # + if(COMMAND gp_item_default_embedded_path_override) + gp_item_default_embedded_path_override("${item}" path) + endif(COMMAND gp_item_default_embedded_path_override) + + set(${default_embedded_path_var} "${path}" PARENT_SCOPE) +endfunction(gp_item_default_embedded_path) + + +function(gp_resolve_item context item exepath dirs resolved_item_var) + set(resolved 0) + set(resolved_item "${item}") + + # Is it already resolved? + # + if(IS_ABSOLUTE "${resolved_item}" AND EXISTS "${resolved_item}") + set(resolved 1) + endif(IS_ABSOLUTE "${resolved_item}" AND EXISTS "${resolved_item}") + + if(NOT resolved) + if(item MATCHES "@executable_path") + # + # @executable_path references are assumed relative to exepath + # + string(REPLACE "@executable_path" "${exepath}" ri "${item}") + get_filename_component(ri "${ri}" ABSOLUTE) + + if(EXISTS "${ri}") + #message(STATUS "info: embedded item exists (${ri})") + set(resolved 1) + set(resolved_item "${ri}") + else(EXISTS "${ri}") + message(STATUS "warning: embedded item does not exist '${ri}'") + endif(EXISTS "${ri}") + endif(item MATCHES "@executable_path") + endif(NOT resolved) + + if(NOT resolved) + if(item MATCHES "@loader_path") + # + # @loader_path references are assumed relative to the + # PATH of the given "context" (presumably another library) + # + get_filename_component(contextpath "${context}" PATH) + string(REPLACE "@loader_path" "${contextpath}" ri "${item}") + get_filename_component(ri "${ri}" ABSOLUTE) + + if(EXISTS "${ri}") + #message(STATUS "info: embedded item exists (${ri})") + set(resolved 1) + set(resolved_item "${ri}") + else(EXISTS "${ri}") + message(STATUS "warning: embedded item does not exist '${ri}'") + endif(EXISTS "${ri}") + endif(item MATCHES "@loader_path") + endif(NOT resolved) + + if(NOT resolved) + if(item MATCHES "@rpath") + # + # @rpath references are relative to the paths built into the binaries with -rpath + # We handle this case like we do for other Unixes + # + string(REPLACE "@rpath/" "" norpath_item "${item}") + + set(ri "ri-NOTFOUND") + find_file(ri "${norpath_item}" ${exepath} ${dirs} NO_DEFAULT_PATH) + if(ri) + #message(STATUS "info: 'find_file' in exepath/dirs (${ri})") + set(resolved 1) + set(resolved_item "${ri}") + set(ri "ri-NOTFOUND") + endif(ri) + + endif(item MATCHES "@rpath") + endif(NOT resolved) + + if(NOT resolved) + set(ri "ri-NOTFOUND") + find_file(ri "${item}" ${exepath} ${dirs} NO_DEFAULT_PATH) + find_file(ri "${item}" ${exepath} ${dirs} /usr/lib) + if(ri) + #message(STATUS "info: 'find_file' in exepath/dirs (${ri})") + set(resolved 1) + set(resolved_item "${ri}") + set(ri "ri-NOTFOUND") + endif(ri) + endif(NOT resolved) + + if(NOT resolved) + if(item MATCHES "[^/]+\\.framework/") + set(fw "fw-NOTFOUND") + find_file(fw "${item}" + "~/Library/Frameworks" + "/Library/Frameworks" + "/System/Library/Frameworks" + ) + if(fw) + #message(STATUS "info: 'find_file' found framework (${fw})") + set(resolved 1) + set(resolved_item "${fw}") + set(fw "fw-NOTFOUND") + endif(fw) + endif(item MATCHES "[^/]+\\.framework/") + endif(NOT resolved) + + # Using find_program on Windows will find dll files that are in the PATH. + # (Converting simple file names into full path names if found.) + # + if(WIN32 AND NOT UNIX) + if(NOT resolved) + set(ri "ri-NOTFOUND") + find_program(ri "${item}" PATHS "${exepath};${dirs}" NO_DEFAULT_PATH) + find_program(ri "${item}" PATHS "${exepath};${dirs}") + if(ri) + #message(STATUS "info: 'find_program' in exepath/dirs (${ri})") + set(resolved 1) + set(resolved_item "${ri}") + set(ri "ri-NOTFOUND") + endif(ri) + endif(NOT resolved) + endif(WIN32 AND NOT UNIX) + + # Provide a hook so that projects can override item resolution + # by whatever logic they choose: + # + if(COMMAND gp_resolve_item_override) + gp_resolve_item_override("${context}" "${item}" "${exepath}" "${dirs}" resolved_item resolved) + endif(COMMAND gp_resolve_item_override) + + if(NOT resolved) + message(STATUS " +warning: cannot resolve item '${item}' + + possible problems: + need more directories? + need to use InstallRequiredSystemLibraries? + run in install tree instead of build tree? +") +# message(STATUS " +#****************************************************************************** +#warning: cannot resolve item '${item}' +# +# possible problems: +# need more directories? +# need to use InstallRequiredSystemLibraries? +# run in install tree instead of build tree? +# +# context='${context}' +# item='${item}' +# exepath='${exepath}' +# dirs='${dirs}' +# resolved_item_var='${resolved_item_var}' +#****************************************************************************** +#") + endif(NOT resolved) + + set(${resolved_item_var} "${resolved_item}" PARENT_SCOPE) +endfunction(gp_resolve_item) + + +function(gp_resolved_file_type original_file file exepath dirs type_var) + #message(STATUS "**") + + if(NOT IS_ABSOLUTE "${original_file}") + message(STATUS "warning: gp_resolved_file_type expects absolute full path for first arg original_file") + endif() + + set(is_embedded 0) + set(is_local 0) + set(is_system 0) + + set(resolved_file "${file}") + + if("${file}" MATCHES "^@(executable|loader)_path") + set(is_embedded 1) + endif() + + if(NOT is_embedded) + if(NOT IS_ABSOLUTE "${file}") + gp_resolve_item("${original_file}" "${file}" "${exepath}" "${dirs}" resolved_file) + endif() + + string(TOLOWER "${original_file}" original_lower) + string(TOLOWER "${resolved_file}" lower) + + if(UNIX) + if(resolved_file MATCHES "^(/lib/|/lib32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/lib64/|/usr/X11R6/|/usr/bin/)") + set(is_system 1) + endif() + endif() + + if(APPLE) + if(resolved_file MATCHES "^(/System/Library/|/usr/lib/)") + set(is_system 1) + endif() + endif() + + if(WIN32) + string(TOLOWER "$ENV{SystemRoot}" sysroot) + string(REGEX REPLACE "\\\\" "/" sysroot "${sysroot}") + + string(TOLOWER "$ENV{windir}" windir) + string(REGEX REPLACE "\\\\" "/" windir "${windir}") + + if(lower MATCHES "^(${sysroot}/sys(tem|wow)|${windir}/sys(tem|wow)|(.*/)*msvc[^/]+dll)") + set(is_system 1) + endif() + + if(UNIX) + # if cygwin, we can get the properly formed windows paths from cygpath + find_program(CYGPATH_EXECUTABLE cygpath) + + if(CYGPATH_EXECUTABLE) + execute_process(COMMAND ${CYGPATH_EXECUTABLE} -W + OUTPUT_VARIABLE env_windir + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${CYGPATH_EXECUTABLE} -S + OUTPUT_VARIABLE env_sysdir + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(TOLOWER "${env_windir}" windir) + string(TOLOWER "${env_sysdir}" sysroot) + + if(lower MATCHES "^(${sysroot}/sys(tem|wow)|${windir}/sys(tem|wow)|(.*/)*msvc[^/]+dll)") + set(is_system 1) + endif() + endif(CYGPATH_EXECUTABLE) + endif(UNIX) + endif(WIN32) + + if(NOT is_system) + get_filename_component(original_path "${original_lower}" PATH) + get_filename_component(path "${lower}" PATH) + if("${original_path}" STREQUAL "${path}") + set(is_local 1) + else() + string(LENGTH "${original_path}/" original_length) + string(LENGTH "${lower}" path_length) + if(${path_length} GREATER ${original_length}) + string(SUBSTRING "${lower}" 0 ${original_length} path) + if("${original_path}/" STREQUAL "${path}") + set(is_embedded 1) + endif() + endif() + endif() + endif() + endif() + + # Return type string based on computed booleans: + # + set(type "other") + + if(is_system) + set(type "system") + elseif(is_embedded) + set(type "embedded") + elseif(is_local) + set(type "local") + endif() + + #message(STATUS "gp_resolved_file_type: '${file}' '${resolved_file}'") + #message(STATUS " type: '${type}'") + + if(NOT is_embedded) + if(NOT IS_ABSOLUTE "${resolved_file}") + if(lower MATCHES "^msvc[^/]+dll" AND is_system) + message(STATUS "info: non-absolute msvc file '${file}' returning type '${type}'") + else() + message(STATUS "warning: gp_resolved_file_type non-absolute file '${file}' returning type '${type}' -- possibly incorrect") + endif() + endif() + endif() + + # Provide a hook so that projects can override the decision on whether a + # library belongs to the system or not by whatever logic they choose: + # + if(COMMAND gp_resolved_file_type_override) + gp_resolved_file_type_override("${resolved_file}" type) + endif() + + set(${type_var} "${type}" PARENT_SCOPE) + + #message(STATUS "**") +endfunction() + + +function(gp_file_type original_file file type_var) + if(NOT IS_ABSOLUTE "${original_file}") + message(STATUS "warning: gp_file_type expects absolute full path for first arg original_file") + endif() + + get_filename_component(exepath "${original_file}" PATH) + + set(type "") + gp_resolved_file_type("${original_file}" "${file}" "${exepath}" "" type) + + set(${type_var} "${type}" PARENT_SCOPE) +endfunction(gp_file_type) + + +function(get_prerequisites target prerequisites_var exclude_system recurse exepath dirs) + set(verbose 0) + set(eol_char "E") + + if(NOT IS_ABSOLUTE "${target}") + message("warning: target '${target}' is not absolute...") + endif(NOT IS_ABSOLUTE "${target}") + + if(NOT EXISTS "${target}") + message("warning: target '${target}' does not exist...") + endif(NOT EXISTS "${target}") + + # + # + # Try to choose the right tool by default. Caller can set gp_tool prior to + # calling this function to force using a different tool. + # + if("${gp_tool}" STREQUAL "") + set(gp_tool "ldd") + if(APPLE) + set(gp_tool "otool") + endif(APPLE) + if(WIN32 AND NOT UNIX) # This is how to check for cygwin, har! + set(gp_tool "dumpbin") + endif(WIN32 AND NOT UNIX) + endif("${gp_tool}" STREQUAL "") + + set(gp_tool_known 0) + + if("${gp_tool}" STREQUAL "ldd") + set(gp_cmd_args "") + set(gp_regex "^[\t ]*[^\t ]+ => ([^\t\(]+) .*${eol_char}$") + set(gp_regex_error "not found${eol_char}$") + set(gp_regex_fallback "^[\t ]*([^\t ]+) => ([^\t ]+).*${eol_char}$") + set(gp_regex_cmp_count 1) + set(gp_tool_known 1) + endif("${gp_tool}" STREQUAL "ldd") + + if("${gp_tool}" STREQUAL "otool") + set(gp_cmd_args "-L") + set(gp_regex "^\t([^\t]+) \\(compatibility version ([0-9]+.[0-9]+.[0-9]+), current version ([0-9]+.[0-9]+.[0-9]+)\\)${eol_char}$") + set(gp_regex_error "") + set(gp_regex_fallback "") + set(gp_regex_cmp_count 3) + set(gp_tool_known 1) + endif("${gp_tool}" STREQUAL "otool") + + if("${gp_tool}" STREQUAL "dumpbin") + set(gp_cmd_args "/dependents") + set(gp_regex "^ ([^ ].*[Dd][Ll][Ll])${eol_char}$") + set(gp_regex_error "") + set(gp_regex_fallback "") + set(gp_regex_cmp_count 1) + set(gp_tool_known 1) + set(ENV{VS_UNICODE_OUTPUT} "") # Block extra output from inside VS IDE. + endif("${gp_tool}" STREQUAL "dumpbin") + + if(NOT gp_tool_known) + message(STATUS "warning: gp_tool='${gp_tool}' is an unknown tool...") + message(STATUS "CMake function get_prerequisites needs more code to handle '${gp_tool}'") + message(STATUS "Valid gp_tool values are dumpbin, ldd and otool.") + return() + endif(NOT gp_tool_known) + + set(gp_cmd_paths ${gp_cmd_paths} + "C:/Program Files/Microsoft Visual Studio 9.0/VC/bin" + "C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin" + "C:/Program Files/Microsoft Visual Studio 8/VC/BIN" + "C:/Program Files (x86)/Microsoft Visual Studio 8/VC/BIN" + "C:/Program Files/Microsoft Visual Studio .NET 2003/VC7/BIN" + "C:/Program Files (x86)/Microsoft Visual Studio .NET 2003/VC7/BIN" + "/usr/local/bin" + "/usr/bin" + ) + + find_program(gp_cmd ${gp_tool} PATHS ${gp_cmd_paths}) + + if(NOT gp_cmd) + message(STATUS "warning: could not find '${gp_tool}' - cannot analyze prerequisites...") + return() + endif(NOT gp_cmd) + + if("${gp_tool}" STREQUAL "dumpbin") + # When running dumpbin, it also needs the "Common7/IDE" directory in the + # PATH. It will already be in the PATH if being run from a Visual Studio + # command prompt. Add it to the PATH here in case we are running from a + # different command prompt. + # + get_filename_component(gp_cmd_dir "${gp_cmd}" PATH) + get_filename_component(gp_cmd_dlls_dir "${gp_cmd_dir}/../../Common7/IDE" ABSOLUTE) + # Use cmake paths as a user may have a PATH element ending with a backslash. + # This will escape the list delimiter and create havoc! + if(EXISTS "${gp_cmd_dlls_dir}") + # only add to the path if it is not already in the path + set(gp_found_cmd_dlls_dir 0) + file(TO_CMAKE_PATH "$ENV{PATH}" env_path) + foreach(gp_env_path_element ${env_path}) + if("${gp_env_path_element}" STREQUAL "${gp_cmd_dlls_dir}") + set(gp_found_cmd_dlls_dir 1) + endif() + endforeach(gp_env_path_element) + + if(NOT gp_found_cmd_dlls_dir) + file(TO_NATIVE_PATH "${gp_cmd_dlls_dir}" gp_cmd_dlls_dir) + set(ENV{PATH} "$ENV{PATH};${gp_cmd_dlls_dir}") + endif() + endif(EXISTS "${gp_cmd_dlls_dir}") + endif("${gp_tool}" STREQUAL "dumpbin") + # + # + + if("${gp_tool}" STREQUAL "ldd") + set(old_ld_env "$ENV{LD_LIBRARY_PATH}") + foreach(dir ${exepath} ${dirs}) + set(ENV{LD_LIBRARY_PATH} "${dir}:$ENV{LD_LIBRARY_PATH}") + endforeach(dir) + endif("${gp_tool}" STREQUAL "ldd") + + + # Track new prerequisites at each new level of recursion. Start with an + # empty list at each level: + # + set(unseen_prereqs) + + # Run gp_cmd on the target: + # + execute_process( + COMMAND ${gp_cmd} ${gp_cmd_args} ${target} + OUTPUT_VARIABLE gp_cmd_ov + ) + + if("${gp_tool}" STREQUAL "ldd") + set(ENV{LD_LIBRARY_PATH} "${old_ld_env}") + endif("${gp_tool}" STREQUAL "ldd") + + if(verbose) + message(STATUS "") + message(STATUS "gp_cmd_ov='${gp_cmd_ov}'") + message(STATUS "") + endif(verbose) + + get_filename_component(target_dir "${target}" PATH) + + # Convert to a list of lines: + # + string(REGEX REPLACE ";" "\\\\;" candidates "${gp_cmd_ov}") + string(REGEX REPLACE "\n" "${eol_char};" candidates "${candidates}") + + # check for install id and remove it from list, since otool -L can include a + # reference to itself + set(gp_install_id) + if("${gp_tool}" STREQUAL "otool") + execute_process( + COMMAND otool -D ${target} + OUTPUT_VARIABLE gp_install_id_ov + ) + # second line is install name + string(REGEX REPLACE ".*:\n" "" gp_install_id "${gp_install_id_ov}") + if(gp_install_id) + # trim + string(REGEX MATCH "[^\n ].*[^\n ]" gp_install_id "${gp_install_id}") + #message("INSTALL ID is \"${gp_install_id}\"") + endif(gp_install_id) + endif("${gp_tool}" STREQUAL "otool") + + # Analyze each line for file names that match the regular expression: + # + foreach(candidate ${candidates}) + if("${candidate}" MATCHES "${gp_regex}") + + # Extract information from each candidate: + if(gp_regex_error AND "${candidate}" MATCHES "${gp_regex_error}") + string(REGEX REPLACE "${gp_regex_fallback}" "\\1" raw_item "${candidate}") + else(gp_regex_error AND "${candidate}" MATCHES "${gp_regex_error}") + string(REGEX REPLACE "${gp_regex}" "\\1" raw_item "${candidate}") + endif(gp_regex_error AND "${candidate}" MATCHES "${gp_regex_error}") + + if(gp_regex_cmp_count GREATER 1) + string(REGEX REPLACE "${gp_regex}" "\\2" raw_compat_version "${candidate}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" compat_major_version "${raw_compat_version}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" compat_minor_version "${raw_compat_version}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" compat_patch_version "${raw_compat_version}") + endif(gp_regex_cmp_count GREATER 1) + + if(gp_regex_cmp_count GREATER 2) + string(REGEX REPLACE "${gp_regex}" "\\3" raw_current_version "${candidate}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" current_major_version "${raw_current_version}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" current_minor_version "${raw_current_version}") + string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" current_patch_version "${raw_current_version}") + endif(gp_regex_cmp_count GREATER 2) + + # Use the raw_item as the list entries returned by this function. Use the + # gp_resolve_item function to resolve it to an actual full path file if + # necessary. + # + set(item "${raw_item}") + + # Add each item unless it is excluded: + # + set(add_item 1) + + if("${item}" STREQUAL "${gp_install_id}") + set(add_item 0) + endif("${item}" STREQUAL "${gp_install_id}") + + if(add_item AND ${exclude_system}) + set(type "") + gp_resolved_file_type("${target}" "${item}" "${exepath}" "${dirs}" type) + + if("${type}" STREQUAL "system") + set(add_item 0) + endif("${type}" STREQUAL "system") + endif(add_item AND ${exclude_system}) + + if(add_item) + list(LENGTH ${prerequisites_var} list_length_before_append) + gp_append_unique(${prerequisites_var} "${item}") + list(LENGTH ${prerequisites_var} list_length_after_append) + + if(${recurse}) + # If item was really added, this is the first time we have seen it. + # Add it to unseen_prereqs so that we can recursively add *its* + # prerequisites... + # + # But first: resolve its name to an absolute full path name such + # that the analysis tools can simply accept it as input. + # + if(NOT list_length_before_append EQUAL list_length_after_append) + gp_resolve_item("${target}" "${item}" "${exepath}" "${dirs}" resolved_item) + set(unseen_prereqs ${unseen_prereqs} "${resolved_item}") + endif(NOT list_length_before_append EQUAL list_length_after_append) + endif(${recurse}) + endif(add_item) + else("${candidate}" MATCHES "${gp_regex}") + if(verbose) + message(STATUS "ignoring non-matching line: '${candidate}'") + endif(verbose) + endif("${candidate}" MATCHES "${gp_regex}") + endforeach(candidate) + + list(LENGTH ${prerequisites_var} prerequisites_var_length) + if(prerequisites_var_length GREATER 0) + list(SORT ${prerequisites_var}) + endif(prerequisites_var_length GREATER 0) + if(${recurse}) + set(more_inputs ${unseen_prereqs}) + foreach(input ${more_inputs}) + get_prerequisites("${input}" ${prerequisites_var} ${exclude_system} ${recurse} "${exepath}" "${dirs}") + endforeach(input) + endif(${recurse}) + + set(${prerequisites_var} ${${prerequisites_var}} PARENT_SCOPE) +endfunction(get_prerequisites) + + +function(list_prerequisites target) + if("${ARGV1}" STREQUAL "") + set(all 1) + else("${ARGV1}" STREQUAL "") + set(all "${ARGV1}") + endif("${ARGV1}" STREQUAL "") + + if("${ARGV2}" STREQUAL "") + set(exclude_system 0) + else("${ARGV2}" STREQUAL "") + set(exclude_system "${ARGV2}") + endif("${ARGV2}" STREQUAL "") + + if("${ARGV3}" STREQUAL "") + set(verbose 0) + else("${ARGV3}" STREQUAL "") + set(verbose "${ARGV3}") + endif("${ARGV3}" STREQUAL "") + + set(count 0) + set(count_str "") + set(print_count "${verbose}") + set(print_prerequisite_type "${verbose}") + set(print_target "${verbose}") + set(type_str "") + + get_filename_component(exepath "${target}" PATH) + + set(prereqs "") + get_prerequisites("${target}" prereqs ${exclude_system} ${all} "${exepath}" "") + + if(print_target) + message(STATUS "File '${target}' depends on:") + endif(print_target) + + foreach(d ${prereqs}) + math(EXPR count "${count} + 1") + + if(print_count) + set(count_str "${count}. ") + endif(print_count) + + if(print_prerequisite_type) + gp_file_type("${target}" "${d}" type) + set(type_str " (${type})") + endif(print_prerequisite_type) + + message(STATUS "${count_str}${d}${type_str}") + endforeach(d) +endfunction(list_prerequisites) + + +function(list_prerequisites_by_glob glob_arg glob_exp) + message(STATUS "=============================================================================") + message(STATUS "List prerequisites of executables matching ${glob_arg} '${glob_exp}'") + message(STATUS "") + file(${glob_arg} file_list ${glob_exp}) + foreach(f ${file_list}) + is_file_executable("${f}" is_f_executable) + if(is_f_executable) + message(STATUS "=============================================================================") + list_prerequisites("${f}" ${ARGN}) + message(STATUS "") + endif(is_f_executable) + endforeach(f) +endfunction(list_prerequisites_by_glob) diff --git a/Modules/ITKCompatibility.cmake b/Modules/ITKCompatibility.cmake new file mode 100644 index 0000000..efd9c28 --- /dev/null +++ b/Modules/ITKCompatibility.cmake @@ -0,0 +1,17 @@ + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# work around an old bug in ITK prior to verison 3.0 +SET(TIFF_RIGHT_VERSION 1) + diff --git a/Modules/InstallRequiredSystemLibraries.cmake b/Modules/InstallRequiredSystemLibraries.cmake new file mode 100644 index 0000000..65d254a --- /dev/null +++ b/Modules/InstallRequiredSystemLibraries.cmake @@ -0,0 +1,401 @@ +# By including this file, all library files listed in the variable +# CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS will be installed with +# INSTALL(PROGRAMS ...) into bin for WIN32 and lib +# for non-WIN32. If CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP is set to TRUE +# before including this file, then the INSTALL command is not called. +# The user can use the variable CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS to use a +# custom install command and install them however they want. +# If it is the MSVC compiler, then the microsoft run +# time libraries will be found and automatically added to the +# CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS, and installed. +# If CMAKE_INSTALL_DEBUG_LIBRARIES is set and it is the MSVC +# compiler, then the debug libraries are installed when available. +# If CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY is set then only the debug +# libraries are installed when both debug and release are available. +# If CMAKE_INSTALL_MFC_LIBRARIES is set then the MFC run time +# libraries are installed as well as the CRT run time libraries. +# If CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION is set then the libraries are +# installed to that directory rather than the default. +# If CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS is NOT set, then this file +# warns about required files that do not exist. You can set this variable to +# ON before including this file to avoid the warning. For example, the Visual +# Studio Express editions do not include the redistributable files, so if you +# include this file on a machine with only VS Express installed, you'll get +# the warning. + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(MSVC) + FILE(TO_CMAKE_PATH "$ENV{SYSTEMROOT}" SYSTEMROOT) + + IF(CMAKE_CL_64) + IF(MSVC_VERSION GREATER 1599) + # VS 10 and later: + SET(CMAKE_MSVC_ARCH x64) + ELSE() + # VS 9 and earlier: + SET(CMAKE_MSVC_ARCH amd64) + ENDIF() + ELSE(CMAKE_CL_64) + SET(CMAKE_MSVC_ARCH x86) + ENDIF(CMAKE_CL_64) + + GET_FILENAME_COMPONENT(devenv_dir "${CMAKE_MAKE_PROGRAM}" PATH) + GET_FILENAME_COMPONENT(base_dir "${devenv_dir}/../.." ABSOLUTE) + + IF(MSVC70) + SET(__install__libs + "${SYSTEMROOT}/system32/msvcp70.dll" + "${SYSTEMROOT}/system32/msvcr70.dll" + ) + ENDIF(MSVC70) + + IF(MSVC71) + SET(__install__libs + "${SYSTEMROOT}/system32/msvcp71.dll" + "${SYSTEMROOT}/system32/msvcr71.dll" + ) + ENDIF(MSVC71) + + IF(MSVC80) + # Find the runtime library redistribution directory. + GET_FILENAME_COMPONENT(msvc_install_dir + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0;InstallDir]" ABSOLUTE) + FIND_PATH(MSVC80_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC80.CRT/Microsoft.VC80.CRT.manifest + PATHS + "${msvc_install_dir}/../../VC/redist" + "${base_dir}/VC/redist" + ) + MARK_AS_ADVANCED(MSVC80_REDIST_DIR) + SET(MSVC80_CRT_DIR "${MSVC80_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.CRT") + + # Install the manifest that allows DLLs to be loaded from the + # directory containing the executable. + IF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + SET(__install__libs + "${MSVC80_CRT_DIR}/Microsoft.VC80.CRT.manifest" + "${MSVC80_CRT_DIR}/msvcm80.dll" + "${MSVC80_CRT_DIR}/msvcp80.dll" + "${MSVC80_CRT_DIR}/msvcr80.dll" + ) + ENDIF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + + IF(CMAKE_INSTALL_DEBUG_LIBRARIES) + SET(MSVC80_CRT_DIR + "${MSVC80_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC80.DebugCRT") + SET(__install__libs ${__install__libs} + "${MSVC80_CRT_DIR}/Microsoft.VC80.DebugCRT.manifest" + "${MSVC80_CRT_DIR}/msvcm80d.dll" + "${MSVC80_CRT_DIR}/msvcp80d.dll" + "${MSVC80_CRT_DIR}/msvcr80d.dll" + ) + ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) + ENDIF(MSVC80) + + IF(MSVC90) + # Find the runtime library redistribution directory. + GET_FILENAME_COMPONENT(msvc_install_dir + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0;InstallDir]" ABSOLUTE) + GET_FILENAME_COMPONENT(msvc_express_install_dir + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\9.0;InstallDir]" ABSOLUTE) + FIND_PATH(MSVC90_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest + PATHS + "${msvc_install_dir}/../../VC/redist" + "${msvc_express_install_dir}/../../VC/redist" + "${base_dir}/VC/redist" + ) + MARK_AS_ADVANCED(MSVC90_REDIST_DIR) + SET(MSVC90_CRT_DIR "${MSVC90_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.CRT") + + # Install the manifest that allows DLLs to be loaded from the + # directory containing the executable. + IF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + SET(__install__libs + "${MSVC90_CRT_DIR}/Microsoft.VC90.CRT.manifest" + "${MSVC90_CRT_DIR}/msvcm90.dll" + "${MSVC90_CRT_DIR}/msvcp90.dll" + "${MSVC90_CRT_DIR}/msvcr90.dll" + ) + ENDIF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + + IF(CMAKE_INSTALL_DEBUG_LIBRARIES) + SET(MSVC90_CRT_DIR + "${MSVC90_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugCRT") + SET(__install__libs ${__install__libs} + "${MSVC90_CRT_DIR}/Microsoft.VC90.DebugCRT.manifest" + "${MSVC90_CRT_DIR}/msvcm90d.dll" + "${MSVC90_CRT_DIR}/msvcp90d.dll" + "${MSVC90_CRT_DIR}/msvcr90d.dll" + ) + ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) + ENDIF(MSVC90) + + MACRO(MSVCRT_FILES_FOR_VERSION version) + SET(v "${version}") + + # Find the runtime library redistribution directory. + GET_FILENAME_COMPONENT(msvc_install_dir + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${v}.0;InstallDir]" ABSOLUTE) + FIND_PATH(MSVC${v}_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.CRT + PATHS + "${msvc_install_dir}/../../VC/redist" + "${base_dir}/VC/redist" + "$ENV{ProgramFiles}/Microsoft Visual Studio ${v}.0/VC/redist" + "$ENV{ProgramFiles(x86)}/Microsoft Visual Studio ${v}.0/VC/redist" + ) + MARK_AS_ADVANCED(MSVC${v}_REDIST_DIR) + SET(MSVC${v}_CRT_DIR "${MSVC${v}_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.CRT") + + IF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + SET(__install__libs + "${MSVC${v}_CRT_DIR}/msvcp${v}0.dll" + "${MSVC${v}_CRT_DIR}/msvcr${v}0.dll" + ) + ENDIF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + + IF(CMAKE_INSTALL_DEBUG_LIBRARIES) + SET(MSVC${v}_CRT_DIR + "${MSVC${v}_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.DebugCRT") + SET(__install__libs ${__install__libs} + "${MSVC${v}_CRT_DIR}/msvcp${v}0d.dll" + "${MSVC${v}_CRT_DIR}/msvcr${v}0d.dll" + ) + ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) + ENDMACRO() + + IF(MSVC10) + MSVCRT_FILES_FOR_VERSION(10) + ENDIF() + + IF(MSVC11) + MSVCRT_FILES_FOR_VERSION(11) + ENDIF() + + IF(CMAKE_INSTALL_MFC_LIBRARIES) + IF(MSVC70) + SET(__install__libs ${__install__libs} + "${SYSTEMROOT}/system32/mfc70.dll" + ) + ENDIF(MSVC70) + + IF(MSVC71) + SET(__install__libs ${__install__libs} + "${SYSTEMROOT}/system32/mfc71.dll" + ) + ENDIF(MSVC71) + + IF(MSVC80) + IF(CMAKE_INSTALL_DEBUG_LIBRARIES) + SET(MSVC80_MFC_DIR + "${MSVC80_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC80.DebugMFC") + SET(__install__libs ${__install__libs} + "${MSVC80_MFC_DIR}/Microsoft.VC80.DebugMFC.manifest" + "${MSVC80_MFC_DIR}/mfc80d.dll" + "${MSVC80_MFC_DIR}/mfc80ud.dll" + "${MSVC80_MFC_DIR}/mfcm80d.dll" + "${MSVC80_MFC_DIR}/mfcm80ud.dll" + ) + ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) + + SET(MSVC80_MFC_DIR "${MSVC80_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFC") + # Install the manifest that allows DLLs to be loaded from the + # directory containing the executable. + IF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + SET(__install__libs ${__install__libs} + "${MSVC80_MFC_DIR}/Microsoft.VC80.MFC.manifest" + "${MSVC80_MFC_DIR}/mfc80.dll" + "${MSVC80_MFC_DIR}/mfc80u.dll" + "${MSVC80_MFC_DIR}/mfcm80.dll" + "${MSVC80_MFC_DIR}/mfcm80u.dll" + ) + ENDIF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + + # include the language dll's for vs8 as well as the actuall dll's + SET(MSVC80_MFCLOC_DIR "${MSVC80_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFCLOC") + # Install the manifest that allows DLLs to be loaded from the + # directory containing the executable. + SET(__install__libs ${__install__libs} + "${MSVC80_MFCLOC_DIR}/Microsoft.VC80.MFCLOC.manifest" + "${MSVC80_MFCLOC_DIR}/mfc80chs.dll" + "${MSVC80_MFCLOC_DIR}/mfc80cht.dll" + "${MSVC80_MFCLOC_DIR}/mfc80enu.dll" + "${MSVC80_MFCLOC_DIR}/mfc80esp.dll" + "${MSVC80_MFCLOC_DIR}/mfc80deu.dll" + "${MSVC80_MFCLOC_DIR}/mfc80fra.dll" + "${MSVC80_MFCLOC_DIR}/mfc80ita.dll" + "${MSVC80_MFCLOC_DIR}/mfc80jpn.dll" + "${MSVC80_MFCLOC_DIR}/mfc80kor.dll" + ) + ENDIF(MSVC80) + + IF(MSVC90) + IF(CMAKE_INSTALL_DEBUG_LIBRARIES) + SET(MSVC90_MFC_DIR + "${MSVC90_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC90.DebugMFC") + SET(__install__libs ${__install__libs} + "${MSVC90_MFC_DIR}/Microsoft.VC90.DebugMFC.manifest" + "${MSVC90_MFC_DIR}/mfc90d.dll" + "${MSVC90_MFC_DIR}/mfc90ud.dll" + "${MSVC90_MFC_DIR}/mfcm90d.dll" + "${MSVC90_MFC_DIR}/mfcm90ud.dll" + ) + ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) + + SET(MSVC90_MFC_DIR "${MSVC90_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFC") + # Install the manifest that allows DLLs to be loaded from the + # directory containing the executable. + IF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + SET(__install__libs ${__install__libs} + "${MSVC90_MFC_DIR}/Microsoft.VC90.MFC.manifest" + "${MSVC90_MFC_DIR}/mfc90.dll" + "${MSVC90_MFC_DIR}/mfc90u.dll" + "${MSVC90_MFC_DIR}/mfcm90.dll" + "${MSVC90_MFC_DIR}/mfcm90u.dll" + ) + ENDIF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + + # include the language dll's for vs9 as well as the actuall dll's + SET(MSVC90_MFCLOC_DIR "${MSVC90_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFCLOC") + # Install the manifest that allows DLLs to be loaded from the + # directory containing the executable. + SET(__install__libs ${__install__libs} + "${MSVC90_MFCLOC_DIR}/Microsoft.VC90.MFCLOC.manifest" + "${MSVC90_MFCLOC_DIR}/mfc90chs.dll" + "${MSVC90_MFCLOC_DIR}/mfc90cht.dll" + "${MSVC90_MFCLOC_DIR}/mfc90enu.dll" + "${MSVC90_MFCLOC_DIR}/mfc90esp.dll" + "${MSVC90_MFCLOC_DIR}/mfc90deu.dll" + "${MSVC90_MFCLOC_DIR}/mfc90fra.dll" + "${MSVC90_MFCLOC_DIR}/mfc90ita.dll" + "${MSVC90_MFCLOC_DIR}/mfc90jpn.dll" + "${MSVC90_MFCLOC_DIR}/mfc90kor.dll" + ) + ENDIF(MSVC90) + + MACRO(MFC_FILES_FOR_VERSION version) + SET(v "${version}") + + IF(CMAKE_INSTALL_DEBUG_LIBRARIES) + SET(MSVC${v}_MFC_DIR + "${MSVC${v}_REDIST_DIR}/Debug_NonRedist/${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.DebugMFC") + SET(__install__libs ${__install__libs} + "${MSVC${v}_MFC_DIR}/mfc${v}0d.dll" + "${MSVC${v}_MFC_DIR}/mfc${v}0ud.dll" + "${MSVC${v}_MFC_DIR}/mfcm${v}0d.dll" + "${MSVC${v}_MFC_DIR}/mfcm${v}0ud.dll" + ) + ENDIF(CMAKE_INSTALL_DEBUG_LIBRARIES) + + SET(MSVC${v}_MFC_DIR "${MSVC${v}_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.MFC") + IF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + SET(__install__libs ${__install__libs} + "${MSVC${v}_MFC_DIR}/mfc${v}0.dll" + "${MSVC${v}_MFC_DIR}/mfc${v}0u.dll" + "${MSVC${v}_MFC_DIR}/mfcm${v}0.dll" + "${MSVC${v}_MFC_DIR}/mfcm${v}0u.dll" + ) + ENDIF(NOT CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY) + + # include the language dll's as well as the actuall dll's + SET(MSVC${v}_MFCLOC_DIR "${MSVC${v}_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC${v}0.MFCLOC") + SET(__install__libs ${__install__libs} + "${MSVC${v}_MFCLOC_DIR}/mfc${v}0chs.dll" + "${MSVC${v}_MFCLOC_DIR}/mfc${v}0cht.dll" + "${MSVC${v}_MFCLOC_DIR}/mfc${v}0enu.dll" + "${MSVC${v}_MFCLOC_DIR}/mfc${v}0esp.dll" + "${MSVC${v}_MFCLOC_DIR}/mfc${v}0deu.dll" + "${MSVC${v}_MFCLOC_DIR}/mfc${v}0fra.dll" + "${MSVC${v}_MFCLOC_DIR}/mfc${v}0ita.dll" + "${MSVC${v}_MFCLOC_DIR}/mfc${v}0jpn.dll" + "${MSVC${v}_MFCLOC_DIR}/mfc${v}0kor.dll" + ) + ENDMACRO() + + IF(MSVC10) + MFC_FILES_FOR_VERSION(10) + ENDIF() + + IF(MSVC11) + MFC_FILES_FOR_VERSION(11) + ENDIF() + ENDIF(CMAKE_INSTALL_MFC_LIBRARIES) + + FOREACH(lib + ${__install__libs} + ) + IF(EXISTS ${lib}) + SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS + ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib}) + ELSE(EXISTS ${lib}) + IF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS) + MESSAGE(WARNING "system runtime library file does not exist: '${lib}'") + # This warning indicates an incomplete Visual Studio installation + # or a bug somewhere above here in this file. + # If you would like to avoid this warning, fix the real problem, or + # set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS before including + # this file. + ENDIF() + ENDIF(EXISTS ${lib}) + ENDFOREACH(lib) +ENDIF(MSVC) + +IF(WATCOM) + GET_FILENAME_COMPONENT( CompilerPath ${CMAKE_C_COMPILER} PATH ) + IF(WATCOM17) + SET( __install__libs ${CompilerPath}/clbr17.dll + ${CompilerPath}/mt7r17.dll ${CompilerPath}/plbr17.dll ) + ENDIF() + IF(WATCOM18) + SET( __install__libs ${CompilerPath}/clbr18.dll + ${CompilerPath}/mt7r18.dll ${CompilerPath}/plbr18.dll ) + ENDIF() + IF(WATCOM19) + SET( __install__libs ${CompilerPath}/clbr19.dll + ${CompilerPath}/mt7r19.dll ${CompilerPath}/plbr19.dll ) + ENDIF() + FOREACH(lib + ${__install__libs} + ) + IF(EXISTS ${lib}) + SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS + ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib}) + ELSE() + IF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS) + MESSAGE(WARNING "system runtime library file does not exist: '${lib}'") + # This warning indicates an incomplete Watcom installation + # or a bug somewhere above here in this file. + # If you would like to avoid this warning, fix the real problem, or + # set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS before including + # this file. + ENDIF() + ENDIF() + ENDFOREACH() +ENDIF() + + +# Include system runtime libraries in the installation if any are +# specified by CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS. +IF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS) + IF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP) + IF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION) + IF(WIN32) + SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION bin) + ELSE(WIN32) + SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION lib) + ENDIF(WIN32) + ENDIF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION) + INSTALL(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} + DESTINATION ${CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION}) + ENDIF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP) +ENDIF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS) diff --git a/Modules/IntelVSImplicitPath/CMakeLists.txt b/Modules/IntelVSImplicitPath/CMakeLists.txt new file mode 100644 index 0000000..96dc4e6 --- /dev/null +++ b/Modules/IntelVSImplicitPath/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required (VERSION 2.8) +project(IntelFortranImplicit Fortran) +add_custom_command( + OUTPUT output.cmake + COMMAND ${CMAKE_COMMAND} -P ${IntelFortranImplicit_SOURCE_DIR}/detect.cmake + ) +add_library(FortranLib hello.f output.cmake) diff --git a/Modules/IntelVSImplicitPath/detect.cmake b/Modules/IntelVSImplicitPath/detect.cmake new file mode 100644 index 0000000..20753be --- /dev/null +++ b/Modules/IntelVSImplicitPath/detect.cmake @@ -0,0 +1,9 @@ +# look at each path and try to find ifconsol.lib +set(LIB "$ENV{LIB}") +foreach(dir ${LIB}) + file(TO_CMAKE_PATH "${dir}" dir) + if(EXISTS "${dir}/ifconsol.lib") + file(WRITE output.cmake "list(APPEND implicit_dirs \"${dir}\")\n") + break() + endif() +endforeach() diff --git a/Modules/IntelVSImplicitPath/hello.f b/Modules/IntelVSImplicitPath/hello.f new file mode 100644 index 0000000..e69de29 diff --git a/Modules/KDE3Macros.cmake b/Modules/KDE3Macros.cmake new file mode 100644 index 0000000..5b76000 --- /dev/null +++ b/Modules/KDE3Macros.cmake @@ -0,0 +1,411 @@ +# + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# +# 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.) + +# See FindKDE3.cmake for documentation. +# +# this file contains the following macros: +# KDE3_ADD_DCOP_SKELS +# KDE3_ADD_DCOP_STUBS +# KDE3_ADD_MOC_FILES +# KDE3_ADD_UI_FILES +# KDE3_ADD_KCFG_FILES +# KDE3_AUTOMOC +# KDE3_INSTALL_LIBTOOL_FILE +# KDE3_CREATE_FINAL_FILE +# KDE3_ADD_KPART +# KDE3_ADD_KDEINIT_EXECUTABLE +# KDE3_ADD_EXECUTABLE + + +#neundorf@kde.org + +INCLUDE(AddFileDependencies) + +#create the kidl and skeletion file for dcop stuff +#usage: KDE_ADD_COP_SKELS(foo_SRCS ${dcop_headers}) +MACRO(KDE3_ADD_DCOP_SKELS _sources) + FOREACH (_current_FILE ${ARGN}) + + GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE) + GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE) + + SET(_skel ${CMAKE_CURRENT_BINARY_DIR}/${_basename}_skel.cpp) + SET(_kidl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.kidl) + + IF (NOT HAVE_${_basename}_KIDL_RULE) + SET(HAVE_${_basename}_KIDL_RULE ON) + + ADD_CUSTOM_COMMAND(OUTPUT ${_kidl} + COMMAND ${KDE3_DCOPIDL_EXECUTABLE} + ARGS ${_tmp_FILE} > ${_kidl} + DEPENDS ${_tmp_FILE} + ) + + ENDIF (NOT HAVE_${_basename}_KIDL_RULE) + + IF (NOT HAVE_${_basename}_SKEL_RULE) + SET(HAVE_${_basename}_SKEL_RULE ON) + + ADD_CUSTOM_COMMAND(OUTPUT ${_skel} + COMMAND ${KDE3_DCOPIDL2CPP_EXECUTABLE} + ARGS --c++-suffix cpp --no-signals --no-stub ${_kidl} + DEPENDS ${_kidl} + ) + + ENDIF (NOT HAVE_${_basename}_SKEL_RULE) + + SET(${_sources} ${${_sources}} ${_skel}) + + ENDFOREACH (_current_FILE) + +ENDMACRO(KDE3_ADD_DCOP_SKELS) + + +MACRO(KDE3_ADD_DCOP_STUBS _sources) + FOREACH (_current_FILE ${ARGN}) + + GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE) + + GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE) + + SET(_stub_CPP ${CMAKE_CURRENT_BINARY_DIR}/${_basename}_stub.cpp) + SET(_kidl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.kidl) + + IF (NOT HAVE_${_basename}_KIDL_RULE) + SET(HAVE_${_basename}_KIDL_RULE ON) + + + ADD_CUSTOM_COMMAND(OUTPUT ${_kidl} + COMMAND ${KDE3_DCOPIDL_EXECUTABLE} + ARGS ${_tmp_FILE} > ${_kidl} + DEPENDS ${_tmp_FILE} + ) + + ENDIF (NOT HAVE_${_basename}_KIDL_RULE) + + + IF (NOT HAVE_${_basename}_STUB_RULE) + SET(HAVE_${_basename}_STUB_RULE ON) + + ADD_CUSTOM_COMMAND(OUTPUT ${_stub_CPP} + COMMAND ${KDE3_DCOPIDL2CPP_EXECUTABLE} + ARGS --c++-suffix cpp --no-signals --no-skel ${_kidl} + DEPENDS ${_kidl} + ) + + ENDIF (NOT HAVE_${_basename}_STUB_RULE) + + SET(${_sources} ${${_sources}} ${_stub_CPP}) + + ENDFOREACH (_current_FILE) + +ENDMACRO(KDE3_ADD_DCOP_STUBS) + + +MACRO(KDE3_ADD_KCFG_FILES _sources) + FOREACH (_current_FILE ${ARGN}) + + GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE) + + GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE) + + FILE(READ ${_tmp_FILE} _contents) + STRING(REGEX REPLACE "^(.*\n)?File=([^\n]+)\n.*$" "\\2" _kcfg_FILE "${_contents}") + + SET(_src_FILE ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp) + SET(_header_FILE ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h) + + ADD_CUSTOM_COMMAND(OUTPUT ${_src_FILE} + COMMAND ${KDE3_KCFGC_EXECUTABLE} + ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_kcfg_FILE} ${_tmp_FILE} + DEPENDS ${_tmp_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/${_kcfg_FILE} ) + + SET(${_sources} ${${_sources}} ${_src_FILE}) + + ENDFOREACH (_current_FILE) + +ENDMACRO(KDE3_ADD_KCFG_FILES) + + +#create the moc files and add them to the list of sources +#usage: KDE_ADD_MOC_FILES(foo_SRCS ${moc_headers}) +MACRO(KDE3_ADD_MOC_FILES _sources) + FOREACH (_current_FILE ${ARGN}) + + GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE) + + GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE) + SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc.cpp) + + ADD_CUSTOM_COMMAND(OUTPUT ${_moc} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${_tmp_FILE} -o ${_moc} + DEPENDS ${_tmp_FILE} + ) + + SET(${_sources} ${${_sources}} ${_moc}) + + ENDFOREACH (_current_FILE) +ENDMACRO(KDE3_ADD_MOC_FILES) + + +GET_FILENAME_COMPONENT( KDE3_MODULE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) + +#create the implementation files from the ui files and add them to the list of sources +#usage: KDE_ADD_UI_FILES(foo_SRCS ${ui_files}) +MACRO(KDE3_ADD_UI_FILES _sources ) + FOREACH (_current_FILE ${ARGN}) + + GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE) + + GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE) + SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h) + SET(_src ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp) + SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc.cpp) + + ADD_CUSTOM_COMMAND(OUTPUT ${_header} + COMMAND ${QT_UIC_EXECUTABLE} + ARGS -L ${KDE3_LIB_DIR}/kde3/plugins/designer -nounload -o ${_header} ${CMAKE_CURRENT_SOURCE_DIR}/${_current_FILE} + DEPENDS ${_tmp_FILE} + ) + + ADD_CUSTOM_COMMAND(OUTPUT ${_src} + COMMAND ${CMAKE_COMMAND} + ARGS + -DKDE_UIC_PLUGIN_DIR:FILEPATH=${KDE3_LIB_DIR}/kde3/plugins/designer + -DKDE_UIC_EXECUTABLE:FILEPATH=${QT_UIC_EXECUTABLE} + -DKDE_UIC_FILE:FILEPATH=${_tmp_FILE} + -DKDE_UIC_CPP_FILE:FILEPATH=${_src} + -DKDE_UIC_H_FILE:FILEPATH=${_header} + -P ${KDE3_MODULE_DIR}/kde3uic.cmake + DEPENDS ${_header} + ) + + ADD_CUSTOM_COMMAND(OUTPUT ${_moc} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${_header} -o ${_moc} + DEPENDS ${_header} + ) + + SET(${_sources} ${${_sources}} ${_src} ${_moc} ) + + ENDFOREACH (_current_FILE) +ENDMACRO(KDE3_ADD_UI_FILES) + + +MACRO(KDE3_AUTOMOC) + SET(_matching_FILES ) + FOREACH (_current_FILE ${ARGN}) + + GET_FILENAME_COMPONENT(_abs_FILE ${_current_FILE} ABSOLUTE) + + # if "SKIP_AUTOMOC" is set to true, we will not handle this file here. + # here. this is required to make bouic work correctly: + # we need to add generated .cpp files to the sources (to compile them), + # but we cannot let automoc handle them, as the .cpp files don't exist yet when + # cmake is run for the very first time on them -> however the .cpp files might + # exist at a later run. at that time we need to skip them, so that we don't add two + # different rules for the same moc file + GET_SOURCE_FILE_PROPERTY(_skip ${_abs_FILE} SKIP_AUTOMOC) + + IF (EXISTS ${_abs_FILE} AND NOT _skip) + + FILE(READ ${_abs_FILE} _contents) + + GET_FILENAME_COMPONENT(_abs_PATH ${_abs_FILE} PATH) + + STRING(REGEX MATCHALL "#include +[^ ]+\\.moc[\">]" _match "${_contents}") + IF(_match) + FOREACH (_current_MOC_INC ${_match}) + STRING(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}") + + GET_FILENAME_COMPONENT(_basename ${_current_MOC} NAME_WE) +# SET(_header ${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.h) + SET(_header ${_abs_PATH}/${_basename}.h) + SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC}) + + ADD_CUSTOM_COMMAND(OUTPUT ${_moc} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${_header} -o ${_moc} + DEPENDS ${_header} + ) + + ADD_FILE_DEPENDENCIES(${_abs_FILE} ${_moc}) + + ENDFOREACH (_current_MOC_INC) + ENDIF(_match) + + ENDIF (EXISTS ${_abs_FILE} AND NOT _skip) + ENDFOREACH (_current_FILE) +ENDMACRO(KDE3_AUTOMOC) + +# only used internally by KDE3_INSTALL_ICONS +MACRO (_KDE3_ADD_ICON_INSTALL_RULE _install_SCRIPT _install_PATH _group _orig_NAME _install_NAME) + + # if the string doesn't match the pattern, the result is the full string, so all three have the same content + IF (NOT ${_group} STREQUAL ${_install_NAME} ) + SET(_icon_GROUP "actions") + + IF (${_group} STREQUAL "mime") + SET(_icon_GROUP "mimetypes") + ENDIF (${_group} STREQUAL "mime") + + IF (${_group} STREQUAL "filesys") + SET(_icon_GROUP "filesystems") + ENDIF (${_group} STREQUAL "filesys") + + IF (${_group} STREQUAL "device") + SET(_icon_GROUP "devices") + ENDIF (${_group} STREQUAL "device") + + IF (${_group} STREQUAL "app") + SET(_icon_GROUP "apps") + ENDIF (${_group} STREQUAL "app") + + IF (${_group} STREQUAL "action") + SET(_icon_GROUP "actions") + ENDIF (${_group} STREQUAL "action") + +# message(STATUS "icon: ${_current_ICON} size: ${_size} group: ${_group} name: ${_name}" ) + INSTALL(FILES ${_orig_NAME} DESTINATION ${_install_PATH}/${_icon_GROUP}/ RENAME ${_install_NAME} ) + ENDIF (NOT ${_group} STREQUAL ${_install_NAME} ) + +ENDMACRO (_KDE3_ADD_ICON_INSTALL_RULE) + + +MACRO (KDE3_INSTALL_ICONS _theme ) + SET(_defaultpath "${CMAKE_INSTALL_PREFIX}/share/icons") + # first the png icons + FILE(GLOB _icons *.png) + FOREACH (_current_ICON ${_icons} ) + STRING(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\1" _size "${_current_ICON}") + STRING(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\2" _group "${_current_ICON}") + STRING(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\3" _name "${_current_ICON}") + _KDE3_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake + ${_defaultpath}/${_theme}/${_size}x${_size} + ${_group} ${_current_ICON} ${_name}) + ENDFOREACH (_current_ICON) + + # and now the svg icons + FILE(GLOB _icons *.svgz) + FOREACH (_current_ICON ${_icons} ) + STRING(REGEX REPLACE "^.*/crsc\\-([a-z]+)\\-(.+\\.svgz)$" "\\1" _group "${_current_ICON}") + STRING(REGEX REPLACE "^.*/crsc\\-([a-z]+)\\-(.+\\.svgz)$" "\\2" _name "${_current_ICON}") + _KDE3_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake + ${_defaultpath}/${_theme}/scalable + ${_group} ${_current_ICON} ${_name}) + ENDFOREACH (_current_ICON) + +ENDMACRO (KDE3_INSTALL_ICONS) + +MACRO(KDE3_INSTALL_LIBTOOL_FILE _target) + GET_TARGET_PROPERTY(_target_location ${_target} LOCATION) + + GET_FILENAME_COMPONENT(_laname ${_target_location} NAME_WE) + GET_FILENAME_COMPONENT(_soname ${_target_location} NAME) + SET(_laname ${CMAKE_CURRENT_BINARY_DIR}/${_laname}.la) + + FILE(WRITE ${_laname} "# ${_laname} - a libtool library file, generated by cmake \n") + FILE(APPEND ${_laname} "# The name that we can dlopen(3).\n") + FILE(APPEND ${_laname} "dlname='${_soname}'\n") + FILE(APPEND ${_laname} "# Names of this library\n") + IF(CYGWIN) + FILE(APPEND ${_laname} "library_names='${_soname}'\n") + ELSE(CYGWIN) + FILE(APPEND ${_laname} "library_names='${_soname} ${_soname} ${_soname}'\n") + ENDIF(CYGWIN) + FILE(APPEND ${_laname} "# The name of the static archive\n") + FILE(APPEND ${_laname} "old_library=''\n") + FILE(APPEND ${_laname} "# Libraries that this one depends upon.\n") + FILE(APPEND ${_laname} "dependency_libs=''\n") +# FILE(APPEND ${_laname} "dependency_libs='${${_target}_LIB_DEPENDS}'\n") + FILE(APPEND ${_laname} "# Version information.\ncurrent=0\nage=0\nrevision=0\n") + FILE(APPEND ${_laname} "# Is this an already installed library?\ninstalled=yes\n") + FILE(APPEND ${_laname} "# Should we warn about portability when linking against -modules?\nshouldnotlink=yes\n") + FILE(APPEND ${_laname} "# Files to dlopen/dlpreopen\ndlopen=''\ndlpreopen=''\n") + FILE(APPEND ${_laname} "# Directory that this library needs to be installed in:\n") + FILE(APPEND ${_laname} "libdir='${CMAKE_INSTALL_PREFIX}/lib/kde3'\n") + + INSTALL_FILES(${KDE3_LIBTOOL_DIR} FILES ${_laname}) +ENDMACRO(KDE3_INSTALL_LIBTOOL_FILE) + + +MACRO(KDE3_CREATE_FINAL_FILE _filename) + FILE(WRITE ${_filename} "//autogenerated file\n") + FOREACH (_current_FILE ${ARGN}) + FILE(APPEND ${_filename} "#include \"${_current_FILE}\"\n") + ENDFOREACH (_current_FILE) + +ENDMACRO(KDE3_CREATE_FINAL_FILE) + + +# OPTION(KDE3_ENABLE_FINAL "Enable final all-in-one compilation") +OPTION(KDE3_BUILD_TESTS "Build the tests") + + +MACRO(KDE3_ADD_KPART _target_NAME _with_PREFIX) +#is the first argument is "WITH_PREFIX" then keep the standard "lib" prefix, otherwise SET the prefix empty + IF (${_with_PREFIX} STREQUAL "WITH_PREFIX") + SET(_first_SRC) + ELSE (${_with_PREFIX} STREQUAL "WITH_PREFIX") + SET(_first_SRC ${_with_PREFIX}) + ENDIF (${_with_PREFIX} STREQUAL "WITH_PREFIX") + +# IF (KDE3_ENABLE_FINAL) +# KDE3_CREATE_FINAL_FILE(${_target_NAME}_final.cpp ${_first_SRC} ${ARGN}) +# ADD_LIBRARY(${_target_NAME} MODULE ${_target_NAME}_final.cpp) +# ELSE (KDE3_ENABLE_FINAL) + ADD_LIBRARY(${_target_NAME} MODULE ${_first_SRC} ${ARGN}) +# ENDIF (KDE3_ENABLE_FINAL) + + IF(_first_SRC) + SET_TARGET_PROPERTIES(${_target_NAME} PROPERTIES PREFIX "") + ENDIF(_first_SRC) + + KDE3_INSTALL_LIBTOOL_FILE(${_target_NAME}) + +ENDMACRO(KDE3_ADD_KPART) + + +MACRO(KDE3_ADD_KDEINIT_EXECUTABLE _target_NAME ) + +# IF (KDE3_ENABLE_FINAL) +# KDE3_CREATE_FINAL_FILE(${_target_NAME}_final.cpp ${ARGN}) +# ADD_LIBRARY(kdeinit_${_target_NAME} SHARED ${_target_NAME}_final.cpp) +# ELSE (KDE3_ENABLE_FINAL) + ADD_LIBRARY(kdeinit_${_target_NAME} SHARED ${ARGN} ) +# ENDIF (KDE3_ENABLE_FINAL) + + CONFIGURE_FILE(${KDE3_MODULE_DIR}/kde3init_dummy.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp) + + ADD_EXECUTABLE( ${_target_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp ) + TARGET_LINK_LIBRARIES( ${_target_NAME} kdeinit_${_target_NAME} ) + +ENDMACRO(KDE3_ADD_KDEINIT_EXECUTABLE) + + +MACRO(KDE3_ADD_EXECUTABLE _target_NAME ) + +# IF (KDE3_ENABLE_FINAL) +# KDE3_CREATE_FINAL_FILE(${_target_NAME}_final.cpp ${ARGN}) +# ADD_EXECUTABLE(${_target_NAME} ${_target_NAME}_final.cpp) +# ELSE (KDE3_ENABLE_FINAL) + ADD_EXECUTABLE(${_target_NAME} ${ARGN} ) +# ENDIF (KDE3_ENABLE_FINAL) + +ENDMACRO(KDE3_ADD_EXECUTABLE) + + diff --git a/Modules/MacOSXBundleInfo.plist.in b/Modules/MacOSXBundleInfo.plist.in new file mode 100644 index 0000000..a466dc7 --- /dev/null +++ b/Modules/MacOSXBundleInfo.plist.in @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${MACOSX_BUNDLE_EXECUTABLE_NAME} + CFBundleGetInfoString + ${MACOSX_BUNDLE_INFO_STRING} + CFBundleIconFile + ${MACOSX_BUNDLE_ICON_FILE} + CFBundleIdentifier + ${MACOSX_BUNDLE_GUI_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleLongVersionString + ${MACOSX_BUNDLE_LONG_VERSION_STRING} + CFBundleName + ${MACOSX_BUNDLE_BUNDLE_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + CFBundleSignature + ???? + CFBundleVersion + ${MACOSX_BUNDLE_BUNDLE_VERSION} + CSResourcesFileMapped + + LSRequiresCarbon + + NSHumanReadableCopyright + ${MACOSX_BUNDLE_COPYRIGHT} + + diff --git a/Modules/MacOSXFrameworkInfo.plist.in b/Modules/MacOSXFrameworkInfo.plist.in new file mode 100644 index 0000000..18eaef2 --- /dev/null +++ b/Modules/MacOSXFrameworkInfo.plist.in @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${MACOSX_FRAMEWORK_NAME} + CFBundleIconFile + ${MACOSX_FRAMEWORK_ICON_FILE} + CFBundleIdentifier + ${MACOSX_FRAMEWORK_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + ${MACOSX_FRAMEWORK_BUNDLE_VERSION} + CFBundleShortVersionString + ${MACOSX_FRAMEWORK_SHORT_VERSION_STRING} + CSResourcesFileMapped + + + diff --git a/Modules/MacroAddFileDependencies.cmake b/Modules/MacroAddFileDependencies.cmake new file mode 100644 index 0000000..527447b --- /dev/null +++ b/Modules/MacroAddFileDependencies.cmake @@ -0,0 +1,33 @@ +# - MACRO_ADD_FILE_DEPENDENCIES(<_file> depend_files...) +# Using the macro MACRO_ADD_FILE_DEPENDENCIES() is discouraged. There are usually +# better ways to specify the correct dependencies. +# +# MACRO_ADD_FILE_DEPENDENCIES(<_file> depend_files...) is just a convenience +# wrapper around the OBJECT_DEPENDS source file property. You can just +# use SET_PROPERTY(SOURCE APPEND PROPERTY OBJECT_DEPENDS depend_files) instead. + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +MACRO (MACRO_ADD_FILE_DEPENDENCIES _file) + + GET_SOURCE_FILE_PROPERTY(_deps ${_file} OBJECT_DEPENDS) + IF (_deps) + SET(_deps ${_deps} ${ARGN}) + ELSE (_deps) + SET(_deps ${ARGN}) + ENDIF (_deps) + + SET_SOURCE_FILES_PROPERTIES(${_file} PROPERTIES OBJECT_DEPENDS "${_deps}") + +ENDMACRO (MACRO_ADD_FILE_DEPENDENCIES) diff --git a/Modules/NSIS.InstallOptions.ini.in b/Modules/NSIS.InstallOptions.ini.in new file mode 100644 index 0000000..d92d779 --- /dev/null +++ b/Modules/NSIS.InstallOptions.ini.in @@ -0,0 +1,46 @@ +[Settings] +NumFields=5 + +[Field 1] +Type=label +Text=By default @CPACK_PACKAGE_INSTALL_DIRECTORY@ does not add its directory to the system PATH. +Left=0 +Right=-1 +Top=0 +Bottom=20 + +[Field 2] +Type=radiobutton +Text=Do not add @CPACK_PACKAGE_NAME@ to the system PATH +Left=0 +Right=-1 +Top=30 +Bottom=40 +State=1 + +[Field 3] +Type=radiobutton +Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for all users +Left=0 +Right=-1 +Top=40 +Bottom=50 +State=0 + +[Field 4] +Type=radiobutton +Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for current user +Left=0 +Right=-1 +Top=50 +Bottom=60 +State=0 + +[Field 5] +Type=CheckBox +Text=Create @CPACK_PACKAGE_NAME@ Desktop Icon +Left=0 +Right=-1 +Top=80 +Bottom=90 +State=0 diff --git a/Modules/NSIS.template.in b/Modules/NSIS.template.in new file mode 100644 index 0000000..819cc5c --- /dev/null +++ b/Modules/NSIS.template.in @@ -0,0 +1,949 @@ +; CPack install script designed for a nmake build + +;-------------------------------- +; You must define these values + + !define VERSION "@CPACK_PACKAGE_VERSION@" + !define PATCH "@CPACK_PACKAGE_VERSION_PATCH@" + !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" + +;-------------------------------- +;Variables + + Var MUI_TEMP + Var STARTMENU_FOLDER + Var SV_ALLUSERS + Var START_MENU + Var DO_NOT_ADD_TO_PATH + Var ADD_TO_PATH_ALL_USERS + Var ADD_TO_PATH_CURRENT_USER + Var INSTALL_DESKTOP + Var IS_DEFAULT_INSTALLDIR +;-------------------------------- +;Include Modern UI + + !include "MUI.nsh" + + ;Default installation folder + InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + +;-------------------------------- +;General + + ;Name and file + Name "@CPACK_NSIS_PACKAGE_NAME@" + OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" + + ;Set compression + SetCompressor @CPACK_NSIS_COMPRESSOR@ + +@CPACK_NSIS_DEFINES@ + + !include Sections.nsh + +;--- Component support macros: --- +; The code for the add/remove functionality is from: +; http://nsis.sourceforge.net/Add/Remove_Functionality +; It has been modified slightly and extended to provide +; inter-component dependencies. +Var AR_SecFlags +Var AR_RegFlags +@CPACK_NSIS_SECTION_SELECTED_VARS@ + +; Loads the "selected" flag for the section named SecName into the +; variable VarName. +!macro LoadSectionSelectedIntoVar SecName VarName + SectionGetFlags ${${SecName}} $${VarName} + IntOp $${VarName} $${VarName} & ${SF_SELECTED} ;Turn off all other bits +!macroend + +; Loads the value of a variable... can we get around this? +!macro LoadVar VarName + IntOp $R0 0 + $${VarName} +!macroend + +; Sets the value of a variable +!macro StoreVar VarName IntValue + IntOp $${VarName} 0 + ${IntValue} +!macroend + +!macro InitSection SecName + ; This macro reads component installed flag from the registry and + ;changes checked state of the section on the components page. + ;Input: section index constant name specified in Section command. + + ClearErrors + ;Reading component status from registry + ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed" + IfErrors "default_${SecName}" + ;Status will stay default if registry value not found + ;(component was never installed) + IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits + SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading default section flags + IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE ;Turn lowest (enabled) bit off + IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit + + ; Note whether this component was installed before + !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags + IntOp $R0 $AR_RegFlags & $AR_RegFlags + + ;Writing modified flags + SectionSetFlags ${${SecName}} $AR_SecFlags + + "default_${SecName}:" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected +!macroend + +!macro FinishSection SecName + ; This macro reads section flag set by user and removes the section + ;if it is not selected. + ;Then it writes component installed flag to registry + ;Input: section index constant name specified in Section command. + + SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading section flags + ;Checking lowest bit: + IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED} + IntCmp $AR_SecFlags 1 "leave_${SecName}" + ;Section is not selected: + ;Calling Section uninstall macro and writing zero installed flag + !insertmacro "Remove_${${SecName}}" + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ + "Installed" 0 + Goto "exit_${SecName}" + + "leave_${SecName}:" + ;Section is selected: + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ + "Installed" 1 + + "exit_${SecName}:" +!macroend + +!macro RemoveSection SecName + ; This macro is used to call section's Remove_... macro + ;from the uninstaller. + ;Input: section index constant name specified in Section command. + + !insertmacro "Remove_${${SecName}}" +!macroend + +; Determine whether the selection of SecName changed +!macro MaybeSelectionChanged SecName + !insertmacro LoadVar ${SecName}_selected + SectionGetFlags ${${SecName}} $R1 + IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits + + ; See if the status has changed: + IntCmp $R0 $R1 "${SecName}_unchanged" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected + + IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected" + !insertmacro "Deselect_required_by_${SecName}" + goto "${SecName}_unchanged" + + "${SecName}_was_selected:" + !insertmacro "Select_${SecName}_depends" + + "${SecName}_unchanged:" +!macroend +;--- End of Add/Remove macros --- + +;-------------------------------- +;Interface Settings + + !define MUI_HEADERIMAGE + !define MUI_ABORTWARNING + +;-------------------------------- +; path functions + +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 + +;---------------------------------------- +; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02" +;---------------------------------------- +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 +;==================================================== +; get_NT_environment +; Returns: the selected environment +; Output : head of the stack +;==================================================== +!macro select_NT_profile UN +Function ${UN}select_NT_profile + StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single + DetailPrint "Selected environment for all users" + Push "all" + Return + environment_single: + DetailPrint "Selected environment for current user only." + Push "current" + Return +FunctionEnd +!macroend +!insertmacro select_NT_profile "" +!insertmacro select_NT_profile "un." +;---------------------------------------------------- +!define NT_current_env 'HKCU "Environment"' +!define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + +!ifndef WriteEnvStr_RegKey + !ifdef ALL_USERS + !define WriteEnvStr_RegKey \ + 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + !else + !define WriteEnvStr_RegKey 'HKCU "Environment"' + !endif +!endif + +; AddToPath - Adds the given dir to the search path. +; Input - head of the stack +; Note - Win9x systems requires reboot + +Function AddToPath + Exch $0 + Push $1 + Push $2 + Push $3 + + # don't add if the path doesn't exist + IfFileExists "$0\*.*" "" AddToPath_done + + ReadEnvStr $1 PATH + ; if the path is too long for a NSIS variable NSIS will return a 0 + ; length string. If we find that, then warn and skip any path + ; modification as it will trash the existing path. + StrLen $2 $1 + IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done + CheckPathLength_ShowPathWarning: + Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!" + Goto AddToPath_done + CheckPathLength_Done: + Push "$1;" + Push "$0;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + Push "$1;" + Push "$0\;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + GetFullPathName /SHORT $3 $0 + Push "$1;" + Push "$3;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + Push "$1;" + Push "$3\;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + + Call IsNT + Pop $1 + StrCmp $1 1 AddToPath_NT + ; Not on NT + StrCpy $1 $WINDIR 2 + FileOpen $1 "$1\autoexec.bat" a + FileSeek $1 -1 END + FileReadByte $1 $2 + IntCmp $2 26 0 +2 +2 # DOS EOF + FileSeek $1 -1 END # write over EOF + FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n" + FileClose $1 + SetRebootFlag true + Goto AddToPath_done + + AddToPath_NT: + StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey + ReadRegStr $1 ${NT_current_env} "PATH" + Goto DoTrim + ReadAllKey: + ReadRegStr $1 ${NT_all_env} "PATH" + DoTrim: + StrCmp $1 "" AddToPath_NTdoIt + Push $1 + Call Trim + Pop $1 + StrCpy $0 "$1;$0" + AddToPath_NTdoIt: + StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey + WriteRegExpandStr ${NT_current_env} "PATH" $0 + Goto DoSend + WriteAllKey: + WriteRegExpandStr ${NT_all_env} "PATH" $0 + DoSend: + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + AddToPath_done: + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + + +; RemoveFromPath - Remove a given dir from the path +; Input: head of the stack + +Function un.RemoveFromPath + Exch $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + + IntFmt $6 "%c" 26 # DOS EOF + + Call un.IsNT + Pop $1 + StrCmp $1 1 unRemoveFromPath_NT + ; Not on NT + StrCpy $1 $WINDIR 2 + FileOpen $1 "$1\autoexec.bat" r + GetTempFileName $4 + FileOpen $2 $4 w + GetFullPathName /SHORT $0 $0 + StrCpy $0 "SET PATH=%PATH%;$0" + Goto unRemoveFromPath_dosLoop + + unRemoveFromPath_dosLoop: + FileRead $1 $3 + StrCpy $5 $3 1 -1 # read last char + StrCmp $5 $6 0 +2 # if DOS EOF + StrCpy $3 $3 -1 # remove DOS EOF so we can compare + StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "" unRemoveFromPath_dosLoopEnd + FileWrite $2 $3 + Goto unRemoveFromPath_dosLoop + unRemoveFromPath_dosLoopRemoveLine: + SetRebootFlag true + Goto unRemoveFromPath_dosLoop + + unRemoveFromPath_dosLoopEnd: + FileClose $2 + FileClose $1 + StrCpy $1 $WINDIR 2 + Delete "$1\autoexec.bat" + CopyFiles /SILENT $4 "$1\autoexec.bat" + Delete $4 + Goto unRemoveFromPath_done + + unRemoveFromPath_NT: + StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey + ReadRegStr $1 ${NT_current_env} "PATH" + Goto unDoTrim + unReadAllKey: + ReadRegStr $1 ${NT_all_env} "PATH" + unDoTrim: + StrCpy $5 $1 1 -1 # copy last char + StrCmp $5 ";" +2 # if last char != ; + StrCpy $1 "$1;" # append ; + Push $1 + Push "$0;" + Call un.StrStr ; Find `$0;` in $1 + Pop $2 ; pos of our dir + StrCmp $2 "" unRemoveFromPath_done + ; else, it is in path + # $0 - path to add + # $1 - path var + StrLen $3 "$0;" + StrLen $4 $2 + StrCpy $5 $1 -$4 # $5 is now the part before the path to remove + StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove + StrCpy $3 $5$6 + + StrCpy $5 $3 1 -1 # copy last char + StrCmp $5 ";" 0 +2 # if last char == ; + StrCpy $3 $3 -1 # remove last char + + StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey + WriteRegExpandStr ${NT_current_env} "PATH" $3 + Goto unDoSend + unWriteAllKey: + WriteRegExpandStr ${NT_all_env} "PATH" $3 + unDoSend: + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + unRemoveFromPath_done: + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Uninstall sutff +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +########################################### +# Utility Functions # +########################################### + +;==================================================== +; IsNT - Returns 1 if the current system is NT, 0 +; otherwise. +; Output: head of the stack +;==================================================== +; IsNT +; no input +; output, top of the stack = 1 if NT or 0 if not +; +; Usage: +; Call IsNT +; Pop $R0 +; ($R0 at this point is 1 or 0) + +!macro IsNT un +Function ${un}IsNT + Push $0 + ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion + StrCmp $0 "" 0 IsNT_yes + ; we are not NT. + Pop $0 + Push 0 + Return + + IsNT_yes: + ; NT!!! + Pop $0 + Push 1 +FunctionEnd +!macroend +!insertmacro IsNT "" +!insertmacro IsNT "un." + +; StrStr +; input, top of stack = string to search for +; top of stack-1 = string to search in +; output, top of stack (replaces with the portion of the string remaining) +; modifies no other variables. +; +; Usage: +; Push "this is a long ass string" +; Push "ass" +; Call StrStr +; Pop $R0 +; ($R0 at this point is "ass string") + +!macro StrStr un +Function ${un}StrStr +Exch $R1 ; st=haystack,old$R1, $R1=needle + Exch ; st=old$R1,haystack + Exch $R2 ; st=old$R1,old$R2, $R2=haystack + Push $R3 + Push $R4 + Push $R5 + StrLen $R3 $R1 + StrCpy $R4 0 + ; $R1=needle + ; $R2=haystack + ; $R3=len(needle) + ; $R4=cnt + ; $R5=tmp + loop: + StrCpy $R5 $R2 $R3 $R4 + StrCmp $R5 $R1 done + StrCmp $R5 "" done + IntOp $R4 $R4 + 1 + Goto loop +done: + StrCpy $R1 $R2 "" $R4 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Exch $R1 +FunctionEnd +!macroend +!insertmacro StrStr "" +!insertmacro StrStr "un." + +Function Trim ; Added by Pelaca + Exch $R1 + Push $R2 +Loop: + StrCpy $R2 "$R1" 1 -1 + StrCmp "$R2" " " RTrim + StrCmp "$R2" "$\n" RTrim + StrCmp "$R2" "$\r" RTrim + StrCmp "$R2" ";" RTrim + GoTo Done +RTrim: + StrCpy $R1 "$R1" -1 + Goto Loop +Done: + Pop $R2 + Exch $R1 +FunctionEnd + +Function ConditionalAddToRegisty + Pop $0 + Pop $1 + StrCmp "$0" "" ConditionalAddToRegisty_EmptyString + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \ + "$1" "$0" + ;MessageBox MB_OK "Set Registry: '$1' to '$0'" + DetailPrint "Set install registry entry: '$1' to '$0'" + ConditionalAddToRegisty_EmptyString: +FunctionEnd + +;-------------------------------- + +!ifdef CPACK_USES_DOWNLOAD +Function DownloadFile + IfFileExists $INSTDIR\* +2 + CreateDirectory $INSTDIR + Pop $0 + + ; Skip if already downloaded + IfFileExists $INSTDIR\$0 0 +2 + Return + + StrCpy $1 "@CPACK_DOWNLOAD_SITE@" + + try_again: + NSISdl::download "$1/$0" "$INSTDIR\$0" + + Pop $1 + StrCmp $1 "success" success + StrCmp $1 "Cancelled" cancel + MessageBox MB_OK "Download failed: $1" + cancel: + Return + success: +FunctionEnd +!endif + +;-------------------------------- +; Installation types +@CPACK_NSIS_INSTALLATION_TYPES@ + +;-------------------------------- +; Component sections +@CPACK_NSIS_COMPONENT_SECTIONS@ + +;-------------------------------- +; Define some macro setting for the gui +@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@ +@CPACK_NSIS_INSTALLER_ICON_CODE@ +@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@ +@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@ + +;-------------------------------- +;Pages + !insertmacro MUI_PAGE_WELCOME + + !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" + Page custom InstallOptionsPage + !insertmacro MUI_PAGE_DIRECTORY + + ;Start Menu Folder Page Configuration + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER + + @CPACK_NSIS_PAGE_COMPONENTS@ + + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" ;first language is the default language + !insertmacro MUI_LANGUAGE "Albanian" + !insertmacro MUI_LANGUAGE "Arabic" + !insertmacro MUI_LANGUAGE "Basque" + !insertmacro MUI_LANGUAGE "Belarusian" + !insertmacro MUI_LANGUAGE "Bosnian" + !insertmacro MUI_LANGUAGE "Breton" + !insertmacro MUI_LANGUAGE "Bulgarian" + !insertmacro MUI_LANGUAGE "Croatian" + !insertmacro MUI_LANGUAGE "Czech" + !insertmacro MUI_LANGUAGE "Danish" + !insertmacro MUI_LANGUAGE "Dutch" + !insertmacro MUI_LANGUAGE "Estonian" + !insertmacro MUI_LANGUAGE "Farsi" + !insertmacro MUI_LANGUAGE "Finnish" + !insertmacro MUI_LANGUAGE "French" + !insertmacro MUI_LANGUAGE "German" + !insertmacro MUI_LANGUAGE "Greek" + !insertmacro MUI_LANGUAGE "Hebrew" + !insertmacro MUI_LANGUAGE "Hungarian" + !insertmacro MUI_LANGUAGE "Icelandic" + !insertmacro MUI_LANGUAGE "Indonesian" + !insertmacro MUI_LANGUAGE "Irish" + !insertmacro MUI_LANGUAGE "Italian" + !insertmacro MUI_LANGUAGE "Japanese" + !insertmacro MUI_LANGUAGE "Korean" + !insertmacro MUI_LANGUAGE "Kurdish" + !insertmacro MUI_LANGUAGE "Latvian" + !insertmacro MUI_LANGUAGE "Lithuanian" + !insertmacro MUI_LANGUAGE "Luxembourgish" + !insertmacro MUI_LANGUAGE "Macedonian" + !insertmacro MUI_LANGUAGE "Malay" + !insertmacro MUI_LANGUAGE "Mongolian" + !insertmacro MUI_LANGUAGE "Norwegian" + !insertmacro MUI_LANGUAGE "Polish" + !insertmacro MUI_LANGUAGE "Portuguese" + !insertmacro MUI_LANGUAGE "PortugueseBR" + !insertmacro MUI_LANGUAGE "Romanian" + !insertmacro MUI_LANGUAGE "Russian" + !insertmacro MUI_LANGUAGE "Serbian" + !insertmacro MUI_LANGUAGE "SerbianLatin" + !insertmacro MUI_LANGUAGE "SimpChinese" + !insertmacro MUI_LANGUAGE "Slovak" + !insertmacro MUI_LANGUAGE "Slovenian" + !insertmacro MUI_LANGUAGE "Spanish" + !insertmacro MUI_LANGUAGE "Swedish" + !insertmacro MUI_LANGUAGE "Thai" + !insertmacro MUI_LANGUAGE "TradChinese" + !insertmacro MUI_LANGUAGE "Turkish" + !insertmacro MUI_LANGUAGE "Ukrainian" + !insertmacro MUI_LANGUAGE "Welsh" + + +;-------------------------------- +;Reserve Files + + ;These files should be inserted before other files in the data block + ;Keep these lines before any File command + ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) + + ReserveFile "NSIS.InstallOptions.ini" + !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +;-------------------------------- +;Installer Sections + +Section "-Core installation" + ;Use the entire tree produced by the INSTALL target. Keep the + ;list of directories here in sync with the RMDir commands below. + SetOutPath "$INSTDIR" + @CPACK_NSIS_FULL_INSTALL@ + + ;Store installation folder + WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + Push "DisplayName" + Push "@CPACK_NSIS_DISPLAY_NAME@" + Call ConditionalAddToRegisty + Push "DisplayVersion" + Push "@CPACK_PACKAGE_VERSION@" + Call ConditionalAddToRegisty + Push "Publisher" + Push "@CPACK_PACKAGE_VENDOR@" + Call ConditionalAddToRegisty + Push "UninstallString" + Push "$INSTDIR\Uninstall.exe" + Call ConditionalAddToRegisty + Push "NoRepair" + Push "1" + Call ConditionalAddToRegisty + + !ifdef CPACK_NSIS_ADD_REMOVE + ;Create add/remove functionality + Push "ModifyPath" + Push "$INSTDIR\AddRemove.exe" + Call ConditionalAddToRegisty + !else + Push "NoModify" + Push "1" + Call ConditionalAddToRegisty + !endif + + ; Optional registration + Push "DisplayIcon" + Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" + Call ConditionalAddToRegisty + Push "HelpLink" + Push "@CPACK_NSIS_HELP_LINK@" + Call ConditionalAddToRegisty + Push "URLInfoAbout" + Push "@CPACK_NSIS_URL_INFO_ABOUT@" + Call ConditionalAddToRegisty + Push "Contact" + Push "@CPACK_NSIS_CONTACT@" + Call ConditionalAddToRegisty + !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State" + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + + ;Create shortcuts + CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" +@CPACK_NSIS_CREATE_ICONS@ +@CPACK_NSIS_CREATE_ICONS_EXTRA@ + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + + ;Read a value from an InstallOptions INI file + !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" + !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" + !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State" + + ; Write special uninstall registry entries + Push "StartMenu" + Push "$STARTMENU_FOLDER" + Call ConditionalAddToRegisty + Push "DoNotAddToPath" + Push "$DO_NOT_ADD_TO_PATH" + Call ConditionalAddToRegisty + Push "AddToPathAllUsers" + Push "$ADD_TO_PATH_ALL_USERS" + Call ConditionalAddToRegisty + Push "AddToPathCurrentUser" + Push "$ADD_TO_PATH_CURRENT_USER" + Call ConditionalAddToRegisty + Push "InstallToDesktop" + Push "$INSTALL_DESKTOP" + Call ConditionalAddToRegisty + + !insertmacro MUI_STARTMENU_WRITE_END + +@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ + +SectionEnd + +Section "-Add to path" + Push $INSTDIR\bin + StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath + StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0 + Call AddToPath + doNotAddToPath: +SectionEnd + +;-------------------------------- +; Create custom pages +Function InstallOptionsPage + !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@" + !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" + +FunctionEnd + +;-------------------------------- +; determine admin versus local install +Function un.onInit + + ClearErrors + UserInfo::GetName + IfErrors noLM + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" 0 +3 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Admin group' + Goto done + StrCmp $1 "Power" 0 +3 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Power Users group' + Goto done + + noLM: + ;Get installation folder from registry if available + + done: + +FunctionEnd + +;--- Add/Remove callback functions: --- +!macro SectionList MacroName + ;This macro used to perform operation on multiple sections. + ;List all of your components in following manner here. +@CPACK_NSIS_COMPONENT_SECTION_LIST@ +!macroend + +Section -FinishComponents + ;Removes unselected components and writes component status to registry + !insertmacro SectionList "FinishSection" + +!ifdef CPACK_NSIS_ADD_REMOVE + ; Get the name of the installer executable + System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' + StrCpy $R3 $R0 + + ; Strip off the last 13 characters, to see if we have AddRemove.exe + StrLen $R1 $R0 + IntOp $R1 $R0 - 13 + StrCpy $R2 $R0 13 $R1 + StrCmp $R2 "AddRemove.exe" addremove_installed + + ; We're not running AddRemove.exe, so install it + CopyFiles $R3 $INSTDIR\AddRemove.exe + + addremove_installed: +!endif +SectionEnd +;--- End of Add/Remove callback functions --- + +;-------------------------------- +; Component dependencies +Function .onSelChange + !insertmacro SectionList MaybeSelectionChanged +FunctionEnd + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + ReadRegStr $START_MENU SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu" + ;MessageBox MB_OK "Start menu is in: $START_MENU" + ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath" + ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers" + ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser" + ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS" + ReadRegStr $INSTALL_DESKTOP SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop" + ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP " + +@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ + + ;Remove files we installed. + ;Keep the list of directories here in sync with the File commands above. +@CPACK_NSIS_DELETE_FILES@ +@CPACK_NSIS_DELETE_DIRECTORIES@ + +!ifdef CPACK_NSIS_ADD_REMOVE + ;Remove the add/remove program + Delete "$INSTDIR\AddRemove.exe" +!endif + + ;Remove the uninstaller itself. + Delete "$INSTDIR\Uninstall.exe" + DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + ;Remove the installation directory if it is empty. + RMDir "$INSTDIR" + + ; Remove the registry entries. + DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + ; Removes all optional components + !insertmacro SectionList "RemoveSection" + + !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP + + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS@ +@CPACK_NSIS_DELETE_ICONS_EXTRA@ + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + startMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors startMenuDeleteLoopDone + + StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop + startMenuDeleteLoopDone: + + ; If the user changed the shortcut, then untinstall may not work. This should + ; try to fix it. + StrCpy $MUI_TEMP "$START_MENU" + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS_EXTRA@ + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + secondStartMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors secondStartMenuDeleteLoopDone + + StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop + secondStartMenuDeleteLoopDone: + + DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + Push $INSTDIR\bin + StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0 + Call un.RemoveFromPath + doNotRemoveFromPath: +SectionEnd + +;-------------------------------- +; determine admin versus local install +; Is install for "AllUsers" or "JustMe"? +; Default to "JustMe" - set to "AllUsers" if admin or on Win9x +; This function is used for the very first "custom page" of the installer. +; This custom page does not show up visibly, but it executes prior to the +; first visible page and sets up $INSTDIR properly... +; Choose different default installation folder based on SV_ALLUSERS... +; "Program Files" for AllUsers, "My Documents" for JustMe... + +Function .onInit + ; Reads components status for registry + !insertmacro SectionList "InitSection" + + ; check to see if /D has been used to change + ; the install directory by comparing it to the + ; install directory that is expected to be the + ; default + StrCpy $IS_DEFAULT_INSTALLDIR 0 + StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2 + StrCpy $IS_DEFAULT_INSTALLDIR 1 + + StrCpy $SV_ALLUSERS "JustMe" + ; if default install dir then change the default + ; if it is installed for JustMe + StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 + StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + + ClearErrors + UserInfo::GetName + IfErrors noLM + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" 0 +4 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Admin group' + StrCpy $SV_ALLUSERS "AllUsers" + Goto done + StrCmp $1 "Power" 0 +4 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Power Users group' + StrCpy $SV_ALLUSERS "AllUsers" + Goto done + + noLM: + StrCpy $SV_ALLUSERS "AllUsers" + ;Get installation folder from registry if available + + done: + StrCmp $SV_ALLUSERS "AllUsers" 0 +3 + StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 + StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + + StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" + + noOptionsPage: +FunctionEnd diff --git a/Modules/Platform/AIX-GNU-C.cmake b/Modules/Platform/AIX-GNU-C.cmake new file mode 100644 index 0000000..f49d528 --- /dev/null +++ b/Modules/Platform/AIX-GNU-C.cmake @@ -0,0 +1,2 @@ +include(Platform/AIX-GNU) +__aix_compiler_gnu(C) diff --git a/Modules/Platform/AIX-GNU-CXX.cmake b/Modules/Platform/AIX-GNU-CXX.cmake new file mode 100644 index 0000000..ec8e83f --- /dev/null +++ b/Modules/Platform/AIX-GNU-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/AIX-GNU) +__aix_compiler_gnu(CXX) diff --git a/Modules/Platform/AIX-GNU-Fortran.cmake b/Modules/Platform/AIX-GNU-Fortran.cmake new file mode 100644 index 0000000..07772a7 --- /dev/null +++ b/Modules/Platform/AIX-GNU-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/AIX-GNU) +__aix_compiler_gnu(Fortran) diff --git a/Modules/Platform/AIX-GNU.cmake b/Modules/Platform/AIX-GNU.cmake new file mode 100644 index 0000000..543f3e8 --- /dev/null +++ b/Modules/Platform/AIX-GNU.cmake @@ -0,0 +1,25 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__AIX_COMPILER_GNU) + return() +endif() +set(__AIX_COMPILER_GNU 1) + +macro(__aix_compiler_gnu lang) + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,-blibpath:") + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS} -Wl,-G") +endmacro() diff --git a/Modules/Platform/AIX-VisualAge-C.cmake b/Modules/Platform/AIX-VisualAge-C.cmake new file mode 100644 index 0000000..67b3171 --- /dev/null +++ b/Modules/Platform/AIX-VisualAge-C.cmake @@ -0,0 +1 @@ +include(Platform/AIX-XL-C) diff --git a/Modules/Platform/AIX-VisualAge-CXX.cmake b/Modules/Platform/AIX-VisualAge-CXX.cmake new file mode 100644 index 0000000..7894d24 --- /dev/null +++ b/Modules/Platform/AIX-VisualAge-CXX.cmake @@ -0,0 +1 @@ +include(Platform/AIX-XL-CXX) diff --git a/Modules/Platform/AIX-VisualAge-Fortran.cmake b/Modules/Platform/AIX-VisualAge-Fortran.cmake new file mode 100644 index 0000000..19e59d6 --- /dev/null +++ b/Modules/Platform/AIX-VisualAge-Fortran.cmake @@ -0,0 +1 @@ +include(Platform/AIX-XL-Fortran) diff --git a/Modules/Platform/AIX-XL-ASM.cmake b/Modules/Platform/AIX-XL-ASM.cmake new file mode 100644 index 0000000..ea0944b --- /dev/null +++ b/Modules/Platform/AIX-XL-ASM.cmake @@ -0,0 +1,2 @@ +include(Platform/AIX-XL) +__aix_compiler_xl(ASM) diff --git a/Modules/Platform/AIX-XL-C.cmake b/Modules/Platform/AIX-XL-C.cmake new file mode 100644 index 0000000..5e437fa --- /dev/null +++ b/Modules/Platform/AIX-XL-C.cmake @@ -0,0 +1,2 @@ +include(Platform/AIX-XL) +__aix_compiler_xl(C) diff --git a/Modules/Platform/AIX-XL-CXX.cmake b/Modules/Platform/AIX-XL-CXX.cmake new file mode 100644 index 0000000..ef38a5f --- /dev/null +++ b/Modules/Platform/AIX-XL-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/AIX-XL) +__aix_compiler_xl(CXX) diff --git a/Modules/Platform/AIX-XL-Fortran.cmake b/Modules/Platform/AIX-XL-Fortran.cmake new file mode 100644 index 0000000..6d4f655 --- /dev/null +++ b/Modules/Platform/AIX-XL-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/AIX-XL) +__aix_compiler_xl(Fortran) diff --git a/Modules/Platform/AIX-XL.cmake b/Modules/Platform/AIX-XL.cmake new file mode 100644 index 0000000..1f94152 --- /dev/null +++ b/Modules/Platform/AIX-XL.cmake @@ -0,0 +1,28 @@ + +#============================================================================= +# Copyright 2002-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__AIX_COMPILER_XL) + return() +endif() +set(__AIX_COMPILER_XL 1) + +macro(__aix_compiler_xl lang) + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,-blibpath:") + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-G -Wl,-brtl,-bnoipath") # -shared + set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,-brtl,-bnoipath,-bexpall") # +s, flag for exe link to use shared lib + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS " ") + set(CMAKE_SHARED_MODULE_${lang}_FLAGS " ") +endmacro() diff --git a/Modules/Platform/AIX.cmake b/Modules/Platform/AIX.cmake new file mode 100644 index 0000000..a9f773e --- /dev/null +++ b/Modules/Platform/AIX.cmake @@ -0,0 +1,29 @@ +SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so") # .so +SET(CMAKE_DL_LIBS "-lld") + +# RPATH support on AIX is called libpath. By default the runtime +# libpath is paths specified by -L followed by /usr/lib and /lib. In +# order to prevent the -L paths from being used we must force use of +# -Wl,-blibpath:/usr/lib:/lib whether RPATH support is on or not. +# When our own RPATH is to be added it may be inserted before the +# "always" paths. +SET(CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH /usr/lib /lib) + +# Files named "libfoo.a" may actually be shared libraries. +SET_PROPERTY(GLOBAL PROPERTY TARGET_ARCHIVES_MAY_BE_SHARED_LIBS 1) + +# since .a can be a static or shared library on AIX, we can not do this. +# at some point if we wanted it, we would have to figure out if a .a is +# static or shared, then we could add this back: + +# Initialize C link type selection flags. These flags are used when +# building a shared library, shared module, or executable that links +# to other libraries to select whether to use the static or shared +# versions of the libraries. +#FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) +# SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-bstatic") +# SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-bdynamic") +#ENDFOREACH(type) + +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/BSDOS.cmake b/Modules/Platform/BSDOS.cmake new file mode 100644 index 0000000..cf9d17b --- /dev/null +++ b/Modules/Platform/BSDOS.cmake @@ -0,0 +1,2 @@ +INCLUDE(Platform/UnixPaths) + diff --git a/Modules/Platform/BeOS.cmake b/Modules/Platform/BeOS.cmake new file mode 100644 index 0000000..41aa8f7 --- /dev/null +++ b/Modules/Platform/BeOS.cmake @@ -0,0 +1,10 @@ +SET(BEOS 1) + +SET(CMAKE_DL_LIBS root be) +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC") +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-nostart") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") +SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") + +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/BlueGeneL.cmake b/Modules/Platform/BlueGeneL.cmake new file mode 100644 index 0000000..7794a26 --- /dev/null +++ b/Modules/Platform/BlueGeneL.cmake @@ -0,0 +1,40 @@ +#the compute nodes on BlueGene/L don't support shared libs +SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) + +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") # -pic +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "") # -shared +SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "") # -rpath +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "") # : or empty + +SET(CMAKE_LINK_LIBRARY_SUFFIX "") +SET(CMAKE_STATIC_LIBRARY_PREFIX "lib") +SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a") +SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".a") # .a +SET(CMAKE_EXECUTABLE_SUFFIX "") # .exe +SET(CMAKE_DL_LIBS "" ) + +SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") +SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + + +INCLUDE(Platform/UnixPaths) + +IF(CMAKE_COMPILER_IS_GNUCC) + SET(CMAKE_C_LINK_EXECUTABLE + " -Wl,-relax -o -Wl,-lgcc,-lc -lnss_files -lnss_dns -lresolv") +ELSE(CMAKE_COMPILER_IS_GNUCC) + # when using IBM xlc we probably don't want to link to -lgcc + SET(CMAKE_C_LINK_EXECUTABLE + " -Wl,-relax -o -Wl,-lc -lnss_files -lnss_dns -lresolv") +ENDIF(CMAKE_COMPILER_IS_GNUCC) + +IF(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_CXX_LINK_EXECUTABLE + " -Wl,-relax -o -Wl,-lstdc++,-lgcc,-lc -lnss_files -lnss_dns -lresolv") +ELSE(CMAKE_COMPILER_IS_GNUCXX) + # when using the IBM xlC we probably don't want to link to -lgcc + SET(CMAKE_CXX_LINK_EXECUTABLE + " -Wl,-relax -o -Wl,-lstdc++,-lc -lnss_files -lnss_dns -lresolv") +ENDIF(CMAKE_COMPILER_IS_GNUCXX) diff --git a/Modules/Platform/BlueGeneP-base.cmake b/Modules/Platform/BlueGeneP-base.cmake new file mode 100644 index 0000000..926dbc0 --- /dev/null +++ b/Modules/Platform/BlueGeneP-base.cmake @@ -0,0 +1,121 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +# +# BlueGeneP base platform file. +# +# NOTE: Do not set your platform to "BlueGeneP-base". This file is included +# by the real platform files. Use one of these two platforms instead: +# +# BlueGeneP-dynamic For dynamically linked builds +# BlueGeneP-static For statically linked builds +# +# This platform file tries its best to adhere to the behavior of the MPI +# compiler wrappers included with the latest BG/P drivers. +# + + +# +# For BGP builds, we're cross compiling, but we don't want to re-root things +# (e.g. with CMAKE_FIND_ROOT_PATH) because users may have libraries anywhere on +# the shared filesystems, and this may lie outside the root. Instead, we set the +# system directories so that the various system BGP CNK library locations are +# searched first. This is not the clearest thing in the world, given IBM's driver +# layout, but this should cover all the standard ones. +# +set(CMAKE_SYSTEM_LIBRARY_PATH + /bgsys/drivers/ppcfloor/comm/default/lib # default comm layer (used by mpi compiler wrappers) + /bgsys/drivers/ppcfloor/comm/sys/lib # DCMF, other lower-level comm libraries + /bgsys/drivers/ppcfloor/runtime/SPI # other low-level stuff + /bgsys/drivers/ppcfloor/gnu-linux/lib # CNK python installation directory + /bgsys/drivers/ppcfloor/gnu-linux/powerpc-bgp-linux/lib # CNK Linux image -- standard runtime libs, pthread, etc. +) + +# +# This adds directories that find commands should specifically ignore for cross compiles. +# Most of these directories are the includeand lib directories for the frontend on BG/P systems. +# Not ignoring these can cause things like FindX11 to find a frontend PPC version mistakenly. +# We use this on BG instead of re-rooting because backend libraries are typically strewn about +# the filesystem, and we can't re-root ALL backend libraries to a single place. +# +set(CMAKE_SYSTEM_IGNORE_PATH + /lib /lib64 /include + /usr/lib /usr/lib64 /usr/include + /usr/local/lib /usr/local/lib64 /usr/local/include + /usr/X11/lib /usr/X11/lib64 /usr/X11/include + /usr/lib/X11 /usr/lib64/X11 /usr/include/X11 + /usr/X11R6/lib /usr/X11R6/lib64 /usr/X11R6/include + /usr/X11R7/lib /usr/X11R7/lib64 /usr/X11R7/include +) + +# +# Indicate that this is a unix-like system +# +set(UNIX 1) + +# +# Library prefixes, suffixes, extra libs. +# +set(CMAKE_LINK_LIBRARY_SUFFIX "") +set(CMAKE_STATIC_LIBRARY_PREFIX "lib") # lib +set(CMAKE_STATIC_LIBRARY_SUFFIX ".a") # .a + +set(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib +set(CMAKE_SHARED_LIBRARY_SUFFIX ".so") # .so +set(CMAKE_EXECUTABLE_SUFFIX "") # .exe +set(CMAKE_DL_LIBS "dl") + +# +# This macro needs to be called for dynamic library support. Unfortunately on BGP, +# We can't support both static and dynamic links in the same platform file. The +# dynamic link platform file needs to call this explicitly to set up dynamic linking. +# +macro(__BlueGeneP_set_dynamic_flags compiler_id lang) + if (${compiler_id} STREQUAL XL) + # Flags for XL compilers if we explicitly detected XL + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-qpic") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-qmkshrobj -qnostaticlink") + set(BGP_${lang}_DYNAMIC_EXE_FLAGS "-qnostaticlink -qnostaticlink=libgcc") + else() + # Assume flags for GNU compilers (if the ID is GNU *or* anything else). + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared") + set(BGP_${lang}_DYNAMIC_EXE_FLAGS "-dynamic") + endif() + + # Both toolchains use the GNU linker on BG/P, so these options are shared. + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,-rpath,") + set(CMAKE_SHARED_LIBRARY_RPATH_LINK_${lang}_FLAG "-Wl,-rpath-link,") + set(CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG "-Wl,-soname,") + set(CMAKE_EXE_EXPORTS_${lang}_FLAG "-Wl,--export-dynamic") + set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "") # +s, flag for exe link to use shared lib + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":") # : or empty + + set(BGP_${lang}_DEFAULT_EXE_FLAGS + " -o ") + set(CMAKE_${lang}_LINK_EXECUTABLE + " -Wl,-relax ${BGP_${lang}_DYNAMIC_EXE_FLAGS} ${BGP_${lang}_DEFAULT_EXE_FLAGS}") +endmacro() + +# +# This macro needs to be called for static builds. Right now it just adds -Wl,-relax +# to the link line. +# +macro(__BlueGeneP_set_static_flags compiler_id lang) + set(BGP_${lang}_DEFAULT_EXE_FLAGS + " -o ") + set(CMAKE_${lang}_LINK_EXECUTABLE + " -Wl,-relax ${BGP_${lang}_DEFAULT_EXE_FLAGS}") +endmacro() diff --git a/Modules/Platform/BlueGeneP-dynamic-GNU-C.cmake b/Modules/Platform/BlueGeneP-dynamic-GNU-C.cmake new file mode 100644 index 0000000..bd4696b --- /dev/null +++ b/Modules/Platform/BlueGeneP-dynamic-GNU-C.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_dynamic_flags(GNU C) diff --git a/Modules/Platform/BlueGeneP-dynamic-GNU-CXX.cmake b/Modules/Platform/BlueGeneP-dynamic-GNU-CXX.cmake new file mode 100644 index 0000000..9c995dc --- /dev/null +++ b/Modules/Platform/BlueGeneP-dynamic-GNU-CXX.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_dynamic_flags(GNU CXX) diff --git a/Modules/Platform/BlueGeneP-dynamic-GNU-Fortran.cmake b/Modules/Platform/BlueGeneP-dynamic-GNU-Fortran.cmake new file mode 100644 index 0000000..19d6be8 --- /dev/null +++ b/Modules/Platform/BlueGeneP-dynamic-GNU-Fortran.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_dynamic_flags(GNU Fortran) diff --git a/Modules/Platform/BlueGeneP-dynamic-XL-C.cmake b/Modules/Platform/BlueGeneP-dynamic-XL-C.cmake new file mode 100644 index 0000000..2dbbbc0 --- /dev/null +++ b/Modules/Platform/BlueGeneP-dynamic-XL-C.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_dynamic_flags(XL C) diff --git a/Modules/Platform/BlueGeneP-dynamic-XL-CXX.cmake b/Modules/Platform/BlueGeneP-dynamic-XL-CXX.cmake new file mode 100644 index 0000000..2bc5127 --- /dev/null +++ b/Modules/Platform/BlueGeneP-dynamic-XL-CXX.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_dynamic_flags(XL CXX) diff --git a/Modules/Platform/BlueGeneP-dynamic-XL-Fortran.cmake b/Modules/Platform/BlueGeneP-dynamic-XL-Fortran.cmake new file mode 100644 index 0000000..59da63d --- /dev/null +++ b/Modules/Platform/BlueGeneP-dynamic-XL-Fortran.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_dynamic_flags(XL Fortran) diff --git a/Modules/Platform/BlueGeneP-dynamic.cmake b/Modules/Platform/BlueGeneP-dynamic.cmake new file mode 100644 index 0000000..8f96f2f --- /dev/null +++ b/Modules/Platform/BlueGeneP-dynamic.cmake @@ -0,0 +1,19 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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(Platform/BlueGeneP-base) +set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) +set(CMAKE_FIND_LIBRARY_PREFIXES "lib") +set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a") diff --git a/Modules/Platform/BlueGeneP-static-GNU-C.cmake b/Modules/Platform/BlueGeneP-static-GNU-C.cmake new file mode 100644 index 0000000..412a7a3 --- /dev/null +++ b/Modules/Platform/BlueGeneP-static-GNU-C.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_static_flags(GNU C) diff --git a/Modules/Platform/BlueGeneP-static-GNU-CXX.cmake b/Modules/Platform/BlueGeneP-static-GNU-CXX.cmake new file mode 100644 index 0000000..418f0d8 --- /dev/null +++ b/Modules/Platform/BlueGeneP-static-GNU-CXX.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_static_flags(GNU CXX) diff --git a/Modules/Platform/BlueGeneP-static-GNU-Fortran.cmake b/Modules/Platform/BlueGeneP-static-GNU-Fortran.cmake new file mode 100644 index 0000000..119195b --- /dev/null +++ b/Modules/Platform/BlueGeneP-static-GNU-Fortran.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_static_flags(GNU Fortran) diff --git a/Modules/Platform/BlueGeneP-static-XL-C.cmake b/Modules/Platform/BlueGeneP-static-XL-C.cmake new file mode 100644 index 0000000..1f20959 --- /dev/null +++ b/Modules/Platform/BlueGeneP-static-XL-C.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_static_flags(XL C) diff --git a/Modules/Platform/BlueGeneP-static-XL-CXX.cmake b/Modules/Platform/BlueGeneP-static-XL-CXX.cmake new file mode 100644 index 0000000..f027a53 --- /dev/null +++ b/Modules/Platform/BlueGeneP-static-XL-CXX.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_static_flags(XL CXX) diff --git a/Modules/Platform/BlueGeneP-static-XL-Fortran.cmake b/Modules/Platform/BlueGeneP-static-XL-Fortran.cmake new file mode 100644 index 0000000..778d4bd --- /dev/null +++ b/Modules/Platform/BlueGeneP-static-XL-Fortran.cmake @@ -0,0 +1,16 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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.) + +__BlueGeneP_set_static_flags(XL Fortran) diff --git a/Modules/Platform/BlueGeneP-static.cmake b/Modules/Platform/BlueGeneP-static.cmake new file mode 100644 index 0000000..c4f5f21 --- /dev/null +++ b/Modules/Platform/BlueGeneP-static.cmake @@ -0,0 +1,19 @@ + +#============================================================================= +# Copyright 2010 Kitware, Inc. +# Copyright 2010 Todd Gamblin +# +# 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(Platform/BlueGeneP-base) +set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) +set(CMAKE_FIND_LIBRARY_PREFIXES "lib") +set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") diff --git a/Modules/Platform/CYGWIN-GNU-C.cmake b/Modules/Platform/CYGWIN-GNU-C.cmake new file mode 100644 index 0000000..9eb0ecf --- /dev/null +++ b/Modules/Platform/CYGWIN-GNU-C.cmake @@ -0,0 +1,2 @@ +include(Platform/CYGWIN-GNU) +__cygwin_compiler_gnu(C) diff --git a/Modules/Platform/CYGWIN-GNU-CXX.cmake b/Modules/Platform/CYGWIN-GNU-CXX.cmake new file mode 100644 index 0000000..2603dcd --- /dev/null +++ b/Modules/Platform/CYGWIN-GNU-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/CYGWIN-GNU) +__cygwin_compiler_gnu(CXX) diff --git a/Modules/Platform/CYGWIN-GNU-Fortran.cmake b/Modules/Platform/CYGWIN-GNU-Fortran.cmake new file mode 100644 index 0000000..d3b49b6 --- /dev/null +++ b/Modules/Platform/CYGWIN-GNU-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/CYGWIN-GNU) +__cygwin_compiler_gnu(Fortran) diff --git a/Modules/Platform/CYGWIN-GNU.cmake b/Modules/Platform/CYGWIN-GNU.cmake new file mode 100644 index 0000000..5aad45b --- /dev/null +++ b/Modules/Platform/CYGWIN-GNU.cmake @@ -0,0 +1,53 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__CYGWIN_COMPILER_GNU) + return() +endif() +set(__CYGWIN_COMPILER_GNU 1) + +# TODO: Is -Wl,--enable-auto-import now always default? +set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--enable-auto-import") +set(CMAKE_CREATE_WIN32_EXE "-mwindows") + +set(CMAKE_GNULD_IMAGE_VERSION + "-Wl,--major-image-version,,--minor-image-version,") +set(CMAKE_GENERATOR_RC windres) +enable_language(RC) +macro(__cygwin_compiler_gnu lang) + # Binary link rules. + set(CMAKE_${lang}_CREATE_SHARED_MODULE + " -o ${CMAKE_GNULD_IMAGE_VERSION} ") + set(CMAKE_${lang}_CREATE_SHARED_LIBRARY + " -o -Wl,--out-implib, ${CMAKE_GNULD_IMAGE_VERSION} ") + set(CMAKE_${lang}_LINK_EXECUTABLE + " -o -Wl,--out-implib, ${CMAKE_GNULD_IMAGE_VERSION} ") + + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "") # No -fPIC on cygwin + + # Initialize C link type selection flags. These flags are used when + # building a shared library, shared module, or executable that links + # to other libraries to select whether to use the static or shared + # versions of the libraries. + FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-Bstatic") + SET(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-Bdynamic") + ENDFOREACH(type) + + set(CMAKE_EXE_EXPORTS_${lang}_FLAG "-Wl,--export-all-symbols") + # TODO: Is -Wl,--enable-auto-import now always default? + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS} -Wl,--enable-auto-import") + set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS}") +endmacro() diff --git a/Modules/Platform/CYGWIN-windres.cmake b/Modules/Platform/CYGWIN-windres.cmake new file mode 100644 index 0000000..8bc1b15 --- /dev/null +++ b/Modules/Platform/CYGWIN-windres.cmake @@ -0,0 +1 @@ +SET(CMAKE_RC_COMPILE_OBJECT " -O coff ") diff --git a/Modules/Platform/CYGWIN.cmake b/Modules/Platform/CYGWIN.cmake new file mode 100644 index 0000000..b7ad2ce --- /dev/null +++ b/Modules/Platform/CYGWIN.cmake @@ -0,0 +1,64 @@ +if("${CMAKE_MINIMUM_REQUIRED_VERSION}" VERSION_LESS "2.8.3.20101214") + set(__USE_CMAKE_LEGACY_CYGWIN_WIN32 1) +endif() +if(NOT DEFINED WIN32) + set(WIN32 0) + if(DEFINED __USE_CMAKE_LEGACY_CYGWIN_WIN32) + if(NOT DEFINED CMAKE_LEGACY_CYGWIN_WIN32 + AND DEFINED ENV{CMAKE_LEGACY_CYGWIN_WIN32}) + set(CMAKE_LEGACY_CYGWIN_WIN32 $ENV{CMAKE_LEGACY_CYGWIN_WIN32}) + endif() + if(CMAKE_LEGACY_CYGWIN_WIN32) + message(STATUS "Defining WIN32 under Cygwin due to CMAKE_LEGACY_CYGWIN_WIN32") + set(WIN32 1) + elseif("x${CMAKE_LEGACY_CYGWIN_WIN32}" STREQUAL "x") + message(WARNING "CMake no longer defines WIN32 on Cygwin!" + "\n" + "(1) If you are just trying to build this project, ignore this warning " + "or quiet it by setting CMAKE_LEGACY_CYGWIN_WIN32=0 in your environment or " + "in the CMake cache. " + "If later configuration or build errors occur then this project may " + "have been written under the assumption that Cygwin is WIN32. " + "In that case, set CMAKE_LEGACY_CYGWIN_WIN32=1 instead." + "\n" + "(2) If you are developing this project, add the line\n" + " set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required\n" + "at the top of your top-level CMakeLists.txt file or set the minimum " + "required version of CMake to 2.8.4 or higher. " + "Then teach your project to build on Cygwin without WIN32.") + endif() + elseif(DEFINED CMAKE_LEGACY_CYGWIN_WIN32) + message(AUTHOR_WARNING "CMAKE_LEGACY_CYGWIN_WIN32 ignored because\n" + " cmake_minimum_required(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})\n" + "is at least 2.8.4.") + endif() +endif() +if(DEFINED __USE_CMAKE_LEGACY_CYGWIN_WIN32) + # Pass WIN32 legacy setting to scripts. + if(WIN32) + set(ENV{CMAKE_LEGACY_CYGWIN_WIN32} 1) + else() + set(ENV{CMAKE_LEGACY_CYGWIN_WIN32} 0) + endif() + unset(__USE_CMAKE_LEGACY_CYGWIN_WIN32) +endif() + +SET(CYGWIN 1) + +SET(CMAKE_SHARED_LIBRARY_PREFIX "cyg") +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") +SET(CMAKE_SHARED_MODULE_PREFIX "cyg") +SET(CMAKE_SHARED_MODULE_SUFFIX ".dll") +SET(CMAKE_IMPORT_LIBRARY_PREFIX "lib") +SET(CMAKE_IMPORT_LIBRARY_SUFFIX ".dll.a") +SET(CMAKE_EXECUTABLE_SUFFIX ".exe") # .exe +# Modules have a different default prefix that shared libs. +SET(CMAKE_MODULE_EXISTS 1) + +SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") +SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a") + +# Shared libraries on cygwin can be named with their version number. +SET(CMAKE_SHARED_LIBRARY_NAME_WITH_VERSION 1) + +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/Catamount.cmake b/Modules/Platform/Catamount.cmake new file mode 100644 index 0000000..01493fc --- /dev/null +++ b/Modules/Platform/Catamount.cmake @@ -0,0 +1,26 @@ +#Catamount, which runs on the compute nodes of Cray machines, e.g. RedStorm, doesn't support shared libs +SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) + +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") # -pic +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "") # -shared +SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "") # -rpath +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "") # : or empty + +SET(CMAKE_LINK_LIBRARY_SUFFIX "") +SET(CMAKE_STATIC_LIBRARY_PREFIX "lib") +SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a") +SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".a") # .a +SET(CMAKE_EXECUTABLE_SUFFIX "") # .exe +SET(CMAKE_DL_LIBS "" ) + +SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") +SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + +INCLUDE(Platform/UnixPaths) + +SET(CMAKE_CXX_LINK_SHARED_LIBRARY) +SET(CMAKE_CXX_LINK_MODULE_LIBRARY) +SET(CMAKE_C_LINK_SHARED_LIBRARY) +SET(CMAKE_C_LINK_MODULE_LIBRARY) diff --git a/Modules/Platform/Darwin-Absoft-Fortran.cmake b/Modules/Platform/Darwin-Absoft-Fortran.cmake new file mode 100644 index 0000000..beb41a3 --- /dev/null +++ b/Modules/Platform/Darwin-Absoft-Fortran.cmake @@ -0,0 +1 @@ +set(CMAKE_Fortran_VERBOSE_FLAG "-X -v") # Runs gcc under the hood. diff --git a/Modules/Platform/Darwin-GNU-C.cmake b/Modules/Platform/Darwin-GNU-C.cmake new file mode 100644 index 0000000..4e326c4 --- /dev/null +++ b/Modules/Platform/Darwin-GNU-C.cmake @@ -0,0 +1,4 @@ +include(Platform/Darwin-GNU) +__darwin_compiler_gnu(C) +cmake_gnu_has_isysroot(C) +cmake_gnu_set_osx_deployment_target_flag(C) diff --git a/Modules/Platform/Darwin-GNU-CXX.cmake b/Modules/Platform/Darwin-GNU-CXX.cmake new file mode 100644 index 0000000..b39487e --- /dev/null +++ b/Modules/Platform/Darwin-GNU-CXX.cmake @@ -0,0 +1,4 @@ +include(Platform/Darwin-GNU) +__darwin_compiler_gnu(CXX) +cmake_gnu_has_isysroot(CXX) +cmake_gnu_set_osx_deployment_target_flag(CXX) diff --git a/Modules/Platform/Darwin-GNU-Fortran.cmake b/Modules/Platform/Darwin-GNU-Fortran.cmake new file mode 100644 index 0000000..8e8acc3 --- /dev/null +++ b/Modules/Platform/Darwin-GNU-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/Darwin-GNU) +__darwin_compiler_gnu(Fortran) diff --git a/Modules/Platform/Darwin-GNU.cmake b/Modules/Platform/Darwin-GNU.cmake new file mode 100644 index 0000000..8a50a6a --- /dev/null +++ b/Modules/Platform/Darwin-GNU.cmake @@ -0,0 +1,64 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__DARWIN_COMPILER_GNU) + return() +endif() +set(__DARWIN_COMPILER_GNU 1) + +macro(__darwin_compiler_gnu lang) + # GNU does not have -shared on OS X + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names") + set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "-bundle -Wl,-headerpad_max_install_names") +endmacro() + +macro(cmake_gnu_has_isysroot lang) + if("x${CMAKE_${lang}_HAS_ISYSROOT}" STREQUAL "x") + set(_doc "${lang} compiler has -isysroot") + message(STATUS "Checking whether ${_doc}") + execute_process( + COMMAND ${CMAKE_${lang}_COMPILER} "-v" "--help" + OUTPUT_VARIABLE _gcc_help + ERROR_VARIABLE _gcc_help + ) + if("${_gcc_help}" MATCHES "isysroot") + message(STATUS "Checking whether ${_doc} - yes") + set(CMAKE_${lang}_HAS_ISYSROOT 1) + else() + message(STATUS "Checking whether ${_doc} - no") + set(CMAKE_${lang}_HAS_ISYSROOT 0) + endif() + endif() +endmacro() + +macro(cmake_gnu_set_osx_deployment_target_flag lang) + if(NOT DEFINED CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG) + set(_doc "${lang} compiler supports OSX deployment target flag") + message(STATUS "Checking whether ${_doc}") + execute_process( + COMMAND ${CMAKE_${lang}_COMPILER} "-v" "--help" + OUTPUT_VARIABLE _gcc_help + ERROR_VARIABLE _gcc_help + ) + if("${_gcc_help}" MATCHES "macosx-version-min") + message(STATUS "Checking whether ${_doc} - yes") + set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "-mmacosx-version-min=") + else() + message(STATUS "Checking whether ${_doc} - no") + set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG "") + endif() + set(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG_CODE "SET(CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG \"${CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG}\")") + endif() +endmacro() diff --git a/Modules/Platform/Darwin-NAG-Fortran.cmake b/Modules/Platform/Darwin-NAG-Fortran.cmake new file mode 100644 index 0000000..933f9e1 --- /dev/null +++ b/Modules/Platform/Darwin-NAG-Fortran.cmake @@ -0,0 +1,5 @@ +set(CMAKE_Fortran_VERBOSE_FLAG "-Wl,-v") # Runs gcc under the hood. + +# Need -fpp explicitly on case-insensitive filesystem. +set(CMAKE_Fortran_COMPILE_OBJECT + " -fpp -o -c ") diff --git a/Modules/Platform/Darwin-VisualAge-C.cmake b/Modules/Platform/Darwin-VisualAge-C.cmake new file mode 100644 index 0000000..859914f --- /dev/null +++ b/Modules/Platform/Darwin-VisualAge-C.cmake @@ -0,0 +1 @@ +include(Platform/Darwin-XL-C) diff --git a/Modules/Platform/Darwin-VisualAge-CXX.cmake b/Modules/Platform/Darwin-VisualAge-CXX.cmake new file mode 100644 index 0000000..46c1005 --- /dev/null +++ b/Modules/Platform/Darwin-VisualAge-CXX.cmake @@ -0,0 +1 @@ +include(Platform/Darwin-XL-CXX) diff --git a/Modules/Platform/Darwin-XL-C.cmake b/Modules/Platform/Darwin-XL-C.cmake new file mode 100644 index 0000000..934ebcc --- /dev/null +++ b/Modules/Platform/Darwin-XL-C.cmake @@ -0,0 +1,5 @@ +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-qmkshrobj") +SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle") + +# Enable shared library versioning. +SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-install_name") diff --git a/Modules/Platform/Darwin-XL-CXX.cmake b/Modules/Platform/Darwin-XL-CXX.cmake new file mode 100644 index 0000000..22ae018 --- /dev/null +++ b/Modules/Platform/Darwin-XL-CXX.cmake @@ -0,0 +1,5 @@ +SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-qmkshrobj") +SET(CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS "-bundle") + +# Enable shared library versioning. +SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-Wl,-install_name") diff --git a/Modules/Platform/Darwin-icc.cmake b/Modules/Platform/Darwin-icc.cmake new file mode 100644 index 0000000..b62036c --- /dev/null +++ b/Modules/Platform/Darwin-icc.cmake @@ -0,0 +1,128 @@ +SET(CMAKE_C_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS "" ) +SET(CMAKE_CXX_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS "") + +# Setup for Leopard Compatibility +EXEC_PROGRAM(sw_vers ARGS -productVersion OUTPUT_VARIABLE _OSX_VERSION) +# MESSAGE (STATUS "_OSX_VERSION: ${_OSX_VERSION}") +IF ( _OSX_VERSION MATCHES "^10.4" ) + #IF(CMAKE_COMPILER_IS_GNUCC) + SET (CMAKE_C_FLAGS_INIT "") + SET (CMAKE_C_FLAGS_DEBUG_INIT "-gdwarf-2") + SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") + SET (CMAKE_C_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") + SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -gdwarf-2") + SET (CMAKE_C_CREATE_PREPROCESSED_SOURCE " -E > ") + SET (CMAKE_C_CREATE_ASSEMBLY_SOURCE " -S -o ") + # ENDIF(CMAKE_COMPILER_IS_GNUCC) + +# IF(CMAKE_COMPILER_IS_GNUCXX) + SET (CMAKE_CXX_FLAGS_INIT "") + SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-gdwarf-2") + SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") + SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") + SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -gdwarf-2") + SET (CMAKE_CXX_CREATE_PREPROCESSED_SOURCE " -E > ") + SET (CMAKE_CXX_CREATE_ASSEMBLY_SOURCE " -S -o ") +# ENDIF(CMAKE_COMPILER_IS_GNUCXX) +ENDIF ( _OSX_VERSION MATCHES "^10.4" ) + + +SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") +SET(CMAKE_SHARED_MODULE_PREFIX "lib") +SET(CMAKE_SHARED_MODULE_SUFFIX ".so") +SET(CMAKE_MODULE_EXISTS 1) +SET(CMAKE_DL_LIBS "") +SET(CMAKE_C_LINK_FLAGS "-Wl,-headerpad_max_install_names") +SET(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names") +SET(CMAKE_PLATFORM_HAS_INSTALLNAME 1) +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names") +SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names") +SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a") + + +# setup for universal binaries if sysroot exists +IF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk) + # set the sysroot to be used if CMAKE_OSX_ARCHITECTURES + # has more than one value + SET(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.4u.sdk CACHE STRING + "isysroot used for universal binary support") + # set _CMAKE_OSX_MACHINE to umame -m + EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE _CMAKE_OSX_MACHINE) + + # check for environment variable CMAKE_OSX_ARCHITECTURES + # if it is set. + IF(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "") + SET(_CMAKE_OSX_MACHINE "$ENV{CMAKE_OSX_ARCHITECTURES}") + ENDIF(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "") + # now put _CMAKE_OSX_MACHINE into the cache + SET(CMAKE_OSX_ARCHITECTURES ${_CMAKE_OSX_MACHINE} + CACHE STRING "Build architectures for OSX") +ENDIF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk) + + +IF("${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$") + SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS + "${CMAKE_SHARED_MODULE_CREATE_C_FLAGS} -flat_namespace -undefined suppress") +ENDIF("${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$") + +IF(NOT XCODE) + # Enable shared library versioning. This flag is not actually referenced + # but the fact that the setting exists will cause the generators to support + # soname computation. + SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") + SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-install_name") + SET(CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG "-install_name") +ENDIF(NOT XCODE) + +# Xcode does not support -isystem yet. +IF(XCODE) + SET(CMAKE_INCLUDE_SYSTEM_FLAG_C) + SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX) +ENDIF(XCODE) + +SET(CMAKE_MacOSX_Content_COMPILE_OBJECT "\"${CMAKE_COMMAND}\" -E copy_if_different ") + +SET(CMAKE_C_CREATE_SHARED_LIBRARY + " -o -install_name ") +SET(CMAKE_CXX_CREATE_SHARED_LIBRARY + " -o -install_name ") +SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY + " -o -install_name ") + +SET(CMAKE_CXX_CREATE_SHARED_MODULE + " -o ") + +SET(CMAKE_C_CREATE_SHARED_MODULE + " -o ") + +SET(CMAKE_Fortran_CREATE_SHARED_MODULE + " -o ") + + +# We can use $ENV{INTEL_LICENSE_FILE} to try and get at the installation location for ICC. +# We also need to consider to use cce (which is the 64bit compiler) and not JUST the 32bit compiler. +# I have no idea what the best way to do that would be. + + +# default to searching for frameworks first +SET(CMAKE_FIND_FRAMEWORK FIRST) +# set up the default search directories for frameworks +SET(CMAKE_SYSTEM_FRAMEWORK_PATH + ~/Library/Frameworks + /Library/Frameworks + /Network/Library/Frameworks + /System/Library/Frameworks) + +# default to searching for application bundles first +SET(CMAKE_FIND_APPBUNDLE FIRST) +# set up the default search directories for application bundles +SET(CMAKE_SYSTEM_APPBUNDLE_PATH + ~/Applications + /Applications + /Developer/Applications) + +INCLUDE(Platform/UnixPaths) +SET(CMAKE_SYSTEM_INCLUDE_PATH ${CMAKE_SYSTEM_INCLUDE_PATH} /sw/include) +SET(CMAKE_SYSTEM_LIBRARY_PATH ${CMAKE_SYSTEM_LIBRARY_PATH} /sw/lib) + diff --git a/Modules/Platform/Darwin-icpc.cmake b/Modules/Platform/Darwin-icpc.cmake new file mode 100644 index 0000000..e247bae --- /dev/null +++ b/Modules/Platform/Darwin-icpc.cmake @@ -0,0 +1,3 @@ +GET_FILENAME_COMPONENT(CURRENT_SOURCE_PARENT ${CMAKE_CURRENT_LIST_FILE} PATH) +#MESSAGE (STATUS "CURRENT_SOURCE_PARENT: ${CURRENT_SOURCE_PARENT}") +INCLUDE ( ${CURRENT_SOURCE_PARENT}/Darwin-icc.cmake) diff --git a/Modules/Platform/Darwin.cmake b/Modules/Platform/Darwin.cmake new file mode 100644 index 0000000..f9d37c3 --- /dev/null +++ b/Modules/Platform/Darwin.cmake @@ -0,0 +1,265 @@ +SET(APPLE 1) + +# Darwin versions: +# 6.x == Mac OSX 10.2 (Jaguar) +# 7.x == Mac OSX 10.3 (Panther) +# 8.x == Mac OSX 10.4 (Tiger) +# 9.x == Mac OSX 10.5 (Leopard) +# 10.x == Mac OSX 10.6 (Snow Leopard) +# 11.x == Mac OSX 10.7 (Lion) +# 12.x == Mac OSX 10.8 (Mountain Lion) +STRING(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_SYSTEM_VERSION}") +STRING(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\2" DARWIN_MINOR_VERSION "${CMAKE_SYSTEM_VERSION}") + +# Do not use the "-Wl,-search_paths_first" flag with the OSX 10.2 compiler. +# Done this way because it is too early to do a TRY_COMPILE. +IF(NOT DEFINED HAVE_FLAG_SEARCH_PATHS_FIRST) + SET(HAVE_FLAG_SEARCH_PATHS_FIRST 0) + IF("${DARWIN_MAJOR_VERSION}" GREATER 6) + SET(HAVE_FLAG_SEARCH_PATHS_FIRST 1) + ENDIF("${DARWIN_MAJOR_VERSION}" GREATER 6) +ENDIF(NOT DEFINED HAVE_FLAG_SEARCH_PATHS_FIRST) +# More desirable, but does not work: + #INCLUDE(CheckCXXCompilerFlag) + #CHECK_CXX_COMPILER_FLAG("-Wl,-search_paths_first" HAVE_FLAG_SEARCH_PATHS_FIRST) + +SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") +SET(CMAKE_SHARED_MODULE_PREFIX "lib") +SET(CMAKE_SHARED_MODULE_SUFFIX ".so") +SET(CMAKE_MODULE_EXISTS 1) +SET(CMAKE_DL_LIBS "") + +SET(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") +SET(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") +SET(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") +SET(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") + +SET(CMAKE_C_LINK_FLAGS "-Wl,-headerpad_max_install_names") +SET(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names") + +IF(HAVE_FLAG_SEARCH_PATHS_FIRST) + SET(CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") + SET(CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}") +ENDIF(HAVE_FLAG_SEARCH_PATHS_FIRST) + +SET(CMAKE_PLATFORM_HAS_INSTALLNAME 1) +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names") +SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names") +SET(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") +SET(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") +SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a") + +# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree +# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache +# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun) +# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex +IF(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) + FIND_PROGRAM(CMAKE_INSTALL_NAME_TOOL install_name_tool) + MARK_AS_ADVANCED(CMAKE_INSTALL_NAME_TOOL) +ENDIF(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) + +# Set the assumed (Pre 10.5 or Default) location of the developer tools +SET(OSX_DEVELOPER_ROOT "/Developer") + +# Use the xcode-select tool if it's available (Xcode >= 3.0 installations) +FIND_PROGRAM(CMAKE_XCODE_SELECT xcode-select) +MARK_AS_ADVANCED(CMAKE_XCODE_SELECT) +IF(CMAKE_XCODE_SELECT) + EXECUTE_PROCESS(COMMAND ${CMAKE_XCODE_SELECT} "-print-path" + OUTPUT_VARIABLE OSX_DEVELOPER_ROOT + OUTPUT_STRIP_TRAILING_WHITESPACE) +ENDIF(CMAKE_XCODE_SELECT) + +# Find installed SDKs +# Start with Xcode-4.3+ default SDKs directory +SET(_CMAKE_OSX_SDKS_DIR + "${OSX_DEVELOPER_ROOT}/Platforms/MacOSX.platform/Developer/SDKs") +FILE(GLOB _CMAKE_OSX_SDKS "${_CMAKE_OSX_SDKS_DIR}/*") + +# If not present, try pre-4.3 SDKs directory +IF(NOT _CMAKE_OSX_SDKS) +SET(_CMAKE_OSX_SDKS_DIR "${OSX_DEVELOPER_ROOT}/SDKs") + FILE(GLOB _CMAKE_OSX_SDKS "${_CMAKE_OSX_SDKS_DIR}/*") +ENDIF(NOT _CMAKE_OSX_SDKS) + +EXECUTE_PROCESS(COMMAND sw_vers -productVersion + OUTPUT_VARIABLE CURRENT_OSX_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) + +#---------------------------------------------------------------------------- +# _CURRENT_OSX_VERSION - as a two-component string: 10.5, 10.6, ... +# +STRING(REGEX REPLACE "^([0-9]+\\.[0-9]+).*$" "\\1" + _CURRENT_OSX_VERSION "${CURRENT_OSX_VERSION}") + +#---------------------------------------------------------------------------- +# CMAKE_OSX_DEPLOYMENT_TARGET + +# Set cache variable - end user may change this during ccmake or cmake-gui configure. +IF(_CURRENT_OSX_VERSION VERSION_GREATER 10.3) + SET(CMAKE_OSX_DEPLOYMENT_TARGET "$ENV{MACOSX_DEPLOYMENT_TARGET}" CACHE STRING + "Minimum OS X version to target for deployment (at runtime); newer APIs weak linked. Set to empty string for default value.") +ENDIF(_CURRENT_OSX_VERSION VERSION_GREATER 10.3) + +#---------------------------------------------------------------------------- +# CMAKE_OSX_SYSROOT + +# Environment variable set by the user overrides our default. +# Use the same environment variable that Xcode uses. +SET(ENV_SDKROOT "$ENV{SDKROOT}") + +# Set CMAKE_OSX_SYSROOT_DEFAULT based on _CURRENT_OSX_VERSION, +# accounting for the known specially named SDKs. +SET(CMAKE_OSX_SYSROOT_DEFAULT + "${_CMAKE_OSX_SDKS_DIR}/MacOSX${_CURRENT_OSX_VERSION}.sdk") + +IF(_CURRENT_OSX_VERSION STREQUAL "10.4") + SET(CMAKE_OSX_SYSROOT_DEFAULT + "${_CMAKE_OSX_SDKS_DIR}/MacOSX10.4u.sdk") +ENDIF(_CURRENT_OSX_VERSION STREQUAL "10.4") + +IF(_CURRENT_OSX_VERSION STREQUAL "10.3") + SET(CMAKE_OSX_SYSROOT_DEFAULT + "${_CMAKE_OSX_SDKS_DIR}/MacOSX10.3.9.sdk") +ENDIF(_CURRENT_OSX_VERSION STREQUAL "10.3") + +# Use environment or default as initial cache value: +IF(NOT ENV_SDKROOT STREQUAL "") + SET(CMAKE_OSX_SYSROOT_VALUE ${ENV_SDKROOT}) +ELSE(NOT ENV_SDKROOT STREQUAL "") + SET(CMAKE_OSX_SYSROOT_VALUE ${CMAKE_OSX_SYSROOT_DEFAULT}) +ENDIF(NOT ENV_SDKROOT STREQUAL "") + +# Set cache variable - end user may change this during ccmake or cmake-gui configure. +SET(CMAKE_OSX_SYSROOT ${CMAKE_OSX_SYSROOT_VALUE} CACHE PATH + "The product will be built against the headers and libraries located inside the indicated SDK.") + +#---------------------------------------------------------------------------- +function(SanityCheckSDKAndDeployTarget _sdk_path _deploy) + if(_deploy STREQUAL "") + return() + endif() + + if(_sdk_path STREQUAL "") + message(FATAL_ERROR "CMAKE_OSX_DEPLOYMENT_TARGET='${_deploy}' but CMAKE_OSX_SYSROOT is empty... - either set CMAKE_OSX_SYSROOT to a valid SDK or set CMAKE_OSX_DEPLOYMENT_TARGET to empty") + endif() + + string(REGEX REPLACE "(.*MacOSX*)(....)(.*\\.sdk)" "\\2" SDK "${_sdk_path}") + if(_deploy GREATER "${SDK}") + message(FATAL_ERROR "CMAKE_OSX_DEPLOYMENT_TARGET (${_deploy}) is greater than CMAKE_OSX_SYSROOT SDK (${_sdk_path}). Please set CMAKE_OSX_DEPLOYMENT_TARGET to ${SDK} or lower") + endif() +endfunction(SanityCheckSDKAndDeployTarget) +#---------------------------------------------------------------------------- + +# Make sure the combination of SDK and Deployment Target are allowed +SanityCheckSDKAndDeployTarget("${CMAKE_OSX_SYSROOT}" "${CMAKE_OSX_DEPLOYMENT_TARGET}") + +# set _CMAKE_OSX_MACHINE to uname -m +EXECUTE_PROCESS(COMMAND uname -m + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE _CMAKE_OSX_MACHINE) + +# check for Power PC and change to ppc +IF(_CMAKE_OSX_MACHINE MATCHES "Power") + SET(_CMAKE_OSX_MACHINE ppc) +ENDIF(_CMAKE_OSX_MACHINE MATCHES "Power") + +# check for environment variable CMAKE_OSX_ARCHITECTURES +# if it is set. +IF(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "") + SET(CMAKE_OSX_ARCHITECTURES_VALUE "$ENV{CMAKE_OSX_ARCHITECTURES}") +ELSE(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "") + SET(CMAKE_OSX_ARCHITECTURES_VALUE "") +ENDIF(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "") + +# now put _CMAKE_OSX_MACHINE into the cache +SET(CMAKE_OSX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES_VALUE} CACHE STRING + "Build architectures for OSX") + + +IF("${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$") + SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS + "${CMAKE_SHARED_MODULE_CREATE_C_FLAGS} -flat_namespace -undefined suppress") +ENDIF("${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$") + +IF(NOT XCODE) + # Enable shared library versioning. This flag is not actually referenced + # but the fact that the setting exists will cause the generators to support + # soname computation. + SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") +ENDIF(NOT XCODE) + +# Xcode does not support -isystem yet. +IF(XCODE) + SET(CMAKE_INCLUDE_SYSTEM_FLAG_C) + SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX) +ENDIF(XCODE) + +IF("${_CURRENT_OSX_VERSION}" VERSION_LESS "10.5") + # Need to list dependent shared libraries on link line. When building + # with -isysroot (for universal binaries), the linker always looks for + # dependent libraries under the sysroot. Listing them on the link + # line works around the problem. + SET(CMAKE_LINK_DEPENDENT_LIBRARY_FILES 1) +ENDIF() + +SET(CMAKE_C_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS -w) +SET(CMAKE_CXX_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS -w) +SET(CMAKE_C_CREATE_SHARED_LIBRARY + " -o -install_name ") +SET(CMAKE_CXX_CREATE_SHARED_LIBRARY + " -o -install_name ") +SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY + " -o -install_name ") + +SET(CMAKE_CXX_CREATE_SHARED_MODULE + " -o ") + +SET(CMAKE_C_CREATE_SHARED_MODULE + " -o ") + +SET(CMAKE_Fortran_CREATE_SHARED_MODULE + " -o ") + +SET(CMAKE_C_CREATE_MACOSX_FRAMEWORK + " -o -install_name ") +SET(CMAKE_CXX_CREATE_MACOSX_FRAMEWORK + " -o -install_name ") + + + +# default to searching for frameworks first +SET(CMAKE_FIND_FRAMEWORK FIRST) +# set up the default search directories for frameworks +SET(CMAKE_SYSTEM_FRAMEWORK_PATH + ~/Library/Frameworks + /Library/Frameworks + /Network/Library/Frameworks + /System/Library/Frameworks) + +# default to searching for application bundles first +SET(CMAKE_FIND_APPBUNDLE FIRST) +# set up the default search directories for application bundles +SET(_apps_paths) +FOREACH(_path + "~/Applications" + "/Applications" + "${OSX_DEVELOPER_ROOT}/../Applications" # Xcode 4.3+ + "${OSX_DEVELOPER_ROOT}/Applications" # pre-4.3 + ) + GET_FILENAME_COMPONENT(_apps "${_path}" ABSOLUTE) + IF(EXISTS "${_apps}") + LIST(APPEND _apps_paths "${_apps}") + ENDIF() +ENDFOREACH() +LIST(REMOVE_DUPLICATES _apps_paths) +SET(CMAKE_SYSTEM_APPBUNDLE_PATH + ${_apps_paths}) +UNSET(_apps_paths) + +INCLUDE(Platform/UnixPaths) +LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH + /sw # Fink + /opt/local # MacPorts + ) diff --git a/Modules/Platform/DragonFly.cmake b/Modules/Platform/DragonFly.cmake new file mode 100644 index 0000000..f6e0f81 --- /dev/null +++ b/Modules/Platform/DragonFly.cmake @@ -0,0 +1,5 @@ +# DragonFly BSD was forked from FreeBSD and is still very close to it +# http://www.dragonflybsd.org +# see http://archive.netbsd.se/?ml=dfbsd-users&a=2007-07&m=4678361 + +INCLUDE(Platform/FreeBSD) diff --git a/Modules/Platform/FreeBSD.cmake b/Modules/Platform/FreeBSD.cmake new file mode 100644 index 0000000..033db06 --- /dev/null +++ b/Modules/Platform/FreeBSD.cmake @@ -0,0 +1,26 @@ +IF(EXISTS /usr/include/dlfcn.h) + SET(CMAKE_DL_LIBS "") + SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC") # -pic + SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") # -shared + SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib + SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") # -rpath + SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") # : or empty + SET(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,") + SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") + SET(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") +ENDIF(EXISTS /usr/include/dlfcn.h) + +# Shared libraries with no builtin soname may not be linked safely by +# specifying the file path. +SET(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1) + +# Initialize C link type selection flags. These flags are used when +# building a shared library, shared module, or executable that links +# to other libraries to select whether to use the static or shared +# versions of the libraries. +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Wl,-Bstatic") + SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-Bdynamic") +ENDFOREACH(type) + +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/GNU.cmake b/Modules/Platform/GNU.cmake new file mode 100644 index 0000000..4bcfd51 --- /dev/null +++ b/Modules/Platform/GNU.cmake @@ -0,0 +1,13 @@ +# GCC is the default compiler on GNU/Hurd. +SET(CMAKE_DL_LIBS "dl") +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC") +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") +SET(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,") +SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") +SET(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") + +SET(CMAKE_LIBRARY_ARCHITECTURE_REGEX "[a-z0-9_]+(-[a-z0-9_]+)?-gnu[a-z0-9_]*") + +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/GNUtoMS_lib.bat.in b/Modules/Platform/GNUtoMS_lib.bat.in new file mode 100644 index 0000000..2da920a --- /dev/null +++ b/Modules/Platform/GNUtoMS_lib.bat.in @@ -0,0 +1,3 @@ +@echo off +call "@CMAKE_GNUtoMS_BAT@" +lib /machine:"@CMAKE_GNUtoMS_ARCH@" %* diff --git a/Modules/Platform/GNUtoMS_lib.cmake b/Modules/Platform/GNUtoMS_lib.cmake new file mode 100644 index 0000000..ca9b0f8 --- /dev/null +++ b/Modules/Platform/GNUtoMS_lib.cmake @@ -0,0 +1,10 @@ +# Usage: cmake -Dlib=lib.bat -Ddef=out.def -Ddll=out.dll -Dimp=out.dll.a -P GNUtoMS_lib.cmake +get_filename_component(name ${dll} NAME) # .dll file name +string(REGEX REPLACE "\\.dll\\.a$" ".lib" out "${imp}") # .dll.a -> .lib +execute_process( + COMMAND ${lib} /def:${def} /name:${name} /out:${out} + RESULT_VARIABLE res + ) +if(res) + message(FATAL_ERROR "lib failed: ${res}") +endif() diff --git a/Modules/Platform/Generic-ADSP-ASM.cmake b/Modules/Platform/Generic-ADSP-ASM.cmake new file mode 100644 index 0000000..cec4c2f --- /dev/null +++ b/Modules/Platform/Generic-ADSP-ASM.cmake @@ -0,0 +1,7 @@ +INCLUDE(Platform/Generic-ADSP-Common) + +SET(CMAKE_ASM_SOURCE_FILE_EXTENSIONS asm) +SET(CMAKE_ASM_OUTPUT_EXTENSION ".doj" ) +SET(CMAKE_ASM_COMPILE_OBJECT + " -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -o ") + diff --git a/Modules/Platform/Generic-ADSP-C.cmake b/Modules/Platform/Generic-ADSP-C.cmake new file mode 100644 index 0000000..f064468 --- /dev/null +++ b/Modules/Platform/Generic-ADSP-C.cmake @@ -0,0 +1,20 @@ + +INCLUDE(Platform/Generic-ADSP-Common) + + +SET(CMAKE_C_OUTPUT_EXTENSION ".doj") + +SET(CMAKE_C_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_C_FLAGS_MINSIZEREL_INIT "") +SET(CMAKE_C_FLAGS_RELEASE_INIT "") +SET(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "") + +SET(CMAKE_C_CREATE_STATIC_LIBRARY + " -build-lib -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -o ") + +SET(CMAKE_C_LINK_EXECUTABLE + " -o ") + +SET(CMAKE_C_CREATE_SHARED_LIBRARY) +SET(CMAKE_C_CREATE_MODULE_LIBRARY) + diff --git a/Modules/Platform/Generic-ADSP-CXX.cmake b/Modules/Platform/Generic-ADSP-CXX.cmake new file mode 100644 index 0000000..21daa81 --- /dev/null +++ b/Modules/Platform/Generic-ADSP-CXX.cmake @@ -0,0 +1,18 @@ +INCLUDE(Platform/Generic-ADSP-Common) + +SET(CMAKE_CXX_OUTPUT_EXTENSION ".doj") + +SET(CMAKE_CXX_FLAGS_DEBUG_INIT "-g") +SET(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "") +SET(CMAKE_CXX_FLAGS_RELEASE_INIT "") +SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "") + +SET(CMAKE_CXX_CREATE_STATIC_LIBRARY + " -build-lib -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -o ") + +SET(CMAKE_CXX_LINK_EXECUTABLE + " -o ") + +SET(CMAKE_CXX_CREATE_SHARED_LIBRARY) +SET(CMAKE_CXX_CREATE_MODULE_LIBRARY) + diff --git a/Modules/Platform/Generic-ADSP-Common.cmake b/Modules/Platform/Generic-ADSP-Common.cmake new file mode 100644 index 0000000..10fb34e --- /dev/null +++ b/Modules/Platform/Generic-ADSP-Common.cmake @@ -0,0 +1,120 @@ +# support for the Analog Devices toolchain for their DSPs +# Raphael Cotty" +# +# it supports three architectures: +# Blackfin +# TS (TigerShark) +# 21k (Sharc 21xxx) + +IF(NOT ADSP) + + SET(ADSP TRUE) + + SET(CMAKE_STATIC_LIBRARY_SUFFIX ".dlb") + SET(CMAKE_SHARED_LIBRARY_SUFFIX "") + SET(CMAKE_EXECUTABLE_SUFFIX ".dxe") + + # if ADSP_PROCESSOR has not been set, but CMAKE_SYSTEM_PROCESSOR has, + # assume that this is the processor name to use for the compiler + IF(CMAKE_SYSTEM_PROCESSOR AND NOT ADSP_PROCESSOR) + SET(ADSP_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}) + ENDIF(CMAKE_SYSTEM_PROCESSOR AND NOT ADSP_PROCESSOR) + + # if ADSP_PROCESSOR_SILICIUM_REVISION has not been set, use "none" + IF(NOT ADSP_PROCESSOR_SILICIUM_REVISION) + SET(ADSP_PROCESSOR_SILICIUM_REVISION "none") + ENDIF(NOT ADSP_PROCESSOR_SILICIUM_REVISION) + + # this file is included from the C and CXX files, so handle both here + + GET_FILENAME_COMPONENT(_ADSP_DIR "${CMAKE_C_COMPILER}" PATH) + IF(NOT _ADSP_DIR) + GET_FILENAME_COMPONENT(_ADSP_DIR "${CMAKE_CXX_COMPILER}" PATH) + ENDIF(NOT _ADSP_DIR) + IF(NOT _ADSP_DIR) + GET_FILENAME_COMPONENT(_ADSP_DIR "${CMAKE_ASM_COMPILER}" PATH) + ENDIF(NOT _ADSP_DIR) + + # detect architecture + + IF(CMAKE_C_COMPILER MATCHES ccblkfn OR CMAKE_CXX_COMPILER MATCHES ccblkfn OR CMAKE_ASM_COMPILER MATCHES easmBLKFN) + IF(NOT ADSP_PROCESSOR) + SET(ADSP_PROCESSOR "ADSP-BF561") + ENDIF(NOT ADSP_PROCESSOR) + SET(ADSP_BLACKFIN TRUE) + SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/Blackfin") + ENDIF(CMAKE_C_COMPILER MATCHES ccblkfn OR CMAKE_CXX_COMPILER MATCHES ccblkfn OR CMAKE_ASM_COMPILER MATCHES easmBLKFN) + + IF(CMAKE_C_COMPILER MATCHES ccts OR CMAKE_CXX_COMPILER MATCHES ccts OR CMAKE_ASM_COMPILER MATCHES easmTS) + IF(NOT ADSP_PROCESSOR) + SET(ADSP_PROCESSOR "ADSP-TS101") + ENDIF(NOT ADSP_PROCESSOR) + SET(ADSP_TS TRUE) + SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/TS") + ENDIF(CMAKE_C_COMPILER MATCHES ccts OR CMAKE_CXX_COMPILER MATCHES ccts OR CMAKE_ASM_COMPILER MATCHES easmTS) + + IF(CMAKE_C_COMPILER MATCHES cc21k OR CMAKE_CXX_COMPILER MATCHES cc21k OR CMAKE_ASM_COMPILER MATCHES easm21k) + IF(NOT ADSP_PROCESSOR) + SET(ADSP_PROCESSOR "ADSP-21060") + ENDIF(NOT ADSP_PROCESSOR) + SET(ADSP_21K TRUE) + + SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k") # default if nothing matches + IF (ADSP_PROCESSOR MATCHES "210..$") + SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k") + ENDIF(ADSP_PROCESSOR MATCHES "210..$") + + IF (ADSP_PROCESSOR MATCHES "211..$") + SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/211k") + ENDIF(ADSP_PROCESSOR MATCHES "211..$") + + IF (ADSP_PROCESSOR MATCHES "212..$") + SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/212k") + ENDIF(ADSP_PROCESSOR MATCHES "212..$") + + IF (ADSP_PROCESSOR MATCHES "213..$") + SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/213k") + ENDIF(ADSP_PROCESSOR MATCHES "213..$") + + SET(_ADSP_FAMILY_DIR "${_ADSP_DIR}/21k") + ENDIF(CMAKE_C_COMPILER MATCHES cc21k OR CMAKE_CXX_COMPILER MATCHES cc21k OR CMAKE_ASM_COMPILER MATCHES easm21k) + + + LINK_DIRECTORIES("${_ADSP_FAMILY_DIR}/lib") + + # vdk support + FIND_PROGRAM( ADSP_VDKGEN_EXECUTABLE vdkgen "${_ADSP_FAMILY_DIR}/vdk" ) + + MACRO(ADSP_GENERATE_VDK VDK_GENERATED_HEADER VDK_GENERATED_SOURCE VDK_KERNEL_SUPPORT_FILE) + ADD_CUSTOM_COMMAND( + OUTPUT ${VDK_GENERATED_HEADER} ${VDK_GENERATED_SOURCE} + COMMAND ${ADSP_VDKGEN_EXECUTABLE} ${VDK_KERNEL_SUPPORT_FILE} -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -MM + DEPENDS ${VDK_KERNEL_SUPPORT_FILE} + ) + ENDMACRO(ADSP_GENERATE_VDK VDK_GENERATED_HEADER VDK_GENERATED_SOURCE VDK_KERNEL_SUPPORT_FILE) + + # loader support + FIND_PROGRAM( ADSP_ELFLOADER_EXECUTABLE elfloader "${_ADSP_FAMILY_DIR}" ) + + # BOOT_MODE: prom, flash, spi, spislave, UART, TWI, FIFO + # FORMAT: hex, ASCII, binary, include + # WIDTH: 8, 16 + MACRO(ADSP_CREATE_LOADER_FILE TARGET_NAME BOOT_MODE FORMAT WIDTH) + ADD_CUSTOM_COMMAND( + TARGET ${TARGET_NAME} + POST_BUILD + COMMAND ${ADSP_ELFLOADER_EXECUTABLE} ${EXECUTABLE_OUTPUT_PATH}/${TARGET_NAME}.dxe -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -b ${BOOT_MODE} -f ${FORMAT} -width ${WIDTH} -o ${EXECUTABLE_OUTPUT_PATH}/${TARGET_NAME}.ldr + COMMENT "Building the loader file" + ) + ENDMACRO(ADSP_CREATE_LOADER_FILE TARGET_NAME BOOT_MODE FORMAT WIDTH) + + MACRO(ADSP_CREATE_LOADER_FILE_INIT TARGET_NAME BOOT_MODE FORMAT WIDTH INITIALIZATION_FILE) + ADD_CUSTOM_COMMAND( + TARGET ${TARGET_NAME} + POST_BUILD + COMMAND ${ADSP_ELFLOADER_EXECUTABLE} ${EXECUTABLE_OUTPUT_PATH}/${TARGET_NAME}.dxe -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -b ${BOOT_MODE} -f ${FORMAT} -width ${WIDTH} -o ${EXECUTABLE_OUTPUT_PATH}/${TARGET_NAME}.ldr -init ${INITIALIZATION_FILE} + COMMENT "Building the loader file" + ) + ENDMACRO(ADSP_CREATE_LOADER_FILE_INIT TARGET_NAME BOOT_MODE FORMAT WIDTH INITIALIZATION_FILE) + +ENDIF(NOT ADSP) diff --git a/Modules/Platform/Generic-SDCC-C.cmake b/Modules/Platform/Generic-SDCC-C.cmake new file mode 100644 index 0000000..ac81c35 --- /dev/null +++ b/Modules/Platform/Generic-SDCC-C.cmake @@ -0,0 +1,54 @@ + +# This file implements basic support for sdcc (http://sdcc.sourceforge.net/) +# a free C compiler for 8 and 16 bit microcontrollers. +# To use it either a toolchain file is required or cmake has to be run like this: +# cmake -DCMAKE_C_COMPILER=sdcc -DCMAKE_SYSTEM_NAME=Generic +# Since sdcc doesn't support C++, C++ support should be disabled in the +# CMakeLists.txt using the PROJECT() command: +# PROJECT(my_project C) + +SET(CMAKE_STATIC_LIBRARY_PREFIX "") +SET(CMAKE_STATIC_LIBRARY_SUFFIX ".lib") +SET(CMAKE_SHARED_LIBRARY_PREFIX "") # lib +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".lib") # .so +SET(CMAKE_IMPORT_LIBRARY_PREFIX ) +SET(CMAKE_IMPORT_LIBRARY_SUFFIX ) +SET(CMAKE_EXECUTABLE_SUFFIX ".ihx") # intel hex file +SET(CMAKE_LINK_LIBRARY_SUFFIX ".lib") +SET(CMAKE_DL_LIBS "") + +SET(CMAKE_C_OUTPUT_EXTENSION ".rel") + +# find sdcclib as CMAKE_AR +# since cmake may already have searched for "ar", sdcclib has to +# be searched with a different variable name (SDCCLIB_EXECUTABLE) +# and must then be forced into the cache +GET_FILENAME_COMPONENT(SDCC_LOCATION "${CMAKE_C_COMPILER}" PATH) +FIND_PROGRAM(SDCCLIB_EXECUTABLE sdcclib PATHS "${SDCC_LOCATION}" NO_DEFAULT_PATH) +FIND_PROGRAM(SDCCLIB_EXECUTABLE sdcclib) +SET(CMAKE_AR "${SDCCLIB_EXECUTABLE}" CACHE FILEPATH "The sdcc librarian" FORCE) + +# CMAKE_C_FLAGS_INIT and CMAKE_EXE_LINKER_FLAGS_INIT should be set in a CMAKE_SYSTEM_PROCESSOR file +IF(NOT DEFINED CMAKE_C_FLAGS_INIT) + SET(CMAKE_C_FLAGS_INIT "-mmcs51 --model-small") +ENDIF(NOT DEFINED CMAKE_C_FLAGS_INIT) + +IF(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_INIT) + SET (CMAKE_EXE_LINKER_FLAGS_INIT --model-small) +ENDIF(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_INIT) + +# compile a C file into an object file +SET(CMAKE_C_COMPILE_OBJECT " -o -c ") + +# link object files to an executable +SET(CMAKE_C_LINK_EXECUTABLE " --out-fmt-ihx -o ") + +# needs sdcc 2.7.0 + sddclib from cvs +SET(CMAKE_C_CREATE_STATIC_LIBRARY + "\"${CMAKE_COMMAND}\" -E remove " + " -a ") + +# not supported by sdcc +SET(CMAKE_C_CREATE_SHARED_LIBRARY "") +SET(CMAKE_C_CREATE_MODULE_LIBRARY "") + diff --git a/Modules/Platform/Generic.cmake b/Modules/Platform/Generic.cmake new file mode 100644 index 0000000..a4e2ec6 --- /dev/null +++ b/Modules/Platform/Generic.cmake @@ -0,0 +1,17 @@ +# This is a platform definition file for platforms without +# operating system, typically embedded platforms. +# It is used when CMAKE_SYSTEM_NAME is set to "Generic" +# +# It is intentionally empty, since nothing is known +# about the platform. So everything has to be specified +# in the system/compiler files ${CMAKE_SYSTEM_NAME}-.cmake +# and/or ${CMAKE_SYSTEM_NAME}--${CMAKE_SYSTEM_PROCESSOR}.cmake + +# (embedded) targets without operating system usually don't support shared libraries +SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) + +# To help the find_xxx() commands, set at least the following so CMAKE_FIND_ROOT_PATH +# works at least for some simple cases: +SET(CMAKE_SYSTEM_INCLUDE_PATH /include ) +SET(CMAKE_SYSTEM_LIBRARY_PATH /lib ) +SET(CMAKE_SYSTEM_PROGRAM_PATH /bin ) diff --git a/Modules/Platform/HP-UX-GNU-C.cmake b/Modules/Platform/HP-UX-GNU-C.cmake new file mode 100644 index 0000000..5f9ac42 --- /dev/null +++ b/Modules/Platform/HP-UX-GNU-C.cmake @@ -0,0 +1,2 @@ +include(Platform/HP-UX-GNU) +__hpux_compiler_gnu(C) diff --git a/Modules/Platform/HP-UX-GNU-CXX.cmake b/Modules/Platform/HP-UX-GNU-CXX.cmake new file mode 100644 index 0000000..689bed0 --- /dev/null +++ b/Modules/Platform/HP-UX-GNU-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/HP-UX-GNU) +__hpux_compiler_gnu(CXX) diff --git a/Modules/Platform/HP-UX-GNU-Fortran.cmake b/Modules/Platform/HP-UX-GNU-Fortran.cmake new file mode 100644 index 0000000..ee0181f --- /dev/null +++ b/Modules/Platform/HP-UX-GNU-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/HP-UX-GNU) +__hpux_compiler_gnu(Fortran) diff --git a/Modules/Platform/HP-UX-GNU.cmake b/Modules/Platform/HP-UX-GNU.cmake new file mode 100644 index 0000000..eb909fe --- /dev/null +++ b/Modules/Platform/HP-UX-GNU.cmake @@ -0,0 +1,27 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__HPUX_COMPILER_GNU) + return() +endif() +set(__HPUX_COMPILER_GNU 1) + +macro(__hpux_compiler_gnu lang) + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS} -Wl,-E,-b,+nodefaultrpath") + set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,+s,-E,+nodefaultrpath") + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,+b") + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":") + set(CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG "-Wl,+h") +endmacro() diff --git a/Modules/Platform/HP-UX-HP-ASM.cmake b/Modules/Platform/HP-UX-HP-ASM.cmake new file mode 100644 index 0000000..05c69e4 --- /dev/null +++ b/Modules/Platform/HP-UX-HP-ASM.cmake @@ -0,0 +1,2 @@ +include(Platform/HP-UX-HP) +__hpux_compiler_hp(ASM) diff --git a/Modules/Platform/HP-UX-HP-C.cmake b/Modules/Platform/HP-UX-HP-C.cmake new file mode 100644 index 0000000..1000935 --- /dev/null +++ b/Modules/Platform/HP-UX-HP-C.cmake @@ -0,0 +1,6 @@ +include(Platform/HP-UX-HP) +__hpux_compiler_hp(C) + +set(CMAKE_C_CREATE_PREPROCESSED_SOURCE " -E > ") +set(CMAKE_C_CREATE_ASSEMBLY_SOURCE " -S -o ") +set(CMAKE_C_COMPILE_OBJECT " -Aa -Ae -o -c ") diff --git a/Modules/Platform/HP-UX-HP-CXX.cmake b/Modules/Platform/HP-UX-HP-CXX.cmake new file mode 100644 index 0000000..dfa1e4e --- /dev/null +++ b/Modules/Platform/HP-UX-HP-CXX.cmake @@ -0,0 +1,14 @@ +include(Platform/HP-UX-HP) +__hpux_compiler_hp(CXX) + +set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE " -E > ") +set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE + " -S " + "mv `basename \"\" | sed 's/\\.[^./]*$$//'`.s " + "rm -f `basename \"\" | sed 's/\\.[^./]*$$//'`.o" + ) + +set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g") +set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "+O3 -DNDEBUG") +set(CMAKE_CXX_FLAGS_RELEASE_INIT "+O2 -DNDEBUG") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-g") diff --git a/Modules/Platform/HP-UX-HP-Fortran.cmake b/Modules/Platform/HP-UX-HP-Fortran.cmake new file mode 100644 index 0000000..30acab8 --- /dev/null +++ b/Modules/Platform/HP-UX-HP-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/HP-UX-HP) +__hpux_compiler_hp(Fortran) diff --git a/Modules/Platform/HP-UX-HP.cmake b/Modules/Platform/HP-UX-HP.cmake new file mode 100644 index 0000000..bce0a8b --- /dev/null +++ b/Modules/Platform/HP-UX-HP.cmake @@ -0,0 +1,30 @@ + +#============================================================================= +# Copyright 2002-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__HPUX_COMPILER_HP) + return() +endif() +set(__HPUX_COMPILER_HP 1) + +macro(__hpux_compiler_hp lang) + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "+Z") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-Wl,-E,+nodefaultrpath -b -L/usr/lib") + set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,+s,-E,+nodefaultrpath") + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,+b") + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":") + set(CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG "-Wl,+h") + + set(CMAKE_${lang}_FLAGS_INIT "") +endmacro() diff --git a/Modules/Platform/HP-UX.cmake b/Modules/Platform/HP-UX.cmake new file mode 100644 index 0000000..ab3dc22 --- /dev/null +++ b/Modules/Platform/HP-UX.cmake @@ -0,0 +1,50 @@ +SET(CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH /usr/lib) + +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".sl") # .so +SET(CMAKE_DL_LIBS "dld") +SET(CMAKE_FIND_LIBRARY_SUFFIXES ".sl" ".so" ".a") +SET(CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES ".so") + +# The HP linker needs to find transitive shared library dependencies +# in the -L path. Therefore the runtime path must be added to the +# link line with -L flags. +SET(CMAKE_SHARED_LIBRARY_LINK_C_WITH_RUNTIME_PATH 1) +SET(CMAKE_LINK_DEPENDENT_LIBRARY_DIRS 1) + +# Shared libraries with no builtin soname may not be linked safely by +# specifying the file path. +SET(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1) + +# set flags for gcc support +INCLUDE(Platform/UnixPaths) + +# Look in both 32-bit and 64-bit implict link directories, but tell +# CMake not to pass the paths to the linker. The linker will find the +# library for the proper architecture. In the future we should detect +# which path will be used by the linker. Since the pointer type size +# CMAKE_SIZEOF_VOID_P is not set until after this file executes, we +# would need to append to CMAKE_SYSTEM_LIBRARY_PATH at a later point +# (after CMakeTest(LANG)Compiler.cmake runs for at least one language). +LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH /usr/lib/hpux32) +LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH /usr/lib/hpux64) +LIST(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES + /usr/lib/hpux32 /usr/lib/hpux64) + +# Initialize C and CXX link type selection flags. These flags are +# used when building a shared library, shared module, or executable +# that links to other libraries to select whether to use the static or +# shared versions of the libraries. Note that C modules and shared +# libs are built using ld directly so we leave off the "-Wl," portion. +FOREACH(type SHARED_LIBRARY SHARED_MODULE) + SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-a archive") + SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-a default") +ENDFOREACH(type) +FOREACH(type EXE) + SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Wl,-a,archive") + SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-a,default") +ENDFOREACH(type) +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_CXX_FLAGS "-Wl,-a,archive") + SET(CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS "-Wl,-a,default") +ENDFOREACH(type) + diff --git a/Modules/Platform/Haiku.cmake b/Modules/Platform/Haiku.cmake new file mode 100644 index 0000000..8277a24 --- /dev/null +++ b/Modules/Platform/Haiku.cmake @@ -0,0 +1,22 @@ +SET(BEOS 1) + +SET(CMAKE_DL_LIBS root be) +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC") +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-nostart") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") +SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") + +INCLUDE(Platform/UnixPaths) +LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH /boot/common) +LIST(APPEND CMAKE_SYSTEM_INCLUDE_PATH /boot/common/include) +LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH /boot/common/lib) +LIST(APPEND CMAKE_SYSTEM_PROGRAM_PATH /boot/common/bin) +LIST(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES /boot/common/lib) +LIST(APPEND CMAKE_SYSTEM_INCLUDE_PATH /boot/develop/headers/3rdparty) +LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH /boot/develop/lib/x86) + +IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + SET(CMAKE_INSTALL_PREFIX "/boot/common" CACHE PATH + "Install path prefix, prepended onto install directories." FORCE) +ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) diff --git a/Modules/Platform/IRIX.cmake b/Modules/Platform/IRIX.cmake new file mode 100644 index 0000000..fac941f --- /dev/null +++ b/Modules/Platform/IRIX.cmake @@ -0,0 +1,45 @@ +SET(CMAKE_DL_LIBS "") +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared -rdata_shared") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") # -rpath +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "") # : or empty +IF(NOT CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_CXX_CREATE_STATIC_LIBRARY + " -ar -o ") + SET (CMAKE_CXX_FLAGS_INIT "") + SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-g") + SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-O3 -DNDEBUG") + SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-O2 -DNDEBUG") + SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2") + SET (CMAKE_C_FLAGS_INIT "") +ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX) +# set flags for gcc support +INCLUDE(Platform/UnixPaths) + +IF(NOT CMAKE_COMPILER_IS_GNUCC) + SET (CMAKE_C_CREATE_PREPROCESSED_SOURCE " -E > ") + SET (CMAKE_C_CREATE_ASSEMBLY_SOURCE + " -S " + "mv `basename \"\" | sed 's/\\.[^./]*$$//'`.s " + ) +ENDIF(NOT CMAKE_COMPILER_IS_GNUCC) + +IF(NOT CMAKE_COMPILER_IS_GNUCXX) + SET (CMAKE_CXX_CREATE_PREPROCESSED_SOURCE " -E > ") + SET (CMAKE_CXX_CREATE_ASSEMBLY_SOURCE + " -S " + "mv `basename \"\" | sed 's/\\.[^./]*$$//'`.s " + ) +ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX) + +# Initialize C link type selection flags. These flags are used when +# building a shared library, shared module, or executable that links +# to other libraries to select whether to use the static or shared +# versions of the libraries. +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Wl,-Bstatic") + SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-Bdynamic") +ENDFOREACH(type) + +# The IRIX linker needs to find transitive shared library dependencies +# in the -L path. +SET(CMAKE_LINK_DEPENDENT_LIBRARY_DIRS 1) diff --git a/Modules/Platform/IRIX64.cmake b/Modules/Platform/IRIX64.cmake new file mode 100644 index 0000000..b60a7f2 --- /dev/null +++ b/Modules/Platform/IRIX64.cmake @@ -0,0 +1,73 @@ +SET(CMAKE_DL_LIBS "") +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared -rdata_shared") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") # -rpath +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "") # : or empty +SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") +IF(NOT CMAKE_COMPILER_IS_GNUCC) + # Set default flags init. + SET(CMAKE_C_FLAGS_INIT "") + SET(CMAKE_CXX_FLAGS_INIT "") + SET(CMAKE_Fortran_FLAGS_INIT "") + SET(CMAKE_EXE_LINKER_FLAGS_INIT "") + SET(CMAKE_SHARED_LINKER_FLAGS_INIT "") + SET(CMAKE_MODULE_LINKER_FLAGS_INIT "") + + # If no -o32, -n32, or -64 flag is given, set a reasonable default. + IF("$ENV{CFLAGS} $ENV{CXXFLAGS} $ENV{LDFLAGS}" MATCHES "-([no]32|64)") + ELSE("$ENV{CFLAGS} $ENV{CXXFLAGS} $ENV{LDFLAGS}" MATCHES "-([no]32|64)") + # Check if this is a 64-bit CMake. + IF(CMAKE_FILE_SELF MATCHES "^CMAKE_FILE_SELF$") + EXEC_PROGRAM(file ARGS ${CMAKE_COMMAND} OUTPUT_VARIABLE CMAKE_FILE_SELF) + SET(CMAKE_FILE_SELF "${CMAKE_FILE_SELF}" CACHE INTERNAL + "Output of file command on ${CMAKE_COMMAND}.") + ENDIF(CMAKE_FILE_SELF MATCHES "^CMAKE_FILE_SELF$") + + # Set initial flags to match cmake executable. + IF(CMAKE_FILE_SELF MATCHES " 64-bit ") + SET(CMAKE_C_FLAGS_INIT "-64") + SET(CMAKE_CXX_FLAGS_INIT "-64") + SET(CMAKE_Fortran_FLAGS_INIT "-64") + SET(CMAKE_EXE_LINKER_FLAGS_INIT "-64") + SET(CMAKE_SHARED_LINKER_FLAGS_INIT "-64") + SET(CMAKE_MODULE_LINKER_FLAGS_INIT "-64") + ENDIF(CMAKE_FILE_SELF MATCHES " 64-bit ") + ENDIF("$ENV{CFLAGS} $ENV{CXXFLAGS} $ENV{LDFLAGS}" MATCHES "-([no]32|64)") + + # Set remaining defaults. + SET(CMAKE_CXX_CREATE_STATIC_LIBRARY + " -ar -o ") + SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-g") + SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-O3 -DNDEBUG") + SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-O2 -DNDEBUG") + SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2") +ENDIF(NOT CMAKE_COMPILER_IS_GNUCC) +INCLUDE(Platform/UnixPaths) + +IF(NOT CMAKE_COMPILER_IS_GNUCC) + SET (CMAKE_C_CREATE_PREPROCESSED_SOURCE " -E > ") + SET (CMAKE_C_CREATE_ASSEMBLY_SOURCE + " -S " + "mv `basename \"\" | sed 's/\\.[^./]*$$//'`.s " + ) +ENDIF(NOT CMAKE_COMPILER_IS_GNUCC) + +IF(NOT CMAKE_COMPILER_IS_GNUCXX) + SET (CMAKE_CXX_CREATE_PREPROCESSED_SOURCE " -E > ") + SET (CMAKE_CXX_CREATE_ASSEMBLY_SOURCE + " -S " + "mv `basename \"\" | sed 's/\\.[^./]*$$//'`.s " + ) +ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX) + +# Initialize C link type selection flags. These flags are used when +# building a shared library, shared module, or executable that links +# to other libraries to select whether to use the static or shared +# versions of the libraries. +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Wl,-Bstatic") + SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-Bdynamic") +ENDFOREACH(type) + +# The IRIX linker needs to find transitive shared library dependencies +# in the -L path. +SET(CMAKE_LINK_DEPENDENT_LIBRARY_DIRS 1) diff --git a/Modules/Platform/Linux-Absoft-Fortran.cmake b/Modules/Platform/Linux-Absoft-Fortran.cmake new file mode 100644 index 0000000..beb41a3 --- /dev/null +++ b/Modules/Platform/Linux-Absoft-Fortran.cmake @@ -0,0 +1 @@ +set(CMAKE_Fortran_VERBOSE_FLAG "-X -v") # Runs gcc under the hood. diff --git a/Modules/Platform/Linux-Clang-C.cmake b/Modules/Platform/Linux-Clang-C.cmake new file mode 100644 index 0000000..dbf8956 --- /dev/null +++ b/Modules/Platform/Linux-Clang-C.cmake @@ -0,0 +1 @@ +INCLUDE(Platform/Linux-GNU-C) diff --git a/Modules/Platform/Linux-Clang-CXX.cmake b/Modules/Platform/Linux-Clang-CXX.cmake new file mode 100644 index 0000000..8fe251c --- /dev/null +++ b/Modules/Platform/Linux-Clang-CXX.cmake @@ -0,0 +1 @@ +INCLUDE(Platform/Linux-GNU-CXX) diff --git a/Modules/Platform/Linux-GNU-C.cmake b/Modules/Platform/Linux-GNU-C.cmake new file mode 100644 index 0000000..3ab142f --- /dev/null +++ b/Modules/Platform/Linux-GNU-C.cmake @@ -0,0 +1,2 @@ +INCLUDE(Platform/Linux-GNU) +__linux_compiler_gnu(C) diff --git a/Modules/Platform/Linux-GNU-CXX.cmake b/Modules/Platform/Linux-GNU-CXX.cmake new file mode 100644 index 0000000..9e4f904 --- /dev/null +++ b/Modules/Platform/Linux-GNU-CXX.cmake @@ -0,0 +1,2 @@ +INCLUDE(Platform/Linux-GNU) +__linux_compiler_gnu(CXX) diff --git a/Modules/Platform/Linux-GNU-Fortran.cmake b/Modules/Platform/Linux-GNU-Fortran.cmake new file mode 100644 index 0000000..e364c87 --- /dev/null +++ b/Modules/Platform/Linux-GNU-Fortran.cmake @@ -0,0 +1,2 @@ +INCLUDE(Platform/Linux-GNU) +__linux_compiler_gnu(Fortran) diff --git a/Modules/Platform/Linux-GNU.cmake b/Modules/Platform/Linux-GNU.cmake new file mode 100644 index 0000000..0e254c6 --- /dev/null +++ b/Modules/Platform/Linux-GNU.cmake @@ -0,0 +1,25 @@ + +#============================================================================= +# Copyright 2010 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.) + +# This module is shared by multiple languages; use include blocker. +if(__LINUX_COMPILER_GNU) + return() +endif() +set(__LINUX_COMPILER_GNU 1) + +macro(__linux_compiler_gnu lang) + # We pass this for historical reasons. Projects may have + # executables that use dlopen but do not set ENABLE_EXPORTS. + set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-rdynamic") +endmacro() diff --git a/Modules/Platform/Linux-Intel-C.cmake b/Modules/Platform/Linux-Intel-C.cmake new file mode 100644 index 0000000..c909e68 --- /dev/null +++ b/Modules/Platform/Linux-Intel-C.cmake @@ -0,0 +1,2 @@ +INCLUDE(Platform/Linux-Intel) +__linux_compiler_intel(C) diff --git a/Modules/Platform/Linux-Intel-CXX.cmake b/Modules/Platform/Linux-Intel-CXX.cmake new file mode 100644 index 0000000..0b7daf4 --- /dev/null +++ b/Modules/Platform/Linux-Intel-CXX.cmake @@ -0,0 +1,2 @@ +INCLUDE(Platform/Linux-Intel) +__linux_compiler_intel(CXX) diff --git a/Modules/Platform/Linux-Intel-Fortran.cmake b/Modules/Platform/Linux-Intel-Fortran.cmake new file mode 100644 index 0000000..342b5c2 --- /dev/null +++ b/Modules/Platform/Linux-Intel-Fortran.cmake @@ -0,0 +1,4 @@ +INCLUDE(Platform/Linux-Intel) +__linux_compiler_intel(Fortran) +set(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS} -i_dynamic -nofor_main") +set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-i_dynamic") diff --git a/Modules/Platform/Linux-Intel.cmake b/Modules/Platform/Linux-Intel.cmake new file mode 100644 index 0000000..dea8b90 --- /dev/null +++ b/Modules/Platform/Linux-Intel.cmake @@ -0,0 +1,48 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__LINUX_COMPILER_INTEL) + return() +endif() +set(__LINUX_COMPILER_INTEL 1) + +if(NOT XIAR) + set(_intel_xiar_hints) + foreach(lang C CXX Fortran) + if(IS_ABSOLUTE "${CMAKE_${lang}_COMPILER}") + get_filename_component(_hint "${CMAKE_${lang}_COMPILER}" PATH) + list(APPEND _intel_xiar_hints ${_hint}) + endif() + endforeach() + find_program(XIAR NAMES xiar HINTS ${_intel_xiar_hints}) + mark_as_advanced(XIAR) +endif(NOT XIAR) + +macro(__linux_compiler_intel lang) + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared") + + # We pass this for historical reasons. Projects may have + # executables that use dlopen but do not set ENABLE_EXPORTS. + set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-rdynamic") + + if(XIAR) + # INTERPROCEDURAL_OPTIMIZATION + set(CMAKE_${lang}_COMPILE_OPTIONS_IPO -ipo) + set(CMAKE_${lang}_CREATE_STATIC_LIBRARY_IPO + "${XIAR} cr " + "${XIAR} -s ") + endif() +endmacro() diff --git a/Modules/Platform/Linux-NAG-Fortran.cmake b/Modules/Platform/Linux-NAG-Fortran.cmake new file mode 100644 index 0000000..353bae6 --- /dev/null +++ b/Modules/Platform/Linux-NAG-Fortran.cmake @@ -0,0 +1,10 @@ +set(CMAKE_Fortran_VERBOSE_FLAG "-Wl,-v") # Runs gcc under the hood. + +# Need one "-Wl," level to send flag through to gcc. +# Use "-Xlinker" to get through gcc to real linker. +set(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS "-Wl,-shared") +set(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG "-Wl,-Xlinker,-rpath,-Xlinker,") +set(CMAKE_SHARED_LIBRARY_RUNTIME_Fortran_FLAG_SEP ":") +set(CMAKE_SHARED_LIBRARY_RPATH_LINK_Fortran_FLAG "-Wl,-Xlinker,-rpath-link,-Xlinker,") +set(CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG "-Wl,-Xlinker,-soname,-Xlinker,") +set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-Wl,-rdynamic") diff --git a/Modules/Platform/Linux-PGI-C.cmake b/Modules/Platform/Linux-PGI-C.cmake new file mode 100644 index 0000000..edf4f3f --- /dev/null +++ b/Modules/Platform/Linux-PGI-C.cmake @@ -0,0 +1,2 @@ +include(Platform/Linux-PGI) +__linux_compiler_pgi(C) diff --git a/Modules/Platform/Linux-PGI-CXX.cmake b/Modules/Platform/Linux-PGI-CXX.cmake new file mode 100644 index 0000000..d425f88 --- /dev/null +++ b/Modules/Platform/Linux-PGI-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/Linux-PGI) +__linux_compiler_pgi(CXX) diff --git a/Modules/Platform/Linux-PGI-Fortran.cmake b/Modules/Platform/Linux-PGI-Fortran.cmake new file mode 100644 index 0000000..e8731a3 --- /dev/null +++ b/Modules/Platform/Linux-PGI-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/Linux-PGI) +__linux_compiler_pgi(Fortran) diff --git a/Modules/Platform/Linux-PGI.cmake b/Modules/Platform/Linux-PGI.cmake new file mode 100644 index 0000000..ef06acd --- /dev/null +++ b/Modules/Platform/Linux-PGI.cmake @@ -0,0 +1,25 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__LINUX_COMPILER_PGI) + return() +endif() +set(__LINUX_COMPILER_PGI 1) + +macro(__linux_compiler_pgi lang) + # Shared library compile and link flags. + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared") +endmacro() diff --git a/Modules/Platform/Linux-PathScale-C.cmake b/Modules/Platform/Linux-PathScale-C.cmake new file mode 100644 index 0000000..009f398 --- /dev/null +++ b/Modules/Platform/Linux-PathScale-C.cmake @@ -0,0 +1,2 @@ +include(Platform/Linux-PathScale) +__linux_compiler_pathscale(C) diff --git a/Modules/Platform/Linux-PathScale-CXX.cmake b/Modules/Platform/Linux-PathScale-CXX.cmake new file mode 100644 index 0000000..b6a5771 --- /dev/null +++ b/Modules/Platform/Linux-PathScale-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/Linux-PathScale) +__linux_compiler_pathscale(CXX) diff --git a/Modules/Platform/Linux-PathScale-Fortran.cmake b/Modules/Platform/Linux-PathScale-Fortran.cmake new file mode 100644 index 0000000..5662d3d --- /dev/null +++ b/Modules/Platform/Linux-PathScale-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/Linux-PathScale) +__linux_compiler_pathscale(Fortran) diff --git a/Modules/Platform/Linux-PathScale.cmake b/Modules/Platform/Linux-PathScale.cmake new file mode 100644 index 0000000..c131af2 --- /dev/null +++ b/Modules/Platform/Linux-PathScale.cmake @@ -0,0 +1,25 @@ + +#============================================================================= +# Copyright 2002-2010 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.) + +# This module is shared by multiple languages; use include blocker. +if(__LINUX_COMPILER_PATHSCALE) + return() +endif() +set(__LINUX_COMPILER_PATHSCALE 1) + +macro(__linux_compiler_pathscale lang) + # Shared library compile and link flags. + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-fPIC") + set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared") +endmacro() diff --git a/Modules/Platform/Linux-SunPro-CXX.cmake b/Modules/Platform/Linux-SunPro-CXX.cmake new file mode 100644 index 0000000..8ee9658 --- /dev/null +++ b/Modules/Platform/Linux-SunPro-CXX.cmake @@ -0,0 +1,9 @@ +# Sun C++ 5.9 does not support -Wl, but Sun C++ 5.11 does not work without it. +# Query the compiler flags to detect whether to use -Wl. +execute_process(COMMAND ${CMAKE_CXX_COMPILER} -flags OUTPUT_VARIABLE _cxx_flags ERROR_VARIABLE _cxx_error) +if("${_cxx_flags}" MATCHES "\n-W[^\n]*component") + set(CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG "-Wl,-rpath-link,") +else() + set(CMAKE_SHARED_LIBRARY_RPATH_LINK_CXX_FLAG "-rpath-link ") +endif() +SET(CMAKE_EXE_EXPORTS_CXX_FLAG "--export-dynamic") diff --git a/Modules/Platform/Linux-TinyCC-C.cmake b/Modules/Platform/Linux-TinyCC-C.cmake new file mode 100644 index 0000000..b753268 --- /dev/null +++ b/Modules/Platform/Linux-TinyCC-C.cmake @@ -0,0 +1,4 @@ +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "") +SET(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "") +SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-soname ") diff --git a/Modules/Platform/Linux-VisualAge-C.cmake b/Modules/Platform/Linux-VisualAge-C.cmake new file mode 100644 index 0000000..0622b63 --- /dev/null +++ b/Modules/Platform/Linux-VisualAge-C.cmake @@ -0,0 +1 @@ +include(Platform/Linux-XL-C) diff --git a/Modules/Platform/Linux-VisualAge-CXX.cmake b/Modules/Platform/Linux-VisualAge-CXX.cmake new file mode 100644 index 0000000..b878ba0 --- /dev/null +++ b/Modules/Platform/Linux-VisualAge-CXX.cmake @@ -0,0 +1 @@ +include(Platform/Linux-XL-CXX) diff --git a/Modules/Platform/Linux-VisualAge-Fortran.cmake b/Modules/Platform/Linux-VisualAge-Fortran.cmake new file mode 100644 index 0000000..1939a8a --- /dev/null +++ b/Modules/Platform/Linux-VisualAge-Fortran.cmake @@ -0,0 +1 @@ +include(Platform/Linux-XL-Fortran) diff --git a/Modules/Platform/Linux-XL-C.cmake b/Modules/Platform/Linux-XL-C.cmake new file mode 100644 index 0000000..b1b07f6 --- /dev/null +++ b/Modules/Platform/Linux-XL-C.cmake @@ -0,0 +1 @@ +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-qmkshrobj") diff --git a/Modules/Platform/Linux-XL-CXX.cmake b/Modules/Platform/Linux-XL-CXX.cmake new file mode 100644 index 0000000..071a975 --- /dev/null +++ b/Modules/Platform/Linux-XL-CXX.cmake @@ -0,0 +1 @@ +SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-qmkshrobj") diff --git a/Modules/Platform/Linux-XL-Fortran.cmake b/Modules/Platform/Linux-XL-Fortran.cmake new file mode 100644 index 0000000..5da574e --- /dev/null +++ b/Modules/Platform/Linux-XL-Fortran.cmake @@ -0,0 +1 @@ +SET(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS "-qmkshrobj") diff --git a/Modules/Platform/Linux-como.cmake b/Modules/Platform/Linux-como.cmake new file mode 100644 index 0000000..7ea7320 --- /dev/null +++ b/Modules/Platform/Linux-como.cmake @@ -0,0 +1,17 @@ +# create a shared C++ library +SET(CMAKE_CXX_CREATE_SHARED_LIBRARY + " --prelink_objects " + " -o ") + +# create a C++ static library +SET(CMAKE_CXX_CREATE_STATIC_LIBRARY + " --prelink_objects " + " cr " + " ") + +SET(CMAKE_CXX_LINK_EXECUTABLE + " --prelink_objects " + " -o ") + +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "") +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") diff --git a/Modules/Platform/Linux.cmake b/Modules/Platform/Linux.cmake new file mode 100644 index 0000000..38f469b --- /dev/null +++ b/Modules/Platform/Linux.cmake @@ -0,0 +1,57 @@ +SET(CMAKE_DL_LIBS "dl") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") +SET(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,") +SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") +SET(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") + +# Shared libraries with no builtin soname may not be linked safely by +# specifying the file path. +SET(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1) + +# Initialize C link type selection flags. These flags are used when +# building a shared library, shared module, or executable that links +# to other libraries to select whether to use the static or shared +# versions of the libraries. +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Wl,-Bstatic") + SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-Bdynamic") +ENDFOREACH(type) + +# Debian policy requires that shared libraries be installed without +# executable permission. Fedora policy requires that shared libraries +# be installed with the executable permission. Since the native tools +# create shared libraries with execute permission in the first place a +# reasonable policy seems to be to install with execute permission by +# default. In order to support debian packages we provide an option +# here. The option default is based on the current distribution, but +# packagers can set it explicitly on the command line. +IF(DEFINED CMAKE_INSTALL_SO_NO_EXE) + # Store the decision variable in the cache. This preserves any + # setting the user provides on the command line. + SET(CMAKE_INSTALL_SO_NO_EXE "${CMAKE_INSTALL_SO_NO_EXE}" CACHE INTERNAL + "Install .so files without execute permission.") +ELSE(DEFINED CMAKE_INSTALL_SO_NO_EXE) + # Store the decision variable as an internal cache entry to avoid + # checking the platform every time. This option is advanced enough + # that only package maintainers should need to adjust it. They are + # capable of providing a setting on the command line. + IF(EXISTS "/etc/debian_version") + SET(CMAKE_INSTALL_SO_NO_EXE 1 CACHE INTERNAL + "Install .so files without execute permission.") + ELSE(EXISTS "/etc/debian_version") + SET(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL + "Install .so files without execute permission.") + ENDIF(EXISTS "/etc/debian_version") +ENDIF(DEFINED CMAKE_INSTALL_SO_NO_EXE) + +# Match multiarch library directory names. +SET(CMAKE_LIBRARY_ARCHITECTURE_REGEX "[a-z0-9_]+(-[a-z0-9_]+)?-linux-gnu[a-z0-9_]*") + +INCLUDE(Platform/UnixPaths) + +# Debian has lib64 paths only for compatibility so they should not be +# searched. +IF(EXISTS "/etc/debian_version") + SET_PROPERTY(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE) +ENDIF(EXISTS "/etc/debian_version") diff --git a/Modules/Platform/MP-RAS.cmake b/Modules/Platform/MP-RAS.cmake new file mode 100644 index 0000000..1e3e239 --- /dev/null +++ b/Modules/Platform/MP-RAS.cmake @@ -0,0 +1,10 @@ +IF(CMAKE_SYSTEM MATCHES "MP-RAS-02*.") + SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-K PIC") +ELSE(CMAKE_SYSTEM MATCHES "MP-RAS-02*.") + SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-K PIC") + SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-Wl,-Bexport") +ENDIF(CMAKE_SYSTEM MATCHES "MP-RAS-02*.") + +INCLUDE(Platform/UnixPaths) + + diff --git a/Modules/Platform/NetBSD.cmake b/Modules/Platform/NetBSD.cmake new file mode 100644 index 0000000..0fb8636 --- /dev/null +++ b/Modules/Platform/NetBSD.cmake @@ -0,0 +1,13 @@ +IF(EXISTS /usr/include/dlfcn.h) + SET(CMAKE_DL_LIBS "") + SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC") # -pic + SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") # -shared + SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib + SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") # -rpath + SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") # : or empty + SET(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,") + SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") + SET(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") +ENDIF(EXISTS /usr/include/dlfcn.h) + +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/OSF1.cmake b/Modules/Platform/OSF1.cmake new file mode 100644 index 0000000..076410a --- /dev/null +++ b/Modules/Platform/OSF1.cmake @@ -0,0 +1,45 @@ +SET(CMAKE_DL_LIBS "") + +IF(CMAKE_SYSTEM MATCHES "OSF1-1.[012]") +ENDIF(CMAKE_SYSTEM MATCHES "OSF1-1.[012]") +IF(CMAKE_SYSTEM MATCHES "OSF1-1.*") + # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 + SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-fpic") # -pic + SET(CMAKE_SHARED_LIBRARY_CXX_FLAGS "-fpic") # -pic +ENDIF(CMAKE_SYSTEM MATCHES "OSF1-1.*") + + + +IF(CMAKE_SYSTEM MATCHES "OSF1-V.*") + SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared -Wl,-expect_unresolved,\\*") # -shared + IF(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG "-Wl,-rpath,") + ELSE(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG "-rpath ") + ENDIF(CMAKE_COMPILER_IS_GNUCXX) + IF(CMAKE_COMPILER_IS_GNUCC) + SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") + ELSE(CMAKE_COMPILER_IS_GNUCC) + SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-rpath ") + ENDIF(CMAKE_COMPILER_IS_GNUCC) + SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") +ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V.*") + +SET(CMAKE_MAKE_INCLUDE_FROM_ROOT 1) # include $(CMAKE_BINARY_DIR)/... + +IF(CMAKE_COMPILER_IS_GNUCXX) + # include the gcc flags +ELSE (CMAKE_COMPILER_IS_GNUCXX) + # use default OSF compiler flags + SET (CMAKE_C_FLAGS_INIT "") + SET (CMAKE_C_FLAGS_DEBUG_INIT "-g") + SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "-O2 -DNDEBUG") + SET (CMAKE_C_FLAGS_RELEASE_INIT "-O2 -DNDEBUG") + SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2") + SET (CMAKE_CXX_FLAGS_INIT "") + SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-g") + SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-O2 -DNDEBUG") + SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-O2 -DNDEBUG") + SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2") +ENDIF(CMAKE_COMPILER_IS_GNUCXX) +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/OpenBSD.cmake b/Modules/Platform/OpenBSD.cmake new file mode 100644 index 0000000..b4ed66f --- /dev/null +++ b/Modules/Platform/OpenBSD.cmake @@ -0,0 +1,18 @@ +INCLUDE(Platform/NetBSD) + +# On OpenBSD, the compile time linker does not share it's configuration with +# the runtime linker. This will extract the library search paths from the +# system's ld.so.hints file which will allow CMake to set the appropriate +# -rpath-link flags +IF(NOT CMAKE_PLATFORM_RUNTIME_PATH) + EXECUTE_PROCESS(COMMAND /sbin/ldconfig -r + OUTPUT_VARIABLE LDCONFIG_HINTS + ERROR_QUIET) + STRING(REGEX REPLACE ".*search\\ directories:\\ ([^\n]*).*" "\\1" + LDCONFIG_HINTS "${LDCONFIG_HINTS}") + STRING(REGEX REPLACE ":" ";" + CMAKE_PLATFORM_RUNTIME_PATH + "${LDCONFIG_HINTS}") +ENDIF() + +SET_PROPERTY(GLOBAL PROPERTY FIND_LIBRARY_USE_OPENBSD_VERSIONING 1) diff --git a/Modules/Platform/OpenVMS.cmake b/Modules/Platform/OpenVMS.cmake new file mode 100644 index 0000000..c52effa --- /dev/null +++ b/Modules/Platform/OpenVMS.cmake @@ -0,0 +1,8 @@ +INCLUDE(Platform/UnixPaths) + +SET(CMAKE_C_CREATE_STATIC_LIBRARY + " cr " + " " + ) +SET(CMAKE_CXX_CREATE_STATIC_LIBRARY ${CMAKE_C_CREATE_STATIC_LIBRARY}) +SET(CMAKE_EXECUTABLE_SUFFIX ".exe") # .exe diff --git a/Modules/Platform/QNX.cmake b/Modules/Platform/QNX.cmake new file mode 100644 index 0000000..8cdbe02 --- /dev/null +++ b/Modules/Platform/QNX.cmake @@ -0,0 +1,33 @@ +SET(QNXNTO 1) + +# The QNX GCC does not seem to have -isystem so remove the flag. +SET(CMAKE_INCLUDE_SYSTEM_FLAG_C) +SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX) + +SET(CMAKE_DL_LIBS "") +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") +SET(CMAKE_SHARED_LIBRARY_CXX_FLAGS "") +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") +SET(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,") +SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") +SET(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") + +# Shared libraries with no builtin soname may not be linked safely by +# specifying the file path. +SET(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1) + +# Initialize C link type selection flags. These flags are used when +# building a shared library, shared module, or executable that links +# to other libraries to select whether to use the static or shared +# versions of the libraries. +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Wl,-Bstatic") + SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-Bdynamic") +ENDFOREACH(type) +# force the language to be c++ since qnx only has gcc and not g++ and c++? +SET(CMAKE_CXX_COMPILE_OBJECT + " -x c++ -o -c ") + +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/RISCos.cmake b/Modules/Platform/RISCos.cmake new file mode 100644 index 0000000..3b2a092 --- /dev/null +++ b/Modules/Platform/RISCos.cmake @@ -0,0 +1,6 @@ +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-G 0") +SET(CMAKE_SHARED_LIBRARY_SUFFIX "..o") +SET(CMAKE_DL_LIBS "") +SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-Wl,-D,08000000") + +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/SCO_SV.cmake b/Modules/Platform/SCO_SV.cmake new file mode 100644 index 0000000..cbdcb7d --- /dev/null +++ b/Modules/Platform/SCO_SV.cmake @@ -0,0 +1,2 @@ +SET(CMAKE_DL_LIBS "") +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/SINIX.cmake b/Modules/Platform/SINIX.cmake new file mode 100644 index 0000000..4592fdd --- /dev/null +++ b/Modules/Platform/SINIX.cmake @@ -0,0 +1,2 @@ +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-K PIC") +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/SunOS-GNU-C.cmake b/Modules/Platform/SunOS-GNU-C.cmake new file mode 100644 index 0000000..6a96c00 --- /dev/null +++ b/Modules/Platform/SunOS-GNU-C.cmake @@ -0,0 +1,2 @@ +include(Platform/SunOS-GNU) +__sunos_compiler_gnu(C) diff --git a/Modules/Platform/SunOS-GNU-CXX.cmake b/Modules/Platform/SunOS-GNU-CXX.cmake new file mode 100644 index 0000000..6b9f6fa --- /dev/null +++ b/Modules/Platform/SunOS-GNU-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/SunOS-GNU) +__sunos_compiler_gnu(CXX) diff --git a/Modules/Platform/SunOS-GNU-Fortran.cmake b/Modules/Platform/SunOS-GNU-Fortran.cmake new file mode 100644 index 0000000..c6b1888 --- /dev/null +++ b/Modules/Platform/SunOS-GNU-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/SunOS-GNU) +__sunos_compiler_gnu(Fortran) diff --git a/Modules/Platform/SunOS-GNU.cmake b/Modules/Platform/SunOS-GNU.cmake new file mode 100644 index 0000000..7169056 --- /dev/null +++ b/Modules/Platform/SunOS-GNU.cmake @@ -0,0 +1,34 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__SUNOS_COMPILER_GNU) + return() +endif() +set(__SUNOS_COMPILER_GNU 1) + +macro(__sunos_compiler_gnu lang) + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,-R") + set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":") + set(CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG "-Wl,-h") + + # Initialize C link type selection flags. These flags are used when + # building a shared library, shared module, or executable that links + # to other libraries to select whether to use the static or shared + # versions of the libraries. + foreach(type SHARED_LIBRARY SHARED_MODULE EXE) + set(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-Bstatic") + set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-Bdynamic") + endforeach() +endmacro() diff --git a/Modules/Platform/SunOS.cmake b/Modules/Platform/SunOS.cmake new file mode 100644 index 0000000..9f2ee2e --- /dev/null +++ b/Modules/Platform/SunOS.cmake @@ -0,0 +1,30 @@ +IF(CMAKE_SYSTEM MATCHES "SunOS-4.*") + SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-PIC") + SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared -Wl,-r") + SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-R") + SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") +ENDIF(CMAKE_SYSTEM MATCHES "SunOS-4.*") + +IF(CMAKE_COMPILER_IS_GNUCXX) + IF(CMAKE_COMPILER_IS_GNUCC) + SET(CMAKE_CXX_CREATE_SHARED_LIBRARY + " -o ") + ELSE(CMAKE_COMPILER_IS_GNUCC) + # Take default rule from CMakeDefaultMakeRuleVariables.cmake. + ENDIF(CMAKE_COMPILER_IS_GNUCC) +ENDIF(CMAKE_COMPILER_IS_GNUCXX) +INCLUDE(Platform/UnixPaths) + +# Add the compiler's implicit link directories. +IF("${CMAKE_C_COMPILER_ID} ${CMAKE_CXX_COMPILER_ID}" MATCHES SunPro) + LIST(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES + /opt/SUNWspro/lib /opt/SUNWspro/prod/lib /usr/ccs/lib) +ENDIF("${CMAKE_C_COMPILER_ID} ${CMAKE_CXX_COMPILER_ID}" MATCHES SunPro) + +# The Sun linker needs to find transitive shared library dependencies +# in the -L path. +SET(CMAKE_LINK_DEPENDENT_LIBRARY_DIRS 1) + +# Shared libraries with no builtin soname may not be linked safely by +# specifying the file path. +SET(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1) diff --git a/Modules/Platform/Tru64.cmake b/Modules/Platform/Tru64.cmake new file mode 100644 index 0000000..cf9d17b --- /dev/null +++ b/Modules/Platform/Tru64.cmake @@ -0,0 +1,2 @@ +INCLUDE(Platform/UnixPaths) + diff --git a/Modules/Platform/ULTRIX.cmake b/Modules/Platform/ULTRIX.cmake new file mode 100644 index 0000000..4d0cf75 --- /dev/null +++ b/Modules/Platform/ULTRIX.cmake @@ -0,0 +1,5 @@ +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-G 0") +SET(CMAKE_SHARED_LIBRARY_SUFFIX "..o") +SET(CMAKE_DL_LIBS "") +SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-Wl,-D,08000000") +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/UNIX_SV.cmake b/Modules/Platform/UNIX_SV.cmake new file mode 100644 index 0000000..3b50e0a --- /dev/null +++ b/Modules/Platform/UNIX_SV.cmake @@ -0,0 +1,3 @@ +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-K PIC") +SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-Wl,-Bexport") +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/UnixPaths.cmake b/Modules/Platform/UnixPaths.cmake new file mode 100644 index 0000000..5ee7ddb --- /dev/null +++ b/Modules/Platform/UnixPaths.cmake @@ -0,0 +1,88 @@ + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Block multiple inclusion because "CMakeCInformation.cmake" includes +# "Platform/${CMAKE_SYSTEM_NAME}" even though the generic module +# "CMakeSystemSpecificInformation.cmake" already included it. +# The extra inclusion is a work-around documented next to the include() +# call, so this can be removed when the work-around is removed. +IF(__UNIX_PATHS_INCLUDED) + RETURN() +ENDIF() +SET(__UNIX_PATHS_INCLUDED 1) + +SET(UNIX 1) + +# also add the install directory of the running cmake to the search directories +# CMAKE_ROOT is CMAKE_INSTALL_PREFIX/share/cmake, so we need to go two levels up +GET_FILENAME_COMPONENT(_CMAKE_INSTALL_DIR "${CMAKE_ROOT}" PATH) +GET_FILENAME_COMPONENT(_CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" PATH) + +# List common installation prefixes. These will be used for all +# search types. +LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH + # Standard + /usr/local /usr / + + # CMake install location + "${_CMAKE_INSTALL_DIR}" + + # Project install destination. + "${CMAKE_INSTALL_PREFIX}" + ) + +# List common include file locations not under the common prefixes. +LIST(APPEND CMAKE_SYSTEM_INCLUDE_PATH + # Windows API on Cygwin + /usr/include/w32api + + # X11 + /usr/X11R6/include /usr/include/X11 + + # Other + /usr/pkg/include + /opt/csw/include /opt/include + /usr/openwin/include + ) + +LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH + # Windows API on Cygwin + /usr/lib/w32api + + # X11 + /usr/X11R6/lib /usr/lib/X11 + + # Other + /usr/pkg/lib + /opt/csw/lib /opt/lib + /usr/openwin/lib + ) + +LIST(APPEND CMAKE_SYSTEM_PROGRAM_PATH + /usr/pkg/bin + ) + +LIST(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES + /lib /usr/lib /usr/lib32 /usr/lib64 + ) + +LIST(APPEND CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES + /usr/include + ) +LIST(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES + /usr/include + ) + +# Enable use of lib64 search path variants by default. +SET_PROPERTY(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE) diff --git a/Modules/Platform/UnixWare.cmake b/Modules/Platform/UnixWare.cmake new file mode 100644 index 0000000..c324bc8 --- /dev/null +++ b/Modules/Platform/UnixWare.cmake @@ -0,0 +1,3 @@ +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-K PIC") +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-Wl,-Bexport") +INCLUDE(Platform/UnixPaths) diff --git a/Modules/Platform/Windows-Borland-C.cmake b/Modules/Platform/Windows-Borland-C.cmake new file mode 100644 index 0000000..e2f76aa --- /dev/null +++ b/Modules/Platform/Windows-Borland-C.cmake @@ -0,0 +1 @@ +include(Platform/Windows-Embarcadero-C) diff --git a/Modules/Platform/Windows-Borland-CXX.cmake b/Modules/Platform/Windows-Borland-CXX.cmake new file mode 100644 index 0000000..809490f --- /dev/null +++ b/Modules/Platform/Windows-Borland-CXX.cmake @@ -0,0 +1 @@ +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-Embarcadero.cmake b/Modules/Platform/Windows-Embarcadero.cmake new file mode 100644 index 0000000..87b3767 --- /dev/null +++ b/Modules/Platform/Windows-Embarcadero.cmake @@ -0,0 +1,129 @@ + +#============================================================================= +# Copyright 2002-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.) + +# This module is shared by multiple languages; use include blocker. +if(__WINDOWS_EMBARCADERO) + return() +endif() +set(__WINDOWS_EMBARCADERO 1) + +SET(BORLAND 1) + +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") + +SET(CMAKE_LIBRARY_PATH_FLAG "-L") +SET(CMAKE_LINK_LIBRARY_FLAG "") + +SET(CMAKE_FIND_LIBRARY_SUFFIXES "-bcc.lib" ".lib") + +# uncomment these out to debug makefiles +#SET(CMAKE_START_TEMP_FILE "") +#SET(CMAKE_END_TEMP_FILE "") +#SET(CMAKE_VERBOSE_MAKEFILE 1) + +# Borland cannot handle + in the file name, so mangle object file name +SET (CMAKE_MANGLE_OBJECT_FILE_NAMES "ON") + +# extra flags for a win32 exe +SET(CMAKE_CREATE_WIN32_EXE "${_tW}" ) +# extra flags for a console app +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 "${_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}) +SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT}) +SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT}) +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(__embarcadero_language lang) + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "${_tD}") + + # compile a source file into an object file + # place outside the response file because Borland refuses + # to parse quotes from the response file. + set(CMAKE_${lang}_COMPILE_OBJECT + " ${_tR} ${CMAKE_START_TEMP_FILE}-DWIN32 -o ${_COMPILE_${lang}} ${CMAKE_END_TEMP_FILE}" + ) + + set(CMAKE_${lang}_LINK_EXECUTABLE + " ${_tR} -e ${CMAKE_START_TEMP_FILE} ${CMAKE_END_TEMP_FILE}" + # "implib -c -w " + ) + + # place outside the response file because Borland refuses + # to parse quotes from the response file. + set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE + "cpp32 ${CMAKE_START_TEMP_FILE}-DWIN32 -o ${_COMPILE_${lang}} ${CMAKE_END_TEMP_FILE}" + ) + # Borland >= 5.6 allows -P option for cpp32, <= 5.5 does not + + # Create a module library. + set(CMAKE_${lang}_CREATE_SHARED_MODULE + " ${_tR} ${_tD} ${CMAKE_START_TEMP_FILE}-e ${CMAKE_END_TEMP_FILE}" + ) + + # Create an import library for another target. + set(CMAKE_${lang}_CREATE_IMPORT_LIBRARY + "implib -c -w " + ) + + # Create a shared library. + # First create a module and then its import library. + set(CMAKE_${lang}_CREATE_SHARED_LIBRARY + ${CMAKE_${lang}_CREATE_SHARED_MODULE} + ${CMAKE_${lang}_CREATE_IMPORT_LIBRARY} + ) + + # create a static library + set(CMAKE_${lang}_CREATE_STATIC_LIBRARY + "tlib ${CMAKE_START_TEMP_FILE}/p512 /a ${CMAKE_END_TEMP_FILE}" + ) + + # Initial configuration flags. + 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") + set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "-Od") + set(CMAKE_${lang}_STANDARD_LIBRARIES_INIT "import32.lib") +endmacro() diff --git a/Modules/Platform/Windows-G95-Fortran.cmake b/Modules/Platform/Windows-G95-Fortran.cmake new file mode 100644 index 0000000..af08008 --- /dev/null +++ b/Modules/Platform/Windows-G95-Fortran.cmake @@ -0,0 +1 @@ +include(Platform/Windows-GNU-Fortran) diff --git a/Modules/Platform/Windows-GNU-C-ABI.cmake b/Modules/Platform/Windows-GNU-C-ABI.cmake new file mode 100644 index 0000000..1189263 --- /dev/null +++ b/Modules/Platform/Windows-GNU-C-ABI.cmake @@ -0,0 +1 @@ +__windows_compiler_gnu_abi(C) diff --git a/Modules/Platform/Windows-GNU-C.cmake b/Modules/Platform/Windows-GNU-C.cmake new file mode 100644 index 0000000..ecf89dc --- /dev/null +++ b/Modules/Platform/Windows-GNU-C.cmake @@ -0,0 +1,2 @@ +include(Platform/Windows-GNU) +__windows_compiler_gnu(C) diff --git a/Modules/Platform/Windows-GNU-CXX-ABI.cmake b/Modules/Platform/Windows-GNU-CXX-ABI.cmake new file mode 100644 index 0000000..f3c701c --- /dev/null +++ b/Modules/Platform/Windows-GNU-CXX-ABI.cmake @@ -0,0 +1 @@ +__windows_compiler_gnu_abi(CXX) diff --git a/Modules/Platform/Windows-GNU-CXX.cmake b/Modules/Platform/Windows-GNU-CXX.cmake new file mode 100644 index 0000000..23e6552 --- /dev/null +++ b/Modules/Platform/Windows-GNU-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/Windows-GNU) +__windows_compiler_gnu(CXX) diff --git a/Modules/Platform/Windows-GNU-Fortran-ABI.cmake b/Modules/Platform/Windows-GNU-Fortran-ABI.cmake new file mode 100644 index 0000000..179280b --- /dev/null +++ b/Modules/Platform/Windows-GNU-Fortran-ABI.cmake @@ -0,0 +1 @@ +__windows_compiler_gnu_abi(Fortran) diff --git a/Modules/Platform/Windows-GNU-Fortran.cmake b/Modules/Platform/Windows-GNU-Fortran.cmake new file mode 100644 index 0000000..b81b796 --- /dev/null +++ b/Modules/Platform/Windows-GNU-Fortran.cmake @@ -0,0 +1,5 @@ +include(Platform/Windows-GNU) +__windows_compiler_gnu(Fortran) + +# gfortran on 64-bit MinGW defines __SIZEOF_POINTER__ +set(CMAKE_Fortran_SIZEOF_DATA_PTR_DEFAULT 4) diff --git a/Modules/Platform/Windows-GNU.cmake b/Modules/Platform/Windows-GNU.cmake new file mode 100644 index 0000000..dd47692 --- /dev/null +++ b/Modules/Platform/Windows-GNU.cmake @@ -0,0 +1,181 @@ + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__WINDOWS_GNU) + return() +endif() +set(__WINDOWS_GNU 1) + +set(CMAKE_IMPORT_LIBRARY_PREFIX "lib") +set(CMAKE_SHARED_LIBRARY_PREFIX "lib") +set(CMAKE_SHARED_MODULE_PREFIX "lib") +set(CMAKE_STATIC_LIBRARY_PREFIX "lib") + +set(CMAKE_EXECUTABLE_SUFFIX ".exe") +set(CMAKE_IMPORT_LIBRARY_SUFFIX ".dll.a") +set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") +set(CMAKE_SHARED_MODULE_SUFFIX ".dll") +set(CMAKE_STATIC_LIBRARY_SUFFIX ".a") + +if(MSYS OR MINGW) + set(CMAKE_EXTRA_LINK_EXTENSIONS ".lib") # MinGW can also link to a MS .lib +endif() + +if(MINGW) + set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "") + set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll" ".dll.a" ".a" ".lib") + set(CMAKE_C_STANDARD_LIBRARIES_INIT "-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32") + set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}") +endif() + +set(CMAKE_DL_LIBS "") +set(CMAKE_LIBRARY_PATH_FLAG "-L") +set(CMAKE_LINK_LIBRARY_FLAG "-l") +set(CMAKE_LINK_DEF_FILE_FLAG "") # Empty string: passing the file is enough +set(CMAKE_LINK_LIBRARY_SUFFIX "") +set(CMAKE_CREATE_WIN32_EXE "-mwindows") + +set(CMAKE_GNULD_IMAGE_VERSION + "-Wl,--major-image-version,,--minor-image-version,") + +# Check if GNU ld is too old to support @FILE syntax. +set(__WINDOWS_GNU_LD_RESPONSE 1) +execute_process(COMMAND ld -v OUTPUT_VARIABLE _help ERROR_VARIABLE _help) +if("${_help}" MATCHES "GNU ld .* 2\\.1[1-6]") + set(__WINDOWS_GNU_LD_RESPONSE 0) +endif() + +enable_language(RC) + +macro(__windows_compiler_gnu lang) + + if(MSYS OR MINGW) + # Create archiving rules to support large object file lists for static libraries. + set(CMAKE_${lang}_ARCHIVE_CREATE " cr ") + set(CMAKE_${lang}_ARCHIVE_APPEND " r ") + set(CMAKE_${lang}_ARCHIVE_FINISH " ") + + # Initialize C link type selection flags. These flags are used when + # building a shared library, shared module, or executable that links + # to other libraries to select whether to use the static or shared + # versions of the libraries. + foreach(type SHARED_LIBRARY SHARED_MODULE EXE) + set(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-Bstatic") + set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-Bdynamic") + endforeach(type) + endif() + + set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "") # No -fPIC on Windows + set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS ${__WINDOWS_GNU_LD_RESPONSE}) + set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1) + + # We prefer "@" for response files but it is not supported by gcc 3. + execute_process(COMMAND ${CMAKE_${lang}_COMPILER} --version OUTPUT_VARIABLE _ver ERROR_VARIABLE _ver) + if("${_ver}" MATCHES "\\(GCC\\) 3\\.") + if("${lang}" STREQUAL "Fortran") + # The GNU Fortran compiler reports an error: + # no input files; unwilling to write output files + # when the response file is passed with "-Wl,@". + set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 0) + else() + # Use "-Wl,@" to pass the response file to the linker. + set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-Wl,@") + endif() + # The GNU 3.x compilers do not support response files (only linkers). + set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 0) + elseif(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS) + # Use "@" to pass the response file to the front-end. + set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "@") + endif() + + # Binary link rules. + set(CMAKE_${lang}_CREATE_SHARED_MODULE + " -o ${CMAKE_GNULD_IMAGE_VERSION} ") + set(CMAKE_${lang}_CREATE_SHARED_LIBRARY + " -o -Wl,--out-implib, ${CMAKE_GNULD_IMAGE_VERSION} ") + set(CMAKE_${lang}_LINK_EXECUTABLE + " -o -Wl,--out-implib, ${CMAKE_GNULD_IMAGE_VERSION} ") + + list(APPEND CMAKE_${lang}_ABI_FILES "Platform/Windows-GNU-${lang}-ABI") + + # Support very long lists of object files. + if("${CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG}" STREQUAL "@") + foreach(rule CREATE_SHARED_MODULE CREATE_SHARED_LIBRARY LINK_EXECUTABLE) + # The gcc/collect2/ld toolchain does not use response files + # internally so we cannot pass long object lists. Instead pass + # the object file list in a response file to the archiver to put + # them in a temporary archive. Hand the archive to the linker. + string(REPLACE "" "-Wl,--whole-archive /objects.a -Wl,--no-whole-archive" + CMAKE_${lang}_${rule} "${CMAKE_${lang}_${rule}}") + set(CMAKE_${lang}_${rule} + " -E remove -f /objects.a" + " cr /objects.a " + "${CMAKE_${lang}_${rule}}" + ) + endforeach() + endif() +endmacro() + +macro(__windows_compiler_gnu_abi lang) + if(CMAKE_NO_GNUtoMS) + set(CMAKE_GNUtoMS 0) + else() + option(CMAKE_GNUtoMS "Convert GNU import libraries to MS format (requires Visual Studio)" OFF) + endif() + + if(CMAKE_GNUtoMS AND NOT CMAKE_GNUtoMS_LIB) + # Find MS development environment setup script for this architecture. + if("${CMAKE_SIZEOF_VOID_P}" EQUAL 4) + find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvars32.bat + DOC "Visual Studio vcvars32.bat" + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VC;ProductDir]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VC;ProductDir]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.1\\Setup\\VC;ProductDir]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\6.0\\Setup\\Microsoft Visual C++;ProductDir]/bin" + ) + set(CMAKE_GNUtoMS_ARCH x86) + elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) + find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvarsamd64.bat + DOC "Visual Studio vcvarsamd64.bat" + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VC;ProductDir]/bin/amd64" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/bin/amd64" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VC;ProductDir]/bin/amd64" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/bin/amd64" + ) + set(CMAKE_GNUtoMS_ARCH amd64) + endif() + set_property(CACHE CMAKE_GNUtoMS_VCVARS PROPERTY ADVANCED 1) + if(CMAKE_GNUtoMS_VCVARS) + # Create helper script to run lib.exe from MS environment. + string(REPLACE "/" "\\" CMAKE_GNUtoMS_BAT "${CMAKE_GNUtoMS_VCVARS}") + set(CMAKE_GNUtoMS_LIB ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeGNUtoMS_lib.bat) + configure_file(${CMAKE_ROOT}/Modules/Platform/GNUtoMS_lib.bat.in ${CMAKE_GNUtoMS_LIB}) + else() + message(WARNING "Disabling CMAKE_GNUtoMS option because CMAKE_GNUtoMS_VCVARS is not set.") + set(CMAKE_GNUtoMS 0) + endif() + endif() + + if(CMAKE_GNUtoMS) + # Teach CMake how to create a MS import library at link time. + set(CMAKE_${lang}_GNUtoMS_RULE " -Wl,--output-def,.def" + " -Dlib=\"${CMAKE_GNUtoMS_LIB}\" -Ddef=.def -Ddll= -Dimp= -P \"${CMAKE_ROOT}/Modules/Platform/GNUtoMS_lib.cmake\"" + ) + endif() +endmacro() diff --git a/Modules/Platform/Windows-Intel-ASM.cmake b/Modules/Platform/Windows-Intel-ASM.cmake new file mode 100644 index 0000000..31d08c7 --- /dev/null +++ b/Modules/Platform/Windows-Intel-ASM.cmake @@ -0,0 +1,2 @@ +include(Platform/Windows-Intel) +__windows_compiler_intel(ASM) diff --git a/Modules/Platform/Windows-Intel-C.cmake b/Modules/Platform/Windows-Intel-C.cmake new file mode 100644 index 0000000..767fec5 --- /dev/null +++ b/Modules/Platform/Windows-Intel-C.cmake @@ -0,0 +1,2 @@ +include(Platform/Windows-Intel) +__windows_compiler_intel(C) diff --git a/Modules/Platform/Windows-Intel-CXX.cmake b/Modules/Platform/Windows-Intel-CXX.cmake new file mode 100644 index 0000000..2845b0f --- /dev/null +++ b/Modules/Platform/Windows-Intel-CXX.cmake @@ -0,0 +1,4 @@ +include(Platform/Windows-Intel) +set(_COMPILE_CXX " /TP") +set(_FLAGS_CXX " /GX /GR") +__windows_compiler_intel(CXX) diff --git a/Modules/Platform/Windows-Intel-Fortran.cmake b/Modules/Platform/Windows-Intel-Fortran.cmake new file mode 100644 index 0000000..5c016a8 --- /dev/null +++ b/Modules/Platform/Windows-Intel-Fortran.cmake @@ -0,0 +1,11 @@ +include(Platform/Windows-Intel) +set(CMAKE_BUILD_TYPE_INIT Debug) +set(_COMPILE_Fortran " /fpp") +set(CMAKE_Fortran_MODDIR_FLAG "-module:") +set(CMAKE_Fortran_STANDARD_LIBRARIES_INIT "user32.lib") +__windows_compiler_intel(Fortran) +SET (CMAKE_Fortran_FLAGS_INIT "/W1 /nologo /fpp /libs:dll /threads") +SET (CMAKE_Fortran_FLAGS_DEBUG_INIT "/debug:full /dbglibs") +SET (CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "/O1 /D NDEBUG") +SET (CMAKE_Fortran_FLAGS_RELEASE_INIT "/O2 /D NDEBUG") +SET (CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "/O2 /debug:full /D NDEBUG") diff --git a/Modules/Platform/Windows-Intel.cmake b/Modules/Platform/Windows-Intel.cmake new file mode 100644 index 0000000..e7462ba --- /dev/null +++ b/Modules/Platform/Windows-Intel.cmake @@ -0,0 +1,108 @@ + +#============================================================================= +# Copyright 2002-2010 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.) + +# This module is shared by multiple languages; use include blocker. +if(__WINDOWS_INTEL) + return() +endif() +set(__WINDOWS_INTEL 1) + +# make sure to enable languages after setting configuration types +ENABLE_LANGUAGE(RC) +SET(CMAKE_COMPILE_RESOURCE "rc /fo ") + +SET(CMAKE_LIBRARY_PATH_FLAG "-LIBPATH:") +SET(CMAKE_LINK_LIBRARY_FLAG "") +SET(WIN32 1) +IF(CMAKE_VERBOSE_MAKEFILE) + SET(CMAKE_CL_NOLOGO) +ELSE(CMAKE_VERBOSE_MAKEFILE) + SET(CMAKE_CL_NOLOGO "/nologo") +ENDIF(CMAKE_VERBOSE_MAKEFILE) +SET(CMAKE_COMPILE_RESOURCE "rc /fo ") +SET(CMAKE_CREATE_WIN32_EXE /subsystem:windows) +SET(CMAKE_CREATE_CONSOLE_EXE /subsystem:console) + +# default to Debug builds +#SET(CMAKE_BUILD_TYPE_INIT Debug) +SET(CMAKE_BUILD_TYPE_INIT Release) + +SET(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib") +SET(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}") + +# executable linker flags +SET (CMAKE_LINK_DEF_FILE_FLAG "/DEF:") +IF(MSVC_C_ARCHITECTURE_ID) + SET(_MACHINE_ARCH_FLAG "/machine:${MSVC_C_ARCHITECTURE_ID}") +ELSEIF(MSVC_CXX_ARCHITECTURE_ID) + SET(_MACHINE_ARCH_FLAG "/machine:${MSVC_CXX_ARCHITECTURE_ID}") +ELSEIF(MSVC_Fortran_ARCHITECTURE_ID) + SET(_MACHINE_ARCH_FLAG "/machine:${MSVC_Fortran_ARCHITECTURE_ID}") +ENDIF() +SET (CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /INCREMENTAL:YES ${_MACHINE_ARCH_FLAG}") +SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug") +SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug") + +SET (CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT}) +SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT}) +SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT}) +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_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT}) + +INCLUDE("${CMAKE_PLATFORM_ROOT_BIN}/CMakeIntelInformation.cmake" OPTIONAL) + +IF(NOT _INTEL_XILINK_TEST_RUN) + EXECUTE_PROCESS(COMMAND xilink /? + ERROR_VARIABLE _XILINK_ERR + OUTPUT_VARIABLE _XILINK_HELP) + IF(_XILINK_HELP MATCHES MANIFEST) + SET(_INTEL_COMPILER_SUPPORTS_MANIFEST 1) + ENDIF(_XILINK_HELP MATCHES MANIFEST) + IF(NOT EXISTS "${CMAKE_PLATFORM_ROOT_BIN}/CMakeIntelInformation.cmake") + FILE(WRITE ${CMAKE_PLATFORM_ROOT_BIN}/CMakeIntelInformation.cmake + " +SET(_INTEL_XILINK_TEST_RUN 1) +SET(_INTEL_COMPILER_SUPPORTS_MANIFEST ${_INTEL_COMPILER_SUPPORTS_MANIFEST}) +") + ENDIF(NOT EXISTS "${CMAKE_PLATFORM_ROOT_BIN}/CMakeIntelInformation.cmake") +ENDIF(NOT _INTEL_XILINK_TEST_RUN) + +macro(__windows_compiler_intel lang) + set(CMAKE_${lang}_COMPILE_OBJECT + " ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO}${_COMPILE_${lang}} /Fo -c ${CMAKE_END_TEMP_FILE}") + set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE + " > ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO}${_COMPILE_${lang}} -E ${CMAKE_END_TEMP_FILE}") + set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1) + set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "lib ${CMAKE_CL_NOLOGO} /out: ") + set(CMAKE_${lang}_CREATE_SHARED_LIBRARY + "xilink ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /out: /implib: /pdb: /dll ${CMAKE_END_TEMP_FILE}") + set(CMAKE_${lang}_CREATE_SHARED_MODULE "${CMAKE_${lang}_CREATE_SHARED_LIBRARY}") + set(CMAKE_${lang}_LINK_EXECUTABLE + " ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /Fe -link /implib: ${CMAKE_END_TEMP_FILE}") + set(CMAKE_${lang}_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000${_FLAGS_${lang}}") + set(CMAKE_${lang}_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Od /GZ") + set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "/DNDEBUG /MD /O1") + set(CMAKE_${lang}_FLAGS_RELEASE_INIT "/DNDEBUG /MD /O2") + set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "/DNDEBUG /MD /Zi /O2") + + if(_INTEL_COMPILER_SUPPORTS_MANIFEST) + SET(CMAKE_${lang}_LINK_EXECUTABLE + " -E vs_link_exe ${CMAKE_${lang}_LINK_EXECUTABLE}") + SET(CMAKE_${lang}_CREATE_SHARED_LIBRARY + " -E vs_link_dll ${CMAKE_${lang}_CREATE_SHARED_LIBRARY}") + SET(CMAKE_${lang}_CREATE_SHARED_MODULE + " -E vs_link_dll ${CMAKE_${lang}_CREATE_SHARED_MODULE}") + endif() +endmacro() diff --git a/Modules/Platform/Windows-NMcl.cmake b/Modules/Platform/Windows-NMcl.cmake new file mode 100644 index 0000000..7add0b0 --- /dev/null +++ b/Modules/Platform/Windows-NMcl.cmake @@ -0,0 +1,4 @@ +# this is for the numega compiler which is really a front +# end for visual studio, but adds memory checking code. + +include(Platform/Windows-cl) diff --git a/Modules/Platform/Windows-cl.cmake b/Modules/Platform/Windows-cl.cmake new file mode 100644 index 0000000..be6abb6 --- /dev/null +++ b/Modules/Platform/Windows-cl.cmake @@ -0,0 +1,253 @@ +# try to load any previously computed information for C on this platform +INCLUDE( ${CMAKE_PLATFORM_ROOT_BIN}/CMakeCPlatform.cmake OPTIONAL) +# try to load any previously computed information for CXX on this platform +INCLUDE( ${CMAKE_PLATFORM_ROOT_BIN}/CMakeCXXPlatform.cmake OPTIONAL) + +SET(WIN32 1) + +INCLUDE(Platform/cl) + +SET(CMAKE_CREATE_WIN32_EXE /subsystem:windows) +SET(CMAKE_CREATE_CONSOLE_EXE /subsystem:console) + +IF(CMAKE_GENERATOR MATCHES "Visual Studio 6") + SET (CMAKE_NO_BUILD_TYPE 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6") +IF(NOT CMAKE_NO_BUILD_TYPE AND CMAKE_GENERATOR MATCHES "Visual Studio") + SET (CMAKE_NO_BUILD_TYPE 1) + SET (CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo" CACHE STRING + "Semicolon separated list of supported configuration types, only supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything else will be ignored.") + MARK_AS_ADVANCED(CMAKE_CONFIGURATION_TYPES) +ENDIF(NOT CMAKE_NO_BUILD_TYPE AND CMAKE_GENERATOR MATCHES "Visual Studio") +# does the compiler support pdbtype and is it the newer compiler +IF(CMAKE_GENERATOR MATCHES "Visual Studio 8") + SET(CMAKE_COMPILER_2005 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 8") + +# make sure to enable languages after setting configuration types +ENABLE_LANGUAGE(RC) +SET(CMAKE_COMPILE_RESOURCE "rc /fo ") + +# for nmake we need to compute some information about the compiler +# that is being used. +# the compiler may be free command line, 6, 7, or 71, and +# each have properties that must be determined. +# to avoid running these tests with each cmake run, the +# test results are saved in CMakeCPlatform.cmake, a file +# that is automatically copied into try_compile directories +# by the global generator. +SET(MSVC_IDE 1) +IF(CMAKE_GENERATOR MATCHES "Makefiles" OR CMAKE_GENERATOR MATCHES "Ninja") + SET(MSVC_IDE 0) + IF(NOT CMAKE_VC_COMPILER_TESTS_RUN) + SET(CMAKE_VC_COMPILER_TESTS 1) + SET(testNmakeCLVersionFile + "${CMAKE_ROOT}/Modules/CMakeTestNMakeCLVersion.c") + STRING(REGEX REPLACE "/" "\\\\" testNmakeCLVersionFile "${testNmakeCLVersionFile}") + MESSAGE(STATUS "Check for CL compiler version") + SET(CMAKE_TEST_COMPILER ${CMAKE_C_COMPILER}) + IF (NOT CMAKE_C_COMPILER) + SET(CMAKE_TEST_COMPILER ${CMAKE_CXX_COMPILER}) + ENDIF(NOT CMAKE_C_COMPILER) + EXEC_PROGRAM(${CMAKE_TEST_COMPILER} + ARGS /nologo -EP \"${testNmakeCLVersionFile}\" + OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT + RETURN_VALUE CMAKE_COMPILER_RETURN + ) + IF(NOT CMAKE_COMPILER_RETURN) + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining the version of compiler passed with the following output:\n" + "${CMAKE_COMPILER_OUTPUT}\n\n") + STRING(REGEX REPLACE "\n" " " compilerVersion "${CMAKE_COMPILER_OUTPUT}") + STRING(REGEX REPLACE ".*VERSION=(.*)" "\\1" + compilerVersion "${compilerVersion}") + MESSAGE(STATUS "Check for CL compiler version - ${compilerVersion}") + SET(MSVC60) + SET(MSVC70) + SET(MSVC71) + SET(MSVC80) + SET(CMAKE_COMPILER_2005) + IF("${compilerVersion}" LESS 1300) + SET(MSVC60 1) + SET(CMAKE_COMPILER_SUPPORTS_PDBTYPE 1) + ENDIF("${compilerVersion}" LESS 1300) + IF("${compilerVersion}" EQUAL 1300) + SET(MSVC70 1) + SET(CMAKE_COMPILER_SUPPORTS_PDBTYPE 0) + ENDIF("${compilerVersion}" EQUAL 1300) + IF("${compilerVersion}" EQUAL 1310) + SET(MSVC71 1) + SET(CMAKE_COMPILER_SUPPORTS_PDBTYPE 0) + ENDIF("${compilerVersion}" EQUAL 1310) + IF("${compilerVersion}" EQUAL 1400) + SET(MSVC80 1) + SET(CMAKE_COMPILER_2005 1) + ENDIF("${compilerVersion}" EQUAL 1400) + IF("${compilerVersion}" EQUAL 1500) + SET(MSVC90 1) + ENDIF("${compilerVersion}" EQUAL 1500) + IF("${compilerVersion}" EQUAL 1600) + SET(MSVC10 1) + ENDIF("${compilerVersion}" EQUAL 1600) + SET(MSVC_VERSION "${compilerVersion}") + ELSE(NOT CMAKE_COMPILER_RETURN) + MESSAGE(STATUS "Check for CL compiler version - failed") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining the version of compiler failed with the following output:\n" + "${CMAKE_COMPILER_OUTPUT}\n\n") + ENDIF(NOT CMAKE_COMPILER_RETURN) + # try to figure out if we are running the free command line + # tools from Microsoft. These tools do not provide debug libraries, + # so the link flags used have to be different. + MAKE_DIRECTORY("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp2") + SET(testForFreeVCFile + "${CMAKE_ROOT}/Modules/CMakeTestForFreeVC.cxx") + STRING(REGEX REPLACE "/" "\\\\" testForFreeVCFile "${testForFreeVCFile}") + MESSAGE(STATUS "Check if this is a free VC compiler") + EXEC_PROGRAM(${CMAKE_TEST_COMPILER} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp2 + ARGS /nologo /MD /EHsc + \"${testForFreeVCFile}\" + OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT + RETURN_VALUE CMAKE_COMPILER_RETURN + ) + IF(CMAKE_COMPILER_RETURN) + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if this is a free VC compiler failed with the following output:\n" + "${CMAKE_COMPILER_OUTPUT}\n\n") + MESSAGE(STATUS "Check if this is a free VC compiler - yes") + SET(CMAKE_USING_VC_FREE_TOOLS 1) + ELSE(CMAKE_COMPILER_RETURN) + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if this is a free VC compiler passed with the following output:\n" + "${CMAKE_COMPILER_OUTPUT}\n\n") + MESSAGE(STATUS "Check if this is a free VC compiler - no") + SET(CMAKE_USING_VC_FREE_TOOLS 0) + ENDIF(CMAKE_COMPILER_RETURN) + MAKE_DIRECTORY("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp3") + ENDIF(NOT CMAKE_VC_COMPILER_TESTS_RUN) +ENDIF(CMAKE_GENERATOR MATCHES "Makefiles" OR CMAKE_GENERATOR MATCHES "Ninja") + +IF(MSVC_C_ARCHITECTURE_ID MATCHES 64) + SET(CMAKE_CL_64 1) +ELSE(MSVC_C_ARCHITECTURE_ID MATCHES 64) + SET(CMAKE_CL_64 0) +ENDIF(MSVC_C_ARCHITECTURE_ID MATCHES 64) +IF(CMAKE_FORCE_WIN64 OR CMAKE_FORCE_IA64) + SET(CMAKE_CL_64 1) +ENDIF(CMAKE_FORCE_WIN64 OR CMAKE_FORCE_IA64) + +IF("${MSVC_VERSION}" GREATER 1599) + SET(MSVC_INCREMENTAL_DEFAULT ON) +ENDIF() + +# default to Debug builds +IF(MSVC_VERSION GREATER 1310) + # for 2005 make sure the manifest is put in the dll with mt + SET(CMAKE_CXX_CREATE_SHARED_LIBRARY " -E vs_link_dll ${CMAKE_CXX_CREATE_SHARED_LIBRARY}") + SET(CMAKE_CXX_CREATE_SHARED_MODULE " -E vs_link_dll ${CMAKE_CXX_CREATE_SHARED_MODULE}") + # create a C shared library + SET(CMAKE_C_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY}") + # create a C shared module just copy the shared library rule + SET(CMAKE_C_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE}") + SET(CMAKE_CXX_LINK_EXECUTABLE " -E vs_link_exe ${CMAKE_CXX_LINK_EXECUTABLE}") + SET(CMAKE_C_LINK_EXECUTABLE " -E vs_link_exe ${CMAKE_C_LINK_EXECUTABLE}") + + SET(CMAKE_BUILD_TYPE_INIT Debug) + SET (CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR") + SET (CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1") + SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MD /O1 /Ob1 /D NDEBUG") + SET (CMAKE_CXX_FLAGS_RELEASE_INIT "/MD /O2 /Ob2 /D NDEBUG") + SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /Ob1 /D NDEBUG") + SET (CMAKE_C_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000") + SET (CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1") + SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "/MD /O1 /Ob1 /D NDEBUG") + SET (CMAKE_C_FLAGS_RELEASE_INIT "/MD /O2 /Ob2 /D NDEBUG") + SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /Ob1 /D NDEBUG") + SET (CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib ") + SET (CMAKE_EXE_LINKER_FLAGS_INIT "${CMAKE_EXE_LINKER_FLAGS_INIT}") +ELSE(MSVC_VERSION GREATER 1310) + IF(CMAKE_USING_VC_FREE_TOOLS) + MESSAGE(STATUS "Using FREE VC TOOLS, NO DEBUG available") + SET(CMAKE_BUILD_TYPE_INIT Release) + SET (CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR") + SET (CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /GZ") + SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") + SET (CMAKE_CXX_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") + SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") + SET (CMAKE_C_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000") + SET (CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /GZ") + SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") + SET (CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") + SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") + ELSE(CMAKE_USING_VC_FREE_TOOLS) + SET(CMAKE_BUILD_TYPE_INIT Debug) + SET (CMAKE_CXX_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR") + SET (CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od /GZ") + SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MD /O1 /Ob1 /D NDEBUG") + SET (CMAKE_CXX_FLAGS_RELEASE_INIT "/MD /O2 /Ob2 /D NDEBUG") + SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /Ob1 /D NDEBUG") + SET (CMAKE_C_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000") + SET (CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od /GZ") + SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "/MD /O1 /Ob1 /D NDEBUG") + SET (CMAKE_C_FLAGS_RELEASE_INIT "/MD /O2 /Ob2 /D NDEBUG") + SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /Ob1 /D NDEBUG") + ENDIF(CMAKE_USING_VC_FREE_TOOLS) + SET (CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib") +ENDIF(MSVC_VERSION GREATER 1310) + +SET(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}") + +# executable linker flags +SET (CMAKE_LINK_DEF_FILE_FLAG "/DEF:") +# set the stack size and the machine type +SET(_MACHINE_ARCH_FLAG ${MSVC_C_ARCHITECTURE_ID}) +IF(NOT _MACHINE_ARCH_FLAG) + SET(_MACHINE_ARCH_FLAG ${MSVC_CXX_ARCHITECTURE_ID}) +ENDIF(NOT _MACHINE_ARCH_FLAG) +SET (CMAKE_EXE_LINKER_FLAGS_INIT + "${CMAKE_EXE_LINKER_FLAGS_INIT} /STACK:10000000 /machine:${_MACHINE_ARCH_FLAG}") + +# add /debug and /INCREMENTAL:YES to DEBUG and RELWITHDEBINFO also add pdbtype +# on versions that support it +SET( MSVC_INCREMENTAL_YES_FLAG "") +IF(NOT MSVC_INCREMENTAL_DEFAULT) + SET( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:YES") +ELSE() + SET( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL" ) +ENDIF() + +IF (CMAKE_COMPILER_SUPPORTS_PDBTYPE) + SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug /pdbtype:sept ${MSVC_INCREMENTAL_YES_FLAG}") + SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug /pdbtype:sept ${MSVC_INCREMENTAL_YES_FLAG}") +ELSE (CMAKE_COMPILER_SUPPORTS_PDBTYPE) + SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug ${MSVC_INCREMENTAL_YES_FLAG}") + SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug ${MSVC_INCREMENTAL_YES_FLAG}") +ENDIF (CMAKE_COMPILER_SUPPORTS_PDBTYPE) +# for release and minsize release default to no incremental linking +SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL_INIT "/INCREMENTAL:NO") +SET(CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT "/INCREMENTAL:NO") + +# copy the EXE_LINKER flags to SHARED and MODULE linker flags +# shared linker flags +SET (CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT}) +SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT}) +SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT}) +SET (CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT ${CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT}) +SET (CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL_INIT ${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL_INIT}) +# module linker flags +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_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT}) +SET (CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT ${CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT}) +SET (CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL_INIT ${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL_INIT}) + +# save computed information for this platform +IF(NOT EXISTS "${CMAKE_PLATFORM_ROOT_BIN}/CMakeCPlatform.cmake") + CONFIGURE_FILE(${CMAKE_ROOT}/Modules/Platform/Windows-cl.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCPlatform.cmake IMMEDIATE) +ENDIF(NOT EXISTS "${CMAKE_PLATFORM_ROOT_BIN}/CMakeCPlatform.cmake") + +IF(NOT EXISTS "${CMAKE_PLATFORM_ROOT_BIN}/CMakeCXXPlatform.cmake") + CONFIGURE_FILE(${CMAKE_ROOT}/Modules/Platform/Windows-cl.cmake.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCXXPlatform.cmake IMMEDIATE) +ENDIF(NOT EXISTS "${CMAKE_PLATFORM_ROOT_BIN}/CMakeCXXPlatform.cmake") diff --git a/Modules/Platform/Windows-cl.cmake.in b/Modules/Platform/Windows-cl.cmake.in new file mode 100644 index 0000000..82a0e59 --- /dev/null +++ b/Modules/Platform/Windows-cl.cmake.in @@ -0,0 +1,14 @@ +SET(CMAKE_VC_COMPILER_TESTS_RUN 1) +SET(CMAKE_COMPILER_SUPPORTS_PDBTYPE @CMAKE_COMPILER_SUPPORTS_PDBTYPE@) +SET(CMAKE_COMPILER_2005 @CMAKE_COMPILER_2005@) +SET(CMAKE_USING_VC_FREE_TOOLS @CMAKE_USING_VC_FREE_TOOLS@) +SET(CMAKE_CL_64 @CMAKE_CL_64@) +SET(MSVC60 @MSVC60@) +SET(MSVC70 @MSVC70@) +SET(MSVC71 @MSVC71@) +SET(MSVC80 @MSVC80@) +SET(MSVC90 @MSVC90@) +SET(MSVC10 @MSVC10@) +SET(MSVC_IDE @MSVC_IDE@) +SET(MSVC_VERSION @MSVC_VERSION@) +SET(WIN32 1) diff --git a/Modules/Platform/Windows-df.cmake b/Modules/Platform/Windows-df.cmake new file mode 100644 index 0000000..f5046bf --- /dev/null +++ b/Modules/Platform/Windows-df.cmake @@ -0,0 +1,70 @@ +# compiler support for fortran CVF compiler on windows + +SET(CMAKE_WINDOWS_OBJECT_PATH 1) +SET(CMAKE_LIBRARY_PATH_FLAG "-LIBPATH:") +SET(CMAKE_LINK_LIBRARY_FLAG "") +SET(WIN32 1) +IF(CMAKE_VERBOSE_MAKEFILE) + SET(CMAKE_CL_NOLOGO) +ELSE(CMAKE_VERBOSE_MAKEFILE) + SET(CMAKE_CL_NOLOGO "/nologo") +ENDIF(CMAKE_VERBOSE_MAKEFILE) + +SET(CMAKE_Fortran_MODDIR_FLAG "-module:") + +SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY + "link ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /out: /dll ${CMAKE_END_TEMP_FILE}") + +SET(CMAKE_Fortran_CREATE_SHARED_MODULE ${CMAKE_Fortran_CREATE_SHARED_LIBRARY}) + +# create a C++ static library +SET(CMAKE_Fortran_CREATE_STATIC_LIBRARY "lib ${CMAKE_CL_NOLOGO} /out: ") + +# compile a C++ file into an object file +SET(CMAKE_Fortran_COMPILE_OBJECT + " ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} /object: /compile_only ${CMAKE_END_TEMP_FILE}") + +SET(CMAKE_COMPILE_RESOURCE "rc /fo ") + +SET(CMAKE_Fortran_LINK_EXECUTABLE + " ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /exe: /link ${CMAKE_END_TEMP_FILE}") + +SET(CMAKE_CREATE_WIN32_EXE /winapp) +SET(CMAKE_CREATE_CONSOLE_EXE ) + +IF(CMAKE_GENERATOR MATCHES "Visual Studio 6") + SET (CMAKE_NO_BUILD_TYPE 1) +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 6") +IF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR CMAKE_GENERATOR MATCHES "Visual Studio 8") + SET (CMAKE_NO_BUILD_TYPE 1) + SET (CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo" CACHE STRING + "Semicolon separated list of supported configuration types, only supports Debug, Release, MinSizeRel, and RelWithDebInfo, anything else will be ignored.") +ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR CMAKE_GENERATOR MATCHES "Visual Studio 8") +# does the compiler support pdbtype and is it the newer compiler + +SET(CMAKE_BUILD_TYPE_INIT Debug) +SET (CMAKE_Fortran_FLAGS_INIT "") +SET (CMAKE_Fortran_FLAGS_DEBUG_INIT "/debug:full") +SET (CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "/Optimize:2 /Define:NDEBUG") +SET (CMAKE_Fortran_FLAGS_RELEASE_INIT "/Optimize:1 /Define:NDEBUG") +SET (CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "/Optimize:1 /debug:full /Define:NDEBUG") + +SET (CMAKE_Fortran_STANDARD_LIBRARIES_INIT "user32.lib") + +# executable linker flags +SET (CMAKE_LINK_DEF_FILE_FLAG "/DEF:") +SET (CMAKE_EXE_LINKER_FLAGS_INIT " /INCREMENTAL:YES") +IF (CMAKE_COMPILER_SUPPORTS_PDBTYPE) + SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug /pdbtype:sept") + SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug /pdbtype:sept") +ELSE (CMAKE_COMPILER_SUPPORTS_PDBTYPE) + SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug") + SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug") +ENDIF (CMAKE_COMPILER_SUPPORTS_PDBTYPE) + +SET (CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT}) +SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT}) +SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT}) +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_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT}) diff --git a/Modules/Platform/Windows-wcl386.cmake b/Modules/Platform/Windows-wcl386.cmake new file mode 100644 index 0000000..e1140df --- /dev/null +++ b/Modules/Platform/Windows-wcl386.cmake @@ -0,0 +1,121 @@ +SET(CMAKE_LIBRARY_PATH_FLAG "libpath ") +SET(CMAKE_LINK_LIBRARY_FLAG "library ") +SET(CMAKE_LINK_LIBRARY_FILE_FLAG "library") + +IF(CMAKE_VERBOSE_MAKEFILE) + SET(CMAKE_WCL_QUIET) + SET(CMAKE_WLINK_QUIET) + SET(CMAKE_LIB_QUIET) +ELSE(CMAKE_VERBOSE_MAKEFILE) + SET(CMAKE_WCL_QUIET "-zq") + SET(CMAKE_WLINK_QUIET "option quiet") + SET(CMAKE_LIB_QUIET "-q") +ENDIF(CMAKE_VERBOSE_MAKEFILE) + +set(CMAKE_CREATE_WIN32_EXE "system nt_win" ) +SET(CMAKE_CREATE_CONSOLE_EXE "system nt" ) + +SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "debug all" ) +SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT "debug all" ) +SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "debug all" ) +SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT "debug all" ) + +set (CMAKE_SHARED_LIBRARY_C_FLAGS "-bd" ) + +SET(CMAKE_RC_COMPILER "rc" ) + +SET(CMAKE_BUILD_TYPE_INIT Debug) +SET (CMAKE_CXX_FLAGS_INIT "-w=3 -xs") +SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-br -bm -d2") +SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-br -bm -os -dNDEBUG") +SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-br -bm -ot -dNDEBUG") +SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-br -bm -d2 -ot -dNDEBUG") +SET (CMAKE_C_FLAGS_INIT "-w=3 ") +SET (CMAKE_C_FLAGS_DEBUG_INIT "-br -bm -d2 -od") +SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "-br -bm -os -dNDEBUG") +SET (CMAKE_C_FLAGS_RELEASE_INIT "-br -bm -ot -dNDEBUG") +SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-br -bm -d2 -ot -dNDEBUG") +SET (CMAKE_C_STANDARD_LIBRARIES_INIT "library clbrdll.lib library plbrdll.lib library kernel32.lib library user32.lib library gdi32.lib library winspool.lib library comdlg32.lib library advapi32.lib library shell32.lib library ole32.lib library oleaut32.lib library uuid.lib library odbc32.lib library odbccp32.lib") +SET (CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}") + +SET(CMAKE_C_CREATE_IMPORT_LIBRARY + "wlib -c -q -n -b +''") +SET(CMAKE_CXX_CREATE_IMPORT_LIBRARY ${CMAKE_C_CREATE_IMPORT_LIBRARY}) + +SET(CMAKE_C_LINK_EXECUTABLE + "wlink ${CMAKE_START_TEMP_FILE} ${CMAKE_WLINK_QUIET} name '' option caseexact file {} ${CMAKE_END_TEMP_FILE}") + + +SET(CMAKE_CXX_LINK_EXECUTABLE ${CMAKE_C_LINK_EXECUTABLE}) + +# compile a C++ file into an object file +SET(CMAKE_CXX_COMPILE_OBJECT + " ${CMAKE_START_TEMP_FILE} ${CMAKE_WCL_QUIET} -dWIN32 -d+ -fo -c -cc++ ${CMAKE_END_TEMP_FILE}") + +# compile a C file into an object file +SET(CMAKE_C_COMPILE_OBJECT + " ${CMAKE_START_TEMP_FILE} ${CMAKE_WCL_QUIET} -dWIN32 -d+ -fo -c -cc ${CMAKE_END_TEMP_FILE}") + +# preprocess a C source file +SET(CMAKE_C_CREATE_PREPROCESSED_SOURCE + " ${CMAKE_START_TEMP_FILE} ${CMAKE_WCL_QUIET} -dWIN32 -d+ -fo -pl -cc ${CMAKE_END_TEMP_FILE}") + +# preprocess a C++ source file +SET(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE + " ${CMAKE_START_TEMP_FILE} ${CMAKE_WCL_QUIET} -dWIN32 -d+ -fo -pl -cc++ ${CMAKE_END_TEMP_FILE}") + +SET(CMAKE_CXX_CREATE_SHARED_MODULE + "wlink ${CMAKE_START_TEMP_FILE} system nt_dll ${CMAKE_WLINK_QUIET} name '' option caseexact file {} ${CMAKE_END_TEMP_FILE}") +SET(CMAKE_CXX_CREATE_SHARED_LIBRARY + ${CMAKE_CXX_CREATE_SHARED_MODULE} + ${CMAKE_CXX_CREATE_IMPORT_LIBRARY}) + +# create a C shared library +SET(CMAKE_C_CREATE_SHARED_LIBRARY ${CMAKE_CXX_CREATE_SHARED_LIBRARY}) + +# create a C shared module +SET(CMAKE_C_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_MODULE}) + +# create a C++ static library +SET(CMAKE_CXX_CREATE_STATIC_LIBRARY "wlib ${CMAKE_LIB_QUIET} -c -n -b '' ") + +# create a C static library +SET(CMAKE_C_CREATE_STATIC_LIBRARY ${CMAKE_CXX_CREATE_STATIC_LIBRARY}) + +IF(NOT CMAKE_WATCOM_COMPILER_TESTS_RUN) + SET(CMAKE_WATCOM_COMPILER_TESTS_RUN 1) + SET(testWatcomVersionFile + "${CMAKE_ROOT}/Modules/CMakeTestWatcomVersion.c") + STRING(REGEX REPLACE "/" "\\\\" testWatcomVersionFile "${testWatcomVersionFile}") + MESSAGE(STATUS "Check for Watcom compiler version") + SET(CMAKE_TEST_COMPILER ${CMAKE_C_COMPILER}) + IF (NOT CMAKE_C_COMPILER) + SET(CMAKE_TEST_COMPILER ${CMAKE_CXX_COMPILER}) + ENDIF() + EXECUTE_PROCESS(COMMAND ${CMAKE_TEST_COMPILER} + -q -pc \"${testWatcomVersionFile}\" + OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT + RESULT_VARIABLE CMAKE_COMPILER_RETURN + ) + STRING(REGEX REPLACE "\n" " " compilerVersion "${CMAKE_COMPILER_OUTPUT}") + STRING(REGEX REPLACE ".*VERSION=(.*)" "\\1" + compilerVersion "${compilerVersion}") + IF("${CMAKE_COMPILER_RETURN}" STREQUAL "0") + SET(WATCOM16) + SET(WATCOM17) + SET(WATCOM18) + SET(WATCOM19) + IF("${compilerVersion}" LESS 1270) + SET(WATCOM16 1) + ENDIF() + IF("${compilerVersion}" EQUAL 1270) + SET(WATCOM17 1) + ENDIF() + IF("${compilerVersion}" EQUAL 1280) + SET(WATCOM18 1) + ENDIF() + IF("${compilerVersion}" EQUAL 1290) + SET(WATCOM19 1) + ENDIF() + ENDIF() +ENDIF() diff --git a/Modules/Platform/Windows-windres.cmake b/Modules/Platform/Windows-windres.cmake new file mode 100644 index 0000000..8bc1b15 --- /dev/null +++ b/Modules/Platform/Windows-windres.cmake @@ -0,0 +1 @@ +SET(CMAKE_RC_COMPILE_OBJECT " -O coff ") diff --git a/Modules/Platform/Windows.cmake b/Modules/Platform/Windows.cmake new file mode 100644 index 0000000..09cb8d3 --- /dev/null +++ b/Modules/Platform/Windows.cmake @@ -0,0 +1,36 @@ +SET(WIN32 1) + +SET(CMAKE_STATIC_LIBRARY_PREFIX "") +SET(CMAKE_STATIC_LIBRARY_SUFFIX ".lib") +SET(CMAKE_SHARED_LIBRARY_PREFIX "") # lib +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") # .so +SET(CMAKE_IMPORT_LIBRARY_PREFIX "") +SET(CMAKE_IMPORT_LIBRARY_SUFFIX ".lib") +SET(CMAKE_EXECUTABLE_SUFFIX ".exe") # .exe +SET(CMAKE_LINK_LIBRARY_SUFFIX ".lib") +SET(CMAKE_DL_LIBS "") + +SET(CMAKE_FIND_LIBRARY_PREFIXES "") +SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib") + +# for borland make long command lines are redirected to a file +# with the following syntax, see Windows-bcc32.cmake for use +IF(CMAKE_GENERATOR MATCHES "Borland") + SET(CMAKE_START_TEMP_FILE "@&&|\n") + SET(CMAKE_END_TEMP_FILE "\n|") +ENDIF(CMAKE_GENERATOR MATCHES "Borland") + +# for nmake make long command lines are redirected to a file +# with the following syntax, see Windows-bcc32.cmake for use +IF(CMAKE_GENERATOR MATCHES "NMake") + SET(CMAKE_START_TEMP_FILE "@<<\n") + SET(CMAKE_END_TEMP_FILE "\n<<") +ENDIF(CMAKE_GENERATOR MATCHES "NMake") + +INCLUDE(Platform/WindowsPaths) + +# uncomment these out to debug nmake and borland makefiles +#SET(CMAKE_START_TEMP_FILE "") +#SET(CMAKE_END_TEMP_FILE "") +#SET(CMAKE_VERBOSE_MAKEFILE 1) + diff --git a/Modules/Platform/WindowsPaths.cmake b/Modules/Platform/WindowsPaths.cmake new file mode 100644 index 0000000..c7b15b3 --- /dev/null +++ b/Modules/Platform/WindowsPaths.cmake @@ -0,0 +1,96 @@ + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Block multiple inclusion because "CMakeCInformation.cmake" includes +# "Platform/${CMAKE_SYSTEM_NAME}" even though the generic module +# "CMakeSystemSpecificInformation.cmake" already included it. +# The extra inclusion is a work-around documented next to the include() +# call, so this can be removed when the work-around is removed. +IF(__WINDOWS_PATHS_INCLUDED) + RETURN() +ENDIF() +SET(__WINDOWS_PATHS_INCLUDED 1) + +# Add the program-files folder(s) to the list of installation +# prefixes. +# +# Windows 64-bit Binary: +# ENV{ProgramFiles(x86)} = [C:\Program Files (x86)] +# ENV{ProgramFiles} = [C:\Program Files] +# ENV{ProgramW6432} = +# (executed from cygwin): +# ENV{ProgramFiles(x86)} = +# ENV{ProgramFiles} = [C:\Program Files] +# ENV{ProgramW6432} = +# +# Windows 32-bit Binary: +# ENV{ProgramFiles(x86)} = [C:\Program Files (x86)] +# ENV{ProgramFiles} = [C:\Program Files (x86)] +# ENV{ProgramW6432} = [C:\Program Files] +# (executed from cygwin): +# ENV{ProgramFiles(x86)} = +# ENV{ProgramFiles} = [C:\Program Files (x86)] +# ENV{ProgramW6432} = [C:\Program Files] +IF(DEFINED "ENV{ProgramW6432}") + # 32-bit binary on 64-bit windows. + # The 64-bit program files are in ProgramW6432. + LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH "$ENV{ProgramW6432}") + + # The 32-bit program files are in ProgramFiles. + IF(DEFINED "ENV{ProgramFiles}") + LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH "$ENV{ProgramFiles}") + ENDIF() +ELSE() + # 64-bit binary, or 32-bit binary on 32-bit windows. + IF(DEFINED "ENV{ProgramFiles}") + LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH "$ENV{ProgramFiles}") + ENDIF() + IF(DEFINED "ENV{ProgramFiles(x86)}") + # 64-bit binary. 32-bit program files are in ProgramFiles(x86). + LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH "$ENV{ProgramFiles(x86)}") + ELSEIF(DEFINED "ENV{SystemDrive}") + # Guess the 32-bit program files location. + IF(EXISTS "$ENV{SystemDrive}/Program Files (x86)") + LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH + "$ENV{SystemDrive}/Program Files (x86)") + ENDIF() + ENDIF() +ENDIF() + +# Add the CMake install location. +GET_FILENAME_COMPONENT(_CMAKE_INSTALL_DIR "${CMAKE_ROOT}" PATH) +GET_FILENAME_COMPONENT(_CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" PATH) +LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH "${_CMAKE_INSTALL_DIR}") + +# Add other locations. +LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH + # Project install destination. + "${CMAKE_INSTALL_PREFIX}" + + # MinGW (useful when cross compiling from linux with CMAKE_FIND_ROOT_PATH set) + / + ) + +LIST(APPEND CMAKE_SYSTEM_INCLUDE_PATH + ) + +# mingw can also link against dlls which can also be in /bin, so list this too +LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH + "${CMAKE_INSTALL_PREFIX}/bin" + "${_CMAKE_INSTALL_DIR}/bin" + /bin + ) + +LIST(APPEND CMAKE_SYSTEM_PROGRAM_PATH + ) diff --git a/Modules/Platform/Xenix.cmake b/Modules/Platform/Xenix.cmake new file mode 100644 index 0000000..cf9d17b --- /dev/null +++ b/Modules/Platform/Xenix.cmake @@ -0,0 +1,2 @@ +INCLUDE(Platform/UnixPaths) + diff --git a/Modules/Platform/cl.cmake b/Modules/Platform/cl.cmake new file mode 100644 index 0000000..c0f014b --- /dev/null +++ b/Modules/Platform/cl.cmake @@ -0,0 +1,62 @@ +SET(CMAKE_LIBRARY_PATH_FLAG "-LIBPATH:") +SET(CMAKE_LINK_LIBRARY_FLAG "") +SET(MSVC 1) + +# hack: if a new cmake (which uses CMAKE__LINKER) runs on an old build tree +# (where link was hardcoded) and where CMAKE_LINKER isn't in the cache +# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun) +# hardcode CMAKE_LINKER here to link, so it behaves as it did before, Alex +IF(NOT DEFINED CMAKE_LINKER) + SET(CMAKE_LINKER link) +ENDIF(NOT DEFINED CMAKE_LINKER) + +IF(CMAKE_VERBOSE_MAKEFILE) + SET(CMAKE_CL_NOLOGO) +ELSE(CMAKE_VERBOSE_MAKEFILE) + SET(CMAKE_CL_NOLOGO "/nologo") +ENDIF(CMAKE_VERBOSE_MAKEFILE) +# create a shared C++ library +SET(CMAKE_CXX_CREATE_SHARED_LIBRARY + " ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /out: /implib: /pdb: /dll /version:. ${CMAKE_END_TEMP_FILE}") +SET(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_LIBRARY}) + +# create a C shared library +SET(CMAKE_C_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY}") + +# create a C shared module +SET(CMAKE_C_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE}") + +# create a C++ static library +SET(CMAKE_CXX_CREATE_STATIC_LIBRARY " /lib ${CMAKE_CL_NOLOGO} /out: ") + +# create a C static library +SET(CMAKE_C_CREATE_STATIC_LIBRARY "${CMAKE_CXX_CREATE_STATIC_LIBRARY}") + +# compile a C++ file into an object file +SET(CMAKE_CXX_COMPILE_OBJECT + " ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} /TP /Fo /Fd -c ${CMAKE_END_TEMP_FILE}") + +# compile a C file into an object file +SET(CMAKE_C_COMPILE_OBJECT + " ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} /Fo /Fd -c ${CMAKE_END_TEMP_FILE}") + +SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) +SET(CMAKE_C_LINK_EXECUTABLE + " ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /Fe /Fd -link /implib: /version:. ${CMAKE_END_TEMP_FILE}") + +SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1) +SET(CMAKE_CXX_LINK_EXECUTABLE + " ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} /Fe /Fd -link /implib: /version:. ${CMAKE_END_TEMP_FILE}") + +SET(CMAKE_C_CREATE_PREPROCESSED_SOURCE + " > ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} -E ${CMAKE_END_TEMP_FILE}") + +SET(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE + " > ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} /TP -E ${CMAKE_END_TEMP_FILE}") + +SET(CMAKE_C_CREATE_ASSEMBLY_SOURCE + " ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} /FAs /FoNUL /Fa /c ${CMAKE_END_TEMP_FILE}") + +SET(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE + " ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} /TP /FAs /FoNUL /Fa /c ${CMAKE_END_TEMP_FILE}") + diff --git a/Modules/Platform/eCos.cmake b/Modules/Platform/eCos.cmake new file mode 100644 index 0000000..b437c1a --- /dev/null +++ b/Modules/Platform/eCos.cmake @@ -0,0 +1,65 @@ +# support for eCos http://ecos.sourceware.org + +# Guard against multiple inclusion, which e.g. leads to multiple calls to add_definition() #12987 +IF(__ECOS_CMAKE_INCLUDED) + RETURN() +ENDIF() +SET(__ECOS_CMAKE_INCLUDED TRUE) + +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") # -pic +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "") # -shared +SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "") # -rpath +SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "") # : or empty + +SET(CMAKE_LINK_LIBRARY_SUFFIX "") +SET(CMAKE_STATIC_LIBRARY_PREFIX "lib") +SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a") +SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") # lib +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".a") # .a +SET(CMAKE_EXECUTABLE_SUFFIX ".elf") # same suffix as if built using UseEcos.cmake +SET(CMAKE_DL_LIBS "" ) + +SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") +SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + + +INCLUDE(Platform/UnixPaths) + +# eCos can be built only with gcc +GET_PROPERTY(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE) +IF(CMAKE_C_COMPILER AND NOT "${CMAKE_C_COMPILER_ID}" MATCHES "GNU" AND NOT _IN_TC) + MESSAGE(FATAL_ERROR "GNU gcc is required for eCos") +ENDIF(CMAKE_C_COMPILER AND NOT "${CMAKE_C_COMPILER_ID}" MATCHES "GNU" AND NOT _IN_TC) +IF(CMAKE_CXX_COMPILER AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" AND NOT _IN_TC) + MESSAGE(FATAL_ERROR "GNU g++ is required for eCos") +ENDIF(CMAKE_CXX_COMPILER AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" AND NOT _IN_TC) + +# find eCos system files +FIND_PATH(ECOS_SYSTEM_CONFIG_HEADER_PATH NAMES pkgconf/system.h) +FIND_LIBRARY(ECOS_SYSTEM_TARGET_LIBRARY NAMES libtarget.a) + +IF(NOT ECOS_SYSTEM_CONFIG_HEADER_PATH) + MESSAGE(FATAL_ERROR "Could not find eCos pkgconf/system.h. Build eCos first and set up CMAKE_FIND_ROOT_PATH correctly.") +ENDIF(NOT ECOS_SYSTEM_CONFIG_HEADER_PATH) + +IF(NOT ECOS_SYSTEM_TARGET_LIBRARY) + MESSAGE(FATAL_ERROR "Could not find eCos \"libtarget.a\". Build eCos first and set up CMAKE_FIND_ROOT_PATH correctly.") +ENDIF(NOT ECOS_SYSTEM_TARGET_LIBRARY) + +GET_FILENAME_COMPONENT(ECOS_LIBTARGET_DIRECTORY "${ECOS_SYSTEM_TARGET_LIBRARY}" PATH) +INCLUDE_DIRECTORIES(${ECOS_SYSTEM_CONFIG_HEADER_PATH}) +ADD_DEFINITIONS(-D__ECOS__=1 -D__ECOS=1) + +# special link commands for eCos executables +SET(CMAKE_CXX_LINK_EXECUTABLE " -o -nostdlib -nostartfiles -L${ECOS_LIBTARGET_DIRECTORY} -Ttarget.ld ") +SET(CMAKE_C_LINK_EXECUTABLE " -o -nostdlib -nostartfiles -L${ECOS_LIBTARGET_DIRECTORY} -Ttarget.ld ") + +# eCos doesn't support shared libs +SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) + +SET(CMAKE_CXX_LINK_SHARED_LIBRARY ) +SET(CMAKE_CXX_LINK_MODULE_LIBRARY ) +SET(CMAKE_C_LINK_SHARED_LIBRARY ) +SET(CMAKE_C_LINK_MODULE_LIBRARY ) + diff --git a/Modules/Platform/gas.cmake b/Modules/Platform/gas.cmake new file mode 100644 index 0000000..c34aef1 --- /dev/null +++ b/Modules/Platform/gas.cmake @@ -0,0 +1,19 @@ +IF(UNIX) + SET(CMAKE_ASM${ASM_DIALECT}_OUTPUT_EXTENSION .o) +ELSE(UNIX) + SET(CMAKE_ASM${ASM_DIALECT}_OUTPUT_EXTENSION .obj) +ENDIF(UNIX) + +SET(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT " -o ") + +SET(CMAKE_ASM${ASM_DIALECT}_CREATE_STATIC_LIBRARY + " cr " + " ") + +SET(CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE + " -o ") + +# to be done +SET(CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_LIBRARY) +SET(CMAKE_ASM${ASM_DIALECT}_CREATE_SHARED_MODULE) + diff --git a/Modules/Platform/kFreeBSD.cmake b/Modules/Platform/kFreeBSD.cmake new file mode 100644 index 0000000..c1295fb --- /dev/null +++ b/Modules/Platform/kFreeBSD.cmake @@ -0,0 +1,4 @@ +# kFreeBSD looks just like Linux. +INCLUDE(Platform/Linux) + +SET(CMAKE_LIBRARY_ARCHITECTURE_REGEX "[a-z0-9_]+(-[a-z0-9_]+)?-kfreebsd-gnu[a-z0-9_]*") diff --git a/Modules/Platform/syllable.cmake b/Modules/Platform/syllable.cmake new file mode 100644 index 0000000..3ce42f6 --- /dev/null +++ b/Modules/Platform/syllable.cmake @@ -0,0 +1,31 @@ +# this is the platform file for the Syllable OS (http://www.syllable.org) +# Syllable is a free OS (GPL), which is mostly POSIX conform +# the linker accepts the rpath related arguments, but this is later on +# ignored by the runtime linker +# shared libs are found exclusively via the environment variable DLL_PATH, +# which may contain also dirs containing the special variable @bindir@ +# by default @bindir@/lib is part of DLL_PATH +# in order to run the cmake tests successfully it is required that also +# @bindir@/. and @bindir@/../lib are in DLL_PATH + + +SET(CMAKE_DL_LIBS "dl") +SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC") # -pic +SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") # -shared +SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib +SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") +#SET(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") + +# Initialize C link type selection flags. These flags are used when +# building a shared library, shared module, or executable that links +# to other libraries to select whether to use the static or shared +# versions of the libraries. +FOREACH(type SHARED_LIBRARY SHARED_MODULE EXE) + SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Wl,-Bstatic") + SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-Bdynamic") +ENDFOREACH(type) + +INCLUDE(Platform/UnixPaths) + +# these are Syllable specific: +LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH /usr/indexes) diff --git a/Modules/ProcessorCount.cmake b/Modules/ProcessorCount.cmake new file mode 100644 index 0000000..eff4766 --- /dev/null +++ b/Modules/ProcessorCount.cmake @@ -0,0 +1,183 @@ +# - ProcessorCount(var) +# Determine the number of processors/cores and save value in ${var} +# +# Sets the variable named ${var} to the number of physical cores available on +# the machine if the information can be determined. Otherwise it is set to 0. +# Currently this functionality is implemented for AIX, cygwin, FreeBSD, HPUX, +# IRIX, Linux, Mac OS X, QNX, Sun and Windows. +# +# This function is guaranteed to return a positive integer (>=1) if it +# succeeds. It returns 0 if there's a problem determining the processor count. +# +# Example use, in a ctest -S dashboard script: +# +# include(ProcessorCount) +# ProcessorCount(N) +# if(NOT N EQUAL 0) +# set(CTEST_BUILD_FLAGS -j${N}) +# set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N}) +# endif() +# +# This function is intended to offer an approximation of the value of the +# number of compute cores available on the current machine, such that you +# may use that value for parallel building and parallel testing. It is meant +# to help utilize as much of the machine as seems reasonable. Of course, +# knowledge of what else might be running on the machine simultaneously +# should be used when deciding whether to request a machine's full capacity +# all for yourself. + +# A more reliable way might be to compile a small C program that uses the CPUID +# instruction, but that again requires compiler support or compiling assembler +# code. + +#============================================================================= +# Copyright 2010-2011 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +function(ProcessorCount var) + # Unknown: + set(count 0) + + if(WIN32) + # Windows: + set(count "$ENV{NUMBER_OF_PROCESSORS}") + #message("ProcessorCount: WIN32, trying environment variable") + endif() + + if(NOT count) + # Mac, FreeBSD, OpenBSD (systems with sysctl): + find_program(ProcessorCount_cmd_sysctl sysctl + PATHS /usr/sbin /sbin) + if(ProcessorCount_cmd_sysctl) + execute_process(COMMAND ${ProcessorCount_cmd_sysctl} -n hw.ncpu + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE count) + #message("ProcessorCount: trying sysctl '${ProcessorCount_cmd_sysctl}'") + endif() + endif() + + if(NOT count) + # Linux (systems with getconf): + find_program(ProcessorCount_cmd_getconf getconf) + if(ProcessorCount_cmd_getconf) + execute_process(COMMAND ${ProcessorCount_cmd_getconf} _NPROCESSORS_ONLN + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE count) + #message("ProcessorCount: trying getconf '${ProcessorCount_cmd_getconf}'") + endif() + endif() + + if(NOT count) + # HPUX (systems with machinfo): + find_program(ProcessorCount_cmd_machinfo machinfo + PATHS /usr/contrib/bin) + if(ProcessorCount_cmd_machinfo) + execute_process(COMMAND ${ProcessorCount_cmd_machinfo} + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE machinfo_output) + string(REGEX MATCHALL "Number of CPUs = ([0-9]+)" procs "${machinfo_output}") + set(count "${CMAKE_MATCH_1}") + #message("ProcessorCount: trying machinfo '${ProcessorCount_cmd_machinfo}'") + endif() + endif() + + if(NOT count) + # IRIX (systems with hinv): + find_program(ProcessorCount_cmd_hinv hinv + PATHS /sbin) + if(ProcessorCount_cmd_hinv) + execute_process(COMMAND ${ProcessorCount_cmd_hinv} + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE hinv_output) + string(REGEX MATCHALL "([0-9]+) .* Processors" procs "${hinv_output}") + set(count "${CMAKE_MATCH_1}") + #message("ProcessorCount: trying hinv '${ProcessorCount_cmd_hinv}'") + endif() + endif() + + if(NOT count) + # AIX (systems with lsconf): + find_program(ProcessorCount_cmd_lsconf lsconf + PATHS /usr/sbin) + if(ProcessorCount_cmd_lsconf) + execute_process(COMMAND ${ProcessorCount_cmd_lsconf} + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE lsconf_output) + string(REGEX MATCHALL "Number Of Processors: ([0-9]+)" procs "${lsconf_output}") + set(count "${CMAKE_MATCH_1}") + #message("ProcessorCount: trying lsconf '${ProcessorCount_cmd_lsconf}'") + endif() + endif() + + if(NOT count) + # QNX (systems with pidin): + find_program(ProcessorCount_cmd_pidin pidin) + if(ProcessorCount_cmd_pidin) + execute_process(COMMAND ${ProcessorCount_cmd_pidin} info + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE pidin_output) + string(REGEX MATCHALL "Processor[0-9]+: " procs "${pidin_output}") + list(LENGTH procs count) + #message("ProcessorCount: trying pidin '${ProcessorCount_cmd_pidin}'") + endif() + endif() + + if(NOT count) + # Sun (systems where uname -X emits "NumCPU" in its output): + find_program(ProcessorCount_cmd_uname uname) + if(ProcessorCount_cmd_uname) + execute_process(COMMAND ${ProcessorCount_cmd_uname} -X + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE uname_X_output) + string(REGEX MATCHALL "NumCPU = ([0-9]+)" procs "${uname_X_output}") + set(count "${CMAKE_MATCH_1}") + #message("ProcessorCount: trying uname -X '${ProcessorCount_cmd_uname}'") + endif() + endif() + + # Execute this code when all previously attempted methods return empty + # output: + # + if(NOT count) + # Systems with /proc/cpuinfo: + set(cpuinfo_file /proc/cpuinfo) + if(EXISTS "${cpuinfo_file}") + file(STRINGS "${cpuinfo_file}" procs REGEX "^processor.: [0-9]+$") + list(LENGTH procs count) + #message("ProcessorCount: trying cpuinfo '${cpuinfo_file}'") + endif() + endif() + + # Since cygwin builds of CMake do not define WIN32 anymore, but they still + # run on Windows, and will still have this env var defined: + # + if(NOT count) + set(count "$ENV{NUMBER_OF_PROCESSORS}") + #message("ProcessorCount: last fallback, trying environment variable") + endif() + + # Ensure an integer return (avoid inadvertently returning an empty string + # or an error string)... If it's not a decimal integer, return 0: + # + if(NOT count MATCHES "^[0-9]+$") + set(count 0) + endif() + + set(${var} ${count} PARENT_SCOPE) +endfunction() diff --git a/Modules/Qt4ConfigDependentSettings.cmake b/Modules/Qt4ConfigDependentSettings.cmake new file mode 100644 index 0000000..10af3bc --- /dev/null +++ b/Modules/Qt4ConfigDependentSettings.cmake @@ -0,0 +1,295 @@ +# This file is included by FindQt4.cmake, don't include it directly. + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + + +############################################### +# +# configuration/system dependent settings +# +############################################### + +# find dependencies for some Qt modules +# when doing builds against a static Qt, they are required +# when doing builds against a shared Qt, they are not required +# if a user needs the dependencies, and they couldn't be found, they can set +# the variables themselves. + +SET(QT_QTGUI_LIB_DEPENDENCIES "") +SET(QT_QTCORE_LIB_DEPENDENCIES "") +SET(QT_QTNETWORK_LIB_DEPENDENCIES "") +SET(QT_QTOPENGL_LIB_DEPENDENCIES "") +SET(QT_QTDBUS_LIB_DEPENDENCIES "") +SET(QT_QTHELP_LIB_DEPENDENCIES ${QT_QTCLUCENE_LIBRARY}) + + +IF(Q_WS_WIN) + # On Windows, qconfig.pri has "shared" for shared library builds + IF(NOT QT_CONFIG MATCHES "shared") + SET(QT_IS_STATIC 1) + ENDIF(NOT QT_CONFIG MATCHES "shared") +ELSE(Q_WS_WIN) + # On other platforms, check file extension to know if its static + IF(QT_QTCORE_LIBRARY_RELEASE) + GET_FILENAME_COMPONENT(qtcore_lib_ext "${QT_QTCORE_LIBRARY_RELEASE}" EXT) + IF("${qtcore_lib_ext}" STREQUAL "${CMAKE_STATIC_LIBRARY_SUFFIX}") + SET(QT_IS_STATIC 1) + ENDIF("${qtcore_lib_ext}" STREQUAL "${CMAKE_STATIC_LIBRARY_SUFFIX}") + ENDIF(QT_QTCORE_LIBRARY_RELEASE) + IF(QT_QTCORE_LIBRARY_DEBUG) + GET_FILENAME_COMPONENT(qtcore_lib_ext "${QT_QTCORE_LIBRARY_DEBUG}" EXT) + IF(${qtcore_lib_ext} STREQUAL ${CMAKE_STATIC_LIBRARY_SUFFIX}) + SET(QT_IS_STATIC 1) + ENDIF(${qtcore_lib_ext} STREQUAL ${CMAKE_STATIC_LIBRARY_SUFFIX}) + ENDIF(QT_QTCORE_LIBRARY_DEBUG) +ENDIF(Q_WS_WIN) + +# build using shared Qt needs -DQT_DLL on Windows +IF(Q_WS_WIN AND NOT QT_IS_STATIC) + SET(QT_DEFINITIONS ${QT_DEFINITIONS} -DQT_DLL) +ENDIF(Q_WS_WIN AND NOT QT_IS_STATIC) + +IF(NOT QT_IS_STATIC) + RETURN() +ENDIF(NOT QT_IS_STATIC) + +# QtOpenGL dependencies +find_package(OpenGL) +SET (QT_QTOPENGL_LIB_DEPENDENCIES ${OPENGL_glu_LIBRARY} ${OPENGL_gl_LIBRARY}) + + +## system png +IF(QT_QCONFIG MATCHES "system-png") + find_package(PNG) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${PNG_LIBRARY}) +ENDIF(QT_QCONFIG MATCHES "system-png") + +## system jpeg +IF(QT_QCONFIG MATCHES "system-jpeg") + find_package(JPEG) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${JPEG_LIBRARIES}) +ENDIF(QT_QCONFIG MATCHES "system-jpeg") + +## system tiff +IF(QT_QCONFIG MATCHES "system-tiff") + find_package(TIFF) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${TIFF_LIBRARIES}) +ENDIF(QT_QCONFIG MATCHES "system-tiff") + +## system mng +IF(QT_QCONFIG MATCHES "system-mng") + find_library(MNG_LIBRARY NAMES mng) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${MNG_LIBRARY}) +ENDIF(QT_QCONFIG MATCHES "system-mng") + +# for X11, get X11 library directory +IF(Q_WS_X11) + FIND_PACKAGE(X11) +ENDIF(Q_WS_X11) + + +## X11 SM +IF(QT_QCONFIG MATCHES "x11sm") + IF(X11_SM_LIB AND X11_ICE_LIB) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_SM_LIB} ${X11_ICE_LIB}) + ENDIF(X11_SM_LIB AND X11_ICE_LIB) +ENDIF(QT_QCONFIG MATCHES "x11sm") + + +## Xi +IF(QT_QCONFIG MATCHES "tablet") + IF(X11_Xi_LIB) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xi_LIB}) + ENDIF(X11_Xi_LIB) +ENDIF(QT_QCONFIG MATCHES "tablet") + + +## Xrender +IF(QT_QCONFIG MATCHES "xrender") + IF(X11_Xrender_LIB) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xrender_LIB}) + ENDIF(X11_Xrender_LIB) +ENDIF(QT_QCONFIG MATCHES "xrender") + + +## Xrandr +IF(QT_QCONFIG MATCHES "xrandr") + IF(X11_Xrandr_LIB) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xrandr_LIB}) + ENDIF(X11_Xrandr_LIB) +ENDIF(QT_QCONFIG MATCHES "xrandr") + + +## Xcursor +IF(QT_QCONFIG MATCHES "xcursor") + IF(X11_Xcursor_LIB) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xcursor_LIB}) + ENDIF(X11_Xcursor_LIB) +ENDIF(QT_QCONFIG MATCHES "xcursor") + + +## Xinerama +IF(QT_QCONFIG MATCHES "xinerama") + IF(X11_Xinerama_LIB) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xinerama_LIB}) + ENDIF(X11_Xinerama_LIB) +ENDIF(QT_QCONFIG MATCHES "xinerama") + + +## Xfixes +IF(QT_QCONFIG MATCHES "xfixes") + IF(X11_Xfixes_LIB) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xfixes_LIB}) + ENDIF(X11_Xfixes_LIB) +ENDIF(QT_QCONFIG MATCHES "xfixes") + + +## fontconfig +IF(QT_QCONFIG MATCHES "fontconfig") + FIND_LIBRARY(QT_FONTCONFIG_LIBRARY NAMES fontconfig) + MARK_AS_ADVANCED(QT_FONTCONFIG_LIBRARY) + IF(QT_FONTCONFIG_LIBRARY) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${QT_FONTCONFIG_LIBRARY}) + ENDIF(QT_FONTCONFIG_LIBRARY) +ENDIF(QT_QCONFIG MATCHES "fontconfig") + + +## system-freetype +IF(QT_QCONFIG MATCHES "system-freetype") + find_package(Freetype) + if(FREETYPE_LIBRARIES) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${FREETYPE_LIBRARIES}) + endif(FREETYPE_LIBRARIES) +ENDIF(QT_QCONFIG MATCHES "system-freetype") + + +## system-zlib +IF(QT_QCONFIG MATCHES "system-zlib") + find_package(ZLIB) + SET(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ${ZLIB_LIBRARIES}) +ENDIF(QT_QCONFIG MATCHES "system-zlib") + + +## openssl +IF(NOT Q_WS_WIN) + SET(_QT_NEED_OPENSSL 0) + IF(QT_VERSION_MINOR LESS 4 AND QT_QCONFIG MATCHES "openssl") + SET(_QT_NEED_OPENSSL 1) + ENDIF(QT_VERSION_MINOR LESS 4 AND QT_QCONFIG MATCHES "openssl") + IF(QT_VERSION_MINOR GREATER 3 AND QT_QCONFIG MATCHES "openssl-linked") + SET(_QT_NEED_OPENSSL 1) + ENDIF(QT_VERSION_MINOR GREATER 3 AND QT_QCONFIG MATCHES "openssl-linked") + IF(_QT_NEED_OPENSSL) + FIND_PACKAGE(OpenSSL) + IF(OPENSSL_LIBRARIES) + SET(QT_QTNETWORK_LIB_DEPENDENCIES ${QT_QTNETWORK_LIB_DEPENDENCIES} ${OPENSSL_LIBRARIES}) + ENDIF(OPENSSL_LIBRARIES) + ENDIF(_QT_NEED_OPENSSL) +ENDIF(NOT Q_WS_WIN) + + +## dbus +IF(QT_QCONFIG MATCHES "dbus") + + FIND_LIBRARY(QT_DBUS_LIBRARY NAMES dbus-1 ) + IF(QT_DBUS_LIBRARY) + SET(QT_QTDBUS_LIB_DEPENDENCIES ${QT_QTDBUS_LIB_DEPENDENCIES} ${QT_DBUS_LIBRARY}) + ENDIF(QT_DBUS_LIBRARY) + MARK_AS_ADVANCED(QT_DBUS_LIBRARY) + +ENDIF(QT_QCONFIG MATCHES "dbus") + + +## glib +IF(QT_QCONFIG MATCHES "glib") + + # Qt 4.2.0+ uses glib-2.0 + FIND_LIBRARY(QT_GLIB_LIBRARY NAMES glib-2.0 ) + FIND_LIBRARY(QT_GTHREAD_LIBRARY NAMES gthread-2.0 ) + MARK_AS_ADVANCED(QT_GLIB_LIBRARY) + MARK_AS_ADVANCED(QT_GTHREAD_LIBRARY) + + IF(QT_GLIB_LIBRARY AND QT_GTHREAD_LIBRARY) + SET(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} + ${QT_GTHREAD_LIBRARY} ${QT_GLIB_LIBRARY}) + ENDIF(QT_GLIB_LIBRARY AND QT_GTHREAD_LIBRARY) + + + # Qt 4.5+ also links to gobject-2.0 + IF(QT_VERSION_MINOR GREATER 4) + FIND_LIBRARY(QT_GOBJECT_LIBRARY NAMES gobject-2.0 PATHS ${_glib_query_output} ) + MARK_AS_ADVANCED(QT_GOBJECT_LIBRARY) + + IF(QT_GOBJECT_LIBRARY) + SET(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} + ${QT_GOBJECT_LIBRARY}) + ENDIF(QT_GOBJECT_LIBRARY) + ENDIF(QT_VERSION_MINOR GREATER 4) + +ENDIF(QT_QCONFIG MATCHES "glib") + + +## clock-monotonic, just see if we need to link with rt +IF(QT_QCONFIG MATCHES "clock-monotonic") + SET(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) + SET(CMAKE_REQUIRED_LIBRARIES rt) + CHECK_SYMBOL_EXISTS(_POSIX_TIMERS "unistd.h;time.h" QT_POSIX_TIMERS) + SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) + IF(QT_POSIX_TIMERS) + FIND_LIBRARY(QT_RT_LIBRARY NAMES rt) + MARK_AS_ADVANCED(QT_RT_LIBRARY) + IF(QT_RT_LIBRARY) + SET(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ${QT_RT_LIBRARY}) + ENDIF(QT_RT_LIBRARY) + ENDIF(QT_POSIX_TIMERS) +ENDIF(QT_QCONFIG MATCHES "clock-monotonic") + + +IF(Q_WS_X11) + # X11 libraries Qt always depends on + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} ${X11_Xext_LIB} ${X11_X11_LIB}) + + set(CMAKE_THREAD_PREFER_PTHREADS 1) + find_package(Threads) + if(CMAKE_USE_PTHREADS_INIT) + SET(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ${CMAKE_THREAD_LIBS_INIT}) + endif(CMAKE_USE_PTHREADS_INIT) + + SET (QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ${CMAKE_DL_LIBS}) + +ENDIF(Q_WS_X11) + + +IF(Q_WS_WIN) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} imm32 winmm) + SET(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} ws2_32) +ENDIF(Q_WS_WIN) + + +IF(Q_WS_MAC) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} "-framework Carbon") + + # Qt 4.0, 4.1, 4.2 use QuickTime + IF(QT_VERSION_MINOR LESS 3) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} "-framework QuickTime") + ENDIF(QT_VERSION_MINOR LESS 3) + + # Qt 4.2+ use AppKit + IF(QT_VERSION_MINOR GREATER 1) + SET(QT_QTGUI_LIB_DEPENDENCIES ${QT_QTGUI_LIB_DEPENDENCIES} "-framework AppKit") + ENDIF(QT_VERSION_MINOR GREATER 1) + + SET(QT_QTCORE_LIB_DEPENDENCIES ${QT_QTCORE_LIB_DEPENDENCIES} "-framework ApplicationServices") +ENDIF(Q_WS_MAC) + diff --git a/Modules/Qt4Macros.cmake b/Modules/Qt4Macros.cmake new file mode 100644 index 0000000..f327125 --- /dev/null +++ b/Modules/Qt4Macros.cmake @@ -0,0 +1,432 @@ +# This file is included by FindQt4.cmake, don't include it directly. + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + + +###################################### +# +# Macros for building Qt files +# +###################################### + + +MACRO (QT4_EXTRACT_OPTIONS _qt4_files _qt4_options) + SET(${_qt4_files}) + SET(${_qt4_options}) + SET(_QT4_DOING_OPTIONS FALSE) + FOREACH(_currentArg ${ARGN}) + IF ("${_currentArg}" STREQUAL "OPTIONS") + SET(_QT4_DOING_OPTIONS TRUE) + ELSE ("${_currentArg}" STREQUAL "OPTIONS") + IF(_QT4_DOING_OPTIONS) + LIST(APPEND ${_qt4_options} "${_currentArg}") + ELSE(_QT4_DOING_OPTIONS) + LIST(APPEND ${_qt4_files} "${_currentArg}") + ENDIF(_QT4_DOING_OPTIONS) + ENDIF ("${_currentArg}" STREQUAL "OPTIONS") + ENDFOREACH(_currentArg) +ENDMACRO (QT4_EXTRACT_OPTIONS) + + +# macro used to create the names of output files preserving relative dirs +MACRO (QT4_MAKE_OUTPUT_FILE infile prefix ext outfile ) + STRING(LENGTH ${CMAKE_CURRENT_BINARY_DIR} _binlength) + STRING(LENGTH ${infile} _infileLength) + SET(_checkinfile ${CMAKE_CURRENT_SOURCE_DIR}) + IF(_infileLength GREATER _binlength) + STRING(SUBSTRING "${infile}" 0 ${_binlength} _checkinfile) + IF(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_BINARY_DIR} ${infile}) + ELSE(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_SOURCE_DIR} ${infile}) + ENDIF(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + ELSE(_infileLength GREATER _binlength) + FILE(RELATIVE_PATH rel ${CMAKE_CURRENT_SOURCE_DIR} ${infile}) + ENDIF(_infileLength GREATER _binlength) + IF(WIN32 AND rel MATCHES "^[a-zA-Z]:") # absolute path + STRING(REGEX REPLACE "^([a-zA-Z]):(.*)$" "\\1_\\2" rel "${rel}") + ENDIF(WIN32 AND rel MATCHES "^[a-zA-Z]:") + SET(_outfile "${CMAKE_CURRENT_BINARY_DIR}/${rel}") + STRING(REPLACE ".." "__" _outfile ${_outfile}) + GET_FILENAME_COMPONENT(outpath ${_outfile} PATH) + GET_FILENAME_COMPONENT(_outfile ${_outfile} NAME_WE) + FILE(MAKE_DIRECTORY ${outpath}) + SET(${outfile} ${outpath}/${prefix}${_outfile}.${ext}) +ENDMACRO (QT4_MAKE_OUTPUT_FILE ) + + +MACRO (QT4_GET_MOC_FLAGS _moc_flags) + SET(${_moc_flags}) + GET_DIRECTORY_PROPERTY(_inc_DIRS INCLUDE_DIRECTORIES) + + FOREACH(_current ${_inc_DIRS}) + IF("${_current}" MATCHES "\\.framework/?$") + STRING(REGEX REPLACE "/[^/]+\\.framework" "" framework_path "${_current}") + SET(${_moc_flags} ${${_moc_flags}} "-F${framework_path}") + ELSE("${_current}" MATCHES "\\.framework/?$") + SET(${_moc_flags} ${${_moc_flags}} "-I${_current}") + ENDIF("${_current}" MATCHES "\\.framework/?$") + ENDFOREACH(_current ${_inc_DIRS}) + + GET_DIRECTORY_PROPERTY(_defines COMPILE_DEFINITIONS) + FOREACH(_current ${_defines}) + SET(${_moc_flags} ${${_moc_flags}} "-D${_current}") + ENDFOREACH(_current ${_defines}) + + IF(Q_WS_WIN) + SET(${_moc_flags} ${${_moc_flags}} -DWIN32) + ENDIF(Q_WS_WIN) + +ENDMACRO(QT4_GET_MOC_FLAGS) + + +# helper macro to set up a moc rule +MACRO (QT4_CREATE_MOC_COMMAND infile outfile moc_flags moc_options) + # For Windows, create a parameters file to work around command line length limit + IF (WIN32) + # Pass the parameters in a file. Set the working directory to + # be that containing the parameters file and reference it by + # just the file name. This is necessary because the moc tool on + # MinGW builds does not seem to handle spaces in the path to the + # file given with the @ syntax. + GET_FILENAME_COMPONENT(_moc_outfile_name "${outfile}" NAME) + GET_FILENAME_COMPONENT(_moc_outfile_dir "${outfile}" PATH) + IF(_moc_outfile_dir) + SET(_moc_working_dir WORKING_DIRECTORY ${_moc_outfile_dir}) + ENDIF(_moc_outfile_dir) + SET (_moc_parameters_file ${outfile}_parameters) + SET (_moc_parameters ${moc_flags} ${moc_options} -o "${outfile}" "${infile}") + STRING (REPLACE ";" "\n" _moc_parameters "${_moc_parameters}") + FILE (WRITE ${_moc_parameters_file} "${_moc_parameters}") + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_MOC_EXECUTABLE} @${_moc_outfile_name}_parameters + DEPENDS ${infile} + ${_moc_working_dir} + VERBATIM) + ELSE (WIN32) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_MOC_EXECUTABLE} + ARGS ${moc_flags} ${moc_options} -o ${outfile} ${infile} + DEPENDS ${infile} VERBATIM) + ENDIF (WIN32) +ENDMACRO (QT4_CREATE_MOC_COMMAND) + + +MACRO (QT4_GENERATE_MOC infile outfile ) +# get include dirs and flags + QT4_GET_MOC_FLAGS(moc_flags) + GET_FILENAME_COMPONENT(abs_infile ${infile} ABSOLUTE) + SET(_outfile "${outfile}") + IF(NOT IS_ABSOLUTE "${outfile}") + SET(_outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}") + ENDIF(NOT IS_ABSOLUTE "${outfile}") + QT4_CREATE_MOC_COMMAND(${abs_infile} ${_outfile} "${moc_flags}" "") + SET_SOURCE_FILES_PROPERTIES(${outfile} PROPERTIES SKIP_AUTOMOC TRUE) # dont run automoc on this file +ENDMACRO (QT4_GENERATE_MOC) + + +# QT4_WRAP_CPP(outfiles inputfile ... ) + +MACRO (QT4_WRAP_CPP outfiles ) + # get include dirs + QT4_GET_MOC_FLAGS(moc_flags) + QT4_EXTRACT_OPTIONS(moc_files moc_options ${ARGN}) + + FOREACH (it ${moc_files}) + GET_FILENAME_COMPONENT(it ${it} ABSOLUTE) + QT4_MAKE_OUTPUT_FILE(${it} moc_ cxx outfile) + QT4_CREATE_MOC_COMMAND(${it} ${outfile} "${moc_flags}" "${moc_options}") + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH(it) + +ENDMACRO (QT4_WRAP_CPP) + + +# QT4_WRAP_UI(outfiles inputfile ... ) + +MACRO (QT4_WRAP_UI outfiles ) + QT4_EXTRACT_OPTIONS(ui_files ui_options ${ARGN}) + + FOREACH (it ${ui_files}) + GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_UIC_EXECUTABLE} + ARGS ${ui_options} -o ${outfile} ${infile} + MAIN_DEPENDENCY ${infile} VERBATIM) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH (it) + +ENDMACRO (QT4_WRAP_UI) + + +# QT4_ADD_RESOURCES(outfiles inputfile ... ) + +MACRO (QT4_ADD_RESOURCES outfiles ) + QT4_EXTRACT_OPTIONS(rcc_files rcc_options ${ARGN}) + + FOREACH (it ${rcc_files}) + GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE) + GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) + GET_FILENAME_COMPONENT(rc_path ${infile} PATH) + SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx) + # parse file for dependencies + # all files are absolute paths or relative to the location of the qrc file + FILE(READ "${infile}" _RC_FILE_CONTENTS) + STRING(REGEX MATCHALL "]*>" "" _RC_FILE "${_RC_FILE}") + IF(NOT IS_ABSOLUTE "${_RC_FILE}") + SET(_RC_FILE "${rc_path}/${_RC_FILE}") + ENDIF(NOT IS_ABSOLUTE "${_RC_FILE}") + SET(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}") + ENDFOREACH(_RC_FILE) + # Since this cmake macro is doing the dependency scanning for these files, + # let's make a configured file and add it as a dependency so cmake is run + # again when dependencies need to be recomputed. + QT4_MAKE_OUTPUT_FILE("${infile}" "" "qrc.depends" out_depends) + CONFIGURE_FILE("${infile}" "${out_depends}" COPY_ONLY) + ADD_CUSTOM_COMMAND(OUTPUT ${outfile} + COMMAND ${QT_RCC_EXECUTABLE} + ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile} + MAIN_DEPENDENCY ${infile} + DEPENDS ${_RC_DEPENDS} "${out_depends}" VERBATIM) + SET(${outfiles} ${${outfiles}} ${outfile}) + ENDFOREACH (it) + +ENDMACRO (QT4_ADD_RESOURCES) + + +MACRO(QT4_ADD_DBUS_INTERFACE _sources _interface _basename) + GET_FILENAME_COMPONENT(_infile ${_interface} ABSOLUTE) + SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h) + SET(_impl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp) + SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc) + + GET_SOURCE_FILE_PROPERTY(_nonamespace ${_interface} NO_NAMESPACE) + IF(_nonamespace) + SET(_params -N -m) + ELSE(_nonamespace) + SET(_params -m) + ENDIF(_nonamespace) + + GET_SOURCE_FILE_PROPERTY(_classname ${_interface} CLASSNAME) + IF(_classname) + SET(_params ${_params} -c ${_classname}) + ENDIF(_classname) + + GET_SOURCE_FILE_PROPERTY(_include ${_interface} INCLUDE) + IF(_include) + SET(_params ${_params} -i ${_include}) + ENDIF(_include) + + ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} + COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} ${_params} -p ${_basename} ${_infile} + DEPENDS ${_infile} VERBATIM) + + SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE) + + QT4_GENERATE_MOC(${_header} ${_moc}) + + SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc}) + MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc}) + +ENDMACRO(QT4_ADD_DBUS_INTERFACE) + + +MACRO(QT4_ADD_DBUS_INTERFACES _sources) + FOREACH (_current_FILE ${ARGN}) + GET_FILENAME_COMPONENT(_infile ${_current_FILE} ABSOLUTE) + # get the part before the ".xml" suffix + STRING(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2" _basename ${_current_FILE}) + STRING(TOLOWER ${_basename} _basename) + QT4_ADD_DBUS_INTERFACE(${_sources} ${_infile} ${_basename}interface) + ENDFOREACH (_current_FILE) +ENDMACRO(QT4_ADD_DBUS_INTERFACES) + + +MACRO(QT4_GENERATE_DBUS_INTERFACE _header) # _customName OPTIONS -some -options ) + QT4_EXTRACT_OPTIONS(_customName _qt4_dbus_options ${ARGN}) + + GET_FILENAME_COMPONENT(_in_file ${_header} ABSOLUTE) + GET_FILENAME_COMPONENT(_basename ${_header} NAME_WE) + + IF (_customName) + if (IS_ABSOLUTE ${_customName}) + get_filename_component(_containingDir ${_customName} PATH) + if (NOT EXISTS ${_containingDir}) + file(MAKE_DIRECTORY "${_containingDir}") + endif() + SET(_target ${_customName}) + else() + SET(_target ${CMAKE_CURRENT_BINARY_DIR}/${_customName}) + endif() + ELSE (_customName) + SET(_target ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.xml) + ENDIF (_customName) + + ADD_CUSTOM_COMMAND(OUTPUT ${_target} + COMMAND ${QT_DBUSCPP2XML_EXECUTABLE} ${_qt4_dbus_options} ${_in_file} -o ${_target} + DEPENDS ${_in_file} VERBATIM + ) +ENDMACRO(QT4_GENERATE_DBUS_INTERFACE) + + +MACRO(QT4_ADD_DBUS_ADAPTOR _sources _xml_file _include _parentClass) # _optionalBasename _optionalClassName) + GET_FILENAME_COMPONENT(_infile ${_xml_file} ABSOLUTE) + + SET(_optionalBasename "${ARGV4}") + IF (_optionalBasename) + SET(_basename ${_optionalBasename} ) + ELSE (_optionalBasename) + STRING(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2adaptor" _basename ${_infile}) + STRING(TOLOWER ${_basename} _basename) + ENDIF (_optionalBasename) + + SET(_optionalClassName "${ARGV5}") + SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h) + SET(_impl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp) + SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc) + + IF(_optionalClassName) + ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} + COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -c ${_optionalClassName} -i ${_include} -l ${_parentClass} ${_infile} + DEPENDS ${_infile} VERBATIM + ) + ELSE(_optionalClassName) + ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header} + COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -a ${_basename} -i ${_include} -l ${_parentClass} ${_infile} + DEPENDS ${_infile} VERBATIM + ) + ENDIF(_optionalClassName) + + QT4_GENERATE_MOC(${_header} ${_moc}) + SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE) + MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc}) + + SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc}) +ENDMACRO(QT4_ADD_DBUS_ADAPTOR) + + +MACRO(QT4_AUTOMOC) + QT4_GET_MOC_FLAGS(_moc_INCS) + + SET(_matching_FILES ) + FOREACH (_current_FILE ${ARGN}) + + GET_FILENAME_COMPONENT(_abs_FILE ${_current_FILE} ABSOLUTE) + # if "SKIP_AUTOMOC" is set to true, we will not handle this file here. + # This is required to make uic work correctly: + # we need to add generated .cpp files to the sources (to compile them), + # but we cannot let automoc handle them, as the .cpp files don't exist yet when + # cmake is run for the very first time on them -> however the .cpp files might + # exist at a later run. at that time we need to skip them, so that we don't add two + # different rules for the same moc file + GET_SOURCE_FILE_PROPERTY(_skip ${_abs_FILE} SKIP_AUTOMOC) + + IF ( NOT _skip AND EXISTS ${_abs_FILE} ) + + FILE(READ ${_abs_FILE} _contents) + + GET_FILENAME_COMPONENT(_abs_PATH ${_abs_FILE} PATH) + + STRING(REGEX MATCHALL "# *include +[^ ]+\\.moc[\">]" _match "${_contents}") + IF(_match) + FOREACH (_current_MOC_INC ${_match}) + STRING(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}") + + GET_FILENAME_COMPONENT(_basename ${_current_MOC} NAME_WE) + IF(EXISTS ${_abs_PATH}/${_basename}.hpp) + SET(_header ${_abs_PATH}/${_basename}.hpp) + ELSE(EXISTS ${_abs_PATH}/${_basename}.hpp) + SET(_header ${_abs_PATH}/${_basename}.h) + ENDIF(EXISTS ${_abs_PATH}/${_basename}.hpp) + SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC}) + QT4_CREATE_MOC_COMMAND(${_header} ${_moc} "${_moc_INCS}" "") + MACRO_ADD_FILE_DEPENDENCIES(${_abs_FILE} ${_moc}) + ENDFOREACH (_current_MOC_INC) + ENDIF(_match) + ENDIF ( NOT _skip AND EXISTS ${_abs_FILE} ) + ENDFOREACH (_current_FILE) +ENDMACRO(QT4_AUTOMOC) + + +MACRO(QT4_CREATE_TRANSLATION _qm_files) + QT4_EXTRACT_OPTIONS(_lupdate_files _lupdate_options ${ARGN}) + SET(_my_sources) + SET(_my_dirs) + SET(_my_tsfiles) + SET(_ts_pro) + FOREACH (_file ${_lupdate_files}) + GET_FILENAME_COMPONENT(_ext ${_file} EXT) + GET_FILENAME_COMPONENT(_abs_FILE ${_file} ABSOLUTE) + IF(_ext MATCHES "ts") + LIST(APPEND _my_tsfiles ${_abs_FILE}) + ELSE(_ext MATCHES "ts") + IF(NOT _ext) + LIST(APPEND _my_dirs ${_abs_FILE}) + ELSE(NOT _ext) + LIST(APPEND _my_sources ${_abs_FILE}) + ENDIF(NOT _ext) + ENDIF(_ext MATCHES "ts") + ENDFOREACH(_file) + FOREACH(_ts_file ${_my_tsfiles}) + IF(_my_sources) + # make a .pro file to call lupdate on, so we don't make our commands too + # long for some systems + GET_FILENAME_COMPONENT(_ts_name ${_ts_file} NAME_WE) + SET(_ts_pro ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_ts_name}_lupdate.pro) + SET(_pro_srcs) + FOREACH(_pro_src ${_my_sources}) + SET(_pro_srcs "${_pro_srcs} \"${_pro_src}\"") + ENDFOREACH(_pro_src ${_my_sources}) + SET(_pro_includes) + GET_DIRECTORY_PROPERTY(_inc_DIRS INCLUDE_DIRECTORIES) + FOREACH(_pro_include ${_inc_DIRS}) + GET_FILENAME_COMPONENT(_abs_include "${_pro_include}" ABSOLUTE) + SET(_pro_includes "${_pro_includes} \"${_abs_include}\"") + ENDFOREACH(_pro_include ${CMAKE_CXX_INCLUDE_PATH}) + FILE(WRITE ${_ts_pro} "SOURCES = ${_pro_srcs}\nINCLUDEPATH = ${_pro_includes}\n") + ENDIF(_my_sources) + ADD_CUSTOM_COMMAND(OUTPUT ${_ts_file} + COMMAND ${QT_LUPDATE_EXECUTABLE} + ARGS ${_lupdate_options} ${_ts_pro} ${_my_dirs} -ts ${_ts_file} + DEPENDS ${_my_sources} ${_ts_pro} VERBATIM) + ENDFOREACH(_ts_file) + QT4_ADD_TRANSLATION(${_qm_files} ${_my_tsfiles}) +ENDMACRO(QT4_CREATE_TRANSLATION) + + +MACRO(QT4_ADD_TRANSLATION _qm_files) + FOREACH (_current_FILE ${ARGN}) + GET_FILENAME_COMPONENT(_abs_FILE ${_current_FILE} ABSOLUTE) + GET_FILENAME_COMPONENT(qm ${_abs_FILE} NAME_WE) + GET_SOURCE_FILE_PROPERTY(output_location ${_abs_FILE} OUTPUT_LOCATION) + IF(output_location) + FILE(MAKE_DIRECTORY "${output_location}") + SET(qm "${output_location}/${qm}.qm") + ELSE(output_location) + SET(qm "${CMAKE_CURRENT_BINARY_DIR}/${qm}.qm") + ENDIF(output_location) + + ADD_CUSTOM_COMMAND(OUTPUT ${qm} + COMMAND ${QT_LRELEASE_EXECUTABLE} + ARGS ${_abs_FILE} -qm ${qm} + DEPENDS ${_abs_FILE} VERBATIM + ) + SET(${_qm_files} ${${_qm_files}} ${qm}) + ENDFOREACH (_current_FILE) +ENDMACRO(QT4_ADD_TRANSLATION) diff --git a/Modules/RepositoryInfo.txt.in b/Modules/RepositoryInfo.txt.in new file mode 100644 index 0000000..df8e322 --- /dev/null +++ b/Modules/RepositoryInfo.txt.in @@ -0,0 +1,3 @@ +repository='@repository@' +module='@module@' +tag='@tag@' diff --git a/Modules/SelectLibraryConfigurations.cmake b/Modules/SelectLibraryConfigurations.cmake new file mode 100644 index 0000000..2e8ade0 --- /dev/null +++ b/Modules/SelectLibraryConfigurations.cmake @@ -0,0 +1,81 @@ +# select_library_configurations( basename ) +# +# This macro takes a library base name as an argument, and will choose good +# values for basename_LIBRARY, basename_LIBRARIES, basename_LIBRARY_DEBUG, and +# basename_LIBRARY_RELEASE depending on what has been found and set. If only +# basename_LIBRARY_RELEASE is defined, basename_LIBRARY, basename_LIBRARY_DEBUG, +# and basename_LIBRARY_RELEASE will be set to the release value. If only +# basename_LIBRARY_DEBUG is defined, then basename_LIBRARY, +# basename_LIBRARY_DEBUG and basename_LIBRARY_RELEASE will take the debug value. +# +# If the generator supports configuration types, then basename_LIBRARY and +# basename_LIBRARIES will be set with debug and optimized flags specifying the +# library to be used for the given configuration. If no build type has been set +# or the generator in use does not support configuration types, then +# basename_LIBRARY and basename_LIBRARIES will take only the release values. + +#============================================================================= +# Copyright 2009 Will Dicharry +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This macro was adapted from the FindQt4 CMake module and is maintained by Will +# Dicharry . + +# Utility macro to check if one variable exists while another doesn't, and set +# one that doesn't exist to the one that exists. +macro( _set_library_name basename GOOD BAD ) + if( ${basename}_LIBRARY_${GOOD} AND NOT ${basename}_LIBRARY_${BAD} ) + set( ${basename}_LIBRARY_${BAD} ${${basename}_LIBRARY_${GOOD}} ) + set( ${basename}_LIBRARY ${${basename}_LIBRARY_${GOOD}} ) + set( ${basename}_LIBRARIES ${${basename}_LIBRARY_${GOOD}} ) + endif( ${basename}_LIBRARY_${GOOD} AND NOT ${basename}_LIBRARY_${BAD} ) +endmacro( _set_library_name ) + +macro( select_library_configurations basename ) + # if only the release version was found, set the debug to be the release + # version. + _set_library_name( ${basename} RELEASE DEBUG ) + # if only the debug version was found, set the release value to be the + # debug value. + _set_library_name( ${basename} DEBUG RELEASE ) + if (${basename}_LIBRARY_DEBUG AND ${basename}_LIBRARY_RELEASE AND + NOT ${basename}_LIBRARY_DEBUG STREQUAL ${basename}_LIBRARY_RELEASE) + # if the generator supports configuration types or CMAKE_BUILD_TYPE + # is set, then set optimized and debug options. + if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) + set( ${basename}_LIBRARY + optimized ${${basename}_LIBRARY_RELEASE} + debug ${${basename}_LIBRARY_DEBUG} ) + set( ${basename}_LIBRARIES + optimized ${${basename}_LIBRARY_RELEASE} + debug ${${basename}_LIBRARY_DEBUG} ) + else( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) + # If there are no configuration types or build type, just use + # the release version + set( ${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE} ) + set( ${basename}_LIBRARIES ${${basename}_LIBRARY_RELEASE} ) + endif( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) + endif() + + set( ${basename}_LIBRARY ${${basename}_LIBRARY} CACHE FILEPATH + "The ${basename} library" ) + + if( ${basename}_LIBRARY ) + set( ${basename}_FOUND TRUE ) + endif( ${basename}_LIBRARY ) + + mark_as_advanced( ${basename}_LIBRARY + ${basename}_LIBRARY_RELEASE + ${basename}_LIBRARY_DEBUG + ) +endmacro( select_library_configurations ) diff --git a/Modules/SquishRunTestCase.bat b/Modules/SquishRunTestCase.bat new file mode 100755 index 0000000..5c5d388 --- /dev/null +++ b/Modules/SquishRunTestCase.bat @@ -0,0 +1,11 @@ +echo 'Starting the squish server...' +start %1 + +echo 'Running the test case...' +%2 --testcase %3 --wrapper %4 --aut %5 +set result=%ERRORLEVEL% + +echo 'Stopping the squish server...' +%1 --stop + +exit \b %result% diff --git a/Modules/SquishRunTestCase.sh b/Modules/SquishRunTestCase.sh new file mode 100755 index 0000000..409b46a --- /dev/null +++ b/Modules/SquishRunTestCase.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +echo "Starting the squish server...$1 --daemon" +$1 --daemon + +echo "Running the test case...$2 --testcase $3 --wrapper $4 --aut $5" +$2 --testcase $3 --wrapper $4 --aut $5 +returnValue=$? + +echo "Stopping the squish server...$1 --stop" +$1 --stop + +exit $returnValue diff --git a/Modules/SquishTestScript.cmake b/Modules/SquishTestScript.cmake new file mode 100644 index 0000000..9eac970 --- /dev/null +++ b/Modules/SquishTestScript.cmake @@ -0,0 +1,72 @@ +# +# This script launches a GUI test using Squish. You should not call +# the script directly; instead, you should access it via the +# SQUISH_ADD_TEST macro that is defined in FindSquish.cmake. +# +# This script starts the Squish server, launches the test on the +# client, and finally stops the squish server. If any of these steps +# fail (including if the tests do not pass) then a fatal error is +# raised. +# + +#============================================================================= +# Copyright 2008-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +cmake_minimum_required(VERSION 2.6 FATAL_ERROR) + +# print out the variable that we are using +message(STATUS "squish_aut='${squish_aut}'") + +message(STATUS "squish_server_executable='${squish_server_executable}'") +message(STATUS "squish_client_executable='${squish_client_executable}'") +message(STATUS "squish_libqtdir ='${squish_libqtdir}'") +message(STATUS "squish_test_case='${squish_test_case}'") +message(STATUS "squish_wrapper='${squish_wrapper}'") +message(STATUS "squish_env_vars='${squish_env_vars}'") + +# parse enviornment variables +foreach(i ${squish_env_vars}) + message(STATUS "parsing env var key/value pair ${i}") + string(REGEX MATCH "([^=]*)=(.*)" squish_env_name ${i}) + message(STATUS "key=${CMAKE_MATCH_1}") + message(STATUS "value=${CMAKE_MATCH_2}") + set ( ENV{${CMAKE_MATCH_1}} ${CMAKE_MATCH_2} ) +endforeach() + +if (QT4_INSTALLED) + # record qt lib directory + set ( ENV{${SQUISH_LIBQTDIR}} ${squish_libqtdir} ) +endif (QT4_INSTALLED) + +# run the test +if (WIN32) + execute_process( + COMMAND ${CMAKE_ROOT}/Modules/SquishRunTestCase.bat ${squish_server_executable} ${squish_client_executable} ${squish_test_case} ${squish_wrapper} ${squish_aut} + RESULT_VARIABLE test_rv + ) +endif (WIN32) + +if (UNIX) + execute_process( + COMMAND ${CMAKE_ROOT}/Modules/SquishRunTestCase.sh ${squish_server_executable} ${squish_client_executable} ${squish_test_case} ${squish_wrapper} ${squish_aut} + RESULT_VARIABLE test_rv + ) +endif (UNIX) + +# check for an error with running the test +if(NOT "${test_rv}" STREQUAL "0") + message(FATAL_ERROR "Error running Squish test") +endif(NOT "${test_rv}" STREQUAL "0") + + + diff --git a/Modules/SystemInformation.cmake b/Modules/SystemInformation.cmake new file mode 100644 index 0000000..d4f2233 --- /dev/null +++ b/Modules/SystemInformation.cmake @@ -0,0 +1,103 @@ + +#============================================================================= +# Copyright 2007-2010 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.) + +CMAKE_MINIMUM_REQUIRED(VERSION ${CMAKE_VERSION}) +PROJECT(DumpInformation) + +# first get the standard information for th platform +INCLUDE_DIRECTORIES("This does not exists") +GET_DIRECTORY_PROPERTY(incl INCLUDE_DIRECTORIES) +SET_DIRECTORY_PROPERTIES(PROPERTIES INCLUDE_DIRECTORIES "${DumpInformation_BINARY_DIR};${DumpInformation_SOURCE_DIR}") + +CONFIGURE_FILE("${CMAKE_ROOT}/Modules/SystemInformation.in" "${RESULT_FILE}") + + +FILE(APPEND "${RESULT_FILE}" + "\n=================================================================\n") +FILE(APPEND "${RESULT_FILE}" + "=== VARIABLES\n") +FILE(APPEND "${RESULT_FILE}" + "=================================================================\n") +GET_CMAKE_PROPERTY(res VARIABLES) +FOREACH(var ${res}) + FILE(APPEND "${RESULT_FILE}" "${var} \"${${var}}\"\n") +ENDFOREACH(var ${res}) + +FILE(APPEND "${RESULT_FILE}" + "\n=================================================================\n") +FILE(APPEND "${RESULT_FILE}" + "=== COMMANDS\n") +FILE(APPEND "${RESULT_FILE}" + "=================================================================\n") +GET_CMAKE_PROPERTY(res COMMANDS) +FOREACH(var ${res}) + FILE(APPEND "${RESULT_FILE}" "${var}\n") +ENDFOREACH(var ${res}) + +FILE(APPEND "${RESULT_FILE}" + "\n=================================================================\n") +FILE(APPEND "${RESULT_FILE}" + "=== MACROS\n") +FILE(APPEND "${RESULT_FILE}" + "=================================================================\n") +FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/AllMacros.txt "") +GET_CMAKE_PROPERTY(res MACROS) +FOREACH(var ${res}) + FILE(APPEND "${RESULT_FILE}" "${var}\n") +ENDFOREACH(var ${res}) + +FILE(APPEND "${RESULT_FILE}" + "\n=================================================================\n") +FILE(APPEND "${RESULT_FILE}" + "=== OTHER\n") +FILE(APPEND "${RESULT_FILE}" + "=================================================================\n") +GET_DIRECTORY_PROPERTY(res INCLUDE_DIRECTORIES) +FOREACH(var ${res}) + FILE(APPEND "${RESULT_FILE}" "INCLUDE_DIRECTORY: ${var}\n") +ENDFOREACH(var) + +GET_DIRECTORY_PROPERTY(res LINK_DIRECTORIES) +FOREACH(var ${res}) + FILE(APPEND "${RESULT_FILE}" "LINK_DIRECTORIES: ${var}\n") +ENDFOREACH(var) + +GET_DIRECTORY_PROPERTY(res INCLUDE_REGULAR_EXPRESSION) +FILE(APPEND "${RESULT_FILE}" "INCLUDE_REGULAR_EXPRESSION: ${res}\n") + +# include other files if they are present, such as when run from within the +# binary tree +MACRO(DUMP_FILE THE_FILE) + IF (EXISTS "${THE_FILE}") + FILE(APPEND "${RESULT_FILE}" + "\n=================================================================\n") + FILE(APPEND "${RESULT_FILE}" + "=== ${THE_FILE}\n") + FILE(APPEND "${RESULT_FILE}" + "=================================================================\n") + + FILE(READ "${THE_FILE}" FILE_CONTENTS LIMIT 50000) + FILE(APPEND "${RESULT_FILE}" "${FILE_CONTENTS}") + ENDIF (EXISTS "${THE_FILE}") +ENDMACRO(DUMP_FILE) + +DUMP_FILE("../CMakeCache.txt") +DUMP_FILE("../CMakeFiles/CMakeOutput.log") +DUMP_FILE("../CMakeFiles/CMakeError.log") +DUMP_FILE("../CMakeFiles/CMakeSystem.cmake") + +FOREACH (EXTRA_FILE ${EXTRA_DUMP_FILES}) + DUMP_FILE("${EXTRA_FILE}") +ENDFOREACH (EXTRA_FILE) + diff --git a/Modules/SystemInformation.in b/Modules/SystemInformation.in new file mode 100644 index 0000000..f2aef50 --- /dev/null +++ b/Modules/SystemInformation.in @@ -0,0 +1,88 @@ +Avoid ctest truncation of output: CTEST_FULL_OUTPUT +======================================================== +=== MAIN VARIABLES +======================================================== +CMAKE_STATIC_LIBRARY_PREFIX == "${CMAKE_STATIC_LIBRARY_PREFIX}" +CMAKE_STATIC_LIBRARY_SUFFIX == "${CMAKE_STATIC_LIBRARY_SUFFIX}" +CMAKE_SHARED_LIBRARY_PREFIX == "${CMAKE_SHARED_LIBRARY_PREFIX}" +CMAKE_SHARED_LIBRARY_SUFFIX == "${CMAKE_SHARED_LIBRARY_SUFFIX}" +CMAKE_SHARED_MODULE_PREFIX == "${CMAKE_SHARED_MODULE_PREFIX}" +CMAKE_SHARED_MODULE_SUFFIX == "${CMAKE_SHARED_MODULE_SUFFIX}" + + +CMAKE_DL_LIBS == "${CMAKE_DL_LIBS}" +CMAKE_LIBRARY_PATH_FLAG == "${CMAKE_LIBRARY_PATH_FLAG}" +CMAKE_LINK_LIBRARY_FLAG == "${CMAKE_LINK_LIBRARY_FLAG}" +CMAKE_SKIP_RPATH == "${CMAKE_SKIP_RPATH}" +CMAKE_SYSTEM_INFO_FILE == "${CMAKE_SYSTEM_INFO_FILE}" +CMAKE_SYSTEM_NAME == "${CMAKE_SYSTEM_NAME}" +CMAKE_SYSTEM == "${CMAKE_SYSTEM}" +CMAKE_CXX_COMPILER == "${CMAKE_CXX_COMPILER}" +CMAKE_C_COMPILER == "${CMAKE_C_COMPILER}" +CMAKE_COMPILER_IS_GNUCC == "${CMAKE_COMPILER_IS_GNUCC}" +CMAKE_COMPILER_IS_GNUCXX == "${CMAKE_COMPILER_IS_GNUCXX}" + +// C shared library flag +CMAKE_SHARED_LIBRARY_C_FLAGS == "${CMAKE_SHARED_LIBRARY_C_FLAGS}" +CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS == "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}" +CMAKE_SHARED_LIBRARY_LINK_FLAGS == "${CMAKE_SHARED_LIBRARY_LINK_FLAGS}" +CMAKE_SHARED_LIBRARY_RUNTIME_FLAG == "${CMAKE_SHARED_LIBRARY_RUNTIME_FLAG}" +CMAKE_SHARED_LIBRARY_RUNTIME_FLAG_SEP == "${CMAKE_SHARED_LIBRARY_RUNTIME_FLAG_SEP}" +CMAKE_SHARED_LIBRARY_LINK_STATIC_C_FLAGS == "${CMAKE_SHARED_LIBRARY_LINK_STATIC_C_FLAGS}" +CMAKE_SHARED_LIBRARY_LINK_DYNAMIC_C_FLAGS == "${CMAKE_SHARED_LIBRARY_LINK_DYNAMIC_C_FLAGS}" + +// C shared module flags +CMAKE_SHARED_MODULE_C_FLAGS == "${CMAKE_SHARED_MODULE_C_FLAGS}" +CMAKE_SHARED_MODULE_CREATE_C_FLAGS == "${CMAKE_SHARED_MODULE_CREATE_C_FLAGS}" +CMAKE_SHARED_MODULE_LINK_STATIC_C_FLAGS == "${CMAKE_SHARED_MODULE_LINK_STATIC_C_FLAGS}" +CMAKE_SHARED_MODULE_LINK_DYNAMIC_C_FLAGS == "${CMAKE_SHARED_MODULE_LINK_DYNAMIC_C_FLAGS}" + +// C exe flags +CMAKE_EXE_LINK_STATIC_C_FLAGS == "${CMAKE_EXE_LINK_STATIC_C_FLAGS}" +CMAKE_EXE_LINK_DYNAMIC_C_FLAGS == "${CMAKE_EXE_LINK_DYNAMIC_C_FLAGS}" + +// CXX shared library flags +CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS == "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS}" +CMAKE_SHARED_LIBRARY_CXX_FLAGS == "${CMAKE_SHARED_LIBRARY_CXX_FLAGS}" +CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS == "${CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS}" +CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG == "${CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG}" +CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP == "${CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP}" +CMAKE_SHARED_LIBRARY_LINK_STATIC_CXX_FLAGS == "${CMAKE_SHARED_LIBRARY_LINK_STATIC_CXX_FLAGS}" +CMAKE_SHARED_LIBRARY_LINK_DYNAMIC_CXX_FLAGS == "${CMAKE_SHARED_LIBRARY_LINK_DYNAMIC_CXX_FLAGS}" + +// CXX shared module flags +CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS == "${CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS}" +CMAKE_SHARED_MODULE_CXX_FLAGS == "${CMAKE_SHARED_MODULE_CXX_FLAGS}" +CMAKE_SHARED_MODULE_LINK_STATIC_CXX_FLAGS == "${CMAKE_SHARED_MODULE_LINK_STATIC_CXX_FLAGS}" +CMAKE_SHARED_MODULE_LINK_DYNAMIC_CXX_FLAGS == "${CMAKE_SHARED_MODULE_LINK_DYNAMIC_CXX_FLAGS}" + +// CXX exe flags +CMAKE_EXE_LINK_STATIC_CXX_FLAGS == "${CMAKE_EXE_LINK_STATIC_CXX_FLAGS}" +CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS == "${CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS}" + +CMAKE_USER_MAKE_RULES_OVERRIDE == "${CMAKE_USER_MAKE_RULES_OVERRIDE}" +CMAKE_VERBOSE_MAKEFILE == "${CMAKE_VERBOSE_MAKEFILE}" +CMAKE_BUILD_TYPE == "${CMAKE_BUILD_TYPE}" +CMAKE_CXX_FLAGS == "${CMAKE_CXX_FLAGS}" +CMAKE_CXX_FLAGS_DEBUG == "${CMAKE_CXX_FLAGS_DEBUG}" +CMAKE_CXX_FLAGS_MINSIZEREL == "${CMAKE_CXX_FLAGS_MINSIZEREL}" +CMAKE_CXX_FLAGS_RELEASE == "${CMAKE_CXX_FLAGS_RELEASE}" +CMAKE_CXX_FLAGS_RELWITHDEBINFO == "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" + +CMAKE_C_FLAGS == "${CMAKE_C_FLAGS}" +CMAKE_C_FLAGS_DEBUG == "${CMAKE_C_FLAGS_DEBUG}" +CMAKE_C_FLAGS_MINSIZEREL == "${CMAKE_C_FLAGS_MINSIZEREL}" +CMAKE_C_FLAGS_RELEASE == "${CMAKE_C_FLAGS_RELEASE}" +CMAKE_C_FLAGS_RELWITHDEBINFO == "${CMAKE_C_FLAGS_RELWITHDEBINFO}" + +// build rules +CMAKE_CXX_CREATE_SHARED_LIBRARY == "${CMAKE_CXX_CREATE_SHARED_LIBRARY}" +CMAKE_CXX_CREATE_SHARED_MODULE == "${CMAKE_CXX_CREATE_SHARED_MODULE}" +CMAKE_C_CREATE_SHARED_LIBRARY == "${CMAKE_C_CREATE_SHARED_LIBRARY}" +CMAKE_C_CREATE_SHARED_MODULE == "${CMAKE_C_CREATE_SHARED_MODULE}" +CMAKE_CXX_CREATE_STATIC_LIBRARY == "${CMAKE_CXX_CREATE_STATIC_LIBRARY}" +CMAKE_C_CREATE_STATIC_LIBRARY == "${CMAKE_C_CREATE_STATIC_LIBRARY}" +CMAKE_CXX_COMPILE_OBJECT == "${CMAKE_CXX_COMPILE_OBJECT}" +CMAKE_C_COMPILE_OBJECT == "${CMAKE_C_COMPILE_OBJECT}" +CMAKE_C_LINK_EXECUTABLE == "${CMAKE_C_LINK_EXECUTABLE}" +CMAKE_CXX_LINK_EXECUTABLE == "${CMAKE_CXX_LINK_EXECUTABLE}" diff --git a/Modules/TestBigEndian.cmake b/Modules/TestBigEndian.cmake new file mode 100644 index 0000000..9960602 --- /dev/null +++ b/Modules/TestBigEndian.cmake @@ -0,0 +1,112 @@ +# - Define macro to determine endian type +# Check if the system is big endian or little endian +# TEST_BIG_ENDIAN(VARIABLE) +# VARIABLE - variable to store the result to +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +MACRO(TEST_BIG_ENDIAN VARIABLE) + IF("HAVE_${VARIABLE}" MATCHES "^HAVE_${VARIABLE}$") + MESSAGE(STATUS "Check if the system is big endian") + MESSAGE(STATUS "Searching 16 bit integer") + + INCLUDE(CheckTypeSize) + + CHECK_TYPE_SIZE("unsigned short" CMAKE_SIZEOF_UNSIGNED_SHORT) + IF(CMAKE_SIZEOF_UNSIGNED_SHORT EQUAL 2) + MESSAGE(STATUS "Using unsigned short") + SET(CMAKE_16BIT_TYPE "unsigned short") + ELSE(CMAKE_SIZEOF_UNSIGNED_SHORT EQUAL 2) + CHECK_TYPE_SIZE("unsigned int" CMAKE_SIZEOF_UNSIGNED_INT) + IF(CMAKE_SIZEOF_UNSIGNED_INT) + MESSAGE(STATUS "Using unsigned int") + SET(CMAKE_16BIT_TYPE "unsigned int") + + ELSE(CMAKE_SIZEOF_UNSIGNED_INT) + + CHECK_TYPE_SIZE("unsigned long" CMAKE_SIZEOF_UNSIGNED_LONG) + IF(CMAKE_SIZEOF_UNSIGNED_LONG) + MESSAGE(STATUS "Using unsigned long") + SET(CMAKE_16BIT_TYPE "unsigned long") + ELSE(CMAKE_SIZEOF_UNSIGNED_LONG) + MESSAGE(FATAL_ERROR "no suitable type found") + ENDIF(CMAKE_SIZEOF_UNSIGNED_LONG) + + ENDIF(CMAKE_SIZEOF_UNSIGNED_INT) + + ENDIF(CMAKE_SIZEOF_UNSIGNED_SHORT EQUAL 2) + + + CONFIGURE_FILE("${CMAKE_ROOT}/Modules/TestEndianess.c.in" + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/TestEndianess.c" + IMMEDIATE @ONLY) + + FILE(READ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/TestEndianess.c" + TEST_ENDIANESS_FILE_CONTENT) + + TRY_COMPILE(HAVE_${VARIABLE} + "${CMAKE_BINARY_DIR}" + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/TestEndianess.c" + OUTPUT_VARIABLE OUTPUT + COPY_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin" ) + + IF(HAVE_${VARIABLE}) + + FILE(STRINGS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin" + CMAKE_TEST_ENDIANESS_STRINGS_LE LIMIT_COUNT 1 REGEX "THIS IS LITTLE ENDIAN") + + FILE(STRINGS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/TestEndianess.bin" + CMAKE_TEST_ENDIANESS_STRINGS_BE LIMIT_COUNT 1 REGEX "THIS IS BIG ENDIAN") + + # on mac, if there are universal binaries built both will be true + # return the result depending on the machine on which cmake runs + IF(CMAKE_TEST_ENDIANESS_STRINGS_BE AND CMAKE_TEST_ENDIANESS_STRINGS_LE) + IF(CMAKE_SYSTEM_PROCESSOR MATCHES powerpc) + SET(CMAKE_TEST_ENDIANESS_STRINGS_BE TRUE) + SET(CMAKE_TEST_ENDIANESS_STRINGS_LE FALSE) + ELSE(CMAKE_SYSTEM_PROCESSOR MATCHES powerpc) + SET(CMAKE_TEST_ENDIANESS_STRINGS_BE FALSE) + SET(CMAKE_TEST_ENDIANESS_STRINGS_LE TRUE) + ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES powerpc) + MESSAGE(STATUS "TEST_BIG_ENDIAN found different results, consider setting CMAKE_OSX_ARCHITECTURES or CMAKE_TRY_COMPILE_OSX_ARCHITECTURES to one or no architecture !") + ENDIF(CMAKE_TEST_ENDIANESS_STRINGS_BE AND CMAKE_TEST_ENDIANESS_STRINGS_LE) + + IF(CMAKE_TEST_ENDIANESS_STRINGS_LE) + SET(${VARIABLE} 0 CACHE INTERNAL "Result of TEST_BIG_ENDIAN" FORCE) + MESSAGE(STATUS "Check if the system is big endian - little endian") + ENDIF(CMAKE_TEST_ENDIANESS_STRINGS_LE) + + IF(CMAKE_TEST_ENDIANESS_STRINGS_BE) + SET(${VARIABLE} 1 CACHE INTERNAL "Result of TEST_BIG_ENDIAN" FORCE) + MESSAGE(STATUS "Check if the system is big endian - big endian") + ENDIF(CMAKE_TEST_ENDIANESS_STRINGS_BE) + + IF(NOT CMAKE_TEST_ENDIANESS_STRINGS_BE AND NOT CMAKE_TEST_ENDIANESS_STRINGS_LE) + MESSAGE(SEND_ERROR "TEST_BIG_ENDIAN found no result!") + ENDIF(NOT CMAKE_TEST_ENDIANESS_STRINGS_BE AND NOT CMAKE_TEST_ENDIANESS_STRINGS_LE) + + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the system is big endian passed with the following output:\n${OUTPUT}\nTestEndianess.c:\n${TEST_ENDIANESS_FILE_CONTENT}\n\n") + + ELSE(HAVE_${VARIABLE}) + MESSAGE(STATUS "Check if the system is big endian - failed") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the system is big endian failed with the following output:\n${OUTPUT}\nTestEndianess.c:\n${TEST_ENDIANESS_FILE_CONTENT}\n\n") + SET(${VARIABLE}) + ENDIF(HAVE_${VARIABLE}) + ENDIF("HAVE_${VARIABLE}" MATCHES "^HAVE_${VARIABLE}$") +ENDMACRO(TEST_BIG_ENDIAN) + + diff --git a/Modules/TestCXXAcceptsFlag.cmake b/Modules/TestCXXAcceptsFlag.cmake new file mode 100644 index 0000000..52d0cf3 --- /dev/null +++ b/Modules/TestCXXAcceptsFlag.cmake @@ -0,0 +1,43 @@ +# - Test CXX compiler for a flag +# Check if the CXX compiler accepts a flag +# +# Macro CHECK_CXX_ACCEPTS_FLAG(FLAGS VARIABLE) - +# checks if the function exists +# FLAGS - the flags to try +# VARIABLE - variable to store the result +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +MACRO(CHECK_CXX_ACCEPTS_FLAG FLAGS VARIABLE) + IF(NOT DEFINED ${VARIABLE}) + MESSAGE(STATUS "Checking to see if CXX compiler accepts flag ${FLAGS}") + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_ROOT}/Modules/DummyCXXFile.cxx + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${FLAGS} + OUTPUT_VARIABLE OUTPUT) + IF(${VARIABLE}) + MESSAGE(STATUS "Checking to see if CXX compiler accepts flag ${FLAGS} - yes") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the CXX compiler accepts the flag ${FLAGS} passed with " + "the following output:\n${OUTPUT}\n\n") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Checking to see if CXX compiler accepts flag ${FLAGS} - no") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the CXX compiler accepts the flag ${FLAGS} failed with " + "the following output:\n${OUTPUT}\n\n") + ENDIF(${VARIABLE}) + ENDIF(NOT DEFINED ${VARIABLE}) +ENDMACRO(CHECK_CXX_ACCEPTS_FLAG) diff --git a/Modules/TestEndianess.c.in b/Modules/TestEndianess.c.in new file mode 100644 index 0000000..c924f78 --- /dev/null +++ b/Modules/TestEndianess.c.in @@ -0,0 +1,23 @@ +/* A 16 bit integer is required. */ +typedef @CMAKE_16BIT_TYPE@ cmakeint16; + +/* On a little endian machine, these 16bit ints will give "THIS IS LITTLE ENDIAN." + On a big endian machine the characters will be exchanged pairwise. */ +const cmakeint16 info_little[] = {0x4854, 0x5349, 0x4920, 0x2053, 0x494c, 0x5454, 0x454c, 0x4520, 0x444e, 0x4149, 0x2e4e, 0x0000}; + +/* on a big endian machine, these 16bit ints will give "THIS IS BIG ENDIAN." + On a little endian machine the characters will be exchanged pairwise. */ +const cmakeint16 info_big[] = {0x5448, 0x4953, 0x2049, 0x5320, 0x4249, 0x4720, 0x454e, 0x4449, 0x414e, 0x2e2e, 0x0000}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_little[argc]; + require += info_big[argc]; + (void)argv; + return require; +} diff --git a/Modules/TestForANSIForScope.cmake b/Modules/TestForANSIForScope.cmake new file mode 100644 index 0000000..ae2acef --- /dev/null +++ b/Modules/TestForANSIForScope.cmake @@ -0,0 +1,44 @@ +# - Check for ANSI for scope support +# Check if the compiler restricts the scope of variables declared in a for-init-statement to the loop body. +# CMAKE_NO_ANSI_FOR_SCOPE - holds result +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF("CMAKE_ANSI_FOR_SCOPE" MATCHES "^CMAKE_ANSI_FOR_SCOPE$") + MESSAGE(STATUS "Check for ANSI scope") + TRY_COMPILE(CMAKE_ANSI_FOR_SCOPE ${CMAKE_BINARY_DIR} + ${CMAKE_ROOT}/Modules/TestForAnsiForScope.cxx + OUTPUT_VARIABLE OUTPUT) + IF (CMAKE_ANSI_FOR_SCOPE) + MESSAGE(STATUS "Check for ANSI scope - found") + SET (CMAKE_NO_ANSI_FOR_SCOPE 0 CACHE INTERNAL + "Does the compiler support ansi for scope.") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the CXX compiler understands ansi for scopes passed with " + "the following output:\n${OUTPUT}\n\n") + ELSE (CMAKE_ANSI_FOR_SCOPE) + MESSAGE(STATUS "Check for ANSI scope - not found") + SET (CMAKE_NO_ANSI_FOR_SCOPE 1 CACHE INTERNAL + "Does the compiler support ansi for scope.") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the CXX compiler understands ansi for scopes failed with " + "the following output:\n${OUTPUT}\n\n") + ENDIF (CMAKE_ANSI_FOR_SCOPE) +ENDIF("CMAKE_ANSI_FOR_SCOPE" MATCHES "^CMAKE_ANSI_FOR_SCOPE$") + + + + + diff --git a/Modules/TestForANSIStreamHeaders.cmake b/Modules/TestForANSIStreamHeaders.cmake new file mode 100644 index 0000000..19c1ab2 --- /dev/null +++ b/Modules/TestForANSIStreamHeaders.cmake @@ -0,0 +1,34 @@ +# - Test for compiler support of ANSI stream headers iostream, etc. +# check if the compiler supports the standard ANSI iostream header (without the .h) +# CMAKE_NO_ANSI_STREAM_HEADERS - defined by the results +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +INCLUDE(CheckIncludeFileCXX) + +IF(NOT CMAKE_NO_ANSI_STREAM_HEADERS) + CHECK_INCLUDE_FILE_CXX(iostream CMAKE_ANSI_STREAM_HEADERS) + IF (CMAKE_ANSI_STREAM_HEADERS) + SET (CMAKE_NO_ANSI_STREAM_HEADERS 0 CACHE INTERNAL + "Does the compiler support headers like iostream.") + ELSE (CMAKE_ANSI_STREAM_HEADERS) + SET (CMAKE_NO_ANSI_STREAM_HEADERS 1 CACHE INTERNAL + "Does the compiler support headers like iostream.") + ENDIF (CMAKE_ANSI_STREAM_HEADERS) + + MARK_AS_ADVANCED(CMAKE_NO_ANSI_STREAM_HEADERS) +ENDIF(NOT CMAKE_NO_ANSI_STREAM_HEADERS) + + diff --git a/Modules/TestForANSIStreamHeaders.cxx b/Modules/TestForANSIStreamHeaders.cxx new file mode 100644 index 0000000..cfb7686 --- /dev/null +++ b/Modules/TestForANSIStreamHeaders.cxx @@ -0,0 +1,6 @@ +#include + +int main(int,char *[]) +{ + return 0; +} diff --git a/Modules/TestForAnsiForScope.cxx b/Modules/TestForAnsiForScope.cxx new file mode 100644 index 0000000..f2ec760 --- /dev/null +++ b/Modules/TestForAnsiForScope.cxx @@ -0,0 +1,7 @@ +int main(int, char*[]) +{ + int i; + for(int i=0; i < 1; ++i); + (void)i; + return 0; +} diff --git a/Modules/TestForSSTREAM.cmake b/Modules/TestForSSTREAM.cmake new file mode 100644 index 0000000..8dd53e7 --- /dev/null +++ b/Modules/TestForSSTREAM.cmake @@ -0,0 +1,43 @@ +# - Test for compiler support of ANSI sstream header +# check if the compiler supports the standard ANSI sstream header +# CMAKE_NO_ANSI_STRING_STREAM - defined by the results +# + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF("CMAKE_HAS_ANSI_STRING_STREAM" MATCHES "^CMAKE_HAS_ANSI_STRING_STREAM$") + MESSAGE(STATUS "Check for sstream") + TRY_COMPILE(CMAKE_HAS_ANSI_STRING_STREAM ${CMAKE_BINARY_DIR} + ${CMAKE_ROOT}/Modules/TestForSSTREAM.cxx + OUTPUT_VARIABLE OUTPUT) + IF (CMAKE_HAS_ANSI_STRING_STREAM) + MESSAGE(STATUS "Check for sstream - found") + SET (CMAKE_NO_ANSI_STRING_STREAM 0 CACHE INTERNAL + "Does the compiler support sstream") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the CXX compiler has sstream passed with " + "the following output:\n${OUTPUT}\n\n") + ELSE (CMAKE_HAS_ANSI_STRING_STREAM) + MESSAGE(STATUS "Check for sstream - not found") + SET (CMAKE_NO_ANSI_STRING_STREAM 1 CACHE INTERNAL + "Does the compiler support sstream") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the CXX compiler has sstream failed with " + "the following output:\n${OUTPUT}\n\n") + ENDIF (CMAKE_HAS_ANSI_STRING_STREAM) +ENDIF("CMAKE_HAS_ANSI_STRING_STREAM" MATCHES "^CMAKE_HAS_ANSI_STRING_STREAM$") + + + + diff --git a/Modules/TestForSSTREAM.cxx b/Modules/TestForSSTREAM.cxx new file mode 100644 index 0000000..af4a4bb --- /dev/null +++ b/Modules/TestForSSTREAM.cxx @@ -0,0 +1,11 @@ +#include +int main(int, char*[]) +{ + std::ostringstream os; + os << "12345"; + if(os.str().size() == 5) + { + return 0; + } + return -1; +} diff --git a/Modules/TestForSTDNamespace.cmake b/Modules/TestForSTDNamespace.cmake new file mode 100644 index 0000000..932d6e9 --- /dev/null +++ b/Modules/TestForSTDNamespace.cmake @@ -0,0 +1,43 @@ +# - Test for std:: namespace support +# check if the compiler supports std:: on stl classes +# CMAKE_NO_STD_NAMESPACE - defined by the results +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF("CMAKE_STD_NAMESPACE" MATCHES "^CMAKE_STD_NAMESPACE$") + MESSAGE(STATUS "Check for STD namespace") + TRY_COMPILE(CMAKE_STD_NAMESPACE ${CMAKE_BINARY_DIR} + ${CMAKE_ROOT}/Modules/TestForSTDNamespace.cxx + OUTPUT_VARIABLE OUTPUT) + IF (CMAKE_STD_NAMESPACE) + MESSAGE(STATUS "Check for STD namespace - found") + SET (CMAKE_NO_STD_NAMESPACE 0 CACHE INTERNAL + "Does the compiler support std::.") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the CXX compiler has std namespace passed with " + "the following output:\n${OUTPUT}\n\n") + ELSE (CMAKE_STD_NAMESPACE) + MESSAGE(STATUS "Check for STD namespace - not found") + SET (CMAKE_NO_STD_NAMESPACE 1 CACHE INTERNAL + "Does the compiler support std::.") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the CXX compiler has std namespace failed with " + "the following output:\n${OUTPUT}\n\n") + ENDIF (CMAKE_STD_NAMESPACE) +ENDIF("CMAKE_STD_NAMESPACE" MATCHES "^CMAKE_STD_NAMESPACE$") + + + + diff --git a/Modules/TestForSTDNamespace.cxx b/Modules/TestForSTDNamespace.cxx new file mode 100644 index 0000000..fc3ac59 --- /dev/null +++ b/Modules/TestForSTDNamespace.cxx @@ -0,0 +1,6 @@ +#include +int main(int, char*[]) +{ + std::list(); + return 0; +} diff --git a/Modules/UseEcos.cmake b/Modules/UseEcos.cmake new file mode 100644 index 0000000..60e1e46 --- /dev/null +++ b/Modules/UseEcos.cmake @@ -0,0 +1,236 @@ +# - This module defines variables and macros required to build eCos application. +# This file contains the following macros: +# ECOS_ADD_INCLUDE_DIRECTORIES() - add the eCos include dirs +# ECOS_ADD_EXECUTABLE(name source1 ... sourceN ) - create an eCos executable +# ECOS_ADJUST_DIRECTORY(VAR source1 ... sourceN ) - adjusts the path of the source files and puts the result into VAR +# +# Macros for selecting the toolchain: +# ECOS_USE_ARM_ELF_TOOLS() - enable the ARM ELF toolchain for the directory where it is called +# ECOS_USE_I386_ELF_TOOLS() - enable the i386 ELF toolchain for the directory where it is called +# ECOS_USE_PPC_EABI_TOOLS() - enable the PowerPC toolchain for the directory where it is called +# +# It contains the following variables: +# ECOS_DEFINITIONS +# ECOSCONFIG_EXECUTABLE +# ECOS_CONFIG_FILE - defaults to ecos.ecc, if your eCos configuration file has a different name, adjust this variable +# for internal use only: +# ECOS_ADD_TARGET_LIB + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# first check that ecosconfig is available +FIND_PROGRAM(ECOSCONFIG_EXECUTABLE NAMES ecosconfig) +IF(NOT ECOSCONFIG_EXECUTABLE) + MESSAGE(SEND_ERROR "ecosconfig was not found. Either include it in the system path or set it manually using ccmake.") +ELSE(NOT ECOSCONFIG_EXECUTABLE) + MESSAGE(STATUS "Found ecosconfig: ${ECOSCONFIG_EXECUTABLE}") +ENDIF(NOT ECOSCONFIG_EXECUTABLE) + +# check that ECOS_REPOSITORY is set correctly +IF (NOT EXISTS $ENV{ECOS_REPOSITORY}/ecos.db) + MESSAGE(SEND_ERROR "The environment variable ECOS_REPOSITORY is not set correctly. Set it to the directory which contains the file ecos.db") +ELSE (NOT EXISTS $ENV{ECOS_REPOSITORY}/ecos.db) + MESSAGE(STATUS "ECOS_REPOSITORY is set to $ENV{ECOS_REPOSITORY}") +ENDIF (NOT EXISTS $ENV{ECOS_REPOSITORY}/ecos.db) + +# check that tclsh (coming with TCL) is available, otherwise ecosconfig doesn't work +FIND_PACKAGE(Tclsh) +IF (NOT TCL_TCLSH) + MESSAGE(SEND_ERROR "The TCL tclsh was not found. Please install TCL, it is required for building eCos applications.") +ELSE (NOT TCL_TCLSH) + MESSAGE(STATUS "tlcsh found: ${TCL_TCLSH}") +ENDIF (NOT TCL_TCLSH) + +#add the globale include-diretories +#usage: ECOS_ADD_INCLUDE_DIRECTORIES() +MACRO(ECOS_ADD_INCLUDE_DIRECTORIES) +#check for ProjectSources.txt one level higher + IF (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../ProjectSources.txt) + INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../) + ELSE (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../ProjectSources.txt) + INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/) + ENDIF (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../ProjectSources.txt) + +#the ecos include directory + INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/ecos/install/include/) + +ENDMACRO(ECOS_ADD_INCLUDE_DIRECTORIES) + + +#we want to compile for the xscale processor, in this case the following macro has to be called +#usage: ECOS_USE_ARM_ELF_TOOLS() +MACRO (ECOS_USE_ARM_ELF_TOOLS) + SET(CMAKE_CXX_COMPILER "arm-elf-c++") + SET(CMAKE_COMPILER_IS_GNUCXX 1) + SET(CMAKE_C_COMPILER "arm-elf-gcc") + SET(CMAKE_AR "arm-elf-ar") + SET(CMAKE_RANLIB "arm-elf-ranlib") +#for linking + SET(ECOS_LD_MCPU "-mcpu=xscale") +#for compiling + ADD_DEFINITIONS(-mcpu=xscale -mapcs-frame) +#for the obj-tools + SET(ECOS_ARCH_PREFIX "arm-elf-") +ENDMACRO (ECOS_USE_ARM_ELF_TOOLS) + +#usage: ECOS_USE_PPC_EABI_TOOLS() +MACRO (ECOS_USE_PPC_EABI_TOOLS) + SET(CMAKE_CXX_COMPILER "powerpc-eabi-c++") + SET(CMAKE_COMPILER_IS_GNUCXX 1) + SET(CMAKE_C_COMPILER "powerpc-eabi-gcc") + SET(CMAKE_AR "powerpc-eabi-ar") + SET(CMAKE_RANLIB "powerpc-eabi-ranlib") +#for linking + SET(ECOS_LD_MCPU "") +#for compiling + ADD_DEFINITIONS() +#for the obj-tools + SET(ECOS_ARCH_PREFIX "powerpc-eabi-") +ENDMACRO (ECOS_USE_PPC_EABI_TOOLS) + +#usage: ECOS_USE_I386_ELF_TOOLS() +MACRO (ECOS_USE_I386_ELF_TOOLS) + SET(CMAKE_CXX_COMPILER "i386-elf-c++") + SET(CMAKE_COMPILER_IS_GNUCXX 1) + SET(CMAKE_C_COMPILER "i386-elf-gcc") + SET(CMAKE_AR "i386-elf-ar") + SET(CMAKE_RANLIB "i386-elf-ranlib") +#for linking + SET(ECOS_LD_MCPU "") +#for compiling + ADD_DEFINITIONS() +#for the obj-tools + SET(ECOS_ARCH_PREFIX "i386-elf-") +ENDMACRO (ECOS_USE_I386_ELF_TOOLS) + + +#since the actual sources are located one level upwards +#a "../" has to be prepended in front of every source file +#call the following macro to achieve this, the first parameter +#is the name of the new list of source files with adjusted paths, +#followed by all source files +#usage: ECOS_ADJUST_DIRECTORY(adjusted_SRCS ${my_srcs}) +MACRO(ECOS_ADJUST_DIRECTORY _target_FILES ) + FOREACH (_current_FILE ${ARGN}) + GET_FILENAME_COMPONENT(_abs_FILE ${_current_FILE} ABSOLUTE) + IF (NOT ${_abs_FILE} STREQUAL ${_current_FILE}) + GET_FILENAME_COMPONENT(_abs_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../${_current_FILE} ABSOLUTE) + ENDIF (NOT ${_abs_FILE} STREQUAL ${_current_FILE}) + LIST(APPEND ${_target_FILES} ${_abs_FILE}) + ENDFOREACH (_current_FILE) +ENDMACRO(ECOS_ADJUST_DIRECTORY) + +# the default ecos config file name +# maybe in the future also out-of-source builds may be possible +SET(ECOS_CONFIG_FILE ecos.ecc) + +#creates the dependancy from all source files on the ecos target.ld, +#adds the command for compiling ecos +MACRO(ECOS_ADD_TARGET_LIB) +# when building out-of-source, create the ecos/ subdir + IF(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/ecos) + FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ecos) + ENDIF(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/ecos) + +#sources depend on target.ld + SET_SOURCE_FILES_PROPERTIES( + ${ARGN} + PROPERTIES + OBJECT_DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/ecos/install/lib/target.ld + ) + + ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ecos/install/lib/target.ld + COMMAND sh -c \"make -C ${CMAKE_CURRENT_BINARY_DIR}/ecos || exit -1\; if [ -e ${CMAKE_CURRENT_BINARY_DIR}/ecos/install/lib/target.ld ] \; then touch ${CMAKE_CURRENT_BINARY_DIR}/ecos/install/lib/target.ld\; fi\" + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ecos/makefile + ) + + ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ecos/makefile + COMMAND sh -c \" cd ${CMAKE_CURRENT_BINARY_DIR}/ecos\; ${ECOSCONFIG_EXECUTABLE} --config=${CMAKE_CURRENT_SOURCE_DIR}/ecos/${ECOS_CONFIG_FILE} tree || exit -1\;\" + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ecos/${ECOS_CONFIG_FILE} + ) + + ADD_CUSTOM_TARGET( ecos make -C ${CMAKE_CURRENT_BINARY_DIR}/ecos/ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ecos/makefile ) +ENDMACRO(ECOS_ADD_TARGET_LIB) + +# get the directory of the current file, used later on in the file +GET_FILENAME_COMPONENT( ECOS_CMAKE_MODULE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) + +#macro for creating an executable ecos application +#the first parameter is the name of the executable, +#the second is the list of all source files (where the path +#has been adjusted beforehand by calling ECOS_ADJUST_DIRECTORY() +#usage: ECOS_ADD_EXECUTABLE(my_app ${adjusted_SRCS}) +MACRO(ECOS_ADD_EXECUTABLE _exe_NAME ) + #definitions, valid for all ecos projects + #the optimization and "-g" for debugging has to be enabled + #in the project-specific CMakeLists.txt + ADD_DEFINITIONS(-D__ECOS__=1 -D__ECOS=1) + SET(ECOS_DEFINITIONS -Wall -Wno-long-long -pipe -fno-builtin) + +#the executable depends on ecos target.ld + ECOS_ADD_TARGET_LIB(${ARGN}) + +# when using nmake makefiles, the custom buildtype supresses the default cl.exe flags +# and the rules for creating objects are adjusted for gcc + SET(CMAKE_BUILD_TYPE CUSTOM_ECOS_BUILD) + SET(CMAKE_C_COMPILE_OBJECT " -o -c ") + SET(CMAKE_CXX_COMPILE_OBJECT " -o -c ") +# special link commands for ecos-executables + SET(CMAKE_CXX_LINK_EXECUTABLE " -o ${_ecos_EXTRA_LIBS} -nostdlib -nostartfiles -L${CMAKE_CURRENT_BINARY_DIR}/ecos/install/lib -Ttarget.ld ${ECOS_LD_MCPU}") + SET(CMAKE_C_LINK_EXECUTABLE " -o ${_ecos_EXTRA_LIBS} -nostdlib -nostartfiles -L${CMAKE_CURRENT_BINARY_DIR}/ecos/install/lib -Ttarget.ld ${ECOS_LD_MCPU}") +# some strict compiler flags + SET (CMAKE_C_FLAGS "-Wstrict-prototypes") + SET (CMAKE_CXX_FLAGS "-Woverloaded-virtual -fno-rtti -Wctor-dtor-privacy -fno-strict-aliasing -fno-exceptions") + + ADD_EXECUTABLE(${_exe_NAME} ${ARGN}) + SET_TARGET_PROPERTIES(${_exe_NAME} PROPERTIES SUFFIX ".elf") + +#create a binary file + ADD_CUSTOM_COMMAND( + TARGET ${_exe_NAME} + POST_BUILD + COMMAND ${ECOS_ARCH_PREFIX}objcopy + ARGS -O binary ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.elf ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.bin + ) + +#and an srec file + ADD_CUSTOM_COMMAND( + TARGET ${_exe_NAME} + POST_BUILD + COMMAND ${ECOS_ARCH_PREFIX}objcopy + ARGS -O srec ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.elf ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.srec + ) + +#add the created files to the clean-files + SET_DIRECTORY_PROPERTIES( + PROPERTIES + ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.bin;${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.srec;${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.lst;" + ) + + ADD_CUSTOM_TARGET(ecosclean ${CMAKE_COMMAND} -DECOS_DIR=${CMAKE_CURRENT_BINARY_DIR}/ecos/ -P ${ECOS_CMAKE_MODULE_DIR}/ecos_clean.cmake ) + ADD_CUSTOM_TARGET(normalclean ${CMAKE_MAKE_PROGRAM} clean WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + ADD_DEPENDENCIES (ecosclean normalclean) + + + ADD_CUSTOM_TARGET( listing + COMMAND echo -e \"\\n--- Symbols sorted by address ---\\n\" > ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.lst + COMMAND ${ECOS_ARCH_PREFIX}nm -S -C -n ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.elf >> ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.lst + COMMAND echo -e \"\\n--- Symbols sorted by size ---\\n\" >> ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.lst + COMMAND ${ECOS_ARCH_PREFIX}nm -S -C -r --size-sort ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.elf >> ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.lst + COMMAND echo -e \"\\n--- Full assembly listing ---\\n\" >> ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.lst + COMMAND ${ECOS_ARCH_PREFIX}objdump -S -x -d -C ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.elf >> ${CMAKE_CURRENT_BINARY_DIR}/${_exe_NAME}.lst ) + +ENDMACRO(ECOS_ADD_EXECUTABLE) + diff --git a/Modules/UseJava.cmake b/Modules/UseJava.cmake new file mode 100644 index 0000000..84d0afd --- /dev/null +++ b/Modules/UseJava.cmake @@ -0,0 +1,881 @@ +# - Use Module for Java +# This file provides functions for Java. It is assumed that FindJava.cmake +# has already been loaded. See FindJava.cmake for information on how to +# load Java into your CMake project. +# +# add_jar(TARGET_NAME SRC1 SRC2 .. SRCN RCS1 RCS2 .. RCSN) +# +# This command creates a .jar. It compiles the given source +# files (SRC) and adds the given resource files (RCS) to the jar file. +# If only resource files are given then just a jar file is created. +# +# Additional instructions: +# To add compile flags to the target you can set these flags with +# the following variable: +# +# set(CMAKE_JAVA_COMPILE_FLAGS -nowarn) +# +# To add a path or a jar file to the class path you can do this +# with the CMAKE_JAVA_INCLUDE_PATH variable. +# +# set(CMAKE_JAVA_INCLUDE_PATH /usr/share/java/shibboleet.jar) +# +# To use a different output name for the target you can set it with: +# +# set(CMAKE_JAVA_TARGET_OUTPUT_NAME shibboleet.jar) +# add_jar(foobar foobar.java) +# +# To use a different output directory than CMAKE_CURRENT_BINARY_DIR +# you can set it with: +# +# set(CMAKE_JAVA_TARGET_OUTPUT_DIR ${PROJECT_BINARY_DIR}/bin) +# +# To define an entry point in your jar you can set it with: +# +# set(CMAKE_JAVA_JAR_ENTRY_POINT com/examples/MyProject/Main) +# +# To add a VERSION to the target output name you can set it using +# CMAKE_JAVA_TARGET_VERSION. This will create a jar file with the name +# shibboleet-1.0.0.jar and will create a symlink shibboleet.jar +# pointing to the jar with the version information. +# +# set(CMAKE_JAVA_TARGET_VERSION 1.2.0) +# add_jar(shibboleet shibbotleet.java) +# +# If the target is a JNI library, utilize the following commands to +# create a JNI symbolic link: +# +# set(CMAKE_JNI_TARGET TRUE) +# set(CMAKE_JAVA_TARGET_VERSION 1.2.0) +# add_jar(shibboleet shibbotleet.java) +# install_jar(shibboleet ${LIB_INSTALL_DIR}/shibboleet) +# install_jni_symlink(shibboleet ${JAVA_LIB_INSTALL_DIR}) +# +# If a single target needs to produce more than one jar from its +# java source code, to prevent the accumulation of duplicate class +# files in subsequent jars, set/reset CMAKE_JAR_CLASSES_PREFIX prior +# to calling the add_jar() function: +# +# set(CMAKE_JAR_CLASSES_PREFIX com/redhat/foo) +# add_jar(foo foo.java) +# +# set(CMAKE_JAR_CLASSES_PREFIX com/redhat/bar) +# add_jar(bar bar.java) +# +# Target Properties: +# The add_jar() functions sets some target properties. You can get these +# properties with the +# get_property(TARGET PROPERTY ) +# command. +# +# INSTALL_FILES The files which should be installed. This is used by +# install_jar(). +# JNI_SYMLINK The JNI symlink which should be installed. +# This is used by install_jni_symlink(). +# JAR_FILE The location of the jar file so that you can include +# it. +# CLASS_DIR The directory where the class files can be found. For +# example to use them with javah. +# +# find_jar( +# name | NAMES name1 [name2 ...] +# [PATHS path1 [path2 ... ENV var]] +# [VERSIONS version1 [version2]] +# [DOC "cache documentation string"] +# ) +# +# This command is used to find a full path to the named jar. A cache +# entry named by is created to stor the result of this command. If +# the full path to a jar is found the result is stored in the variable +# and the search will not repeated unless the variable is cleared. If +# nothing is found, the result will be -NOTFOUND, and the search +# will be attempted again next time find_jar is invoked with the same +# variable. +# The name of the full path to a file that is searched for is specified +# by the names listed after NAMES argument. Additional search locations +# can be specified after the PATHS argument. If you require special a +# version of a jar file you can specify it with the VERSIONS argument. +# The argument after DOC will be used for the documentation string in +# the cache. +# +# install_jar(TARGET_NAME DESTINATION) +# +# This command installs the TARGET_NAME files to the given DESTINATION. +# It should be called in the same scope as add_jar() or it will fail. +# +# install_jni_symlink(TARGET_NAME DESTINATION) +# +# This command installs the TARGET_NAME JNI symlinks to the given +# DESTINATION. It should be called in the same scope as add_jar() +# or it will fail. +# +# create_javadoc( +# PACKAGES pkg1 [pkg2 ...] +# [SOURCEPATH ] +# [CLASSPATH ] +# [INSTALLPATH ] +# [DOCTITLE "the documentation title"] +# [WINDOWTITLE "the title of the document"] +# [AUTHOR TRUE|FALSE] +# [USE TRUE|FALSE] +# [VERSION TRUE|FALSE] +# ) +# +# Create java documentation based on files or packages. For more +# details please read the javadoc manpage. +# +# There are two main signatures for create_javadoc. The first +# signature works with package names on a path with source files: +# +# Example: +# create_javadoc(my_example_doc +# PACKAGES com.exmaple.foo com.example.bar +# SOURCEPATH ${CMAKE_CURRENT_SOURCE_PATH} +# CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} +# WINDOWTITLE "My example" +# DOCTITLE "

My example

" +# AUTHOR TRUE +# USE TRUE +# VERSION TRUE +# ) +# +# The second signature for create_javadoc works on a given list of +# files. +# +# create_javadoc( +# FILES file1 [file2 ...] +# [CLASSPATH ] +# [INSTALLPATH ] +# [DOCTITLE "the documentation title"] +# [WINDOWTITLE "the title of the document"] +# [AUTHOR TRUE|FALSE] +# [USE TRUE|FALSE] +# [VERSION TRUE|FALSE] +# ) +# +# Example: +# create_javadoc(my_example_doc +# FILES ${example_SRCS} +# CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} +# WINDOWTITLE "My example" +# DOCTITLE "

My example

" +# AUTHOR TRUE +# USE TRUE +# VERSION TRUE +# ) +# +# Both signatures share most of the options. These options are the +# same as what you can find in the javadoc manpage. Please look at +# the manpage for CLASSPATH, DOCTITLE, WINDOWTITLE, AUTHOR, USE and +# VERSION. +# +# The documentation will be by default installed to +# +# ${CMAKE_INSTALL_PREFIX}/share/javadoc/ +# +# if you don't set the INSTALLPATH. +# + +#============================================================================= +# Copyright 2010-2011 Andreas schneider +# Copyright 2010 Ben Boeckel +# +# 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.) + +function (__java_copy_file src dest comment) + add_custom_command( + OUTPUT ${dest} + COMMAND cmake -E copy_if_different + ARGS ${src} + ${dest} + DEPENDS ${src} + COMMENT ${comment}) +endfunction (__java_copy_file src dest comment) + +# define helper scripts +set(_JAVA_CLASS_FILELIST_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaClassFilelist.cmake) +set(_JAVA_SYMLINK_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaSymlinks.cmake) + +function(add_jar _TARGET_NAME) + set(_JAVA_SOURCE_FILES ${ARGN}) + + if (NOT DEFINED CMAKE_JAVA_TARGET_OUTPUT_DIR) + set(CMAKE_JAVA_TARGET_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) + endif(NOT DEFINED CMAKE_JAVA_TARGET_OUTPUT_DIR) + + if (CMAKE_JAVA_JAR_ENTRY_POINT) + set(_ENTRY_POINT_OPTION e) + set(_ENTRY_POINT_VALUE ${CMAKE_JAVA_JAR_ENTRY_POINT}) + endif (CMAKE_JAVA_JAR_ENTRY_POINT) + + if (LIBRARY_OUTPUT_PATH) + set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH}) + else (LIBRARY_OUTPUT_PATH) + set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${CMAKE_JAVA_TARGET_OUTPUT_DIR}) + endif (LIBRARY_OUTPUT_PATH) + + set(CMAKE_JAVA_INCLUDE_PATH + ${CMAKE_JAVA_INCLUDE_PATH} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_JAVA_OBJECT_OUTPUT_PATH} + ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH} + ) + + if (WIN32 AND NOT CYGWIN) + set(CMAKE_JAVA_INCLUDE_FLAG_SEP ";") + else (WIN32 AND NOT CYGWIN) + set(CMAKE_JAVA_INCLUDE_FLAG_SEP ":") + endif(WIN32 AND NOT CYGWIN) + + foreach (JAVA_INCLUDE_DIR ${CMAKE_JAVA_INCLUDE_PATH}) + set(CMAKE_JAVA_INCLUDE_PATH_FINAL "${CMAKE_JAVA_INCLUDE_PATH_FINAL}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${JAVA_INCLUDE_DIR}") + endforeach(JAVA_INCLUDE_DIR) + + set(CMAKE_JAVA_CLASS_OUTPUT_PATH "${CMAKE_JAVA_TARGET_OUTPUT_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir") + + set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}.jar") + if (CMAKE_JAVA_TARGET_OUTPUT_NAME AND CMAKE_JAVA_TARGET_VERSION) + set(_JAVA_TARGET_OUTPUT_NAME "${CMAKE_JAVA_TARGET_OUTPUT_NAME}-${CMAKE_JAVA_TARGET_VERSION}.jar") + set(_JAVA_TARGET_OUTPUT_LINK "${CMAKE_JAVA_TARGET_OUTPUT_NAME}.jar") + elseif (CMAKE_JAVA_TARGET_VERSION) + set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}-${CMAKE_JAVA_TARGET_VERSION}.jar") + set(_JAVA_TARGET_OUTPUT_LINK "${_TARGET_NAME}.jar") + elseif (CMAKE_JAVA_TARGET_OUTPUT_NAME) + set(_JAVA_TARGET_OUTPUT_NAME "${CMAKE_JAVA_TARGET_OUTPUT_NAME}.jar") + endif (CMAKE_JAVA_TARGET_OUTPUT_NAME AND CMAKE_JAVA_TARGET_VERSION) + # reset + set(CMAKE_JAVA_TARGET_OUTPUT_NAME) + + set(_JAVA_CLASS_FILES) + set(_JAVA_COMPILE_FILES) + set(_JAVA_DEPENDS) + set(_JAVA_RESOURCE_FILES) + foreach(_JAVA_SOURCE_FILE ${_JAVA_SOURCE_FILES}) + get_filename_component(_JAVA_EXT ${_JAVA_SOURCE_FILE} EXT) + get_filename_component(_JAVA_FILE ${_JAVA_SOURCE_FILE} NAME_WE) + get_filename_component(_JAVA_PATH ${_JAVA_SOURCE_FILE} PATH) + get_filename_component(_JAVA_FULL ${_JAVA_SOURCE_FILE} ABSOLUTE) + + file(RELATIVE_PATH _JAVA_REL_BINARY_PATH ${CMAKE_JAVA_TARGET_OUTPUT_DIR} ${_JAVA_FULL}) + file(RELATIVE_PATH _JAVA_REL_SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${_JAVA_FULL}) + string(LENGTH ${_JAVA_REL_BINARY_PATH} _BIN_LEN) + string(LENGTH ${_JAVA_REL_SOURCE_PATH} _SRC_LEN) + if (${_BIN_LEN} LESS ${_SRC_LEN}) + set(_JAVA_REL_PATH ${_JAVA_REL_BINARY_PATH}) + else (${_BIN_LEN} LESS ${_SRC_LEN}) + set(_JAVA_REL_PATH ${_JAVA_REL_SOURCE_PATH}) + endif (${_BIN_LEN} LESS ${_SRC_LEN}) + get_filename_component(_JAVA_REL_PATH ${_JAVA_REL_PATH} PATH) + + if (_JAVA_EXT MATCHES ".java") + list(APPEND _JAVA_COMPILE_FILES ${_JAVA_SOURCE_FILE}) + set(_JAVA_CLASS_FILE "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_REL_PATH}/${_JAVA_FILE}.class") + set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES} ${_JAVA_CLASS_FILE}) + + elseif (_JAVA_EXT MATCHES ".jar" + OR _JAVA_EXT MATCHES ".war" + OR _JAVA_EXT MATCHES ".ear" + OR _JAVA_EXT MATCHES ".sar") + list(APPEND CMAKE_JAVA_INCLUDE_PATH ${_JAVA_SOURCE_FILE}) + + elseif (_JAVA_EXT STREQUAL "") + list(APPEND CMAKE_JAVA_INCLUDE_PATH ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}} ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}_CLASSPATH}) + list(APPEND _JAVA_DEPENDS ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}}) + + else (_JAVA_EXT MATCHES ".java") + __java_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/${_JAVA_SOURCE_FILE} + ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE} + "Copying ${_JAVA_SOURCE_FILE} to the build directory") + list(APPEND _JAVA_RESOURCE_FILES ${_JAVA_SOURCE_FILE}) + endif (_JAVA_EXT MATCHES ".java") + endforeach(_JAVA_SOURCE_FILE) + + # create an empty java_class_filelist + if (NOT EXISTS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist) + file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "") + endif() + + if (_JAVA_COMPILE_FILES) + # Compile the java files and create a list of class files + add_custom_command( + # NOTE: this command generates an artificial dependency file + OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME} + COMMAND ${Java_JAVAC_EXECUTABLE} + ${CMAKE_JAVA_COMPILE_FLAGS} + -classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}" + -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH} + ${_JAVA_COMPILE_FILES} + COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME} + DEPENDS ${_JAVA_COMPILE_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Building Java objects for ${_TARGET_NAME}.jar" + ) + add_custom_command( + OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist + COMMAND ${CMAKE_COMMAND} + -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH} + -DCMAKE_JAR_CLASSES_PREFIX="${CMAKE_JAR_CLASSES_PREFIX}" + -P ${_JAVA_CLASS_FILELIST_SCRIPT} + DEPENDS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) + endif (_JAVA_COMPILE_FILES) + + # create the jar file + set(_JAVA_JAR_OUTPUT_PATH + ${CMAKE_JAVA_TARGET_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_NAME}) + if (CMAKE_JNI_TARGET) + add_custom_command( + OUTPUT ${_JAVA_JAR_OUTPUT_PATH} + COMMAND ${Java_JAR_EXECUTABLE} + -cf${_ENTRY_POINT_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} + ${_JAVA_RESOURCE_FILES} @java_class_filelist + COMMAND ${CMAKE_COMMAND} + -D_JAVA_TARGET_DIR=${CMAKE_JAVA_TARGET_OUTPUT_DIR} + -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME} + -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK} + -P ${_JAVA_SYMLINK_SCRIPT} + COMMAND ${CMAKE_COMMAND} + -D_JAVA_TARGET_DIR=${CMAKE_JAVA_TARGET_OUTPUT_DIR} + -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_JAR_OUTPUT_PATH} + -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK} + -P ${_JAVA_SYMLINK_SCRIPT} + DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist + WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH} + COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}" + ) + else () + add_custom_command( + OUTPUT ${_JAVA_JAR_OUTPUT_PATH} + COMMAND ${Java_JAR_EXECUTABLE} + -cf${_ENTRY_POINT_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} + ${_JAVA_RESOURCE_FILES} @java_class_filelist + COMMAND ${CMAKE_COMMAND} + -D_JAVA_TARGET_DIR=${CMAKE_JAVA_TARGET_OUTPUT_DIR} + -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME} + -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK} + -P ${_JAVA_SYMLINK_SCRIPT} + WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH} + DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist + COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}" + ) + endif (CMAKE_JNI_TARGET) + + # Add the target and make sure we have the latest resource files. + add_custom_target(${_TARGET_NAME} ALL DEPENDS ${_JAVA_JAR_OUTPUT_PATH}) + + set_property( + TARGET + ${_TARGET_NAME} + PROPERTY + INSTALL_FILES + ${_JAVA_JAR_OUTPUT_PATH} + ) + + if (_JAVA_TARGET_OUTPUT_LINK) + set_property( + TARGET + ${_TARGET_NAME} + PROPERTY + INSTALL_FILES + ${_JAVA_JAR_OUTPUT_PATH} + ${CMAKE_JAVA_TARGET_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK} + ) + + if (CMAKE_JNI_TARGET) + set_property( + TARGET + ${_TARGET_NAME} + PROPERTY + JNI_SYMLINK + ${CMAKE_JAVA_TARGET_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK} + ) + endif (CMAKE_JNI_TARGET) + endif (_JAVA_TARGET_OUTPUT_LINK) + + set_property( + TARGET + ${_TARGET_NAME} + PROPERTY + JAR_FILE + ${_JAVA_JAR_OUTPUT_PATH} + ) + + set_property( + TARGET + ${_TARGET_NAME} + PROPERTY + CLASSDIR + ${CMAKE_JAVA_CLASS_OUTPUT_PATH} + ) + +endfunction(add_jar) + +function(INSTALL_JAR _TARGET_NAME _DESTINATION) + get_property(__FILES + TARGET + ${_TARGET_NAME} + PROPERTY + INSTALL_FILES + ) + + if (__FILES) + install( + FILES + ${__FILES} + DESTINATION + ${_DESTINATION} + ) + else (__FILES) + message(SEND_ERROR "The target ${_TARGET_NAME} is not known in this scope.") + endif (__FILES) +endfunction(INSTALL_JAR _TARGET_NAME _DESTINATION) + +function(INSTALL_JNI_SYMLINK _TARGET_NAME _DESTINATION) + get_property(__SYMLINK + TARGET + ${_TARGET_NAME} + PROPERTY + JNI_SYMLINK + ) + + if (__SYMLINK) + install( + FILES + ${__SYMLINK} + DESTINATION + ${_DESTINATION} + ) + else (__SYMLINK) + message(SEND_ERROR "The target ${_TARGET_NAME} is not known in this scope.") + endif (__SYMLINK) +endfunction(INSTALL_JNI_SYMLINK _TARGET_NAME _DESTINATION) + +function (find_jar VARIABLE) + set(_jar_names) + set(_jar_files) + set(_jar_versions) + set(_jar_paths + /usr/share/java/ + /usr/local/share/java/ + ${Java_JAR_PATHS}) + set(_jar_doc "NOTSET") + + set(_state "name") + + foreach (arg ${ARGN}) + if (${_state} STREQUAL "name") + if (${arg} STREQUAL "VERSIONS") + set(_state "versions") + elseif (${arg} STREQUAL "NAMES") + set(_state "names") + elseif (${arg} STREQUAL "PATHS") + set(_state "paths") + elseif (${arg} STREQUAL "DOC") + set(_state "doc") + else (${arg} STREQUAL "NAMES") + set(_jar_names ${arg}) + if (_jar_doc STREQUAL "NOTSET") + set(_jar_doc "Finding ${arg} jar") + endif (_jar_doc STREQUAL "NOTSET") + endif (${arg} STREQUAL "VERSIONS") + elseif (${_state} STREQUAL "versions") + if (${arg} STREQUAL "NAMES") + set(_state "names") + elseif (${arg} STREQUAL "PATHS") + set(_state "paths") + elseif (${arg} STREQUAL "DOC") + set(_state "doc") + else (${arg} STREQUAL "NAMES") + set(_jar_versions ${_jar_versions} ${arg}) + endif (${arg} STREQUAL "NAMES") + elseif (${_state} STREQUAL "names") + if (${arg} STREQUAL "VERSIONS") + set(_state "versions") + elseif (${arg} STREQUAL "PATHS") + set(_state "paths") + elseif (${arg} STREQUAL "DOC") + set(_state "doc") + else (${arg} STREQUAL "VERSIONS") + set(_jar_names ${_jar_names} ${arg}) + if (_jar_doc STREQUAL "NOTSET") + set(_jar_doc "Finding ${arg} jar") + endif (_jar_doc STREQUAL "NOTSET") + endif (${arg} STREQUAL "VERSIONS") + elseif (${_state} STREQUAL "paths") + if (${arg} STREQUAL "VERSIONS") + set(_state "versions") + elseif (${arg} STREQUAL "NAMES") + set(_state "names") + elseif (${arg} STREQUAL "DOC") + set(_state "doc") + else (${arg} STREQUAL "VERSIONS") + set(_jar_paths ${_jar_paths} ${arg}) + endif (${arg} STREQUAL "VERSIONS") + elseif (${_state} STREQUAL "doc") + if (${arg} STREQUAL "VERSIONS") + set(_state "versions") + elseif (${arg} STREQUAL "NAMES") + set(_state "names") + elseif (${arg} STREQUAL "PATHS") + set(_state "paths") + else (${arg} STREQUAL "VERSIONS") + set(_jar_doc ${arg}) + endif (${arg} STREQUAL "VERSIONS") + endif (${_state} STREQUAL "name") + endforeach (arg ${ARGN}) + + if (${_jar_names} STREQUAL "") + message(FATAL_ERROR "find_jar: No name to search for given") + endif (${_jar_names} STREQUAL "") + + foreach (jar_name ${_jar_names}) + foreach (version ${_jar_versions}) + set(_jar_files ${_jar_files} ${jar_name}-${version}.jar) + endforeach (version ${_jar_versions}) + set(_jar_files ${_jar_files} ${jar_name}.jar) + endforeach (jar_name ${_jar_names}) + + find_file(${VARIABLE} + NAMES ${_jar_files} + PATHS ${_jar_paths} + DOC ${_jar_doc} + NO_DEFAULT_PATH) +endfunction (find_jar VARIABLE) + +function(create_javadoc _target) + set(_javadoc_packages) + set(_javadoc_files) + set(_javadoc_sourcepath) + set(_javadoc_classpath) + set(_javadoc_installpath "${CMAKE_INSTALL_PREFIX}/share/javadoc") + set(_javadoc_doctitle) + set(_javadoc_windowtitle) + set(_javadoc_author FALSE) + set(_javadoc_version FALSE) + set(_javadoc_use FALSE) + + set(_state "package") + + foreach (arg ${ARGN}) + if (${_state} STREQUAL "package") + if (${arg} STREQUAL "PACKAGES") + set(_state "packages") + elseif (${arg} STREQUAL "FILES") + set(_state "files") + elseif (${arg} STREQUAL "SOURCEPATH") + set(_state "sourcepath") + elseif (${arg} STREQUAL "CLASSPATH") + set(_state "classpath") + elseif (${arg} STREQUAL "INSTALLPATH") + set(_state "installpath") + elseif (${arg} STREQUAL "DOCTITLE") + set(_state "doctitle") + elseif (${arg} STREQUAL "WINDOWTITLE") + set(_state "windowtitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + set(_javadoc_packages ${arg}) + set(_state "packages") + endif () + elseif (${_state} STREQUAL "packages") + if (${arg} STREQUAL "FILES") + set(_state "files") + elseif (${arg} STREQUAL "SOURCEPATH") + set(_state "sourcepath") + elseif (${arg} STREQUAL "CLASSPATH") + set(_state "classpath") + elseif (${arg} STREQUAL "INSTALLPATH") + set(_state "installpath") + elseif (${arg} STREQUAL "DOCTITLE") + set(_state "doctitle") + elseif (${arg} STREQUAL "WINDOWTITLE") + set(_state "windowtitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + list(APPEND _javadoc_packages ${arg}) + endif () + elseif (${_state} STREQUAL "files") + if (${arg} STREQUAL "PACKAGES") + set(_state "packages") + elseif (${arg} STREQUAL "SOURCEPATH") + set(_state "sourcepath") + elseif (${arg} STREQUAL "CLASSPATH") + set(_state "classpath") + elseif (${arg} STREQUAL "INSTALLPATH") + set(_state "installpath") + elseif (${arg} STREQUAL "DOCTITLE") + set(_state "doctitle") + elseif (${arg} STREQUAL "WINDOWTITLE") + set(_state "windowtitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + list(APPEND _javadoc_files ${arg}) + endif () + elseif (${_state} STREQUAL "sourcepath") + if (${arg} STREQUAL "PACKAGES") + set(_state "packages") + elseif (${arg} STREQUAL "FILES") + set(_state "files") + elseif (${arg} STREQUAL "CLASSPATH") + set(_state "classpath") + elseif (${arg} STREQUAL "INSTALLPATH") + set(_state "installpath") + elseif (${arg} STREQUAL "DOCTITLE") + set(_state "doctitle") + elseif (${arg} STREQUAL "WINDOWTITLE") + set(_state "windowtitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + list(APPEND _javadoc_sourcepath ${arg}) + endif () + elseif (${_state} STREQUAL "classpath") + if (${arg} STREQUAL "PACKAGES") + set(_state "packages") + elseif (${arg} STREQUAL "FILES") + set(_state "files") + elseif (${arg} STREQUAL "SOURCEPATH") + set(_state "sourcepath") + elseif (${arg} STREQUAL "INSTALLPATH") + set(_state "installpath") + elseif (${arg} STREQUAL "DOCTITLE") + set(_state "doctitle") + elseif (${arg} STREQUAL "WINDOWTITLE") + set(_state "windowtitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + list(APPEND _javadoc_classpath ${arg}) + endif () + elseif (${_state} STREQUAL "installpath") + if (${arg} STREQUAL "PACKAGES") + set(_state "packages") + elseif (${arg} STREQUAL "FILES") + set(_state "files") + elseif (${arg} STREQUAL "SOURCEPATH") + set(_state "sourcepath") + elseif (${arg} STREQUAL "DOCTITLE") + set(_state "doctitle") + elseif (${arg} STREQUAL "WINDOWTITLE") + set(_state "windowtitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + set(_javadoc_installpath ${arg}) + endif () + elseif (${_state} STREQUAL "doctitle") + if (${arg} STREQUAL "PACKAGES") + set(_state "packages") + elseif (${arg} STREQUAL "FILES") + set(_state "files") + elseif (${arg} STREQUAL "SOURCEPATH") + set(_state "sourcepath") + elseif (${arg} STREQUAL "INSTALLPATH") + set(_state "installpath") + elseif (${arg} STREQUAL "CLASSPATH") + set(_state "classpath") + elseif (${arg} STREQUAL "WINDOWTITLE") + set(_state "windowtitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + set(_javadoc_doctitle ${arg}) + endif () + elseif (${_state} STREQUAL "windowtitle") + if (${arg} STREQUAL "PACKAGES") + set(_state "packages") + elseif (${arg} STREQUAL "FILES") + set(_state "files") + elseif (${arg} STREQUAL "SOURCEPATH") + set(_state "sourcepath") + elseif (${arg} STREQUAL "CLASSPATH") + set(_state "classpath") + elseif (${arg} STREQUAL "INSTALLPATH") + set(_state "installpath") + elseif (${arg} STREQUAL "DOCTITLE") + set(_state "doctitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + set(_javadoc_windowtitle ${arg}) + endif () + elseif (${_state} STREQUAL "author") + if (${arg} STREQUAL "PACKAGES") + set(_state "packages") + elseif (${arg} STREQUAL "FILES") + set(_state "files") + elseif (${arg} STREQUAL "SOURCEPATH") + set(_state "sourcepath") + elseif (${arg} STREQUAL "CLASSPATH") + set(_state "classpath") + elseif (${arg} STREQUAL "INSTALLPATH") + set(_state "installpath") + elseif (${arg} STREQUAL "DOCTITLE") + set(_state "doctitle") + elseif (${arg} STREQUAL "WINDOWTITLE") + set(_state "windowtitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + set(_javadoc_author ${arg}) + endif () + elseif (${_state} STREQUAL "use") + if (${arg} STREQUAL "PACKAGES") + set(_state "packages") + elseif (${arg} STREQUAL "FILES") + set(_state "files") + elseif (${arg} STREQUAL "SOURCEPATH") + set(_state "sourcepath") + elseif (${arg} STREQUAL "CLASSPATH") + set(_state "classpath") + elseif (${arg} STREQUAL "INSTALLPATH") + set(_state "installpath") + elseif (${arg} STREQUAL "DOCTITLE") + set(_state "doctitle") + elseif (${arg} STREQUAL "WINDOWTITLE") + set(_state "windowtitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + set(_javadoc_use ${arg}) + endif () + elseif (${_state} STREQUAL "version") + if (${arg} STREQUAL "PACKAGES") + set(_state "packages") + elseif (${arg} STREQUAL "FILES") + set(_state "files") + elseif (${arg} STREQUAL "SOURCEPATH") + set(_state "sourcepath") + elseif (${arg} STREQUAL "CLASSPATH") + set(_state "classpath") + elseif (${arg} STREQUAL "INSTALLPATH") + set(_state "installpath") + elseif (${arg} STREQUAL "DOCTITLE") + set(_state "doctitle") + elseif (${arg} STREQUAL "WINDOWTITLE") + set(_state "windowtitle") + elseif (${arg} STREQUAL "AUTHOR") + set(_state "author") + elseif (${arg} STREQUAL "USE") + set(_state "use") + elseif (${arg} STREQUAL "VERSION") + set(_state "version") + else () + set(_javadoc_version ${arg}) + endif () + endif (${_state} STREQUAL "package") + endforeach (arg ${ARGN}) + + set(_javadoc_builddir ${CMAKE_CURRENT_BINARY_DIR}/javadoc/${_target}) + set(_javadoc_options -d ${_javadoc_builddir}) + + if (_javadoc_sourcepath) + set(_start TRUE) + foreach(_path ${_javadoc_sourcepath}) + if (_start) + set(_sourcepath ${_path}) + set(_start FALSE) + else (_start) + set(_sourcepath ${_sourcepath}:${_path}) + endif (_start) + endforeach(_path ${_javadoc_sourcepath}) + set(_javadoc_options ${_javadoc_options} -sourcepath ${_sourcepath}) + endif (_javadoc_sourcepath) + + if (_javadoc_classpath) + set(_start TRUE) + foreach(_path ${_javadoc_classpath}) + if (_start) + set(_classpath ${_path}) + set(_start FALSE) + else (_start) + set(_classpath ${_classpath}:${_path}) + endif (_start) + endforeach(_path ${_javadoc_classpath}) + set(_javadoc_options ${_javadoc_options} -classpath "${_classpath}") + endif (_javadoc_classpath) + + if (_javadoc_doctitle) + set(_javadoc_options ${_javadoc_options} -doctitle '${_javadoc_doctitle}') + endif (_javadoc_doctitle) + + if (_javadoc_windowtitle) + set(_javadoc_options ${_javadoc_options} -windowtitle '${_javadoc_windowtitle}') + endif (_javadoc_windowtitle) + + if (_javadoc_author) + set(_javadoc_options ${_javadoc_options} -author) + endif (_javadoc_author) + + if (_javadoc_use) + set(_javadoc_options ${_javadoc_options} -use) + endif (_javadoc_use) + + if (_javadoc_version) + set(_javadoc_options ${_javadoc_options} -version) + endif (_javadoc_version) + + add_custom_target(${_target}_javadoc ALL + COMMAND ${Java_JAVADOC_EXECUTABLE} ${_javadoc_options} + ${_javadoc_files} + ${_javadoc_packages} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) + + install( + DIRECTORY ${_javadoc_builddir} + DESTINATION ${_javadoc_installpath} + ) +endfunction(create_javadoc) diff --git a/Modules/UseJavaClassFilelist.cmake b/Modules/UseJavaClassFilelist.cmake new file mode 100644 index 0000000..c842bf7 --- /dev/null +++ b/Modules/UseJavaClassFilelist.cmake @@ -0,0 +1,52 @@ +# +# This script create a list of compiled Java class files to be added to a +# jar file. This avoids including cmake files which get created in the +# binary directory. +# + +#============================================================================= +# Copyright 2010-2011 Andreas schneider +# +# 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.) + +if (CMAKE_JAVA_CLASS_OUTPUT_PATH) + if (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}") + + set(_JAVA_GLOBBED_FILES) + if (CMAKE_JAR_CLASSES_PREFIX) + foreach(JAR_CLASS_PREFIX ${CMAKE_JAR_CLASSES_PREFIX}) + message(STATUS "JAR_CLASS_PREFIX: ${JAR_CLASS_PREFIX}") + + file(GLOB_RECURSE _JAVA_GLOBBED_TMP_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${JAR_CLASS_PREFIX}/*.class") + if (_JAVA_GLOBBED_TMP_FILES) + list(APPEND _JAVA_GLOBBED_FILES ${_JAVA_GLOBBED_TMP_FILES}) + endif (_JAVA_GLOBBED_TMP_FILES) + endforeach(JAR_CLASS_PREFIX ${CMAKE_JAR_CLASSES_PREFIX}) + else() + file(GLOB_RECURSE _JAVA_GLOBBED_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/*.class") + endif (CMAKE_JAR_CLASSES_PREFIX) + + set(_JAVA_CLASS_FILES) + # file(GLOB_RECURSE foo RELATIVE) is broken so we need this. + foreach(_JAVA_GLOBBED_FILE ${_JAVA_GLOBBED_FILES}) + file(RELATIVE_PATH _JAVA_CLASS_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ${_JAVA_GLOBBED_FILE}) + set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES}${_JAVA_CLASS_FILE}\n) + endforeach(_JAVA_GLOBBED_FILE ${_JAVA_GLOBBED_FILES}) + + # write to file + file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist ${_JAVA_CLASS_FILES}) + + else (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}") + message(SEND_ERROR "FATAL: Java class output path doesn't exist") + endif (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}") +else (CMAKE_JAVA_CLASS_OUTPUT_PATH) + message(SEND_ERROR "FATAL: Can't find CMAKE_JAVA_CLASS_OUTPUT_PATH") +endif (CMAKE_JAVA_CLASS_OUTPUT_PATH) diff --git a/Modules/UseJavaSymlinks.cmake b/Modules/UseJavaSymlinks.cmake new file mode 100644 index 0000000..c66ee1e --- /dev/null +++ b/Modules/UseJavaSymlinks.cmake @@ -0,0 +1,32 @@ +# +# Helper script for UseJava.cmake +# + +#============================================================================= +# Copyright 2010-2011 Andreas schneider +# +# 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.) + +if (UNIX AND _JAVA_TARGET_OUTPUT_LINK) + if (_JAVA_TARGET_OUTPUT_NAME) + find_program(LN_EXECUTABLE + NAMES + ln + ) + + execute_process( + COMMAND ${LN_EXECUTABLE} -sf "${_JAVA_TARGET_OUTPUT_NAME}" "${_JAVA_TARGET_OUTPUT_LINK}" + WORKING_DIRECTORY ${_JAVA_TARGET_DIR} + ) + else (_JAVA_TARGET_OUTPUT_NAME) + message(SEND_ERROR "FATAL: Can't find _JAVA_TARGET_OUTPUT_NAME") + endif (_JAVA_TARGET_OUTPUT_NAME) +endif (UNIX AND _JAVA_TARGET_OUTPUT_LINK) diff --git a/Modules/UsePkgConfig.cmake b/Modules/UsePkgConfig.cmake new file mode 100644 index 0000000..7f4318f --- /dev/null +++ b/Modules/UsePkgConfig.cmake @@ -0,0 +1,78 @@ +# - Obsolete pkg-config module for CMake, use FindPkgConfig instead. +# +# This module defines the following macro: +# +# PKGCONFIG(package includedir libdir linkflags cflags) +# +# Calling PKGCONFIG will fill the desired information into the 4 given arguments, +# e.g. PKGCONFIG(libart-2.0 LIBART_INCLUDE_DIR LIBART_LINK_DIR LIBART_LINK_FLAGS LIBART_CFLAGS) +# if pkg-config was NOT found or the specified software package doesn't exist, the +# variable will be empty when the function returns, otherwise they will contain +# the respective information +# + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +FIND_PROGRAM(PKGCONFIG_EXECUTABLE NAMES pkg-config ) + +MACRO(PKGCONFIG _package _include_DIR _link_DIR _link_FLAGS _cflags) + MESSAGE(STATUS + "WARNING: you are using the obsolete 'PKGCONFIG' macro, use FindPkgConfig") +# reset the variables at the beginning + SET(${_include_DIR}) + SET(${_link_DIR}) + SET(${_link_FLAGS}) + SET(${_cflags}) + + # if pkg-config has been found + IF(PKGCONFIG_EXECUTABLE) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --exists RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull ) + + # and if the package of interest also exists for pkg-config, then get the information + IF(NOT _return_VALUE) + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --variable=includedir + OUTPUT_VARIABLE ${_include_DIR} ) + STRING(REGEX REPLACE "[\r\n]" " " ${_include_DIR} "${${_include_DIR}}") + + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --variable=libdir + OUTPUT_VARIABLE ${_link_DIR} ) + STRING(REGEX REPLACE "[\r\n]" " " ${_link_DIR} "${${_link_DIR}}") + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --libs + OUTPUT_VARIABLE ${_link_FLAGS} ) + STRING(REGEX REPLACE "[\r\n]" " " ${_link_FLAGS} "${${_link_FLAGS}}") + + EXEC_PROGRAM(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --cflags + OUTPUT_VARIABLE ${_cflags} ) + STRING(REGEX REPLACE "[\r\n]" " " ${_cflags} "${${_cflags}}") + + ELSE( NOT _return_VALUE) + + MESSAGE(STATUS "PKGCONFIG() indicates that ${_package} is not installed (install the package which contains ${_package}.pc if you want to support this feature)") + + ENDIF(NOT _return_VALUE) + + # if pkg-config has NOT been found, INFORM the user + ELSE(PKGCONFIG_EXECUTABLE) + + MESSAGE(STATUS "WARNING: PKGCONFIG() indicates that the tool pkg-config has not been found on your system. You should install it.") + + ENDIF(PKGCONFIG_EXECUTABLE) + +ENDMACRO(PKGCONFIG _include_DIR _link_DIR _link_FLAGS _cflags) + +MARK_AS_ADVANCED(PKGCONFIG_EXECUTABLE) diff --git a/Modules/UseQt4.cmake b/Modules/UseQt4.cmake new file mode 100644 index 0000000..027504f --- /dev/null +++ b/Modules/UseQt4.cmake @@ -0,0 +1,108 @@ +# - Use Module for QT4 +# Sets up C and C++ to use Qt 4. It is assumed that FindQt.cmake +# has already been loaded. See FindQt.cmake for information on +# how to load Qt 4 into your CMake project. + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +ADD_DEFINITIONS(${QT_DEFINITIONS}) +SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG QT_DEBUG) +SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE QT_NO_DEBUG) +SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO QT_NO_DEBUG) +SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL QT_NO_DEBUG) +IF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) + SET_PROPERTY(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS QT_NO_DEBUG) +ENDIF() + +INCLUDE_DIRECTORIES(${QT_INCLUDE_DIR}) + +SET(QT_LIBRARIES "") +SET(QT_LIBRARIES_PLUGINS "") + +IF (QT_USE_QTMAIN) + IF (Q_WS_WIN) + SET(QT_LIBRARIES ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY}) + ENDIF (Q_WS_WIN) +ENDIF (QT_USE_QTMAIN) + +IF(QT_DONT_USE_QTGUI) + SET(QT_USE_QTGUI 0) +ELSE(QT_DONT_USE_QTGUI) + SET(QT_USE_QTGUI 1) +ENDIF(QT_DONT_USE_QTGUI) + +IF(QT_DONT_USE_QTCORE) + SET(QT_USE_QTCORE 0) +ELSE(QT_DONT_USE_QTCORE) + SET(QT_USE_QTCORE 1) +ENDIF(QT_DONT_USE_QTCORE) + +IF (QT_USE_QT3SUPPORT) + ADD_DEFINITIONS(-DQT3_SUPPORT) +ENDIF (QT_USE_QT3SUPPORT) + +# list dependent modules, so dependent libraries are added +SET(QT_QT3SUPPORT_MODULE_DEPENDS QTGUI QTSQL QTXML QTNETWORK QTCORE) +SET(QT_QTSVG_MODULE_DEPENDS QTGUI QTXML QTCORE) +SET(QT_QTUITOOLS_MODULE_DEPENDS QTGUI QTXML QTCORE) +SET(QT_QTHELP_MODULE_DEPENDS QTGUI QTSQL QTXML QTNETWORK QTCORE) +IF(QT_QTDBUS_FOUND) + SET(QT_PHONON_MODULE_DEPENDS QTGUI QTDBUS QTCORE) +ELSE(QT_QTDBUS_FOUND) + SET(QT_PHONON_MODULE_DEPENDS QTGUI QTCORE) +ENDIF(QT_QTDBUS_FOUND) +SET(QT_QTDBUS_MODULE_DEPENDS QTXML QTCORE) +SET(QT_QTXMLPATTERNS_MODULE_DEPENDS QTNETWORK QTCORE) +SET(QT_QAXCONTAINER_MODULE_DEPENDS QTGUI QTCORE) +SET(QT_QAXSERVER_MODULE_DEPENDS QTGUI QTCORE) +SET(QT_QTSCRIPTTOOLS_MODULE_DEPENDS QTGUI QTCORE) +SET(QT_QTWEBKIT_MODULE_DEPENDS QTXMLPATTERNS QTGUI QTCORE) +SET(QT_QTDECLARATIVE_MODULE_DEPENDS QTSCRIPT QTSVG QTSQL QTXMLPATTERNS QTGUI QTCORE) +SET(QT_QTMULTIMEDIA_MODULE_DEPENDS QTGUI QTCORE) +SET(QT_QTOPENGL_MODULE_DEPENDS QTGUI QTCORE) +SET(QT_QTSCRIPT_MODULE_DEPENDS QTCORE) +SET(QT_QTGUI_MODULE_DEPENDS QTCORE) +SET(QT_QTTEST_MODULE_DEPENDS QTCORE) +SET(QT_QTXML_MODULE_DEPENDS QTCORE) +SET(QT_QTSQL_MODULE_DEPENDS QTCORE) +SET(QT_QTNETWORK_MODULE_DEPENDS QTCORE) + +# Qt modules (in order of dependence) +FOREACH(module QT3SUPPORT QTOPENGL QTASSISTANT QTDESIGNER QTMOTIF QTNSPLUGIN + QAXSERVER QAXCONTAINER QTDECLARATIVE QTSCRIPT QTSVG QTUITOOLS QTHELP + QTWEBKIT PHONON QTSCRIPTTOOLS QTMULTIMEDIA QTXMLPATTERNS QTGUI QTTEST + QTDBUS QTXML QTSQL QTNETWORK QTCORE) + + IF (QT_USE_${module} OR QT_USE_${module}_DEPENDS) + IF (QT_${module}_FOUND) + IF(QT_USE_${module}) + STRING(REPLACE "QT" "" qt_module_def "${module}") + ADD_DEFINITIONS(-DQT_${qt_module_def}_LIB) + INCLUDE_DIRECTORIES(${QT_${module}_INCLUDE_DIR}) + ENDIF(QT_USE_${module}) + SET(QT_LIBRARIES ${QT_LIBRARIES} ${QT_${module}_LIBRARY}) + SET(QT_LIBRARIES_PLUGINS ${QT_LIBRARIES_PLUGINS} ${QT_${module}_PLUGINS}) + IF(QT_IS_STATIC) + SET(QT_LIBRARIES ${QT_LIBRARIES} ${QT_${module}_LIB_DEPENDENCIES}) + ENDIF(QT_IS_STATIC) + FOREACH(depend_module ${QT_${module}_MODULE_DEPENDS}) + SET(QT_USE_${depend_module}_DEPENDS 1) + ENDFOREACH(depend_module ${QT_${module}_MODULE_DEPENDS}) + ELSE (QT_${module}_FOUND) + MESSAGE("Qt ${module} library not found.") + ENDIF (QT_${module}_FOUND) + ENDIF (QT_USE_${module} OR QT_USE_${module}_DEPENDS) + +ENDFOREACH(module) + diff --git a/Modules/UseSWIG.cmake b/Modules/UseSWIG.cmake new file mode 100644 index 0000000..ef76724 --- /dev/null +++ b/Modules/UseSWIG.cmake @@ -0,0 +1,253 @@ +# - SWIG module for CMake +# Defines the following macros: +# SWIG_ADD_MODULE(name language [ files ]) +# - Define swig module with given name and specified language +# SWIG_LINK_LIBRARIES(name [ libraries ]) +# - Link libraries to swig module +# All other macros are for internal use only. +# To get the actual name of the swig module, +# use: ${SWIG_MODULE_${name}_REAL_NAME}. +# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify +# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add +# special flags to all swig calls. +# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify +# where to write all the swig generated module (swig -outdir option) +# The name-specific variable SWIG_MODULE__EXTRA_DEPS may be used +# to specify extra dependencies for the generated modules. +# If the source file generated by swig need some special flag you can use +# SET_SOURCE_FILES_PROPERTIES( ${swig_generated_file_fullname} +# PROPERTIES COMPILE_FLAGS "-bla") + + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# Copyright 2009 Mathieu Malaterre +# +# 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.) + +SET(SWIG_CXX_EXTENSION "cxx") +SET(SWIG_EXTRA_LIBRARIES "") + +SET(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py") + +# +# For given swig module initialize variables associated with it +# +MACRO(SWIG_MODULE_INITIALIZE name language) + STRING(TOUPPER "${language}" swig_uppercase_language) + STRING(TOLOWER "${language}" swig_lowercase_language) + SET(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}") + SET(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}") + + SET(SWIG_MODULE_${name}_REAL_NAME "${name}") + 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}") + ELSEIF("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL") + SET(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow") + ENDIF() +ENDMACRO(SWIG_MODULE_INITIALIZE) + +# +# For a given language, input file, and output file, determine extra files that +# will be generated. This is internal swig macro. +# + +MACRO(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile) + SET(${outfiles} "") + GET_SOURCE_FILE_PROPERTY(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename + ${infile} SWIG_MODULE_NAME) + IF(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND") + GET_FILENAME_COMPONENT(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE) + ENDIF(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND") + FOREACH(it ${SWIG_${language}_EXTRA_FILE_EXTENSION}) + SET(${outfiles} ${${outfiles}} + "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}") + ENDFOREACH(it) +ENDMACRO(SWIG_GET_EXTRA_OUTPUT_FILES) + +# +# Take swig (*.i) file and add proper custom commands for it +# +MACRO(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile) + SET(swig_full_infile ${infile}) + GET_FILENAME_COMPONENT(swig_source_file_path "${infile}" PATH) + GET_FILENAME_COMPONENT(swig_source_file_name_we "${infile}" NAME_WE) + GET_SOURCE_FILE_PROPERTY(swig_source_file_generated ${infile} GENERATED) + GET_SOURCE_FILE_PROPERTY(swig_source_file_cplusplus ${infile} CPLUSPLUS) + GET_SOURCE_FILE_PROPERTY(swig_source_file_flags ${infile} SWIG_FLAGS) + IF("${swig_source_file_flags}" STREQUAL "NOTFOUND") + SET(swig_source_file_flags "") + ENDIF("${swig_source_file_flags}" STREQUAL "NOTFOUND") + SET(swig_source_file_fullname "${infile}") + IF(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}") + STRING(REGEX REPLACE + "^${CMAKE_CURRENT_SOURCE_DIR}" "" + swig_source_file_relative_path + "${swig_source_file_path}") + ELSE(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}") + IF(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}") + STRING(REGEX REPLACE + "^${CMAKE_CURRENT_BINARY_DIR}" "" + swig_source_file_relative_path + "${swig_source_file_path}") + SET(swig_source_file_generated 1) + ELSE(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}") + SET(swig_source_file_relative_path "${swig_source_file_path}") + IF(swig_source_file_generated) + SET(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}") + ELSE(swig_source_file_generated) + SET(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}") + ENDIF(swig_source_file_generated) + ENDIF(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}") + ENDIF(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}") + + SET(swig_generated_file_fullname + "${CMAKE_CURRENT_BINARY_DIR}") + IF(swig_source_file_relative_path) + SET(swig_generated_file_fullname + "${swig_generated_file_fullname}/${swig_source_file_relative_path}") + ENDIF(swig_source_file_relative_path) + # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir + IF(CMAKE_SWIG_OUTDIR) + SET(swig_outdir ${CMAKE_SWIG_OUTDIR}) + ELSE(CMAKE_SWIG_OUTDIR) + SET(swig_outdir ${CMAKE_CURRENT_BINARY_DIR}) + ENDIF(CMAKE_SWIG_OUTDIR) + SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE} + swig_extra_generated_files + "${swig_outdir}" + "${infile}") + SET(swig_generated_file_fullname + "${swig_generated_file_fullname}/${swig_source_file_name_we}") + # add the language into the name of the file (i.e. TCL_wrap) + # this allows for the same .i file to be wrapped into different languages + SET(swig_generated_file_fullname + "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap") + + IF(swig_source_file_cplusplus) + SET(swig_generated_file_fullname + "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}") + ELSE(swig_source_file_cplusplus) + SET(swig_generated_file_fullname + "${swig_generated_file_fullname}.c") + ENDIF(swig_source_file_cplusplus) + + #MESSAGE("Full path to source file: ${swig_source_file_fullname}") + #MESSAGE("Full path to the output file: ${swig_generated_file_fullname}") + GET_DIRECTORY_PROPERTY(cmake_include_directories INCLUDE_DIRECTORIES) + SET(swig_include_dirs) + FOREACH(it ${cmake_include_directories}) + SET(swig_include_dirs ${swig_include_dirs} "-I${it}") + ENDFOREACH(it) + + SET(swig_special_flags) + # default is c, so add c++ flag if it is c++ + IF(swig_source_file_cplusplus) + SET(swig_special_flags ${swig_special_flags} "-c++") + ENDIF(swig_source_file_cplusplus) + SET(swig_extra_flags) + IF(SWIG_MODULE_${name}_EXTRA_FLAGS) + SET(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS}) + ENDIF(SWIG_MODULE_${name}_EXTRA_FLAGS) + ADD_CUSTOM_COMMAND( + OUTPUT "${swig_generated_file_fullname}" ${swig_extra_generated_files} + # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir) + COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir} + COMMAND "${SWIG_EXECUTABLE}" + ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}" + ${swig_source_file_flags} + ${CMAKE_SWIG_FLAGS} + -outdir ${swig_outdir} + ${swig_special_flags} + ${swig_extra_flags} + ${swig_include_dirs} + -o "${swig_generated_file_fullname}" + "${swig_source_file_fullname}" + MAIN_DEPENDENCY "${swig_source_file_fullname}" + DEPENDS ${SWIG_MODULE_${name}_EXTRA_DEPS} + COMMENT "Swig source") + SET_SOURCE_FILES_PROPERTIES("${swig_generated_file_fullname}" ${swig_extra_generated_files} + PROPERTIES GENERATED 1) + SET(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files}) +ENDMACRO(SWIG_ADD_SOURCE_TO_MODULE) + +# +# Create Swig module +# +MACRO(SWIG_ADD_MODULE name language) + SWIG_MODULE_INITIALIZE(${name} ${language}) + SET(swig_dot_i_sources) + SET(swig_other_sources) + FOREACH(it ${ARGN}) + IF(${it} MATCHES ".*\\.i$") + SET(swig_dot_i_sources ${swig_dot_i_sources} "${it}") + ELSE(${it} MATCHES ".*\\.i$") + SET(swig_other_sources ${swig_other_sources} "${it}") + ENDIF(${it} MATCHES ".*\\.i$") + ENDFOREACH(it) + + SET(swig_generated_sources) + FOREACH(it ${swig_dot_i_sources}) + SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it}) + SET(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}") + ENDFOREACH(it) + GET_DIRECTORY_PROPERTY(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES) + SET_DIRECTORY_PROPERTIES(PROPERTIES + ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}") + ADD_LIBRARY(${SWIG_MODULE_${name}_REAL_NAME} + MODULE + ${swig_generated_sources} + ${swig_other_sources}) + STRING(TOLOWER "${language}" swig_lowercase_language) + IF ("${swig_lowercase_language}" STREQUAL "java") + IF (APPLE) + # In java you want: + # System.loadLibrary("LIBRARY"); + # then JNI will look for a library whose name is platform dependent, namely + # MacOS : libLIBRARY.jnilib + # Windows: LIBRARY.dll + # Linux : libLIBRARY.so + SET_TARGET_PROPERTIES (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib") + ENDIF (APPLE) + ENDIF ("${swig_lowercase_language}" STREQUAL "java") + IF ("${swig_lowercase_language}" STREQUAL "python") + # this is only needed for the python case where a _modulename.so is generated + SET_TARGET_PROPERTIES(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "") + # Python extension modules on Windows must have the extension ".pyd" + # instead of ".dll" as of Python 2.5. Older python versions do support + # this suffix. + # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000 + # + # Windows: .dll is no longer supported as a filename extension for extension modules. + # .pyd is now the only filename extension that will be searched for. + # + IF(WIN32 AND NOT CYGWIN) + SET_TARGET_PROPERTIES(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd") + ENDIF(WIN32 AND NOT CYGWIN) + ENDIF ("${swig_lowercase_language}" STREQUAL "python") +ENDMACRO(SWIG_ADD_MODULE) + +# +# Like TARGET_LINK_LIBRARIES but for swig modules +# +MACRO(SWIG_LINK_LIBRARIES name) + IF(SWIG_MODULE_${name}_REAL_NAME) + TARGET_LINK_LIBRARIES(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN}) + ELSE(SWIG_MODULE_${name}_REAL_NAME) + MESSAGE(SEND_ERROR "Cannot find Swig library \"${name}\".") + ENDIF(SWIG_MODULE_${name}_REAL_NAME) +ENDMACRO(SWIG_LINK_LIBRARIES name) + diff --git a/Modules/UseVTK40.cmake b/Modules/UseVTK40.cmake new file mode 100644 index 0000000..c1157d6 --- /dev/null +++ b/Modules/UseVTK40.cmake @@ -0,0 +1,29 @@ +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This is an implementation detail for using VTK 4.0 with the +# FindVTK.cmake module. Do not include directly by name. This should +# be included only when FindVTK.cmake sets the VTK_USE_FILE variable +# to point here. + +# Add compiler flags needed to use VTK. +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VTK_REQUIRED_C_FLAGS}") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${VTK_REQUIRED_CXX_FLAGS}") + +# Add include directories needed to use VTK. +INCLUDE_DIRECTORIES(${VTK_INCLUDE_DIRS}) + +# Add link directories needed to use VTK. +LINK_DIRECTORIES(${VTK_LIBRARY_DIRS}) diff --git a/Modules/UseVTKBuildSettings40.cmake b/Modules/UseVTKBuildSettings40.cmake new file mode 100644 index 0000000..4df59b9 --- /dev/null +++ b/Modules/UseVTKBuildSettings40.cmake @@ -0,0 +1,38 @@ +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# Implementation detail for FindVTK.cmake to let it provide a +# VTK_BUILD_SETTINGS_FILE for VTK 4.0. + +SET(CMAKE_BUILD_SETTING_CMAKE_MAJOR_VERSION "${VTK40_CMAKE_MAJOR_VERSION}") +SET(CMAKE_BUILD_SETTING_CMAKE_MINOR_VERSION "${VTK40_CMAKE_MINOR_VERSION}") +SET(CMAKE_BUILD_SETTING_PROJECT_NAME "VTK") + +SET(CMAKE_BUILD_SETTING_C_COMPILER "${VTK40_CMAKE_C_COMPILER}") +SET(CMAKE_BUILD_SETTING_C_FLAGS "${VTK40_CMAKE_C_FLAGS}") +SET(CMAKE_BUILD_SETTING_C_FLAGS_DEBUG "${VTK40_CMAKE_C_FLAGS_DEBUG}") +SET(CMAKE_BUILD_SETTING_C_FLAGS_RELEASE "${VTK40_CMAKE_C_FLAGS_RELEASE}") +SET(CMAKE_BUILD_SETTING_C_FLAGS_MINSIZEREL "${VTK40_CMAKE_C_FLAGS_MINSIZEREL}") +SET(CMAKE_BUILD_SETTING_C_FLAGS_RELWITHDEBINFO "${VTK40_CMAKE_C_FLAGS_RELWITHDEBINFO}") + +SET(CMAKE_BUILD_SETTING_CXX_COMPILER "${VTK40_CMAKE_CXX_COMPILER}") +SET(CMAKE_BUILD_SETTING_CXX_FLAGS "${VTK40_CMAKE_CXX_FLAGS}") +SET(CMAKE_BUILD_SETTING_CXX_FLAGS_DEBUG "${VTK40_CMAKE_CXX_FLAGS_DEBUG}") +SET(CMAKE_BUILD_SETTING_CXX_FLAGS_RELEASE "${VTK40_CMAKE_CXX_FLAGS_RELEASE}") +SET(CMAKE_BUILD_SETTING_CXX_FLAGS_MINSIZEREL "${VTK40_CMAKE_CXX_FLAGS_MINSIZEREL}") +SET(CMAKE_BUILD_SETTING_CXX_FLAGS_RELWITHDEBINFO "${VTK40_CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + +SET(CMAKE_BUILD_SETTING_BUILD_TYPE "${VTK40_CMAKE_BUILD_TYPE}") +SET(CMAKE_BUILD_SETTING_BUILD_TOOL "${VTK40_CMAKE_BUILD_TOOL}") diff --git a/Modules/UseVTKConfig40.cmake b/Modules/UseVTKConfig40.cmake new file mode 100644 index 0000000..ca5e7aa --- /dev/null +++ b/Modules/UseVTKConfig40.cmake @@ -0,0 +1,409 @@ +# + +#============================================================================= +# Copyright 2002-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This is an implementation detail for using VTK 4.0 with the +# FindVTK.cmake module. Do not include directly. + +# Hard-code the version number since it isn't provided by VTK 4.0. +SET(VTK_MAJOR_VERSION 4) +SET(VTK_MINOR_VERSION 0) +SET(VTK_BUILD_VERSION 2) + +# Provide a new UseVTK file that doesn't do a full LOAD_CACHE. +SET(VTK_USE_FILE ${CMAKE_ROOT}/Modules/UseVTK40.cmake) + +# Provide a build settings file. +SET(VTK_BUILD_SETTINGS_FILE ${CMAKE_ROOT}/Modules/UseVTKBuildSettings40.cmake) + +# There are no CMake extensions for VTK 4.0. +SET(VTK_CMAKE_EXTENSIONS_DIR "") + +# grep "VTK40_" UseVTKConfig40.cmake |sed 's/.*VTK40_\([A-Za-z0-9_]*\).*/ \1/' +LOAD_CACHE(${VTK_DIR} READ_WITH_PREFIX VTK40_ + BUILD_SHARED_LIBS + CMAKE_BUILD_TOOL + CMAKE_BUILD_TYPE + CMAKE_CACHE_MAJOR_VERSION + CMAKE_CACHE_MINOR_VERSION + CMAKE_CXX_COMPILER + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_MINSIZEREL + CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_RELWITHDEBINFO + CMAKE_C_COMPILER + CMAKE_C_FLAGS + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_MINSIZEREL + CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_INSTALL_PREFIX + CMAKE_Xutil_INCLUDE_PATH + EXECUTABLE_OUTPUT_PATH + JAVA_INCLUDE_PATH2 + LIBRARY_OUTPUT_PATH + MPIRUN + MPI_INCLUDE_PATH + MPI_POSTFLAGS + MPI_PREFLAGS + OPENGL_INCLUDE_DIR + OSMESA_INCLUDE_PATH + PYTHON_INCLUDE_PATH + TCL_INCLUDE_PATH + VLI_INCLUDE_PATH_FOR_VG500 + VLI_INCLUDE_PATH_FOR_VP1000 + VTK_BINARY_DIR + VTK_DEBUG_LEAKS + VTK_HAVE_VG500 + VTK_HAVE_VP1000 + VTK_MANGLE_MESA + VTK_OPENGL_HAS_OSMESA + VTK_PARSE_JAVA_EXE + VTK_SOURCE_DIR + VTK_USE_64BIT_IDS + VTK_USE_ANSI_STDLIB + VTK_USE_HYBRID + VTK_USE_MATROX_IMAGING + VTK_USE_MPI + VTK_USE_PARALLEL + VTK_USE_PATENTED + VTK_USE_RENDERING + VTK_USE_VIDEO_FOR_WINDOWS + VTK_USE_VOLUMEPRO + VTK_USE_X + VTK_WRAP_JAVA + VTK_WRAP_JAVA_EXE + VTK_WRAP_PYTHON + VTK_WRAP_PYTHON_EXE + VTK_WRAP_TCL + VTK_WRAP_TCL_EXE + vtkCommonJava_LIB_DEPENDS + vtkCommonPython_LIB_DEPENDS + vtkCommonTCL_LIB_DEPENDS + vtkCommon_LIB_DEPENDS + vtkFilteringJava_LIB_DEPENDS + vtkFilteringPython_LIB_DEPENDS + vtkFilteringTCL_LIB_DEPENDS + vtkFiltering_LIB_DEPENDS + vtkGraphicsJava_LIB_DEPENDS + vtkGraphicsPython_LIB_DEPENDS + vtkGraphicsTCL_LIB_DEPENDS + vtkGraphics_LIB_DEPENDS + vtkHybridJava_LIB_DEPENDS + vtkHybridPython_LIB_DEPENDS + vtkHybridTCL_LIB_DEPENDS + vtkHybrid_LIB_DEPENDS + vtkIOJava_LIB_DEPENDS + vtkIOPython_LIB_DEPENDS + vtkIOTCL_LIB_DEPENDS + vtkIO_LIB_DEPENDS + vtkImagingJava_LIB_DEPENDS + vtkImagingPython_LIB_DEPENDS + vtkImagingTCL_LIB_DEPENDS + vtkImaging_LIB_DEPENDS + vtkParallelJava_LIB_DEPENDS + vtkParallelPython_LIB_DEPENDS + vtkParallelTCL_LIB_DEPENDS + vtkParallel_LIB_DEPENDS + vtkPatentedJava_LIB_DEPENDS + vtkPatentedPython_LIB_DEPENDS + vtkPatentedTCL_LIB_DEPENDS + vtkPatented_LIB_DEPENDS + vtkRenderingJava_LIB_DEPENDS + vtkRenderingPythonTkWidgets_LIB_DEPENDS + vtkRenderingPython_LIB_DEPENDS + vtkRenderingTCL_LIB_DEPENDS + vtkRendering_LIB_DEPENDS + vtkjpeg_LIB_DEPENDS + vtkpng_LIB_DEPENDS + vtkzlib_LIB_DEPENDS +) + +# Copy needed settings from the VTK 4.0 cache. +SET(VTK_BUILD_SHARED ${VTK40_BUILD_SHARED_LIBS}) +SET(VTK_DEBUG_LEAKS ${VTK40_VTK_DEBUG_LEAKS}) +SET(VTK_HAVE_VG500 ${VTK40_VTK_HAVE_VG500}) +SET(VTK_HAVE_VP1000 ${VTK40_VTK_HAVE_VP1000}) +SET(VTK_USE_MANGLED_MESA ${VTK40_VTK_MANGLE_MESA}) +SET(VTK_MPIRUN_EXE ${VTK40_MPIRUN}) +SET(VTK_MPI_POSTFLAGS ${VTK40_MPI_POSTFLAGS}) +SET(VTK_MPI_PREFLAGS ${VTK40_MPI_PREFLAGS}) +SET(VTK_OPENGL_HAS_OSMESA ${VTK40_VTK_OPENGL_HAS_OSMESA}) +SET(VTK_USE_64BIT_IDS ${VTK40_VTK_USE_64BIT_IDS}) +SET(VTK_USE_ANSI_STDLIB ${VTK40_VTK_USE_ANSI_STDLIB}) +SET(VTK_USE_HYBRID ${VTK40_VTK_USE_HYBRID}) +SET(VTK_USE_MATROX_IMAGING ${VTK40_VTK_USE_MATROX_IMAGING}) +SET(VTK_USE_MPI ${VTK40_VTK_USE_MPI}) +SET(VTK_USE_PARALLEL ${VTK40_VTK_USE_PARALLEL}) +SET(VTK_USE_PATENTED ${VTK40_VTK_USE_PATENTED}) +SET(VTK_USE_RENDERING ${VTK40_VTK_USE_RENDERING}) +SET(VTK_USE_VIDEO_FOR_WINDOWS ${VTK40_VTK_USE_VIDEO_FOR_WINDOWS}) +SET(VTK_USE_VOLUMEPRO ${VTK40_VTK_USE_VOLUMEPRO}) +SET(VTK_USE_X ${VTK40_VTK_USE_X}) +SET(VTK_WRAP_JAVA ${VTK40_VTK_WRAP_JAVA}) +SET(VTK_WRAP_PYTHON ${VTK40_VTK_WRAP_PYTHON}) +SET(VTK_WRAP_TCL ${VTK40_VTK_WRAP_TCL}) + +# Create the list of available kits. +SET(VTK_KITS COMMON FILTERING GRAPHICS IMAGING IO) +IF(VTK_USE_RENDERING) + SET(VTK_KITS ${VTK_KITS} RENDERING) +ENDIF(VTK_USE_RENDERING) +IF(VTK_USE_HYBRID) + SET(VTK_KITS ${VTK_KITS} HYBRID) +ENDIF(VTK_USE_HYBRID) +IF(VTK_USE_PARALLEL) + SET(VTK_KITS ${VTK_KITS} PARALLEL) +ENDIF(VTK_USE_PARALLEL) +IF(VTK_USE_PATENTED) + SET(VTK_KITS ${VTK_KITS} PATENTED) +ENDIF(VTK_USE_PATENTED) + +# Create the list of available languages. +SET(VTK_LANGUAGES "") +IF(VTK_WRAP_TCL) + SET(VTK_LANGUAGES ${VTK_LANGUAGES} TCL) +ENDIF(VTK_WRAP_TCL) +IF(VTK_WRAP_PYTHON) + SET(VTK_LANGUAGES ${VTK_LANGUAGES} PYTHON) +ENDIF(VTK_WRAP_PYTHON) +IF(VTK_WRAP_JAVA) + SET(VTK_LANGUAGES ${VTK_LANGUAGES} JAVA) +ENDIF(VTK_WRAP_JAVA) + +# Include directories for other projects installed on the system and +# used by VTK. +SET(VTK_INCLUDE_DIRS_SYS "") +IF(VTK_USE_RENDERING) + SET(VTK_INCLUDE_DIRS_SYS ${VTK_INCLUDE_DIRS_SYS} + ${VTK40_OPENGL_INCLUDE_PATH} ${VTK40_OPENGL_INCLUDE_DIR}) + IF(VTK_USE_X) + SET(VTK_INCLUDE_DIRS_SYS ${VTK_INCLUDE_DIRS_SYS} + ${VTK40_CMAKE_Xlib_INCLUDE_PATH} ${VTK40_CMAKE_Xutil_INCLUDE_PATH}) + ENDIF(VTK_USE_X) +ENDIF(VTK_USE_RENDERING) + +IF(VTK_OPENGL_HAS_OSMESA) + SET(VTK_INCLUDE_DIRS_SYS ${VTK_INCLUDE_DIRS_SYS} + ${VTK40_OSMESA_INCLUDE_PATH}) +ENDIF(VTK_OPENGL_HAS_OSMESA) + +IF(VTK_USE_MPI) + SET(VTK_INCLUDE_DIRS_SYS ${VTK_INCLUDE_DIRS_SYS} ${VTK40_MPI_INCLUDE_PATH}) +ENDIF(VTK_USE_MPI) + +IF(VTK_WRAP_TCL) + SET(VTK_INCLUDE_DIRS_SYS ${VTK_INCLUDE_DIRS_SYS} ${VTK40_TCL_INCLUDE_PATH}) +ENDIF(VTK_WRAP_TCL) + +IF(VTK_WRAP_PYTHON) + SET(VTK_INCLUDE_DIRS_SYS ${VTK_INCLUDE_DIRS_SYS} ${VTK40_PYTHON_INCLUDE_PATH}) +ENDIF(VTK_WRAP_PYTHON) + +IF(VTK_WRAP_JAVA) + SET(VTK_INCLUDE_DIRS_SYS ${VTK_INCLUDE_DIRS_SYS} + ${VTK40_JAVA_INCLUDE_PATH} ${VTK40_JAVA_INCLUDE_PATH2}) +ENDIF(VTK_WRAP_JAVA) + +IF(VTK_HAVE_VG500) + SET(VTK_INCLUDE_DIRS_SYS ${VTK_INCLUDE_DIRS_SYS} + ${VTK40_VLI_INCLUDE_PATH_FOR_VG500}) +ENDIF(VTK_HAVE_VG500) + +IF(VTK_HAVE_VP1000) + SET(VTK_INCLUDE_DIRS_SYS ${VTK_INCLUDE_DIRS_SYS} + ${VTK40_VLI_INCLUDE_PATH_FOR_VP1000}) +ENDIF(VTK_HAVE_VP1000) + +# See if this is a build tree or install tree. +IF(EXISTS ${VTK_DIR}/Common) + # This is a VTK 4.0 build tree. + + SET(VTK_LIBRARY_DIRS ${VTK40_LIBRARY_OUTPUT_PATH}) + + # Determine the include directories needed. + SET(VTK_INCLUDE_DIRS ${VTK40_VTK_BINARY_DIR}) + IF(VTK_USE_PARALLEL) + SET(VTK_INCLUDE_DIRS ${VTK_INCLUDE_DIRS} ${VTK40_VTK_SOURCE_DIR}/Parallel) + ENDIF(VTK_USE_PARALLEL) + IF(VTK_USE_HYBRID) + SET(VTK_INCLUDE_DIRS ${VTK_INCLUDE_DIRS} ${VTK40_VTK_SOURCE_DIR}/Hybrid) + ENDIF(VTK_USE_HYBRID) + IF(VTK_USE_PATENTED) + SET(VTK_INCLUDE_DIRS ${VTK_INCLUDE_DIRS} ${VTK40_VTK_SOURCE_DIR}/Patented) + ENDIF(VTK_USE_PATENTED) + IF(VTK_USE_RENDERING) + SET(VTK_INCLUDE_DIRS ${VTK_INCLUDE_DIRS} ${VTK40_VTK_SOURCE_DIR}/Rendering) + ENDIF(VTK_USE_RENDERING) + + # These directories are always needed. + SET(VTK_INCLUDE_DIRS ${VTK_INCLUDE_DIRS} + ${VTK40_VTK_SOURCE_DIR}/IO + ${VTK40_VTK_SOURCE_DIR}/Imaging + ${VTK40_VTK_SOURCE_DIR}/Graphics + ${VTK40_VTK_SOURCE_DIR}/Filtering + ${VTK40_VTK_SOURCE_DIR}/Common) + + # Give access to a few utilities. + SET(VTK_INCLUDE_DIRS ${VTK_INCLUDE_DIRS} + ${VTK40_VTK_BINARY_DIR}/Utilities/png + ${VTK40_VTK_SOURCE_DIR}/Utilities/png + ${VTK40_VTK_BINARY_DIR}/Utilities/zlib + ${VTK40_VTK_SOURCE_DIR}/Utilities/zlib) + + # Executable locations. + IF(VTK_WRAP_TCL) + SET(VTK_TCL_EXE ${VTK40_EXECUTABLE_OUTPUT_PATH}/vtk) + SET(VTK_WRAP_TCL_EXE ${VTK40_VTK_WRAP_TCL_EXE}) + SET(VTK_TCL_HOME ${VTK40_VTK_SOURCE_DIR}/Wrapping/Tcl) + ENDIF(VTK_WRAP_TCL) + IF(VTK_WRAP_PYTHON) + SET(VTK_WRAP_PYTHON_EXE ${VTK40_VTK_WRAP_PYTHON_EXE}) + ENDIF(VTK_WRAP_PYTHON) + IF(VTK_WRAP_JAVA) + SET(VTK_PARSE_JAVA_EXE ${VTK40_VTK_PARSE_JAVA_EXE}) + SET(VTK_WRAP_JAVA_EXE ${VTK40_VTK_WRAP_JAVA_EXE}) + ENDIF(VTK_WRAP_JAVA) + +ELSE(EXISTS ${VTK_DIR}/Common) + # This is a VTK 4.0 install tree. + + SET(VTK_INCLUDE_DIRS ${VTK_DIR}) + SET(VTK_LIBRARY_DIRS ${VTK40_CMAKE_INSTALL_PREFIX}/lib/vtk) + + # Executable locations. + IF(VTK_WRAP_TCL) + SET(VTK_TCL_EXE ${VTK40_CMAKE_INSTALL_PREFIX}/bin/vtk) + SET(VTK_WRAP_TCL_EXE ${VTK40_CMAKE_INSTALL_PREFIX}/bin/vtkWrapTcl) + SET(VTK_TCL_HOME ${VTK40_CMAKE_INSTALL_PREFIX}/lib/vtk/tcl) + ENDIF(VTK_WRAP_TCL) + IF(VTK_WRAP_PYTHON) + SET(VTK_WRAP_PYTHON_EXE ${VTK40_CMAKE_INSTALL_PREFIX}/bin/vtkWrapPython) + ENDIF(VTK_WRAP_PYTHON) + IF(VTK_WRAP_JAVA) + SET(VTK_PARSE_JAVA_EXE ${VTK40_CMAKE_INSTALL_PREFIX}/bin/vtkParseJava) + SET(VTK_WRAP_JAVA_EXE ${VTK40_CMAKE_INSTALL_PREFIX}/bin/vtkWrapJava) + ENDIF(VTK_WRAP_JAVA) +ENDIF(EXISTS ${VTK_DIR}/Common) + +# Add the system include directories last. +SET(VTK_INCLUDE_DIRS ${VTK_INCLUDE_DIRS} ${VTK_INCLUDE_DIRS_SYS}) + +# Find the required C and C++ compiler flags. +IF(CMAKE_COMPILER_IS_GNUCXX) + IF(WIN32) + # The platform is gcc on cygwin. + SET(VTK_REQUIRED_CXX_FLAGS "${VTK_REQUIRED_CXX_FLAGS} -mwin32") + SET(VTK_REQUIRED_C_FLAGS "${VTK_REQUIRED_C_FLAGS} -mwin32") + ENDIF(WIN32) +ELSE(CMAKE_COMPILER_IS_GNUCXX) + IF(CMAKE_ANSI_CFLAGS) + SET(VTK_REQUIRED_C_FLAGS "${VTK_REQUIRED_C_FLAGS} ${CMAKE_ANSI_CFLAGS}") + ENDIF(CMAKE_ANSI_CFLAGS) + IF(CMAKE_SYSTEM MATCHES "OSF1-V.*") + SET(VTK_REQUIRED_CXX_FLAGS + "${VTK_REQUIRED_CXX_FLAGS} -timplicit_local -no_implicit_include") + ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V.*") +ENDIF(CMAKE_COMPILER_IS_GNUCXX) + +IF(VTK_USE_X) + IF(CMAKE_X_CFLAGS) + SET(VTK_REQUIRED_C_FLAGS "${VTK_REQUIRED_C_FLAGS} ${CMAKE_X_CFLAGS}") + SET(VTK_REQUIRED_CXX_FLAGS "${VTK_REQUIRED_CXX_FLAGS} ${CMAKE_X_CFLAGS}") + ENDIF(CMAKE_X_CFLAGS) +ENDIF(VTK_USE_X) + +# Copy library dependencies. +SET(vtkCommonJava_LIB_DEPENDS "${VTK40_vtkCommonJava_LIB_DEPENDS}") +SET(vtkCommonPython_LIB_DEPENDS "${VTK40_vtkCommonPython_LIB_DEPENDS}") +SET(vtkCommonTCL_LIB_DEPENDS "${VTK40_vtkCommonTCL_LIB_DEPENDS}") +SET(vtkCommon_LIB_DEPENDS "${VTK40_vtkCommon_LIB_DEPENDS}") +SET(vtkFilteringJava_LIB_DEPENDS "${VTK40_vtkFilteringJava_LIB_DEPENDS}") +SET(vtkFilteringPython_LIB_DEPENDS "${VTK40_vtkFilteringPython_LIB_DEPENDS}") +SET(vtkFilteringTCL_LIB_DEPENDS "${VTK40_vtkFilteringTCL_LIB_DEPENDS}") +SET(vtkFiltering_LIB_DEPENDS "${VTK40_vtkFiltering_LIB_DEPENDS}") +SET(vtkGraphicsJava_LIB_DEPENDS "${VTK40_vtkGraphicsJava_LIB_DEPENDS}") +SET(vtkGraphicsPython_LIB_DEPENDS "${VTK40_vtkGraphicsPython_LIB_DEPENDS}") +SET(vtkGraphicsTCL_LIB_DEPENDS "${VTK40_vtkGraphicsTCL_LIB_DEPENDS}") +SET(vtkGraphics_LIB_DEPENDS "${VTK40_vtkGraphics_LIB_DEPENDS}") +SET(vtkHybridJava_LIB_DEPENDS "${VTK40_vtkHybridJava_LIB_DEPENDS}") +SET(vtkHybridPython_LIB_DEPENDS "${VTK40_vtkHybridPython_LIB_DEPENDS}") +SET(vtkHybridTCL_LIB_DEPENDS "${VTK40_vtkHybridTCL_LIB_DEPENDS}") +SET(vtkHybrid_LIB_DEPENDS "${VTK40_vtkHybrid_LIB_DEPENDS}") +SET(vtkIOJava_LIB_DEPENDS "${VTK40_vtkIOJava_LIB_DEPENDS}") +SET(vtkIOPython_LIB_DEPENDS "${VTK40_vtkIOPython_LIB_DEPENDS}") +SET(vtkIOTCL_LIB_DEPENDS "${VTK40_vtkIOTCL_LIB_DEPENDS}") +SET(vtkIO_LIB_DEPENDS "${VTK40_vtkIO_LIB_DEPENDS}") +SET(vtkImagingJava_LIB_DEPENDS "${VTK40_vtkImagingJava_LIB_DEPENDS}") +SET(vtkImagingPython_LIB_DEPENDS "${VTK40_vtkImagingPython_LIB_DEPENDS}") +SET(vtkImagingTCL_LIB_DEPENDS "${VTK40_vtkImagingTCL_LIB_DEPENDS}") +SET(vtkImaging_LIB_DEPENDS "${VTK40_vtkImaging_LIB_DEPENDS}") +SET(vtkParallelJava_LIB_DEPENDS "${VTK40_vtkParallelJava_LIB_DEPENDS}") +SET(vtkParallelPython_LIB_DEPENDS "${VTK40_vtkParallelPython_LIB_DEPENDS}") +SET(vtkParallelTCL_LIB_DEPENDS "${VTK40_vtkParallelTCL_LIB_DEPENDS}") +SET(vtkParallel_LIB_DEPENDS "${VTK40_vtkParallel_LIB_DEPENDS}") +SET(vtkPatentedJava_LIB_DEPENDS "${VTK40_vtkPatentedJava_LIB_DEPENDS}") +SET(vtkPatentedPython_LIB_DEPENDS "${VTK40_vtkPatentedPython_LIB_DEPENDS}") +SET(vtkPatentedTCL_LIB_DEPENDS "${VTK40_vtkPatentedTCL_LIB_DEPENDS}") +SET(vtkPatented_LIB_DEPENDS "${VTK40_vtkPatented_LIB_DEPENDS}") +SET(vtkRenderingJava_LIB_DEPENDS "${VTK40_vtkRenderingJava_LIB_DEPENDS}") +SET(vtkRenderingPythonTkWidgets_LIB_DEPENDS "${VTK40_vtkRenderingPythonTkWidgets_LIB_DEPENDS}") +SET(vtkRenderingPython_LIB_DEPENDS "${VTK40_vtkRenderingPython_LIB_DEPENDS}") +SET(vtkRenderingTCL_LIB_DEPENDS "${VTK40_vtkRenderingTCL_LIB_DEPENDS}") +SET(vtkRendering_LIB_DEPENDS "${VTK40_vtkRendering_LIB_DEPENDS}") +SET(vtkjpeg_LIB_DEPENDS "${VTK40_vtkjpeg_LIB_DEPENDS}") +SET(vtkpng_LIB_DEPENDS "${VTK40_vtkpng_LIB_DEPENDS}") +SET(vtkzlib_LIB_DEPENDS "${VTK40_vtkzlib_LIB_DEPENDS}") + +# List of VTK configuration variables set above. +# grep "^[ ]*SET(VTK" UseVTKConfig40.cmake |sed 's/[ ]*SET(\([^ ]*\) .*/ \1/' +SET(VTK_SETTINGS + VTK_BUILD_SHARED + VTK_BUILD_VERSION + VTK_DEBUG_LEAKS + VTK_HAVE_VG500 + VTK_HAVE_VP1000 + VTK_INCLUDE_DIRS + VTK_KITS + VTK_LANGUAGES + VTK_LIBRARY_DIRS + VTK_MAJOR_VERSION + VTK_MANGLE_MESA + VTK_MINOR_VERSION + VTK_MPIRUN_EXE + VTK_MPI_POSTFLAGS + VTK_MPI_PREFLAGS + VTK_OPENGL_HAS_OSMESA + VTK_PARSE_JAVA_EXE + VTK_TCL_EXE + VTK_TCL_HOME + VTK_USE_64BIT_IDS + VTK_USE_ANSI_STDLIB + VTK_USE_HYBRID + VTK_USE_MATROX_IMAGING + VTK_USE_MPI + VTK_USE_PARALLEL + VTK_USE_PATENTED + VTK_USE_RENDERING + VTK_USE_VIDEO_FOR_WINDOWS + VTK_USE_VOLUMEPRO + VTK_USE_X + VTK_WRAP_JAVA + VTK_WRAP_JAVA_EXE + VTK_WRAP_PYTHON + VTK_WRAP_PYTHON_EXE + VTK_WRAP_TCL + VTK_WRAP_TCL_EXE +) diff --git a/Modules/Use_wxWindows.cmake b/Modules/Use_wxWindows.cmake new file mode 100644 index 0000000..01a1516 --- /dev/null +++ b/Modules/Use_wxWindows.cmake @@ -0,0 +1,64 @@ +# +# This convenience include finds if wxWindows is installed +# and set the appropriate libs, incdirs, flags etc. +# author Jan Woetzel (07/2003) +## +# ----------------------------------------------------- +# USAGE: +# just include Use_wxWindows.cmake +# in your projects CMakeLists.txt +# INCLUDE( ${CMAKE_MODULE_PATH}/Use_wxWindows.cmake) +## +# if you are sure you need GL then +# SET(WXWINDOWS_USE_GL 1) +# *before* you include this file. + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# Copyright 2003 Jan Woetzel +# +# 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.) + +# ----------------------------------------------------- +# 16.Feb.2004: changed INCLUDE to FIND_PACKAGE to read from users own non-system CMAKE_MODULE_PATH (Jan Woetzel JW) +# 07/2006: rewrite as FindwxWidgets.cmake, kept for backward compatibility JW + +MESSAGE(STATUS "Use_wxWindows.cmake is DEPRECATED. \n" +"Please use FIND_PACKAGE(wxWidgets) and INCLUDE(${wxWidgets_USE_FILE}) instead. (JW)") + + +# ------------------------ + +FIND_PACKAGE( wxWindows ) + +IF(WXWINDOWS_FOUND) + +#MESSAGE("DBG Use_wxWindows.cmake: WXWINDOWS_INCLUDE_DIR=${WXWINDOWS_INCLUDE_DIR} WXWINDOWS_LINK_DIRECTORIES=${WXWINDOWS_LINK_DIRECTORIES} WXWINDOWS_LIBRARIES=${WXWINDOWS_LIBRARIES} CMAKE_WXWINDOWS_CXX_FLAGS=${CMAKE_WXWINDOWS_CXX_FLAGS} WXWINDOWS_DEFINITIONS=${WXWINDOWS_DEFINITIONS}") + + IF(WXWINDOWS_INCLUDE_DIR) + INCLUDE_DIRECTORIES(${WXWINDOWS_INCLUDE_DIR}) + ENDIF(WXWINDOWS_INCLUDE_DIR) + IF(WXWINDOWS_LINK_DIRECTORIES) + LINK_DIRECTORIES(${WXWINDOWS_LINK_DIRECTORIES}) + ENDIF(WXWINDOWS_LINK_DIRECTORIES) + IF(WXWINDOWS_LIBRARIES) + LINK_LIBRARIES(${WXWINDOWS_LIBRARIES}) + ENDIF(WXWINDOWS_LIBRARIES) + IF (CMAKE_WXWINDOWS_CXX_FLAGS) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_WXWINDOWS_CXX_FLAGS}") + ENDIF(CMAKE_WXWINDOWS_CXX_FLAGS) + IF(WXWINDOWS_DEFINITIONS) + ADD_DEFINITIONS(${WXWINDOWS_DEFINITIONS}) + ENDIF(WXWINDOWS_DEFINITIONS) +ELSE(WXWINDOWS_FOUND) + MESSAGE(SEND_ERROR "wxWindows not found by Use_wxWindows.cmake") +ENDIF(WXWINDOWS_FOUND) + diff --git a/Modules/UsewxWidgets.cmake b/Modules/UsewxWidgets.cmake new file mode 100644 index 0000000..a0f2e86 --- /dev/null +++ b/Modules/UsewxWidgets.cmake @@ -0,0 +1,89 @@ +# - Convenience include for using wxWidgets library. +# Determines if wxWidgets was FOUND and sets the appropriate libs, incdirs, +# flags, etc. INCLUDE_DIRECTORIES and LINK_DIRECTORIES are called. +# +# USAGE +# # Note that for MinGW users the order of libs is important! +# FIND_PACKAGE(wxWidgets REQUIRED net gl core base) +# INCLUDE(${wxWidgets_USE_FILE}) +# # and for each of your dependent executable/library targets: +# TARGET_LINK_LIBRARIES( ${wxWidgets_LIBRARIES}) +# +# DEPRECATED +# LINK_LIBRARIES is not called in favor of adding dependencies per target. +# +# AUTHOR +# Jan Woetzel + +#============================================================================= +# Copyright 2004-2009 Kitware, Inc. +# Copyright 2006 Jan Woetzel +# +# 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.) + +# debug message and logging. +# comment these out for distribution +IF (NOT LOGFILE ) + # SET(LOGFILE "${PROJECT_BINARY_DIR}/CMakeOutput.log") +ENDIF (NOT LOGFILE ) +MACRO(MSG _MSG) + # FILE(APPEND ${LOGFILE} "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}\n") + # MESSAGE(STATUS "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}") +ENDMACRO(MSG) + + +MSG("wxWidgets_FOUND=${wxWidgets_FOUND}") +IF (wxWidgets_FOUND) + IF (wxWidgets_INCLUDE_DIRS) + IF(wxWidgets_INCLUDE_DIRS_NO_SYSTEM) + INCLUDE_DIRECTORIES(${wxWidgets_INCLUDE_DIRS}) + ELSE(wxWidgets_INCLUDE_DIRS_NO_SYSTEM) + INCLUDE_DIRECTORIES(SYSTEM ${wxWidgets_INCLUDE_DIRS}) + ENDIF(wxWidgets_INCLUDE_DIRS_NO_SYSTEM) + MSG("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}") + ENDIF(wxWidgets_INCLUDE_DIRS) + + IF (wxWidgets_LIBRARY_DIRS) + LINK_DIRECTORIES(${wxWidgets_LIBRARY_DIRS}) + MSG("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}") + ENDIF(wxWidgets_LIBRARY_DIRS) + + IF (wxWidgets_DEFINITIONS) + SET_PROPERTY(DIRECTORY APPEND + PROPERTY COMPILE_DEFINITIONS ${wxWidgets_DEFINITIONS}) + MSG("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}") + ENDIF(wxWidgets_DEFINITIONS) + + IF (wxWidgets_DEFINITIONS_DEBUG) + SET_PROPERTY(DIRECTORY APPEND + PROPERTY COMPILE_DEFINITIONS_DEBUG ${wxWidgets_DEFINITIONS_DEBUG}) + MSG("wxWidgets_DEFINITIONS_DEBUG=${wxWidgets_DEFINITIONS_DEBUG}") + ENDIF(wxWidgets_DEFINITIONS_DEBUG) + + IF (wxWidgets_CXX_FLAGS) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${wxWidgets_CXX_FLAGS}") + MSG("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") + ENDIF(wxWidgets_CXX_FLAGS) + + # DEPRECATED JW + # just for backward compatibility: add deps to all targets + # library projects better use advanced FIND_PACKAGE(wxWidgets) directly. + #IF(wxWidgets_LIBRARIES) + # LINK_LIBRARIES(${wxWidgets_LIBRARIES}) + # # BUG: str too long: MSG("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}") + # IF(LOGFILE) + # FILE(APPEND ${LOGFILE} "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${wxWidgets_LIBRARIES}\n") + # ENDIF(LOGFILE) + #ENDIF(wxWidgets_LIBRARIES) + +ELSE (wxWidgets_FOUND) + MESSAGE("wxWidgets requested but not found.") +ENDIF(wxWidgets_FOUND) diff --git a/Modules/VTKCompatibility.cmake b/Modules/VTKCompatibility.cmake new file mode 100644 index 0000000..802969f --- /dev/null +++ b/Modules/VTKCompatibility.cmake @@ -0,0 +1,52 @@ + +#============================================================================= +# Copyright 2005-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +IF(APPLE) + SET(CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_C_CREATE_SHARED_LIBRARY}") + SET(CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_C_CREATE_SHARED_MODULE}") + STRING( REGEX REPLACE "CMAKE_C_COMPILER" + CMAKE_CXX_COMPILER CMAKE_CXX_CREATE_SHARED_MODULE + "${CMAKE_CXX_CREATE_SHARED_MODULE}") + STRING( REGEX REPLACE "CMAKE_C_COMPILER" + CMAKE_CXX_COMPILER CMAKE_CXX_CREATE_SHARED_LIBRARY + "${CMAKE_CXX_CREATE_SHARED_LIBRARY}") +ENDIF(APPLE) + +SET(VTKFTGL_BINARY_DIR "${VTK_BINARY_DIR}/Utilities/ftgl" + CACHE INTERNAL "") +SET(VTKFREETYPE_BINARY_DIR "${VTK_BINARY_DIR}/Utilities/freetype" + CACHE INTERNAL "") +SET(VTKFTGL_SOURCE_DIR "${VTK_SOURCE_DIR}/Utilities/ftgl" + CACHE INTERNAL "") +SET(VTKFREETYPE_SOURCE_DIR "${VTK_SOURCE_DIR}/Utilities/freetype" + CACHE INTERNAL "") + +SET(VTK_GLEXT_FILE "${VTK_SOURCE_DIR}/Utilities/ParseOGLExt/headers/glext.h" + CACHE FILEPATH + "Location of the OpenGL extensions header file (glext.h).") +SET(VTK_GLXEXT_FILE + "${VTK_SOURCE_DIR}/Utilities/ParseOGLExt/headers/glxext.h" CACHE FILEPATH + "Location of the GLX extensions header file (glxext.h).") +SET(VTK_WGLEXT_FILE "${VTK_SOURCE_DIR}/Utilities/ParseOGLExt/headers/wglext.h" + CACHE FILEPATH + "Location of the WGL extensions header file (wglext.h).") + +# work around an old bug in VTK +SET(TIFF_RIGHT_VERSION 1) + +# for very old VTK (versions prior to 4.2) +MACRO(SOURCE_FILES) + message (FATAL_ERROR "You are trying to build a very old version of VTK (prior to VTK 4.2). To do this you need to use CMake 2.0 as it was the last version of CMake to support VTK 4.0.") +ENDMACRO(SOURCE_FILES) + diff --git a/Modules/WriteBasicConfigVersionFile.cmake b/Modules/WriteBasicConfigVersionFile.cmake new file mode 100644 index 0000000..038cb57 --- /dev/null +++ b/Modules/WriteBasicConfigVersionFile.cmake @@ -0,0 +1,44 @@ +# WRITE_BASIC_CONFIG_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion) ) +# +# Deprecated, see WRITE_BASIC_PACKAGE_VERSION_FILE(), it is identical. + +#============================================================================= +# Copyright 2008-2011 Alexander Neundorf, +# Copyright 2004-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +include(CMakeParseArguments) + +function(WRITE_BASIC_CONFIG_VERSION_FILE _filename) + + set(options ) + set(oneValueArgs VERSION COMPATIBILITY ) + set(multiValueArgs ) + + cmake_parse_arguments(CVF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(CVF_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Unknown keywords given to WRITE_BASIC_CONFIG_VERSION_FILE(): \"${CVF_UNPARSED_ARGUMENTS}\"") + endif(CVF_UNPARSED_ARGUMENTS) + + set(versionTemplateFile "${CMAKE_ROOT}/Modules/BasicConfigVersion-${CVF_COMPATIBILITY}.cmake.in") + if(NOT EXISTS "${versionTemplateFile}") + message(FATAL_ERROR "Bad COMPATIBILITY value used for WRITE_BASIC_CONFIG_VERSION_FILE(): \"${CVF_COMPATIBILITY}\"") + endif() + + if("${CVF_VERSION}" STREQUAL "") + message(FATAL_ERROR "No VERSION specified for WRITE_BASIC_CONFIG_VERSION_FILE()") + endif() + + configure_file("${versionTemplateFile}" "${_filename}" @ONLY) + +endfunction(WRITE_BASIC_CONFIG_VERSION_FILE) diff --git a/Modules/ecos_clean.cmake b/Modules/ecos_clean.cmake new file mode 100644 index 0000000..7a563ae --- /dev/null +++ b/Modules/ecos_clean.cmake @@ -0,0 +1,26 @@ + +#============================================================================= +# Copyright 2007-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +file(GLOB _files ${ECOS_DIR}/*) + +# remove all directories, which consist of lower-case letters only +# this skips e.g. CVS/ and .subversion/ +foreach(_entry ${_files}) + if(IS_DIRECTORY ${_entry}) + get_filename_component(dir ${_entry} NAME) + if(${dir} MATCHES "^[a-z]+$") + file(REMOVE_RECURSE ${_entry}) + endif(${dir} MATCHES "^[a-z]+$") + endif(IS_DIRECTORY ${_entry}) +endforeach(_entry) diff --git a/Modules/exportheader.cmake.in b/Modules/exportheader.cmake.in new file mode 100644 index 0000000..80a879d --- /dev/null +++ b/Modules/exportheader.cmake.in @@ -0,0 +1,35 @@ + +#ifndef @INCLUDE_GUARD_NAME@ +#define @INCLUDE_GUARD_NAME@ + +#ifdef @STATIC_DEFINE@ +# define @EXPORT_MACRO_NAME@ +# define @NO_EXPORT_MACRO_NAME@ +#else +# ifndef @EXPORT_MACRO_NAME@ +# ifdef @EXPORT_IMPORT_CONDITION@ + /* We are building this library */ +# define @EXPORT_MACRO_NAME@ @DEFINE_EXPORT@ +# else + /* We are using this library */ +# define @EXPORT_MACRO_NAME@ @DEFINE_IMPORT@ +# endif +# endif + +# ifndef @NO_EXPORT_MACRO_NAME@ +# define @NO_EXPORT_MACRO_NAME@ @DEFINE_NO_EXPORT@ +# endif +#endif + +#ifndef @DEPRECATED_MACRO_NAME@ +# define @DEPRECATED_MACRO_NAME@ @DEFINE_DEPRECATED@ +# define @DEPRECATED_MACRO_NAME@_EXPORT @EXPORT_MACRO_NAME@ @DEFINE_DEPRECATED@ +# define @DEPRECATED_MACRO_NAME@_NO_EXPORT @NO_EXPORT_MACRO_NAME@ @DEFINE_DEPRECATED@ +#endif + +#cmakedefine01 DEFINE_NO_DEPRECATED +#if DEFINE_NO_DEPRECATED +# define @NO_DEPRECATED_MACRO_NAME@ +#endif + +#endif diff --git a/Modules/kde3init_dummy.cpp.in b/Modules/kde3init_dummy.cpp.in new file mode 100644 index 0000000..7135c73 --- /dev/null +++ b/Modules/kde3init_dummy.cpp.in @@ -0,0 +1,6 @@ + +/* used by KDE3Macros.cmake */ + +extern "C" int kdemain(int argc, char* argv[]); +extern "C" int kdeinitmain(int argc, char* argv[]) { return kdemain(argc,argv); } +int main(int argc, char* argv[]) { return kdemain(argc,argv); } diff --git a/Modules/kde3uic.cmake b/Modules/kde3uic.cmake new file mode 100644 index 0000000..6f904ac --- /dev/null +++ b/Modules/kde3uic.cmake @@ -0,0 +1,33 @@ + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf +# +# 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.) + +# used internally by KDE3Macros.cmake +# neundorf@kde.org + + +EXECUTE_PROCESS(COMMAND ${KDE_UIC_EXECUTABLE} + -L ${KDE_UIC_PLUGIN_DIR} -nounload -tr tr2i18n + -impl ${KDE_UIC_H_FILE} + ${KDE_UIC_FILE} + OUTPUT_VARIABLE _uic_CONTENTS + ERROR_QUIET + ) + +STRING(REGEX REPLACE "tr2i18n\\(\"\"\\)" "QString::null" _uic_CONTENTS "${_uic_CONTENTS}" ) +STRING(REGEX REPLACE "tr2i18n\\(\"\", \"\"\\)" "QString::null" _uic_CONTENTS "${_uic_CONTENTS}" ) + +FILE(WRITE ${KDE_UIC_CPP_FILE} "#include \n#include \n\n") +FILE(APPEND ${KDE_UIC_CPP_FILE} "${_uic_CONTENTS}") + diff --git a/Modules/readme.txt b/Modules/readme.txt new file mode 100644 index 0000000..7d61d8d --- /dev/null +++ b/Modules/readme.txt @@ -0,0 +1,151 @@ +For more information about how to contribute modules to CMake, see this page: +http://www.itk.org/Wiki/CMake:Module_Maintainers + +Note to authors of FindXXX.cmake files + +We would like all FindXXX.cmake files to produce consistent variable names. + +Please use the following consistent variable names for general use. + +XXX_INCLUDE_DIRS The final set of include directories listed in one variable for use by client code. This should not be a cache entry. +XXX_LIBRARIES The libraries to link against to use XXX. These should include full paths. This should not be a cache entry. +XXX_DEFINITIONS Definitions to use when compiling code that uses XXX. This really shouldn't include options such as (-DHAS_JPEG)that a client source-code file uses to decide whether to #include +XXX_EXECUTABLE Where to find the XXX tool. +XXX_YYY_EXECUTABLE Where to find the YYY tool that comes with XXX. +XXX_LIBRARY_DIRS Optionally, the final set of library directories listed in one variable for use by client code. This should not be a cache entry. +XXX_ROOT_DIR Where to find the base directory of XXX. +XXX_VERSION_YY Expect Version YY if true. Make sure at most one of these is ever true. +XXX_WRAP_YY If False, do not try to use the relevent CMake wrapping command. +XXX_YY_FOUND If False, optional YY part of XXX sytem is not available. +XXX_FOUND Set to false, or undefined, if we haven't found, or don't want to use XXX. +XXX_RUNTIME_LIBRARY_DIRS Optionally, the runtime library search path for use when running an executable linked to shared libraries. + The list should be used by user code to create the PATH on windows or LD_LIBRARY_PATH on unix. + This should not be a cache entry. +XXX_VERSION_STRING A human-readable string containing the version of the package found, if any. +XXX_VERSION_MAJOR The major version of the package found, if any. +XXX_VERSION_MINOR The minor version of the package found, if any. +XXX_VERSION_PATCH The patch version of the package found, if any. + +You do not have to provide all of the above variables. You should provide XXX_FOUND under most circumstances. If XXX is a library, then XXX_LIBRARIES, should also be defined, and XXX_INCLUDE_DIRS should usually be defined (I guess libm.a might be an exception) + +The following names should not usually be used in CMakeLists.txt files, but they may be usefully modified in users' CMake Caches to control stuff. + +XXX_LIBRARY Name of XXX Library. A User may set this and XXX_INCLUDE_DIR to ignore to force non-use of XXX. +XXX_YY_LIBRARY Name of YY library that is part of the XXX system. It may or may not be required to use XXX. +XXX_INCLUDE_DIR Where to find xxx.h, etc. (XXX_INCLUDE_PATH was considered bad because a path includes an actual filename.) +XXX_YY_INCLUDE_DIR Where to find xxx_yy.h, etc. + +For tidiness's sake, try to keep as many options as possible out of the cache, leaving at least one option which can be used to disable use of the module, or locate a not-found library (e.g. XXX_ROOT_DIR). For the same reason, mark most cache options as advanced. + +If you need other commands to do special things then it should still begin with XXX_. This gives a sort of namespace effect and keeps things tidy for the user. You should put comments describing all the exported settings, plus descriptions of any the users can use to control stuff. + +You really should also provide backwards compatibility any old settings that were actually in use. Make sure you comment them as deprecated, so that no-one starts using them. + +To correctly document a module, create a comment block at the top with # comments. There are three types of comments that can be in the block: + +1. The brief description of the module, this is done by: +# - a small description + +2. A paragraph of text. This is done with all text that has a single +space between the # and the text. To create a new paragraph, just +put a # with no text on the line. + +3. A verbatim line. This is done with two spaces between the # and the text. + +For example: + +# - This is a cool module +# This module does really cool stuff. +# It can do even more than you think. +# +# It even needs to paragraphs to tell you about it. +# And it defines the following variables: +# VAR_COOL - this is great isn't it? +# VAR_REALLY_COOL - cool right? +# + +Test the documentation formatting by running "cmake --help-module FindXXX". +Edit the comments until the output of this command looks satisfactory. + +To have a .cmake file in this directory NOT show up in the +modules documentation, you should start the file with a blank +line. + +After the documentation, leave a *BLANK* line, and then add a +copyright and licence notice block like this one: + +#============================================================================= +# Copyright 2009-2011 Your Name +# +# 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.) + +The layout of the notice block is strictly enforced by the ModuleNotices test. +Only the year range and name may be changed freely. + +A FindXXX.cmake module will typically be loaded by the command + + FIND_PACKAGE(XXX [major[.minor[.patch[.tweak]]]] [EXACT] + [QUIET] [[REQUIRED|COMPONENTS] [components...]]) + +If any version numbers are given to the command it will set the +following variables before loading the module: + + XXX_FIND_VERSION = full requested version string + XXX_FIND_VERSION_MAJOR = major version if requested, else 0 + XXX_FIND_VERSION_MINOR = minor version if requested, else 0 + XXX_FIND_VERSION_PATCH = patch version if requested, else 0 + XXX_FIND_VERSION_TWEAK = tweak version if requested, else 0 + XXX_FIND_VERSION_COUNT = number of version components, 0 to 4 + XXX_FIND_VERSION_EXACT = true if EXACT option was given + +If the find module supports versioning it should locate a version of +the package that is compatible with the version requested. If a +compatible version of the package cannot be found the module should +not report success. The version of the package found should be stored +in "XXX_VERSION..." version variables documented by the module. + +If the QUIET option is given to the command it will set the variable +XXX_FIND_QUIETLY to true before loading the FindXXX.cmake module. If +this variable is set the module should not complain about not being +able to find the package. If the +REQUIRED option is given to the command it will set the variable +XXX_FIND_REQUIRED to true before loading the FindXXX.cmake module. If +this variable is set the module should issue a FATAL_ERROR if the +package cannot be found. +If neither the QUIET nor REQUIRED options are given then the +FindXXX.cmake module should look for the package and complain without +error if the module is not found. + +A package can be provide sub-components. +Those components can be listed after the COMPONENTS (or REQUIRED) +or OPTIONAL_COMPONENTS keywords. The set of all listed components will be +specified in a XXX_FIND_COMPONENTS variable. +For each package-specific component, say Yyy, a variable XXX_FIND_REQUIRED_Yyy +will be set to true if it listed after COMPONENTS and it will be set to false +if it was listed after OPTIONAL_COMPONENTS. +Using those variables a FindXXX.cmake module and also a XXXConfig.cmake package +configuration file can determine whether and which components have been requested, +and whether they were requested as required or as optional. +For each of the requested components a XXX_Yyy_FOUND variable should be set +accordingly. +The per-package XXX_FOUND variable should be only set to true if all requested +required components have been found. A missing optional component should not +keep the XXX_FOUND variable from being set to true. +If the package provides XXX_INCLUDE_DIRS and XXX_LIBRARIES variables, the include +dirs and libraries for all components which were requested and which have been +found should be added to those two variables. + +To get this behaviour you can use the FIND_PACKAGE_HANDLE_STANDARD_ARGS() +macro, as an example see FindJPEG.cmake. + +For internal implementation, it's a generally accepted convention that variables starting with +underscore are for temporary use only. (variable starting with an underscore +are not intended as a reserved prefix). diff --git a/Readme.txt b/Readme.txt new file mode 100644 index 0000000..11926bc --- /dev/null +++ b/Readme.txt @@ -0,0 +1,53 @@ +This is CMake, the cross-platform, open-source make system. +CMake is distributed under the BSD License, see Copyright.txt. +For documentation see the Docs/ directory once you have built CMake +or visit http://www.cmake.org. + + +Building CMake +============== + + +Supported Platforms +------------------- + +MS Windows, Mac OS X, Linux, FreeBSD, Solaris, HP-UX, IRIX, BeOS, QNX + +Other UNIX-like operating systems may work too out of the box, if not +it shouldn't be a major problem to port CMake to this platform. Contact the +CMake mailing list in this case: http://www.cmake.org/mailman/listinfo/cmake + + +If you don't have any previous version of CMake already installed +-------------------------------------------------------------- + +* UNIX/Mac OSX/MinGW/MSYS/Cygwin: + +You need to have a compiler and a make installed. +Run the bootstrap script you find the in the source directory of CMake. +You can use the --help option to see the supported options. +You may want to use the --prefix= option to specify a custom +installation directory for CMake. You can run the bootstrap script from +within the CMake source directory or any other build directory of your +choice. Once this has finished successfully, run make and make install. +So basically it's the same as you may be used to from autotools-based +projects: + +$ ./bootstrap; make; make install + + +* Other Windows: + +You need to download and install a binary release of CMake in order to build +CMake. You can get these releases from +http://www.cmake.org/HTML/Download.html . Then proceed with the instructions +below. + + +You already have a version of CMake installed +--------------------------------------------- + +You can build CMake as any other project with a CMake-based build system: +run the installed CMake on the sources of this CMake with your preferred +options and generators. Then build it and install it. +For instructions how to do this, see http://www.cmake.org/HTML/RunningCMake.html diff --git a/Source/.cvsignore b/Source/.cvsignore new file mode 100644 index 0000000..31e286c --- /dev/null +++ b/Source/.cvsignore @@ -0,0 +1,5 @@ +ccommand___Win32_Debug +Debug +cmake___Win32_Debug +ctest___Win32_Debug +CMakeSetup.map diff --git a/Source/.gitattributes b/Source/.gitattributes new file mode 100644 index 0000000..cf4dabd --- /dev/null +++ b/Source/.gitattributes @@ -0,0 +1,2 @@ +# Preserve upstream indentation style. +cm_sha2.* whitespace=indent-with-non-tab diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt new file mode 100644 index 0000000..f9d1c03 --- /dev/null +++ b/Source/CMakeLists.txt @@ -0,0 +1,566 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +INCLUDE(CheckIncludeFile) +# Check if we can build support for ELF parsing. +CHECK_INCLUDE_FILE("elf.h" HAVE_ELF_H) +IF(HAVE_ELF_H) + SET(CMAKE_USE_ELF_PARSER 1) +ELSE(HAVE_ELF_H) + SET(CMAKE_USE_ELF_PARSER) +ENDIF(HAVE_ELF_H) + +SET(EXECUTABLE_OUTPUT_PATH ${CMake_BIN_DIR}) + +# configure the .h file +CONFIGURE_FILE( + "${CMake_SOURCE_DIR}/Source/cmConfigure.cmake.h.in" + "${CMake_BINARY_DIR}/Source/cmConfigure.h" + ) +CONFIGURE_FILE( + "${CMake_SOURCE_DIR}/Source/cmVersionConfig.h.in" + "${CMake_BINARY_DIR}/Source/cmVersionConfig.h" + ) +CONFIGURE_FILE( + "${CMake_SOURCE_DIR}/Source/CPack/cmCPackConfigure.h.in" + "${CMake_BINARY_DIR}/Source/CPack/cmCPackConfigure.h" + ) + +# add the include path to find the .h +INCLUDE_DIRECTORIES( + "${CMake_BINARY_DIR}/Source" + "${CMake_SOURCE_DIR}/Source" + ${CMAKE_ZLIB_INCLUDES} + ${CMAKE_EXPAT_INCLUDES} + ${CMAKE_TAR_INCLUDES} + ${CMAKE_COMPRESS_INCLUDES} + ) + +# let cmake know it is supposed to use it +ADD_DEFINITIONS(-DCMAKE_BUILD_WITH_CMAKE) + +OPTION(CMAKE_REGENERATE_YACCLEX + "Regenerate YACC and LEXX files" OFF) +MARK_AS_ADVANCED(CMAKE_REGENERATE_YACCLEX) +IF(CMAKE_REGENERATE_YACCLEX) + SET(parsersLexers cmDependsFortran cmCommandArgument cmExpr) + FIND_PROGRAM(YACC_EXECUTABLE + NAMES yacc bison + PATHS /usr/bin + DOC "Yacc or Bison executable") + FIND_PROGRAM(FLEX_EXECUTABLE + NAMES flex + PATHS /usr/bin + DOC "Flex executable") + MARK_AS_ADVANCED(YACC_EXECUTABLE FLEX_EXECUTABLE) + IF(YACC_EXECUTABLE) + SET(BISON_FLAGS) + IF(YACC_EXECUTABLE MATCHES "bison") + SET(BISON_FLAGS "--yacc") + ENDIF(YACC_EXECUTABLE MATCHES "bison") + SET(yacc_files) + FOREACH(name ${parsersLexers}) + SET(src "${CMAKE_CURRENT_SOURCE_DIR}/${name}Parser.y") + SET(dst "${CMAKE_CURRENT_BINARY_DIR}/${name}Parser.cxx") + SET(hdr "${CMAKE_CURRENT_BINARY_DIR}/${name}ParserTokens.h") + ADD_CUSTOM_COMMAND( + OUTPUT "${dst}" + DEPENDS "${src}" + COMMAND + ${YACC_EXECUTABLE} + --name-prefix=${name}_yy --defines=${hdr} -o${dst} ${src} + ) + SET(yacc_files ${yacc_files} "${dst}") + ENDFOREACH(name) + ADD_CUSTOM_TARGET(RerunYacc DEPENDS ${yacc_files}) + ENDIF(YACC_EXECUTABLE) + IF(FLEX_EXECUTABLE) + SET(lex_files) + FOREACH(name ${parsersLexers}) + SET(src "${CMAKE_CURRENT_SOURCE_DIR}/${name}Lexer.in.l") + SET(dst "${CMAKE_CURRENT_BINARY_DIR}/${name}Lexer.cxx") + SET(hdr "${CMAKE_CURRENT_BINARY_DIR}/${name}Lexer.h") + ADD_CUSTOM_COMMAND( + OUTPUT "${dst}" + DEPENDS "${src}" + COMMAND + ${FLEX_EXECUTABLE} + --prefix=${name}_yy --header-file=${hdr} -o${dst} ${src} + ) + SET(lex_files ${lex_files} "${dst}") + ENDFOREACH(name) + ADD_CUSTOM_TARGET(RerunLex DEPENDS ${lex_files}) + ENDIF(FLEX_EXECUTABLE) + +ENDIF(CMAKE_REGENERATE_YACCLEX) + +# Check if we can build the ELF parser. +IF(CMAKE_USE_ELF_PARSER) + SET(ELF_SRCS cmELF.h cmELF.cxx) +ENDIF(CMAKE_USE_ELF_PARSER) + +# +# Sources for CMakeLib +# +SET(SRCS + cmStandardIncludes.cxx + cmArchiveWrite.cxx + cmBootstrapCommands.cxx + cmCacheManager.cxx + cmCacheManager.h + cmCommands.cxx + cmCommands.h + cmCommandArgumentLexer.cxx + cmCommandArgumentParser.cxx + cmCommandArgumentParserHelper.cxx + cmComputeComponentGraph.cxx + cmComputeComponentGraph.h + cmComputeLinkDepends.cxx + cmComputeLinkDepends.h + cmComputeLinkInformation.cxx + cmComputeLinkInformation.h + cmComputeTargetDepends.h + cmComputeTargetDepends.cxx + cmCryptoHash.cxx + cmCryptoHash.h + cmCustomCommand.cxx + cmCustomCommand.h + cmCustomCommandGenerator.cxx + cmCustomCommandGenerator.h + cmDefinitions.cxx + cmDefinitions.h + cmDepends.cxx + cmDepends.h + cmDependsC.cxx + cmDependsC.h + cmDependsFortran.cxx + cmDependsFortran.h + cmDependsFortranLexer.cxx + cmDependsFortranParser.cxx + cmDependsFortranParser.h + cmDependsJava.cxx + cmDependsJava.h + cmDependsJavaLexer.cxx + cmDependsJavaParser.cxx + cmDependsJavaParserHelper.cxx + cmDependsJavaParserHelper.h + cmDocumentation.cxx + cmDocumentationFormatter.cxx + cmDocumentationFormatterHTML.cxx + cmDocumentationFormatterDocbook.cxx + cmDocumentationFormatterMan.cxx + cmDocumentationFormatterText.cxx + cmDocumentationFormatterUsage.cxx + cmDocumentationSection.cxx + cmDocumentCompileDefinitions.h + cmDocumentGeneratorExpressions.h + cmDocumentLocationUndefined.h + cmDocumentVariables.cxx + cmDynamicLoader.cxx + cmDynamicLoader.h + ${ELF_SRCS} + cmExprLexer.cxx + cmExprParser.cxx + cmExprParserHelper.cxx + cmExportBuildFileGenerator.h + cmExportBuildFileGenerator.cxx + cmExportFileGenerator.h + cmExportFileGenerator.cxx + cmExportInstallFileGenerator.h + cmExportInstallFileGenerator.cxx + cmExtraCodeBlocksGenerator.cxx + cmExtraCodeBlocksGenerator.h + cmExtraEclipseCDT4Generator.cxx + cmExtraEclipseCDT4Generator.h + cmFileTimeComparison.cxx + cmFileTimeComparison.h + cmGeneratedFileStream.cxx + cmGeneratorExpression.cxx + cmGeneratorExpression.h + cmGeneratorTarget.cxx + cmGeneratorTarget.h + cmGlobalGenerator.cxx + cmGlobalGenerator.h + cmGlobalUnixMakefileGenerator3.cxx + cmGlobalUnixMakefileGenerator3.h + cmGraphAdjacencyList.h + cmGraphVizWriter.cxx + cmGraphVizWriter.h + cmInstallGenerator.h + cmInstallGenerator.cxx + cmInstallExportGenerator.cxx + cmInstallFilesGenerator.h + cmInstallFilesGenerator.cxx + cmInstallScriptGenerator.h + cmInstallScriptGenerator.cxx + cmInstallTargetGenerator.h + cmInstallTargetGenerator.cxx + cmInstallDirectoryGenerator.h + cmInstallDirectoryGenerator.cxx + cmListFileCache.cxx + cmListFileCache.h + cmListFileLexer.c + cmLocalGenerator.cxx + cmLocalGenerator.h + cmLocalUnixMakefileGenerator3.cxx + cmMakeDepend.cxx + cmMakeDepend.h + cmMakefile.cxx + cmMakefile.h + cmMakefileTargetGenerator.cxx + cmMakefileExecutableTargetGenerator.cxx + cmMakefileLibraryTargetGenerator.cxx + cmMakefileUtilityTargetGenerator.cxx + cmNewLineStyle.h + cmNewLineStyle.cxx + cmOrderDirectories.cxx + cmOrderDirectories.h + cmPolicies.h + cmPolicies.cxx + cmProcessTools.cxx + cmProcessTools.h + cmProperty.cxx + cmProperty.h + cmPropertyDefinition.cxx + cmPropertyDefinition.h + cmPropertyDefinitionMap.cxx + cmPropertyDefinitionMap.h + cmPropertyMap.cxx + cmPropertyMap.h + cmQtAutomoc.cxx + cmQtAutomoc.h + cmScriptGenerator.h + cmScriptGenerator.cxx + cmSourceFile.cxx + cmSourceFile.h + cmSourceFileLocation.cxx + cmSourceFileLocation.h + cmSourceGroup.cxx + cmSourceGroup.h + cmSystemTools.cxx + cmSystemTools.h + cmTarget.cxx + cmTarget.h + cmTest.cxx + cmTest.h + cmTestGenerator.cxx + cmTestGenerator.h + cmVariableWatch.cxx + cmVariableWatch.h + cmVersion.cxx + cmVersion.h + cmXMLParser.cxx + cmXMLParser.h + cmXMLSafe.cxx + cmXMLSafe.h + cmake.cxx + cmake.h + cmakewizard.cxx + cmakewizard.h + + cm_sha2.h + cm_sha2.c + cm_utf8.h + cm_utf8.c + ) + +# Kdevelop only works on UNIX and not windows +IF(UNIX) + SET(SRCS ${SRCS} cmGlobalKdevelopGenerator.cxx) +ENDIF(UNIX) + +# Xcode only works on Apple +IF(APPLE) + SET(SRCS ${SRCS} + cmXCodeObject.cxx + cmXCode21Object.cxx + cmGlobalXCodeGenerator.cxx + cmGlobalXCodeGenerator.h + cmLocalXCodeGenerator.cxx + cmLocalXCodeGenerator.h) +ENDIF(APPLE) + + +IF (WIN32) + SET(SRCS ${SRCS} + cmCallVisualStudioMacro.cxx + cmCallVisualStudioMacro.h + ) + + IF(NOT UNIX) + SET(SRCS ${SRCS} + cmGlobalBorlandMakefileGenerator.cxx + cmGlobalBorlandMakefileGenerator.h + cmGlobalMSYSMakefileGenerator.cxx + cmGlobalMinGWMakefileGenerator.cxx + cmGlobalNMakeMakefileGenerator.cxx + cmGlobalNMakeMakefileGenerator.h + cmGlobalJOMMakefileGenerator.cxx + cmGlobalJOMMakefileGenerator.h + cmGlobalVisualStudio6Generator.cxx + cmGlobalVisualStudio6Generator.h + cmGlobalVisualStudio71Generator.cxx + cmGlobalVisualStudio71Generator.h + cmGlobalVisualStudio7Generator.cxx + cmGlobalVisualStudio7Generator.h + cmGlobalVisualStudio8Generator.cxx + cmGlobalVisualStudio8Generator.h + cmGlobalVisualStudio9Generator.cxx + cmGlobalVisualStudio9Generator.h + cmGlobalVisualStudio8Win64Generator.cxx + cmGlobalVisualStudio8Win64Generator.h + cmGlobalVisualStudio9Win64Generator.cxx + cmGlobalVisualStudio9Win64Generator.h + cmGlobalVisualStudio9IA64Generator.cxx + cmGlobalVisualStudio9IA64Generator.h + cmVisualStudioGeneratorOptions.h + cmVisualStudioGeneratorOptions.cxx + cmVisualStudio10TargetGenerator.h + cmVisualStudio10TargetGenerator.cxx + cmLocalVisualStudio10Generator.cxx + cmLocalVisualStudio10Generator.h + cmGlobalVisualStudio10Generator.h + cmGlobalVisualStudio10Generator.cxx + cmGlobalVisualStudio10Win64Generator.h + cmGlobalVisualStudio10Win64Generator.cxx + cmGlobalVisualStudio10IA64Generator.h + cmGlobalVisualStudio10IA64Generator.cxx + cmGlobalVisualStudio11Generator.h + cmGlobalVisualStudio11Generator.cxx + cmGlobalVisualStudio11Win64Generator.h + cmGlobalVisualStudio11Win64Generator.cxx + cmGlobalVisualStudioGenerator.cxx + cmGlobalVisualStudioGenerator.h + cmGlobalWatcomWMakeGenerator.cxx + cmIDEFlagTable.h + cmIDEOptions.cxx + cmIDEOptions.h + cmLocalVisualStudio6Generator.cxx + cmLocalVisualStudio6Generator.h + cmLocalVisualStudio7Generator.cxx + cmLocalVisualStudio7Generator.h + cmLocalVisualStudioGenerator.cxx + cmLocalVisualStudioGenerator.h + cmWin32ProcessExecution.cxx + cmWin32ProcessExecution.h + ) + ENDIF(NOT UNIX) +ENDIF (WIN32) + +# turn on Ninja by default +set(_CMAKE_DEFAULT_NINJA_VALUE TRUE) +# turn it off for platforms where it does not pass all the +# tests +if(WIN32 OR APPLE) + SET(_CMAKE_DEFAULT_NINJA_VALUE FALSE) +endif() +SET(CMAKE_ENABLE_NINJA ${_CMAKE_DEFAULT_NINJA_VALUE} CACHE BOOL + "Enable the ninja generator for CMake. currently not fully working for Windows or OSX") +MARK_AS_ADVANCED(CMAKE_ENABLE_NINJA) +IF(CMAKE_ENABLE_NINJA) + MESSAGE(STATUS "Enable ninja generator.") + SET(SRCS ${SRCS} + cmGlobalNinjaGenerator.cxx + cmGlobalNinjaGenerator.h + cmNinjaTypes.h + cmLocalNinjaGenerator.cxx + cmLocalNinjaGenerator.h + cmNinjaTargetGenerator.cxx + cmNinjaTargetGenerator.h + cmNinjaNormalTargetGenerator.cxx + cmNinjaNormalTargetGenerator.h + cmNinjaUtilityTargetGenerator.cxx + cmNinjaUtilityTargetGenerator.h + ) + ADD_DEFINITIONS(-DCMAKE_USE_NINJA) +ELSE() + MESSAGE(STATUS "Disable ninja generator.") +ENDIF() + +# create a library used by the command line and the GUI +ADD_LIBRARY(CMakeLib ${SRCS}) +TARGET_LINK_LIBRARIES(CMakeLib cmsys + ${CMAKE_EXPAT_LIBRARIES} ${CMAKE_ZLIB_LIBRARIES} + ${CMAKE_TAR_LIBRARIES} ${CMAKE_COMPRESS_LIBRARIES} + ${CMAKE_CURL_LIBRARIES} ) + +# On Apple we need CoreFoundation +IF(APPLE) + TARGET_LINK_LIBRARIES(CMakeLib "-framework CoreFoundation") +ENDIF(APPLE) + +# On some platforms we need the rpcrt4 library for the VS 7 generators. +IF(CMAKE_BUILD_ON_VISUAL_STUDIO OR MINGW) + TARGET_LINK_LIBRARIES(CMakeLib rpcrt4) +ENDIF(CMAKE_BUILD_ON_VISUAL_STUDIO OR MINGW) + +# +# CTestLib +# +INCLUDE_DIRECTORIES( + "${CMake_SOURCE_DIR}/Source/CTest" + ${CMAKE_XMLRPC_INCLUDES} + ${CMAKE_CURL_INCLUDES} + ) +# +# Sources for CTestLib +# +SET(CTEST_SRCS cmCTest.cxx + CTest/cmProcess.cxx + CTest/cmCTestBatchTestHandler.cxx + CTest/cmCTestBuildAndTestHandler.cxx + CTest/cmCTestBuildCommand.cxx + CTest/cmCTestBuildHandler.cxx + CTest/cmCTestConfigureCommand.cxx + CTest/cmCTestConfigureHandler.cxx + CTest/cmCTestCoverageCommand.cxx + CTest/cmCTestCoverageHandler.cxx + CTest/cmParsePHPCoverage.cxx + CTest/cmCTestEmptyBinaryDirectoryCommand.cxx + CTest/cmCTestGenericHandler.cxx + CTest/cmCTestHandlerCommand.cxx + CTest/cmCTestLaunch.cxx + CTest/cmCTestMemCheckCommand.cxx + CTest/cmCTestMemCheckHandler.cxx + CTest/cmCTestMultiProcessHandler.cxx + CTest/cmCTestReadCustomFilesCommand.cxx + CTest/cmCTestRunScriptCommand.cxx + CTest/cmCTestRunTest.cxx + CTest/cmCTestScriptHandler.cxx + CTest/cmCTestSleepCommand.cxx + CTest/cmCTestStartCommand.cxx + CTest/cmCTestSubmitCommand.cxx + CTest/cmCTestSubmitHandler.cxx + CTest/cmCTestTestCommand.cxx + CTest/cmCTestTestHandler.cxx + CTest/cmCTestUpdateCommand.cxx + CTest/cmCTestUpdateHandler.cxx + CTest/cmCTestUploadCommand.cxx + CTest/cmCTestUploadHandler.cxx + + CTest/cmCTestVC.cxx + CTest/cmCTestVC.h + CTest/cmCTestGlobalVC.cxx + CTest/cmCTestGlobalVC.h + CTest/cmCTestCVS.cxx + CTest/cmCTestCVS.h + CTest/cmCTestSVN.cxx + CTest/cmCTestSVN.h + CTest/cmCTestBZR.cxx + CTest/cmCTestBZR.h + CTest/cmCTestGIT.cxx + CTest/cmCTestGIT.h + CTest/cmCTestHG.cxx + CTest/cmCTestHG.h + ) + +# Build CTestLib +ADD_LIBRARY(CTestLib ${CTEST_SRCS}) +TARGET_LINK_LIBRARIES(CTestLib CMakeLib ${CMAKE_CURL_LIBRARIES} ${CMAKE_XMLRPC_LIBRARIES}) + +# +# Sources for CPack +# +SET(CPACK_SRCS + CPack/cmCPackArchiveGenerator.cxx + CPack/cmCPackComponentGroup.cxx + CPack/cmCPackGeneratorFactory.cxx + CPack/cmCPackGenerator.cxx + CPack/cmCPackLog.cxx + CPack/cmCPackNSISGenerator.cxx + CPack/cmCPackSTGZGenerator.cxx + CPack/cmCPackTGZGenerator.cxx + CPack/cmCPackTarBZip2Generator.cxx + CPack/cmCPackTarCompressGenerator.cxx + CPack/cmCPackZIPGenerator.cxx + CPack/cmCPackDocumentVariables.cxx + CPack/cmCPackDocumentMacros.cxx + ) + +IF(CYGWIN) + SET(CPACK_SRCS ${CPACK_SRCS} + CPack/cmCPackCygwinBinaryGenerator.cxx + CPack/cmCPackCygwinSourceGenerator.cxx + ) +ENDIF(CYGWIN) + +IF(UNIX) + SET(CPACK_SRCS ${CPACK_SRCS} + CPack/cmCPackDebGenerator.cxx + CPack/cmCPackRPMGenerator.cxx + ) +ENDIF(UNIX) + +IF(APPLE) + SET(CPACK_SRCS ${CPACK_SRCS} + CPack/cmCPackBundleGenerator.cxx + CPack/cmCPackDragNDropGenerator.cxx + CPack/cmCPackOSXX11Generator.cxx + CPack/cmCPackPackageMakerGenerator.cxx + ) +ENDIF(APPLE) + +# Build CPackLib +ADD_LIBRARY(CPackLib ${CPACK_SRCS}) +TARGET_LINK_LIBRARIES(CPackLib CMakeLib) + +IF(APPLE) + ADD_EXECUTABLE(cmakexbuild cmakexbuild.cxx) + TARGET_LINK_LIBRARIES(cmakexbuild CMakeLib) + ADD_EXECUTABLE(OSXScriptLauncher + CPack/OSXScriptLauncher.cxx) + TARGET_LINK_LIBRARIES(OSXScriptLauncher cmsys) + TARGET_LINK_LIBRARIES(OSXScriptLauncher "-framework CoreFoundation") +ENDIF(APPLE) + +# Build CMake executable +ADD_EXECUTABLE(cmake cmakemain.cxx) +TARGET_LINK_LIBRARIES(cmake CMakeLib) + +# Build special executable for running programs on Windows 98 +IF(WIN32) + IF(NOT UNIX) + ADD_EXECUTABLE(cmw9xcom cmw9xcom.cxx) + TARGET_LINK_LIBRARIES(cmw9xcom CMakeLib) + INSTALL_TARGETS(/bin cmw9xcom) + ENDIF(NOT UNIX) +ENDIF(WIN32) + +# Build CTest executable +ADD_EXECUTABLE(ctest ctest.cxx) +TARGET_LINK_LIBRARIES(ctest CTestLib) + +# Build CPack executable +ADD_EXECUTABLE(cpack CPack/cpack.cxx) +TARGET_LINK_LIBRARIES(cpack CPackLib) + +# Curses GUI +IF(BUILD_CursesDialog) + INCLUDE(${CMake_SOURCE_DIR}/Source/CursesDialog/CMakeLists.txt) +ENDIF(BUILD_CursesDialog) + +# Qt GUI +OPTION(BUILD_QtDialog "Build Qt dialog for CMake" FALSE) +IF(BUILD_QtDialog) + SUBDIRS(QtDialog) +ENDIF(BUILD_QtDialog) + +INCLUDE (${CMake_BINARY_DIR}/Source/LocalUserOptions.cmake OPTIONAL) +INCLUDE (${CMake_SOURCE_DIR}/Source/LocalUserOptions.cmake OPTIONAL) + +INSTALL_TARGETS(/bin cmake) +INSTALL_TARGETS(/bin ctest) +INSTALL_TARGETS(/bin cpack) +IF(APPLE) + INSTALL_TARGETS(/bin cmakexbuild) +ENDIF(APPLE) + +INSTALL_FILES(${CMAKE_DATA_DIR}/include cmCPluginAPI.h) diff --git a/Source/CMakeVersionSource.cmake b/Source/CMakeVersionSource.cmake new file mode 100644 index 0000000..05e265c --- /dev/null +++ b/Source/CMakeVersionSource.cmake @@ -0,0 +1,37 @@ +# Try to identify the current development source version. +set(CMake_VERSION_SOURCE "") +if(EXISTS ${CMake_SOURCE_DIR}/.git/HEAD) + find_program(GIT_EXECUTABLE NAMES git git.cmd) + mark_as_advanced(GIT_EXECUTABLE) + if(GIT_EXECUTABLE) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --verify -q --short=4 HEAD + OUTPUT_VARIABLE head + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMake_SOURCE_DIR} + ) + if(head) + set(CMake_VERSION_SOURCE "g${head}") + execute_process( + COMMAND ${GIT_EXECUTABLE} update-index -q --refresh + WORKING_DIRECTORY ${CMake_SOURCE_DIR} + ) + execute_process( + COMMAND ${GIT_EXECUTABLE} diff-index --name-only HEAD -- + OUTPUT_VARIABLE dirty + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMake_SOURCE_DIR} + ) + if(dirty) + set(CMake_VERSION_SOURCE "${CMake_VERSION_SOURCE}-dirty") + endif() + endif() + endif() +elseif(EXISTS ${CMake_SOURCE_DIR}/CVS/Repository) + file(READ ${CMake_SOURCE_DIR}/CVS/Repository repo) + set(branch "") + if("${repo}" MATCHES "\\.git/") + string(REGEX REPLACE ".*\\.git/([^\r\n]*).*" "-\\1" branch "${repo}") + endif() + set(CMake_VERSION_SOURCE "cvs${branch}") +endif() diff --git a/Source/CPack/OSXLauncherScript.scpt b/Source/CPack/OSXLauncherScript.scpt new file mode 100644 index 0000000000000000000000000000000000000000..342cf8c01b8b82a51936c76b2262680cb629ec3f GIT binary patch literal 3102 zcmai0=YJGc6g@MWvdr){y98t@N)!@Xi~&JK5kv@zC{aPh&XO!-HO*{L{N|tFR~3+A z!GcOv0YOnf0YOnL^lqU_7s2DbGh4nSoBidTnKyHD-?``Ad*6(TC2JoZKCYyHMgK}2 zApm(rBrMnnSaJg+_ttarTz`2s^5jiE3XFiA@E!(Gh@cS&jFxxu|z8-j4-oAqCjal)9G(%o=H#?yBY}7{gXqN5E>Gv6Y4JQ@@tg+NEgRe^m#5IX5}lKE@%s97 zc>XLCV6g<)izf|w`TB>^oqwY@PdIY%^^Z@B*Qn;?%bsk${=H#Ol4%&lxExm)0grAN z5gvDWyn}@euJHFSBFgp&p^xrgNdzU5k0mIxc|x=4qyP$JT#2iUfJp8qD%IXs+B<=Up2Y$}JLd1i36zquOiHT;u* z7+jN;^>>%Qqe~?UC1)ll>f_$cD7mrtr&9Stng6AGQI@WQzPQ%LwZiT?TyF$2bx@8Q z49e51<)ea!c+jB2PZ3Ch-H1vf;H5|a`8?q8Kqi$c({=&$#{eVX*;xp1zr+2RR2qD+5Mj%rigK)FKAiuP= z7H*M0Uw)Z!4{qgdM=rTa`&K_SB=a#igu$8`w?%MU?$X|^#Ba_L-{o>wj+(JCP{`ko zAx6L>FPV=!Fw_Wmr5%=98pfU6VKB_sS)bgA;YPsIxftEJ-Qo7kehg3B72__9Fan-k z1jXFua9d_SM))+fR(^B&TMn8Qcj~U}(BOtKta7y+;Jqv*k(T>jJnF@rJw{z~`5 zeIeYZ`+I)`_Y2(;gVDaTUebepbopaDxo2>kM!9>I? znaIKL6!N%&%ejo7Ib4yV+t#;(!{zC>ZM0*D%W{bA@Ut93goILIn4coZPq-A5P{SpT zOmlt5e4@cE)c__b)X0e*=3*}5LN4IP=);d3E*1~%eVVvjl%t>>E=;unhYM1T!xgu= z&uNDrrB-a~Fph8uqI;f|@2RRS)vNcHA1JTdTD|5_sXQqx3dx>`1RtV|^Z5a45$F4k zOj8oHA-K!=ZJrRe{JRKJE8F@W-{m~MWEnU9bPTjhkmqQ$v?{pwUSia~A`8MCe zV7@7>V=U)7d^@A)TPZ~ydD;FBIh>nQ&G*r7)}Hdc%?PBJ +#include +#include +#include + +#include + +// For the PATH_MAX constant +#include + +#define DebugError(x) \ + ofs << x << cmsys_ios::endl; \ + cmsys_ios::cout << x << cmsys_ios::endl + +int main(int argc, char* argv[]) +{ + //if ( cmsys::SystemTools::FileExists( + cmsys_stl::string cwd = cmsys::SystemTools::GetCurrentWorkingDirectory(); + cmsys_ios::ofstream ofs("/tmp/output.txt"); + + CFStringRef fileName; + CFBundleRef appBundle; + CFURLRef scriptFileURL; + UInt8 *path; + + //get CF URL for script + if (! (appBundle = CFBundleGetMainBundle())) + { + DebugError("Cannot get main bundle"); + return 1; + } + fileName = CFSTR("RuntimeScript"); + if (! (scriptFileURL = CFBundleCopyResourceURL(appBundle, fileName, NULL, + NULL))) + { + DebugError("CFBundleCopyResourceURL failed"); + return 1; + } + + //create path string + if (! (path = new UInt8[PATH_MAX])) + { + return 1; + } + + //get the file system path of the url as a cstring + //in an encoding suitable for posix apis + if ( CFURLGetFileSystemRepresentation(scriptFileURL, true, path, + PATH_MAX) == false) + { + DebugError("CFURLGetFileSystemRepresentation failed"); + return 1; + } + + //dispose of the CF variable + CFRelease(scriptFileURL); + + cmsys_stl::string fullScriptPath = reinterpret_cast(path); + delete [] path; + + + if (! cmsys::SystemTools::FileExists(fullScriptPath.c_str())) + { + return 1; + } + + cmsys_stl::string scriptDirectory = cmsys::SystemTools::GetFilenamePath( + fullScriptPath); + ofs << fullScriptPath.c_str() << cmsys_ios::endl; + cmsys_stl::vector args; + args.push_back(fullScriptPath.c_str()); + int cc; + for ( cc = 1; cc < argc; ++ cc ) + { + args.push_back(argv[cc]); + } + args.push_back(0); + + cmsysProcess* cp = cmsysProcess_New(); + cmsysProcess_SetCommand(cp, &*args.begin()); + cmsysProcess_SetWorkingDirectory(cp, scriptDirectory.c_str()); + cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1); + cmsysProcess_SetTimeout(cp, 0); + cmsysProcess_Execute(cp); + + std::vector tempOutput; + char* data; + int length; + while(cmsysProcess_WaitForData(cp, &data, &length, 0)) + { + // Translate NULL characters in the output into valid text. + // Visual Studio 7 puts these characters in the output of its + // build process. + for(int i=0; i < length; ++i) + { + if(data[i] == '\0') + { + data[i] = ' '; + } + } + cmsys_ios::cout.write(data, length); + } + + cmsysProcess_WaitForExit(cp, 0); + + bool result = true; + if(cmsysProcess_GetState(cp) == cmsysProcess_State_Exited) + { + if ( cmsysProcess_GetExitValue(cp) != 0 ) + { + result = false; + } + } + else if(cmsysProcess_GetState(cp) == cmsysProcess_State_Exception) + { + const char* exception_str = cmsysProcess_GetExceptionString(cp); + std::cerr << exception_str << std::endl; + result = false; + } + else if(cmsysProcess_GetState(cp) == cmsysProcess_State_Error) + { + const char* error_str = cmsysProcess_GetErrorString(cp); + std::cerr << error_str << std::endl; + result = false; + } + else if(cmsysProcess_GetState(cp) == cmsysProcess_State_Expired) + { + const char* error_str = "Process terminated due to timeout\n"; + std::cerr << error_str << std::endl; + result = false; + } + + cmsysProcess_Delete(cp); + + return 0; +} diff --git a/Source/CPack/bills-comments.txt b/Source/CPack/bills-comments.txt new file mode 100644 index 0000000..f73499d --- /dev/null +++ b/Source/CPack/bills-comments.txt @@ -0,0 +1,68 @@ +cpack.cxx + +cmCPackGenerators -- creates cmCPackGenericGenerator's via NewGenerator + - a cmCPackGenericGenerator factory + + +cmCPackGenericGenerator::Initialize + this->InitializeInternal + CPACK_INCLUDE_TOPLEVEL_DIRECTORY = 0 turns off + + +// binary package run +cmCPackGenericGenerator::ProcessGenerator // DoPackage + cmCPackGenericGenerator::PrepareNames -- sets a bunch of CPACK_vars + cmCPackGenericGenerator::InstallProject + run preinstall (make preinstall/fast) + call ReadListFile(cmake_install.cmake) + glob recurse in install directory to get list of files + this->CompressFiles with the list of files + + +// source package run +cmCPackGenericGenerator::ProcessGenerator // DoPackage + cmCPackGenericGenerator::PrepareNames -- sets a bunch of CPACK_vars + cmCPackGenericGenerator::InstallProject --> + if set CPACK_INSTALLED_DIRECTORIES + glob the files in that directory + copy those files to the tmp install directory _CPack something + glob recurse in install directory to get list of files + this->CompressFiles with the list of files + + +cmCPackGenericGenerator::InstallProject is used for both source and binary +packages. It is controled based on values set in CPACK_ variables. + + +InstallProject + 1. CPACK_INSTALL_COMMANDS - a list of commands used to install the package + + 2. CPACK_INSTALLED_DIRECTORIES - copy this directory to CPACK_TEMPORARY_DIRECTORY + + 3. CPACK_INSTALL_CMAKE_PROJECTS - a cmake install script + - run make preinstall + - run cmake_install.cmake + - set CMAKE_INSTALL_PREFIX to the temp directory + - CPACK_BUILD_CONFIG check this and set the BUILD_TYPE to it + - ReadListFile on the install script cmake_install.cmake + - run strip on the executables and libraries if CPACK_STRIP_FILES is TRUE + +Recommendations: + +rename cmCPackGenerators to cmCPackGeneratorFactory + +rename cmCPackGenericGenerator --> cmCPackGenerator + +rename cmCPackGenericGenerator::ProcessGenerator -> cmCPackGenerator::DoPackage + + +break up cmCPackGenerator::InstallProject so it calls the following: + +// run user provided install commands + cmCPackGenerator::RunInstallCommands(); +// copy entire directories that need no processing like source trees + cmCPackGenerator::CopyPreInstalledDirectories(); +// run the cmake install scripts if provided + cmCPackGenerator::RunCMakeInstallScripts() + +- diff --git a/Source/CPack/cmCPackArchiveGenerator.cxx b/Source/CPack/cmCPackArchiveGenerator.cxx new file mode 100644 index 0000000..6e7b8d7 --- /dev/null +++ b/Source/CPack/cmCPackArchiveGenerator.cxx @@ -0,0 +1,314 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackArchiveGenerator.h" + +#include "cmake.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackLog.h" +#include + +#include +#include +#include + +//---------------------------------------------------------------------- +cmCPackArchiveGenerator::cmCPackArchiveGenerator(cmArchiveWrite::Compress t, + cmArchiveWrite::Type at) +{ + this->Compress = t; + this->Archive = at; +} + +//---------------------------------------------------------------------- +cmCPackArchiveGenerator::~cmCPackArchiveGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackArchiveGenerator::InitializeInternal() +{ + this->SetOptionIfNotSet("CPACK_INCLUDE_TOPLEVEL_DIRECTORY", "1"); + return this->Superclass::InitializeInternal(); +} +//---------------------------------------------------------------------- +int cmCPackArchiveGenerator::addOneComponentToArchive(cmArchiveWrite& archive, + cmCPackComponent* component) +{ + cmCPackLogger(cmCPackLog::LOG_VERBOSE, " - packaging component: " + << component->Name + << std::endl); + // Add the files of this component to the archive + std::string localToplevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY")); + localToplevel += "/"+ component->Name; + std::string dir = cmSystemTools::GetCurrentWorkingDirectory(); + // Change to local toplevel + cmSystemTools::ChangeDirectory(localToplevel.c_str()); + std::string filePrefix; + if (this->IsOn("CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY")) + { + filePrefix = this->GetOption("CPACK_PACKAGE_FILE_NAME"); + filePrefix += "/"; + } + std::vector::const_iterator fileIt; + for (fileIt = component->Files.begin(); fileIt != component->Files.end(); + ++fileIt ) + { + std::string rp = filePrefix + *fileIt; + cmCPackLogger(cmCPackLog::LOG_DEBUG,"Adding file: " + << rp << std::endl); + archive.Add(rp); + if (!archive) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "ERROR while packaging files: " + << archive.GetError() + << std::endl); + return 0; + } + } + // Go back to previous dir + cmSystemTools::ChangeDirectory(dir.c_str()); + return 1; +} + +/* + * The macro will open/create a file 'filename' + * an declare and open the associated + * cmArchiveWrite 'archive' object. + */ +#define DECLARE_AND_OPEN_ARCHIVE(filename,archive) \ +cmGeneratedFileStream gf; \ +gf.Open(filename.c_str(), false, true); \ +if (!GenerateHeader(&gf)) \ + { \ + cmCPackLogger(cmCPackLog::LOG_ERROR, \ + "Problem to generate Header for archive < " \ + << filename \ + << ">." << std::endl); \ + return 0; \ + } \ +cmArchiveWrite archive(gf,this->Compress, this->Archive); \ +if (!archive) \ + { \ + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem to create archive < " \ + << filename \ + << ">. ERROR =" \ + << archive.GetError() \ + << std::endl); \ + return 0; \ + } + +//---------------------------------------------------------------------- +int cmCPackArchiveGenerator::PackageComponents(bool ignoreGroup) +{ + packageFileNames.clear(); + // The default behavior is to have one package by component group + // unless CPACK_COMPONENTS_IGNORE_GROUP is specified. + if (!ignoreGroup) + { + std::map::iterator compGIt; + for (compGIt=this->ComponentGroups.begin(); + compGIt!=this->ComponentGroups.end(); ++compGIt) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Packaging component group: " + << compGIt->first + << std::endl); + // Begin the archive for this group + std::string packageFileName= std::string(toplevel); + packageFileName += "/"+ + GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"), + compGIt->first, + true) + + this->GetOutputExtension(); + // open a block in order to automatically close archive + // at the end of the block + { + DECLARE_AND_OPEN_ARCHIVE(packageFileName,archive); + // now iterate over the component of this group + std::vector::iterator compIt; + for (compIt=(compGIt->second).Components.begin(); + compIt!=(compGIt->second).Components.end(); + ++compIt) + { + // Add the files of this component to the archive + addOneComponentToArchive(archive,*compIt); + } + } + // add the generated package to package file names list + packageFileNames.push_back(packageFileName); + } + // Handle Orphan components (components not belonging to any groups) + std::map::iterator compIt; + for (compIt=this->Components.begin(); + compIt!=this->Components.end(); ++compIt ) + { + // Does the component belong to a group? + if (compIt->second.Group==NULL) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Component <" + << compIt->second.Name + << "> does not belong to any group, package it separately." + << std::endl); + std::string localToplevel( + this->GetOption("CPACK_TEMPORARY_DIRECTORY") + ); + std::string packageFileName = std::string(toplevel); + + localToplevel += "/"+ compIt->first; + packageFileName += "/"+ + GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"), + compIt->first, + false) + + this->GetOutputExtension(); + { + DECLARE_AND_OPEN_ARCHIVE(packageFileName,archive); + // Add the files of this component to the archive + addOneComponentToArchive(archive,&(compIt->second)); + } + // add the generated package to package file names list + packageFileNames.push_back(packageFileName); + } + } + } + // CPACK_COMPONENTS_IGNORE_GROUPS is set + // We build 1 package per component + else + { + std::map::iterator compIt; + for (compIt=this->Components.begin(); + compIt!=this->Components.end(); ++compIt ) + { + std::string localToplevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY")); + std::string packageFileName = std::string(toplevel); + + localToplevel += "/"+ compIt->first; + packageFileName += "/"+ + GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"), + compIt->first, + false) + + this->GetOutputExtension(); + { + DECLARE_AND_OPEN_ARCHIVE(packageFileName,archive); + // Add the files of this component to the archive + addOneComponentToArchive(archive,&(compIt->second)); + } + // add the generated package to package file names list + packageFileNames.push_back(packageFileName); + } + } + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackArchiveGenerator::PackageComponentsAllInOne() +{ + // reset the package file names + packageFileNames.clear(); + packageFileNames.push_back(std::string(toplevel)); + packageFileNames[0] += "/" + +std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")) + + this->GetOutputExtension(); + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Packaging all groups in one package..." + "(CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE is set)" + << std::endl); + DECLARE_AND_OPEN_ARCHIVE(packageFileNames[0],archive); + + // The ALL COMPONENTS in ONE package case + std::map::iterator compIt; + for (compIt=this->Components.begin();compIt!=this->Components.end(); + ++compIt ) + { + // Add the files of this component to the archive + addOneComponentToArchive(archive,&(compIt->second)); + } + + // archive goes out of scope so it will finalized and closed. + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackArchiveGenerator::PackageFiles() +{ + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Toplevel: " + << toplevel << std::endl); + + if (WantsComponentInstallation()) { + // CASE 1 : COMPONENT ALL-IN-ONE package + // If ALL COMPONENTS in ONE package has been requested + // then the package file is unique and should be open here. + if (componentPackageMethod == ONE_PACKAGE) + { + return PackageComponentsAllInOne(); + } + // CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one) + // There will be 1 package for each component group + // however one may require to ignore component group and + // in this case you'll get 1 package for each component. + else + { + return PackageComponents(componentPackageMethod == + ONE_PACKAGE_PER_COMPONENT); + } + } + + // CASE 3 : NON COMPONENT package. + DECLARE_AND_OPEN_ARCHIVE(packageFileNames[0],archive); + std::vector::const_iterator fileIt; + std::string dir = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::ChangeDirectory(toplevel.c_str()); + for ( fileIt = files.begin(); fileIt != files.end(); ++ fileIt ) + { + // Get the relative path to the file + std::string rp = cmSystemTools::RelativePath(toplevel.c_str(), + fileIt->c_str()); + archive.Add(rp); + if(!archive) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem while adding file< " + << *fileIt + << "> to archive <" + << packageFileNames[0] << "> .ERROR =" + << archive.GetError() + << std::endl); + return 0; + } + } + cmSystemTools::ChangeDirectory(dir.c_str()); + // The destructor of cmArchiveWrite will close and finish the write + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackArchiveGenerator::GenerateHeader(std::ostream*) +{ + return 1; +} + +bool cmCPackArchiveGenerator::SupportsComponentInstallation() const { + // The Component installation support should only + // be activated if explicitly requested by the user + // (for backward compatibility reason) + if (IsOn("CPACK_ARCHIVE_COMPONENT_INSTALL")) + { + return true; + } + else + { + return false; + } +} diff --git a/Source/CPack/cmCPackArchiveGenerator.h b/Source/CPack/cmCPackArchiveGenerator.h new file mode 100644 index 0000000..b1bbb83 --- /dev/null +++ b/Source/CPack/cmCPackArchiveGenerator.h @@ -0,0 +1,74 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackArchiveGenerator_h +#define cmCPackArchiveGenerator_h + +#include "cmArchiveWrite.h" +#include "cmCPackGenerator.h" + + +/** \class cmCPackArchiveGenerator + * \brief A generator base for libarchive generation. + * The generator itself uses the libarchive wrapper + * \ref cmArchiveWrite. + * + */ +class cmCPackArchiveGenerator : public cmCPackGenerator + { +public: + cmTypeMacro(cmCPackArchiveGenerator, cmCPackGenerator); + + /** + * Construct generator + */ + cmCPackArchiveGenerator(cmArchiveWrite::Compress, cmArchiveWrite::Type); + virtual ~cmCPackArchiveGenerator(); + // Used to add a header to the archive + virtual int GenerateHeader(std::ostream* os); + // component support + virtual bool SupportsComponentInstallation() const; +protected: + virtual int InitializeInternal(); + /** + * Add the files belonging to the specified component + * to the provided (already opened) archive. + * @param[in,out] archive the archive object + * @param[in] component the component whose file will be added to archive + */ + int addOneComponentToArchive(cmArchiveWrite& archive, + cmCPackComponent* component); + + /** + * The main package file method. + * If component install was required this + * method will call either PackageComponents or + * PackageComponentsAllInOne. + */ + int PackageFiles(); + /** + * The method used to package files when component + * install is used. This will create one + * archive for each component group. + */ + int PackageComponents(bool ignoreGroup); + /** + * Special case of component install where all + * components will be put in a single installer. + */ + int PackageComponentsAllInOne(); + virtual const char* GetOutputExtension() = 0; + cmArchiveWrite::Compress Compress; + cmArchiveWrite::Type Archive; + }; + +#endif diff --git a/Source/CPack/cmCPackBundleGenerator.cxx b/Source/CPack/cmCPackBundleGenerator.cxx new file mode 100644 index 0000000..af78e78 --- /dev/null +++ b/Source/CPack/cmCPackBundleGenerator.cxx @@ -0,0 +1,174 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackBundleGenerator.h" +#include "cmCPackLog.h" +#include "cmSystemTools.h" + +#include + +//---------------------------------------------------------------------- +cmCPackBundleGenerator::cmCPackBundleGenerator() +{ +} + +//---------------------------------------------------------------------- +cmCPackBundleGenerator::~cmCPackBundleGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackBundleGenerator::InitializeInternal() +{ + const char* name = this->GetOption("CPACK_BUNDLE_NAME"); + if(0 == name) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_BUNDLE_NAME must be set to use the Bundle generator." + << std::endl); + + return 0; + } + + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +const char* cmCPackBundleGenerator::GetPackagingInstallPrefix() +{ + this->InstallPrefix = "/"; + this->InstallPrefix += this->GetOption("CPACK_BUNDLE_NAME"); + this->InstallPrefix += ".app/Contents/Resources"; + + return this->InstallPrefix.c_str(); +} + +//---------------------------------------------------------------------- +int cmCPackBundleGenerator::PackageFiles() +{ + + // Get required arguments ... + const std::string cpack_bundle_name = this->GetOption("CPACK_BUNDLE_NAME") + ? this->GetOption("CPACK_BUNDLE_NAME") : ""; + if(cpack_bundle_name.empty()) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_BUNDLE_NAME must be set." + << std::endl); + + return 0; + } + + const std::string cpack_bundle_plist = this->GetOption("CPACK_BUNDLE_PLIST") + ? this->GetOption("CPACK_BUNDLE_PLIST") : ""; + if(cpack_bundle_plist.empty()) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_BUNDLE_PLIST must be set." + << std::endl); + + return 0; + } + + const std::string cpack_bundle_icon = this->GetOption("CPACK_BUNDLE_ICON") + ? this->GetOption("CPACK_BUNDLE_ICON") : ""; + if(cpack_bundle_icon.empty()) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_BUNDLE_ICON must be set." + << std::endl); + + return 0; + } + + // Get optional arguments ... + const std::string cpack_bundle_startup_command = + this->GetOption("CPACK_BUNDLE_STARTUP_COMMAND") + ? this->GetOption("CPACK_BUNDLE_STARTUP_COMMAND") : ""; + + // The staging directory contains everything that will end-up inside the + // final disk image ... + cmOStringStream staging; + staging << toplevel; + + cmOStringStream contents; + contents << staging.str() << "/" << cpack_bundle_name + << ".app/" << "Contents"; + + cmOStringStream application; + application << contents.str() << "/" << "MacOS"; + + cmOStringStream resources; + resources << contents.str() << "/" << "Resources"; + + // Install a required, user-provided bundle metadata file ... + cmOStringStream plist_source; + plist_source << cpack_bundle_plist; + + cmOStringStream plist_target; + plist_target << contents.str() << "/" << "Info.plist"; + + if(!this->CopyFile(plist_source, plist_target)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error copying plist. Check the value of CPACK_BUNDLE_PLIST." + << std::endl); + + return 0; + } + + // Install a user-provided bundle icon ... + cmOStringStream icon_source; + icon_source << cpack_bundle_icon; + + cmOStringStream icon_target; + icon_target << resources.str() << "/" << cpack_bundle_name << ".icns"; + + if(!this->CopyFile(icon_source, icon_target)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error copying bundle icon. Check the value of CPACK_BUNDLE_ICON." + << std::endl); + + return 0; + } + + // Optionally a user-provided startup command (could be an + // executable or a script) ... + if(!cpack_bundle_startup_command.empty()) + { + cmOStringStream command_source; + command_source << cpack_bundle_startup_command; + + cmOStringStream command_target; + command_target << application.str() << "/" << cpack_bundle_name; + + if(!this->CopyFile(command_source, command_target)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error copying startup command. " + " Check the value of CPACK_BUNDLE_STARTUP_COMMAND." + << std::endl); + + return 0; + } + + cmSystemTools::SetPermissions(command_target.str().c_str(), 0777); + } + + return this->CreateDMG(toplevel, packageFileNames[0]); +} + +bool cmCPackBundleGenerator::SupportsComponentInstallation() const +{ + return false; +} diff --git a/Source/CPack/cmCPackBundleGenerator.h b/Source/CPack/cmCPackBundleGenerator.h new file mode 100644 index 0000000..ed0187d --- /dev/null +++ b/Source/CPack/cmCPackBundleGenerator.h @@ -0,0 +1,40 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackBundleGenerator_h +#define cmCPackBundleGenerator_h + +#include "cmCPackDragNDropGenerator.h" + +/** \class cmCPackBundleGenerator + * \brief A generator for OSX bundles + * + * Based on Gimp.app + */ +class cmCPackBundleGenerator : public cmCPackDragNDropGenerator +{ +public: + cmCPackTypeMacro(cmCPackBundleGenerator, cmCPackDragNDropGenerator); + + cmCPackBundleGenerator(); + virtual ~cmCPackBundleGenerator(); + +protected: + virtual int InitializeInternal(); + virtual const char* GetPackagingInstallPrefix(); + int PackageFiles(); + bool SupportsComponentInstallation() const; + + std::string InstallPrefix; +}; + +#endif diff --git a/Source/CPack/cmCPackComponentGroup.cxx b/Source/CPack/cmCPackComponentGroup.cxx new file mode 100644 index 0000000..1d21fb1 --- /dev/null +++ b/Source/CPack/cmCPackComponentGroup.cxx @@ -0,0 +1,44 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackComponentGroup.h" +#include "cmSystemTools.h" +#include +#include + +//---------------------------------------------------------------------- +unsigned long cmCPackComponent::GetInstalledSize(const char* installDir) const +{ + if (this->TotalSize != 0) + { + return this->TotalSize; + } + + std::vector::const_iterator fileIt; + for (fileIt = this->Files.begin(); fileIt != this->Files.end(); ++fileIt) + { + std::string path = installDir; + path += '/'; + path += *fileIt; + this->TotalSize += cmSystemTools::FileLength(path.c_str()); + } + + return this->TotalSize; +} + +//---------------------------------------------------------------------- +unsigned long +cmCPackComponent::GetInstalledSizeInKbytes(const char* installDir) const +{ + unsigned long result = (GetInstalledSize(installDir) + 512) / 1024; + return result? result : 1; +} diff --git a/Source/CPack/cmCPackComponentGroup.h b/Source/CPack/cmCPackComponentGroup.h new file mode 100644 index 0000000..cebdd6d --- /dev/null +++ b/Source/CPack/cmCPackComponentGroup.h @@ -0,0 +1,138 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackComponentGroup_h +#define cmCPackComponentGroup_h + +#include "cmStandardIncludes.h" + +class cmCPackComponentGroup; + +/** \class cmCPackInstallationType + * \brief A certain type of installation, which encompasses a + * set of components. + */ +class cmCPackInstallationType +{ +public: + /// The name of the installation type (used to reference this + /// installation type). + std::string Name; + + /// The name of the installation type as displayed to the user. + std::string DisplayName; + + /// The index number of the installation type. This is an arbitrary + /// numbering from 1 to the number of installation types. + unsigned Index; +}; + +/** \class cmCPackComponent + * \brief A single component to be installed by CPack. + */ +class cmCPackComponent +{ +public: + cmCPackComponent() : Group(0), TotalSize(0) { } + + /// The name of the component (used to reference the component). + std::string Name; + + /// The name of the component as displayed to the user. + std::string DisplayName; + + /// The component group that contains this component (if any). + cmCPackComponentGroup *Group; + + /// Whether this component group must always be installed. + bool IsRequired : 1; + + /// Whether this component group is hidden. A hidden component group + /// is always installed. However, it may still be shown to the user. + bool IsHidden : 1; + + /// Whether this component defaults to "disabled". + bool IsDisabledByDefault : 1; + + /// Whether this component should be downloaded on-the-fly. If false, + /// the component will be a part of the installation package. + bool IsDownloaded : 1; + + /// A description of this component. + std::string Description; + + /// The installation types that this component is a part of. + std::vector InstallationTypes; + + /// If IsDownloaded is true, the name of the archive file that + /// contains the files that are part of this component. + std::string ArchiveFile; + + /// The components that this component depends on. + std::vector Dependencies; + + /// The components that depend on this component. + std::vector ReverseDependencies; + + /// The list of installed files that are part of this component. + std::vector Files; + + /// The list of installed directories that are part of this component. + std::vector Directories; + + /// Get the total installed size of all of the files in this + /// component, in bytes. installDir is the directory into which the + /// component was installed. + unsigned long GetInstalledSize(const char* installDir) const; + + /// Identical to GetInstalledSize, but returns the result in + /// kilobytes. + unsigned long GetInstalledSizeInKbytes(const char* installDir) const; + + private: + mutable unsigned long TotalSize; +}; + +/** \class cmCPackComponentGroup + * \brief A component group to be installed by CPack. + */ +class cmCPackComponentGroup +{ +public: + cmCPackComponentGroup() : ParentGroup(0) { } + + /// The name of the group (used to reference the group). + std::string Name; + + /// The name of the component as displayed to the user. + std::string DisplayName; + + /// The description of this component group. + std::string Description; + + /// Whether the name of the component will be shown in bold. + bool IsBold : 1; + + /// Whether the section should be expanded by default + bool IsExpandedByDefault : 1; + + /// The components within this group. + std::vector Components; + + /// The parent group of this component group (if any). + cmCPackComponentGroup *ParentGroup; + + /// The subgroups of this group. + std::vector Subgroups; +}; + +#endif diff --git a/Source/CPack/cmCPackConfigure.h.in b/Source/CPack/cmCPackConfigure.h.in new file mode 100644 index 0000000..3d7702e --- /dev/null +++ b/Source/CPack/cmCPackConfigure.h.in @@ -0,0 +1,11 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ diff --git a/Source/CPack/cmCPackCygwinBinaryGenerator.cxx b/Source/CPack/cmCPackCygwinBinaryGenerator.cxx new file mode 100644 index 0000000..6c8fc54 --- /dev/null +++ b/Source/CPack/cmCPackCygwinBinaryGenerator.cxx @@ -0,0 +1,92 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackCygwinBinaryGenerator.h" + +#include "cmake.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackLog.h" + +#include + +//---------------------------------------------------------------------- +cmCPackCygwinBinaryGenerator::cmCPackCygwinBinaryGenerator() +{ +} + +//---------------------------------------------------------------------- +cmCPackCygwinBinaryGenerator::~cmCPackCygwinBinaryGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackCygwinBinaryGenerator::InitializeInternal() +{ + this->SetOptionIfNotSet("CPACK_PACKAGING_INSTALL_PREFIX", "/usr"); + this->SetOptionIfNotSet("CPACK_INCLUDE_TOPLEVEL_DIRECTORY", "0"); + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +int cmCPackCygwinBinaryGenerator::PackageFiles() +{ + std::string packageName = this->GetOption("CPACK_PACKAGE_NAME"); + packageName += "-"; + packageName += this->GetOption("CPACK_PACKAGE_VERSION"); + packageName = cmsys::SystemTools::LowerCase(packageName); + std::string manifest = "/usr/share/doc/"; + manifest += packageName; + manifest += "/MANIFEST"; + std::string manifestFile + = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + // Create a MANIFEST file that contains all of the files in + // the tar file + std::string tempdir = manifestFile; + manifestFile += manifest; + // create an extra scope to force the stream + // to create the file before the super class is called + { + cmGeneratedFileStream ofs(manifestFile.c_str()); + for(std::vector::const_iterator i = files.begin(); + i != files.end(); ++i) + { + // remove the temp dir and replace with /usr + ofs << (*i).substr(tempdir.size()) << "\n"; + } + ofs << manifest << "\n"; + } + // add the manifest file to the list of all files + files.push_back(manifestFile); + + // create the bzip2 tar file + return this->Superclass::PackageFiles(); +} + +const char* cmCPackCygwinBinaryGenerator::GetOutputExtension() +{ + this->OutputExtension = "-"; + const char* patchNumber =this->GetOption("CPACK_CYGWIN_PATCH_NUMBER"); + if(!patchNumber) + { + patchNumber = "1"; + cmCPackLogger(cmCPackLog::LOG_WARNING, + "CPACK_CYGWIN_PATCH_NUMBER not specified using 1" + << std::endl); + } + this->OutputExtension += patchNumber; + this->OutputExtension += ".tar.bz2"; + return this->OutputExtension.c_str(); +} diff --git a/Source/CPack/cmCPackCygwinBinaryGenerator.h b/Source/CPack/cmCPackCygwinBinaryGenerator.h new file mode 100644 index 0000000..38f6df1 --- /dev/null +++ b/Source/CPack/cmCPackCygwinBinaryGenerator.h @@ -0,0 +1,38 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackCygwinBinaryGenerator_h +#define cmCPackCygwinBinaryGenerator_h + +#include "cmCPackTarBZip2Generator.h" + +/** \class cmCPackCygwinBinaryGenerator + * \brief A generator for TarBZip2 files + */ +class cmCPackCygwinBinaryGenerator : public cmCPackTarBZip2Generator +{ +public: + cmCPackTypeMacro(cmCPackCygwinBinaryGenerator, cmCPackTarBZip2Generator); + + /** + * Construct generator + */ + cmCPackCygwinBinaryGenerator(); + virtual ~cmCPackCygwinBinaryGenerator(); +protected: + virtual int InitializeInternal(); + int PackageFiles(); + virtual const char* GetOutputExtension(); + std::string OutputExtension; +}; + +#endif diff --git a/Source/CPack/cmCPackCygwinSourceGenerator.cxx b/Source/CPack/cmCPackCygwinSourceGenerator.cxx new file mode 100644 index 0000000..5979729 --- /dev/null +++ b/Source/CPack/cmCPackCygwinSourceGenerator.cxx @@ -0,0 +1,182 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackCygwinSourceGenerator.h" + +#include "cmake.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackLog.h" + +#include + +// Includes needed for implementation of RenameFile. This is not in +// system tools because it is not implemented robustly enough to move +// files across directories. +#ifdef _WIN32 +# include +# include +#endif + +//---------------------------------------------------------------------- +cmCPackCygwinSourceGenerator::cmCPackCygwinSourceGenerator() +{ +} + +//---------------------------------------------------------------------- +cmCPackCygwinSourceGenerator::~cmCPackCygwinSourceGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackCygwinSourceGenerator::InitializeInternal() +{ + this->SetOptionIfNotSet("CPACK_INCLUDE_TOPLEVEL_DIRECTORY", "0"); + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +int cmCPackCygwinSourceGenerator::PackageFiles() +{ + // Create a tar file of the sources + std::string packageDirFileName + = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + packageDirFileName += ".tar.bz2"; + packageFileNames[0] = packageDirFileName; + std::string output; + // skip one parent up to the cmCPackTarBZip2Generator + // to create tar.bz2 file with the list of source + // files + this->Compress = cmArchiveWrite::CompressBZip2; + if ( !this->cmCPackTarBZip2Generator::PackageFiles() ) + { + return 0; + } + // Now create a tar file that contains the above .tar.bz2 file + // and the CPACK_CYGWIN_PATCH_FILE and CPACK_TOPLEVEL_DIRECTORY + // files + std::string compressOutFile = packageDirFileName; + // at this point compressOutFile is the full path to + // _CPack_Package/.../package-2.5.0.tar.bz2 + // we want to create a tar _CPack_Package/.../package-2.5.0-1-src.tar.bz2 + // with these + // _CPack_Package/.../package-2.5.0-1.patch + // _CPack_Package/.../package-2.5.0-1.sh + // _CPack_Package/.../package-2.5.0.tar.bz2 + // the -1 is CPACK_CYGWIN_PATCH_NUMBER + + // first copy the patch file and the .sh file + // to the toplevel cpack temp dir + + // copy the patch file into place + if(!this->GetOption("CPACK_CYGWIN_PATCH_FILE")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "No patch file specified for cygwin sources."); + return 0; + } + if(!cmSystemTools::CopyFileAlways( + this->GetOption("CPACK_CYGWIN_PATCH_FILE"), + this->GetOption("CPACK_TOPLEVEL_DIRECTORY"))) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "problem copying: [" + << this->GetOption("CPACK_CYGWIN_PATCH_FILE") << "]\nto\n[" + << this->GetOption("CPACK_TOPLEVEL_DIRECTORY") << "]\n"); + return 0; + } + if(!this->GetOption("CPACK_CYGWIN_BUILD_SCRIPT")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "No build script specified for cygwin sources."); + return 0; + } + // copy the build script into place + if(!cmSystemTools::CopyFileAlways( + this->GetOption("CPACK_CYGWIN_BUILD_SCRIPT"), + this->GetOption("CPACK_TOPLEVEL_DIRECTORY"))) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "problem copying: " + << this->GetOption("CPACK_CYGWIN_BUILD_SCRIPT") << "\nto\n" + << this->GetOption("CPACK_TOPLEVEL_DIRECTORY") << "]\n"); + return 0; + } + std::string outerTarFile + = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + outerTarFile += "-"; + const char* patch = this->GetOption("CPACK_CYGWIN_PATCH_NUMBER"); + if(!patch) + { + cmCPackLogger(cmCPackLog::LOG_WARNING, "CPACK_CYGWIN_PATCH_NUMBER" + << " not specified, defaulting to 1\n"); + patch = "1"; + } + outerTarFile += patch; + outerTarFile += "-src.tar.bz2"; + std::string tmpDir = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + std::string buildScript = tmpDir; + buildScript += "/"; + buildScript += cmSystemTools::GetFilenameName( + this->GetOption("CPACK_CYGWIN_BUILD_SCRIPT")); + std::string patchFile = tmpDir; + patchFile += "/"; + patchFile += cmSystemTools::GetFilenameName( + this->GetOption("CPACK_CYGWIN_PATCH_FILE")); + + std::string file = cmSystemTools::GetFilenameName(compressOutFile); + std::string sourceTar = cmSystemTools::GetFilenamePath(compressOutFile); + sourceTar += "/"; + sourceTar += file; + /* reset list of file to be packaged */ + files.clear(); + // a source release in cygwin should have the build script used + // to build the package, the patch file that is different from the + // regular upstream version of the sources, and a bziped tar file + // of the original sources + files.push_back(buildScript); + files.push_back(patchFile); + files.push_back(sourceTar); + /* update the name of the produced package */ + packageFileNames[0] = outerTarFile; + /* update the toplevel dir */ + toplevel = tmpDir; + if ( !this->cmCPackTarBZip2Generator::PackageFiles() ) + { + return 0; + } + return 1; +} + +const char* cmCPackCygwinSourceGenerator::GetPackagingInstallPrefix() +{ + this->InstallPrefix = "/"; + this->InstallPrefix += this->GetOption("CPACK_PACKAGE_FILE_NAME"); + return this->InstallPrefix.c_str(); +} + +const char* cmCPackCygwinSourceGenerator::GetOutputExtension() +{ + this->OutputExtension = "-"; + const char* patch = this->GetOption("CPACK_CYGWIN_PATCH_NUMBER"); + if(!patch) + { + cmCPackLogger(cmCPackLog::LOG_WARNING, "CPACK_CYGWIN_PATCH_NUMBER" + << " not specified, defaulting to 1\n"); + patch = "1"; + } + this->OutputExtension += patch; + this->OutputExtension += "-src.tar.bz2"; + return this->OutputExtension.c_str(); +} + diff --git a/Source/CPack/cmCPackCygwinSourceGenerator.h b/Source/CPack/cmCPackCygwinSourceGenerator.h new file mode 100644 index 0000000..9d98a9b --- /dev/null +++ b/Source/CPack/cmCPackCygwinSourceGenerator.h @@ -0,0 +1,40 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackCygwinSourceGenerator_h +#define cmCPackCygwinSourceGenerator_h + +#include "cmCPackTarBZip2Generator.h" + +/** \class cmCPackCygwinSourceGenerator + * \brief A generator for cygwin source files + */ +class cmCPackCygwinSourceGenerator : public cmCPackTarBZip2Generator +{ +public: + cmCPackTypeMacro(cmCPackCygwinSourceGenerator, cmCPackTarBZip2Generator); + + /** + * Construct generator + */ + cmCPackCygwinSourceGenerator(); + virtual ~cmCPackCygwinSourceGenerator(); +protected: + const char* GetPackagingInstallPrefix(); + virtual int InitializeInternal(); + int PackageFiles(); + virtual const char* GetOutputExtension(); + std::string InstallPrefix; + std::string OutputExtension; +}; + +#endif diff --git a/Source/CPack/cmCPackDebGenerator.cxx b/Source/CPack/cmCPackDebGenerator.cxx new file mode 100644 index 0000000..178a18d --- /dev/null +++ b/Source/CPack/cmCPackDebGenerator.cxx @@ -0,0 +1,828 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCPackDebGenerator.h" + +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackLog.h" + +#include +#include + +#include // USHRT_MAX + +// NOTE: +// A debian package .deb is simply an 'ar' archive. The only subtle difference +// is that debian uses the BSD ar style archive whereas most Linux distro have +// a GNU ar. +// See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=161593 for more info +// Therefore we provide our own implementation of a BSD-ar: +static int ar_append(const char*archive,const std::vector& files); + +//---------------------------------------------------------------------- +cmCPackDebGenerator::cmCPackDebGenerator() +{ +} + +//---------------------------------------------------------------------- +cmCPackDebGenerator::~cmCPackDebGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackDebGenerator::InitializeInternal() +{ + this->SetOptionIfNotSet("CPACK_PACKAGING_INSTALL_PREFIX", "/usr"); + if (cmSystemTools::IsOff(this->GetOption("CPACK_SET_DESTDIR"))) + { + this->SetOption("CPACK_SET_DESTDIR", "I_ON"); + } + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +int cmCPackDebGenerator::PackageOnePack(std::string initialTopLevel, + std::string packageName) + { + int retval = 1; + // Begin the archive for this pack + std::string localToplevel(initialTopLevel); + std::string packageFileName( + cmSystemTools::GetParentDirectory(toplevel.c_str()) + ); + std::string outputFileName( + std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")) + +"-"+packageName + this->GetOutputExtension() + ); + + localToplevel += "/"+ packageName; + /* replace the TEMP DIRECTORY with the component one */ + this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str()); + packageFileName += "/"+ outputFileName; + /* replace proposed CPACK_OUTPUT_FILE_NAME */ + this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str()); + /* replace the TEMPORARY package file name */ + this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME", + packageFileName.c_str()); + // Tell CPackDeb.cmake the name of the component GROUP. + this->SetOption("CPACK_DEB_PACKAGE_COMPONENT",packageName.c_str()); + if (!this->ReadListFile("CPackDeb.cmake")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error while execution CPackDeb.cmake" << std::endl); + retval = 0; + return retval; + } + + cmsys::Glob gl; + std::string findExpr(this->GetOption("WDIR")); + findExpr += "/*"; + gl.RecurseOn(); + if ( !gl.FindFiles(findExpr) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot find any files in the installed directory" << std::endl); + return 0; + } + packageFiles = gl.GetFiles(); + + int res = createDeb(); + if (res != 1) + { + retval = 0; + } + // add the generated package to package file names list + packageFileNames.push_back(packageFileName); + return retval; +} + +//---------------------------------------------------------------------- +int cmCPackDebGenerator::PackageComponents(bool ignoreGroup) +{ + int retval = 1; + /* Reset package file name list it will be populated during the + * component packaging run*/ + packageFileNames.clear(); + std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY")); + + // The default behavior is to have one package by component group + // unless CPACK_COMPONENTS_IGNORE_GROUP is specified. + if (!ignoreGroup) + { + std::map::iterator compGIt; + for (compGIt=this->ComponentGroups.begin(); + compGIt!=this->ComponentGroups.end(); ++compGIt) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Packaging component group: " + << compGIt->first + << std::endl); + // Begin the archive for this group + retval &= PackageOnePack(initialTopLevel,compGIt->first); + } + // Handle Orphan components (components not belonging to any groups) + std::map::iterator compIt; + for (compIt=this->Components.begin(); + compIt!=this->Components.end(); ++compIt ) + { + // Does the component belong to a group? + if (compIt->second.Group==NULL) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Component <" + << compIt->second.Name + << "> does not belong to any group, package it separately." + << std::endl); + // Begin the archive for this orphan component + retval &= PackageOnePack(initialTopLevel,compIt->first); + } + } + } + // CPACK_COMPONENTS_IGNORE_GROUPS is set + // We build 1 package per component + else + { + std::map::iterator compIt; + for (compIt=this->Components.begin(); + compIt!=this->Components.end(); ++compIt ) + { + retval &= PackageOnePack(initialTopLevel,compIt->first); + } + } + return retval; +} + +//---------------------------------------------------------------------- +int cmCPackDebGenerator::PackageComponentsAllInOne() +{ + int retval = 1; + std::string compInstDirName; + /* Reset package file name list it will be populated during the + * component packaging run*/ + packageFileNames.clear(); + std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY")); + + compInstDirName = "ALL_COMPONENTS_IN_ONE"; + + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Packaging all groups in one package..." + "(CPACK_COMPONENTS_ALL_[GROUPS_]IN_ONE_PACKAGE is set)" + << std::endl); + + // The ALL GROUPS in ONE package case + std::string localToplevel(initialTopLevel); + std::string packageFileName( + cmSystemTools::GetParentDirectory(toplevel.c_str()) + ); + std::string outputFileName( + std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")) + + this->GetOutputExtension() + ); + // all GROUP in one vs all COMPONENT in one + localToplevel += "/"+compInstDirName; + + /* replace the TEMP DIRECTORY with the component one */ + this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str()); + packageFileName += "/"+ outputFileName; + /* replace proposed CPACK_OUTPUT_FILE_NAME */ + this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str()); + /* replace the TEMPORARY package file name */ + this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME", + packageFileName.c_str()); + // Tell CPackDeb.cmake the name of the component GROUP. + this->SetOption("CPACK_DEB_PACKAGE_COMPONENT",compInstDirName.c_str()); + if (!this->ReadListFile("CPackDeb.cmake")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error while execution CPackDeb.cmake" << std::endl); + retval = 0; + return retval; + } + + cmsys::Glob gl; + std::string findExpr(this->GetOption("WDIR")); + findExpr += "/*"; + gl.RecurseOn(); + if ( !gl.FindFiles(findExpr) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot find any files in the installed directory" << std::endl); + return 0; + } + packageFiles = gl.GetFiles(); + + int res = createDeb(); + if (res != 1) + { + retval = 0; + } + // add the generated package to package file names list + packageFileNames.push_back(packageFileName); + return retval; +} + +//---------------------------------------------------------------------- +int cmCPackDebGenerator::PackageFiles() +{ + int retval = -1; + + /* Are we in the component packaging case */ + if (WantsComponentInstallation()) { + // CASE 1 : COMPONENT ALL-IN-ONE package + // If ALL GROUPS or ALL COMPONENTS in ONE package has been requested + // then the package file is unique and should be open here. + if (componentPackageMethod == ONE_PACKAGE) + { + return PackageComponentsAllInOne(); + } + // CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one) + // There will be 1 package for each component group + // however one may require to ignore component group and + // in this case you'll get 1 package for each component. + else + { + return PackageComponents(componentPackageMethod == + ONE_PACKAGE_PER_COMPONENT); + } + } + // CASE 3 : NON COMPONENT package. + else + { + if (!this->ReadListFile("CPackDeb.cmake")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error while execution CPackDeb.cmake" << std::endl); + retval = 0; + } + else + { + packageFiles = files; + return createDeb(); + } + } + return retval; +} + +int cmCPackDebGenerator::createDeb() +{ + const char* cmakeExecutable = this->GetOption("CMAKE_COMMAND"); + + // debian-binary file + std::string dbfilename; + dbfilename += this->GetOption("WDIR"); + dbfilename += "/debian-binary"; + { // the scope is needed for cmGeneratedFileStream + cmGeneratedFileStream out(dbfilename.c_str()); + out << "2.0"; + out << std::endl; // required for valid debian package + } + + // control file + std::string ctlfilename; + ctlfilename = this->GetOption("WDIR"); + ctlfilename += "/control"; + + // debian policy enforce lower case for package name + // mandatory entries: + std::string debian_pkg_name = cmsys::SystemTools::LowerCase( + this->GetOption("CPACK_DEBIAN_PACKAGE_NAME") ); + const char* debian_pkg_version = + this->GetOption("CPACK_DEBIAN_PACKAGE_VERSION"); + const char* debian_pkg_section = + this->GetOption("CPACK_DEBIAN_PACKAGE_SECTION"); + const char* debian_pkg_priority = + this->GetOption("CPACK_DEBIAN_PACKAGE_PRIORITY"); + const char* debian_pkg_arch = + this->GetOption("CPACK_DEBIAN_PACKAGE_ARCHITECTURE"); + const char* maintainer = this->GetOption("CPACK_DEBIAN_PACKAGE_MAINTAINER"); + const char* desc = this->GetOption("CPACK_DEBIAN_PACKAGE_DESCRIPTION"); + + // optional entries + const char* debian_pkg_dep = this->GetOption("CPACK_DEBIAN_PACKAGE_DEPENDS"); + const char* debian_pkg_rec = + this->GetOption("CPACK_DEBIAN_PACKAGE_RECOMMENDS"); + const char* debian_pkg_sug = + this->GetOption("CPACK_DEBIAN_PACKAGE_SUGGESTS"); + const char* debian_pkg_url = + this->GetOption("CPACK_DEBIAN_PACKAGE_HOMEPAGE"); + const char* debian_pkg_predep = + this->GetOption("CPACK_DEBIAN_PACKAGE_PREDEPENDS"); + const char* debian_pkg_enhances = + this->GetOption("CPACK_DEBIAN_PACKAGE_ENHANCES"); + const char* debian_pkg_breaks = + this->GetOption("CPACK_DEBIAN_PACKAGE_BREAKS"); + const char* debian_pkg_conflicts = + this->GetOption("CPACK_DEBIAN_PACKAGE_CONFLICTS"); + const char* debian_pkg_provides = + this->GetOption("CPACK_DEBIAN_PACKAGE_PROVIDES"); + const char* debian_pkg_replaces = + this->GetOption("CPACK_DEBIAN_PACKAGE_REPLACES"); + + { // the scope is needed for cmGeneratedFileStream + cmGeneratedFileStream out(ctlfilename.c_str()); + out << "Package: " << debian_pkg_name << "\n"; + out << "Version: " << debian_pkg_version << "\n"; + out << "Section: " << debian_pkg_section << "\n"; + out << "Priority: " << debian_pkg_priority << "\n"; + out << "Architecture: " << debian_pkg_arch << "\n"; + if(debian_pkg_dep && *debian_pkg_dep) + { + out << "Depends: " << debian_pkg_dep << "\n"; + } + if(debian_pkg_rec && *debian_pkg_rec) + { + out << "Recommends: " << debian_pkg_rec << "\n"; + } + if(debian_pkg_sug && *debian_pkg_sug) + { + out << "Suggests: " << debian_pkg_sug << "\n"; + } + if(debian_pkg_url && *debian_pkg_url) + { + out << "Homepage: " << debian_pkg_url << "\n"; + } + if (debian_pkg_predep && *debian_pkg_predep) + { + out << "Pre-Depends: " << debian_pkg_predep << "\n"; + } + if (debian_pkg_enhances && *debian_pkg_enhances) + { + out << "Enhances: " << debian_pkg_enhances << "\n"; + } + if (debian_pkg_breaks && *debian_pkg_breaks) + { + out << "Breaks: " << debian_pkg_breaks << "\n"; + } + if (debian_pkg_conflicts && *debian_pkg_conflicts) + { + out << "Conflicts: " << debian_pkg_conflicts << "\n"; + } + if (debian_pkg_provides && *debian_pkg_provides) + { + out << "Provides: " << debian_pkg_provides << "\n"; + } + if (debian_pkg_replaces && *debian_pkg_replaces) + { + out << "Replaces: " << debian_pkg_replaces << "\n"; + } + unsigned long totalSize = 0; + { + std::string dirName = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + dirName += '/'; + for (std::vector::const_iterator fileIt = + packageFiles.begin(); + fileIt != packageFiles.end(); ++ fileIt ) + { + totalSize += cmSystemTools::FileLength(fileIt->c_str()); + } + } + out << "Installed-Size: " << (totalSize + 1023) / 1024 << "\n"; + out << "Maintainer: " << maintainer << "\n"; + out << "Description: " << desc << "\n"; + out << std::endl; + } + + std::string cmd; + if (NULL != this->GetOption("CPACK_DEBIAN_FAKEROOT_EXECUTABLE")) { + cmd += this->GetOption("CPACK_DEBIAN_FAKEROOT_EXECUTABLE"); + } + cmd += " \""; + cmd += cmakeExecutable; + cmd += "\" -E tar cfz data.tar.gz "; + + // now add all directories which have to be compressed + // collect all top level install dirs for that + // e.g. /opt/bin/foo, /usr/bin/bar and /usr/bin/baz would give /usr and /opt + size_t topLevelLength = std::string(this->GetOption("WDIR")).length(); + cmCPackLogger(cmCPackLog::LOG_DEBUG, "WDIR: \"" << this->GetOption("WDIR") + << "\", length = " << topLevelLength + << std::endl); + std::set installDirs; + for (std::vector::const_iterator fileIt = + packageFiles.begin(); + fileIt != packageFiles.end(); ++ fileIt ) + { + cmCPackLogger(cmCPackLog::LOG_DEBUG, "FILEIT: \"" << *fileIt << "\"" + << std::endl); + std::string::size_type slashPos = fileIt->find('/', topLevelLength+1); + std::string relativeDir = fileIt->substr(topLevelLength, + slashPos - topLevelLength); + cmCPackLogger(cmCPackLog::LOG_DEBUG, "RELATIVEDIR: \"" << relativeDir + << "\"" << std::endl); + if (installDirs.find(relativeDir) == installDirs.end()) + { + installDirs.insert(relativeDir); + cmd += " ."; + cmd += relativeDir; + } + } + + std::string output; + int retval = -1; + int res = cmSystemTools::RunSingleCommand(cmd.c_str(), &output, + &retval, this->GetOption("WDIR"), this->GeneratorVerbose, 0); + + if ( !res || retval ) + { + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/Deb.log"; + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << cmd.c_str() << std::endl + << "# Working directory: " << toplevel << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running tar command: " + << cmd.c_str() << std::endl + << "Please check " << tmpFile.c_str() << " for errors" << std::endl); + return 0; + } + + std::string md5filename; + md5filename = this->GetOption("WDIR"); + md5filename += "/md5sums"; + + { // the scope is needed for cmGeneratedFileStream + cmGeneratedFileStream out(md5filename.c_str()); + std::vector::const_iterator fileIt; +// std::string topLevelWithTrailingSlash = toplevel; + std::string topLevelWithTrailingSlash = + this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + topLevelWithTrailingSlash += '/'; + for ( fileIt = packageFiles.begin(); + fileIt != packageFiles.end(); ++ fileIt ) + { + cmd = "\""; + cmd += cmakeExecutable; + cmd += "\" -E md5sum \""; + cmd += *fileIt; + cmd += "\""; + //std::string output; + //int retVal = -1; + res = cmSystemTools::RunSingleCommand(cmd.c_str(), &output, + &retval, toplevel.c_str(), this->GeneratorVerbose, 0); + // debian md5sums entries are like this: + // 014f3604694729f3bf19263bac599765 usr/bin/ccmake + // thus strip the full path (with the trailing slash) + cmSystemTools::ReplaceString(output, + topLevelWithTrailingSlash.c_str(), ""); + out << output; + } + // each line contains a eol. + // Do not end the md5sum file with yet another (invalid) + } + + cmd = "\""; + cmd += cmakeExecutable; + cmd += "\" -E tar cfz control.tar.gz ./control ./md5sums"; + const char* controlExtra = + this->GetOption("CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA"); + if( controlExtra ) + { + std::vector controlExtraList; + cmSystemTools::ExpandListArgument(controlExtra, controlExtraList); + for(std::vector::iterator i = + controlExtraList.begin(); i != controlExtraList.end(); ++i) + { + std::string filenamename = + cmsys::SystemTools::GetFilenameName(i->c_str()); + std::string localcopy = this->GetOption("WDIR"); + localcopy += "/"; + localcopy += filenamename; + // if we can copy the file, it means it does exist, let's add it: + if( cmsys::SystemTools::CopyFileIfDifferent( + i->c_str(), localcopy.c_str()) ) + { + // debian is picky and need relative to ./ path in the tar.gz + cmd += " ./"; + cmd += filenamename; + } + } + } + res = cmSystemTools::RunSingleCommand(cmd.c_str(), &output, + &retval, this->GetOption("WDIR"), this->GeneratorVerbose, 0); + + if ( !res || retval ) + { + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/Deb.log"; + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << cmd.c_str() << std::endl + << "# Working directory: " << toplevel << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running tar command: " + << cmd.c_str() << std::endl + << "Please check " << tmpFile.c_str() << " for errors" << std::endl); + return 0; + } + + // ar -r your-package-name.deb debian-binary control.tar.gz data.tar.gz + // since debian packages require BSD ar (most Linux distros and even + // FreeBSD and NetBSD ship GNU ar) we use a copy of OpenBSD ar here. + std::vector arFiles; + std::string topLevelString = this->GetOption("WDIR"); + topLevelString += "/"; + arFiles.push_back(topLevelString + "debian-binary"); + arFiles.push_back(topLevelString + "control.tar.gz"); + arFiles.push_back(topLevelString + "data.tar.gz"); + std::string outputFileName = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + outputFileName += "/"; + outputFileName += this->GetOption("CPACK_OUTPUT_FILE_NAME"); + res = ar_append(outputFileName.c_str(), arFiles); + if ( res!=0 ) + { + std::string tmpFile = this->GetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME"); + tmpFile += "/Deb.log"; + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Problem creating archive using: " << res << std::endl; + return 0; + } + return 1; +} + +bool cmCPackDebGenerator::SupportsComponentInstallation() const + { + if (IsOn("CPACK_DEB_COMPONENT_INSTALL")) + { + return true; + } + else + { + return false; + } + } + +std::string cmCPackDebGenerator::GetComponentInstallDirNameSuffix( + const std::string& componentName) + { + if (componentPackageMethod == ONE_PACKAGE_PER_COMPONENT) { + return componentName; + } + + if (componentPackageMethod == ONE_PACKAGE) { + return std::string("ALL_COMPONENTS_IN_ONE"); + } + // We have to find the name of the COMPONENT GROUP + // the current COMPONENT belongs to. + std::string groupVar = "CPACK_COMPONENT_" + + cmSystemTools::UpperCase(componentName) + "_GROUP"; + if (NULL != GetOption(groupVar.c_str())) + { + return std::string(GetOption(groupVar.c_str())); + } + else + { + return componentName; + } + } + + +// The following code is taken from OpenBSD ar: +// http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ar/ +// It has been slightly modified: +// -return error codes instead exit() in functions +// -use the stdio file I/O functions instead the file descriptor based ones +// -merged into one cxx file +// -no additional options supported +// The coding style hasn't been modified. + +/*- + * Copyright (c) 1990, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Hugh Smith at The University of Guelph. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include + +#include +#include +#include + +#define ARMAG "!\n" /* ar "magic number" */ +#define SARMAG 8 /* strlen(ARMAG); */ + +#define AR_EFMT1 "#1/" /* extended format #1 */ +#define ARFMAG "`\n" + +/* Header format strings. */ +#define HDR1 "%s%-13d%-12ld%-6u%-6u%-8o%-10lld%2s" +#define HDR2 "%-16.16s%-12ld%-6u%-6u%-8o%-10lld%2s" + +struct ar_hdr { + char ar_name[16]; /* name */ + char ar_date[12]; /* modification time */ + char ar_uid[6]; /* user id */ + char ar_gid[6]; /* group id */ + char ar_mode[8]; /* octal file permissions */ + char ar_size[10]; /* size in bytes */ + char ar_fmag[2]; /* consistency check */ +}; + +/* Set up file copy. */ +#define SETCF(from, fromname, to, toname, pad) { \ + cf.rFile = from; \ + cf.rname = fromname; \ + cf.wFile = to; \ + cf.wname = toname; \ + cf.flags = pad; \ +} + +/* File copy structure. */ +typedef struct { + FILE* rFile; /* read file descriptor */ + const char *rname; /* read name */ + FILE* wFile; /* write file descriptor */ + const char *wname; /* write name */ +#define NOPAD 0x00 /* don't pad */ +#define WPAD 0x02 /* pad on writes */ + unsigned int flags; /* pad flags */ +} CF; + +/* misc.c */ + +static const char * ar_rname(const char *path) +{ + const char *ind = strrchr(path, '/'); + return (ind ) ? ind + 1 : path; +} + +/* archive.c */ + +typedef struct ar_hdr HDR; +static char ar_hb[sizeof(HDR) + 1]; /* real header */ + +static size_t ar_already_written; + +/* copy_ar -- + * Copy size bytes from one file to another - taking care to handle the + * extra byte (for odd size files) when reading archives and writing an + * extra byte if necessary when adding files to archive. The length of + * the object is the long name plus the object itself; the variable + * already_written gets set if a long name was written. + * + * The padding is really unnecessary, and is almost certainly a remnant + * of early archive formats where the header included binary data which + * a PDP-11 required to start on an even byte boundary. (Or, perhaps, + * because 16-bit word addressed copies were faster?) Anyhow, it should + * have been ripped out long ago. + */ +static int copy_ar(CF *cfp, off_t size) +{ + static char pad = '\n'; + off_t sz = size; + size_t nr, nw; + char buf[8*1024]; + + if (sz == 0) + return 0; + + FILE* from = cfp->rFile; + FILE* to = cfp->wFile; + while (sz && + (nr = fread(buf, 1, sz < static_cast(sizeof(buf)) + ? static_cast(sz) : sizeof(buf), from )) + > 0) { + sz -= nr; + for (size_t off = 0; off < nr; nr -= off, off += nw) + if ((nw = fwrite(buf + off, 1, nr, to)) < nr) + return -1; + } + if (sz) + return -2; + + if (cfp->flags & WPAD && (size + ar_already_written) & 1 + && fwrite(&pad, 1, 1, to) != 1) + return -4; + + return 0; +} + +/* put_arobj -- Write an archive member to a file. */ +static int put_arobj(CF *cfp, struct stat *sb) +{ + int result = 0; + struct ar_hdr *hdr; + + /* If passed an sb structure, reading a file from disk. Get stat(2) + * information, build a name and construct a header. (Files are named + * by their last component in the archive.) */ + const char* name = ar_rname(cfp->rname); + (void)stat(cfp->rname, sb); + + /* If not truncating names and the name is too long or contains + * a space, use extended format 1. */ + size_t lname = strlen(name); + uid_t uid = sb->st_uid; + gid_t gid = sb->st_gid; + if (uid > USHRT_MAX) { + uid = USHRT_MAX; + } + if (gid > USHRT_MAX) { + gid = USHRT_MAX; + } + if (lname > sizeof(hdr->ar_name) || strchr(name, ' ')) + (void)sprintf(ar_hb, HDR1, AR_EFMT1, (int)lname, + (long int)sb->st_mtime, uid, gid, sb->st_mode, + (long long)sb->st_size + lname, ARFMAG); + else { + lname = 0; + (void)sprintf(ar_hb, HDR2, name, + (long int)sb->st_mtime, uid, gid, sb->st_mode, + (long long)sb->st_size, ARFMAG); + } + off_t size = sb->st_size; + + if (fwrite(ar_hb, 1, sizeof(HDR), cfp->wFile) != sizeof(HDR)) + return -1; + + if (lname) { + if (fwrite(name, 1, lname, cfp->wFile) != lname) + return -2; + ar_already_written = lname; + } + result = copy_ar(cfp, size); + ar_already_written = 0; + return result; +} + +/* append.c */ + +/* append -- + * Append files to the archive - modifies original archive or creates + * a new archive if named archive does not exist. + */ +static int ar_append(const char* archive,const std::vector& files) +{ + int eval = 0; + FILE* aFile = fopen(archive, "wb+"); + if (aFile!=NULL) { + fwrite(ARMAG, SARMAG, 1, aFile); + if (fseek(aFile, 0, SEEK_END) != -1) { + CF cf; + struct stat sb; + /* Read from disk, write to an archive; pad on write. */ + SETCF(NULL, 0, aFile, archive, WPAD); + for(std::vector::const_iterator fileIt = files.begin(); + fileIt!=files.end(); ++fileIt) { + const char* filename = fileIt->c_str(); + FILE* file = fopen(filename, "rb"); + if (file == NULL) { + eval = -1; + continue; + } + cf.rFile = file; + cf.rname = filename; + int result = put_arobj(&cf, &sb); + (void)fclose(file); + if (result!=0) { + eval = -2; + break; + } + } + } + else { + eval = -3; + } + fclose(aFile); + } + else { + eval = -4; + } + return eval; +} diff --git a/Source/CPack/cmCPackDebGenerator.h b/Source/CPack/cmCPackDebGenerator.h new file mode 100644 index 0000000..f536c47 --- /dev/null +++ b/Source/CPack/cmCPackDebGenerator.h @@ -0,0 +1,63 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackDebGenerator_h +#define cmCPackDebGenerator_h + + +#include "cmCPackGenerator.h" + +/** \class cmCPackDebGenerator + * \brief A generator for Debian packages + * + */ +class cmCPackDebGenerator : public cmCPackGenerator +{ +public: + cmCPackTypeMacro(cmCPackDebGenerator, cmCPackGenerator); + + /** + * Construct generator + */ + cmCPackDebGenerator(); + virtual ~cmCPackDebGenerator(); + +protected: + virtual int InitializeInternal(); + /** + * This method factors out the work done in component packaging case. + */ + int PackageOnePack(std::string initialToplevel, std::string packageName); + /** + * The method used to package files when component + * install is used. This will create one + * archive for each component group. + */ + int PackageComponents(bool ignoreGroup); + /** + * Special case of component install where all + * components will be put in a single installer. + */ + int PackageComponentsAllInOne(); + virtual int PackageFiles(); + virtual const char* GetOutputExtension() { return ".deb"; } + virtual bool SupportsComponentInstallation() const; + virtual std::string GetComponentInstallDirNameSuffix( + const std::string& componentName); + +private: + int createDeb(); + std::vector packageFiles; + +}; + +#endif diff --git a/Source/CPack/cmCPackDocumentMacros.cxx b/Source/CPack/cmCPackDocumentMacros.cxx new file mode 100644 index 0000000..ddc75a4 --- /dev/null +++ b/Source/CPack/cmCPackDocumentMacros.cxx @@ -0,0 +1,16 @@ +#include "cmCPackDocumentMacros.h" + +void cmCPackDocumentMacros::GetMacrosDocumentation( + std::vector& ) +{ + // Commented-out example of use + // + // cmDocumentationEntry e("cpack_", + // "Brief Description" + // "which may be on several lines.", + // "Long description in pre-formatted format" + // " blah\n" + // " blah\n" + //); + //v.push_back(e); +} diff --git a/Source/CPack/cmCPackDocumentMacros.h b/Source/CPack/cmCPackDocumentMacros.h new file mode 100644 index 0000000..544f74f --- /dev/null +++ b/Source/CPack/cmCPackDocumentMacros.h @@ -0,0 +1,21 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCPackDocumentMacros_h +#define cmCPackDocumentMacros_h +#include "cmStandardIncludes.h" +class cmCPackDocumentMacros +{ +public: + static void GetMacrosDocumentation(std::vector& v); +}; + +#endif diff --git a/Source/CPack/cmCPackDocumentVariables.cxx b/Source/CPack/cmCPackDocumentVariables.cxx new file mode 100644 index 0000000..d2e3802 --- /dev/null +++ b/Source/CPack/cmCPackDocumentVariables.cxx @@ -0,0 +1,80 @@ +#include "cmCPackDocumentVariables.h" +#include "cmake.h" + +void cmCPackDocumentVariables::DefineVariables(cmake* cm) +{ + // Subsection: variables defined/used by cpack, + // which are common to all CPack generators + + cm->DefineProperty + ("CPACK_PACKAGING_INSTALL_PREFIX", cmProperty::VARIABLE, + "The prefix used in the built package.", + "Each CPack generator has a default value (like /usr)." + " This default value may" + " be overwritten from the CMakeLists.txt or the cpack command line" + " by setting an alternative value.\n" + "e.g. " + " set(CPACK_PACKAGING_INSTALL_PREFIX \"/opt\")\n" + "This is not the same purpose as CMAKE_INSTALL_PREFIX which" + " is used when installing from the build tree without building" + " a package." + "", false, + "Variables common to all CPack generators"); + + 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/cmCPackDocumentVariables.h b/Source/CPack/cmCPackDocumentVariables.h new file mode 100644 index 0000000..e7971be --- /dev/null +++ b/Source/CPack/cmCPackDocumentVariables.h @@ -0,0 +1,21 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCPackDocumentVariables_h +#define cmCPackDocumentVariables_h +class cmake; +class cmCPackDocumentVariables +{ +public: + static void DefineVariables(cmake* cm); +}; + +#endif diff --git a/Source/CPack/cmCPackDragNDropGenerator.cxx b/Source/CPack/cmCPackDragNDropGenerator.cxx new file mode 100644 index 0000000..6aee401 --- /dev/null +++ b/Source/CPack/cmCPackDragNDropGenerator.cxx @@ -0,0 +1,588 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackDragNDropGenerator.h" +#include "cmCPackLog.h" +#include "cmSystemTools.h" +#include "cmGeneratedFileStream.h" + +#include + +static const char* SLAHeader = +"data 'LPic' (5000) {\n" +" $\"0002 0011 0003 0001 0000 0000 0002 0000\"\n" +" $\"0008 0003 0000 0001 0004 0000 0004 0005\"\n" +" $\"0000 000E 0006 0001 0005 0007 0000 0007\"\n" +" $\"0008 0000 0047 0009 0000 0034 000A 0001\"\n" +" $\"0035 000B 0001 0020 000C 0000 0011 000D\"\n" +" $\"0000 005B 0004 0000 0033 000F 0001 000C\"\n" +" $\"0010 0000 000B 000E 0000\"\n" +"};\n" +"\n"; + +static const char* SLASTREnglish = +"resource 'STR#' (5002, \"English\") {\n" +" {\n" +" \"English\",\n" +" \"Agree\",\n" +" \"Disagree\",\n" +" \"Print\",\n" +" \"Save...\",\n" +" \"You agree to the License Agreement terms when you click \"\n" +" \"the \\\"Agree\\\" button.\",\n" +" \"Software License Agreement\",\n" +" \"This text cannot be saved. This disk may be full or locked, " +"or the \"\n" +" \"file may be locked.\",\n" +" \"Unable to print. Make sure you have selected a printer.\"\n" +" }\n" +"};\n" +"\n"; + +//---------------------------------------------------------------------- +cmCPackDragNDropGenerator::cmCPackDragNDropGenerator() +{ + // default to one package file for components + this->componentPackageMethod = ONE_PACKAGE; +} + +//---------------------------------------------------------------------- +cmCPackDragNDropGenerator::~cmCPackDragNDropGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackDragNDropGenerator::InitializeInternal() +{ + // Starting with Xcode 4.3, look in "/Applications/Xcode.app" first: + // + std::vector paths; + paths.push_back("/Applications/Xcode.app/Contents/Developer/Tools"); + paths.push_back("/Developer/Tools"); + + const std::string hdiutil_path = cmSystemTools::FindProgram("hdiutil", + std::vector(), false); + if(hdiutil_path.empty()) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot locate hdiutil command" + << std::endl); + return 0; + } + this->SetOptionIfNotSet("CPACK_COMMAND_HDIUTIL", hdiutil_path.c_str()); + + const std::string setfile_path = cmSystemTools::FindProgram("SetFile", + paths, false); + if(setfile_path.empty()) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot locate SetFile command" + << std::endl); + return 0; + } + this->SetOptionIfNotSet("CPACK_COMMAND_SETFILE", setfile_path.c_str()); + + const std::string rez_path = cmSystemTools::FindProgram("Rez", + paths, false); + if(rez_path.empty()) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot locate Rez command" + << std::endl); + return 0; + } + this->SetOptionIfNotSet("CPACK_COMMAND_REZ", rez_path.c_str()); + + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +const char* cmCPackDragNDropGenerator::GetOutputExtension() +{ + return ".dmg"; +} + +//---------------------------------------------------------------------- +int cmCPackDragNDropGenerator::PackageFiles() +{ + // gather which directories to make dmg files for + // multiple directories occur if packaging components or groups separately + + // monolith + if(this->Components.empty()) + { + return this->CreateDMG(toplevel, packageFileNames[0]); + } + + // component install + std::vector package_files; + + std::map::iterator compIt; + for (compIt=this->Components.begin(); + compIt!=this->Components.end(); ++compIt ) + { + std::string name = GetComponentInstallDirNameSuffix(compIt->first); + package_files.push_back(name); + } + std::sort(package_files.begin(), package_files.end()); + package_files.erase(std::unique(package_files.begin(), + package_files.end()), + package_files.end()); + + + // loop to create dmg files + packageFileNames.clear(); + for(size_t i=0; iGetOption("CPACK_PACKAGE_FILE_NAME"); + } + else + { + full_package_name += package_files[i]; + } + full_package_name += std::string(GetOutputExtension()); + packageFileNames.push_back(full_package_name); + + std::string src_dir = toplevel; + src_dir += "/"; + src_dir += package_files[i]; + + if(0 == this->CreateDMG(src_dir, full_package_name)) + { + return 0; + } + } + return 1; +} + +//---------------------------------------------------------------------- +bool cmCPackDragNDropGenerator::CopyFile(cmOStringStream& source, + cmOStringStream& target) +{ + if(!cmSystemTools::CopyFileIfDifferent( + source.str().c_str(), + target.str().c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error copying " + << source.str() + << " to " + << target.str() + << std::endl); + + return false; + } + + return true; +} + +//---------------------------------------------------------------------- +bool cmCPackDragNDropGenerator::RunCommand(cmOStringStream& command, + std::string* output) +{ + int exit_code = 1; + + bool result = cmSystemTools::RunSingleCommand( + command.str().c_str(), + output, + &exit_code, + 0, + this->GeneratorVerbose, + 0); + + if(!result || exit_code) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error executing: " + << command.str() + << std::endl); + + return false; + } + + return true; +} + +//---------------------------------------------------------------------- +int cmCPackDragNDropGenerator::CreateDMG(const std::string& src_dir, + const std::string& output_file) +{ + // Get optional arguments ... + const std::string cpack_package_icon = this->GetOption("CPACK_PACKAGE_ICON") + ? this->GetOption("CPACK_PACKAGE_ICON") : ""; + + const std::string cpack_dmg_volume_name = + this->GetOption("CPACK_DMG_VOLUME_NAME") + ? this->GetOption("CPACK_DMG_VOLUME_NAME") + : this->GetOption("CPACK_PACKAGE_FILE_NAME"); + + const std::string cpack_dmg_format = + this->GetOption("CPACK_DMG_FORMAT") + ? this->GetOption("CPACK_DMG_FORMAT") : "UDZO"; + + // Get optional arguments ... + std::string cpack_license_file = + this->GetOption("CPACK_RESOURCE_FILE_LICENSE") ? + this->GetOption("CPACK_RESOURCE_FILE_LICENSE") : ""; + + const std::string cpack_dmg_background_image = + this->GetOption("CPACK_DMG_BACKGROUND_IMAGE") + ? this->GetOption("CPACK_DMG_BACKGROUND_IMAGE") : ""; + + const std::string cpack_dmg_ds_store = + this->GetOption("CPACK_DMG_DS_STORE") + ? this->GetOption("CPACK_DMG_DS_STORE") : ""; + + // only put license on dmg if is user provided + if(!cpack_license_file.empty() && + cpack_license_file.find("CPack.GenericLicense.txt") != std::string::npos) + { + cpack_license_file = ""; + } + + // The staging directory contains everything that will end-up inside the + // final disk image ... + cmOStringStream staging; + staging << src_dir; + + // Add a symlink to /Applications so users can drag-and-drop the bundle + // into it + cmOStringStream application_link; + application_link << staging.str() << "/Applications"; + cmSystemTools::CreateSymlink("/Applications", + application_link.str().c_str()); + + // Optionally add a custom volume icon ... + if(!cpack_package_icon.empty()) + { + cmOStringStream package_icon_source; + package_icon_source << cpack_package_icon; + + cmOStringStream package_icon_destination; + package_icon_destination << staging.str() << "/.VolumeIcon.icns"; + + if(!this->CopyFile(package_icon_source, package_icon_destination)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error copying disk volume icon. " + "Check the value of CPACK_PACKAGE_ICON." + << std::endl); + + return 0; + } + } + + // Optionally add a custom .DS_Store file + // (e.g. for setting background/layout) ... + if(!cpack_dmg_ds_store.empty()) + { + cmOStringStream package_settings_source; + package_settings_source << cpack_dmg_ds_store; + + cmOStringStream package_settings_destination; + package_settings_destination << staging.str() << "/.DS_Store"; + + if(!this->CopyFile(package_settings_source, package_settings_destination)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error copying disk volume settings file. " + "Check the value of CPACK_DMG_DS_STORE." + << std::endl); + + return 0; + } + } + + // Optionally add a custom background image ... + if(!cpack_dmg_background_image.empty()) + { + cmOStringStream package_background_source; + package_background_source << cpack_dmg_background_image; + + cmOStringStream package_background_destination; + package_background_destination << staging.str() << "/background.png"; + + if(!this->CopyFile(package_background_source, + package_background_destination)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error copying disk volume background image. " + "Check the value of CPACK_DMG_BACKGROUND_IMAGE." + << std::endl); + + return 0; + } + + cmOStringStream temp_background_hiding_command; + temp_background_hiding_command << this->GetOption("CPACK_COMMAND_SETFILE"); + temp_background_hiding_command << " -a V \""; + temp_background_hiding_command << package_background_destination.str(); + temp_background_hiding_command << "\""; + + if(!this->RunCommand(temp_background_hiding_command)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error setting attributes on disk volume background image." + << std::endl); + + return 0; + } + } + + // Create a temporary read-write disk image ... + std::string temp_image = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + temp_image += "/temp.dmg"; + + cmOStringStream temp_image_command; + temp_image_command << this->GetOption("CPACK_COMMAND_HDIUTIL"); + temp_image_command << " create"; + temp_image_command << " -ov"; + temp_image_command << " -srcfolder \"" << staging.str() << "\""; + temp_image_command << " -volname \"" + << cpack_dmg_volume_name << "\""; + temp_image_command << " -format UDRW"; + temp_image_command << " \"" << temp_image << "\""; + + if(!this->RunCommand(temp_image_command)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error generating temporary disk image." + << std::endl); + + return 0; + } + + // Optionally set the custom icon flag for the image ... + if(!cpack_package_icon.empty()) + { + cmOStringStream temp_mount; + + cmOStringStream attach_command; + attach_command << this->GetOption("CPACK_COMMAND_HDIUTIL"); + attach_command << " attach"; + attach_command << " \"" << temp_image << "\""; + + std::string attach_output; + if(!this->RunCommand(attach_command, &attach_output)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error attaching temporary disk image." + << std::endl); + + return 0; + } + + cmsys::RegularExpression mountpoint_regex(".*(/Volumes/[^\n]+)\n.*"); + mountpoint_regex.find(attach_output.c_str()); + temp_mount << mountpoint_regex.match(1); + + cmOStringStream setfile_command; + setfile_command << this->GetOption("CPACK_COMMAND_SETFILE"); + setfile_command << " -a C"; + setfile_command << " \"" << temp_mount.str() << "\""; + + if(!this->RunCommand(setfile_command)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error assigning custom icon to temporary disk image." + << std::endl); + + return 0; + } + + cmOStringStream detach_command; + detach_command << this->GetOption("CPACK_COMMAND_HDIUTIL"); + detach_command << " detach"; + detach_command << " \"" << temp_mount.str() << "\""; + + if(!this->RunCommand(detach_command)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error detaching temporary disk image." + << std::endl); + + return 0; + } + } + + if(!cpack_license_file.empty()) + { + std::string sla_r = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + sla_r += "/sla.r"; + + std::ifstream ifs; + ifs.open(cpack_license_file.c_str()); + if(ifs.is_open()) + { + cmGeneratedFileStream osf(sla_r.c_str()); + osf << "#include \n\n"; + osf << SLAHeader; + osf << "\n"; + osf << "data 'TEXT' (5002, \"English\") {\n"; + while(ifs.good()) + { + std::string line; + std::getline(ifs, line); + // escape quotes + std::string::size_type pos = line.find('\"'); + while(pos != std::string::npos) + { + line.replace(pos, 1, "\\\""); + pos = line.find('\"', pos+2); + } + osf << " \"" << line << "\\n\"\n"; + } + osf << "};\n"; + osf << "\n"; + osf << SLASTREnglish; + ifs.close(); + osf.close(); + } + + // convert to UDCO + std::string temp_udco = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + temp_udco += "/temp-udco.dmg"; + + cmOStringStream udco_image_command; + udco_image_command << this->GetOption("CPACK_COMMAND_HDIUTIL"); + udco_image_command << " convert \"" << temp_image << "\""; + udco_image_command << " -format UDCO"; + udco_image_command << " -o \"" << temp_udco << "\""; + + std::string error; + if(!this->RunCommand(udco_image_command, &error)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error converting to UDCO dmg for adding SLA." << std::endl + << error + << std::endl); + return 0; + } + + // unflatten dmg + cmOStringStream unflatten_command; + unflatten_command << this->GetOption("CPACK_COMMAND_HDIUTIL"); + unflatten_command << " unflatten "; + unflatten_command << "\"" << temp_udco << "\""; + + if(!this->RunCommand(unflatten_command, &error)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error unflattening dmg for adding SLA." << std::endl + << error + << std::endl); + return 0; + } + + // Rez the SLA + cmOStringStream embed_sla_command; + embed_sla_command << this->GetOption("CPACK_COMMAND_REZ"); + embed_sla_command << " \"" << sla_r << "\""; + embed_sla_command << " -a -o "; + embed_sla_command << "\"" << temp_udco << "\""; + + if(!this->RunCommand(embed_sla_command, &error)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error adding SLA." << std::endl + << error + << std::endl); + return 0; + } + + // flatten dmg + cmOStringStream flatten_command; + flatten_command << this->GetOption("CPACK_COMMAND_HDIUTIL"); + flatten_command << " flatten "; + flatten_command << "\"" << temp_udco << "\""; + + if(!this->RunCommand(flatten_command, &error)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error flattening dmg for adding SLA." << std::endl + << error + << std::endl); + return 0; + } + + temp_image = temp_udco; + } + + + // Create the final compressed read-only disk image ... + cmOStringStream final_image_command; + final_image_command << this->GetOption("CPACK_COMMAND_HDIUTIL"); + final_image_command << " convert \"" << temp_image << "\""; + final_image_command << " -format "; + final_image_command << cpack_dmg_format; + final_image_command << " -imagekey"; + final_image_command << " zlib-level=9"; + final_image_command << " -o \"" << output_file << "\""; + + if(!this->RunCommand(final_image_command)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error compressing disk image." + << std::endl); + + return 0; + } + + return 1; +} + +bool cmCPackDragNDropGenerator::SupportsComponentInstallation() const +{ + return true; +} + +std::string +cmCPackDragNDropGenerator::GetComponentInstallDirNameSuffix( + const std::string& componentName) +{ + // we want to group components together that go in the same dmg package + std::string package_file_name = this->GetOption("CPACK_PACKAGE_FILE_NAME"); + + // we have 3 mutually exclusive modes to work in + // 1. all components in one package + // 2. each group goes in its own package with left over + // components in their own package + // 3. ignore groups - if grouping is defined, it is ignored + // and each component goes in its own package + + if(this->componentPackageMethod == ONE_PACKAGE) + { + return "ALL_IN_ONE"; + } + + if(this->componentPackageMethod == ONE_PACKAGE_PER_GROUP) + { + // We have to find the name of the COMPONENT GROUP + // the current COMPONENT belongs to. + std::string groupVar = "CPACK_COMPONENT_" + + cmSystemTools::UpperCase(componentName) + "_GROUP"; + const char* _groupName = GetOption(groupVar.c_str()); + if (_groupName) + { + std::string groupName = _groupName; + + groupName = GetComponentPackageFileName(package_file_name, + groupName, true); + return groupName; + } + } + + return GetComponentPackageFileName(package_file_name, componentName, false); +} diff --git a/Source/CPack/cmCPackDragNDropGenerator.h b/Source/CPack/cmCPackDragNDropGenerator.h new file mode 100644 index 0000000..808c618 --- /dev/null +++ b/Source/CPack/cmCPackDragNDropGenerator.h @@ -0,0 +1,47 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackDragNDropGenerator_h +#define cmCPackDragNDropGenerator_h + +#include "cmCPackGenerator.h" + +/** \class cmCPackDragNDropGenerator + * \brief A generator for OSX drag-n-drop installs + */ +class cmCPackDragNDropGenerator : public cmCPackGenerator +{ +public: + cmCPackTypeMacro(cmCPackDragNDropGenerator, cmCPackGenerator); + + cmCPackDragNDropGenerator(); + virtual ~cmCPackDragNDropGenerator(); + +protected: + virtual int InitializeInternal(); + virtual const char* GetOutputExtension(); + int PackageFiles(); + bool SupportsComponentInstallation() const; + + + bool CopyFile(cmOStringStream& source, cmOStringStream& target); + bool RunCommand(cmOStringStream& command, std::string* output = 0); + + std::string + GetComponentInstallDirNameSuffix(const std::string& componentName); + + int CreateDMG(const std::string& src_dir, const std::string& output_file); + + std::string InstallPrefix; +}; + +#endif diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx new file mode 100644 index 0000000..0f832b3 --- /dev/null +++ b/Source/CPack/cmCPackGenerator.cxx @@ -0,0 +1,1619 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackGenerator.h" + +#include "cmMakefile.h" +#include "cmCPackLog.h" +#include "cmake.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackComponentGroup.h" +#include "cmXMLSafe.h" + +#include +#include +#include // auto_ptr +#include + +#if defined(__HAIKU__) +#include +#endif + +//---------------------------------------------------------------------- +cmCPackGenerator::cmCPackGenerator() +{ + this->GeneratorVerbose = cmSystemTools::OUTPUT_NONE; + this->MakefileMap = 0; + this->Logger = 0; + this->componentPackageMethod = ONE_PACKAGE_PER_GROUP; +} + +//---------------------------------------------------------------------- +cmCPackGenerator::~cmCPackGenerator() +{ + this->MakefileMap = 0; +} + +//---------------------------------------------------------------------- +void cmCPackGeneratorProgress(const char *msg, float prog, void* ptr) +{ + cmCPackGenerator* self = static_cast(ptr); + self->DisplayVerboseOutput(msg, prog); +} + +//---------------------------------------------------------------------- +void cmCPackGenerator::DisplayVerboseOutput(const char* msg, + float progress) +{ + (void)progress; + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "" << msg << std::endl); +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::PrepareNames() +{ + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "Create temp directory." << std::endl); + + std::string tempDirectory = this->GetOption("CPACK_PACKAGE_DIRECTORY"); + tempDirectory += "/_CPack_Packages/"; + const char* toplevelTag = this->GetOption("CPACK_TOPLEVEL_TAG"); + if ( toplevelTag ) + { + tempDirectory += toplevelTag; + tempDirectory += "/"; + } + tempDirectory += this->GetOption("CPACK_GENERATOR"); + std::string topDirectory = tempDirectory; + this->GetOption("CPACK_PACKAGE_FILE_NAME"); + const char* pfname = this->GetOption("CPACK_PACKAGE_FILE_NAME"); + if(!pfname) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_PACKAGE_FILE_NAME not specified" << std::endl); + return 0; + } + std::string outName = pfname; + tempDirectory += "/" + outName; + if(!this->GetOutputExtension()) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "No output extension specified" << std::endl); + return 0; + } + outName += this->GetOutputExtension(); + const char* pdir = this->GetOption("CPACK_PACKAGE_DIRECTORY"); + if(!pdir) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_PACKAGE_DIRECTORY not specified" << std::endl); + return 0; + } + + std::string destFile = pdir; + this->SetOptionIfNotSet("CPACK_OUTPUT_FILE_PREFIX", destFile.c_str()); + destFile += "/" + outName; + std::string outFile = topDirectory + "/" + outName; + this->SetOptionIfNotSet("CPACK_TOPLEVEL_DIRECTORY", topDirectory.c_str()); + this->SetOptionIfNotSet("CPACK_TEMPORARY_DIRECTORY", tempDirectory.c_str()); + this->SetOptionIfNotSet("CPACK_OUTPUT_FILE_NAME", outName.c_str()); + this->SetOptionIfNotSet("CPACK_OUTPUT_FILE_PATH", destFile.c_str()); + this->SetOptionIfNotSet("CPACK_TEMPORARY_PACKAGE_FILE_NAME", + outFile.c_str()); + this->SetOptionIfNotSet("CPACK_INSTALL_DIRECTORY", this->GetInstallPath()); + this->SetOptionIfNotSet("CPACK_NATIVE_INSTALL_DIRECTORY", + cmsys::SystemTools::ConvertToOutputPath(this->GetInstallPath()).c_str()); + this->SetOptionIfNotSet("CPACK_TEMPORARY_INSTALL_DIRECTORY", + tempDirectory.c_str()); + + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "Look for: CPACK_PACKAGE_DESCRIPTION_FILE" << std::endl); + const char* descFileName + = this->GetOption("CPACK_PACKAGE_DESCRIPTION_FILE"); + if ( descFileName ) + { + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "Look for: " << descFileName << std::endl); + if ( !cmSystemTools::FileExists(descFileName) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot find description file name: [" + << descFileName << "]" << std::endl); + return 0; + } + std::ifstream ifs(descFileName); + if ( !ifs ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot open description file name: " << descFileName << std::endl); + return 0; + } + cmOStringStream ostr; + std::string line; + + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Read description file: " << descFileName << std::endl); + while ( ifs && cmSystemTools::GetLineFromStream(ifs, line) ) + { + ostr << cmXMLSafe(line) << std::endl; + } + this->SetOptionIfNotSet("CPACK_PACKAGE_DESCRIPTION", ostr.str().c_str()); + } + if ( !this->GetOption("CPACK_PACKAGE_DESCRIPTION") ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Project description not specified. Please specify " + "CPACK_PACKAGE_DESCRIPTION or CPACK_PACKAGE_DESCRIPTION_FILE." + << std::endl); + return 0; + } + + this->SetOptionIfNotSet("CPACK_REMOVE_TOPLEVEL_DIRECTORY", "1"); + + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::InstallProject() +{ + cmCPackLogger(cmCPackLog::LOG_OUTPUT, "Install projects" << std::endl); + this->CleanTemporaryDirectory(); + + std::string bareTempInstallDirectory + = this->GetOption("CPACK_TEMPORARY_INSTALL_DIRECTORY"); + std::string tempInstallDirectoryStr = bareTempInstallDirectory; + bool setDestDir = cmSystemTools::IsOn(this->GetOption("CPACK_SET_DESTDIR")) + | cmSystemTools::IsInternallyOn( + this->GetOption("CPACK_SET_DESTDIR")); + if (!setDestDir) + { + tempInstallDirectoryStr += this->GetPackagingInstallPrefix(); + } + + const char* tempInstallDirectory = tempInstallDirectoryStr.c_str(); + int res = 1; + if ( !cmsys::SystemTools::MakeDirectory(bareTempInstallDirectory.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem creating temporary directory: " + << (tempInstallDirectory ? tempInstallDirectory : "(NULL}") + << std::endl); + return 0; + } + + if ( setDestDir ) + { + std::string destDir = "DESTDIR="; + destDir += tempInstallDirectory; + cmSystemTools::PutEnv(destDir.c_str()); + } + else + { + // Make sure there is no destdir + cmSystemTools::PutEnv("DESTDIR="); + } + + // If the CPackConfig file sets CPACK_INSTALL_COMMANDS then run them + // as listed + if ( !this->InstallProjectViaInstallCommands( + setDestDir, tempInstallDirectory) ) + { + return 0; + } + + // If the CPackConfig file sets CPACK_INSTALL_SCRIPT then run them + // as listed + if ( !this->InstallProjectViaInstallScript( + setDestDir, tempInstallDirectory) ) + { + return 0; + } + + // If the CPackConfig file sets CPACK_INSTALLED_DIRECTORIES + // then glob it and copy it to CPACK_TEMPORARY_DIRECTORY + // This is used in Source packaging + if ( !this->InstallProjectViaInstalledDirectories( + setDestDir, tempInstallDirectory) ) + { + return 0; + } + + + // If the project is a CMAKE project then run pre-install + // and then read the cmake_install script to run it + if ( !this->InstallProjectViaInstallCMakeProjects( + setDestDir, bareTempInstallDirectory.c_str()) ) + { + return 0; + } + + if ( setDestDir ) + { + cmSystemTools::PutEnv("DESTDIR="); + } + + return res; +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::InstallProjectViaInstallCommands( + bool setDestDir, const char* tempInstallDirectory) +{ + (void) setDestDir; + const char* installCommands = this->GetOption("CPACK_INSTALL_COMMANDS"); + if ( installCommands && *installCommands ) + { + std::string tempInstallDirectoryEnv = "CMAKE_INSTALL_PREFIX="; + tempInstallDirectoryEnv += tempInstallDirectory; + cmSystemTools::PutEnv(tempInstallDirectoryEnv.c_str()); + std::vector installCommandsVector; + cmSystemTools::ExpandListArgument(installCommands,installCommandsVector); + std::vector::iterator it; + for ( it = installCommandsVector.begin(); + it != installCommandsVector.end(); + ++it ) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Execute: " << it->c_str() + << std::endl); + std::string output; + int retVal = 1; + bool resB = cmSystemTools::RunSingleCommand(it->c_str(), &output, + &retVal, 0, this->GeneratorVerbose, 0); + if ( !resB || retVal ) + { + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/InstallOutput.log"; + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << it->c_str() << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem running install command: " << it->c_str() << std::endl + << "Please check " << tmpFile.c_str() << " for errors" + << std::endl); + return 0; + } + } + } + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::InstallProjectViaInstalledDirectories( + bool setDestDir, const char* tempInstallDirectory) +{ + (void)setDestDir; + (void)tempInstallDirectory; + std::vector ignoreFilesRegex; + const char* cpackIgnoreFiles = this->GetOption("CPACK_IGNORE_FILES"); + if ( cpackIgnoreFiles ) + { + std::vector ignoreFilesRegexString; + cmSystemTools::ExpandListArgument(cpackIgnoreFiles, + ignoreFilesRegexString); + std::vector::iterator it; + for ( it = ignoreFilesRegexString.begin(); + it != ignoreFilesRegexString.end(); + ++it ) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Create ignore files regex for: " << it->c_str() << std::endl); + ignoreFilesRegex.push_back(it->c_str()); + } + } + const char* installDirectories + = this->GetOption("CPACK_INSTALLED_DIRECTORIES"); + if ( installDirectories && *installDirectories ) + { + std::vector installDirectoriesVector; + cmSystemTools::ExpandListArgument(installDirectories, + installDirectoriesVector); + if ( installDirectoriesVector.size() % 2 != 0 ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_INSTALLED_DIRECTORIES should contain pairs of and " + ". The can be '.' to be installed in " + "the toplevel directory of installation." << std::endl); + return 0; + } + std::vector::iterator it; + const char* tempDir = tempInstallDirectory; + for ( it = installDirectoriesVector.begin(); + it != installDirectoriesVector.end(); + ++it ) + { + std::list > symlinkedFiles; + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Find files" << std::endl); + cmsys::Glob gl; + std::string top = it->c_str(); + it ++; + std::string subdir = it->c_str(); + std::string findExpr = top; + findExpr += "/*"; + cmCPackLogger(cmCPackLog::LOG_OUTPUT, + "- Install directory: " << top << std::endl); + gl.RecurseOn(); + if ( !gl.FindFiles(findExpr) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot find any files in the installed directory" << std::endl); + return 0; + } + files = gl.GetFiles(); + std::vector::iterator gfit; + std::vector::iterator regIt; + for ( gfit = files.begin(); gfit != files.end(); ++ gfit ) + { + bool skip = false; + std::string &inFile = *gfit; + for ( regIt= ignoreFilesRegex.begin(); + regIt!= ignoreFilesRegex.end(); + ++ regIt) + { + if ( regIt->find(inFile.c_str()) ) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Ignore file: " + << inFile.c_str() << std::endl); + skip = true; + } + } + if ( skip ) + { + continue; + } + std::string filePath = tempDir; + filePath += "/" + subdir + "/" + + cmSystemTools::RelativePath(top.c_str(), gfit->c_str()); + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Copy file: " + << inFile.c_str() << " -> " << filePath.c_str() << std::endl); + /* If the file is a symlink we will have to re-create it */ + if ( cmSystemTools::FileIsSymlink(inFile.c_str())) + { + std::string targetFile; + std::string inFileRelative = + cmSystemTools::RelativePath(top.c_str(),inFile.c_str()); + cmSystemTools::ReadSymlink(inFile.c_str(),targetFile); + symlinkedFiles.push_back(std::pair(targetFile,inFileRelative)); + } + /* If it is not a symlink then do a plain copy */ + else if ( !cmSystemTools::CopyFileIfDifferent(inFile.c_str(), + filePath.c_str()) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem copying file: " + << inFile.c_str() << " -> " << filePath.c_str() << std::endl); + return 0; + } + } + /* rebuild symlinks in the installed tree */ + if (symlinkedFiles.size()>0) + { + std::list< std::pair >::iterator symlinkedIt; + std::string curDir = cmSystemTools::GetCurrentWorkingDirectory(); + std::string goToDir = tempDir; + goToDir += "/"+subdir; + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "Change dir to: " << goToDir <second << "--> " + << symlinkedIt->first << std::endl); + if (!cmSystemTools::CreateSymlink((symlinkedIt->first).c_str(), + (symlinkedIt->second).c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot create symlink: " + << symlinkedIt->second << "--> " + << symlinkedIt->first << std::endl); + return 0; + } + } + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Going back to: " + << curDir <GetOption("CPACK_INSTALL_SCRIPT"); + if ( cmakeScripts && *cmakeScripts ) + { + cmCPackLogger(cmCPackLog::LOG_OUTPUT, + "- Install scripts: " << cmakeScripts << std::endl); + std::vector cmakeScriptsVector; + cmSystemTools::ExpandListArgument(cmakeScripts, + cmakeScriptsVector); + std::vector::iterator it; + for ( it = cmakeScriptsVector.begin(); + it != cmakeScriptsVector.end(); + ++it ) + { + std::string installScript = it->c_str(); + + cmCPackLogger(cmCPackLog::LOG_OUTPUT, + "- Install script: " << installScript << std::endl); + + if ( setDestDir ) + { + // For DESTDIR based packaging, use the *project* CMAKE_INSTALL_PREFIX + // underneath the tempInstallDirectory. The value of the project's + // CMAKE_INSTALL_PREFIX is sent in here as the value of the + // CPACK_INSTALL_PREFIX variable. + + std::string dir; + if (this->GetOption("CPACK_INSTALL_PREFIX")) + { + dir += this->GetOption("CPACK_INSTALL_PREFIX"); + } + this->SetOption("CMAKE_INSTALL_PREFIX", dir.c_str()); + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "- Using DESTDIR + CPACK_INSTALL_PREFIX... (this->SetOption)" + << std::endl); + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "- Setting CMAKE_INSTALL_PREFIX to '" << dir << "'" << std::endl); + } + else + { + this->SetOption("CMAKE_INSTALL_PREFIX", tempInstallDirectory); + + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "- Using non-DESTDIR install... (this->SetOption)" << std::endl); + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "- Setting CMAKE_INSTALL_PREFIX to '" << tempInstallDirectory + << "'" << std::endl); + } + + this->SetOptionIfNotSet("CMAKE_CURRENT_BINARY_DIR", + tempInstallDirectory); + this->SetOptionIfNotSet("CMAKE_CURRENT_SOURCE_DIR", + tempInstallDirectory); + int res = this->MakefileMap->ReadListFile(0, installScript.c_str()); + if ( cmSystemTools::GetErrorOccuredFlag() || !res ) + { + return 0; + } + } + } + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::InstallProjectViaInstallCMakeProjects( + bool setDestDir, const char* baseTempInstallDirectory) +{ + const char* cmakeProjects + = this->GetOption("CPACK_INSTALL_CMAKE_PROJECTS"); + const char* cmakeGenerator + = this->GetOption("CPACK_CMAKE_GENERATOR"); + std::string absoluteDestFiles; + if ( cmakeProjects && *cmakeProjects ) + { + if ( !cmakeGenerator ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_INSTALL_CMAKE_PROJECTS is specified, but " + "CPACK_CMAKE_GENERATOR is not. CPACK_CMAKE_GENERATOR " + "is required to install the project." + << std::endl); + return 0; + } + std::vector cmakeProjectsVector; + cmSystemTools::ExpandListArgument(cmakeProjects, + cmakeProjectsVector); + std::vector::iterator it; + for ( it = cmakeProjectsVector.begin(); + it != cmakeProjectsVector.end(); + ++it ) + { + if ( it+1 == cmakeProjectsVector.end() || + it+2 == cmakeProjectsVector.end() || + it+3 == cmakeProjectsVector.end() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Not enough items on list: CPACK_INSTALL_CMAKE_PROJECTS. " + "CPACK_INSTALL_CMAKE_PROJECTS should hold quadruplet of install " + "directory, install project name, install component, and install " + "subdirectory." + << std::endl); + return 0; + } + std::string installDirectory = it->c_str(); + ++it; + std::string installProjectName = it->c_str(); + ++it; + std::string installComponent = it->c_str(); + ++it; + std::string installSubDirectory = it->c_str(); + std::string installFile = installDirectory + "/cmake_install.cmake"; + + std::vector componentsVector; + + bool componentInstall = false; + /* + * We do a component install iff + * - the CPack generator support component + * - the user did not request Monolithic install + * (this works at CPack time too) + */ + if (this->SupportsComponentInstallation() & + !(this->IsSet("CPACK_MONOLITHIC_INSTALL"))) + { + // Determine the installation types for this project (if provided). + std::string installTypesVar = "CPACK_" + + cmSystemTools::UpperCase(installComponent) + "_INSTALL_TYPES"; + const char *installTypes = this->GetOption(installTypesVar.c_str()); + if (installTypes && *installTypes) + { + std::vector installTypesVector; + cmSystemTools::ExpandListArgument(installTypes, installTypesVector); + std::vector::iterator installTypeIt; + for (installTypeIt = installTypesVector.begin(); + installTypeIt != installTypesVector.end(); + ++installTypeIt) + { + this->GetInstallationType(installProjectName.c_str(), + installTypeIt->c_str()); + } + } + + // Determine the set of components that will be used in this project + std::string componentsVar + = "CPACK_COMPONENTS_" + cmSystemTools::UpperCase(installComponent); + const char *components = this->GetOption(componentsVar.c_str()); + if (components && *components) + { + cmSystemTools::ExpandListArgument(components, componentsVector); + std::vector::iterator compIt; + for (compIt = componentsVector.begin(); + compIt != componentsVector.end(); + ++compIt) + { + GetComponent(installProjectName.c_str(), compIt->c_str()); + } + componentInstall = true; + } + } + if (componentsVector.empty()) + { + componentsVector.push_back(installComponent); + } + + const char* buildConfig = this->GetOption("CPACK_BUILD_CONFIG"); + cmGlobalGenerator* globalGenerator + = this->MakefileMap->GetCMakeInstance()->CreateGlobalGenerator( + cmakeGenerator); + // set the global flag for unix style paths on cmSystemTools as + // soon as the generator is set. This allows gmake to be used + // on windows. + cmSystemTools::SetForceUnixPaths(globalGenerator->GetForceUnixPaths()); + + // Does this generator require pre-install? + if ( globalGenerator->GetPreinstallTargetName() ) + { + globalGenerator->FindMakeProgram(this->MakefileMap); + const char* cmakeMakeProgram + = this->MakefileMap->GetDefinition("CMAKE_MAKE_PROGRAM"); + std::string buildCommand + = globalGenerator->GenerateBuildCommand(cmakeMakeProgram, + installProjectName.c_str(), 0, + globalGenerator->GetPreinstallTargetName(), + buildConfig, false, false); + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "- Install command: " << buildCommand << std::endl); + cmCPackLogger(cmCPackLog::LOG_OUTPUT, + "- Run preinstall target for: " << installProjectName << std::endl); + std::string output; + int retVal = 1; + bool resB = + cmSystemTools::RunSingleCommand(buildCommand.c_str(), + &output, + &retVal, + installDirectory.c_str(), + this->GeneratorVerbose, 0); + if ( !resB || retVal ) + { + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/PreinstallOutput.log"; + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << buildCommand.c_str() << std::endl + << "# Directory: " << installDirectory.c_str() << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem running install command: " << buildCommand.c_str() + << std::endl + << "Please check " << tmpFile.c_str() << " for errors" + << std::endl); + return 0; + } + } + delete globalGenerator; + + cmCPackLogger(cmCPackLog::LOG_OUTPUT, + "- Install project: " << installProjectName << std::endl); + + // Run the installation for each component + std::vector::iterator componentIt; + for (componentIt = componentsVector.begin(); + componentIt != componentsVector.end(); + ++componentIt) + { + std::string tempInstallDirectory = baseTempInstallDirectory; + installComponent = *componentIt; + if (componentInstall) + { + cmCPackLogger(cmCPackLog::LOG_OUTPUT, + "- Install component: " << installComponent + << std::endl); + } + + cmake cm; + cm.AddCMakePaths(); + cm.SetProgressCallback(cmCPackGeneratorProgress, this); + cmGlobalGenerator gg; + gg.SetCMakeInstance(&cm); + std::auto_ptr lg(gg.CreateLocalGenerator()); + cmMakefile *mf = lg->GetMakefile(); + std::string realInstallDirectory = tempInstallDirectory; + if ( !installSubDirectory.empty() && installSubDirectory != "/" ) + { + realInstallDirectory += installSubDirectory; + } + if (componentInstall) + { + tempInstallDirectory += "/"; + // Some CPack generators would rather chose + // the local installation directory suffix. + // Some (e.g. RPM) use + // one install directory for each component **GROUP** + // instead of the default + // one install directory for each component. + tempInstallDirectory += + GetComponentInstallDirNameSuffix(installComponent); + if (this->IsOn("CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY")) + { + tempInstallDirectory += "/"; + tempInstallDirectory += this->GetOption("CPACK_PACKAGE_FILE_NAME"); + } + } + + if (!setDestDir) + { + tempInstallDirectory += this->GetPackagingInstallPrefix(); + } + + if ( setDestDir ) + { + // For DESTDIR based packaging, use the *project* + // CMAKE_INSTALL_PREFIX underneath the tempInstallDirectory. The + // value of the project's CMAKE_INSTALL_PREFIX is sent in here as + // the value of the CPACK_INSTALL_PREFIX variable. + // + // If DESTDIR has been 'internally set ON' this means that + // the underlying CPack specific generator did ask for that + // In this case we may override CPACK_INSTALL_PREFIX with + // CPACK_PACKAGING_INSTALL_PREFIX + // I know this is tricky and awkward but it's the price for + // CPACK_SET_DESTDIR backward compatibility. + if (cmSystemTools::IsInternallyOn( + this->GetOption("CPACK_SET_DESTDIR"))) + { + this->SetOption("CPACK_INSTALL_PREFIX", + this->GetOption("CPACK_PACKAGING_INSTALL_PREFIX")); + } + std::string dir; + if (this->GetOption("CPACK_INSTALL_PREFIX")) + { + dir += this->GetOption("CPACK_INSTALL_PREFIX"); + } + mf->AddDefinition("CMAKE_INSTALL_PREFIX", dir.c_str()); + + cmCPackLogger( + cmCPackLog::LOG_DEBUG, + "- Using DESTDIR + CPACK_INSTALL_PREFIX... (mf->AddDefinition)" + << std::endl); + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "- Setting CMAKE_INSTALL_PREFIX to '" << dir << "'" + << std::endl); + + // Make sure that DESTDIR + CPACK_INSTALL_PREFIX directory + // exists: + // + if (cmSystemTools::StringStartsWith(dir.c_str(), "/")) + { + dir = tempInstallDirectory + dir; + } + else + { + dir = tempInstallDirectory + "/" + dir; + } + /* + * We must re-set DESTDIR for each component + * We must not add the CPACK_INSTALL_PREFIX part because + * it will be added using the override of CMAKE_INSTALL_PREFIX + * The main reason for this awkward trick is that + * are using DESTDIR for 2 different reasons: + * - Because it was asked by the CPack Generator or the user + * using CPACK_SET_DESTDIR + * - Because it was already used for component install + * in order to put things in subdirs... + */ + cmSystemTools::PutEnv( + (std::string("DESTDIR=")+tempInstallDirectory).c_str() + ); + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "- Creating directory: '" << dir << "'" << std::endl); + + if ( !cmsys::SystemTools::MakeDirectory(dir.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem creating temporary directory: " + << dir << std::endl); + return 0; + } + } + else + { + mf->AddDefinition("CMAKE_INSTALL_PREFIX", + tempInstallDirectory.c_str()); + + if ( !cmsys::SystemTools::MakeDirectory( + tempInstallDirectory.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem creating temporary directory: " + << tempInstallDirectory << std::endl); + return 0; + } + + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "- Using non-DESTDIR install... (mf->AddDefinition)" + << std::endl); + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "- Setting CMAKE_INSTALL_PREFIX to '" + << tempInstallDirectory + << "'" << std::endl); + } + + if ( buildConfig && *buildConfig ) + { + mf->AddDefinition("BUILD_TYPE", buildConfig); + } + std::string installComponentLowerCase + = cmSystemTools::LowerCase(installComponent); + if ( installComponentLowerCase != "all" ) + { + mf->AddDefinition("CMAKE_INSTALL_COMPONENT", + installComponent.c_str()); + } + + // strip on TRUE, ON, 1, one or several file names, but not on + // FALSE, OFF, 0 and an empty string + if (!cmSystemTools::IsOff(this->GetOption("CPACK_STRIP_FILES"))) + { + mf->AddDefinition("CMAKE_INSTALL_DO_STRIP", "1"); + } + // Remember the list of files before installation + // of the current component (if we are in component install) + const char* InstallPrefix = tempInstallDirectory.c_str(); + std::vector filesBefore; + std::string findExpr(InstallPrefix); + if (componentInstall) + { + cmsys::Glob glB; + findExpr += "/*"; + glB.RecurseOn(); + glB.FindFiles(findExpr); + filesBefore = glB.GetFiles(); + std::sort(filesBefore.begin(),filesBefore.end()); + } + // do installation + int res = mf->ReadListFile(0, installFile.c_str()); + // Now rebuild the list of files after installation + // of the current component (if we are in component install) + if (componentInstall) + { + cmsys::Glob glA; + glA.RecurseOn(); + glA.FindFiles(findExpr); + std::vector filesAfter = glA.GetFiles(); + std::sort(filesAfter.begin(),filesAfter.end()); + std::vector::iterator diff; + std::vector result(filesAfter.size()); + diff = std::set_difference ( + filesAfter.begin(),filesAfter.end(), + filesBefore.begin(),filesBefore.end(), + result.begin()); + + std::vector::iterator fit; + std::string localFileName; + // Populate the File field of each component + for (fit=result.begin();fit!=diff;++fit) + { + localFileName = + cmSystemTools::RelativePath(InstallPrefix, fit->c_str()); + localFileName = + localFileName.substr(localFileName.find('/')+1, + std::string::npos); + Components[installComponent].Files.push_back(localFileName); + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Adding file <" + < to component <" + <"<GetDefinition("CPACK_ABSOLUTE_DESTINATION_FILES")) { + if (absoluteDestFiles.length()>0) { + absoluteDestFiles +=";"; + } + absoluteDestFiles += + mf->GetDefinition("CPACK_ABSOLUTE_DESTINATION_FILES"); + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "Got some ABSOLUTE DESTINATION FILES: " + << absoluteDestFiles << std::endl); + // define component specific var + if (componentInstall) + { + std::string absoluteDestFileComponent = + std::string("CPACK_ABSOLUTE_DESTINATION_FILES") + + "_" + GetComponentInstallDirNameSuffix(installComponent); + if (NULL != this->GetOption(absoluteDestFileComponent.c_str())) + { + std::string absoluteDestFilesListComponent = + this->GetOption(absoluteDestFileComponent.c_str()); + absoluteDestFilesListComponent +=";"; + absoluteDestFilesListComponent += + mf->GetDefinition("CPACK_ABSOLUTE_DESTINATION_FILES"); + this->SetOption(absoluteDestFileComponent.c_str(), + absoluteDestFilesListComponent.c_str()); + } + else + { + this->SetOption(absoluteDestFileComponent.c_str(), + mf->GetDefinition("CPACK_ABSOLUTE_DESTINATION_FILES")); + } + } + } + if ( cmSystemTools::GetErrorOccuredFlag() || !res ) + { + return 0; + } + } + } + } + this->SetOption("CPACK_ABSOLUTE_DESTINATION_FILES", + absoluteDestFiles.c_str()); + return 1; +} + +//---------------------------------------------------------------------- +bool cmCPackGenerator::ReadListFile(const char* moduleName) +{ + bool retval; + std::string fullPath = this->MakefileMap->GetModulesFile(moduleName); + retval = this->MakefileMap->ReadListFile(0, fullPath.c_str()); + // include FATAL_ERROR and ERROR in the return status + retval = retval && (! cmSystemTools::GetErrorOccuredFlag()); + return retval; +} + +//---------------------------------------------------------------------- +void cmCPackGenerator::SetOptionIfNotSet(const char* op, + const char* value) +{ + const char* def = this->MakefileMap->GetDefinition(op); + if ( def && *def ) + { + return; + } + this->SetOption(op, value); +} + +//---------------------------------------------------------------------- +void cmCPackGenerator::SetOption(const char* op, const char* value) +{ + if ( !op ) + { + return; + } + if ( !value ) + { + this->MakefileMap->RemoveDefinition(op); + return; + } + cmCPackLogger(cmCPackLog::LOG_DEBUG, this->GetNameOfClass() + << "::SetOption(" << op << ", " << value << ")" << std::endl); + this->MakefileMap->AddDefinition(op, value); +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::DoPackage() +{ + cmCPackLogger(cmCPackLog::LOG_OUTPUT, + "Create package using " << this->Name.c_str() << std::endl); + + if ( !this->PrepareNames() ) + { + return 0; + } + + // Digest Component grouping specification + if ( !this->PrepareGroupingKind() ) + { + return 0; + } + + if ( cmSystemTools::IsOn( + this->GetOption("CPACK_REMOVE_TOPLEVEL_DIRECTORY")) ) + { + const char* toplevelDirectory + = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + if ( cmSystemTools::FileExists(toplevelDirectory) ) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Remove toplevel directory: " + << toplevelDirectory << std::endl); + if ( !cmSystemTools::RepeatedRemoveDirectory(toplevelDirectory) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem removing toplevel directory: " + << toplevelDirectory + << std::endl); + return 0; + } + } + } + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "About to install project " << std::endl); + + if ( !this->InstallProject() ) + { + return 0; + } + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "Done install project " << std::endl); + + + const char* tempPackageFileName = this->GetOption( + "CPACK_TEMPORARY_PACKAGE_FILE_NAME"); + const char* packageFileName = this->GetOption("CPACK_OUTPUT_FILE_PATH"); + const char* tempDirectory = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Find files" << std::endl); + cmsys::Glob gl; + std::string findExpr = tempDirectory; + findExpr += "/*"; + gl.RecurseOn(); + gl.SetRecurseThroughSymlinks(false); + if ( !gl.FindFiles(findExpr) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot find any files in the packaging tree" << std::endl); + return 0; + } + + cmCPackLogger(cmCPackLog::LOG_OUTPUT, "Create package" << std::endl); + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Package files to: " + << (tempPackageFileName ? tempPackageFileName : "(NULL)") << std::endl); + if ( cmSystemTools::FileExists(tempPackageFileName) ) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Remove old package file" + << std::endl); + cmSystemTools::RemoveFile(tempPackageFileName); + } + if ( cmSystemTools::IsOn(this->GetOption( + "CPACK_INCLUDE_TOPLEVEL_DIRECTORY")) ) + { + tempDirectory = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + } + + // The files to be installed + files = gl.GetFiles(); + + packageFileNames.clear(); + /* Put at least one file name into the list of + * wanted packageFileNames. The specific generator + * may update this during PackageFiles. + * (either putting several names or updating the provided one) + */ + packageFileNames.push_back(tempPackageFileName); + toplevel = tempDirectory; + if ( !this->PackageFiles() || cmSystemTools::GetErrorOccuredFlag()) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem compressing the directory" + << std::endl); + return 0; + } + + /* + * Copy the generated packages to final destination + * - there may be several of them + * - the initially provided name may have changed + * (because the specific generator did 'normalize' it) + */ + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Copying final package(s) [" + <::iterator it; + /* now copy package one by one */ + for (it=packageFileNames.begin();it!=packageFileNames.end();++it) + { + std::string tmpPF(this->GetOption("CPACK_OUTPUT_FILE_PREFIX")); + tempPackageFileName = it->c_str(); + tmpPF += "/"+cmSystemTools::GetFilenameName(*it); + packageFileName = tmpPF.c_str(); + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Copy final package(s): " + << (tempPackageFileName ? tempPackageFileName : "(NULL)" ) + << " to " + << (packageFileName ? packageFileName : "(NULL)") + << std::endl); + if ( !cmSystemTools::CopyFileIfDifferent(tempPackageFileName, + packageFileName) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem copying the package: " + << (tempPackageFileName ? tempPackageFileName : "(NULL)" ) + << " to " + << (packageFileName ? packageFileName : "(NULL)") + << std::endl); + return 0; + } + cmCPackLogger(cmCPackLog::LOG_OUTPUT, "- package: " + << packageFileName + << " generated." << std::endl); + } + + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::Initialize(const char* name, cmMakefile* mf) +{ + this->MakefileMap = mf; + this->Name = name; + if ( !this->SetCMakeRoot() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot initialize the generator" << std::endl); + return 0; + } + // set the running generator name + this->SetOption("CPACK_GENERATOR", this->Name.c_str()); + // Load the project specific config file + const char* config = + this->GetOption("CPACK_PROJECT_CONFIG_FILE"); + if(config) + { + mf->ReadListFile(config); + } + int result = this->InitializeInternal(); + if (cmSystemTools::GetErrorOccuredFlag()) + { + return 0; + } + + // If a generator subclass did not already set this option in its + // InitializeInternal implementation, and the project did not already set + // it, the default value should be: + this->SetOptionIfNotSet("CPACK_PACKAGING_INSTALL_PREFIX", "/"); + + return result; +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::InitializeInternal() +{ + return 1; +} + +//---------------------------------------------------------------------- +bool cmCPackGenerator::IsSet(const char* name) const +{ + return this->MakefileMap->IsSet(name); +} + +//---------------------------------------------------------------------- +bool cmCPackGenerator::IsOn(const char* name) const +{ + return cmSystemTools::IsOn(GetOption(name)); +} + +//---------------------------------------------------------------------- +const char* cmCPackGenerator::GetOption(const char* op) const +{ + const char* ret = this->MakefileMap->GetDefinition(op); + if(!ret) + { + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "Warning, GetOption return NULL for: " + << op + << std::endl); + } + return ret; +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::SetCMakeRoot() +{ + // use the CMAKE_ROOT from cmake which should have been + // found by now + const char* root= + this->MakefileMap->GetDefinition("CMAKE_ROOT"); + + if(root) + { + this->CMakeRoot = root; + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Looking for CMAKE_ROOT: " + << this->CMakeRoot.c_str() << std::endl); + this->SetOption("CMAKE_ROOT", this->CMakeRoot.c_str()); + return 1; + } + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Could not find CMAKE_ROOT !!!" + << std::endl + << "CMake has most likely not been installed correctly." + << std::endl + <<"Modules directory not found in" + << std::endl); + return 0; +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::PackageFiles() +{ + return 0; +} + +//---------------------------------------------------------------------- +const char* cmCPackGenerator::GetInstallPath() +{ + if ( !this->InstallPath.empty() ) + { + return this->InstallPath.c_str(); + } +#if defined(_WIN32) && !defined(__CYGWIN__) + const char* prgfiles = cmsys::SystemTools::GetEnv("ProgramFiles"); + const char* sysDrive = cmsys::SystemTools::GetEnv("SystemDrive"); + if ( prgfiles ) + { + this->InstallPath = prgfiles; + } + else if ( sysDrive ) + { + this->InstallPath = sysDrive; + this->InstallPath += "/Program Files"; + } + else + { + this->InstallPath = "c:/Program Files"; + } + this->InstallPath += "/"; + this->InstallPath += this->GetOption("CPACK_PACKAGE_NAME"); + this->InstallPath += "-"; + this->InstallPath += this->GetOption("CPACK_PACKAGE_VERSION"); +#elif defined(__HAIKU__) + BPath dir; + if (find_directory(B_COMMON_DIRECTORY, &dir) == B_OK) + { + this->InstallPath = dir.Path(); + } + else + { + this->InstallPath = "/boot/common"; + } +#else + this->InstallPath = "/usr/local/"; +#endif + return this->InstallPath.c_str(); +} + +//---------------------------------------------------------------------- +const char* cmCPackGenerator::GetPackagingInstallPrefix() +{ + cmCPackLogger(cmCPackLog::LOG_DEBUG, "GetPackagingInstallPrefix: '" + << this->GetOption("CPACK_PACKAGING_INSTALL_PREFIX") << "'" << std::endl); + + return this->GetOption("CPACK_PACKAGING_INSTALL_PREFIX"); +} + +//---------------------------------------------------------------------- +std::string cmCPackGenerator::FindTemplate(const char* name) +{ + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Look for template: " + << (name ? name : "(NULL)") << std::endl); + std::string ffile = this->MakefileMap->GetModulesFile(name); + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Found template: " + << ffile.c_str() << std::endl); + return ffile; +} + +//---------------------------------------------------------------------- +bool cmCPackGenerator::ConfigureString(const std::string& inString, + std::string& outString) +{ + this->MakefileMap->ConfigureString(inString, + outString, true, false); + return true; +} + +//---------------------------------------------------------------------- +bool cmCPackGenerator::ConfigureFile(const char* inName, + const char* outName, bool copyOnly /* = false */) +{ + return this->MakefileMap->ConfigureFile(inName, outName, + copyOnly, true, false) == 1; +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::CleanTemporaryDirectory() +{ + std::string tempInstallDirectoryWithPostfix + = this->GetOption("CPACK_TEMPORARY_INSTALL_DIRECTORY"); + const char* tempInstallDirectory = tempInstallDirectoryWithPostfix.c_str(); + if(cmsys::SystemTools::FileExists(tempInstallDirectory)) + { + cmCPackLogger(cmCPackLog::LOG_OUTPUT, + "- Clean temporary : " + << tempInstallDirectory << std::endl); + if(!cmSystemTools::RepeatedRemoveDirectory(tempInstallDirectory)) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem removing temporary directory: " << + tempInstallDirectory + << std::endl); + return 0; + } + } + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackGenerator::PrepareGroupingKind() +{ + // find a component package method specified by the user + ComponentPackageMethod method = UNKNOWN_COMPONENT_PACKAGE_METHOD; + + if(this->GetOption("CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE")) + { + method = ONE_PACKAGE; + } + + if(this->GetOption("CPACK_COMPONENTS_IGNORE_GROUPS")) + { + method = ONE_PACKAGE_PER_COMPONENT; + } + + if(this->GetOption("CPACK_COMPONENTS_ONE_PACKAGE_PER_GROUP")) + { + method = ONE_PACKAGE_PER_GROUP; + } + + std::string groupingType; + + // Second way to specify grouping + if (NULL != this->GetOption("CPACK_COMPONENTS_GROUPING")) { + groupingType = this->GetOption("CPACK_COMPONENTS_GROUPING"); + } + + if (groupingType.length()>0) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "[" + << this->Name << "]" + << " requested component grouping = "<< groupingType <Name << "]" + << " requested component grouping type <"<< groupingType + << "> UNKNOWN not in (ALL_COMPONENTS_IN_ONE,IGNORE,ONE_PER_GROUP)" + << std::endl); + } + } + + // Some components were defined but NO group + // fallback to default if not group based + if(method == ONE_PACKAGE_PER_GROUP && + this->ComponentGroups.empty() && !this->Components.empty()) + { + if(componentPackageMethod == ONE_PACKAGE) + { + method = ONE_PACKAGE; + } + else + { + method = ONE_PACKAGE_PER_COMPONENT; + } + cmCPackLogger(cmCPackLog::LOG_WARNING, "[" + << this->Name << "]" + << " One package per component group requested, " + << "but NO component groups exist: Ignoring component group." + << std::endl); + } + + // if user specified packaging method, override the default packaging method + if(method != UNKNOWN_COMPONENT_PACKAGE_METHOD) + { + componentPackageMethod = method; + } + + const char* method_names[] = + { + "ALL_COMPONENTS_IN_ONE", + "IGNORE_GROUPS", + "ONE_PER_GROUP" + }; + + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "[" + << this->Name << "]" + << " requested component grouping = " + << method_names[componentPackageMethod] + << std::endl); + + return 1; +} + +//---------------------------------------------------------------------- +std::string cmCPackGenerator::GetComponentInstallDirNameSuffix( + const std::string& componentName) { + return componentName; +} +//---------------------------------------------------------------------- +std::string cmCPackGenerator::GetComponentPackageFileName( + const std::string& initialPackageFileName, + const std::string& groupOrComponentName, + bool isGroupName) { + + /* + * the default behavior is to use the + * component [group] name as a suffix + */ + std::string suffix="-"+groupOrComponentName; + /* check if we should use DISPLAY name */ + std::string dispNameVar = "CPACK_"+Name+"_USE_DISPLAY_NAME_IN_FILENAME"; + if (IsOn(dispNameVar.c_str())) + { + /* the component Group case */ + if (isGroupName) + { + std::string groupDispVar = "CPACK_COMPONENT_GROUP_" + + cmSystemTools::UpperCase(groupOrComponentName) + "_DISPLAY_NAME"; + const char* groupDispName = GetOption(groupDispVar.c_str()); + if (groupDispName) + { + suffix = "-"+std::string(groupDispName); + } + } + /* the [single] component case */ + else + { + std::string dispVar = "CPACK_COMPONENT_" + + cmSystemTools::UpperCase(groupOrComponentName) + "_DISPLAY_NAME"; + const char* dispName = GetOption(dispVar.c_str()); + if(dispName) + { + suffix = "-"+std::string(dispName); + } + } + } + return initialPackageFileName + suffix; +} + +//---------------------------------------------------------------------- +bool cmCPackGenerator::SupportsComponentInstallation() const +{ + return false; +} + +//---------------------------------------------------------------------- +bool cmCPackGenerator::WantsComponentInstallation() const +{ + return (!IsOn("CPACK_MONOLITHIC_INSTALL") & SupportsComponentInstallation()); +} + +//---------------------------------------------------------------------- +cmCPackInstallationType* +cmCPackGenerator::GetInstallationType(const char *projectName, + const char *name) +{ + (void) projectName; + bool hasInstallationType = this->InstallationTypes.count(name) != 0; + cmCPackInstallationType *installType = &this->InstallationTypes[name]; + if (!hasInstallationType) + { + // Define the installation type + std::string macroPrefix = "CPACK_INSTALL_TYPE_" + + cmsys::SystemTools::UpperCase(name); + installType->Name = name; + + const char* displayName + = this->GetOption((macroPrefix + "_DISPLAY_NAME").c_str()); + if (displayName && *displayName) + { + installType->DisplayName = displayName; + } + else + { + installType->DisplayName = installType->Name; + } + + installType->Index = static_cast( + this->InstallationTypes.size()); + } + return installType; +} + +//---------------------------------------------------------------------- +cmCPackComponent* +cmCPackGenerator::GetComponent(const char *projectName, const char *name) +{ + bool hasComponent = this->Components.count(name) != 0; + cmCPackComponent *component = &this->Components[name]; + if (!hasComponent) + { + // Define the component + std::string macroPrefix = "CPACK_COMPONENT_" + + cmsys::SystemTools::UpperCase(name); + component->Name = name; + const char* displayName + = this->GetOption((macroPrefix + "_DISPLAY_NAME").c_str()); + if (displayName && *displayName) + { + component->DisplayName = displayName; + } + else + { + component->DisplayName = component->Name; + } + component->IsHidden + = this->IsSet((macroPrefix + "_HIDDEN").c_str()); + component->IsRequired + = this->IsSet((macroPrefix + "_REQUIRED").c_str()); + component->IsDisabledByDefault + = this->IsSet((macroPrefix + "_DISABLED").c_str()); + component->IsDownloaded + = this->IsSet((macroPrefix + "_DOWNLOADED").c_str()) + || cmSystemTools::IsOn(this->GetOption("CPACK_DOWNLOAD_ALL")); + + const char* archiveFile = this->GetOption((macroPrefix + + "_ARCHIVE_FILE").c_str()); + if (archiveFile && *archiveFile) + { + component->ArchiveFile = archiveFile; + } + + const char* groupName = this->GetOption((macroPrefix + "_GROUP").c_str()); + if (groupName && *groupName) + { + component->Group = GetComponentGroup(projectName, groupName); + component->Group->Components.push_back(component); + } + else + { + component->Group = 0; + } + + const char* description + = this->GetOption((macroPrefix + "_DESCRIPTION").c_str()); + if (description && *description) + { + component->Description = description; + } + + // Determine the installation types. + const char *installTypes + = this->GetOption((macroPrefix + "_INSTALL_TYPES").c_str()); + if (installTypes && *installTypes) + { + std::vector installTypesVector; + cmSystemTools::ExpandListArgument(installTypes, installTypesVector); + std::vector::iterator installTypesIt; + for (installTypesIt = installTypesVector.begin(); + installTypesIt != installTypesVector.end(); + ++installTypesIt) + { + component->InstallationTypes.push_back( + this->GetInstallationType(projectName, installTypesIt->c_str())); + } + } + + // Determine the component dependencies. + const char *depends = this->GetOption((macroPrefix + "_DEPENDS").c_str()); + if (depends && *depends) + { + std::vector dependsVector; + cmSystemTools::ExpandListArgument(depends, dependsVector); + std::vector::iterator dependIt; + for (dependIt = dependsVector.begin(); + dependIt != dependsVector.end(); + ++dependIt) + { + cmCPackComponent *child = GetComponent(projectName, + dependIt->c_str()); + component->Dependencies.push_back(child); + child->ReverseDependencies.push_back(component); + } + } + } + return component; +} + +//---------------------------------------------------------------------- +cmCPackComponentGroup* +cmCPackGenerator::GetComponentGroup(const char *projectName, const char *name) +{ + (void) projectName; + std::string macroPrefix = "CPACK_COMPONENT_GROUP_" + + cmsys::SystemTools::UpperCase(name); + bool hasGroup = this->ComponentGroups.count(name) != 0; + cmCPackComponentGroup *group = &this->ComponentGroups[name]; + if (!hasGroup) + { + // Define the group + group->Name = name; + const char* displayName + = this->GetOption((macroPrefix + "_DISPLAY_NAME").c_str()); + if (displayName && *displayName) + { + group->DisplayName = displayName; + } + else + { + group->DisplayName = group->Name; + } + + const char* description + = this->GetOption((macroPrefix + "_DESCRIPTION").c_str()); + if (description && *description) + { + group->Description = description; + } + group->IsBold + = this->IsSet((macroPrefix + "_BOLD_TITLE").c_str()); + group->IsExpandedByDefault + = this->IsSet((macroPrefix + "_EXPANDED").c_str()); + const char* parentGroupName + = this->GetOption((macroPrefix + "_PARENT_GROUP").c_str()); + if (parentGroupName && *parentGroupName) + { + group->ParentGroup = GetComponentGroup(projectName, parentGroupName); + group->ParentGroup->Subgroups.push_back(group); + } + else + { + group->ParentGroup = 0; + } + } + return group; +} diff --git a/Source/CPack/cmCPackGenerator.h b/Source/CPack/cmCPackGenerator.h new file mode 100644 index 0000000..55afb44 --- /dev/null +++ b/Source/CPack/cmCPackGenerator.h @@ -0,0 +1,287 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackGenerator_h +#define cmCPackGenerator_h + +#include "cmObject.h" +#include "cmSystemTools.h" +#include +#include + +#include "cmCPackComponentGroup.h" // cmCPackComponent and friends + // Forward declarations are insufficient since we use them in + // std::map data members below... + +#define cmCPackTypeMacro(class, superclass) \ + cmTypeMacro(class, superclass); \ + static cmCPackGenerator* CreateGenerator() { return new class; } + +#define cmCPackLogger(logType, msg) \ + do { \ + cmOStringStream cmCPackLog_msg; \ + cmCPackLog_msg << msg; \ + this->Logger->Log(logType, __FILE__, __LINE__,\ + cmCPackLog_msg.str().c_str());\ + } while ( 0 ) + +#ifdef cerr +# undef cerr +#endif +#define cerr no_cerr_use_cmCPack_Log + +#ifdef cout +# undef cout +#endif +#define cout no_cout_use_cmCPack_Log + +class cmMakefile; +class cmCPackLog; + +/** \class cmCPackGenerator + * \brief A superclass of all CPack Generators + * + */ +class cmCPackGenerator : public cmObject +{ +public: + cmTypeMacro(cmCPackGenerator, cmObject); + /** + * If verbose then more information is printed out + */ + void SetVerbose(bool val) + { this->GeneratorVerbose = val ? + cmSystemTools::OUTPUT_MERGE : cmSystemTools::OUTPUT_NONE; } + + /** + * Do the actual whole package processing. + * Subclass may redefine it but its usually enough + * to redefine @ref PackageFiles, because in fact + * this method do call: + * - PrepareName + * - clean-up temp dirs + * - InstallProject (with the appropriate method) + * - prepare list of files and/or components to be package + * - PackageFiles + * - Copy produced packages at the expected place + * @return 0 if error. + */ + virtual int DoPackage(); + + /** + * Initialize generator + */ + int Initialize(const char* name, cmMakefile* mf); + + /** + * Construct generator + */ + cmCPackGenerator(); + virtual ~cmCPackGenerator(); + + //! Set and get the options + void SetOption(const char* op, const char* value); + void SetOptionIfNotSet(const char* op, const char* value); + const char* GetOption(const char* op) const; + bool IsSet(const char* name) const; + bool IsOn(const char* name) const; + + //! Set all the variables + int SetCMakeRoot(); + + //! Set the logger + void SetLogger(cmCPackLog* log) { this->Logger = log; } + + //! Display verbose information via logger + void DisplayVerboseOutput(const char* msg, float progress); + + bool ReadListFile(const char* moduleName); + +protected: + /** + * Prepare common used names by inspecting + * several CPACK_xxx var values. + */ + int PrepareNames(); + + /** + * Install the project using appropriate method. + */ + int InstallProject(); + + int CleanTemporaryDirectory(); + + virtual const char* GetOutputExtension() { return ".cpack"; } + virtual const char* GetOutputPostfix() { return 0; } + + /** + * Prepare requested grouping kind from CPACK_xxx vars + * CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE + * CPACK_COMPONENTS_IGNORE_GROUPS + * or + * CPACK_COMPONENTS_ONE_PACKAGE_PER_GROUP + * @return 1 on success 0 on failure. + */ + virtual int PrepareGroupingKind(); + + /** + * Some CPack generators may prefer to have + * CPack install all components belonging to the same + * [component] group to be install in the same directory. + * The default behavior is to install each component in + * a separate directory. + * @param[in] componentName the name of the component to be installed + * @return the name suffix the generator wants for the specified component + * default is "componentName" + */ + virtual std::string GetComponentInstallDirNameSuffix( + const std::string& componentName); + + /** + * CPack specific generator may mangle CPACK_PACKAGE_FILE_NAME + * with CPACK_COMPONENT_xxxx__DISPLAY_NAME if + * CPACK__USE_DISPLAY_NAME_IN_FILENAME is ON. + * @param[in] initialPackageFileName + * @param[in] groupOrComponentName + * @param[in] isGroupName + */ + virtual std::string GetComponentPackageFileName( + const std::string& initialPackageFileName, + const std::string& groupOrComponentName, + bool isGroupName); + + /** + * Package the list of files and/or components which + * has been prepared by the beginning of DoPackage. + * @pre @ref toplevel has been filled-in + * @pre the list of file @ref files has been populated + * @pre packageFileNames contains at least 1 entry + * @post packageFileNames may have been updated and contains + * the list of packages generated by the specific generator. + */ + virtual int PackageFiles(); + virtual const char* GetInstallPath(); + virtual const char* GetPackagingInstallPrefix(); + + virtual std::string FindTemplate(const char* name); + virtual bool ConfigureFile(const char* inName, const char* outName, + bool copyOnly = false); + virtual bool ConfigureString(const std::string& input, std::string& output); + virtual int InitializeInternal(); + + + //! Run install commands if specified + virtual int InstallProjectViaInstallCommands( + bool setDestDir, const char* tempInstallDirectory); + virtual int InstallProjectViaInstallScript( + bool setDestDir, const char* tempInstallDirectory); + virtual int InstallProjectViaInstalledDirectories( + bool setDestDir, const char* tempInstallDirectory); + virtual int InstallProjectViaInstallCMakeProjects( + bool setDestDir, const char* tempInstallDirectory); + + /** + * Does the CPack generator support component installation?. + * Some Generators requires the user to set + * CPACK__COMPONENT_INSTALL in order to make this + * method return true. + * @return true if supported, false otherwise + */ + virtual bool SupportsComponentInstallation() const; + /** + * Does the currently running generator want a component installation. + * The generator may support component installation but he may + * be requiring monolithic install using CPACK_MONOLITHIC_INSTALL. + * @return true if component installation is supported and wanted. + */ + virtual bool WantsComponentInstallation() const; + virtual cmCPackInstallationType* GetInstallationType(const char *projectName, + const char* name); + virtual cmCPackComponent* GetComponent(const char *projectName, + const char* name); + virtual cmCPackComponentGroup* GetComponentGroup(const char *projectName, + const char* name); + + cmSystemTools::OutputOption GeneratorVerbose; + std::string Name; + + std::string InstallPath; + + /** + * The list of package file names. + * At beginning of DoPackage the (generic) generator will populate + * the list of desired package file names then it will + * call the redefined method PackageFiles which is may + * either use this set of names (usually on entry there should be + * only a single name) or update the vector with the list + * of created package file names. + */ + std::vector packageFileNames; + + /** + * The directory where all the files to be packaged reside. + * If the installer support components there will be one + * sub-directory for each component. In those directories + * one will find the file belonging to the specified component. + */ + std::string toplevel; + + /** + * The complete list of files to be packaged. + * This list will be populated by DoPackage before + * PackageFiles is called. + */ + std::vector files; + + std::string CPackSelf; + std::string CMakeSelf; + std::string CMakeRoot; + + std::map InstallationTypes; + /** + * The set of components. + * If component installation is supported then this map + * contains the component specified in CPACK_COMPONENTS_ALL + */ + std::map Components; + std::map ComponentGroups; + + /** + * If components are enabled, this enum represents the different + * ways of mapping components to package files. + */ + enum ComponentPackageMethod + { + /* one package for all components */ + ONE_PACKAGE, + /* one package for each component */ + ONE_PACKAGE_PER_COMPONENT, + /* one package for each group, + * with left over components in their own package */ + ONE_PACKAGE_PER_GROUP, + UNKNOWN_COMPONENT_PACKAGE_METHOD + }; + + /** + * The component package method + * The default is ONE_PACKAGE_PER_GROUP, + * and generators may override the default + * before PrepareGroupingKind() is called. + */ + ComponentPackageMethod componentPackageMethod; + + cmCPackLog* Logger; +private: + cmMakefile* MakefileMap; +}; + +#endif diff --git a/Source/CPack/cmCPackGeneratorFactory.cxx b/Source/CPack/cmCPackGeneratorFactory.cxx new file mode 100644 index 0000000..a04b403 --- /dev/null +++ b/Source/CPack/cmCPackGeneratorFactory.cxx @@ -0,0 +1,137 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackGeneratorFactory.h" + +#include "cmCPackGenerator.h" +#include "cmCPackTGZGenerator.h" +#include "cmCPackTarBZip2Generator.h" +#include "cmCPackTarCompressGenerator.h" +#include "cmCPackZIPGenerator.h" +#include "cmCPackSTGZGenerator.h" +#include "cmCPackNSISGenerator.h" +#ifdef __APPLE__ +# include "cmCPackDragNDropGenerator.h" +# include "cmCPackBundleGenerator.h" +# include "cmCPackPackageMakerGenerator.h" +# include "cmCPackOSXX11Generator.h" +#endif + +#ifdef __CYGWIN__ +# include "cmCPackCygwinBinaryGenerator.h" +# include "cmCPackCygwinSourceGenerator.h" +#endif + +#if !defined(_WIN32) && !defined(__APPLE__) \ + && !defined(__QNXNTO__) && !defined(__BEOS__) +# include "cmCPackDebGenerator.h" +# include "cmCPackRPMGenerator.h" +#endif + + +#include "cmCPackLog.h" + +//---------------------------------------------------------------------- +cmCPackGeneratorFactory::cmCPackGeneratorFactory() +{ + this->RegisterGenerator("TGZ", "Tar GZip compression", + cmCPackTGZGenerator::CreateGenerator); + this->RegisterGenerator("STGZ", "Self extracting Tar GZip compression", + cmCPackSTGZGenerator::CreateGenerator); + this->RegisterGenerator("NSIS", "Null Soft Installer", + cmCPackNSISGenerator::CreateGenerator); +#ifdef __CYGWIN__ + this->RegisterGenerator("CygwinBinary", "Cygwin Binary Installer", + cmCPackCygwinBinaryGenerator::CreateGenerator); + this->RegisterGenerator("CygwinSource", "Cygwin Source Installer", + cmCPackCygwinSourceGenerator::CreateGenerator); +#endif + + this->RegisterGenerator("ZIP", "ZIP file format", + cmCPackZIPGenerator::CreateGenerator); + this->RegisterGenerator("TBZ2", "Tar BZip2 compression", + cmCPackTarBZip2Generator::CreateGenerator); + this->RegisterGenerator("TZ", "Tar Compress compression", + cmCPackTarCompressGenerator::CreateGenerator); +#ifdef __APPLE__ + this->RegisterGenerator("DragNDrop", "Mac OSX Drag And Drop", + cmCPackDragNDropGenerator::CreateGenerator); + this->RegisterGenerator("Bundle", "Mac OSX bundle", + cmCPackBundleGenerator::CreateGenerator); + this->RegisterGenerator("PackageMaker", "Mac OSX Package Maker installer", + cmCPackPackageMakerGenerator::CreateGenerator); + this->RegisterGenerator("OSXX11", "Mac OSX X11 bundle", + cmCPackOSXX11Generator::CreateGenerator); +#endif +#if !defined(_WIN32) && !defined(__APPLE__) \ + && !defined(__QNXNTO__) && !defined(__BEOS__) + this->RegisterGenerator("DEB", "Debian packages", + cmCPackDebGenerator::CreateGenerator); + this->RegisterGenerator("RPM", "RPM packages", + cmCPackRPMGenerator::CreateGenerator); +#endif +} + +//---------------------------------------------------------------------- +cmCPackGeneratorFactory::~cmCPackGeneratorFactory() +{ + std::vector::iterator it; + for ( it = this->Generators.begin(); it != this->Generators.end(); ++ it ) + { + delete *it; + } +} + +//---------------------------------------------------------------------- +cmCPackGenerator* cmCPackGeneratorFactory::NewGenerator(const char* name) +{ + cmCPackGenerator* gen = this->NewGeneratorInternal(name); + if ( !gen ) + { + return 0; + } + this->Generators.push_back(gen); + gen->SetLogger(this->Logger); + return gen; +} + +//---------------------------------------------------------------------- +cmCPackGenerator* cmCPackGeneratorFactory::NewGeneratorInternal( + const char* name) +{ + if ( !name ) + { + return 0; + } + cmCPackGeneratorFactory::t_GeneratorCreatorsMap::iterator it + = this->GeneratorCreators.find(name); + if ( it == this->GeneratorCreators.end() ) + { + return 0; + } + return (it->second)(); +} + +//---------------------------------------------------------------------- +void cmCPackGeneratorFactory::RegisterGenerator(const char* name, + const char* generatorDescription, + CreateGeneratorCall* createGenerator) +{ + if ( !name || !createGenerator ) + { + cmCPack_Log(this->Logger, cmCPackLog::LOG_ERROR, + "Cannot register generator" << std::endl); + return; + } + this->GeneratorCreators[name] = createGenerator; + this->GeneratorDescriptions[name] = generatorDescription; +} diff --git a/Source/CPack/cmCPackGeneratorFactory.h b/Source/CPack/cmCPackGeneratorFactory.h new file mode 100644 index 0000000..dff2e49 --- /dev/null +++ b/Source/CPack/cmCPackGeneratorFactory.h @@ -0,0 +1,59 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackGeneratorFactory_h +#define cmCPackGeneratorFactory_h + +#include "cmObject.h" + +class cmCPackLog; +class cmCPackGenerator; + +/** \class cmCPackGeneratorFactory + * \brief A container for CPack generators + * + */ +class cmCPackGeneratorFactory : public cmObject +{ +public: + cmTypeMacro(cmCPackGeneratorFactory, cmObject); + + cmCPackGeneratorFactory(); + ~cmCPackGeneratorFactory(); + + //! Get the generator + cmCPackGenerator* NewGenerator(const char* name); + void DeleteGenerator(cmCPackGenerator* gen); + + typedef cmCPackGenerator* CreateGeneratorCall(); + + void RegisterGenerator(const char* name, + const char* generatorDescription, + CreateGeneratorCall* createGenerator); + + void SetLogger(cmCPackLog* logger) { this->Logger = logger; } + + typedef std::map DescriptionsMap; + const DescriptionsMap& GetGeneratorsList() const + { return this->GeneratorDescriptions; } + +private: + cmCPackGenerator* NewGeneratorInternal(const char* name); + std::vector Generators; + + typedef std::map t_GeneratorCreatorsMap; + t_GeneratorCreatorsMap GeneratorCreators; + DescriptionsMap GeneratorDescriptions; + cmCPackLog* Logger; +}; + +#endif diff --git a/Source/CPack/cmCPackLog.cxx b/Source/CPack/cmCPackLog.cxx new file mode 100644 index 0000000..4e8bf0f --- /dev/null +++ b/Source/CPack/cmCPackLog.cxx @@ -0,0 +1,225 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackLog.h" + +#include "cmGeneratedFileStream.h" +#include "cmSystemTools.h" + +//---------------------------------------------------------------------- +cmCPackLog::cmCPackLog() +{ + this->Verbose = false; + this->Debug = false; + this->Quiet = false; + this->NewLine = true; + + this->LastTag = cmCPackLog::NOTAG; +#undef cerr +#undef cout + this->DefaultOutput = &std::cout; + this->DefaultError = &std::cerr; + + this->LogOutput = 0; + this->LogOutputCleanup = false; +} + +//---------------------------------------------------------------------- +cmCPackLog::~cmCPackLog() +{ + this->SetLogOutputStream(0); +} + +//---------------------------------------------------------------------- +void cmCPackLog::SetLogOutputStream(std::ostream* os) +{ + if ( this->LogOutputCleanup && this->LogOutput ) + { + delete this->LogOutput; + } + this->LogOutputCleanup = false; + this->LogOutput = os; +} + +//---------------------------------------------------------------------- +bool cmCPackLog::SetLogOutputFile(const char* fname) +{ + cmGeneratedFileStream *cg = 0; + if ( fname ) + { + cg = new cmGeneratedFileStream(fname); + } + if ( cg && !*cg ) + { + delete cg; + cg = 0; + } + this->SetLogOutputStream(cg); + if ( !cg ) + { + return false; + } + this->LogOutputCleanup = true; + return true; +} + +//---------------------------------------------------------------------- +void cmCPackLog::Log(int tag, const char* file, int line, + const char* msg, size_t length) +{ + // By default no logging + bool display = false; + + // Display file and line number if debug + bool useFileAndLine = this->Debug; + + bool output = false; + bool debug = false; + bool warning = false; + bool error = false; + bool verbose = false; + + // When writing in file, add list of tags whenever tag changes. + std::string tagString; + bool needTagString = false; + if ( this->LogOutput && this->LastTag != tag ) + { + needTagString = true; + } + + if ( tag & LOG_OUTPUT ) + { + output = true; + display = true; + if ( needTagString ) + { + if ( tagString.size() > 0 ) { tagString += ","; } + tagString = "VERBOSE"; + } + } + if ( tag & LOG_WARNING ) + { + warning = true; + display = true; + if ( needTagString ) + { + if ( tagString.size() > 0 ) { tagString += ","; } + tagString = "WARNING"; + } + } + if ( tag & LOG_ERROR ) + { + error = true; + display = true; + if ( needTagString ) + { + if ( tagString.size() > 0 ) { tagString += ","; } + tagString = "ERROR"; + } + } + if ( tag & LOG_DEBUG && this->Debug ) + { + debug = true; + display = true; + if ( needTagString ) + { + if ( tagString.size() > 0 ) { tagString += ","; } + tagString = "DEBUG"; + } + useFileAndLine = true; + } + if ( tag & LOG_VERBOSE && this->Verbose ) + { + verbose = true; + display = true; + if ( needTagString ) + { + if ( tagString.size() > 0 ) { tagString += ","; } + tagString = "VERBOSE"; + } + } + if ( this->Quiet ) + { + display = false; + } + if ( this->LogOutput ) + { + if ( needTagString ) + { + *this->LogOutput << "[" << file << ":" << line << " " + << tagString << "] "; + } + this->LogOutput->write(msg, length); + } + this->LastTag = tag; + if ( !display ) + { + return; + } + if ( this->NewLine ) + { + if ( error && !this->ErrorPrefix.empty() ) + { + *this->DefaultError << this->ErrorPrefix.c_str(); + } + else if ( warning && !this->WarningPrefix.empty() ) + { + *this->DefaultError << this->WarningPrefix.c_str(); + } + else if ( output && !this->OutputPrefix.empty() ) + { + *this->DefaultOutput << this->OutputPrefix.c_str(); + } + else if ( verbose && !this->VerbosePrefix.empty() ) + { + *this->DefaultOutput << this->VerbosePrefix.c_str(); + } + else if ( debug && !this->DebugPrefix.empty() ) + { + *this->DefaultOutput << this->DebugPrefix.c_str(); + } + else if ( !this->Prefix.empty() ) + { + *this->DefaultOutput << this->Prefix.c_str(); + } + if ( useFileAndLine ) + { + if ( error || warning ) + { + *this->DefaultError << file << ":" << line << " "; + } + else + { + *this->DefaultOutput << file << ":" << line << " "; + } + } + } + if ( error || warning ) + { + this->DefaultError->write(msg, length); + this->DefaultError->flush(); + } + else + { + this->DefaultOutput->write(msg, length); + this->DefaultOutput->flush(); + } + if ( msg[length-1] == '\n' || length > 2 ) + { + this->NewLine = true; + } + + if ( error ) + { + cmSystemTools::SetErrorOccured(); + } +} diff --git a/Source/CPack/cmCPackLog.h b/Source/CPack/cmCPackLog.h new file mode 100644 index 0000000..812f1de --- /dev/null +++ b/Source/CPack/cmCPackLog.h @@ -0,0 +1,155 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackLog_h +#define cmCPackLog_h + +#include "cmObject.h" + +#define cmCPack_Log(ctSelf, logType, msg) \ + do { \ + cmOStringStream cmCPackLog_msg; \ + cmCPackLog_msg << msg; \ + (ctSelf)->Log(logType, __FILE__, __LINE__, cmCPackLog_msg.str().c_str());\ + } while ( 0 ) + +#ifdef cerr +# undef cerr +#endif +#define cerr no_cerr_use_cmCPack_Log + +#ifdef cout +# undef cout +#endif +#define cout no_cout_use_cmCPack_Log + + +/** \class cmCPackLog + * \brief A container for CPack generators + * + */ +class cmCPackLog : public cmObject +{ +public: + cmTypeMacro(cmCPackLog, cmObject); + + cmCPackLog(); + ~cmCPackLog(); + + enum __log_tags { + NOTAG = 0, + LOG_OUTPUT = 0x1, + LOG_VERBOSE = 0x2, + LOG_DEBUG = 0x4, + LOG_WARNING = 0x8, + LOG_ERROR = 0x10 + }; + + //! Various signatures for logging. + void Log(const char* file, int line, const char* msg) + { + this->Log(LOG_OUTPUT, file, line, msg); + } + void Log(const char* file, int line, const char* msg, size_t length) + { + this->Log(LOG_OUTPUT, file, line, msg, length); + } + void Log(int tag, const char* file, int line, const char* msg) + { + this->Log(tag, file, line, msg, strlen(msg)); + } + void Log(int tag, const char* file, int line, const char* msg, + size_t length); + + //! Set Verbose + void VerboseOn() { this->SetVerbose(true); } + void VerboseOff() { this->SetVerbose(true); } + void SetVerbose(bool verb) { this->Verbose = verb; } + bool GetVerbose() { return this->Verbose; } + + //! Set Debug + void DebugOn() { this->SetDebug(true); } + void DebugOff() { this->SetDebug(true); } + void SetDebug(bool verb) { this->Debug = verb; } + bool GetDebug() { return this->Debug; } + + //! Set Quiet + void QuietOn() { this->SetQuiet(true); } + void QuietOff() { this->SetQuiet(true); } + void SetQuiet(bool verb) { this->Quiet = verb; } + bool GetQuiet() { return this->Quiet; } + + //! Set the output stream + void SetOutputStream(std::ostream* os) { this->DefaultOutput = os; } + + //! Set the error stream + void SetErrorStream(std::ostream* os) { this->DefaultError = os; } + + //! Set the log output stream + void SetLogOutputStream(std::ostream* os); + + //! Set the log output file. The cmCPackLog will try to create file. If it + // cannot, it will report an error. + bool SetLogOutputFile(const char* fname); + + //! Set the various prefixes for the logging. SetPrefix sets the generic + // prefix that overwrittes missing ones. + void SetPrefix(std::string pfx) { this->Prefix = pfx; } + void SetOutputPrefix(std::string pfx) { this->OutputPrefix = pfx; } + void SetVerbosePrefix(std::string pfx) { this->VerbosePrefix = pfx; } + void SetDebugPrefix(std::string pfx) { this->DebugPrefix = pfx; } + void SetWarningPrefix(std::string pfx) { this->WarningPrefix = pfx; } + void SetErrorPrefix(std::string pfx) { this->ErrorPrefix = pfx; } + +private: + bool Verbose; + bool Debug; + bool Quiet; + + bool NewLine; + + int LastTag; + + std::string Prefix; + std::string OutputPrefix; + std::string VerbosePrefix; + std::string DebugPrefix; + std::string WarningPrefix; + std::string ErrorPrefix; + + std::ostream *DefaultOutput; + std::ostream *DefaultError; + + std::string LogOutputFileName; + std::ostream *LogOutput; + // Do we need to cleanup log output stream + bool LogOutputCleanup; +}; + +class cmCPackLogWrite +{ +public: + cmCPackLogWrite(const char* data, size_t length) + : Data(data), Length(length) {} + + const char* Data; + size_t Length; +}; + +inline std::ostream& operator<< (std::ostream& os, const cmCPackLogWrite& c) +{ + os.write(c.Data, c.Length); + os.flush(); + return os; +} + +#endif diff --git a/Source/CPack/cmCPackNSISGenerator.cxx b/Source/CPack/cmCPackNSISGenerator.cxx new file mode 100644 index 0000000..0787ef9 --- /dev/null +++ b/Source/CPack/cmCPackNSISGenerator.cxx @@ -0,0 +1,990 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackNSISGenerator.h" + +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackLog.h" +#include "cmCPackComponentGroup.h" + +#include +#include +#include +#include + +/* NSIS uses different command line syntax on Windows and others */ +#ifdef _WIN32 +# define NSIS_OPT "/" +#else +# define NSIS_OPT "-" +#endif + +//---------------------------------------------------------------------- +cmCPackNSISGenerator::cmCPackNSISGenerator() +{ +} + +//---------------------------------------------------------------------- +cmCPackNSISGenerator::~cmCPackNSISGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackNSISGenerator::PackageFiles() +{ + // TODO: Fix nsis to force out file name + + std::string nsisInFileName = this->FindTemplate("NSIS.template.in"); + if ( nsisInFileName.size() == 0 ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPack error: Could not find NSIS installer template file." + << std::endl); + return false; + } + std::string nsisInInstallOptions + = this->FindTemplate("NSIS.InstallOptions.ini.in"); + if ( nsisInInstallOptions.size() == 0 ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPack error: Could not find NSIS installer options file." + << std::endl); + return false; + } + std::string nsisFileName = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + std::string tmpFile = nsisFileName; + tmpFile += "/NSISOutput.log"; + std::string nsisInstallOptions = nsisFileName + "/NSIS.InstallOptions.ini"; + nsisFileName += "/project.nsi"; + cmOStringStream str; + std::vector::const_iterator it; + for ( it = files.begin(); it != files.end(); ++ it ) + { + std::string fileN = cmSystemTools::RelativePath(toplevel.c_str(), + it->c_str()); + if (!this->Components.empty()) + { + // Strip off the component part of the path. + fileN = fileN.substr(fileN.find('/')+1, std::string::npos); + } + cmSystemTools::ReplaceString(fileN, "/", "\\"); + str << " Delete \"$INSTDIR\\" << fileN.c_str() << "\"" << std::endl; + } + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Uninstall Files: " + << str.str().c_str() << std::endl); + this->SetOptionIfNotSet("CPACK_NSIS_DELETE_FILES", str.str().c_str()); + std::vector dirs; + this->GetListOfSubdirectories(toplevel.c_str(), dirs); + std::vector::const_iterator sit; + cmOStringStream dstr; + for ( sit = dirs.begin(); sit != dirs.end(); ++ sit ) + { + std::string componentName; + std::string fileN = cmSystemTools::RelativePath(toplevel.c_str(), + sit->c_str()); + if ( fileN.empty() ) + { + continue; + } + if (!Components.empty()) + { + // If this is a component installation, strip off the component + // part of the path. + std::string::size_type slash = fileN.find('/'); + if (slash != std::string::npos) + { + // If this is a component installation, determine which component it + // is. + componentName = fileN.substr(0, slash); + + // Strip off the component part of the path. + fileN = fileN.substr(slash+1, std::string::npos); + } + } + cmSystemTools::ReplaceString(fileN, "/", "\\"); + dstr << " RMDir \"$INSTDIR\\" << fileN.c_str() << "\"" << std::endl; + if (!componentName.empty()) + { + this->Components[componentName].Directories.push_back(fileN); + } + } + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Uninstall Dirs: " + << dstr.str().c_str() << std::endl); + this->SetOptionIfNotSet("CPACK_NSIS_DELETE_DIRECTORIES", + dstr.str().c_str()); + + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Configure file: " << nsisInFileName + << " to " << nsisFileName << std::endl); + if(this->IsSet("CPACK_NSIS_MUI_ICON") + || this->IsSet("CPACK_NSIS_MUI_UNIICON")) + { + std::string installerIconCode; + if(this->IsSet("CPACK_NSIS_MUI_ICON")) + { + installerIconCode += "!define MUI_ICON \""; + installerIconCode += this->GetOption("CPACK_NSIS_MUI_ICON"); + installerIconCode += "\"\n"; + } + if(this->IsSet("CPACK_NSIS_MUI_UNIICON")) + { + installerIconCode += "!define MUI_UNICON \""; + installerIconCode += this->GetOption("CPACK_NSIS_MUI_UNIICON"); + installerIconCode += "\"\n"; + } + this->SetOptionIfNotSet("CPACK_NSIS_INSTALLER_MUI_ICON_CODE", + installerIconCode.c_str()); + } + if(this->IsSet("CPACK_PACKAGE_ICON")) + { + std::string installerIconCode = "!define MUI_HEADERIMAGE_BITMAP \""; + installerIconCode += this->GetOption("CPACK_PACKAGE_ICON"); + installerIconCode += "\"\n"; + this->SetOptionIfNotSet("CPACK_NSIS_INSTALLER_ICON_CODE", + installerIconCode.c_str()); + } + + if(this->IsSet("CPACK_NSIS_MUI_FINISHPAGE_RUN")) + { + std::string installerRunCode = "!define MUI_FINISHPAGE_RUN \"$INSTDIR\\"; + installerRunCode += this->GetOption("CPACK_NSIS_EXECUTABLES_DIRECTORY"); + installerRunCode += "\\"; + installerRunCode += this->GetOption("CPACK_NSIS_MUI_FINISHPAGE_RUN"); + installerRunCode += "\"\n"; + this->SetOptionIfNotSet("CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE", + installerRunCode.c_str()); + } + + // Setup all of the component sections + if (this->Components.empty()) + { + this->SetOptionIfNotSet("CPACK_NSIS_INSTALLATION_TYPES", ""); + this->SetOptionIfNotSet("CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC", ""); + this->SetOptionIfNotSet("CPACK_NSIS_PAGE_COMPONENTS", ""); + this->SetOptionIfNotSet("CPACK_NSIS_FULL_INSTALL", + "File /r \"${INST_DIR}\\*.*\""); + this->SetOptionIfNotSet("CPACK_NSIS_COMPONENT_SECTIONS", ""); + this->SetOptionIfNotSet("CPACK_NSIS_COMPONENT_SECTION_LIST", ""); + this->SetOptionIfNotSet("CPACK_NSIS_SECTION_SELECTED_VARS", ""); + } + else + { + std::string componentCode; + std::string sectionList; + std::string selectedVarsList; + std::string componentDescriptions; + std::string groupDescriptions; + std::string installTypesCode; + std::string defines; + cmOStringStream macrosOut; + bool anyDownloadedComponents = false; + + // Create installation types. The order is significant, so we first fill + // in a vector based on the indices, and print them in that order. + std::vector + installTypes(this->InstallationTypes.size()); + std::map::iterator installTypeIt; + for (installTypeIt = this->InstallationTypes.begin(); + installTypeIt != this->InstallationTypes.end(); + ++installTypeIt) + { + installTypes[installTypeIt->second.Index-1] = &installTypeIt->second; + } + std::vector::iterator installTypeIt2; + for (installTypeIt2 = installTypes.begin(); + installTypeIt2 != installTypes.end(); + ++installTypeIt2) + { + installTypesCode += "InstType \""; + installTypesCode += (*installTypeIt2)->DisplayName; + installTypesCode += "\"\n"; + } + + // Create installation groups first + std::map::iterator groupIt; + for (groupIt = this->ComponentGroups.begin(); + groupIt != this->ComponentGroups.end(); + ++groupIt) + { + if (groupIt->second.ParentGroup == 0) + { + componentCode += + this->CreateComponentGroupDescription(&groupIt->second, macrosOut); + } + + // Add the group description, if any. + if (!groupIt->second.Description.empty()) + { + groupDescriptions += " !insertmacro MUI_DESCRIPTION_TEXT ${" + + groupIt->first + "} \"" + + this->TranslateNewlines(groupIt->second.Description) + "\"\n"; + } + } + + // Create the remaining components, which aren't associated with groups. + std::map::iterator compIt; + for (compIt = this->Components.begin(); + compIt != this->Components.end(); + ++compIt) + { + if (compIt->second.Files.empty()) + { + // NSIS cannot cope with components that have no files. + continue; + } + + anyDownloadedComponents = + anyDownloadedComponents || compIt->second.IsDownloaded; + + if (!compIt->second.Group) + { + componentCode + += this->CreateComponentDescription(&compIt->second, macrosOut); + } + + // Add this component to the various section lists. + sectionList += " !insertmacro \"${MacroName}\" \""; + sectionList += compIt->first; + sectionList += "\"\n"; + selectedVarsList += "Var " + compIt->first + "_selected\n"; + selectedVarsList += "Var " + compIt->first + "_was_installed\n"; + + // Add the component description, if any. + if (!compIt->second.Description.empty()) + { + componentDescriptions += " !insertmacro MUI_DESCRIPTION_TEXT ${" + + compIt->first + "} \"" + + this->TranslateNewlines(compIt->second.Description) + "\"\n"; + } + } + + componentCode += macrosOut.str(); + + if (componentDescriptions.empty() && groupDescriptions.empty()) + { + // Turn off the "Description" box + this->SetOptionIfNotSet("CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC", + "!define MUI_COMPONENTSPAGE_NODESC"); + } + else + { + componentDescriptions = + "!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN\n" + + componentDescriptions + + groupDescriptions + + "!insertmacro MUI_FUNCTION_DESCRIPTION_END\n"; + this->SetOptionIfNotSet("CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC", + componentDescriptions.c_str()); + } + + if (anyDownloadedComponents) + { + defines += "!define CPACK_USES_DOWNLOAD\n"; + if (cmSystemTools::IsOn(this->GetOption("CPACK_ADD_REMOVE"))) + { + defines += "!define CPACK_NSIS_ADD_REMOVE\n"; + } + } + + this->SetOptionIfNotSet("CPACK_NSIS_INSTALLATION_TYPES", + installTypesCode.c_str()); + this->SetOptionIfNotSet("CPACK_NSIS_PAGE_COMPONENTS", + "!insertmacro MUI_PAGE_COMPONENTS"); + this->SetOptionIfNotSet("CPACK_NSIS_FULL_INSTALL", ""); + this->SetOptionIfNotSet("CPACK_NSIS_COMPONENT_SECTIONS", + componentCode.c_str()); + this->SetOptionIfNotSet("CPACK_NSIS_COMPONENT_SECTION_LIST", + sectionList.c_str()); + this->SetOptionIfNotSet("CPACK_NSIS_SECTION_SELECTED_VARS", + selectedVarsList.c_str()); + this->SetOption("CPACK_NSIS_DEFINES", defines.c_str()); + } + + this->ConfigureFile(nsisInInstallOptions.c_str(), + nsisInstallOptions.c_str()); + this->ConfigureFile(nsisInFileName.c_str(), nsisFileName.c_str()); + std::string nsisCmd = "\""; + nsisCmd += this->GetOption("CPACK_INSTALLER_PROGRAM"); + nsisCmd += "\" \"" + nsisFileName + "\""; + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Execute: " << nsisCmd.c_str() + << std::endl); + std::string output; + int retVal = 1; + bool res = cmSystemTools::RunSingleCommand(nsisCmd.c_str(), &output, + &retVal, 0, this->GeneratorVerbose, 0); + if ( !res || retVal ) + { + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << nsisCmd.c_str() << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running NSIS command: " + << nsisCmd.c_str() << std::endl + << "Please check " << tmpFile.c_str() << " for errors" << std::endl); + return 0; + } + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackNSISGenerator::InitializeInternal() +{ + if ( cmSystemTools::IsOn(this->GetOption( + "CPACK_INCLUDE_TOPLEVEL_DIRECTORY")) ) + { + cmCPackLogger(cmCPackLog::LOG_WARNING, + "NSIS Generator cannot work with CPACK_INCLUDE_TOPLEVEL_DIRECTORY set. " + "This option will be reset to 0 (for this generator only)." + << std::endl); + this->SetOption("CPACK_INCLUDE_TOPLEVEL_DIRECTORY", 0); + } + + cmCPackLogger(cmCPackLog::LOG_DEBUG, "cmCPackNSISGenerator::Initialize()" + << std::endl); + std::vector path; + std::string nsisPath; + bool gotRegValue = true; + +#ifdef _WIN32 + if ( !cmsys::SystemTools::ReadRegistryValue( + "HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS", nsisPath, + cmsys::SystemTools::KeyWOW64_32) ) + { + if ( !cmsys::SystemTools::ReadRegistryValue( + "HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS", nsisPath) ) + { + gotRegValue = false; + } + } + + if (gotRegValue) + { + path.push_back(nsisPath); + } +#endif + + nsisPath = cmSystemTools::FindProgram("makensis", path, false); + + if ( nsisPath.empty() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot find NSIS compiler makensis: likely it is not installed, " + "or not in your PATH" + << std::endl); + + if (!gotRegValue) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Could not read NSIS registry value. This is usually caused by " + "NSIS not being installed. Please install NSIS from " + "http://nsis.sourceforge.net" + << std::endl); + } + + return 0; + } + + std::string nsisCmd = "\"" + nsisPath + "\" " NSIS_OPT "VERSION"; + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Test NSIS version: " + << nsisCmd.c_str() << std::endl); + std::string output; + int retVal = 1; + bool resS = cmSystemTools::RunSingleCommand(nsisCmd.c_str(), + &output, &retVal, 0, this->GeneratorVerbose, 0); + + cmsys::RegularExpression versionRex("v([0-9]+.[0-9]+)"); + if ( !resS || retVal || !versionRex.find(output)) + { + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/NSISOutput.log"; + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << nsisCmd.c_str() << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem checking NSIS version with command: " + << nsisCmd.c_str() << std::endl + << "Please check " << tmpFile.c_str() << " for errors" << std::endl); + return 0; + } + double nsisVersion = atof(versionRex.match(1).c_str()); + double minNSISVersion = 2.09; + cmCPackLogger(cmCPackLog::LOG_DEBUG, "NSIS Version: " + << nsisVersion << std::endl); + if ( nsisVersion < minNSISVersion ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPack requires NSIS Version 2.09 or greater. NSIS found on the system " + "was: " + << nsisVersion << std::endl); + return 0; + } + this->SetOptionIfNotSet("CPACK_INSTALLER_PROGRAM", nsisPath.c_str()); + this->SetOptionIfNotSet("CPACK_NSIS_EXECUTABLES_DIRECTORY", "bin"); + const char* cpackPackageExecutables + = this->GetOption("CPACK_PACKAGE_EXECUTABLES"); + const char* cpackPackageDeskTopLinks + = this->GetOption("CPACK_CREATE_DESKTOP_LINKS"); + const char* cpackNsisExecutablesDirectory + = this->GetOption("CPACK_NSIS_EXECUTABLES_DIRECTORY"); + std::vector cpackPackageDesktopLinksVector; + if(cpackPackageDeskTopLinks) + { + cmCPackLogger(cmCPackLog::LOG_DEBUG, "CPACK_CREATE_DESKTOP_LINKS: " + << cpackPackageDeskTopLinks << std::endl); + + cmSystemTools:: + ExpandListArgument(cpackPackageDeskTopLinks, + cpackPackageDesktopLinksVector); + for(std::vector::iterator i = + cpackPackageDesktopLinksVector.begin(); i != + cpackPackageDesktopLinksVector.end(); ++i) + { + cmCPackLogger(cmCPackLog::LOG_DEBUG, "CPACK_CREATE_DESKTOP_LINKS: " + << *i << std::endl); + } + } + else + { + cmCPackLogger(cmCPackLog::LOG_DEBUG, "CPACK_CREATE_DESKTOP_LINKS: " + << "not set" << std::endl); + } + + cmOStringStream str; + cmOStringStream deleteStr; + + if ( cpackPackageExecutables ) + { + cmCPackLogger(cmCPackLog::LOG_DEBUG, "The cpackPackageExecutables: " + << cpackPackageExecutables << "." << std::endl); + std::vector cpackPackageExecutablesVector; + cmSystemTools::ExpandListArgument(cpackPackageExecutables, + cpackPackageExecutablesVector); + if ( cpackPackageExecutablesVector.size() % 2 != 0 ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_PACKAGE_EXECUTABLES should contain pairs of and " + "." << std::endl); + return 0; + } + std::vector::iterator it; + for ( it = cpackPackageExecutablesVector.begin(); + it != cpackPackageExecutablesVector.end(); + ++it ) + { + std::string execName = *it; + ++ it; + std::string linkName = *it; + str << " CreateShortCut \"$SMPROGRAMS\\$STARTMENU_FOLDER\\" + << linkName << ".lnk\" \"$INSTDIR\\" + << cpackNsisExecutablesDirectory << "\\" << execName << ".exe\"" + << std::endl; + deleteStr << " Delete \"$SMPROGRAMS\\$MUI_TEMP\\" << linkName + << ".lnk\"" << std::endl; + // see if CPACK_CREATE_DESKTOP_LINK_ExeName is on + // if so add a desktop link + if(cpackPackageDesktopLinksVector.size() && + std::find(cpackPackageDesktopLinksVector.begin(), + cpackPackageDesktopLinksVector.end(), + execName) + != cpackPackageDesktopLinksVector.end()) + { + str << " StrCmp \"$INSTALL_DESKTOP\" \"1\" 0 +2\n"; + str << " CreateShortCut \"$DESKTOP\\" + << linkName << ".lnk\" \"$INSTDIR\\" + << cpackNsisExecutablesDirectory << "\\" << execName << ".exe\"" + << std::endl; + deleteStr << " StrCmp \"$INSTALL_DESKTOP\" \"1\" 0 +2\n"; + deleteStr << " Delete \"$DESKTOP\\" << linkName + << ".lnk\"" << std::endl; + } + } + } + + this->CreateMenuLinks(str, deleteStr); + this->SetOptionIfNotSet("CPACK_NSIS_CREATE_ICONS", str.str().c_str()); + this->SetOptionIfNotSet("CPACK_NSIS_DELETE_ICONS", + deleteStr.str().c_str()); + + this->SetOptionIfNotSet("CPACK_NSIS_COMPRESSOR", "lzma"); + + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +void cmCPackNSISGenerator::CreateMenuLinks( cmOStringStream& str, + cmOStringStream& deleteStr) +{ + const char* cpackMenuLinks + = this->GetOption("CPACK_NSIS_MENU_LINKS"); + if(!cpackMenuLinks) + { + return; + } + cmCPackLogger(cmCPackLog::LOG_DEBUG, "The cpackMenuLinks: " + << cpackMenuLinks << "." << std::endl); + std::vector cpackMenuLinksVector; + cmSystemTools::ExpandListArgument(cpackMenuLinks, + cpackMenuLinksVector); + if ( cpackMenuLinksVector.size() % 2 != 0 ) + { + cmCPackLogger( + cmCPackLog::LOG_ERROR, + "CPACK_PACKAGE_EXECUTABLES should contain pairs of and " + "." << std::endl); + return; + } + + cmsys::RegularExpression urlRegex; + urlRegex.compile("^(mailto:|(ftps?|https?|news)://).*$"); + + std::vector::iterator it; + for ( it = cpackMenuLinksVector.begin(); + it != cpackMenuLinksVector.end(); + ++it ) + { + std::string sourceName = *it; + const bool url = urlRegex.find(sourceName); + + // Convert / to \ in filenames, but not in urls: + // + if(!url) + { + cmSystemTools::ReplaceString(sourceName, "/", "\\"); + } + + ++ it; + std::string linkName = *it; + if(!url) + { + str << " CreateShortCut \"$SMPROGRAMS\\$STARTMENU_FOLDER\\" + << linkName << ".lnk\" \"$INSTDIR\\" << sourceName << "\"" + << std::endl; + deleteStr << " Delete \"$SMPROGRAMS\\$MUI_TEMP\\" << linkName + << ".lnk\"" << std::endl; + } + else + { + str << " WriteINIStr \"$SMPROGRAMS\\$STARTMENU_FOLDER\\" + << linkName << ".url\" \"InternetShortcut\" \"URL\" \"" + << sourceName << "\"" + << std::endl; + deleteStr << " Delete \"$SMPROGRAMS\\$MUI_TEMP\\" << linkName + << ".url\"" << std::endl; + } + // see if CPACK_CREATE_DESKTOP_LINK_ExeName is on + // if so add a desktop link + std::string desktop = "CPACK_CREATE_DESKTOP_LINK_"; + desktop += linkName; + if(this->IsSet(desktop.c_str())) + { + str << " StrCmp \"$INSTALL_DESKTOP\" \"1\" 0 +2\n"; + str << " CreateShortCut \"$DESKTOP\\" + << linkName << ".lnk\" \"$INSTDIR\\" << sourceName << "\"" + << std::endl; + deleteStr << " StrCmp \"$INSTALL_DESKTOP\" \"1\" 0 +2\n"; + deleteStr << " Delete \"$DESKTOP\\" << linkName + << ".lnk\"" << std::endl; + } + } +} + +//---------------------------------------------------------------------- +bool cmCPackNSISGenerator::GetListOfSubdirectories(const char* topdir, + std::vector& dirs) +{ + cmsys::Directory dir; + dir.Load(topdir); + size_t fileNum; + for (fileNum = 0; fileNum < dir.GetNumberOfFiles(); ++fileNum) + { + if (strcmp(dir.GetFile(static_cast(fileNum)),".") && + strcmp(dir.GetFile(static_cast(fileNum)),"..")) + { + cmsys_stl::string fullPath = topdir; + fullPath += "/"; + fullPath += dir.GetFile(static_cast(fileNum)); + if(cmsys::SystemTools::FileIsDirectory(fullPath.c_str()) && + !cmsys::SystemTools::FileIsSymlink(fullPath.c_str())) + { + if (!this->GetListOfSubdirectories(fullPath.c_str(), dirs)) + { + return false; + } + } + } + } + dirs.push_back(topdir); + return true; +} + +//---------------------------------------------------------------------- +bool cmCPackNSISGenerator::SupportsComponentInstallation() const +{ + return true; +} + +//---------------------------------------------------------------------- +std::string +cmCPackNSISGenerator:: +CreateComponentDescription(cmCPackComponent *component, + cmOStringStream& macrosOut) +{ + // Basic description of the component + std::string componentCode = "Section "; + if (component->IsDisabledByDefault) + { + componentCode += "/o "; + } + componentCode += "\""; + if (component->IsHidden) + { + componentCode += "-"; + } + componentCode += component->DisplayName + "\" " + component->Name + "\n"; + if (component->IsRequired) + { + componentCode += " SectionIn RO\n"; + } + else if (!component->InstallationTypes.empty()) + { + cmOStringStream out; + std::vector::iterator installTypeIter; + for (installTypeIter = component->InstallationTypes.begin(); + installTypeIter != component->InstallationTypes.end(); + ++installTypeIter) + { + out << " " << (*installTypeIter)->Index; + } + componentCode += " SectionIn" + out.str() + "\n"; + } + componentCode += " SetOutPath \"$INSTDIR\"\n"; + + // Create the actual installation commands + if (component->IsDownloaded) + { + if (component->ArchiveFile.empty()) + { + // Compute the name of the archive. + std::string packagesDir = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + packagesDir += ".dummy"; + cmOStringStream out; + out << cmSystemTools::GetFilenameWithoutLastExtension(packagesDir) + << "-" << component->Name << ".zip"; + component->ArchiveFile = out.str(); + } + + // Create the directory for the upload area + const char* userUploadDirectory = + this->GetOption("CPACK_UPLOAD_DIRECTORY"); + std::string uploadDirectory; + if (userUploadDirectory && *userUploadDirectory) + { + uploadDirectory = userUploadDirectory; + } + else + { + uploadDirectory= this->GetOption("CPACK_PACKAGE_DIRECTORY"); + uploadDirectory += "/CPackUploads"; + } + if(!cmSystemTools::FileExists(uploadDirectory.c_str())) + { + if (!cmSystemTools::MakeDirectory(uploadDirectory.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Unable to create NSIS upload directory " << uploadDirectory + << std::endl); + return ""; + } + } + + // Remove the old archive, if one exists + std::string archiveFile = uploadDirectory + '/' + component->ArchiveFile; + cmCPackLogger(cmCPackLog::LOG_OUTPUT, + "- Building downloaded component archive: " + << archiveFile << std::endl); + if (cmSystemTools::FileExists(archiveFile.c_str(), true)) + { + if (!cmSystemTools::RemoveFile(archiveFile.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Unable to remove archive file " << archiveFile + << std::endl); + return ""; + } + } + + // Find a ZIP program + if (!this->IsSet("ZIP_EXECUTABLE")) + { + this->ReadListFile("CPackZIP.cmake"); + + if (!this->IsSet("ZIP_EXECUTABLE")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Unable to find ZIP program" + << std::endl); + return ""; + } + } + + // The directory where this component's files reside + std::string dirName = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + dirName += '/'; + dirName += component->Name; + dirName += '/'; + + // Build the list of files to go into this archive, and determine the + // size of the installed component. + std::string zipListFileName = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + zipListFileName += "/winZip.filelist"; + bool needQuotesInFile + = cmSystemTools::IsOn(this->GetOption("CPACK_ZIP_NEED_QUOTES")); + unsigned long totalSize = 0; + { // the scope is needed for cmGeneratedFileStream + cmGeneratedFileStream out(zipListFileName.c_str()); + std::vector::iterator fileIt; + for (fileIt = component->Files.begin(); + fileIt != component->Files.end(); + ++fileIt) + { + if ( needQuotesInFile ) + { + out << "\""; + } + out << *fileIt; + if ( needQuotesInFile ) + { + out << "\""; + } + out << std::endl; + + totalSize += cmSystemTools::FileLength((dirName + *fileIt).c_str()); + } + } + + // Build the archive in the upload area + std::string cmd = this->GetOption("CPACK_ZIP_COMMAND"); + cmsys::SystemTools::ReplaceString(cmd, "", archiveFile.c_str()); + cmsys::SystemTools::ReplaceString(cmd, "", + zipListFileName.c_str()); + std::string output; + int retVal = -1; + int res = cmSystemTools::RunSingleCommand(cmd.c_str(), &output, &retVal, + dirName.c_str(), + cmSystemTools::OUTPUT_NONE, 0); + if ( !res || retVal ) + { + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/CompressZip.log"; + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << cmd.c_str() << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running zip command: " + << cmd.c_str() << std::endl + << "Please check " << tmpFile.c_str() << " for errors" << std::endl); + return ""; + } + + // Create the NSIS code to download this file on-the-fly. + unsigned long totalSizeInKbytes = (totalSize + 512) / 1024; + if (totalSizeInKbytes == 0) + { + totalSizeInKbytes = 1; + } + cmOStringStream out; + out << " AddSize " << totalSizeInKbytes << "\n" + << " Push \"" << component->ArchiveFile << "\"\n" + << " Call DownloadFile\n" + << " ZipDLL::extractall \"$INSTDIR\\" + << component->ArchiveFile << "\" \"$INSTDIR\"\n" + << " Pop $2 ; error message\n" + " StrCmp $2 \"success\" +2 0\n" + " MessageBox MB_OK \"Failed to unzip $2\"\n" + " Delete $INSTDIR\\$0\n"; + componentCode += out.str(); + } + else + { + componentCode += " File /r \"${INST_DIR}\\" + + component->Name + "\\*.*\"\n"; + } + componentCode += "SectionEnd\n"; + + // Macro used to remove the component + macrosOut << "!macro Remove_${" << component->Name << "}\n"; + macrosOut << " IntCmp $" << component->Name << "_was_installed 0 noremove_" + << component->Name << "\n"; + std::vector::iterator pathIt; + std::string path; + for (pathIt = component->Files.begin(); + pathIt != component->Files.end(); + ++pathIt) + { + path = *pathIt; + cmSystemTools::ReplaceString(path, "/", "\\"); + macrosOut << " Delete \"$INSTDIR\\" + << path.c_str() + << "\"\n"; + } + for (pathIt = component->Directories.begin(); + pathIt != component->Directories.end(); + ++pathIt) + { + path = *pathIt; + cmSystemTools::ReplaceString(path, "/", "\\"); + macrosOut << " RMDir \"$INSTDIR\\" + << path.c_str() + << "\"\n"; + } + macrosOut << " noremove_" << component->Name << ":\n"; + macrosOut << "!macroend\n"; + + // Macro used to select each of the components that this component + // depends on. + std::set visited; + macrosOut << "!macro Select_" << component->Name << "_depends\n"; + macrosOut << CreateSelectionDependenciesDescription(component, visited); + macrosOut << "!macroend\n"; + + // Macro used to deselect each of the components that depend on this + // component. + visited.clear(); + macrosOut << "!macro Deselect_required_by_" << component->Name << "\n"; + macrosOut << CreateDeselectionDependenciesDescription(component, visited); + macrosOut << "!macroend\n"; + return componentCode; +} + +//---------------------------------------------------------------------- +std::string cmCPackNSISGenerator::CreateSelectionDependenciesDescription + (cmCPackComponent *component, + std::set& visited) +{ + // Don't visit a component twice + if (visited.count(component)) + { + return std::string(); + } + visited.insert(component); + + cmOStringStream out; + std::vector::iterator dependIt; + for (dependIt = component->Dependencies.begin(); + dependIt != component->Dependencies.end(); + ++dependIt) + { + // Write NSIS code to select this dependency + out << " SectionGetFlags ${" << (*dependIt)->Name << "} $0\n"; + out << " IntOp $0 $0 | ${SF_SELECTED}\n"; + out << " SectionSetFlags ${" << (*dependIt)->Name << "} $0\n"; + out << " IntOp $" << (*dependIt)->Name + << "_selected 0 + ${SF_SELECTED}\n"; + // Recurse + out << CreateSelectionDependenciesDescription(*dependIt, visited).c_str(); + } + + return out.str(); +} + + +//---------------------------------------------------------------------- +std::string cmCPackNSISGenerator::CreateDeselectionDependenciesDescription + (cmCPackComponent *component, + std::set& visited) +{ + // Don't visit a component twice + if (visited.count(component)) + { + return std::string(); + } + visited.insert(component); + + cmOStringStream out; + std::vector::iterator dependIt; + for (dependIt = component->ReverseDependencies.begin(); + dependIt != component->ReverseDependencies.end(); + ++dependIt) + { + // Write NSIS code to deselect this dependency + out << " SectionGetFlags ${" << (*dependIt)->Name << "} $0\n"; + out << " IntOp $1 ${SF_SELECTED} ~\n"; + out << " IntOp $0 $0 & $1\n"; + out << " SectionSetFlags ${" << (*dependIt)->Name << "} $0\n"; + out << " IntOp $" << (*dependIt)->Name << "_selected 0 + 0\n"; + + // Recurse + out << + CreateDeselectionDependenciesDescription(*dependIt, visited).c_str(); + } + + return out.str(); +} + +//---------------------------------------------------------------------- +std::string +cmCPackNSISGenerator:: +CreateComponentGroupDescription(cmCPackComponentGroup *group, + cmOStringStream& macrosOut) +{ + if (group->Components.empty() && group->Subgroups.empty()) + { + // Silently skip empty groups. NSIS doesn't support them. + return std::string(); + } + + std::string code = "SectionGroup "; + if (group->IsExpandedByDefault) + { + code += "/e "; + } + if (group->IsBold) + { + code += "\"!" + group->DisplayName + "\" " + group->Name + "\n"; + } + else + { + code += "\"" + group->DisplayName + "\" " + group->Name + "\n"; + } + + std::vector::iterator groupIt; + for (groupIt = group->Subgroups.begin(); groupIt != group->Subgroups.end(); + ++groupIt) + { + code += this->CreateComponentGroupDescription(*groupIt, macrosOut); + } + + std::vector::iterator comp; + for (comp = group->Components.begin(); + comp != group->Components.end(); + ++comp) + { + if ((*comp)->Files.empty()) + { + continue; + } + + code += this->CreateComponentDescription(*comp, macrosOut); + } + code += "SectionGroupEnd\n"; + return code; +} + +std::string cmCPackNSISGenerator::TranslateNewlines(std::string str) +{ + cmSystemTools::ReplaceString(str, "\n", "$\\r$\\n"); + return str; +} diff --git a/Source/CPack/cmCPackNSISGenerator.h b/Source/CPack/cmCPackNSISGenerator.h new file mode 100644 index 0000000..7bccb89 --- /dev/null +++ b/Source/CPack/cmCPackNSISGenerator.h @@ -0,0 +1,80 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackNSISGenerator_h +#define cmCPackNSISGenerator_h + + +#include "cmCPackGenerator.h" +#include + +/** \class cmCPackNSISGenerator + * \brief A generator for NSIS files + * + * http://people.freebsd.org/~kientzle/libarchive/ + */ +class cmCPackNSISGenerator : public cmCPackGenerator +{ +public: + cmCPackTypeMacro(cmCPackNSISGenerator, cmCPackGenerator); + + /** + * Construct generator + */ + cmCPackNSISGenerator(); + virtual ~cmCPackNSISGenerator(); + +protected: + virtual int InitializeInternal(); + void CreateMenuLinks( cmOStringStream& str, + cmOStringStream& deleteStr); + int PackageFiles(); + virtual const char* GetOutputExtension() { return ".exe"; } + virtual const char* GetOutputPostfix() { return "win32"; } + + bool GetListOfSubdirectories(const char* dir, + std::vector& dirs); + + virtual bool SupportsComponentInstallation() const; + + /// Produce a string that contains the NSIS code to describe a + /// particular component. Any added macros will be emitted via + /// macrosOut. + std::string + CreateComponentDescription(cmCPackComponent *component, + cmOStringStream& macrosOut); + + /// Produce NSIS code that selects all of the components that this component + /// depends on, recursively. + std::string CreateSelectionDependenciesDescription + (cmCPackComponent *component, + std::set& visited); + + /// Produce NSIS code that de-selects all of the components that are + /// dependent on this component, recursively. + std::string CreateDeselectionDependenciesDescription + (cmCPackComponent *component, + std::set& visited); + + /// Produce a string that contains the NSIS code to describe a + /// particular component group, including its components. Any + /// added macros will be emitted via macrosOut. + std::string + CreateComponentGroupDescription(cmCPackComponentGroup *group, + cmOStringStream& macrosOut); + + /// Translations any newlines found in the string into \\r\\n, so that the + /// resulting string can be used within NSIS. + static std::string TranslateNewlines(std::string str); +}; + +#endif diff --git a/Source/CPack/cmCPackOSXX11Generator.cxx b/Source/CPack/cmCPackOSXX11Generator.cxx new file mode 100644 index 0000000..363ccea --- /dev/null +++ b/Source/CPack/cmCPackOSXX11Generator.cxx @@ -0,0 +1,311 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCPackOSXX11Generator.h" + +#include "cmake.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackLog.h" + +#include +#include +#include + +//---------------------------------------------------------------------- +cmCPackOSXX11Generator::cmCPackOSXX11Generator() +{ +} + +//---------------------------------------------------------------------- +cmCPackOSXX11Generator::~cmCPackOSXX11Generator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackOSXX11Generator::PackageFiles() +{ + // TODO: Use toplevel ? + // It is used! Is this an obsolete comment? + + const char* cpackPackageExecutables + = this->GetOption("CPACK_PACKAGE_EXECUTABLES"); + if ( cpackPackageExecutables ) + { + cmCPackLogger(cmCPackLog::LOG_DEBUG, "The cpackPackageExecutables: " + << cpackPackageExecutables << "." << std::endl); + cmOStringStream str; + cmOStringStream deleteStr; + std::vector cpackPackageExecutablesVector; + cmSystemTools::ExpandListArgument(cpackPackageExecutables, + cpackPackageExecutablesVector); + if ( cpackPackageExecutablesVector.size() % 2 != 0 ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "CPACK_PACKAGE_EXECUTABLES should contain pairs of and " + "." << std::endl); + return 0; + } + std::vector::iterator it; + for ( it = cpackPackageExecutablesVector.begin(); + it != cpackPackageExecutablesVector.end(); + ++it ) + { + std::string cpackExecutableName = *it; + ++ it; + this->SetOptionIfNotSet("CPACK_EXECUTABLE_NAME", + cpackExecutableName.c_str()); + } + } + + // Disk image directories + std::string diskImageDirectory = toplevel; + std::string diskImageBackgroundImageDir + = diskImageDirectory + "/.background"; + + + // App bundle directories + std::string packageDirFileName = toplevel; + packageDirFileName += "/"; + packageDirFileName += this->GetOption("CPACK_PACKAGE_FILE_NAME"); + packageDirFileName += ".app"; + std::string contentsDirectory = packageDirFileName + "/Contents"; + std::string resourcesDirectory = contentsDirectory + "/Resources"; + std::string appDirectory = contentsDirectory + "/MacOS"; + std::string scriptDirectory = resourcesDirectory + "/Scripts"; + std::string resourceFileName = this->GetOption("CPACK_PACKAGE_FILE_NAME"); + resourceFileName += ".rsrc"; + + const char* dir = resourcesDirectory.c_str(); + const char* appdir = appDirectory.c_str(); + const char* scrDir = scriptDirectory.c_str(); + const char* contDir = contentsDirectory.c_str(); + const char* rsrcFile = resourceFileName.c_str(); + const char* iconFile = this->GetOption("CPACK_PACKAGE_ICON"); + if ( iconFile ) + { + std::string iconFileName = cmsys::SystemTools::GetFilenameName( + iconFile); + if ( !cmSystemTools::FileExists(iconFile) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find icon file: " + << iconFile << ". Please check CPACK_PACKAGE_ICON setting." + << std::endl); + return 0; + } + std::string destFileName = resourcesDirectory + "/" + iconFileName; + this->ConfigureFile(iconFile, destFileName.c_str(), true); + this->SetOptionIfNotSet("CPACK_APPLE_GUI_ICON", iconFileName.c_str()); + } + + std::string applicationsLinkName = diskImageDirectory + "/Applications"; + cmSystemTools::CreateSymlink("/Applications", applicationsLinkName.c_str()); + + if ( + !this->CopyResourcePlistFile("VolumeIcon.icns", + diskImageDirectory.c_str(), + ".VolumeIcon.icns", true ) || + !this->CopyResourcePlistFile("DS_Store", diskImageDirectory.c_str(), + ".DS_Store", true ) || + !this->CopyResourcePlistFile("background.png", + diskImageBackgroundImageDir.c_str(), "background.png", true ) || + !this->CopyResourcePlistFile("RuntimeScript", dir) || + !this->CopyResourcePlistFile("OSXX11.Info.plist", contDir, + "Info.plist" ) || + !this->CopyResourcePlistFile("OSXX11.main.scpt", scrDir, + "main.scpt", true ) || + !this->CopyResourcePlistFile("OSXScriptLauncher.rsrc", dir, + rsrcFile, true) || + !this->CopyResourcePlistFile("OSXScriptLauncher", appdir, + this->GetOption("CPACK_PACKAGE_FILE_NAME"), true) + ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem copying the resource files" + << std::endl); + return 0; + } + + // Two of the files need to have execute permission, so ensure they do: + std::string runTimeScript = dir; + runTimeScript += "/"; + runTimeScript += "RuntimeScript"; + + std::string appScriptName = appdir; + appScriptName += "/"; + appScriptName += this->GetOption("CPACK_PACKAGE_FILE_NAME"); + + mode_t mode; + if (cmsys::SystemTools::GetPermissions(runTimeScript.c_str(), mode)) + { + mode |= (S_IXUSR | S_IXGRP | S_IXOTH); + cmsys::SystemTools::SetPermissions(runTimeScript.c_str(), mode); + cmCPackLogger(cmCPackLog::LOG_OUTPUT, "Setting: " << runTimeScript + << " to permission: " << mode << std::endl); + } + + if (cmsys::SystemTools::GetPermissions(appScriptName.c_str(), mode)) + { + mode |= (S_IXUSR | S_IXGRP | S_IXOTH); + cmsys::SystemTools::SetPermissions(appScriptName.c_str(), mode); + cmCPackLogger(cmCPackLog::LOG_OUTPUT, "Setting: " << appScriptName + << " to permission: " << mode << std::endl); + } + + std::string output; + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/hdiutilOutput.log"; + cmOStringStream dmgCmd; + dmgCmd << "\"" << this->GetOption("CPACK_INSTALLER_PROGRAM_DISK_IMAGE") + << "\" create -ov -format UDZO -srcfolder \"" + << diskImageDirectory.c_str() + << "\" \"" << packageFileNames[0] << "\""; + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Compress disk image using command: " + << dmgCmd.str().c_str() << std::endl); + // since we get random dashboard failures with this one + // try running it more than once + int retVal = 1; + int numTries = 10; + bool res = false; + while(numTries > 0) + { + res = cmSystemTools::RunSingleCommand(dmgCmd.str().c_str(), &output, + &retVal, 0, + this->GeneratorVerbose, 0); + if ( res && !retVal ) + { + numTries = -1; + break; + } + cmSystemTools::Delay(500); + numTries--; + } + if ( !res || retVal ) + { + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << dmgCmd.str().c_str() << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running hdiutil command: " + << dmgCmd.str().c_str() << std::endl + << "Please check " << tmpFile.c_str() << " for errors" << std::endl); + return 0; + } + + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackOSXX11Generator::InitializeInternal() +{ + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "cmCPackOSXX11Generator::Initialize()" << std::endl); + std::vector path; + std::string pkgPath = cmSystemTools::FindProgram("hdiutil", path, false); + if ( pkgPath.empty() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find hdiutil compiler" + << std::endl); + return 0; + } + this->SetOptionIfNotSet("CPACK_INSTALLER_PROGRAM_DISK_IMAGE", + pkgPath.c_str()); + + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +/* +bool cmCPackOSXX11Generator::CopyCreateResourceFile(const char* name) +{ + std::string uname = cmSystemTools::UpperCase(name); + std::string cpackVar = "CPACK_RESOURCE_FILE_" + uname; + const char* inFileName = this->GetOption(cpackVar.c_str()); + if ( !inFileName ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "CPack option: " << cpackVar.c_str() + << " not specified. It should point to " + << (name ? name : "(NULL)") + << ".rtf, " << name + << ".html, or " << name << ".txt file" << std::endl); + return false; + } + if ( !cmSystemTools::FileExists(inFileName) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find " + << (name ? name : "(NULL)") + << " resource file: " << inFileName << std::endl); + return false; + } + std::string ext = cmSystemTools::GetFilenameLastExtension(inFileName); + if ( ext != ".rtfd" && ext != ".rtf" && ext != ".html" && ext != ".txt" ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Bad file extension specified: " + << ext << ". Currently only .rtfd, .rtf, .html, and .txt files allowed." + << std::endl); + return false; + } + + std::string destFileName = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + destFileName += "/Resources/"; + destFileName += name + ext; + + + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Configure file: " + << (inFileName ? inFileName : "(NULL)") + << " to " << destFileName.c_str() << std::endl); + this->ConfigureFile(inFileName, destFileName.c_str()); + return true; +} +*/ + +//---------------------------------------------------------------------- +bool cmCPackOSXX11Generator::CopyResourcePlistFile(const char* name, + const char* dir, const char* outputFileName /* = 0 */, + bool copyOnly /* = false */) +{ + std::string inFName = "CPack."; + inFName += name; + inFName += ".in"; + std::string inFileName = this->FindTemplate(inFName.c_str()); + if ( inFileName.empty() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find input file: " + << inFName << std::endl); + return false; + } + + if ( !outputFileName ) + { + outputFileName = name; + } + + std::string destFileName = dir; + destFileName += "/"; + destFileName += outputFileName; + + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Configure file: " + << inFileName.c_str() << " to " << destFileName.c_str() << std::endl); + this->ConfigureFile(inFileName.c_str(), destFileName.c_str(), copyOnly); + return true; +} + +//---------------------------------------------------------------------- +const char* cmCPackOSXX11Generator::GetPackagingInstallPrefix() +{ + this->InstallPrefix = "/"; + this->InstallPrefix += this->GetOption("CPACK_PACKAGE_FILE_NAME"); + this->InstallPrefix += ".app/Contents/Resources"; + return this->InstallPrefix.c_str(); +} diff --git a/Source/CPack/cmCPackOSXX11Generator.h b/Source/CPack/cmCPackOSXX11Generator.h new file mode 100644 index 0000000..b7bd243 --- /dev/null +++ b/Source/CPack/cmCPackOSXX11Generator.h @@ -0,0 +1,46 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackOSXX11Generator_h +#define cmCPackOSXX11Generator_h + +#include "cmCPackGenerator.h" + +/** \class cmCPackOSXX11Generator + * \brief A generator for OSX X11 modules + * + * Based on Gimp.app + */ +class cmCPackOSXX11Generator : public cmCPackGenerator +{ +public: + cmCPackTypeMacro(cmCPackOSXX11Generator, cmCPackGenerator); + + /** + * Construct generator + */ + cmCPackOSXX11Generator(); + virtual ~cmCPackOSXX11Generator(); + +protected: + virtual int InitializeInternal(); + int PackageFiles(); + virtual const char* GetPackagingInstallPrefix(); + virtual const char* GetOutputExtension() { return ".dmg"; } + + //bool CopyCreateResourceFile(const char* name, const char* dir); + bool CopyResourcePlistFile(const char* name, const char* dir, + const char* outputFileName = 0, bool copyOnly = false); + std::string InstallPrefix; +}; + +#endif diff --git a/Source/CPack/cmCPackPackageMakerGenerator.cxx b/Source/CPack/cmCPackPackageMakerGenerator.cxx new file mode 100644 index 0000000..3a0e89b --- /dev/null +++ b/Source/CPack/cmCPackPackageMakerGenerator.cxx @@ -0,0 +1,982 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCPackPackageMakerGenerator.h" + +#include "cmake.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackComponentGroup.h" +#include "cmCPackLog.h" + +#include +#include + +//---------------------------------------------------------------------- +cmCPackPackageMakerGenerator::cmCPackPackageMakerGenerator() +{ + this->PackageMakerVersion = 0.0; + this->PackageCompatibilityVersion = 10.4; +} + +//---------------------------------------------------------------------- +cmCPackPackageMakerGenerator::~cmCPackPackageMakerGenerator() +{ +} + +//---------------------------------------------------------------------- +bool cmCPackPackageMakerGenerator::SupportsComponentInstallation() const +{ + return this->PackageCompatibilityVersion >= 10.4; +} + +//---------------------------------------------------------------------- +int cmCPackPackageMakerGenerator::CopyInstallScript(const char* resdir, + const char* script, + const char* name) +{ + std::string dst = resdir; + dst += "/"; + dst += name; + cmSystemTools::CopyFileAlways(script, dst.c_str()); + cmSystemTools::SetPermissions(dst.c_str(),0777); + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "copy script : " << script << "\ninto " << dst.c_str() << + std::endl); + + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackPackageMakerGenerator::PackageFiles() +{ + // TODO: Use toplevel + // It is used! Is this an obsolete comment? + + std::string resDir; // Where this package's resources will go. + std::string packageDirFileName + = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + if (this->Components.empty()) + { + packageDirFileName += ".pkg"; + resDir = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + resDir += "/Resources"; + } + else + { + packageDirFileName += ".mpkg"; + if ( !cmsys::SystemTools::MakeDirectory(packageDirFileName.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "unable to create package directory " + << packageDirFileName << std::endl); + return 0; + } + + resDir = packageDirFileName; + resDir += "/Contents"; + if ( !cmsys::SystemTools::MakeDirectory(resDir.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "unable to create package subdirectory " << resDir + << std::endl); + return 0; + } + + resDir += "/Resources"; + if ( !cmsys::SystemTools::MakeDirectory(resDir.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "unable to create package subdirectory " << resDir + << std::endl); + return 0; + } + + resDir += "/en.lproj"; + } + + + // Create directory structure + std::string preflightDirName = resDir + "/PreFlight"; + std::string postflightDirName = resDir + "/PostFlight"; + const char* preflight = this->GetOption("CPACK_PREFLIGHT_SCRIPT"); + const char* postflight = this->GetOption("CPACK_POSTFLIGHT_SCRIPT"); + const char* postupgrade = this->GetOption("CPACK_POSTUPGRADE_SCRIPT"); + // if preflight or postflight scripts not there create directories + // of the same name, I think this makes it work + if(!preflight) + { + if ( !cmsys::SystemTools::MakeDirectory(preflightDirName.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem creating installer directory: " + << preflightDirName.c_str() << std::endl); + return 0; + } + } + if(!postflight) + { + if ( !cmsys::SystemTools::MakeDirectory(postflightDirName.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem creating installer directory: " + << postflightDirName.c_str() << std::endl); + return 0; + } + } + // if preflight, postflight, or postupgrade are set + // then copy them into the resource directory and make + // them executable + if(preflight) + { + this->CopyInstallScript(resDir.c_str(), + preflight, + "preflight"); + } + if(postflight) + { + this->CopyInstallScript(resDir.c_str(), + postflight, + "postflight"); + } + if(postupgrade) + { + this->CopyInstallScript(resDir.c_str(), + postupgrade, + "postupgrade"); + } + + if (!this->Components.empty()) + { + // Create the directory where component packages will be built. + std::string basePackageDir = packageDirFileName; + basePackageDir += "/Contents/Packages"; + if (!cmsys::SystemTools::MakeDirectory(basePackageDir.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem creating component packages directory: " + << basePackageDir.c_str() << std::endl); + return 0; + } + + // Create the directory where downloaded component packages will + // be placed. + const char* userUploadDirectory = + this->GetOption("CPACK_UPLOAD_DIRECTORY"); + std::string uploadDirectory; + if (userUploadDirectory && *userUploadDirectory) + { + uploadDirectory = userUploadDirectory; + } + else + { + uploadDirectory= this->GetOption("CPACK_PACKAGE_DIRECTORY"); + uploadDirectory += "/CPackUploads"; + } + + // Create packages for each component + bool warnedAboutDownloadCompatibility = false; + + std::map::iterator compIt; + for (compIt = this->Components.begin(); compIt != this->Components.end(); + ++compIt) + { + std::string packageFile; + if (compIt->second.IsDownloaded) + { + if (this->PackageCompatibilityVersion >= 10.5 && + this->PackageMakerVersion >= 3.0) + { + // Build this package within the upload directory. + packageFile = uploadDirectory; + + if(!cmSystemTools::FileExists(uploadDirectory.c_str())) + { + if (!cmSystemTools::MakeDirectory(uploadDirectory.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Unable to create package upload directory " + << uploadDirectory << std::endl); + return 0; + } + } + } + else if (!warnedAboutDownloadCompatibility) + { + if (this->PackageCompatibilityVersion < 10.5) + { + cmCPackLogger( + cmCPackLog::LOG_WARNING, + "CPack warning: please set CPACK_OSX_PACKAGE_VERSION to 10.5 " + "or greater enable downloaded packages. CPack will build a " + "non-downloaded package." + << std::endl); + } + + if (this->PackageMakerVersion < 3) + { + cmCPackLogger(cmCPackLog::LOG_WARNING, + "CPack warning: unable to build downloaded " + "packages with PackageMaker versions prior " + "to 3.0. CPack will build a non-downloaded package." + << std::endl); + } + + warnedAboutDownloadCompatibility = true; + } + } + + if (packageFile.empty()) + { + // Build this package within the overall distribution + // metapackage. + packageFile = basePackageDir; + + // We're not downloading this component, even if the user + // requested it. + compIt->second.IsDownloaded = false; + } + + packageFile += '/'; + packageFile += GetPackageName(compIt->second); + + std::string packageDir = toplevel; + packageDir += '/'; + packageDir += compIt->first; + if (!this->GenerateComponentPackage(packageFile.c_str(), + packageDir.c_str(), + compIt->second)) + { + return 0; + } + } + } + this->SetOption("CPACK_MODULE_VERSION_SUFFIX", ""); + + // Copy or create all of the resource files we need. + if ( !this->CopyCreateResourceFile("License", resDir.c_str()) + || !this->CopyCreateResourceFile("ReadMe", resDir.c_str()) + || !this->CopyCreateResourceFile("Welcome", resDir.c_str()) + || !this->CopyResourcePlistFile("Info.plist") + || !this->CopyResourcePlistFile("Description.plist") ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem copying the resource files" + << std::endl); + return 0; + } + + if (this->Components.empty()) + { + // Use PackageMaker to build the package. + cmOStringStream pkgCmd; + pkgCmd << "\"" << this->GetOption("CPACK_INSTALLER_PROGRAM") + << "\" -build -p \"" << packageDirFileName << "\""; + if (this->Components.empty()) + { + pkgCmd << " -f \"" << this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + } + else + { + pkgCmd << " -mi \"" << this->GetOption("CPACK_TEMPORARY_DIRECTORY") + << "/packages/"; + } + pkgCmd << "\" -r \"" << this->GetOption("CPACK_TOPLEVEL_DIRECTORY") + << "/Resources\" -i \"" + << this->GetOption("CPACK_TOPLEVEL_DIRECTORY") + << "/Info.plist\" -d \"" + << this->GetOption("CPACK_TOPLEVEL_DIRECTORY") + << "/Description.plist\""; + if ( this->PackageMakerVersion > 2.0 ) + { + pkgCmd << " -v"; + } + if (!RunPackageMaker(pkgCmd.str().c_str(), packageDirFileName.c_str())) + return 0; + } + else + { + // We have built the package in place. Generate the + // distribution.dist file to describe it for the installer. + WriteDistributionFile(packageDirFileName.c_str()); + } + + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/hdiutilOutput.log"; + cmOStringStream dmgCmd; + dmgCmd << "\"" << this->GetOption("CPACK_INSTALLER_PROGRAM_DISK_IMAGE") + << "\" create -ov -format UDZO -srcfolder \"" << packageDirFileName + << "\" \"" << packageFileNames[0] << "\""; + std::string output; + int retVal = 1; + int numTries = 10; + bool res = false; + while(numTries > 0) + { + res = cmSystemTools::RunSingleCommand(dmgCmd.str().c_str(), &output, + &retVal, 0, this->GeneratorVerbose, + 0); + if ( res && !retVal ) + { + numTries = -1; + break; + } + cmSystemTools::Delay(500); + numTries--; + } + if ( !res || retVal ) + { + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << dmgCmd.str().c_str() << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running hdiutil command: " + << dmgCmd.str().c_str() << std::endl + << "Please check " << tmpFile.c_str() << " for errors" << std::endl); + return 0; + } + + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackPackageMakerGenerator::InitializeInternal() +{ + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "cmCPackPackageMakerGenerator::Initialize()" << std::endl); + this->SetOptionIfNotSet("CPACK_PACKAGING_INSTALL_PREFIX", "/usr"); + + // Starting with Xcode 4.3, PackageMaker is a separate app, and you + // can put it anywhere you want. So... use a variable for its location. + // People who put it in unexpected places can use the variable to tell + // us where it is. + // + // Use the following locations, in "most recent installation" order, + // to search for the PackageMaker app. Assume people who copy it into + // the new Xcode 4.3 app in "/Applications" will copy it into the nested + // Applications folder inside the Xcode bundle itself. Or directly in + // the "/Applications" directory. + // + // If found, save result in the CPACK_INSTALLER_PROGRAM variable. + + std::vector paths; + paths.push_back( + "/Applications/Xcode.app/Contents/Applications" + "/PackageMaker.app/Contents/MacOS"); + paths.push_back( + "/Applications/Utilities" + "/PackageMaker.app/Contents/MacOS"); + paths.push_back( + "/Applications" + "/PackageMaker.app/Contents/MacOS"); + paths.push_back( + "/Developer/Applications/Utilities" + "/PackageMaker.app/Contents/MacOS"); + paths.push_back( + "/Developer/Applications" + "/PackageMaker.app/Contents/MacOS"); + + std::string pkgPath; + const char *inst_program = this->GetOption("CPACK_INSTALLER_PROGRAM"); + if (inst_program && *inst_program) + { + pkgPath = inst_program; + } + else + { + pkgPath = cmSystemTools::FindProgram("PackageMaker", paths, false); + if ( pkgPath.empty() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find PackageMaker compiler" + << std::endl); + return 0; + } + this->SetOptionIfNotSet("CPACK_INSTALLER_PROGRAM", pkgPath.c_str()); + } + + // Get path to the real PackageMaker, not a symlink: + pkgPath = cmSystemTools::GetRealPath(pkgPath.c_str()); + // Up from there to find the version.plist file in the "Contents" dir: + std::string contents_dir; + contents_dir = cmSystemTools::GetFilenamePath(pkgPath); + contents_dir = cmSystemTools::GetFilenamePath(contents_dir); + + std::string versionFile = contents_dir + "/version.plist"; + + if ( !cmSystemTools::FileExists(versionFile.c_str()) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot find PackageMaker compiler version file: " + << versionFile.c_str() + << std::endl); + return 0; + } + + std::ifstream ifs(versionFile.c_str()); + if ( !ifs ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot open PackageMaker compiler version file" << std::endl); + return 0; + } + + // Check the PackageMaker version + cmsys::RegularExpression rexKey("CFBundleShortVersionString"); + cmsys::RegularExpression rexVersion("([0-9]+.[0-9.]+)"); + std::string line; + bool foundKey = false; + while ( cmSystemTools::GetLineFromStream(ifs, line) ) + { + if ( rexKey.find(line) ) + { + foundKey = true; + break; + } + } + if ( !foundKey ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot find CFBundleShortVersionString in the PackageMaker compiler " + "version file" << std::endl); + return 0; + } + if ( !cmSystemTools::GetLineFromStream(ifs, line) || + !rexVersion.find(line) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem reading the PackageMaker compiler version file: " + << versionFile.c_str() << std::endl); + return 0; + } + this->PackageMakerVersion = atof(rexVersion.match(1).c_str()); + if ( this->PackageMakerVersion < 1.0 ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Require PackageMaker 1.0 or higher" + << std::endl); + return 0; + } + cmCPackLogger(cmCPackLog::LOG_DEBUG, "PackageMaker version is: " + << this->PackageMakerVersion << std::endl); + + // Determine the package compatibility version. If it wasn't + // specified by the user, we define it based on which features the + // user requested. + const char *packageCompat = this->GetOption("CPACK_OSX_PACKAGE_VERSION"); + if (packageCompat && *packageCompat) + { + this->PackageCompatibilityVersion = atof(packageCompat); + } + else if (this->GetOption("CPACK_DOWNLOAD_SITE")) + { + this->SetOption("CPACK_OSX_PACKAGE_VERSION", "10.5"); + this->PackageCompatibilityVersion = 10.5; + } + else if (this->GetOption("CPACK_COMPONENTS_ALL")) + { + this->SetOption("CPACK_OSX_PACKAGE_VERSION", "10.4"); + this->PackageCompatibilityVersion = 10.4; + } + else + { + this->SetOption("CPACK_OSX_PACKAGE_VERSION", "10.3"); + this->PackageCompatibilityVersion = 10.3; + } + + std::vector no_paths; + pkgPath = cmSystemTools::FindProgram("hdiutil", no_paths, false); + if ( pkgPath.empty() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find hdiutil compiler" + << std::endl); + return 0; + } + this->SetOptionIfNotSet("CPACK_INSTALLER_PROGRAM_DISK_IMAGE", + pkgPath.c_str()); + + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +bool cmCPackPackageMakerGenerator::CopyCreateResourceFile(const char* name, + const char* dirName) +{ + std::string uname = cmSystemTools::UpperCase(name); + std::string cpackVar = "CPACK_RESOURCE_FILE_" + uname; + const char* inFileName = this->GetOption(cpackVar.c_str()); + if ( !inFileName ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "CPack option: " << cpackVar.c_str() + << " not specified. It should point to " + << (name ? name : "(NULL)") + << ".rtf, " << name + << ".html, or " << name << ".txt file" << std::endl); + return false; + } + if ( !cmSystemTools::FileExists(inFileName) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find " + << (name ? name : "(NULL)") + << " resource file: " << inFileName << std::endl); + return false; + } + std::string ext = cmSystemTools::GetFilenameLastExtension(inFileName); + if ( ext != ".rtfd" && ext != ".rtf" && ext != ".html" && ext != ".txt" ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Bad file extension specified: " + << ext << ". Currently only .rtfd, .rtf, .html, and .txt files allowed." + << std::endl); + return false; + } + + std::string destFileName = dirName; + destFileName += '/'; + destFileName += name + ext; + + // Set this so that distribution.dist gets the right name (without + // the path). + this->SetOption(("CPACK_RESOURCE_FILE_" + uname + "_NOPATH").c_str(), + (name + ext).c_str()); + + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Configure file: " + << (inFileName ? inFileName : "(NULL)") + << " to " << destFileName.c_str() << std::endl); + this->ConfigureFile(inFileName, destFileName.c_str()); + return true; +} + +bool cmCPackPackageMakerGenerator::CopyResourcePlistFile(const char* name, + const char* outName) +{ + if (!outName) + { + outName = name; + } + + std::string inFName = "CPack."; + inFName += name; + inFName += ".in"; + std::string inFileName = this->FindTemplate(inFName.c_str()); + if ( inFileName.empty() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find input file: " + << inFName << std::endl); + return false; + } + + std::string destFileName = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + destFileName += "/"; + destFileName += outName; + + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Configure file: " + << inFileName.c_str() << " to " << destFileName.c_str() << std::endl); + this->ConfigureFile(inFileName.c_str(), destFileName.c_str()); + return true; +} + +//---------------------------------------------------------------------- +bool cmCPackPackageMakerGenerator::RunPackageMaker(const char *command, + const char *packageFile) +{ + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/PackageMakerOutput.log"; + + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Execute: " << command << std::endl); + std::string output; + int retVal = 1; + bool res = cmSystemTools::RunSingleCommand(command, &output, &retVal, 0, + this->GeneratorVerbose, 0); + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Done running package maker" + << std::endl); + if ( !res || retVal ) + { + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << command << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem running PackageMaker command: " << command + << std::endl << "Please check " << tmpFile.c_str() << " for errors" + << std::endl); + return false; + } + // sometimes the command finishes but the directory is not yet + // created, so try 10 times to see if it shows up + int tries = 10; + while(tries > 0 && + !cmSystemTools::FileExists(packageFile)) + { + cmSystemTools::Delay(500); + tries--; + } + if(!cmSystemTools::FileExists(packageFile)) + { + cmCPackLogger( + cmCPackLog::LOG_ERROR, + "Problem running PackageMaker command: " << command + << std::endl << "Package not created: " << packageFile + << std::endl); + return false; + } + + return true; +} + +//---------------------------------------------------------------------- +std::string +cmCPackPackageMakerGenerator::GetPackageName(const cmCPackComponent& component) +{ + if (component.ArchiveFile.empty()) + { + std::string packagesDir = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + packagesDir += ".dummy"; + cmOStringStream out; + out << cmSystemTools::GetFilenameWithoutLastExtension(packagesDir) + << "-" << component.Name << ".pkg"; + return out.str(); + } + else + { + return component.ArchiveFile + ".pkg"; + } +} + +//---------------------------------------------------------------------- +bool +cmCPackPackageMakerGenerator:: +GenerateComponentPackage(const char *packageFile, + const char *packageDir, + const cmCPackComponent& component) +{ + cmCPackLogger(cmCPackLog::LOG_OUTPUT, + "- Building component package: " << + packageFile << std::endl); + + // The command that will be used to run PackageMaker + cmOStringStream pkgCmd; + + if (this->PackageCompatibilityVersion < 10.5 || + this->PackageMakerVersion < 3.0) + { + // Create Description.plist and Info.plist files for normal Mac OS + // X packages, which work on Mac OS X 10.3 and newer. + std::string descriptionFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + descriptionFile += '/' + component.Name + "-Description.plist"; + std::ofstream out(descriptionFile.c_str()); + out << "" << std::endl + << "" << std::endl + << "" << std::endl + << "" << std::endl + << " IFPkgDescriptionTitle" << std::endl + << " " << component.DisplayName << "" << std::endl + << " IFPkgDescriptionVersion" << std::endl + << " " << this->GetOption("CPACK_PACKAGE_VERSION") + << "" << std::endl + << " IFPkgDescriptionDescription" << std::endl + << " " + this->EscapeForXML(component.Description) + << "" << std::endl + << "" << std::endl + << "" << std::endl; + out.close(); + + // Create the Info.plist file for this component + std::string moduleVersionSuffix = "."; + moduleVersionSuffix += component.Name; + this->SetOption("CPACK_MODULE_VERSION_SUFFIX", + moduleVersionSuffix.c_str()); + std::string infoFileName = component.Name; + infoFileName += "-Info.plist"; + if (!this->CopyResourcePlistFile("Info.plist", infoFileName.c_str())) + { + return false; + } + + pkgCmd << "\"" << this->GetOption("CPACK_INSTALLER_PROGRAM") + << "\" -build -p \"" << packageFile << "\"" + << " -f \"" << packageDir << "\"" + << " -i \"" << this->GetOption("CPACK_TOPLEVEL_DIRECTORY") + << "/" << infoFileName << "\"" + << " -d \"" << descriptionFile << "\""; + } + else + { + // Create a "flat" package on Mac OS X 10.5 and newer. Flat + // packages are stored in a single file, rather than a directory + // like normal packages, and can be downloaded by the installer + // on-the-fly in Mac OS X 10.5 or newer. Thus, we need to create + // flat packages when the packages will be downloaded on the fly. + std::string pkgId = "com."; + pkgId += this->GetOption("CPACK_PACKAGE_VENDOR"); + pkgId += '.'; + pkgId += this->GetOption("CPACK_PACKAGE_NAME"); + pkgId += '.'; + pkgId += component.Name; + + pkgCmd << "\"" << this->GetOption("CPACK_INSTALLER_PROGRAM") + << "\" --root \"" << packageDir << "\"" + << " --id " << pkgId + << " --target " << this->GetOption("CPACK_OSX_PACKAGE_VERSION") + << " --out \"" << packageFile << "\""; + } + + // Run PackageMaker + return RunPackageMaker(pkgCmd.str().c_str(), packageFile); +} + +//---------------------------------------------------------------------- +void +cmCPackPackageMakerGenerator:: +WriteDistributionFile(const char* metapackageFile) +{ + std::string distributionTemplate + = this->FindTemplate("CPack.distribution.dist.in"); + if ( distributionTemplate.empty() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find input file: " + << distributionTemplate << std::endl); + return; + } + + std::string distributionFile = metapackageFile; + distributionFile += "/Contents/distribution.dist"; + + // Create the choice outline, which provides a tree-based view of + // the components in their groups. + cmOStringStream choiceOut; + choiceOut << "" << std::endl; + + // Emit the outline for the groups + std::map::iterator groupIt; + for (groupIt = this->ComponentGroups.begin(); + groupIt != this->ComponentGroups.end(); + ++groupIt) + { + if (groupIt->second.ParentGroup == 0) + { + CreateChoiceOutline(groupIt->second, choiceOut); + } + } + + // Emit the outline for the non-grouped components + std::map::iterator compIt; + for (compIt = this->Components.begin(); compIt != this->Components.end(); + ++compIt) + { + if (!compIt->second.Group) + { + choiceOut << "first << "Choice\">" + << std::endl; + } + } + choiceOut << "" << std::endl; + + // Create the actual choices + for (groupIt = this->ComponentGroups.begin(); + groupIt != this->ComponentGroups.end(); + ++groupIt) + { + CreateChoice(groupIt->second, choiceOut); + } + for (compIt = this->Components.begin(); compIt != this->Components.end(); + ++compIt) + { + CreateChoice(compIt->second, choiceOut); + } + this->SetOption("CPACK_PACKAGEMAKER_CHOICES", choiceOut.str().c_str()); + + // Create the distribution.dist file in the metapackage to turn it + // into a distribution package. + this->ConfigureFile(distributionTemplate.c_str(), + distributionFile.c_str()); +} + +//---------------------------------------------------------------------- +void +cmCPackPackageMakerGenerator:: +CreateChoiceOutline(const cmCPackComponentGroup& group, cmOStringStream& out) +{ + out << "" << std::endl; + std::vector::const_iterator groupIt; + for (groupIt = group.Subgroups.begin(); groupIt != group.Subgroups.end(); + ++groupIt) + { + CreateChoiceOutline(**groupIt, out); + } + + std::vector::const_iterator compIt; + for (compIt = group.Components.begin(); compIt != group.Components.end(); + ++compIt) + { + out << " Name << "Choice\">" + << std::endl; + } + out << "" << std::endl; +} + +//---------------------------------------------------------------------- +void +cmCPackPackageMakerGenerator::CreateChoice(const cmCPackComponentGroup& group, + cmOStringStream& out) +{ + out << "" << std::endl; +} + +//---------------------------------------------------------------------- +void +cmCPackPackageMakerGenerator::CreateChoice(const cmCPackComponent& component, + cmOStringStream& out) +{ + std::string packageId = "com."; + packageId += this->GetOption("CPACK_PACKAGE_VENDOR"); + packageId += '.'; + packageId += this->GetOption("CPACK_PACKAGE_NAME"); + packageId += '.'; + packageId += component.Name; + + out << " visited; + AddDependencyAttributes(component, visited, out); + visited.clear(); + AddReverseDependencyAttributes(component, visited, out); + out << "\""; + } + out << ">" << std::endl; + out << " " << std::endl; + out << "" << std::endl; + + // Create a description of the package associated with this + // component. + std::string relativePackageLocation = "Contents/Packages/"; + relativePackageLocation += this->GetPackageName(component); + + // Determine the installed size of the package. + std::string dirName = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + dirName += '/'; + dirName += component.Name; + unsigned long installedSize + = component.GetInstalledSizeInKbytes(dirName.c_str()); + + out << "GetOption("CPACK_PACKAGE_VERSION") << "\" " + << "installKBytes=\"" << installedSize << "\" " + << "auth=\"Admin\" onConclusion=\"None\">"; + if (component.IsDownloaded) + { + out << this->GetOption("CPACK_DOWNLOAD_SITE") + << this->GetPackageName(component); + } + else + { + out << "file:./" << relativePackageLocation; + } + out << "" << std::endl; +} + +//---------------------------------------------------------------------- +void +cmCPackPackageMakerGenerator:: +AddDependencyAttributes(const cmCPackComponent& component, + std::set& visited, + cmOStringStream& out) +{ + if (visited.find(&component) != visited.end()) + { + return; + } + visited.insert(&component); + + std::vector::const_iterator dependIt; + for (dependIt = component.Dependencies.begin(); + dependIt != component.Dependencies.end(); + ++dependIt) + { + out << " && choices['" << + (*dependIt)->Name << "Choice'].selected"; + AddDependencyAttributes(**dependIt, visited, out); + } +} + +//---------------------------------------------------------------------- +void +cmCPackPackageMakerGenerator:: +AddReverseDependencyAttributes(const cmCPackComponent& component, + std::set& visited, + cmOStringStream& out) +{ + if (visited.find(&component) != visited.end()) + { + return; + } + visited.insert(&component); + + std::vector::const_iterator dependIt; + for (dependIt = component.ReverseDependencies.begin(); + dependIt != component.ReverseDependencies.end(); + ++dependIt) + { + out << " || choices['" << (*dependIt)->Name << "Choice'].selected"; + AddReverseDependencyAttributes(**dependIt, visited, out); + } +} + +//---------------------------------------------------------------------- +std::string cmCPackPackageMakerGenerator::EscapeForXML(std::string str) +{ + cmSystemTools::ReplaceString(str, "&", "&"); + cmSystemTools::ReplaceString(str, "<", "<"); + cmSystemTools::ReplaceString(str, ">", ">"); + cmSystemTools::ReplaceString(str, "\"", """); + return str; +} diff --git a/Source/CPack/cmCPackPackageMakerGenerator.h b/Source/CPack/cmCPackPackageMakerGenerator.h new file mode 100644 index 0000000..2bab947 --- /dev/null +++ b/Source/CPack/cmCPackPackageMakerGenerator.h @@ -0,0 +1,119 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackPackageMakerGenerator_h +#define cmCPackPackageMakerGenerator_h + + +#include "cmCPackGenerator.h" + +class cmCPackComponent; + +/** \class cmCPackPackageMakerGenerator + * \brief A generator for PackageMaker files + * + * http://developer.apple.com/documentation/Darwin + * /Reference/ManPages/man1/packagemaker.1.html + */ +class cmCPackPackageMakerGenerator : public cmCPackGenerator +{ +public: + cmCPackTypeMacro(cmCPackPackageMakerGenerator, cmCPackGenerator); + + /** + * Construct generator + */ + cmCPackPackageMakerGenerator(); + virtual ~cmCPackPackageMakerGenerator(); + + virtual bool SupportsComponentInstallation() const; + +protected: + int CopyInstallScript(const char* resdir, + const char* script, + const char* name); + virtual int InitializeInternal(); + int PackageFiles(); + virtual const char* GetOutputExtension() { return ".dmg"; } + virtual const char* GetOutputPostfix() { return "darwin"; } + + // Copies or creates the resource file with the given name to the + // package or package staging directory dirName. The variable + // CPACK_RESOURCE_FILE_${NAME} (where ${NAME} is the uppercased + // version of name) specifies the input file to use for this file, + // which will be configured via ConfigureFile. + bool CopyCreateResourceFile(const char* name, const char *dirName); + bool CopyResourcePlistFile(const char* name, const char* outName = 0); + + // Run PackageMaker with the given command line, which will (if + // successful) produce the given package file. Returns true if + // PackageMaker succeeds, false otherwise. + bool RunPackageMaker(const char *command, const char *packageFile); + + // Retrieve the name of package file that will be generated for this + // component. The name is just the file name with extension, and + // does not include the subdirectory. + std::string GetPackageName(const cmCPackComponent& component); + + // Generate a package in the file packageFile for the given + // component. All of the files within this component are stored in + // the directory packageDir. Returns true if successful, false + // otherwise. + bool GenerateComponentPackage(const char *packageFile, + const char *packageDir, + const cmCPackComponent& component); + + // Writes a distribution.dist file, which turns a metapackage into a + // full-fledged distribution. This file is used to describe + // inter-component dependencies. metapackageFile is the name of the + // metapackage for the distribution. Only valid for a + // component-based install. + void WriteDistributionFile(const char* metapackageFile); + + // Subroutine of WriteDistributionFile that writes out the + // dependency attributes for inter-component dependencies. + void AddDependencyAttributes(const cmCPackComponent& component, + std::set& visited, + cmOStringStream& out); + + // Subroutine of WriteDistributionFile that writes out the + // reverse dependency attributes for inter-component dependencies. + void + AddReverseDependencyAttributes(const cmCPackComponent& component, + std::set& visited, + cmOStringStream& out); + + // Generates XML that encodes the hierarchy of component groups and + // their components in a form that can be used by distribution + // metapackages. + void CreateChoiceOutline(const cmCPackComponentGroup& group, + cmOStringStream& out); + + /// Create the "choice" XML element to describe a component group + /// for the installer GUI. + void CreateChoice(const cmCPackComponentGroup& group, + cmOStringStream& out); + + /// Create the "choice" XML element to describe a component for the + /// installer GUI. + void CreateChoice(const cmCPackComponent& component, + cmOStringStream& out); + + // Escape the given string to make it usable as an XML attribute + // value. + std::string EscapeForXML(std::string str); + + double PackageMakerVersion; + double PackageCompatibilityVersion; +}; + +#endif diff --git a/Source/CPack/cmCPackRPMGenerator.cxx b/Source/CPack/cmCPackRPMGenerator.cxx new file mode 100644 index 0000000..413572e --- /dev/null +++ b/Source/CPack/cmCPackRPMGenerator.cxx @@ -0,0 +1,275 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCPackRPMGenerator.h" +#include "cmCPackLog.h" +#include "cmSystemTools.h" + +//---------------------------------------------------------------------- +cmCPackRPMGenerator::cmCPackRPMGenerator() +{ +} + +//---------------------------------------------------------------------- +cmCPackRPMGenerator::~cmCPackRPMGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackRPMGenerator::InitializeInternal() +{ + this->SetOptionIfNotSet("CPACK_PACKAGING_INSTALL_PREFIX", "/usr"); + if (cmSystemTools::IsOff(this->GetOption("CPACK_SET_DESTDIR"))) + { + this->SetOption("CPACK_SET_DESTDIR", "I_ON"); + } + /* Replace space in CPACK_PACKAGE_NAME in order to avoid + * rpmbuild scream on unwanted space in filename issue + * Moreover RPM file do not usually embed space in filename + */ + if (this->GetOption("CPACK_PACKAGE_NAME")) { + std::string packageName=this->GetOption("CPACK_PACKAGE_NAME"); + cmSystemTools::ReplaceString(packageName," ","-"); + this->SetOption("CPACK_PACKAGE_NAME",packageName.c_str()); + } + /* same for CPACK_PACKAGE_FILE_NAME */ + if (this->GetOption("CPACK_PACKAGE_FILE_NAME")) { + std::string packageName=this->GetOption("CPACK_PACKAGE_FILE_NAME"); + cmSystemTools::ReplaceString(packageName," ","-"); + this->SetOption("CPACK_PACKAGE_FILE_NAME",packageName.c_str()); + } + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +int cmCPackRPMGenerator::PackageOnePack(std::string initialToplevel, + std::string packageName) +{ + int retval = 1; + // Begin the archive for this pack + std::string localToplevel(initialToplevel); + std::string packageFileName( + cmSystemTools::GetParentDirectory(toplevel.c_str()) + ); + std::string outputFileName( + GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"), + packageName, + true) + + this->GetOutputExtension() + ); + + localToplevel += "/"+ packageName; + /* replace the TEMP DIRECTORY with the component one */ + this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str()); + packageFileName += "/"+ outputFileName; + /* replace proposed CPACK_OUTPUT_FILE_NAME */ + this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str()); + /* replace the TEMPORARY package file name */ + this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME", + packageFileName.c_str()); + // Tell CPackRPM.cmake the name of the component NAME. + this->SetOption("CPACK_RPM_PACKAGE_COMPONENT",packageName.c_str()); + if (!this->ReadListFile("CPackRPM.cmake")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error while execution CPackRPM.cmake" << std::endl); + retval = 0; + } + // add the generated package to package file names list + packageFileNames.push_back(packageFileName); + return retval; +} + +//---------------------------------------------------------------------- +int cmCPackRPMGenerator::PackageComponents(bool ignoreGroup) +{ + int retval = 1; + /* Reset package file name list it will be populated during the + * component packaging run*/ + packageFileNames.clear(); + std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY")); + + // The default behavior is to have one package by component group + // unless CPACK_COMPONENTS_IGNORE_GROUP is specified. + if (!ignoreGroup) + { + std::map::iterator compGIt; + for (compGIt=this->ComponentGroups.begin(); + compGIt!=this->ComponentGroups.end(); ++compGIt) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Packaging component group: " + << compGIt->first + << std::endl); + retval &= PackageOnePack(initialTopLevel,compGIt->first); + } + // Handle Orphan components (components not belonging to any groups) + std::map::iterator compIt; + for (compIt=this->Components.begin(); + compIt!=this->Components.end(); ++compIt ) + { + // Does the component belong to a group? + if (compIt->second.Group==NULL) + { + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Component <" + << compIt->second.Name + << "> does not belong to any group, package it separately." + << std::endl); + retval &= PackageOnePack(initialTopLevel,compIt->first); + } + } + } + // CPACK_COMPONENTS_IGNORE_GROUPS is set + // We build 1 package per component + else + { + std::map::iterator compIt; + for (compIt=this->Components.begin(); + compIt!=this->Components.end(); ++compIt ) + { + retval &= PackageOnePack(initialTopLevel,compIt->first); + } + } + return retval; +} + +//---------------------------------------------------------------------- +int cmCPackRPMGenerator::PackageComponentsAllInOne() +{ + int retval = 1; + std::string compInstDirName; + /* Reset package file name list it will be populated during the + * component packaging run*/ + packageFileNames.clear(); + std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY")); + + compInstDirName = "ALL_COMPONENTS_IN_ONE"; + + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Packaging all groups in one package..." + "(CPACK_COMPONENTS_ALL_[GROUPS_]IN_ONE_PACKAGE is set)" + << std::endl); + + // The ALL GROUPS in ONE package case + std::string localToplevel(initialTopLevel); + std::string packageFileName( + cmSystemTools::GetParentDirectory(toplevel.c_str()) + ); + std::string outputFileName( + std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")) + + this->GetOutputExtension() + ); + // all GROUP in one vs all COMPONENT in one + localToplevel += "/"+compInstDirName; + + /* replace the TEMP DIRECTORY with the component one */ + this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str()); + packageFileName += "/"+ outputFileName; + /* replace proposed CPACK_OUTPUT_FILE_NAME */ + this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str()); + /* replace the TEMPORARY package file name */ + this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME", + packageFileName.c_str()); + // Tell CPackRPM.cmake the name of the component GROUP. + this->SetOption("CPACK_RPM_PACKAGE_COMPONENT",compInstDirName.c_str()); + if (!this->ReadListFile("CPackRPM.cmake")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error while execution CPackRPM.cmake" << std::endl); + retval = 0; + } + // add the generated package to package file names list + packageFileNames.push_back(packageFileName); + + return retval; +} + +//---------------------------------------------------------------------- +int cmCPackRPMGenerator::PackageFiles() +{ + int retval = 1; + + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Toplevel: " + << toplevel << std::endl); + + /* Are we in the component packaging case */ + if (WantsComponentInstallation()) { + // CASE 1 : COMPONENT ALL-IN-ONE package + // If ALL COMPONENTS in ONE package has been requested + // then the package file is unique and should be open here. + if (componentPackageMethod == ONE_PACKAGE) + { + return PackageComponentsAllInOne(); + } + // CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one) + // There will be 1 package for each component group + // however one may require to ignore component group and + // in this case you'll get 1 package for each component. + else + { + return PackageComponents(componentPackageMethod == + ONE_PACKAGE_PER_COMPONENT); + } + } + // CASE 3 : NON COMPONENT package. + else + { + if (!this->ReadListFile("CPackRPM.cmake")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error while execution CPackRPM.cmake" << std::endl); + retval = 0; + } + } + + if (!this->IsSet("RPMBUILD_EXECUTABLE")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find rpmbuild" << std::endl); + retval = 0; + } + return retval; +} + +bool cmCPackRPMGenerator::SupportsComponentInstallation() const + { + if (IsOn("CPACK_RPM_COMPONENT_INSTALL")) + { + return true; + } + else + { + return false; + } + } + +std::string cmCPackRPMGenerator::GetComponentInstallDirNameSuffix( + const std::string& componentName) + { + if (componentPackageMethod == ONE_PACKAGE_PER_COMPONENT) { + return componentName; + } + + if (componentPackageMethod == ONE_PACKAGE) { + return std::string("ALL_COMPONENTS_IN_ONE"); + } + // We have to find the name of the COMPONENT GROUP + // the current COMPONENT belongs to. + std::string groupVar = "CPACK_COMPONENT_" + + cmSystemTools::UpperCase(componentName) + "_GROUP"; + if (NULL != GetOption(groupVar.c_str())) + { + return std::string(GetOption(groupVar.c_str())); + } + else + { + return componentName; + } + } diff --git a/Source/CPack/cmCPackRPMGenerator.h b/Source/CPack/cmCPackRPMGenerator.h new file mode 100644 index 0000000..4883a0d --- /dev/null +++ b/Source/CPack/cmCPackRPMGenerator.h @@ -0,0 +1,63 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackRPMGenerator_h +#define cmCPackRPMGenerator_h + + +#include "cmCPackGenerator.h" + +/** \class cmCPackRPMGenerator + * \brief A generator for RPM packages + * The idea of the CPack RPM generator is to use + * as minimal C++ code as possible. + * Ideally the C++ part of the CPack RPM generator + * will only 'execute' (aka ->ReadListFile) several + * CMake macros files. + */ +class cmCPackRPMGenerator : public cmCPackGenerator +{ +public: + cmCPackTypeMacro(cmCPackRPMGenerator, cmCPackGenerator); + + /** + * Construct generator + */ + cmCPackRPMGenerator(); + virtual ~cmCPackRPMGenerator(); + +protected: + virtual int InitializeInternal(); + virtual int PackageFiles(); + /** + * This method factors out the work done in component packaging case. + */ + int PackageOnePack(std::string initialToplevel, std::string packageName); + /** + * The method used to package files when component + * install is used. This will create one + * archive for each component group. + */ + int PackageComponents(bool ignoreGroup); + /** + * Special case of component install where all + * components will be put in a single installer. + */ + int PackageComponentsAllInOne(); + virtual const char* GetOutputExtension() { return ".rpm"; } + virtual bool SupportsComponentInstallation() const; + virtual std::string GetComponentInstallDirNameSuffix( + const std::string& componentName); + +}; + +#endif diff --git a/Source/CPack/cmCPackSTGZGenerator.cxx b/Source/CPack/cmCPackSTGZGenerator.cxx new file mode 100644 index 0000000..966a231 --- /dev/null +++ b/Source/CPack/cmCPackSTGZGenerator.cxx @@ -0,0 +1,138 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackSTGZGenerator.h" + +#include "cmake.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmCPackLog.h" + +#include +#include +#include + +//---------------------------------------------------------------------- +cmCPackSTGZGenerator::cmCPackSTGZGenerator() +{ +} + +//---------------------------------------------------------------------- +cmCPackSTGZGenerator::~cmCPackSTGZGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackSTGZGenerator::InitializeInternal() +{ + this->SetOptionIfNotSet("CPACK_INCLUDE_TOPLEVEL_DIRECTORY", "0"); + + std::string inFile = this->FindTemplate("CPack.STGZ_Header.sh.in"); + if ( inFile.empty() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find template file: " + << inFile.c_str() << std::endl); + return 0; + } + this->SetOptionIfNotSet("CPACK_STGZ_HEADER_FILE", inFile.c_str()); + this->SetOptionIfNotSet("CPACK_AT_SIGN", "@"); + + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +int cmCPackSTGZGenerator::PackageFiles() +{ + bool retval = true; + if ( !this->Superclass::PackageFiles() ) + { + return 0; + } + + /* TGZ generator (our Superclass) may + * have generated several packages (component packaging) + * so we must iterate over generated packages. + */ + for (std::vector::iterator it=packageFileNames.begin(); + it != packageFileNames.end(); ++it) + { + retval &= cmSystemTools::SetPermissions((*it).c_str(), +#if defined( _MSC_VER ) || defined( __MINGW32__ ) + S_IREAD | S_IWRITE | S_IEXEC +#elif defined( __BORLANDC__ ) + S_IRUSR | S_IWUSR | S_IXUSR +#else + S_IRUSR | S_IWUSR | S_IXUSR | + S_IRGRP | S_IWGRP | S_IXGRP | + S_IROTH | S_IWOTH | S_IXOTH +#endif + ); + } + return retval; +} + +//---------------------------------------------------------------------- +int cmCPackSTGZGenerator::GenerateHeader(std::ostream* os) +{ + cmCPackLogger(cmCPackLog::LOG_DEBUG, "Writing header" << std::endl); + cmsys_ios::ostringstream str; + int counter = 0; + + std::string inLicFile = this->GetOption("CPACK_RESOURCE_FILE_LICENSE"); + std::string line; + std::ifstream ilfs(inLicFile.c_str()); + std::string licenseText; + while ( cmSystemTools::GetLineFromStream(ilfs, line) ) + { + licenseText += line + "\n"; + } + this->SetOptionIfNotSet("CPACK_RESOURCE_FILE_LICENSE_CONTENT", + licenseText.c_str()); + + const char headerLengthTag[] = "###CPACK_HEADER_LENGTH###"; + + // Create the header + std::string inFile = this->GetOption("CPACK_STGZ_HEADER_FILE"); + std::ifstream ifs(inFile.c_str()); + std::string packageHeaderText; + while ( cmSystemTools::GetLineFromStream(ifs, line) ) + { + packageHeaderText += line + "\n"; + } + + // Configure in the values + std::string res; + this->ConfigureString(packageHeaderText, res); + + // Count the lines + const char* ptr = res.c_str(); + while ( *ptr ) + { + if ( *ptr == '\n' ) + { + counter ++; + } + ++ptr; + } + counter ++; + cmCPackLogger(cmCPackLog::LOG_DEBUG, + "Number of lines: " << counter << std::endl); + char buffer[1024]; + sprintf(buffer, "%d", counter); + cmSystemTools::ReplaceString(res, headerLengthTag, buffer); + + // Write in file + *os << res.c_str(); + return this->Superclass::GenerateHeader(os); +} diff --git a/Source/CPack/cmCPackSTGZGenerator.h b/Source/CPack/cmCPackSTGZGenerator.h new file mode 100644 index 0000000..ccceec8 --- /dev/null +++ b/Source/CPack/cmCPackSTGZGenerator.h @@ -0,0 +1,41 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackSTGZGenerator_h +#define cmCPackSTGZGenerator_h + + +#include "cmCPackTGZGenerator.h" + +/** \class cmCPackSTGZGenerator + * \brief A generator for Self extractable TGZ files + * + */ +class cmCPackSTGZGenerator : public cmCPackTGZGenerator +{ +public: + cmCPackTypeMacro(cmCPackSTGZGenerator, cmCPackTGZGenerator); + + /** + * Construct generator + */ + cmCPackSTGZGenerator(); + virtual ~cmCPackSTGZGenerator(); + +protected: + int PackageFiles(); + virtual int InitializeInternal(); + int GenerateHeader(std::ostream* os); + virtual const char* GetOutputExtension() { return ".sh"; } +}; + +#endif diff --git a/Source/CPack/cmCPackTGZGenerator.cxx b/Source/CPack/cmCPackTGZGenerator.cxx new file mode 100644 index 0000000..509c7f8 --- /dev/null +++ b/Source/CPack/cmCPackTGZGenerator.cxx @@ -0,0 +1,26 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackTGZGenerator.h" + +//---------------------------------------------------------------------- +cmCPackTGZGenerator::cmCPackTGZGenerator() + :cmCPackArchiveGenerator(cmArchiveWrite::CompressGZip, + cmArchiveWrite::TypeTAR) +{ +} + +//---------------------------------------------------------------------- +cmCPackTGZGenerator::~cmCPackTGZGenerator() +{ +} + diff --git a/Source/CPack/cmCPackTGZGenerator.h b/Source/CPack/cmCPackTGZGenerator.h new file mode 100644 index 0000000..3a9fc6b --- /dev/null +++ b/Source/CPack/cmCPackTGZGenerator.h @@ -0,0 +1,35 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackTGZGenerator_h +#define cmCPackTGZGenerator_h + +#include "cmCPackArchiveGenerator.h" + +/** \class cmCPackTGZGenerator + * \brief A generator for TGZ files + * + */ +class cmCPackTGZGenerator : public cmCPackArchiveGenerator +{ +public: + cmCPackTypeMacro(cmCPackTGZGenerator, cmCPackArchiveGenerator); + /** + * Construct generator + */ + cmCPackTGZGenerator(); + virtual ~cmCPackTGZGenerator(); +protected: + virtual const char* GetOutputExtension() { return ".tar.gz"; } +}; + +#endif diff --git a/Source/CPack/cmCPackTarBZip2Generator.cxx b/Source/CPack/cmCPackTarBZip2Generator.cxx new file mode 100644 index 0000000..971d166 --- /dev/null +++ b/Source/CPack/cmCPackTarBZip2Generator.cxx @@ -0,0 +1,25 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackTarBZip2Generator.h" +//---------------------------------------------------------------------- +cmCPackTarBZip2Generator::cmCPackTarBZip2Generator() + :cmCPackArchiveGenerator(cmArchiveWrite::CompressBZip2, + cmArchiveWrite::TypeTAR) +{ +} + +//---------------------------------------------------------------------- +cmCPackTarBZip2Generator::~cmCPackTarBZip2Generator() +{ +} + diff --git a/Source/CPack/cmCPackTarBZip2Generator.h b/Source/CPack/cmCPackTarBZip2Generator.h new file mode 100644 index 0000000..74c244e --- /dev/null +++ b/Source/CPack/cmCPackTarBZip2Generator.h @@ -0,0 +1,34 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackTarBZip2Generator_h +#define cmCPackTarBZip2Generator_h + +#include "cmCPackArchiveGenerator.h" + +/** \class cmCPackTarBZip2Generator + * \brief A generator for TarBZip2 files + */ +class cmCPackTarBZip2Generator : public cmCPackArchiveGenerator +{ +public: + cmCPackTypeMacro(cmCPackTarBZip2Generator, cmCPackArchiveGenerator); + /** + * Construct generator + */ + cmCPackTarBZip2Generator(); + virtual ~cmCPackTarBZip2Generator(); +protected: + virtual const char* GetOutputExtension() { return ".tar.bz2"; } +}; + +#endif diff --git a/Source/CPack/cmCPackTarCompressGenerator.cxx b/Source/CPack/cmCPackTarCompressGenerator.cxx new file mode 100644 index 0000000..7a8f697 --- /dev/null +++ b/Source/CPack/cmCPackTarCompressGenerator.cxx @@ -0,0 +1,26 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackTarCompressGenerator.h" + +//---------------------------------------------------------------------- +cmCPackTarCompressGenerator::cmCPackTarCompressGenerator() + :cmCPackArchiveGenerator(cmArchiveWrite::CompressCompress, + cmArchiveWrite::TypeTAR) +{ +} + +//---------------------------------------------------------------------- +cmCPackTarCompressGenerator::~cmCPackTarCompressGenerator() +{ +} + diff --git a/Source/CPack/cmCPackTarCompressGenerator.h b/Source/CPack/cmCPackTarCompressGenerator.h new file mode 100644 index 0000000..7ff9a0a --- /dev/null +++ b/Source/CPack/cmCPackTarCompressGenerator.h @@ -0,0 +1,35 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackTarCompressGenerator_h +#define cmCPackTarCompressGenerator_h + +#include "cmCPackTGZGenerator.h" + +/** \class cmCPackTarCompressGenerator + * \brief A generator for TarCompress files + */ +class cmCPackTarCompressGenerator : public cmCPackArchiveGenerator +{ +public: + cmCPackTypeMacro(cmCPackTarCompressGenerator, cmCPackArchiveGenerator); + /** + * Construct generator + */ + cmCPackTarCompressGenerator(); + virtual ~cmCPackTarCompressGenerator(); + +protected: + virtual const char* GetOutputExtension() { return ".tar.Z"; } +}; + +#endif diff --git a/Source/CPack/cmCPackZIPGenerator.cxx b/Source/CPack/cmCPackZIPGenerator.cxx new file mode 100644 index 0000000..e6e4e77 --- /dev/null +++ b/Source/CPack/cmCPackZIPGenerator.cxx @@ -0,0 +1,26 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCPackZIPGenerator.h" + +//---------------------------------------------------------------------- +cmCPackZIPGenerator::cmCPackZIPGenerator() + :cmCPackArchiveGenerator(cmArchiveWrite::CompressNone, + cmArchiveWrite::TypeZIP) +{ +} + +//---------------------------------------------------------------------- +cmCPackZIPGenerator::~cmCPackZIPGenerator() +{ +} + diff --git a/Source/CPack/cmCPackZIPGenerator.h b/Source/CPack/cmCPackZIPGenerator.h new file mode 100644 index 0000000..70e1a5f --- /dev/null +++ b/Source/CPack/cmCPackZIPGenerator.h @@ -0,0 +1,36 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCPackZIPGenerator_h +#define cmCPackZIPGenerator_h + +#include "cmCPackArchiveGenerator.h" + +/** \class cmCPackZIPGenerator + * \brief A generator for ZIP files + */ +class cmCPackZIPGenerator : public cmCPackArchiveGenerator +{ +public: + cmCPackTypeMacro(cmCPackZIPGenerator, cmCPackArchiveGenerator); + + /** + * Construct generator + */ + cmCPackZIPGenerator(); + virtual ~cmCPackZIPGenerator(); + +protected: + virtual const char* GetOutputExtension() { return ".zip"; } +}; + +#endif diff --git a/Source/CPack/cpack.cxx b/Source/CPack/cpack.cxx new file mode 100644 index 0000000..6f5055c --- /dev/null +++ b/Source/CPack/cpack.cxx @@ -0,0 +1,584 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmSystemTools.h" + +// Need these for documentation support. +#include "cmake.h" +#include "cmDocumentation.h" +#include "cmCPackDocumentVariables.h" +#include "cmCPackDocumentMacros.h" +#include "cmCPackGeneratorFactory.h" +#include "cmCPackGenerator.h" +#include "cmake.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmMakefile.h" + +#include "cmCPackLog.h" + +#include +#include +#include // auto_ptr + +//---------------------------------------------------------------------------- +static const char * cmDocumentationName[][3] = +{ + {0, + " cpack - Packaging driver provided by CMake.", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationUsage[][3] = +{ + {0, + " cpack -G [options]", + 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationDescription[][3] = +{ + {0, + "The \"cpack\" executable is the CMake packaging program. " + "CMake-generated build trees created for projects that use " + "the INSTALL_* commands have packaging support. " + "This program will generate the package.", 0}, + CMAKE_STANDARD_INTRODUCTION, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationOptions[][3] = +{ + {"-G ", "Use the specified generator to generate package.", + "CPack may support multiple native packaging systems on certain " + "platforms. A generator is responsible for generating input files for " + "particular system and invoking that systems. Possible generator names " + "are specified in the Generators section." }, + {"-C ", "Specify the project configuration", + "This option specifies the configuration that the project was build " + "with, for example 'Debug', 'Release'." }, + {"-D =", "Set a CPack variable.", \ + "Set a variable that can be used by the generator."}, \ + {"--config ", "Specify the config file.", + "Specify the config file to use to create the package. By default " + "CPackConfig.cmake in the current directory will be used." }, + {"--verbose,-V","enable verbose output","Run cpack with verbose output."}, + {"--debug","enable debug output (for CPack developers)", + "Run cpack with debug output (for CPack developers)."}, + {"-P ","override/define CPACK_PACKAGE_NAME", + "If the package name is not specified on cpack commmand line then" + "CPack.cmake defines it as CMAKE_PROJECT_NAME"}, + {"-R ","override/define CPACK_PACKAGE_VERSION", + "If version is not specified on cpack command line then" + "CPack.cmake defines it from CPACK_PACKAGE_VERSION_[MAJOR|MINOR|PATCH]" + "look into CPack.cmake for detail"}, + {"-B ","override/define CPACK_PACKAGE_DIRECTORY", + "The directory where CPack will be doing its packaging work." + "The resulting package will be found there. Inside this directory" + "CPack creates '_CPack_Packages' sub-directory which is the" + "CPack temporary directory."}, + {"--vendor ","override/define CPACK_PACKAGE_VENDOR", + "If vendor is not specified on cpack command line " + "(or inside CMakeLists.txt) then" + "CPack.cmake defines it with a default value"}, + {"--help-command cmd [file]", "Print help for a single command and exit.", + "Full documentation specific to the given command is displayed. " + "If a file is specified, the documentation is written into and the output " + "format is determined depending on the filename suffix. Supported are man " + "page, HTML, DocBook and plain text."}, + {"--help-command-list [file]", "List available commands and exit.", + "The list contains all commands for which help may be obtained by using " + "the --help-command argument followed by a command name. " + "If a file is specified, the documentation is written into and the output " + "format is determined depending on the filename suffix. Supported are man " + "page, HTML, DocBook and plain text."}, + {"--help-commands [file]", "Print help for all commands and exit.", + "Full documentation specific for all current command is displayed." + "If a file is specified, the documentation is written into and the output " + "format is determined depending on the filename suffix. Supported are man " + "page, HTML, DocBook and plain text."}, + {"--help-variable var [file]", + "Print help for a single variable and exit.", + "Full documentation specific to the given variable is displayed." + "If a file is specified, the documentation is written into and the output " + "format is determined depending on the filename suffix. Supported are man " + "page, HTML, DocBook and plain text."}, + {"--help-variable-list [file]", "List documented variables and exit.", + "The list contains all variables for which help may be obtained by using " + "the --help-variable argument followed by a variable name. If a file is " + "specified, the help is written into it." + "If a file is specified, the documentation is written into and the output " + "format is determined depending on the filename suffix. Supported are man " + "page, HTML, DocBook and plain text."}, + {"--help-variables [file]", "Print help for all variables and exit.", + "Full documentation for all variables is displayed." + "If a file is specified, the documentation is written into and the output " + "format is determined depending on the filename suffix. Supported are man " + "page, HTML, DocBook and plain text."}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationSeeAlso[][3] = +{ + {0, "cmake", 0}, + {0, "ccmake", 0}, + {0, 0, 0} +}; + +//---------------------------------------------------------------------------- +int cpackUnknownArgument(const char*, void*) +{ + return 1; +} + +//---------------------------------------------------------------------------- +struct cpackDefinitions +{ + typedef std::map MapType; + MapType Map; + cmCPackLog *Log; +}; + +//---------------------------------------------------------------------------- +int cpackDefinitionArgument(const char* argument, const char* cValue, + void* call_data) +{ + (void)argument; + cpackDefinitions* def = static_cast(call_data); + std::string value = cValue; + size_t pos = value.find_first_of("="); + if ( pos == std::string::npos ) + { + cmCPack_Log(def->Log, cmCPackLog::LOG_ERROR, + "Please specify CPack definitions as: KEY=VALUE" << std::endl); + return 0; + } + std::string key = value.substr(0, pos); + value = value.c_str() + pos + 1; + def->Map[key] = value; + cmCPack_Log(def->Log, cmCPackLog::LOG_DEBUG, "Set CPack variable: " + << key.c_str() << " to \"" << value.c_str() << "\"" << std::endl); + return 1; +} + + +//---------------------------------------------------------------------------- +// this is CPack. +int main (int argc, char *argv[]) +{ + cmSystemTools::FindExecutableDirectory(argv[0]); + cmCPackLog log; + int nocwd = 0; + + log.SetErrorPrefix("CPack Error: "); + log.SetWarningPrefix("CPack Warning: "); + log.SetOutputPrefix("CPack: "); + log.SetVerbosePrefix("CPack Verbose: "); + + cmSystemTools::EnableMSVCDebugHook(); + + if ( cmSystemTools::GetCurrentWorkingDirectory().size() == 0 ) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "Current working directory cannot be established." << std::endl); + nocwd = 1; + } + + std::string generator; + bool help = false; + bool helpVersion = false; + bool verbose = false; + bool debug = false; + std::string helpFull; + std::string helpMAN; + std::string helpHTML; + + std::string cpackProjectName; + std::string cpackProjectDirectory + = cmsys::SystemTools::GetCurrentWorkingDirectory(); + std::string cpackBuildConfig; + std::string cpackProjectVersion; + std::string cpackProjectPatch; + std::string cpackProjectVendor; + std::string cpackConfigFile; + + cpackDefinitions definitions; + definitions.Log = &log; + + cpackConfigFile = ""; + + cmsys::CommandLineArguments arg; + arg.Initialize(argc, argv); + typedef cmsys::CommandLineArguments argT; + // Help arguments + arg.AddArgument("--help", argT::NO_ARGUMENT, &help, "CPack help"); + arg.AddArgument("--help-full", argT::SPACE_ARGUMENT, &helpFull, + "CPack help"); + arg.AddArgument("--help-html", argT::SPACE_ARGUMENT, &helpHTML, + "CPack help"); + arg.AddArgument("--help-man", argT::SPACE_ARGUMENT, &helpMAN, "CPack help"); + arg.AddArgument("--version", argT::NO_ARGUMENT, &helpVersion, "CPack help"); + + arg.AddArgument("-V", argT::NO_ARGUMENT, &verbose, "CPack verbose"); + arg.AddArgument("--verbose", argT::NO_ARGUMENT, &verbose, "-V"); + arg.AddArgument("--debug", argT::NO_ARGUMENT, &debug, "-V"); + arg.AddArgument("--config", argT::SPACE_ARGUMENT, &cpackConfigFile, + "CPack configuration file"); + arg.AddArgument("-C", argT::SPACE_ARGUMENT, &cpackBuildConfig, + "CPack build configuration"); + arg.AddArgument("-G", argT::SPACE_ARGUMENT, + &generator, "CPack generator"); + arg.AddArgument("-P", argT::SPACE_ARGUMENT, + &cpackProjectName, "CPack project name"); + arg.AddArgument("-R", argT::SPACE_ARGUMENT, + &cpackProjectVersion, "CPack project version"); + arg.AddArgument("-B", argT::SPACE_ARGUMENT, + &cpackProjectDirectory, "CPack project directory"); + arg.AddArgument("--patch", argT::SPACE_ARGUMENT, + &cpackProjectPatch, "CPack project patch"); + arg.AddArgument("--vendor", argT::SPACE_ARGUMENT, + &cpackProjectVendor, "CPack project vendor"); + arg.AddCallback("-D", argT::SPACE_ARGUMENT, + cpackDefinitionArgument, &definitions, "CPack Definitions"); + arg.SetUnknownArgumentCallback(cpackUnknownArgument); + + // Parse command line + int parsed = arg.Parse(); + + // Setup logging + if ( verbose ) + { + log.SetVerbose(verbose); + cmCPack_Log(&log, cmCPackLog::LOG_OUTPUT, "Enable Verbose" << std::endl); + } + if ( debug ) + { + log.SetDebug(debug); + cmCPack_Log(&log, cmCPackLog::LOG_OUTPUT, "Enable Debug" << std::endl); + } + + cmCPack_Log(&log, cmCPackLog::LOG_VERBOSE, + "Read CPack config file: " << cpackConfigFile.c_str() << std::endl); + + cmake cminst; + cminst.RemoveUnscriptableCommands(); + cmGlobalGenerator cmgg; + cmgg.SetCMakeInstance(&cminst); + std::auto_ptr cmlg(cmgg.CreateLocalGenerator()); + cmMakefile* globalMF = cmlg->GetMakefile(); + + bool cpackConfigFileSpecified = true; + if ( cpackConfigFile.empty() ) + { + cpackConfigFile = cmSystemTools::GetCurrentWorkingDirectory(); + cpackConfigFile += "/CPackConfig.cmake"; + cpackConfigFileSpecified = false; + } + + cmCPackGeneratorFactory generators; + generators.SetLogger(&log); + cmCPackGenerator* cpackGenerator = 0; + + cmDocumentation doc; + doc.addCPackStandardDocSections(); + /* Were we invoked to display doc or to do some work ? */ + if(doc.CheckOptions(argc, argv,"-G") || nocwd) + { + help = true; + } + else + { + help = false; + } + + // This part is used for cpack documentation lookup as well. + cminst.AddCMakePaths(); + + if ( parsed && !help ) + { + // find out which system cpack is running on, so it can setup the search + // paths, so FIND_XXX() commands can be used in scripts + std::string systemFile = + globalMF->GetModulesFile("CMakeDetermineSystem.cmake"); + if (!globalMF->ReadListFile(0, systemFile.c_str())) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "Error reading CMakeDetermineSystem.cmake" << std::endl); + return 1; + } + + systemFile = + globalMF->GetModulesFile("CMakeSystemSpecificInformation.cmake"); + if (!globalMF->ReadListFile(0, systemFile.c_str())) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "Error reading CMakeSystemSpecificInformation.cmake" << std::endl); + return 1; + } + + if ( cmSystemTools::FileExists(cpackConfigFile.c_str()) ) + { + cpackConfigFile = + cmSystemTools::CollapseFullPath(cpackConfigFile.c_str()); + cmCPack_Log(&log, cmCPackLog::LOG_VERBOSE, + "Read CPack configuration file: " << cpackConfigFile.c_str() + << std::endl); + if ( !globalMF->ReadListFile(0, cpackConfigFile.c_str()) ) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "Problem reading CPack config file: \"" + << cpackConfigFile.c_str() << "\"" << std::endl); + return 1; + } + } + else if ( cpackConfigFileSpecified ) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "Cannot find CPack config file: \"" << cpackConfigFile.c_str() + << "\"" << std::endl); + return 1; + } + + if ( !generator.empty() ) + { + globalMF->AddDefinition("CPACK_GENERATOR", generator.c_str()); + } + if ( !cpackProjectName.empty() ) + { + globalMF->AddDefinition("CPACK_PACKAGE_NAME", cpackProjectName.c_str()); + } + if ( !cpackProjectVersion.empty() ) + { + globalMF->AddDefinition("CPACK_PACKAGE_VERSION", + cpackProjectVersion.c_str()); + } + if ( !cpackProjectVendor.empty() ) + { + globalMF->AddDefinition("CPACK_PACKAGE_VENDOR", + cpackProjectVendor.c_str()); + } + if ( !cpackProjectDirectory.empty() ) + { + globalMF->AddDefinition("CPACK_PACKAGE_DIRECTORY", + cpackProjectDirectory.c_str()); + } + if ( !cpackBuildConfig.empty() ) + { + globalMF->AddDefinition("CPACK_BUILD_CONFIG", cpackBuildConfig.c_str()); + } + cpackDefinitions::MapType::iterator cdit; + for ( cdit = definitions.Map.begin(); + cdit != definitions.Map.end(); + ++cdit ) + { + globalMF->AddDefinition(cdit->first.c_str(), cdit->second.c_str()); + } + + const char* cpackModulesPath = + globalMF->GetDefinition("CPACK_MODULE_PATH"); + if ( cpackModulesPath ) + { + globalMF->AddDefinition("CMAKE_MODULE_PATH", cpackModulesPath); + } + const char* genList = globalMF->GetDefinition("CPACK_GENERATOR"); + if ( !genList ) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "CPack generator not specified" << std::endl); + parsed = 0; + } + else + { + std::vector generatorsVector; + cmSystemTools::ExpandListArgument(genList, + generatorsVector); + std::vector::iterator it; + for ( it = generatorsVector.begin(); + it != generatorsVector.end(); + ++it ) + { + const char* gen = it->c_str(); + cmMakefile newMF(*globalMF); + cmMakefile* mf = &newMF; + cmCPack_Log(&log, cmCPackLog::LOG_VERBOSE, + "Specified generator: " << gen << std::endl); + if ( parsed && !mf->GetDefinition("CPACK_PACKAGE_NAME") ) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "CPack project name not specified" << std::endl); + parsed = 0; + } + if (parsed && + !(mf->GetDefinition("CPACK_PACKAGE_VERSION") || + (mf->GetDefinition("CPACK_PACKAGE_VERSION_MAJOR") && + mf->GetDefinition("CPACK_PACKAGE_VERSION_MINOR") && + mf->GetDefinition("CPACK_PACKAGE_VERSION_PATCH")))) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "CPack project version not specified" << std::endl + << "Specify CPACK_PACKAGE_VERSION, or " + "CPACK_PACKAGE_VERSION_MAJOR, " + "CPACK_PACKAGE_VERSION_MINOR, and CPACK_PACKAGE_VERSION_PATCH." + << std::endl); + parsed = 0; + } + if ( parsed ) + { + cpackGenerator = generators.NewGenerator(gen); + if ( !cpackGenerator ) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "Cannot initialize CPack generator: " + << gen << std::endl); + parsed = 0; + } + if ( parsed && !cpackGenerator->Initialize(gen, mf) ) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "Cannot initialize the generator " << gen << std::endl); + parsed = 0; + } + + if ( !mf->GetDefinition("CPACK_INSTALL_COMMANDS") && + !mf->GetDefinition("CPACK_INSTALLED_DIRECTORIES") && + !mf->GetDefinition("CPACK_INSTALL_CMAKE_PROJECTS") ) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "Please specify build tree of the project that uses CMake " + "using CPACK_INSTALL_CMAKE_PROJECTS, specify " + "CPACK_INSTALL_COMMANDS, or specify " + "CPACK_INSTALLED_DIRECTORIES." + << std::endl); + parsed = 0; + } + if ( parsed ) + { +#ifdef _WIN32 + std::string comspec = "cmw9xcom.exe"; + cmSystemTools::SetWindows9xComspecSubstitute(comspec.c_str()); +#endif + + const char* projName = mf->GetDefinition("CPACK_PACKAGE_NAME"); + cmCPack_Log(&log, cmCPackLog::LOG_VERBOSE, "Use generator: " + << cpackGenerator->GetNameOfClass() << std::endl); + cmCPack_Log(&log, cmCPackLog::LOG_VERBOSE, "For project: " + << projName << std::endl); + + const char* projVersion = + mf->GetDefinition("CPACK_PACKAGE_VERSION"); + if ( !projVersion ) + { + const char* projVersionMajor + = mf->GetDefinition("CPACK_PACKAGE_VERSION_MAJOR"); + const char* projVersionMinor + = mf->GetDefinition("CPACK_PACKAGE_VERSION_MINOR"); + const char* projVersionPatch + = mf->GetDefinition("CPACK_PACKAGE_VERSION_PATCH"); + cmOStringStream ostr; + ostr << projVersionMajor << "." << projVersionMinor << "." + << projVersionPatch; + mf->AddDefinition("CPACK_PACKAGE_VERSION", + ostr.str().c_str()); + } + + int res = cpackGenerator->DoPackage(); + if ( !res ) + { + cmCPack_Log(&log, cmCPackLog::LOG_ERROR, + "Error when generating package: " << projName << std::endl); + return 1; + } + } + } + } + } + } + + /* In this case we are building the documentation object + * instance in order to create appropriate structure + * in order to satisfy the appropriate --help-xxx request + */ + if ( help ) + { + // Construct and print requested documentation. + + doc.SetName("cpack"); + doc.SetSection("Name",cmDocumentationName); + doc.SetSection("Usage",cmDocumentationUsage); + doc.SetSection("Description",cmDocumentationDescription); + doc.PrependSection("Options",cmDocumentationOptions); + + // statically (in C++ code) defined variables + cmCPackDocumentVariables::DefineVariables(&cminst); + + std::vector commands; + + std::string docedFile; + std::string docPath; + cmDocumentation::documentedModulesList_t docedModList; + + docedFile = globalMF->GetModulesFile("CPack.cmake"); + if (docedFile.length()!=0) + { + docPath = cmSystemTools::GetFilenamePath(docedFile.c_str()); + doc.getDocumentedModulesListInDir(docPath,"CPack*.cmake",docedModList); + } + + // parse the files for documentation. + cmDocumentation::documentedModulesList_t::iterator docedIt; + for (docedIt = docedModList.begin(); + docedIt!= docedModList.end(); ++docedIt) + { + doc.GetStructuredDocFromFile( + (docedIt->first).c_str(), + commands,&cminst); + } + + std::map propDocs; + cminst.GetPropertiesDocumentation(propDocs); + doc.SetSections(propDocs); + cminst.GetCommandDocumentation(commands,true,false); + // statically (in C++ code) defined macros/commands + cmCPackDocumentMacros::GetMacrosDocumentation(commands); + doc.SetSection("Commands",commands); + + std::vector v; + cmCPackGeneratorFactory::DescriptionsMap::const_iterator generatorIt; + for( generatorIt = generators.GetGeneratorsList().begin(); + generatorIt != generators.GetGeneratorsList().end(); + ++ generatorIt ) + { + cmDocumentationEntry e; + e.Name = generatorIt->first.c_str(); + e.Brief = generatorIt->second.c_str(); + e.Full = ""; + v.push_back(e); + } + doc.SetSection("Generators",v); + + doc.SetSeeAlsoList(cmDocumentationSeeAlso); +#undef cout + return doc.PrintRequestedDocumentation(std::cout)? 0:1; +#define cout no_cout_use_cmCPack_Log + } + + if (cmSystemTools::GetErrorOccuredFlag()) + { + return 1; + } + + return 0; +} diff --git a/Source/CPack/cygwin.readme b/Source/CPack/cygwin.readme new file mode 100644 index 0000000..88922d3 --- /dev/null +++ b/Source/CPack/cygwin.readme @@ -0,0 +1,69 @@ +http://cygwin.com/setup.html + + +Need to produce two tar files: + +Source- + +- create subdirs +- copy src +- duplicate src +- configure files into duplicate src + CPack.cygwin-readme.in + CPack.cygwin-install.sh.in + CPack.setup.hint.in +- diff duplicate src and orig src +- write diff into toplevel +- create tar file call super class + +cmake-2.2.3-1 + + +1. a source release +cmake-2.2.3-2-src.tar.bz2 + +cmake-2.2.3-2.patch has cmake-2.2.3/CYGWIN-PATCHES/cmake.README cmake-2.2.3/CYGWIN-PATCHES/setup.hint +cmake-2.2.3-2.sh -> script to create cygwin release +cmake-2.2.3.tar.bz2 -> unmodified cmake sources for 2.2.3 + + + + + +2 a binary release +cmake-2.2.3-2.tar.bz2 + +normal binary release with use as the root of the tree: + +Here is the bootstrap command used: + + ${SOURCE_DIR}/bootstrap --prefix=/usr --datadir=/share/cmake-${VER} \ + --docdir=/share/doc/cmake-${VER} --mandir=/share/man + +CMAKE_DOC_DIR /share/doc/${PKG}-${VER} +CMAKE_MAN_DIR /share/man +CMAKE_DATA_DIR /share/${PKG}-${VER} + +Here is the directory stucture: + +usr/bin/cmake.exe +usr/share/doc/cmake-2.2.3/MANIFEST *** +usr/share/doc/Cygwin/cmake-2.2.3-2.README **** +usr/share/cmake-2.2.3/Modules + + + +usr/bin +usr/share/cmake-2.2.3/include +usr/share/cmake-2.2.3/Modules/Platform +usr/share/cmake-2.2.3/Modules +usr/share/cmake-2.2.3/Templates +usr/share/cmake-2.2.3 +usr/share/doc/cmake-2.2.3 +usr/share/doc/Cygwin +usr/share/doc +usr/share/man/man1 +usr/share/man +usr/share +usr + diff --git a/Source/CTest/cmCTestBZR.cxx b/Source/CTest/cmCTestBZR.cxx new file mode 100644 index 0000000..36302df --- /dev/null +++ b/Source/CTest/cmCTestBZR.cxx @@ -0,0 +1,524 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestBZR.h" + +#include "cmCTest.h" +#include "cmSystemTools.h" +#include "cmXMLParser.h" +#include "cmXMLSafe.h" + +#include + +#include + +//---------------------------------------------------------------------------- +extern "C" +int cmBZRXMLParserUnknownEncodingHandler(void*, + const XML_Char *name, + XML_Encoding *info) +{ + static const int latin1[]= + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, + 0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, + 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008D, 0x017D, 0x008F, + 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, + 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x009D, 0x017E, 0x0178, + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF + }; + + // The BZR xml output plugin can use some encodings that are not + // recognized by expat. This will lead to an error, e.g. "Error + // parsing bzr log xml: unknown encoding", the following is a + // workaround for these unknown encodings. + if(name == std::string("ascii") || name == std::string("cp1252") || + name == std::string("ANSI_X3.4-1968")) + { + for(unsigned int i=0;i<256;++i) info->map[i] = latin1[i]; + return 1; + } + + return 0; +} + +//---------------------------------------------------------------------------- +cmCTestBZR::cmCTestBZR(cmCTest* ct, std::ostream& log): + cmCTestGlobalVC(ct, log) +{ + this->PriorRev = this->Unknown; + // Even though it is specified in the documention, with bzr 1.13 + // BZR_PROGRESS_BAR has no effect. In the future this bug might be fixed. + // Since it doesn't hurt, we specify this environment variable. + cmSystemTools::PutEnv("BZR_PROGRESS_BAR=none"); +} + +//---------------------------------------------------------------------------- +cmCTestBZR::~cmCTestBZR() +{ +} + +//---------------------------------------------------------------------------- +class cmCTestBZR::InfoParser: public cmCTestVC::LineParser +{ +public: + InfoParser(cmCTestBZR* bzr, const char* prefix): + BZR(bzr), CheckOutFound(false) + { + this->SetLog(&bzr->Log, prefix); + this->RegexCheckOut.compile("checkout of branch: *([^\t\r\n]+)$"); + this->RegexParent.compile("parent branch: *([^\t\r\n]+)$"); + } +private: + cmCTestBZR* BZR; + bool CheckOutFound; + cmsys::RegularExpression RegexCheckOut; + cmsys::RegularExpression RegexParent; + virtual bool ProcessLine() + { + if(this->RegexCheckOut.find(this->Line)) + { + this->BZR->URL = this->RegexCheckOut.match(1); + CheckOutFound = true; + } + else if(!CheckOutFound && this->RegexParent.find(this->Line)) + { + this->BZR->URL = this->RegexParent.match(1); + } + return true; + } +}; + +//---------------------------------------------------------------------------- +class cmCTestBZR::RevnoParser: public cmCTestVC::LineParser +{ +public: + RevnoParser(cmCTestBZR* bzr, const char* prefix, std::string& rev): + BZR(bzr), Rev(rev) + { + this->SetLog(&bzr->Log, prefix); + this->RegexRevno.compile("^([0-9]+)$"); + } +private: + cmCTestBZR* BZR; + std::string& Rev; + cmsys::RegularExpression RegexRevno; + virtual bool ProcessLine() + { + if(this->RegexRevno.find(this->Line)) + { + this->Rev = this->RegexRevno.match(1); + } + return true; + } +}; + +//---------------------------------------------------------------------------- +std::string cmCTestBZR::LoadInfo() +{ + // Run "bzr info" to get the repository info from the work tree. + const char* bzr = this->CommandLineTool.c_str(); + const char* bzr_info[] = {bzr, "info", 0}; + InfoParser iout(this, "info-out> "); + OutputLogger ierr(this->Log, "info-err> "); + this->RunChild(bzr_info, &iout, &ierr); + + // Run "bzr revno" to get the repository revision number from the work tree. + const char* bzr_revno[] = {bzr, "revno", 0}; + std::string rev; + RevnoParser rout(this, "revno-out> ", rev); + OutputLogger rerr(this->Log, "revno-err> "); + this->RunChild(bzr_revno, &rout, &rerr); + + return rev; +} + +void cmCTestBZR::NoteOldRevision() +{ + this->OldRevision = this->LoadInfo(); + this->Log << "Revision before update: " << this->OldRevision << "\n"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Old revision of repository is: " + << this->OldRevision << "\n"); + this->PriorRev.Rev = this->OldRevision; +} + +//---------------------------------------------------------------------------- +void cmCTestBZR::NoteNewRevision() +{ + this->NewRevision = this->LoadInfo(); + this->Log << "Revision after update: " << this->NewRevision << "\n"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " New revision of repository is: " + << this->NewRevision << "\n"); + this->Log << "URL = " << this->URL << "\n"; +} + +//---------------------------------------------------------------------------- +class cmCTestBZR::LogParser: public cmCTestVC::OutputLogger, + private cmXMLParser +{ +public: + LogParser(cmCTestBZR* bzr, const char* prefix): + OutputLogger(bzr->Log, prefix), BZR(bzr), + EmailRegex("(.*) <([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+)>") + { this->InitializeParser(); } + ~LogParser() { this->CleanupParser(); } + + virtual int InitializeParser() + { + int res = cmXMLParser::InitializeParser(); + if (res) + { + XML_SetUnknownEncodingHandler(static_cast(this->Parser), + cmBZRXMLParserUnknownEncodingHandler, 0); + } + return res; + } +private: + cmCTestBZR* BZR; + + typedef cmCTestBZR::Revision Revision; + typedef cmCTestBZR::Change Change; + Revision Rev; + std::vector Changes; + Change CurChange; + std::vector CData; + + cmsys::RegularExpression EmailRegex; + + virtual bool ProcessChunk(const char* data, int length) + { + this->OutputLogger::ProcessChunk(data, length); + this->ParseChunk(data, length); + return true; + } + + virtual void StartElement(const char* name, const char**) + { + this->CData.clear(); + if(strcmp(name, "log") == 0) + { + this->Rev = Revision(); + this->Changes.clear(); + } + // affected-files can contain blocks of + // modified, unknown, renamed, kind-changed, removed, conflicts, added + else if(strcmp(name, "modified") == 0 + || strcmp(name, "renamed") == 0 + || strcmp(name, "kind-changed") == 0) + { + this->CurChange = Change(); + this->CurChange.Action = 'M'; + } + else if(strcmp(name, "added") == 0) + { + this->CurChange = Change(); + this->CurChange = 'A'; + } + else if(strcmp(name, "removed") == 0) + { + this->CurChange = Change(); + this->CurChange = 'D'; + } + else if(strcmp(name, "unknown") == 0 + || strcmp(name, "conflicts") == 0) + { + // Should not happen here + this->CurChange = Change(); + } + } + + virtual void CharacterDataHandler(const char* data, int length) + { + this->CData.insert(this->CData.end(), data, data+length); + } + + virtual void EndElement(const char* name) + { + if(strcmp(name, "log") == 0) + { + this->BZR->DoRevision(this->Rev, this->Changes); + } + else if((strcmp(name, "file") == 0 || strcmp(name, "directory") == 0) + && !this->CData.empty()) + { + this->CurChange.Path.assign(&this->CData[0], this->CData.size()); + cmSystemTools::ConvertToUnixSlashes(this->CurChange.Path); + this->Changes.push_back(this->CurChange); + } + else if(strcmp(name, "symlink") == 0 && !this->CData.empty()) + { + // symlinks have an arobase at the end in the log + this->CurChange.Path.assign(&this->CData[0], this->CData.size()-1); + cmSystemTools::ConvertToUnixSlashes(this->CurChange.Path); + this->Changes.push_back(this->CurChange); + } + else if(strcmp(name, "committer") == 0 && !this->CData.empty()) + { + this->Rev.Author.assign(&this->CData[0], this->CData.size()); + if(this->EmailRegex.find(this->Rev.Author)) + { + this->Rev.Author = this->EmailRegex.match(1); + this->Rev.EMail = this->EmailRegex.match(2); + } + } + else if(strcmp(name, "timestamp") == 0 && !this->CData.empty()) + { + this->Rev.Date.assign(&this->CData[0], this->CData.size()); + } + else if(strcmp(name, "message") == 0 && !this->CData.empty()) + { + this->Rev.Log.assign(&this->CData[0], this->CData.size()); + } + else if(strcmp(name, "revno") == 0 && !this->CData.empty()) + { + this->Rev.Rev.assign(&this->CData[0], this->CData.size()); + } + this->CData.clear(); + } + + virtual void ReportError(int, int, const char* msg) + { + this->BZR->Log << "Error parsing bzr log xml: " << msg << "\n"; + } +}; + +//---------------------------------------------------------------------------- +class cmCTestBZR::UpdateParser: public cmCTestVC::LineParser +{ +public: + UpdateParser(cmCTestBZR* bzr, const char* prefix): BZR(bzr) + { + this->SetLog(&bzr->Log, prefix); + this->RegexUpdate.compile("^([-+R?XCP ])([NDKM ])([* ]) +(.+)$"); + } +private: + cmCTestBZR* BZR; + cmsys::RegularExpression RegexUpdate; + + virtual bool ProcessChunk(const char* first, int length) + { + bool last_is_new_line = (*first == '\r' || *first == '\n'); + + const char* const last = first + length; + for(const char* c = first; c != last; ++c) + { + if(*c == '\r' || *c == '\n') + { + if(!last_is_new_line) + { + // Log this line. + if(this->Log && this->Prefix) + { + *this->Log << this->Prefix << this->Line << "\n"; + } + + // Hand this line to the subclass implementation. + if(!this->ProcessLine()) + { + this->Line = ""; + return false; + } + + this->Line = ""; + last_is_new_line = true; + } + } + else + { + // Append this character to the line under construction. + this->Line.append(1, *c); + last_is_new_line = false; + } + } + return true; + } + + bool ProcessLine() + { + if(this->RegexUpdate.find(this->Line)) + { + this->DoPath(this->RegexUpdate.match(1)[0], + this->RegexUpdate.match(2)[0], + this->RegexUpdate.match(3)[0], + this->RegexUpdate.match(4)); + } + return true; + } + + void DoPath(char c0, char c1, char c2, std::string path) + { + if(path.empty()) return; + cmSystemTools::ConvertToUnixSlashes(path); + + const std::string dir = cmSystemTools::GetFilenamePath(path); + const std::string name = cmSystemTools::GetFilenameName(path); + + if ( c0=='C' ) + { + this->BZR->Dirs[dir][name].Status = PathConflicting; + return; + } + + if ( c1=='M' || c1=='K' || c1=='N' || c1=='D' || c2 =='*' ) + { + this->BZR->Dirs[dir][name].Status = PathUpdated; + return; + } + } +}; + +//---------------------------------------------------------------------------- +bool cmCTestBZR::UpdateImpl() +{ + // Get user-specified update options. + std::string opts = this->CTest->GetCTestConfiguration("UpdateOptions"); + if(opts.empty()) + { + opts = this->CTest->GetCTestConfiguration("BZRUpdateOptions"); + } + std::vector args = cmSystemTools::ParseArguments(opts.c_str()); + + // TODO: if(this->CTest->GetTestModel() == cmCTest::NIGHTLY) + + // Use "bzr pull" to update the working tree. + std::vector bzr_update; + bzr_update.push_back(this->CommandLineTool.c_str()); + bzr_update.push_back("pull"); + + for(std::vector::const_iterator ai = args.begin(); + ai != args.end(); ++ai) + { + bzr_update.push_back(ai->c_str()); + } + + bzr_update.push_back(this->URL.c_str()); + + bzr_update.push_back(0); + + // For some reason bzr uses stderr to display the update status. + OutputLogger out(this->Log, "pull-out> "); + UpdateParser err(this, "pull-err> "); + return this->RunUpdateCommand(&bzr_update[0], &out, &err); +} + +//---------------------------------------------------------------------------- +void cmCTestBZR::LoadRevisions() +{ + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Gathering version information (one . per revision):\n" + " " << std::flush); + + // We are interested in every revision included in the update. + this->Revisions.clear(); + std::string revs; + if(atoi(this->OldRevision.c_str()) <= atoi(this->NewRevision.c_str())) + { + // DoRevision takes care of discarding the information about OldRevision + revs = this->OldRevision + ".." + this->NewRevision; + } + else + { + return; + } + + // Run "bzr log" to get all global revisions of interest. + const char* bzr = this->CommandLineTool.c_str(); + const char* bzr_log[] = {bzr, "log", "-v", "-r", revs.c_str(), "--xml", + this->URL.c_str(), 0}; + { + LogParser out(this, "log-out> "); + OutputLogger err(this->Log, "log-err> "); + this->RunChild(bzr_log, &out, &err); + } + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::endl); +} + +//---------------------------------------------------------------------------- +class cmCTestBZR::StatusParser: public cmCTestVC::LineParser +{ +public: + StatusParser(cmCTestBZR* bzr, const char* prefix): BZR(bzr) + { + this->SetLog(&bzr->Log, prefix); + this->RegexStatus.compile("^([-+R?XCP ])([NDKM ])([* ]) +(.+)$"); + } +private: + cmCTestBZR* BZR; + cmsys::RegularExpression RegexStatus; + bool ProcessLine() + { + if(this->RegexStatus.find(this->Line)) + { + this->DoPath(this->RegexStatus.match(1)[0], + this->RegexStatus.match(2)[0], + this->RegexStatus.match(3)[0], + this->RegexStatus.match(4)); + } + return true; + } + + void DoPath(char c0, char c1, char c2, std::string path) + { + if(path.empty()) return; + cmSystemTools::ConvertToUnixSlashes(path); + + if ( c0=='C' ) + { + this->BZR->DoModification(PathConflicting, path); + return; + } + + if ( c0 == '+' || c0 == 'R' || c0 == 'P' + || c1=='M' || c1=='K' || c1=='N' || c1=='D' + || c2 =='*' ) + { + this->BZR->DoModification(PathModified, path); + return; + } + } +}; + +//---------------------------------------------------------------------------- +void cmCTestBZR::LoadModifications() +{ + // Run "bzr status" which reports local modifications. + const char* bzr = this->CommandLineTool.c_str(); + const char* bzr_status[] = {bzr, "status", "-SV", 0}; + StatusParser out(this, "status-out> "); + OutputLogger err(this->Log, "status-err> "); + this->RunChild(bzr_status, &out, &err); +} diff --git a/Source/CTest/cmCTestBZR.h b/Source/CTest/cmCTestBZR.h new file mode 100644 index 0000000..df688e1 --- /dev/null +++ b/Source/CTest/cmCTestBZR.h @@ -0,0 +1,55 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestBZR_h +#define cmCTestBZR_h + +#include "cmCTestGlobalVC.h" + +/** \class cmCTestBZR + * \brief Interaction with bzr command-line tool + * + */ +class cmCTestBZR: public cmCTestGlobalVC +{ +public: + /** Construct with a CTest instance and update log stream. */ + cmCTestBZR(cmCTest* ctest, std::ostream& log); + + virtual ~cmCTestBZR(); + +private: + // Implement cmCTestVC internal API. + virtual void NoteOldRevision(); + virtual void NoteNewRevision(); + virtual bool UpdateImpl(); + + // URL of repository directory checked out in the working tree. + std::string URL; + + std::string LoadInfo(); + void LoadModifications(); + void LoadRevisions(); + + // Parsing helper classes. + class InfoParser; + class RevnoParser; + class LogParser; + class UpdateParser; + class StatusParser; + friend class InfoParser; + friend class RevnoParser; + friend class LogParser; + friend class UpdateParser; + friend class StatusParser; +}; + +#endif diff --git a/Source/CTest/cmCTestBatchTestHandler.cxx b/Source/CTest/cmCTestBatchTestHandler.cxx new file mode 100644 index 0000000..00bb6fa --- /dev/null +++ b/Source/CTest/cmCTestBatchTestHandler.cxx @@ -0,0 +1,143 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCTestBatchTestHandler.h" +#include "cmProcess.h" +#include "cmStandardIncludes.h" +#include "cmCTest.h" +#include "cmSystemTools.h" +#include + +cmCTestBatchTestHandler::~cmCTestBatchTestHandler() +{ +} + +//--------------------------------------------------------- +void cmCTestBatchTestHandler::RunTests() +{ + this->WriteBatchScript(); + this->SubmitBatchScript(); +} + +//--------------------------------------------------------- +void cmCTestBatchTestHandler::WriteBatchScript() +{ + this->Script = this->CTest->GetBinaryDir() + + "/Testing/CTestBatch.txt"; + std::fstream fout; + fout.open(this->Script.c_str(), std::ios::out); + fout << "#!/bin/sh\n"; + + for(TestMap::iterator i = this->Tests.begin(); i != this->Tests.end(); ++i) + { + this->WriteSrunArgs(i->first, fout); + this->WriteTestCommand(i->first, fout); + fout << "\n"; + } + fout.flush(); + fout.close(); +} + +//--------------------------------------------------------- +void cmCTestBatchTestHandler::WriteSrunArgs(int test, std::fstream& fout) +{ + cmCTestTestHandler::cmCTestTestProperties* properties = + this->Properties[test]; + + fout << "srun "; + //fout << "--jobid=" << test << " "; + fout << "-J=" << properties->Name << " "; + + //Write dependency information + /*if(this->Tests[test].size() > 0) + { + fout << "-P=afterany"; + for(TestSet::iterator i = this->Tests[test].begin(); + i != this->Tests[test].end(); ++i) + { + fout << ":" << *i; + } + fout << " "; + }*/ + if(properties->RunSerial) + { + fout << "--exclusive "; + } + if(properties->Processors > 1) + { + fout << "-n" << properties->Processors << " "; + } +} + +//--------------------------------------------------------- +void cmCTestBatchTestHandler::WriteTestCommand(int test, std::fstream& fout) +{ + std::vector args = this->Properties[test]->Args; + std::vector processArgs; + std::string command; + + command = this->TestHandler->FindTheExecutable(args[1].c_str()); + command = cmSystemTools::ConvertToOutputPath(command.c_str()); + + //Prepends memcheck args to our command string if this is a memcheck + this->TestHandler->GenerateTestCommand(processArgs); + processArgs.push_back(command); + + for(std::vector::iterator arg = processArgs.begin(); + arg != processArgs.end(); ++arg) + { + fout << *arg << " "; + } + + std::vector::iterator i = args.begin(); + ++i; //the test name + ++i; //the executable (command) + if(args.size() > 2) + { + fout << "'"; + } + while(i != args.end()) + { + fout << "\"" << *i << "\""; //args to the test executable + ++i; + + if(i == args.end() && args.size() > 2) + { + fout << "'"; + } + fout << " "; + } + //TODO ZACH build TestResult.FullCommandLine + //this->TestResult.FullCommandLine = this->TestCommand; +} + +//--------------------------------------------------------- +void cmCTestBatchTestHandler::SubmitBatchScript() +{ + cmProcess sbatch; + std::vector args; + args.push_back(this->Script); + args.push_back("-o"); + args.push_back(this->CTest->GetBinaryDir() + + "/Testing/CTestBatch.txt"); + + sbatch.SetCommand("sbatch"); + sbatch.SetCommandArguments(args); + /*if(sbatch.StartProcess()) + { + //success condition + } + else + { + //fail condition + }*/ +} diff --git a/Source/CTest/cmCTestBatchTestHandler.h b/Source/CTest/cmCTestBatchTestHandler.h new file mode 100644 index 0000000..fdfd1be --- /dev/null +++ b/Source/CTest/cmCTestBatchTestHandler.h @@ -0,0 +1,41 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTestBatchTestHandler_h +#define cmCTestBatchTestHandler_h + +#include +#include +#include +#include + +/** \class cmCTestBatchTestHandler + * \brief run parallel ctest + * + * cmCTestBatchTestHandler + */ +class cmCTestBatchTestHandler : public cmCTestMultiProcessHandler +{ +public: + ~cmCTestBatchTestHandler(); + virtual void RunTests(); +protected: + void WriteBatchScript(); + void WriteSrunArgs(int test, std::fstream& fout); + void WriteTestCommand(int test, std::fstream& fout); + + void SubmitBatchScript(); + + std::string Script; +}; + +#endif diff --git a/Source/CTest/cmCTestBuildAndTestHandler.cxx b/Source/CTest/cmCTestBuildAndTestHandler.cxx new file mode 100644 index 0000000..8a2d65a --- /dev/null +++ b/Source/CTest/cmCTestBuildAndTestHandler.cxx @@ -0,0 +1,526 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCTestBuildAndTestHandler.h" + +#include "cmSystemTools.h" +#include "cmCTest.h" +#include "cmake.h" +#include "cmGlobalGenerator.h" +#include +#include "cmCTestTestHandler.h" + +//---------------------------------------------------------------------- +cmCTestBuildAndTestHandler::cmCTestBuildAndTestHandler() +{ + this->BuildTwoConfig = false; + this->BuildNoClean = false; + this->BuildNoCMake = false; + this->Timeout = 0; +} + +//---------------------------------------------------------------------- +void cmCTestBuildAndTestHandler::Initialize() +{ + this->BuildTargets.erase( + this->BuildTargets.begin(), this->BuildTargets.end()); + this->Superclass::Initialize(); +} + +//---------------------------------------------------------------------- +const char* cmCTestBuildAndTestHandler::GetOutput() +{ + return this->Output.c_str(); +} +//---------------------------------------------------------------------- +int cmCTestBuildAndTestHandler::ProcessHandler() +{ + this->Output = ""; + std::string output; + cmSystemTools::ResetErrorOccuredFlag(); + int retv = this->RunCMakeAndTest(&this->Output); + cmSystemTools::ResetErrorOccuredFlag(); + return retv; +} + +//---------------------------------------------------------------------- +int cmCTestBuildAndTestHandler::RunCMake(std::string* outstring, + cmOStringStream &out, std::string &cmakeOutString, std::string &cwd, + cmake *cm) +{ + unsigned int k; + std::vector args; + args.push_back(this->CTest->GetCMakeExecutable()); + args.push_back(this->SourceDir); + if(this->BuildGenerator.size()) + { + std::string generator = "-G"; + generator += this->BuildGenerator; + args.push_back(generator); + } + + const char* config = 0; + if ( this->CTest->GetConfigType().size() > 0 ) + { + config = this->CTest->GetConfigType().c_str(); + } +#ifdef CMAKE_INTDIR + if(!config) + { + config = CMAKE_INTDIR; + } +#endif + + if ( config ) + { + std::string btype + = "-DCMAKE_BUILD_TYPE:STRING=" + std::string(config); + args.push_back(btype); + } + + for(k=0; k < this->BuildOptions.size(); ++k) + { + args.push_back(this->BuildOptions[k]); + } + if (cm->Run(args) != 0) + { + out << "Error: cmake execution failed\n"; + out << cmakeOutString << "\n"; + // return to the original directory + cmSystemTools::ChangeDirectory(cwd.c_str()); + if(outstring) + { + *outstring = out.str(); + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, out.str() << std::endl); + } + return 1; + } + // do another config? + if(this->BuildTwoConfig) + { + if (cm->Run(args) != 0) + { + out << "Error: cmake execution failed\n"; + out << cmakeOutString << "\n"; + // return to the original directory + cmSystemTools::ChangeDirectory(cwd.c_str()); + if(outstring) + { + *outstring = out.str(); + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, out.str() << std::endl); + } + return 1; + } + } + out << "======== CMake output ======\n"; + out << cmakeOutString; + out << "======== End CMake output ======\n"; + return 0; +} + +//---------------------------------------------------------------------- +void CMakeMessageCallback(const char* m, const char*, bool&, void* s) +{ + std::string* out = (std::string*)s; + *out += m; + *out += "\n"; +} + +void CMakeProgressCallback(const char*msg, float , void * s) +{ + std::string* out = (std::string*)s; + *out += msg; + *out += "\n"; +} + +//---------------------------------------------------------------------- +void CMakeStdoutCallback(const char* m, int len, void* s) +{ + std::string* out = (std::string*)s; + out->append(m, len); +} +struct cmSetupOutputCaptureCleanup +{ + ~cmSetupOutputCaptureCleanup() + { + cmSystemTools::SetErrorCallback(0, 0); + cmSystemTools::SetStdoutCallback(0, 0); + } +}; + +//---------------------------------------------------------------------- +int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring) +{ + unsigned int k; + std::string cmakeOutString; + cmSystemTools::SetErrorCallback(CMakeMessageCallback, &cmakeOutString); + cmSystemTools::SetStdoutCallback(CMakeStdoutCallback, &cmakeOutString); + // make sure SetStdoutCallback and SetErrorCallback are set to null + // after this function exits so that they do not point at a destroyed + // string cmakeOutString + cmSetupOutputCaptureCleanup cleanup; + static_cast(cleanup); + cmOStringStream out; + + // if the generator and make program are not specified then it is an error + if (!this->BuildGenerator.size() || !this->BuildMakeProgram.size()) + { + if(outstring) + { + *outstring = + "--build-and-test requires that both the generator and makeprogram " + "be provided using the --build-generator and --build-makeprogram " + "command line options. "; + } + return 1; + } + + if ( this->CTest->GetConfigType().size() == 0 && + this->ConfigSample.size()) + { + // use the config sample to set the ConfigType + std::string fullPath; + std::string resultingConfig; + std::vector extraPaths; + std::vector failed; + fullPath = + cmCTestTestHandler::FindExecutable(this->CTest, + this->ConfigSample.c_str(), + resultingConfig, + extraPaths, + failed); + if (fullPath.size() && resultingConfig.size()) + { + this->CTest->SetConfigType(resultingConfig.c_str()); + } + out << "Using config sample with results: " + << fullPath << " and " << resultingConfig << std::endl; + } + + // we need to honor the timeout specified, the timeout include cmake, build + // and test time + double clock_start = cmSystemTools::GetTime(); + + // make sure the binary dir is there + std::string cwd = cmSystemTools::GetCurrentWorkingDirectory(); + out << "Internal cmake changing into directory: " + << this->BinaryDir << std::endl; + if (!cmSystemTools::FileIsDirectory(this->BinaryDir.c_str())) + { + cmSystemTools::MakeDirectory(this->BinaryDir.c_str()); + } + cmSystemTools::ChangeDirectory(this->BinaryDir.c_str()); + + // should we cmake? + cmake cm; + cm.SetProgressCallback(CMakeProgressCallback, &cmakeOutString); + cm.SetGlobalGenerator(cm.CreateGlobalGenerator( + this->BuildGenerator.c_str())); + + if(!this->BuildNoCMake) + { + // do the cmake step, no timeout here since it is not a sub process + if (this->RunCMake(outstring,out,cmakeOutString,cwd,&cm)) + { + return 1; + } + } + + // do the build + std::vector::iterator tarIt; + if ( this->BuildTargets.size() == 0 ) + { + this->BuildTargets.push_back(""); + } + for ( tarIt = this->BuildTargets.begin(); + tarIt != this->BuildTargets.end(); ++ tarIt ) + { + double remainingTime = 0; + if (this->Timeout > 0) + { + remainingTime = this->Timeout - cmSystemTools::GetTime() + clock_start; + if (remainingTime <= 0) + { + if(outstring) + { + *outstring = "--build-and-test timeout exceeded. "; + } + return 1; + } + } + std::string output; + const char* config = 0; + if ( this->CTest->GetConfigType().size() > 0 ) + { + config = this->CTest->GetConfigType().c_str(); + } +#ifdef CMAKE_INTDIR + if(!config) + { + config = CMAKE_INTDIR; + } +#endif + if(!config) + { + config = "Debug"; + } + int retVal = cm.GetGlobalGenerator()->Build( + this->SourceDir.c_str(), this->BinaryDir.c_str(), + this->BuildProject.c_str(), tarIt->c_str(), + &output, this->BuildMakeProgram.c_str(), + config, + !this->BuildNoClean, + false, remainingTime); + out << output; + // if the build failed then return + if (retVal) + { + if(outstring) + { + *outstring = out.str(); + } + return 1; + } + } + if(outstring) + { + *outstring = out.str(); + } + + // if no test was specified then we are done + if (!this->TestCommand.size()) + { + return 0; + } + + // now run the compiled test if we can find it + // store the final location in fullPath + std::string fullPath; + std::string resultingConfig; + std::vector extraPaths; + // if this->ExecutableDirectory is set try that as well + if (this->ExecutableDirectory.size()) + { + std::string tempPath = this->ExecutableDirectory; + tempPath += "/"; + tempPath += this->TestCommand; + extraPaths.push_back(tempPath); + } + std::vector failed; + fullPath = + cmCTestTestHandler::FindExecutable(this->CTest, + this->TestCommand.c_str(), + resultingConfig, + extraPaths, + failed); + + if(!cmSystemTools::FileExists(fullPath.c_str())) + { + out << "Could not find path to executable, perhaps it was not built: " + << this->TestCommand << "\n"; + out << "tried to find it in these places:\n"; + out << fullPath.c_str() << "\n"; + for(unsigned int i=0; i < failed.size(); ++i) + { + out << failed[i] << "\n"; + } + if(outstring) + { + *outstring = out.str(); + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, out.str()); + } + // return to the original directory + cmSystemTools::ChangeDirectory(cwd.c_str()); + return 1; + } + + std::vector testCommand; + testCommand.push_back(fullPath.c_str()); + for(k=0; k < this->TestCommandArgs.size(); ++k) + { + testCommand.push_back(this->TestCommandArgs[k].c_str()); + } + testCommand.push_back(0); + std::string outs; + int retval = 0; + // run the test from the this->BuildRunDir if set + if(this->BuildRunDir.size()) + { + out << "Run test in directory: " << this->BuildRunDir << "\n"; + cmSystemTools::ChangeDirectory(this->BuildRunDir.c_str()); + } + out << "Running test command: \"" << fullPath << "\""; + for(k=0; k < this->TestCommandArgs.size(); ++k) + { + out << " \"" << this->TestCommandArgs[k] << "\""; + } + out << "\n"; + + // how much time is remaining + double remainingTime = 0; + if (this->Timeout > 0) + { + remainingTime = this->Timeout - cmSystemTools::GetTime() + clock_start; + if (remainingTime <= 0) + { + if(outstring) + { + *outstring = "--build-and-test timeout exceeded. "; + } + return 1; + } + } + + int runTestRes = this->CTest->RunTest(testCommand, &outs, &retval, 0, + remainingTime, 0); + + if(runTestRes != cmsysProcess_State_Exited || retval != 0) + { + out << "Test command failed: " << testCommand[0] << "\n"; + retval = 1; + } + + out << outs << "\n"; + if(outstring) + { + *outstring = out.str(); + } + else + { + cmCTestLog(this->CTest, OUTPUT, out.str() << std::endl); + } + return retval; +} + +//---------------------------------------------------------------------- +int cmCTestBuildAndTestHandler::ProcessCommandLineArguments( + const std::string& currentArg, size_t& idx, + const std::vector& allArgs) +{ + // --build-and-test options + if(currentArg.find("--build-and-test",0) == 0 && idx < allArgs.size() - 1) + { + if(idx+2 < allArgs.size()) + { + idx++; + this->SourceDir = allArgs[idx]; + idx++; + this->BinaryDir = allArgs[idx]; + // dir must exist before CollapseFullPath is called + cmSystemTools::MakeDirectory(this->BinaryDir.c_str()); + this->BinaryDir + = cmSystemTools::CollapseFullPath(this->BinaryDir.c_str()); + this->SourceDir + = cmSystemTools::CollapseFullPath(this->SourceDir.c_str()); + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "--build-and-test must have source and binary dir" << std::endl); + return 0; + } + } + if(currentArg.find("--build-target",0) == 0 && idx < allArgs.size() - 1) + { + idx++; + this->BuildTargets.push_back(allArgs[idx]); + } + if(currentArg.find("--build-nocmake",0) == 0) + { + this->BuildNoCMake = true; + } + if(currentArg.find("--build-run-dir",0) == 0 && idx < allArgs.size() - 1) + { + idx++; + this->BuildRunDir = allArgs[idx]; + } + if(currentArg.find("--build-two-config",0) == 0) + { + this->BuildTwoConfig = true; + } + if(currentArg.find("--build-exe-dir",0) == 0 && idx < allArgs.size() - 1) + { + idx++; + this->ExecutableDirectory = allArgs[idx]; + } + if(currentArg.find("--test-timeout",0) == 0 && idx < allArgs.size() - 1) + { + idx++; + this->Timeout = atof(allArgs[idx].c_str()); + } + if(currentArg.find("--build-generator",0) == 0 && idx < allArgs.size() - 1) + { + idx++; + this->BuildGenerator = allArgs[idx]; + } + if(currentArg.find("--build-project",0) == 0 && idx < allArgs.size() - 1) + { + idx++; + this->BuildProject = allArgs[idx]; + } + if(currentArg.find("--build-makeprogram",0) == 0 && + idx < allArgs.size() - 1) + { + idx++; + this->BuildMakeProgram = allArgs[idx]; + } + if(currentArg.find("--build-config-sample",0) == 0 && + idx < allArgs.size() - 1) + { + idx++; + this->ConfigSample = allArgs[idx]; + } + if(currentArg.find("--build-noclean",0) == 0) + { + this->BuildNoClean = true; + } + if(currentArg.find("--build-options",0) == 0 && idx < allArgs.size() - 1) + { + ++idx; + bool done = false; + while(idx < allArgs.size() && !done) + { + this->BuildOptions.push_back(allArgs[idx]); + if(idx+1 < allArgs.size() + && (allArgs[idx+1] == "--build-target" || + allArgs[idx+1] == "--test-command")) + { + done = true; + } + else + { + ++idx; + } + } + } + if(currentArg.find("--test-command",0) == 0 && idx < allArgs.size() - 1) + { + ++idx; + this->TestCommand = allArgs[idx]; + while(idx+1 < allArgs.size()) + { + ++idx; + this->TestCommandArgs.push_back(allArgs[idx]); + } + } + return 1; +} + diff --git a/Source/CTest/cmCTestBuildAndTestHandler.h b/Source/CTest/cmCTestBuildAndTestHandler.h new file mode 100644 index 0000000..6e5f7a6 --- /dev/null +++ b/Source/CTest/cmCTestBuildAndTestHandler.h @@ -0,0 +1,78 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTestBuildAndTestHandler_h +#define cmCTestBuildAndTestHandler_h + + +#include "cmCTestGenericHandler.h" +#include "cmListFileCache.h" + +class cmake; + +/** \class cmCTestBuildAndTestHandler + * \brief A class that handles ctest -S invocations + * + */ +class cmCTestBuildAndTestHandler : public cmCTestGenericHandler +{ +public: + cmTypeMacro(cmCTestBuildAndTestHandler, cmCTestGenericHandler); + + /* + * The main entry point for this class + */ + int ProcessHandler(); + + //! Set all the build and test arguments + virtual int ProcessCommandLineArguments( + const std::string& currentArg, size_t& idx, + const std::vector& allArgs); + + /* + * Get the output variable + */ + const char* GetOutput(); + + cmCTestBuildAndTestHandler(); + + virtual void Initialize(); + +protected: + ///! Run CMake and build a test and then run it as a single test. + int RunCMakeAndTest(std::string* output); + int RunCMake(std::string* outstring, cmOStringStream &out, + std::string &cmakeOutString, + std::string &cwd, cmake *cm); + + cmStdString Output; + + std::string BuildGenerator; + std::vector BuildOptions; + bool BuildTwoConfig; + std::string BuildMakeProgram; + std::string ConfigSample; + std::string SourceDir; + std::string BinaryDir; + std::string BuildProject; + std::string TestCommand; + bool BuildNoClean; + std::string BuildRunDir; + std::string ExecutableDirectory; + std::vector TestCommandArgs; + std::vector BuildTargets; + bool BuildNoCMake; + double Timeout; +}; + +#endif + diff --git a/Source/CTest/cmCTestBuildCommand.cxx b/Source/CTest/cmCTestBuildCommand.cxx new file mode 100644 index 0000000..b984e85 --- /dev/null +++ b/Source/CTest/cmCTestBuildCommand.cxx @@ -0,0 +1,193 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestBuildCommand.h" + +#include "cmCTest.h" +#include "cmCTestGenericHandler.h" +#include "cmCTestBuildHandler.h" +#include "cmake.h" +#include "cmGlobalGenerator.h" + + +//---------------------------------------------------------------------------- +cmCTestBuildCommand::cmCTestBuildCommand() +{ + this->GlobalGenerator = 0; + this->Arguments[ctb_NUMBER_ERRORS] = "NUMBER_ERRORS"; + this->Arguments[ctb_NUMBER_WARNINGS] = "NUMBER_WARNINGS"; + this->Arguments[ctb_TARGET] = "TARGET"; + this->Arguments[ctb_CONFIGURATION] = "CONFIGURATION"; + this->Arguments[ctb_FLAGS] = "FLAGS"; + this->Arguments[ctb_PROJECT_NAME] = "PROJECT_NAME"; + this->Arguments[ctb_LAST] = 0; + this->Last = ctb_LAST; +} + +//---------------------------------------------------------------------------- +cmCTestBuildCommand::~cmCTestBuildCommand() +{ + if ( this->GlobalGenerator ) + { + delete this->GlobalGenerator; + this->GlobalGenerator = 0; + } +} + +//---------------------------------------------------------------------------- +cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler() +{ + cmCTestGenericHandler* handler + = this->CTest->GetInitializedHandler("build"); + if ( !handler ) + { + this->SetError("internal CTest error. Cannot instantiate build handler"); + return 0; + } + this->Handler = (cmCTestBuildHandler*)handler; + + const char* ctestBuildCommand + = this->Makefile->GetDefinition("CTEST_BUILD_COMMAND"); + if ( ctestBuildCommand && *ctestBuildCommand ) + { + this->CTest->SetCTestConfiguration("MakeCommand", ctestBuildCommand); + } + else + { + const char* cmakeGeneratorName + = this->Makefile->GetDefinition("CTEST_CMAKE_GENERATOR"); + const char* cmakeProjectName + = (this->Values[ctb_PROJECT_NAME] && *this->Values[ctb_PROJECT_NAME]) + ? this->Values[ctb_PROJECT_NAME] + : this->Makefile->GetDefinition("CTEST_PROJECT_NAME"); + + // Build configuration is determined by: CONFIGURATION argument, + // or CTEST_BUILD_CONFIGURATION script variable, or + // CTEST_CONFIGURATION_TYPE script variable, or ctest -C command + // line argument... in that order. + // + const char* ctestBuildConfiguration + = this->Makefile->GetDefinition("CTEST_BUILD_CONFIGURATION"); + const char* cmakeBuildConfiguration + = (this->Values[ctb_CONFIGURATION] && *this->Values[ctb_CONFIGURATION]) + ? this->Values[ctb_CONFIGURATION] + : ((ctestBuildConfiguration && *ctestBuildConfiguration) + ? ctestBuildConfiguration + : this->CTest->GetConfigType().c_str()); + + const char* cmakeBuildAdditionalFlags + = (this->Values[ctb_FLAGS] && *this->Values[ctb_FLAGS]) + ? this->Values[ctb_FLAGS] + : this->Makefile->GetDefinition("CTEST_BUILD_FLAGS"); + const char* cmakeBuildTarget + = (this->Values[ctb_TARGET] && *this->Values[ctb_TARGET]) + ? this->Values[ctb_TARGET] + : this->Makefile->GetDefinition("CTEST_BUILD_TARGET"); + + if ( cmakeGeneratorName && *cmakeGeneratorName && + cmakeProjectName && *cmakeProjectName ) + { + if ( !cmakeBuildConfiguration ) + { + cmakeBuildConfiguration = "Release"; + } + if ( this->GlobalGenerator ) + { + if ( strcmp(this->GlobalGenerator->GetName(), + cmakeGeneratorName) != 0 ) + { + delete this->GlobalGenerator; + this->GlobalGenerator = 0; + } + } + if ( !this->GlobalGenerator ) + { + this->GlobalGenerator = + this->Makefile->GetCMakeInstance()->CreateGlobalGenerator( + cmakeGeneratorName); + } + this->GlobalGenerator->FindMakeProgram(this->Makefile); + const char* cmakeMakeProgram + = this->Makefile->GetDefinition("CMAKE_MAKE_PROGRAM"); + if(strlen(cmakeBuildConfiguration) == 0) + { + const char* config = 0; +#ifdef CMAKE_INTDIR + config = CMAKE_INTDIR; +#endif + if(!config) + { + config = "Debug"; + } + cmakeBuildConfiguration = config; + } + + std::string buildCommand + = this->GlobalGenerator-> + GenerateBuildCommand(cmakeMakeProgram, + cmakeProjectName, + cmakeBuildAdditionalFlags, cmakeBuildTarget, + cmakeBuildConfiguration, true, false); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "SetMakeCommand:" + << buildCommand.c_str() << "\n"); + this->CTest->SetCTestConfiguration("MakeCommand", buildCommand.c_str()); + } + else + { + cmOStringStream ostr; + ostr << "has no project to build. If this is a " + "\"built with CMake\" project, verify that CTEST_CMAKE_GENERATOR " + "and CTEST_PROJECT_NAME are set." + "\n" + "CTEST_PROJECT_NAME is usually set in CTestConfig.cmake. Verify " + "that CTestConfig.cmake exists, or CTEST_PROJECT_NAME " + "is set in the script, or PROJECT_NAME is passed as an argument " + "to ctest_build." + "\n" + "Alternatively, set CTEST_BUILD_COMMAND to build the project " + "with a custom command line."; + this->SetError(ostr.str().c_str()); + return 0; + } + } + + if(const char* useLaunchers = + this->Makefile->GetDefinition("CTEST_USE_LAUNCHERS")) + { + this->CTest->SetCTestConfiguration("UseLaunchers", useLaunchers); + } + + return handler; +} + + +bool cmCTestBuildCommand::InitialPass(std::vector const& args, + cmExecutionStatus &status) +{ + bool ret = cmCTestHandlerCommand::InitialPass(args, status); + if ( this->Values[ctb_NUMBER_ERRORS] && *this->Values[ctb_NUMBER_ERRORS]) + { + cmOStringStream str; + str << this->Handler->GetTotalErrors(); + this->Makefile->AddDefinition( + this->Values[ctb_NUMBER_ERRORS], str.str().c_str()); + } + if ( this->Values[ctb_NUMBER_WARNINGS] + && *this->Values[ctb_NUMBER_WARNINGS]) + { + cmOStringStream str; + str << this->Handler->GetTotalWarnings(); + this->Makefile->AddDefinition( + this->Values[ctb_NUMBER_WARNINGS], str.str().c_str()); + } + return ret; +} diff --git a/Source/CTest/cmCTestBuildCommand.h b/Source/CTest/cmCTestBuildCommand.h new file mode 100644 index 0000000..cabc39b --- /dev/null +++ b/Source/CTest/cmCTestBuildCommand.h @@ -0,0 +1,98 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestBuildCommand_h +#define cmCTestBuildCommand_h + +#include "cmCTestHandlerCommand.h" + +class cmGlobalGenerator; +class cmCTestBuildHandler; + +/** \class cmCTestBuild + * \brief Run a ctest script + * + * cmCTestBuildCommand defineds the command to build the project. + */ +class cmCTestBuildCommand : public cmCTestHandlerCommand +{ +public: + + cmCTestBuildCommand(); + ~cmCTestBuildCommand(); + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestBuildCommand* ni = new cmCTestBuildCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_build";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Build the project."; + } + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_build([BUILD build_dir] [TARGET target] [RETURN_VALUE res]\n" + " [APPEND][NUMBER_ERRORS val] [NUMBER_WARNINGS val])\n" + "Builds the given build directory and stores results in Build.xml. " + "If no BUILD is given, the CTEST_BINARY_DIRECTORY variable is used.\n" + "The TARGET variable can be used to specify a build target. If none " + "is specified, the \"all\" target will be built.\n" + "The RETURN_VALUE option specifies a variable in which to store the " + "return value of the native build tool. " + "The NUMBER_ERRORS and NUMBER_WARNINGS options specify variables in " + "which to store the number of build errors and warnings detected." + "\n" + CTEST_COMMAND_APPEND_OPTION_DOCS; + } + + cmTypeMacro(cmCTestBuildCommand, cmCTestHandlerCommand); + + cmGlobalGenerator* GlobalGenerator; + +protected: + cmCTestBuildHandler* Handler; + enum { + ctb_BUILD = ct_LAST, + ctb_NUMBER_ERRORS, + ctb_NUMBER_WARNINGS, + ctb_TARGET, + ctb_CONFIGURATION, + ctb_FLAGS, + ctb_PROJECT_NAME, + ctb_LAST + }; + + cmCTestGenericHandler* InitializeHandler(); +}; + + +#endif diff --git a/Source/CTest/cmCTestBuildHandler.cxx b/Source/CTest/cmCTestBuildHandler.cxx new file mode 100644 index 0000000..27bb06c --- /dev/null +++ b/Source/CTest/cmCTestBuildHandler.cxx @@ -0,0 +1,1310 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCTestBuildHandler.h" + +#include "cmCTest.h" +#include "cmake.h" +#include "cmMakefile.h" +#include "cmLocalGenerator.h" +#include "cmGlobalGenerator.h" +#include "cmGeneratedFileStream.h" +#include "cmXMLSafe.h" +#include "cmFileTimeComparison.h" + +//#include +#include +#include + +// used for sleep +#ifdef _WIN32 +#include "windows.h" +#endif + +#include +#include +#include +#include + +#if defined(__BORLANDC__) +# pragma warn -8060 /* possibly incorrect assignment */ +#endif + +static const char* cmCTestErrorMatches[] = { + "^[Bb]us [Ee]rror", + "^[Ss]egmentation [Vv]iolation", + "^[Ss]egmentation [Ff]ault", + ":.*[Pp]ermission [Dd]enied", + "([^ :]+):([0-9]+): ([^ \\t])", + "([^:]+): error[ \\t]*[0-9]+[ \\t]*:", + "^Error ([0-9]+):", + "^Fatal", + "^Error: ", + "^Error ", + "[0-9] ERROR: ", + "^\"[^\"]+\", line [0-9]+: [^Ww]", + "^cc[^C]*CC: ERROR File = ([^,]+), Line = ([0-9]+)", + "^ld([^:])*:([ \\t])*ERROR([^:])*:", + "^ild:([ \\t])*\\(undefined symbol\\)", + "([^ :]+) : (error|fatal error|catastrophic error)", + "([^:]+): (Error:|error|undefined reference|multiply defined)", + "([^:]+)\\(([^\\)]+)\\) ?: (error|fatal error|catastrophic error)", + "^fatal error C[0-9]+:", + ": syntax error ", + "^collect2: ld returned 1 exit status", + "ld terminated with signal", + "Unsatisfied symbol", + "^Unresolved:", + "Undefined symbol", + "^Undefined[ \\t]+first referenced", + "^CMake Error.*:", + ":[ \\t]cannot find", + ":[ \\t]can't find", + ": \\*\\*\\* No rule to make target \\`.*\\'. Stop", + ": \\*\\*\\* No targets specified and no makefile found", + ": Invalid loader fixup for symbol", + ": Invalid fixups exist", + ": Can't find library for", + ": internal link edit command failed", + ": Unrecognized option \\`.*\\'", + "\", line [0-9]+\\.[0-9]+: [0-9]+-[0-9]+ \\([^WI]\\)", + "ld: 0706-006 Cannot find or open library file: -l ", + "ild: \\(argument error\\) can't find library argument ::", + "^could not be found and will not be loaded.", + "s:616 string too big", + "make: Fatal error: ", + "ld: 0711-993 Error occurred while writing to the output file:", + "ld: fatal: ", + "final link failed:", + "make: \\*\\*\\*.*Error", + "make\\[.*\\]: \\*\\*\\*.*Error", + "\\*\\*\\* Error code", + "nternal error:", + "Makefile:[0-9]+: \\*\\*\\* .* Stop\\.", + ": No such file or directory", + ": Invalid argument", + "^The project cannot be built\\.", + "^\\[ERROR\\]", + "^Command .* failed with exit code", + 0 +}; + +static const char* cmCTestErrorExceptions[] = { + "instantiated from ", + "candidates are:", + ": warning", + ": \\(Warning\\)", + ": note", + "makefile:", + "Makefile:", + ":[ \\t]+Where:", + "([^ :]+):([0-9]+): Warning", + "------ Build started: .* ------", + 0 +}; + +static const char* cmCTestWarningMatches[] = { + "([^ :]+):([0-9]+): warning:", + "([^ :]+):([0-9]+): note:", + "^cc[^C]*CC: WARNING File = ([^,]+), Line = ([0-9]+)", + "^ld([^:])*:([ \\t])*WARNING([^:])*:", + "([^:]+): warning ([0-9]+):", + "^\"[^\"]+\", line [0-9]+: [Ww](arning|arnung)", + "([^:]+): warning[ \\t]*[0-9]+[ \\t]*:", + "^(Warning|Warnung) ([0-9]+):", + "^(Warning|Warnung)[ :]", + "WARNING: ", + "([^ :]+) : warning", + "([^:]+): warning", + "\", line [0-9]+\\.[0-9]+: [0-9]+-[0-9]+ \\([WI]\\)", + "^cxx: Warning:", + ".*file: .* has no symbols", + "([^ :]+):([0-9]+): (Warning|Warnung)", + "\\([0-9]*\\): remark #[0-9]*", + "\".*\", line [0-9]+: remark\\([0-9]*\\):", + "cc-[0-9]* CC: REMARK File = .*, Line = [0-9]*", + "^CMake Warning.*:", + "^\\[WARNING\\]", + 0 +}; + +static const char* cmCTestWarningExceptions[] = { + "/usr/.*/X11/Xlib\\.h:[0-9]+: war.*: ANSI C\\+\\+ forbids declaration", + "/usr/.*/X11/Xutil\\.h:[0-9]+: war.*: ANSI C\\+\\+ forbids declaration", + "/usr/.*/X11/XResource\\.h:[0-9]+: war.*: ANSI C\\+\\+ forbids declaration", + "WARNING 84 :", + "WARNING 47 :", + "makefile:", + "Makefile:", + "warning: Clock skew detected. Your build may be incomplete.", + "/usr/openwin/include/GL/[^:]+:", + "bind_at_load", + "XrmQGetResource", + "IceFlush", + "warning LNK4089: all references to [^ \\t]+ discarded by .OPT:REF", + "ld32: WARNING 85: definition of dataKey in", + "cc: warning 422: Unknown option \"\\+b", + "_with_warning_C", + 0 +}; + +struct cmCTestBuildCompileErrorWarningRex +{ + const char* RegularExpressionString; + int FileIndex; + int LineIndex; +}; + +static cmCTestBuildCompileErrorWarningRex +cmCTestWarningErrorFileLine[] = { + { "^Warning W[0-9]+ ([a-zA-Z.\\:/0-9_+ ~-]+) ([0-9]+):", 1, 2 }, + { "^([a-zA-Z./0-9_+ ~-]+):([0-9]+):", 1, 2 }, + { "^([a-zA-Z.\\:/0-9_+ ~-]+)\\(([0-9]+)\\)", 1, 2 }, + { "^[0-9]+>([a-zA-Z.\\:/0-9_+ ~-]+)\\(([0-9]+)\\)", 1, 2 }, + { "^([a-zA-Z./0-9_+ ~-]+)\\(([0-9]+)\\)", 1, 2 }, + { "\"([a-zA-Z./0-9_+ ~-]+)\", line ([0-9]+)", 1, 2 }, + { "File = ([a-zA-Z./0-9_+ ~-]+), Line = ([0-9]+)", 1, 2 }, + { 0, 0, 0 } +}; + +//---------------------------------------------------------------------- +cmCTestBuildHandler::cmCTestBuildHandler() +{ + this->MaxPreContext = 10; + this->MaxPostContext = 10; + + this->MaxErrors = 50; + this->MaxWarnings = 50; + + this->LastErrorOrWarning = this->ErrorsAndWarnings.end(); + + this->UseCTestLaunch = false; +} + +//---------------------------------------------------------------------- +void cmCTestBuildHandler::Initialize() +{ + this->Superclass::Initialize(); + this->StartBuild = ""; + this->EndBuild = ""; + this->CustomErrorMatches.clear(); + this->CustomErrorExceptions.clear(); + this->CustomWarningMatches.clear(); + this->CustomWarningExceptions.clear(); + this->ReallyCustomWarningMatches.clear(); + this->ReallyCustomWarningExceptions.clear(); + this->ErrorWarningFileLineRegex.clear(); + + this->ErrorMatchRegex.clear(); + this->ErrorExceptionRegex.clear(); + this->WarningMatchRegex.clear(); + this->WarningExceptionRegex.clear(); + this->BuildProcessingQueue.clear(); + this->BuildProcessingErrorQueue.clear(); + this->BuildOutputLogSize = 0; + this->CurrentProcessingLine.clear(); + + this->SimplifySourceDir = ""; + this->SimplifyBuildDir = ""; + this->OutputLineCounter = 0; + this->ErrorsAndWarnings.clear(); + this->LastErrorOrWarning = this->ErrorsAndWarnings.end(); + this->PostContextCount = 0; + this->MaxPreContext = 10; + this->MaxPostContext = 10; + this->PreContext.clear(); + + this->TotalErrors = 0; + this->TotalWarnings = 0; + this->LastTickChar = 0; + + this->ErrorQuotaReached = false; + this->WarningQuotaReached = false; + + this->MaxErrors = 50; + this->MaxWarnings = 50; + + this->UseCTestLaunch = false; +} + +//---------------------------------------------------------------------- +void cmCTestBuildHandler::PopulateCustomVectors(cmMakefile *mf) +{ + this->CTest->PopulateCustomVector(mf, "CTEST_CUSTOM_ERROR_MATCH", + this->CustomErrorMatches); + this->CTest->PopulateCustomVector(mf, "CTEST_CUSTOM_ERROR_EXCEPTION", + this->CustomErrorExceptions); + this->CTest->PopulateCustomVector(mf, "CTEST_CUSTOM_WARNING_MATCH", + this->CustomWarningMatches); + this->CTest->PopulateCustomVector(mf, "CTEST_CUSTOM_WARNING_EXCEPTION", + this->CustomWarningExceptions); + this->CTest->PopulateCustomInteger(mf, + "CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS", + this->MaxErrors); + this->CTest->PopulateCustomInteger(mf, + "CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS", + this->MaxWarnings); + + int n = -1; + this->CTest->PopulateCustomInteger(mf, "CTEST_CUSTOM_ERROR_PRE_CONTEXT", n); + if (n != -1) + { + this->MaxPreContext = static_cast(n); + } + + n = -1; + this->CTest->PopulateCustomInteger(mf, "CTEST_CUSTOM_ERROR_POST_CONTEXT", n); + if (n != -1) + { + this->MaxPostContext = static_cast(n); + } + + // Record the user-specified custom warning rules. + if(const char* customWarningMatchers = + mf->GetDefinition("CTEST_CUSTOM_WARNING_MATCH")) + { + cmSystemTools::ExpandListArgument(customWarningMatchers, + this->ReallyCustomWarningMatches); + } + if(const char* customWarningExceptions = + mf->GetDefinition("CTEST_CUSTOM_WARNING_EXCEPTION")) + { + cmSystemTools::ExpandListArgument(customWarningExceptions, + this->ReallyCustomWarningExceptions); + } +} + +//---------------------------------------------------------------------- +std::string cmCTestBuildHandler::GetMakeCommand() +{ + std::string makeCommand + = this->CTest->GetCTestConfiguration("MakeCommand"); + cmCTestLog(this->CTest, + HANDLER_VERBOSE_OUTPUT, "MakeCommand:" << makeCommand << + "\n"); + + std::string configType = this->CTest->GetConfigType(); + if (configType == "") + { + configType + = this->CTest->GetCTestConfiguration("DefaultCTestConfigurationType"); + } + if (configType == "") + { + configType = "Release"; + } + + cmSystemTools::ReplaceString(makeCommand, + "${CTEST_CONFIGURATION_TYPE}", configType.c_str()); + + return makeCommand; +} + +//---------------------------------------------------------------------- +//clearly it would be nice if this were broken up into a few smaller +//functions and commented... +int cmCTestBuildHandler::ProcessHandler() +{ + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Build project" << std::endl); + + // do we have time for this + if (this->CTest->GetRemainingTimeAllowed() < 120) + { + return 0; + } + + int entry; + for ( entry = 0; + cmCTestWarningErrorFileLine[entry].RegularExpressionString; + ++ entry ) + { + cmCTestBuildHandler::cmCTestCompileErrorWarningRex r; + if ( r.RegularExpression.compile( + cmCTestWarningErrorFileLine[entry].RegularExpressionString) ) + { + r.FileIndex = cmCTestWarningErrorFileLine[entry].FileIndex; + r.LineIndex = cmCTestWarningErrorFileLine[entry].LineIndex; + this->ErrorWarningFileLineRegex.push_back(r); + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Problem Compiling regular expression: " + << cmCTestWarningErrorFileLine[entry].RegularExpressionString + << std::endl); + } + } + + // Determine build command and build directory + std::string makeCommand = this->GetMakeCommand(); + if ( makeCommand.size() == 0 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find MakeCommand key in the DartConfiguration.tcl" + << std::endl); + return -1; + } + + const std::string &buildDirectory + = this->CTest->GetCTestConfiguration("BuildDirectory"); + if ( buildDirectory.size() == 0 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find BuildDirectory key in the DartConfiguration.tcl" + << std::endl); + return -1; + } + + std::string const& useLaunchers = + this->CTest->GetCTestConfiguration("UseLaunchers"); + this->UseCTestLaunch = cmSystemTools::IsOn(useLaunchers.c_str()); + + // Create a last build log + cmGeneratedFileStream ofs; + double elapsed_time_start = cmSystemTools::GetTime(); + if ( !this->StartLogFile("Build", ofs) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot create build log file" + << std::endl); + } + + // Create lists of regular expression strings for errors, error exceptions, + // warnings and warning exceptions. + std::vector::size_type cc; + for ( cc = 0; cmCTestErrorMatches[cc]; cc ++ ) + { + this->CustomErrorMatches.push_back(cmCTestErrorMatches[cc]); + } + for ( cc = 0; cmCTestErrorExceptions[cc]; cc ++ ) + { + this->CustomErrorExceptions.push_back(cmCTestErrorExceptions[cc]); + } + for ( cc = 0; cmCTestWarningMatches[cc]; cc ++ ) + { + this->CustomWarningMatches.push_back(cmCTestWarningMatches[cc]); + } + + for ( cc = 0; cmCTestWarningExceptions[cc]; cc ++ ) + { + this->CustomWarningExceptions.push_back(cmCTestWarningExceptions[cc]); + } + + // Pre-compile regular expressions objects for all regular expressions + std::vector::iterator it; + +#define cmCTestBuildHandlerPopulateRegexVector(strings, regexes) \ + regexes.clear(); \ + cmCTestLog(this->CTest, DEBUG, this << "Add " #regexes \ + << std::endl); \ + for ( it = strings.begin(); it != strings.end(); ++it ) \ + { \ + cmCTestLog(this->CTest, DEBUG, "Add " #strings ": " \ + << it->c_str() << std::endl); \ + regexes.push_back(it->c_str()); \ + } + cmCTestBuildHandlerPopulateRegexVector( + this->CustomErrorMatches, this->ErrorMatchRegex); + cmCTestBuildHandlerPopulateRegexVector( + this->CustomErrorExceptions, this->ErrorExceptionRegex); + cmCTestBuildHandlerPopulateRegexVector( + this->CustomWarningMatches, this->WarningMatchRegex); + cmCTestBuildHandlerPopulateRegexVector( + this->CustomWarningExceptions, this->WarningExceptionRegex); + + + // Determine source and binary tree substitutions to simplify the output. + this->SimplifySourceDir = ""; + this->SimplifyBuildDir = ""; + if ( this->CTest->GetCTestConfiguration("SourceDirectory").size() > 20 ) + { + std::string srcdir + = this->CTest->GetCTestConfiguration("SourceDirectory") + "/"; + std::string srcdirrep; + for ( cc = srcdir.size()-2; cc > 0; cc -- ) + { + if ( srcdir[cc] == '/' ) + { + srcdirrep = srcdir.c_str() + cc; + srcdirrep = "/..." + srcdirrep; + srcdir = srcdir.substr(0, cc+1); + break; + } + } + this->SimplifySourceDir = srcdir; + } + if ( this->CTest->GetCTestConfiguration("BuildDirectory").size() > 20 ) + { + std::string bindir + = this->CTest->GetCTestConfiguration("BuildDirectory") + "/"; + std::string bindirrep; + for ( cc = bindir.size()-2; cc > 0; cc -- ) + { + if ( bindir[cc] == '/' ) + { + bindirrep = bindir.c_str() + cc; + bindirrep = "/..." + bindirrep; + bindir = bindir.substr(0, cc+1); + break; + } + } + this->SimplifyBuildDir = bindir; + } + + + // Ok, let's do the build + + // Remember start build time + this->StartBuild = this->CTest->CurrentTime(); + this->StartBuildTime = cmSystemTools::GetTime(); + int retVal = 0; + int res = cmsysProcess_State_Exited; + if ( !this->CTest->GetShowOnly() ) + { + res = this->RunMakeCommand(makeCommand.c_str(), &retVal, + buildDirectory.c_str(), 0, ofs); + } + else + { + cmCTestLog(this->CTest, DEBUG, "Build with command: " << makeCommand + << std::endl); + } + + // Remember end build time and calculate elapsed time + this->EndBuild = this->CTest->CurrentTime(); + this->EndBuildTime = cmSystemTools::GetTime(); + double elapsed_build_time = cmSystemTools::GetTime() - elapsed_time_start; + + // Cleanups strings in the errors and warnings list. + t_ErrorsAndWarningsVector::iterator evit; + if ( !this->SimplifySourceDir.empty() ) + { + for ( evit = this->ErrorsAndWarnings.begin(); + evit != this->ErrorsAndWarnings.end(); + ++ evit ) + { + cmSystemTools::ReplaceString( + evit->Text, this->SimplifySourceDir.c_str(), "/.../"); + cmSystemTools::ReplaceString( + evit->PreContext, this->SimplifySourceDir.c_str(), "/.../"); + cmSystemTools::ReplaceString( + evit->PostContext, this->SimplifySourceDir.c_str(), "/.../"); + } + } + + if ( !this->SimplifyBuildDir.empty() ) + { + for ( evit = this->ErrorsAndWarnings.begin(); + evit != this->ErrorsAndWarnings.end(); + ++ evit ) + { + cmSystemTools::ReplaceString( + evit->Text, this->SimplifyBuildDir.c_str(), "/.../"); + cmSystemTools::ReplaceString( + evit->PreContext, this->SimplifyBuildDir.c_str(), "/.../"); + cmSystemTools::ReplaceString( + evit->PostContext, this->SimplifyBuildDir.c_str(), "/.../"); + } + } + + // Generate XML output + cmGeneratedFileStream xofs; + if(!this->StartResultingXML(cmCTest::PartBuild, "Build", xofs)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot create build XML file" + << std::endl); + return -1; + } + this->GenerateXMLHeader(xofs); + if(this->UseCTestLaunch) + { + this->GenerateXMLLaunched(xofs); + } + else + { + this->GenerateXMLLogScraped(xofs); + } + this->GenerateXMLFooter(xofs, elapsed_build_time); + + if (res != cmsysProcess_State_Exited || retVal || this->TotalErrors > 0) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Error(s) when building project" + << std::endl); + } + + // Display message about number of errors and warnings + cmCTestLog(this->CTest, HANDLER_OUTPUT, " " << this->TotalErrors + << (this->TotalErrors >= this->MaxErrors ? " or more" : "") + << " Compiler errors" << std::endl); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " " << this->TotalWarnings + << (this->TotalWarnings >= this->MaxWarnings ? " or more" : "") + << " Compiler warnings" << std::endl); + + return retVal; +} + +//---------------------------------------------------------------------------- +void cmCTestBuildHandler::GenerateXMLHeader(std::ostream& os) +{ + this->CTest->StartXML(os, this->AppendXML); + os << "\n" + << "\t" << this->StartBuild << "\n" + << "\t" << + static_cast(this->StartBuildTime) + << "\n" + << "" + << cmXMLSafe(this->GetMakeCommand()) + << "" << std::endl; +} + +//---------------------------------------------------------------------------- +class cmCTestBuildHandler::FragmentCompare +{ +public: + FragmentCompare(cmFileTimeComparison* ftc): FTC(ftc) {} + FragmentCompare(): FTC(0) {} + bool operator()(std::string const& l, std::string const& r) + { + // Order files by modification time. Use lexicographic order + // among files with the same time. + int result; + if(this->FTC->FileTimeCompare(l.c_str(), r.c_str(), &result) && + result != 0) + { + return result < 0; + } + else + { + return l < r; + } + } +private: + cmFileTimeComparison* FTC; +}; + +//---------------------------------------------------------------------------- +void cmCTestBuildHandler::GenerateXMLLaunched(std::ostream& os) +{ + if(this->CTestLaunchDir.empty()) + { + return; + } + + // Sort XML fragments in chronological order. + cmFileTimeComparison ftc; + FragmentCompare fragmentCompare(&ftc); + typedef std::set Fragments; + Fragments fragments(fragmentCompare); + + // Identify fragments on disk. + cmsys::Directory launchDir; + launchDir.Load(this->CTestLaunchDir.c_str()); + unsigned long n = launchDir.GetNumberOfFiles(); + for(unsigned long i=0; i < n; ++i) + { + const char* fname = launchDir.GetFile(i); + if(this->IsLaunchedErrorFile(fname)) + { + fragments.insert(this->CTestLaunchDir + "/" + fname); + ++this->TotalErrors; + } + else if(this->IsLaunchedWarningFile(fname)) + { + fragments.insert(this->CTestLaunchDir + "/" + fname); + ++this->TotalWarnings; + } + } + + // Copy the fragments into the final XML file. + for(Fragments::const_iterator fi = fragments.begin(); + fi != fragments.end(); ++fi) + { + this->GenerateXMLLaunchedFragment(os, fi->c_str()); + } +} + +//---------------------------------------------------------------------------- +void cmCTestBuildHandler::GenerateXMLLogScraped(std::ostream& os) +{ + std::vector& ew = this->ErrorsAndWarnings; + std::vector::iterator it; + + // only report the first 50 warnings and first 50 errors + int numErrorsAllowed = this->MaxErrors; + int numWarningsAllowed = this->MaxWarnings; + std::string srcdir = this->CTest->GetCTestConfiguration("SourceDirectory"); + // make sure the source dir is in the correct case on windows + // via a call to collapse full path. + srcdir = cmSystemTools::CollapseFullPath(srcdir.c_str()); + srcdir += "/"; + for ( it = ew.begin(); + it != ew.end() && (numErrorsAllowed || numWarningsAllowed); it++ ) + { + cmCTestBuildErrorWarning *cm = &(*it); + if ((cm->Error && numErrorsAllowed) || + (!cm->Error && numWarningsAllowed)) + { + if (cm->Error) + { + numErrorsAllowed--; + } + else + { + numWarningsAllowed--; + } + os << "\t<" << (cm->Error ? "Error" : "Warning") << ">\n" + << "\t\t" << cm->LogLine << "\n" + << "\t\t" << cmXMLSafe(cm->Text).Quotes(false) + << "\n" << std::endl; + std::vector::iterator rit; + for ( rit = this->ErrorWarningFileLineRegex.begin(); + rit != this->ErrorWarningFileLineRegex.end(); ++ rit ) + { + cmsys::RegularExpression* re = &rit->RegularExpression; + if ( re->find(cm->Text.c_str() ) ) + { + cm->SourceFile = re->match(rit->FileIndex); + // At this point we need to make this->SourceFile relative to + // the source root of the project, so cvs links will work + cmSystemTools::ConvertToUnixSlashes(cm->SourceFile); + if(cm->SourceFile.find("/.../") != cm->SourceFile.npos) + { + cmSystemTools::ReplaceString(cm->SourceFile, "/.../", ""); + std::string::size_type p = cm->SourceFile.find("/"); + if(p != cm->SourceFile.npos) + { + cm->SourceFile = cm->SourceFile.substr( + p+1, cm->SourceFile.size()-p); + } + } + else + { + // make sure it is a full path with the correct case + cm->SourceFile = cmSystemTools::CollapseFullPath( + cm->SourceFile.c_str()); + cmSystemTools::ReplaceString( + cm->SourceFile, srcdir.c_str(), ""); + } + cm->LineNumber = atoi(re->match(rit->LineIndex).c_str()); + break; + } + } + if ( !cm->SourceFile.empty() && cm->LineNumber >= 0 ) + { + if ( cm->SourceFile.size() > 0 ) + { + os << "\t\t" << cm->SourceFile << "" + << std::endl; + } + if ( cm->SourceFileTail.size() > 0 ) + { + os << "\t\t" << cm->SourceFileTail + << "" << std::endl; + } + if ( cm->LineNumber >= 0 ) + { + os << "\t\t" << cm->LineNumber + << "" << std::endl; + } + } + os << "\t\t" << cmXMLSafe(cm->PreContext).Quotes(false) + << "\n" + << "\t\t" << cmXMLSafe(cm->PostContext).Quotes(false); + // is this the last warning or error, if so notify + if ((cm->Error && !numErrorsAllowed) || + (!cm->Error && !numWarningsAllowed)) + { + os << "\nThe maximum number of reported warnings or errors has been " + "reached!!!\n"; + } + os << "\n" + << "\t\t0\n" + << "Error ? "Error" : "Warning") << ">\n\n" + << std::endl; + } + } +} + +//---------------------------------------------------------------------------- +void cmCTestBuildHandler::GenerateXMLFooter(std::ostream& os, + double elapsed_build_time) +{ + os << "\t\n\t\n" + << "\t" << this->EndBuild << "\n" + << "\t" << static_cast(this->EndBuildTime) + << "\n" + << "" << static_cast(elapsed_build_time/6)/10.0 + << "" + << "" << std::endl; + this->CTest->EndXML(os); +} + +//---------------------------------------------------------------------------- +void cmCTestBuildHandler::GenerateXMLLaunchedFragment(std::ostream& os, + const char* fname) +{ + std::ifstream fin(fname, std::ios::in | std::ios::binary); + std::string line; + while(cmSystemTools::GetLineFromStream(fin, line)) + { + os << line << "\n"; + } +} + +//---------------------------------------------------------------------------- +bool cmCTestBuildHandler::IsLaunchedErrorFile(const char* fname) +{ + // error-{hash}.xml + return (strncmp(fname, "error-", 6) == 0 && + strcmp(fname+strlen(fname)-4, ".xml") == 0); +} + +//---------------------------------------------------------------------------- +bool cmCTestBuildHandler::IsLaunchedWarningFile(const char* fname) +{ + // warning-{hash}.xml + return (strncmp(fname, "warning-", 8) == 0 && + strcmp(fname+strlen(fname)-4, ".xml") == 0); +} + +//###################################################################### +//###################################################################### +//###################################################################### +//###################################################################### + +//---------------------------------------------------------------------------- +class cmCTestBuildHandler::LaunchHelper +{ +public: + LaunchHelper(cmCTestBuildHandler* handler); + ~LaunchHelper(); +private: + cmCTestBuildHandler* Handler; + cmCTest* CTest; + + void WriteLauncherConfig(); + void WriteScrapeMatchers(const char* purpose, + std::vector const& matchers); +}; + +//---------------------------------------------------------------------------- +cmCTestBuildHandler::LaunchHelper::LaunchHelper(cmCTestBuildHandler* handler): + Handler(handler), CTest(handler->CTest) +{ + std::string tag = this->CTest->GetCurrentTag(); + if(tag.empty()) + { + // This is not for a dashboard submission, so there is no XML. + // Skip enabling the launchers. + this->Handler->UseCTestLaunch = false; + } + else + { + // Compute a directory in which to store launcher fragments. + std::string& launchDir = this->Handler->CTestLaunchDir; + launchDir = this->CTest->GetBinaryDir(); + launchDir += "/Testing/"; + launchDir += tag; + launchDir += "/Build"; + + // Clean out any existing launcher fragments. + cmSystemTools::RemoveADirectory(launchDir.c_str()); + + if(this->Handler->UseCTestLaunch) + { + // Enable launcher fragments. + cmSystemTools::MakeDirectory(launchDir.c_str()); + this->WriteLauncherConfig(); + std::string launchEnv = "CTEST_LAUNCH_LOGS="; + launchEnv += launchDir; + cmSystemTools::PutEnv(launchEnv.c_str()); + } + } + + // If not using launchers, make sure they passthru. + if(!this->Handler->UseCTestLaunch) + { + cmSystemTools::UnsetEnv("CTEST_LAUNCH_LOGS"); + } +} + +//---------------------------------------------------------------------------- +cmCTestBuildHandler::LaunchHelper::~LaunchHelper() +{ + if(this->Handler->UseCTestLaunch) + { + cmSystemTools::UnsetEnv("CTEST_LAUNCH_LOGS"); + } +} + +//---------------------------------------------------------------------------- +void cmCTestBuildHandler::LaunchHelper::WriteLauncherConfig() +{ + this->WriteScrapeMatchers("Warning", + this->Handler->ReallyCustomWarningMatches); + this->WriteScrapeMatchers("WarningSuppress", + this->Handler->ReallyCustomWarningExceptions); + + // Give some testing configuration information to the launcher. + std::string fname = this->Handler->CTestLaunchDir; + fname += "/CTestLaunchConfig.cmake"; + cmGeneratedFileStream fout(fname.c_str()); + std::string srcdir = this->CTest->GetCTestConfiguration("SourceDirectory"); + fout << "set(CTEST_SOURCE_DIRECTORY \"" << srcdir << "\")\n"; +} + +//---------------------------------------------------------------------------- +void +cmCTestBuildHandler::LaunchHelper +::WriteScrapeMatchers(const char* purpose, + std::vector const& matchers) +{ + if(matchers.empty()) + { + return; + } + std::string fname = this->Handler->CTestLaunchDir; + fname += "/Custom"; + fname += purpose; + fname += ".txt"; + cmGeneratedFileStream fout(fname.c_str()); + for(std::vector::const_iterator mi = matchers.begin(); + mi != matchers.end(); ++mi) + { + fout << *mi << "\n"; + } +} + +//---------------------------------------------------------------------- +int cmCTestBuildHandler::RunMakeCommand(const char* command, + int* retVal, const char* dir, int timeout, std::ofstream& ofs) +{ + // First generate the command and arguments + std::vector args = cmSystemTools::ParseArguments(command); + + if(args.size() < 1) + { + return false; + } + + std::vector argv; + for(std::vector::const_iterator a = args.begin(); + a != args.end(); ++a) + { + argv.push_back(a->c_str()); + } + argv.push_back(0); + + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Run command:"); + std::vector::iterator ait; + for ( ait = argv.begin(); ait != argv.end() && *ait; ++ ait ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " \"" << *ait << "\""); + } + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, std::endl); + + // Optionally use make rule launchers to record errors and warnings. + LaunchHelper launchHelper(this); + static_cast(launchHelper); + + // Now create process object + cmsysProcess* cp = cmsysProcess_New(); + cmsysProcess_SetCommand(cp, &*argv.begin()); + cmsysProcess_SetWorkingDirectory(cp, dir); + cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1); + cmsysProcess_SetTimeout(cp, timeout); + cmsysProcess_Execute(cp); + + // Initialize tick's + std::string::size_type tick = 0; + const std::string::size_type tick_len = 1024; + + char* data; + int length; + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Each symbol represents " << tick_len << " bytes of output." + << std::endl + << (this->UseCTestLaunch? "" : + " '!' represents an error and '*' a warning.\n") + << " " << std::flush); + + // Initialize building structures + this->BuildProcessingQueue.clear(); + this->OutputLineCounter = 0; + this->ErrorsAndWarnings.clear(); + this->TotalErrors = 0; + this->TotalWarnings = 0; + this->BuildOutputLogSize = 0; + this->LastTickChar = '.'; + this->WarningQuotaReached = false; + this->ErrorQuotaReached = false; + + // For every chunk of data + int res; + while((res = cmsysProcess_WaitForData(cp, &data, &length, 0))) + { + // Replace '\0' with '\n', since '\0' does not really make sense. This is + // for Visual Studio output + for(int cc =0; cc < length; ++cc) + { + if(data[cc] == 0) + { + data[cc] = '\n'; + } + } + + // Process the chunk of data + if ( res == cmsysProcess_Pipe_STDERR ) + { + this->ProcessBuffer(data, length, tick, tick_len, ofs, + &this->BuildProcessingErrorQueue); + } + else + { + this->ProcessBuffer(data, length, tick, tick_len, ofs, + &this->BuildProcessingQueue); + } + } + + this->ProcessBuffer(0, 0, tick, tick_len, ofs, &this->BuildProcessingQueue); + this->ProcessBuffer(0, 0, tick, tick_len, ofs, + &this->BuildProcessingErrorQueue); + cmCTestLog(this->CTest, OUTPUT, " Size of output: " + << ((this->BuildOutputLogSize + 512) / 1024) << "K" << std::endl); + + // Properly handle output of the build command + cmsysProcess_WaitForExit(cp, 0); + int result = cmsysProcess_GetState(cp); + + if(result == cmsysProcess_State_Exited) + { + if (retVal) + { + *retVal = cmsysProcess_GetExitValue(cp); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Command exited with the value: " << *retVal << std::endl); + // if a non zero return value + if (*retVal) + { + // If there was an error running command, report that on the + // dashboard. + cmCTestBuildErrorWarning errorwarning; + errorwarning.LogLine = 1; + errorwarning.Text + = "*** WARNING non-zero return value in ctest from: "; + errorwarning.Text += argv[0]; + errorwarning.PreContext = ""; + errorwarning.PostContext = ""; + errorwarning.Error = false; + this->ErrorsAndWarnings.push_back(errorwarning); + this->TotalWarnings ++; + } + } + } + else if(result == cmsysProcess_State_Exception) + { + if (retVal) + { + *retVal = cmsysProcess_GetExitException(cp); + cmCTestLog(this->CTest, WARNING, "There was an exception: " << *retVal + << std::endl); + } + } + else if(result == cmsysProcess_State_Expired) + { + cmCTestLog(this->CTest, WARNING, "There was a timeout" << std::endl); + } + else if(result == cmsysProcess_State_Error) + { + // If there was an error running command, report that on the dashboard. + cmCTestBuildErrorWarning errorwarning; + errorwarning.LogLine = 1; + errorwarning.Text = "*** ERROR executing: "; + errorwarning.Text += cmsysProcess_GetErrorString(cp); + errorwarning.PreContext = ""; + errorwarning.PostContext = ""; + errorwarning.Error = true; + this->ErrorsAndWarnings.push_back(errorwarning); + this->TotalErrors ++; + cmCTestLog(this->CTest, ERROR_MESSAGE, "There was an error: " + << cmsysProcess_GetErrorString(cp) << std::endl); + } + + cmsysProcess_Delete(cp); + return result; +} + +//###################################################################### +//###################################################################### +//###################################################################### +//###################################################################### + +//---------------------------------------------------------------------- +void cmCTestBuildHandler::ProcessBuffer(const char* data, int length, + size_t& tick, size_t tick_len, std::ofstream& ofs, + t_BuildProcessingQueueType* queue) +{ + const std::string::size_type tick_line_len = 50; + const char* ptr; + for ( ptr = data; ptr < data+length; ptr ++ ) + { + queue->push_back(*ptr); + } + this->BuildOutputLogSize += length; + + // until there are any lines left in the buffer + while ( 1 ) + { + // Find the end of line + t_BuildProcessingQueueType::iterator it; + for ( it = queue->begin(); + it != queue->end(); + ++ it ) + { + if ( *it == '\n' ) + { + break; + } + } + + // Once certain number of errors or warnings reached, ignore future errors + // or warnings. + if ( this->TotalWarnings >= this->MaxWarnings ) + { + this->WarningQuotaReached = true; + } + if ( this->TotalErrors >= this->MaxErrors ) + { + this->ErrorQuotaReached = true; + } + + // If the end of line was found + if ( it != queue->end() ) + { + // Create a contiguous array for the line + this->CurrentProcessingLine.clear(); + t_BuildProcessingQueueType::iterator cit; + for ( cit = queue->begin(); cit != it; ++cit ) + { + this->CurrentProcessingLine.push_back(*cit); + } + this->CurrentProcessingLine.push_back(0); + const char* line = &*this->CurrentProcessingLine.begin(); + + // Process the line + int lineType = this->ProcessSingleLine(line); + + // Erase the line from the queue + queue->erase(queue->begin(), it+1); + + // Depending on the line type, produce error or warning, or nothing + cmCTestBuildErrorWarning errorwarning; + bool found = false; + switch ( lineType ) + { + case b_WARNING_LINE: + this->LastTickChar = '*'; + errorwarning.Error = false; + found = true; + this->TotalWarnings ++; + break; + case b_ERROR_LINE: + this->LastTickChar = '!'; + errorwarning.Error = true; + found = true; + this->TotalErrors ++; + break; + } + if ( found ) + { + // This is an error or warning, so generate report + errorwarning.LogLine = static_cast(this->OutputLineCounter+1); + errorwarning.Text = line; + errorwarning.PreContext = ""; + errorwarning.PostContext = ""; + + // Copy pre-context to report + std::deque::iterator pcit; + for ( pcit = this->PreContext.begin(); + pcit != this->PreContext.end(); + ++pcit ) + { + errorwarning.PreContext += *pcit + "\n"; + } + this->PreContext.clear(); + + // Store report + this->ErrorsAndWarnings.push_back(errorwarning); + this->LastErrorOrWarning = this->ErrorsAndWarnings.end()-1; + this->PostContextCount = 0; + } + else + { + // This is not an error or warning. + // So, figure out if this is a post-context line + if ( this->ErrorsAndWarnings.size() && + this->LastErrorOrWarning != this->ErrorsAndWarnings.end() && + this->PostContextCount < this->MaxPostContext ) + { + this->PostContextCount ++; + this->LastErrorOrWarning->PostContext += line; + if ( this->PostContextCount < this->MaxPostContext ) + { + this->LastErrorOrWarning->PostContext += "\n"; + } + } + else + { + // Otherwise store pre-context for the next error + this->PreContext.push_back(line); + if ( this->PreContext.size() > this->MaxPreContext ) + { + this->PreContext.erase(this->PreContext.begin(), + this->PreContext.end()-this->MaxPreContext); + } + } + } + this->OutputLineCounter ++; + } + else + { + break; + } + } + + // Now that the buffer is processed, display missing ticks + int tickDisplayed = false; + while ( this->BuildOutputLogSize > (tick * tick_len) ) + { + tick ++; + cmCTestLog(this->CTest, HANDLER_OUTPUT, this->LastTickChar); + tickDisplayed = true; + if ( tick % tick_line_len == 0 && tick > 0 ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Size: " + << ((this->BuildOutputLogSize + 512) / 1024) << "K" << std::endl + << " "); + } + } + if ( tickDisplayed ) + { + this->LastTickChar = '.'; + } + + // And if this is verbose output, display the content of the chunk + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + cmCTestLogWrite(data, length)); + + // Always store the chunk to the file + ofs << cmCTestLogWrite(data, length); +} + +//---------------------------------------------------------------------- +int cmCTestBuildHandler::ProcessSingleLine(const char* data) +{ + if(this->UseCTestLaunch) + { + // No log scraping when using launchers. + return b_REGULAR_LINE; + } + + cmCTestLog(this->CTest, DEBUG, "Line: [" << data << "]" << std::endl); + + std::vector::iterator it; + + int warningLine = 0; + int errorLine = 0; + + // Check for regular expressions + + if ( !this->ErrorQuotaReached ) + { + // Errors + int wrxCnt = 0; + for ( it = this->ErrorMatchRegex.begin(); + it != this->ErrorMatchRegex.end(); + ++ it ) + { + if ( it->find(data) ) + { + errorLine = 1; + cmCTestLog(this->CTest, DEBUG, " Error Line: " << data + << " (matches: " << this->CustomErrorMatches[wrxCnt] << ")" + << std::endl); + break; + } + wrxCnt ++; + } + // Error exceptions + wrxCnt = 0; + for ( it = this->ErrorExceptionRegex.begin(); + it != this->ErrorExceptionRegex.end(); + ++ it ) + { + if ( it->find(data) ) + { + errorLine = 0; + cmCTestLog(this->CTest, DEBUG, " Not an error Line: " << data + << " (matches: " << this->CustomErrorExceptions[wrxCnt] << ")" + << std::endl); + break; + } + wrxCnt ++; + } + } + if ( !this->WarningQuotaReached ) + { + // Warnings + int wrxCnt = 0; + for ( it = this->WarningMatchRegex.begin(); + it != this->WarningMatchRegex.end(); + ++ it ) + { + if ( it->find(data) ) + { + warningLine = 1; + cmCTestLog(this->CTest, DEBUG, + " Warning Line: " << data + << " (matches: " << this->CustomWarningMatches[wrxCnt] << ")" + << std::endl); + break; + } + wrxCnt ++; + } + + wrxCnt = 0; + // Warning exceptions + for ( it = this->WarningExceptionRegex.begin(); + it != this->WarningExceptionRegex.end(); + ++ it ) + { + if ( it->find(data) ) + { + warningLine = 0; + cmCTestLog(this->CTest, DEBUG, " Not a warning Line: " << data + << " (matches: " << this->CustomWarningExceptions[wrxCnt] << ")" + << std::endl); + break; + } + wrxCnt ++; + } + } + if ( errorLine ) + { + return b_ERROR_LINE; + } + if ( warningLine ) + { + return b_WARNING_LINE; + } + return b_REGULAR_LINE; +} + diff --git a/Source/CTest/cmCTestBuildHandler.h b/Source/CTest/cmCTestBuildHandler.h new file mode 100644 index 0000000..439efd6 --- /dev/null +++ b/Source/CTest/cmCTestBuildHandler.h @@ -0,0 +1,152 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTestBuildHandler_h +#define cmCTestBuildHandler_h + + +#include "cmCTestGenericHandler.h" +#include "cmListFileCache.h" + +#include + +class cmMakefile; + +/** \class cmCTestBuildHandler + * \brief A class that handles ctest -S invocations + * + */ +class cmCTestBuildHandler : public cmCTestGenericHandler +{ +public: + cmTypeMacro(cmCTestBuildHandler, cmCTestGenericHandler); + + /* + * The main entry point for this class + */ + int ProcessHandler(); + + cmCTestBuildHandler(); + + void PopulateCustomVectors(cmMakefile *mf); + + /** + * Initialize handler + */ + virtual void Initialize(); + + int GetTotalErrors() { return this->TotalErrors;} + int GetTotalWarnings() { return this->TotalWarnings;} + +private: + std::string GetMakeCommand(); + + //! Run command specialized for make and configure. Returns process status + // and retVal is return value or exception. + int RunMakeCommand(const char* command, + int* retVal, const char* dir, int timeout, + std::ofstream& ofs); + + enum { + b_REGULAR_LINE, + b_WARNING_LINE, + b_ERROR_LINE + }; + + class cmCTestCompileErrorWarningRex + { + public: + cmCTestCompileErrorWarningRex() {} + int FileIndex; + int LineIndex; + cmsys::RegularExpression RegularExpression; + }; + + struct cmCTestBuildErrorWarning + { + bool Error; + int LogLine; + std::string Text; + std::string SourceFile; + std::string SourceFileTail; + int LineNumber; + std::string PreContext; + std::string PostContext; + }; + + // generate the XML output + void GenerateXMLHeader(std::ostream& os); + void GenerateXMLLaunched(std::ostream& os); + void GenerateXMLLogScraped(std::ostream& os); + void GenerateXMLFooter(std::ostream& os, double elapsed_build_time); + void GenerateXMLLaunchedFragment(std::ostream& os, const char* fname); + bool IsLaunchedErrorFile(const char* fname); + bool IsLaunchedWarningFile(const char* fname); + + std::string StartBuild; + std::string EndBuild; + double StartBuildTime; + double EndBuildTime; + + std::vector CustomErrorMatches; + std::vector CustomErrorExceptions; + std::vector CustomWarningMatches; + std::vector CustomWarningExceptions; + std::vector ReallyCustomWarningMatches; + std::vector ReallyCustomWarningExceptions; + std::vector ErrorWarningFileLineRegex; + + std::vector ErrorMatchRegex; + std::vector ErrorExceptionRegex; + std::vector WarningMatchRegex; + std::vector WarningExceptionRegex; + + typedef std::deque t_BuildProcessingQueueType; + + void ProcessBuffer(const char* data, int length, size_t& tick, + size_t tick_len, std::ofstream& ofs, t_BuildProcessingQueueType* queue); + int ProcessSingleLine(const char* data); + + t_BuildProcessingQueueType BuildProcessingQueue; + t_BuildProcessingQueueType BuildProcessingErrorQueue; + size_t BuildOutputLogSize; + std::vector CurrentProcessingLine; + + cmStdString SimplifySourceDir; + cmStdString SimplifyBuildDir; + size_t OutputLineCounter; + typedef std::vector t_ErrorsAndWarningsVector; + t_ErrorsAndWarningsVector ErrorsAndWarnings; + t_ErrorsAndWarningsVector::iterator LastErrorOrWarning; + size_t PostContextCount; + size_t MaxPreContext; + size_t MaxPostContext; + std::deque PreContext; + + int TotalErrors; + int TotalWarnings; + char LastTickChar; + + bool ErrorQuotaReached; + bool WarningQuotaReached; + + int MaxErrors; + int MaxWarnings; + + bool UseCTestLaunch; + std::string CTestLaunchDir; + class LaunchHelper; + friend class LaunchHelper; + class FragmentCompare; +}; + +#endif diff --git a/Source/CTest/cmCTestCVS.cxx b/Source/CTest/cmCTestCVS.cxx new file mode 100644 index 0000000..7269507 --- /dev/null +++ b/Source/CTest/cmCTestCVS.cxx @@ -0,0 +1,319 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestCVS.h" + +#include "cmCTest.h" +#include "cmSystemTools.h" +#include "cmXMLSafe.h" + +#include + +//---------------------------------------------------------------------------- +cmCTestCVS::cmCTestCVS(cmCTest* ct, std::ostream& log): cmCTestVC(ct, log) +{ +} + +//---------------------------------------------------------------------------- +cmCTestCVS::~cmCTestCVS() +{ +} + +//---------------------------------------------------------------------------- +class cmCTestCVS::UpdateParser: public cmCTestVC::LineParser +{ +public: + UpdateParser(cmCTestCVS* cvs, const char* prefix): CVS(cvs) + { + this->SetLog(&cvs->Log, prefix); + // See "man cvs", section "update output". + this->RegexFileUpdated.compile("^([UP]) *(.*)"); + this->RegexFileModified.compile("^([MRA]) *(.*)"); + this->RegexFileConflicting.compile("^([C]) *(.*)"); + this->RegexFileRemoved1.compile( + "cvs[^ ]* update: `?([^']*)'? is no longer in the repository"); + this->RegexFileRemoved2.compile( + "cvs[^ ]* update: " + "warning: `?([^']*)'? is not \\(any longer\\) pertinent"); + } +private: + cmCTestCVS* CVS; + cmsys::RegularExpression RegexFileUpdated; + cmsys::RegularExpression RegexFileModified; + cmsys::RegularExpression RegexFileConflicting; + cmsys::RegularExpression RegexFileRemoved1; + cmsys::RegularExpression RegexFileRemoved2; + + virtual bool ProcessLine() + { + if(this->RegexFileUpdated.find(this->Line)) + { + this->DoFile(PathUpdated, this->RegexFileUpdated.match(2)); + } + else if(this->RegexFileModified.find(this->Line)) + { + this->DoFile(PathModified, this->RegexFileModified.match(2)); + } + else if(this->RegexFileConflicting.find(this->Line)) + { + this->DoFile(PathConflicting, this->RegexFileConflicting.match(2)); + } + else if(this->RegexFileRemoved1.find(this->Line)) + { + this->DoFile(PathUpdated, this->RegexFileRemoved1.match(1)); + } + else if(this->RegexFileRemoved2.find(this->Line)) + { + this->DoFile(PathUpdated, this->RegexFileRemoved2.match(1)); + } + return true; + } + + void DoFile(PathStatus status, std::string const& file) + { + std::string dir = cmSystemTools::GetFilenamePath(file); + std::string name = cmSystemTools::GetFilenameName(file); + this->CVS->Dirs[dir][name] = status; + } +}; + +//---------------------------------------------------------------------------- +bool cmCTestCVS::UpdateImpl() +{ + // Get user-specified update options. + std::string opts = this->CTest->GetCTestConfiguration("UpdateOptions"); + if(opts.empty()) + { + opts = this->CTest->GetCTestConfiguration("CVSUpdateOptions"); + if(opts.empty()) + { + opts = "-dP"; + } + } + std::vector args = cmSystemTools::ParseArguments(opts.c_str()); + + // Specify the start time for nightly testing. + if(this->CTest->GetTestModel() == cmCTest::NIGHTLY) + { + args.push_back("-D" + this->GetNightlyTime() + " UTC"); + } + + // Run "cvs update" to update the work tree. + std::vector cvs_update; + cvs_update.push_back(this->CommandLineTool.c_str()); + cvs_update.push_back("-z3"); + cvs_update.push_back("update"); + for(std::vector::const_iterator ai = args.begin(); + ai != args.end(); ++ai) + { + cvs_update.push_back(ai->c_str()); + } + cvs_update.push_back(0); + + UpdateParser out(this, "up-out> "); + UpdateParser err(this, "up-err> "); + return this->RunUpdateCommand(&cvs_update[0], &out, &err); +} + +//---------------------------------------------------------------------------- +class cmCTestCVS::LogParser: public cmCTestVC::LineParser +{ +public: + typedef cmCTestCVS::Revision Revision; + LogParser(cmCTestCVS* cvs, const char* prefix, std::vector& revs): + CVS(cvs), Revisions(revs), Section(SectionHeader) + { + this->SetLog(&cvs->Log, prefix), + this->RegexRevision.compile("^revision +([^ ]*) *$"); + this->RegexBranches.compile("^branches: .*$"); + this->RegexPerson.compile("^date: +([^;]+); +author: +([^;]+);"); + } +private: + cmCTestCVS* CVS; + std::vector& Revisions; + cmsys::RegularExpression RegexRevision; + cmsys::RegularExpression RegexBranches; + cmsys::RegularExpression RegexPerson; + enum SectionType { SectionHeader, SectionRevisions, SectionEnd }; + SectionType Section; + Revision Rev; + + virtual bool ProcessLine() + { + if(this->Line == ("=======================================" + "======================================")) + { + // This line ends the revision list. + if(this->Section == SectionRevisions) + { + this->FinishRevision(); + } + this->Section = SectionEnd; + } + else if(this->Line == "----------------------------") + { + // This line divides revisions from the header and each other. + if(this->Section == SectionHeader) + { + this->Section = SectionRevisions; + } + else if(this->Section == SectionRevisions) + { + this->FinishRevision(); + } + } + else if(this->Section == SectionRevisions) + { + if(!this->Rev.Log.empty()) + { + // Continue the existing log. + this->Rev.Log += this->Line; + this->Rev.Log += "\n"; + } + else if(this->Rev.Rev.empty() && this->RegexRevision.find(this->Line)) + { + this->Rev.Rev = this->RegexRevision.match(1); + } + else if(this->Rev.Date.empty() && this->RegexPerson.find(this->Line)) + { + this->Rev.Date = this->RegexPerson.match(1); + this->Rev.Author = this->RegexPerson.match(2); + } + else if(!this->RegexBranches.find(this->Line)) + { + // Start the log. + this->Rev.Log += this->Line; + this->Rev.Log += "\n"; + } + } + return this->Section != SectionEnd; + } + + void FinishRevision() + { + if(!this->Rev.Rev.empty()) + { + // Record this revision. + this->CVS->Log << "Found revision " << this->Rev.Rev << "\n" + << " author = " << this->Rev.Author << "\n" + << " date = " << this->Rev.Date << "\n"; + this->Revisions.push_back(this->Rev); + + // We only need two revisions. + if(this->Revisions.size() >= 2) + { + this->Section = SectionEnd; + } + } + this->Rev = Revision(); + } +}; + +//---------------------------------------------------------------------------- +std::string cmCTestCVS::ComputeBranchFlag(std::string const& dir) +{ + // Compute the tag file location for this directory. + std::string tagFile = this->SourceDirectory; + if(!dir.empty()) + { + tagFile += "/"; + tagFile += dir; + } + tagFile += "/CVS/Tag"; + + // Lookup the branch in the tag file, if any. + std::string tagLine; + std::ifstream tagStream(tagFile.c_str()); + if(tagStream && cmSystemTools::GetLineFromStream(tagStream, tagLine) && + tagLine.size() > 1 && tagLine[0] == 'T') + { + // Use the branch specified in the tag file. + std::string flag = "-r"; + flag += tagLine.substr(1); + return flag; + } + else + { + // Use the default branch. + return "-b"; + } +} + +//---------------------------------------------------------------------------- +void cmCTestCVS::LoadRevisions(std::string const& file, + const char* branchFlag, + std::vector& revisions) +{ + cmCTestLog(this->CTest, HANDLER_OUTPUT, "." << std::flush); + + // Run "cvs log" to get revisions of this file on this branch. + const char* cvs = this->CommandLineTool.c_str(); + const char* cvs_log[] = + {cvs, "log", "-N", branchFlag, file.c_str(), 0}; + + LogParser out(this, "log-out> ", revisions); + OutputLogger err(this->Log, "log-err> "); + this->RunChild(cvs_log, &out, &err); +} + +//---------------------------------------------------------------------------- +void cmCTestCVS::WriteXMLDirectory(std::ostream& xml, + std::string const& path, + Directory const& dir) +{ + const char* slash = path.empty()? "":"/"; + xml << "\t\n" + << "\t\t" << cmXMLSafe(path) << "\n"; + + // Lookup the branch checked out in the working tree. + std::string branchFlag = this->ComputeBranchFlag(path); + + // Load revisions and write an entry for each file in this directory. + std::vector revisions; + for(Directory::const_iterator fi = dir.begin(); fi != dir.end(); ++fi) + { + std::string full = path + slash + fi->first; + + // Load two real or unknown revisions. + revisions.clear(); + if(fi->second != PathUpdated) + { + // For local modifications the current rev is unknown and the + // prior rev is the latest from cvs. + revisions.push_back(this->Unknown); + } + this->LoadRevisions(full, branchFlag.c_str(), revisions); + revisions.resize(2, this->Unknown); + + // Write the entry for this file with these revisions. + File f(fi->second, &revisions[0], &revisions[1]); + this->WriteXMLEntry(xml, path, fi->first, full, f); + } + xml << "\t\n"; +} + +//---------------------------------------------------------------------------- +bool cmCTestCVS::WriteXMLUpdates(std::ostream& xml) +{ + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Gathering version information (one . per updated file):\n" + " " << std::flush); + + for(std::map::const_iterator + di = this->Dirs.begin(); di != this->Dirs.end(); ++di) + { + this->WriteXMLDirectory(xml, di->first, di->second); + } + + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::endl); + + return true; +} diff --git a/Source/CTest/cmCTestCVS.h b/Source/CTest/cmCTestCVS.h new file mode 100644 index 0000000..b7fe567 --- /dev/null +++ b/Source/CTest/cmCTestCVS.h @@ -0,0 +1,51 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestCVS_h +#define cmCTestCVS_h + +#include "cmCTestVC.h" + +/** \class cmCTestCVS + * \brief Interaction with cvs command-line tool + * + */ +class cmCTestCVS: public cmCTestVC +{ +public: + /** Construct with a CTest instance and update log stream. */ + cmCTestCVS(cmCTest* ctest, std::ostream& log); + + virtual ~cmCTestCVS(); + +private: + // Implement cmCTestVC internal API. + virtual bool UpdateImpl(); + virtual bool WriteXMLUpdates(std::ostream& xml); + + // Update status for files in each directory. + class Directory: public std::map {}; + std::map Dirs; + + std::string ComputeBranchFlag(std::string const& dir); + void LoadRevisions(std::string const& file, const char* branchFlag, + std::vector& revisions); + void WriteXMLDirectory(std::ostream& xml, std::string const& path, + Directory const& dir); + + // Parsing helper classes. + class UpdateParser; + class LogParser; + friend class UpdateParser; + friend class LogParser; +}; + +#endif diff --git a/Source/CTest/cmCTestCommand.h b/Source/CTest/cmCTestCommand.h new file mode 100644 index 0000000..e2ebba8 --- /dev/null +++ b/Source/CTest/cmCTestCommand.h @@ -0,0 +1,40 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestCommand_h +#define cmCTestCommand_h + +#include "cmCommand.h" + +class cmCTest; +class cmCTestScriptHandler; + +/** \class cmCTestCommand + * \brief A superclass for all commands added to the CTestScriptHandler + * + * cmCTestCommand is the superclass for all commands that will be added to + * the ctest script handlers parser. + * + */ +class cmCTestCommand : public cmCommand +{ +public: + + cmCTestCommand() {this->CTest = 0; this->CTestScriptHandler = 0;} + + cmCTest *CTest; + cmCTestScriptHandler *CTestScriptHandler; + + cmTypeMacro(cmCTestCommand, cmCommand); +}; + + +#endif diff --git a/Source/CTest/cmCTestConfigureCommand.cxx b/Source/CTest/cmCTestConfigureCommand.cxx new file mode 100644 index 0000000..7a99ddf --- /dev/null +++ b/Source/CTest/cmCTestConfigureCommand.cxx @@ -0,0 +1,172 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestConfigureCommand.h" + +#include "cmGlobalGenerator.h" +#include "cmCTest.h" +#include "cmCTestGenericHandler.h" + +cmCTestConfigureCommand::cmCTestConfigureCommand() +{ + this->Arguments[ctc_OPTIONS] = "OPTIONS"; + this->Arguments[ctc_LAST] = 0; + this->Last = ctc_LAST; +} + +cmCTestGenericHandler* cmCTestConfigureCommand::InitializeHandler() +{ + std::vector options; + + if (this->Values[ctc_OPTIONS]) + { + cmSystemTools::ExpandListArgument(this->Values[ctc_OPTIONS], options); + } + + if ( this->Values[ct_BUILD] ) + { + this->CTest->SetCTestConfiguration("BuildDirectory", + cmSystemTools::CollapseFullPath( + this->Values[ct_BUILD]).c_str()); + } + else + { + this->CTest->SetCTestConfiguration("BuildDirectory", + cmSystemTools::CollapseFullPath( + this->Makefile->GetSafeDefinition("CTEST_BINARY_DIRECTORY")).c_str()); + } + + if ( this->Values[ct_SOURCE] ) + { + this->CTest->SetCTestConfiguration("SourceDirectory", + cmSystemTools::CollapseFullPath( + this->Values[ct_SOURCE]).c_str()); + } + else + { + this->CTest->SetCTestConfiguration("SourceDirectory", + cmSystemTools::CollapseFullPath( + this->Makefile->GetSafeDefinition("CTEST_SOURCE_DIRECTORY")).c_str()); + } + + if ( this->CTest->GetCTestConfiguration("BuildDirectory").empty() ) + { + this->SetError("Build directory not specified. Either use BUILD " + "argument to CTEST_CONFIGURE command or set CTEST_BINARY_DIRECTORY " + "variable"); + return 0; + } + + const char* ctestConfigureCommand + = this->Makefile->GetDefinition("CTEST_CONFIGURE_COMMAND"); + + if ( ctestConfigureCommand && *ctestConfigureCommand ) + { + this->CTest->SetCTestConfiguration("ConfigureCommand", + ctestConfigureCommand); + } + else + { + const char* cmakeGeneratorName + = this->Makefile->GetDefinition("CTEST_CMAKE_GENERATOR"); + if ( cmakeGeneratorName && *cmakeGeneratorName ) + { + const std::string& source_dir + = this->CTest->GetCTestConfiguration("SourceDirectory"); + if ( source_dir.empty() ) + { + this->SetError("Source directory not specified. Either use SOURCE " + "argument to CTEST_CONFIGURE command or set CTEST_SOURCE_DIRECTORY " + "variable"); + return 0; + } + + const std::string cmakelists_file = source_dir + "/CMakeLists.txt"; + if ( !cmSystemTools::FileExists(cmakelists_file.c_str()) ) + { + cmOStringStream e; + e << "CMakeLists.txt file does not exist [" + << cmakelists_file << "]"; + this->SetError(e.str().c_str()); + return 0; + } + + bool multiConfig = false; + bool cmakeBuildTypeInOptions = false; + + cmGlobalGenerator *gg = + this->Makefile->GetCMakeInstance()->CreateGlobalGenerator( + cmakeGeneratorName); + if(gg) + { + multiConfig = gg->IsMultiConfig(); + delete gg; + } + + std::string cmakeConfigureCommand = "\""; + cmakeConfigureCommand += this->CTest->GetCMakeExecutable(); + cmakeConfigureCommand += "\""; + + std::vector::const_iterator it; + std::string option; + for (it= options.begin(); it!=options.end(); ++it) + { + option = *it; + + cmakeConfigureCommand += " \""; + cmakeConfigureCommand += option; + cmakeConfigureCommand += "\""; + + if ((0 != strstr(option.c_str(), "CMAKE_BUILD_TYPE=")) || + (0 != strstr(option.c_str(), "CMAKE_BUILD_TYPE:STRING="))) + { + cmakeBuildTypeInOptions = true; + } + } + + if (!multiConfig && !cmakeBuildTypeInOptions && + !this->CTest->GetConfigType().empty()) + { + cmakeConfigureCommand += " \"-DCMAKE_BUILD_TYPE:STRING="; + cmakeConfigureCommand += this->CTest->GetConfigType(); + cmakeConfigureCommand += "\""; + } + + cmakeConfigureCommand += " \"-G"; + cmakeConfigureCommand += cmakeGeneratorName; + cmakeConfigureCommand += "\""; + + cmakeConfigureCommand += " \""; + cmakeConfigureCommand += source_dir; + cmakeConfigureCommand += "\""; + + this->CTest->SetCTestConfiguration("ConfigureCommand", + cmakeConfigureCommand.c_str()); + } + else + { + this->SetError("Configure command is not specified. If this is a " + "\"built with CMake\" project, set CTEST_CMAKE_GENERATOR. If not, " + "set CTEST_CONFIGURE_COMMAND."); + return 0; + } + } + + cmCTestGenericHandler* handler + = this->CTest->GetInitializedHandler("configure"); + if ( !handler ) + { + this->SetError( + "internal CTest error. Cannot instantiate configure handler"); + return 0; + } + return handler; +} diff --git a/Source/CTest/cmCTestConfigureCommand.h b/Source/CTest/cmCTestConfigureCommand.h new file mode 100644 index 0000000..b343fc1 --- /dev/null +++ b/Source/CTest/cmCTestConfigureCommand.h @@ -0,0 +1,84 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestConfigureCommand_h +#define cmCTestConfigureCommand_h + +#include "cmCTestHandlerCommand.h" + +/** \class cmCTestConfigure + * \brief Run a ctest script + * + * cmCTestConfigureCommand defineds the command to configures the project. + */ +class cmCTestConfigureCommand : public cmCTestHandlerCommand +{ +public: + cmCTestConfigureCommand(); + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestConfigureCommand* ni = new cmCTestConfigureCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_configure";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Configure the project build tree."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_configure([BUILD build_dir] [SOURCE source_dir] [APPEND]\n" + " [OPTIONS options] [RETURN_VALUE res])\n" + "Configures the given build directory and stores results in " + "Configure.xml. " + "If no BUILD is given, the CTEST_BINARY_DIRECTORY variable is used. " + "If no SOURCE is given, the CTEST_SOURCE_DIRECTORY variable is used. " + "The OPTIONS argument specifies command line arguments to pass to " + "the configuration tool. " + "The RETURN_VALUE option specifies a variable in which to store the " + "return value of the native build tool." + "\n" + CTEST_COMMAND_APPEND_OPTION_DOCS; + } + + cmTypeMacro(cmCTestConfigureCommand, cmCTestHandlerCommand); + +protected: + cmCTestGenericHandler* InitializeHandler(); + + enum { + ctc_FIRST = ct_LAST, + ctc_OPTIONS, + ctc_LAST + }; +}; + + +#endif diff --git a/Source/CTest/cmCTestConfigureHandler.cxx b/Source/CTest/cmCTestConfigureHandler.cxx new file mode 100644 index 0000000..3329756 --- /dev/null +++ b/Source/CTest/cmCTestConfigureHandler.cxx @@ -0,0 +1,132 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCTestConfigureHandler.h" + +#include "cmCTest.h" +#include "cmGeneratedFileStream.h" +#include "cmake.h" +#include "cmXMLSafe.h" +#include + + +//---------------------------------------------------------------------- +cmCTestConfigureHandler::cmCTestConfigureHandler() +{ +} + +//---------------------------------------------------------------------- +void cmCTestConfigureHandler::Initialize() +{ + this->Superclass::Initialize(); +} + +//---------------------------------------------------------------------- +//clearly it would be nice if this were broken up into a few smaller +//functions and commented... +int cmCTestConfigureHandler::ProcessHandler() +{ + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Configure project" << std::endl); + std::string cCommand + = this->CTest->GetCTestConfiguration("ConfigureCommand"); + if ( cCommand.size() == 0 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find ConfigureCommand key in the DartConfiguration.tcl" + << std::endl); + return -1; + } + + std::string buildDirectory + = this->CTest->GetCTestConfiguration("BuildDirectory"); + if ( buildDirectory.size() == 0 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find BuildDirectory key in the DartConfiguration.tcl" + << std::endl); + return -1; + } + + double elapsed_time_start = cmSystemTools::GetTime(); + std::string output; + int retVal = 0; + int res = 0; + if ( !this->CTest->GetShowOnly() ) + { + cmGeneratedFileStream os; + if(!this->StartResultingXML(cmCTest::PartConfigure, "Configure", os)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot open configure file" + << std::endl); + return 1; + } + std::string start_time = this->CTest->CurrentTime(); + unsigned int start_time_time = static_cast( + cmSystemTools::GetTime()); + + cmGeneratedFileStream ofs; + this->StartLogFile("Configure", ofs); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Configure with command: " + << cCommand.c_str() << std::endl); + res = this->CTest->RunMakeCommand(cCommand.c_str(), &output, + &retVal, buildDirectory.c_str(), + 0, ofs); + + if ( ofs ) + { + ofs.close(); + } + + if ( os ) + { + this->CTest->StartXML(os, this->AppendXML); + os << "\n" + << "\t" << start_time << "" + << std::endl + << "\t" << start_time_time + << "\n"; + + if ( res == cmsysProcess_State_Exited && retVal ) + { + os << retVal; + } + os << "" << cCommand.c_str() << "" + << std::endl; + cmCTestLog(this->CTest, DEBUG, "End" << std::endl); + os << "" << cmXMLSafe(output) << "" << std::endl; + std::string end_time = this->CTest->CurrentTime(); + os << "\t" << retVal << "\n" + << "\t" << end_time << "\n" + << "\t" << + static_cast(cmSystemTools::GetTime()) + << "\n" + << "" + << static_cast( + (cmSystemTools::GetTime() - elapsed_time_start)/6)/10.0 + << "" + << "" << std::endl; + this->CTest->EndXML(os); + } + } + else + { + cmCTestLog(this->CTest, DEBUG, "Configure with command: " << cCommand + << std::endl); + } + if (! res || retVal ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Error(s) when configuring the project" << std::endl); + return -1; + } + return 0; +} diff --git a/Source/CTest/cmCTestConfigureHandler.h b/Source/CTest/cmCTestConfigureHandler.h new file mode 100644 index 0000000..d880bd7 --- /dev/null +++ b/Source/CTest/cmCTestConfigureHandler.h @@ -0,0 +1,39 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTestConfigureHandler_h +#define cmCTestConfigureHandler_h + + +#include "cmCTestGenericHandler.h" +#include "cmListFileCache.h" + +/** \class cmCTestConfigureHandler + * \brief A class that handles ctest -S invocations + * + */ +class cmCTestConfigureHandler : public cmCTestGenericHandler +{ +public: + cmTypeMacro(cmCTestConfigureHandler, cmCTestGenericHandler); + + /* + * The main entry point for this class + */ + int ProcessHandler(); + + cmCTestConfigureHandler(); + + void Initialize(); +}; + +#endif diff --git a/Source/CTest/cmCTestCoverageCommand.cxx b/Source/CTest/cmCTestCoverageCommand.cxx new file mode 100644 index 0000000..72ff720 --- /dev/null +++ b/Source/CTest/cmCTestCoverageCommand.cxx @@ -0,0 +1,73 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestCoverageCommand.h" + +#include "cmCTest.h" +#include "cmCTestCoverageHandler.h" + +//---------------------------------------------------------------------------- +cmCTestCoverageCommand::cmCTestCoverageCommand() +{ + this->LabelsMentioned = false; +} + +//---------------------------------------------------------------------------- +cmCTestGenericHandler* cmCTestCoverageCommand::InitializeHandler() +{ + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "CoverageCommand", "CTEST_COVERAGE_COMMAND"); + + cmCTestCoverageHandler* handler = static_cast( + this->CTest->GetInitializedHandler("coverage")); + if ( !handler ) + { + this->SetError("internal CTest error. Cannot instantiate test handler"); + return 0; + } + + // If a LABELS option was given, select only files with the labels. + if(this->LabelsMentioned) + { + handler->SetLabelFilter(this->Labels); + } + + return handler; +} + +//---------------------------------------------------------------------------- +bool cmCTestCoverageCommand::CheckArgumentKeyword(std::string const& arg) +{ + // Look for arguments specific to this command. + if(arg == "LABELS") + { + this->ArgumentDoing = ArgumentDoingLabels; + this->LabelsMentioned = true; + return true; + } + + // Look for other arguments. + return this->Superclass::CheckArgumentKeyword(arg); +} + +//---------------------------------------------------------------------------- +bool cmCTestCoverageCommand::CheckArgumentValue(std::string const& arg) +{ + // Handle states specific to this command. + if(this->ArgumentDoing == ArgumentDoingLabels) + { + this->Labels.insert(arg); + return true; + } + + // Look for other arguments. + return this->Superclass::CheckArgumentValue(arg); +} diff --git a/Source/CTest/cmCTestCoverageCommand.h b/Source/CTest/cmCTestCoverageCommand.h new file mode 100644 index 0000000..2fe762c --- /dev/null +++ b/Source/CTest/cmCTestCoverageCommand.h @@ -0,0 +1,90 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestCoverageCommand_h +#define cmCTestCoverageCommand_h + +#include "cmCTestHandlerCommand.h" + +/** \class cmCTestCoverage + * \brief Run a ctest script + * + * cmCTestCoverageCommand defineds the command to test the project. + */ +class cmCTestCoverageCommand : public cmCTestHandlerCommand +{ +public: + + cmCTestCoverageCommand(); + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestCoverageCommand* ni = new cmCTestCoverageCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_coverage";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Collect coverage tool results."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_coverage([BUILD build_dir] [RETURN_VALUE res] [APPEND]\n" + " [LABELS label1 [label2 [...]]])\n" + "Perform the coverage of the given build directory and stores results " + "in Coverage.xml. The second argument is a variable that will hold " + "value." + "\n" + "The LABELS option filters the coverage report to include only " + "source files labeled with at least one of the labels specified." + "\n" + CTEST_COMMAND_APPEND_OPTION_DOCS; + } + + cmTypeMacro(cmCTestCoverageCommand, cmCTestHandlerCommand); + +protected: + cmCTestGenericHandler* InitializeHandler(); + + virtual bool CheckArgumentKeyword(std::string const& arg); + virtual bool CheckArgumentValue(std::string const& arg); + + enum + { + ArgumentDoingLabels = Superclass::ArgumentDoingLast1, + ArgumentDoingLast2 + }; + + bool LabelsMentioned; + std::set Labels; +}; + + +#endif + diff --git a/Source/CTest/cmCTestCoverageHandler.cxx b/Source/CTest/cmCTestCoverageHandler.cxx new file mode 100644 index 0000000..309abb1 --- /dev/null +++ b/Source/CTest/cmCTestCoverageHandler.cxx @@ -0,0 +1,2066 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestCoverageHandler.h" +#include "cmParsePHPCoverage.h" +#include "cmCTest.h" +#include "cmake.h" +#include "cmMakefile.h" +#include "cmSystemTools.h" +#include "cmGeneratedFileStream.h" +#include "cmXMLSafe.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#define SAFEDIV(x,y) (((y)!=0)?((x)/(y)):(0)) + +class cmCTestRunProcess +{ +public: + cmCTestRunProcess() + { + this->Process = cmsysProcess_New(); + this->PipeState = -1; + this->TimeOut = -1; + } + ~cmCTestRunProcess() + { + if(!(this->PipeState == -1) + && !(this->PipeState == cmsysProcess_Pipe_None ) + && !(this->PipeState == cmsysProcess_Pipe_Timeout)) + { + this->WaitForExit(); + } + cmsysProcess_Delete(this->Process); + } + void SetCommand(const char* command) + { + this->CommandLineStrings.clear(); + this->CommandLineStrings.push_back(command);; + } + void AddArgument(const char* arg) + { + if(arg) + { + this->CommandLineStrings.push_back(arg); + } + } + void SetWorkingDirectory(const char* dir) + { + this->WorkingDirectory = dir; + } + void SetTimeout(double t) + { + this->TimeOut = t; + } + bool StartProcess() + { + std::vector args; + for(std::vector::iterator i = + this->CommandLineStrings.begin(); + i != this->CommandLineStrings.end(); ++i) + { + args.push_back(i->c_str()); + } + args.push_back(0); // null terminate + cmsysProcess_SetCommand(this->Process, &*args.begin()); + if(this->WorkingDirectory.size()) + { + cmsysProcess_SetWorkingDirectory(this->Process, + this->WorkingDirectory.c_str()); + } + + cmsysProcess_SetOption(this->Process, + cmsysProcess_Option_HideWindow, 1); + if(this->TimeOut != -1) + { + cmsysProcess_SetTimeout(this->Process, this->TimeOut); + } + cmsysProcess_Execute(this->Process); + this->PipeState = cmsysProcess_GetState(this->Process); + // if the process is running or exited return true + if(this->PipeState == cmsysProcess_State_Executing + || this->PipeState == cmsysProcess_State_Exited) + { + return true; + } + return false; + } + void SetStdoutFile(const char* fname) + { + cmsysProcess_SetPipeFile(this->Process, cmsysProcess_Pipe_STDOUT, fname); + } + void SetStderrFile(const char* fname) + { + cmsysProcess_SetPipeFile(this->Process, cmsysProcess_Pipe_STDERR, fname); + } + int WaitForExit(double* timeout =0) + { + this->PipeState = cmsysProcess_WaitForExit(this->Process, + timeout); + return this->PipeState; + } + int GetProcessState() { return this->PipeState;} +private: + int PipeState; + cmsysProcess* Process; + std::vector CommandLineStrings; + std::string WorkingDirectory; + double TimeOut; +}; + + +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +cmCTestCoverageHandler::cmCTestCoverageHandler() +{ +} + +//---------------------------------------------------------------------- +void cmCTestCoverageHandler::Initialize() +{ + this->Superclass::Initialize(); + this->CustomCoverageExclude.clear(); + this->SourceLabels.clear(); + this->LabelIdMap.clear(); + this->Labels.clear(); + this->LabelFilter.clear(); +} + +//---------------------------------------------------------------------------- +void cmCTestCoverageHandler::CleanCoverageLogFiles(std::ostream& log) +{ + std::string logGlob = this->CTest->GetCTestConfiguration("BuildDirectory"); + logGlob += "/Testing/"; + logGlob += this->CTest->GetCurrentTag(); + logGlob += "/CoverageLog*"; + cmsys::Glob gl; + gl.FindFiles(logGlob.c_str()); + std::vector const& files = gl.GetFiles(); + for(std::vector::const_iterator fi = files.begin(); + fi != files.end(); ++fi) + { + log << "Removing old coverage log: " << *fi << "\n"; + cmSystemTools::RemoveFile(fi->c_str()); + } +} + +//---------------------------------------------------------------------- +bool cmCTestCoverageHandler::StartCoverageLogFile( + cmGeneratedFileStream& covLogFile, int logFileCount) +{ + char covLogFilename[1024]; + sprintf(covLogFilename, "CoverageLog-%d", logFileCount); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Open file: " + << covLogFilename << std::endl); + if(!this->StartResultingXML(cmCTest::PartCoverage, + covLogFilename, covLogFile)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot open log file: " + << covLogFilename << std::endl); + return false; + } + std::string local_start_time = this->CTest->CurrentTime(); + this->CTest->StartXML(covLogFile, this->AppendXML); + covLogFile << "" << std::endl + << "\t" << local_start_time << "" + << "\t" + << static_cast(cmSystemTools::GetTime()) + << "" + << std::endl; + return true; +} + +//---------------------------------------------------------------------- +void cmCTestCoverageHandler::EndCoverageLogFile(cmGeneratedFileStream& ostr, + int logFileCount) +{ + std::string local_end_time = this->CTest->CurrentTime(); + ostr << "\t" << local_end_time << "" << std::endl + << "\t" << + static_cast(cmSystemTools::GetTime()) + << "" << std::endl + << "" << std::endl; + this->CTest->EndXML(ostr); + char covLogFilename[1024]; + sprintf(covLogFilename, "CoverageLog-%d.xml", logFileCount); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Close file: " + << covLogFilename << std::endl); + ostr.Close(); +} + +//---------------------------------------------------------------------- +bool cmCTestCoverageHandler::ShouldIDoCoverage(const char* file, + const char* srcDir, + const char* binDir) +{ + if(this->IsFilteredOut(file)) + { + return false; + } + + std::vector::iterator sit; + for ( sit = this->CustomCoverageExcludeRegex.begin(); + sit != this->CustomCoverageExcludeRegex.end(); ++ sit ) + { + if ( sit->find(file) ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " File " << file + << " is excluded in CTestCustom.ctest" << std::endl;); + return false; + } + } + + std::string fSrcDir = cmSystemTools::CollapseFullPath(srcDir); + std::string fBinDir = cmSystemTools::CollapseFullPath(binDir); + std::string fFile = cmSystemTools::CollapseFullPath(file); + bool sourceSubDir = cmSystemTools::IsSubDirectory(fFile.c_str(), + fSrcDir.c_str()); + bool buildSubDir = cmSystemTools::IsSubDirectory(fFile.c_str(), + fBinDir.c_str()); + // Always check parent directory of the file. + std::string fileDir = cmSystemTools::GetFilenamePath(fFile.c_str()); + std::string checkDir; + + // We also need to check the binary/source directory pair. + if ( sourceSubDir && buildSubDir ) + { + if ( fSrcDir.size() > fBinDir.size() ) + { + checkDir = fSrcDir; + } + else + { + checkDir = fBinDir; + } + } + else if ( sourceSubDir ) + { + checkDir = fSrcDir; + } + else if ( buildSubDir ) + { + checkDir = fBinDir; + } + std::string ndc + = cmSystemTools::FileExistsInParentDirectories(".NoDartCoverage", + fFile.c_str(), checkDir.c_str()); + if ( ndc.size() ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Found: " << ndc.c_str() + << " so skip coverage of " << file << std::endl); + return false; + } + + // By now checkDir should be set to parent directory of the file. + // Get the relative path to the file an apply it to the opposite directory. + // If it is the same as fileDir, then ignore, otherwise check. + std::string relPath; + if(checkDir.size() ) + { + relPath = cmSystemTools::RelativePath(checkDir.c_str(), + fFile.c_str()); + } + else + { + relPath = fFile; + } + if ( checkDir == fSrcDir ) + { + checkDir = fBinDir; + } + else + { + checkDir = fSrcDir; + } + fFile = checkDir + "/" + relPath; + fFile = cmSystemTools::GetFilenamePath(fFile.c_str()); + + if ( fileDir == fFile ) + { + // This is in-source build, so we trust the previous check. + return true; + } + + ndc = cmSystemTools::FileExistsInParentDirectories(".NoDartCoverage", + fFile.c_str(), checkDir.c_str()); + if ( ndc.size() ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Found: " << ndc.c_str() + << " so skip coverage of: " << file << std::endl); + return false; + } + // Ok, nothing in source tree, nothing in binary tree + return true; +} + +//---------------------------------------------------------------------- +//clearly it would be nice if this were broken up into a few smaller +//functions and commented... +int cmCTestCoverageHandler::ProcessHandler() +{ + this->CTest->ClearSubmitFiles(cmCTest::PartCoverage); + int error = 0; + // do we have time for this + if (this->CTest->GetRemainingTimeAllowed() < 120) + { + return error; + } + + std::string coverage_start_time = this->CTest->CurrentTime(); + unsigned int coverage_start_time_time = static_cast( + cmSystemTools::GetTime()); + std::string sourceDir + = this->CTest->GetCTestConfiguration("SourceDirectory"); + std::string binaryDir + = this->CTest->GetCTestConfiguration("BuildDirectory"); + + this->LoadLabels(); + + cmGeneratedFileStream ofs; + double elapsed_time_start = cmSystemTools::GetTime(); + if ( !this->StartLogFile("Coverage", ofs) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot create LastCoverage.log file" << std::endl); + } + + ofs << "Performing coverage: " << elapsed_time_start << std::endl; + this->CleanCoverageLogFiles(ofs); + + cmSystemTools::ConvertToUnixSlashes(sourceDir); + cmSystemTools::ConvertToUnixSlashes(binaryDir); + + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Performing coverage" << std::endl); + + cmCTestCoverageHandlerContainer cont; + cont.Error = error; + cont.SourceDir = sourceDir; + cont.BinaryDir = binaryDir; + cont.OFS = &ofs; + + // setup the regex exclude stuff + this->CustomCoverageExcludeRegex.clear(); + std::vector::iterator rexIt; + for ( rexIt = this->CustomCoverageExclude.begin(); + rexIt != this->CustomCoverageExclude.end(); + ++ rexIt ) + { + this->CustomCoverageExcludeRegex.push_back( + cmsys::RegularExpression(rexIt->c_str())); + } + + if(this->HandleBullseyeCoverage(&cont)) + { + return cont.Error; + } + int file_count = 0; + file_count += this->HandleGCovCoverage(&cont); + if ( file_count < 0 ) + { + return error; + } + file_count += this->HandleTracePyCoverage(&cont); + if ( file_count < 0 ) + { + return error; + } + file_count += this->HandlePHPCoverage(&cont); + if ( file_count < 0 ) + { + return error; + } + error = cont.Error; + + std::set uncovered = this->FindUncoveredFiles(&cont); + + if ( file_count == 0 ) + { + cmCTestLog(this->CTest, WARNING, + " Cannot find any coverage files. Ignoring Coverage request." + << std::endl); + return error; + } + cmGeneratedFileStream covSumFile; + cmGeneratedFileStream covLogFile; + + if(!this->StartResultingXML(cmCTest::PartCoverage, "Coverage", covSumFile)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot open coverage summary file." << std::endl); + return -1; + } + + this->CTest->StartXML(covSumFile, this->AppendXML); + // Produce output xml files + + covSumFile << "" << std::endl + << "\t" << coverage_start_time << "" + << std::endl + << "\t" << coverage_start_time_time << "" + << std::endl; + int logFileCount = 0; + if ( !this->StartCoverageLogFile(covLogFile, logFileCount) ) + { + return -1; + } + cmCTestCoverageHandlerContainer::TotalCoverageMap::iterator fileIterator; + int cnt = 0; + long total_tested = 0; + long total_untested = 0; + //std::string fullSourceDir = sourceDir + "/"; + //std::string fullBinaryDir = binaryDir + "/"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::endl); + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Accumulating results (each . represents one file):" << std::endl); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " "); + + std::vector errorsWhileAccumulating; + + file_count = 0; + for ( fileIterator = cont.TotalCoverage.begin(); + fileIterator != cont.TotalCoverage.end(); + ++fileIterator ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, "." << std::flush); + file_count ++; + if ( file_count % 50 == 0 ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " processed: " << file_count + << " out of " + << cont.TotalCoverage.size() << std::endl); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " "); + } + + const std::string fullFileName = fileIterator->first; + bool shouldIDoCoverage + = this->ShouldIDoCoverage(fullFileName.c_str(), + sourceDir.c_str(), binaryDir.c_str()); + if ( !shouldIDoCoverage ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + ".NoDartCoverage found, so skip coverage check for: " + << fullFileName.c_str() + << std::endl); + continue; + } + + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Process file: " << fullFileName << std::endl); + + if ( !cmSystemTools::FileExists(fullFileName.c_str()) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot find file: " + << fullFileName.c_str() << std::endl); + continue; + } + + if ( ++cnt % 100 == 0 ) + { + this->EndCoverageLogFile(covLogFile, logFileCount); + logFileCount ++; + if ( !this->StartCoverageLogFile(covLogFile, logFileCount) ) + { + return -1; + } + } + + const std::string fileName + = cmSystemTools::GetFilenameName(fullFileName.c_str()); + std::string shortFileName = + this->CTest->GetShortPathToFile(fullFileName.c_str()); + const cmCTestCoverageHandlerContainer::SingleFileCoverageVector& fcov + = fileIterator->second; + covLogFile << "\t\n" + << "\t\t" << std::endl; + + std::ifstream ifs(fullFileName.c_str()); + if ( !ifs) + { + cmOStringStream ostr; + ostr << "Cannot open source file: " << fullFileName.c_str(); + errorsWhileAccumulating.push_back(ostr.str()); + error ++; + continue; + } + + int tested = 0; + int untested = 0; + + cmCTestCoverageHandlerContainer::SingleFileCoverageVector::size_type cc; + std::string line; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Actually performing coverage for: " << fullFileName << std::endl); + for ( cc= 0; cc < fcov.size(); cc ++ ) + { + if ( !cmSystemTools::GetLineFromStream(ifs, line) && + cc != fcov.size() -1 ) + { + cmOStringStream ostr; + ostr << "Problem reading source file: " << fullFileName.c_str() + << " line:" << cc << " out total: " << fcov.size()-1; + errorsWhileAccumulating.push_back(ostr.str()); + error ++; + break; + } + covLogFile << "\t\t" + << cmXMLSafe(line) << "" << std::endl; + if ( fcov[cc] == 0 ) + { + untested ++; + } + else if ( fcov[cc] > 0 ) + { + tested ++; + } + } + if ( cmSystemTools::GetLineFromStream(ifs, line) ) + { + cmOStringStream ostr; + ostr << "Looks like there are more lines in the file: " << line; + errorsWhileAccumulating.push_back(ostr.str()); + } + float cper = 0; + float cmet = 0; + if ( tested + untested > 0 ) + { + cper = (100 * SAFEDIV(static_cast(tested), + static_cast(tested + untested))); + cmet = ( SAFEDIV(static_cast(tested + 10), + static_cast(tested + untested + 10))); + } + total_tested += tested; + total_untested += untested; + covLogFile << "\t\t" << std::endl + << "\t" << std::endl; + covSumFile << "\tCTest->GetShortPathToFile(fullFileName.c_str())) + << "\" Covered=\"" << (tested+untested > 0 ? "true":"false") << "\">\n" + << "\t\t" << tested << "\n" + << "\t\t" << untested << "\n" + << "\t\t"; + covSumFile.setf(std::ios::fixed, std::ios::floatfield); + covSumFile.precision(2); + covSumFile << (cper) << "\n" + << "\t\t"; + covSumFile.setf(std::ios::fixed, std::ios::floatfield); + covSumFile.precision(2); + covSumFile << (cmet) << "\n"; + this->WriteXMLLabels(covSumFile, shortFileName); + covSumFile << "\t" << std::endl; + } + + //Handle all the files in the extra coverage globs that have no cov data + for(std::set::iterator i = uncovered.begin(); + i != uncovered.end(); ++i) + { + std::string fileName = cmSystemTools::GetFilenameName(*i); + std::string fullPath = cont.SourceDir + "/" + *i; + + covLogFile << "\t\n" + << "\t\t" << std::endl; + + std::ifstream ifs(fullPath.c_str()); + if (!ifs) + { + cmOStringStream ostr; + ostr << "Cannot open source file: " << fullPath.c_str(); + errorsWhileAccumulating.push_back(ostr.str()); + error ++; + continue; + } + int untested = 0; + std::string line; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Actually performing coverage for: " << i->c_str() << std::endl); + while (cmSystemTools::GetLineFromStream(ifs, line)) + { + covLogFile << "\t\t" + << cmXMLSafe(line) << "" << std::endl; + untested ++; + } + covLogFile << "\t\t\n\t" << std::endl; + + total_untested += untested; + covSumFile << "\tc_str()) + << "\" Covered=\"true\">\n" + << "\t\t0\n" + << "\t\t" << untested << "\n" + << "\t\t0\n" + << "\t\t0\n"; + this->WriteXMLLabels(covSumFile, *i); + covSumFile << "\t" << std::endl; + } + + this->EndCoverageLogFile(covLogFile, logFileCount); + + if ( errorsWhileAccumulating.size() > 0 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, std::endl); + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Error(s) while accumulating results:" << std::endl); + std::vector::iterator erIt; + for ( erIt = errorsWhileAccumulating.begin(); + erIt != errorsWhileAccumulating.end(); + ++ erIt ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + " " << erIt->c_str() << std::endl); + } + } + + long total_lines = total_tested + total_untested; + float percent_coverage = 100 * SAFEDIV(static_cast(total_tested), + static_cast(total_lines)); + if ( total_lines == 0 ) + { + percent_coverage = 0; + } + + std::string end_time = this->CTest->CurrentTime(); + + covSumFile << "\t" << total_tested << "\n" + << "\t" << total_untested << "\n" + << "\t" << total_lines << "\n" + << "\t"; + covSumFile.setf(std::ios::fixed, std::ios::floatfield); + covSumFile.precision(2); + covSumFile << (percent_coverage)<< "\n" + << "\t" << end_time << "\n" + << "\t" << + static_cast(cmSystemTools::GetTime()) + << "\n"; + covSumFile << "" << + static_cast((cmSystemTools::GetTime() - elapsed_time_start)/6)/10.0 + << "" + << "" << std::endl; + this->CTest->EndXML(covSumFile); + + cmCTestLog(this->CTest, HANDLER_OUTPUT, "" << std::endl + << "\tCovered LOC: " + << total_tested << std::endl + << "\tNot covered LOC: " << total_untested << std::endl + << "\tTotal LOC: " << total_lines << std::endl + << "\tPercentage Coverage: " + << std::setiosflags(std::ios::fixed) + << std::setprecision(2) + << (percent_coverage) << "%" << std::endl); + + ofs << "\tCovered LOC: " << total_tested << std::endl + << "\tNot covered LOC: " << total_untested << std::endl + << "\tTotal LOC: " << total_lines << std::endl + << "\tPercentage Coverage: " + << std::setiosflags(std::ios::fixed) + << std::setprecision(2) + << (percent_coverage) << "%" << std::endl; + + + if ( error ) + { + return -1; + } + return 0; +} + +//---------------------------------------------------------------------- +void cmCTestCoverageHandler::PopulateCustomVectors(cmMakefile *mf) +{ + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " Add coverage exclude regular expressions." << std::endl); + this->CTest->PopulateCustomVector(mf, "CTEST_CUSTOM_COVERAGE_EXCLUDE", + this->CustomCoverageExclude); + this->CTest->PopulateCustomVector(mf, "CTEST_EXTRA_COVERAGE_GLOB", + this->ExtraCoverageGlobs); + std::vector::iterator it; + for ( it = this->CustomCoverageExclude.begin(); + it != this->CustomCoverageExclude.end(); + ++ it ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " Add coverage exclude: " + << it->c_str() << std::endl); + } + for ( it = this->ExtraCoverageGlobs.begin(); + it != this->ExtraCoverageGlobs.end(); ++it) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " Add coverage glob: " + << it->c_str() << std::endl); + } +} + +//---------------------------------------------------------------------- +// Fix for issue #4971 where the case of the drive letter component of +// the filenames might be different when analyzing gcov output. +// +// Compare file names: fnc(fn1) == fnc(fn2) // fnc == file name compare +// +#ifdef _WIN32 +#define fnc(s) cmSystemTools::LowerCase(s) +#else +#define fnc(s) s +#endif + +//---------------------------------------------------------------------- +bool IsFileInDir(const std::string &infile, const std::string &indir) +{ + std::string file = cmSystemTools::CollapseFullPath(infile.c_str()); + std::string dir = cmSystemTools::CollapseFullPath(indir.c_str()); + + if ( + file.size() > dir.size() && + (fnc(file.substr(0, dir.size())) == fnc(dir)) && + file[dir.size()] == '/' + ) + { + return true; + } + + return false; +} + +//---------------------------------------------------------------------- +int cmCTestCoverageHandler::HandlePHPCoverage( + cmCTestCoverageHandlerContainer* cont) +{ + cmParsePHPCoverage cov(*cont, this->CTest); + std::string coverageDir = this->CTest->GetBinaryDir() + "/xdebugCoverage"; + if(cmSystemTools::FileIsDirectory(coverageDir.c_str())) + { + cov.ReadPHPCoverageDirectory(coverageDir.c_str()); + } + return static_cast(cont->TotalCoverage.size()); +} + +//---------------------------------------------------------------------- +int cmCTestCoverageHandler::HandleGCovCoverage( + cmCTestCoverageHandlerContainer* cont) +{ + std::string gcovCommand + = this->CTest->GetCTestConfiguration("CoverageCommand"); + std::string gcovExtraFlags + = this->CTest->GetCTestConfiguration("CoverageExtraFlags"); + + // Style 1 + std::string st1gcovOutputRex1 + = "[0-9]+\\.[0-9]+% of [0-9]+ (source |)lines executed in file (.*)$"; + std::string st1gcovOutputRex2 = "^Creating (.*\\.gcov)\\."; + cmsys::RegularExpression st1re1(st1gcovOutputRex1.c_str()); + cmsys::RegularExpression st1re2(st1gcovOutputRex2.c_str()); + + + // Style 2 + std::string st2gcovOutputRex1 = "^File *[`'](.*)'$"; + std::string st2gcovOutputRex2 + = "Lines executed: *[0-9]+\\.[0-9]+% of [0-9]+$"; + std::string st2gcovOutputRex3 = "^(.*):creating [`'](.*\\.gcov)'"; + std::string st2gcovOutputRex4 = "^(.*):unexpected EOF *$"; + std::string st2gcovOutputRex5 = "^(.*):cannot open source file*$"; + std::string st2gcovOutputRex6 + = "^(.*):source file is newer than graph file `(.*)'$"; + cmsys::RegularExpression st2re1(st2gcovOutputRex1.c_str()); + cmsys::RegularExpression st2re2(st2gcovOutputRex2.c_str()); + cmsys::RegularExpression st2re3(st2gcovOutputRex3.c_str()); + cmsys::RegularExpression st2re4(st2gcovOutputRex4.c_str()); + cmsys::RegularExpression st2re5(st2gcovOutputRex5.c_str()); + cmsys::RegularExpression st2re6(st2gcovOutputRex6.c_str()); + + std::vector files; + this->FindGCovFiles(files); + std::vector::iterator it; + + if ( files.size() == 0 ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " Cannot find any GCov coverage files." + << std::endl); + // No coverage files is a valid thing, so the exit code is 0 + return 0; + } + + std::string testingDir = this->CTest->GetBinaryDir() + "/Testing"; + std::string tempDir = testingDir + "/CoverageInfo"; + std::string currentDirectory = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::MakeDirectory(tempDir.c_str()); + cmSystemTools::ChangeDirectory(tempDir.c_str()); + + int gcovStyle = 0; + + std::set missingFiles; + + std::string actualSourceFile = ""; + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Processing coverage (each . represents one file):" << std::endl); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " "); + int file_count = 0; + + // make sure output from gcov is in English! + cmSystemTools::PutEnv("LC_ALL=POSIX"); + + // files is a list of *.da and *.gcda files with coverage data in them. + // These are binary files that you give as input to gcov so that it will + // give us text output we can analyze to summarize coverage. + // + for ( it = files.begin(); it != files.end(); ++ it ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, "." << std::flush); + + // Call gcov to get coverage data for this *.gcda file: + // + std::string fileDir = cmSystemTools::GetFilenamePath(it->c_str()); + std::string command = "\"" + gcovCommand + "\" " + + gcovExtraFlags + " " + + "-o \"" + fileDir + "\" " + + "\"" + *it + "\""; + + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, command.c_str() + << std::endl); + + std::string output = ""; + std::string errors = ""; + int retVal = 0; + *cont->OFS << "* Run coverage for: " << fileDir.c_str() << std::endl; + *cont->OFS << " Command: " << command.c_str() << std::endl; + int res = this->CTest->RunCommand(command.c_str(), &output, &errors, + &retVal, tempDir.c_str(), 0 /*this->TimeOut*/); + + *cont->OFS << " Output: " << output.c_str() << std::endl; + *cont->OFS << " Errors: " << errors.c_str() << std::endl; + if ( ! res ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Problem running coverage on file: " << it->c_str() << std::endl); + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Command produced error: " << errors << std::endl); + cont->Error ++; + continue; + } + if ( retVal != 0 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Coverage command returned: " + << retVal << " while processing: " << it->c_str() << std::endl); + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Command produced error: " << cont->Error << std::endl); + } + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "--------------------------------------------------------------" + << std::endl + << output << std::endl + << "--------------------------------------------------------------" + << std::endl); + + std::vector lines; + std::vector::iterator line; + + cmSystemTools::Split(output.c_str(), lines); + + for ( line = lines.begin(); line != lines.end(); ++line) + { + std::string sourceFile; + std::string gcovFile; + + cmCTestLog(this->CTest, DEBUG, "Line: [" << line->c_str() << "]" + << std::endl); + + if ( line->size() == 0 ) + { + // Ignore empty line; probably style 2 + } + else if ( st1re1.find(line->c_str()) ) + { + if ( gcovStyle == 0 ) + { + gcovStyle = 1; + } + if ( gcovStyle != 1 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unknown gcov output style e1" + << std::endl); + cont->Error ++; + break; + } + + actualSourceFile = ""; + sourceFile = st1re1.match(2); + } + else if ( st1re2.find(line->c_str() ) ) + { + if ( gcovStyle == 0 ) + { + gcovStyle = 1; + } + if ( gcovStyle != 1 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unknown gcov output style e2" + << std::endl); + cont->Error ++; + break; + } + + gcovFile = st1re2.match(1); + } + else if ( st2re1.find(line->c_str() ) ) + { + if ( gcovStyle == 0 ) + { + gcovStyle = 2; + } + if ( gcovStyle != 2 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unknown gcov output style e3" + << std::endl); + cont->Error ++; + break; + } + + actualSourceFile = ""; + sourceFile = st2re1.match(1); + } + else if ( st2re2.find(line->c_str() ) ) + { + if ( gcovStyle == 0 ) + { + gcovStyle = 2; + } + if ( gcovStyle != 2 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unknown gcov output style e4" + << std::endl); + cont->Error ++; + break; + } + } + else if ( st2re3.find(line->c_str() ) ) + { + if ( gcovStyle == 0 ) + { + gcovStyle = 2; + } + if ( gcovStyle != 2 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unknown gcov output style e5" + << std::endl); + cont->Error ++; + break; + } + + gcovFile = st2re3.match(2); + } + else if ( st2re4.find(line->c_str() ) ) + { + if ( gcovStyle == 0 ) + { + gcovStyle = 2; + } + if ( gcovStyle != 2 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unknown gcov output style e6" + << std::endl); + cont->Error ++; + break; + } + + cmCTestLog(this->CTest, WARNING, "Warning: " << st2re4.match(1) + << " had unexpected EOF" << std::endl); + } + else if ( st2re5.find(line->c_str() ) ) + { + if ( gcovStyle == 0 ) + { + gcovStyle = 2; + } + if ( gcovStyle != 2 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unknown gcov output style e7" + << std::endl); + cont->Error ++; + break; + } + + cmCTestLog(this->CTest, WARNING, "Warning: Cannot open file: " + << st2re5.match(1) << std::endl); + } + else if ( st2re6.find(line->c_str() ) ) + { + if ( gcovStyle == 0 ) + { + gcovStyle = 2; + } + if ( gcovStyle != 2 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unknown gcov output style e8" + << std::endl); + cont->Error ++; + break; + } + + cmCTestLog(this->CTest, WARNING, "Warning: File: " << st2re6.match(1) + << " is newer than " << st2re6.match(2) << std::endl); + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Unknown gcov output line: [" << line->c_str() << "]" << std::endl); + cont->Error ++; + //abort(); + } + + + // If the last line of gcov output gave us a valid value for gcovFile, + // and we have an actualSourceFile, then insert a (or add to existing) + // SingleFileCoverageVector for actualSourceFile: + // + if ( !gcovFile.empty() && !actualSourceFile.empty() ) + { + cmCTestCoverageHandlerContainer::SingleFileCoverageVector& vec + = cont->TotalCoverage[actualSourceFile]; + + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " in gcovFile: " + << gcovFile << std::endl); + + std::ifstream ifile(gcovFile.c_str()); + if ( ! ifile ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot open file: " + << gcovFile << std::endl); + } + else + { + long cnt = -1; + std::string nl; + while ( cmSystemTools::GetLineFromStream(ifile, nl) ) + { + cnt ++; + + //TODO: Handle gcov 3.0 non-coverage lines + + // Skip empty lines + if ( !nl.size() ) + { + continue; + } + + // Skip unused lines + if ( nl.size() < 12 ) + { + continue; + } + + // Read the coverage count from the beginning of the gcov output + // line + std::string prefix = nl.substr(0, 12); + int cov = atoi(prefix.c_str()); + + // Read the line number starting at the 10th character of the gcov + // output line + std::string lineNumber = nl.substr(10, 5); + + int lineIdx = atoi(lineNumber.c_str())-1; + if ( lineIdx >= 0 ) + { + while ( vec.size() <= static_cast(lineIdx) ) + { + vec.push_back(-1); + } + + // Initially all entries are -1 (not used). If we get coverage + // information, increment it to 0 first. + if ( vec[lineIdx] < 0 ) + { + if ( cov > 0 || prefix.find("#") != prefix.npos ) + { + vec[lineIdx] = 0; + } + } + + vec[lineIdx] += cov; + } + } + } + + actualSourceFile = ""; + } + + + if ( !sourceFile.empty() && actualSourceFile.empty() ) + { + gcovFile = ""; + + // Is it in the source dir or the binary dir? + // + if ( IsFileInDir(sourceFile, cont->SourceDir) ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " produced s: " + << sourceFile.c_str() << std::endl); + *cont->OFS << " produced in source dir: " << sourceFile.c_str() + << std::endl; + actualSourceFile + = cmSystemTools::CollapseFullPath(sourceFile.c_str()); + } + else if ( IsFileInDir(sourceFile, cont->BinaryDir) ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " produced b: " + << sourceFile.c_str() << std::endl); + *cont->OFS << " produced in binary dir: " << sourceFile.c_str() + << std::endl; + actualSourceFile + = cmSystemTools::CollapseFullPath(sourceFile.c_str()); + } + + if ( actualSourceFile.empty() ) + { + if ( missingFiles.find(sourceFile) == missingFiles.end() ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Something went wrong" << std::endl); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Cannot find file: [" + << sourceFile.c_str() << "]" << std::endl); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " in source dir: [" + << cont->SourceDir.c_str() << "]" + << std::endl); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " or binary dir: [" + << cont->BinaryDir.size() << "]" + << std::endl); + *cont->OFS << " Something went wrong. Cannot find file: " + << sourceFile.c_str() + << " in source dir: " << cont->SourceDir.c_str() + << " or binary dir: " << cont->BinaryDir.c_str() << std::endl; + + missingFiles.insert(sourceFile); + } + } + } + } + + file_count++; + + if ( file_count % 50 == 0 ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " processed: " << file_count + << " out of " << files.size() << std::endl); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " "); + } + } + + cmSystemTools::ChangeDirectory(currentDirectory.c_str()); + return file_count; +} + +//---------------------------------------------------------------------------- +void cmCTestCoverageHandler::FindGCovFiles(std::vector& files) +{ + cmsys::Glob gl; + gl.RecurseOn(); + gl.RecurseThroughSymlinksOff(); + + for(LabelMapType::const_iterator lmi = this->TargetDirs.begin(); + lmi != this->TargetDirs.end(); ++lmi) + { + // Skip targets containing no interesting labels. + if(!this->IntersectsFilter(lmi->second)) + { + continue; + } + + // Coverage files appear next to their object files in the target + // support directory. + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " globbing for coverage in: " << lmi->first << std::endl); + std::string daGlob = lmi->first; + daGlob += "/*.da"; + gl.FindFiles(daGlob); + files.insert(files.end(), gl.GetFiles().begin(), gl.GetFiles().end()); + daGlob = lmi->first; + daGlob += "/*.gcda"; + gl.FindFiles(daGlob); + files.insert(files.end(), gl.GetFiles().begin(), gl.GetFiles().end()); + } +} + +//---------------------------------------------------------------------- +int cmCTestCoverageHandler::HandleTracePyCoverage( + cmCTestCoverageHandlerContainer* cont) +{ + cmsys::Glob gl; + gl.RecurseOn(); + gl.RecurseThroughSymlinksOff(); + std::string daGlob = cont->BinaryDir + "/*.cover"; + gl.FindFiles(daGlob); + std::vector files = gl.GetFiles(); + + if ( files.size() == 0 ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " Cannot find any Python Trace.py coverage files." + << std::endl); + // No coverage files is a valid thing, so the exit code is 0 + return 0; + } + + std::string testingDir = this->CTest->GetBinaryDir() + "/Testing"; + std::string tempDir = testingDir + "/CoverageInfo"; + std::string currentDirectory = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::MakeDirectory(tempDir.c_str()); + cmSystemTools::ChangeDirectory(tempDir.c_str()); + + cmSystemTools::ChangeDirectory(currentDirectory.c_str()); + + std::vector::iterator fileIt; + int file_count = 0; + for ( fileIt = files.begin(); fileIt != files.end(); ++ fileIt ) + { + std::string fileName = this->FindFile(cont, *fileIt); + if ( fileName.empty() ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find source Python file corresponding to: " + << fileIt->c_str() << std::endl); + continue; + } + + std::string actualSourceFile + = cmSystemTools::CollapseFullPath(fileName.c_str()); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " Check coverage for file: " << actualSourceFile.c_str() + << std::endl); + cmCTestCoverageHandlerContainer::SingleFileCoverageVector* vec + = &cont->TotalCoverage[actualSourceFile]; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " in file: " << fileIt->c_str() << std::endl); + std::ifstream ifile(fileIt->c_str()); + if ( ! ifile ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot open file: " + << fileIt->c_str() << std::endl); + } + else + { + long cnt = -1; + std::string nl; + while ( cmSystemTools::GetLineFromStream(ifile, nl) ) + { + cnt ++; + + // Skip empty lines + if ( !nl.size() ) + { + continue; + } + + // Skip unused lines + if ( nl.size() < 12 ) + { + continue; + } + + // Read the coverage count from the beginning of the Trace.py output + // line + std::string prefix = nl.substr(0, 6); + if ( prefix[5] != ' ' && prefix[5] != ':' ) + { + // This is a hack. We should really do something more elaborate + prefix = nl.substr(0, 7); + if ( prefix[6] != ' ' && prefix[6] != ':' ) + { + prefix = nl.substr(0, 8); + if ( prefix[7] != ' ' && prefix[7] != ':' ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Currently the limit is maximum coverage of 999999" + << std::endl); + } + } + } + int cov = atoi(prefix.c_str()); + if ( prefix[prefix.size()-1] != ':' ) + { + // This line does not have ':' so no coverage here. That said, + // Trace.py does not handle not covered lines versus comments etc. + // So, this will be set to 0. + cov = 0; + } + cmCTestLog(this->CTest, DEBUG, "Prefix: " << prefix.c_str() + << " cov: " << cov + << std::endl); + // Read the line number starting at the 10th character of the gcov + // output line + long lineIdx = cnt; + if ( lineIdx >= 0 ) + { + while ( vec->size() <= + static_cast(lineIdx) ) + { + vec->push_back(-1); + } + // Initially all entries are -1 (not used). If we get coverage + // information, increment it to 0 first. + if ( (*vec)[lineIdx] < 0 ) + { + if ( cov >= 0 ) + { + (*vec)[lineIdx] = 0; + } + } + (*vec)[lineIdx] += cov; + } + } + } + ++ file_count; + } + cmSystemTools::ChangeDirectory(currentDirectory.c_str()); + return file_count; +} + +//---------------------------------------------------------------------- +std::string cmCTestCoverageHandler::FindFile( + cmCTestCoverageHandlerContainer* cont, + std::string fileName) +{ + std::string fileNameNoE + = cmSystemTools::GetFilenameWithoutLastExtension(fileName); + // First check in source and binary directory + std::string fullName = cont->SourceDir + "/" + fileNameNoE + ".py"; + if ( cmSystemTools::FileExists(fullName.c_str()) ) + { + return fullName; + } + fullName = cont->BinaryDir + "/" + fileNameNoE + ".py"; + if ( cmSystemTools::FileExists(fullName.c_str()) ) + { + return fullName; + } + return ""; +} + +// This is a header put on each marked up source file +namespace +{ + const char* bullseyeHelp[] = + {" Coverage produced by bullseye covbr tool: ", + " www.bullseye.com/help/ref_covbr.html", + " * An arrow --> indicates incomplete coverage.", + " * An X indicates a function that was invoked, a switch label that ", + " was exercised, a try-block that finished, or an exception handler ", + " that was invoked.", + " * A T or F indicates a boolean decision that evaluated true or false,", + " respectively.", + " * A t or f indicates a boolean condition within a decision if the ", + " condition evaluated true or false, respectively.", + " * A k indicates a constant decision or condition.", + " * The slash / means this probe is excluded from summary results. ", + 0}; +} + +//---------------------------------------------------------------------- +int cmCTestCoverageHandler::RunBullseyeCoverageBranch( + cmCTestCoverageHandlerContainer* cont, + std::set& coveredFileNames, + std::vector& files, + std::vector& filesFullPath) +{ + if(files.size() != filesFullPath.size()) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Files and full path files not the same size?:\n"); + return 0; + } + // create the output stream for the CoverageLog-N.xml file + cmGeneratedFileStream covLogFile; + int logFileCount = 0; + if ( !this->StartCoverageLogFile(covLogFile, logFileCount) ) + { + return -1; + } + // for each file run covbr on that file to get the coverage + // information for that file + std::string outputFile; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "run covbr: " + << std::endl); + + if(!this->RunBullseyeCommand(cont, "covbr", 0, outputFile)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "error running covbr for." << "\n"); + return -1; + } + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "covbr output in " << outputFile + << std::endl); + // open the output file + std::ifstream fin(outputFile.c_str()); + if(!fin) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot open coverage file: " << + outputFile.c_str() << std::endl); + return 0; + } + std::map fileMap; + std::vector::iterator fp = filesFullPath.begin(); + for(std::vector::iterator f = files.begin(); + f != files.end(); ++f, ++fp) + { + fileMap[*f] = *fp; + } + + int count =0; // keep count of the number of files + // Now parse each line from the bullseye cov log file + std::string lineIn; + bool valid = false; // are we in a valid output file + int line = 0; // line of the current file + cmStdString file; + while(cmSystemTools::GetLineFromStream(fin, lineIn)) + { + bool startFile = false; + if(lineIn.size() > 1 && lineIn[lineIn.size()-1] == ':') + { + file = lineIn.substr(0, lineIn.size()-1); + if(coveredFileNames.find(file) != coveredFileNames.end()) + { + startFile = true; + } + } + if(startFile) + { + // if we are in a valid file close it because a new one started + if(valid) + { + covLogFile << "\t\t" << std::endl + << "\t" << std::endl; + } + // only allow 100 files in each log file + if ( count != 0 && count % 100 == 0 ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "start a new log file: " + << count + << std::endl); + this->EndCoverageLogFile(covLogFile, logFileCount); + logFileCount ++; + if ( !this->StartCoverageLogFile(covLogFile, logFileCount) ) + { + return -1; + } + count++; // move on one + } + std::map::iterator + i = fileMap.find(file); + // if the file should be covered write out the header for that file + if(i != fileMap.end()) + { + // we have a new file so count it in the output + count++; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Produce coverage for file: " + << file.c_str() << " " << count + << std::endl); + // start the file output + covLogFile << "\tfirst) + << "\" FullPath=\"" << cmXMLSafe( + this->CTest->GetShortPathToFile( + i->second.c_str())) << "\">" << std::endl + << "\t\t" << std::endl; + // write the bullseye header + line =0; + for(int k =0; bullseyeHelp[k] != 0; ++k) + { + covLogFile << "\t\t" + << cmXMLSafe(bullseyeHelp[k]) + << "" << std::endl; + line++; + } + valid = true; // we are in a valid file section + } + else + { + // this is not a file that we want coverage for + valid = false; + } + } + // we are not at a start file, and we are in a valid file output the line + else if(valid) + { + covLogFile << "\t\t" + << cmXMLSafe(lineIn) + << "" << std::endl; + line++; + } + } + // if we ran out of lines a valid file then close that file + if(valid) + { + covLogFile << "\t\t" << std::endl + << "\t" << std::endl; + } + this->EndCoverageLogFile(covLogFile, logFileCount); + return 1; +} + +//---------------------------------------------------------------------- +int cmCTestCoverageHandler::RunBullseyeCommand( + cmCTestCoverageHandlerContainer* cont, + const char* cmd, + const char* arg, + std::string& outputFile) +{ + std::string program = cmSystemTools::FindProgram(cmd); + if(program.size() == 0) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot find :" << cmd << "\n"); + return 0; + } + if(arg) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Run : " << program.c_str() << " " << arg << "\n"); + } + else + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Run : " << program.c_str() << "\n"); + } + // create a process object and start it + cmCTestRunProcess runCoverageSrc; + runCoverageSrc.SetCommand(program.c_str()); + runCoverageSrc.AddArgument(arg); + std::string stdoutFile = cont->BinaryDir + "/Testing/Temporary/"; + stdoutFile += this->GetCTestInstance()->GetCurrentTag(); + stdoutFile += "-"; + stdoutFile += cmd; + std::string stderrFile = stdoutFile; + stdoutFile += ".stdout"; + stderrFile += ".stderr"; + runCoverageSrc.SetStdoutFile(stdoutFile.c_str()); + runCoverageSrc.SetStderrFile(stderrFile.c_str()); + if(!runCoverageSrc.StartProcess()) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Could not run : " + << program.c_str() << " " << arg << "\n" + << "kwsys process state : " + << runCoverageSrc.GetProcessState()); + return 0; + } + // since we set the output file names wait for it to end + runCoverageSrc.WaitForExit(); + outputFile = stdoutFile; + return 1; +} + +//---------------------------------------------------------------------- +int cmCTestCoverageHandler::RunBullseyeSourceSummary( + cmCTestCoverageHandlerContainer* cont) +{ + // Run the covsrc command and create a temp outputfile + std::string outputFile; + if(!this->RunBullseyeCommand(cont, "covsrc", "-c", outputFile)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "error running covsrc:\n"); + return 0; + } + + std::ostream& tmpLog = *cont->OFS; + // copen the Coverage.xml file in the Testing directory + cmGeneratedFileStream covSumFile; + if(!this->StartResultingXML(cmCTest::PartCoverage, "Coverage", covSumFile)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot open coverage summary file." << std::endl); + return 0; + } + this->CTest->StartXML(covSumFile, this->AppendXML); + double elapsed_time_start = cmSystemTools::GetTime(); + std::string coverage_start_time = this->CTest->CurrentTime(); + covSumFile << "" << std::endl + << "\t" + << coverage_start_time << "" + << std::endl + << "\t" + << static_cast(cmSystemTools::GetTime()) + << "" + << std::endl; + std::string stdline; + std::string errline; + // expected output: + // first line is: + // "Source","Function Coverage","out of","%","C/D Coverage","out of","%" + // after that data follows in that format + std::string sourceFile; + int functionsCalled = 0; + int totalFunctions = 0; + int percentFunction = 0; + int branchCovered = 0; + int totalBranches = 0; + int percentBranch = 0; + double total_tested = 0; + double total_untested = 0; + double total_functions = 0; + double percent_coverage =0; + double number_files = 0; + std::vector coveredFiles; + std::vector coveredFilesFullPath; + // Read and parse the summary output file + std::ifstream fin(outputFile.c_str()); + if(!fin) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot open coverage summary file: " << + outputFile.c_str() << std::endl); + return 0; + } + std::set coveredFileNames; + while(cmSystemTools::GetLineFromStream(fin, stdline)) + { + // if we have a line of output from stdout + if(stdline.size()) + { + // parse the comma separated output + this->ParseBullsEyeCovsrcLine(stdline, + sourceFile, + functionsCalled, + totalFunctions, + percentFunction, + branchCovered, + totalBranches, + percentBranch); + // The first line is the header + if(sourceFile == "Source" || sourceFile == "Total") + { + continue; + } + std::string file = sourceFile; + coveredFileNames.insert(file); + if(!cmSystemTools::FileIsFullPath(sourceFile.c_str())) + { + // file will be relative to the binary dir + file = cont->BinaryDir; + file += "/"; + file += sourceFile; + } + file = cmSystemTools::CollapseFullPath(file.c_str()); + bool shouldIDoCoverage + = this->ShouldIDoCoverage(file.c_str(), + cont->SourceDir.c_str(), + cont->BinaryDir.c_str()); + if ( !shouldIDoCoverage ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + ".NoDartCoverage found, so skip coverage check for: " + << file.c_str() + << std::endl); + continue; + } + + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Doing coverage for: " + << file.c_str() + << std::endl); + + coveredFiles.push_back(sourceFile); + coveredFilesFullPath.push_back(file); + + number_files++; + total_functions += totalFunctions; + total_tested += functionsCalled; + total_untested += (totalFunctions - functionsCalled); + + std::string fileName = cmSystemTools::GetFilenameName(file.c_str()); + std::string shortFileName = + this->CTest->GetShortPathToFile(file.c_str()); + + float cper = static_cast(percentBranch + percentFunction); + if(totalBranches > 0) + { + cper /= 2.0f; + } + percent_coverage += cper; + float cmet = static_cast(percentFunction + percentBranch); + if(totalBranches > 0) + { + cmet /= 2.0f; + } + cmet /= 100.0f; + tmpLog << stdline.c_str() << "\n"; + tmpLog << fileName << "\n"; + tmpLog << "functionsCalled: " << functionsCalled/100 << "\n"; + tmpLog << "totalFunctions: " << totalFunctions/100 << "\n"; + tmpLog << "percentFunction: " << percentFunction << "\n"; + tmpLog << "branchCovered: " << branchCovered << "\n"; + tmpLog << "totalBranches: " << totalBranches << "\n"; + tmpLog << "percentBranch: " << percentBranch << "\n"; + tmpLog << "percentCoverage: " << percent_coverage << "\n"; + tmpLog << "coverage metric: " << cmet << "\n"; + covSumFile << "\t0?"true":"false") << "\">\n" + << "\t\t" + << branchCovered + << "\n" + << "\t\t" + << totalBranches - branchCovered + << "\n" + << "\t\t" + << functionsCalled + << "\n" + << "\t\t" + << totalFunctions - functionsCalled + << "\n" + // Hack for conversion of function to loc assume a function + // has 100 lines of code + << "\t\t" << functionsCalled *100 + << "\n" + << "\t\t" + << (totalFunctions - functionsCalled)*100 + << "\n" + << "\t\t"; + covSumFile.setf(std::ios::fixed, std::ios::floatfield); + covSumFile.precision(2); + covSumFile << (cper) << "\n" + << "\t\t"; + covSumFile.setf(std::ios::fixed, std::ios::floatfield); + covSumFile.precision(2); + covSumFile << (cmet) << "\n"; + this->WriteXMLLabels(covSumFile, shortFileName); + covSumFile << "\t" << std::endl; + } + } + std::string end_time = this->CTest->CurrentTime(); + covSumFile << "\t" << total_tested << "\n" + << "\t" << total_untested << "\n" + << "\t" << total_functions << "\n" + << "\t"; + covSumFile.setf(std::ios::fixed, std::ios::floatfield); + covSumFile.precision(2); + covSumFile + << SAFEDIV(percent_coverage,number_files)<< "\n" + << "\t" << end_time << "\n" + << "\t" << static_cast(cmSystemTools::GetTime()) + << "\n"; + covSumFile + << "" << + static_cast((cmSystemTools::GetTime() - elapsed_time_start)/6)/10.0 + << "" + << "" << std::endl; + this->CTest->EndXML(covSumFile); + + // Now create the coverage information for each file + return this->RunBullseyeCoverageBranch(cont, + coveredFileNames, + coveredFiles, + coveredFilesFullPath); +} + +//---------------------------------------------------------------------- +int cmCTestCoverageHandler::HandleBullseyeCoverage( + cmCTestCoverageHandlerContainer* cont) +{ + const char* covfile = cmSystemTools::GetEnv("COVFILE"); + if(!covfile) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " COVFILE environment variable not found, not running " + " bullseye\n"); + return 0; + } + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " run covsrc with COVFILE=[" + << covfile + << "]" << std::endl); + if(!this->RunBullseyeSourceSummary(cont)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Error running bullseye summary.\n"); + return 0; + } + cmCTestLog(this->CTest, DEBUG, "HandleBullseyeCoverage return 1 " + << std::endl); + return 1; +} + +bool cmCTestCoverageHandler::GetNextInt(std::string const& inputLine, + std::string::size_type& pos, + int& value) +{ + std::string::size_type start = pos; + pos = inputLine.find(',', start); + value = atoi(inputLine.substr(start, pos).c_str()); + if(pos == inputLine.npos) + { + return true; + } + pos++; + return true; +} + +bool cmCTestCoverageHandler::ParseBullsEyeCovsrcLine( + std::string const& inputLine, + std::string& sourceFile, + int& functionsCalled, + int& totalFunctions, + int& percentFunction, + int& branchCovered, + int& totalBranches, + int& percentBranch) +{ + // find the first comma + std::string::size_type pos = inputLine.find(','); + if(pos == inputLine.npos) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Error parsing string : " + << inputLine.c_str() << "\n"); + return false; + } + // the source file has "" around it so extract out the file name + sourceFile = inputLine.substr(1,pos-2); + pos++; + if(!this->GetNextInt(inputLine, pos, functionsCalled)) + { + return false; + } + if(!this->GetNextInt(inputLine, pos, totalFunctions)) + { + return false; + } + if(!this->GetNextInt(inputLine, pos, percentFunction)) + { + return false; + } + if(!this->GetNextInt(inputLine, pos, branchCovered)) + { + return false; + } + if(!this->GetNextInt(inputLine, pos, totalBranches)) + { + return false; + } + if(!this->GetNextInt(inputLine, pos, percentBranch)) + { + return false; + } + // should be at the end now + if(pos != inputLine.npos) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Error parsing input : " + << inputLine.c_str() << " last pos not npos = " << pos << + "\n"); + } + return true; +} + +//---------------------------------------------------------------------- +int cmCTestCoverageHandler::GetLabelId(std::string const& label) +{ + LabelIdMapType::iterator i = this->LabelIdMap.find(label); + if(i == this->LabelIdMap.end()) + { + int n = int(this->Labels.size()); + this->Labels.push_back(label); + LabelIdMapType::value_type entry(label, n); + i = this->LabelIdMap.insert(entry).first; + } + return i->second; +} + +//---------------------------------------------------------------------- +void cmCTestCoverageHandler::LoadLabels() +{ + std::string fileList = this->CTest->GetBinaryDir(); + fileList += cmake::GetCMakeFilesDirectory(); + fileList += "/TargetDirectories.txt"; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " target directory list [" << fileList << "]\n"); + std::ifstream finList(fileList.c_str()); + std::string line; + while(cmSystemTools::GetLineFromStream(finList, line)) + { + this->LoadLabels(line.c_str()); + } +} + +//---------------------------------------------------------------------- +void cmCTestCoverageHandler::LoadLabels(const char* dir) +{ + LabelSet& dirLabels = this->TargetDirs[dir]; + std::string fname = dir; + fname += "/Labels.txt"; + std::ifstream fin(fname.c_str()); + if(!fin) + { + return; + } + + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " loading labels from [" << fname << "]\n"); + bool inTarget = true; + std::string source; + std::string line; + std::vector targetLabels; + while(cmSystemTools::GetLineFromStream(fin, line)) + { + if(line.empty() || line[0] == '#') + { + // Ignore blank and comment lines. + continue; + } + else if(line[0] == ' ') + { + // Label lines appear indented by one space. + std::string label = line.substr(1); + int id = this->GetLabelId(label); + dirLabels.insert(id); + if(inTarget) + { + targetLabels.push_back(id); + } + else + { + this->SourceLabels[source].insert(id); + } + } + else + { + // Non-indented lines specify a source file name. The first one + // is the end of the target-wide labels. + inTarget = false; + + source = this->CTest->GetShortPathToFile(line.c_str()); + + // Label the source with the target labels. + LabelSet& labelSet = this->SourceLabels[source]; + for(std::vector::const_iterator li = targetLabels.begin(); + li != targetLabels.end(); ++li) + { + labelSet.insert(*li); + } + } + } +} + +//---------------------------------------------------------------------- +void cmCTestCoverageHandler::WriteXMLLabels(std::ofstream& os, + std::string const& source) +{ + LabelMapType::const_iterator li = this->SourceLabels.find(source); + if(li != this->SourceLabels.end() && !li->second.empty()) + { + os << "\t\t\n"; + for(LabelSet::const_iterator lsi = li->second.begin(); + lsi != li->second.end(); ++lsi) + { + os << "\t\t\t\n"; + } + os << "\t\t\n"; + } +} + +//---------------------------------------------------------------------------- +void +cmCTestCoverageHandler::SetLabelFilter(std::set const& labels) +{ + this->LabelFilter.clear(); + for(std::set::const_iterator li = labels.begin(); + li != labels.end(); ++li) + { + this->LabelFilter.insert(this->GetLabelId(*li)); + } +} + +//---------------------------------------------------------------------- +bool cmCTestCoverageHandler::IntersectsFilter(LabelSet const& labels) +{ + // If there is no label filter then nothing is filtered out. + if(this->LabelFilter.empty()) + { + return true; + } + + std::vector ids; + cmsys_stl::set_intersection + (labels.begin(), labels.end(), + this->LabelFilter.begin(), this->LabelFilter.end(), + cmsys_stl::back_inserter(ids)); + return !ids.empty(); +} + +//---------------------------------------------------------------------- +bool cmCTestCoverageHandler::IsFilteredOut(std::string const& source) +{ + // If there is no label filter then nothing is filtered out. + if(this->LabelFilter.empty()) + { + return false; + } + + // The source is filtered out if it does not have any labels in + // common with the filter set. + std::string shortSrc = this->CTest->GetShortPathToFile(source.c_str()); + LabelMapType::const_iterator li = this->SourceLabels.find(shortSrc); + if(li != this->SourceLabels.end()) + { + return !this->IntersectsFilter(li->second); + } + return true; +} + +//---------------------------------------------------------------------- +std::set cmCTestCoverageHandler::FindUncoveredFiles( + cmCTestCoverageHandlerContainer* cont) +{ + std::set extraMatches; + + for(std::vector::iterator i = this->ExtraCoverageGlobs.begin(); + i != this->ExtraCoverageGlobs.end(); ++i) + { + cmsys::Glob gl; + gl.RecurseOn(); + gl.RecurseThroughSymlinksOff(); + std::string glob = cont->SourceDir + "/" + *i; + gl.FindFiles(glob); + std::vector files = gl.GetFiles(); + for(std::vector::iterator f = files.begin(); + f != files.end(); ++f) + { + if(this->ShouldIDoCoverage(f->c_str(), + cont->SourceDir.c_str(), cont->BinaryDir.c_str())) + { + extraMatches.insert(this->CTest->GetShortPathToFile( + f->c_str())); + } + } + } + + if(extraMatches.size()) + { + for(cmCTestCoverageHandlerContainer::TotalCoverageMap::iterator i = + cont->TotalCoverage.begin(); i != cont->TotalCoverage.end(); ++i) + { + std::string shortPath = this->CTest->GetShortPathToFile( + i->first.c_str()); + extraMatches.erase(shortPath); + } + } + return extraMatches; +} diff --git a/Source/CTest/cmCTestCoverageHandler.h b/Source/CTest/cmCTestCoverageHandler.h new file mode 100644 index 0000000..d3e8503 --- /dev/null +++ b/Source/CTest/cmCTestCoverageHandler.h @@ -0,0 +1,137 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTestCoverageHandler_h +#define cmCTestCoverageHandler_h + + +#include "cmCTestGenericHandler.h" +#include "cmListFileCache.h" + +#include + +class cmGeneratedFileStream; +class cmCTestCoverageHandlerContainer +{ +public: + int Error; + std::string SourceDir; + std::string BinaryDir; + typedef std::vector SingleFileCoverageVector; + typedef std::map TotalCoverageMap; + TotalCoverageMap TotalCoverage; + std::ostream* OFS; +}; +/** \class cmCTestCoverageHandler + * \brief A class that handles coverage computaiton for ctest + * + */ +class cmCTestCoverageHandler : public cmCTestGenericHandler +{ +public: + cmTypeMacro(cmCTestCoverageHandler, cmCTestGenericHandler); + + /* + * The main entry point for this class + */ + int ProcessHandler(); + + cmCTestCoverageHandler(); + + virtual void Initialize(); + + /** + * This method is called when reading CTest custom file + */ + void PopulateCustomVectors(cmMakefile *mf); + + /** Report coverage only for sources with these labels. */ + void SetLabelFilter(std::set const& labels); + +private: + bool ShouldIDoCoverage(const char* file, const char* srcDir, + const char* binDir); + void CleanCoverageLogFiles(std::ostream& log); + bool StartCoverageLogFile(cmGeneratedFileStream& ostr, int logFileCount); + void EndCoverageLogFile(cmGeneratedFileStream& ostr, int logFileCount); + + //! Handle coverage using GCC's GCov + int HandleGCovCoverage(cmCTestCoverageHandlerContainer* cont); + void FindGCovFiles(std::vector& files); + + //! Handle coverage using xdebug php coverage + int HandlePHPCoverage(cmCTestCoverageHandlerContainer* cont); + + //! Handle coverage using Bullseye + int HandleBullseyeCoverage(cmCTestCoverageHandlerContainer* cont); + int RunBullseyeSourceSummary(cmCTestCoverageHandlerContainer* cont); + int RunBullseyeCoverageBranch(cmCTestCoverageHandlerContainer* cont, + std::set& coveredFileNames, + std::vector& files, + std::vector& filesFullPath); + + int RunBullseyeCommand( + cmCTestCoverageHandlerContainer* cont, + const char* cmd, + const char* arg, + std::string& outputFile); + bool ParseBullsEyeCovsrcLine( + std::string const& inputLine, + std::string& sourceFile, + int& functionsCalled, + int& totalFunctions, + int& percentFunction, + int& branchCovered, + int& totalBranches, + int& percentBranch); + bool GetNextInt(std::string const& inputLine, + std::string::size_type& pos, + int& value); + //! Handle Python coverage using Python's Trace.py + int HandleTracePyCoverage(cmCTestCoverageHandlerContainer* cont); + + // Find the source file based on the source and build tree. This is used for + // Trace.py mode, since that one does not tell us where the source file is. + std::string FindFile(cmCTestCoverageHandlerContainer* cont, + std::string fileName); + + std::set FindUncoveredFiles( + cmCTestCoverageHandlerContainer* cont); + std::vector CustomCoverageExclude; + std::vector CustomCoverageExcludeRegex; + std::vector ExtraCoverageGlobs; + + + // Map from source file to label ids. + class LabelSet: public std::set {}; + typedef std::map LabelMapType; + LabelMapType SourceLabels; + LabelMapType TargetDirs; + + // Map from label name to label id. + typedef std::map LabelIdMapType; + LabelIdMapType LabelIdMap; + std::vector Labels; + int GetLabelId(std::string const& label); + + // Label reading and writing methods. + void LoadLabels(); + void LoadLabels(const char* dir); + void WriteXMLLabels(std::ofstream& os, std::string const& source); + + // Label-based filtering. + std::set LabelFilter; + bool IntersectsFilter(LabelSet const& labels); + bool IsFilteredOut(std::string const& source); +}; + +#endif diff --git a/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.cxx b/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.cxx new file mode 100644 index 0000000..56312c0 --- /dev/null +++ b/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.cxx @@ -0,0 +1,36 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestEmptyBinaryDirectoryCommand.h" + +#include "cmCTestScriptHandler.h" + +bool cmCTestEmptyBinaryDirectoryCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() != 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + if ( !cmCTestScriptHandler::EmptyBinaryDirectory(args[0].c_str()) ) + { + cmOStringStream ostr; + ostr << "problem removing the binary directory: " << args[0].c_str(); + this->SetError(ostr.str().c_str()); + return false; + } + + return true; +} + + diff --git a/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h b/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h new file mode 100644 index 0000000..a763fe9 --- /dev/null +++ b/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h @@ -0,0 +1,78 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestEmptyBinaryDirectoryCommand_h +#define cmCTestEmptyBinaryDirectoryCommand_h + +#include "cmCTestCommand.h" + +/** \class cmCTestEmptyBinaryDirectory + * \brief Run a ctest script + * + * cmLibrarysCommand defines a list of executable (i.e., test) + * programs to create. + */ +class cmCTestEmptyBinaryDirectoryCommand : public cmCTestCommand +{ +public: + + cmCTestEmptyBinaryDirectoryCommand() {} + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestEmptyBinaryDirectoryCommand* ni + = new cmCTestEmptyBinaryDirectoryCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_empty_binary_directory";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "empties the binary directory"; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_empty_binary_directory( directory )\n" + "Removes a binary directory. This command will perform some checks " + "prior to deleting the directory in an attempt to avoid malicious " + "or accidental directory deletion."; + } + + cmTypeMacro(cmCTestEmptyBinaryDirectoryCommand, cmCTestCommand); + +}; + + +#endif diff --git a/Source/CTest/cmCTestGIT.cxx b/Source/CTest/cmCTestGIT.cxx new file mode 100644 index 0000000..2c1a0af --- /dev/null +++ b/Source/CTest/cmCTestGIT.cxx @@ -0,0 +1,652 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestGIT.h" + +#include "cmCTest.h" +#include "cmSystemTools.h" +#include "cmXMLSafe.h" + +#include +#include +#include + +#include +#include +#include + +//---------------------------------------------------------------------------- +static unsigned int cmCTestGITVersion(unsigned int epic, unsigned int major, + unsigned int minor, unsigned int fix) +{ + // 1.6.5.0 maps to 10605000 + return fix + minor*1000 + major*100000 + epic*10000000; +} + +//---------------------------------------------------------------------------- +cmCTestGIT::cmCTestGIT(cmCTest* ct, std::ostream& log): + cmCTestGlobalVC(ct, log) +{ + this->PriorRev = this->Unknown; + this->CurrentGitVersion = 0; +} + +//---------------------------------------------------------------------------- +cmCTestGIT::~cmCTestGIT() +{ +} + +//---------------------------------------------------------------------------- +class cmCTestGIT::OneLineParser: public cmCTestVC::LineParser +{ +public: + OneLineParser(cmCTestGIT* git, const char* prefix, + std::string& l): Line1(l) + { + this->SetLog(&git->Log, prefix); + } +private: + std::string& Line1; + virtual bool ProcessLine() + { + // Only the first line is of interest. + this->Line1 = this->Line; + return false; + } +}; + +//---------------------------------------------------------------------------- +std::string cmCTestGIT::GetWorkingRevision() +{ + // Run plumbing "git rev-list" to get work tree revision. + const char* git = this->CommandLineTool.c_str(); + const char* git_rev_list[] = {git, "rev-list", "-n", "1", "HEAD", 0}; + std::string rev; + OneLineParser out(this, "rl-out> ", rev); + OutputLogger err(this->Log, "rl-err> "); + this->RunChild(git_rev_list, &out, &err); + return rev; +} + +//---------------------------------------------------------------------------- +void cmCTestGIT::NoteOldRevision() +{ + this->OldRevision = this->GetWorkingRevision(); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Old revision of repository is: " + << this->OldRevision << "\n"); + this->PriorRev.Rev = this->OldRevision; +} + +//---------------------------------------------------------------------------- +void cmCTestGIT::NoteNewRevision() +{ + this->NewRevision = this->GetWorkingRevision(); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " New revision of repository is: " + << this->NewRevision << "\n"); +} + +//---------------------------------------------------------------------------- +std::string cmCTestGIT::FindGitDir() +{ + std::string git_dir; + + // Run "git rev-parse --git-dir" to locate the real .git directory. + const char* git = this->CommandLineTool.c_str(); + char const* git_rev_parse[] = {git, "rev-parse", "--git-dir", 0}; + std::string git_dir_line; + OneLineParser rev_parse_out(this, "rev-parse-out> ", git_dir_line); + OutputLogger rev_parse_err(this->Log, "rev-parse-err> "); + if(this->RunChild(git_rev_parse, &rev_parse_out, &rev_parse_err)) + { + git_dir = git_dir_line; + } + if(git_dir.empty()) + { + git_dir = ".git"; + } + + // Git reports a relative path only when the .git directory is in + // the current directory. + if(git_dir[0] == '.') + { + git_dir = this->SourceDirectory + "/" + git_dir; + } +#if defined(_WIN32) && !defined(__CYGWIN__) + else if(git_dir[0] == '/') + { + // Cygwin Git reports a full path that Cygwin understands, but we + // are a Windows application. Run "cygpath" to get Windows path. + std::string cygpath_exe = cmSystemTools::GetFilenamePath(git); + cygpath_exe += "/cygpath.exe"; + if(cmSystemTools::FileExists(cygpath_exe.c_str())) + { + char const* cygpath[] = {cygpath_exe.c_str(), "-w", git_dir.c_str(), 0}; + OneLineParser cygpath_out(this, "cygpath-out> ", git_dir_line); + OutputLogger cygpath_err(this->Log, "cygpath-err> "); + if(this->RunChild(cygpath, &cygpath_out, &cygpath_err)) + { + git_dir = git_dir_line; + } + } + } +#endif + return git_dir; +} + +//---------------------------------------------------------------------------- +std::string cmCTestGIT::FindTopDir() +{ + std::string top_dir = this->SourceDirectory; + + // Run "git rev-parse --show-cdup" to locate the top of the tree. + const char* git = this->CommandLineTool.c_str(); + char const* git_rev_parse[] = {git, "rev-parse", "--show-cdup", 0}; + std::string cdup; + OneLineParser rev_parse_out(this, "rev-parse-out> ", cdup); + OutputLogger rev_parse_err(this->Log, "rev-parse-err> "); + if(this->RunChild(git_rev_parse, &rev_parse_out, &rev_parse_err) && + !cdup.empty()) + { + top_dir += "/"; + top_dir += cdup; + top_dir = cmSystemTools::CollapseFullPath(top_dir.c_str()); + } + return top_dir; +} + +//---------------------------------------------------------------------------- +bool cmCTestGIT::UpdateByFetchAndReset() +{ + const char* git = this->CommandLineTool.c_str(); + + // Use "git fetch" to get remote commits. + std::vector git_fetch; + git_fetch.push_back(git); + git_fetch.push_back("fetch"); + + // Add user-specified update options. + std::string opts = this->CTest->GetCTestConfiguration("UpdateOptions"); + if(opts.empty()) + { + opts = this->CTest->GetCTestConfiguration("GITUpdateOptions"); + } + std::vector args = cmSystemTools::ParseArguments(opts.c_str()); + for(std::vector::const_iterator ai = args.begin(); + ai != args.end(); ++ai) + { + git_fetch.push_back(ai->c_str()); + } + + // Sentinel argument. + git_fetch.push_back(0); + + // Fetch upstream refs. + OutputLogger fetch_out(this->Log, "fetch-out> "); + OutputLogger fetch_err(this->Log, "fetch-err> "); + if(!this->RunUpdateCommand(&git_fetch[0], &fetch_out, &fetch_err)) + { + return false; + } + + // Identify the merge head that would be used by "git pull". + std::string sha1; + { + std::string fetch_head = this->FindGitDir() + "/FETCH_HEAD"; + std::ifstream fin(fetch_head.c_str(), std::ios::in | std::ios::binary); + if(!fin) + { + this->Log << "Unable to open " << fetch_head << "\n"; + return false; + } + std::string line; + while(sha1.empty() && cmSystemTools::GetLineFromStream(fin, line)) + { + this->Log << "FETCH_HEAD> " << line << "\n"; + if(line.find("\tnot-for-merge\t") == line.npos) + { + std::string::size_type pos = line.find('\t'); + if(pos != line.npos) + { + sha1 = line.substr(0, pos); + } + } + } + if(sha1.empty()) + { + this->Log << "FETCH_HEAD has no upstream branch candidate!\n"; + return false; + } + } + + // Reset the local branch to point at that tracked from upstream. + char const* git_reset[] = {git, "reset", "--hard", sha1.c_str(), 0}; + OutputLogger reset_out(this->Log, "reset-out> "); + OutputLogger reset_err(this->Log, "reset-err> "); + return this->RunChild(&git_reset[0], &reset_out, &reset_err); +} + +//---------------------------------------------------------------------------- +bool cmCTestGIT::UpdateByCustom(std::string const& custom) +{ + std::vector git_custom_command; + cmSystemTools::ExpandListArgument(custom, git_custom_command, true); + std::vector git_custom; + for(std::vector::const_iterator + i = git_custom_command.begin(); i != git_custom_command.end(); ++i) + { + git_custom.push_back(i->c_str()); + } + git_custom.push_back(0); + + OutputLogger custom_out(this->Log, "custom-out> "); + OutputLogger custom_err(this->Log, "custom-err> "); + return this->RunUpdateCommand(&git_custom[0], &custom_out, &custom_err); +} + +//---------------------------------------------------------------------------- +bool cmCTestGIT::UpdateInternal() +{ + std::string custom = this->CTest->GetCTestConfiguration("GITUpdateCustom"); + if(!custom.empty()) + { + return this->UpdateByCustom(custom); + } + return this->UpdateByFetchAndReset(); +} + +//---------------------------------------------------------------------------- +bool cmCTestGIT::UpdateImpl() +{ + if(!this->UpdateInternal()) + { + return false; + } + + std::string top_dir = this->FindTopDir(); + const char* git = this->CommandLineTool.c_str(); + const char* recursive = "--recursive"; + + // Git < 1.6.5.0 did not support --recursive + if(this->GetGitVersion() < cmCTestGITVersion(1,6,5,0)) + { + recursive = 0; + // No need to require >= 1.6.5.0 if there are no submodules. + if(cmSystemTools::FileExists((top_dir + "/.gitmodules").c_str())) + { + this->Log << "Git < 1.6.5.0 cannot update submodules recursively\n"; + } + } + + char const* git_submodule[] = {git, "submodule", "update", recursive, 0}; + OutputLogger submodule_out(this->Log, "submodule-out> "); + OutputLogger submodule_err(this->Log, "submodule-err> "); + return this->RunChild(git_submodule, &submodule_out, &submodule_err, + top_dir.c_str()); +} + +//---------------------------------------------------------------------------- +unsigned int cmCTestGIT::GetGitVersion() +{ + if(!this->CurrentGitVersion) + { + const char* git = this->CommandLineTool.c_str(); + char const* git_version[] = {git, "--version", 0}; + std::string version; + OneLineParser version_out(this, "version-out> ", version); + OutputLogger version_err(this->Log, "version-err> "); + unsigned int v[4] = {0,0,0,0}; + if(this->RunChild(git_version, &version_out, &version_err) && + sscanf(version.c_str(), "git version %u.%u.%u.%u", + &v[0], &v[1], &v[2], &v[3]) >= 3) + { + this->CurrentGitVersion = cmCTestGITVersion(v[0], v[1], v[2], v[3]); + } + } + return this->CurrentGitVersion; +} + +//---------------------------------------------------------------------------- +/* Diff format: + + :src-mode dst-mode src-sha1 dst-sha1 status\0 + src-path\0 + [dst-path\0] + + The format is repeated for every file changed. The [dst-path\0] + line appears only for lines with status 'C' or 'R'. See 'git help + diff-tree' for details. +*/ +class cmCTestGIT::DiffParser: public cmCTestVC::LineParser +{ +public: + DiffParser(cmCTestGIT* git, const char* prefix): + LineParser('\0', false), GIT(git), DiffField(DiffFieldNone) + { + this->SetLog(&git->Log, prefix); + } + + typedef cmCTestGIT::Change Change; + std::vector Changes; +protected: + cmCTestGIT* GIT; + enum DiffFieldType { DiffFieldNone, DiffFieldChange, + DiffFieldSrc, DiffFieldDst }; + DiffFieldType DiffField; + Change CurChange; + + void DiffReset() + { + this->DiffField = DiffFieldNone; + this->Changes.clear(); + } + + virtual bool ProcessLine() + { + if(this->Line[0] == ':') + { + this->DiffField = DiffFieldChange; + this->CurChange = Change(); + } + if(this->DiffField == DiffFieldChange) + { + // :src-mode dst-mode src-sha1 dst-sha1 status + if(this->Line[0] != ':') + { + this->DiffField = DiffFieldNone; + return true; + } + const char* src_mode_first = this->Line.c_str()+1; + const char* src_mode_last = this->ConsumeField(src_mode_first); + const char* dst_mode_first = this->ConsumeSpace(src_mode_last); + const char* dst_mode_last = this->ConsumeField(dst_mode_first); + const char* src_sha1_first = this->ConsumeSpace(dst_mode_last); + const char* src_sha1_last = this->ConsumeField(src_sha1_first); + const char* dst_sha1_first = this->ConsumeSpace(src_sha1_last); + const char* dst_sha1_last = this->ConsumeField(dst_sha1_first); + const char* status_first = this->ConsumeSpace(dst_sha1_last); + const char* status_last = this->ConsumeField(status_first); + if(status_first != status_last) + { + this->CurChange.Action = *status_first; + this->DiffField = DiffFieldSrc; + } + else + { + this->DiffField = DiffFieldNone; + } + } + else if(this->DiffField == DiffFieldSrc) + { + // src-path + if(this->CurChange.Action == 'C') + { + // Convert copy to addition of destination. + this->CurChange.Action = 'A'; + this->DiffField = DiffFieldDst; + } + else if(this->CurChange.Action == 'R') + { + // Convert rename to deletion of source and addition of destination. + this->CurChange.Action = 'D'; + this->CurChange.Path = this->Line; + this->Changes.push_back(this->CurChange); + + this->CurChange = Change('A'); + this->DiffField = DiffFieldDst; + } + else + { + this->CurChange.Path = this->Line; + this->Changes.push_back(this->CurChange); + this->DiffField = this->DiffFieldNone; + } + } + else if(this->DiffField == DiffFieldDst) + { + // dst-path + this->CurChange.Path = this->Line; + this->Changes.push_back(this->CurChange); + this->DiffField = this->DiffFieldNone; + } + return true; + } + + const char* ConsumeSpace(const char* c) + { + while(*c && isspace(*c)) { ++c; } + return c; + } + const char* ConsumeField(const char* c) + { + while(*c && !isspace(*c)) { ++c; } + return c; + } +}; + +//---------------------------------------------------------------------------- +/* Commit format: + + commit ...\n + tree ...\n + parent ...\n + author ...\n + committer ...\n + \n + Log message indented by (4) spaces\n + (even blank lines have the spaces)\n + [[ + \n + [Diff format] + OR + \0 + ]] + + The header may have more fields. See 'git help diff-tree'. +*/ +class cmCTestGIT::CommitParser: public cmCTestGIT::DiffParser +{ +public: + CommitParser(cmCTestGIT* git, const char* prefix): + DiffParser(git, prefix), Section(SectionHeader) + { + this->Separator = SectionSep[this->Section]; + } + +private: + typedef cmCTestGIT::Revision Revision; + enum SectionType { SectionHeader, SectionBody, SectionDiff, SectionCount }; + static char const SectionSep[SectionCount]; + SectionType Section; + Revision Rev; + + struct Person + { + std::string Name; + std::string EMail; + unsigned long Time; + long TimeZone; + Person(): Name(), EMail(), Time(0), TimeZone(0) {} + }; + + void ParsePerson(const char* str, Person& person) + { + // Person Name 1234567890 +0000 + const char* c = str; + while(*c && isspace(*c)) { ++c; } + + const char* name_first = c; + while(*c && *c != '<') { ++c; } + const char* name_last = c; + while(name_last != name_first && isspace(*(name_last-1))) { --name_last; } + person.Name.assign(name_first, name_last-name_first); + + const char* email_first = *c? ++c : c; + while(*c && *c != '>') { ++c; } + const char* email_last = *c? c++ : c; + person.EMail.assign(email_first, email_last-email_first); + + person.Time = strtoul(c, (char**)&c, 10); + person.TimeZone = strtol(c, (char**)&c, 10); + } + + virtual bool ProcessLine() + { + if(this->Line.empty()) + { + if(this->Section == SectionBody && this->LineEnd == '\0') + { + // Skip SectionDiff + this->NextSection(); + } + this->NextSection(); + } + else + { + switch(this->Section) + { + case SectionHeader: this->DoHeaderLine(); break; + case SectionBody: this->DoBodyLine(); break; + case SectionDiff: this->DiffParser::ProcessLine(); break; + case SectionCount: break; // never happens + } + } + return true; + } + + void NextSection() + { + this->Section = SectionType((this->Section+1) % SectionCount); + this->Separator = SectionSep[this->Section]; + if(this->Section == SectionHeader) + { + this->GIT->DoRevision(this->Rev, this->Changes); + this->Rev = Revision(); + this->DiffReset(); + } + } + + void DoHeaderLine() + { + // Look for header fields that we need. + if(strncmp(this->Line.c_str(), "commit ", 7) == 0) + { + this->Rev.Rev = this->Line.c_str()+7; + } + else if(strncmp(this->Line.c_str(), "author ", 7) == 0) + { + Person author; + this->ParsePerson(this->Line.c_str()+7, author); + this->Rev.Author = author.Name; + this->Rev.EMail = author.EMail; + this->Rev.Date = this->FormatDateTime(author); + } + else if(strncmp(this->Line.c_str(), "committer ", 10) == 0) + { + Person committer; + this->ParsePerson(this->Line.c_str()+10, committer); + this->Rev.Committer = committer.Name; + this->Rev.CommitterEMail = committer.EMail; + this->Rev.CommitDate = this->FormatDateTime(committer); + } + } + + void DoBodyLine() + { + // Commit log lines are indented by 4 spaces. + if(this->Line.size() >= 4) + { + this->Rev.Log += this->Line.substr(4); + } + this->Rev.Log += "\n"; + } + + std::string FormatDateTime(Person const& person) + { + // Convert the time to a human-readable format that is also easy + // to machine-parse: "CCYY-MM-DD hh:mm:ss". + time_t seconds = static_cast(person.Time); + struct tm* t = gmtime(&seconds); + char dt[1024]; + sprintf(dt, "%04d-%02d-%02d %02d:%02d:%02d", + t->tm_year+1900, t->tm_mon+1, t->tm_mday, + t->tm_hour, t->tm_min, t->tm_sec); + std::string out = dt; + + // Add the time-zone field "+zone" or "-zone". + char tz[32]; + if(person.TimeZone >= 0) + { + sprintf(tz, " +%04ld", person.TimeZone); + } + else + { + sprintf(tz, " -%04ld", -person.TimeZone); + } + out += tz; + return out; + } +}; + +char const cmCTestGIT::CommitParser::SectionSep[SectionCount] = +{'\n', '\n', '\0'}; + +//---------------------------------------------------------------------------- +void cmCTestGIT::LoadRevisions() +{ + // Use 'git rev-list ... | git diff-tree ...' to get revisions. + std::string range = this->OldRevision + ".." + this->NewRevision; + const char* git = this->CommandLineTool.c_str(); + const char* git_rev_list[] = + {git, "rev-list", "--reverse", range.c_str(), "--", 0}; + const char* git_diff_tree[] = + {git, "diff-tree", "--stdin", "--always", "-z", "-r", "--pretty=raw", + "--encoding=utf-8", 0}; + this->Log << this->ComputeCommandLine(git_rev_list) << " | " + << this->ComputeCommandLine(git_diff_tree) << "\n"; + + cmsysProcess* cp = cmsysProcess_New(); + cmsysProcess_AddCommand(cp, git_rev_list); + cmsysProcess_AddCommand(cp, git_diff_tree); + cmsysProcess_SetWorkingDirectory(cp, this->SourceDirectory.c_str()); + + CommitParser out(this, "dt-out> "); + OutputLogger err(this->Log, "dt-err> "); + this->RunProcess(cp, &out, &err); + + // Send one extra zero-byte to terminate the last record. + out.Process("", 1); + + cmsysProcess_Delete(cp); +} + +//---------------------------------------------------------------------------- +void cmCTestGIT::LoadModifications() +{ + const char* git = this->CommandLineTool.c_str(); + + // Use 'git update-index' to refresh the index w.r.t. the work tree. + const char* git_update_index[] = {git, "update-index", "--refresh", 0}; + OutputLogger ui_out(this->Log, "ui-out> "); + OutputLogger ui_err(this->Log, "ui-err> "); + this->RunChild(git_update_index, &ui_out, &ui_err); + + // Use 'git diff-index' to get modified files. + const char* git_diff_index[] = {git, "diff-index", "-z", "HEAD", 0}; + DiffParser out(this, "di-out> "); + OutputLogger err(this->Log, "di-err> "); + this->RunChild(git_diff_index, &out, &err); + + for(std::vector::const_iterator ci = out.Changes.begin(); + ci != out.Changes.end(); ++ci) + { + this->DoModification(PathModified, ci->Path); + } +} diff --git a/Source/CTest/cmCTestGIT.h b/Source/CTest/cmCTestGIT.h new file mode 100644 index 0000000..f4fae8f --- /dev/null +++ b/Source/CTest/cmCTestGIT.h @@ -0,0 +1,57 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestGIT_h +#define cmCTestGIT_h + +#include "cmCTestGlobalVC.h" + +/** \class cmCTestGIT + * \brief Interaction with git command-line tool + * + */ +class cmCTestGIT: public cmCTestGlobalVC +{ +public: + /** Construct with a CTest instance and update log stream. */ + cmCTestGIT(cmCTest* ctest, std::ostream& log); + + virtual ~cmCTestGIT(); + +private: + unsigned int CurrentGitVersion; + unsigned int GetGitVersion(); + std::string GetWorkingRevision(); + virtual void NoteOldRevision(); + virtual void NoteNewRevision(); + virtual bool UpdateImpl(); + + std::string FindGitDir(); + std::string FindTopDir(); + + bool UpdateByFetchAndReset(); + bool UpdateByCustom(std::string const& custom); + bool UpdateInternal(); + + void LoadRevisions(); + void LoadModifications(); + +public: // needed by older Sun compilers + // Parsing helper classes. + class OneLineParser; + class DiffParser; + class CommitParser; + friend class OneLineParser; + friend class DiffParser; + friend class CommitParser; +}; + +#endif diff --git a/Source/CTest/cmCTestGenericHandler.cxx b/Source/CTest/cmCTestGenericHandler.cxx new file mode 100644 index 0000000..fd75e45 --- /dev/null +++ b/Source/CTest/cmCTestGenericHandler.cxx @@ -0,0 +1,171 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCTestGenericHandler.h" +#include "cmSystemTools.h" + +#include "cmCTest.h" + +//---------------------------------------------------------------------- +cmCTestGenericHandler::cmCTestGenericHandler() +{ + this->HandlerVerbose = cmSystemTools::OUTPUT_NONE; + this->CTest = 0; + this->SubmitIndex = 0; + this->AppendXML = false; +} + +//---------------------------------------------------------------------- +cmCTestGenericHandler::~cmCTestGenericHandler() +{ +} + +//---------------------------------------------------------------------- +void cmCTestGenericHandler::SetOption(const char* op, const char* value) +{ + if ( !op ) + { + return; + } + if ( !value ) + { + cmCTestGenericHandler::t_StringToString::iterator remit + = this->Options.find(op); + if ( remit != this->Options.end() ) + { + this->Options.erase(remit); + } + return; + } + + this->Options[op] = value; +} + +//---------------------------------------------------------------------- +void cmCTestGenericHandler::SetPersistentOption(const char* op, + const char* value) +{ + this->SetOption(op, value); + if ( !op ) + { + return; + } + if ( !value ) + { + cmCTestGenericHandler::t_StringToString::iterator remit + = this->PersistentOptions.find(op); + if ( remit != this->PersistentOptions.end() ) + { + this->PersistentOptions.erase(remit); + } + return; + } + + this->PersistentOptions[op] = value; +} + +//---------------------------------------------------------------------- +void cmCTestGenericHandler::Initialize() +{ + this->AppendXML = false; + this->Options.clear(); + t_StringToString::iterator it; + for ( it = this->PersistentOptions.begin(); + it != this->PersistentOptions.end(); + ++ it ) + { + this->Options[it->first.c_str()] = it->second.c_str(); + } +} + +//---------------------------------------------------------------------- +const char* cmCTestGenericHandler::GetOption(const char* op) +{ + cmCTestGenericHandler::t_StringToString::iterator remit + = this->Options.find(op); + if ( remit == this->Options.end() ) + { + return 0; + } + return remit->second.c_str(); +} + +//---------------------------------------------------------------------- +bool cmCTestGenericHandler::StartResultingXML(cmCTest::Part part, + const char* name, + cmGeneratedFileStream& xofs) +{ + if ( !name ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot create resulting XML file without providing the name" + << std::endl;); + return false; + } + cmOStringStream ostr; + ostr << name; + if ( this->SubmitIndex > 0 ) + { + ostr << "_" << this->SubmitIndex; + } + ostr << ".xml"; + if(this->CTest->GetCurrentTag().empty()) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Current Tag empty, this may mean NightlyStartTime / " + "CTEST_NIGHTLY_START_TIME was not set correctly. Or " + "maybe you forgot to call ctest_start() before calling " + "ctest_configure()." << std::endl); + cmSystemTools::SetFatalErrorOccured(); + return false; + } + if( !this->CTest->OpenOutputFile(this->CTest->GetCurrentTag(), + ostr.str().c_str(), xofs, true) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot create resulting XML file: " << ostr.str().c_str() + << std::endl); + return false; + } + this->CTest->AddSubmitFile(part, ostr.str().c_str()); + return true; +} + +//---------------------------------------------------------------------- +bool cmCTestGenericHandler::StartLogFile(const char* name, + cmGeneratedFileStream& xofs) +{ + if ( !name ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot create log file without providing the name" << std::endl;); + return false; + } + cmOStringStream ostr; + ostr << "Last" << name; + if ( this->SubmitIndex > 0 ) + { + ostr << "_" << this->SubmitIndex; + } + if ( !this->CTest->GetCurrentTag().empty() ) + { + ostr << "_" << this->CTest->GetCurrentTag(); + } + ostr << ".log"; + if( !this->CTest->OpenOutputFile("Temporary", ostr.str().c_str(), xofs) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot create log file: " + << ostr.str().c_str() << std::endl); + return false; + } + return true; +} diff --git a/Source/CTest/cmCTestGenericHandler.h b/Source/CTest/cmCTestGenericHandler.h new file mode 100644 index 0000000..18189ec --- /dev/null +++ b/Source/CTest/cmCTestGenericHandler.h @@ -0,0 +1,107 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTestGenericHandler_h +#define cmCTestGenericHandler_h + + +#include "cmObject.h" +#include "cmCTest.h" +#include "cmSystemTools.h" //OutputOption + +class cmMakefile; +class cmCTestCommand; +class cmGeneratedFileStream; + +/** \class cmCTestGenericHandler + * \brief A superclass of all CTest Handlers + * + */ +class cmCTestGenericHandler : public cmObject +{ +public: + /** + * If verbose then more informaiton is printed out + */ + void SetVerbose(bool val) + { this->HandlerVerbose = val ? + cmSystemTools::OUTPUT_MERGE : cmSystemTools::OUTPUT_NONE; } + + /** + * Populate internals from CTest custom scripts + */ + virtual void PopulateCustomVectors(cmMakefile *) {} + + /** + * Do the actual processing. Subclass has to override it. + * Return < 0 if error. + */ + virtual int ProcessHandler() = 0; + + /** + * Process command line arguments that are applicable for the handler + */ + virtual int ProcessCommandLineArguments( + const std::string& /*currentArg*/, size_t& /*idx*/, + const std::vector& /*allArgs*/) { return 1; } + + /** + * Initialize handler + */ + virtual void Initialize(); + + /** + * Set the CTest instance + */ + void SetCTestInstance(cmCTest* ctest) { this->CTest = ctest; } + cmCTest* GetCTestInstance() { return this->CTest; } + + /** + * Construct handler + */ + cmCTestGenericHandler(); + virtual ~cmCTestGenericHandler(); + + typedef std::map t_StringToString; + + + void SetPersistentOption(const char* op, const char* value); + void SetOption(const char* op, const char* value); + const char* GetOption(const char* op); + + void SetCommand(cmCTestCommand* command) + { + this->Command = command; + } + + void SetSubmitIndex(int idx) { this->SubmitIndex = idx; } + int GetSubmitIndex() { return this->SubmitIndex; } + + void SetAppendXML(bool b) { this->AppendXML = b; } + +protected: + bool StartResultingXML(cmCTest::Part part, + const char* name, cmGeneratedFileStream& xofs); + bool StartLogFile(const char* name, cmGeneratedFileStream& xofs); + + bool AppendXML; + cmSystemTools::OutputOption HandlerVerbose; + cmCTest *CTest; + t_StringToString Options; + t_StringToString PersistentOptions; + + cmCTestCommand* Command; + int SubmitIndex; +}; + +#endif + diff --git a/Source/CTest/cmCTestGlobalVC.cxx b/Source/CTest/cmCTestGlobalVC.cxx new file mode 100644 index 0000000..8c51102 --- /dev/null +++ b/Source/CTest/cmCTestGlobalVC.cxx @@ -0,0 +1,142 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestGlobalVC.h" + +#include "cmCTest.h" +#include "cmSystemTools.h" +#include "cmXMLSafe.h" + +#include + +//---------------------------------------------------------------------------- +cmCTestGlobalVC::cmCTestGlobalVC(cmCTest* ct, std::ostream& log): + cmCTestVC(ct, log) +{ + this->PriorRev = this->Unknown; +} + +//---------------------------------------------------------------------------- +cmCTestGlobalVC::~cmCTestGlobalVC() +{ +} + +//---------------------------------------------------------------------------- +const char* cmCTestGlobalVC::LocalPath(std::string const& path) +{ + return path.c_str(); +} + +//---------------------------------------------------------------------------- +void cmCTestGlobalVC::DoRevision(Revision const& revision, + std::vector const& changes) +{ + // Ignore changes in the old revision. + if(revision.Rev == this->OldRevision) + { + this->PriorRev = revision; + return; + } + + // Indicate we found a revision. + cmCTestLog(this->CTest, HANDLER_OUTPUT, "." << std::flush); + + // Store the revision. + this->Revisions.push_back(revision); + + // Report this revision. + Revision const& rev = this->Revisions.back(); + this->Log << "Found revision " << rev.Rev << "\n" + << " author = " << rev.Author << "\n" + << " date = " << rev.Date << "\n"; + + // Update information about revisions of the changed files. + for(std::vector::const_iterator ci = changes.begin(); + ci != changes.end(); ++ci) + { + if(const char* local = this->LocalPath(ci->Path)) + { + std::string dir = cmSystemTools::GetFilenamePath(local); + std::string name = cmSystemTools::GetFilenameName(local); + File& file = this->Dirs[dir][name]; + file.PriorRev = file.Rev? file.Rev : &this->PriorRev; + file.Rev = &rev; + this->Log << " " << ci->Action << " " << local << " " << "\n"; + } + } +} + +//---------------------------------------------------------------------------- +void cmCTestGlobalVC::DoModification(PathStatus status, + std::string const& path) +{ + std::string dir = cmSystemTools::GetFilenamePath(path); + std::string name = cmSystemTools::GetFilenameName(path); + File& file = this->Dirs[dir][name]; + file.Status = status; + // For local modifications the current rev is unknown and the + // prior rev is the latest from svn. + if(!file.Rev && !file.PriorRev) + { + file.PriorRev = &this->PriorRev; + } +} + +//---------------------------------------------------------------------------- +void cmCTestGlobalVC::WriteXMLDirectory(std::ostream& xml, + std::string const& path, + Directory const& dir) +{ + const char* slash = path.empty()? "":"/"; + xml << "\t\n" + << "\t\t" << cmXMLSafe(path) << "\n"; + for(Directory::const_iterator fi = dir.begin(); fi != dir.end(); ++fi) + { + std::string full = path + slash + fi->first; + this->WriteXMLEntry(xml, path, fi->first, full, fi->second); + } + xml << "\t\n"; +} + +//---------------------------------------------------------------------------- +void cmCTestGlobalVC::WriteXMLGlobal(std::ostream& xml) +{ + if(!this->NewRevision.empty()) + { + xml << "\t" << this->NewRevision << "\n"; + } + if(!this->OldRevision.empty() && this->OldRevision != this->NewRevision) + { + xml << "\t" << this->OldRevision << "\n"; + } +} + +//---------------------------------------------------------------------------- +bool cmCTestGlobalVC::WriteXMLUpdates(std::ostream& xml) +{ + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Gathering version information (one . per revision):\n" + " " << std::flush); + this->LoadRevisions(); + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::endl); + + this->LoadModifications(); + + this->WriteXMLGlobal(xml); + + for(std::map::const_iterator + di = this->Dirs.begin(); di != this->Dirs.end(); ++di) + { + this->WriteXMLDirectory(xml, di->first, di->second); + } + + return true; +} diff --git a/Source/CTest/cmCTestGlobalVC.h b/Source/CTest/cmCTestGlobalVC.h new file mode 100644 index 0000000..a648a59 --- /dev/null +++ b/Source/CTest/cmCTestGlobalVC.h @@ -0,0 +1,68 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestGlobalVC_h +#define cmCTestGlobalVC_h + +#include "cmCTestVC.h" + +/** \class cmCTestGlobalVC + * \brief Base class for handling globally-versioned trees + * + */ +class cmCTestGlobalVC: public cmCTestVC +{ +public: + /** Construct with a CTest instance and update log stream. */ + cmCTestGlobalVC(cmCTest* ctest, std::ostream& log); + + virtual ~cmCTestGlobalVC(); + +protected: + // Implement cmCTestVC internal API. + virtual bool WriteXMLUpdates(std::ostream& xml); + + /** Represent a vcs-reported action for one path in a revision. */ + struct Change + { + char Action; + std::string Path; + Change(char a = '?'): Action(a) {} + }; + + // Update status for files in each directory. + class Directory: public std::map {}; + std::map Dirs; + + // Old and new repository revisions. + std::string OldRevision; + std::string NewRevision; + + // Information known about old revision. + Revision PriorRev; + + // Information about revisions from a svn log. + std::list Revisions; + + virtual const char* LocalPath(std::string const& path); + + virtual void DoRevision(Revision const& revision, + std::vector const& changes); + virtual void DoModification(PathStatus status, std::string const& path); + virtual void LoadModifications() = 0; + virtual void LoadRevisions() = 0; + + virtual void WriteXMLGlobal(std::ostream& xml); + void WriteXMLDirectory(std::ostream& xml, std::string const& path, + Directory const& dir); +}; + +#endif diff --git a/Source/CTest/cmCTestHG.cxx b/Source/CTest/cmCTestHG.cxx new file mode 100644 index 0000000..86a7617 --- /dev/null +++ b/Source/CTest/cmCTestHG.cxx @@ -0,0 +1,338 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestHG.h" + +#include "cmCTest.h" +#include "cmSystemTools.h" +#include "cmXMLParser.h" + +#include + +//---------------------------------------------------------------------------- +cmCTestHG::cmCTestHG(cmCTest* ct, std::ostream& log): + cmCTestGlobalVC(ct, log) +{ + this->PriorRev = this->Unknown; +} + +//---------------------------------------------------------------------------- +cmCTestHG::~cmCTestHG() +{ +} + +//---------------------------------------------------------------------------- +class cmCTestHG::IdentifyParser: public cmCTestVC::LineParser +{ +public: + IdentifyParser(cmCTestHG* hg, const char* prefix, + std::string& rev): Rev(rev) + { + this->SetLog(&hg->Log, prefix); + this->RegexIdentify.compile("^([0-9a-f]+)"); + } +private: + std::string& Rev; + cmsys::RegularExpression RegexIdentify; + + bool ProcessLine() + { + if(this->RegexIdentify.find(this->Line)) + { + this->Rev = this->RegexIdentify.match(1); + return false; + } + return true; + } +}; + +//---------------------------------------------------------------------------- +class cmCTestHG::StatusParser: public cmCTestVC::LineParser +{ +public: + StatusParser(cmCTestHG* hg, const char* prefix): HG(hg) + { + this->SetLog(&hg->Log, prefix); + this->RegexStatus.compile("([MARC!?I]) (.*)"); + } + +private: + cmCTestHG* HG; + cmsys::RegularExpression RegexStatus; + + bool ProcessLine() + { + if(this->RegexStatus.find(this->Line)) + { + this->DoPath(this->RegexStatus.match(1)[0], + this->RegexStatus.match(2)); + } + return true; + } + + void DoPath(char status, std::string const& path) + { + if(path.empty()) return; + + // See "hg help status". Note that there is no 'conflict' status. + switch(status) + { + case 'M': case 'A': case '!': case 'R': + this->HG->DoModification(PathModified, path); + break; + case 'I': case '?': case 'C': case ' ': default: + break; + } + } +}; + +//---------------------------------------------------------------------------- +std::string cmCTestHG::GetWorkingRevision() +{ + // Run plumbing "hg identify" to get work tree revision. + const char* hg = this->CommandLineTool.c_str(); + const char* hg_identify[] = {hg, "identify","-i", 0}; + std::string rev; + IdentifyParser out(this, "rev-out> ", rev); + OutputLogger err(this->Log, "rev-err> "); + this->RunChild(hg_identify, &out, &err); + return rev; +} + +//---------------------------------------------------------------------------- +void cmCTestHG::NoteOldRevision() +{ + this->OldRevision = this->GetWorkingRevision(); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Old revision of repository is: " + << this->OldRevision << "\n"); + this->PriorRev.Rev = this->OldRevision; +} + +//---------------------------------------------------------------------------- +void cmCTestHG::NoteNewRevision() +{ + this->NewRevision = this->GetWorkingRevision(); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " New revision of repository is: " + << this->NewRevision << "\n"); +} + +//---------------------------------------------------------------------------- +bool cmCTestHG::UpdateImpl() +{ + // Use "hg pull" followed by "hg update" to update the working tree. + { + const char* hg = this->CommandLineTool.c_str(); + const char* hg_pull[] = {hg, "pull","-v", 0}; + OutputLogger out(this->Log, "pull-out> "); + OutputLogger err(this->Log, "pull-err> "); + this->RunChild(&hg_pull[0], &out, &err); + } + + // TODO: if(this->CTest->GetTestModel() == cmCTest::NIGHTLY) + + std::vector hg_update; + hg_update.push_back(this->CommandLineTool.c_str()); + hg_update.push_back("update"); + hg_update.push_back("-v"); + + // Add user-specified update options. + std::string opts = this->CTest->GetCTestConfiguration("UpdateOptions"); + if(opts.empty()) + { + opts = this->CTest->GetCTestConfiguration("HGUpdateOptions"); + } + std::vector args = cmSystemTools::ParseArguments(opts.c_str()); + for(std::vector::const_iterator ai = args.begin(); + ai != args.end(); ++ai) + { + hg_update.push_back(ai->c_str()); + } + + // Sentinel argument. + hg_update.push_back(0); + + OutputLogger out(this->Log, "update-out> "); + OutputLogger err(this->Log, "update-err> "); + return this->RunUpdateCommand(&hg_update[0], &out, &err); +} + +//---------------------------------------------------------------------------- +class cmCTestHG::LogParser: public cmCTestVC::OutputLogger, + private cmXMLParser +{ +public: + LogParser(cmCTestHG* hg, const char* prefix): + OutputLogger(hg->Log, prefix), HG(hg) { this->InitializeParser(); } + ~LogParser() { this->CleanupParser(); } +private: + cmCTestHG* HG; + + typedef cmCTestHG::Revision Revision; + typedef cmCTestHG::Change Change; + Revision Rev; + std::vector Changes; + Change CurChange; + std::vector CData; + + virtual bool ProcessChunk(const char* data, int length) + { + this->OutputLogger::ProcessChunk(data, length); + this->ParseChunk(data, length); + return true; + } + + virtual void StartElement(const char* name, const char** atts) + { + this->CData.clear(); + if(strcmp(name, "logentry") == 0) + { + this->Rev = Revision(); + if(const char* rev = this->FindAttribute(atts, "revision")) + { + this->Rev.Rev = rev; + } + this->Changes.clear(); + } + } + + virtual void CharacterDataHandler(const char* data, int length) + { + this->CData.insert(this->CData.end(), data, data+length); + } + + virtual void EndElement(const char* name) + { + if(strcmp(name, "logentry") == 0) + { + this->HG->DoRevision(this->Rev, this->Changes); + } + else if(strcmp(name, "author") == 0 && !this->CData.empty()) + { + this->Rev.Author.assign(&this->CData[0], this->CData.size()); + } + else if ( strcmp(name, "email") == 0 && !this->CData.empty()) + { + this->Rev.EMail.assign(&this->CData[0], this->CData.size()); + } + else if(strcmp(name, "date") == 0 && !this->CData.empty()) + { + this->Rev.Date.assign(&this->CData[0], this->CData.size()); + } + else if(strcmp(name, "msg") == 0 && !this->CData.empty()) + { + this->Rev.Log.assign(&this->CData[0], this->CData.size()); + } + else if(strcmp(name, "files") == 0 && !this->CData.empty()) + { + std::vector paths = this->SplitCData(); + for(unsigned int i = 0; i < paths.size(); ++i) + { + // Updated by default, will be modified using file_adds and + // file_dels. + this->CurChange = Change('U'); + this->CurChange.Path = paths[i]; + this->Changes.push_back(this->CurChange); + } + } + else if(strcmp(name, "file_adds") == 0 && !this->CData.empty()) + { + std::string added_paths(this->CData.begin(), this->CData.end()); + for(unsigned int i = 0; i < this->Changes.size(); ++i) + { + if(added_paths.find(this->Changes[i].Path) != std::string::npos) + { + this->Changes[i].Action = 'A'; + } + } + } + else if(strcmp(name, "file_dels") == 0 && !this->CData.empty()) + { + std::string added_paths(this->CData.begin(), this->CData.end()); + for(unsigned int i = 0; i < this->Changes.size(); ++i) + { + if(added_paths.find(this->Changes[i].Path) != std::string::npos) + { + this->Changes[i].Action = 'D'; + } + } + } + this->CData.clear(); + } + + std::vector SplitCData() + { + std::vector output; + std::string currPath; + for(unsigned int i=0; i < this->CData.size(); ++i) + { + if(this->CData[i] != ' ') + { + currPath += this->CData[i]; + } + else + { + output.push_back(currPath); + currPath = ""; + } + } + output.push_back(currPath); + return output; + } + + virtual void ReportError(int, int, const char* msg) + { + this->HG->Log << "Error parsing hg log xml: " << msg << "\n"; + } +}; + +//---------------------------------------------------------------------------- +void cmCTestHG::LoadRevisions() +{ + // Use 'hg log' to get revisions in a xml format. + // + // TODO: This should use plumbing or python code to be more precise. + // The "list of strings" templates like {files} will not work when + // the project has spaces in the path. Also, they may not have + // proper XML escapes. + std::string range = this->OldRevision + ":" + this->NewRevision; + const char* hg = this->CommandLineTool.c_str(); + const char* hgXMLTemplate = + "\n" + " {author|person}\n" + " {author|email}\n" + " {date|isodate}\n" + " {desc}\n" + " {files}\n" + " {file_adds}\n" + " {file_dels}\n" + "\n"; + const char* hg_log[] = {hg, "log","--removed", "-r", range.c_str(), + "--template", hgXMLTemplate, 0}; + + LogParser out(this, "log-out> "); + out.Process("\n" + "\n"); + OutputLogger err(this->Log, "log-err> "); + this->RunChild(hg_log, &out, &err); + out.Process("\n"); +} + +//---------------------------------------------------------------------------- +void cmCTestHG::LoadModifications() +{ + // Use 'hg status' to get modified files. + const char* hg = this->CommandLineTool.c_str(); + const char* hg_status[] = {hg, "status", 0}; + StatusParser out(this, "status-out> "); + OutputLogger err(this->Log, "status-err> "); + this->RunChild(hg_status, &out, &err); +} diff --git a/Source/CTest/cmCTestHG.h b/Source/CTest/cmCTestHG.h new file mode 100644 index 0000000..1eaf933 --- /dev/null +++ b/Source/CTest/cmCTestHG.h @@ -0,0 +1,47 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestHG_h +#define cmCTestHG_h + +#include "cmCTestGlobalVC.h" + +/** \class cmCTestHG + * \brief Interaction with Mercurial command-line tool + * + */ +class cmCTestHG: public cmCTestGlobalVC +{ +public: + /** Construct with a CTest instance and update log stream. */ + cmCTestHG(cmCTest* ctest, std::ostream& log); + + virtual ~cmCTestHG(); + +private: + std::string GetWorkingRevision(); + virtual void NoteOldRevision(); + virtual void NoteNewRevision(); + virtual bool UpdateImpl(); + + void LoadRevisions(); + void LoadModifications(); + + // Parsing helper classes. + class IdentifyParser; + class StatusParser; + class LogParser; + friend class IdentifyParser; + friend class StatusParser; + friend class LogParser; +}; + +#endif diff --git a/Source/CTest/cmCTestHandlerCommand.cxx b/Source/CTest/cmCTestHandlerCommand.cxx new file mode 100644 index 0000000..1957e04 --- /dev/null +++ b/Source/CTest/cmCTestHandlerCommand.cxx @@ -0,0 +1,197 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestHandlerCommand.h" + +#include "cmCTest.h" +#include "cmCTestGenericHandler.h" + +cmCTestHandlerCommand::cmCTestHandlerCommand() +{ + const size_t INIT_SIZE = 100; + size_t cc; + this->Arguments.reserve(INIT_SIZE); + for ( cc = 0; cc < INIT_SIZE; ++ cc ) + { + this->Arguments.push_back(0); + } + this->Arguments[ct_RETURN_VALUE] = "RETURN_VALUE"; + this->Arguments[ct_SOURCE] = "SOURCE"; + this->Arguments[ct_BUILD] = "BUILD"; + this->Arguments[ct_SUBMIT_INDEX] = "SUBMIT_INDEX"; + this->Last = ct_LAST; + this->AppendXML = false; +} + +bool cmCTestHandlerCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + // Allocate space for argument values. + this->Values.clear(); + this->Values.resize(this->Last, 0); + + // Process input arguments. + this->ArgumentDoing = ArgumentDoingNone; + for(unsigned int i=0; i < args.size(); ++i) + { + // Check this argument. + if(!this->CheckArgumentKeyword(args[i]) && + !this->CheckArgumentValue(args[i])) + { + cmOStringStream e; + e << "called with unknown argument \"" << args[i] << "\"."; + this->SetError(e.str().c_str()); + return false; + } + + // Quit if an argument is invalid. + if(this->ArgumentDoing == ArgumentDoingError) + { + return false; + } + } + + // Set the config type of this ctest to the current value of the + // CTEST_CONFIGURATION_TYPE script variable if it is defined. + // The current script value trumps the -C argument on the command + // line. + const char* ctestConfigType = + this->Makefile->GetDefinition("CTEST_CONFIGURATION_TYPE"); + if (ctestConfigType) + { + this->CTest->SetConfigType(ctestConfigType); + } + + cmCTestLog(this->CTest, DEBUG, "Initialize handler" << std::endl;); + cmCTestGenericHandler* handler = this->InitializeHandler(); + if ( !handler ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot instantiate test handler " << this->GetName() + << std::endl); + return false; + } + + handler->SetAppendXML(this->AppendXML); + + handler->PopulateCustomVectors(this->Makefile); + if ( this->Values[ct_BUILD] ) + { + this->CTest->SetCTestConfiguration("BuildDirectory", + cmSystemTools::CollapseFullPath( + this->Values[ct_BUILD]).c_str()); + } + else + { + const char* bdir = + this->Makefile->GetSafeDefinition("CTEST_BINARY_DIRECTORY"); + if(bdir) + { + this-> + CTest->SetCTestConfiguration("BuildDirectory", + cmSystemTools::CollapseFullPath(bdir).c_str()); + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "CTEST_BINARY_DIRECTORY not set" << std::endl;); + } + } + if ( this->Values[ct_SOURCE] ) + { + cmCTestLog(this->CTest, DEBUG, + "Set source directory to: " << this->Values[ct_SOURCE] << std::endl); + this->CTest->SetCTestConfiguration("SourceDirectory", + cmSystemTools::CollapseFullPath( + this->Values[ct_SOURCE]).c_str()); + } + else + { + this->CTest->SetCTestConfiguration("SourceDirectory", + cmSystemTools::CollapseFullPath( + this->Makefile->GetSafeDefinition("CTEST_SOURCE_DIRECTORY")).c_str()); + } + if ( this->Values[ct_SUBMIT_INDEX] ) + { + if ( this->CTest->GetDartVersion() <= 1 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Dart before version 2.0 does not support collecting submissions." + << std::endl + << "Please upgrade the server to Dart 2 or higher, or do not use " + "SUBMIT_INDEX." << std::endl); + } + else + { + handler->SetSubmitIndex(atoi(this->Values[ct_SUBMIT_INDEX])); + } + } + std::string current_dir = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::ChangeDirectory( + this->CTest->GetCTestConfiguration("BuildDirectory").c_str()); + int res = handler->ProcessHandler(); + if ( this->Values[ct_RETURN_VALUE] && *this->Values[ct_RETURN_VALUE]) + { + cmOStringStream str; + str << res; + this->Makefile->AddDefinition( + this->Values[ct_RETURN_VALUE], str.str().c_str()); + } + cmSystemTools::ChangeDirectory(current_dir.c_str()); + return true; +} + +//---------------------------------------------------------------------------- +bool cmCTestHandlerCommand::CheckArgumentKeyword(std::string const& arg) +{ + // Look for non-value arguments common to all commands. + if(arg == "APPEND") + { + this->ArgumentDoing = ArgumentDoingNone; + this->AppendXML = true; + return true; + } + + // Check for a keyword in our argument/value table. + for(unsigned int k=0; k < this->Arguments.size(); ++k) + { + if(this->Arguments[k] && arg == this->Arguments[k]) + { + this->ArgumentDoing = ArgumentDoingKeyword; + this->ArgumentIndex = k; + return true; + } + } + return false; +} + +//---------------------------------------------------------------------------- +bool cmCTestHandlerCommand::CheckArgumentValue(std::string const& arg) +{ + if(this->ArgumentDoing == ArgumentDoingKeyword) + { + this->ArgumentDoing = ArgumentDoingNone; + unsigned int k = this->ArgumentIndex; + if(this->Values[k]) + { + cmOStringStream e; + e << "Called with more than one value for " << this->Arguments[k]; + this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); + this->ArgumentDoing = ArgumentDoingError; + return true; + } + this->Values[k] = arg.c_str(); + cmCTestLog(this->CTest, DEBUG, "Set " << this->Arguments[k] + << " to " << arg << "\n"); + return true; + } + return false; +} diff --git a/Source/CTest/cmCTestHandlerCommand.h b/Source/CTest/cmCTestHandlerCommand.h new file mode 100644 index 0000000..8ef2b80 --- /dev/null +++ b/Source/CTest/cmCTestHandlerCommand.h @@ -0,0 +1,77 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestHandlerCommand_h +#define cmCTestHandlerCommand_h + +#include "cmCTestCommand.h" + +class cmCTestGenericHandler; + +/** \class cmCTestHandler + * \brief Run a ctest script + * + * cmCTestHandlerCommand defineds the command to test the project. + */ +class cmCTestHandlerCommand : public cmCTestCommand +{ +public: + cmCTestHandlerCommand(); + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + cmTypeMacro(cmCTestHandlerCommand, cmCTestCommand); + + enum + { + ct_NONE, + ct_RETURN_VALUE, + ct_BUILD, + ct_SOURCE, + ct_SUBMIT_INDEX, + ct_LAST + }; + +protected: + virtual cmCTestGenericHandler* InitializeHandler() = 0; + + // Command argument handling. + virtual bool CheckArgumentKeyword(std::string const& arg); + virtual bool CheckArgumentValue(std::string const& arg); + enum + { + ArgumentDoingNone, + ArgumentDoingError, + ArgumentDoingKeyword, + ArgumentDoingLast1 + }; + int ArgumentDoing; + unsigned int ArgumentIndex; + + bool AppendXML; + + std::string ReturnVariable; + std::vector Arguments; + std::vector Values; + size_t Last; +}; + +#define CTEST_COMMAND_APPEND_OPTION_DOCS \ + "The APPEND option marks results for append to those previously " \ + "submitted to a dashboard server since the last ctest_start. " \ + "Append semantics are defined by the dashboard server in use." + +#endif diff --git a/Source/CTest/cmCTestLaunch.cxx b/Source/CTest/cmCTestLaunch.cxx new file mode 100644 index 0000000..9831d02 --- /dev/null +++ b/Source/CTest/cmCTestLaunch.cxx @@ -0,0 +1,719 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestLaunch.h" + +#include "cmGeneratedFileStream.h" +#include "cmSystemTools.h" +#include "cmXMLSafe.h" +#include "cmake.h" + +#include +#include +#include + +//---------------------------------------------------------------------------- +cmCTestLaunch::cmCTestLaunch(int argc, const char* const* argv) +{ + this->Passthru = true; + this->Process = 0; + this->ExitCode = 1; + this->CWD = cmSystemTools::GetCurrentWorkingDirectory(); + + if(!this->ParseArguments(argc, argv)) + { + return; + } + + this->ComputeFileNames(); + + this->ScrapeRulesLoaded = false; + this->HaveOut = false; + this->HaveErr = false; + this->Process = cmsysProcess_New(); +} + +//---------------------------------------------------------------------------- +cmCTestLaunch::~cmCTestLaunch() +{ + cmsysProcess_Delete(this->Process); + if(!this->Passthru) + { + cmSystemTools::RemoveFile(this->LogOut.c_str()); + cmSystemTools::RemoveFile(this->LogErr.c_str()); + } +} + +//---------------------------------------------------------------------------- +bool cmCTestLaunch::ParseArguments(int argc, const char* const* argv) +{ + // Launcher options occur first and are separated from the real + // command line by a '--' option. + enum Doing { DoingNone, + DoingOutput, + DoingSource, + DoingLanguage, + DoingTargetName, + DoingTargetType, + DoingBuildDir, + DoingCount }; + Doing doing = DoingNone; + int arg0 = 0; + for(int i=1; !arg0 && i < argc; ++i) + { + const char* arg = argv[i]; + if(strcmp(arg, "--") == 0) + { + arg0 = i+1; + } + else if(strcmp(arg, "--output") == 0) + { + doing = DoingOutput; + } + else if(strcmp(arg, "--source") == 0) + { + doing = DoingSource; + } + else if(strcmp(arg, "--language") == 0) + { + doing = DoingLanguage; + } + else if(strcmp(arg, "--target-name") == 0) + { + doing = DoingTargetName; + } + else if(strcmp(arg, "--target-type") == 0) + { + doing = DoingTargetType; + } + else if(strcmp(arg, "--build-dir") == 0) + { + doing = DoingBuildDir; + } + else if(doing == DoingOutput) + { + this->OptionOutput = arg; + doing = DoingNone; + } + else if(doing == DoingSource) + { + this->OptionSource = arg; + doing = DoingNone; + } + else if(doing == DoingLanguage) + { + this->OptionLanguage = arg; + if(this->OptionLanguage == "CXX") + { + this->OptionLanguage = "C++"; + } + doing = DoingNone; + } + else if(doing == DoingTargetName) + { + this->OptionTargetName = arg; + doing = DoingNone; + } + else if(doing == DoingTargetType) + { + this->OptionTargetType = arg; + doing = DoingNone; + } + else if(doing == DoingBuildDir) + { + this->OptionBuildDir = arg; + doing = DoingNone; + } + } + + // Extract the real command line. + if(arg0) + { + this->RealArgC = argc - arg0; + this->RealArgV = argv + arg0; + for(int i=0; i < this->RealArgC; ++i) + { + this->HandleRealArg(this->RealArgV[i]); + } + return true; + } + else + { + this->RealArgC = 0; + this->RealArgV = 0; + std::cerr << "No launch/command separator ('--') found!\n"; + return false; + } +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::HandleRealArg(const char* arg) +{ +#ifdef _WIN32 + // Expand response file arguments. + if(arg[0] == '@' && cmSystemTools::FileExists(arg+1)) + { + std::ifstream fin(arg+1); + std::string line; + while(cmSystemTools::GetLineFromStream(fin, line)) + { + cmSystemTools::ParseWindowsCommandLine(line.c_str(), this->RealArgs); + } + return; + } +#endif + this->RealArgs.push_back(arg); +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::ComputeFileNames() +{ + // We just passthru the behavior of the real command unless the + // CTEST_LAUNCH_LOGS environment variable is set. + const char* d = getenv("CTEST_LAUNCH_LOGS"); + if(!(d && *d)) + { + return; + } + this->Passthru = false; + + // The environment variable specifies the directory into which we + // generate build logs. + this->LogDir = d; + cmSystemTools::ConvertToUnixSlashes(this->LogDir); + this->LogDir += "/"; + + // We hash the input command working dir and command line to obtain + // a repeatable and (probably) unique name for log files. + char hash[32]; + cmsysMD5* md5 = cmsysMD5_New(); + cmsysMD5_Initialize(md5); + cmsysMD5_Append(md5, (unsigned char const*)(this->CWD.c_str()), -1); + for(std::vector::const_iterator ai = this->RealArgs.begin(); + ai != this->RealArgs.end(); ++ai) + { + cmsysMD5_Append(md5, (unsigned char const*)ai->c_str(), -1); + } + cmsysMD5_FinalizeHex(md5, hash); + cmsysMD5_Delete(md5); + this->LogHash.assign(hash, 32); + + // We store stdout and stderr in temporary log files. + this->LogOut = this->LogDir; + this->LogOut += "launch-"; + this->LogOut += this->LogHash; + this->LogOut += "-out.txt"; + this->LogErr = this->LogDir; + this->LogErr += "launch-"; + this->LogErr += this->LogHash; + this->LogErr += "-err.txt"; +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::RunChild() +{ + // Ignore noopt make rules + if(this->RealArgs.empty() || this->RealArgs[0] == ":") + { + this->ExitCode = 0; + return; + } + + // Prepare to run the real command. + cmsysProcess* cp = this->Process; + cmsysProcess_SetCommand(cp, this->RealArgV); + + std::ofstream fout; + std::ofstream ferr; + if(this->Passthru) + { + // In passthru mode we just share the output pipes. + cmsysProcess_SetPipeShared(cp, cmsysProcess_Pipe_STDOUT, 1); + cmsysProcess_SetPipeShared(cp, cmsysProcess_Pipe_STDERR, 1); + } + else + { + // In full mode we record the child output pipes to log files. + fout.open(this->LogOut.c_str(), + std::ios::out | std::ios::binary); + ferr.open(this->LogErr.c_str(), + std::ios::out | std::ios::binary); + } + + // Run the real command. + cmsysProcess_Execute(cp); + + // Record child stdout and stderr if necessary. + if(!this->Passthru) + { + char* data = 0; + int length = 0; + while(int p = cmsysProcess_WaitForData(cp, &data, &length, 0)) + { + if(p == cmsysProcess_Pipe_STDOUT) + { + fout.write(data, length); + std::cout.write(data, length); + this->HaveOut = true; + } + else if(p == cmsysProcess_Pipe_STDERR) + { + ferr.write(data, length); + std::cerr.write(data, length); + this->HaveErr = true; + } + } + } + + // Wait for the real command to finish. + cmsysProcess_WaitForExit(cp, 0); + this->ExitCode = cmsysProcess_GetExitValue(cp); +} + +//---------------------------------------------------------------------------- +int cmCTestLaunch::Run() +{ + if(!this->Process) + { + std::cerr << "Could not allocate cmsysProcess instance!\n"; + return -1; + } + + this->RunChild(); + + if(this->CheckResults()) + { + return this->ExitCode; + } + + this->LoadConfig(); + this->WriteXML(); + + return this->ExitCode; +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::LoadLabels() +{ + if(this->OptionBuildDir.empty() || this->OptionTargetName.empty()) + { + return; + } + + // Labels are listed in per-target files. + std::string fname = this->OptionBuildDir; + fname += cmake::GetCMakeFilesDirectory(); + fname += "/"; + fname += this->OptionTargetName; + fname += ".dir/Labels.txt"; + + // We are interested in per-target labels for this source file. + std::string source = this->OptionSource; + cmSystemTools::ConvertToUnixSlashes(source); + + // Load the labels file. + std::ifstream fin(fname.c_str(), std::ios::in | std::ios::binary); + if(!fin) { return; } + bool inTarget = true; + bool inSource = false; + std::string line; + while(cmSystemTools::GetLineFromStream(fin, line)) + { + if(line.empty() || line[0] == '#') + { + // Ignore blank and comment lines. + continue; + } + else if(line[0] == ' ') + { + // Label lines appear indented by one space. + if(inTarget || inSource) + { + this->Labels.insert(line.c_str()+1); + } + } + else if(!this->OptionSource.empty() && !inSource) + { + // Non-indented lines specify a source file name. The first one + // is the end of the target-wide labels. Use labels following a + // matching source. + inTarget = false; + inSource = this->SourceMatches(line, source); + } + else + { + return; + } + } +} + +//---------------------------------------------------------------------------- +bool cmCTestLaunch::SourceMatches(std::string const& lhs, + std::string const& rhs) +{ + // TODO: Case sensitivity, UseRelativePaths, etc. Note that both + // paths in the comparison get generated by CMake. This is done for + // every source in the target, so it should be efficient (cannot use + // cmSystemTools::IsSameFile). + return lhs == rhs; +} + +//---------------------------------------------------------------------------- +bool cmCTestLaunch::IsError() const +{ + return this->ExitCode != 0; +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::WriteXML() +{ + // Name the xml file. + std::string logXML = this->LogDir; + logXML += this->IsError()? "error-" : "warning-"; + logXML += this->LogHash; + logXML += ".xml"; + + // Use cmGeneratedFileStream to atomically create the report file. + cmGeneratedFileStream fxml(logXML.c_str()); + fxml << "\tIsError()? "Error" : "Warning") << "\">\n"; + this->WriteXMLAction(fxml); + this->WriteXMLCommand(fxml); + this->WriteXMLResult(fxml); + this->WriteXMLLabels(fxml); + fxml << "\t\n"; +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::WriteXMLAction(std::ostream& fxml) +{ + fxml << "\t\t\n"; + fxml << "\t\t\n"; + + // TargetName + if(!this->OptionTargetName.empty()) + { + fxml << "\t\t\t" + << cmXMLSafe(this->OptionTargetName) + << "\n"; + } + + // Language + if(!this->OptionLanguage.empty()) + { + fxml << "\t\t\t" + << cmXMLSafe(this->OptionLanguage) + << "\n"; + } + + // SourceFile + if(!this->OptionSource.empty()) + { + std::string source = this->OptionSource; + cmSystemTools::ConvertToUnixSlashes(source); + + // If file is in source tree use its relative location. + if(cmSystemTools::FileIsFullPath(this->SourceDir.c_str()) && + cmSystemTools::FileIsFullPath(source.c_str()) && + cmSystemTools::IsSubDirectory(source.c_str(), + this->SourceDir.c_str())) + { + source = cmSystemTools::RelativePath(this->SourceDir.c_str(), + source.c_str()); + } + + fxml << "\t\t\t" + << cmXMLSafe(source) + << "\n"; + } + + // OutputFile + if(!this->OptionOutput.empty()) + { + fxml << "\t\t\t" + << cmXMLSafe(this->OptionOutput) + << "\n"; + } + + // OutputType + const char* outputType = 0; + if(!this->OptionTargetType.empty()) + { + if(this->OptionTargetType == "EXECUTABLE") + { + outputType = "executable"; + } + else if(this->OptionTargetType == "SHARED_LIBRARY") + { + outputType = "shared library"; + } + else if(this->OptionTargetType == "MODULE_LIBRARY") + { + outputType = "module library"; + } + else if(this->OptionTargetType == "STATIC_LIBRARY") + { + outputType = "static library"; + } + } + else if(!this->OptionSource.empty()) + { + outputType = "object file"; + } + if(outputType) + { + fxml << "\t\t\t" + << cmXMLSafe(outputType) + << "\n"; + } + + fxml << "\t\t\n"; +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::WriteXMLCommand(std::ostream& fxml) +{ + fxml << "\n"; + fxml << "\t\t\n"; + fxml << "\t\t\n"; + if(!this->CWD.empty()) + { + fxml << "\t\t\t" + << cmXMLSafe(this->CWD) + << "\n"; + } + for(std::vector::const_iterator ai = this->RealArgs.begin(); + ai != this->RealArgs.end(); ++ai) + { + fxml << "\t\t\t" + << cmXMLSafe(ai->c_str()) + << "\n"; + } + fxml << "\t\t\n"; +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::WriteXMLResult(std::ostream& fxml) +{ + fxml << "\n"; + fxml << "\t\t\n"; + fxml << "\t\t\n"; + + // StdOut + fxml << "\t\t\t"; + this->DumpFileToXML(fxml, this->LogOut); + fxml << "\n"; + + // StdErr + fxml << "\t\t\t"; + this->DumpFileToXML(fxml, this->LogErr); + fxml << "\n"; + + // ExitCondition + fxml << "\t\t\t"; + cmsysProcess* cp = this->Process; + switch (cmsysProcess_GetState(cp)) + { + case cmsysProcess_State_Starting: + fxml << "No process has been executed"; break; + case cmsysProcess_State_Executing: + fxml << "The process is still executing"; break; + case cmsysProcess_State_Disowned: + fxml << "Disowned"; break; + case cmsysProcess_State_Killed: + fxml << "Killed by parent"; break; + + case cmsysProcess_State_Expired: + fxml << "Killed when timeout expired"; break; + case cmsysProcess_State_Exited: + fxml << this->ExitCode; break; + case cmsysProcess_State_Exception: + fxml << "Terminated abnormally: " + << cmXMLSafe(cmsysProcess_GetExceptionString(cp)); break; + case cmsysProcess_State_Error: + fxml << "Error administrating child process: " + << cmXMLSafe(cmsysProcess_GetErrorString(cp)); break; + }; + fxml << "\n"; + + fxml << "\t\t\n"; +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::WriteXMLLabels(std::ostream& fxml) +{ + this->LoadLabels(); + if(!this->Labels.empty()) + { + fxml << "\n"; + fxml << "\t\t\n"; + fxml << "\t\t\n"; + for(std::set::const_iterator li = this->Labels.begin(); + li != this->Labels.end(); ++li) + { + fxml << "\t\t\t\n"; + } + fxml << "\t\t\n"; + } +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::DumpFileToXML(std::ostream& fxml, + std::string const& fname) +{ + std::ifstream fin(fname.c_str(), std::ios::in | std::ios::binary); + + std::string line; + const char* sep = ""; + while(cmSystemTools::GetLineFromStream(fin, line)) + { + fxml << sep << cmXMLSafe(line).Quotes(false); + sep = "\n"; + } +} + +//---------------------------------------------------------------------------- +bool cmCTestLaunch::CheckResults() +{ + // Skip XML in passthru mode. + if(this->Passthru) + { + return true; + } + + // We always report failure for error conditions. + if(this->IsError()) + { + return false; + } + + // Scrape the output logs to look for warnings. + if((this->HaveErr && this->ScrapeLog(this->LogErr)) || + (this->HaveOut && this->ScrapeLog(this->LogOut))) + { + return false; + } + return true; +} + +//---------------------------------------------------------------------------- +void cmCTestLaunch::LoadScrapeRules() +{ + if(this->ScrapeRulesLoaded) + { + return; + } + this->ScrapeRulesLoaded = true; + + // Common compiler warning formats. These are much simpler than the + // full log-scraping expressions because we do not need to extract + // file and line information. + this->RegexWarning.push_back("(^|[ :])[Ww][Aa][Rr][Nn][Ii][Nn][Gg]"); + this->RegexWarning.push_back("(^|[ :])[Rr][Ee][Mm][Aa][Rr][Kk]"); + this->RegexWarning.push_back("(^|[ :])[Nn][Oo][Tt][Ee]"); + + // Load custom match rules given to us by CTest. + this->LoadScrapeRules("Warning", this->RegexWarning); + this->LoadScrapeRules("WarningSuppress", this->RegexWarningSuppress); +} + +//---------------------------------------------------------------------------- +void +cmCTestLaunch +::LoadScrapeRules(const char* purpose, + std::vector& regexps) +{ + std::string fname = this->LogDir; + fname += "Custom"; + fname += purpose; + fname += ".txt"; + std::ifstream fin(fname.c_str(), std::ios::in | std::ios::binary); + std::string line; + cmsys::RegularExpression rex; + while(cmSystemTools::GetLineFromStream(fin, line)) + { + if(rex.compile(line.c_str())) + { + regexps.push_back(rex); + } + } +} + +//---------------------------------------------------------------------------- +bool cmCTestLaunch::ScrapeLog(std::string const& fname) +{ + this->LoadScrapeRules(); + + // Look for log file lines matching warning expressions but not + // suppression expressions. + std::ifstream fin(fname.c_str(), std::ios::in | std::ios::binary); + std::string line; + while(cmSystemTools::GetLineFromStream(fin, line)) + { + if(this->Match(line.c_str(), this->RegexWarning) && + !this->Match(line.c_str(), this->RegexWarningSuppress)) + { + return true; + } + } + return false; +} + +//---------------------------------------------------------------------------- +bool cmCTestLaunch::Match(std::string const& line, + std::vector& regexps) +{ + for(std::vector::iterator ri = regexps.begin(); + ri != regexps.end(); ++ri) + { + if(ri->find(line.c_str())) + { + return true; + } + } + return false; +} + +//---------------------------------------------------------------------------- +int cmCTestLaunch::Main(int argc, const char* const argv[]) +{ + if(argc == 2) + { + std::cerr << "ctest --launch: this mode is for internal CTest use only" + << std::endl; + return 1; + } + cmCTestLaunch self(argc, argv); + return self.Run(); +} + +//---------------------------------------------------------------------------- +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmMakefile.h" +#include "cmake.h" +#include +void cmCTestLaunch::LoadConfig() +{ + cmake cm; + cmGlobalGenerator gg; + gg.SetCMakeInstance(&cm); + cmsys::auto_ptr lg(gg.CreateLocalGenerator()); + cmMakefile* mf = lg->GetMakefile(); + std::string fname = this->LogDir; + fname += "CTestLaunchConfig.cmake"; + if(cmSystemTools::FileExists(fname.c_str()) && + mf->ReadListFile(0, fname.c_str())) + { + this->SourceDir = mf->GetSafeDefinition("CTEST_SOURCE_DIRECTORY"); + cmSystemTools::ConvertToUnixSlashes(this->SourceDir); + } +} diff --git a/Source/CTest/cmCTestLaunch.h b/Source/CTest/cmCTestLaunch.h new file mode 100644 index 0000000..7457e83 --- /dev/null +++ b/Source/CTest/cmCTestLaunch.h @@ -0,0 +1,104 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestLaunch_h +#define cmCTestLaunch_h + +#include "cmStandardIncludes.h" +#include + +/** \class cmCTestLaunch + * \brief Launcher for make rules to report results for ctest + * + * This implements the 'ctest --launch' tool. + */ +class cmCTestLaunch +{ +public: + /** Entry point from ctest executable main(). */ + static int Main(int argc, const char* const argv[]); +private: + // Initialize the launcher from its command line. + cmCTestLaunch(int argc, const char* const* argv); + ~cmCTestLaunch(); + + // Run the real command. + int Run(); + void RunChild(); + + // Methods to check the result of the real command. + bool IsError() const; + bool CheckResults(); + + // Launcher options specified before the real command. + std::string OptionOutput; + std::string OptionSource; + std::string OptionLanguage; + std::string OptionTargetName; + std::string OptionTargetType; + std::string OptionBuildDir; + bool ParseArguments(int argc, const char* const* argv); + + // The real command line appearing after launcher arguments. + int RealArgC; + const char* const* RealArgV; + std::string CWD; + + // The real command line after response file expansion. + std::vector RealArgs; + void HandleRealArg(const char* arg); + + // A hash of the real command line is unique and unlikely to collide. + std::string LogHash; + void ComputeFileNames(); + + bool Passthru; + struct cmsysProcess_s* Process; + int ExitCode; + + // Temporary log files for stdout and stderr of real command. + std::string LogDir; + std::string LogOut; + std::string LogErr; + bool HaveOut; + bool HaveErr; + + // Labels associated with the build rule. + std::set Labels; + void LoadLabels(); + bool SourceMatches(std::string const& lhs, + std::string const& rhs); + + // Regular expressions to match warnings and their exceptions. + bool ScrapeRulesLoaded; + std::vector RegexWarning; + std::vector RegexWarningSuppress; + void LoadScrapeRules(); + void LoadScrapeRules(const char* purpose, + std::vector& regexps); + bool ScrapeLog(std::string const& fname); + bool Match(std::string const& line, + std::vector& regexps); + + // Methods to generate the xml fragment. + void WriteXML(); + void WriteXMLAction(std::ostream& fxml); + void WriteXMLCommand(std::ostream& fxml); + void WriteXMLResult(std::ostream& fxml); + void WriteXMLLabels(std::ostream& fxml); + void DumpFileToXML(std::ostream& fxml, std::string const& fname); + + // Configuration + void LoadConfig(); + std::string SourceDir; +}; + +#endif diff --git a/Source/CTest/cmCTestMemCheckCommand.cxx b/Source/CTest/cmCTestMemCheckCommand.cxx new file mode 100644 index 0000000..535c993 --- /dev/null +++ b/Source/CTest/cmCTestMemCheckCommand.cxx @@ -0,0 +1,32 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestMemCheckCommand.h" + +#include "cmCTest.h" +#include "cmCTestGenericHandler.h" + + +cmCTestGenericHandler* cmCTestMemCheckCommand::InitializeActualHandler() +{ + cmCTestGenericHandler* handler + = this->CTest->GetInitializedHandler("memcheck"); + + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "MemoryCheckCommand", "CTEST_MEMORYCHECK_COMMAND"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "MemoryCheckCommandOptions", "CTEST_MEMORYCHECK_COMMAND_OPTIONS"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "MemoryCheckSuppressionFile", "CTEST_MEMORYCHECK_SUPPRESSIONS_FILE"); + + return handler; +} + diff --git a/Source/CTest/cmCTestMemCheckCommand.h b/Source/CTest/cmCTestMemCheckCommand.h new file mode 100644 index 0000000..399fe8b --- /dev/null +++ b/Source/CTest/cmCTestMemCheckCommand.h @@ -0,0 +1,88 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestMemCheckCommand_h +#define cmCTestMemCheckCommand_h + +#include "cmCTestTestCommand.h" + +class cmCTestGenericHandler; + +/** \class cmCTestMemCheck + * \brief Run a ctest script + * + * cmCTestMemCheckCommand defineds the command to test the project. + */ +class cmCTestMemCheckCommand : public cmCTestTestCommand +{ +public: + + cmCTestMemCheckCommand() {} + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestMemCheckCommand* ni = new cmCTestMemCheckCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_memcheck";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Run tests with a dynamic analysis tool."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_memcheck([BUILD build_dir] [RETURN_VALUE res] [APPEND]\n" + " [START start number] [END end number]\n" + " [STRIDE stride number] [EXCLUDE exclude regex ]\n" + " [INCLUDE include regex] \n" + " [EXCLUDE_LABEL exclude regex] \n" + " [INCLUDE_LABEL label regex] \n" + " [PARALLEL_LEVEL level] )\n" + "Tests the given build directory and stores results in MemCheck.xml. " + "The second argument is a variable that will hold value. Optionally, " + "you can specify the starting test number START, the ending test number " + "END, the number of tests to skip between each test STRIDE, a regular " + "expression for tests to run INCLUDE, or a regular expression for tests " + "not to run EXCLUDE. EXCLUDE_LABEL and INCLUDE_LABEL are regular " + "expressions for tests to be included or excluded by the test " + "property LABEL. PARALLEL_LEVEL should be set to a positive number " + "representing the number of tests to be run in parallel." + "\n" + CTEST_COMMAND_APPEND_OPTION_DOCS; + } + + cmTypeMacro(cmCTestMemCheckCommand, cmCTestTestCommand); + +protected: + cmCTestGenericHandler* InitializeActualHandler(); +}; + + +#endif + diff --git a/Source/CTest/cmCTestMemCheckHandler.cxx b/Source/CTest/cmCTestMemCheckHandler.cxx new file mode 100644 index 0000000..035aaa9 --- /dev/null +++ b/Source/CTest/cmCTestMemCheckHandler.cxx @@ -0,0 +1,955 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCTestMemCheckHandler.h" +#include "cmXMLParser.h" +#include "cmCTest.h" +#include "cmake.h" +#include "cmGeneratedFileStream.h" +#include +#include +#include +#include "cmMakefile.h" +#include "cmXMLSafe.h" + +#include +#include +#include + +struct CatToErrorType +{ + const char* ErrorCategory; + int ErrorCode; +}; + + +static CatToErrorType cmCTestMemCheckBoundsChecker[] = { + // Error tags + {"Write Overrun", cmCTestMemCheckHandler::ABW}, + {"Read Overrun", cmCTestMemCheckHandler::ABR}, + {"Memory Overrun", cmCTestMemCheckHandler::ABW}, + {"Allocation Conflict", cmCTestMemCheckHandler::FMM}, + {"Bad Pointer Use", cmCTestMemCheckHandler::FMW}, + {"Dangling Pointer", cmCTestMemCheckHandler::FMR}, + {0,0} +}; + +// parse the xml file storing the installed version of Xcode on +// the machine +class cmBoundsCheckerParser : public cmXMLParser +{ +public: + cmBoundsCheckerParser(cmCTest* c) { this->CTest = c;} + void StartElement(const char* name, const char** atts) + { + if(strcmp(name, "MemoryLeak") == 0) + { + this->Errors.push_back(cmCTestMemCheckHandler::MLK); + } + if(strcmp(name, "ResourceLeak") == 0) + { + this->Errors.push_back(cmCTestMemCheckHandler::MLK); + } + if(strcmp(name, "Error") == 0) + { + this->ParseError(atts); + } + if(strcmp(name, "Dangling Pointer") == 0) + { + this->ParseError(atts); + } + // Create the log + cmOStringStream ostr; + ostr << name << ":\n"; + int i = 0; + for(; atts[i] != 0; i+=2) + { + ostr << " " << cmXMLSafe(atts[i]) + << " - " << cmXMLSafe(atts[i+1]) << "\n"; + } + ostr << "\n"; + this->Log += ostr.str(); + } + void EndElement(const char* ) + { + } + + const char* GetAttribute(const char* name, const char** atts) + { + int i = 0; + for(; atts[i] != 0; ++i) + { + if(strcmp(name, atts[i]) == 0) + { + return atts[i+1]; + } + } + return 0; + } + void ParseError(const char** atts) + { + CatToErrorType* ptr = cmCTestMemCheckBoundsChecker; + const char* cat = this->GetAttribute("ErrorCategory", atts); + if(!cat) + { + this->Errors.push_back(cmCTestMemCheckHandler::ABW); // do not know + cmCTestLog(this->CTest, ERROR_MESSAGE, + "No Category found in Bounds checker XML\n" ); + return; + } + while(ptr->ErrorCategory && cat) + { + if(strcmp(ptr->ErrorCategory, cat) == 0) + { + this->Errors.push_back(ptr->ErrorCode); + return; // found it we are done + } + ptr++; + } + if(ptr->ErrorCategory) + { + this->Errors.push_back(cmCTestMemCheckHandler::ABW); // do not know + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Found unknown Bounds Checker error " + << ptr->ErrorCategory << std::endl); + } + } + cmCTest* CTest; + std::vector Errors; + std::string Log; +}; + +#define BOUNDS_CHECKER_MARKER \ +"******######*****Begin BOUNDS CHECKER XML******######******" +//---------------------------------------------------------------------- +static const char* cmCTestMemCheckResultStrings[] = { + "ABR", + "ABW", + "ABWL", + "COR", + "EXU", + "FFM", + "FIM", + "FMM", + "FMR", + "FMW", + "FUM", + "IPR", + "IPW", + "MAF", + "MLK", + "MPK", + "NPR", + "ODS", + "PAR", + "PLK", + "UMC", + "UMR", + 0 +}; + + +//---------------------------------------------------------------------- +static const char* cmCTestMemCheckResultLongStrings[] = { + "Threading Problem", + "ABW", + "ABWL", + "COR", + "EXU", + "FFM", + "FIM", + "Mismatched deallocation", + "FMR", + "FMW", + "FUM", + "IPR", + "IPW", + "MAF", + "Memory Leak", + "Potential Memory Leak", + "NPR", + "ODS", + "Invalid syscall param", + "PLK", + "Uninitialized Memory Conditional", + "Uninitialized Memory Read", + 0 +}; + + +//---------------------------------------------------------------------- +cmCTestMemCheckHandler::cmCTestMemCheckHandler() +{ + this->MemCheck = true; + this->CustomMaximumPassedTestOutputSize = 0; + this->CustomMaximumFailedTestOutputSize = 0; +} + +//---------------------------------------------------------------------- +void cmCTestMemCheckHandler::Initialize() +{ + this->Superclass::Initialize(); + this->CustomMaximumPassedTestOutputSize = 0; + this->CustomMaximumFailedTestOutputSize = 0; + this->MemoryTester = ""; + this->MemoryTesterOptions.clear(); + this->MemoryTesterStyle = UNKNOWN; + this->MemoryTesterOutputFile = ""; + int cc; + for ( cc = 0; cc < NO_MEMORY_FAULT; cc ++ ) + { + this->MemoryTesterGlobalResults[cc] = 0; + } + +} + +//---------------------------------------------------------------------- +int cmCTestMemCheckHandler::PreProcessHandler() +{ + if ( !this->InitializeMemoryChecking() ) + { + return 0; + } + + if ( !this->ExecuteCommands(this->CustomPreMemCheck) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Problem executing pre-memcheck command(s)." << std::endl); + return 0; + } + return 1; +} + +//---------------------------------------------------------------------- +int cmCTestMemCheckHandler::PostProcessHandler() +{ + if ( !this->ExecuteCommands(this->CustomPostMemCheck) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Problem executing post-memcheck command(s)." << std::endl); + return 0; + } + return 1; +} + +//---------------------------------------------------------------------- +void cmCTestMemCheckHandler::GenerateTestCommand( + std::vector& args) +{ + std::vector::size_type pp; + std::string memcheckcommand = ""; + memcheckcommand = this->MemoryTester; + for ( pp = 0; pp < this->MemoryTesterOptions.size(); pp ++ ) + { + args.push_back(this->MemoryTesterOptions[pp]); + memcheckcommand += " \""; + memcheckcommand += this->MemoryTesterOptions[pp]; + memcheckcommand += "\""; + } + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Memory check command: " + << memcheckcommand << std::endl); +} + +//---------------------------------------------------------------------- +void cmCTestMemCheckHandler::PopulateCustomVectors(cmMakefile *mf) +{ + this->cmCTestTestHandler::PopulateCustomVectors(mf); + this->CTest->PopulateCustomVector(mf, "CTEST_CUSTOM_PRE_MEMCHECK", + this->CustomPreMemCheck); + this->CTest->PopulateCustomVector(mf, "CTEST_CUSTOM_POST_MEMCHECK", + this->CustomPostMemCheck); + + this->CTest->PopulateCustomVector(mf, + "CTEST_CUSTOM_MEMCHECK_IGNORE", + this->CustomTestsIgnore); +} + +//---------------------------------------------------------------------- +void cmCTestMemCheckHandler::GenerateDartOutput(std::ostream& os) +{ + if ( !this->CTest->GetProduceXML() ) + { + return; + } + + this->CTest->StartXML(os, this->AppendXML); + os << "MemoryTesterStyle ) + { + case cmCTestMemCheckHandler::VALGRIND: + os << "Valgrind"; + break; + case cmCTestMemCheckHandler::PURIFY: + os << "Purify"; + break; + case cmCTestMemCheckHandler::BOUNDS_CHECKER: + os << "BoundsChecker"; + break; + default: + os << "Unknown"; + } + os << "\">" << std::endl; + + os << "\t" << this->StartTest << "\n" + << "\t" << this->StartTestTime << "\n" + << "\t\n"; + cmCTestMemCheckHandler::TestResultsVector::size_type cc; + for ( cc = 0; cc < this->TestResults.size(); cc ++ ) + { + cmCTestTestResult *result = &this->TestResults[cc]; + std::string testPath = result->Path + "/" + result->Name; + os << "\t\t" << cmXMLSafe( + this->CTest->GetShortPathToFile(testPath.c_str())) + << "" << std::endl; + } + os << "\t\n"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, + "-- Processing memory checking output: "); + size_t total = this->TestResults.size(); + size_t step = total / 10; + size_t current = 0; + for ( cc = 0; cc < this->TestResults.size(); cc ++ ) + { + cmCTestTestResult *result = &this->TestResults[cc]; + std::string memcheckstr; + int memcheckresults[cmCTestMemCheckHandler::NO_MEMORY_FAULT]; + int kk; + bool res = this->ProcessMemCheckOutput(result->Output, memcheckstr, + memcheckresults); + if ( res && result->Status == cmCTestMemCheckHandler::COMPLETED ) + { + continue; + } + this->CleanTestOutput(memcheckstr, + static_cast(this->CustomMaximumFailedTestOutputSize)); + this->WriteTestResultHeader(os, result); + os << "\t\t" << std::endl; + for ( kk = 0; cmCTestMemCheckResultLongStrings[kk]; kk ++ ) + { + if ( memcheckresults[kk] ) + { + os << "\t\t\t" + << memcheckresults[kk] + << "" << std::endl; + } + this->MemoryTesterGlobalResults[kk] += memcheckresults[kk]; + } + + std::string logTag; + if(this->CTest->ShouldCompressMemCheckOutput()) + { + this->CTest->CompressString(memcheckstr); + logTag = "\t\n"; + } + else + { + logTag = "\t\n"; + } + + os + << "\t\t\n" + << logTag << memcheckstr << std::endl + << "\t\n"; + this->WriteTestResultFooter(os, result); + if ( current < cc ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, "#" << std::flush); + current += step; + } + } + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::endl); + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Memory checking results:" + << std::endl); + os << "\t" << std::endl; + for ( cc = 0; cmCTestMemCheckResultStrings[cc]; cc ++ ) + { + if ( this->MemoryTesterGlobalResults[cc] ) + { +#ifdef cerr +# undef cerr +#endif + std::cerr.width(35); +#define cerr no_cerr + cmCTestLog(this->CTest, HANDLER_OUTPUT, + cmCTestMemCheckResultLongStrings[cc] << " - " + << this->MemoryTesterGlobalResults[cc] << std::endl); + os << "\t\t" << std::endl; + } + } + os << "\t" << std::endl; + + os << "\t" << this->EndTest << "" << std::endl; + os << "\t" << this->EndTestTime + << "" << std::endl; + os << "" + << static_cast(this->ElapsedTestingTime/6)/10.0 + << "\n"; + + os << "" << std::endl; + this->CTest->EndXML(os); + + +} + +//---------------------------------------------------------------------- +bool cmCTestMemCheckHandler::InitializeMemoryChecking() +{ + // Setup the command + if ( cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( + "MemoryCheckCommand").c_str()) ) + { + this->MemoryTester + = cmSystemTools::ConvertToOutputPath(this->CTest->GetCTestConfiguration( + "MemoryCheckCommand").c_str()); + } + else if ( cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( + "PurifyCommand").c_str()) ) + { + this->MemoryTester + = cmSystemTools::ConvertToOutputPath(this->CTest->GetCTestConfiguration( + "PurifyCommand").c_str()); + } + else if ( cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( + "ValgrindCommand").c_str()) ) + { + this->MemoryTester + = cmSystemTools::ConvertToOutputPath(this->CTest->GetCTestConfiguration( + "ValgrindCommand").c_str()); + } + else if ( cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( + "BoundsCheckerCommand").c_str()) ) + { + this->MemoryTester + = cmSystemTools::ConvertToOutputPath(this->CTest->GetCTestConfiguration( + "BoundsCheckerCommand").c_str()); + } + else + { + cmCTestLog(this->CTest, WARNING, + "Memory checker (MemoryCheckCommand) " + "not set, or cannot find the specified program." + << std::endl); + return false; + } + + if ( this->MemoryTester[0] == '\"' && + this->MemoryTester[this->MemoryTester.size()-1] == '\"' ) + { + this->MemoryTester + = this->MemoryTester.substr(1, this->MemoryTester.size()-2); + } + + // Setup the options + std::string memoryTesterOptions; + if ( this->CTest->GetCTestConfiguration( + "MemoryCheckCommandOptions").size() ) + { + memoryTesterOptions = this->CTest->GetCTestConfiguration( + "MemoryCheckCommandOptions"); + } + else if ( this->CTest->GetCTestConfiguration( + "ValgrindCommandOptions").size() ) + { + memoryTesterOptions = this->CTest->GetCTestConfiguration( + "ValgrindCommandOptions"); + } + this->MemoryTesterOptions + = cmSystemTools::ParseArguments(memoryTesterOptions.c_str()); + + this->MemoryTesterOutputFile + = this->CTest->GetBinaryDir() + "/Testing/Temporary/MemoryChecker.log"; + + if ( this->MemoryTester.find("valgrind") != std::string::npos ) + { + this->MemoryTesterStyle = cmCTestMemCheckHandler::VALGRIND; + if ( this->MemoryTesterOptions.empty() ) + { + this->MemoryTesterOptions.push_back("-q"); + this->MemoryTesterOptions.push_back("--tool=memcheck"); + this->MemoryTesterOptions.push_back("--leak-check=yes"); + this->MemoryTesterOptions.push_back("--show-reachable=yes"); + this->MemoryTesterOptions.push_back("--workaround-gcc296-bugs=yes"); + this->MemoryTesterOptions.push_back("--num-callers=50"); + } + if ( this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").size() ) + { + if ( !cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").c_str()) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find memory checker suppression file: " + << this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").c_str() << std::endl); + return false; + } + std::string suppressions = "--suppressions=" + + this->CTest->GetCTestConfiguration("MemoryCheckSuppressionFile"); + this->MemoryTesterOptions.push_back(suppressions); + } + } + else if ( this->MemoryTester.find("purify") != std::string::npos ) + { + this->MemoryTesterStyle = cmCTestMemCheckHandler::PURIFY; + std::string outputFile; +#ifdef _WIN32 + if( this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").size() ) + { + if( !cmSystemTools::FileExists(this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").c_str()) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find memory checker suppression file: " + << this->CTest->GetCTestConfiguration( + "MemoryCheckSuppressionFile").c_str() << std::endl); + return false; + } + std::string filterFiles = "/FilterFiles=" + + this->CTest->GetCTestConfiguration("MemoryCheckSuppressionFile"); + this->MemoryTesterOptions.push_back(filterFiles); + } + outputFile = "/SAVETEXTDATA="; +#else + outputFile = "-log-file="; +#endif + outputFile += this->MemoryTesterOutputFile; + this->MemoryTesterOptions.push_back(outputFile); + } + else if ( this->MemoryTester.find("BC") != std::string::npos ) + { + this->BoundsCheckerXMLFile = this->MemoryTesterOutputFile; + std::string dpbdFile = this->CTest->GetBinaryDir() + + "/Testing/Temporary/MemoryChecker.DPbd"; + this->BoundsCheckerDPBDFile = dpbdFile; + this->MemoryTesterStyle = cmCTestMemCheckHandler::BOUNDS_CHECKER; + this->MemoryTesterOptions.push_back("/B"); + this->MemoryTesterOptions.push_back(dpbdFile); + this->MemoryTesterOptions.push_back("/X"); + this->MemoryTesterOptions.push_back(this->MemoryTesterOutputFile); + this->MemoryTesterOptions.push_back("/M"); + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Do not understand memory checker: " << this->MemoryTester.c_str() + << std::endl); + return false; + } + + std::vector::size_type cc; + for ( cc = 0; cmCTestMemCheckResultStrings[cc]; cc ++ ) + { + this->MemoryTesterGlobalResults[cc] = 0; + } + return true; +} + +//---------------------------------------------------------------------- +bool cmCTestMemCheckHandler::ProcessMemCheckOutput(const std::string& str, + std::string& log, int* results) +{ + std::string::size_type cc; + for ( cc = 0; cc < cmCTestMemCheckHandler::NO_MEMORY_FAULT; cc ++ ) + { + results[cc] = 0; + } + + if ( this->MemoryTesterStyle == cmCTestMemCheckHandler::VALGRIND ) + { + return this->ProcessMemCheckValgrindOutput(str, log, results); + } + else if ( this->MemoryTesterStyle == cmCTestMemCheckHandler::PURIFY ) + { + return this->ProcessMemCheckPurifyOutput(str, log, results); + } + else if ( this->MemoryTesterStyle == + cmCTestMemCheckHandler::BOUNDS_CHECKER ) + { + return this->ProcessMemCheckBoundsCheckerOutput(str, log, results); + } + else + { + log.append("\nMemory checking style used was: "); + log.append("None that I know"); + log = str; + } + + + return true; +} + +//---------------------------------------------------------------------- +bool cmCTestMemCheckHandler::ProcessMemCheckPurifyOutput( + const std::string& str, std::string& log, + int* results) +{ + std::vector lines; + cmSystemTools::Split(str.c_str(), lines); + cmOStringStream ostr; + log = ""; + + cmsys::RegularExpression pfW("^\\[[WEI]\\] ([A-Z][A-Z][A-Z][A-Z]*): "); + + int defects = 0; + + for( std::vector::iterator i = lines.begin(); + i != lines.end(); ++i) + { + int failure = cmCTestMemCheckHandler::NO_MEMORY_FAULT; + if ( pfW.find(*i) ) + { + int cc; + for ( cc = 0; cc < cmCTestMemCheckHandler::NO_MEMORY_FAULT; cc ++ ) + { + if ( pfW.match(1) == cmCTestMemCheckResultStrings[cc] ) + { + failure = cc; + break; + } + } + if ( cc == cmCTestMemCheckHandler::NO_MEMORY_FAULT ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unknown Purify memory fault: " + << pfW.match(1) << std::endl); + ostr << "*** Unknown Purify memory fault: " << pfW.match(1) + << std::endl; + } + } + if ( failure != NO_MEMORY_FAULT ) + { + ostr << "" << cmCTestMemCheckResultStrings[failure] << " "; + results[failure] ++; + defects ++; + } + ostr << cmXMLSafe(*i) << std::endl; + } + + log = ostr.str(); + if ( defects ) + { + return false; + } + return true; +} + +//---------------------------------------------------------------------- +bool cmCTestMemCheckHandler::ProcessMemCheckValgrindOutput( + const std::string& str, std::string& log, + int* results) +{ + std::vector lines; + cmSystemTools::Split(str.c_str(), lines); + bool unlimitedOutput = false; + if(str.find("CTEST_FULL_OUTPUT") != str.npos || + this->CustomMaximumFailedTestOutputSize == 0) + { + unlimitedOutput = true; + } + + std::string::size_type cc; + + cmOStringStream ostr; + log = ""; + + int defects = 0; + + cmsys::RegularExpression valgrindLine("^==[0-9][0-9]*=="); + + cmsys::RegularExpression vgFIM( + "== .*Invalid free\\(\\) / delete / delete\\[\\]"); + cmsys::RegularExpression vgFMM( + "== .*Mismatched free\\(\\) / delete / delete \\[\\]"); + cmsys::RegularExpression vgMLK1( + "== .*[0-9,]+ bytes in [0-9,]+ blocks are definitely lost" + " in loss record [0-9,]+ of [0-9,]+"); + cmsys::RegularExpression vgMLK2( + "== .*[0-9,]+ \\([0-9,]+ direct, [0-9,]+ indirect\\)" + " bytes in [0-9,]+ blocks are definitely lost" + " in loss record [0-9,]+ of [0-9,]+"); + cmsys::RegularExpression vgPAR( + "== .*Syscall param .* (contains|points to) unaddressable byte\\(s\\)"); + cmsys::RegularExpression vgMPK1( + "== .*[0-9,]+ bytes in [0-9,]+ blocks are possibly lost in" + " loss record [0-9,]+ of [0-9,]+"); + cmsys::RegularExpression vgMPK2( + "== .*[0-9,]+ bytes in [0-9,]+ blocks are still reachable" + " in loss record [0-9,]+ of [0-9,]+"); + cmsys::RegularExpression vgUMC( + "== .*Conditional jump or move depends on uninitialised value\\(s\\)"); + cmsys::RegularExpression vgUMR1( + "== .*Use of uninitialised value of size [0-9,]+"); + cmsys::RegularExpression vgUMR2("== .*Invalid read of size [0-9,]+"); + cmsys::RegularExpression vgUMR3("== .*Jump to the invalid address "); + cmsys::RegularExpression vgUMR4("== .*Syscall param .* contains " + "uninitialised or unaddressable byte\\(s\\)"); + cmsys::RegularExpression vgUMR5("== .*Syscall param .* uninitialised"); + cmsys::RegularExpression vgIPW("== .*Invalid write of size [0-9,]+"); + cmsys::RegularExpression vgABR("== .*pthread_mutex_unlock: mutex is " + "locked by a different thread"); + std::vector nonValGrindOutput; + double sttime = cmSystemTools::GetTime(); + cmCTestLog(this->CTest, DEBUG, "Start test: " << lines.size() << std::endl); + std::string::size_type totalOutputSize = 0; + bool outputFull = false; + for ( cc = 0; cc < lines.size(); cc ++ ) + { + cmCTestLog(this->CTest, DEBUG, "test line " + << lines[cc] << std::endl); + + if ( valgrindLine.find(lines[cc]) ) + { + cmCTestLog(this->CTest, DEBUG, "valgrind line " + << lines[cc] << std::endl); + int failure = cmCTestMemCheckHandler::NO_MEMORY_FAULT; + if ( vgFIM.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::FIM; + } + else if ( vgFMM.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::FMM; + } + else if ( vgMLK1.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::MLK; + } + else if ( vgMLK2.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::MLK; + } + else if ( vgPAR.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::PAR; + } + else if ( vgMPK1.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::MPK; + } + else if ( vgMPK2.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::MPK; + } + else if ( vgUMC.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::UMC; + } + else if ( vgUMR1.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::UMR; + } + else if ( vgUMR2.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::UMR; + } + else if ( vgUMR3.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::UMR; + } + else if ( vgUMR4.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::UMR; + } + else if ( vgUMR5.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::UMR; + } + else if ( vgIPW.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::IPW; + } + else if ( vgABR.find(lines[cc]) ) + { + failure = cmCTestMemCheckHandler::ABR; + } + + if ( failure != cmCTestMemCheckHandler::NO_MEMORY_FAULT ) + { + ostr << "" << cmCTestMemCheckResultStrings[failure] << " "; + results[failure] ++; + defects ++; + } + totalOutputSize += lines[cc].size(); + ostr << cmXMLSafe(lines[cc]) << std::endl; + } + else + { + nonValGrindOutput.push_back(cc); + } + } + // Now put all all the non valgrind output into the test output + if(!outputFull) + { + for(std::vector::iterator i = + nonValGrindOutput.begin(); i != nonValGrindOutput.end(); ++i) + { + totalOutputSize += lines[*i].size(); + cmCTestLog(this->CTest, DEBUG, "before xml safe " + << lines[*i] << std::endl); + cmCTestLog(this->CTest, DEBUG, "after xml safe " + << cmXMLSafe(lines[*i]) << std::endl); + + ostr << cmXMLSafe(lines[*i]) << std::endl; + if(!unlimitedOutput && totalOutputSize > + static_cast(this->CustomMaximumFailedTestOutputSize)) + { + outputFull = true; + ostr << "....\n"; + ostr << "Test Output for this test has been truncated see testing" + " machine logs for full output,\n"; + ostr << "or put CTEST_FULL_OUTPUT in the output of " + "this test program.\n"; + } + } + } + cmCTestLog(this->CTest, DEBUG, "End test (elapsed: " + << (cmSystemTools::GetTime() - sttime) << std::endl); + log = ostr.str(); + if ( defects ) + { + return false; + } + return true; +} + + + +//---------------------------------------------------------------------- +bool cmCTestMemCheckHandler::ProcessMemCheckBoundsCheckerOutput( + const std::string& str, std::string& log, + int* results) +{ + log = ""; + double sttime = cmSystemTools::GetTime(); + std::vector lines; + cmSystemTools::Split(str.c_str(), lines); + cmCTestLog(this->CTest, DEBUG, "Start test: " << lines.size() << std::endl); + std::vector::size_type cc; + for ( cc = 0; cc < lines.size(); cc ++ ) + { + if(lines[cc] == BOUNDS_CHECKER_MARKER) + { + break; + } + } + cmBoundsCheckerParser parser(this->CTest); + parser.InitializeParser(); + if(cc < lines.size()) + { + for(cc++; cc < lines.size(); ++cc) + { + std::string& theLine = lines[cc]; + // check for command line arguments that are not escaped + // correctly by BC + if(theLine.find("TargetArgs=") != theLine.npos) + { + // skip this because BC gets it wrong and we can't parse it + } + else if(!parser.ParseChunk(theLine.c_str(), theLine.size())) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Error in ParseChunk: " << theLine.c_str() + << std::endl); + } + } + } + int defects = 0; + for(cc =0; cc < parser.Errors.size(); ++cc) + { + results[parser.Errors[cc]]++; + defects++; + } + cmCTestLog(this->CTest, DEBUG, "End test (elapsed: " + << (cmSystemTools::GetTime() - sttime) << std::endl); + if(defects) + { + // only put the output of Bounds Checker if there were + // errors or leaks detected + log = parser.Log; + return false; + } + return true; +} + +// This method puts the bounds checker output file into the output +// for the test +void +cmCTestMemCheckHandler::PostProcessBoundsCheckerTest(cmCTestTestResult& res) +{ + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "PostProcessBoundsCheckerTest for : " + << res.Name.c_str() << std::endl); + if ( !cmSystemTools::FileExists(this->MemoryTesterOutputFile.c_str()) ) + { + std::string log = "Cannot find memory tester output file: " + + this->MemoryTesterOutputFile; + cmCTestLog(this->CTest, ERROR_MESSAGE, log.c_str() << std::endl); + return; + } + // put a scope around this to close ifs so the file can be removed + { + std::ifstream ifs(this->MemoryTesterOutputFile.c_str()); + if ( !ifs ) + { + std::string log = "Cannot read memory tester output file: " + + this->MemoryTesterOutputFile; + cmCTestLog(this->CTest, ERROR_MESSAGE, log.c_str() << std::endl); + return; + } + res.Output += BOUNDS_CHECKER_MARKER; + res.Output += "\n"; + std::string line; + while ( cmSystemTools::GetLineFromStream(ifs, line) ) + { + res.Output += line; + res.Output += "\n"; + } + } + cmSystemTools::Delay(1000); + cmSystemTools::RemoveFile(this->BoundsCheckerDPBDFile.c_str()); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Remove: " + << this->BoundsCheckerDPBDFile.c_str() << std::endl); + cmSystemTools::RemoveFile(this->BoundsCheckerXMLFile.c_str()); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Remove: " + << this->BoundsCheckerXMLFile.c_str() << std::endl); +} + +void +cmCTestMemCheckHandler::PostProcessPurifyTest(cmCTestTestResult& res) +{ + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "PostProcessPurifyTest for : " + << res.Name.c_str() << std::endl); + if ( !cmSystemTools::FileExists(this->MemoryTesterOutputFile.c_str()) ) + { + std::string log = "Cannot find memory tester output file: " + + this->MemoryTesterOutputFile; + cmCTestLog(this->CTest, ERROR_MESSAGE, log.c_str() << std::endl); + return; + } + std::ifstream ifs(this->MemoryTesterOutputFile.c_str()); + if ( !ifs ) + { + std::string log = "Cannot read memory tester output file: " + + this->MemoryTesterOutputFile; + cmCTestLog(this->CTest, ERROR_MESSAGE, log.c_str() << std::endl); + return; + } + std::string line; + while ( cmSystemTools::GetLineFromStream(ifs, line) ) + { + res.Output += line; + res.Output += "\n"; + } +} diff --git a/Source/CTest/cmCTestMemCheckHandler.h b/Source/CTest/cmCTestMemCheckHandler.h new file mode 100644 index 0000000..427d471 --- /dev/null +++ b/Source/CTest/cmCTestMemCheckHandler.h @@ -0,0 +1,125 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTestMemCheckHandler_h +#define cmCTestMemCheckHandler_h + + +#include "cmCTestTestHandler.h" +#include "cmListFileCache.h" + +class cmMakefile; + +/** \class cmCTestMemCheckHandler + * \brief A class that handles ctest -S invocations + * + */ +class cmCTestMemCheckHandler : public cmCTestTestHandler +{ + friend class cmCTestRunTest; +public: + cmTypeMacro(cmCTestMemCheckHandler, cmCTestTestHandler); + + void PopulateCustomVectors(cmMakefile *mf); + + cmCTestMemCheckHandler(); + + void Initialize(); +protected: + virtual int PreProcessHandler(); + virtual int PostProcessHandler(); + virtual void GenerateTestCommand(std::vector& args); + +private: + + enum { // Memory checkers + UNKNOWN = 0, + VALGRIND, + PURIFY, + BOUNDS_CHECKER + }; +public: + enum { // Memory faults + ABR = 0, + ABW, + ABWL, + COR, + EXU, + FFM, + FIM, + FMM, + FMR, + FMW, + FUM, + IPR, + IPW, + MAF, + MLK, + MPK, + NPR, + ODS, + PAR, + PLK, + UMC, + UMR, + NO_MEMORY_FAULT + }; +private: + enum { // Program statuses + NOT_RUN = 0, + TIMEOUT, + SEGFAULT, + ILLEGAL, + INTERRUPT, + NUMERICAL, + OTHER_FAULT, + FAILED, + BAD_COMMAND, + COMPLETED + }; + std::string BoundsCheckerDPBDFile; + std::string BoundsCheckerXMLFile; + std::string MemoryTester; + std::vector MemoryTesterOptions; + int MemoryTesterStyle; + std::string MemoryTesterOutputFile; + int MemoryTesterGlobalResults[NO_MEMORY_FAULT]; + + ///! Initialize memory checking subsystem. + bool InitializeMemoryChecking(); + + /** + * Generate the Dart compatible output + */ + void GenerateDartOutput(std::ostream& os); + + std::vector CustomPreMemCheck; + std::vector CustomPostMemCheck; + + //! Parse Valgrind/Purify/Bounds Checker result out of the output + //string. After running, log holds the output and results hold the + //different memmory errors. + bool ProcessMemCheckOutput(const std::string& str, + std::string& log, int* results); + bool ProcessMemCheckValgrindOutput(const std::string& str, + std::string& log, int* results); + bool ProcessMemCheckPurifyOutput(const std::string& str, + std::string& log, int* results); + bool ProcessMemCheckBoundsCheckerOutput(const std::string& str, + std::string& log, int* results); + + void PostProcessPurifyTest(cmCTestTestResult& res); + void PostProcessBoundsCheckerTest(cmCTestTestResult& res); +}; + +#endif + diff --git a/Source/CTest/cmCTestMultiProcessHandler.cxx b/Source/CTest/cmCTestMultiProcessHandler.cxx new file mode 100644 index 0000000..2cae802 --- /dev/null +++ b/Source/CTest/cmCTestMultiProcessHandler.cxx @@ -0,0 +1,691 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestMultiProcessHandler.h" +#include "cmProcess.h" +#include "cmStandardIncludes.h" +#include "cmCTest.h" +#include "cmSystemTools.h" +#include +#include +#include + +class TestComparator +{ +public: + TestComparator(cmCTestMultiProcessHandler* handler) : Handler(handler) {} + ~TestComparator() {} + + // Sorts tests in descending order of cost + bool operator() (int index1, int index2) const + { + return Handler->Properties[index1]->Cost > + Handler->Properties[index2]->Cost; + } + +private: + cmCTestMultiProcessHandler* Handler; +}; + +cmCTestMultiProcessHandler::cmCTestMultiProcessHandler() +{ + this->ParallelLevel = 1; + this->Completed = 0; + this->RunningCount = 0; + this->StopTimePassed = false; +} + +cmCTestMultiProcessHandler::~cmCTestMultiProcessHandler() +{ +} + + // Set the tests +void +cmCTestMultiProcessHandler::SetTests(TestMap& tests, + PropertiesMap& properties) +{ + this->Tests = tests; + this->Properties = properties; + this->Total = this->Tests.size(); + // set test run map to false for all + for(TestMap::iterator i = this->Tests.begin(); + i != this->Tests.end(); ++i) + { + this->TestRunningMap[i->first] = false; + this->TestFinishMap[i->first] = false; + } + if(!this->CTest->GetShowOnly()) + { + this->ReadCostData(); + this->CreateTestCostList(); + } +} + + // Set the max number of tests that can be run at the same time. +void cmCTestMultiProcessHandler::SetParallelLevel(size_t level) +{ + this->ParallelLevel = level < 1 ? 1 : level; +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::RunTests() +{ + this->CheckResume(); + if(!this->CheckCycles()) + { + return; + } + this->TestHandler->SetMaxIndex(this->FindMaxIndex()); + this->StartNextTests(); + while(this->Tests.size() != 0) + { + if(this->StopTimePassed) + { + return; + } + this->CheckOutput(); + this->StartNextTests(); + } + // let all running tests finish + while(this->CheckOutput()) + { + } + this->MarkFinished(); + this->UpdateCostData(); +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::StartTestProcess(int test) +{ + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "test " << test << "\n"); + this->TestRunningMap[test] = true; // mark the test as running + // now remove the test itself + this->EraseTest(test); + this->RunningCount += GetProcessorsUsed(test); + + cmCTestRunTest* testRun = new cmCTestRunTest(this->TestHandler); + testRun->SetIndex(test); + testRun->SetTestProperties(this->Properties[test]); + + std::string current_dir = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::ChangeDirectory(this->Properties[test]->Directory.c_str()); + + // Lock the resources we'll be using + this->LockResources(test); + + if(testRun->StartTest(this->Total)) + { + this->RunningTests.insert(testRun); + } + else if(testRun->IsStopTimePassed()) + { + this->StopTimePassed = true; + delete testRun; + return; + } + else + { + this->UnlockResources(test); + this->Completed++; + this->TestFinishMap[test] = true; + this->TestRunningMap[test] = false; + this->RunningCount -= GetProcessorsUsed(test); + testRun->EndTest(this->Completed, this->Total, false); + this->Failed->push_back(this->Properties[test]->Name); + delete testRun; + } + cmSystemTools::ChangeDirectory(current_dir.c_str()); +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::LockResources(int index) +{ + for(std::set::iterator i = + this->Properties[index]->LockedResources.begin(); + i != this->Properties[index]->LockedResources.end(); ++i) + { + this->LockedResources.insert(*i); + } +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::UnlockResources(int index) +{ + for(std::set::iterator i = + this->Properties[index]->LockedResources.begin(); + i != this->Properties[index]->LockedResources.end(); ++i) + { + this->LockedResources.erase(*i); + } +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::EraseTest(int test) +{ + this->Tests.erase(test); + this->SortedTests.erase( + std::find(this->SortedTests.begin(), this->SortedTests.end(), test)); +} + +//--------------------------------------------------------- +inline size_t cmCTestMultiProcessHandler::GetProcessorsUsed(int test) +{ + size_t processors = + static_cast(this->Properties[test]->Processors); + //If this is set to run serially, it must run alone. + //Also, if processors setting is set higher than the -j + //setting, we default to using all of the process slots. + if(this->Properties[test]->RunSerial + || processors > this->ParallelLevel) + { + processors = this->ParallelLevel; + } + return processors; +} + +//--------------------------------------------------------- +bool cmCTestMultiProcessHandler::StartTest(int test) +{ + //Check for locked resources + for(std::set::iterator i = + this->Properties[test]->LockedResources.begin(); + i != this->Properties[test]->LockedResources.end(); ++i) + { + if(this->LockedResources.find(*i) != this->LockedResources.end()) + { + return false; + } + } + + // copy the depend tests locally because when + // a test is finished it will be removed from the depend list + // and we don't want to be iterating a list while removing from it + TestSet depends = this->Tests[test]; + size_t totalDepends = depends.size(); + if(totalDepends) + { + for(TestSet::const_iterator i = depends.begin(); + i != depends.end(); ++i) + { + // if the test is not already running then start it + if(!this->TestRunningMap[*i]) + { + // this test might be finished, but since + // this is a copy of the depend map we might + // still have it + if(!this->TestFinishMap[*i]) + { + // only start one test in this function + return this->StartTest(*i); + } + else + { + // the depend has been and finished + totalDepends--; + } + } + } + } + // if there are no depends left then run this test + if(totalDepends == 0) + { + this->StartTestProcess(test); + return true; + } + // This test was not able to start because it is waiting + // on depends to run + return false; +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::StartNextTests() +{ + size_t numToStart = this->ParallelLevel - this->RunningCount; + if(numToStart == 0) + { + return; + } + + TestList copy = this->SortedTests; + for(TestList::iterator test = copy.begin(); test != copy.end(); ++test) + { + //in case this test has already been started due to dependency + if(this->TestRunningMap[*test] || this->TestFinishMap[*test]) + { + continue; + } + size_t processors = GetProcessorsUsed(*test); + if(processors > numToStart) + { + return; + } + if(this->StartTest(*test)) + { + if(this->StopTimePassed) + { + return; + } + numToStart -= processors; + } + if(numToStart == 0) + { + return; + } + } +} + +//--------------------------------------------------------- +bool cmCTestMultiProcessHandler::CheckOutput() +{ + // no more output we are done + if(this->RunningTests.size() == 0) + { + return false; + } + std::vector finished; + std::string out, err; + for(std::set::const_iterator i = this->RunningTests.begin(); + i != this->RunningTests.end(); ++i) + { + cmCTestRunTest* p = *i; + if(!p->CheckOutput()) + { + finished.push_back(p); + } + } + for( std::vector::iterator i = finished.begin(); + i != finished.end(); ++i) + { + this->Completed++; + cmCTestRunTest* p = *i; + int test = p->GetIndex(); + + if(p->EndTest(this->Completed, this->Total, true)) + { + this->Passed->push_back(p->GetTestProperties()->Name); + } + else + { + this->Failed->push_back(p->GetTestProperties()->Name); + } + for(TestMap::iterator j = this->Tests.begin(); + j != this->Tests.end(); ++j) + { + j->second.erase(test); + } + this->TestFinishMap[test] = true; + this->TestRunningMap[test] = false; + this->RunningTests.erase(p); + this->WriteCheckpoint(test); + this->UnlockResources(test); + this->RunningCount -= GetProcessorsUsed(test); + delete p; + } + return true; +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::UpdateCostData() +{ + std::string fname = this->CTest->GetCostDataFile(); + std::string tmpout = fname + ".tmp"; + std::fstream fout; + fout.open(tmpout.c_str(), std::ios::out); + + PropertiesMap temp = this->Properties; + + if(cmSystemTools::FileExists(fname.c_str())) + { + std::ifstream fin; + fin.open(fname.c_str()); + + std::string line; + while(std::getline(fin, line)) + { + if(line == "---") break; + std::vector parts = + cmSystemTools::SplitString(line.c_str(), ' '); + //Format: + if(parts.size() < 3) break; + + std::string name = parts[0]; + int prev = atoi(parts[1].c_str()); + float cost = static_cast(atof(parts[2].c_str())); + + int index = this->SearchByName(name); + if(index == -1) + { + // This test is not in memory. We just rewrite the entry + fout << name << " " << prev << " " << cost << "\n"; + } + else + { + // Update with our new average cost + fout << name << " " << this->Properties[index]->PreviousRuns << " " + << this->Properties[index]->Cost << "\n"; + temp.erase(index); + } + } + fin.close(); + cmSystemTools::RemoveFile(fname.c_str()); + } + + // Add all tests not previously listed in the file + for(PropertiesMap::iterator i = temp.begin(); i != temp.end(); ++i) + { + fout << i->second->Name << " " << i->second->PreviousRuns << " " + << i->second->Cost << "\n"; + } + + // Write list of failed tests + fout << "---\n"; + for(std::vector::iterator i = this->Failed->begin(); + i != this->Failed->end(); ++i) + { + fout << i->c_str() << "\n"; + } + fout.close(); + cmSystemTools::RenameFile(tmpout.c_str(), fname.c_str()); +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::ReadCostData() +{ + std::string fname = this->CTest->GetCostDataFile(); + + if(cmSystemTools::FileExists(fname.c_str(), true)) + { + std::ifstream fin; + fin.open(fname.c_str()); + std::string line; + while(std::getline(fin, line)) + { + if(line == "---") break; + + std::vector parts = + cmSystemTools::SplitString(line.c_str(), ' '); + + // Probably an older version of the file, will be fixed next run + if(parts.size() < 3) + { + fin.close(); + return; + } + + std::string name = parts[0]; + int prev = atoi(parts[1].c_str()); + float cost = static_cast(atof(parts[2].c_str())); + + int index = this->SearchByName(name); + if(index == -1) continue; + + this->Properties[index]->PreviousRuns = prev; + // When not running in parallel mode, don't use cost data + if(this->ParallelLevel > 1 && + this->Properties[index] && + this->Properties[index]->Cost == 0) + { + this->Properties[index]->Cost = cost; + } + } + // Next part of the file is the failed tests + while(std::getline(fin, line)) + { + if(line != "") + { + this->LastTestsFailed.push_back(line); + } + } + fin.close(); + } +} + +//--------------------------------------------------------- +int cmCTestMultiProcessHandler::SearchByName(std::string name) +{ + int index = -1; + + for(PropertiesMap::iterator i = this->Properties.begin(); + i != this->Properties.end(); ++i) + { + if(i->second->Name == name) + { + index = i->first; + } + } + return index; +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::CreateTestCostList() +{ + for(TestMap::iterator i = this->Tests.begin(); + i != this->Tests.end(); ++i) + { + SortedTests.push_back(i->first); + + //If the test failed last time, it should be run first, so max the cost. + //Only do this for parallel runs; in non-parallel runs, avoid clobbering + //the test's explicitly set cost. + if(this->ParallelLevel > 1 && + std::find(this->LastTestsFailed.begin(), this->LastTestsFailed.end(), + this->Properties[i->first]->Name) != this->LastTestsFailed.end()) + { + this->Properties[i->first]->Cost = FLT_MAX; + } + } + + TestComparator comp(this); + std::stable_sort(SortedTests.begin(), SortedTests.end(), comp); +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::WriteCheckpoint(int index) +{ + std::string fname = this->CTest->GetBinaryDir() + + "/Testing/Temporary/CTestCheckpoint.txt"; + std::fstream fout; + fout.open(fname.c_str(), std::ios::app | std::ios::out); + fout << index << "\n"; + fout.close(); +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::MarkFinished() +{ + std::string fname = this->CTest->GetBinaryDir() + + "/Testing/Temporary/CTestCheckpoint.txt"; + cmSystemTools::RemoveFile(fname.c_str()); +} + +//--------------------------------------------------------- +//For ShowOnly mode +void cmCTestMultiProcessHandler::PrintTestList() +{ + this->TestHandler->SetMaxIndex(this->FindMaxIndex()); + int count = 0; + + for (PropertiesMap::iterator it = this->Properties.begin(); + it != this->Properties.end(); ++it) + { + count++; + cmCTestTestHandler::cmCTestTestProperties& p = *it->second; + + //push working dir + std::string current_dir = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::ChangeDirectory(p.Directory.c_str()); + + cmCTestRunTest testRun(this->TestHandler); + testRun.SetIndex(p.Index); + testRun.SetTestProperties(&p); + testRun.ComputeArguments(); //logs the command in verbose mode + + if(p.Labels.size()) //print the labels + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Labels:"); + } + for(std::vector::iterator label = p.Labels.begin(); + label != p.Labels.end(); ++label) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " " << *label); + } + if(p.Labels.size()) //print the labels + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, std::endl); + } + + if (this->TestHandler->MemCheck) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Memory Check"); + } + else + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Test"); + } + cmOStringStream indexStr; + indexStr << " #" << p.Index << ":"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, + std::setw(3 + getNumWidth(this->TestHandler->GetMaxIndex())) + << indexStr.str().c_str()); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " "); + cmCTestLog(this->CTest, HANDLER_OUTPUT, p.Name.c_str() << std::endl); + //pop working dir + cmSystemTools::ChangeDirectory(current_dir.c_str()); + } + + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::endl << "Total Tests: " + << this->Total << std::endl); +} + +void cmCTestMultiProcessHandler::PrintLabels() +{ + std::set allLabels; + for (PropertiesMap::iterator it = this->Properties.begin(); + it != this->Properties.end(); ++it) + { + cmCTestTestHandler::cmCTestTestProperties& p = *it->second; + allLabels.insert(p.Labels.begin(), p.Labels.end()); + } + + if(allLabels.size()) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, "All Labels:" << std::endl); + } + else + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, "No Labels Exist" << std::endl); + } + for(std::set::iterator label = allLabels.begin(); + label != allLabels.end(); ++label) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " " << *label << std::endl); + } +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::CheckResume() +{ + std::string fname = this->CTest->GetBinaryDir() + + "/Testing/Temporary/CTestCheckpoint.txt"; + if(this->CTest->GetFailover()) + { + if(cmSystemTools::FileExists(fname.c_str(), true)) + { + *this->TestHandler->LogFile << "Resuming previously interrupted test set" + << std::endl + << "----------------------------------------------------------" + << std::endl; + + std::ifstream fin; + fin.open(fname.c_str()); + std::string line; + while(std::getline(fin, line)) + { + int index = atoi(line.c_str()); + this->RemoveTest(index); + } + fin.close(); + } + } + else if(cmSystemTools::FileExists(fname.c_str(), true)) + { + cmSystemTools::RemoveFile(fname.c_str()); + } +} + +//--------------------------------------------------------- +void cmCTestMultiProcessHandler::RemoveTest(int index) +{ + this->EraseTest(index); + this->Properties.erase(index); + this->TestRunningMap[index] = false; + this->TestFinishMap[index] = true; + this->Completed++; +} + +//--------------------------------------------------------- +int cmCTestMultiProcessHandler::FindMaxIndex() +{ + int max = 0; + cmCTestMultiProcessHandler::TestMap::iterator i = this->Tests.begin(); + for(; i != this->Tests.end(); ++i) + { + if(i->first > max) + { + max = i->first; + } + } + return max; +} + +//Returns true if no cycles exist in the dependency graph +bool cmCTestMultiProcessHandler::CheckCycles() +{ + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Checking test dependency graph..." << std::endl); + for(TestMap::iterator it = this->Tests.begin(); + it != this->Tests.end(); ++it) + { + //DFS from each element to itself + int root = it->first; + std::set visited; + std::stack s; + s.push(root); + while(!s.empty()) + { + int test = s.top(); + s.pop(); + if(visited.insert(test).second) + { + for(TestSet::iterator d = this->Tests[test].begin(); + d != this->Tests[test].end(); ++d) + { + if(*d == root) + { + //cycle exists + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Error: a cycle exists in the test dependency graph " + "for the test \"" << this->Properties[root]->Name << + "\".\nPlease fix the cycle and run ctest again.\n"); + return false; + } + else + { + s.push(*d); + } + } + } + } + } + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Checking test dependency graph end" << std::endl); + return true; +} diff --git a/Source/CTest/cmCTestMultiProcessHandler.h b/Source/CTest/cmCTestMultiProcessHandler.h new file mode 100644 index 0000000..1483440 --- /dev/null +++ b/Source/CTest/cmCTestMultiProcessHandler.h @@ -0,0 +1,116 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestMultiProcessHandler_h +#define cmCTestMultiProcessHandler_h + +#include +#include +#include + +/** \class cmCTestMultiProcessHandler + * \brief run parallel ctest + * + * cmCTestMultiProcessHandler + */ +class cmCTestMultiProcessHandler +{ + friend class TestComparator; +public: + struct TestSet : public std::set {}; + struct TestMap : public std::map {}; + struct TestList : public std::vector {}; + struct PropertiesMap : public + std::map {}; + + cmCTestMultiProcessHandler(); + virtual ~cmCTestMultiProcessHandler(); + // Set the tests + void SetTests(TestMap& tests, PropertiesMap& properties); + // Set the max number of tests that can be run at the same time. + void SetParallelLevel(size_t); + virtual void RunTests(); + void PrintTestList(); + void PrintLabels(); + + void SetPassFailVectors(std::vector* passed, + std::vector* failed) + { + this->Passed = passed; + this->Failed = failed; + } + void SetTestResults(std::vector* r) + { this->TestResults = r; } + + void SetCTest(cmCTest* ctest) { this->CTest = ctest;} + + void SetTestHandler(cmCTestTestHandler * handler) + { this->TestHandler = handler; } + + cmCTestTestHandler * GetTestHandler() + { return this->TestHandler; } +protected: + // Start the next test or tests as many as are allowed by + // ParallelLevel + void StartNextTests(); + void StartTestProcess(int test); + bool StartTest(int test); + // Mark the checkpoint for the given test + void WriteCheckpoint(int index); + + void UpdateCostData(); + void ReadCostData(); + // Return index of a test based on its name + int SearchByName(std::string name); + + void CreateTestCostList(); + // Removes the checkpoint file + void MarkFinished(); + void EraseTest(int index); + // Return true if there are still tests running + // check all running processes for output and exit case + bool CheckOutput(); + void RemoveTest(int index); + //Check if we need to resume an interrupted test set + void CheckResume(); + //Check if there are any circular dependencies + bool CheckCycles(); + int FindMaxIndex(); + inline size_t GetProcessorsUsed(int index); + + void LockResources(int index); + void UnlockResources(int index); + // map from test number to set of depend tests + TestMap Tests; + TestList SortedTests; + //Total number of tests we'll be running + size_t Total; + //Number of tests that are complete + size_t Completed; + size_t RunningCount; + bool StopTimePassed; + //list of test properties (indices concurrent to the test map) + PropertiesMap Properties; + std::map TestRunningMap; + std::map TestFinishMap; + std::map TestOutput; + std::vector* Passed; + std::vector* Failed; + std::vector LastTestsFailed; + std::set LockedResources; + std::vector* TestResults; + size_t ParallelLevel; // max number of process that can be run at once + std::set RunningTests; // current running tests + cmCTestTestHandler * TestHandler; + cmCTest* CTest; +}; + +#endif diff --git a/Source/CTest/cmCTestReadCustomFilesCommand.cxx b/Source/CTest/cmCTestReadCustomFilesCommand.cxx new file mode 100644 index 0000000..5db01f9 --- /dev/null +++ b/Source/CTest/cmCTestReadCustomFilesCommand.cxx @@ -0,0 +1,35 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestReadCustomFilesCommand.h" + +#include "cmCTest.h" + +bool cmCTestReadCustomFilesCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if (args.size() < 1) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + std::vector::const_iterator dit; + for ( dit = args.begin(); dit != args.end(); ++ dit ) + { + this->CTest->ReadCustomConfigurationFileTree(dit->c_str(), + this->Makefile); + } + + return true; +} + + diff --git a/Source/CTest/cmCTestReadCustomFilesCommand.h b/Source/CTest/cmCTestReadCustomFilesCommand.h new file mode 100644 index 0000000..f382b0f --- /dev/null +++ b/Source/CTest/cmCTestReadCustomFilesCommand.h @@ -0,0 +1,75 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestReadCustomFilesCommand_h +#define cmCTestReadCustomFilesCommand_h + +#include "cmCTestCommand.h" + +/** \class cmCTestReadCustomFiles + * \brief Run a ctest script + * + * cmLibrarysCommand defines a list of executable (i.e., test) + * programs to create. + */ +class cmCTestReadCustomFilesCommand : public cmCTestCommand +{ +public: + + cmCTestReadCustomFilesCommand() {} + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestReadCustomFilesCommand* ni = new cmCTestReadCustomFilesCommand; + ni->CTest = this->CTest; + return ni; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_read_custom_files";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "read CTestCustom files."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_read_custom_files( directory ... )\n" + "Read all the CTestCustom.ctest or CTestCustom.cmake files from " + "the given directory."; + } + + cmTypeMacro(cmCTestReadCustomFilesCommand, cmCTestCommand); + +}; + + +#endif diff --git a/Source/CTest/cmCTestRunScriptCommand.cxx b/Source/CTest/cmCTestRunScriptCommand.cxx new file mode 100644 index 0000000..fe429bd --- /dev/null +++ b/Source/CTest/cmCTestRunScriptCommand.cxx @@ -0,0 +1,65 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestRunScriptCommand.h" + +#include "cmCTestScriptHandler.h" + +bool cmCTestRunScriptCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1 ) + { + this->CTestScriptHandler->RunCurrentScript(); + return true; + } + + bool np = false; + unsigned int i = 0; + if (args[i] == "NEW_PROCESS") + { + np = true; + i++; + } + int start = i; + // run each script + std::string returnVariable; + for (i = start; i < args.size(); ++i) + { + if(args[i] == "RETURN_VALUE") + { + ++i; + if(i < args.size()) + { + returnVariable = args[i]; + } + } + } + for (i = start; i < args.size(); ++i) + { + if(args[i] == "RETURN_VALUE") + { + ++i; + } + else + { + int ret; + cmCTestScriptHandler::RunScript(this->CTest, args[i].c_str(), !np, + &ret); + cmOStringStream str; + str << ret; + this->Makefile->AddDefinition(returnVariable.c_str(), str.str().c_str()); + } + } + return true; +} + + diff --git a/Source/CTest/cmCTestRunScriptCommand.h b/Source/CTest/cmCTestRunScriptCommand.h new file mode 100644 index 0000000..6df69af --- /dev/null +++ b/Source/CTest/cmCTestRunScriptCommand.h @@ -0,0 +1,80 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestRunScriptCommand_h +#define cmCTestRunScriptCommand_h + +#include "cmCTestCommand.h" + +/** \class cmCTestRunScript + * \brief Run a ctest script + * + * cmLibrarysCommand defines a list of executable (i.e., test) + * programs to create. + */ +class cmCTestRunScriptCommand : public cmCTestCommand +{ +public: + + cmCTestRunScriptCommand() {} + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestRunScriptCommand* ni = new cmCTestRunScriptCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_run_script";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "runs a ctest -S script"; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_run_script([NEW_PROCESS] script_file_name script_file_name1 \n" + " script_file_name2 ... [RETURN_VALUE var])\n" + "Runs a script or scripts much like if it was run from ctest -S. " + "If no argument is provided then the current script is run using " + "the current settings of the variables. If NEW_PROCESS is specified " + "then each script will be run in a separate process." + "If RETURN_VALUE is specified the return value of the last script " + "run will be put into var."; + } + + cmTypeMacro(cmCTestRunScriptCommand, cmCTestCommand); +}; + + +#endif diff --git a/Source/CTest/cmCTestRunTest.cxx b/Source/CTest/cmCTestRunTest.cxx new file mode 100644 index 0000000..81f18b0 --- /dev/null +++ b/Source/CTest/cmCTestRunTest.cxx @@ -0,0 +1,735 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCTestRunTest.h" +#include "cmCTestMemCheckHandler.h" +#include "cmCTest.h" +#include "cmSystemTools.h" +#include "cm_curl.h" + +#include +#include + +cmCTestRunTest::cmCTestRunTest(cmCTestTestHandler* handler) +{ + this->CTest = handler->CTest; + this->TestHandler = handler; + this->TestProcess = 0; + this->TestResult.ExecutionTime =0; + this->TestResult.ReturnValue = 0; + this->TestResult.Status = cmCTestTestHandler::NOT_RUN; + this->TestResult.TestCount = 0; + this->TestResult.Properties = 0; + this->ProcessOutput = ""; + this->CompressedOutput = ""; + this->CompressionRatio = 2; + this->StopTimePassed = false; +} + +cmCTestRunTest::~cmCTestRunTest() +{ +} + +//---------------------------------------------------------------------------- +bool cmCTestRunTest::CheckOutput() +{ + // Read lines for up to 0.1 seconds of total time. + double timeout = 0.1; + double timeEnd = cmSystemTools::GetTime() + timeout; + std::string line; + while((timeout = timeEnd - cmSystemTools::GetTime(), timeout > 0)) + { + int p = this->TestProcess->GetNextOutputLine(line, timeout); + if(p == cmsysProcess_Pipe_None) + { + // Process has terminated and all output read. + return false; + } + else if(p == cmsysProcess_Pipe_STDOUT || + p == cmsysProcess_Pipe_STDERR) + { + // Store this line of output. + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + this->GetIndex() << ": " << line << std::endl); + this->ProcessOutput += line; + this->ProcessOutput += "\n"; + } + else // if(p == cmsysProcess_Pipe_Timeout) + { + break; + } + } + return true; +} + +//--------------------------------------------------------- +// Streamed compression of test output. The compressed data +// is appended to this->CompressedOutput +void cmCTestRunTest::CompressOutput() +{ + int ret; + z_stream strm; + + unsigned char* in = + reinterpret_cast( + const_cast(this->ProcessOutput.c_str())); + //zlib makes the guarantee that this is the maximum output size + int outSize = static_cast( + static_cast(this->ProcessOutput.size()) * 1.001 + 13.0); + unsigned char* out = new unsigned char[outSize]; + + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + ret = deflateInit(&strm, -1); //default compression level + if (ret != Z_OK) + { + delete[] out; + return; + } + + strm.avail_in = static_cast(this->ProcessOutput.size()); + strm.next_in = in; + strm.avail_out = outSize; + strm.next_out = out; + ret = deflate(&strm, Z_FINISH); + + if(ret == Z_STREAM_ERROR || ret != Z_STREAM_END) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Error during output " + "compression. Sending uncompressed output." << std::endl); + delete[] out; + return; + } + + (void)deflateEnd(&strm); + + unsigned char *encoded_buffer + = new unsigned char[static_cast(outSize * 1.5)]; + + unsigned long rlen + = cmsysBase64_Encode(out, strm.total_out, encoded_buffer, 1); + + for(unsigned long i = 0; i < rlen; i++) + { + this->CompressedOutput += encoded_buffer[i]; + } + + if(strm.total_in) + { + this->CompressionRatio = static_cast(strm.total_out) / + static_cast(strm.total_in); + } + + delete [] encoded_buffer; + delete [] out; +} + +//--------------------------------------------------------- +bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started) +{ + if ((!this->TestHandler->MemCheck && + this->CTest->ShouldCompressTestOutput()) || + (this->TestHandler->MemCheck && + this->CTest->ShouldCompressMemCheckOutput())) + { + this->CompressOutput(); + } + + this->WriteLogOutputTop(completed, total); + std::string reason; + bool passed = true; + int res = started ? this->TestProcess->GetProcessStatus() + : cmsysProcess_State_Error; + int retVal = this->TestProcess->GetExitValue(); + std::vector >::iterator passIt; + bool forceFail = false; + bool outputTestErrorsToConsole = false; + if ( this->TestProperties->RequiredRegularExpressions.size() > 0 ) + { + bool found = false; + for ( passIt = this->TestProperties->RequiredRegularExpressions.begin(); + passIt != this->TestProperties->RequiredRegularExpressions.end(); + ++ passIt ) + { + if ( passIt->first.find(this->ProcessOutput.c_str()) ) + { + found = true; + reason = "Required regular expression found."; + } + } + if ( !found ) + { + reason = "Required regular expression not found."; + forceFail = true; + } + reason += "Regex=["; + for ( passIt = this->TestProperties->RequiredRegularExpressions.begin(); + passIt != this->TestProperties->RequiredRegularExpressions.end(); + ++ passIt ) + { + reason += passIt->second; + reason += "\n"; + } + reason += "]"; + } + if ( this->TestProperties->ErrorRegularExpressions.size() > 0 ) + { + for ( passIt = this->TestProperties->ErrorRegularExpressions.begin(); + passIt != this->TestProperties->ErrorRegularExpressions.end(); + ++ passIt ) + { + if ( passIt->first.find(this->ProcessOutput.c_str()) ) + { + reason = "Error regular expression found in output."; + reason += " Regex=["; + reason += passIt->second; + reason += "]"; + forceFail = true; + } + } + } + if (res == cmsysProcess_State_Exited) + { + bool success = + !forceFail && (retVal == 0 || + this->TestProperties->RequiredRegularExpressions.size()); + if((success && !this->TestProperties->WillFail) + || (!success && this->TestProperties->WillFail)) + { + this->TestResult.Status = cmCTestTestHandler::COMPLETED; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Passed " ); + } + else + { + this->TestResult.Status = cmCTestTestHandler::FAILED; + cmCTestLog(this->CTest, HANDLER_OUTPUT, "***Failed " << reason ); + outputTestErrorsToConsole = this->CTest->OutputTestOutputOnTestFailure; + } + } + else if ( res == cmsysProcess_State_Expired ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, "***Timeout "); + this->TestResult.Status = cmCTestTestHandler::TIMEOUT; + outputTestErrorsToConsole = this->CTest->OutputTestOutputOnTestFailure; + } + else if ( res == cmsysProcess_State_Exception ) + { + outputTestErrorsToConsole = this->CTest->OutputTestOutputOnTestFailure; + cmCTestLog(this->CTest, HANDLER_OUTPUT, "***Exception: "); + switch(this->TestProcess->GetExitException()) + { + case cmsysProcess_Exception_Fault: + cmCTestLog(this->CTest, HANDLER_OUTPUT, "SegFault"); + this->TestResult.Status = cmCTestTestHandler::SEGFAULT; + break; + case cmsysProcess_Exception_Illegal: + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Illegal"); + this->TestResult.Status = cmCTestTestHandler::ILLEGAL; + break; + case cmsysProcess_Exception_Interrupt: + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Interrupt"); + this->TestResult.Status = cmCTestTestHandler::INTERRUPT; + break; + case cmsysProcess_Exception_Numerical: + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Numerical"); + this->TestResult.Status = cmCTestTestHandler::NUMERICAL; + break; + default: + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Other"); + this->TestResult.Status = cmCTestTestHandler::OTHER_FAULT; + } + } + else //cmsysProcess_State_Error + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, "***Not Run "); + } + + passed = this->TestResult.Status == cmCTestTestHandler::COMPLETED; + char buf[1024]; + sprintf(buf, "%6.2f sec", this->TestProcess->GetTotalTime()); + cmCTestLog(this->CTest, HANDLER_OUTPUT, buf << "\n" ); + + if ( outputTestErrorsToConsole ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, this->ProcessOutput << std::endl ); + } + + if ( this->TestHandler->LogFile ) + { + *this->TestHandler->LogFile << "Test time = " << buf << std::endl; + } + + // Set the working directory to the tests directory + std::string oldpath = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::ChangeDirectory(this->TestProperties->Directory.c_str()); + + this->DartProcessing(); + + // restore working directory + cmSystemTools::ChangeDirectory(oldpath.c_str()); + + + // if this is doing MemCheck then all the output needs to be put into + // Output since that is what is parsed by cmCTestMemCheckHandler + if(!this->TestHandler->MemCheck && started) + { + this->TestHandler->CleanTestOutput(this->ProcessOutput, + static_cast + (this->TestResult.Status == cmCTestTestHandler::COMPLETED ? + this->TestHandler->CustomMaximumPassedTestOutputSize : + this->TestHandler->CustomMaximumFailedTestOutputSize)); + } + this->TestResult.Reason = reason; + if (this->TestHandler->LogFile) + { + bool pass = true; + const char* reasonType = "Test Pass Reason"; + if(this->TestResult.Status != cmCTestTestHandler::COMPLETED && + this->TestResult.Status != cmCTestTestHandler::NOT_RUN) + { + reasonType = "Test Fail Reason"; + pass = false; + } + double ttime = this->TestProcess->GetTotalTime(); + int hours = static_cast(ttime / (60 * 60)); + int minutes = static_cast(ttime / 60) % 60; + int seconds = static_cast(ttime) % 60; + char buffer[100]; + sprintf(buffer, "%02d:%02d:%02d", hours, minutes, seconds); + *this->TestHandler->LogFile + << "----------------------------------------------------------" + << std::endl; + if(this->TestResult.Reason.size()) + { + *this->TestHandler->LogFile << reasonType << ":\n" + << this->TestResult.Reason << "\n"; + } + else + { + if(pass) + { + *this->TestHandler->LogFile << "Test Passed.\n"; + } + else + { + *this->TestHandler->LogFile << "Test Failed.\n"; + } + } + *this->TestHandler->LogFile << "\"" << this->TestProperties->Name.c_str() + << "\" end time: " << this->CTest->CurrentTime() << std::endl + << "\"" << this->TestProperties->Name.c_str() << "\" time elapsed: " + << buffer << std::endl + << "----------------------------------------------------------" + << std::endl << std::endl; + } + // if the test actually started and ran + // record the results in TestResult + if(started) + { + bool compress = !this->TestHandler->MemCheck && + this->CompressionRatio < 1 && + this->CTest->ShouldCompressTestOutput(); + this->TestResult.Output = compress ? this->CompressedOutput + : this->ProcessOutput; + this->TestResult.CompressOutput = compress; + this->TestResult.ReturnValue = this->TestProcess->GetExitValue(); + this->TestResult.CompletionStatus = "Completed"; + this->TestResult.ExecutionTime = this->TestProcess->GetTotalTime(); + this->MemCheckPostProcess(); + this->ComputeWeightedCost(); + } + // Always push the current TestResult onto the + // TestHandler vector + this->TestHandler->TestResults.push_back(this->TestResult); + delete this->TestProcess; + return passed; +} + +//---------------------------------------------------------------------- +void cmCTestRunTest::ComputeWeightedCost() +{ + double prev = static_cast(this->TestProperties->PreviousRuns); + double avgcost = static_cast(this->TestProperties->Cost); + double current = this->TestResult.ExecutionTime; + + if(this->TestResult.Status == cmCTestTestHandler::COMPLETED) + { + this->TestProperties->Cost = + static_cast(((prev * avgcost) + current) / (prev + 1.0)); + this->TestProperties->PreviousRuns++; + } +} + +//---------------------------------------------------------------------- +void cmCTestRunTest::MemCheckPostProcess() +{ + if(!this->TestHandler->MemCheck) + { + return; + } + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, this->Index + << ": process test output now: " + << this->TestProperties->Name.c_str() << " " + << this->TestResult.Name.c_str() << std::endl); + cmCTestMemCheckHandler * handler = static_cast + (this->TestHandler); + if(handler->MemoryTesterStyle == cmCTestMemCheckHandler::BOUNDS_CHECKER) + { + handler->PostProcessBoundsCheckerTest(this->TestResult); + } + else if(handler->MemoryTesterStyle == cmCTestMemCheckHandler::PURIFY) + { + handler->PostProcessPurifyTest(this->TestResult); + } +} + +//---------------------------------------------------------------------- +// Starts the execution of a test. Returns once it has started +bool cmCTestRunTest::StartTest(size_t total) +{ + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::setw(2*getNumWidth(total) + 8) + << "Start " + << std::setw(getNumWidth(this->TestHandler->GetMaxIndex())) + << this->TestProperties->Index << ": " + << this->TestProperties->Name << std::endl); + this->ComputeArguments(); + std::vector& args = this->TestProperties->Args; + this->TestResult.Properties = this->TestProperties; + this->TestResult.ExecutionTime = 0; + this->TestResult.CompressOutput = false; + this->TestResult.ReturnValue = -1; + this->TestResult.CompletionStatus = "Failed to start"; + this->TestResult.Status = cmCTestTestHandler::BAD_COMMAND; + this->TestResult.TestCount = this->TestProperties->Index; + this->TestResult.Name = this->TestProperties->Name; + this->TestResult.Path = this->TestProperties->Directory.c_str(); + + if(args.size() >= 2 && args[1] == "NOT_AVAILABLE") + { + this->TestProcess = new cmProcess; + std::string msg; + if(this->CTest->GetConfigType().empty()) + { + msg = "Test not available without configuration."; + msg += " (Missing \"-C \"?)"; + } + else + { + msg = "Test not available in configuration \""; + msg += this->CTest->GetConfigType(); + msg += "\"."; + } + *this->TestHandler->LogFile << msg << std::endl; + cmCTestLog(this->CTest, ERROR_MESSAGE, msg << std::endl); + this->TestResult.Output = msg; + this->TestResult.FullCommandLine = ""; + this->TestResult.CompletionStatus = "Not Run"; + this->TestResult.Status = cmCTestTestHandler::NOT_RUN; + return false; + } + + // Check if all required files exist + for(std::vector::iterator i = + this->TestProperties->RequiredFiles.begin(); + i != this->TestProperties->RequiredFiles.end(); ++i) + { + std::string file = *i; + + if(!cmSystemTools::FileExists(file.c_str())) + { + //Required file was not found + this->TestProcess = new cmProcess; + *this->TestHandler->LogFile << "Unable to find required file: " + << file.c_str() << std::endl; + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unable to find required file: " + << file.c_str() << std::endl); + this->TestResult.Output = "Unable to find required file: " + file; + this->TestResult.FullCommandLine = ""; + this->TestResult.CompletionStatus = "Not Run"; + this->TestResult.Status = cmCTestTestHandler::NOT_RUN; + return false; + } + } + // log and return if we did not find the executable + if (this->ActualCommand == "") + { + // if the command was not found create a TestResult object + // that has that information + this->TestProcess = new cmProcess; + *this->TestHandler->LogFile << "Unable to find executable: " + << args[1].c_str() << std::endl; + cmCTestLog(this->CTest, ERROR_MESSAGE, "Unable to find executable: " + << args[1].c_str() << std::endl); + this->TestResult.Output = "Unable to find executable: " + args[1]; + this->TestResult.FullCommandLine = ""; + this->TestResult.CompletionStatus = "Not Run"; + this->TestResult.Status = cmCTestTestHandler::NOT_RUN; + return false; + } + this->StartTime = this->CTest->CurrentTime(); + + double timeout = this->ResolveTimeout(); + + if(this->StopTimePassed) + { + return false; + } + return this->ForkProcess(timeout, this->TestProperties->ExplicitTimeout, + &this->TestProperties->Environment); +} + +//---------------------------------------------------------------------- +void cmCTestRunTest::ComputeArguments() +{ + std::vector::const_iterator j = + this->TestProperties->Args.begin(); + ++j; // skip test name + + // find the test executable + if(this->TestHandler->MemCheck) + { + cmCTestMemCheckHandler * handler = static_cast + (this->TestHandler); + this->ActualCommand = handler->MemoryTester.c_str(); + this->TestProperties->Args[1] = this->TestHandler->FindTheExecutable( + this->TestProperties->Args[1].c_str()); + } + else + { + this->ActualCommand = + this->TestHandler->FindTheExecutable( + this->TestProperties->Args[1].c_str()); + ++j; //skip the executable (it will be actualCommand) + } + std::string testCommand + = cmSystemTools::ConvertToOutputPath(this->ActualCommand.c_str()); + + //Prepends memcheck args to our command string + this->TestHandler->GenerateTestCommand(this->Arguments); + for(std::vector::iterator i = this->Arguments.begin(); + i != this->Arguments.end(); ++i) + { + testCommand += " \""; + testCommand += *i; + testCommand += "\""; + } + + for(;j != this->TestProperties->Args.end(); ++j) + { + testCommand += " \""; + testCommand += *j; + testCommand += "\""; + this->Arguments.push_back(*j); + } + this->TestResult.FullCommandLine = testCommand; + + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, std::endl + << this->Index << ": " + << (this->TestHandler->MemCheck?"MemCheck":"Test") + << " command: " << testCommand + << std::endl); +} + +//---------------------------------------------------------------------- +void cmCTestRunTest::DartProcessing() +{ + if (!this->ProcessOutput.empty() && + this->ProcessOutput.find("ProcessOutput.npos) + { + if (this->TestHandler->DartStuff.find(this->ProcessOutput.c_str())) + { + std::string dartString = this->TestHandler->DartStuff.match(1); + // keep searching and replacing until none are left + while (this->TestHandler->DartStuff1.find(this->ProcessOutput.c_str())) + { + // replace the exact match for the string + cmSystemTools::ReplaceString(this->ProcessOutput, + this->TestHandler->DartStuff1.match(1).c_str(), ""); + } + this->TestResult.RegressionImages + = this->TestHandler->GenerateRegressionImages(dartString); + } + } +} + +//---------------------------------------------------------------------- +double cmCTestRunTest::ResolveTimeout() +{ + double timeout = this->TestProperties->Timeout; + + if(this->CTest->GetStopTime() == "") + { + return timeout; + } + struct tm* lctime; + time_t current_time = time(0); + lctime = gmtime(¤t_time); + int gm_hour = lctime->tm_hour; + time_t gm_time = mktime(lctime); + lctime = localtime(¤t_time); + int local_hour = lctime->tm_hour; + + int tzone_offset = local_hour - gm_hour; + if(gm_time > current_time && gm_hour < local_hour) + { + // this means gm_time is on the next day + tzone_offset -= 24; + } + else if(gm_time < current_time && gm_hour > local_hour) + { + // this means gm_time is on the previous day + tzone_offset += 24; + } + + tzone_offset *= 100; + char buf[1024]; + // add todays year day and month to the time in str because + // curl_getdate no longer assumes the day is today + sprintf(buf, "%d%02d%02d %s %+05i", + lctime->tm_year + 1900, + lctime->tm_mon + 1, + lctime->tm_mday, + this->CTest->GetStopTime().c_str(), + tzone_offset); + + time_t stop_time = curl_getdate(buf, ¤t_time); + if(stop_time == -1) + { + return timeout; + } + + //the stop time refers to the next day + if(this->CTest->NextDayStopTime) + { + stop_time += 24*60*60; + } + int stop_timeout = static_cast(stop_time - current_time) % (24*60*60); + this->CTest->LastStopTimeout = stop_timeout; + + if(stop_timeout <= 0 || stop_timeout > this->CTest->LastStopTimeout) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "The stop time has been passed. " + "Stopping all tests." << std::endl); + this->StopTimePassed = true; + return 0; + } + return timeout == 0 ? stop_timeout : + (timeout < stop_timeout ? timeout : stop_timeout); +} + +//---------------------------------------------------------------------- +bool cmCTestRunTest::ForkProcess(double testTimeOut, bool explicitTimeout, + std::vector* environment) +{ + this->TestProcess = new cmProcess; + this->TestProcess->SetId(this->Index); + this->TestProcess->SetWorkingDirectory( + this->TestProperties->Directory.c_str()); + this->TestProcess->SetCommand(this->ActualCommand.c_str()); + this->TestProcess->SetCommandArguments(this->Arguments); + + // determine how much time we have + double timeout = this->CTest->GetRemainingTimeAllowed() - 120; + if (this->CTest->GetTimeOut() > 0 && this->CTest->GetTimeOut() < timeout) + { + timeout = this->CTest->GetTimeOut(); + } + if (testTimeOut > 0 + && testTimeOut < this->CTest->GetRemainingTimeAllowed()) + { + timeout = testTimeOut; + } + // always have at least 1 second if we got to here + if (timeout <= 0) + { + timeout = 1; + } + // handle timeout explicitly set to 0 + if (testTimeOut == 0 && explicitTimeout) + { + timeout = 0; + } + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, this->Index << ": " + << "Test timeout computed to be: " << timeout << "\n"); + + this->TestProcess->SetTimeout(timeout); + +#ifdef CMAKE_BUILD_WITH_CMAKE + cmSystemTools::SaveRestoreEnvironment sre; +#endif + + if (environment && environment->size()>0) + { + cmSystemTools::AppendEnv(environment); + } + + return this->TestProcess->StartProcess(); +} + +void cmCTestRunTest::WriteLogOutputTop(size_t completed, size_t total) +{ + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::setw(getNumWidth(total)) + << completed << "/"); + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::setw(getNumWidth(total)) + << total << " "); + + if ( this->TestHandler->MemCheck ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, "MemCheck"); + } + else + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Test"); + } + + cmOStringStream indexStr; + indexStr << " #" << this->Index << ":"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, + std::setw(3 + getNumWidth(this->TestHandler->GetMaxIndex())) + << indexStr.str().c_str()); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " "); + const int maxTestNameWidth = this->CTest->GetMaxTestNameWidth(); + std::string outname = this->TestProperties->Name + " "; + outname.resize(maxTestNameWidth + 4, '.'); + + *this->TestHandler->LogFile << this->TestProperties->Index << "/" + << this->TestHandler->TotalNumberOfTests << " Testing: " + << this->TestProperties->Name << std::endl; + *this->TestHandler->LogFile << this->TestProperties->Index << "/" + << this->TestHandler->TotalNumberOfTests + << " Test: " << this->TestProperties->Name.c_str() << std::endl; + *this->TestHandler->LogFile << "Command: \"" << this->ActualCommand << "\""; + + for (std::vector::iterator i = this->Arguments.begin(); + i != this->Arguments.end(); ++i) + { + *this->TestHandler->LogFile + << " \"" << i->c_str() << "\""; + } + *this->TestHandler->LogFile << std::endl + << "Directory: " << this->TestProperties->Directory << std::endl + << "\"" << this->TestProperties->Name.c_str() << "\" start time: " + << this->StartTime << std::endl; + + *this->TestHandler->LogFile + << "Output:" << std::endl + << "----------------------------------------------------------" + << std::endl; + *this->TestHandler->LogFile + << this->ProcessOutput.c_str() << "" << std::endl; + + cmCTestLog(this->CTest, HANDLER_OUTPUT, outname.c_str()); + cmCTestLog(this->CTest, DEBUG, "Testing " + << this->TestProperties->Name.c_str() << " ... "); +} diff --git a/Source/CTest/cmCTestRunTest.h b/Source/CTest/cmCTestRunTest.h new file mode 100644 index 0000000..89456d5 --- /dev/null +++ b/Source/CTest/cmCTestRunTest.h @@ -0,0 +1,112 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestRunTest_h +#define cmCTestRunTest_h + +#include +#include +#include + +/** \class cmRunTest + * \brief represents a single test to be run + * + * cmRunTest contains the information related to running a single test + */ +class cmCTestRunTest +{ +public: + cmCTestRunTest(cmCTestTestHandler* handler); + ~cmCTestRunTest(); + + void SetTestProperties(cmCTestTestHandler::cmCTestTestProperties * prop) + { this->TestProperties = prop; } + + cmCTestTestHandler::cmCTestTestProperties * GetTestProperties() + { return this->TestProperties; } + + void SetIndex(int i) { this->Index = i; } + + int GetIndex() { return this->Index; } + + std::string GetProcessOutput() { return this->ProcessOutput; } + + bool IsStopTimePassed() { return this->StopTimePassed; } + + cmCTestTestHandler::cmCTestTestResult GetTestResults() + { return this->TestResult; } + + // Read and store output. Returns true if it must be called again. + bool CheckOutput(); + + // Compresses the output, writing to CompressedOutput + void CompressOutput(); + + //launch the test process, return whether it started correctly + bool StartTest(size_t total); + //capture and report the test results + bool EndTest(size_t completed, size_t total, bool started); + //Called by ctest -N to log the command string + void ComputeArguments(); + + void ComputeWeightedCost(); +private: + void DartProcessing(); + void ExeNotFound(std::string exe); + // Figures out a final timeout which is min(STOP_TIME, NOW+TIMEOUT) + double ResolveTimeout(); + bool ForkProcess(double testTimeOut, bool explicitTimeout, + std::vector* environment); + void WriteLogOutputTop(size_t completed, size_t total); + //Run post processing of the process output for MemCheck + void MemCheckPostProcess(); + + cmCTestTestHandler::cmCTestTestProperties * TestProperties; + //Pointer back to the "parent"; the handler that invoked this test run + cmCTestTestHandler * TestHandler; + cmCTest * CTest; + cmProcess * TestProcess; + //If the executable to run is ctest, don't create a new process; + //just instantiate a new cmTest. (Can be disabled for a single test + //if this option is set to false.) + //bool OptimizeForCTest; + + bool UsePrefixCommand; + std::string PrefixCommand; + + std::string ProcessOutput; + std::string CompressedOutput; + double CompressionRatio; + //The test results + cmCTestTestHandler::cmCTestTestResult TestResult; + int Index; + std::string StartTime; + std::string ActualCommand; + std::vector Arguments; + bool StopTimePassed; +}; + +inline int getNumWidth(size_t n) +{ + int numWidth = 1; + if(n >= 10) + { + numWidth = 2; + } + if(n >= 100) + { + numWidth = 3; + } + return numWidth; +} + +#endif + diff --git a/Source/CTest/cmCTestSVN.cxx b/Source/CTest/cmCTestSVN.cxx new file mode 100644 index 0000000..fab9a8c --- /dev/null +++ b/Source/CTest/cmCTestSVN.cxx @@ -0,0 +1,450 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestSVN.h" + +#include "cmCTest.h" +#include "cmSystemTools.h" +#include "cmXMLParser.h" +#include "cmXMLSafe.h" + +#include + +//---------------------------------------------------------------------------- +cmCTestSVN::cmCTestSVN(cmCTest* ct, std::ostream& log): + cmCTestGlobalVC(ct, log) +{ + this->PriorRev = this->Unknown; +} + +//---------------------------------------------------------------------------- +cmCTestSVN::~cmCTestSVN() +{ +} + +//---------------------------------------------------------------------------- +void cmCTestSVN::CleanupImpl() +{ + const char* svn = this->CommandLineTool.c_str(); + const char* svn_cleanup[] = {svn, "cleanup", 0}; + OutputLogger out(this->Log, "cleanup-out> "); + OutputLogger err(this->Log, "cleanup-err> "); + this->RunChild(svn_cleanup, &out, &err); +} + +//---------------------------------------------------------------------------- +class cmCTestSVN::InfoParser: public cmCTestVC::LineParser +{ +public: + InfoParser(cmCTestSVN* svn, const char* prefix, std::string& rev): + SVN(svn), Rev(rev) + { + this->SetLog(&svn->Log, prefix); + this->RegexRev.compile("^Revision: ([0-9]+)"); + this->RegexURL.compile("^URL: +([^ ]+) *$"); + this->RegexRoot.compile("^Repository Root: +([^ ]+) *$"); + } +private: + cmCTestSVN* SVN; + std::string& Rev; + cmsys::RegularExpression RegexRev; + cmsys::RegularExpression RegexURL; + cmsys::RegularExpression RegexRoot; + virtual bool ProcessLine() + { + if(this->RegexRev.find(this->Line)) + { + this->Rev = this->RegexRev.match(1); + } + else if(this->RegexURL.find(this->Line)) + { + this->SVN->URL = this->RegexURL.match(1); + } + else if(this->RegexRoot.find(this->Line)) + { + this->SVN->Root = this->RegexRoot.match(1); + } + return true; + } +}; + +//---------------------------------------------------------------------------- +static bool cmCTestSVNPathStarts(std::string const& p1, std::string const& p2) +{ + // Does path p1 start with path p2? + if(p1.size() == p2.size()) + { + return p1 == p2; + } + else if(p1.size() > p2.size() && p1[p2.size()] == '/') + { + return strncmp(p1.c_str(), p2.c_str(), p2.size()) == 0; + } + else + { + return false; + } +} + +//---------------------------------------------------------------------------- +std::string cmCTestSVN::LoadInfo() +{ + // Run "svn info" to get the repository info from the work tree. + const char* svn = this->CommandLineTool.c_str(); + const char* svn_info[] = {svn, "info", 0}; + std::string rev; + InfoParser out(this, "info-out> ", rev); + OutputLogger err(this->Log, "info-err> "); + this->RunChild(svn_info, &out, &err); + return rev; +} + +//---------------------------------------------------------------------------- +void cmCTestSVN::NoteOldRevision() +{ + this->OldRevision = this->LoadInfo(); + this->Log << "Revision before update: " << this->OldRevision << "\n"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Old revision of repository is: " + << this->OldRevision << "\n"); + this->PriorRev.Rev = this->OldRevision; +} + +//---------------------------------------------------------------------------- +void cmCTestSVN::NoteNewRevision() +{ + this->NewRevision = this->LoadInfo(); + this->Log << "Revision after update: " << this->NewRevision << "\n"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " New revision of repository is: " + << this->NewRevision << "\n"); + + // this->Root = ""; // uncomment to test GuessBase + this->Log << "URL = " << this->URL << "\n"; + this->Log << "Root = " << this->Root << "\n"; + + // Compute the base path the working tree has checked out under + // the repository root. + if(!this->Root.empty() && cmCTestSVNPathStarts(this->URL, this->Root)) + { + this->Base = cmCTest::DecodeURL(this->URL.substr(this->Root.size())); + this->Base += "/"; + } + this->Log << "Base = " << this->Base << "\n"; +} + +//---------------------------------------------------------------------------- +void cmCTestSVN::GuessBase(std::vector const& changes) +{ + // Subversion did not give us a good repository root so we need to + // guess the base path from the URL and the paths in a revision with + // changes under it. + + // Consider each possible URL suffix from longest to shortest. + for(std::string::size_type slash = this->URL.find('/'); + this->Base.empty() && slash != std::string::npos; + slash = this->URL.find('/', slash+1)) + { + // If the URL suffix is a prefix of at least one path then it is the base. + std::string base = cmCTest::DecodeURL(this->URL.substr(slash)); + for(std::vector::const_iterator ci = changes.begin(); + this->Base.empty() && ci != changes.end(); ++ci) + { + if(cmCTestSVNPathStarts(ci->Path, base)) + { + this->Base = base; + } + } + } + + // We always append a slash so that we know paths beginning in the + // base lie under its path. If no base was found then the working + // tree must be a checkout of the entire repo and this will match + // the leading slash in all paths. + this->Base += "/"; + + this->Log << "Guessed Base = " << this->Base << "\n"; +} + +//---------------------------------------------------------------------------- +const char* cmCTestSVN::LocalPath(std::string const& path) +{ + if(path.size() > this->Base.size() && + strncmp(path.c_str(), this->Base.c_str(), this->Base.size()) == 0) + { + // This path lies under the base, so return a relative path. + return path.c_str() + this->Base.size(); + } + else + { + // This path does not lie under the base, so ignore it. + return 0; + } +} + +//---------------------------------------------------------------------------- +class cmCTestSVN::UpdateParser: public cmCTestVC::LineParser +{ +public: + UpdateParser(cmCTestSVN* svn, const char* prefix): SVN(svn) + { + this->SetLog(&svn->Log, prefix); + this->RegexUpdate.compile("^([ADUCGE ])([ADUCGE ])[B ] +(.+)$"); + } +private: + cmCTestSVN* SVN; + cmsys::RegularExpression RegexUpdate; + + bool ProcessLine() + { + if(this->RegexUpdate.find(this->Line)) + { + this->DoPath(this->RegexUpdate.match(1)[0], + this->RegexUpdate.match(2)[0], + this->RegexUpdate.match(3)); + } + return true; + } + + void DoPath(char path_status, char prop_status, std::string const& path) + { + char status = (path_status != ' ')? path_status : prop_status; + std::string dir = cmSystemTools::GetFilenamePath(path); + std::string name = cmSystemTools::GetFilenameName(path); + // See "svn help update". + switch(status) + { + case 'G': + this->SVN->Dirs[dir][name].Status = PathModified; + break; + case 'C': + this->SVN->Dirs[dir][name].Status = PathConflicting; + break; + case 'A': case 'D': case 'U': + this->SVN->Dirs[dir][name].Status = PathUpdated; + break; + case 'E': // TODO? + case '?': case ' ': default: + break; + } + } +}; + +//---------------------------------------------------------------------------- +bool cmCTestSVN::UpdateImpl() +{ + // Get user-specified update options. + std::string opts = this->CTest->GetCTestConfiguration("UpdateOptions"); + if(opts.empty()) + { + opts = this->CTest->GetCTestConfiguration("SVNUpdateOptions"); + } + std::vector args = cmSystemTools::ParseArguments(opts.c_str()); + + // Specify the start time for nightly testing. + if(this->CTest->GetTestModel() == cmCTest::NIGHTLY) + { + args.push_back("-r{" + this->GetNightlyTime() + " +0000}"); + } + + std::vector svn_update; + svn_update.push_back(this->CommandLineTool.c_str()); + svn_update.push_back("update"); + svn_update.push_back("--non-interactive"); + for(std::vector::const_iterator ai = args.begin(); + ai != args.end(); ++ai) + { + svn_update.push_back(ai->c_str()); + } + svn_update.push_back(0); + + UpdateParser out(this, "up-out> "); + OutputLogger err(this->Log, "up-err> "); + return this->RunUpdateCommand(&svn_update[0], &out, &err); +} + +//---------------------------------------------------------------------------- +class cmCTestSVN::LogParser: public cmCTestVC::OutputLogger, + private cmXMLParser +{ +public: + LogParser(cmCTestSVN* svn, const char* prefix): + OutputLogger(svn->Log, prefix), SVN(svn) { this->InitializeParser(); } + ~LogParser() { this->CleanupParser(); } +private: + cmCTestSVN* SVN; + + typedef cmCTestSVN::Revision Revision; + typedef cmCTestSVN::Change Change; + Revision Rev; + std::vector Changes; + Change CurChange; + std::vector CData; + + virtual bool ProcessChunk(const char* data, int length) + { + this->OutputLogger::ProcessChunk(data, length); + this->ParseChunk(data, length); + return true; + } + + virtual void StartElement(const char* name, const char** atts) + { + this->CData.clear(); + if(strcmp(name, "logentry") == 0) + { + this->Rev = Revision(); + if(const char* rev = this->FindAttribute(atts, "revision")) + { + this->Rev.Rev = rev; + } + this->Changes.clear(); + } + else if(strcmp(name, "path") == 0) + { + this->CurChange = Change(); + if(const char* action = this->FindAttribute(atts, "action")) + { + this->CurChange.Action = action[0]; + } + } + } + + virtual void CharacterDataHandler(const char* data, int length) + { + this->CData.insert(this->CData.end(), data, data+length); + } + + virtual void EndElement(const char* name) + { + if(strcmp(name, "logentry") == 0) + { + this->SVN->DoRevision(this->Rev, this->Changes); + } + else if(strcmp(name, "path") == 0 && !this->CData.empty()) + { + this->CurChange.Path.assign(&this->CData[0], this->CData.size()); + this->Changes.push_back(this->CurChange); + } + else if(strcmp(name, "author") == 0 && !this->CData.empty()) + { + this->Rev.Author.assign(&this->CData[0], this->CData.size()); + } + else if(strcmp(name, "date") == 0 && !this->CData.empty()) + { + this->Rev.Date.assign(&this->CData[0], this->CData.size()); + } + else if(strcmp(name, "msg") == 0 && !this->CData.empty()) + { + this->Rev.Log.assign(&this->CData[0], this->CData.size()); + } + this->CData.clear(); + } + + virtual void ReportError(int, int, const char* msg) + { + this->SVN->Log << "Error parsing svn log xml: " << msg << "\n"; + } +}; + +//---------------------------------------------------------------------------- +void cmCTestSVN::LoadRevisions() +{ + // We are interested in every revision included in the update. + std::string revs; + if(atoi(this->OldRevision.c_str()) < atoi(this->NewRevision.c_str())) + { + revs = "-r" + this->OldRevision + ":" + this->NewRevision; + } + else + { + revs = "-r" + this->NewRevision; + } + + // Run "svn log" to get all global revisions of interest. + const char* svn = this->CommandLineTool.c_str(); + const char* svn_log[] = {svn, "log", "--xml", "-v", revs.c_str(), 0}; + { + LogParser out(this, "log-out> "); + OutputLogger err(this->Log, "log-err> "); + this->RunChild(svn_log, &out, &err); + } +} + +//---------------------------------------------------------------------------- +void cmCTestSVN::DoRevision(Revision const& revision, + std::vector const& changes) +{ + // Guess the base checkout path from the changes if necessary. + if(this->Base.empty() && !changes.empty()) + { + this->GuessBase(changes); + } + this->cmCTestGlobalVC::DoRevision(revision, changes); +} + +//---------------------------------------------------------------------------- +class cmCTestSVN::StatusParser: public cmCTestVC::LineParser +{ +public: + StatusParser(cmCTestSVN* svn, const char* prefix): SVN(svn) + { + this->SetLog(&svn->Log, prefix); + this->RegexStatus.compile("^([ACDIMRX?!~ ])([CM ])[ L]... +(.+)$"); + } +private: + cmCTestSVN* SVN; + cmsys::RegularExpression RegexStatus; + bool ProcessLine() + { + if(this->RegexStatus.find(this->Line)) + { + this->DoPath(this->RegexStatus.match(1)[0], + this->RegexStatus.match(2)[0], + this->RegexStatus.match(3)); + } + return true; + } + + void DoPath(char path_status, char prop_status, std::string const& path) + { + char status = (path_status != ' ')? path_status : prop_status; + // See "svn help status". + switch(status) + { + case 'M': case '!': case 'A': case 'D': case 'R': + this->SVN->DoModification(PathModified, path); + break; + case 'C': case '~': + this->SVN->DoModification(PathConflicting, path); + break; + case 'X': case 'I': case '?': case ' ': default: + break; + } + } +}; + +//---------------------------------------------------------------------------- +void cmCTestSVN::LoadModifications() +{ + // Run "svn status" which reports local modifications. + const char* svn = this->CommandLineTool.c_str(); + const char* svn_status[] = {svn, "status", "--non-interactive", 0}; + StatusParser out(this, "status-out> "); + OutputLogger err(this->Log, "status-err> "); + this->RunChild(svn_status, &out, &err); +} + +//---------------------------------------------------------------------------- +void cmCTestSVN::WriteXMLGlobal(std::ostream& xml) +{ + this->cmCTestGlobalVC::WriteXMLGlobal(xml); + + xml << "\t" << this->Base << "\n"; +} diff --git a/Source/CTest/cmCTestSVN.h b/Source/CTest/cmCTestSVN.h new file mode 100644 index 0000000..f72c58f --- /dev/null +++ b/Source/CTest/cmCTestSVN.h @@ -0,0 +1,68 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestSVN_h +#define cmCTestSVN_h + +#include "cmCTestGlobalVC.h" + +/** \class cmCTestSVN + * \brief Interaction with subversion command-line tool + * + */ +class cmCTestSVN: public cmCTestGlobalVC +{ +public: + /** Construct with a CTest instance and update log stream. */ + cmCTestSVN(cmCTest* ctest, std::ostream& log); + + virtual ~cmCTestSVN(); + +private: + // Implement cmCTestVC internal API. + virtual void CleanupImpl(); + virtual void NoteOldRevision(); + virtual void NoteNewRevision(); + virtual bool UpdateImpl(); + + // URL of repository directory checked out in the working tree. + std::string URL; + + // URL of repository root directory. + std::string Root; + + // Directory under repository root checked out in working tree. + std::string Base; + + std::string LoadInfo(); + void LoadModifications(); + void LoadRevisions(); + + void GuessBase(std::vector const& changes); + const char* LocalPath(std::string const& path); + + void DoRevision(Revision const& revision, + std::vector const& changes); + + void WriteXMLGlobal(std::ostream& xml); + + // Parsing helper classes. + class InfoParser; + class LogParser; + class StatusParser; + class UpdateParser; + friend class InfoParser; + friend class LogParser; + friend class StatusParser; + friend class UpdateParser; +}; + +#endif diff --git a/Source/CTest/cmCTestScriptHandler.cxx b/Source/CTest/cmCTestScriptHandler.cxx new file mode 100644 index 0000000..5841b8d --- /dev/null +++ b/Source/CTest/cmCTestScriptHandler.cxx @@ -0,0 +1,1090 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCTestScriptHandler.h" + +#include "cmCTest.h" +#include "cmake.h" +#include "cmFunctionBlocker.h" +#include "cmMakefile.h" +#include "cmLocalGenerator.h" +#include "cmGlobalGenerator.h" +#include "cmGeneratedFileStream.h" + +//#include +#include + +// used for sleep +#ifdef _WIN32 +#include "windows.h" +#endif + +#include +#include +#include +#include + +// needed for sleep +#if !defined(_WIN32) +# include +#endif + +#include "cmCTestBuildCommand.h" +#include "cmCTestConfigureCommand.h" +#include "cmCTestCoverageCommand.h" +#include "cmCTestEmptyBinaryDirectoryCommand.h" +#include "cmCTestMemCheckCommand.h" +#include "cmCTestReadCustomFilesCommand.h" +#include "cmCTestRunScriptCommand.h" +#include "cmCTestSleepCommand.h" +#include "cmCTestStartCommand.h" +#include "cmCTestSubmitCommand.h" +#include "cmCTestTestCommand.h" +#include "cmCTestUpdateCommand.h" +#include "cmCTestUploadCommand.h" + +#define CTEST_INITIAL_CMAKE_OUTPUT_FILE_NAME "CTestInitialCMakeOutput.log" + +// used to keep elapsed time up to date +class cmCTestScriptFunctionBlocker : public cmFunctionBlocker +{ +public: + cmCTestScriptFunctionBlocker() {} + virtual ~cmCTestScriptFunctionBlocker() {} + virtual bool IsFunctionBlocked(const cmListFileFunction& lff, + cmMakefile &mf, + cmExecutionStatus &); + //virtual bool ShouldRemove(const cmListFileFunction& lff, cmMakefile &mf); + //virtual void ScopeEnded(cmMakefile &mf); + + cmCTestScriptHandler* CTestScriptHandler; +}; + +// simply update the time and don't block anything +bool cmCTestScriptFunctionBlocker:: +IsFunctionBlocked(const cmListFileFunction& , cmMakefile &, + cmExecutionStatus &) +{ + this->CTestScriptHandler->UpdateElapsedTime(); + return false; +} + +//---------------------------------------------------------------------- +cmCTestScriptHandler::cmCTestScriptHandler() +{ + this->Backup = false; + this->EmptyBinDir = false; + this->EmptyBinDirOnce = false; + this->Makefile = 0; + this->LocalGenerator = 0; + this->CMake = 0; + this->GlobalGenerator = 0; + + this->ScriptStartTime = 0; + + // the *60 is becuase the settings are in minutes but GetTime is seconds + this->MinimumInterval = 30*60; + this->ContinuousDuration = -1; +} + +//---------------------------------------------------------------------- +void cmCTestScriptHandler::Initialize() +{ + this->Superclass::Initialize(); + this->Backup = false; + this->EmptyBinDir = false; + this->EmptyBinDirOnce = false; + + this->SourceDir = ""; + this->BinaryDir = ""; + this->BackupSourceDir = ""; + this->BackupBinaryDir = ""; + this->CTestRoot = ""; + this->CVSCheckOut = ""; + this->CTestCmd = ""; + this->UpdateCmd = ""; + this->CTestEnv = ""; + this->InitialCache = ""; + this->CMakeCmd = ""; + this->CMOutFile = ""; + this->ExtraUpdates.clear(); + + this->MinimumInterval = 20*60; + this->ContinuousDuration = -1; + + // what time in seconds did this script start running + this->ScriptStartTime = 0; + + this->Makefile = 0; + if (this->LocalGenerator) + { + delete this->LocalGenerator; + } + this->LocalGenerator = 0; + if (this->GlobalGenerator) + { + delete this->GlobalGenerator; + } + this->GlobalGenerator = 0; + if (this->CMake) + { + delete this->CMake; + } +} + +//---------------------------------------------------------------------- +cmCTestScriptHandler::~cmCTestScriptHandler() +{ + // local generator owns the makefile + this->Makefile = 0; + if (this->LocalGenerator) + { + delete this->LocalGenerator; + } + this->LocalGenerator = 0; + if (this->GlobalGenerator) + { + delete this->GlobalGenerator; + } + this->GlobalGenerator = 0; + if (this->CMake) + { + delete this->CMake; + } +} + + +//---------------------------------------------------------------------- +// just adds an argument to the vector +void cmCTestScriptHandler::AddConfigurationScript(const char *script, + bool pscope) +{ + this->ConfigurationScripts.push_back(script); + this->ScriptProcessScope.push_back(pscope); +} + + +//---------------------------------------------------------------------- +// the generic entry point for handling scripts, this routine will run all +// the scripts provides a -S arguments +int cmCTestScriptHandler::ProcessHandler() +{ + int res = 0; + for (size_t i=0; i < this->ConfigurationScripts.size(); ++i) + { + // for each script run it + res += this->RunConfigurationScript + (cmSystemTools::CollapseFullPath(this->ConfigurationScripts[i].c_str()), + this->ScriptProcessScope[i]); + } + if ( res ) + { + return -1; + } + return 0; +} + +void cmCTestScriptHandler::UpdateElapsedTime() +{ + if (this->LocalGenerator) + { + // set the current elapsed time + char timeString[20]; + int itime = static_cast(cmSystemTools::GetTime() + - this->ScriptStartTime); + sprintf(timeString,"%i",itime); + this->LocalGenerator->GetMakefile()->AddDefinition("CTEST_ELAPSED_TIME", + timeString); + } +} + +//---------------------------------------------------------------------- +void cmCTestScriptHandler::AddCTestCommand(cmCTestCommand* command) +{ + cmCTestCommand* newCom = command; + newCom->CTest = this->CTest; + newCom->CTestScriptHandler = this; + this->CMake->AddCommand(newCom); +} + +int cmCTestScriptHandler::ExecuteScript(const std::string& total_script_arg) +{ + // execute the script passing in the arguments to the script as well as the + // arguments from this invocation of cmake + std::vector argv; + argv.push_back(this->CTest->GetCTestExecutable()); + argv.push_back("-SR"); + argv.push_back(total_script_arg.c_str()); + + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Executable for CTest is: " << + this->CTest->GetCTestExecutable() << "\n"); + + // now pass through all the other arguments + std::vector &initArgs = + this->CTest->GetInitialCommandLineArguments(); + //*** need to make sure this does not have the current script *** + for(size_t i=1; i < initArgs.size(); ++i) + { + argv.push_back(initArgs[i].c_str()); + } + argv.push_back(0); + + // Now create process object + cmsysProcess* cp = cmsysProcess_New(); + cmsysProcess_SetCommand(cp, &*argv.begin()); + //cmsysProcess_SetWorkingDirectory(cp, dir); + cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1); + //cmsysProcess_SetTimeout(cp, timeout); + cmsysProcess_Execute(cp); + + std::vector out; + std::vector err; + std::string line; + int pipe = cmSystemTools::WaitForLine(cp, line, 100.0, out, err); + while(pipe != cmsysProcess_Pipe_None) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Output: " + << line << "\n"); + if(pipe == cmsysProcess_Pipe_STDERR) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, line << "\n"); + } + else if(pipe == cmsysProcess_Pipe_STDOUT) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, line << "\n"); + } + pipe = cmSystemTools::WaitForLine(cp, line, 100, out, err); + } + + // Properly handle output of the build command + cmsysProcess_WaitForExit(cp, 0); + int result = cmsysProcess_GetState(cp); + int retVal = 0; + bool failed = false; + if(result == cmsysProcess_State_Exited) + { + retVal = cmsysProcess_GetExitValue(cp); + } + else if(result == cmsysProcess_State_Exception) + { + retVal = cmsysProcess_GetExitException(cp); + cmCTestLog(this->CTest, ERROR_MESSAGE, "\tThere was an exception: " + << cmsysProcess_GetExceptionString(cp) << " " << + retVal << std::endl); + failed = true; + } + else if(result == cmsysProcess_State_Expired) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "\tThere was a timeout" + << std::endl); + failed = true; + } + else if(result == cmsysProcess_State_Error) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "\tError executing ctest: " + << cmsysProcess_GetErrorString(cp) << std::endl); + failed = true; + } + cmsysProcess_Delete(cp); + if(failed) + { + cmOStringStream message; + message << "Error running command: ["; + message << result << "] "; + for(std::vector::iterator i = argv.begin(); + i != argv.end(); ++i) + { + if(*i) + { + message << *i << " "; + } + } + cmCTestLog(this->CTest, ERROR_MESSAGE, + message.str() << argv[0] << std::endl); + return -1; + } + return retVal; +} + +void cmCTestScriptHandler::CreateCMake() +{ + // create a cmake instance to read the configuration script + if (this->CMake) + { + delete this->CMake; + delete this->GlobalGenerator; + delete this->LocalGenerator; + } + this->CMake = new cmake; + this->CMake->AddCMakePaths(); + this->GlobalGenerator = new cmGlobalGenerator; + this->GlobalGenerator->SetCMakeInstance(this->CMake); + + this->LocalGenerator = this->GlobalGenerator->CreateLocalGenerator(); + this->Makefile = this->LocalGenerator->GetMakefile(); + + // Set CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_BINARY_DIR. + // Also, some commands need Makefile->GetCurrentDirectory(). + std::string cwd = cmSystemTools::GetCurrentWorkingDirectory(); + this->Makefile->SetStartDirectory(cwd.c_str()); + this->Makefile->SetStartOutputDirectory(cwd.c_str()); + + // remove all cmake commands which are not scriptable, since they can't be + // used in ctest scripts + this->CMake->RemoveUnscriptableCommands(); + + // add any ctest specific commands, probably should have common superclass + // for ctest commands to clean this up. If a couple more commands are + // created with the same format lets do that - ken + this->AddCTestCommand(new cmCTestBuildCommand); + this->AddCTestCommand(new cmCTestConfigureCommand); + this->AddCTestCommand(new cmCTestCoverageCommand); + this->AddCTestCommand(new cmCTestEmptyBinaryDirectoryCommand); + this->AddCTestCommand(new cmCTestMemCheckCommand); + this->AddCTestCommand(new cmCTestReadCustomFilesCommand); + this->AddCTestCommand(new cmCTestRunScriptCommand); + this->AddCTestCommand(new cmCTestSleepCommand); + this->AddCTestCommand(new cmCTestStartCommand); + this->AddCTestCommand(new cmCTestSubmitCommand); + this->AddCTestCommand(new cmCTestTestCommand); + this->AddCTestCommand(new cmCTestUpdateCommand); + this->AddCTestCommand(new cmCTestUploadCommand); +} + +void cmCTestScriptHandler::GetCommandDocumentation( + std::vector& v) const +{ + this->CMake->GetCommandDocumentation(v); +} + +//---------------------------------------------------------------------- +// this sets up some variables for the script to use, creates the required +// cmake instance and generators, and then reads in the script +int cmCTestScriptHandler::ReadInScript(const std::string& total_script_arg) +{ + // Reset the error flag so that the script is read in no matter what + cmSystemTools::ResetErrorOccuredFlag(); + + // if the argument has a , in it then it needs to be broken into the fist + // argument (which is the script) and the second argument which will be + // passed into the scripts as S_ARG + std::string script = total_script_arg; + std::string script_arg; + if (total_script_arg.find(",") != std::string::npos) + { + script = total_script_arg.substr(0,total_script_arg.find(",")); + script_arg = total_script_arg.substr(total_script_arg.find(",")+1); + } + // make sure the file exists + if (!cmSystemTools::FileExists(script.c_str())) + { + cmSystemTools::Error("Cannot find file: ", script.c_str()); + return 1; + } + + // read in the list file to fill the cache + // create a cmake instance to read the configuration script + this->CreateCMake(); + + // set a variable with the path to the current script + this->Makefile->AddDefinition("CTEST_SCRIPT_DIRECTORY", + cmSystemTools::GetFilenamePath(script).c_str()); + this->Makefile->AddDefinition("CTEST_SCRIPT_NAME", + cmSystemTools::GetFilenameName(script).c_str()); + this->Makefile->AddDefinition("CTEST_EXECUTABLE_NAME", + this->CTest->GetCTestExecutable()); + this->Makefile->AddDefinition("CMAKE_EXECUTABLE_NAME", + this->CTest->GetCMakeExecutable()); + this->Makefile->AddDefinition("CTEST_RUN_CURRENT_SCRIPT", true); + this->UpdateElapsedTime(); + + // add the script arg if defined + if (script_arg.size()) + { + this->Makefile->AddDefinition("CTEST_SCRIPT_ARG", script_arg.c_str()); + } + + // always add a function blocker to update the elapsed time + cmCTestScriptFunctionBlocker *f = new cmCTestScriptFunctionBlocker(); + f->CTestScriptHandler = this; + this->Makefile->AddFunctionBlocker(f); + + + /* Execute CTestScriptMode.cmake, which loads CMakeDetermineSystem and + CMakeSystemSpecificInformation, so + that variables like CMAKE_SYSTEM and also the search paths for libraries, + header and executables are set correctly and can be used. Makes new-style + ctest scripting easier. */ + std::string systemFile = + this->Makefile->GetModulesFile("CTestScriptMode.cmake"); + if (!this->Makefile->ReadListFile(0, systemFile.c_str()) || + cmSystemTools::GetErrorOccuredFlag()) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Error in read:" + << systemFile.c_str() << "\n"); + return 2; + } + + // finally read in the script + if (!this->Makefile->ReadListFile(0, script.c_str()) || + cmSystemTools::GetErrorOccuredFlag()) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Error in read script: " + << script.c_str() + << std::endl); + // Reset the error flag so that it can run more than + // one script with an error when you + // use ctest_run_script + cmSystemTools::ResetErrorOccuredFlag(); + return 2; + } + + return 0; +} + + +//---------------------------------------------------------------------- +// extract variabels from the script to set ivars +int cmCTestScriptHandler::ExtractVariables() +{ + // Temporary variables + const char* minInterval; + const char* contDuration; + + this->SourceDir + = this->Makefile->GetSafeDefinition("CTEST_SOURCE_DIRECTORY"); + this->BinaryDir + = this->Makefile->GetSafeDefinition("CTEST_BINARY_DIRECTORY"); + + // add in translations for src and bin + cmSystemTools::AddKeepPath(this->SourceDir.c_str()); + cmSystemTools::AddKeepPath(this->BinaryDir.c_str()); + + this->CTestCmd + = this->Makefile->GetSafeDefinition("CTEST_COMMAND"); + this->CVSCheckOut + = this->Makefile->GetSafeDefinition("CTEST_CVS_CHECKOUT"); + this->CTestRoot + = this->Makefile->GetSafeDefinition("CTEST_DASHBOARD_ROOT"); + this->UpdateCmd + = this->Makefile->GetSafeDefinition("CTEST_UPDATE_COMMAND"); + if ( this->UpdateCmd.empty() ) + { + this->UpdateCmd + = this->Makefile->GetSafeDefinition("CTEST_CVS_COMMAND"); + } + this->CTestEnv + = this->Makefile->GetSafeDefinition("CTEST_ENVIRONMENT"); + this->InitialCache + = this->Makefile->GetSafeDefinition("CTEST_INITIAL_CACHE"); + this->CMakeCmd + = this->Makefile->GetSafeDefinition("CTEST_CMAKE_COMMAND"); + this->CMOutFile + = this->Makefile->GetSafeDefinition("CTEST_CMAKE_OUTPUT_FILE_NAME"); + + this->Backup + = this->Makefile->IsOn("CTEST_BACKUP_AND_RESTORE"); + this->EmptyBinDir + = this->Makefile->IsOn("CTEST_START_WITH_EMPTY_BINARY_DIRECTORY"); + this->EmptyBinDirOnce + = this->Makefile->IsOn("CTEST_START_WITH_EMPTY_BINARY_DIRECTORY_ONCE"); + + minInterval + = this->Makefile->GetDefinition("CTEST_CONTINUOUS_MINIMUM_INTERVAL"); + contDuration + = this->Makefile->GetDefinition("CTEST_CONTINUOUS_DURATION"); + + char updateVar[40]; + int i; + for (i = 1; i < 10; ++i) + { + sprintf(updateVar,"CTEST_EXTRA_UPDATES_%i",i); + const char *updateVal = this->Makefile->GetDefinition(updateVar); + if ( updateVal ) + { + if ( this->UpdateCmd.empty() ) + { + cmSystemTools::Error(updateVar, + " specified without specifying CTEST_CVS_COMMAND."); + return 12; + } + this->ExtraUpdates.push_back(updateVal); + } + } + + // in order to backup and restore we also must have the cvs root + if (this->Backup && this->CVSCheckOut.empty()) + { + cmSystemTools::Error( + "Backup was requested without specifying CTEST_CVS_CHECKOUT."); + return 3; + } + + // make sure the required info is here + if (this->SourceDir.empty() || + this->BinaryDir.empty() || + this->CTestCmd.empty()) + { + std::string msg = "CTEST_SOURCE_DIRECTORY = "; + msg += (!this->SourceDir.empty()) ? this->SourceDir.c_str() : "(Null)"; + msg += "\nCTEST_BINARY_DIRECTORY = "; + msg += (!this->BinaryDir.empty()) ? this->BinaryDir.c_str() : "(Null)"; + msg += "\nCTEST_COMMAND = "; + msg += (!this->CTestCmd.empty()) ? this->CTestCmd.c_str() : "(Null)"; + cmSystemTools::Error( + "Some required settings in the configuration file were missing:\n", + msg.c_str()); + return 4; + } + + // if the dashboard root isn't specified then we can compute it from the + // this->SourceDir + if (this->CTestRoot.empty() ) + { + this->CTestRoot = cmSystemTools::GetFilenamePath(this->SourceDir).c_str(); + } + + // the script may override the minimum continuous interval + if (minInterval) + { + this->MinimumInterval = 60 * atof(minInterval); + } + if (contDuration) + { + this->ContinuousDuration = 60.0 * atof(contDuration); + } + + + this->UpdateElapsedTime(); + + return 0; +} + +//---------------------------------------------------------------------- +void cmCTestScriptHandler::SleepInSeconds(unsigned int secondsToWait) +{ +#if defined(_WIN32) + Sleep(1000*secondsToWait); +#else + sleep(secondsToWait); +#endif +} + +//---------------------------------------------------------------------- +// run a specific script +int cmCTestScriptHandler::RunConfigurationScript +(const std::string& total_script_arg, bool pscope) +{ +#ifdef CMAKE_BUILD_WITH_CMAKE + cmSystemTools::SaveRestoreEnvironment sre; +#endif + + int result; + + this->ScriptStartTime = + cmSystemTools::GetTime(); + + // read in the script + if (pscope) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Reading Script: " << total_script_arg << std::endl); + result = this->ReadInScript(total_script_arg); + } + else + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Executing Script: " << total_script_arg << std::endl); + result = this->ExecuteScript(total_script_arg); + } + if (result) + { + return result; + } + + // only run the curent script if we should + if (this->Makefile && this->Makefile->IsOn("CTEST_RUN_CURRENT_SCRIPT")) + { + return this->RunCurrentScript(); + } + return result; +} + +//---------------------------------------------------------------------- +int cmCTestScriptHandler::RunCurrentScript() +{ + int result; + + // do not run twice + this->Makefile->AddDefinition("CTEST_RUN_CURRENT_SCRIPT", false); + + // no popup widows + cmSystemTools::SetRunCommandHideConsole(true); + + // extract the vars from the cache and store in ivars + result = this->ExtractVariables(); + if (result) + { + return result; + } + + // set any environment variables + if (!this->CTestEnv.empty()) + { + std::vector envArgs; + cmSystemTools::ExpandListArgument(this->CTestEnv.c_str(),envArgs); + // for each variable/argument do a putenv + for (unsigned i = 0; i < envArgs.size(); ++i) + { + cmSystemTools::PutEnv(envArgs[i].c_str()); + } + } + + // now that we have done most of the error checking finally run the + // dashboard, we may be asked to repeatedly run this dashboard, such as + // for a continuous, do we ned to run it more than once? + if ( this->ContinuousDuration >= 0 ) + { + this->UpdateElapsedTime(); + double ending_time = cmSystemTools::GetTime() + this->ContinuousDuration; + if (this->EmptyBinDirOnce) + { + this->EmptyBinDir = true; + } + do + { + double interval = cmSystemTools::GetTime(); + result = this->RunConfigurationDashboard(); + interval = cmSystemTools::GetTime() - interval; + if (interval < this->MinimumInterval) + { + this->SleepInSeconds( + static_cast(this->MinimumInterval - interval)); + } + if (this->EmptyBinDirOnce) + { + this->EmptyBinDir = false; + } + } + while (cmSystemTools::GetTime() < ending_time); + } + // otherwise just run it once + else + { + result = this->RunConfigurationDashboard(); + } + + return result; +} + +//---------------------------------------------------------------------- +int cmCTestScriptHandler::CheckOutSourceDir() +{ + std::string command; + std::string output; + int retVal; + bool res; + + if (!cmSystemTools::FileExists(this->SourceDir.c_str()) && + !this->CVSCheckOut.empty()) + { + // we must now checkout the src dir + output = ""; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Run cvs: " << this->CVSCheckOut << std::endl); + res = cmSystemTools::RunSingleCommand(this->CVSCheckOut.c_str(), &output, + &retVal, this->CTestRoot.c_str(), this->HandlerVerbose, + 0 /*this->TimeOut*/); + if (!res || retVal != 0) + { + cmSystemTools::Error("Unable to perform cvs checkout:\n", + output.c_str()); + return 6; + } + } + return 0; +} + +//---------------------------------------------------------------------- +int cmCTestScriptHandler::BackupDirectories() +{ + int retVal; + + // compute the backup names + this->BackupSourceDir = this->SourceDir; + this->BackupSourceDir += "_CMakeBackup"; + this->BackupBinaryDir = this->BinaryDir; + this->BackupBinaryDir += "_CMakeBackup"; + + // backup the binary and src directories if requested + if (this->Backup) + { + // if for some reason those directories exist then first delete them + if (cmSystemTools::FileExists(this->BackupSourceDir.c_str())) + { + cmSystemTools::RemoveADirectory(this->BackupSourceDir.c_str()); + } + if (cmSystemTools::FileExists(this->BackupBinaryDir.c_str())) + { + cmSystemTools::RemoveADirectory(this->BackupBinaryDir.c_str()); + } + + // first rename the src and binary directories + rename(this->SourceDir.c_str(), this->BackupSourceDir.c_str()); + rename(this->BinaryDir.c_str(), this->BackupBinaryDir.c_str()); + + // we must now checkout the src dir + retVal = this->CheckOutSourceDir(); + if (retVal) + { + this->RestoreBackupDirectories(); + return retVal; + } + } + + return 0; +} + + +//---------------------------------------------------------------------- +int cmCTestScriptHandler::PerformExtraUpdates() +{ + std::string command; + std::string output; + int retVal; + bool res; + + // do an initial cvs update as required + command = this->UpdateCmd; + std::vector::iterator it; + for (it = this->ExtraUpdates.begin(); + it != this->ExtraUpdates.end(); + ++ it ) + { + std::vector cvsArgs; + cmSystemTools::ExpandListArgument(it->c_str(),cvsArgs); + if (cvsArgs.size() == 2) + { + std::string fullCommand = command; + fullCommand += " update "; + fullCommand += cvsArgs[1]; + output = ""; + retVal = 0; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Run Update: " + << fullCommand.c_str() << std::endl); + res = cmSystemTools::RunSingleCommand(fullCommand.c_str(), &output, + &retVal, cvsArgs[0].c_str(), + this->HandlerVerbose, 0 /*this->TimeOut*/); + if (!res || retVal != 0) + { + cmSystemTools::Error("Unable to perform extra updates:\n", + it->c_str(), "\nWith output:\n", + output.c_str()); + return 0; + } + } + } + return 0; +} + + +//---------------------------------------------------------------------- +// run a single dashboard entry +int cmCTestScriptHandler::RunConfigurationDashboard() +{ + // local variables + std::string command; + std::string output; + int retVal; + bool res; + + // make sure the src directory is there, if it isn't then we might be able + // to check it out from cvs + retVal = this->CheckOutSourceDir(); + if (retVal) + { + return retVal; + } + + // backup the dirs if requested + retVal = this->BackupDirectories(); + if (retVal) + { + return retVal; + } + + // clear the binary directory? + if (this->EmptyBinDir) + { + if ( !cmCTestScriptHandler::EmptyBinaryDirectory( + this->BinaryDir.c_str()) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Problem removing the binary directory" << std::endl); + } + } + + // make sure the binary directory exists if it isn't the srcdir + if (!cmSystemTools::FileExists(this->BinaryDir.c_str()) && + this->SourceDir != this->BinaryDir) + { + if (!cmSystemTools::MakeDirectory(this->BinaryDir.c_str())) + { + cmSystemTools::Error("Unable to create the binary directory:\n", + this->BinaryDir.c_str()); + this->RestoreBackupDirectories(); + return 7; + } + } + + // if the binary directory and the source directory are the same, + // and we are starting with an empty binary directory, then that means + // we must check out the source tree + if (this->EmptyBinDir && this->SourceDir == this->BinaryDir) + { + // make sure we have the required info + if (this->CVSCheckOut.empty()) + { + cmSystemTools::Error("You have specified the source and binary " + "directories to be the same (an in source build). You have also " + "specified that the binary directory is to be erased. This means " + "that the source will have to be checked out from CVS. But you have " + "not specified CTEST_CVS_CHECKOUT"); + return 8; + } + + // we must now checkout the src dir + retVal = this->CheckOutSourceDir(); + if (retVal) + { + this->RestoreBackupDirectories(); + return retVal; + } + } + + // backup the dirs if requested + retVal = this->PerformExtraUpdates(); + if (retVal) + { + return retVal; + } + + // put the initial cache into the bin dir + if (!this->InitialCache.empty()) + { + if (!this->WriteInitialCache(this->BinaryDir.c_str(), + this->InitialCache.c_str())) + { + this->RestoreBackupDirectories(); + return 9; + } + } + + // do an initial cmake to setup the DartConfig file + int cmakeFailed = 0; + std::string cmakeFailedOuput; + if (!this->CMakeCmd.empty()) + { + command = this->CMakeCmd; + command += " \""; + command += this->SourceDir; + output = ""; + command += "\""; + retVal = 0; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Run cmake command: " + << command.c_str() << std::endl); + res = cmSystemTools::RunSingleCommand(command.c_str(), &output, + &retVal, this->BinaryDir.c_str(), + this->HandlerVerbose, 0 /*this->TimeOut*/); + + if ( !this->CMOutFile.empty() ) + { + std::string cmakeOutputFile = this->CMOutFile; + if ( !cmSystemTools::FileIsFullPath(cmakeOutputFile.c_str()) ) + { + cmakeOutputFile = this->BinaryDir + "/" + cmakeOutputFile; + } + + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Write CMake output to file: " << cmakeOutputFile.c_str() + << std::endl); + cmGeneratedFileStream fout(cmakeOutputFile.c_str()); + if ( fout ) + { + fout << output.c_str(); + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot open CMake output file: " + << cmakeOutputFile.c_str() << " for writing" << std::endl); + } + } + if (!res || retVal != 0) + { + // even if this fails continue to the next step + cmakeFailed = 1; + cmakeFailedOuput = output; + } + } + + // run ctest, it may be more than one command in here + std::vector ctestCommands; + cmSystemTools::ExpandListArgument(this->CTestCmd,ctestCommands); + // for each variable/argument do a putenv + for (unsigned i = 0; i < ctestCommands.size(); ++i) + { + command = ctestCommands[i]; + output = ""; + retVal = 0; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Run ctest command: " + << command.c_str() << std::endl); + res = cmSystemTools::RunSingleCommand(command.c_str(), &output, + &retVal, this->BinaryDir.c_str(), this->HandlerVerbose, + 0 /*this->TimeOut*/); + + // did something critical fail in ctest + if (!res || cmakeFailed || + retVal & cmCTest::BUILD_ERRORS) + { + this->RestoreBackupDirectories(); + if (cmakeFailed) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Unable to run cmake:" << std::endl + << cmakeFailedOuput.c_str() << std::endl); + return 10; + } + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Unable to run ctest:" << std::endl + << "command: " << command.c_str() << std::endl + << "output: " << output.c_str() << std::endl); + if (!res) + { + return 11; + } + return retVal * 100; + } + } + + // if all was succesful, delete the backup dirs to free up disk space + if (this->Backup) + { + cmSystemTools::RemoveADirectory(this->BackupSourceDir.c_str()); + cmSystemTools::RemoveADirectory(this->BackupBinaryDir.c_str()); + } + + return 0; +} + +//------------------------------------------------------------------------- +bool cmCTestScriptHandler::WriteInitialCache(const char* directory, + const char* text) +{ + std::string cacheFile = directory; + cacheFile += "/CMakeCache.txt"; + cmGeneratedFileStream fout(cacheFile.c_str()); + if(!fout) + { + return false; + } + + if (text!=0) + { + fout.write(text, strlen(text)); + } + + // Make sure the operating system has finished writing the file + // before closing it. This will ensure the file is finished before + // the check below. + fout.flush(); + fout.close(); + return true; +} + +//------------------------------------------------------------------------- +void cmCTestScriptHandler::RestoreBackupDirectories() +{ + // if we backed up the dirs and the build failed, then restore + // the backed up dirs + if (this->Backup) + { + // if for some reason those directories exist then first delete them + if (cmSystemTools::FileExists(this->SourceDir.c_str())) + { + cmSystemTools::RemoveADirectory(this->SourceDir.c_str()); + } + if (cmSystemTools::FileExists(this->BinaryDir.c_str())) + { + cmSystemTools::RemoveADirectory(this->BinaryDir.c_str()); + } + // rename the src and binary directories + rename(this->BackupSourceDir.c_str(), this->SourceDir.c_str()); + rename(this->BackupBinaryDir.c_str(), this->BinaryDir.c_str()); + } +} + +bool cmCTestScriptHandler::RunScript(cmCTest* ctest, const char *sname, + bool InProcess, int* returnValue) +{ + cmCTestScriptHandler* sh = new cmCTestScriptHandler(); + sh->SetCTestInstance(ctest); + sh->AddConfigurationScript(sname,InProcess); + int res = sh->ProcessHandler(); + if(returnValue) + { + *returnValue = res; + } + delete sh; + return true; +} + +bool cmCTestScriptHandler::EmptyBinaryDirectory(const char *sname) +{ + // try to avoid deleting root + if (!sname || strlen(sname) < 2) + { + return false; + } + + // try to avoid deleting directories that we shouldn't + std::string check = sname; + check += "/CMakeCache.txt"; + if(cmSystemTools::FileExists(check.c_str()) && + !cmSystemTools::RemoveADirectory(sname)) + { + return false; + } + return true; +} + +//------------------------------------------------------------------------- +double cmCTestScriptHandler::GetRemainingTimeAllowed() +{ + if (!this->Makefile) + { + return 1.0e7; + } + + const char *timelimitS + = this->Makefile->GetDefinition("CTEST_TIME_LIMIT"); + + if (!timelimitS) + { + return 1.0e7; + } + + double timelimit = atof(timelimitS); + + return timelimit - cmSystemTools::GetTime() + this->ScriptStartTime; +} diff --git a/Source/CTest/cmCTestScriptHandler.h b/Source/CTest/cmCTestScriptHandler.h new file mode 100644 index 0000000..a7cf6ba --- /dev/null +++ b/Source/CTest/cmCTestScriptHandler.h @@ -0,0 +1,172 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTestScriptHandler_h +#define cmCTestScriptHandler_h + + +#include "cmCTestGenericHandler.h" +#include "cmListFileCache.h" + +class cmMakefile; +class cmLocalGenerator; +class cmGlobalGenerator; +class cmake; +class cmCTestCommand; + +/** \class cmCTestScriptHandler + * \brief A class that handles ctest -S invocations + * + * CTest script is controlled using several variables that script has to + * specify and some optional ones. Required ones are: + * CTEST_SOURCE_DIRECTORY - Source directory of the project + * CTEST_BINARY_DIRECTORY - Binary directory of the project + * CTEST_COMMAND - Testing commands + * + * Optional variables are: + * CTEST_BACKUP_AND_RESTORE + * CTEST_CMAKE_COMMAND + * CTEST_CMAKE_OUTPUT_FILE_NAME + * CTEST_CONTINUOUS_DURATION + * CTEST_CONTINUOUS_MINIMUM_INTERVAL + * CTEST_CVS_CHECKOUT + * CTEST_CVS_COMMAND + * CTEST_UPDATE_COMMAND + * CTEST_DASHBOARD_ROOT + * CTEST_ENVIRONMENT + * CTEST_INITIAL_CACHE + * CTEST_START_WITH_EMPTY_BINARY_DIRECTORY + * CTEST_START_WITH_EMPTY_BINARY_DIRECTORY_ONCE + * + * In addition the following variables can be used. The number can be 1-10. + * CTEST_EXTRA_UPDATES_1 + * CTEST_EXTRA_UPDATES_2 + * ... + * CTEST_EXTRA_UPDATES_10 + * + * CTest script can use the following arguments CTest provides: + * CTEST_SCRIPT_ARG + * CTEST_SCRIPT_DIRECTORY + * CTEST_SCRIPT_NAME + * + */ +class cmCTestScriptHandler : public cmCTestGenericHandler +{ +public: + cmTypeMacro(cmCTestScriptHandler, cmCTestGenericHandler); + + /** + * Add a script to run, and if is should run in the current process + */ + void AddConfigurationScript(const char *, bool pscope); + + /** + * Run a dashboard using a specified confiuration script + */ + int ProcessHandler(); + + /* + * Run a script + */ + static bool RunScript(cmCTest* ctest, const char *script, bool InProcess, + int* returnValue); + int RunCurrentScript(); + + /* + * Empty Binary Directory + */ + static bool EmptyBinaryDirectory(const char *dir); + + /* + * Write an initial CMakeCache.txt from the given contents. + */ + static bool WriteInitialCache(const char* directory, const char* text); + + /* + * Some elapsed time handling functions + */ + static void SleepInSeconds(unsigned int secondsToWait); + void UpdateElapsedTime(); + + /** + * Return the time remaianing that the script is allowed to run in + * seconds if the user has set the variable CTEST_TIME_LIMIT. If that has + * not been set it returns 1e7 seconds + */ + double GetRemainingTimeAllowed(); + + cmCTestScriptHandler(); + ~cmCTestScriptHandler(); + + void Initialize(); + + void CreateCMake(); + void GetCommandDocumentation(std::vector& v) const; + cmake* GetCMake() { return this->CMake;} +private: + // reads in a script + int ReadInScript(const std::string& total_script_arg); + int ExecuteScript(const std::string& total_script_arg); + + // extract vars from the script to set ivars + int ExtractVariables(); + + // perform a CVS checkout of the source dir + int CheckOutSourceDir(); + + // perform any extra cvs updates that were requested + int PerformExtraUpdates(); + + // backup and restore dirs + int BackupDirectories(); + void RestoreBackupDirectories(); + + int RunConfigurationScript(const std::string& script, bool pscope); + int RunConfigurationDashboard(); + + // Add ctest command + void AddCTestCommand(cmCTestCommand* command); + + std::vector ConfigurationScripts; + std::vector ScriptProcessScope; + + bool Backup; + bool EmptyBinDir; + bool EmptyBinDirOnce; + + cmStdString SourceDir; + cmStdString BinaryDir; + cmStdString BackupSourceDir; + cmStdString BackupBinaryDir; + cmStdString CTestRoot; + cmStdString CVSCheckOut; + cmStdString CTestCmd; + cmStdString UpdateCmd; + cmStdString CTestEnv; + cmStdString InitialCache; + cmStdString CMakeCmd; + cmStdString CMOutFile; + std::vector ExtraUpdates; + + double MinimumInterval; + double ContinuousDuration; + + // what time in seconds did this script start running + double ScriptStartTime; + + cmMakefile *Makefile; + cmLocalGenerator *LocalGenerator; + cmGlobalGenerator *GlobalGenerator; + cmake *CMake; +}; + +#endif diff --git a/Source/CTest/cmCTestSleepCommand.cxx b/Source/CTest/cmCTestSleepCommand.cxx new file mode 100644 index 0000000..5b06972 --- /dev/null +++ b/Source/CTest/cmCTestSleepCommand.cxx @@ -0,0 +1,55 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestSleepCommand.h" + +#include "cmCTestScriptHandler.h" +#include // required for atoi + +bool cmCTestSleepCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if (args.size() < 1) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + // sleep for specified seconds + unsigned int time1 = atoi(args[0].c_str()); + if(args.size() == 1 ) + { + cmCTestScriptHandler::SleepInSeconds(time1); + // update the elapsed time since it could have slept for a while + this->CTestScriptHandler->UpdateElapsedTime(); + return true; + } + + // sleep up to a duration + if(args.size() == 3 ) + { + unsigned int duration = atoi(args[1].c_str()); + unsigned int time2 = atoi(args[2].c_str()); + if (time1 + duration > time2) + { + duration = (time1 + duration - time2); + cmCTestScriptHandler::SleepInSeconds(duration); + // update the elapsed time since it could have slept for a while + this->CTestScriptHandler->UpdateElapsedTime(); + } + return true; + } + + this->SetError("called with incorrect number of arguments"); + return false; +} + + diff --git a/Source/CTest/cmCTestSleepCommand.h b/Source/CTest/cmCTestSleepCommand.h new file mode 100644 index 0000000..80fd6af --- /dev/null +++ b/Source/CTest/cmCTestSleepCommand.h @@ -0,0 +1,77 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestSleepCommand_h +#define cmCTestSleepCommand_h + +#include "cmCTestCommand.h" + +/** \class cmCTestSleep + * \brief Run a ctest script + * + * cmLibrarysCommand defines a list of executable (i.e., test) + * programs to create. + */ +class cmCTestSleepCommand : public cmCTestCommand +{ +public: + + cmCTestSleepCommand() {} + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestSleepCommand* ni = new cmCTestSleepCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_sleep";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "sleeps for some amount of time"; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_sleep()\n" + "Sleep for given number of seconds.\n" + " ctest_sleep( )\n" + "Sleep for t=(time1 + duration - time2) seconds if t > 0."; + } + + cmTypeMacro(cmCTestSleepCommand, cmCTestCommand); + +}; + + +#endif diff --git a/Source/CTest/cmCTestStartCommand.cxx b/Source/CTest/cmCTestStartCommand.cxx new file mode 100644 index 0000000..228a173 --- /dev/null +++ b/Source/CTest/cmCTestStartCommand.cxx @@ -0,0 +1,170 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestStartCommand.h" + +#include "cmCTest.h" +#include "cmLocalGenerator.h" +#include "cmGlobalGenerator.h" +#include "cmCTestVC.h" +#include "cmGeneratedFileStream.h" + +cmCTestStartCommand::cmCTestStartCommand() +{ + this->CreateNewTag = true; +} + +bool cmCTestStartCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if (args.size() < 1) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + size_t cnt = 0; + const char* smodel = args[cnt].c_str(); + const char* src_dir = 0; + const char* bld_dir = 0; + + cnt++; + + this->CTest->SetSpecificTrack(0); + if ( cnt < args.size() -1 ) + { + if ( args[cnt] == "TRACK" ) + { + cnt ++; + this->CTest->SetSpecificTrack(args[cnt].c_str()); + cnt ++; + } + } + + if (cnt < args.size()) + { + if (args[cnt] == "APPEND") + { + cnt ++; + this->CreateNewTag = false; + } + } + + if ( cnt < args.size() ) + { + src_dir = args[cnt].c_str(); + cnt ++; + if ( cnt < args.size() ) + { + bld_dir = args[cnt].c_str(); + } + } + if ( !src_dir ) + { + src_dir = this->Makefile->GetDefinition("CTEST_SOURCE_DIRECTORY"); + } + if ( !bld_dir) + { + bld_dir = this->Makefile->GetDefinition("CTEST_BINARY_DIRECTORY"); + } + if ( !src_dir ) + { + this->SetError("source directory not specified. Specify source directory " + "as an argument or set CTEST_SOURCE_DIRECTORY"); + return false; + } + if ( !bld_dir) + { + this->SetError("binary directory not specified. Specify binary directory " + "as an argument or set CTEST_BINARY_DIRECTORY"); + return false; + } + + cmSystemTools::AddKeepPath(src_dir); + cmSystemTools::AddKeepPath(bld_dir); + + this->CTest->EmptyCTestConfiguration(); + + std::string sourceDir = cmSystemTools::CollapseFullPath(src_dir); + std::string binaryDir = cmSystemTools::CollapseFullPath(bld_dir); + this->CTest->SetCTestConfiguration("SourceDirectory", sourceDir.c_str()); + this->CTest->SetCTestConfiguration("BuildDirectory", binaryDir.c_str()); + + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Run dashboard with model " + << smodel << std::endl + << " Source directory: " << src_dir << std::endl + << " Build directory: " << bld_dir << std::endl); + const char* track = this->CTest->GetSpecificTrack(); + if ( track ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Track: " << track << std::endl); + } + + // Log startup actions. + std::string startLogFile = binaryDir + "/Testing/Temporary/LastStart.log"; + cmGeneratedFileStream ofs(startLogFile.c_str()); + if(!ofs) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot create log file: LastStart.log" << std::endl); + return false; + } + + // Make sure the source directory exists. + if(!this->InitialCheckout(ofs, sourceDir)) + { + return false; + } + if(!cmSystemTools::FileIsDirectory(sourceDir.c_str())) + { + cmOStringStream e; + e << "given source path\n" + << " " << sourceDir << "\n" + << "which is not an existing directory. " + << "Set CTEST_CHECKOUT_COMMAND to a command line to create it."; + this->SetError(e.str().c_str()); + return false; + } + + this->Makefile->AddDefinition("CTEST_RUN_CURRENT_SCRIPT", "OFF"); + this->CTest->SetSuppressUpdatingCTestConfiguration(true); + int model = this->CTest->GetTestModelFromString(smodel); + this->CTest->SetTestModel(model); + this->CTest->SetProduceXML(true); + + return this->CTest->InitializeFromCommand(this); +} + +//---------------------------------------------------------------------------- +bool cmCTestStartCommand::InitialCheckout( + std::ostream& ofs, std::string const& sourceDir) +{ + // Use the user-provided command to create the source tree. + const char* initialCheckoutCommand + = this->Makefile->GetDefinition("CTEST_CHECKOUT_COMMAND"); + if(!initialCheckoutCommand) + { + initialCheckoutCommand = + this->Makefile->GetDefinition("CTEST_CVS_CHECKOUT"); + } + if(initialCheckoutCommand) + { + // Use a generic VC object to run and log the command. + cmCTestVC vc(this->CTest, ofs); + vc.SetSourceDirectory(sourceDir.c_str()); + if(!vc.InitialCheckout(initialCheckoutCommand)) + { + return false; + } + } + return true; +} diff --git a/Source/CTest/cmCTestStartCommand.h b/Source/CTest/cmCTestStartCommand.h new file mode 100644 index 0000000..6be4770 --- /dev/null +++ b/Source/CTest/cmCTestStartCommand.h @@ -0,0 +1,92 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestStartCommand_h +#define cmCTestStartCommand_h + +#include "cmCTestCommand.h" + +/** \class cmCTestStart + * \brief Run a ctest script + * + * cmCTestStartCommand defineds the command to start the nightly testing. + */ +class cmCTestStartCommand : public cmCTestCommand +{ +public: + + cmCTestStartCommand(); + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestStartCommand* ni = new cmCTestStartCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + ni->CreateNewTag = this->CreateNewTag; + return ni; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * Will this invocation of ctest_start create a new TAG file? + */ + bool ShouldCreateNewTag() + { + return this->CreateNewTag; + } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_start";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Starts the testing for a given model"; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_start(Model [TRACK ] [APPEND] [source [binary]])\n" + "Starts the testing for a given model. The command should be called " + "after the binary directory is initialized. If the 'source' and " + "'binary' directory are not specified, it reads the " + "CTEST_SOURCE_DIRECTORY and CTEST_BINARY_DIRECTORY. If the track is " + "specified, the submissions will go to the specified track. " + "If APPEND is used, the existing TAG is used rather than " + "creating a new one based on the current time stamp."; + } + + cmTypeMacro(cmCTestStartCommand, cmCTestCommand); + +private: + bool InitialCheckout(std::ostream& ofs, std::string const& sourceDir); + bool CreateNewTag; +}; + + +#endif diff --git a/Source/CTest/cmCTestSubmitCommand.cxx b/Source/CTest/cmCTestSubmitCommand.cxx new file mode 100644 index 0000000..24974e3 --- /dev/null +++ b/Source/CTest/cmCTestSubmitCommand.cxx @@ -0,0 +1,255 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestSubmitCommand.h" + +#include "cmCTest.h" +#include "cmCTestGenericHandler.h" +#include "cmCTestSubmitHandler.h" + +cmCTestGenericHandler* cmCTestSubmitCommand::InitializeHandler() +{ + const char* ctestDropMethod + = this->Makefile->GetDefinition("CTEST_DROP_METHOD"); + const char* ctestDropSite + = this->Makefile->GetDefinition("CTEST_DROP_SITE"); + const char* ctestDropLocation + = this->Makefile->GetDefinition("CTEST_DROP_LOCATION"); + const char* ctestTriggerSite + = this->Makefile->GetDefinition("CTEST_TRIGGER_SITE"); + bool ctestDropSiteCDash + = this->Makefile->IsOn("CTEST_DROP_SITE_CDASH"); + + if ( !ctestDropMethod ) + { + ctestDropMethod = "http"; + } + + if ( !ctestDropSite ) + { + // error: CDash requires CTEST_DROP_SITE definition + // in CTestConfig.cmake + } + if ( !ctestDropLocation ) + { + // error: CDash requires CTEST_DROP_LOCATION definition + // in CTestConfig.cmake + } + + this->CTest->SetCTestConfiguration("DropMethod", ctestDropMethod); + this->CTest->SetCTestConfiguration("DropSite", ctestDropSite); + this->CTest->SetCTestConfiguration("DropLocation", ctestDropLocation); + + this->CTest->SetCTestConfiguration("IsCDash", + ctestDropSiteCDash ? "TRUE" : "FALSE"); + + // Only propagate TriggerSite for non-CDash projects: + // + if ( !ctestDropSiteCDash ) + { + this->CTest->SetCTestConfiguration("TriggerSite", ctestTriggerSite); + } + + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "CurlOptions", "CTEST_CURL_OPTIONS"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "DropSiteUser", "CTEST_DROP_SITE_USER"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "DropSitePassword", "CTEST_DROP_SITE_PASSWORD"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "ScpCommand", "CTEST_SCP_COMMAND"); + + const char* notesFilesVariable + = this->Makefile->GetDefinition("CTEST_NOTES_FILES"); + if (notesFilesVariable) + { + std::vector notesFiles; + std::vector newNotesFiles; + cmSystemTools::ExpandListArgument(notesFilesVariable,notesFiles); + std::vector::iterator it; + for ( it = notesFiles.begin(); + it != notesFiles.end(); + ++ it ) + { + newNotesFiles.push_back(*it); + } + this->CTest->GenerateNotesFile(newNotesFiles); + } + + const char* extraFilesVariable + = this->Makefile->GetDefinition("CTEST_EXTRA_SUBMIT_FILES"); + if (extraFilesVariable) + { + std::vector extraFiles; + std::vector newExtraFiles; + cmSystemTools::ExpandListArgument(extraFilesVariable,extraFiles); + std::vector::iterator it; + for ( it = extraFiles.begin(); + it != extraFiles.end(); + ++ it ) + { + newExtraFiles.push_back(*it); + } + if ( !this->CTest->SubmitExtraFiles(newExtraFiles)) + { + this->SetError("problem submitting extra files."); + return 0; + } + } + + cmCTestGenericHandler* handler + = this->CTest->GetInitializedHandler("submit"); + if ( !handler ) + { + this->SetError("internal CTest error. Cannot instantiate submit handler"); + return 0; + } + + // If no FILES or PARTS given, *all* PARTS are submitted by default. + // + // If FILES are given, but not PARTS, only the FILES are submitted + // and *no* PARTS are submitted. + // (This is why we select the empty "noParts" set in the + // FilesMentioned block below...) + // + // If PARTS are given, only the selected PARTS are submitted. + // + // If both PARTS and FILES are given, only the selected PARTS *and* + // all the given FILES are submitted. + + // If given explicit FILES to submit, pass them to the handler. + // + if(this->FilesMentioned) + { + // Intentionally select *no* PARTS. (Pass an empty set.) If PARTS + // were also explicitly mentioned, they will be selected below... + // But FILES with no PARTS mentioned should just submit the FILES + // without any of the default parts. + // + std::set noParts; + static_cast(handler)->SelectParts(noParts); + + static_cast(handler)->SelectFiles(this->Files); + } + + // If a PARTS option was given, select only the named parts for submission. + // + if(this->PartsMentioned) + { + static_cast(handler)->SelectParts(this->Parts); + } + + static_cast(handler)->SetOption("RetryDelay", + this->RetryDelay.c_str()); + static_cast(handler)->SetOption("RetryCount", + this->RetryCount.c_str()); + static_cast(handler)->SetOption("InternalTest", + this->InternalTest ? "ON" : "OFF"); + + return handler; +} + + +//---------------------------------------------------------------------------- +bool cmCTestSubmitCommand::CheckArgumentKeyword(std::string const& arg) +{ + // Look for arguments specific to this command. + if(arg == "PARTS") + { + this->ArgumentDoing = ArgumentDoingParts; + this->PartsMentioned = true; + return true; + } + + if(arg == "FILES") + { + this->ArgumentDoing = ArgumentDoingFiles; + this->FilesMentioned = true; + return true; + } + + if(arg == "RETRY_COUNT") + { + this->ArgumentDoing = ArgumentDoingRetryCount; + return true; + } + + if(arg == "RETRY_DELAY") + { + this->ArgumentDoing = ArgumentDoingRetryDelay; + return true; + } + + if(arg == "INTERNAL_TEST_CHECKSUM") + { + this->InternalTest = true; + return true; + } + + // Look for other arguments. + return this->Superclass::CheckArgumentKeyword(arg); +} + + +//---------------------------------------------------------------------------- +bool cmCTestSubmitCommand::CheckArgumentValue(std::string const& arg) +{ + // Handle states specific to this command. + if(this->ArgumentDoing == ArgumentDoingParts) + { + cmCTest::Part p = this->CTest->GetPartFromName(arg.c_str()); + if(p != cmCTest::PartCount) + { + this->Parts.insert(p); + } + else + { + cmOStringStream e; + e << "Part name \"" << arg << "\" is invalid."; + this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); + this->ArgumentDoing = ArgumentDoingError; + } + return true; + } + + if(this->ArgumentDoing == ArgumentDoingFiles) + { + cmStdString filename(arg); + if(cmSystemTools::FileExists(filename.c_str())) + { + this->Files.insert(filename); + } + else + { + cmOStringStream e; + e << "File \"" << filename << "\" does not exist. Cannot submit " + << "a non-existent file."; + this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); + this->ArgumentDoing = ArgumentDoingError; + } + return true; + } + + if(this->ArgumentDoing == ArgumentDoingRetryCount) + { + this->RetryCount = arg; + return true; + } + + if(this->ArgumentDoing == ArgumentDoingRetryDelay) + { + this->RetryDelay = arg; + return true; + } + + // Look for other arguments. + return this->Superclass::CheckArgumentValue(arg); +} diff --git a/Source/CTest/cmCTestSubmitCommand.h b/Source/CTest/cmCTestSubmitCommand.h new file mode 100644 index 0000000..53ee875 --- /dev/null +++ b/Source/CTest/cmCTestSubmitCommand.h @@ -0,0 +1,118 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestSubmitCommand_h +#define cmCTestSubmitCommand_h + +#include "cmCTestHandlerCommand.h" +#include "cmCTest.h" + +/** \class cmCTestSubmit + * \brief Run a ctest script + * + * cmCTestSubmitCommand defineds the command to submit the test results for + * the project. + */ +class cmCTestSubmitCommand : public cmCTestHandlerCommand +{ +public: + + cmCTestSubmitCommand() + { + this->PartsMentioned = false; + this->FilesMentioned = false; + this->InternalTest = false; + this->RetryCount = ""; + this->RetryDelay = ""; + } + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestSubmitCommand* ni = new cmCTestSubmitCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_submit";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Submit results to a dashboard server."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_submit([PARTS ...] [FILES ...] [RETRY_COUNT count] " + " [RETRY_DELAY delay][RETURN_VALUE res])\n" + "By default all available parts are submitted if no PARTS or FILES " + "are specified. " + "The PARTS option lists a subset of parts to be submitted. " + "Valid part names are:\n" + " Start = nothing\n" + " Update = ctest_update results, in Update.xml\n" + " Configure = ctest_configure results, in Configure.xml\n" + " Build = ctest_build results, in Build.xml\n" + " Test = ctest_test results, in Test.xml\n" + " Coverage = ctest_coverage results, in Coverage.xml\n" + " MemCheck = ctest_memcheck results, in DynamicAnalysis.xml\n" + " Notes = Files listed by CTEST_NOTES_FILES, in Notes.xml\n" + " ExtraFiles = Files listed by CTEST_EXTRA_SUBMIT_FILES\n" + " Submit = nothing\n" + "The FILES option explicitly lists specific files to be submitted. " + "Each individual file must exist at the time of the call.\n" + "The RETRY_DELAY option specifies how long in seconds to wait after " + "a timed-out submission before attempting to re-submit.\n" + "The RETRY_COUNT option specifies how many times to retry a timed-out " + "submission.\n"; + } + + cmTypeMacro(cmCTestSubmitCommand, cmCTestHandlerCommand); + +protected: + cmCTestGenericHandler* InitializeHandler(); + + virtual bool CheckArgumentKeyword(std::string const& arg); + virtual bool CheckArgumentValue(std::string const& arg); + + enum + { + ArgumentDoingParts = Superclass::ArgumentDoingLast1, + ArgumentDoingFiles, + ArgumentDoingRetryDelay, + ArgumentDoingRetryCount, + ArgumentDoingLast2 + }; + + bool PartsMentioned; + std::set Parts; + bool FilesMentioned; + bool InternalTest; + cmCTest::SetOfStrings Files; + std::string RetryCount; + std::string RetryDelay; +}; + + +#endif diff --git a/Source/CTest/cmCTestSubmitHandler.cxx b/Source/CTest/cmCTestSubmitHandler.cxx new file mode 100644 index 0000000..142bb46 --- /dev/null +++ b/Source/CTest/cmCTestSubmitHandler.cxx @@ -0,0 +1,1508 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestSubmitHandler.h" + +#include "cmSystemTools.h" +#include "cmVersion.h" +#include "cmGeneratedFileStream.h" +#include "cmCTest.h" +#include "cmXMLParser.h" + +#include +#include + +// For XML-RPC submission +#include "cm_xmlrpc.h" + +// For curl submission +#include "cm_curl.h" + +#include + +#define SUBMIT_TIMEOUT_IN_SECONDS_DEFAULT 120 + +typedef std::vector cmCTestSubmitHandlerVectorOfChar; + +//---------------------------------------------------------------------------- +class cmCTestSubmitHandler::ResponseParser: public cmXMLParser +{ +public: + ResponseParser() { this->Status = STATUS_OK; } + ~ResponseParser() {} + +public: + + enum StatusType + { + STATUS_OK, + STATUS_WARNING, + STATUS_ERROR + }; + + StatusType Status; + std::string CDashVersion; + std::string Filename; + std::string MD5; + std::string Message; + +private: + + std::vector CurrentValue; + + std::string GetCurrentValue() + { + std::string val; + if(this->CurrentValue.size()) + { + val.assign(&this->CurrentValue[0], this->CurrentValue.size()); + } + return val; + } + + virtual void StartElement(const char* name, const char** atts) + { + this->CurrentValue.clear(); + if(strcmp(name, "cdash") == 0) + { + this->CDashVersion = this->FindAttribute(atts, "version"); + } + } + + virtual void CharacterDataHandler(const char* data, int length) + { + this->CurrentValue.insert(this->CurrentValue.end(), data, data+length); + } + + virtual void EndElement(const char* name) + { + if(strcmp(name, "status") == 0) + { + std::string status = cmSystemTools::UpperCase(this->GetCurrentValue()); + if(status == "OK" || status == "SUCCESS") + { + this->Status = STATUS_OK; + } + else if(status == "WARNING") + { + this->Status = STATUS_WARNING; + } + else + { + this->Status = STATUS_ERROR; + } + } + else if(strcmp(name, "filename") == 0) + { + this->Filename = this->GetCurrentValue(); + } + else if(strcmp(name, "md5") == 0) + { + this->MD5 = this->GetCurrentValue(); + } + else if(strcmp(name, "message") == 0) + { + this->Message = this->GetCurrentValue(); + } + } +}; + + +static size_t +cmCTestSubmitHandlerWriteMemoryCallback(void *ptr, size_t size, size_t nmemb, + void *data) +{ + register int realsize = (int)(size * nmemb); + + cmCTestSubmitHandlerVectorOfChar *vec + = static_cast(data); + const char* chPtr = static_cast(ptr); + vec->insert(vec->end(), chPtr, chPtr + realsize); + + return realsize; +} + +static size_t +cmCTestSubmitHandlerCurlDebugCallback(CURL *, curl_infotype, char *chPtr, + size_t size, void *data) +{ + cmCTestSubmitHandlerVectorOfChar *vec + = static_cast(data); + vec->insert(vec->end(), chPtr, chPtr + size); + + return size; +} + +//---------------------------------------------------------------------------- +cmCTestSubmitHandler::cmCTestSubmitHandler() : HTTPProxy(), FTPProxy() +{ + this->Initialize(); +} + +//---------------------------------------------------------------------------- +void cmCTestSubmitHandler::Initialize() +{ + // We submit all available parts by default. + for(cmCTest::Part p = cmCTest::PartStart; + p != cmCTest::PartCount; p = cmCTest::Part(p+1)) + { + this->SubmitPart[p] = true; + } + this->CDash = false; + this->HasWarnings = false; + this->HasErrors = false; + this->Superclass::Initialize(); + this->HTTPProxy = ""; + this->HTTPProxyType = 0; + this->HTTPProxyAuth = ""; + this->FTPProxy = ""; + this->FTPProxyType = 0; + this->LogFile = 0; + this->Files.clear(); +} + +//---------------------------------------------------------------------------- +bool cmCTestSubmitHandler::SubmitUsingFTP(const cmStdString& localprefix, + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url) +{ + CURL *curl; + CURLcode res; + FILE* ftpfile; + char error_buffer[1024]; + + /* In windows, this will init the winsock stuff */ + ::curl_global_init(CURL_GLOBAL_ALL); + + cmCTest::SetOfStrings::const_iterator file; + for ( file = files.begin(); file != files.end(); ++file ) + { + /* get a curl handle */ + curl = curl_easy_init(); + if(curl) + { + // Using proxy + if ( this->FTPProxyType > 0 ) + { + curl_easy_setopt(curl, CURLOPT_PROXY, this->FTPProxy.c_str()); + switch (this->FTPProxyType) + { + case 2: + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); + break; + case 3: + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + break; + default: + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); + } + } + + // enable uploading + ::curl_easy_setopt(curl, CURLOPT_UPLOAD, 1); + + // if there is little to no activity for too long stop submitting + ::curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1); + ::curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, + SUBMIT_TIMEOUT_IN_SECONDS_DEFAULT); + + ::curl_easy_setopt(curl, CURLOPT_UPLOAD, 1); + + cmStdString local_file = *file; + if ( !cmSystemTools::FileExists(local_file.c_str()) ) + { + local_file = localprefix + "/" + *file; + } + cmStdString upload_as + = url + "/" + remoteprefix + cmSystemTools::GetFilenameName(*file); + + struct stat st; + if ( ::stat(local_file.c_str(), &st) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, " Cannot find file: " + << local_file.c_str() << std::endl); + ::curl_easy_cleanup(curl); + ::curl_global_cleanup(); + return false; + } + + ftpfile = ::fopen(local_file.c_str(), "rb"); + *this->LogFile << "\tUpload file: " << local_file.c_str() << " to " + << upload_as.c_str() << std::endl; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " Upload file: " + << local_file.c_str() << " to " + << upload_as.c_str() << std::endl); + + ::curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); + + // specify target + ::curl_easy_setopt(curl,CURLOPT_URL, upload_as.c_str()); + + // now specify which file to upload + ::curl_easy_setopt(curl, CURLOPT_INFILE, ftpfile); + + // and give the size of the upload (optional) + ::curl_easy_setopt(curl, CURLOPT_INFILESIZE, + static_cast(st.st_size)); + + // and give curl the buffer for errors + ::curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &error_buffer); + + // specify handler for output + ::curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, + cmCTestSubmitHandlerWriteMemoryCallback); + ::curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, + cmCTestSubmitHandlerCurlDebugCallback); + + /* we pass our 'chunk' struct to the callback function */ + cmCTestSubmitHandlerVectorOfChar chunk; + cmCTestSubmitHandlerVectorOfChar chunkDebug; + ::curl_easy_setopt(curl, CURLOPT_FILE, (void *)&chunk); + ::curl_easy_setopt(curl, CURLOPT_DEBUGDATA, (void *)&chunkDebug); + + // Now run off and do what you've been told! + res = ::curl_easy_perform(curl); + + if ( chunk.size() > 0 ) + { + cmCTestLog(this->CTest, DEBUG, "CURL output: [" + << cmCTestLogWrite(&*chunk.begin(), chunk.size()) << "]" + << std::endl); + } + if ( chunkDebug.size() > 0 ) + { + cmCTestLog(this->CTest, DEBUG, "CURL debug output: [" + << cmCTestLogWrite(&*chunkDebug.begin(), chunkDebug.size()) << "]" + << std::endl); + } + + fclose(ftpfile); + if ( res ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + " Error when uploading file: " + << local_file.c_str() << std::endl); + cmCTestLog(this->CTest, ERROR_MESSAGE, " Error message was: " + << error_buffer << std::endl); + *this->LogFile << " Error when uploading file: " + << local_file.c_str() + << std::endl + << " Error message was: " + << error_buffer << std::endl + << " Curl output was: "; + // avoid dereference of empty vector + if(chunk.size()) + { + *this->LogFile << cmCTestLogWrite(&*chunk.begin(), chunk.size()); + cmCTestLog(this->CTest, ERROR_MESSAGE, "CURL output: [" + << cmCTestLogWrite(&*chunk.begin(), chunk.size()) << "]" + << std::endl); + } + *this->LogFile << std::endl; + ::curl_easy_cleanup(curl); + ::curl_global_cleanup(); + return false; + } + // always cleanup + ::curl_easy_cleanup(curl); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Uploaded: " + local_file + << std::endl); + } + } + ::curl_global_cleanup(); + return true; +} + +//---------------------------------------------------------------------------- +// Uploading files is simpler +bool cmCTestSubmitHandler::SubmitUsingHTTP(const cmStdString& localprefix, + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url) +{ + CURL *curl; + CURLcode res; + FILE* ftpfile; + char error_buffer[1024]; + + /* In windows, this will init the winsock stuff */ + ::curl_global_init(CURL_GLOBAL_ALL); + cmStdString dropMethod(this->CTest->GetCTestConfiguration("DropMethod")); + cmStdString curlopt(this->CTest->GetCTestConfiguration("CurlOptions")); + std::vector args; + cmSystemTools::ExpandListArgument(curlopt.c_str(), args); + bool verifyPeerOff = false; + bool verifyHostOff = false; + for( std::vector::iterator i = args.begin(); + i != args.end(); ++i) + { + if(*i == "CURLOPT_SSL_VERIFYPEER_OFF") + { + verifyPeerOff = true; + } + if(*i == "CURLOPT_SSL_VERIFYHOST_OFF") + { + verifyHostOff = true; + } + } + cmStdString::size_type kk; + cmCTest::SetOfStrings::const_iterator file; + for ( file = files.begin(); file != files.end(); ++file ) + { + /* get a curl handle */ + curl = curl_easy_init(); + if(curl) + { + if(verifyPeerOff) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " Set CURLOPT_SSL_VERIFYPEER to off\n"); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + } + if(verifyHostOff) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + " Set CURLOPT_SSL_VERIFYHOST to off\n"); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); + } + + // Using proxy + if ( this->HTTPProxyType > 0 ) + { + curl_easy_setopt(curl, CURLOPT_PROXY, this->HTTPProxy.c_str()); + switch (this->HTTPProxyType) + { + case 2: + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); + break; + case 3: + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + break; + default: + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); + if (this->HTTPProxyAuth.size() > 0) + { + curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, + this->HTTPProxyAuth.c_str()); + } + } + } + if(this->CTest->ShouldUseHTTP10()) + { + curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); + } + // enable HTTP ERROR parsing + curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1); + /* enable uploading */ + curl_easy_setopt(curl, CURLOPT_UPLOAD, 1); + + // if there is little to no activity for too long stop submitting + ::curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1); + ::curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, + SUBMIT_TIMEOUT_IN_SECONDS_DEFAULT); + + /* HTTP PUT please */ + ::curl_easy_setopt(curl, CURLOPT_PUT, 1); + ::curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); + + cmStdString local_file = *file; + if ( !cmSystemTools::FileExists(local_file.c_str()) ) + { + local_file = localprefix + "/" + *file; + } + cmStdString remote_file + = remoteprefix + cmSystemTools::GetFilenameName(*file); + + *this->LogFile << "\tUpload file: " << local_file.c_str() << " to " + << remote_file.c_str() << std::endl; + + cmStdString ofile = ""; + for ( kk = 0; kk < remote_file.size(); kk ++ ) + { + char c = remote_file[kk]; + char hexCh[4] = { 0, 0, 0, 0 }; + hexCh[0] = c; + switch ( c ) + { + case '+': + case '?': + case '/': + case '\\': + case '&': + case ' ': + case '=': + case '%': + sprintf(hexCh, "%%%02X", (int)c); + ofile.append(hexCh); + break; + default: + ofile.append(hexCh); + } + } + cmStdString upload_as + = url + ((url.find("?",0) == cmStdString::npos) ? "?" : "&") + + "FileName=" + ofile; + + upload_as += "&MD5="; + + if(cmSystemTools::IsOn(this->GetOption("InternalTest"))) + { + upload_as += "bad_md5sum"; + } + else + { + char md5[33]; + cmSystemTools::ComputeFileMD5(local_file.c_str(), md5); + md5[32] = 0; + upload_as += md5; + } + + struct stat st; + if ( ::stat(local_file.c_str(), &st) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, " Cannot find file: " + << local_file.c_str() << std::endl); + ::curl_easy_cleanup(curl); + ::curl_global_cleanup(); + return false; + } + + ftpfile = ::fopen(local_file.c_str(), "rb"); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " Upload file: " + << local_file.c_str() << " to " + << upload_as.c_str() << " Size: " << st.st_size << std::endl); + + // specify target + ::curl_easy_setopt(curl,CURLOPT_URL, upload_as.c_str()); + + // now specify which file to upload + ::curl_easy_setopt(curl, CURLOPT_INFILE, ftpfile); + + // and give the size of the upload (optional) + ::curl_easy_setopt(curl, CURLOPT_INFILESIZE, + static_cast(st.st_size)); + + // and give curl the buffer for errors + ::curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &error_buffer); + + // specify handler for output + ::curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, + cmCTestSubmitHandlerWriteMemoryCallback); + ::curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, + cmCTestSubmitHandlerCurlDebugCallback); + + /* we pass our 'chunk' struct to the callback function */ + cmCTestSubmitHandlerVectorOfChar chunk; + cmCTestSubmitHandlerVectorOfChar chunkDebug; + ::curl_easy_setopt(curl, CURLOPT_FILE, (void *)&chunk); + ::curl_easy_setopt(curl, CURLOPT_DEBUGDATA, (void *)&chunkDebug); + + // Now run off and do what you've been told! + res = ::curl_easy_perform(curl); + + if(cmSystemTools::IsOn(this->GetOption("InternalTest")) && + cmSystemTools::VersionCompare(cmSystemTools::OP_LESS, + this->CTest->GetCDashVersion().c_str(), "1.7")) + { + // mock failure output for internal test case + std::string mock_output = "\n" + " ERROR\n" + " Checksum failed for file.\n" + "\n"; + chunk.clear(); + chunk.assign(mock_output.begin(), mock_output.end()); + } + + if ( chunk.size() > 0 ) + { + cmCTestLog(this->CTest, DEBUG, "CURL output: [" + << cmCTestLogWrite(&*chunk.begin(), chunk.size()) << "]" + << std::endl); + this->ParseResponse(chunk); + } + if ( chunkDebug.size() > 0 ) + { + cmCTestLog(this->CTest, DEBUG, "CURL debug output: [" + << cmCTestLogWrite(&*chunkDebug.begin(), chunkDebug.size()) << "]" + << std::endl); + } + + // If curl failed for any reason, or checksum fails, wait and retry + // + if(res != CURLE_OK || this->HasErrors) + { + std::string retryDelay = this->GetOption("RetryDelay") == NULL ? + "" : this->GetOption("RetryDelay"); + std::string retryCount = this->GetOption("RetryCount") == NULL ? + "" : this->GetOption("RetryCount"); + + int delay = retryDelay == "" ? atoi(this->CTest->GetCTestConfiguration( + "CTestSubmitRetryDelay").c_str()) : atoi(retryDelay.c_str()); + int count = retryCount == "" ? atoi(this->CTest->GetCTestConfiguration( + "CTestSubmitRetryCount").c_str()) : atoi(retryCount.c_str()); + + for(int i = 0; i < count; i++) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Submit failed, waiting " << delay << " seconds...\n"); + + double stop = cmSystemTools::GetTime() + delay; + while(cmSystemTools::GetTime() < stop) + { + cmSystemTools::Delay(100); + } + + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Retry submission: Attempt " << (i + 1) << " of " + << count << std::endl); + + ::fclose(ftpfile); + ftpfile = ::fopen(local_file.c_str(), "rb"); + ::curl_easy_setopt(curl, CURLOPT_INFILE, ftpfile); + + chunk.clear(); + chunkDebug.clear(); + this->HasErrors = false; + + res = ::curl_easy_perform(curl); + + if ( chunk.size() > 0 ) + { + cmCTestLog(this->CTest, DEBUG, "CURL output: [" + << cmCTestLogWrite(&*chunk.begin(), chunk.size()) << "]" + << std::endl); + this->ParseResponse(chunk); + } + + if(res == CURLE_OK && !this->HasErrors) + { + break; + } + } + } + + fclose(ftpfile); + if ( res ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + " Error when uploading file: " + << local_file.c_str() << std::endl); + cmCTestLog(this->CTest, ERROR_MESSAGE, " Error message was: " + << error_buffer << std::endl); + *this->LogFile << " Error when uploading file: " + << local_file.c_str() + << std::endl + << " Error message was: " << error_buffer + << std::endl; + // avoid deref of begin for zero size array + if(chunk.size()) + { + *this->LogFile << " Curl output was: " + << cmCTestLogWrite(&*chunk.begin(), chunk.size()) + << std::endl; + cmCTestLog(this->CTest, ERROR_MESSAGE, "CURL output: [" + << cmCTestLogWrite(&*chunk.begin(), chunk.size()) << "]" + << std::endl); + } + ::curl_easy_cleanup(curl); + ::curl_global_cleanup(); + return false; + } + // always cleanup + ::curl_easy_cleanup(curl); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Uploaded: " + local_file + << std::endl); + } + } + ::curl_global_cleanup(); + return true; +} + +//---------------------------------------------------------------------------- +void cmCTestSubmitHandler +::ParseResponse(cmCTestSubmitHandlerVectorOfChar chunk) +{ + std::string output = ""; + output.append(chunk.begin(), chunk.end()); + + if(output.find("HasErrors = true; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Submission failed: " << + parser.Message << std::endl); + return; + } + } + output = cmSystemTools::UpperCase(output); + if(output.find("WARNING") != std::string::npos) + { + this->HasWarnings = true; + } + if(output.find("ERROR") != std::string::npos) + { + this->HasErrors = true; + } + + if(this->HasWarnings || this->HasErrors) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Server Response:\n" << + cmCTestLogWrite(&*chunk.begin(), chunk.size()) << "\n"); + } +} + +//---------------------------------------------------------------------------- +bool cmCTestSubmitHandler::TriggerUsingHTTP( + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url) +{ + CURL *curl; + char error_buffer[1024]; + /* In windows, this will init the winsock stuff */ + ::curl_global_init(CURL_GLOBAL_ALL); + + cmCTest::SetOfStrings::const_iterator file; + for ( file = files.begin(); file != files.end(); ++file ) + { + /* get a curl handle */ + curl = curl_easy_init(); + if(curl) + { + // Using proxy + if ( this->HTTPProxyType > 0 ) + { + curl_easy_setopt(curl, CURLOPT_PROXY, this->HTTPProxy.c_str()); + switch (this->HTTPProxyType) + { + case 2: + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); + break; + case 3: + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + break; + default: + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); + if (this->HTTPProxyAuth.size() > 0) + { + curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, + this->HTTPProxyAuth.c_str()); + } + } + } + + ::curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); + + // and give curl the buffer for errors + ::curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &error_buffer); + + // specify handler for output + ::curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, + cmCTestSubmitHandlerWriteMemoryCallback); + ::curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, + cmCTestSubmitHandlerCurlDebugCallback); + + /* we pass our 'chunk' struct to the callback function */ + cmCTestSubmitHandlerVectorOfChar chunk; + cmCTestSubmitHandlerVectorOfChar chunkDebug; + ::curl_easy_setopt(curl, CURLOPT_FILE, (void *)&chunk); + ::curl_easy_setopt(curl, CURLOPT_DEBUGDATA, (void *)&chunkDebug); + + cmStdString rfile + = remoteprefix + cmSystemTools::GetFilenameName(*file); + cmStdString ofile = ""; + cmStdString::iterator kk; + for ( kk = rfile.begin(); kk < rfile.end(); ++ kk) + { + char c = *kk; + char hexCh[4] = { 0, 0, 0, 0 }; + hexCh[0] = c; + switch ( c ) + { + case '+': + case '?': + case '/': + case '\\': + case '&': + case ' ': + case '=': + case '%': + sprintf(hexCh, "%%%02X", (int)c); + ofile.append(hexCh); + break; + default: + ofile.append(hexCh); + } + } + cmStdString turl + = url + ((url.find("?",0) == cmStdString::npos) ? "?" : "&") + + "xmlfile=" + ofile; + *this->LogFile << "Trigger url: " << turl.c_str() << std::endl; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " Trigger url: " + << turl.c_str() << std::endl); + curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); + curl_easy_setopt(curl, CURLOPT_URL, turl.c_str()); + if ( curl_easy_perform(curl) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, " Error when triggering: " + << turl.c_str() << std::endl); + cmCTestLog(this->CTest, ERROR_MESSAGE, " Error message was: " + << error_buffer << std::endl); + *this->LogFile << "\tTriggering failed with error: " << error_buffer + << std::endl + << " Error message was: " << error_buffer + << std::endl; + if(chunk.size()) + { + *this->LogFile + << " Curl output was: " + << cmCTestLogWrite(&*chunk.begin(), chunk.size()) << std::endl; + cmCTestLog(this->CTest, ERROR_MESSAGE, "CURL output: [" + << cmCTestLogWrite(&*chunk.begin(), chunk.size()) << "]" + << std::endl); + } + ::curl_easy_cleanup(curl); + ::curl_global_cleanup(); + return false; + } + + if ( chunk.size() > 0 ) + { + cmCTestLog(this->CTest, DEBUG, "CURL output: [" + << cmCTestLogWrite(&*chunk.begin(), chunk.size()) << "]" + << std::endl); + } + if ( chunkDebug.size() > 0 ) + { + cmCTestLog(this->CTest, DEBUG, "CURL debug output: [" + << cmCTestLogWrite(&*chunkDebug.begin(), chunkDebug.size()) + << "]" << std::endl); + } + + // always cleanup + ::curl_easy_cleanup(curl); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, std::endl); + } + } + ::curl_global_cleanup(); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Dart server triggered..." + << std::endl); + return true; +} + +//---------------------------------------------------------------------------- +bool cmCTestSubmitHandler::SubmitUsingSCP( + const cmStdString& scp_command, + const cmStdString& localprefix, + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url) +{ + if ( !scp_command.size() || !localprefix.size() || + !files.size() || !remoteprefix.size() || !url.size() ) + { + return 0; + } + std::vector argv; + argv.push_back(scp_command.c_str()); // Scp command + argv.push_back(scp_command.c_str()); // Dummy string for file + argv.push_back(scp_command.c_str()); // Dummy string for remote url + argv.push_back(0); + + cmsysProcess* cp = cmsysProcess_New(); + cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1); + //cmsysProcess_SetTimeout(cp, timeout); + + int problems = 0; + + cmCTest::SetOfStrings::const_iterator file; + for ( file = files.begin(); file != files.end(); ++file ) + { + int retVal; + + std::string lfname = localprefix; + cmSystemTools::ConvertToUnixSlashes(lfname); + lfname += "/" + *file; + lfname = cmSystemTools::ConvertToOutputPath(lfname.c_str()); + argv[1] = lfname.c_str(); + std::string rfname = url + "/" + remoteprefix + *file; + argv[2] = rfname.c_str(); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Execute \"" << argv[0] + << "\" \"" << argv[1] << "\" \"" + << argv[2] << "\"" << std::endl); + *this->LogFile << "Execute \"" << argv[0] << "\" \"" << argv[1] << "\" \"" + << argv[2] << "\"" << std::endl; + + cmsysProcess_SetCommand(cp, &*argv.begin()); + cmsysProcess_Execute(cp); + char* data; + int length; + + while(cmsysProcess_WaitForData(cp, &data, &length, 0)) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + cmCTestLogWrite(data, length)); + } + + cmsysProcess_WaitForExit(cp, 0); + + int result = cmsysProcess_GetState(cp); + + if(result == cmsysProcess_State_Exited) + { + retVal = cmsysProcess_GetExitValue(cp); + if ( retVal != 0 ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "\tSCP returned: " + << retVal << std::endl); + *this->LogFile << "\tSCP returned: " << retVal << std::endl; + problems ++; + } + } + else if(result == cmsysProcess_State_Exception) + { + retVal = cmsysProcess_GetExitException(cp); + cmCTestLog(this->CTest, ERROR_MESSAGE, "\tThere was an exception: " + << retVal << std::endl); + *this->LogFile << "\tThere was an exception: " << retVal << std::endl; + problems ++; + } + else if(result == cmsysProcess_State_Expired) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "\tThere was a timeout" + << std::endl); + *this->LogFile << "\tThere was a timeout" << std::endl; + problems ++; + } + else if(result == cmsysProcess_State_Error) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "\tError executing SCP: " + << cmsysProcess_GetErrorString(cp) << std::endl); + *this->LogFile << "\tError executing SCP: " + << cmsysProcess_GetErrorString(cp) << std::endl; + problems ++; + } + } + cmsysProcess_Delete(cp); + if ( problems ) + { + return false; + } + return true; +} + +//---------------------------------------------------------------------------- +bool cmCTestSubmitHandler::SubmitUsingCP( + const cmStdString& localprefix, + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& destination) +{ + if ( !localprefix.size() || + !files.size() || !remoteprefix.size() || !destination.size() ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Missing arguments for submit via cp:\n" + << "\tlocalprefix: " << localprefix << "\n" + << "\tNumber of files: " << files.size() << "\n" + << "\tremoteprefix: " << remoteprefix << "\n" + << "\tdestination: " << destination << std::endl); + return 0; + } + cmCTest::SetOfStrings::const_iterator file; + bool problems = false; + for ( file = files.begin(); file != files.end(); ++file ) + { + std::string lfname = localprefix; + cmSystemTools::ConvertToUnixSlashes(lfname); + lfname += "/" + *file; + std::string rfname = destination + "/" + remoteprefix + *file; + cmSystemTools::CopyFileAlways(lfname.c_str(), rfname.c_str()); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " Copy file: " + << lfname.c_str() << " to " + << rfname.c_str() << std::endl); + } + std::string tagDoneFile = destination + "/" + remoteprefix + "DONE"; + cmSystemTools::Touch(tagDoneFile.c_str(), true); + if ( problems ) + { + return false; + } + return true; +} + + +//---------------------------------------------------------------------------- +#if defined(CTEST_USE_XMLRPC) +bool cmCTestSubmitHandler::SubmitUsingXMLRPC(const cmStdString& localprefix, + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url) +{ + xmlrpc_env env; + char ctestString[] = "CTest"; + std::string ctestVersionString = cmVersion::GetCMakeVersion(); + char* ctestVersion = const_cast(ctestVersionString.c_str()); + + cmStdString realURL = url + "/" + remoteprefix + "/Command/"; + + /* Start up our XML-RPC client library. */ + xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, ctestString, ctestVersion); + + /* Initialize our error-handling environment. */ + xmlrpc_env_init(&env); + + /* Call the famous server at UserLand. */ + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Submitting to: " + << realURL.c_str() << " (" << remoteprefix.c_str() << ")" << std::endl); + cmCTest::SetOfStrings::const_iterator file; + for ( file = files.begin(); file != files.end(); ++file ) + { + xmlrpc_value *result; + + cmStdString local_file = *file; + if ( !cmSystemTools::FileExists(local_file.c_str()) ) + { + local_file = localprefix + "/" + *file; + } + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Submit file: " + << local_file.c_str() << std::endl); + struct stat st; + if ( ::stat(local_file.c_str(), &st) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, " Cannot find file: " + << local_file.c_str() << std::endl); + return false; + } + + // off_t can be bigger than size_t. fread takes size_t. + // make sure the file is not too big. + if(static_cast(static_cast(st.st_size)) != + static_cast(st.st_size)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, " File too big: " + << local_file.c_str() << std::endl); + return false; + } + size_t fileSize = static_cast(st.st_size); + FILE* fp = fopen(local_file.c_str(), "rb"); + if ( !fp ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, " Cannot open file: " + << local_file.c_str() << std::endl); + return false; + } + + unsigned char *fileBuffer = new unsigned char[fileSize]; + if ( fread(fileBuffer, 1, fileSize, fp) != fileSize ) + { + delete [] fileBuffer; + fclose(fp); + cmCTestLog(this->CTest, ERROR_MESSAGE, " Cannot read file: " + << local_file.c_str() << std::endl); + return false; + } + fclose(fp); + + char remoteCommand[] = "Submit.put"; + char* pRealURL = const_cast(realURL.c_str()); + result = xmlrpc_client_call(&env, pRealURL, remoteCommand, + "(6)", fileBuffer, (xmlrpc_int32)fileSize ); + + delete [] fileBuffer; + + if ( env.fault_occurred ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, " Submission problem: " + << env.fault_string << " (" << env.fault_code << ")" << std::endl); + xmlrpc_env_clean(&env); + xmlrpc_client_cleanup(); + return false; + } + + /* Dispose of our result value. */ + xmlrpc_DECREF(result); + } + + /* Clean up our error-handling environment. */ + xmlrpc_env_clean(&env); + + /* Shutdown our XML-RPC client library. */ + xmlrpc_client_cleanup(); + return true; +} +#else +bool cmCTestSubmitHandler::SubmitUsingXMLRPC(cmStdString const&, + std::set const&, + cmStdString const&, + cmStdString const&) +{ + return false; +} +#endif + +//---------------------------------------------------------------------------- +int cmCTestSubmitHandler::ProcessHandler() +{ + std::string iscdash = this->CTest->GetCTestConfiguration("IsCDash"); + // cdash does not need to trigger so just return true + if(iscdash.size()) + { + this->CDash = true; + } + + const std::string &buildDirectory + = this->CTest->GetCTestConfiguration("BuildDirectory"); + if ( buildDirectory.size() == 0 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find BuildDirectory key in the DartConfiguration.tcl" + << std::endl); + return -1; + } + + if ( getenv("HTTP_PROXY") ) + { + this->HTTPProxyType = 1; + this->HTTPProxy = getenv("HTTP_PROXY"); + if ( getenv("HTTP_PROXY_PORT") ) + { + this->HTTPProxy += ":"; + this->HTTPProxy += getenv("HTTP_PROXY_PORT"); + } + if ( getenv("HTTP_PROXY_TYPE") ) + { + cmStdString type = getenv("HTTP_PROXY_TYPE"); + // HTTP/SOCKS4/SOCKS5 + if ( type == "HTTP" ) + { + this->HTTPProxyType = 1; + } + else if ( type == "SOCKS4" ) + { + this->HTTPProxyType = 2; + } + else if ( type == "SOCKS5" ) + { + this->HTTPProxyType = 3; + } + } + if ( getenv("HTTP_PROXY_USER") ) + { + this->HTTPProxyAuth = getenv("HTTP_PROXY_USER"); + } + if ( getenv("HTTP_PROXY_PASSWD") ) + { + this->HTTPProxyAuth += ":"; + this->HTTPProxyAuth += getenv("HTTP_PROXY_PASSWD"); + } + } + + if ( getenv("FTP_PROXY") ) + { + this->FTPProxyType = 1; + this->FTPProxy = getenv("FTP_PROXY"); + if ( getenv("FTP_PROXY_PORT") ) + { + this->FTPProxy += ":"; + this->FTPProxy += getenv("FTP_PROXY_PORT"); + } + if ( getenv("FTP_PROXY_TYPE") ) + { + cmStdString type = getenv("FTP_PROXY_TYPE"); + // HTTP/SOCKS4/SOCKS5 + if ( type == "HTTP" ) + { + this->FTPProxyType = 1; + } + else if ( type == "SOCKS4" ) + { + this->FTPProxyType = 2; + } + else if ( type == "SOCKS5" ) + { + this->FTPProxyType = 3; + } + } + } + + if ( this->HTTPProxy.size() > 0 ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Use HTTP Proxy: " + << this->HTTPProxy << std::endl); + } + if ( this->FTPProxy.size() > 0 ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Use FTP Proxy: " + << this->FTPProxy << std::endl); + } + cmGeneratedFileStream ofs; + this->StartLogFile("Submit", ofs); + + cmCTest::SetOfStrings files; + std::string prefix = this->GetSubmitResultsPrefix(); + + if (!this->Files.empty()) + { + // Submit the explicitly selected files: + // + cmCTest::SetOfStrings::const_iterator it; + for (it = this->Files.begin(); it != this->Files.end(); ++it) + { + files.insert(*it); + } + } + + // Add to the list of files to submit from any selected, existing parts: + // + + // TODO: + // Check if test is enabled + + this->CTest->AddIfExists(cmCTest::PartUpdate, "Update.xml"); + this->CTest->AddIfExists(cmCTest::PartConfigure, "Configure.xml"); + this->CTest->AddIfExists(cmCTest::PartBuild, "Build.xml"); + this->CTest->AddIfExists(cmCTest::PartTest, "Test.xml"); + if(this->CTest->AddIfExists(cmCTest::PartCoverage, "Coverage.xml")) + { + cmCTest::VectorOfStrings gfiles; + std::string gpath + = buildDirectory + "/Testing/" + this->CTest->GetCurrentTag(); + std::string::size_type glen = gpath.size() + 1; + gpath = gpath + "/CoverageLog*"; + cmCTestLog(this->CTest, DEBUG, "Globbing for: " << gpath.c_str() + << std::endl); + if ( cmSystemTools::SimpleGlob(gpath, gfiles, 1) ) + { + size_t cc; + for ( cc = 0; cc < gfiles.size(); cc ++ ) + { + gfiles[cc] = gfiles[cc].substr(glen); + cmCTestLog(this->CTest, DEBUG, "Glob file: " << gfiles[cc].c_str() + << std::endl); + this->CTest->AddSubmitFile(cmCTest::PartCoverage, gfiles[cc].c_str()); + } + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Problem globbing" << std::endl); + } + } + this->CTest->AddIfExists(cmCTest::PartMemCheck, "DynamicAnalysis.xml"); + this->CTest->AddIfExists(cmCTest::PartMemCheck, "Purify.xml"); + this->CTest->AddIfExists(cmCTest::PartNotes, "Notes.xml"); + this->CTest->AddIfExists(cmCTest::PartUpload, "Upload.xml"); + + // Query parts for files to submit. + for(cmCTest::Part p = cmCTest::PartStart; + p != cmCTest::PartCount; p = cmCTest::Part(p+1)) + { + // Skip parts we are not submitting. + if(!this->SubmitPart[p]) + { + continue; + } + + // Submit files from this part. + std::vector const& pfiles = this->CTest->GetSubmitFiles(p); + for(std::vector::const_iterator pi = pfiles.begin(); + pi != pfiles.end(); ++pi) + { + files.insert(*pi); + } + } + + if ( ofs ) + { + ofs << "Upload files:" << std::endl; + int cnt = 0; + cmCTest::SetOfStrings::iterator it; + for ( it = files.begin(); it != files.end(); ++ it ) + { + ofs << cnt << "\t" << it->c_str() << std::endl; + cnt ++; + } + } + cmCTestLog(this->CTest, HANDLER_OUTPUT, "Submit files (using " + << this->CTest->GetCTestConfiguration("DropMethod") << ")" + << std::endl); + const char* specificTrack = this->CTest->GetSpecificTrack(); + if ( specificTrack ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Send to track: " + << specificTrack << std::endl); + } + this->SetLogFile(&ofs); + + cmStdString dropMethod(this->CTest->GetCTestConfiguration("DropMethod")); + + if ( dropMethod == "" || dropMethod == "ftp" ) + { + ofs << "Using drop method: FTP" << std::endl; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Using FTP submit method" + << std::endl + << " Drop site: ftp://"); + std::string url = "ftp://"; + url += cmCTest::MakeURLSafe( + this->CTest->GetCTestConfiguration("DropSiteUser")) + ":" + + cmCTest::MakeURLSafe(this->CTest->GetCTestConfiguration( + "DropSitePassword")) + "@" + + this->CTest->GetCTestConfiguration("DropSite") + + cmCTest::MakeURLSafe( + this->CTest->GetCTestConfiguration("DropLocation")); + if ( this->CTest->GetCTestConfiguration("DropSiteUser").size() > 0 ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, + this->CTest->GetCTestConfiguration( + "DropSiteUser").c_str()); + if ( this->CTest->GetCTestConfiguration("DropSitePassword").size() > 0 ) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, ":******"); + } + cmCTestLog(this->CTest, HANDLER_OUTPUT, "@"); + } + cmCTestLog(this->CTest, HANDLER_OUTPUT, + this->CTest->GetCTestConfiguration("DropSite") + << this->CTest->GetCTestConfiguration("DropLocation") << std::endl); + if ( !this->SubmitUsingFTP(buildDirectory + "/Testing/" + + this->CTest->GetCurrentTag(), + files, prefix, url) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + " Problems when submitting via FTP" + << std::endl); + ofs << " Problems when submitting via FTP" << std::endl; + return -1; + } + if(!this->CDash) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Using HTTP trigger method" + << std::endl + << " Trigger site: " + << this->CTest->GetCTestConfiguration("TriggerSite") + << std::endl); + if ( !this-> + TriggerUsingHTTP(files, prefix, + this->CTest->GetCTestConfiguration("TriggerSite"))) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + " Problems when triggering via HTTP" << std::endl); + ofs << " Problems when triggering via HTTP" << std::endl; + return -1; + } + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Submission successful" + << std::endl); + ofs << " Submission successful" << std::endl; + return 0; + } + } + else if ( dropMethod == "http" || dropMethod == "https" ) + { + std::string url = dropMethod; + url += "://"; + ofs << "Using drop method: " << dropMethod << std::endl; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Using HTTP submit method" + << std::endl + << " Drop site:" << url); + if ( this->CTest->GetCTestConfiguration("DropSiteUser").size() > 0 ) + { + url += this->CTest->GetCTestConfiguration("DropSiteUser"); + cmCTestLog(this->CTest, HANDLER_OUTPUT, + this->CTest->GetCTestConfiguration("DropSiteUser").c_str()); + if ( this->CTest->GetCTestConfiguration("DropSitePassword").size() > 0 ) + { + url += ":" + this->CTest->GetCTestConfiguration("DropSitePassword"); + cmCTestLog(this->CTest, HANDLER_OUTPUT, ":******"); + } + url += "@"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, "@"); + } + url += this->CTest->GetCTestConfiguration("DropSite") + + this->CTest->GetCTestConfiguration("DropLocation"); + cmCTestLog(this->CTest, HANDLER_OUTPUT, + this->CTest->GetCTestConfiguration("DropSite") + << this->CTest->GetCTestConfiguration("DropLocation") << std::endl); + if ( !this->SubmitUsingHTTP(buildDirectory + "/Testing/" + + this->CTest->GetCurrentTag(), files, prefix, url) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + " Problems when submitting via HTTP" << std::endl); + ofs << " Problems when submitting via HTTP" << std::endl; + return -1; + } + if(!this->CDash) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Using HTTP trigger method" + << std::endl + << " Trigger site: " + << this->CTest->GetCTestConfiguration("TriggerSite") + << std::endl); + if ( !this-> + TriggerUsingHTTP(files, prefix, + this->CTest->GetCTestConfiguration("TriggerSite"))) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + " Problems when triggering via HTTP" << std::endl); + ofs << " Problems when triggering via HTTP" << std::endl; + return -1; + } + } + if(this->HasErrors) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Errors occurred during " + "submission." << std::endl); + ofs << " Errors occurred during submission. " << std::endl; + } + else + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Submission successful" << + (this->HasWarnings ? ", with warnings." : "") << std::endl); + ofs << " Submission successful" << + (this->HasWarnings ? ", with warnings." : "") << std::endl; + } + + return 0; + } + else if ( dropMethod == "xmlrpc" ) + { +#if defined(CTEST_USE_XMLRPC) + ofs << "Using drop method: XML-RPC" << std::endl; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Using XML-RPC submit method" + << std::endl); + std::string url = this->CTest->GetCTestConfiguration("DropSite"); + prefix = this->CTest->GetCTestConfiguration("DropLocation"); + if ( !this->SubmitUsingXMLRPC(buildDirectory + "/Testing/" + + this->CTest->GetCurrentTag(), files, prefix, url) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + " Problems when submitting via XML-RPC" << std::endl); + ofs << " Problems when submitting via XML-RPC" << std::endl; + return -1; + } + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Submission successful" + << std::endl); + ofs << " Submission successful" << std::endl; + return 0; +#else + cmCTestLog(this->CTest, ERROR_MESSAGE, + " Submission method \"xmlrpc\" not compiled into CTest!" + << std::endl); + return -1; +#endif + } + else if ( dropMethod == "scp" ) + { + std::string url; + std::string oldWorkingDirectory; + if ( this->CTest->GetCTestConfiguration("DropSiteUser").size() > 0 ) + { + url += this->CTest->GetCTestConfiguration("DropSiteUser") + "@"; + } + url += this->CTest->GetCTestConfiguration("DropSite") + ":" + + this->CTest->GetCTestConfiguration("DropLocation"); + + // change to the build directory so that we can uses a relative path + // on windows since scp dosn't support "c:" a drive in the path + oldWorkingDirectory = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::ChangeDirectory(buildDirectory.c_str()); + + if ( !this->SubmitUsingSCP( + this->CTest->GetCTestConfiguration("ScpCommand"), + "Testing/"+this->CTest->GetCurrentTag(), files, prefix, url) ) + { + cmSystemTools::ChangeDirectory(oldWorkingDirectory.c_str()); + cmCTestLog(this->CTest, ERROR_MESSAGE, + " Problems when submitting via SCP" + << std::endl); + ofs << " Problems when submitting via SCP" << std::endl; + return -1; + } + cmSystemTools::ChangeDirectory(oldWorkingDirectory.c_str()); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Submission successful" + << std::endl); + ofs << " Submission successful" << std::endl; + return 0; + } + else if ( dropMethod == "cp" ) + { + std::string location + = this->CTest->GetCTestConfiguration("DropLocation"); + + + // change to the build directory so that we can uses a relative path + // on windows since scp dosn't support "c:" a drive in the path + std::string + oldWorkingDirectory = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::ChangeDirectory(buildDirectory.c_str()); + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " Change directory: " + << buildDirectory.c_str() << std::endl); + + if ( !this->SubmitUsingCP( + "Testing/"+this->CTest->GetCurrentTag(), + files, + prefix, + location) ) + { + cmSystemTools::ChangeDirectory(oldWorkingDirectory.c_str()); + cmCTestLog(this->CTest, ERROR_MESSAGE, + " Problems when submitting via CP" + << std::endl); + ofs << " Problems when submitting via cp" << std::endl; + return -1; + } + cmSystemTools::ChangeDirectory(oldWorkingDirectory.c_str()); + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Submission successful" + << std::endl); + ofs << " Submission successful" << std::endl; + return 0; + } + + cmCTestLog(this->CTest, ERROR_MESSAGE, " Unknown submission method: \"" + << dropMethod << "\"" << std::endl); + return -1; +} + +//---------------------------------------------------------------------------- +std::string cmCTestSubmitHandler::GetSubmitResultsPrefix() +{ + std::string name = this->CTest->GetCTestConfiguration("Site") + + "___" + this->CTest->GetCTestConfiguration("BuildName") + + "___" + this->CTest->GetCurrentTag() + "-" + + this->CTest->GetTestModelString() + "___XML___"; + return name; +} + +//---------------------------------------------------------------------------- +void cmCTestSubmitHandler::SelectParts(std::set const& parts) +{ + // Check whether each part is selected. + for(cmCTest::Part p = cmCTest::PartStart; + p != cmCTest::PartCount; p = cmCTest::Part(p+1)) + { + this->SubmitPart[p] = + (std::set::const_iterator(parts.find(p)) != parts.end()); + } +} + +//---------------------------------------------------------------------------- +void cmCTestSubmitHandler::SelectFiles(cmCTest::SetOfStrings const& files) +{ + cmCTest::SetOfStrings::const_iterator it; + for (it = files.begin(); it != files.end(); ++it) + { + this->Files.insert(*it); + } +} diff --git a/Source/CTest/cmCTestSubmitHandler.h b/Source/CTest/cmCTestSubmitHandler.h new file mode 100644 index 0000000..14eac80 --- /dev/null +++ b/Source/CTest/cmCTestSubmitHandler.h @@ -0,0 +1,98 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestSubmitHandler_h +#define cmCTestSubmitHandler_h + +#include "cmCTestGenericHandler.h" + +/** \class cmCTestSubmitHandler + * \brief Helper class for CTest + * + * Submit testing results + * + */ +class cmCTestSubmitHandler : public cmCTestGenericHandler +{ +public: + cmTypeMacro(cmCTestSubmitHandler, cmCTestGenericHandler); + + cmCTestSubmitHandler(); + ~cmCTestSubmitHandler() { this->LogFile = 0; } + + /* + * The main entry point for this class + */ + int ProcessHandler(); + + void Initialize(); + + /** Specify a set of parts (by name) to submit. */ + void SelectParts(std::set const& parts); + + /** Specify a set of files to submit. */ + void SelectFiles(cmCTest::SetOfStrings const& files); + +private: + void SetLogFile(std::ostream* ost) { this->LogFile = ost; } + + /** + * Submit file using various ways + */ + bool SubmitUsingFTP(const cmStdString& localprefix, + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url); + bool SubmitUsingHTTP(const cmStdString& localprefix, + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url); + bool SubmitUsingSCP(const cmStdString& scp_command, + const cmStdString& localprefix, + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url); + + bool SubmitUsingCP( const cmStdString& localprefix, + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url); + + bool TriggerUsingHTTP(const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url); + + bool SubmitUsingXMLRPC(const cmStdString& localprefix, + const std::set& files, + const cmStdString& remoteprefix, + const cmStdString& url); + + typedef std::vector cmCTestSubmitHandlerVectorOfChar; + + void ParseResponse(cmCTestSubmitHandlerVectorOfChar chunk); + + std::string GetSubmitResultsPrefix(); + + class ResponseParser; + cmStdString HTTPProxy; + int HTTPProxyType; + cmStdString HTTPProxyAuth; + cmStdString FTPProxy; + int FTPProxyType; + std::ostream* LogFile; + bool SubmitPart[cmCTest::PartCount]; + bool CDash; + bool HasWarnings; + bool HasErrors; + cmCTest::SetOfStrings Files; +}; + +#endif diff --git a/Source/CTest/cmCTestTestCommand.cxx b/Source/CTest/cmCTestTestCommand.cxx new file mode 100644 index 0000000..5aee035 --- /dev/null +++ b/Source/CTest/cmCTestTestCommand.cxx @@ -0,0 +1,112 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestTestCommand.h" + +#include "cmCTest.h" +#include "cmCTestGenericHandler.h" + +cmCTestTestCommand::cmCTestTestCommand() +{ + this->Arguments[ctt_START] = "START"; + this->Arguments[ctt_END] = "END"; + this->Arguments[ctt_STRIDE] = "STRIDE"; + this->Arguments[ctt_EXCLUDE] = "EXCLUDE"; + this->Arguments[ctt_INCLUDE] = "INCLUDE"; + this->Arguments[ctt_EXCLUDE_LABEL] = "EXCLUDE_LABEL"; + this->Arguments[ctt_INCLUDE_LABEL] = "INCLUDE_LABEL"; + this->Arguments[ctt_PARALLEL_LEVEL] = "PARALLEL_LEVEL"; + this->Arguments[ctt_SCHEDULE_RANDOM] = "SCHEDULE_RANDOM"; + this->Arguments[ctt_STOP_TIME] = "STOP_TIME"; + this->Arguments[ctt_LAST] = 0; + this->Last = ctt_LAST; +} + +cmCTestGenericHandler* cmCTestTestCommand::InitializeHandler() +{ + const char* ctestTimeout = + this->Makefile->GetDefinition("CTEST_TEST_TIMEOUT"); + + double timeout = this->CTest->GetTimeOut(); + if ( ctestTimeout ) + { + timeout = atof(ctestTimeout); + } + else + { + if ( timeout <= 0 ) + { + // By default use timeout of 10 minutes + timeout = 600; + } + } + this->CTest->SetTimeOut(timeout); + cmCTestGenericHandler* handler = this->InitializeActualHandler(); + if ( this->Values[ctt_START] || this->Values[ctt_END] || + this->Values[ctt_STRIDE] ) + { + cmOStringStream testsToRunString; + if ( this->Values[ctt_START] ) + { + testsToRunString << this->Values[ctt_START]; + } + testsToRunString << ","; + if ( this->Values[ctt_END] ) + { + testsToRunString << this->Values[ctt_END]; + } + testsToRunString << ","; + if ( this->Values[ctt_STRIDE] ) + { + testsToRunString << this->Values[ctt_STRIDE]; + } + handler->SetOption("TestsToRunInformation", + testsToRunString.str().c_str()); + } + if(this->Values[ctt_EXCLUDE]) + { + handler->SetOption("ExcludeRegularExpression", this->Values[ctt_EXCLUDE]); + } + if(this->Values[ctt_INCLUDE]) + { + handler->SetOption("IncludeRegularExpression", this->Values[ctt_INCLUDE]); + } + if(this->Values[ctt_EXCLUDE_LABEL]) + { + handler->SetOption("ExcludeLabelRegularExpression", + this->Values[ctt_EXCLUDE_LABEL]); + } + if(this->Values[ctt_INCLUDE_LABEL]) + { + handler->SetOption("LabelRegularExpression", + this->Values[ctt_INCLUDE_LABEL]); + } + if(this->Values[ctt_PARALLEL_LEVEL]) + { + handler->SetOption("ParallelLevel", + this->Values[ctt_PARALLEL_LEVEL]); + } + if(this->Values[ctt_SCHEDULE_RANDOM]) + { + handler->SetOption("ScheduleRandom", + this->Values[ctt_SCHEDULE_RANDOM]); + } + if(this->Values[ctt_STOP_TIME]) + { + this->CTest->SetStopTime(this->Values[ctt_STOP_TIME]); + } + return handler; +} + +cmCTestGenericHandler* cmCTestTestCommand::InitializeActualHandler() +{ + return this->CTest->GetInitializedHandler("test"); +} diff --git a/Source/CTest/cmCTestTestCommand.h b/Source/CTest/cmCTestTestCommand.h new file mode 100644 index 0000000..d184ff2 --- /dev/null +++ b/Source/CTest/cmCTestTestCommand.h @@ -0,0 +1,107 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestTestCommand_h +#define cmCTestTestCommand_h + +#include "cmCTestHandlerCommand.h" + +/** \class cmCTestTest + * \brief Run a ctest script + * + * cmCTestTestCommand defineds the command to test the project. + */ +class cmCTestTestCommand : public cmCTestHandlerCommand +{ +public: + + cmCTestTestCommand(); + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestTestCommand* ni = new cmCTestTestCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_test";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Run tests in the project build tree."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_test([BUILD build_dir] [APPEND]\n" + " [START start number] [END end number]\n" + " [STRIDE stride number] [EXCLUDE exclude regex ]\n" + " [INCLUDE include regex] [RETURN_VALUE res] \n" + " [EXCLUDE_LABEL exclude regex] \n" + " [INCLUDE_LABEL label regex] \n" + " [PARALLEL_LEVEL level] \n" + " [SCHEDULE_RANDOM on] \n" + " [STOP_TIME time of day]) \n" + "Tests the given build directory and stores results in Test.xml. The " + "second argument is a variable that will hold value. Optionally, " + "you can specify the starting test number START, the ending test number " + "END, the number of tests to skip between each test STRIDE, a regular " + "expression for tests to run INCLUDE, or a regular expression for tests " + "to not run EXCLUDE. EXCLUDE_LABEL and INCLUDE_LABEL are regular " + "expression for test to be included or excluded by the test " + "property LABEL. PARALLEL_LEVEL should be set to a positive number " + "representing the number of tests to be run in parallel. " + "SCHEDULE_RANDOM will launch tests in a random order, and is " + "typically used to detect implicit test dependencies. STOP_TIME is the " + "time of day at which the tests should all stop running." + "\n" + CTEST_COMMAND_APPEND_OPTION_DOCS; + } + + cmTypeMacro(cmCTestTestCommand, cmCTestHandlerCommand); + +protected: + virtual cmCTestGenericHandler* InitializeActualHandler(); + cmCTestGenericHandler* InitializeHandler(); + + enum { + ctt_BUILD = ct_LAST, + ctt_RETURN_VALUE, + ctt_START, + ctt_END, + ctt_STRIDE, + ctt_EXCLUDE, + ctt_INCLUDE, + ctt_EXCLUDE_LABEL, + ctt_INCLUDE_LABEL, + ctt_PARALLEL_LEVEL, + ctt_SCHEDULE_RANDOM, + ctt_STOP_TIME, + ctt_LAST + }; +}; + + +#endif diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx new file mode 100644 index 0000000..ead449e --- /dev/null +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -0,0 +1,2267 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCTestTestHandler.h" +#include "cmCTestMultiProcessHandler.h" +#include "cmCTestBatchTestHandler.h" +#include "cmCTest.h" +#include "cmCTestRunTest.h" +#include "cmake.h" +#include "cmGeneratedFileStream.h" +#include +#include +#include +#include "cmMakefile.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmCommand.h" +#include "cmSystemTools.h" +#include "cmXMLSafe.h" +#include "cm_utf8.h" + +#include +#include +#include + +#include // auto_ptr +#include + +//---------------------------------------------------------------------- +class cmCTestSubdirCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestSubdirCommand* c = new cmCTestSubdirCommand; + c->TestHandler = this->TestHandler; + return c; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "subdirs";} + + // Unused methods + virtual const char* GetTerseDocumentation() const { return ""; } + virtual const char* GetFullDocumentation() const { return ""; } + + cmTypeMacro(cmCTestSubdirCommand, cmCommand); + + cmCTestTestHandler* TestHandler; +}; + +//---------------------------------------------------------------------- +bool cmCTestSubdirCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + std::vector::const_iterator it; + std::string cwd = cmSystemTools::GetCurrentWorkingDirectory(); + for ( it = args.begin(); it != args.end(); ++ it ) + { + cmSystemTools::ChangeDirectory(cwd.c_str()); + std::string fname; + + if(cmSystemTools::FileIsFullPath(it->c_str())) + { + fname = *it; + } + else + { + fname = cwd; + fname += "/"; + fname += *it; + } + + if ( !cmSystemTools::FileIsDirectory(fname.c_str()) ) + { + // No subdirectory? So what... + continue; + } + cmSystemTools::ChangeDirectory(fname.c_str()); + const char* testFilename; + if( cmSystemTools::FileExists("CTestTestfile.cmake") ) + { + // does the CTestTestfile.cmake exist ? + testFilename = "CTestTestfile.cmake"; + } + else if( cmSystemTools::FileExists("DartTestfile.txt") ) + { + // does the DartTestfile.txt exist ? + testFilename = "DartTestfile.txt"; + } + else + { + // No CTestTestfile? Who cares... + cmSystemTools::ChangeDirectory(cwd.c_str()); + continue; + } + fname += "/"; + fname += testFilename; + bool readit = + this->Makefile->ReadListFile(this->Makefile->GetCurrentListFile(), + fname.c_str()); + cmSystemTools::ChangeDirectory(cwd.c_str()); + if(!readit) + { + std::string m = "Could not find include file: "; + m += fname; + this->SetError(m.c_str()); + return false; + } + } + return true; +} + +//---------------------------------------------------------------------- +class cmCTestAddSubdirectoryCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestAddSubdirectoryCommand* c = new cmCTestAddSubdirectoryCommand; + c->TestHandler = this->TestHandler; + return c; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "add_subdirectory";} + + // Unused methods + virtual const char* GetTerseDocumentation() const { return ""; } + virtual const char* GetFullDocumentation() const { return ""; } + + cmTypeMacro(cmCTestAddSubdirectoryCommand, cmCommand); + + cmCTestTestHandler* TestHandler; +}; + +//---------------------------------------------------------------------- +bool cmCTestAddSubdirectoryCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + std::string cwd = cmSystemTools::GetCurrentWorkingDirectory(); + cmSystemTools::ChangeDirectory(cwd.c_str()); + std::string fname = cwd; + fname += "/"; + fname += args[1]; + + if ( !cmSystemTools::FileExists(fname.c_str()) ) + { + // No subdirectory? So what... + return true; + } + cmSystemTools::ChangeDirectory(fname.c_str()); + const char* testFilename; + if( cmSystemTools::FileExists("CTestTestfile.cmake") ) + { + // does the CTestTestfile.cmake exist ? + testFilename = "CTestTestfile.cmake"; + } + else if( cmSystemTools::FileExists("DartTestfile.txt") ) + { + // does the DartTestfile.txt exist ? + testFilename = "DartTestfile.txt"; + } + else + { + // No CTestTestfile? Who cares... + cmSystemTools::ChangeDirectory(cwd.c_str()); + return true; + } + fname += "/"; + fname += testFilename; + bool readit = + this->Makefile->ReadListFile(this->Makefile->GetCurrentListFile(), + fname.c_str()); + cmSystemTools::ChangeDirectory(cwd.c_str()); + if(!readit) + { + std::string m = "Could not find include file: "; + m += fname; + this->SetError(m.c_str()); + return false; + } + return true; +} + +//---------------------------------------------------------------------- +class cmCTestAddTestCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestAddTestCommand* c = new cmCTestAddTestCommand; + c->TestHandler = this->TestHandler; + return c; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const&, + cmExecutionStatus &); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ADD_TEST";} + + // Unused methods + virtual const char* GetTerseDocumentation() const { return ""; } + virtual const char* GetFullDocumentation() const { return ""; } + + cmTypeMacro(cmCTestAddTestCommand, cmCommand); + + cmCTestTestHandler* TestHandler; +}; + +//---------------------------------------------------------------------- +bool cmCTestAddTestCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if ( args.size() < 2 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + return this->TestHandler->AddTest(args); +} + +//---------------------------------------------------------------------- +class cmCTestSetTestsPropertiesCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestSetTestsPropertiesCommand* c + = new cmCTestSetTestsPropertiesCommand; + c->TestHandler = this->TestHandler; + return c; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const&, + cmExecutionStatus &); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "SET_TESTS_PROPERTIES";} + + // Unused methods + virtual const char* GetTerseDocumentation() const { return ""; } + virtual const char* GetFullDocumentation() const { return ""; } + + cmTypeMacro(cmCTestSetTestsPropertiesCommand, cmCommand); + + cmCTestTestHandler* TestHandler; +}; + +//---------------------------------------------------------------------- +bool cmCTestSetTestsPropertiesCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + return this->TestHandler->SetTestsProperties(args); +} + +//---------------------------------------------------------------------- +// get the next number in a string with numbers separated by , +// pos is the start of the search and pos2 is the end of the search +// pos becomes pos2 after a call to GetNextNumber. +// -1 is returned at the end of the list. +inline int GetNextNumber(std::string const& in, + int& val, + std::string::size_type& pos, + std::string::size_type& pos2) +{ + pos2 = in.find(',', pos); + if(pos2 != in.npos) + { + if(pos2-pos == 0) + { + val = -1; + } + else + { + val = atoi(in.substr(pos, pos2-pos).c_str()); + } + pos = pos2+1; + return 1; + } + else + { + if(in.size()-pos == 0) + { + val = -1; + } + else + { + val = atoi(in.substr(pos, in.size()-pos).c_str()); + } + return 0; + } +} + +//---------------------------------------------------------------------- +// get the next number in a string with numbers separated by , +// pos is the start of the search and pos2 is the end of the search +// pos becomes pos2 after a call to GetNextNumber. +// -1 is returned at the end of the list. +inline int GetNextRealNumber(std::string const& in, + double& val, + std::string::size_type& pos, + std::string::size_type& pos2) +{ + pos2 = in.find(',', pos); + if(pos2 != in.npos) + { + if(pos2-pos == 0) + { + val = -1; + } + else + { + val = atof(in.substr(pos, pos2-pos).c_str()); + } + pos = pos2+1; + return 1; + } + else + { + if(in.size()-pos == 0) + { + val = -1; + } + else + { + val = atof(in.substr(pos, in.size()-pos).c_str()); + } + return 0; + } +} + + +//---------------------------------------------------------------------- +cmCTestTestHandler::cmCTestTestHandler() +{ + this->UseUnion = false; + + this->UseIncludeLabelRegExpFlag = false; + this->UseExcludeLabelRegExpFlag = false; + this->UseIncludeRegExpFlag = false; + this->UseExcludeRegExpFlag = false; + this->UseExcludeRegExpFirst = false; + + this->CustomMaximumPassedTestOutputSize = 1 * 1024; + this->CustomMaximumFailedTestOutputSize = 300 * 1024; + + this->MemCheck = false; + + this->LogFile = 0; + + // regex to detect ... + this->DartStuff.compile( + "()"); + // regex to detect each individual ... + this->DartStuff1.compile( + "()"); +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::Initialize() +{ + this->Superclass::Initialize(); + + this->ElapsedTestingTime = -1; + + this->TestResults.clear(); + + this->CustomTestsIgnore.clear(); + this->StartTest = ""; + this->EndTest = ""; + + this->CustomPreTest.clear(); + this->CustomPostTest.clear(); + this->CustomMaximumPassedTestOutputSize = 1 * 1024; + this->CustomMaximumFailedTestOutputSize = 300 * 1024; + + this->TestsToRun.clear(); + + this->UseIncludeLabelRegExpFlag = false; + this->UseExcludeLabelRegExpFlag = false; + this->UseIncludeRegExpFlag = false; + this->UseExcludeRegExpFlag = false; + this->UseExcludeRegExpFirst = false; + this->IncludeLabelRegularExpression = ""; + this->ExcludeLabelRegularExpression = ""; + this->IncludeRegExp = ""; + this->ExcludeRegExp = ""; + + TestsToRunString = ""; + this->UseUnion = false; + this->TestList.clear(); +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::PopulateCustomVectors(cmMakefile *mf) +{ + this->CTest->PopulateCustomVector(mf, "CTEST_CUSTOM_PRE_TEST", + this->CustomPreTest); + this->CTest->PopulateCustomVector(mf, "CTEST_CUSTOM_POST_TEST", + this->CustomPostTest); + this->CTest->PopulateCustomVector(mf, + "CTEST_CUSTOM_TESTS_IGNORE", + this->CustomTestsIgnore); + this->CTest->PopulateCustomInteger(mf, + "CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE", + this->CustomMaximumPassedTestOutputSize); + this->CTest->PopulateCustomInteger(mf, + "CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE", + this->CustomMaximumFailedTestOutputSize); +} + +//---------------------------------------------------------------------- +int cmCTestTestHandler::PreProcessHandler() +{ + if ( !this->ExecuteCommands(this->CustomPreTest) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Problem executing pre-test command(s)." << std::endl); + return 0; + } + return 1; +} + +//---------------------------------------------------------------------- +int cmCTestTestHandler::PostProcessHandler() +{ + if ( !this->ExecuteCommands(this->CustomPostTest) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Problem executing post-test command(s)." << std::endl); + return 0; + } + return 1; +} + +//---------------------------------------------------------------------- +//clearly it would be nice if this were broken up into a few smaller +//functions and commented... +int cmCTestTestHandler::ProcessHandler() +{ + // Update internal data structure from generic one + this->SetTestsToRunInformation(this->GetOption("TestsToRunInformation")); + this->SetUseUnion(cmSystemTools::IsOn(this->GetOption("UseUnion"))); + if(cmSystemTools::IsOn(this->GetOption("ScheduleRandom"))) + { + this->CTest->SetScheduleType("Random"); + } + if(this->GetOption("ParallelLevel")) + { + this->CTest->SetParallelLevel(atoi(this->GetOption("ParallelLevel"))); + } + + const char* val; + val = this->GetOption("LabelRegularExpression"); + if ( val ) + { + this->UseIncludeLabelRegExpFlag = true; + this->IncludeLabelRegExp = val; + } + val = this->GetOption("ExcludeLabelRegularExpression"); + if ( val ) + { + this->UseExcludeLabelRegExpFlag = true; + this->ExcludeLabelRegularExpression = val; + } + val = this->GetOption("IncludeRegularExpression"); + if ( val ) + { + this->UseIncludeRegExp(); + this->SetIncludeRegExp(val); + } + val = this->GetOption("ExcludeRegularExpression"); + if ( val ) + { + this->UseExcludeRegExp(); + this->SetExcludeRegExp(val); + } + + this->TestResults.clear(); + + cmCTestLog(this->CTest, HANDLER_OUTPUT, + (this->MemCheck ? "Memory check" : "Test") + << " project " << cmSystemTools::GetCurrentWorkingDirectory() + << std::endl); + if ( ! this->PreProcessHandler() ) + { + return -1; + } + + cmGeneratedFileStream mLogFile; + this->StartLogFile((this->MemCheck ? "DynamicAnalysis" : "Test"), mLogFile); + this->LogFile = &mLogFile; + + std::vector passed; + std::vector failed; + int total; + + //start the real time clock + double clock_start, clock_finish; + clock_start = cmSystemTools::GetTime(); + + this->ProcessDirectory(passed, failed); + + clock_finish = cmSystemTools::GetTime(); + + total = int(passed.size()) + int(failed.size()); + + if (total == 0) + { + if ( !this->CTest->GetShowOnly() && !this->CTest->ShouldPrintLabels() ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "No tests were found!!!" + << std::endl); + } + } + else + { + if (this->HandlerVerbose && passed.size() && + (this->UseIncludeRegExpFlag || this->UseExcludeRegExpFlag)) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, std::endl + << "The following tests passed:" << std::endl); + for(std::vector::iterator j = passed.begin(); + j != passed.end(); ++j) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "\t" << *j + << std::endl); + } + } + + float percent = float(passed.size()) * 100.0f / float(total); + if ( failed.size() > 0 && percent > 99) + { + percent = 99; + } + + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::endl + << static_cast(percent + .5) << "% tests passed, " + << failed.size() << " tests failed out of " + << total << std::endl); + if(this->CTest->GetLabelSummary()) + { + this->PrintLabelSummary(); + } + char realBuf[1024]; + sprintf(realBuf, "%6.2f sec", (double)(clock_finish - clock_start)); + cmCTestLog(this->CTest, HANDLER_OUTPUT, "\nTotal Test time (real) = " + << realBuf << "\n" ); + + if (failed.size()) + { + cmGeneratedFileStream ofs; + cmCTestLog(this->CTest, HANDLER_OUTPUT, std::endl + << "The following tests FAILED:" << std::endl); + this->StartLogFile("TestsFailed", ofs); + + typedef std::set SetOfTests; + SetOfTests resultsSet(this->TestResults.begin(), + this->TestResults.end()); + + for(SetOfTests::iterator ftit = resultsSet.begin(); + ftit != resultsSet.end(); ++ftit) + { + if ( ftit->Status != cmCTestTestHandler::COMPLETED ) + { + ofs << ftit->TestCount << ":" << ftit->Name << std::endl; + cmCTestLog(this->CTest, HANDLER_OUTPUT, "\t" << std::setw(3) + << ftit->TestCount << " - " + << ftit->Name.c_str() << " (" + << this->GetTestStatus(ftit->Status) << ")" + << std::endl); + } + } + } + } + + if ( this->CTest->GetProduceXML() ) + { + cmGeneratedFileStream xmlfile; + if( !this->StartResultingXML( + (this->MemCheck ? cmCTest::PartMemCheck : cmCTest::PartTest), + (this->MemCheck ? "DynamicAnalysis" : "Test"), xmlfile) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot create " + << (this->MemCheck ? "memory check" : "testing") + << " XML file" << std::endl); + this->LogFile = 0; + return 1; + } + this->GenerateDartOutput(xmlfile); + } + + if ( ! this->PostProcessHandler() ) + { + this->LogFile = 0; + return -1; + } + + if ( !failed.empty() ) + { + this->LogFile = 0; + return -1; + } + this->LogFile = 0; + return 0; +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::PrintLabelSummary() +{ + cmCTestTestHandler::ListOfTests::iterator it = this->TestList.begin(); + cmCTestTestHandler::TestResultsVector::iterator ri = + this->TestResults.begin(); + std::map labelTimes; + std::set labels; + // initialize maps + std::string::size_type maxlen = 0; + for(; it != this->TestList.end(); ++it) + { + cmCTestTestProperties& p = *it; + if(p.Labels.size() != 0) + { + for(std::vector::iterator l = p.Labels.begin(); + l != p.Labels.end(); ++l) + { + if((*l).size() > maxlen) + { + maxlen = (*l).size(); + } + labels.insert(*l); + labelTimes[*l] = 0; + } + } + } + ri = this->TestResults.begin(); + // fill maps + for(; ri != this->TestResults.end(); ++ri) + { + cmCTestTestResult &result = *ri; + cmCTestTestProperties& p = *result.Properties; + if(p.Labels.size() != 0) + { + for(std::vector::iterator l = p.Labels.begin(); + l != p.Labels.end(); ++l) + { + labelTimes[*l] += result.ExecutionTime; + } + } + } + // now print times + if(labels.size()) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, "\nLabel Time Summary:"); + } + for(std::set::const_iterator i = labels.begin(); + i != labels.end(); ++i) + { + std::string label = *i; + label.resize(maxlen +3, ' '); + char buf[1024]; + sprintf(buf, "%6.2f sec", labelTimes[*i]); + cmCTestLog(this->CTest, HANDLER_OUTPUT, "\n" + << label << " = " << buf ); + if ( this->LogFile ) + { + *this->LogFile << "\n" << *i << " = " + << buf << "\n"; + } + } + if(labels.size()) + { + if(this->LogFile) + { + *this->LogFile << "\n"; + } + cmCTestLog(this->CTest, HANDLER_OUTPUT, "\n"); + } + +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::CheckLabelFilterInclude(cmCTestTestProperties& it) +{ + // if not using Labels to filter then return + if (!this->UseIncludeLabelRegExpFlag ) + { + return; + } + // if there are no labels and we are filtering by labels + // then exclude the test as it does not have the label + if(it.Labels.size() == 0 ) + { + it.IsInBasedOnREOptions = false; + return; + } + // check to see if the label regular expression matches + bool found = false; // assume it does not match + // loop over all labels and look for match + for(std::vector::iterator l = it.Labels.begin(); + l != it.Labels.end(); ++l) + { + if(this->IncludeLabelRegularExpression.find(*l)) + { + found = true; + } + } + // if no match was found, exclude the test + if(!found) + { + it.IsInBasedOnREOptions = false; + } +} + + +//---------------------------------------------------------------------- +void cmCTestTestHandler::CheckLabelFilterExclude(cmCTestTestProperties& it) +{ + // if not using Labels to filter then return + if (!this->UseExcludeLabelRegExpFlag ) + { + return; + } + // if there are no labels and we are excluding by labels + // then do nothing as a no label can not be a match + if(it.Labels.size() == 0 ) + { + return; + } + // check to see if the label regular expression matches + bool found = false; // assume it does not match + // loop over all labels and look for match + for(std::vector::iterator l = it.Labels.begin(); + l != it.Labels.end(); ++l) + { + if(this->ExcludeLabelRegularExpression.find(*l)) + { + found = true; + } + } + // if match was found, exclude the test + if(found) + { + it.IsInBasedOnREOptions = false; + } +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::CheckLabelFilter(cmCTestTestProperties& it) +{ + this->CheckLabelFilterInclude(it); + this->CheckLabelFilterExclude(it); +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::ComputeTestList() +{ + this->TestList.clear(); // clear list of test + this->GetListOfTests(); + cmCTestTestHandler::ListOfTests::size_type tmsize = this->TestList.size(); + // how many tests are in based on RegExp? + int inREcnt = 0; + cmCTestTestHandler::ListOfTests::iterator it; + for ( it = this->TestList.begin(); it != this->TestList.end(); it ++ ) + { + this->CheckLabelFilter(*it); + if (it->IsInBasedOnREOptions) + { + inREcnt ++; + } + } + // expand the test list based on the union flag + if (this->UseUnion) + { + this->ExpandTestsToRunInformation((int)tmsize); + } + else + { + this->ExpandTestsToRunInformation(inREcnt); + } + // Now create a final list of tests to run + int cnt = 0; + inREcnt = 0; + std::string last_directory = ""; + ListOfTests finalList; + for ( it = this->TestList.begin(); it != this->TestList.end(); it ++ ) + { + cnt ++; + if (it->IsInBasedOnREOptions) + { + inREcnt++; + } + + if (this->UseUnion) + { + // if it is not in the list and not in the regexp then skip + if ((this->TestsToRun.size() && + std::find(this->TestsToRun.begin(), this->TestsToRun.end(), cnt) + == this->TestsToRun.end()) && !it->IsInBasedOnREOptions) + { + continue; + } + } + else + { + // is this test in the list of tests to run? If not then skip it + if ((this->TestsToRun.size() && + std::find(this->TestsToRun.begin(), + this->TestsToRun.end(), inREcnt) + == this->TestsToRun.end()) || !it->IsInBasedOnREOptions) + { + continue; + } + } + it->Index = cnt; // save the index into the test list for this test + finalList.push_back(*it); + } + // Save the total number of tests before exclusions + this->TotalNumberOfTests = this->TestList.size(); + // Set the TestList to the final list of all test + this->TestList = finalList; + std::string::size_type max = this->CTest->GetMaxTestNameWidth(); + for (it = this->TestList.begin(); + it != this->TestList.end(); it ++ ) + { + cmCTestTestProperties& p = *it; + if(max < p.Name.size()) + { + max = p.Name.size(); + } + } + if(static_cast(this->CTest->GetMaxTestNameWidth()) + != max) + { + this->CTest->SetMaxTestNameWidth(static_cast(max)); + } +} + +bool cmCTestTestHandler::GetValue(const char* tag, + int& value, + std::ifstream& fin) +{ + std::string line; + bool ret = true; + cmSystemTools::GetLineFromStream(fin, line); + if(line == tag) + { + fin >> value; + ret = cmSystemTools::GetLineFromStream(fin, line); // read blank line + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "parse error: missing tag: " + << tag << " found [" << line << "]" << std::endl); + ret = false; + } + return ret; +} + +bool cmCTestTestHandler::GetValue(const char* tag, + double& value, + std::ifstream& fin) +{ + std::string line; + cmSystemTools::GetLineFromStream(fin, line); + bool ret = true; + if(line == tag) + { + fin >> value; + ret = cmSystemTools::GetLineFromStream(fin, line); // read blank line + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "parse error: missing tag: " + << tag << " found [" << line << "]" << std::endl); + ret = false; + } + return ret; +} + +bool cmCTestTestHandler::GetValue(const char* tag, + bool& value, + std::ifstream& fin) +{ + std::string line; + cmSystemTools::GetLineFromStream(fin, line); + bool ret = true; + if(line == tag) + { +#ifdef __HAIKU__ + int tmp = 0; + fin >> tmp; + value = false; + if(tmp) + { + value = true; + } +#else + fin >> value; +#endif + ret = cmSystemTools::GetLineFromStream(fin, line); // read blank line + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "parse error: missing tag: " + << tag << " found [" << line << "]" << std::endl); + ret = false; + } + return ret; +} + +bool cmCTestTestHandler::GetValue(const char* tag, + size_t& value, + std::ifstream& fin) +{ + std::string line; + cmSystemTools::GetLineFromStream(fin, line); + bool ret = true; + if(line == tag) + { + fin >> value; + ret = cmSystemTools::GetLineFromStream(fin, line); // read blank line + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "parse error: missing tag: " + << tag << " found [" << line.c_str() << "]" << std::endl); + ret = false; + } + return ret; +} + +bool cmCTestTestHandler::GetValue(const char* tag, + std::string& value, + std::ifstream& fin) +{ + std::string line; + cmSystemTools::GetLineFromStream(fin, line); + bool ret = true; + if(line == tag) + { + ret = cmSystemTools::GetLineFromStream(fin, value); + } + else + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "parse error: missing tag: " + << tag << " found [" << line << "]" << std::endl); + ret = false; + } + return ret; +} + +//--------------------------------------------------------------------- +void cmCTestTestHandler::ProcessDirectory(std::vector &passed, + std::vector &failed) +{ + this->ComputeTestList(); + this->StartTest = this->CTest->CurrentTime(); + this->StartTestTime = static_cast(cmSystemTools::GetTime()); + double elapsed_time_start = cmSystemTools::GetTime(); + + cmCTestMultiProcessHandler* parallel = this->CTest->GetBatchJobs() ? + new cmCTestBatchTestHandler : new cmCTestMultiProcessHandler; + parallel->SetCTest(this->CTest); + parallel->SetParallelLevel(this->CTest->GetParallelLevel()); + parallel->SetTestHandler(this); + + *this->LogFile << "Start testing: " + << this->CTest->CurrentTime() << std::endl + << "----------------------------------------------------------" + << std::endl; + + cmCTestMultiProcessHandler::TestMap tests; + cmCTestMultiProcessHandler::PropertiesMap properties; + + bool randomSchedule = this->CTest->GetScheduleType() == "Random"; + if(randomSchedule) + { + srand((unsigned)time(0)); + } + + for (ListOfTests::iterator it = this->TestList.begin(); + it != this->TestList.end(); ++it) + { + cmCTestTestProperties& p = *it; + cmCTestMultiProcessHandler::TestSet depends; + + if(randomSchedule) + { + p.Cost = static_cast(rand()); + } + + if(p.Timeout == 0 && this->CTest->GetGlobalTimeout() != 0) + { + p.Timeout = this->CTest->GetGlobalTimeout(); + } + + if(p.Depends.size()) + { + for(std::vector::iterator i = p.Depends.begin(); + i != p.Depends.end(); ++i) + { + for(ListOfTests::iterator it2 = this->TestList.begin(); + it2 != this->TestList.end(); ++it2) + { + if(it2->Name == *i) + { + depends.insert(it2->Index); + break; // break out of test loop as name can only match 1 + } + } + } + } + tests[it->Index] = depends; + properties[it->Index] = &*it; + } + parallel->SetTests(tests, properties); + parallel->SetPassFailVectors(&passed, &failed); + this->TestResults.clear(); + parallel->SetTestResults(&this->TestResults); + + if(this->CTest->ShouldPrintLabels()) + { + parallel->PrintLabels(); + } + else if(this->CTest->GetShowOnly()) + { + parallel->PrintTestList(); + } + else + { + parallel->RunTests(); + } + delete parallel; + this->EndTest = this->CTest->CurrentTime(); + this->EndTestTime = static_cast(cmSystemTools::GetTime()); + this->ElapsedTestingTime = cmSystemTools::GetTime() - elapsed_time_start; + *this->LogFile << "End testing: " + << this->CTest->CurrentTime() << std::endl; +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::GenerateTestCommand(std::vector&) +{ +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::GenerateDartOutput(std::ostream& os) +{ + if ( !this->CTest->GetProduceXML() ) + { + return; + } + + this->CTest->StartXML(os, this->AppendXML); + os << "\n" + << "\t" << this->StartTest << "\n" + << "\t" << this->StartTestTime << "\n" + << "\t\n"; + cmCTestTestHandler::TestResultsVector::size_type cc; + for ( cc = 0; cc < this->TestResults.size(); cc ++ ) + { + cmCTestTestResult *result = &this->TestResults[cc]; + std::string testPath = result->Path + "/" + result->Name; + os << "\t\t" << cmXMLSafe( + this->CTest->GetShortPathToFile(testPath.c_str())) + << "" << std::endl; + } + os << "\t\n"; + for ( cc = 0; cc < this->TestResults.size(); cc ++ ) + { + cmCTestTestResult *result = &this->TestResults[cc]; + this->WriteTestResultHeader(os, result); + os << "\t\t" << std::endl; + if ( result->Status != cmCTestTestHandler::NOT_RUN ) + { + if ( result->Status != cmCTestTestHandler::COMPLETED || + result->ReturnValue ) + { + os << "\t\t\t" + << cmXMLSafe(this->GetTestStatus(result->Status)) + << "" + "\n" + << "\t\t\t" + << result->ReturnValue + << "" + << std::endl; + } + os << result->RegressionImages; + os << "\t\t\t" + << result->ExecutionTime + << "\n"; + if(result->Reason.size()) + { + const char* reasonType = "Pass Reason"; + if(result->Status != cmCTestTestHandler::COMPLETED && + result->Status != cmCTestTestHandler::NOT_RUN) + { + reasonType = "Fail Reason"; + } + os << "\t\t\t" + << cmXMLSafe(result->Reason) + << "\n"; + } + os + << "\t\t\t" + << cmXMLSafe(result->CompletionStatus) + << "\n"; + } + os + << "\t\t\t" + << cmXMLSafe(result->FullCommandLine) + << "\n"; + std::map::iterator measureIt; + for ( measureIt = result->Properties->Measurements.begin(); + measureIt != result->Properties->Measurements.end(); + ++ measureIt ) + { + os + << "\t\t\tfirst.c_str() << "\">" + << cmXMLSafe(measureIt->second) + << "\n"; + } + os + << "\t\t\t\n" + << "\t\t\t\tCompressOutput ? + " encoding=\"base64\" compression=\"gzip\">" + : ">"); + os << cmXMLSafe(result->Output); + os + << "\n" + << "\t\t\t\n" + << "\t\t\n"; + + this->AttachFiles(os, result); + this->WriteTestResultFooter(os, result); + } + + os << "\t" << this->EndTest << "\n" + << "\t" << this->EndTestTime << "\n" + << "" + << static_cast(this->ElapsedTestingTime/6)/10.0 + << "" + << "" << std::endl; + this->CTest->EndXML(os); +} + +//---------------------------------------------------------------------------- +void cmCTestTestHandler::WriteTestResultHeader(std::ostream& os, + cmCTestTestResult* result) +{ + os << "\tStatus == cmCTestTestHandler::COMPLETED ) + { + os << "passed"; + } + else if ( result->Status == cmCTestTestHandler::NOT_RUN ) + { + os << "notrun"; + } + else + { + os << "failed"; + } + std::string testPath = result->Path + "/" + result->Name; + os << "\">\n" + << "\t\t" << cmXMLSafe(result->Name) << "\n" + << "\t\t" << cmXMLSafe( + this->CTest->GetShortPathToFile(result->Path.c_str())) << "\n" + << "\t\t" << cmXMLSafe( + this->CTest->GetShortPathToFile(testPath.c_str())) << "\n" + << "\t\t" + << cmXMLSafe(result->FullCommandLine) + << "\n"; +} + +//---------------------------------------------------------------------------- +void cmCTestTestHandler::WriteTestResultFooter(std::ostream& os, + cmCTestTestResult* result) +{ + if(!result->Properties->Labels.empty()) + { + os << "\t\t\n"; + std::vector const& labels = result->Properties->Labels; + for(std::vector::const_iterator li = labels.begin(); + li != labels.end(); ++li) + { + os << "\t\t\t\n"; + } + os << "\t\t\n"; + } + + os + << "\t" << std::endl; +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::AttachFiles(std::ostream& os, + cmCTestTestResult* result) +{ + if(result->Status != cmCTestTestHandler::COMPLETED + && result->Properties->AttachOnFail.size()) + { + result->Properties->AttachedFiles.insert( + result->Properties->AttachedFiles.end(), + result->Properties->AttachOnFail.begin(), + result->Properties->AttachOnFail.end()); + } + for(std::vector::const_iterator file = + result->Properties->AttachedFiles.begin(); + file != result->Properties->AttachedFiles.end(); ++file) + { + std::string base64 = this->CTest->Base64GzipEncodeFile(*file); + std::string fname = cmSystemTools::GetFilenameName(*file); + os << "\t\t" + "\n\t\t\t\n\t\t\t" + << base64 + << "\n\t\t\t\n\t\t\n"; + } +} + +//---------------------------------------------------------------------- +int cmCTestTestHandler::ExecuteCommands(std::vector& vec) +{ + std::vector::iterator it; + for ( it = vec.begin(); it != vec.end(); ++it ) + { + int retVal = 0; + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Run command: " << *it + << std::endl); + if ( !cmSystemTools::RunSingleCommand(it->c_str(), 0, &retVal, 0, + cmSystemTools::OUTPUT_MERGE + /*this->Verbose*/) || retVal != 0 ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Problem running command: " + << *it << std::endl); + return 0; + } + } + return 1; +} + + +//---------------------------------------------------------------------- +// Find the appropriate executable to run for a test +std::string cmCTestTestHandler::FindTheExecutable(const char *exe) +{ + std::string resConfig; + std::vector extraPaths; + std::vector failedPaths; + if(strcmp(exe, "NOT_AVAILABLE") == 0) + { + return exe; + } + return cmCTestTestHandler::FindExecutable(this->CTest, + exe, resConfig, + extraPaths, + failedPaths); +} + +// add additional configurations to the search path +void cmCTestTestHandler +::AddConfigurations(cmCTest *ctest, + std::vector &attempted, + std::vector &attemptedConfigs, + std::string filepath, + std::string &filename) +{ + std::string tempPath; + + if (filepath.size() && + filepath[filepath.size()-1] != '/') + { + filepath += "/"; + } + tempPath = filepath + filename; + attempted.push_back(tempPath); + attemptedConfigs.push_back(""); + + if(ctest->GetConfigType().size()) + { + tempPath = filepath; + tempPath += ctest->GetConfigType(); + tempPath += "/"; + tempPath += filename; + attempted.push_back(tempPath); + attemptedConfigs.push_back(ctest->GetConfigType()); + // If the file is an OSX bundle then the configtyp + // will be at the start of the path + tempPath = ctest->GetConfigType(); + tempPath += "/"; + tempPath += filepath; + tempPath += filename; + attempted.push_back(tempPath); + attemptedConfigs.push_back(ctest->GetConfigType()); + } + else + { + // no config specified to try some options + tempPath = filepath; + tempPath += "Release/"; + tempPath += filename; + attempted.push_back(tempPath); + attemptedConfigs.push_back("Release"); + tempPath = filepath; + tempPath += "Debug/"; + tempPath += filename; + attempted.push_back(tempPath); + attemptedConfigs.push_back("Debug"); + tempPath = filepath; + tempPath += "MinSizeRel/"; + tempPath += filename; + attempted.push_back(tempPath); + attemptedConfigs.push_back("MinSizeRel"); + tempPath = filepath; + tempPath += "RelWithDebInfo/"; + tempPath += filename; + attempted.push_back(tempPath); + attemptedConfigs.push_back("RelWithDebInfo"); + tempPath = filepath; + tempPath += "Deployment/"; + tempPath += filename; + attempted.push_back(tempPath); + attemptedConfigs.push_back("Deployment"); + tempPath = filepath; + tempPath += "Development/"; + tempPath += filename; + attempted.push_back(tempPath); + attemptedConfigs.push_back("Deployment"); + } +} + + +//---------------------------------------------------------------------- +// Find the appropriate executable to run for a test +std::string cmCTestTestHandler +::FindExecutable(cmCTest *ctest, + const char *testCommand, + std::string &resultingConfig, + std::vector &extraPaths, + std::vector &failed) +{ + // now run the compiled test if we can find it + std::vector attempted; + std::vector attemptedConfigs; + std::string tempPath; + std::string filepath = + cmSystemTools::GetFilenamePath(testCommand); + std::string filename = + cmSystemTools::GetFilenameName(testCommand); + + cmCTestTestHandler::AddConfigurations(ctest, attempted, + attemptedConfigs, + filepath,filename); + + // even if a fullpath was specified also try it relative to the current + // directory + if (filepath.size() && filepath[0] == '/') + { + std::string localfilepath = filepath.substr(1,filepath.size()-1); + cmCTestTestHandler::AddConfigurations(ctest, attempted, + attemptedConfigs, + localfilepath,filename); + } + + + // if extraPaths are provided and we were not passed a full path, try them, + // try any extra paths + if (filepath.size() == 0) + { + for (unsigned int i = 0; i < extraPaths.size(); ++i) + { + std::string filepathExtra = + cmSystemTools::GetFilenamePath(extraPaths[i]); + std::string filenameExtra = + cmSystemTools::GetFilenameName(extraPaths[i]); + cmCTestTestHandler::AddConfigurations(ctest,attempted, + attemptedConfigs, + filepathExtra, + filenameExtra); + } + } + + // store the final location in fullPath + std::string fullPath; + + // now look in the paths we specified above + for(unsigned int ai=0; + ai < attempted.size() && fullPath.size() == 0; ++ai) + { + // first check without exe extension + if(cmSystemTools::FileExists(attempted[ai].c_str()) + && !cmSystemTools::FileIsDirectory(attempted[ai].c_str())) + { + fullPath = cmSystemTools::CollapseFullPath(attempted[ai].c_str()); + resultingConfig = attemptedConfigs[ai]; + } + // then try with the exe extension + else + { + failed.push_back(attempted[ai].c_str()); + tempPath = attempted[ai]; + tempPath += cmSystemTools::GetExecutableExtension(); + if(cmSystemTools::FileExists(tempPath.c_str()) + && !cmSystemTools::FileIsDirectory(tempPath.c_str())) + { + fullPath = cmSystemTools::CollapseFullPath(tempPath.c_str()); + resultingConfig = attemptedConfigs[ai]; + } + else + { + failed.push_back(tempPath.c_str()); + } + } + } + + // if everything else failed, check the users path, but only if a full path + // wasn't specified + if (fullPath.size() == 0 && filepath.size() == 0) + { + std::string path = cmSystemTools::FindProgram(filename.c_str()); + if (path != "") + { + resultingConfig = ""; + return path; + } + } + if(fullPath.size() == 0) + { + cmCTestLog(ctest, HANDLER_OUTPUT, + "Could not find executable " << testCommand << "\n" + << "Looked in the following places:\n"); + for(std::vector::iterator i = failed.begin(); + i != failed.end(); ++i) + { + cmCTestLog(ctest, HANDLER_OUTPUT, + i->c_str() << "\n"); + } + } + + return fullPath; +} + + +//---------------------------------------------------------------------- +void cmCTestTestHandler::GetListOfTests() +{ + if ( !this->IncludeLabelRegExp.empty() ) + { + this->IncludeLabelRegularExpression. + compile(this->IncludeLabelRegExp.c_str()); + } + if ( !this->IncludeLabelRegExp.empty() ) + { + this->ExcludeLabelRegularExpression. + compile(this->ExcludeLabelRegExp.c_str()); + } + if ( !this->IncludeRegExp.empty() ) + { + this->IncludeTestsRegularExpression.compile(this->IncludeRegExp.c_str()); + } + if ( !this->ExcludeRegExp.empty() ) + { + this->ExcludeTestsRegularExpression.compile(this->ExcludeRegExp.c_str()); + } + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Constructing a list of tests" << std::endl); + cmake cm; + cmGlobalGenerator gg; + gg.SetCMakeInstance(&cm); + std::auto_ptr lg(gg.CreateLocalGenerator()); + cmMakefile *mf = lg->GetMakefile(); + mf->AddDefinition("CTEST_CONFIGURATION_TYPE", + this->CTest->GetConfigType().c_str()); + + // Add handler for ADD_TEST + cmCTestAddTestCommand* newCom1 = new cmCTestAddTestCommand; + newCom1->TestHandler = this; + cm.AddCommand(newCom1); + + // Add handler for SUBDIRS + cmCTestSubdirCommand* newCom2 = + new cmCTestSubdirCommand; + newCom2->TestHandler = this; + cm.AddCommand(newCom2); + + // Add handler for ADD_SUBDIRECTORY + cmCTestAddSubdirectoryCommand* newCom3 = + new cmCTestAddSubdirectoryCommand; + newCom3->TestHandler = this; + cm.AddCommand(newCom3); + + // Add handler for SET_SOURCE_FILES_PROPERTIES + cmCTestSetTestsPropertiesCommand* newCom4 + = new cmCTestSetTestsPropertiesCommand; + newCom4->TestHandler = this; + cm.AddCommand(newCom4); + + const char* testFilename; + if( cmSystemTools::FileExists("CTestTestfile.cmake") ) + { + // does the CTestTestfile.cmake exist ? + testFilename = "CTestTestfile.cmake"; + } + else if( cmSystemTools::FileExists("DartTestfile.txt") ) + { + // does the DartTestfile.txt exist ? + testFilename = "DartTestfile.txt"; + } + else + { + return; + } + + if ( !mf->ReadListFile(0, testFilename) ) + { + return; + } + if ( cmSystemTools::GetErrorOccuredFlag() ) + { + return; + } + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "Done constructing a list of tests" << std::endl); +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::UseIncludeRegExp() +{ + this->UseIncludeRegExpFlag = true; +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::UseExcludeRegExp() +{ + this->UseExcludeRegExpFlag = true; + this->UseExcludeRegExpFirst = this->UseIncludeRegExpFlag ? false : true; +} + +//---------------------------------------------------------------------- +const char* cmCTestTestHandler::GetTestStatus(int status) +{ + static const char statuses[][100] = { + "Not Run", + "Timeout", + "SEGFAULT", + "ILLEGAL", + "INTERRUPT", + "NUMERICAL", + "OTHER_FAULT", + "Failed", + "BAD_COMMAND", + "Completed" + }; + + if ( status < cmCTestTestHandler::NOT_RUN || + status > cmCTestTestHandler::COMPLETED ) + { + return "No Status"; + } + return statuses[status]; +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::ExpandTestsToRunInformation(size_t numTests) +{ + if (this->TestsToRunString.empty()) + { + return; + } + + int start; + int end = -1; + double stride = -1; + std::string::size_type pos = 0; + std::string::size_type pos2; + // read start + if(GetNextNumber(this->TestsToRunString, start, pos, pos2)) + { + // read end + if(GetNextNumber(this->TestsToRunString, end, pos, pos2)) + { + // read stride + if(GetNextRealNumber(this->TestsToRunString, stride, pos, pos2)) + { + int val =0; + // now read specific numbers + while(GetNextNumber(this->TestsToRunString, val, pos, pos2)) + { + this->TestsToRun.push_back(val); + } + this->TestsToRun.push_back(val); + } + } + } + + // if start is not specified then we assume we start at 1 + if(start == -1) + { + start = 1; + } + + // if end isnot specified then we assume we end with the last test + if(end == -1) + { + end = static_cast(numTests); + } + + // if the stride wasn't specified then it defaults to 1 + if(stride == -1) + { + stride = 1; + } + + // if we have a range then add it + if(end != -1 && start != -1 && stride > 0) + { + int i = 0; + while (i*stride + start <= end) + { + this->TestsToRun.push_back(static_cast(i*stride+start)); + ++i; + } + } + + // sort the array + std::sort(this->TestsToRun.begin(), this->TestsToRun.end(), + std::less()); + // remove duplicates + std::vector::iterator new_end = + std::unique(this->TestsToRun.begin(), this->TestsToRun.end()); + this->TestsToRun.erase(new_end, this->TestsToRun.end()); +} + +//---------------------------------------------------------------------- +// Just for convenience +#define SPACE_REGEX "[ \t\r\n]" +//---------------------------------------------------------------------- +std::string cmCTestTestHandler::GenerateRegressionImages( + const std::string& xml) +{ + cmsys::RegularExpression twoattributes( + "([^<]*)"); + cmsys::RegularExpression threeattributes( + "([^<]*)"); + cmsys::RegularExpression fourattributes( + "([^<]*)"); + cmsys::RegularExpression cdatastart( + "" + SPACE_REGEX "*" + SPACE_REGEX "*"); + cmsys::RegularExpression measurementfile( + "([^<]*)"); + + cmOStringStream ostr; + bool done = false; + std::string cxml = xml; + while ( ! done ) + { + if ( twoattributes.find(cxml) ) + { + ostr + << "\t\t\t" << twoattributes.match(5) + << "" + << std::endl; + cxml.erase(twoattributes.start(), + twoattributes.end() - twoattributes.start()); + } + else if ( threeattributes.find(cxml) ) + { + ostr + << "\t\t\t" << threeattributes.match(7) + << "" + << std::endl; + cxml.erase(threeattributes.start(), + threeattributes.end() - threeattributes.start()); + } + else if ( fourattributes.find(cxml) ) + { + ostr + << "\t\t\t" << fourattributes.match(9) + << "" + << std::endl; + cxml.erase(fourattributes.start(), + fourattributes.end() - fourattributes.start()); + } + else if ( cdatastart.find(cxml) && cdataend.find(cxml) ) + { + ostr + << "\t\t\t" + << std::endl; + cxml.erase(cdatastart.start(), + cdataend.end() - cdatastart.start()); + } + else if ( measurementfile.find(cxml) ) + { + const std::string& filename = + cmCTest::CleanString(measurementfile.match(5)); + if ( cmSystemTools::FileExists(filename.c_str()) ) + { + long len = cmSystemTools::FileLength(filename.c_str()); + if ( len == 0 ) + { + std::string k1 = measurementfile.match(1); + std::string v1 = measurementfile.match(2); + std::string k2 = measurementfile.match(3); + std::string v2 = measurementfile.match(4); + if ( cmSystemTools::LowerCase(k1) == "type" ) + { + v1 = "text/string"; + } + if ( cmSystemTools::LowerCase(k2) == "type" ) + { + v2 = "text/string"; + } + + ostr + << "\t\t\tImage " << filename.c_str() + << " is empty"; + } + else + { + std::ifstream ifs(filename.c_str(), std::ios::in +#ifdef _WIN32 + | std::ios::binary +#endif + ); + unsigned char *file_buffer = new unsigned char [ len + 1 ]; + ifs.read(reinterpret_cast(file_buffer), len); + unsigned char *encoded_buffer + = new unsigned char [ static_cast( + static_cast(len) * 1.5 + 5.0) ]; + + unsigned long rlen + = cmsysBase64_Encode(file_buffer, len, encoded_buffer, 1); + unsigned long cc; + + ostr + << "\t\t\t" << std::endl << "\t\t\t\t"; + for ( cc = 0; cc < rlen; cc ++ ) + { + ostr << encoded_buffer[cc]; + if ( cc % 60 == 0 && cc ) + { + ostr << std::endl; + } + } + ostr + << "" << std::endl << "\t\t\t" + << std::endl; + delete [] file_buffer; + delete [] encoded_buffer; + } + } + else + { + int idx = 4; + if ( measurementfile.match(1) == "name" ) + { + idx = 2; + } + ostr + << "\t\t\tFile " << filename.c_str() + << " not found" + << std::endl; + cmCTestLog(this->CTest, HANDLER_OUTPUT, "File \"" << filename.c_str() + << "\" not found." << std::endl); + } + cxml.erase(measurementfile.start(), + measurementfile.end() - measurementfile.start()); + } + else + { + done = true; + } + } + return ostr.str(); +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::SetIncludeRegExp(const char *arg) +{ + this->IncludeRegExp = arg; +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::SetExcludeRegExp(const char *arg) +{ + this->ExcludeRegExp = arg; +} + +//---------------------------------------------------------------------- +void cmCTestTestHandler::SetTestsToRunInformation(const char* in) +{ + if ( !in ) + { + return; + } + this->TestsToRunString = in; + // if the argument is a file, then read it and use the contents as the + // string + if(cmSystemTools::FileExists(in)) + { + std::ifstream fin(in); + unsigned long filelen = cmSystemTools::FileLength(in); + char* buff = new char[filelen+1]; + fin.getline(buff, filelen); + buff[fin.gcount()] = 0; + this->TestsToRunString = buff; + delete [] buff; + } +} + +//---------------------------------------------------------------------------- +bool cmCTestTestHandler::CleanTestOutput(std::string& output, size_t length) +{ + if(!length || length >= output.size() || + output.find("CTEST_FULL_OUTPUT") != output.npos) + { + return true; + } + + // Truncate at given length but do not break in the middle of a multi-byte + // UTF-8 encoding. + char const* const begin = output.c_str(); + char const* const end = begin + output.size(); + char const* const truncate = begin + length; + char const* current = begin; + while(current < truncate) + { + unsigned int ch; + if(const char* next = cm_utf8_decode_character(current, end, &ch)) + { + if(next > truncate) + { + break; + } + current = next; + } + else // Bad byte will be handled by cmXMLSafe. + { + ++current; + } + } + output = output.substr(0, current - begin); + + // Append truncation message. + cmOStringStream msg; + msg << "...\n" + "The rest of the test output was removed since it exceeds the threshold " + "of " << length << " bytes.\n"; + output += msg.str(); + return true; +} + +//---------------------------------------------------------------------- +bool cmCTestTestHandler::SetTestsProperties( + const std::vector& args) +{ + std::vector::const_iterator it; + std::vector tests; + bool found = false; + for ( it = args.begin(); it != args.end(); ++ it ) + { + if ( *it == "PROPERTIES" ) + { + found = true; + break; + } + tests.push_back(*it); + } + if ( !found ) + { + return false; + } + ++ it; // skip PROPERTIES + for ( ; it != args.end(); ++ it ) + { + std::string key = *it; + ++ it; + if ( it == args.end() ) + { + break; + } + std::string val = *it; + std::vector::const_iterator tit; + for ( tit = tests.begin(); tit != tests.end(); ++ tit ) + { + cmCTestTestHandler::ListOfTests::iterator rtit; + for ( rtit = this->TestList.begin(); + rtit != this->TestList.end(); + ++ rtit ) + { + if ( *tit == rtit->Name ) + { + if ( key == "WILL_FAIL" ) + { + rtit->WillFail = cmSystemTools::IsOn(val.c_str()); + } + if ( key == "ATTACHED_FILES" ) + { + std::vector lval; + cmSystemTools::ExpandListArgument(val.c_str(), lval); + + for(std::vector::iterator f = lval.begin(); + f != lval.end(); ++f) + { + rtit->AttachedFiles.push_back(*f); + } + } + if ( key == "ATTACHED_FILES_ON_FAIL" ) + { + std::vector lval; + cmSystemTools::ExpandListArgument(val.c_str(), lval); + + for(std::vector::iterator f = lval.begin(); + f != lval.end(); ++f) + { + rtit->AttachOnFail.push_back(*f); + } + } + if ( key == "RESOURCE_LOCK" ) + { + std::vector lval; + cmSystemTools::ExpandListArgument(val.c_str(), lval); + + for(std::vector::iterator f = lval.begin(); + f != lval.end(); ++f) + { + rtit->LockedResources.insert(*f); + } + } + if ( key == "TIMEOUT" ) + { + rtit->Timeout = atof(val.c_str()); + rtit->ExplicitTimeout = true; + } + if ( key == "COST" ) + { + rtit->Cost = static_cast(atof(val.c_str())); + } + if ( key == "REQUIRED_FILES" ) + { + std::vector lval; + cmSystemTools::ExpandListArgument(val.c_str(), lval); + + for(std::vector::iterator f = lval.begin(); + f != lval.end(); ++f) + { + rtit->RequiredFiles.push_back(*f); + } + } + if ( key == "RUN_SERIAL" ) + { + rtit->RunSerial = cmSystemTools::IsOn(val.c_str()); + } + if ( key == "FAIL_REGULAR_EXPRESSION" ) + { + std::vector lval; + cmSystemTools::ExpandListArgument(val.c_str(), lval); + std::vector::iterator crit; + for ( crit = lval.begin(); crit != lval.end(); ++ crit ) + { + rtit->ErrorRegularExpressions.push_back( + std::pair( + cmsys::RegularExpression(crit->c_str()), + std::string(crit->c_str()))); + } + } + if ( key == "PROCESSORS" ) + { + rtit->Processors = atoi(val.c_str()); + if(rtit->Processors < 1) + { + rtit->Processors = 1; + } + } + if ( key == "DEPENDS" ) + { + std::vector lval; + cmSystemTools::ExpandListArgument(val.c_str(), lval); + std::vector::iterator crit; + for ( crit = lval.begin(); crit != lval.end(); ++ crit ) + { + rtit->Depends.push_back(*crit); + } + } + if ( key == "ENVIRONMENT" ) + { + std::vector lval; + cmSystemTools::ExpandListArgument(val.c_str(), lval); + std::vector::iterator crit; + for ( crit = lval.begin(); crit != lval.end(); ++ crit ) + { + rtit->Environment.push_back(*crit); + } + } + if ( key == "LABELS" ) + { + std::vector lval; + cmSystemTools::ExpandListArgument(val.c_str(), lval); + std::vector::iterator crit; + for ( crit = lval.begin(); crit != lval.end(); ++ crit ) + { + rtit->Labels.push_back(*crit); + } + } + if ( key == "MEASUREMENT" ) + { + size_t pos = val.find_first_of("="); + if ( pos != val.npos ) + { + std::string mKey = val.substr(0, pos); + const char* mVal = val.c_str() + pos + 1; + rtit->Measurements[mKey] = mVal; + } + else + { + rtit->Measurements[val] = "1"; + } + } + if ( key == "PASS_REGULAR_EXPRESSION" ) + { + std::vector lval; + cmSystemTools::ExpandListArgument(val.c_str(), lval); + std::vector::iterator crit; + for ( crit = lval.begin(); crit != lval.end(); ++ crit ) + { + rtit->RequiredRegularExpressions.push_back( + std::pair( + cmsys::RegularExpression(crit->c_str()), + std::string(crit->c_str()))); + } + } + if ( key == "WORKING_DIRECTORY" ) + { + rtit->Directory = val; + } + } + } + } + } + return true; +} + +//---------------------------------------------------------------------- +bool cmCTestTestHandler::AddTest(const std::vector& args) +{ + const std::string& testname = args[0]; + cmCTestLog(this->CTest, DEBUG, "Add test: " << args[0] << std::endl); + + if (this->UseExcludeRegExpFlag && + this->UseExcludeRegExpFirst && + this->ExcludeTestsRegularExpression.find(testname.c_str())) + { + return true; + } + if ( this->MemCheck ) + { + std::vector::iterator it; + bool found = false; + for ( it = this->CustomTestsIgnore.begin(); + it != this->CustomTestsIgnore.end(); ++ it ) + { + if ( *it == testname ) + { + found = true; + break; + } + } + if ( found ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Ignore memcheck: " + << *it << std::endl); + return true; + } + } + else + { + std::vector::iterator it; + bool found = false; + for ( it = this->CustomTestsIgnore.begin(); + it != this->CustomTestsIgnore.end(); ++ it ) + { + if ( *it == testname ) + { + found = true; + break; + } + } + if ( found ) + { + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Ignore test: " + << *it << std::endl); + return true; + } + } + + cmCTestTestProperties test; + test.Name = testname; + test.Args = args; + test.Directory = cmSystemTools::GetCurrentWorkingDirectory(); + cmCTestLog(this->CTest, DEBUG, "Set test directory: " + << test.Directory << std::endl); + + test.IsInBasedOnREOptions = true; + test.WillFail = false; + test.RunSerial = false; + test.Timeout = 0; + test.ExplicitTimeout = false; + test.Cost = 0; + test.Processors = 1; + test.PreviousRuns = 0; + if (this->UseIncludeRegExpFlag && + !this->IncludeTestsRegularExpression.find(testname.c_str())) + { + test.IsInBasedOnREOptions = false; + } + else if (this->UseExcludeRegExpFlag && + !this->UseExcludeRegExpFirst && + this->ExcludeTestsRegularExpression.find(testname.c_str())) + { + test.IsInBasedOnREOptions = false; + } + this->TestList.push_back(test); + return true; +} + diff --git a/Source/CTest/cmCTestTestHandler.h b/Source/CTest/cmCTestTestHandler.h new file mode 100644 index 0000000..8e59e59 --- /dev/null +++ b/Source/CTest/cmCTestTestHandler.h @@ -0,0 +1,273 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTestTestHandler_h +#define cmCTestTestHandler_h + + +#include "cmCTestGenericHandler.h" +#include + +class cmMakefile; + +/** \class cmCTestTestHandler + * \brief A class that handles ctest -S invocations + * + */ +class cmCTestTestHandler : public cmCTestGenericHandler +{ + friend class cmCTestRunTest; + friend class cmCTestMultiProcessHandler; + friend class cmCTestBatchTestHandler; +public: + cmTypeMacro(cmCTestTestHandler, cmCTestGenericHandler); + + /** + * The main entry point for this class + */ + int ProcessHandler(); + + /** + * When both -R and -I are used should te resulting test list be the + * intersection or the union of the lists. By default it is the + * intersection. + */ + void SetUseUnion(bool val) { this->UseUnion = val; } + + /** + * This method is called when reading CTest custom file + */ + void PopulateCustomVectors(cmMakefile *mf); + + ///! Control the use of the regular expresisons, call these methods to turn + ///them on + void UseIncludeRegExp(); + void UseExcludeRegExp(); + void SetIncludeRegExp(const char *); + void SetExcludeRegExp(const char *); + + void SetMaxIndex(int n) {this->MaxIndex = n;} + int GetMaxIndex() {return this->MaxIndex;} + + ///! pass the -I argument down + void SetTestsToRunInformation(const char*); + + cmCTestTestHandler(); + + /* + * Add the test to the list of tests to be executed + */ + bool AddTest(const std::vector& args); + + /* + * Set tests properties + */ + bool SetTestsProperties(const std::vector& args); + + void Initialize(); + + // NOTE: This struct is Saved/Restored + // in cmCTestTestHandler, if you add to this class + // then you must add the new members to that code or + // ctest -j N will break for that feature + struct cmCTestTestProperties + { + cmStdString Name; + cmStdString Directory; + std::vector Args; + std::vector RequiredFiles; + std::vector Depends; + std::vector AttachedFiles; + std::vector AttachOnFail; + std::vector > ErrorRegularExpressions; + std::vector > RequiredRegularExpressions; + std::map Measurements; + bool IsInBasedOnREOptions; + bool WillFail; + float Cost; + int PreviousRuns; + bool RunSerial; + double Timeout; + bool ExplicitTimeout; + int Index; + //Requested number of process slots + int Processors; + std::vector Environment; + std::vector Labels; + std::set LockedResources; + }; + + struct cmCTestTestResult + { + std::string Name; + std::string Path; + std::string Reason; + std::string FullCommandLine; + double ExecutionTime; + int ReturnValue; + int Status; + bool CompressOutput; + std::string CompletionStatus; + std::string Output; + std::string RegressionImages; + int TestCount; + cmCTestTestProperties* Properties; + }; + + struct cmCTestTestResultLess + { + bool operator() (const cmCTestTestResult &lhs, + const cmCTestTestResult &rhs) const + { + return lhs.TestCount < rhs.TestCount; + } + }; + + // add configurations to a search path for an executable + static void AddConfigurations(cmCTest *ctest, + std::vector &attempted, + std::vector &attemptedConfigs, + std::string filepath, + std::string &filename); + + // full signature static method to find an executable + static std::string FindExecutable(cmCTest *ctest, + const char *testCommand, + std::string &resultingConfig, + std::vector &extraPaths, + std::vector &failed); + + typedef std::vector ListOfTests; +protected: + // compute a final test list + virtual int PreProcessHandler(); + virtual int PostProcessHandler(); + virtual void GenerateTestCommand(std::vector& args); + int ExecuteCommands(std::vector& vec); + + void WriteTestResultHeader(std::ostream& os, cmCTestTestResult* result); + void WriteTestResultFooter(std::ostream& os, cmCTestTestResult* result); + // Write attached test files into the xml + void AttachFiles(std::ostream& os, cmCTestTestResult* result); + + //! Clean test output to specified length + bool CleanTestOutput(std::string& output, size_t length); + + double ElapsedTestingTime; + + typedef std::vector TestResultsVector; + TestResultsVector TestResults; + + std::vector CustomTestsIgnore; + std::string StartTest; + std::string EndTest; + unsigned int StartTestTime; + unsigned int EndTestTime; + bool MemCheck; + int CustomMaximumPassedTestOutputSize; + int CustomMaximumFailedTestOutputSize; + int MaxIndex; +public: + enum { // Program statuses + NOT_RUN = 0, + TIMEOUT, + SEGFAULT, + ILLEGAL, + INTERRUPT, + NUMERICAL, + OTHER_FAULT, + FAILED, + BAD_COMMAND, + COMPLETED + }; + +private: + /** + * Generate the Dart compatible output + */ + virtual void GenerateDartOutput(std::ostream& os); + + void PrintLabelSummary(); + /** + * Run the tests for a directory and any subdirectories + */ + void ProcessDirectory(std::vector &passed, + std::vector &failed); + + /** + * Get the list of tests in directory and subdirectories. + */ + void GetListOfTests(); + // compute the lists of tests that will actually run + // based on union regex and -I stuff + void ComputeTestList(); + + bool GetValue(const char* tag, + std::string& value, + std::ifstream& fin); + bool GetValue(const char* tag, + int& value, + std::ifstream& fin); + bool GetValue(const char* tag, + size_t& value, + std::ifstream& fin); + bool GetValue(const char* tag, + bool& value, + std::ifstream& fin); + bool GetValue(const char* tag, + double& value, + std::ifstream& fin); + /** + * Find the executable for a test + */ + std::string FindTheExecutable(const char *exe); + + const char* GetTestStatus(int status); + void ExpandTestsToRunInformation(size_t numPossibleTests); + + std::vector CustomPreTest; + std::vector CustomPostTest; + + std::vector TestsToRun; + + bool UseIncludeLabelRegExpFlag; + bool UseExcludeLabelRegExpFlag; + bool UseIncludeRegExpFlag; + bool UseExcludeRegExpFlag; + bool UseExcludeRegExpFirst; + std::string IncludeLabelRegExp; + std::string ExcludeLabelRegExp; + std::string IncludeRegExp; + std::string ExcludeRegExp; + cmsys::RegularExpression IncludeLabelRegularExpression; + cmsys::RegularExpression ExcludeLabelRegularExpression; + cmsys::RegularExpression IncludeTestsRegularExpression; + cmsys::RegularExpression ExcludeTestsRegularExpression; + + std::string GenerateRegressionImages(const std::string& xml); + cmsys::RegularExpression DartStuff1; + void CheckLabelFilter(cmCTestTestProperties& it); + void CheckLabelFilterExclude(cmCTestTestProperties& it); + void CheckLabelFilterInclude(cmCTestTestProperties& it); + + std::string TestsToRunString; + bool UseUnion; + ListOfTests TestList; + size_t TotalNumberOfTests; + cmsys::RegularExpression DartStuff; + + std::ostream* LogFile; +}; + +#endif diff --git a/Source/CTest/cmCTestUpdateCommand.cxx b/Source/CTest/cmCTestUpdateCommand.cxx new file mode 100644 index 0000000..8414349 --- /dev/null +++ b/Source/CTest/cmCTestUpdateCommand.cxx @@ -0,0 +1,78 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestUpdateCommand.h" + +#include "cmCTest.h" +#include "cmCTestGenericHandler.h" + +cmCTestGenericHandler* cmCTestUpdateCommand::InitializeHandler() +{ + if ( this->Values[ct_SOURCE] ) + { + this->CTest->SetCTestConfiguration("SourceDirectory", + cmSystemTools::CollapseFullPath( + this->Values[ct_SOURCE]).c_str()); + } + else + { + this->CTest->SetCTestConfiguration("SourceDirectory", + cmSystemTools::CollapseFullPath( + this->Makefile->GetDefinition("CTEST_SOURCE_DIRECTORY")).c_str()); + } + std::string source_dir + = this->CTest->GetCTestConfiguration("SourceDirectory"); + + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "UpdateCommand", "CTEST_UPDATE_COMMAND"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "UpdateOptions", "CTEST_UPDATE_OPTIONS"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "CVSCommand", "CTEST_CVS_COMMAND"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "CVSUpdateOptions", "CTEST_CVS_UPDATE_OPTIONS"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "SVNCommand", "CTEST_SVN_COMMAND"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "SVNUpdateOptions", "CTEST_SVN_UPDATE_OPTIONS"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "BZRCommand", "CTEST_BZR_COMMAND"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "BZRUpdateOptions", "CTEST_BZR_UPDATE_OPTIONS"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "GITCommand", "CTEST_GIT_COMMAND"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "GITUpdateOptions", "CTEST_GIT_UPDATE_OPTIONS"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "GITUpdateCustom", "CTEST_GIT_UPDATE_CUSTOM"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "HGCommand", "CTEST_HG_COMMAND"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "HGUpdateOptions", "CTEST_HG_UPDATE_OPTIONS"); + + cmCTestGenericHandler* handler + = this->CTest->GetInitializedHandler("update"); + if ( !handler ) + { + this->SetError("internal CTest error. Cannot instantiate update handler"); + return 0; + } + handler->SetCommand(this); + if ( source_dir.empty() ) + { + this->SetError("source directory not specified. Please use SOURCE tag"); + return 0; + } + handler->SetOption("SourceDirectory", source_dir.c_str()); + return handler; +} + + diff --git a/Source/CTest/cmCTestUpdateCommand.h b/Source/CTest/cmCTestUpdateCommand.h new file mode 100644 index 0000000..c578fff --- /dev/null +++ b/Source/CTest/cmCTestUpdateCommand.h @@ -0,0 +1,73 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestUpdateCommand_h +#define cmCTestUpdateCommand_h + +#include "cmCTestHandlerCommand.h" + +/** \class cmCTestUpdate + * \brief Run a ctest script + * + * cmCTestUpdateCommand defineds the command to updates the repository. + */ +class cmCTestUpdateCommand : public cmCTestHandlerCommand +{ +public: + + cmCTestUpdateCommand() {} + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestUpdateCommand* ni = new cmCTestUpdateCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_update";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Update the work tree from version control."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_update([SOURCE source] [RETURN_VALUE res])\n" + "Updates the given source directory and stores results in Update.xml. " + "If no SOURCE is given, the CTEST_SOURCE_DIRECTORY variable is used. " + "The RETURN_VALUE option specifies a variable in which to store the " + "result, which is the number of files updated or -1 on error." + ; + } + + cmTypeMacro(cmCTestUpdateCommand, cmCTestHandlerCommand); + +protected: + cmCTestGenericHandler* InitializeHandler(); +}; + + +#endif diff --git a/Source/CTest/cmCTestUpdateHandler.cxx b/Source/CTest/cmCTestUpdateHandler.cxx new file mode 100644 index 0000000..9eae3f3 --- /dev/null +++ b/Source/CTest/cmCTestUpdateHandler.cxx @@ -0,0 +1,404 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCTestUpdateHandler.h" + +#include "cmCTest.h" +#include "cmake.h" +#include "cmMakefile.h" +#include "cmLocalGenerator.h" +#include "cmGlobalGenerator.h" +#include "cmVersion.h" +#include "cmGeneratedFileStream.h" +#include "cmXMLParser.h" +#include "cmXMLSafe.h" + +#include "cmCTestVC.h" +#include "cmCTestCVS.h" +#include "cmCTestSVN.h" +#include "cmCTestBZR.h" +#include "cmCTestGIT.h" +#include "cmCTestHG.h" + +#include + +//#include +#include + +// used for sleep +#ifdef _WIN32 +#include "windows.h" +#endif + +#include +#include +#include + +//---------------------------------------------------------------------- +static const char* cmCTestUpdateHandlerUpdateStrings[] = +{ + "Unknown", + "CVS", + "SVN", + "BZR", + "GIT", + "HG" +}; + +static const char* cmCTestUpdateHandlerUpdateToString(int type) +{ + if ( type < cmCTestUpdateHandler::e_UNKNOWN || + type >= cmCTestUpdateHandler::e_LAST ) + { + return cmCTestUpdateHandlerUpdateStrings[cmCTestUpdateHandler::e_UNKNOWN]; + } + return cmCTestUpdateHandlerUpdateStrings[type]; +} + +class cmCTestUpdateHandlerLocale +{ +public: + cmCTestUpdateHandlerLocale(); + ~cmCTestUpdateHandlerLocale(); +private: + std::string saveLCMessages; +}; + +cmCTestUpdateHandlerLocale::cmCTestUpdateHandlerLocale() +{ + const char* lcmess = cmSystemTools::GetEnv("LC_MESSAGES"); + if(lcmess) + { + saveLCMessages = lcmess; + } + // if LC_MESSAGES is not set to C, then + // set it, so that svn/cvs info will be in english ascii + if(! (lcmess && strcmp(lcmess, "C") == 0)) + { + cmSystemTools::PutEnv("LC_MESSAGES=C"); + } +} + +cmCTestUpdateHandlerLocale::~cmCTestUpdateHandlerLocale() +{ + // restore the value of LC_MESSAGES after running the version control + // commands + if(saveLCMessages.size()) + { + std::string put = "LC_MESSAGES="; + put += saveLCMessages; + cmSystemTools::PutEnv(put.c_str()); + } + else + { + cmSystemTools::UnsetEnv("LC_MESSAGES"); + } +} + +//---------------------------------------------------------------------- +cmCTestUpdateHandler::cmCTestUpdateHandler() +{ +} + +//---------------------------------------------------------------------- +void cmCTestUpdateHandler::Initialize() +{ + this->Superclass::Initialize(); + this->UpdateCommand = ""; + this->UpdateType = e_CVS; +} + +//---------------------------------------------------------------------- +int cmCTestUpdateHandler::DetermineType(const char* cmd, const char* type) +{ + cmCTestLog(this->CTest, DEBUG, "Determine update type from command: " << cmd + << " and type: " << type << std::endl); + if ( type && *type ) + { + cmCTestLog(this->CTest, DEBUG, "Type specified: " << type << std::endl); + std::string stype = cmSystemTools::LowerCase(type); + if ( stype.find("cvs") != std::string::npos ) + { + return cmCTestUpdateHandler::e_CVS; + } + if ( stype.find("svn") != std::string::npos ) + { + return cmCTestUpdateHandler::e_SVN; + } + if ( stype.find("bzr") != std::string::npos ) + { + return cmCTestUpdateHandler::e_BZR; + } + if ( stype.find("git") != std::string::npos ) + { + return cmCTestUpdateHandler::e_GIT; + } + if ( stype.find("hg") != std::string::npos ) + { + return cmCTestUpdateHandler::e_HG; + } + } + else + { + cmCTestLog(this->CTest, DEBUG, "Type not specified, check command: " + << cmd << std::endl); + std::string stype = cmSystemTools::LowerCase(cmd); + if ( stype.find("cvs") != std::string::npos ) + { + return cmCTestUpdateHandler::e_CVS; + } + if ( stype.find("svn") != std::string::npos ) + { + return cmCTestUpdateHandler::e_SVN; + } + if ( stype.find("bzr") != std::string::npos ) + { + return cmCTestUpdateHandler::e_BZR; + } + if ( stype.find("git") != std::string::npos ) + { + return cmCTestUpdateHandler::e_GIT; + } + if ( stype.find("hg") != std::string::npos ) + { + return cmCTestUpdateHandler::e_HG; + } + } + return cmCTestUpdateHandler::e_UNKNOWN; +} + +//---------------------------------------------------------------------- +//clearly it would be nice if this were broken up into a few smaller +//functions and commented... +int cmCTestUpdateHandler::ProcessHandler() +{ + // Make sure VCS tool messages are in English so we can parse them. + cmCTestUpdateHandlerLocale fixLocale; + static_cast(fixLocale); + + // Get source dir + const char* sourceDirectory = this->GetOption("SourceDirectory"); + if ( !sourceDirectory ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot find SourceDirectory key in the DartConfiguration.tcl" + << std::endl); + return -1; + } + + cmGeneratedFileStream ofs; + if ( !this->CTest->GetShowOnly() ) + { + this->StartLogFile("Update", ofs); + } + + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Updating the repository: " + << sourceDirectory << std::endl); + + if(!this->SelectVCS()) + { + return -1; + } + + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Use " + << cmCTestUpdateHandlerUpdateToString(this->UpdateType) + << " repository type" + << std::endl;); + + // Create an object to interact with the VCS tool. + cmsys::auto_ptr vc; + switch (this->UpdateType) + { + case e_CVS: vc.reset(new cmCTestCVS(this->CTest, ofs)); break; + case e_SVN: vc.reset(new cmCTestSVN(this->CTest, ofs)); break; + case e_BZR: vc.reset(new cmCTestBZR(this->CTest, ofs)); break; + case e_GIT: vc.reset(new cmCTestGIT(this->CTest, ofs)); break; + case e_HG: vc.reset(new cmCTestHG(this->CTest, ofs)); break; + default: vc.reset(new cmCTestVC(this->CTest, ofs)); break; + } + vc->SetCommandLineTool(this->UpdateCommand); + vc->SetSourceDirectory(sourceDirectory); + + // Cleanup the working tree. + vc->Cleanup(); + + // + // Now update repository and remember what files were updated + // + cmGeneratedFileStream os; + if(!this->StartResultingXML(cmCTest::PartUpdate, "Update", os)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot open log file" + << std::endl); + return -1; + } + std::string start_time = this->CTest->CurrentTime(); + unsigned int start_time_time = + static_cast(cmSystemTools::GetTime()); + double elapsed_time_start = cmSystemTools::GetTime(); + + bool updated = vc->Update(); + + os << "\n" + << "\n" + << "\t" << this->CTest->GetCTestConfiguration("Site") << "\n" + << "\t" << this->CTest->GetCTestConfiguration("BuildName") + << "\n" + << "\t" << this->CTest->GetCurrentTag() << "-" + << this->CTest->GetTestModelString() << "" << std::endl; + os << "\t" << start_time << "\n" + << "\t" << start_time_time << "\n" + << "\t" + << cmXMLSafe(vc->GetUpdateCommandLine()).Quotes(false) + << "\n" + << "\t" << cmXMLSafe( + cmCTestUpdateHandlerUpdateToString(this->UpdateType)) + << "\n"; + + vc->WriteXML(os); + + int localModifications = 0; + int numUpdated = vc->GetPathCount(cmCTestVC::PathUpdated); + if(numUpdated) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Found " << numUpdated << " updated files\n"); + } + if(int numModified = vc->GetPathCount(cmCTestVC::PathModified)) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Found " << numModified << " locally modified files\n"); + localModifications += numModified; + } + if(int numConflicting = vc->GetPathCount(cmCTestVC::PathConflicting)) + { + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Found " << numConflicting << " conflicting files\n"); + localModifications += numConflicting; + } + + cmCTestLog(this->CTest, DEBUG, "End" << std::endl); + std::string end_time = this->CTest->CurrentTime(); + os << "\t" << end_time << "\n" + << "\t" << static_cast(cmSystemTools::GetTime()) + << "\n" + << "" << + static_cast((cmSystemTools::GetTime() - elapsed_time_start)/6)/10.0 + << "\n" + << "\t"; + if(localModifications) + { + os << "Update error: There are modified or conflicting files in the " + "repository"; + cmCTestLog(this->CTest, ERROR_MESSAGE, + " There are modified or conflicting files in the repository" + << std::endl); + } + if(!updated) + { + os << "Update command failed:\n" << vc->GetUpdateCommandLine(); + cmCTestLog(this->CTest, ERROR_MESSAGE, " Update command failed: " + << vc->GetUpdateCommandLine() << "\n"); + } + os << "" << std::endl; + os << "" << std::endl; + return numUpdated; +} + +//---------------------------------------------------------------------- +int cmCTestUpdateHandler::DetectVCS(const char* dir) +{ + std::string sourceDirectory = dir; + cmCTestLog(this->CTest, DEBUG, "Check directory: " + << sourceDirectory.c_str() << std::endl); + sourceDirectory += "/.svn"; + if ( cmSystemTools::FileExists(sourceDirectory.c_str()) ) + { + return cmCTestUpdateHandler::e_SVN; + } + sourceDirectory = dir; + sourceDirectory += "/CVS"; + if ( cmSystemTools::FileExists(sourceDirectory.c_str()) ) + { + return cmCTestUpdateHandler::e_CVS; + } + sourceDirectory = dir; + sourceDirectory += "/.bzr"; + if ( cmSystemTools::FileExists(sourceDirectory.c_str()) ) + { + return cmCTestUpdateHandler::e_BZR; + } + sourceDirectory = dir; + sourceDirectory += "/.git"; + if ( cmSystemTools::FileExists(sourceDirectory.c_str()) ) + { + return cmCTestUpdateHandler::e_GIT; + } + sourceDirectory = dir; + sourceDirectory += "/.hg"; + if ( cmSystemTools::FileExists(sourceDirectory.c_str()) ) + { + return cmCTestUpdateHandler::e_HG; + } + return cmCTestUpdateHandler::e_UNKNOWN; +} + +//---------------------------------------------------------------------- +bool cmCTestUpdateHandler::SelectVCS() +{ + // Get update command + this->UpdateCommand = this->CTest->GetCTestConfiguration("UpdateCommand"); + + // Detect the VCS managing the source tree. + this->UpdateType = this->DetectVCS(this->GetOption("SourceDirectory")); + if (this->UpdateType == e_UNKNOWN) + { + // The source tree does not have a recognized VCS. Check the + // configuration value or command name. + this->UpdateType = this->DetermineType(this->UpdateCommand.c_str(), + this->CTest->GetCTestConfiguration("UpdateType").c_str()); + } + + // If no update command was specified, lookup one for this VCS tool. + if (this->UpdateCommand.empty()) + { + const char* key = 0; + switch (this->UpdateType) + { + case e_CVS: key = "CVSCommand"; break; + case e_SVN: key = "SVNCommand"; break; + case e_BZR: key = "BZRCommand"; break; + case e_GIT: key = "GITCommand"; break; + case e_HG: key = "HGCommand"; break; + default: break; + } + if (key) + { + this->UpdateCommand = this->CTest->GetCTestConfiguration(key); + } + if (this->UpdateCommand.empty()) + { + cmOStringStream e; + e << "Cannot find UpdateCommand "; + if (key) + { + e << "or " << key; + } + e << " configuration key."; + cmCTestLog(this->CTest, ERROR_MESSAGE, e.str() << std::endl); + return false; + } + } + + return true; +} diff --git a/Source/CTest/cmCTestUpdateHandler.h b/Source/CTest/cmCTestUpdateHandler.h new file mode 100644 index 0000000..55ec974 --- /dev/null +++ b/Source/CTest/cmCTestUpdateHandler.h @@ -0,0 +1,76 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTestUpdateHandler_h +#define cmCTestUpdateHandler_h + + +#include "cmCTestGenericHandler.h" +#include "cmListFileCache.h" + +#if defined(__sgi) && !defined(__GNUC__) +# pragma set woff 1375 /* base class destructor not virtual */ +#endif + +/** \class cmCTestUpdateHandler + * \brief A class that handles ctest -S invocations + * + */ +class cmCTestUpdateHandler : public cmCTestGenericHandler +{ +public: + cmTypeMacro(cmCTestUpdateHandler, cmCTestGenericHandler); + + /* + * The main entry point for this class + */ + int ProcessHandler(); + + cmCTestUpdateHandler(); + + enum { + e_UNKNOWN = 0, + e_CVS, + e_SVN, + e_BZR, + e_GIT, + e_HG, + e_LAST + }; + + /** + * Initialize handler + */ + virtual void Initialize(); + +private: + // Some structures needed for update + struct StringPair : + public std::pair{}; + struct UpdateFiles : public std::vector{}; + + // Determine the type of version control + int DetermineType(const char* cmd, const char* type); + + // The VCS command to update the working tree. + std::string UpdateCommand; + int UpdateType; + + int DetectVCS(const char* dir); + bool SelectVCS(); +}; + +#if defined(__sgi) && !defined(__GNUC__) +# pragma reset woff 1375 /* base class destructor not virtual */ +#endif + +#endif diff --git a/Source/CTest/cmCTestUploadCommand.cxx b/Source/CTest/cmCTestUploadCommand.cxx new file mode 100644 index 0000000..731c1c7 --- /dev/null +++ b/Source/CTest/cmCTestUploadCommand.cxx @@ -0,0 +1,69 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestUploadCommand.h" + +#include "cmCTest.h" +#include "cmCTestGenericHandler.h" +#include "cmCTestUploadHandler.h" + +cmCTestGenericHandler* cmCTestUploadCommand::InitializeHandler() +{ + cmCTestGenericHandler* handler + = this->CTest->GetInitializedHandler("upload"); + if ( !handler ) + { + this->SetError("internal CTest error. Cannot instantiate upload handler"); + return 0; + } + static_cast(handler)->SetFiles(this->Files); + + return handler; +} + + +//---------------------------------------------------------------------------- +bool cmCTestUploadCommand::CheckArgumentKeyword(std::string const& arg) +{ + if(arg == "FILES") + { + this->ArgumentDoing = ArgumentDoingFiles; + return true; + } + return false; +} + + +//---------------------------------------------------------------------------- +bool cmCTestUploadCommand::CheckArgumentValue(std::string const& arg) +{ + if(this->ArgumentDoing == ArgumentDoingFiles) + { + cmStdString filename(arg); + if(cmSystemTools::FileExists(filename.c_str())) + { + this->Files.insert(filename); + return true; + } + else + { + cmOStringStream e; + e << "File \"" << filename << "\" does not exist. Cannot submit " + << "a non-existent file."; + this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); + this->ArgumentDoing = ArgumentDoingError; + return false; + } + } + + // Look for other arguments. + return this->Superclass::CheckArgumentValue(arg); +} diff --git a/Source/CTest/cmCTestUploadCommand.h b/Source/CTest/cmCTestUploadCommand.h new file mode 100644 index 0000000..62f379f --- /dev/null +++ b/Source/CTest/cmCTestUploadCommand.h @@ -0,0 +1,85 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestUploadCommand_h +#define cmCTestUploadCommand_h + +#include "cmCTestHandlerCommand.h" +#include "cmCTest.h" + +/** \class cmCTestUpload + * \brief Run a ctest script + * + * cmCTestUploadCommand defines the command to upload result files for + * the project. + */ +class cmCTestUploadCommand : public cmCTestHandlerCommand +{ +public: + + cmCTestUploadCommand() + { + } + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestUploadCommand* ni = new cmCTestUploadCommand; + ni->CTest = this->CTest; + ni->CTestScriptHandler = this->CTestScriptHandler; + return ni; + } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "ctest_upload";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Upload files to a dashboard server."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " ctest_upload(FILES ...)\n" + "Pass a list of files to be sent along with the build results to " + "the dashboard server.\n"; + } + + cmTypeMacro(cmCTestUploadCommand, cmCTestHandlerCommand); + +protected: + cmCTestGenericHandler* InitializeHandler(); + + virtual bool CheckArgumentKeyword(std::string const& arg); + virtual bool CheckArgumentValue(std::string const& arg); + + enum + { + ArgumentDoingFiles = Superclass::ArgumentDoingLast1, + ArgumentDoingLast2 + }; + + cmCTest::SetOfStrings Files; +}; + + +#endif diff --git a/Source/CTest/cmCTestUploadHandler.cxx b/Source/CTest/cmCTestUploadHandler.cxx new file mode 100644 index 0000000..caf2e53 --- /dev/null +++ b/Source/CTest/cmCTestUploadHandler.cxx @@ -0,0 +1,77 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestUploadHandler.h" + +#include "cmGeneratedFileStream.h" +#include "cmVersion.h" +#include "cmXMLSafe.h" + +//---------------------------------------------------------------------------- +cmCTestUploadHandler::cmCTestUploadHandler() +{ + this->Initialize(); +} + +//---------------------------------------------------------------------------- +void cmCTestUploadHandler::Initialize() +{ + this->Superclass::Initialize(); + this->Files.clear(); +} + +void cmCTestUploadHandler::SetFiles(const cmCTest::SetOfStrings& files) +{ + this->Files = files; +} + +//---------------------------------------------------------------------------- +int cmCTestUploadHandler::ProcessHandler() +{ + cmGeneratedFileStream ofs; + if ( !this->CTest->OpenOutputFile(this->CTest->GetCurrentTag(), + "Upload.xml", ofs)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot open Upload.xml file" << std::endl); + return -1; + } + + cmCTest::SetOfStrings::const_iterator it; + ofs << "\n" + << " \"?>\n" + << "CTest->GetCTestConfiguration("BuildName") + << "\" BuildStamp=\"" + << this->CTest->GetCurrentTag() << "-" + << this->CTest->GetTestModelString() << "\" Name=\"" + << this->CTest->GetCTestConfiguration("Site") << "\" Generator=\"ctest" + << cmVersion::GetCMakeVersion() + << "\">\n"; + this->CTest->AddSiteProperties(ofs); + ofs << "\n"; + + for ( it = this->Files.begin(); it != this->Files.end(); it ++ ) + { + cmCTestLog(this->CTest, OUTPUT, + "\tUpload file: " << it->c_str() << std::endl); + ofs << "\n" + << "\n"; + ofs << this->CTest->Base64EncodeFile(*it); + ofs << "\n\n" + << "\n"; + } + ofs << "\n" + << "\n"; + return 0; +} diff --git a/Source/CTest/cmCTestUploadHandler.h b/Source/CTest/cmCTestUploadHandler.h new file mode 100644 index 0000000..23ed35a --- /dev/null +++ b/Source/CTest/cmCTestUploadHandler.h @@ -0,0 +1,45 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestUploadHandler_h +#define cmCTestUploadHandler_h + +#include "cmCTestGenericHandler.h" + +/** \class cmCTestUploadHandler + * \brief Helper class for CTest + * + * Submit arbitrary files + * + */ +class cmCTestUploadHandler : public cmCTestGenericHandler +{ +public: + cmTypeMacro(cmCTestUploadHandler, cmCTestGenericHandler); + + cmCTestUploadHandler(); + ~cmCTestUploadHandler() {} + + /* + * The main entry point for this class + */ + int ProcessHandler(); + + void Initialize(); + + /** Specify a set of files to submit. */ + void SetFiles(cmCTest::SetOfStrings const& files); + +private: + cmCTest::SetOfStrings Files; +}; + +#endif diff --git a/Source/CTest/cmCTestVC.cxx b/Source/CTest/cmCTestVC.cxx new file mode 100644 index 0000000..fbee227 --- /dev/null +++ b/Source/CTest/cmCTestVC.cxx @@ -0,0 +1,241 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCTestVC.h" + +#include "cmCTest.h" +#include "cmSystemTools.h" +#include "cmXMLSafe.h" + +#include + +//---------------------------------------------------------------------------- +cmCTestVC::cmCTestVC(cmCTest* ct, std::ostream& log): CTest(ct), Log(log) +{ + this->PathCount[PathUpdated] = 0; + this->PathCount[PathModified] = 0; + this->PathCount[PathConflicting] = 0; + this->Unknown.Date = "Unknown"; + this->Unknown.Author = "Unknown"; + this->Unknown.Rev = "Unknown"; +} + +//---------------------------------------------------------------------------- +cmCTestVC::~cmCTestVC() +{ +} + +//---------------------------------------------------------------------------- +void cmCTestVC::SetCommandLineTool(std::string const& tool) +{ + this->CommandLineTool = tool; +} + +//---------------------------------------------------------------------------- +void cmCTestVC::SetSourceDirectory(std::string const& dir) +{ + this->SourceDirectory = dir; +} + +//---------------------------------------------------------------------------- +bool cmCTestVC::InitialCheckout(const char* command) +{ + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " First perform the initial checkout: " << command << "\n"); + + // Make the parent directory in which to perform the checkout. + std::string parent = cmSystemTools::GetFilenamePath(this->SourceDirectory); + cmCTestLog(this->CTest, HANDLER_OUTPUT, + " Perform checkout in directory: " << parent << "\n"); + if(!cmSystemTools::MakeDirectory(parent.c_str())) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Cannot create directory: " << parent << std::endl); + return false; + } + + // Construct the initial checkout command line. + std::vector args = cmSystemTools::ParseArguments(command); + std::vector vc_co; + for(std::vector::const_iterator ai = args.begin(); + ai != args.end(); ++ai) + { + vc_co.push_back(ai->c_str()); + } + vc_co.push_back(0); + + // Run the initial checkout command and log its output. + this->Log << "--- Begin Initial Checkout ---\n"; + OutputLogger out(this->Log, "co-out> "); + OutputLogger err(this->Log, "co-err> "); + bool result = this->RunChild(&vc_co[0], &out, &err, parent.c_str()); + this->Log << "--- End Initial Checkout ---\n"; + if(!result) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Initial checkout failed!" << std::endl); + } + return result; +} + +//---------------------------------------------------------------------------- +bool cmCTestVC::RunChild(char const* const* cmd, OutputParser* out, + OutputParser* err, const char* workDir) +{ + this->Log << this->ComputeCommandLine(cmd) << "\n"; + + cmsysProcess* cp = cmsysProcess_New(); + cmsysProcess_SetCommand(cp, cmd); + workDir = workDir? workDir : this->SourceDirectory.c_str(); + cmsysProcess_SetWorkingDirectory(cp, workDir); + this->RunProcess(cp, out, err); + int result = cmsysProcess_GetExitValue(cp); + cmsysProcess_Delete(cp); + return result == 0; +} + +//---------------------------------------------------------------------------- +std::string cmCTestVC::ComputeCommandLine(char const* const* cmd) +{ + cmOStringStream line; + const char* sep = ""; + for(const char* const* arg = cmd; *arg; ++arg) + { + line << sep << "\"" << *arg << "\""; + sep = " "; + } + return line.str(); +} + +//---------------------------------------------------------------------------- +bool cmCTestVC::RunUpdateCommand(char const* const* cmd, + OutputParser* out, OutputParser* err) +{ + // Report the command line. + this->UpdateCommandLine = this->ComputeCommandLine(cmd); + if(this->CTest->GetShowOnly()) + { + this->Log << this->UpdateCommandLine << "\n"; + return true; + } + + // Run the command. + return this->RunChild(cmd, out, err); +} + +//---------------------------------------------------------------------------- +std::string cmCTestVC::GetNightlyTime() +{ + // Get the nightly start time corresponding to the current dau. + struct tm* t = this->CTest->GetNightlyTime( + this->CTest->GetCTestConfiguration("NightlyStartTime"), + this->CTest->GetTomorrowTag()); + char current_time[1024]; + sprintf(current_time, "%04d-%02d-%02d %02d:%02d:%02d", + t->tm_year + 1900, + t->tm_mon + 1, + t->tm_mday, + t->tm_hour, + t->tm_min, + t->tm_sec); + return std::string(current_time); +} + +//---------------------------------------------------------------------------- +void cmCTestVC::Cleanup() +{ + this->Log << "--- Begin Cleanup ---\n"; + this->CleanupImpl(); + this->Log << "--- End Cleanup ---\n"; +} + +//---------------------------------------------------------------------------- +void cmCTestVC::CleanupImpl() +{ + // We do no cleanup by default. +} + +//---------------------------------------------------------------------------- +bool cmCTestVC::Update() +{ + this->NoteOldRevision(); + this->Log << "--- Begin Update ---\n"; + bool result = this->UpdateImpl(); + this->Log << "--- End Update ---\n"; + this->NoteNewRevision(); + return result; +} + +//---------------------------------------------------------------------------- +void cmCTestVC::NoteOldRevision() +{ + // We do nothing by default. +} + +//---------------------------------------------------------------------------- +void cmCTestVC::NoteNewRevision() +{ + // We do nothing by default. +} + +//---------------------------------------------------------------------------- +bool cmCTestVC::UpdateImpl() +{ + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "* Unknown VCS tool, not updating!" << std::endl); + return true; +} + +//---------------------------------------------------------------------------- +bool cmCTestVC::WriteXML(std::ostream& xml) +{ + this->Log << "--- Begin Revisions ---\n"; + bool result = this->WriteXMLUpdates(xml); + this->Log << "--- End Revisions ---\n"; + return result; +} + +//---------------------------------------------------------------------------- +bool cmCTestVC::WriteXMLUpdates(std::ostream&) +{ + cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, + "* CTest cannot extract updates for this VCS tool.\n"); + return true; +} + +//---------------------------------------------------------------------------- +void cmCTestVC::WriteXMLEntry(std::ostream& xml, + std::string const& path, + std::string const& name, + std::string const& full, + File const& f) +{ + static const char* desc[3] = { "Updated", "Modified", "Conflicting"}; + Revision const& rev = f.Rev? *f.Rev : this->Unknown; + std::string prior = f.PriorRev? f.PriorRev->Rev : std::string("Unknown"); + xml << "\t\t<" << desc[f.Status] << ">\n" + << "\t\t\t" << cmXMLSafe(name) << "\n" + << "\t\t\t" << cmXMLSafe(path) << "\n" + << "\t\t\t" << cmXMLSafe(full) << "\n" + << "\t\t\t" << cmXMLSafe(rev.Date) << "\n" + << "\t\t\t" << cmXMLSafe(rev.Author) << "\n" + << "\t\t\t" << cmXMLSafe(rev.EMail) << "\n" + << "\t\t\t" << cmXMLSafe(rev.Committer) << "\n" + << "\t\t\t" << cmXMLSafe(rev.CommitterEMail) + << "\n" + << "\t\t\t" << cmXMLSafe(rev.CommitDate) + << "\n" + << "\t\t\t" << cmXMLSafe(rev.Log) << "\n" + << "\t\t\t" << cmXMLSafe(rev.Rev) << "\n" + << "\t\t\t" << cmXMLSafe(prior) << "\n" + << "\t\t\n"; + ++this->PathCount[f.Status]; +} diff --git a/Source/CTest/cmCTestVC.h b/Source/CTest/cmCTestVC.h new file mode 100644 index 0000000..44e1dac --- /dev/null +++ b/Source/CTest/cmCTestVC.h @@ -0,0 +1,133 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCTestVC_h +#define cmCTestVC_h + +#include "cmProcessTools.h" + +class cmCTest; + +/** \class cmCTestVC + * \brief Base class for version control system handlers + * + */ +class cmCTestVC: public cmProcessTools +{ +public: + /** Construct with a CTest instance and update log stream. */ + cmCTestVC(cmCTest* ctest, std::ostream& log); + + virtual ~cmCTestVC(); + + /** Command line tool to invoke. */ + void SetCommandLineTool(std::string const& tool); + + /** Top-level source directory. */ + void SetSourceDirectory(std::string const& dir); + + /** Get the date/time specification for the current nightly start time. */ + std::string GetNightlyTime(); + + /** Prepare the work tree. */ + bool InitialCheckout(const char* command); + + /** Perform cleanup operations on the work tree. */ + void Cleanup(); + + /** Update the working tree to the new revision. */ + bool Update(); + + /** Get the command line used by the Update method. */ + std::string const& GetUpdateCommandLine() const + { return this->UpdateCommandLine; } + + /** Write Update.xml entries for the updates found. */ + bool WriteXML(std::ostream& xml); + + /** Enumerate non-trivial working tree states during update. */ + enum PathStatus { PathUpdated, PathModified, PathConflicting }; + + /** Get the number of working tree paths in each state after update. */ + int GetPathCount(PathStatus s) const { return this->PathCount[s]; } + +protected: + // Internal API to be implemented by subclasses. + virtual void CleanupImpl(); + virtual void NoteOldRevision(); + virtual bool UpdateImpl(); + virtual void NoteNewRevision(); + virtual bool WriteXMLUpdates(std::ostream& xml); + + /** Basic information about one revision of a tree or file. */ + struct Revision + { + std::string Rev; + std::string Date; + std::string Author; + std::string EMail; + std::string Committer; + std::string CommitterEMail; + std::string CommitDate; + std::string Log; + }; + + struct File; + friend struct File; + + /** Represent change to one file. */ + struct File + { + PathStatus Status; + Revision const* Rev; + Revision const* PriorRev; + File(): Status(PathUpdated), Rev(0), PriorRev(0) {} + File(PathStatus status, Revision const* rev, Revision const* priorRev): + Status(status), Rev(rev), PriorRev(priorRev) {} + }; + + /** Convert a list of arguments to a human-readable command line. */ + static std::string ComputeCommandLine(char const* const* cmd); + + /** Run a command line and send output to given parsers. */ + bool RunChild(char const* const* cmd, OutputParser* out, + OutputParser* err, const char* workDir = 0); + + /** Run VC update command line and send output to given parsers. */ + bool RunUpdateCommand(char const* const* cmd, + OutputParser* out, OutputParser* err = 0); + + /** Write xml element for one file. */ + void WriteXMLEntry(std::ostream& xml, std::string const& path, + std::string const& name, std::string const& full, + File const& f); + + // Instance of cmCTest running the script. + cmCTest* CTest; + + // A stream to which we write log information. + std::ostream& Log; + + // Basic information about the working tree. + std::string CommandLineTool; + std::string SourceDirectory; + + // Record update command info. + std::string UpdateCommandLine; + + // Placeholder for unknown revisions. + Revision Unknown; + + // Count paths reported with each PathStatus value. + int PathCount[3]; +}; + +#endif diff --git a/Source/CTest/cmParsePHPCoverage.cxx b/Source/CTest/cmParsePHPCoverage.cxx new file mode 100644 index 0000000..593b2d1 --- /dev/null +++ b/Source/CTest/cmParsePHPCoverage.cxx @@ -0,0 +1,253 @@ +#include "cmStandardIncludes.h" +#include "cmSystemTools.h" +#include "cmParsePHPCoverage.h" +#include + +/* + To setup coverage for php. + + - edit php.ini to add auto prepend and append php files from phpunit + auto_prepend_file = + auto_append_file = + - run the tests + - run this program on all the files in c:/tmp + +*/ + +cmParsePHPCoverage::cmParsePHPCoverage(cmCTestCoverageHandlerContainer& cont, + cmCTest* ctest) + :Coverage(cont), CTest(ctest) +{ +} + +bool cmParsePHPCoverage::ReadUntil(std::ifstream& in, char until) +{ + char c = 0; + while(in.get(c) && c != until) + { + } + if(c != until) + { + return false; + } + return true; +} +bool cmParsePHPCoverage::ReadCoverageArray(std::ifstream& in, + cmStdString const& fileName) +{ + cmCTestCoverageHandlerContainer::SingleFileCoverageVector& coverageVector + = this->Coverage.TotalCoverage[fileName]; + + char c; + char buf[4]; + in.read(buf, 3); + buf[3] = 0; + if(strcmp(buf, ";a:") != 0) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "failed to read start of coverage array, found : " + << buf << "\n"); + return false; + } + int size = 0; + if(!this->ReadInt(in, size)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "failed to read size "); + return false; + } + if(!in.get(c) && c == '{') + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "failed to read open {\n"); + return false; + } + for(int i =0; i < size; i++) + { + this->ReadUntil(in, ':'); + int line = 0; + this->ReadInt(in, line); + // ok xdebug may have a bug here + // it seems to be 1 based but often times + // seems to have a 0'th line. + line--; + if(line < 0) + { + line = 0; + } + this->ReadUntil(in, ':'); + int value = 0; + this->ReadInt(in, value); + // make sure the vector is the right size and is + // initialized with -1 for each line + while(coverageVector.size() <= static_cast(line) ) + { + coverageVector.push_back(-1); + } + // if value is less than 0, set it to zero + // TODO figure out the difference between + // -1 and -2 in xdebug coverage?? For now + // assume less than 0 is just not covered + // CDash expects -1 for non executable code (like comments) + // and 0 for uncovered code, and a positive value + // for number of times a line was executed + if(value < 0) + { + value = 0; + } + // if unset then set it to value + if(coverageVector[line] == -1) + { + coverageVector[line] = value; + } + // otherwise increment by value + else + { + coverageVector[line] += value; + } + } + return true; +} + +bool cmParsePHPCoverage::ReadInt(std::ifstream& in, int& v) +{ + std::string s; + char c = 0; + while(in.get(c) && c != ':' && c != ';') + { + s += c; + } + v = atoi(s.c_str()); + return true; +} + +bool cmParsePHPCoverage::ReadArraySize(std::ifstream& in, int& size) +{ + char c = 0; + in.get(c); + if(c != 'a') + { + return false; + } + if(in.get(c) && c == ':') + { + if(this->ReadInt(in, size)) + { + return true; + } + } + return false; +} + +bool cmParsePHPCoverage::ReadFileInformation(std::ifstream& in) +{ + char buf[4]; + in.read(buf, 2); + buf[2] = 0; + if(strcmp(buf, "s:") != 0) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "failed to read start of file info found: [" << buf << "]\n"); + return false; + } + char c; + int size = 0; + if(this->ReadInt(in, size)) + { + size++; // add one for null termination + char* s = new char[size+1]; + // read open quote + if(in.get(c) && c != '"') + { + delete[] s; + return false; + } + // read the string data + in.read(s, size-1); + s[size-1] = 0; + cmStdString fileName = s; + delete [] s; + // read close quote + if(in.get(c) && c != '"') + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "failed to read close quote\n" + << "read [" << c << "]\n"); + return false; + } + if(!this->ReadCoverageArray(in, fileName) ) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "failed to read coverage array for file: " + << fileName << "\n"); + return false; + } + return true; + } + return false; +} + + +bool cmParsePHPCoverage::ReadPHPData(const char* file) +{ + std::ifstream in(file); + if(!in) + { + return false; + } + int size = 0; + this->ReadArraySize(in, size); + char c = 0; + in.get(c); + if(c != '{') + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "failed to read open array\n"); + return false; + } + for(int i =0; i < size; i++) + { + if(!this->ReadFileInformation(in)) + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "Failed to read file #" << i << "\n"); + return false; + } + in.get(c); + if(c != '}') + { + cmCTestLog(this->CTest, ERROR_MESSAGE, + "failed to read close array\n"); + return false; + } + } + return true; +} + +bool cmParsePHPCoverage::ReadPHPCoverageDirectory(const char* d) +{ + cmsys::Directory dir; + if(!dir.Load(d)) + { + return false; + } + size_t numf; + unsigned int i; + numf = dir.GetNumberOfFiles(); + for (i = 0; i < numf; i++) + { + std::string file = dir.GetFile(i); + if(file != "." && file != ".." + && !cmSystemTools::FileIsDirectory(file.c_str())) + { + std::string path = d; + path += "/"; + path += file; + if(!this->ReadPHPData(path.c_str())) + { + return false; + } + } + } + return true; +} diff --git a/Source/CTest/cmParsePHPCoverage.h b/Source/CTest/cmParsePHPCoverage.h new file mode 100644 index 0000000..ce5741d --- /dev/null +++ b/Source/CTest/cmParsePHPCoverage.h @@ -0,0 +1,48 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc. + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmParsePHPCoverage_h +#define cmParsePHPCoverage_h + +#include "cmStandardIncludes.h" +#include "cmCTestCoverageHandler.h" + +/** \class cmParsePHPCoverage + * \brief Parse xdebug PHP coverage information + * + * This class is used to parse php coverage information produced + * by xdebug. The data is stored as a php dump of the array + * return by xdebug coverage. It is an array of arrays. + */ +class cmParsePHPCoverage +{ +public: + cmParsePHPCoverage(cmCTestCoverageHandlerContainer& cont, + cmCTest* ctest); + bool ReadPHPCoverageDirectory(const char* dir); + void PrintCoverage(); +private: + bool ReadPHPData(const char* file); + bool ReadArraySize(std::ifstream& in, int& size); + bool ReadFileInformation(std::ifstream& in); + bool ReadInt(std::ifstream& in, int& v); + bool ReadCoverageArray(std::ifstream& in, cmStdString const&); + bool ReadUntil(std::ifstream& in, char until); + typedef std::map FileLineCoverage; + std::map FileToCoverage; + std::map FileCoverage; + cmCTestCoverageHandlerContainer& Coverage; + cmCTest* CTest; +}; + + +#endif diff --git a/Source/CTest/cmProcess.cxx b/Source/CTest/cmProcess.cxx new file mode 100644 index 0000000..0ee631f --- /dev/null +++ b/Source/CTest/cmProcess.cxx @@ -0,0 +1,272 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include +#include + +cmProcess::cmProcess() +{ + this->Process = 0; + this->Timeout = 0; + this->TotalTime = 0; + this->ExitValue = 0; + this->Id = 0; + this->StartTime = 0; +} + +cmProcess::~cmProcess() +{ + cmsysProcess_Delete(this->Process); +} +void cmProcess::SetCommand(const char* command) +{ + this->Command = command; +} + +void cmProcess::SetCommandArguments(std::vector const& args) +{ + this->Arguments = args; +} + +bool cmProcess::StartProcess() +{ + if(this->Command.size() == 0) + { + return false; + } + this->StartTime = cmSystemTools::GetTime(); + this->ProcessArgs.clear(); + // put the command as arg0 + this->ProcessArgs.push_back(this->Command.c_str()); + // now put the command arguments in + for(std::vector::iterator i = this->Arguments.begin(); + i != this->Arguments.end(); ++i) + { + this->ProcessArgs.push_back(i->c_str()); + } + this->ProcessArgs.push_back(0); // null terminate the list + this->Process = cmsysProcess_New(); + cmsysProcess_SetCommand(this->Process, &*this->ProcessArgs.begin()); + if(this->WorkingDirectory.size()) + { + cmsysProcess_SetWorkingDirectory(this->Process, + this->WorkingDirectory.c_str()); + } + cmsysProcess_SetTimeout(this->Process, this->Timeout); + cmsysProcess_Execute(this->Process); + return (cmsysProcess_GetState(this->Process) + == cmsysProcess_State_Executing); +} + +//---------------------------------------------------------------------------- +bool cmProcess::Buffer::GetLine(std::string& line) +{ + // Scan for the next newline. + for(size_type sz = this->size(); this->Last != sz; ++this->Last) + { + if((*this)[this->Last] == '\n' || (*this)[this->Last] == '\0') + { + // Extract the range first..last as a line. + const char* text = &*this->begin() + this->First; + size_type length = this->Last - this->First; + while(length && text[length-1] == '\r') + { + length --; + } + line.assign(text, length); + + // Start a new range for the next line. + ++this->Last; + this->First = Last; + + // Return the line extracted. + return true; + } + } + + // Available data have been exhausted without a newline. + if(this->First != 0) + { + // Move the partial line to the beginning of the buffer. + this->erase(this->begin(), this->begin() + this->First); + this->First = 0; + this->Last = this->size(); + } + return false; +} + +//---------------------------------------------------------------------------- +bool cmProcess::Buffer::GetLast(std::string& line) +{ + // Return the partial last line, if any. + if(!this->empty()) + { + line.assign(&*this->begin(), this->size()); + this->First = this->Last = 0; + this->clear(); + return true; + } + return false; +} + +//---------------------------------------------------------------------------- +int cmProcess::GetNextOutputLine(std::string& line, double timeout) +{ + for(;;) + { + // Look for lines already buffered. + if(this->StdOut.GetLine(line)) + { + return cmsysProcess_Pipe_STDOUT; + } + else if(this->StdErr.GetLine(line)) + { + return cmsysProcess_Pipe_STDERR; + } + + // Check for more data from the process. + char* data; + int length; + int p = cmsysProcess_WaitForData(this->Process, &data, &length, &timeout); + if(p == cmsysProcess_Pipe_Timeout) + { + return cmsysProcess_Pipe_Timeout; + } + else if(p == cmsysProcess_Pipe_STDOUT) + { + this->StdOut.insert(this->StdOut.end(), data, data+length); + } + else if(p == cmsysProcess_Pipe_STDERR) + { + this->StdErr.insert(this->StdErr.end(), data, data+length); + } + else // p == cmsysProcess_Pipe_None + { + // The process will provide no more data. + break; + } + } + + // Look for partial last lines. + if(this->StdOut.GetLast(line)) + { + return cmsysProcess_Pipe_STDOUT; + } + else if(this->StdErr.GetLast(line)) + { + return cmsysProcess_Pipe_STDERR; + } + + // No more data. Wait for process exit. + if(!cmsysProcess_WaitForExit(this->Process, &timeout)) + { + return cmsysProcess_Pipe_Timeout; + } + + // Record exit information. + this->ExitValue = cmsysProcess_GetExitValue(this->Process); + this->TotalTime = cmSystemTools::GetTime() - this->StartTime; + // std::cerr << "Time to run: " << this->TotalTime << "\n"; + return cmsysProcess_Pipe_None; +} + +// return the process status +int cmProcess::GetProcessStatus() +{ + if(!this->Process) + { + return cmsysProcess_State_Exited; + } + return cmsysProcess_GetState(this->Process); +} + +int cmProcess::ReportStatus() +{ + int result = 1; + switch(cmsysProcess_GetState(this->Process)) + { + case cmsysProcess_State_Starting: + { + std::cerr << "cmProcess: Never started " + << this->Command << " process.\n"; + } break; + case cmsysProcess_State_Error: + { + std::cerr << "cmProcess: Error executing " << this->Command + << " process: " + << cmsysProcess_GetErrorString(this->Process) + << "\n"; + } break; + case cmsysProcess_State_Exception: + { + std::cerr << "cmProcess: " << this->Command + << " process exited with an exception: "; + switch(cmsysProcess_GetExitException(this->Process)) + { + case cmsysProcess_Exception_None: + { + std::cerr << "None"; + } break; + case cmsysProcess_Exception_Fault: + { + std::cerr << "Segmentation fault"; + } break; + case cmsysProcess_Exception_Illegal: + { + std::cerr << "Illegal instruction"; + } break; + case cmsysProcess_Exception_Interrupt: + { + std::cerr << "Interrupted by user"; + } break; + case cmsysProcess_Exception_Numerical: + { + std::cerr << "Numerical exception"; + } break; + case cmsysProcess_Exception_Other: + { + std::cerr << "Unknown"; + } break; + } + std::cerr << "\n"; + } break; + case cmsysProcess_State_Executing: + { + std::cerr << "cmProcess: Never terminated " << + this->Command << " process.\n"; + } break; + case cmsysProcess_State_Exited: + { + result = cmsysProcess_GetExitValue(this->Process); + std::cerr << "cmProcess: " << this->Command + << " process exited with code " + << result << "\n"; + } break; + case cmsysProcess_State_Expired: + { + std::cerr << "cmProcess: killed " << this->Command + << " process due to timeout.\n"; + } break; + case cmsysProcess_State_Killed: + { + std::cerr << "cmProcess: killed " << this->Command << " process.\n"; + } break; + } + return result; + +} + + +int cmProcess::GetExitException() +{ + return cmsysProcess_GetExitException(this->Process); +} diff --git a/Source/CTest/cmProcess.h b/Source/CTest/cmProcess.h new file mode 100644 index 0000000..ff99ca2 --- /dev/null +++ b/Source/CTest/cmProcess.h @@ -0,0 +1,82 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmProcess_h +#define cmProcess_h + + +#include "cmStandardIncludes.h" +#include + + +/** \class cmProcess + * \brief run a process with c++ + * + * cmProcess wraps the kwsys process stuff in a c++ class. + */ +class cmProcess +{ +public: + cmProcess(); + ~cmProcess(); + const char* GetCommand() { return this->Command.c_str();} + void SetCommand(const char* command); + void SetCommandArguments(std::vector const& arg); + void SetWorkingDirectory(const char* dir) { this->WorkingDirectory = dir;} + void SetTimeout(double t) { this->Timeout = t;} + // Return true if the process starts + bool StartProcess(); + + // return the process status + int GetProcessStatus(); + // Report the status of the program + int ReportStatus(); + int GetId() { return this->Id; } + void SetId(int id) { this->Id = id;} + int GetExitValue() { return this->ExitValue;} + double GetTotalTime() { return this->TotalTime;} + int GetExitException(); + /** + * Read one line of output but block for no more than timeout. + * Returns: + * cmsysProcess_Pipe_None = Process terminated and all output read + * cmsysProcess_Pipe_STDOUT = Line came from stdout + * cmsysProcess_Pipe_STDOUT = Line came from stderr + * cmsysProcess_Pipe_Timeout = Timeout expired while waiting + */ + int GetNextOutputLine(std::string& line, double timeout); +private: + double Timeout; + double StartTime; + double TotalTime; + cmsysProcess* Process; + class Buffer: public std::vector + { + // Half-open index range of partial line already scanned. + size_type First; + size_type Last; + public: + Buffer(): First(0), Last(0) {} + bool GetLine(std::string& line); + bool GetLast(std::string& line); + }; + Buffer StdErr; + Buffer StdOut; + std::string Command; + std::string WorkingDirectory; + std::vector Arguments; + std::vector ProcessArgs; + std::string Output; + int Id; + int ExitValue; +}; + +#endif diff --git a/Source/CursesDialog/.NoDartCoverage b/Source/CursesDialog/.NoDartCoverage new file mode 100644 index 0000000..3c99729 --- /dev/null +++ b/Source/CursesDialog/.NoDartCoverage @@ -0,0 +1 @@ +# do not do coverage in this directory diff --git a/Source/CursesDialog/CMakeLists.txt b/Source/CursesDialog/CMakeLists.txt new file mode 100644 index 0000000..3349ebe --- /dev/null +++ b/Source/CursesDialog/CMakeLists.txt @@ -0,0 +1,37 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +SET( CURSES_SRCS + CursesDialog/cmCursesBoolWidget + CursesDialog/cmCursesCacheEntryComposite + CursesDialog/cmCursesDummyWidget + CursesDialog/cmCursesFilePathWidget + CursesDialog/cmCursesForm + CursesDialog/cmCursesLabelWidget + CursesDialog/cmCursesLongMessageForm + CursesDialog/cmCursesMainForm + CursesDialog/cmCursesPathWidget + CursesDialog/cmCursesStringWidget + CursesDialog/cmCursesWidget + CursesDialog/ccmake + ) + +INCLUDE_DIRECTORIES(${CMake_SOURCE_DIR}/Source/CursesDialog/form + ${CMake_BINARY_DIR}/Source/CursesDialog/form) +INCLUDE_DIRECTORIES(${CURSES_INCLUDE_PATH}) + + +ADD_EXECUTABLE(ccmake ${CURSES_SRCS} ) +TARGET_LINK_LIBRARIES(ccmake CMakeLib) +TARGET_LINK_LIBRARIES(ccmake cmForm) + +INSTALL_TARGETS(/bin ccmake) diff --git a/Source/CursesDialog/ccmake.cxx b/Source/CursesDialog/ccmake.cxx new file mode 100644 index 0000000..623d7d3 --- /dev/null +++ b/Source/CursesDialog/ccmake.cxx @@ -0,0 +1,217 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "../cmCacheManager.h" +#include "../cmSystemTools.h" +#include "../cmake.h" +#include "../cmDocumentation.h" + +#include +#include + +#include "cmCursesMainForm.h" +#include "cmCursesStandardIncludes.h" + +#include + +//---------------------------------------------------------------------------- +static const char * cmDocumentationName[][3] = +{ + {0, + " ccmake - Curses Interface for CMake.", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationUsage[][3] = +{ + {0, + " ccmake \n" + " ccmake ", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationDescription[][3] = +{ + {0, + "The \"ccmake\" executable is the CMake curses interface. Project " + "configuration settings may be specified interactively through " + "this GUI. Brief instructions are provided at the bottom of the " + "terminal when the program is running.", 0}, + CMAKE_STANDARD_INTRODUCTION, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationOptions[][3] = +{ + CMAKE_STANDARD_OPTIONS_TABLE, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationSeeAlso[][3] = +{ + {0, "cmake", 0}, + {0, "ctest", 0}, + {0, 0, 0} +}; + +cmCursesForm* cmCursesForm::CurrentForm=0; + +extern "C" +{ + +void onsig(int) +{ + if (cmCursesForm::CurrentForm) + { + endwin(); + initscr(); /* Initialization */ + noecho(); /* Echo off */ + cbreak(); /* nl- or cr not needed */ + keypad(stdscr,TRUE); /* Use key symbols as + KEY_DOWN*/ + refresh(); + int x,y; + getmaxyx(stdscr, y, x); + cmCursesForm::CurrentForm->Render(1,1,x,y); + cmCursesForm::CurrentForm->UpdateStatusBar(); + } + signal(SIGWINCH, onsig); +} + +} + +void CMakeErrorHandler(const char* message, const char* title, bool&, void* clientData) +{ + cmCursesForm* self = static_cast( clientData ); + self->AddError(message, title); +} + +int main(int argc, char** argv) +{ + cmSystemTools::FindExecutableDirectory(argv[0]); + cmDocumentation doc; + doc.addCMakeStandardDocSections(); + if(doc.CheckOptions(argc, argv)) + { + cmake hcm; + std::vector commands; + std::vector compatCommands; + std::vector generators; + hcm.GetCommandDocumentation(commands, true, false); + hcm.GetCommandDocumentation(compatCommands, false, true); + hcm.GetGeneratorDocumentation(generators); + doc.SetName("ccmake"); + doc.SetSection("Name",cmDocumentationName); + doc.SetSection("Usage",cmDocumentationUsage); + doc.SetSection("Description",cmDocumentationDescription); + doc.SetSection("Generators",generators); + doc.PrependSection("Options",cmDocumentationOptions); + doc.SetSection("Command",commands); + doc.SetSection("Compatibility Commands",compatCommands); + doc.SetSeeAlsoList(cmDocumentationSeeAlso); + return doc.PrintRequestedDocumentation(std::cout)? 0:1; + } + + bool debug = false; + unsigned int i; + int j; + std::vector args; + for(j =0; j < argc; ++j) + { + if(strcmp(argv[j], "-debug") == 0) + { + debug = true; + } + else + { + args.push_back(argv[j]); + } + } + + std::string cacheDir = cmSystemTools::GetCurrentWorkingDirectory(); + for(i=1; i < args.size(); ++i) + { + std::string arg = args[i]; + if(arg.find("-B",0) == 0) + { + cacheDir = arg.substr(2); + } + } + + cmSystemTools::DisableRunCommandOutput(); + + if (debug) + { + cmCursesForm::DebugStart(); + } + + initscr(); /* Initialization */ + noecho(); /* Echo off */ + cbreak(); /* nl- or cr not needed */ + keypad(stdscr,TRUE); /* Use key symbols as + KEY_DOWN*/ + + signal(SIGWINCH, onsig); + + int x,y; + getmaxyx(stdscr, y, x); + if ( x < cmCursesMainForm::MIN_WIDTH || + y < cmCursesMainForm::MIN_HEIGHT ) + { + endwin(); + std::cerr << "Window is too small. A size of at least " + << cmCursesMainForm::MIN_WIDTH << " x " + << cmCursesMainForm::MIN_HEIGHT + << " is required to run ccmake." << std::endl; + return 1; + } + + + cmCursesMainForm* myform; + + myform = new cmCursesMainForm(args, x); + if(myform->LoadCache(cacheDir.c_str())) + { + curses_clear(); + touchwin(stdscr); + endwin(); + delete myform; + std::cerr << "Error running cmake::LoadCache(). Aborting.\n"; + return 1; + } + + cmSystemTools::SetErrorCallback(CMakeErrorHandler, myform); + + cmCursesForm::CurrentForm = myform; + + myform->InitializeUI(); + if ( myform->Configure(1) == 0 ) + { + myform->Render(1, 1, x, y); + myform->HandleInput(); + } + + // Need to clean-up better + curses_clear(); + touchwin(stdscr); + endwin(); + delete cmCursesForm::CurrentForm; + cmCursesForm::CurrentForm = 0; + + std::cout << std::endl << std::endl; + + return 0; + +} diff --git a/Source/CursesDialog/cmCursesBoolWidget.cxx b/Source/CursesDialog/cmCursesBoolWidget.cxx new file mode 100644 index 0000000..9c4c5a5 --- /dev/null +++ b/Source/CursesDialog/cmCursesBoolWidget.cxx @@ -0,0 +1,74 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCursesBoolWidget.h" +#include "cmCursesMainForm.h" + +cmCursesBoolWidget::cmCursesBoolWidget(int width, int height, + int left, int top) : + cmCursesWidget(width, height, left, top) +{ + this->Type = cmCacheManager::BOOL; + set_field_fore(this->Field, A_NORMAL); + set_field_back(this->Field, A_STANDOUT); + field_opts_off(this->Field, O_STATIC); + this->SetValueAsBool(false); +} + +bool cmCursesBoolWidget::HandleInput(int& key, cmCursesMainForm*, WINDOW* w) +{ + + // 10 == enter + if (key == 10 || key == KEY_ENTER) + { + if (this->GetValueAsBool()) + { + this->SetValueAsBool(false); + } + else + { + this->SetValueAsBool(true); + } + + touchwin(w); + wrefresh(w); + return true; + } + else + { + return false; + } + +} + +void cmCursesBoolWidget::SetValueAsBool(bool value) +{ + if (value) + { + this->SetValue("ON"); + } + else + { + this->SetValue("OFF"); + } +} + +bool cmCursesBoolWidget::GetValueAsBool() +{ + if (this->Value == "ON") + { + return true; + } + else + { + return false; + } +} diff --git a/Source/CursesDialog/cmCursesBoolWidget.h b/Source/CursesDialog/cmCursesBoolWidget.h new file mode 100644 index 0000000..0d1d6a6 --- /dev/null +++ b/Source/CursesDialog/cmCursesBoolWidget.h @@ -0,0 +1,40 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesBoolWidget_h +#define __cmCursesBoolWidget_h + +#include "cmCursesWidget.h" +class cmCursesMainForm; + +class cmCursesBoolWidget : public cmCursesWidget +{ +public: + cmCursesBoolWidget(int width, int height, int left, int top); + + // Description: + // Handle user input. Called by the container of this widget + // when this widget has focus. Returns true if the input was + // handled. + virtual bool HandleInput(int& key, cmCursesMainForm* fm, WINDOW* w); + + // Description: + // Set/Get the value (on/off). + void SetValueAsBool(bool value); + bool GetValueAsBool(); + +protected: + cmCursesBoolWidget(const cmCursesBoolWidget& from); + void operator=(const cmCursesBoolWidget&); + +}; + +#endif // __cmCursesBoolWidget_h diff --git a/Source/CursesDialog/cmCursesCacheEntryComposite.cxx b/Source/CursesDialog/cmCursesCacheEntryComposite.cxx new file mode 100644 index 0000000..828384d --- /dev/null +++ b/Source/CursesDialog/cmCursesCacheEntryComposite.cxx @@ -0,0 +1,103 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCursesCacheEntryComposite.h" +#include "cmCursesStringWidget.h" +#include "cmCursesLabelWidget.h" +#include "cmCursesBoolWidget.h" +#include "cmCursesPathWidget.h" +#include "cmCursesFilePathWidget.h" +#include "cmCursesDummyWidget.h" +#include "../cmSystemTools.h" + +cmCursesCacheEntryComposite::cmCursesCacheEntryComposite(const char* key, + int labelwidth, + int entrywidth) : + Key(key), LabelWidth(labelwidth), EntryWidth(entrywidth) +{ + this->Label = new cmCursesLabelWidget(this->LabelWidth, 1, 1, 1, key); + this->IsNewLabel = new cmCursesLabelWidget(1, 1, 1, 1, " "); + this->Entry = 0; + this->Entry = new cmCursesStringWidget(this->EntryWidth, 1, 1, 1); +} + +cmCursesCacheEntryComposite::cmCursesCacheEntryComposite( + const char* key, const cmCacheManager::CacheIterator& it, bool isNew, + int labelwidth, int entrywidth) + : Key(key), LabelWidth(labelwidth), EntryWidth(entrywidth) +{ + this->Label = new cmCursesLabelWidget(this->LabelWidth, 1, 1, 1, key); + if (isNew) + { + this->IsNewLabel = new cmCursesLabelWidget(1, 1, 1, 1, "*"); + } + else + { + this->IsNewLabel = new cmCursesLabelWidget(1, 1, 1, 1, " "); + } + + this->Entry = 0; + switch ( it.GetType() ) + { + case cmCacheManager::BOOL: + this->Entry = new cmCursesBoolWidget(this->EntryWidth, 1, 1, 1); + if (cmSystemTools::IsOn(it.GetValue())) + { + static_cast(this->Entry)->SetValueAsBool(true); + } + else + { + static_cast(this->Entry)->SetValueAsBool(false); + } + break; + case cmCacheManager::PATH: + this->Entry = new cmCursesPathWidget(this->EntryWidth, 1, 1, 1); + static_cast(this->Entry)->SetString( + it.GetValue()); + break; + case cmCacheManager::FILEPATH: + this->Entry = new cmCursesFilePathWidget(this->EntryWidth, 1, 1, 1); + static_cast(this->Entry)->SetString( + it.GetValue()); + break; + case cmCacheManager::STRING: + this->Entry = new cmCursesStringWidget(this->EntryWidth, 1, 1, 1); + static_cast(this->Entry)->SetString( + it.GetValue()); + break; + case cmCacheManager::UNINITIALIZED: + cmSystemTools::Error("Found an undefined variable: ", it.GetName()); + break; + default: + // TODO : put warning message here + break; + } + +} + +cmCursesCacheEntryComposite::~cmCursesCacheEntryComposite() +{ + delete this->Label; + delete this->IsNewLabel; + delete this->Entry; +} + +const char* cmCursesCacheEntryComposite::GetValue() +{ + if (this->Label) + { + return this->Label->GetValue(); + } + else + { + return 0; + } +} diff --git a/Source/CursesDialog/cmCursesCacheEntryComposite.h b/Source/CursesDialog/cmCursesCacheEntryComposite.h new file mode 100644 index 0000000..a40ea28 --- /dev/null +++ b/Source/CursesDialog/cmCursesCacheEntryComposite.h @@ -0,0 +1,42 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesCacheEntryComposite_h +#define __cmCursesCacheEntryComposite_h + +#include "../cmCacheManager.h" +#include "cmCursesLabelWidget.h" + +class cmCursesCacheEntryComposite +{ +public: + cmCursesCacheEntryComposite(const char* key, int labelwidth, int entrywidth); + cmCursesCacheEntryComposite(const char* key, + const cmCacheManager::CacheIterator& it, + bool isNew, int labelwidth, int entrywidth); + ~cmCursesCacheEntryComposite(); + const char* GetValue(); + + friend class cmCursesMainForm; + +protected: + cmCursesCacheEntryComposite(const cmCursesCacheEntryComposite& from); + void operator=(const cmCursesCacheEntryComposite&); + + cmCursesLabelWidget* Label; + cmCursesLabelWidget* IsNewLabel; + cmCursesWidget* Entry; + std::string Key; + int LabelWidth; + int EntryWidth; +}; + +#endif // __cmCursesCacheEntryComposite_h diff --git a/Source/CursesDialog/cmCursesDummyWidget.cxx b/Source/CursesDialog/cmCursesDummyWidget.cxx new file mode 100644 index 0000000..1d8a45d --- /dev/null +++ b/Source/CursesDialog/cmCursesDummyWidget.cxx @@ -0,0 +1,26 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCursesDummyWidget.h" + +cmCursesDummyWidget::cmCursesDummyWidget(int width, int height, + int left, int top) : + cmCursesWidget(width, height, left, top) +{ + this->Type = cmCacheManager::INTERNAL; +} + + +bool cmCursesDummyWidget::HandleInput(int&, cmCursesMainForm*, WINDOW* ) +{ + return false; +} + diff --git a/Source/CursesDialog/cmCursesDummyWidget.h b/Source/CursesDialog/cmCursesDummyWidget.h new file mode 100644 index 0000000..cc4cc74 --- /dev/null +++ b/Source/CursesDialog/cmCursesDummyWidget.h @@ -0,0 +1,36 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesDummyWidget_h +#define __cmCursesDummyWidget_h + +#include "cmCursesWidget.h" + +class cmCursesMainForm; + +class cmCursesDummyWidget : public cmCursesWidget +{ +public: + cmCursesDummyWidget(int width, int height, int left, int top); + + // Description: + // Handle user input. Called by the container of this widget + // when this widget has focus. Returns true if the input was + // handled. + virtual bool HandleInput(int& key, cmCursesMainForm* fm, WINDOW* w); + +protected: + cmCursesDummyWidget(const cmCursesDummyWidget& from); + void operator=(const cmCursesDummyWidget&); + +}; + +#endif // __cmCursesDummyWidget_h diff --git a/Source/CursesDialog/cmCursesFilePathWidget.cxx b/Source/CursesDialog/cmCursesFilePathWidget.cxx new file mode 100644 index 0000000..13bbcc9 --- /dev/null +++ b/Source/CursesDialog/cmCursesFilePathWidget.cxx @@ -0,0 +1,20 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCursesFilePathWidget.h" + +cmCursesFilePathWidget::cmCursesFilePathWidget(int width, int height, + int left, int top) : + cmCursesPathWidget(width, height, left, top) +{ + this->Type = cmCacheManager::FILEPATH; +} + diff --git a/Source/CursesDialog/cmCursesFilePathWidget.h b/Source/CursesDialog/cmCursesFilePathWidget.h new file mode 100644 index 0000000..9d2972e --- /dev/null +++ b/Source/CursesDialog/cmCursesFilePathWidget.h @@ -0,0 +1,28 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesFilePathWidget_h +#define __cmCursesFilePathWidget_h + +#include "cmCursesPathWidget.h" + +class cmCursesFilePathWidget : public cmCursesPathWidget +{ +public: + cmCursesFilePathWidget(int width, int height, int left, int top); + +protected: + cmCursesFilePathWidget(const cmCursesFilePathWidget& from); + void operator=(const cmCursesFilePathWidget&); + +}; + +#endif // __cmCursesFilePathWidget_h diff --git a/Source/CursesDialog/cmCursesForm.cxx b/Source/CursesDialog/cmCursesForm.cxx new file mode 100644 index 0000000..72ae5ee --- /dev/null +++ b/Source/CursesDialog/cmCursesForm.cxx @@ -0,0 +1,57 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCursesForm.h" + +std::ofstream cmCursesForm::DebugFile; +bool cmCursesForm::Debug = false; + +cmCursesForm::cmCursesForm() +{ + this->Form = 0; +} + +cmCursesForm::~cmCursesForm() +{ + if (this->Form) + { + unpost_form(this->Form); + free_form(this->Form); + this->Form = 0; + } +} + +void cmCursesForm::DebugStart() +{ + cmCursesForm::Debug = true; + cmCursesForm::DebugFile.open("ccmakelog.txt"); +} + +void cmCursesForm::DebugEnd() +{ + if (!cmCursesForm::Debug) + { + return; + } + + cmCursesForm::Debug = false; + cmCursesForm::DebugFile.close(); +} + +void cmCursesForm::LogMessage(const char* msg) +{ + if (!cmCursesForm::Debug) + { + return; + } + + cmCursesForm::DebugFile << msg << std::endl; +} diff --git a/Source/CursesDialog/cmCursesForm.h b/Source/CursesDialog/cmCursesForm.h new file mode 100644 index 0000000..7556d74 --- /dev/null +++ b/Source/CursesDialog/cmCursesForm.h @@ -0,0 +1,75 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesForm_h +#define __cmCursesForm_h + +#include "../cmStandardIncludes.h" +#include "cmCursesStandardIncludes.h" + +class cmCursesForm +{ +public: + cmCursesForm(); + virtual ~cmCursesForm(); + + // Description: + // Handle user input. + virtual void HandleInput() = 0; + + // Description: + // Display form. + virtual void Render(int left, int top, int width, int height) = 0; + + // Description: + // This method should normally called only by the form. + // The only exception is during a resize. + virtual void UpdateStatusBar() = 0; + + // Description: + // During a CMake run, an error handle should add errors + // to be displayed afterwards. + virtual void AddError(const char*, const char*) {} + + // Description: + // Turn debugging on. This will create ccmakelog.txt. + static void DebugStart(); + + // Description: + // Turn debugging off. This will close ccmakelog.txt. + static void DebugEnd(); + + // Description: + // Write a debugging message. + static void LogMessage(const char* msg); + + // Description: + // Return the FORM. Should be only used by low-level methods. + FORM* GetForm() + { + return this->Form; + } + + static cmCursesForm* CurrentForm; + + +protected: + + static std::ofstream DebugFile; + static bool Debug; + + cmCursesForm(const cmCursesForm& form); + void operator=(const cmCursesForm&); + + FORM* Form; +}; + +#endif // __cmCursesForm_h diff --git a/Source/CursesDialog/cmCursesLabelWidget.cxx b/Source/CursesDialog/cmCursesLabelWidget.cxx new file mode 100644 index 0000000..2ad4813 --- /dev/null +++ b/Source/CursesDialog/cmCursesLabelWidget.cxx @@ -0,0 +1,33 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCursesLabelWidget.h" + +cmCursesLabelWidget::cmCursesLabelWidget(int width, int height, + int left, int top, + const std::string& name) : + cmCursesWidget(width, height, left, top) +{ + field_opts_off(this->Field, O_EDIT); + field_opts_off(this->Field, O_ACTIVE); + field_opts_off(this->Field, O_STATIC); + this->SetValue(name.c_str()); +} + +cmCursesLabelWidget::~cmCursesLabelWidget() +{ +} + +bool cmCursesLabelWidget::HandleInput(int&, cmCursesMainForm*, WINDOW* ) +{ + // Static text. No input is handled here. + return false; +} diff --git a/Source/CursesDialog/cmCursesLabelWidget.h b/Source/CursesDialog/cmCursesLabelWidget.h new file mode 100644 index 0000000..bbcc586 --- /dev/null +++ b/Source/CursesDialog/cmCursesLabelWidget.h @@ -0,0 +1,38 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesLabelWidget_h +#define __cmCursesLabelWidget_h + +#include "cmCursesWidget.h" +#include "cmCursesStandardIncludes.h" + +class cmCursesMainForm; + +class cmCursesLabelWidget : public cmCursesWidget +{ +public: + cmCursesLabelWidget(int width, int height, int left, int top, + const std::string& name); + virtual ~cmCursesLabelWidget(); + + // Description: + // Handle user input. Called by the container of this widget + // when this widget has focus. Returns true if the input was + // handled + virtual bool HandleInput(int& key, cmCursesMainForm* fm, WINDOW* w); + +protected: + cmCursesLabelWidget(const cmCursesLabelWidget& from); + void operator=(const cmCursesLabelWidget&); +}; + +#endif // __cmCursesLabelWidget_h diff --git a/Source/CursesDialog/cmCursesLongMessageForm.cxx b/Source/CursesDialog/cmCursesLongMessageForm.cxx new file mode 100644 index 0000000..0e2cd22 --- /dev/null +++ b/Source/CursesDialog/cmCursesLongMessageForm.cxx @@ -0,0 +1,207 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "../cmCacheManager.h" +#include "../cmSystemTools.h" +#include "../cmake.h" +#include "../cmVersion.h" +#include "cmCursesLongMessageForm.h" +#include "cmCursesMainForm.h" + +inline int ctrl(int z) +{ + return (z&037); +} + +cmCursesLongMessageForm::cmCursesLongMessageForm(std::vector + const& messages, const char* + title) +{ + // Append all messages into on big string + std::vector::const_iterator it; + for(it=messages.begin(); it != messages.end(); it++) + { + this->Messages += (*it); + // Add one blank line after each message + this->Messages += "\n\n"; + } + this->Title = title; + this->Fields[0] = 0; + this->Fields[1] = 0; +} + +cmCursesLongMessageForm::~cmCursesLongMessageForm() +{ + if (this->Fields[0]) + { + free_field(this->Fields[0]); + } +} + + +void cmCursesLongMessageForm::UpdateStatusBar() +{ + int x,y; + getmaxyx(stdscr, y, x); + + char bar[cmCursesMainForm::MAX_WIDTH]; + size_t size = strlen(this->Title.c_str()); + if ( size >= cmCursesMainForm::MAX_WIDTH ) + { + size = cmCursesMainForm::MAX_WIDTH-1; + } + strncpy(bar, this->Title.c_str(), size); + for(size_t i=size-1; iForm); +} + +void cmCursesLongMessageForm::PrintKeys() +{ + int x,y; + getmaxyx(stdscr, y, x); + if ( x < cmCursesMainForm::MIN_WIDTH || + y < cmCursesMainForm::MIN_HEIGHT ) + { + return; + } + char firstLine[512]; + sprintf(firstLine, "Press [e] to exit help"); + + curses_move(y-2,0); + printw(firstLine); + pos_form_cursor(this->Form); + +} + +void cmCursesLongMessageForm::Render(int, int, int, int) +{ + int x,y; + getmaxyx(stdscr, y, x); + + if (this->Form) + { + unpost_form(this->Form); + free_form(this->Form); + this->Form = 0; + } + + const char* msg = this->Messages.c_str(); + + curses_clear(); + + if (this->Fields[0]) + { + free_field(this->Fields[0]); + this->Fields[0] = 0; + } + + this->Fields[0] = new_field(y-6, x-2, 1, 1, 0, 0); + + field_opts_off(this->Fields[0], O_STATIC); + + this->Form = new_form(this->Fields); + post_form(this->Form); + + int i=0; + form_driver(this->Form, REQ_BEG_FIELD); + while(msg[i] != '\0' && i < 60000) + { + if (msg[i] == '\n' && msg[i+1] != '\0') + { + form_driver(this->Form, REQ_NEW_LINE); + } + else + { + form_driver(this->Form, msg[i]); + } + i++; + } + form_driver(this->Form, REQ_BEG_FIELD); + + this->UpdateStatusBar(); + this->PrintKeys(); + touchwin(stdscr); + refresh(); + +} + +void cmCursesLongMessageForm::HandleInput() +{ + if (!this->Form) + { + return; + } + + char debugMessage[128]; + + for(;;) + { + int key = getch(); + + sprintf(debugMessage, "Message widget handling input, key: %d", key); + cmCursesForm::LogMessage(debugMessage); + + // quit + if ( key == 'o' || key == 'e' ) + { + break; + } + else if ( key == KEY_DOWN || key == ctrl('n') ) + { + form_driver(this->Form, REQ_SCR_FLINE); + } + else if ( key == KEY_UP || key == ctrl('p') ) + { + form_driver(this->Form, REQ_SCR_BLINE); + } + else if ( key == KEY_NPAGE || key == ctrl('d') ) + { + form_driver(this->Form, REQ_SCR_FPAGE); + } + else if ( key == KEY_PPAGE || key == ctrl('u') ) + { + form_driver(this->Form, REQ_SCR_BPAGE); + } + + this->UpdateStatusBar(); + this->PrintKeys(); + touchwin(stdscr); + wrefresh(stdscr); + } + +} diff --git a/Source/CursesDialog/cmCursesLongMessageForm.h b/Source/CursesDialog/cmCursesLongMessageForm.h new file mode 100644 index 0000000..341f9c6 --- /dev/null +++ b/Source/CursesDialog/cmCursesLongMessageForm.h @@ -0,0 +1,58 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesLongMessageForm_h +#define __cmCursesLongMessageForm_h + +#include "../cmStandardIncludes.h" +#include "cmCursesForm.h" +#include "cmCursesStandardIncludes.h" + +class cmCursesCacheEntryComposite; + +class cmCursesLongMessageForm : public cmCursesForm +{ +public: + cmCursesLongMessageForm(std::vector const& messages, + const char* title); + virtual ~cmCursesLongMessageForm(); + + // Description: + // Handle user input. + virtual void HandleInput(); + + // Description: + // Display form. Use a window of size width x height, starting + // at top, left. + virtual void Render(int left, int top, int width, int height); + + // Description: + // This method should normally called only by the form. + // The only exception is during a resize. + void PrintKeys(); + + // Description: + // This method should normally called only by the form. + // The only exception is during a resize. + virtual void UpdateStatusBar(); + +protected: + cmCursesLongMessageForm(const cmCursesLongMessageForm& from); + void operator=(const cmCursesLongMessageForm&); + + std::string Messages; + std::string Title; + + FIELD* Fields[2]; + +}; + +#endif // __cmCursesLongMessageForm_h diff --git a/Source/CursesDialog/cmCursesMainForm.cxx b/Source/CursesDialog/cmCursesMainForm.cxx new file mode 100644 index 0000000..4fee0bb --- /dev/null +++ b/Source/CursesDialog/cmCursesMainForm.cxx @@ -0,0 +1,1303 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "../cmCacheManager.h" +#include "../cmSystemTools.h" +#include "../cmVersion.h" +#include "../cmake.h" +#include "cmCursesMainForm.h" +#include "cmCursesStringWidget.h" +#include "cmCursesLabelWidget.h" +#include "cmCursesBoolWidget.h" +#include "cmCursesPathWidget.h" +#include "cmCursesFilePathWidget.h" +#include "cmCursesDummyWidget.h" +#include "cmCursesCacheEntryComposite.h" +#include "cmCursesLongMessageForm.h" + + +inline int ctrl(int z) +{ + return (z&037); +} + +cmCursesMainForm::cmCursesMainForm(std::vector const& args, + int initWidth) : + Args(args), InitialWidth(initWidth) +{ + this->NumberOfPages = 0; + this->Fields = 0; + this->Entries = 0; + this->AdvancedMode = false; + this->NumberOfVisibleEntries = 0; + this->OkToGenerate = false; + this->HelpMessage.push_back("Welcome to ccmake, curses based user interface for CMake."); + this->HelpMessage.push_back(""); + this->HelpMessage.push_back(s_ConstHelpMessage); + this->CMakeInstance = new cmake; + this->CMakeInstance->SetCMakeEditCommand("ccmake"); + + // create the arguments for the cmake object + std::string whereCMake = cmSystemTools::GetProgramPath(this->Args[0].c_str()); + whereCMake += "/cmake"; + this->Args[0] = whereCMake; + this->CMakeInstance->SetArgs(this->Args); + this->CMakeInstance->SetCMakeCommand(whereCMake.c_str()); + this->SearchString = ""; + this->OldSearchString = ""; + this->SearchMode = false; +} + +cmCursesMainForm::~cmCursesMainForm() +{ + if (this->Form) + { + unpost_form(this->Form); + free_form(this->Form); + this->Form = 0; + } + delete[] this->Fields; + + // Clean-up composites + if (this->Entries) + { + std::vector::iterator it; + for (it = this->Entries->begin(); it != this->Entries->end(); ++it) + { + delete *it; + } + } + delete this->Entries; + if (this->CMakeInstance) + { + delete this->CMakeInstance; + this->CMakeInstance = 0; + } +} + +// See if a cache entry is in the list of entries in the ui. +bool cmCursesMainForm::LookForCacheEntry(const char* key) +{ + if (!key || !this->Entries) + { + return false; + } + + std::vector::iterator it; + for (it = this->Entries->begin(); it != this->Entries->end(); ++it) + { + if (!strcmp(key, (*it)->Key.c_str())) + { + return true; + } + } + + return false; +} + +// Create new cmCursesCacheEntryComposite entries from the cache +void cmCursesMainForm::InitializeUI() +{ + // Create a vector of cmCursesCacheEntryComposite's + // which contain labels, entries and new entry markers + std::vector* newEntries = + new std::vector; + newEntries->reserve(this->CMakeInstance->GetCacheManager()->GetSize()); + + // Count non-internal and non-static entries + int count=0; + for(cmCacheManager::CacheIterator i = + this->CMakeInstance->GetCacheManager()->NewIterator(); + !i.IsAtEnd(); i.Next()) + { + if ( i.GetType() != cmCacheManager::INTERNAL && + i.GetType() != cmCacheManager::STATIC && + i.GetType() != cmCacheManager::UNINITIALIZED) + { + ++count; + } + } + + int entrywidth = this->InitialWidth - 35; + + cmCursesCacheEntryComposite* comp; + if ( count == 0 ) + { + // If cache is empty, display a label saying so and a + // dummy entry widget (does not respond to input) + comp = new cmCursesCacheEntryComposite("EMPTY CACHE", 30, 30); + comp->Entry = new cmCursesDummyWidget(1, 1, 1, 1); + newEntries->push_back(comp); + } + else + { + // Create the composites. + + // First add entries which are new + for(cmCacheManager::CacheIterator i = + this->CMakeInstance->GetCacheManager()->NewIterator(); + !i.IsAtEnd(); i.Next()) + { + const char* key = i.GetName(); + if ( i.GetType() == cmCacheManager::INTERNAL || + i.GetType() == cmCacheManager::STATIC || + i.GetType() == cmCacheManager::UNINITIALIZED ) + { + continue; + } + + if (!this->LookForCacheEntry(key)) + { + newEntries->push_back(new cmCursesCacheEntryComposite(key, i, + true, 30, + entrywidth)); + this->OkToGenerate = false; + } + } + + // then add entries which are old + for(cmCacheManager::CacheIterator i = + this->CMakeInstance->GetCacheManager()->NewIterator(); + !i.IsAtEnd(); i.Next()) + { + const char* key = i.GetName(); + if ( i.GetType() == cmCacheManager::INTERNAL || + i.GetType() == cmCacheManager::STATIC || + i.GetType() == cmCacheManager::UNINITIALIZED ) + { + continue; + } + + if (this->LookForCacheEntry(key)) + { + newEntries->push_back(new cmCursesCacheEntryComposite(key, i, + false, 30, + entrywidth)); + } + } + } + + // Clean old entries + if (this->Entries) + { + // Have to call delete on each pointer + std::vector::iterator it; + for (it = this->Entries->begin(); it != this->Entries->end(); ++it) + { + delete *it; + } + } + delete this->Entries; + this->Entries = newEntries; + + // Compute fields from composites + this->RePost(); +} + + +void cmCursesMainForm::RePost() +{ + // Create the fields to be passed to the form. + if (this->Form) + { + unpost_form(this->Form); + free_form(this->Form); + this->Form = 0; + } + delete[] this->Fields; + if (this->AdvancedMode) + { + this->NumberOfVisibleEntries = this->Entries->size(); + } + else + { + // If normal mode, count only non-advanced entries + this->NumberOfVisibleEntries = 0; + std::vector::iterator it; + for (it = this->Entries->begin(); it != this->Entries->end(); ++it) + { + cmCacheManager::CacheIterator mit = + this->CMakeInstance->GetCacheManager()->GetCacheIterator((*it)->GetValue()); + if (mit.IsAtEnd() || + (!this->AdvancedMode && mit.GetPropertyAsBool("ADVANCED"))) + { + continue; + } + this->NumberOfVisibleEntries++; + } + } + // there is always one even if it is the dummy one + if(this->NumberOfVisibleEntries == 0) + { + this->NumberOfVisibleEntries = 1; + } + // Assign the fields: 3 for each entry: label, new entry marker + // ('*' or ' ') and entry widget + this->Fields = new FIELD*[3*this->NumberOfVisibleEntries+1]; + size_t cc; + for ( cc = 0; cc < 3 * this->NumberOfVisibleEntries+1; cc ++ ) + { + this->Fields[cc] = 0; + } + + // Assign fields + int j=0; + std::vector::iterator it; + for (it = this->Entries->begin(); it != this->Entries->end(); ++it) + { + cmCacheManager::CacheIterator mit = + this->CMakeInstance->GetCacheManager()->GetCacheIterator((*it)->GetValue()); + if (mit.IsAtEnd() || + (!this->AdvancedMode && mit.GetPropertyAsBool("ADVANCED"))) + { + continue; + } + this->Fields[3*j] = (*it)->Label->Field; + this->Fields[3*j+1] = (*it)->IsNewLabel->Field; + this->Fields[3*j+2] = (*it)->Entry->Field; + j++; + } + // if no cache entries there should still be one dummy field + if(j == 0) + { + it = this->Entries->begin(); + this->Fields[0] = (*it)->Label->Field; + this->Fields[1] = (*it)->IsNewLabel->Field; + this->Fields[2] = (*it)->Entry->Field; + this->NumberOfVisibleEntries = 1; + } + // Has to be null terminated. + this->Fields[3*this->NumberOfVisibleEntries] = 0; +} + +void cmCursesMainForm::Render(int left, int top, int width, int height) +{ + + if (this->Form) + { + FIELD* currentField = current_field(this->Form); + cmCursesWidget* cw = reinterpret_cast + (field_userptr(currentField)); + // If in edit mode, get out of it + if ( cw->GetType() == cmCacheManager::STRING || + cw->GetType() == cmCacheManager::PATH || + cw->GetType() == cmCacheManager::FILEPATH ) + { + cmCursesStringWidget* sw = static_cast(cw); + sw->SetInEdit(false); + } + // Delete the previous form + unpost_form(this->Form); + free_form(this->Form); + this->Form = 0; + } + + // Wrong window size + if ( width < cmCursesMainForm::MIN_WIDTH || + width < this->InitialWidth || + height < cmCursesMainForm::MIN_HEIGHT ) + { + return; + } + + // Leave room for toolbar + height -= 7; + + if (this->AdvancedMode) + { + this->NumberOfVisibleEntries = this->Entries->size(); + } + else + { + // If normal, display only non-advanced entries + this->NumberOfVisibleEntries = 0; + std::vector::iterator it; + for (it = this->Entries->begin(); it != this->Entries->end(); ++it) + { + cmCacheManager::CacheIterator mit = + this->CMakeInstance->GetCacheManager()->GetCacheIterator((*it)->GetValue()); + if (mit.IsAtEnd() || + (!this->AdvancedMode && mit.GetPropertyAsBool("ADVANCED"))) + { + continue; + } + this->NumberOfVisibleEntries++; + } + } + + // Re-adjust the fields according to their place + this->NumberOfPages = 1; + if (height > 0) + { + bool isNewPage; + int i=0; + std::vector::iterator it; + for (it = this->Entries->begin(); it != this->Entries->end(); ++it) + { + cmCacheManager::CacheIterator mit = + this->CMakeInstance->GetCacheManager()->GetCacheIterator((*it)->GetValue()); + if (mit.IsAtEnd() || + (!this->AdvancedMode && mit.GetPropertyAsBool("ADVANCED"))) + { + continue; + } + int row = (i % height) + 1; + int page = (i / height) + 1; + isNewPage = ( page > 1 ) && ( row == 1 ); + + if (isNewPage) + { + this->NumberOfPages++; + } + (*it)->Label->Move(left, top+row-1, isNewPage); + (*it)->IsNewLabel->Move(left+32, top+row-1, false); + (*it)->Entry->Move(left+33, top+row-1, false); + (*it)->Entry->SetPage(this->NumberOfPages); + i++; + } + } + + // Post the form + this->Form = new_form(this->Fields); + post_form(this->Form); + // Update toolbar + this->UpdateStatusBar(); + this->PrintKeys(); + + touchwin(stdscr); + refresh(); +} + +void cmCursesMainForm::PrintKeys(int process /* = 0 */) +{ + int x,y; + getmaxyx(stdscr, y, x); + if ( x < cmCursesMainForm::MIN_WIDTH || + x < this->InitialWidth || + y < cmCursesMainForm::MIN_HEIGHT ) + { + return; + } + + // Give the current widget (if it exists), a chance to print keys + cmCursesWidget* cw = 0; + if (this->Form) + { + FIELD* currentField = current_field(this->Form); + cw = reinterpret_cast(field_userptr(currentField)); + } + + if (cw) + { + cw->PrintKeys(); + } + +// { +// } +// else +// { + char firstLine[512]=""; + char secondLine[512]=""; + char thirdLine[512]=""; + if (process) + { + const char* clearLine = + " "; + strcpy(firstLine, clearLine); + strcpy(secondLine, clearLine); + strcpy(thirdLine, clearLine); + } + else + { + if (this->OkToGenerate) + { + sprintf(firstLine, + "Press [c] to configure Press [g] to generate and exit"); + } + else + { + sprintf(firstLine, "Press [c] to configure "); + } + { + const char* toggleKeyInstruction = + "Press [t] to toggle advanced mode (Currently %s)"; + sprintf(thirdLine, + toggleKeyInstruction, + this->AdvancedMode ? "On" : "Off"); + } + sprintf(secondLine, + "Press [h] for help " + "Press [q] to quit without generating"); + } + + curses_move(y-4,0); + char fmt[512] = "Press [enter] to edit option"; + if ( process ) + { + strcpy(fmt, " "); + } + printw(fmt); + curses_move(y-3,0); + printw(firstLine); + curses_move(y-2,0); + printw(secondLine); + curses_move(y-1,0); + printw(thirdLine); + + if (cw) + { + sprintf(firstLine, "Page %d of %d", cw->GetPage(), this->NumberOfPages); + curses_move(0,65-static_cast(strlen(firstLine))-1); + printw(firstLine); + } +// } + + pos_form_cursor(this->Form); + +} + +// Print the key of the current entry and the CMake version +// on the status bar. Designed for a width of 80 chars. +void cmCursesMainForm::UpdateStatusBar(const char* message) +{ + int x,y; + getmaxyx(stdscr, y, x); + // If window size is too small, display error and return + if ( x < cmCursesMainForm::MIN_WIDTH || + x < this->InitialWidth || + y < cmCursesMainForm::MIN_HEIGHT ) + { + curses_clear(); + curses_move(0,0); + char fmt[] = "Window is too small. A size of at least %dx%d is required."; + printw(fmt, + (cmCursesMainForm::MIN_WIDTH < this->InitialWidth ? + this->InitialWidth : cmCursesMainForm::MIN_WIDTH), + cmCursesMainForm::MIN_HEIGHT); + touchwin(stdscr); + wrefresh(stdscr); + return; + } + + // Get the key of the current entry + FIELD* cur = current_field(this->Form); + int findex = field_index(cur); + cmCursesWidget* lbl = 0; + if ( findex >= 0 ) + { + lbl = reinterpret_cast(field_userptr(this->Fields[findex-2])); + } + char help[128] = ""; + const char* curField = ""; + if ( lbl ) + { + curField = lbl->GetValue(); + + // Get the help string of the current entry + // and add it to the help string + cmCacheManager::CacheIterator it = + this->CMakeInstance->GetCacheManager()->GetCacheIterator(curField); + if (!it.IsAtEnd()) + { + const char* hs = it.GetProperty("HELPSTRING"); + if ( hs ) + { + strncpy(help, hs, 127); + help[127] = '\0'; + } + else + { + help[0] = 0; + } + } + else + { + sprintf(help," "); + } + } + + // Join the key, help string and pad with spaces + // (or truncate) as necessary + char bar[cmCursesMainForm::MAX_WIDTH]; + size_t i, curFieldLen = strlen(curField); + size_t helpLen = strlen(help); + + size_t width; + if (x < cmCursesMainForm::MAX_WIDTH ) + { + width = x; + } + else + { + width = cmCursesMainForm::MAX_WIDTH; + } + + if ( message ) + { + curField = message; + curFieldLen = strlen(message); + if ( curFieldLen < width ) + { + strcpy(bar, curField); + for(i=curFieldLen; i < width; ++i) + { + bar[i] = ' '; + } + } + else + { + strncpy(bar, curField, width); + } + } + else + { + if (curFieldLen >= width) + { + strncpy(bar, curField, width); + } + else + { + strcpy(bar, curField); + bar[curFieldLen] = ':'; + bar[curFieldLen+1] = ' '; + if (curFieldLen + helpLen + 2 >= width) + { + strncpy(bar+curFieldLen+2, help, width + - curFieldLen - 2); + } + else + { + strcpy(bar+curFieldLen+2, help); + for(i=curFieldLen+helpLen+2; i < width; ++i) + { + bar[i] = ' '; + } + } + } + } + + + bar[width] = '\0'; + + + // Display CMake version info on the next line + // We want to display this on the right + char version[cmCursesMainForm::MAX_WIDTH]; + char vertmp[128]; + sprintf(vertmp,"CMake Version %s", cmVersion::GetCMakeVersion()); + size_t sideSpace = (width-strlen(vertmp)); + for(i=0; iForm); +} + +void cmCursesMainForm::UpdateProgress(const char *msg, float prog, void* vp) +{ + cmCursesMainForm* cm = static_cast(vp); + if ( !cm ) + { + return; + } + char tmp[1024]; + const char *cmsg = tmp; + if ( prog >= 0 ) + { + sprintf(tmp, "%s %i%%",msg,(int)(100*prog)); + } + else + { + cmsg = msg; + } + cm->UpdateStatusBar(cmsg); + cm->PrintKeys(1); + curses_move(1,1); + touchwin(stdscr); + refresh(); +} + +int cmCursesMainForm::Configure(int noconfigure) +{ + int xi,yi; + getmaxyx(stdscr, yi, xi); + + curses_move(1,1); + this->UpdateStatusBar("Configuring, please wait..."); + this->PrintKeys(1); + touchwin(stdscr); + refresh(); + this->CMakeInstance->SetProgressCallback(cmCursesMainForm::UpdateProgress, this); + + // always save the current gui values to disk + this->FillCacheManagerFromUI(); + this->CMakeInstance->GetCacheManager()->SaveCache( + this->CMakeInstance->GetHomeOutputDirectory()); + this->LoadCache(0); + + // Get rid of previous errors + this->Errors = std::vector(); + + // run the generate process + this->OkToGenerate = true; + int retVal; + if ( noconfigure ) + { + retVal = this->CMakeInstance->DoPreConfigureChecks(); + this->OkToGenerate = false; + if ( retVal > 0 ) + { + retVal = 0; + } + } + else + { + retVal = this->CMakeInstance->Configure(); + } + this->CMakeInstance->SetProgressCallback(0, 0); + + keypad(stdscr,TRUE); /* Use key symbols as + KEY_DOWN*/ + + if( retVal != 0 || !this->Errors.empty()) + { + // see if there was an error + if(cmSystemTools::GetErrorOccuredFlag()) + { + this->OkToGenerate = false; + } + int xx,yy; + getmaxyx(stdscr, yy, xx); + cmCursesLongMessageForm* msgs = new cmCursesLongMessageForm( + this->Errors, + cmSystemTools::GetErrorOccuredFlag() + ? "Errors occurred during the last pass." : + "CMake produced the following output."); + // reset error condition + cmSystemTools::ResetErrorOccuredFlag(); + CurrentForm = msgs; + msgs->Render(1,1,xx,yy); + msgs->HandleInput(); + // If they typed the wrong source directory, we report + // an error and exit + if ( retVal == -2 ) + { + return retVal; + } + CurrentForm = this; + this->Render(1,1,xx,yy); + } + + this->InitializeUI(); + this->Render(1, 1, xi, yi); + + return 0; +} + +int cmCursesMainForm::Generate() +{ + int xi,yi; + getmaxyx(stdscr, yi, xi); + + curses_move(1,1); + this->UpdateStatusBar("Generating, please wait..."); + this->PrintKeys(1); + touchwin(stdscr); + refresh(); + this->CMakeInstance->SetProgressCallback(cmCursesMainForm::UpdateProgress, this); + + // Get rid of previous errors + this->Errors = std::vector(); + + // run the generate process + int retVal = this->CMakeInstance->Generate(); + + this->CMakeInstance->SetProgressCallback(0, 0); + keypad(stdscr,TRUE); /* Use key symbols as + KEY_DOWN*/ + + if( retVal != 0 || !this->Errors.empty()) + { + // see if there was an error + if(cmSystemTools::GetErrorOccuredFlag()) + { + this->OkToGenerate = false; + } + // reset error condition + cmSystemTools::ResetErrorOccuredFlag(); + int xx,yy; + getmaxyx(stdscr, yy, xx); + const char* title = "Messages during last pass."; + if(cmSystemTools::GetErrorOccuredFlag()) + { + title = "Errors occurred during the last pass."; + } + cmCursesLongMessageForm* msgs = new cmCursesLongMessageForm(this->Errors, + title); + CurrentForm = msgs; + msgs->Render(1,1,xx,yy); + msgs->HandleInput(); + // If they typed the wrong source directory, we report + // an error and exit + if ( retVal == -2 ) + { + return retVal; + } + CurrentForm = this; + this->Render(1,1,xx,yy); + } + + this->InitializeUI(); + this->Render(1, 1, xi, yi); + + return 0; +} + +void cmCursesMainForm::AddError(const char* message, const char*) +{ + this->Errors.push_back(message); +} + +void cmCursesMainForm::RemoveEntry(const char* value) +{ + if (!value) + { + return; + } + + std::vector::iterator it; + for (it = this->Entries->begin(); it != this->Entries->end(); ++it) + { + const char* val = (*it)->GetValue(); + if ( val && !strcmp(value, val) ) + { + this->CMakeInstance->UnwatchUnusedCli(value); + this->Entries->erase(it); + break; + } + } +} + +// copy from the list box to the cache manager +void cmCursesMainForm::FillCacheManagerFromUI() +{ + size_t size = this->Entries->size(); + for(size_t i=0; i < size; i++) + { + cmCacheManager::CacheIterator it = + this->CMakeInstance->GetCacheManager()->GetCacheIterator( + (*this->Entries)[i]->Key.c_str()); + if (!it.IsAtEnd()) + { + std::string oldValue = it.GetValue(); + std::string newValue = (*this->Entries)[i]->Entry->GetValue(); + std::string fixedOldValue; + std::string fixedNewValue; + this->FixValue(it.GetType(), oldValue, fixedOldValue); + this->FixValue(it.GetType(), newValue, fixedNewValue); + + if(!(fixedOldValue == fixedNewValue)) + { + // The user has changed the value. Mark it as modified. + it.SetProperty("MODIFIED", true); + it.SetValue(fixedNewValue.c_str()); + } + } + } +} + +void cmCursesMainForm::FixValue(cmCacheManager::CacheEntryType type, + const std::string& in, std::string& out) const +{ + out = in.substr(0,in.find_last_not_of(" ")+1); + if(type == cmCacheManager::PATH || type == cmCacheManager::FILEPATH) + { + cmSystemTools::ConvertToUnixSlashes(out); + } + if(type == cmCacheManager::BOOL) + { + if(cmSystemTools::IsOff(out.c_str())) + { + out = "OFF"; + } + else + { + out = "ON"; + } + } +} + +#include + +void cmCursesMainForm::HandleInput() +{ + int x=0,y=0; + + if (!this->Form) + { + return; + } + + FIELD* currentField; + cmCursesWidget* currentWidget; + + char debugMessage[128]; + + for(;;) + { + this->UpdateStatusBar(); + this->PrintKeys(); + if ( this->SearchMode ) + { + std::string searchstr = "Search: " + this->SearchString; + this->UpdateStatusBar( searchstr.c_str() ); + this->PrintKeys(1); + curses_move(y-5,static_cast(searchstr.size())); + //curses_move(1,1); + touchwin(stdscr); + refresh(); + } + int key = getch(); + + getmaxyx(stdscr, y, x); + // If window too small, handle 'q' only + if ( x < cmCursesMainForm::MIN_WIDTH || + y < cmCursesMainForm::MIN_HEIGHT ) + { + // quit + if ( key == 'q' ) + { + break; + } + else + { + continue; + } + } + + currentField = current_field(this->Form); + currentWidget = reinterpret_cast(field_userptr( + currentField)); + + bool widgetHandled=false; + + if ( this->SearchMode ) + { + if ( key == 10 || key == KEY_ENTER ) + { + this->SearchMode = false; + if ( this->SearchString.size() > 0 ) + { + this->JumpToCacheEntry(this->SearchString.c_str()); + this->OldSearchString = this->SearchString; + } + this->SearchString = ""; + } + /* + else if ( key == KEY_ESCAPE ) + { + this->SearchMode = false; + } + */ + else if ((key >= 'a' && key <= 'z') || + (key >= 'A' && key <= 'Z') || + (key >= '0' && key <= '9') || + (key == '_' )) + { + if ( this->SearchString.size() < static_cast(x-10) ) + { + this->SearchString += static_cast(key); + } + } + else if ( key == ctrl('h') || key == KEY_BACKSPACE || key == KEY_DC ) + { + if ( this->SearchString.size() > 0 ) + { + this->SearchString.resize(this->SearchString.size()-1); + } + } + } + else if (currentWidget && !this->SearchMode) + { + // Ask the current widget if it wants to handle input + widgetHandled = currentWidget->HandleInput(key, this, stdscr); + if (widgetHandled) + { + this->OkToGenerate = false; + this->UpdateStatusBar(); + this->PrintKeys(); + } + } + if ((!currentWidget || !widgetHandled) && !this->SearchMode) + { + // If the current widget does not want to handle input, + // we handle it. + sprintf(debugMessage, "Main form handling input, key: %d", key); + cmCursesForm::LogMessage(debugMessage); + // quit + if ( key == 'q' ) + { + break; + } + // if not end of page, next field otherwise next page + // each entry consists of fields: label, isnew, value + // therefore, the label field for the prev. entry is index-5 + // and the label field for the next entry is index+1 + // (index always corresponds to the value field) + else if ( key == KEY_DOWN || key == ctrl('n') ) + { + FIELD* cur = current_field(this->Form); + size_t findex = field_index(cur); + if ( findex == 3*this->NumberOfVisibleEntries-1 ) + { + continue; + } + if (new_page(this->Fields[findex+1])) + { + form_driver(this->Form, REQ_NEXT_PAGE); + } + else + { + form_driver(this->Form, REQ_NEXT_FIELD); + } + } + // if not beginning of page, previous field, otherwise previous page + // each entry consists of fields: label, isnew, value + // therefore, the label field for the prev. entry is index-5 + // and the label field for the next entry is index+1 + // (index always corresponds to the value field) + else if ( key == KEY_UP || key == ctrl('p') ) + { + FIELD* cur = current_field(this->Form); + int findex = field_index(cur); + if ( findex == 2 ) + { + continue; + } + if ( new_page(this->Fields[findex-2]) ) + { + form_driver(this->Form, REQ_PREV_PAGE); + set_current_field(this->Form, this->Fields[findex-3]); + } + else + { + form_driver(this->Form, REQ_PREV_FIELD); + } + } + // pg down + else if ( key == KEY_NPAGE || key == ctrl('d') ) + { + form_driver(this->Form, REQ_NEXT_PAGE); + } + // pg up + else if ( key == KEY_PPAGE || key == ctrl('u') ) + { + form_driver(this->Form, REQ_PREV_PAGE); + } + // configure + else if ( key == 'c' ) + { + this->Configure(); + } + // display help + else if ( key == 'h' ) + { + getmaxyx(stdscr, y, x); + + FIELD* cur = current_field(this->Form); + int findex = field_index(cur); + cmCursesWidget* lbl = reinterpret_cast(field_userptr( + this->Fields[findex-2])); + const char* curField = lbl->GetValue(); + const char* helpString=0; + cmCacheManager::CacheIterator it = + this->CMakeInstance->GetCacheManager()->GetCacheIterator(curField); + if (!it.IsAtEnd()) + { + helpString = it.GetProperty("HELPSTRING"); + } + if (helpString) + { + char* message = new char[strlen(curField)+strlen(helpString) + +strlen("Current option is: \n Help string for this option is: \n")+10]; + sprintf(message,"Current option is: %s\nHelp string for this option is: %s\n", curField, helpString); + this->HelpMessage[1] = message; + delete[] message; + } + else + { + this->HelpMessage[1] = ""; + } + + cmCursesLongMessageForm* msgs = new cmCursesLongMessageForm(this->HelpMessage, + "Help."); + CurrentForm = msgs; + msgs->Render(1,1,x,y); + msgs->HandleInput(); + CurrentForm = this; + this->Render(1,1,x,y); + set_current_field(this->Form, cur); + } + // display last errors + else if ( key == 'l' ) + { + getmaxyx(stdscr, y, x); + cmCursesLongMessageForm* msgs = new cmCursesLongMessageForm(this->Errors, + "Errors occurred during the last pass."); + CurrentForm = msgs; + msgs->Render(1,1,x,y); + msgs->HandleInput(); + CurrentForm = this; + this->Render(1,1,x,y); + } + else if ( key == '/' ) + { + this->SearchMode = true; + this->UpdateStatusBar("Search"); + this->PrintKeys(1); + touchwin(stdscr); + refresh(); + } + else if ( key == 'n' ) + { + if ( this->OldSearchString.size() > 0 ) + { + this->JumpToCacheEntry(this->OldSearchString.c_str()); + } + } + // switch advanced on/off + else if ( key == 't' ) + { + if (this->AdvancedMode) + { + this->AdvancedMode = false; + } + else + { + this->AdvancedMode = true; + } + getmaxyx(stdscr, y, x); + this->RePost(); + this->Render(1, 1, x, y); + } + // generate and exit + else if ( key == 'g' ) + { + if ( this->OkToGenerate ) + { + this->Generate(); + break; + } + } + // delete cache entry + else if ( key == 'd' && this->NumberOfVisibleEntries ) + { + this->OkToGenerate = false; + FIELD* cur = current_field(this->Form); + size_t findex = field_index(cur); + + // make the next or prev. current field after deletion + // each entry consists of fields: label, isnew, value + // therefore, the label field for the prev. entry is findex-5 + // and the label field for the next entry is findex+1 + // (findex always corresponds to the value field) + FIELD* nextCur; + if ( findex == 2 ) + { + nextCur=0; + } + else if ( findex == 3*this->NumberOfVisibleEntries-1 ) + { + nextCur = this->Fields[findex-5]; + } + else + { + nextCur = this->Fields[findex+1]; + } + + // Get the label widget + // each entry consists of fields: label, isnew, value + // therefore, the label field for the is findex-2 + // (findex always corresponds to the value field) + cmCursesWidget* lbl + = reinterpret_cast( + field_userptr(this->Fields[findex-2])); + if ( lbl ) + { + this->CMakeInstance->GetCacheManager()->RemoveCacheEntry(lbl->GetValue()); + + std::string nextVal; + if (nextCur) + { + nextVal = (reinterpret_cast(field_userptr(nextCur))->GetValue()); + } + + getmaxyx(stdscr, y, x); + this->RemoveEntry(lbl->GetValue()); + this->RePost(); + this->Render(1, 1, x, y); + + if (nextCur) + { + // make the next or prev. current field after deletion + nextCur = 0; + std::vector::iterator it; + for (it = this->Entries->begin(); it != this->Entries->end(); ++it) + { + if (nextVal == (*it)->Key) + { + nextCur = (*it)->Entry->Field; + } + } + + if (nextCur) + { + set_current_field(this->Form, nextCur); + } + } + } + } + } + + touchwin(stdscr); + wrefresh(stdscr); + } +} + +int cmCursesMainForm::LoadCache(const char *) + +{ + int r = this->CMakeInstance->LoadCache(); + if(r < 0) + { + return r; + } + this->CMakeInstance->SetCacheArgs(this->Args); + this->CMakeInstance->PreLoadCMakeFiles(); + return r; +} + +void cmCursesMainForm::JumpToCacheEntry(const char* astr) +{ + std::string str; + if ( astr ) + { + str = cmSystemTools::LowerCase(astr); + } + + if(str.empty()) + { + return; + } + FIELD* cur = current_field(this->Form); + int start_index = field_index(cur); + int findex = start_index; + for(;;) + { + if ( str.size() > 0 ) + { + cmCursesWidget* lbl = 0; + if ( findex >= 0 ) + { + lbl = reinterpret_cast(field_userptr(this->Fields[findex-2])); + } + if ( lbl ) + { + const char* curField = lbl->GetValue(); + if ( curField ) + { + std::string cfld = cmSystemTools::LowerCase(curField); + if ( cfld.find(str) != cfld.npos && findex != start_index ) + { + break; + } + } + } + } + if ( size_t(findex) >= 3* this->NumberOfVisibleEntries-1 ) + { + set_current_field(this->Form, this->Fields[2]); + } + else if (new_page(this->Fields[findex+1])) + { + form_driver(this->Form, REQ_NEXT_PAGE); + } + else + { + form_driver(this->Form, REQ_NEXT_FIELD); + } + /* + char buffer[1024]; + sprintf(buffer, "Line: %d != %d / %d\n", findex, idx, this->NumberOfVisibleEntries); + touchwin(stdscr); + refresh(); + this->UpdateStatusBar( buffer ); + usleep(100000); + */ + cur = current_field(this->Form); + findex = field_index(cur); + if ( findex == start_index ) + { + break; + } + } +} + + +const char* cmCursesMainForm::s_ConstHelpMessage = +"CMake is used to configure and generate build files for software projects. " +"The basic steps for configuring a project with ccmake are as follows:\n\n" +"1. Run ccmake in the directory where you want the object and executable files to be placed (build directory). If the source directory is not the same as this build directory, you have to specify it as an argument on the command line.\n\n" +"2. When ccmake is run, it will read the configuration files and display the current build options. " +"If you have run CMake before and have updated the configuration files since then, any new entries will be displayed on top and will be marked with a *. " +"On the other hand, the first time you run ccmake, all build options will be new and will be marked as such. " +"At this point, you can modify any options (see keys below) you want to change. " +"When you are satisfied with your changes, press 'c' to have CMake process the configuration files. " +"Please note that changing some options may cause new ones to appear. These will be shown on top and will be marked with *. " +"Repeat this procedure until you are satisfied with all the options and there are no new entries. " +"At this point, a new command will appear: G)enerate and Exit. You can now hit 'g' to have CMake generate all the build files (i.e. makefiles or project files) and exit. " +"At any point during the process, you can exit ccmake with 'q'. However, this will not generate/change any build files.\n\n" +"ccmake KEYS:\n\n" +"Navigation: " +"You can use the arrow keys and page up, down to navigate the options. Alternatively, you can use the following keys: \n" +" C-n : next option\n" +" C-p : previous options\n" +" C-d : down one page\n" +" C-u : up one page\n\n" +"Editing options: " +"To change an option press enter or return. If the current options is a boolean, this will toggle it's value. " +"Otherwise, ccmake will enter edit mode. In this mode you can edit an option using arrow keys and backspace. Alternatively, you can use the following keys:\n" +" C-b : back one character\n" +" C-f : forward one character\n" +" C-a : go to the beginning of the field\n" +" C-e : go to the end of the field\n" +" C-d : delete previous character\n" +" C-k : kill the rest of the field\n" +" Esc : Restore field (discard last changes)\n" +" Enter : Leave edit mode\n" +"You can also delete an option by pressing 'd'\n\n" +"Commands:\n" +" q : quit ccmake without generating build files\n" +" h : help, shows this screen\n" +" c : process the configuration files with the current options\n" +" g : generate build files and exit, only available when there are no " +"new options and no errors have been detected during last configuration.\n" +" l : shows last errors\n" +" t : toggles advanced mode. In normal mode, only the most important options are shown. In advanced mode, all options are shown. We recommend using normal mode unless you are an expert.\n" +" / : search for a variable name.\n"; diff --git a/Source/CursesDialog/cmCursesMainForm.h b/Source/CursesDialog/cmCursesMainForm.h new file mode 100644 index 0000000..3e191b4 --- /dev/null +++ b/Source/CursesDialog/cmCursesMainForm.h @@ -0,0 +1,164 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesMainForm_h +#define __cmCursesMainForm_h + +#include "../cmStandardIncludes.h" +#include "cmCursesForm.h" +#include "cmCursesStandardIncludes.h" + +class cmCursesCacheEntryComposite; +class cmCursesWidget; +class cmake; + +/** \class cmCursesMainForm + * \brief The main page of ccmake + * + * cmCursesMainForm is the main page of ccmake. + */ +class cmCursesMainForm : public cmCursesForm +{ +public: + cmCursesMainForm(std::vector const& args, int initwidth); + virtual ~cmCursesMainForm(); + + /** + * Set the widgets which represent the cache entries. + */ + void InitializeUI(); + + /** + * Handle user input. + */ + virtual void HandleInput(); + + /** + * Display form. Use a window of size width x height, starting + * at top, left. + */ + virtual void Render(int left, int top, int width, int height); + + /** + * Returns true if an entry with the given key is in the + * list of current composites. + */ + bool LookForCacheEntry(const char* key); + + enum { + MIN_WIDTH = 65, + MIN_HEIGHT = 6, + IDEAL_WIDTH = 80, + MAX_WIDTH = 512 + }; + + /** + * This method should normally be called only by the form. The only + * exception is during a resize. The optional argument specifies the + * string to be displayed in the status bar. + */ + virtual void UpdateStatusBar() { this->UpdateStatusBar(0); } + virtual void UpdateStatusBar(const char* message); + + /** + * Display current commands and their keys on the toolbar. This + * method should normally called only by the form. The only + * exception is during a resize. If the optional argument process is + * specified and is either 1 (configure) or 2 (generate), then keys + * will be displayed accordingly. + */ + void PrintKeys(int process = 0); + + /** + * During a CMake run, an error handle should add errors + * to be displayed afterwards. + */ + virtual void AddError(const char* message, const char* title); + + /** + * Used to do a configure. If argument is specified, it does only the check + * and not configure. + */ + int Configure(int noconfigure=0); + + /** + * Used to generate + */ + int Generate(); + + /** + * Used by main program + */ + int LoadCache(const char *dir); + + /** + * Progress callback + */ + static void UpdateProgressOld(const char *msg, float prog, void*); + static void UpdateProgress(const char *msg, float prog, void*); + +protected: + cmCursesMainForm(const cmCursesMainForm& from); + void operator=(const cmCursesMainForm&); + + // Copy the cache values from the user interface to the actual + // cache. + void FillCacheManagerFromUI(); + // Fix formatting of values to a consistent form. + void FixValue(cmCacheManager::CacheEntryType type, + const std::string& in, std::string& out) const; + // Re-post the existing fields. Used to toggle between + // normal and advanced modes. Render() should be called + // afterwards. + void RePost(); + // Remove an entry from the interface and the cache. + void RemoveEntry(const char* value); + + // Jump to the cache entry whose name matches the string. + void JumpToCacheEntry(const char* str); + + // Copies of cache entries stored in the user interface + std::vector* Entries; + // Errors produced during last run of cmake + std::vector Errors; + // Command line argumens to be passed to cmake each time + // it is run + std::vector Args; + // Message displayed when user presses 'h' + // It is: Welcome + info about current entry + common help + std::vector HelpMessage; + + // Common help + static const char* s_ConstHelpMessage; + + // Fields displayed. Includes labels, new entry markers, entries + FIELD** Fields; + // Where is source of current project + std::string WhereSource; + // Where is cmake executable + std::string WhereCMake; + // Number of entries shown (depends on mode -normal or advanced-) + size_t NumberOfVisibleEntries; + bool AdvancedMode; + // Did the iteration converge (no new entries) ? + bool OkToGenerate; + // Number of pages displayed + int NumberOfPages; + + int InitialWidth; + cmake *CMakeInstance; + + std::string SearchString; + std::string OldSearchString; + bool SearchMode; +}; + +#endif // __cmCursesMainForm_h diff --git a/Source/CursesDialog/cmCursesPathWidget.cxx b/Source/CursesDialog/cmCursesPathWidget.cxx new file mode 100644 index 0000000..b113c2e --- /dev/null +++ b/Source/CursesDialog/cmCursesPathWidget.cxx @@ -0,0 +1,94 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCursesPathWidget.h" + +#include "cmCursesMainForm.h" +#include "cmSystemTools.h" + +cmCursesPathWidget::cmCursesPathWidget(int width, int height, + int left, int top) : + cmCursesStringWidget(width, height, left, top) +{ + this->Type = cmCacheManager::PATH; + this->Cycle = false; + this->CurrentIndex = 0; +} + +void cmCursesPathWidget::OnType(int& key, cmCursesMainForm* fm, WINDOW* w) +{ + this->Cycle = false; + this->CurrentIndex = 0; + this->LastGlob = ""; + this->cmCursesStringWidget::OnType(key, fm, w); +} + +void cmCursesPathWidget::OnTab(cmCursesMainForm* fm, WINDOW* w) +{ + if ( !this->GetString() ) + { + return; + } + FORM* form = fm->GetForm(); + form_driver(form, REQ_NEXT_FIELD); + form_driver(form, REQ_PREV_FIELD); + std::string cstr = this->GetString(); + cstr = cstr.substr(0, cstr.find_last_not_of(" \t\n\r")+1); + if ( this->LastString != cstr ) + { + this->Cycle = false; + this->CurrentIndex = 0; + this->LastGlob = ""; + } + std::string glob; + if ( this->Cycle ) + { + glob = this->LastGlob; + } + else + { + glob = cstr + "*"; + } + std::vector dirs; + + cmSystemTools::SimpleGlob(glob.c_str(), dirs, (this->Type == cmCacheManager::PATH?-1:0)); + if ( this->CurrentIndex < dirs.size() ) + { + cstr = dirs[this->CurrentIndex]; + } + if ( cstr[cstr.size()-1] == '*' ) + { + cstr = cstr.substr(0, cstr.size()-1); + } + + if ( cmSystemTools::FileIsDirectory(cstr.c_str()) ) + { + cstr += "/"; + } + + this->SetString(cstr.c_str()); + touchwin(w); + wrefresh(w); + form_driver(form, REQ_END_FIELD); + this->LastGlob = glob; + this->LastString = cstr; + this->Cycle = true; + this->CurrentIndex ++; + if ( this->CurrentIndex >= dirs.size() ) + { + this->CurrentIndex = 0; + } +} + +void cmCursesPathWidget::OnReturn(cmCursesMainForm* fm, WINDOW* w) +{ + this->cmCursesStringWidget::OnReturn(fm, w); +} diff --git a/Source/CursesDialog/cmCursesPathWidget.h b/Source/CursesDialog/cmCursesPathWidget.h new file mode 100644 index 0000000..45c22a3 --- /dev/null +++ b/Source/CursesDialog/cmCursesPathWidget.h @@ -0,0 +1,40 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesPathWidget_h +#define __cmCursesPathWidget_h + +#include "cmCursesStringWidget.h" + +class cmCursesPathWidget : public cmCursesStringWidget +{ +public: + cmCursesPathWidget(int width, int height, int left, int top); + + /** + * This method is called when different keys are pressed. The + * subclass can have a special implementation handler for this. + */ + virtual void OnTab(cmCursesMainForm* fm, WINDOW* w); + virtual void OnReturn(cmCursesMainForm* fm, WINDOW* w); + virtual void OnType(int& key, cmCursesMainForm* fm, WINDOW* w); + +protected: + cmCursesPathWidget(const cmCursesPathWidget& from); + void operator=(const cmCursesPathWidget&); + + std::string LastString; + std::string LastGlob; + bool Cycle; + std::string::size_type CurrentIndex; +}; + +#endif // __cmCursesPathWidget_h diff --git a/Source/CursesDialog/cmCursesStandardIncludes.h b/Source/CursesDialog/cmCursesStandardIncludes.h new file mode 100644 index 0000000..b157a28 --- /dev/null +++ b/Source/CursesDialog/cmCursesStandardIncludes.h @@ -0,0 +1,83 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCursesStandardIncludes_h +#define cmCursesStandardIncludes_h +#if defined(__sun__) && defined(__GNUC__) + #define _MSE_INT_H +#endif + +#include + +#if defined(__hpux) +# define _BOOL_DEFINED +# include +# define _XOPEN_SOURCE_EXTENDED +# include +# include +# undef _XOPEN_SOURCE_EXTENDED +#else +/* figure out which curses.h to include */ +# if defined(CURSES_HAVE_NCURSES_H) +# include +# elif defined(CURSES_HAVE_NCURSES_NCURSES_H) +# include +# elif defined(CURSES_HAVE_NCURSES_CURSES_H) +# include +# else +# include +# endif + +# include +#endif + +// This is a hack to prevent warnings about these functions being +// declared but not referenced. +#if defined(__sgi) && !defined(__GNUC__) +class cmCursesStandardIncludesHack +{ +public: + enum + { + Ref1 = sizeof(cfgetospeed(0)), + Ref2 = sizeof(cfgetispeed(0)), + Ref3 = sizeof(tcgetattr(0, 0)), + Ref4 = sizeof(tcsetattr(0, 0, 0)), + Ref5 = sizeof(cfsetospeed(0,0)), + Ref6 = sizeof(cfsetispeed(0,0)) + }; +}; +#endif + +#ifndef getmaxyx + #define getmaxyx(w,y,x) ((y) = getmaxy(w), (x) = getmaxx(w)) +#endif + + +// on some machines move erase and clear conflict with stl +// so remove them from the namespace +inline void curses_move(unsigned int x, unsigned int y) +{ + move(x,y); +} + +inline void curses_clear() +{ + erase(); + clearok(stdscr, TRUE); +} + +#undef move +#undef erase +#undef clear + + +#endif // cmCursesStandardIncludes_h diff --git a/Source/CursesDialog/cmCursesStringWidget.cxx b/Source/CursesDialog/cmCursesStringWidget.cxx new file mode 100644 index 0000000..d363f00 --- /dev/null +++ b/Source/CursesDialog/cmCursesStringWidget.cxx @@ -0,0 +1,249 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCursesStringWidget.h" +#include "cmCursesMainForm.h" + +inline int ctrl(int z) +{ + return (z&037); +} + +cmCursesStringWidget::cmCursesStringWidget(int width, int height, + int left, int top) : + cmCursesWidget(width, height, left, top) +{ + this->InEdit = false; + this->Type = cmCacheManager::STRING; + set_field_fore(this->Field, A_NORMAL); + set_field_back(this->Field, A_STANDOUT); + field_opts_off(this->Field, O_STATIC); +} + +void cmCursesStringWidget::OnTab(cmCursesMainForm*, WINDOW*) +{ + //FORM* form = fm->GetForm(); +} + +void cmCursesStringWidget::OnReturn(cmCursesMainForm* fm, WINDOW*) +{ + FORM* form = fm->GetForm(); + if (this->InEdit) + { + cmCursesForm::LogMessage("String widget leaving edit."); + this->InEdit = false; + fm->PrintKeys(); + delete[] this->OriginalString; + // trick to force forms to update the field buffer + form_driver(form, REQ_NEXT_FIELD); + form_driver(form, REQ_PREV_FIELD); + this->Done = true; + } + else + { + cmCursesForm::LogMessage("String widget entering edit."); + this->InEdit = true; + fm->PrintKeys(); + char* buf = field_buffer(this->Field, 0); + this->OriginalString = new char[strlen(buf)+1]; + strcpy(this->OriginalString, buf); + } +} + +void cmCursesStringWidget::OnType(int& key, cmCursesMainForm* fm, WINDOW*) +{ + form_driver(fm->GetForm(), key); +} + +bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm, + WINDOW* w) +{ + int x,y; + + FORM* form = fm->GetForm(); + // 10 == enter + if (!this->InEdit && ( key != 10 && key != KEY_ENTER ) ) + { + return false; + } + + this->OriginalString=0; + this->Done = false; + + char debugMessage[128]; + + // is used to change edit mode (like in vi). + while(!this->Done) + { + sprintf(debugMessage, "String widget handling input, key: %d", key); + cmCursesForm::LogMessage(debugMessage); + + fm->PrintKeys(); + + getmaxyx(stdscr, y, x); + // If window too small, handle 'q' only + if ( x < cmCursesMainForm::MIN_WIDTH || + y < cmCursesMainForm::MIN_HEIGHT ) + { + // quit + if ( key == 'q' ) + { + return false; + } + else + { + key=getch(); + continue; + } + } + + // If resize occured during edit, move out of edit mode + if (!this->InEdit && ( key != 10 && key != KEY_ENTER ) ) + { + return false; + } + // 10 == enter + if (key == 10 || key == KEY_ENTER) + { + this->OnReturn(fm, w); + } + else if ( key == KEY_DOWN || key == ctrl('n') || + key == KEY_UP || key == ctrl('p') || + key == KEY_NPAGE || key == ctrl('d') || + key == KEY_PPAGE || key == ctrl('u')) + { + this->InEdit = false; + delete[] this->OriginalString; + // trick to force forms to update the field buffer + form_driver(form, REQ_NEXT_FIELD); + form_driver(form, REQ_PREV_FIELD); + return false; + } + // esc + else if (key == 27) + { + if (this->InEdit) + { + this->InEdit = false; + fm->PrintKeys(); + this->SetString(this->OriginalString); + delete[] this->OriginalString; + touchwin(w); + wrefresh(w); + return true; + } + } + else if ( key == 9 ) + { + this->OnTab(fm, w); + } + else if ( key == KEY_LEFT || key == ctrl('b') ) + { + form_driver(form, REQ_PREV_CHAR); + } + else if ( key == KEY_RIGHT || key == ctrl('f') ) + { + form_driver(form, REQ_NEXT_CHAR); + } + else if ( key == ctrl('k') ) + { + form_driver(form, REQ_CLR_EOL); + } + else if ( key == ctrl('a') || key == KEY_HOME ) + { + form_driver(form, REQ_BEG_FIELD); + } + else if ( key == ctrl('e') || key == KEY_END ) + { + form_driver(form, REQ_END_FIELD); + } + else if ( key == 127 || + key == KEY_BACKSPACE ) + { + if ( form->curcol > 0 ) + { + form_driver(form, REQ_DEL_PREV); + } + } + else if ( key == ctrl('d') ||key == KEY_DC ) + { + if ( form->curcol > 0 ) + { + form_driver(form, REQ_DEL_CHAR); + } + } + else + { + this->OnType(key, fm, w); + } + if ( !this->Done ) + { + touchwin(w); + wrefresh(w); + + key=getch(); + } + } + return true; +} + +void cmCursesStringWidget::SetString(const char* value) +{ + this->SetValue(value); +} + +const char* cmCursesStringWidget::GetString() +{ + return this->GetValue(); +} + +const char* cmCursesStringWidget::GetValue() +{ + return field_buffer(this->Field, 0); +} + +bool cmCursesStringWidget::PrintKeys() +{ + int x,y; + getmaxyx(stdscr, y, x); + if ( x < cmCursesMainForm::MIN_WIDTH || + y < cmCursesMainForm::MIN_HEIGHT ) + { + return false; + } + if (this->InEdit) + { + char firstLine[512]; + // Clean the toolbar + for(int i=0; i<512; i++) + { + firstLine[i] = ' '; + } + firstLine[511] = '\0'; + curses_move(y-4,0); + printw(firstLine); + curses_move(y-3,0); + printw(firstLine); + curses_move(y-2,0); + printw(firstLine); + curses_move(y-1,0); + printw(firstLine); + + sprintf(firstLine, "Editing option, press [enter] to leave edit."); + curses_move(y-3,0); + printw(firstLine); + return true; + } + else + { + return false; + } +} diff --git a/Source/CursesDialog/cmCursesStringWidget.h b/Source/CursesDialog/cmCursesStringWidget.h new file mode 100644 index 0000000..cd54f24 --- /dev/null +++ b/Source/CursesDialog/cmCursesStringWidget.h @@ -0,0 +1,76 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesStringWidget_h +#define __cmCursesStringWidget_h + +#include "cmCursesWidget.h" + +class cmCursesMainForm; + +/** \class cmCursesStringWidget + * \brief A simple entry widget. + * + * cmCursesStringWdiget is a simple text entry widget. + */ + +class cmCursesStringWidget : public cmCursesWidget +{ +public: + cmCursesStringWidget(int width, int height, int left, int top); + + /** + * Handle user input. Called by the container of this widget + * when this widget has focus. Returns true if the input was + * handled. + */ + virtual bool HandleInput(int& key, cmCursesMainForm* fm, WINDOW* w); + + /** + * Set/Get the string. + */ + void SetString(const char* value); + const char* GetString(); + virtual const char* GetValue(); + + /** + * Set/Get InEdit flag. Can be used to tell the widget to leave + * edit mode (in case of a resize for example). + */ + void SetInEdit(bool inedit) { this->InEdit = inedit; } + bool GetInEdit() { return this->InEdit; } + + /** + * This method is called when different keys are pressed. The + * subclass can have a special implementation handler for this. + */ + virtual void OnTab(cmCursesMainForm* fm, WINDOW* w); + virtual void OnReturn(cmCursesMainForm* fm, WINDOW* w); + virtual void OnType(int& key, cmCursesMainForm* fm, WINDOW* w); + + /** + * If there are any, print the widget specific commands + * in the toolbar and return true. Otherwise, return false + * and the parent widget will print. + */ + virtual bool PrintKeys(); + +protected: + cmCursesStringWidget(const cmCursesStringWidget& from); + void operator=(const cmCursesStringWidget&); + + // true if the widget is in edit mode + bool InEdit; + char* OriginalString; + bool Done; +}; + +#endif // __cmCursesStringWidget_h diff --git a/Source/CursesDialog/cmCursesWidget.cxx b/Source/CursesDialog/cmCursesWidget.cxx new file mode 100644 index 0000000..5dffcaa --- /dev/null +++ b/Source/CursesDialog/cmCursesWidget.cxx @@ -0,0 +1,58 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCursesWidget.h" + +cmCursesWidget::cmCursesWidget(int width, int height, int left, int top) +{ + this->Field = new_field(height, width, top, left, 0, 0); + set_field_userptr(this->Field, reinterpret_cast(this)); + field_opts_off(this->Field, O_AUTOSKIP); + this->Page = 0; +} + +cmCursesWidget::~cmCursesWidget() +{ + if (this->Field) + { + free_field(this->Field); + this->Field = 0; + } +} + +void cmCursesWidget::Move(int x, int y, bool isNewPage) +{ + if (!this->Field) + { + return; + } + + move_field(this->Field, y, x); + if (isNewPage) + { + set_new_page(this->Field, TRUE); + } + else + { + set_new_page(this->Field, FALSE); + } +} + +void cmCursesWidget::SetValue(const char* value) +{ + this->Value = value; + set_field_buffer(this->Field, 0, value); +} + +const char* cmCursesWidget::GetValue() +{ + return this->Value.c_str(); +} diff --git a/Source/CursesDialog/cmCursesWidget.h b/Source/CursesDialog/cmCursesWidget.h new file mode 100644 index 0000000..ee36af6 --- /dev/null +++ b/Source/CursesDialog/cmCursesWidget.h @@ -0,0 +1,87 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef __cmCursesWidget_h +#define __cmCursesWidget_h + +#include "../cmCacheManager.h" +#include "cmCursesStandardIncludes.h" + +class cmCursesMainForm; + +class cmCursesWidget +{ +public: + cmCursesWidget(int width, int height, int left, int top); + virtual ~cmCursesWidget(); + + /** + * Handle user input. Called by the container of this widget + * when this widget has focus. Returns true if the input was + * handled + */ + virtual bool HandleInput(int& key, cmCursesMainForm* fm, WINDOW* w) = 0; + + /** + * Change the position of the widget. Set isNewPage to true + * if this widget marks the beginning of a new page. + */ + virtual void Move(int x, int y, bool isNewPage); + + /** + * Set/Get the value (setting the value also changes the contents + * of the field buffer). + */ + virtual void SetValue(const char* value); + virtual const char* GetValue(); + + /** + * Get the type of the widget (STRING, PATH etc...) + */ + cmCacheManager::CacheEntryType GetType() + { return this->Type; } + + /** + * If there are any, print the widget specific commands + * in the toolbar and return true. Otherwise, return false + * and the parent widget will print. + */ + virtual bool PrintKeys() + { + return false; + } + + /** + * Set/Get the page this widget is in. + */ + void SetPage(int page) + { + this->Page = page; + } + int GetPage() + { + return this->Page; + } + + friend class cmCursesMainForm; + +protected: + cmCursesWidget(const cmCursesWidget& from); + void operator=(const cmCursesWidget&); + + cmCacheManager::CacheEntryType Type; + std::string Value; + FIELD* Field; + // The page in the main form this widget is in + int Page; +}; + +#endif // __cmCursesWidget_h diff --git a/Source/CursesDialog/form/.NoDartCoverage b/Source/CursesDialog/form/.NoDartCoverage new file mode 100644 index 0000000..3c99729 --- /dev/null +++ b/Source/CursesDialog/form/.NoDartCoverage @@ -0,0 +1 @@ +# do not do coverage in this directory diff --git a/Source/CursesDialog/form/CMakeLists.txt b/Source/CursesDialog/form/CMakeLists.txt new file mode 100644 index 0000000..2435f39 --- /dev/null +++ b/Source/CursesDialog/form/CMakeLists.txt @@ -0,0 +1,66 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +PROJECT(CMAKE_FORM) + +INCLUDE_REGULAR_EXPRESSION("^.*$") +INCLUDE_DIRECTORIES(${CURSES_INCLUDE_PATH} "${CMAKE_CURRENT_BINARY_DIR}") + +CONFIGURE_FILE(cmFormConfigure.h.in "${CMAKE_CURRENT_BINARY_DIR}/cmFormConfigure.h") + +SET( FORM_SRCS + fld_arg.c + fld_attr.c + fld_current.c + fld_def.c + fld_dup.c + fld_ftchoice.c + fld_ftlink.c + fld_info.c + fld_just.c + fld_link.c + fld_max.c + fld_move.c + fld_newftyp.c + fld_opts.c + fld_pad.c + fld_page.c + fld_stat.c + fld_type.c + fld_user.c + frm_cursor.c + frm_data.c + frm_def.c + frm_driver.c + frm_hook.c + frm_opts.c + frm_page.c + frm_post.c + frm_req_name.c + frm_scale.c + frm_sub.c + frm_user.c + frm_win.c + fty_alnum.c + fty_alpha.c + fty_enum.c + fty_int.c + fty_ipv4.c + fty_num.c + fty_regex.c + ) + +INCLUDE_DIRECTORIES(${CMAKE_FORM_SOURCE_DIR}) +ADD_LIBRARY(cmForm ${FORM_SRCS} ) +TARGET_LINK_LIBRARIES(cmForm ${CURSES_LIBRARY}) +IF(CURSES_EXTRA_LIBRARY) + TARGET_LINK_LIBRARIES(cmForm ${CURSES_EXTRA_LIBRARY}) +ENDIF(CURSES_EXTRA_LIBRARY) diff --git a/Source/CursesDialog/form/READ.ME b/Source/CursesDialog/form/READ.ME new file mode 100644 index 0000000..dd91693 --- /dev/null +++ b/Source/CursesDialog/form/READ.ME @@ -0,0 +1,15 @@ +This is a clone of the form library that is available with typical +System V curses implementations (ETI). + +It is modelled after the documentation that comes for this library with +a 386 based SVR4 implementation (ESIX). + +The development environment was and is an ELF based Linux system. + +For things that still need doing, see the TO-DO file in the top-level +directory. + +Juergen Pfeifer + +eMail: juergen.pfeifer@gmx.net + diff --git a/Source/CursesDialog/form/cmFormConfigure.h.in b/Source/CursesDialog/form/cmFormConfigure.h.in new file mode 100644 index 0000000..a43169d --- /dev/null +++ b/Source/CursesDialog/form/cmFormConfigure.h.in @@ -0,0 +1,21 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef CMFORMCONFIGURE_H +#define CMFORMCONFIGURE_H + +#cmakedefine CURSES_HAVE_CURSES_H +#cmakedefine CURSES_HAVE_NCURSES_H +#cmakedefine CURSES_HAVE_NCURSES_NCURSES_H +#cmakedefine CURSES_HAVE_NCURSES_CURSES_H + +#endif diff --git a/Source/CursesDialog/form/eti.h b/Source/CursesDialog/form/eti.h new file mode 100644 index 0000000..cc1c830 --- /dev/null +++ b/Source/CursesDialog/form/eti.h @@ -0,0 +1,52 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#ifndef _ETI_ERRNO_H_ +#define _ETI_ERRNO_H_ + +#define E_OK (0) +#define E_SYSTEM_ERROR (-1) +#define E_BAD_ARGUMENT (-2) +#define E_POSTED (-3) +#define E_CONNECTED (-4) +#define E_BAD_STATE (-5) +#define E_NO_ROOM (-6) +#define E_NOT_POSTED (-7) +#define E_UNKNOWN_COMMAND (-8) +#define E_NO_MATCH (-9) +#define E_NOT_SELECTABLE (-10) +#define E_NOT_CONNECTED (-11) +#define E_REQUEST_DENIED (-12) +#define E_INVALID_FIELD (-13) +#define E_CURRENT (-14) + +#endif diff --git a/Source/CursesDialog/form/fld_arg.c b/Source/CursesDialog/form/fld_arg.c new file mode 100644 index 0000000..91ad79f --- /dev/null +++ b/Source/CursesDialog/form/fld_arg.c @@ -0,0 +1,91 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_fieldtype_arg( +| FIELDTYPE *typ, +| void * (* const make_arg)(va_list *), +| void * (* const copy_arg)(const void *), +| void (* const free_arg)(void *) ) +| +| Description : Connects to the type additional arguments necessary +| for a set_field_type call. The various function pointer +| arguments are: +| make_arg : allocates a structure for the field +| specific parameters. +| copy_arg : duplicate the structure created by +| make_arg +| free_arg : Release the memory allocated by make_arg +| or copy_arg +| +| At least make_arg must be non-NULL. +| You may pass NULL for copy_arg and free_arg if your +| make_arg function doesn't allocate memory and your +| arg fits into the storage for a (void*). +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid argument ++--------------------------------------------------------------------------*/ +int set_fieldtype_arg(FIELDTYPE * typ, + void * (* const make_arg)(va_list *), + void * (* const copy_arg)(const void *), + void (* const free_arg)(void *)) +{ + if ( !typ || !make_arg ) + RETURN(E_BAD_ARGUMENT); + + typ->status |= _HAS_ARGS; + typ->makearg = make_arg; + typ->copyarg = copy_arg; + typ->freearg = free_arg; + RETURN(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : void *field_arg(const FIELD *field) +| +| Description : Retrieve pointer to the fields argument structure. +| +| Return Values : Pointer to structure or NULL if none is defined. ++--------------------------------------------------------------------------*/ +void *field_arg(const FIELD * field) +{ + return Normalize_Field(field)->arg; +} + +/* fld_arg.c ends here */ diff --git a/Source/CursesDialog/form/fld_attr.c b/Source/CursesDialog/form/fld_attr.c new file mode 100644 index 0000000..8619588 --- /dev/null +++ b/Source/CursesDialog/form/fld_attr.c @@ -0,0 +1,116 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ +#if defined(__hpux) + #define _XOPEN_SOURCE_EXTENDED +#endif + #include "form.priv.h" +#if defined(__hpux) + #undef _XOPEN_SOURCE_EXTENDED +#endif +MODULE_ID("$Id$") + +/*---------------------------------------------------------------------------- + Field-Attribute manipulation routines + --------------------------------------------------------------------------*/ +/* "Template" macro to generate a function to set a fields attribute */ +#define GEN_FIELD_ATTR_SET_FCT( name ) \ +int set_field_ ## name (FIELD * field, chtype attr)\ +{\ + int res = E_BAD_ARGUMENT;\ + if ( attr==A_NORMAL || ((attr & A_ATTRIBUTES)==attr) )\ + {\ + Normalize_Field( field );\ + if ((field -> name) != attr)\ + {\ + field -> name = attr;\ + res = _nc_Synchronize_Attributes( field );\ + }\ + else\ + res = E_OK;\ + }\ + RETURN(res);\ +} + +/* "Template" macro to generate a function to get a fields attribute */ +#define GEN_FIELD_ATTR_GET_FCT( name ) \ +chtype field_ ## name (const FIELD * field)\ +{\ + return ( A_ATTRIBUTES & (Normalize_Field( field ) -> name) );\ +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_field_fore(FIELD *field, chtype attr) +| +| Description : Sets the foreground of the field used to display the +| field contents. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid attributes +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +GEN_FIELD_ATTR_SET_FCT( fore ) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : chtype field_fore(const FIELD *) +| +| Description : Retrieve fields foreground attribute +| +| Return Values : The foreground attribute ++--------------------------------------------------------------------------*/ +GEN_FIELD_ATTR_GET_FCT( fore ) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_field_back(FIELD *field, chtype attr) +| +| Description : Sets the background of the field used to display the +| fields extend. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid attributes +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +GEN_FIELD_ATTR_SET_FCT( back ) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : chtype field_back(const +| +| Description : Retrieve fields background attribute +| +| Return Values : The background attribute ++--------------------------------------------------------------------------*/ +GEN_FIELD_ATTR_GET_FCT( back ) + +/* fld_attr.c ends here */ diff --git a/Source/CursesDialog/form/fld_current.c b/Source/CursesDialog/form/fld_current.c new file mode 100644 index 0000000..d4b1254 --- /dev/null +++ b/Source/CursesDialog/form/fld_current.c @@ -0,0 +1,124 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_current_field(FORM * form,FIELD * field) +| +| Description : Set the current field of the form to the specified one. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid form or field pointer +| E_REQUEST_DENIED - field not selectable +| E_BAD_STATE - called from a hook routine +| E_INVALID_FIELD - current field can't be left +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +int set_current_field(FORM * form, FIELD * field) +{ + int err = E_OK; + + if ( !form || !field ) + RETURN(E_BAD_ARGUMENT); + + if ( (form != field->form) || Field_Is_Not_Selectable(field) ) + RETURN(E_REQUEST_DENIED); + + if (!(form->status & _POSTED)) + { + form->current = field; + form->curpage = field->page; + } + else + { + if (form->status & _IN_DRIVER) + err = E_BAD_STATE; + else + { + if (form->current != field) + { + if (!_nc_Internal_Validation(form)) + err = E_INVALID_FIELD; + else + { + Call_Hook(form,fieldterm); + if (field->page != form->curpage) + { + Call_Hook(form,formterm); + err = _nc_Set_Form_Page(form,field->page,field); + Call_Hook(form,forminit); + } + else + { + err = _nc_Set_Current_Field(form,field); + } + Call_Hook(form,fieldinit); + _nc_Refresh_Current_Field(form); + } + } + } + } + RETURN(err); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : FIELD *current_field(const FORM * form) +| +| Description : Return the current field. +| +| Return Values : Pointer to the current field. ++--------------------------------------------------------------------------*/ +FIELD *current_field(const FORM * form) +{ + return Normalize_Form(form)->current; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int field_index(const FIELD * field) +| +| Description : Return the index of the field in the field-array of +| the form. +| +| Return Values : >= 0 : field index +| -1 : fieldpointer invalid or field not connected ++--------------------------------------------------------------------------*/ +int field_index(const FIELD * field) +{ + return ( (field && field->form) ? field->index : -1 ); +} + +/* fld_current.c ends here */ diff --git a/Source/CursesDialog/form/fld_def.c b/Source/CursesDialog/form/fld_def.c new file mode 100644 index 0000000..4a49a25 --- /dev/null +++ b/Source/CursesDialog/form/fld_def.c @@ -0,0 +1,346 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/* this can't be readonly */ +static FIELD default_field = { + 0, /* status */ + 0, /* rows */ + 0, /* cols */ + 0, /* frow */ + 0, /* fcol */ + 0, /* drows */ + 0, /* dcols */ + 0, /* maxgrow*/ + 0, /* nrow */ + 0, /* nbuf */ + NO_JUSTIFICATION, /* just */ + 0, /* page */ + 0, /* index */ + (int)' ', /* pad */ + A_NORMAL, /* fore */ + A_NORMAL, /* back */ + ALL_FIELD_OPTS, /* opts */ + (FIELD *)0, /* snext */ + (FIELD *)0, /* sprev */ + (FIELD *)0, /* link */ + (FORM *)0, /* form */ + (FIELDTYPE *)0, /* type */ + (char *)0, /* arg */ + (char *)0, /* buf */ + (char *)0 /* usrptr */ +}; + +FIELD *_nc_Default_Field = &default_field; + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : TypeArgument *_nc_Make_Argument( +| const FIELDTYPE *typ, +| va_list *ap, +| int *err ) +| +| Description : Create an argument structure for the specified type. +| Use the type-dependant argument list to construct +| it. +| +| Return Values : Pointer to argument structure. Maybe NULL. +| In case of an error in *err an errorcounter is increased. ++--------------------------------------------------------------------------*/ +TypeArgument* +_nc_Make_Argument(const FIELDTYPE *typ, va_list *ap, int *err) +{ + TypeArgument *res = (TypeArgument *)0; + TypeArgument *p; + + if (typ && (typ->status & _HAS_ARGS)) + { + assert(err && ap); + if (typ->status & _LINKED_TYPE) + { + p = (TypeArgument *)malloc(sizeof(TypeArgument)); + if (p) + { + p->left = _nc_Make_Argument(typ->left ,ap,err); + p->right = _nc_Make_Argument(typ->right,ap,err); + return p; + } + else + *err += 1; + } else + { + assert(typ->makearg != 0); + if ( !(res=(TypeArgument *)typ->makearg(ap)) ) + *err += 1; + } + } + return res; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : TypeArgument *_nc_Copy_Argument(const FIELDTYPE *typ, +| const TypeArgument *argp, +| int *err ) +| +| Description : Create a copy of an argument structure for the specified +| type. +| +| Return Values : Pointer to argument structure. Maybe NULL. +| In case of an error in *err an errorcounter is increased. ++--------------------------------------------------------------------------*/ +TypeArgument* +_nc_Copy_Argument(const FIELDTYPE *typ, + const TypeArgument *argp, int *err) +{ + TypeArgument *res = (TypeArgument *)0; + TypeArgument *p; + + if ( typ && (typ->status & _HAS_ARGS) ) + { + assert(err && argp); + if (typ->status & _LINKED_TYPE) + { + p = (TypeArgument *)malloc(sizeof(TypeArgument)); + if (p) + { + p->left = _nc_Copy_Argument(typ,argp->left ,err); + p->right = _nc_Copy_Argument(typ,argp->right,err); + return p; + } + *err += 1; + } + else + { + if (typ->copyarg) + { + if (!(res = (TypeArgument *)(typ->copyarg((const void *)argp)))) + *err += 1; + } + else + res = (TypeArgument *)argp; + } + } + return res; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : void _nc_Free_Argument(const FIELDTYPE *typ, +| TypeArgument * argp ) +| +| Description : Release memory associated with the argument structure +| for the given fieldtype. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +void +_nc_Free_Argument(const FIELDTYPE * typ, TypeArgument * argp) +{ + if (!typ || !(typ->status & _HAS_ARGS)) + return; + + if (typ->status & _LINKED_TYPE) + { + assert(argp != 0); + _nc_Free_Argument(typ->left ,argp->left ); + _nc_Free_Argument(typ->right,argp->right); + free(argp); + } + else + { + if (typ->freearg) + typ->freearg((void *)argp); + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : bool _nc_Copy_Type( FIELD *dst, FIELD const *src ) +| +| Description : Copy argument structure of field src to field dst +| +| Return Values : TRUE - copy worked +| FALSE - error occured ++--------------------------------------------------------------------------*/ +bool +_nc_Copy_Type(FIELD *dst, FIELD const *src) +{ + int err = 0; + + assert(dst && src); + + dst->type = src->type; + dst->arg = (void *)_nc_Copy_Argument(src->type,(TypeArgument *)(src->arg),&err); + + if (err) + { + _nc_Free_Argument(dst->type,(TypeArgument *)(dst->arg)); + dst->type = (FIELDTYPE *)0; + dst->arg = (void *)0; + return FALSE; + } + else + { + if (dst->type) + dst->type->ref++; + return TRUE; + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : void _nc_Free_Type( FIELD *field ) +| +| Description : Release Argument structure for this field +| +| Return Values : - ++--------------------------------------------------------------------------*/ +void +_nc_Free_Type(FIELD *field) +{ + assert(field != 0); + if (field->type) + field->type->ref--; + _nc_Free_Argument(field->type,(TypeArgument *)(field->arg)); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : FIELD *new_field( int rows, int cols, +| int frow, int fcol, +| int nrow, int nbuf ) +| +| Description : Create a new field with this many 'rows' and 'cols', +| starting at 'frow/fcol' in the subwindow of the form. +| Allocate 'nrow' off-screen rows and 'nbuf' additional +| buffers. If an error occurs, errno is set to +| +| E_BAD_ARGUMENT - invalid argument +| E_SYSTEM_ERROR - system error +| +| Return Values : Pointer to the new field or NULL if failure. ++--------------------------------------------------------------------------*/ +FIELD *new_field(int rows, int cols, int frow, int fcol, int nrow, int nbuf) +{ + FIELD *New_Field = (FIELD *)0; + int err = E_BAD_ARGUMENT; + + if (rows>0 && + cols>0 && + frow>=0 && + fcol>=0 && + nrow>=0 && + nbuf>=0 && + ((err = E_SYSTEM_ERROR) != 0) && /* trick: this resets the default error */ + (New_Field=(FIELD *)malloc(sizeof(FIELD))) ) + { + *New_Field = default_field; + New_Field->rows = rows; + New_Field->cols = cols; + New_Field->drows = rows + nrow; + New_Field->dcols = cols; + New_Field->frow = frow; + New_Field->fcol = fcol; + New_Field->nrow = nrow; + New_Field->nbuf = nbuf; + New_Field->link = New_Field; + + if (_nc_Copy_Type(New_Field,&default_field)) + { + size_t len; + + len = Total_Buffer_Size(New_Field); + if ((New_Field->buf = (char *)malloc(len))) + { + /* Prefill buffers with blanks and insert terminating zeroes + between buffers */ + int i; + + memset(New_Field->buf,' ',len); + for(i=0;i<=New_Field->nbuf;i++) + { + New_Field->buf[(New_Field->drows*New_Field->cols+1)*(i+1)-1] + = '\0'; + } + return New_Field; + } + } + } + + if (New_Field) + free_field(New_Field); + + SET_ERROR( err ); + return (FIELD *)0; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int free_field( FIELD *field ) +| +| Description : Frees the storage allocated for the field. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid field pointer +| E_CONNECTED - field is connected ++--------------------------------------------------------------------------*/ +int free_field(FIELD * field) +{ + if (!field) + RETURN(E_BAD_ARGUMENT); + + if (field->form) + RETURN(E_CONNECTED); + + if (field == field->link) + { + if (field->buf) + free(field->buf); + } + else + { + FIELD *f; + + for(f=field;f->link != field;f = f->link) + {} + f->link = field->link; + } + _nc_Free_Type(field); + free(field); + RETURN(E_OK); +} + +/* fld_def.c ends here */ diff --git a/Source/CursesDialog/form/fld_dup.c b/Source/CursesDialog/form/fld_dup.c new file mode 100644 index 0000000..1c5301d --- /dev/null +++ b/Source/CursesDialog/form/fld_dup.c @@ -0,0 +1,97 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : FIELD *dup_field(FIELD *field, int frow, int fcol) +| +| Description : Duplicates the field at the specified position. All +| field attributes and the buffers are copied. +| If an error occurs, errno is set to +| +| E_BAD_ARGUMENT - invalid argument +| E_SYSTEM_ERROR - system error +| +| Return Values : Pointer to the new field or NULL if failure ++--------------------------------------------------------------------------*/ +FIELD *dup_field(FIELD * field, int frow, int fcol) +{ + FIELD *New_Field = (FIELD *)0; + int err = E_BAD_ARGUMENT; + + if (field && (frow>=0) && (fcol>=0) && + ((err=E_SYSTEM_ERROR) != 0) && /* trick : this resets the default error */ + (New_Field=(FIELD *)malloc(sizeof(FIELD))) ) + { + *New_Field = *_nc_Default_Field; + New_Field->frow = frow; + New_Field->fcol = fcol; + New_Field->link = New_Field; + New_Field->rows = field->rows; + New_Field->cols = field->cols; + New_Field->nrow = field->nrow; + New_Field->drows = field->drows; + New_Field->dcols = field->dcols; + New_Field->maxgrow = field->maxgrow; + New_Field->nbuf = field->nbuf; + New_Field->just = field->just; + New_Field->fore = field->fore; + New_Field->back = field->back; + New_Field->pad = field->pad; + New_Field->opts = field->opts; + New_Field->usrptr = field->usrptr; + + if (_nc_Copy_Type(New_Field,field)) + { + size_t len; + + len = Total_Buffer_Size(New_Field); + if ( (New_Field->buf=(char *)malloc(len)) ) + { + memcpy(New_Field->buf,field->buf,len); + return New_Field; + } + } + } + + if (New_Field) + free_field(New_Field); + + SET_ERROR(err); + return (FIELD *)0; +} + +/* fld_dup.c ends here */ diff --git a/Source/CursesDialog/form/fld_ftchoice.c b/Source/CursesDialog/form/fld_ftchoice.c new file mode 100644 index 0000000..bb37073 --- /dev/null +++ b/Source/CursesDialog/form/fld_ftchoice.c @@ -0,0 +1,62 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_fieldtype_choice( +| FIELDTYPE *typ, +| bool (* const next_choice)(FIELD *,const void *), +| bool (* const prev_choice)(FIELD *,const void *)) +| +| Description : Define implementation of enumeration requests. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid arguments ++--------------------------------------------------------------------------*/ +int set_fieldtype_choice(FIELDTYPE * typ, + bool (* const next_choice) (FIELD *,const void *), + bool (* const prev_choice) (FIELD *,const void *)) +{ + if ( !typ || !next_choice || !prev_choice ) + RETURN(E_BAD_ARGUMENT); + + typ->status |= _HAS_CHOICE; + typ->next = next_choice; + typ->prev = prev_choice; + RETURN(E_OK); +} + +/* fld_ftchoice.c ends here */ diff --git a/Source/CursesDialog/form/fld_ftlink.c b/Source/CursesDialog/form/fld_ftlink.c new file mode 100644 index 0000000..1cb80d1 --- /dev/null +++ b/Source/CursesDialog/form/fld_ftlink.c @@ -0,0 +1,83 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : FIELDTYPE *link_fieldtype( +| FIELDTYPE *type1, +| FIELDTYPE *type2) +| +| Description : Create a new fieldtype built from the two given types. +| They are connected by an logical 'OR'. +| If an error occurs, errno is set to +| E_BAD_ARGUMENT - invalid arguments +| E_SYSTEM_ERROR - system error (no memory) +| +| Return Values : Fieldtype pointer or NULL if error occured. ++--------------------------------------------------------------------------*/ +FIELDTYPE *link_fieldtype(FIELDTYPE * type1, FIELDTYPE * type2) +{ + FIELDTYPE *nftyp = (FIELDTYPE *)0; + + if ( type1 && type2 ) + { + nftyp = (FIELDTYPE *)malloc(sizeof(FIELDTYPE)); + if (nftyp) + { + *nftyp = *_nc_Default_FieldType; + nftyp->status |= _LINKED_TYPE; + if ((type1->status & _HAS_ARGS) || (type2->status & _HAS_ARGS) ) + nftyp->status |= _HAS_ARGS; + if ((type1->status & _HAS_CHOICE) || (type2->status & _HAS_CHOICE) ) + nftyp->status |= _HAS_CHOICE; + nftyp->left = type1; + nftyp->right = type2; + type1->ref++; + type2->ref++; + } + else + { + SET_ERROR( E_SYSTEM_ERROR ); + } + } + else + { + SET_ERROR( E_BAD_ARGUMENT ); + } + return nftyp; +} + +/* fld_ftlink.c ends here */ diff --git a/Source/CursesDialog/form/fld_info.c b/Source/CursesDialog/form/fld_info.c new file mode 100644 index 0000000..1ba92c8 --- /dev/null +++ b/Source/CursesDialog/form/fld_info.c @@ -0,0 +1,91 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int field_info(const FIELD *field, +| int *rows, int *cols, +| int *frow, int *fcol, +| int *nrow, int *nbuf) +| +| Description : Retrieve infos about the fields creation parameters. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid field pointer ++--------------------------------------------------------------------------*/ +int field_info(const FIELD *field, + int *rows, int *cols, + int *frow, int *fcol, + int *nrow, int *nbuf) +{ + if (!field) + RETURN(E_BAD_ARGUMENT); + + if (rows) *rows = field->rows; + if (cols) *cols = field->cols; + if (frow) *frow = field->frow; + if (fcol) *fcol = field->fcol; + if (nrow) *nrow = field->nrow; + if (nbuf) *nbuf = field->nbuf; + RETURN(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int dynamic_field_info(const FIELD *field, +| int *drows, int *dcols, +| int *maxgrow) +| +| Description : Retrieve information about a dynamic fields current +| dynamic parameters. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid argument ++--------------------------------------------------------------------------*/ +int dynamic_field_info(const FIELD *field, + int *drows, int *dcols, int *maxgrow) +{ + if (!field) + RETURN(E_BAD_ARGUMENT); + + if (drows) *drows = field->drows; + if (dcols) *dcols = field->dcols; + if (maxgrow) *maxgrow = field->maxgrow; + + RETURN(E_OK); +} + +/* fld_info.c ends here */ diff --git a/Source/CursesDialog/form/fld_just.c b/Source/CursesDialog/form/fld_just.c new file mode 100644 index 0000000..7015654 --- /dev/null +++ b/Source/CursesDialog/form/fld_just.c @@ -0,0 +1,81 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_field_just(FIELD *field, int just) +| +| Description : Set the fields type of justification. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - one of the arguments was incorrect +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +int set_field_just(FIELD * field, int just) +{ + int res = E_BAD_ARGUMENT; + + if ((just==NO_JUSTIFICATION) || + (just==JUSTIFY_LEFT) || + (just==JUSTIFY_CENTER) || + (just==JUSTIFY_RIGHT) ) + { + Normalize_Field( field ); + if (field->just != just) + { + field->just = just; + res = _nc_Synchronize_Attributes( field ); + } + else + res = E_OK; + } + RETURN(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int field_just( const FIELD *field ) +| +| Description : Retrieve the fields type of justification +| +| Return Values : The justification type. ++--------------------------------------------------------------------------*/ +int field_just(const FIELD * field) +{ + return Normalize_Field( field )->just; +} + +/* fld_just.c ends here */ diff --git a/Source/CursesDialog/form/fld_link.c b/Source/CursesDialog/form/fld_link.c new file mode 100644 index 0000000..164f51b --- /dev/null +++ b/Source/CursesDialog/form/fld_link.c @@ -0,0 +1,90 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : FIELD *link_field(FIELD *field, int frow, int fcol) +| +| Description : Duplicates the field at the specified position. The +| new field shares its buffers with the original one, +| the attributes are independent. +| If an error occurs, errno is set to +| +| E_BAD_ARGUMENT - invalid argument +| E_SYSTEM_ERROR - system error +| +| Return Values : Pointer to the new field or NULL if failure ++--------------------------------------------------------------------------*/ +FIELD *link_field(FIELD * field, int frow, int fcol) +{ + FIELD *New_Field = (FIELD *)0; + int err = E_BAD_ARGUMENT; + + if (field && (frow>=0) && (fcol>=0) && + ((err=E_SYSTEM_ERROR) != 0) && /* trick: this resets the default error */ + (New_Field = (FIELD *)malloc(sizeof(FIELD))) ) + { + *New_Field = *_nc_Default_Field; + New_Field->frow = frow; + New_Field->fcol = fcol; + New_Field->link = field->link; + field->link = New_Field; + New_Field->buf = field->buf; + New_Field->rows = field->rows; + New_Field->cols = field->cols; + New_Field->nrow = field->nrow; + New_Field->nbuf = field->nbuf; + New_Field->drows = field->drows; + New_Field->dcols = field->dcols; + New_Field->maxgrow= field->maxgrow; + New_Field->just = field->just; + New_Field->fore = field->fore; + New_Field->back = field->back; + New_Field->pad = field->pad; + New_Field->opts = field->opts; + New_Field->usrptr = field->usrptr; + if (_nc_Copy_Type(New_Field,field)) + return New_Field; + } + + if (New_Field) + free_field(New_Field); + + SET_ERROR( err ); + return (FIELD *)0; +} + +/* fld_link.c ends here */ diff --git a/Source/CursesDialog/form/fld_max.c b/Source/CursesDialog/form/fld_max.c new file mode 100644 index 0000000..cca8dc5 --- /dev/null +++ b/Source/CursesDialog/form/fld_max.c @@ -0,0 +1,74 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_max_field(FIELD *field, int maxgrow) +| +| Description : Set the maximum growth for a dynamic field. If maxgrow=0 +| the field may grow to any possible size. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid argument ++--------------------------------------------------------------------------*/ +int set_max_field(FIELD *field, int maxgrow) +{ + if (!field || (maxgrow<0)) + RETURN(E_BAD_ARGUMENT); + else + { + bool single_line_field = Single_Line_Field(field); + + if (maxgrow>0) + { + if (( single_line_field && (maxgrow < field->dcols)) || + (!single_line_field && (maxgrow < field->drows))) + RETURN(E_BAD_ARGUMENT); + } + field->maxgrow = maxgrow; + field->status &= ~_MAY_GROW; + if (!(field->opts & O_STATIC)) + { + if ((maxgrow==0) || + ( single_line_field && (field->dcols < maxgrow)) || + (!single_line_field && (field->drows < maxgrow))) + field->status |= _MAY_GROW; + } + } + RETURN(E_OK); +} + +/* fld_max.c ends here */ diff --git a/Source/CursesDialog/form/fld_move.c b/Source/CursesDialog/form/fld_move.c new file mode 100644 index 0000000..2293477 --- /dev/null +++ b/Source/CursesDialog/form/fld_move.c @@ -0,0 +1,62 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int move_field(FIELD *field,int frow, int fcol) +| +| Description : Moves the disconnected field to the new location in +| the forms subwindow. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid argument passed +| E_CONNECTED - field is connected ++--------------------------------------------------------------------------*/ +int move_field(FIELD *field, int frow, int fcol) +{ + if ( !field || (frow<0) || (fcol<0) ) + RETURN(E_BAD_ARGUMENT); + + if (field->form) + RETURN(E_CONNECTED); + + field->frow = frow; + field->fcol = fcol; + RETURN(E_OK); +} + +/* fld_move.c ends here */ + diff --git a/Source/CursesDialog/form/fld_newftyp.c b/Source/CursesDialog/form/fld_newftyp.c new file mode 100644 index 0000000..b45ebd8 --- /dev/null +++ b/Source/CursesDialog/form/fld_newftyp.c @@ -0,0 +1,125 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +static FIELDTYPE const default_fieldtype = { + 0, /* status */ + 0L, /* reference count */ + (FIELDTYPE *)0, /* pointer to left operand */ + (FIELDTYPE *)0, /* pointer to right operand */ + NULL, /* makearg function */ + NULL, /* copyarg function */ + NULL, /* freearg function */ + NULL, /* field validation function */ + NULL, /* Character check function */ + NULL, /* enumerate next function */ + NULL /* enumerate previous function */ +}; + +const FIELDTYPE* _nc_Default_FieldType = &default_fieldtype; + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : FIELDTYPE *new_fieldtype( +| bool (* const field_check)(FIELD *,const void *), +| bool (* const char_check) (int, const void *) ) +| +| Description : Create a new fieldtype. The application programmer must +| write a field_check and a char_check function and give +| them as input to this call. +| If an error occurs, errno is set to +| E_BAD_ARGUMENT - invalid arguments +| E_SYSTEM_ERROR - system error (no memory) +| +| Return Values : Fieldtype pointer or NULL if error occured ++--------------------------------------------------------------------------*/ +FIELDTYPE *new_fieldtype( + bool (* const field_check)(FIELD *,const void *), + bool (* const char_check) (int,const void *) ) +{ + FIELDTYPE *nftyp = (FIELDTYPE *)0; + + if ( (field_check) || (char_check) ) + { + nftyp = (FIELDTYPE *)malloc(sizeof(FIELDTYPE)); + if (nftyp) + { + *nftyp = default_fieldtype; + nftyp->fcheck = field_check; + nftyp->ccheck = char_check; + } + else + { + SET_ERROR( E_SYSTEM_ERROR ); + } + } + else + { + SET_ERROR( E_BAD_ARGUMENT ); + } + return nftyp; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int free_fieldtype(FIELDTYPE *typ) +| +| Description : Release the memory associated with this fieldtype. +| +| Return Values : E_OK - success +| E_CONNECTED - there are fields referencing the type +| E_BAD_ARGUMENT - invalid fieldtype pointer ++--------------------------------------------------------------------------*/ +int free_fieldtype(FIELDTYPE *typ) +{ + if (!typ) + RETURN(E_BAD_ARGUMENT); + + if (typ->ref!=0) + RETURN(E_CONNECTED); + + if (typ->status & _RESIDENT) + RETURN(E_CONNECTED); + + if (typ->status & _LINKED_TYPE) + { + if (typ->left ) typ->left->ref--; + if (typ->right) typ->right->ref--; + } + free(typ); + RETURN(E_OK); +} + +/* fld_newftyp.c ends here */ diff --git a/Source/CursesDialog/form/fld_opts.c b/Source/CursesDialog/form/fld_opts.c new file mode 100644 index 0000000..234634b --- /dev/null +++ b/Source/CursesDialog/form/fld_opts.c @@ -0,0 +1,124 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*---------------------------------------------------------------------------- + Field-Options manipulation routines + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_field_opts(FIELD *field, Field_Options opts) +| +| Description : Turns on the named options for this field and turns +| off all the remaining options. +| +| Return Values : E_OK - success +| E_CURRENT - the field is the current field +| E_BAD_ARGUMENT - invalid options +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +int set_field_opts(FIELD * field, Field_Options opts) +{ + int res = E_BAD_ARGUMENT; + opts &= ALL_FIELD_OPTS; + if (!(opts & ~ALL_FIELD_OPTS)) + res = _nc_Synchronize_Options( Normalize_Field(field), opts ); + RETURN(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : Field_Options field_opts(const FIELD *field) +| +| Description : Retrieve the fields options. +| +| Return Values : The options. ++--------------------------------------------------------------------------*/ +Field_Options field_opts(const FIELD * field) +{ + return ALL_FIELD_OPTS & Normalize_Field( field )->opts; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int field_opts_on(FIELD *field, Field_Options opts) +| +| Description : Turns on the named options for this field and all the +| remaining options are unchanged. +| +| Return Values : E_OK - success +| E_CURRENT - the field is the current field +| E_BAD_ARGUMENT - invalid options +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +int field_opts_on(FIELD * field, Field_Options opts) +{ + int res = E_BAD_ARGUMENT; + + opts &= ALL_FIELD_OPTS; + if (!(opts & ~ALL_FIELD_OPTS)) + { + Normalize_Field( field ); + res = _nc_Synchronize_Options( field, field->opts | opts ); + } + RETURN(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int field_opts_off(FIELD *field, Field_Options opts) +| +| Description : Turns off the named options for this field and all the +| remaining options are unchanged. +| +| Return Values : E_OK - success +| E_CURRENT - the field is the current field +| E_BAD_ARGUMENT - invalid options +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +int field_opts_off(FIELD * field, Field_Options opts) +{ + int res = E_BAD_ARGUMENT; + + opts &= ALL_FIELD_OPTS; + if (!(opts & ~ALL_FIELD_OPTS)) + { + Normalize_Field( field ); + res = _nc_Synchronize_Options( field, field->opts & ~opts ); + } + RETURN(res); +} + +/* fld_opts.c ends here */ diff --git a/Source/CursesDialog/form/fld_pad.c b/Source/CursesDialog/form/fld_pad.c new file mode 100644 index 0000000..4598340 --- /dev/null +++ b/Source/CursesDialog/form/fld_pad.c @@ -0,0 +1,78 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_field_pad(FIELD *field, int ch) +| +| Description : Set the pad character used to fill the field. This must +| be a printable character. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid field pointer or pad character +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +int set_field_pad(FIELD * field, int ch) +{ + int res = E_BAD_ARGUMENT; + + Normalize_Field( field ); + if (isprint((unsigned char)ch)) + { + if (field->pad != ch) + { + field->pad = ch; + res = _nc_Synchronize_Attributes( field ); + } + else + res = E_OK; + } + RETURN(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int field_pad(const FIELD *field) +| +| Description : Retrieve the fields pad character. +| +| Return Values : The pad character. ++--------------------------------------------------------------------------*/ +int field_pad(const FIELD * field) +{ + return Normalize_Field( field )->pad; +} + +/* fld_pad.c ends here */ diff --git a/Source/CursesDialog/form/fld_page.c b/Source/CursesDialog/form/fld_page.c new file mode 100644 index 0000000..408e712 --- /dev/null +++ b/Source/CursesDialog/form/fld_page.c @@ -0,0 +1,76 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_new_page(FIELD *field, bool new_page_flag) +| +| Description : Marks the field as the beginning of a new page of +| the form. +| +| Return Values : E_OK - success +| E_CONNECTED - field is connected ++--------------------------------------------------------------------------*/ +int set_new_page(FIELD * field, bool new_page_flag) +{ + Normalize_Field(field); + if (field->form) + RETURN(E_CONNECTED); + + if (new_page_flag) + field->status |= _NEWPAGE; + else + field->status &= ~_NEWPAGE; + + RETURN(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : bool new_page(const FIELD *field) +| +| Description : Retrieve the info whether or not the field starts a +| new page on the form. +| +| Return Values : TRUE - field starts a new page +| FALSE - field doesn't start a new page ++--------------------------------------------------------------------------*/ +bool new_page(const FIELD * field) +{ + return (Normalize_Field(field)->status & _NEWPAGE) ? TRUE : FALSE; +} + +/* fld_page.c ends here */ diff --git a/Source/CursesDialog/form/fld_stat.c b/Source/CursesDialog/form/fld_stat.c new file mode 100644 index 0000000..ee6831b --- /dev/null +++ b/Source/CursesDialog/form/fld_stat.c @@ -0,0 +1,73 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_field_status(FIELD *field, bool status) +| +| Description : Set or clear the 'changed' indication flag for that +| fields primary buffer. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +int set_field_status(FIELD * field, bool status) +{ + Normalize_Field( field ); + + if (status) + field->status |= _CHANGED; + else + field->status &= ~_CHANGED; + + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : bool field_status(const FIELD *field) +| +| Description : Retrieve the value of the 'changed' indication flag +| for that fields primary buffer. +| +| Return Values : TRUE - buffer has been changed +| FALSE - buffer has not been changed ++--------------------------------------------------------------------------*/ +bool field_status(const FIELD * field) +{ + return ((Normalize_Field(field)->status & _CHANGED) ? TRUE : FALSE); +} + +/* fld_stat.c ends here */ diff --git a/Source/CursesDialog/form/fld_type.c b/Source/CursesDialog/form/fld_type.c new file mode 100644 index 0000000..6c9def2 --- /dev/null +++ b/Source/CursesDialog/form/fld_type.c @@ -0,0 +1,51 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : FIELDTYPE *field_type(const FIELD *field) +| +| Description : Retrieve the associated fieldtype for this field. +| +| Return Values : Pointer to fieldtype of NULL if none is defined. ++--------------------------------------------------------------------------*/ +FIELDTYPE *field_type(const FIELD * field) +{ + return Normalize_Field(field)->type; +} + +/* fld_type.c ends here */ diff --git a/Source/CursesDialog/form/fld_user.c b/Source/CursesDialog/form/fld_user.c new file mode 100644 index 0000000..3287b5b --- /dev/null +++ b/Source/CursesDialog/form/fld_user.c @@ -0,0 +1,67 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_field_userptr(FIELD *field, void *usrptr) +| +| Description : Set the pointer that is reserved in any field to store +| application relevant information +| +| Return Values : E_OK - on success ++--------------------------------------------------------------------------*/ +int set_field_userptr(FIELD * field, void *usrptr) +{ + Normalize_Field( field )->usrptr = usrptr; + RETURN(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : void *field_userptr(const FIELD *field) +| +| Description : Return the pointer that is reserved in any field to +| store application relevant information. +| +| Return Values : Value of pointer. If no such pointer has been set, +| NULL is returned ++--------------------------------------------------------------------------*/ +void *field_userptr(const FIELD *field) +{ + return Normalize_Field( field )->usrptr; +} + +/* fld_user.c ends here */ diff --git a/Source/CursesDialog/form/form.h b/Source/CursesDialog/form/form.h new file mode 100644 index 0000000..94f05af --- /dev/null +++ b/Source/CursesDialog/form/form.h @@ -0,0 +1,401 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#ifndef FORM_H +#define FORM_H + +#if defined(__sun__) && defined(__GNUC__) + #define _MSE_INT_H +#endif + +#include + +/* figure out which curses.h to include */ +# if defined(CURSES_HAVE_NCURSES_H) +# include +# elif defined(CURSES_HAVE_NCURSES_NCURSES_H) +# include +# elif defined(CURSES_HAVE_NCURSES_CURSES_H) +# include +# else +# include +# endif + +#include +#include + +#ifdef __cplusplus + extern "C" { +#endif + +typedef int Form_Options; +typedef int Field_Options; + + /********** + * _PAGE * + **********/ + +typedef struct { + short pmin; /* index of first field on page */ + short pmax; /* index of last field on page */ + short smin; /* index of top leftmost field on page */ + short smax; /* index of bottom rightmost field on page */ +} _PAGE; + + /********** + * FIELD * + **********/ + +typedef struct fieldnode { + unsigned short status; /* flags */ + short rows; /* size in rows */ + short cols; /* size in cols */ + short frow; /* first row */ + short fcol; /* first col */ + int drows; /* dynamic rows */ + int dcols; /* dynamic cols */ + int maxgrow; /* maximum field growth */ + int nrow; /* offscreen rows */ + short nbuf; /* additional buffers */ + short just; /* justification */ + short page; /* page on form */ + short index; /* into form -> field */ + int pad; /* pad character */ + chtype fore; /* foreground attribute */ + chtype back; /* background attribute */ + Field_Options opts; /* options */ + struct fieldnode * snext; /* sorted order pointer */ + struct fieldnode * sprev; /* sorted order pointer */ + struct fieldnode * link; /* linked field chain */ + struct formnode * form; /* containing form */ + struct typenode * type; /* field type */ + void * arg; /* argument for type */ + char * buf; /* field buffers */ + void * usrptr; /* user pointer */ +} FIELD; + + /************** + * FIELDTYPE * + **************/ + +typedef struct typenode { + unsigned short status; /* flags */ + long ref; /* reference count */ + struct typenode * left; /* ptr to operand for | */ + struct typenode * right; /* ptr to operand for | */ + + void* (*makearg)(va_list *); /* make fieldtype arg */ + void* (*copyarg)(const void *); /* copy fieldtype arg */ + void (*freearg)(void *); /* free fieldtype arg */ + + bool (*fcheck)(FIELD *,const void *); /* field validation */ + bool (*ccheck)(int,const void *); /* character validation */ + + bool (*next)(FIELD *,const void *); /* enumerate next value */ + bool (*prev)(FIELD *,const void *); /* enumerate prev value */ + +} FIELDTYPE; + + /********* + * FORM * + *********/ + +typedef struct formnode { + unsigned short status; /* flags */ + short rows; /* size in rows */ + short cols; /* size in cols */ + int currow; /* current row in field window*/ + int curcol; /* current col in field window*/ + int toprow; /* in scrollable field window */ + int begincol; /* in horiz. scrollable field */ + short maxfield; /* number of fields */ + short maxpage; /* number of pages */ + short curpage; /* index into page */ + Form_Options opts; /* options */ + WINDOW * win; /* window */ + WINDOW * sub; /* subwindow */ + WINDOW * w; /* window for current field */ + FIELD ** field; /* field [maxfield] */ + FIELD * current; /* current field */ + _PAGE * page; /* page [maxpage] */ + void * usrptr; /* user pointer */ + + void (*forminit)(struct formnode *); + void (*formterm)(struct formnode *); + void (*fieldinit)(struct formnode *); + void (*fieldterm)(struct formnode *); + +} FORM; + +typedef void (*Form_Hook)(FORM *); + + /*************************** + * miscellaneous #defines * + ***************************/ + +/* field justification */ +#define NO_JUSTIFICATION (0) +#define JUSTIFY_LEFT (1) +#define JUSTIFY_CENTER (2) +#define JUSTIFY_RIGHT (3) + +/* field options */ +#define O_VISIBLE (0x0001) +#define O_ACTIVE (0x0002) +#define O_PUBLIC (0x0004) +#define O_EDIT (0x0008) +#define O_WRAP (0x0010) +#define O_BLANK (0x0020) +#define O_AUTOSKIP (0x0040) +#define O_NULLOK (0x0080) +#define O_PASSOK (0x0100) +#define O_STATIC (0x0200) + +/* form options */ +#define O_NL_OVERLOAD (0x0001) +#define O_BS_OVERLOAD (0x0002) + +/* form driver commands */ +#define REQ_NEXT_PAGE (KEY_MAX + 1) /* move to next page */ +#define REQ_PREV_PAGE (KEY_MAX + 2) /* move to previous page */ +#define REQ_FIRST_PAGE (KEY_MAX + 3) /* move to first page */ +#define REQ_LAST_PAGE (KEY_MAX + 4) /* move to last page */ + +#define REQ_NEXT_FIELD (KEY_MAX + 5) /* move to next field */ +#define REQ_PREV_FIELD (KEY_MAX + 6) /* move to previous field */ +#define REQ_FIRST_FIELD (KEY_MAX + 7) /* move to first field */ +#define REQ_LAST_FIELD (KEY_MAX + 8) /* move to last field */ +#define REQ_SNEXT_FIELD (KEY_MAX + 9) /* move to sorted next field */ +#define REQ_SPREV_FIELD (KEY_MAX + 10) /* move to sorted prev field */ +#define REQ_SFIRST_FIELD (KEY_MAX + 11) /* move to sorted first field */ +#define REQ_SLAST_FIELD (KEY_MAX + 12) /* move to sorted last field */ +#define REQ_LEFT_FIELD (KEY_MAX + 13) /* move to left to field */ +#define REQ_RIGHT_FIELD (KEY_MAX + 14) /* move to right to field */ +#define REQ_UP_FIELD (KEY_MAX + 15) /* move to up to field */ +#define REQ_DOWN_FIELD (KEY_MAX + 16) /* move to down to field */ + +#define REQ_NEXT_CHAR (KEY_MAX + 17) /* move to next char in field */ +#define REQ_PREV_CHAR (KEY_MAX + 18) /* move to prev char in field */ +#define REQ_NEXT_LINE (KEY_MAX + 19) /* move to next line in field */ +#define REQ_PREV_LINE (KEY_MAX + 20) /* move to prev line in field */ +#define REQ_NEXT_WORD (KEY_MAX + 21) /* move to next word in field */ +#define REQ_PREV_WORD (KEY_MAX + 22) /* move to prev word in field */ +#define REQ_BEG_FIELD (KEY_MAX + 23) /* move to first char in field */ +#define REQ_END_FIELD (KEY_MAX + 24) /* move after last char in fld */ +#define REQ_BEG_LINE (KEY_MAX + 25) /* move to beginning of line */ +#define REQ_END_LINE (KEY_MAX + 26) /* move after last char in line */ +#define REQ_LEFT_CHAR (KEY_MAX + 27) /* move left in field */ +#define REQ_RIGHT_CHAR (KEY_MAX + 28) /* move right in field */ +#define REQ_UP_CHAR (KEY_MAX + 29) /* move up in field */ +#define REQ_DOWN_CHAR (KEY_MAX + 30) /* move down in field */ + +#define REQ_NEW_LINE (KEY_MAX + 31) /* insert/overlay new line */ +#define REQ_INS_CHAR (KEY_MAX + 32) /* insert blank char at cursor */ +#define REQ_INS_LINE (KEY_MAX + 33) /* insert blank line at cursor */ +#define REQ_DEL_CHAR (KEY_MAX + 34) /* delete char at cursor */ +#define REQ_DEL_PREV (KEY_MAX + 35) /* delete char before cursor */ +#define REQ_DEL_LINE (KEY_MAX + 36) /* delete line at cursor */ +#define REQ_DEL_WORD (KEY_MAX + 37) /* delete line at cursor */ +#define REQ_CLR_EOL (KEY_MAX + 38) /* clear to end of line */ +#define REQ_CLR_EOF (KEY_MAX + 39) /* clear to end of field */ +#define REQ_CLR_FIELD (KEY_MAX + 40) /* clear entire field */ +#define REQ_OVL_MODE (KEY_MAX + 41) /* begin overlay mode */ +#define REQ_INS_MODE (KEY_MAX + 42) /* begin insert mode */ +#define REQ_SCR_FLINE (KEY_MAX + 43) /* scroll field forward a line */ +#define REQ_SCR_BLINE (KEY_MAX + 44) /* scroll field backward a line */ +#define REQ_SCR_FPAGE (KEY_MAX + 45) /* scroll field forward a page */ +#define REQ_SCR_BPAGE (KEY_MAX + 46) /* scroll field backward a page */ +#define REQ_SCR_FHPAGE (KEY_MAX + 47) /* scroll field forward half page */ +#define REQ_SCR_BHPAGE (KEY_MAX + 48) /* scroll field backward half page */ +#define REQ_SCR_FCHAR (KEY_MAX + 49) /* horizontal scroll char */ +#define REQ_SCR_BCHAR (KEY_MAX + 50) /* horizontal scroll char */ +#define REQ_SCR_HFLINE (KEY_MAX + 51) /* horizontal scroll line */ +#define REQ_SCR_HBLINE (KEY_MAX + 52) /* horizontal scroll line */ +#define REQ_SCR_HFHALF (KEY_MAX + 53) /* horizontal scroll half line */ +#define REQ_SCR_HBHALF (KEY_MAX + 54) /* horizontal scroll half line */ + +#define REQ_VALIDATION (KEY_MAX + 55) /* validate field */ +#define REQ_NEXT_CHOICE (KEY_MAX + 56) /* display next field choice */ +#define REQ_PREV_CHOICE (KEY_MAX + 57) /* display prev field choice */ + +#define MIN_FORM_COMMAND (KEY_MAX + 1) /* used by form_driver */ +#define MAX_FORM_COMMAND (KEY_MAX + 57) /* used by form_driver */ + +#if defined(MAX_COMMAND) +# if (MAX_FORM_COMMAND > MAX_COMMAND) +# error Something is wrong -- MAX_FORM_COMMAND is greater than MAX_COMMAND +# elif (MAX_COMMAND != (KEY_MAX + 128)) +# error Something is wrong -- MAX_COMMAND is already inconsistently defined. +# endif +#else +# define MAX_COMMAND (KEY_MAX + 128) +#endif + + /************************* + * standard field types * + *************************/ +extern FIELDTYPE *TYPE_ALPHA, + *TYPE_ALNUM, + *TYPE_ENUM, + *TYPE_INTEGER, + *TYPE_NUMERIC, + *TYPE_REGEXP; + + /************************************ + * built-in additional field types * + * They are not defined in SVr4 * + ************************************/ +extern FIELDTYPE *TYPE_IPV4; /* Internet IP Version 4 address */ + + /*********************** + * Default objects * + ***********************/ +extern FORM *_nc_Default_Form; +extern FIELD *_nc_Default_Field; + + + /*********************** + * FIELDTYPE routines * + ***********************/ +extern FIELDTYPE + *new_fieldtype( + bool (* const field_check)(FIELD *,const void *), + bool (* const char_check)(int,const void *)), + *link_fieldtype(FIELDTYPE *,FIELDTYPE *); + +extern int free_fieldtype(FIELDTYPE *), + set_fieldtype_choice (FIELDTYPE *, + bool (* const next_choice)(FIELD *,const void *), + bool (* const prev_choice)(FIELD *,const void *)); + + /******************* + * FIELD routines * + *******************/ +extern FIELD *new_field(int,int,int,int,int,int), + *dup_field(FIELD *,int,int), + *link_field(FIELD *,int,int); + +extern int free_field(FIELD *), + field_info(const FIELD *,int *,int *,int *,int *,int *,int *), + dynamic_field_info(const FIELD *,int *,int *,int *), + set_max_field( FIELD *,int), + move_field(FIELD *,int,int), + set_field_type(FIELD *,FIELDTYPE *,...), + set_new_page(FIELD *,bool), + set_field_just(FIELD *,int), + field_just(const FIELD *), + set_field_fore(FIELD *,chtype), + set_field_back(FIELD *,chtype), + set_field_pad(FIELD *,int), + field_pad(const FIELD *), + set_field_buffer(FIELD *,int,const char *), + set_field_status(FIELD *,bool), + set_field_userptr(FIELD *, void *), + set_field_opts(FIELD *,Field_Options), + field_opts_on(FIELD *,Field_Options), + field_opts_off(FIELD *,Field_Options); + +extern chtype field_fore(const FIELD *), + field_back(const FIELD *); + +extern bool new_page(const FIELD *), + field_status(const FIELD *); + +extern void *field_arg(const FIELD *); + +extern void *field_userptr(const FIELD *); + +extern FIELDTYPE + *field_type(const FIELD *); + +extern char* field_buffer(const FIELD *,int); + +extern Field_Options + field_opts(const FIELD *); + + /****************** + * FORM routines * + ******************/ +extern FORM *new_form(FIELD **); + +extern FIELD **form_fields(const FORM *), + *current_field(const FORM *); + +extern WINDOW *form_win(const FORM *), + *form_sub(const FORM *); + +extern Form_Hook + form_init(const FORM *), + form_term(const FORM *), + field_init(const FORM *), + field_term(const FORM *); + +extern int free_form(FORM *), + set_form_fields(FORM *,FIELD **), + field_count(const FORM *), + set_form_win(FORM *,WINDOW *), + set_form_sub(FORM *,WINDOW *), + set_current_field(FORM *,FIELD *), + field_index(const FIELD *), + set_form_page(FORM *,int), + form_page(const FORM *), + scale_form(const FORM *,int *,int *), + set_form_init(FORM *,Form_Hook), + set_form_term(FORM *,Form_Hook), + set_field_init(FORM *,Form_Hook), + set_field_term(FORM *,Form_Hook), + post_form(FORM *), + unpost_form(FORM *), + pos_form_cursor(FORM *), + form_driver(FORM *,int), + set_form_userptr(FORM *,void *), + set_form_opts(FORM *,Form_Options), + form_opts_on(FORM *,Form_Options), + form_opts_off(FORM *,Form_Options), + form_request_by_name(const char *); + +extern const char + *form_request_name(int); + +extern void *form_userptr(const FORM *); + +extern Form_Options + form_opts(const FORM *); + +extern bool data_ahead(const FORM *), + data_behind(const FORM *); + +#ifdef __cplusplus + } +#endif + +#endif /* FORM_H */ diff --git a/Source/CursesDialog/form/form.priv.h b/Source/CursesDialog/form/form.priv.h new file mode 100644 index 0000000..3691f2f --- /dev/null +++ b/Source/CursesDialog/form/form.priv.h @@ -0,0 +1,134 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "mf_common.h" +#include "form.h" + +/* get around odd bug on aCC and itanium */ +#if defined(__hpux) && defined(__ia64) +#define getmaxx __getmaxx +#define getmaxy __getmaxy +#endif + +/* form status values */ +#define _OVLMODE (0x04) /* Form is in overlay mode */ +#define _WINDOW_MODIFIED (0x10) /* Current field window has been modified */ +#define _FCHECK_REQUIRED (0x20) /* Current field needs validation */ + +/* field status values */ +#define _CHANGED (0x01) /* Field has been changed */ +#define _NEWTOP (0x02) /* Vertical scrolling occured */ +#define _NEWPAGE (0x04) /* field begins new page of form */ +#define _MAY_GROW (0x08) /* dynamic field may still grow */ + +/* fieldtype status values */ +#define _LINKED_TYPE (0x01) /* Type is a linked type */ +#define _HAS_ARGS (0x02) /* Type has arguments */ +#define _HAS_CHOICE (0x04) /* Type has choice methods */ +#define _RESIDENT (0x08) /* Type is builtin */ + +/* This are the field options required to be a selectable field in field + navigation requests */ +#define O_SELECTABLE (O_ACTIVE | O_VISIBLE) + +/* If form is NULL replace form argument by default-form */ +#define Normalize_Form(form) ((form)=(form)?(form):_nc_Default_Form) + +/* If field is NULL replace field argument by default-field */ +#define Normalize_Field(field) ((field)=(field)?(field):_nc_Default_Field) + +/* Retrieve forms window */ +#define Get_Form_Window(form) \ + ((form)->sub?(form)->sub:((form)->win?(form)->win:stdscr)) + +/* Calculate the size for a single buffer for this field */ +#define Buffer_Length(field) ((field)->drows * (field)->dcols) + +/* Calculate the total size of all buffers for this field */ +#define Total_Buffer_Size(field) \ + ( (Buffer_Length(field) + 1) * (1+(field)->nbuf) ) + +/* Logic to determine whether or not a field is single lined */ +#define Single_Line_Field(field) \ + (((field)->rows + (field)->nrow) == 1) + +/* Logic to determine whether or not a field is selectable */ +#define Field_Is_Selectable(f) (((f)->opts & O_SELECTABLE)==O_SELECTABLE) +#define Field_Is_Not_Selectable(f) (((f)->opts & O_SELECTABLE)!=O_SELECTABLE) + +typedef struct typearg { + struct typearg *left; + struct typearg *right; +} TypeArgument; + +/* This is a dummy request code (normally invalid) to be used internally + with the form_driver() routine to position to the first active field + on the form +*/ +#define FIRST_ACTIVE_MAGIC (-291056) + +#define ALL_FORM_OPTS ( \ + O_NL_OVERLOAD |\ + O_BS_OVERLOAD ) + +#define ALL_FIELD_OPTS ( \ + O_VISIBLE |\ + O_ACTIVE |\ + O_PUBLIC |\ + O_EDIT |\ + O_WRAP |\ + O_BLANK |\ + O_AUTOSKIP|\ + O_NULLOK |\ + O_PASSOK |\ + O_STATIC ) + + +#define C_BLANK ' ' +#define is_blank(c) ((c)==C_BLANK) + +extern const FIELDTYPE* _nc_Default_FieldType; + +extern TypeArgument* _nc_Make_Argument(const FIELDTYPE*,va_list*,int*); +extern TypeArgument *_nc_Copy_Argument(const FIELDTYPE*,const TypeArgument*, int*); +extern void _nc_Free_Argument(const FIELDTYPE*,TypeArgument*); +extern bool _nc_Copy_Type(FIELD*, FIELD const *); +extern void _nc_Free_Type(FIELD *); + +extern int _nc_Synchronize_Attributes(FIELD*); +extern int _nc_Synchronize_Options(FIELD*,Field_Options); +extern int _nc_Set_Form_Page(FORM*,int,FIELD*); +extern int _nc_Refresh_Current_Field(FORM*); +extern FIELD* _nc_First_Active_Field(FORM*); +extern bool _nc_Internal_Validation(FORM*); +extern int _nc_Set_Current_Field(FORM*,FIELD*); +extern int _nc_Position_Form_Cursor(FORM*); diff --git a/Source/CursesDialog/form/frm_cursor.c b/Source/CursesDialog/form/frm_cursor.c new file mode 100644 index 0000000..6c311fe --- /dev/null +++ b/Source/CursesDialog/form/frm_cursor.c @@ -0,0 +1,66 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int pos_form_cursor(FORM * form) +| +| Description : Moves the form window cursor to the location required +| by the form driver to resume form processing. This may +| be needed after the application calls a curses library +| I/O routine that modifies the cursor position. +| +| Return Values : E_OK - Success +| E_SYSTEM_ERROR - System error. +| E_BAD_ARGUMENT - Invalid form pointer +| E_NOT_POSTED - Form is not posted ++--------------------------------------------------------------------------*/ +int pos_form_cursor(FORM * form) +{ + int res; + + if (!form) + res = E_BAD_ARGUMENT; + else + { + if (!(form->status & _POSTED)) + res = E_NOT_POSTED; + else + res = _nc_Position_Form_Cursor(form); + } + RETURN(res); +} + +/* frm_cursor.c ends here */ diff --git a/Source/CursesDialog/form/frm_data.c b/Source/CursesDialog/form/frm_data.c new file mode 100644 index 0000000..fb62ab8 --- /dev/null +++ b/Source/CursesDialog/form/frm_data.c @@ -0,0 +1,183 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +extern int winnstr(WINDOW *, char *, int); + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : bool data_behind(const FORM *form) +| +| Description : Check for off-screen data behind. This is nearly trivial +| becose the begin of a field is fixed. +| +| Return Values : TRUE - there are off-screen data behind +| FALSE - there are no off-screen data behind ++--------------------------------------------------------------------------*/ +bool data_behind(const FORM *form) +{ + bool result = FALSE; + + if (form && (form->status & _POSTED) && form->current) + { + FIELD *field; + + field = form->current; + if (!Single_Line_Field(field)) + { + result = (form->toprow==0) ? FALSE : TRUE; + } + else + { + result = (form->begincol==0) ? FALSE : TRUE; + } + } + return(result); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static char * After_Last_Non_Pad_Position( +| char *buffer, +| int len, +| int pad) +| +| Description : Find the last position in the buffer that doesn't +| contain a padding character. +| +| Return Values : The pointer to this position ++--------------------------------------------------------------------------*/ +INLINE +static char * After_Last_Non_Pad_Position(char *buffer, int len, int pad) +{ + char *end = buffer + len; + + assert(buffer && len>=0); + while ( (buffer < end) && (*(end-1)==pad) ) + end--; + + return end; +} + +#define SMALL_BUFFER_SIZE (80) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : bool data_ahead(const FORM *form) +| +| Description : Check for off-screen data ahead. This is more difficult +| because a dynamic field has a variable end. +| +| Return Values : TRUE - there are off-screen data ahead +| FALSE - there are no off-screen data ahead ++--------------------------------------------------------------------------*/ +bool data_ahead(const FORM *form) +{ + bool result = FALSE; + + if (form && (form->status & _POSTED) && form->current) + { + static char buffer[SMALL_BUFFER_SIZE + 1]; + FIELD *field; + bool large_buffer; + bool cursor_moved = FALSE; + char *bp; + char *found_content; + int pos; + + field = form->current; + assert(form->w != 0); + + large_buffer = (field->cols > SMALL_BUFFER_SIZE); + if (large_buffer) + bp = (char *)malloc((size_t)(field->cols) + 1); + else + bp = buffer; + + assert(bp != 0); + + if (Single_Line_Field(field)) + { + int check_len; + + pos = form->begincol + field->cols; + while (pos < field->dcols) + { + check_len = field->dcols - pos; + if ( check_len >= field->cols ) + check_len = field->cols; + cursor_moved = TRUE; + wmove(form->w,0,pos); + winnstr(form->w,bp,check_len); + found_content = + After_Last_Non_Pad_Position(bp,check_len,field->pad); + if (found_content==bp) + pos += field->cols; + else + { + result = TRUE; + break; + } + } + } + else + { + pos = form->toprow + field->rows; + while (pos < field->drows) + { + cursor_moved = TRUE; + wmove(form->w,pos,0); + pos++; + winnstr(form->w,bp,field->cols); + found_content = + After_Last_Non_Pad_Position(bp,field->cols,field->pad); + if (found_content!=bp) + { + result = TRUE; + break; + } + } + } + + if (large_buffer) + free(bp); + + if (cursor_moved) + wmove(form->w,form->currow,form->curcol); + } + return(result); +} + +/* frm_data.c ends here */ diff --git a/Source/CursesDialog/form/frm_def.c b/Source/CursesDialog/form/frm_def.c new file mode 100644 index 0000000..0b28f5f --- /dev/null +++ b/Source/CursesDialog/form/frm_def.c @@ -0,0 +1,376 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/* this can't be readonly */ +static FORM default_form = { + 0, /* status */ + 0, /* rows */ + 0, /* cols */ + 0, /* currow */ + 0, /* curcol */ + 0, /* toprow */ + 0, /* begincol */ + -1, /* maxfield */ + -1, /* maxpage */ + -1, /* curpage */ + ALL_FORM_OPTS, /* opts */ + (WINDOW *)0, /* win */ + (WINDOW *)0, /* sub */ + (WINDOW *)0, /* w */ + (FIELD **)0, /* field */ + (FIELD *)0, /* current */ + (_PAGE *)0, /* page */ + (char *)0, /* usrptr */ + NULL, /* forminit */ + NULL, /* formterm */ + NULL, /* fieldinit */ + NULL /* fieldterm */ +}; + +FORM *_nc_Default_Form = &default_form; + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static FIELD *Insert_Field_By_Position( +| FIELD *new_field, +| FIELD *head ) +| +| Description : Insert new_field into sorted fieldlist with head "head" +| and return new head of sorted fieldlist. Sorting +| criteria is (row,column). This is a circular list. +| +| Return Values : New head of sorted fieldlist ++--------------------------------------------------------------------------*/ +static FIELD *Insert_Field_By_Position(FIELD *newfield, FIELD *head) +{ + FIELD *current, *newhead; + + assert(newfield != 0); + + if (!head) + { /* empty list is trivial */ + newhead = newfield->snext = newfield->sprev = newfield; + } + else + { + newhead = current = head; + while((current->frow < newfield->frow) || + ((current->frow==newfield->frow) && + (current->fcol < newfield->fcol)) ) + { + current = current->snext; + if (current==head) + { /* We cycled through. Reset head to indicate that */ + head = (FIELD *)0; + break; + } + } + /* we leave the loop with current pointing to the field after newfield*/ + newfield->snext = current; + newfield->sprev = current->sprev; + newfield->snext->sprev = newfield; + newfield->sprev->snext = newfield; + if (current==head) + newhead = newfield; + } + return(newhead); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Disconnect_Fields(FORM *form) +| +| Description : Break association between form and array of fields. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Disconnect_Fields( FORM * form ) +{ + if (form->field) + { + FIELD **fields; + + for(fields=form->field;*fields;fields++) + { + if (form == (*fields)->form) + (*fields)->form = (FORM *)0; + } + + form->rows = form->cols = 0; + form->maxfield = form->maxpage = -1; + form->field = (FIELD **)0; + if (form->page) + free(form->page); + form->page = (_PAGE *)0; + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Connect_Fields(FORM *form, FIELD **fields) +| +| Description : Set association between form and array of fields. +| +| Return Values : E_OK - no error +| E_CONNECTED - a field is already connected +| E_BAD_ARGUMENT - Invalid form pointer or field array +| E_SYSTEM_ERROR - not enough memory ++--------------------------------------------------------------------------*/ +static int Connect_Fields(FORM * form, FIELD ** fields) +{ + int field_cnt, j; + int page_nr; + int maximum_row_in_field, maximum_col_in_field; + _PAGE *pg; + + assert(form != 0); + + form->field = fields; + form->maxfield = 0; + form->maxpage = 0; + + if (!fields) + RETURN(E_OK); + + page_nr = 0; + /* store formpointer in fields and count pages */ + for(field_cnt=0;fields[field_cnt];field_cnt++) + { + if (fields[field_cnt]->form) + RETURN(E_CONNECTED); + if ( field_cnt==0 || + (fields[field_cnt]->status & _NEWPAGE)) + page_nr++; + fields[field_cnt]->form = form; + } + if (field_cnt==0) + RETURN(E_BAD_ARGUMENT); + + /* allocate page structures */ + if ( (pg = (_PAGE *)malloc(page_nr * sizeof(_PAGE))) != (_PAGE *)0 ) + { + form->page = pg; + } + else + RETURN(E_SYSTEM_ERROR); + + /* Cycle through fields and calculate page boundaries as well as + size of the form */ + for(j=0;jpmin = j; + else + { + if (fields[j]->status & _NEWPAGE) + { + pg->pmax = j-1; + pg++; + pg->pmin = j; + } + } + + maximum_row_in_field = fields[j]->frow + fields[j]->rows; + maximum_col_in_field = fields[j]->fcol + fields[j]->cols; + + if (form->rows < maximum_row_in_field) + form->rows = maximum_row_in_field; + if (form->cols < maximum_col_in_field) + form->cols = maximum_col_in_field; + } + + pg->pmax = field_cnt-1; + form->maxfield = field_cnt; + form->maxpage = page_nr; + + /* Sort fields on form pages */ + for(page_nr = 0;page_nr < form->maxpage; page_nr++) + { + FIELD *fld = (FIELD *)0; + for(j = form->page[page_nr].pmin;j <= form->page[page_nr].pmax;j++) + { + fields[j]->index = j; + fields[j]->page = page_nr; + fld = Insert_Field_By_Position(fields[j],fld); + } + form->page[page_nr].smin = fld->index; + form->page[page_nr].smax = fld->sprev->index; + } + RETURN(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Associate_Fields(FORM *form, FIELD **fields) +| +| Description : Set association between form and array of fields. +| If there are fields, position to first active field. +| +| Return Values : E_OK - success +| any other - error occured ++--------------------------------------------------------------------------*/ +INLINE static int Associate_Fields(FORM *form, FIELD **fields) +{ + int res = Connect_Fields(form,fields); + if (res == E_OK) + { + if (form->maxpage>0) + { + form->curpage = 0; + form_driver(form,FIRST_ACTIVE_MAGIC); + } + else + { + form->curpage = -1; + form->current = (FIELD *)0; + } + } + return(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : FORM *new_form( FIELD **fields ) +| +| Description : Create new form with given array of fields. +| +| Return Values : Pointer to form. NULL if error occured. ++--------------------------------------------------------------------------*/ +FORM *new_form(FIELD ** fields) +{ + int err = E_SYSTEM_ERROR; + + FORM *form = (FORM *)malloc(sizeof(FORM)); + + if (form) + { + *form = *_nc_Default_Form; + if ((err=Associate_Fields(form,fields))!=E_OK) + { + free_form(form); + form = (FORM *)0; + } + } + + if (!form) + SET_ERROR(err); + + return(form); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int free_form( FORM *form ) +| +| Description : Release internal memory associated with form. +| +| Return Values : E_OK - no error +| E_BAD_ARGUMENT - invalid form pointer +| E_POSTED - form is posted ++--------------------------------------------------------------------------*/ +int free_form(FORM * form) +{ + if ( !form ) + RETURN(E_BAD_ARGUMENT); + + if ( form->status & _POSTED) + RETURN(E_POSTED); + + Disconnect_Fields( form ); + if (form->page) + free(form->page); + free(form); + + RETURN(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_form_fields( FORM *form, FIELD **fields ) +| +| Description : Set a new association of an array of fields to a form +| +| Return Values : E_OK - no error +| E_BAD_ARGUMENT - invalid form pointer +| E_POSTED - form is posted ++--------------------------------------------------------------------------*/ +int set_form_fields(FORM * form, FIELD ** fields) +{ + FIELD **old; + int res; + + if ( !form ) + RETURN(E_BAD_ARGUMENT); + + if ( form->status & _POSTED ) + RETURN(E_POSTED); + + old = form->field; + Disconnect_Fields( form ); + + if( (res = Associate_Fields( form, fields )) != E_OK ) + Connect_Fields( form, old ); + + RETURN(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : FIELD **form_fields( const FORM *form ) +| +| Description : Retrieve array of fields +| +| Return Values : Pointer to field array ++--------------------------------------------------------------------------*/ +FIELD **form_fields(const FORM * form) +{ + return (Normalize_Form( form )->field); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int field_count( const FORM *form ) +| +| Description : Retrieve number of fields +| +| Return Values : Number of fields, -1 if none are defined ++--------------------------------------------------------------------------*/ +int field_count(const FORM * form) +{ + return (Normalize_Form( form )->maxfield); +} + +/* frm_def.c ends here */ diff --git a/Source/CursesDialog/form/frm_driver.c b/Source/CursesDialog/form/frm_driver.c new file mode 100644 index 0000000..f234722 --- /dev/null +++ b/Source/CursesDialog/form/frm_driver.c @@ -0,0 +1,3898 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ +#if defined(__hpux) + #define _XOPEN_SOURCE_EXTENDED +#endif +#include "form.priv.h" +#if defined(__hpux) + #undef _XOPEN_SOURCE_EXTENDED +#endif + +/* AIX seems to define this */ +#undef lines +#undef columns + +MODULE_ID("$Id$") + +/* These declarations are missing from curses.h on some platforms. */ +extern int winnstr(WINDOW *, char *, int); +#if defined(__DECCXX_VER) || (defined(__GNUC__) && defined(__osf__)) +extern int waddnstr(WINDOW *,const char *const,int); +extern void wbkgdset(WINDOW *,chtype); +#ifndef untouchwin +extern int untouchwin(WINDOW *); +#endif +extern void wcursyncup(WINDOW *); +extern int copywin(const WINDOW*,WINDOW*,int,int,int,int,int,int,int); +extern bool is_linetouched(WINDOW *,int); +extern void wsyncup(WINDOW *); +extern WINDOW *derwin(WINDOW *,int,int,int,int); +extern int winsnstr(WINDOW *, const char *,int); +extern int winsdelln(WINDOW *,int); +#endif + +/*---------------------------------------------------------------------------- + This is the core module of the form library. It contains the majority + of the driver routines as well as the form_driver function. + + Essentially this module is nearly the whole library. This is because + all the functions in this module depends on some others in the module, + so it makes no sense to split them into separate files because they + will always be linked together. The only acceptable concern is turnaround + time for this module, but now we have all Pentiums or Riscs, so what! + + The driver routines are grouped into nine generic categories: + + a) Page Navigation ( all functions prefixed by PN_ ) + The current page of the form is left and some new page is + entered. + b) Inter-Field Navigation ( all functions prefixed by FN_ ) + The current field of the form is left and some new field is + entered. + c) Intra-Field Navigation ( all functions prefixed by IFN_ ) + The current position in the current field is changed. + d) Vertical Scrolling ( all functions prefixed by VSC_ ) + Esseantially this is a specialization of Intra-Field navigation. + It has to check for a multi-line field. + e) Horizontal Scrolling ( all functions prefixed by HSC_ ) + Esseantially this is a specialization of Intra-Field navigation. + It has to check for a single-line field. + f) Field Editing ( all functions prefixed by FE_ ) + The content of the current field is changed + g) Edit Mode requests ( all functions prefixed by EM_ ) + Switching between insert and overlay mode + h) Field-Validation requests ( all functions prefixed by FV_ ) + Perform verifications of the field. + i) Choice requests ( all functions prefixed by CR_ ) + Requests to enumerate possible field values + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Some remarks on the placements of assert() macros : + I use them only on "strategic" places, i.e. top level entries where + I want to make sure that things are set correctly. Throughout subordinate + routines I omit them mostly. + --------------------------------------------------------------------------*/ + +/* +Some options that may effect compatibility in behavior to SVr4 forms, +but they are here to allow a more intuitive and user friendly behaviour of +our form implementation. This doesn't affect the API, so we feel it is +uncritical. + +The initial implementation tries to stay very close with the behaviour +of the original SVr4 implementation, although in some areas it is quite +clear that this isn't the most appropriate way. As far as possible this +sources will allow you to build a forms lib that behaves quite similar +to SVr4, but now and in the future we will give you better options. +Perhaps at some time we will make this configurable at runtime. +*/ + +/* Implement a more user-friendly previous/next word behaviour */ +#define FRIENDLY_PREV_NEXT_WORD (1) +/* Fix the wrong behaviour for forms with all fields inactive */ +#define FIX_FORM_INACTIVE_BUG (1) +/* Allow dynamic field growth also when navigating past the end */ +#define GROW_IF_NAVIGATE (1) + +/*---------------------------------------------------------------------------- + Forward references to some internally used static functions + --------------------------------------------------------------------------*/ +static int Inter_Field_Navigation ( int (* const fct) (FORM *), FORM * form ); +static int FN_Next_Field (FORM * form); +static int FN_Previous_Field (FORM * form); +static int FE_New_Line(FORM *); +static int FE_Delete_Previous(FORM *); + +/*---------------------------------------------------------------------------- + Macro Definitions. + + Some Remarks on that: I use the convention to use UPPERCASE for constants + defined by Macros. If I provide a macro as a kind of inline routine to + provide some logic, I use my Upper_Lower case style. + --------------------------------------------------------------------------*/ + +/* Calculate the position of a single row in a field buffer */ +#define Position_Of_Row_In_Buffer(field,row) ((row)*(field)->dcols) + +/* Calculate start address for the fields buffer# N */ +#define Address_Of_Nth_Buffer(field,N) \ + ((field)->buf + (N)*(1+Buffer_Length(field))) + +/* Calculate the start address of the row in the fields specified buffer# N */ +#define Address_Of_Row_In_Nth_Buffer(field,N,row) \ + (Address_Of_Nth_Buffer(field,N) + Position_Of_Row_In_Buffer(field,row)) + +/* Calculate the start address of the row in the fields primary buffer */ +#define Address_Of_Row_In_Buffer(field,row) \ + Address_Of_Row_In_Nth_Buffer(field,0,row) + +/* Calculate the start address of the row in the forms current field + buffer# N */ +#define Address_Of_Current_Row_In_Nth_Buffer(form,N) \ + Address_Of_Row_In_Nth_Buffer((form)->current,N,(form)->currow) + +/* Calculate the start address of the row in the forms current field + primary buffer */ +#define Address_Of_Current_Row_In_Buffer(form) \ + Address_Of_Current_Row_In_Nth_Buffer(form,0) + +/* Calculate the address of the cursor in the forms current field + primary buffer */ +#define Address_Of_Current_Position_In_Nth_Buffer(form,N) \ + (Address_Of_Current_Row_In_Nth_Buffer(form,N) + (form)->curcol) + +/* Calculate the address of the cursor in the forms current field + buffer# N */ +#define Address_Of_Current_Position_In_Buffer(form) \ + Address_Of_Current_Position_In_Nth_Buffer(form,0) + +/* Logic to decide wether or not a field is actually a field with + vertical or horizontal scrolling */ +#define Is_Scroll_Field(field) \ + (((field)->drows > (field)->rows) || \ + ((field)->dcols > (field)->cols)) + +/* Logic to decide whether or not a field needs to have an individual window + instead of a derived window because it contains invisible parts. + This is true for non-public fields and for scrollable fields. */ +#define Has_Invisible_Parts(field) \ + (!((field)->opts & O_PUBLIC) || \ + Is_Scroll_Field(field)) + +/* Logic to decide whether or not a field needs justification */ +#define Justification_Allowed(field) \ + (((field)->just != NO_JUSTIFICATION) && \ + (Single_Line_Field(field)) && \ + (((field)->dcols == (field)->cols) && \ + ((field)->opts & O_STATIC)) ) + +/* Logic to determine whether or not a dynamic field may still grow */ +#define Growable(field) ((field)->status & _MAY_GROW) + +/* Macro to set the attributes for a fields window */ +#define Set_Field_Window_Attributes(field,win) \ +( wbkgdset((win),(chtype)((field)->pad | (field)->back)), \ + wattrset((win),(field)->fore) ) + +/* Logic to decide whether or not a field really appears on the form */ +#define Field_Really_Appears(field) \ + ((field->form) &&\ + (field->form->status & _POSTED) &&\ + (field->opts & O_VISIBLE) &&\ + (field->page == field->form->curpage)) + +/* Logic to determine whether or not we are on the first position in the + current field */ +#define First_Position_In_Current_Field(form) \ + (((form)->currow==0) && ((form)->curcol==0)) + + +#define Minimum(a,b) (((a)<=(b)) ? (a) : (b)) +#define Maximum(a,b) (((a)>=(b)) ? (a) : (b)) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static char *Get_Start_Of_Data(char * buf, int blen) +| +| Description : Return pointer to first non-blank position in buffer. +| If buffer is empty return pointer to buffer itself. +| +| Return Values : Pointer to first non-blank position in buffer ++--------------------------------------------------------------------------*/ +INLINE static char *Get_Start_Of_Data(char * buf, int blen) +{ + char *p = buf; + char *end = &buf[blen]; + + assert(buf && blen>=0); + while( (p < end) && is_blank(*p) ) + p++; + return( (p==end) ? buf : p ); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static char *After_End_Of_Data(char * buf, int blen) +| +| Description : Return pointer after last non-blank position in buffer. +| If buffer is empty, return pointer to buffer itself. +| +| Return Values : Pointer to position after last non-blank position in +| buffer. ++--------------------------------------------------------------------------*/ +INLINE static char *After_End_Of_Data(char * buf,int blen) +{ + char *p = &buf[blen]; + + assert(buf && blen>=0); + while( (p>buf) && is_blank(p[-1]) ) + p--; + return( p ); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static char *Get_First_Whitespace_Character( +| char * buf, int blen) +| +| Description : Position to the first whitespace character. +| +| Return Values : Pointer to first whitespace character in buffer. ++--------------------------------------------------------------------------*/ +INLINE static char *Get_First_Whitespace_Character(char * buf, int blen) +{ + char *p = buf; + char *end = &p[blen]; + + assert(buf && blen>=0); + while( (p < end) && !is_blank(*p)) + p++; + return( (p==end) ? buf : p ); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static char *After_Last_Whitespace_Character( +| char * buf, int blen) +| +| Description : Get the position after the last whitespace character. +| +| Return Values : Pointer to position after last whitespace character in +| buffer. ++--------------------------------------------------------------------------*/ +INLINE static char *After_Last_Whitespace_Character(char * buf, int blen) +{ + char *p = &buf[blen]; + + assert(buf && blen>=0); + while( (p>buf) && !is_blank(p[-1]) ) + p--; + return( p ); +} + +/* Set this to 1 to use the div_t version. This is a good idea if your + compiler has an intrinsic div() support. Unfortunately GNU-C has it + not yet. + N.B.: This only works if form->curcol follows immediately form->currow + and both are of type int. +*/ +#define USE_DIV_T (0) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Adjust_Cursor_Position( +| FORM * form, const char * pos) +| +| Description : Set current row and column of the form to values +| corresponding to the buffer position. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +INLINE static void Adjust_Cursor_Position(FORM * form, const char * pos) +{ + FIELD *field; + int idx; + + field = form->current; + assert( pos >= field->buf && field->dcols > 0); + idx = (int)( pos - field->buf ); +#if USE_DIV_T + *((div_t *)&(form->currow)) = div(idx,field->dcols); +#else + form->currow = idx / field->dcols; + form->curcol = idx - field->cols * form->currow; +#endif + if ( field->drows < form->currow ) + form->currow = 0; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Buffer_To_Window( +| const FIELD * field, +| WINDOW * win) +| +| Description : Copy the buffer to the window. If its a multiline +| field, the buffer is split to the lines of the +| window without any editing. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Buffer_To_Window(const FIELD * field, WINDOW * win) +{ + int width, height; + int len; + int row; + char *pBuffer; + + assert(win && field); + +#if defined(__LSB_VERSION__) + getmaxyx(win, height, width); +#else + width = getmaxx(win); + height = getmaxy(win); +#endif + + for(row=0, pBuffer=field->buf; + row < height; + row++, pBuffer += width ) + { + if ((len = (int)( After_End_Of_Data( pBuffer, width ) - pBuffer )) > 0) + { + wmove( win, row, 0 ); + waddnstr( win, pBuffer, len ); + } + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Window_To_Buffer( +| WINDOW * win, +| FIELD * field) +| +| Description : Copy the content of the window into the buffer. +| The multiple lines of a window are simply +| concatenated into the buffer. Pad characters in +| the window will be replaced by blanks in the buffer. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Window_To_Buffer(WINDOW * win, FIELD * field) +{ + int pad; + int len = 0; + char *p; + int row, height; + + assert(win && field && field->buf ); + + pad = field->pad; + p = field->buf; +#if defined(__LSB_VERSION__) + { int width; getmaxyx(win, height, width); } +#else + height = getmaxy(win); +#endif + + for(row=0; (row < height) && (row < field->drows); row++ ) + { + wmove( win, row, 0 ); + len += winnstr( win, p+len, field->dcols ); + } + p[len] = '\0'; + + /* replace visual padding character by blanks in buffer */ + if (pad != C_BLANK) + { + int i; + for(i=0; istatus & _WINDOW_MODIFIED) + { + form->status &= ~_WINDOW_MODIFIED; + form->status |= _FCHECK_REQUIRED; + Window_To_Buffer(form->w,form->current); + wmove(form->w,form->currow,form->curcol); + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Field_Grown( FIELD *field, int amount) +| +| Description : This function is called for growable dynamic fields +| only. It has to increase the buffers and to allocate +| a new window for this field. +| This function has the side effect to set a new +| field-buffer pointer, the dcols and drows values +| as well as a new current Window for the field. +| +| Return Values : TRUE - field successfully increased +| FALSE - there was some error ++--------------------------------------------------------------------------*/ +static bool Field_Grown(FIELD * field, int amount) +{ + bool result = FALSE; + + if (field && Growable(field)) + { + bool single_line_field = Single_Line_Field(field); + int old_buflen = Buffer_Length(field); + int new_buflen; + int old_dcols = field->dcols; + int old_drows = field->drows; + char *oldbuf = field->buf; + char *newbuf; + + int growth; + FORM *form = field->form; + bool need_visual_update = ((form != (FORM *)0) && + (form->status & _POSTED) && + (form->current==field)); + + if (need_visual_update) + Synchronize_Buffer(form); + + if (single_line_field) + { + growth = field->cols * amount; + if (field->maxgrow) + growth = Minimum(field->maxgrow - field->dcols,growth); + field->dcols += growth; + if (field->dcols == field->maxgrow) + field->status &= ~_MAY_GROW; + } + else + { + growth = (field->rows + field->nrow) * amount; + if (field->maxgrow) + growth = Minimum(field->maxgrow - field->drows,growth); + field->drows += growth; + if (field->drows == field->maxgrow) + field->status &= ~_MAY_GROW; + } + /* drows, dcols changed, so we get really the new buffer length */ + new_buflen = Buffer_Length(field); + newbuf=(char *)malloc((size_t)Total_Buffer_Size(field)); + if (!newbuf) + { /* restore to previous state */ + field->dcols = old_dcols; + field->drows = old_drows; + if (( single_line_field && (field->dcols!=field->maxgrow)) || + (!single_line_field && (field->drows!=field->maxgrow))) + field->status |= _MAY_GROW; + return FALSE; + } + else + { /* Copy all the buffers. This is the reason why we can't + just use realloc(). + */ + int i; + char *old_bp; + char *new_bp; + + field->buf = newbuf; + for(i=0;i<=field->nbuf;i++) + { + new_bp = Address_Of_Nth_Buffer(field,i); + old_bp = oldbuf + i*(1+old_buflen); + memcpy(new_bp,old_bp,(size_t)old_buflen); + if (new_buflen > old_buflen) + memset(new_bp + old_buflen,C_BLANK, + (size_t)(new_buflen - old_buflen)); + *(new_bp + new_buflen) = '\0'; + } + + if (need_visual_update) + { + WINDOW *new_window = newpad(field->drows,field->dcols); + if (!new_window) + { /* restore old state */ + field->dcols = old_dcols; + field->drows = old_drows; + field->buf = oldbuf; + if (( single_line_field && + (field->dcols!=field->maxgrow)) || + (!single_line_field && + (field->drows!=field->maxgrow))) + field->status |= _MAY_GROW; + free( newbuf ); + return FALSE; + } + assert(form!=(FORM *)0); + delwin(form->w); + form->w = new_window; + Set_Field_Window_Attributes(field,form->w); + werase(form->w); + Buffer_To_Window(field,form->w); + untouchwin(form->w); + wmove(form->w,form->currow,form->curcol); + } + + free(oldbuf); + /* reflect changes in linked fields */ + if (field != field->link) + { + FIELD *linked_field; + for(linked_field = field->link; + linked_field!= field; + linked_field = linked_field->link) + { + linked_field->buf = field->buf; + linked_field->drows = field->drows; + linked_field->dcols = field->dcols; + } + } + result = TRUE; + } + } + return(result); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int _nc_Position_Form_Cursor(FORM * form) +| +| Description : Position the cursor in the window for the current +| field to be in sync. with the currow and curcol +| values. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid form pointer +| E_SYSTEM_ERROR - form has no current field or +| field-window ++--------------------------------------------------------------------------*/ +int +_nc_Position_Form_Cursor(FORM * form) +{ + FIELD *field; + WINDOW *formwin; + + if (!form) + return(E_BAD_ARGUMENT); + + if (!form->w || !form->current) + return(E_SYSTEM_ERROR); + + field = form->current; + formwin = Get_Form_Window(form); + + wmove( form->w, form->currow, form->curcol ); + if ( Has_Invisible_Parts(field) ) + { + /* in this case fieldwin isn't derived from formwin, so we have + to move the cursor in formwin by hand... */ + wmove(formwin, + field->frow + form->currow - form->toprow, + field->fcol + form->curcol - form->begincol); + wcursyncup(formwin); + } + else + wcursyncup(form->w); + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int _nc_Refresh_Current_Field(FORM * form) +| +| Description : Propagate the changes in the fields window to the +| window of the form. +| +| Return Values : E_OK - on success +| E_BAD_ARGUMENT - invalid form pointer +| E_SYSTEM_ERROR - general error ++--------------------------------------------------------------------------*/ +int +_nc_Refresh_Current_Field(FORM * form) +{ + WINDOW *formwin; + FIELD *field; + + if (!form) + RETURN(E_BAD_ARGUMENT); + + if (!form->w || !form->current) + RETURN(E_SYSTEM_ERROR); + + field = form->current; + formwin = Get_Form_Window(form); + + if (field->opts & O_PUBLIC) + { + if (Is_Scroll_Field(field)) + { + /* Again, in this case the fieldwin isn't derived from formwin, + so we have to perform a copy operation. */ + if (Single_Line_Field(field)) + { /* horizontal scrolling */ + if (form->curcol < form->begincol) + form->begincol = form->curcol; + else + { + if (form->curcol >= (form->begincol + field->cols)) + form->begincol = form->curcol - field->cols + 1; + } + copywin(form->w, + formwin, + 0, + form->begincol, + field->frow, + field->fcol, + field->frow, + field->cols + field->fcol - 1, + 0); + } + else + { /* A multiline, i.e. vertical scrolling field */ + int row_after_bottom,first_modified_row,first_unmodified_row; + + if (field->drows > field->rows) + { + row_after_bottom = form->toprow + field->rows; + if (form->currow < form->toprow) + { + form->toprow = form->currow; + field->status |= _NEWTOP; + } + if (form->currow >= row_after_bottom) + { + form->toprow = form->currow - field->rows + 1; + field->status |= _NEWTOP; + } + if (field->status & _NEWTOP) + { /* means we have to copy whole range */ + first_modified_row = form->toprow; + first_unmodified_row = first_modified_row + field->rows; + field->status &= ~_NEWTOP; + } + else + { /* we try to optimize : finding the range of touched + lines */ + first_modified_row = form->toprow; + while(first_modified_row < row_after_bottom) + { + if (is_linetouched(form->w,first_modified_row)) + break; + first_modified_row++; + } + first_unmodified_row = first_modified_row; + while(first_unmodified_row < row_after_bottom) + { + if (!is_linetouched(form->w,first_unmodified_row)) + break; + first_unmodified_row++; + } + } + } + else + { + first_modified_row = form->toprow; + first_unmodified_row = first_modified_row + field->rows; + } + if (first_unmodified_row != first_modified_row) + copywin(form->w, + formwin, + first_modified_row, + 0, + field->frow + first_modified_row - form->toprow, + field->fcol, + field->frow + first_unmodified_row - form->toprow - 1, + field->cols + field->fcol - 1, + 0); + } + wsyncup(formwin); + } + else + { /* if the field-window is simply a derived window, i.e. contains + no invisible parts, the whole thing is trivial + */ + wsyncup(form->w); + } + } + untouchwin(form->w); + return _nc_Position_Form_Cursor(form); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Perform_Justification( +| FIELD * field, +| WINDOW * win) +| +| Description : Output field with requested justification +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Perform_Justification(FIELD * field, WINDOW * win) +{ + char *bp; + int len; + int col = 0; + + bp = Get_Start_Of_Data(field->buf,Buffer_Length(field)); + len = (int)(After_End_Of_Data(field->buf,Buffer_Length(field)) - bp); + + if (len>0) + { + assert(win && (field->drows == 1) && (field->dcols == field->cols)); + + switch(field->just) + { + case JUSTIFY_LEFT: + break; + case JUSTIFY_CENTER: + col = (field->cols - len)/2; + break; + case JUSTIFY_RIGHT: + col = field->cols - len; + break; + default: + break; + } + + wmove(win,0,col); + waddnstr(win,bp,len); + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Undo_Justification( +| FIELD * field, +| WINDOW * win) +| +| Description : Display field without any justification, i.e. +| left justified +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Undo_Justification(FIELD * field, WINDOW * win) +{ + char *bp; + int len; + + bp = Get_Start_Of_Data(field->buf,Buffer_Length(field)); + len = (int)(After_End_Of_Data(field->buf,Buffer_Length(field))-bp); + + if (len>0) + { + assert(win != 0); + wmove(win,0,0); + waddnstr(win,bp,len); + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_Char( +| FIELDTYPE * typ, +| int ch, +| TypeArgument *argp) +| +| Description : Perform a single character check for character ch +| according to the fieldtype instance. +| +| Return Values : TRUE - Character is valid +| FALSE - Character is invalid ++--------------------------------------------------------------------------*/ +static bool Check_Char(FIELDTYPE * typ, int ch, TypeArgument *argp) +{ + if (typ) + { + if (typ->status & _LINKED_TYPE) + { + assert(argp != 0); + return( + Check_Char(typ->left ,ch,argp->left ) || + Check_Char(typ->right,ch,argp->right) ); + } + else + { + if (typ->ccheck) + return typ->ccheck(ch,(void *)argp); + } + } + return (isprint((unsigned char)ch) ? TRUE : FALSE); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Display_Or_Erase_Field( +| FIELD * field, +| bool bEraseFlag) +| +| Description : Create a subwindow for the field and display the +| buffer contents (apply justification if required) +| or simply erase the field. +| +| Return Values : E_OK - on success +| E_SYSTEM_ERROR - some error (typical no memory) ++--------------------------------------------------------------------------*/ +static int Display_Or_Erase_Field(FIELD * field, bool bEraseFlag) +{ + WINDOW *win; + WINDOW *fwin; + + if (!field) + return E_SYSTEM_ERROR; + + fwin = Get_Form_Window(field->form); + win = derwin(fwin, + field->rows,field->cols,field->frow,field->fcol); + + if (!win) + return E_SYSTEM_ERROR; + else + { + if (field->opts & O_VISIBLE) + Set_Field_Window_Attributes(field,win); + else + { +#if defined(__LSB_VERSION__) + /* getattrs() would be handy, but it is not part of LSB 4.0 */ + attr_t fwinAttrs; + short fwinPair; + wattr_get(fwin, &fwinAttrs, &fwinPair, 0); + wattr_set(win, fwinAttrs, fwinPair, 0); +#else + wattrset(win,getattrs(fwin)); +#endif + } + werase(win); + } + + if (!bEraseFlag) + { + if (field->opts & O_PUBLIC) + { + if (Justification_Allowed(field)) + Perform_Justification(field,win); + else + Buffer_To_Window(field,win); + } + field->status &= ~_NEWTOP; + } + wsyncup(win); + delwin(win); + return E_OK; +} + +/* Macros to preset the bEraseFlag */ +#define Display_Field(field) Display_Or_Erase_Field(field,FALSE) +#define Erase_Field(field) Display_Or_Erase_Field(field,TRUE) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Synchronize_Field(FIELD * field) +| +| Description : Synchronize the windows content with the value in +| the buffer. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid field pointer +| E_SYSTEM_ERROR - some severe basic error ++--------------------------------------------------------------------------*/ +static int Synchronize_Field(FIELD * field) +{ + FORM *form; + int res = E_OK; + + if (!field) + return(E_BAD_ARGUMENT); + + if (((form=field->form) != (FORM *)0) + && Field_Really_Appears(field)) + { + if (field == form->current) + { + form->currow = form->curcol = form->toprow = form->begincol = 0; + werase(form->w); + + if ( (field->opts & O_PUBLIC) && Justification_Allowed(field) ) + Undo_Justification( field, form->w ); + else + Buffer_To_Window( field, form->w ); + + field->status |= _NEWTOP; + res = _nc_Refresh_Current_Field( form ); + } + else + res = Display_Field( field ); + } + field->status |= _CHANGED; + return(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Synchronize_Linked_Fields(FIELD * field) +| +| Description : Propagate the Synchronize_Field function to all linked +| fields. The first error that occurs in the sequence +| of updates is the returnvalue. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid field pointer +| E_SYSTEM_ERROR - some severe basic error ++--------------------------------------------------------------------------*/ +static int Synchronize_Linked_Fields(FIELD * field) +{ + FIELD *linked_field; + int res = E_OK; + int syncres; + + if (!field) + return(E_BAD_ARGUMENT); + + if (!field->link) + return(E_SYSTEM_ERROR); + + for(linked_field = field->link; + linked_field!= field; + linked_field = linked_field->link ) + { + if (((syncres=Synchronize_Field(linked_field)) != E_OK) && + (res==E_OK)) + res = syncres; + } + return(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int _nc_Synchronize_Attributes(FIELD * field) +| +| Description : If a fields visual attributes have changed, this +| routine is called to propagate those changes to the +| screen. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid field pointer +| E_SYSTEM_ERROR - some severe basic error ++--------------------------------------------------------------------------*/ +int _nc_Synchronize_Attributes(FIELD * field) +{ + FORM *form; + int res = E_OK; + WINDOW *formwin; + + if (!field) + return(E_BAD_ARGUMENT); + + if (((form=field->form) != (FORM *)0) + && Field_Really_Appears(field)) + { + if (form->current==field) + { + Synchronize_Buffer(form); + Set_Field_Window_Attributes(field,form->w); + werase(form->w); + if (field->opts & O_PUBLIC) + { + if (Justification_Allowed(field)) + Undo_Justification(field,form->w); + else + Buffer_To_Window(field,form->w); + } + else + { + formwin = Get_Form_Window(form); + copywin(form->w,formwin, + 0,0, + field->frow,field->fcol, + field->rows-1,field->cols-1,0); + wsyncup(formwin); + Buffer_To_Window(field,form->w); + field->status |= _NEWTOP; /* fake refresh to paint all */ + _nc_Refresh_Current_Field(form); + } + } + else + { + res = Display_Field(field); + } + } + return(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int _nc_Synchronize_Options(FIELD * field, +| Field_Options newopts) +| +| Description : If a fields options have changed, this routine is +| called to propagate these changes to the screen and +| to really change the behaviour of the field. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid field pointer +| E_SYSTEM_ERROR - some severe basic error ++--------------------------------------------------------------------------*/ +int +_nc_Synchronize_Options(FIELD *field, Field_Options newopts) +{ + Field_Options oldopts; + Field_Options changed_opts; + FORM *form; + int res = E_OK; + + if (!field) + return(E_BAD_ARGUMENT); + + oldopts = field->opts; + changed_opts = oldopts ^ newopts; + field->opts = newopts; + form = field->form; + + if (form) + { + if (form->current == field) + { + field->opts = oldopts; + return(E_CURRENT); + } + + if (form->status & _POSTED) + { + if (form->curpage == field->page) + { + if (changed_opts & O_VISIBLE) + { + if (newopts & O_VISIBLE) + res = Display_Field(field); + else + res = Erase_Field(field); + } + else + { + if ((changed_opts & O_PUBLIC) && + (newopts & O_VISIBLE)) + res = Display_Field(field); + } + } + } + } + + if (changed_opts & O_STATIC) + { + bool single_line_field = Single_Line_Field(field); + int res2 = E_OK; + + if (newopts & O_STATIC) + { /* the field becomes now static */ + field->status &= ~_MAY_GROW; + /* if actually we have no hidden columns, justification may + occur again */ + if (single_line_field && + (field->cols == field->dcols) && + (field->just != NO_JUSTIFICATION) && + Field_Really_Appears(field)) + { + res2 = Display_Field(field); + } + } + else + { /* field is no longer static */ + if ((field->maxgrow==0) || + ( single_line_field && (field->dcols < field->maxgrow)) || + (!single_line_field && (field->drows < field->maxgrow))) + { + field->status |= _MAY_GROW; + /* a field with justification now changes its behaviour, + so we must redisplay it */ + if (single_line_field && + (field->just != NO_JUSTIFICATION) && + Field_Really_Appears(field)) + { + res2 = Display_Field(field); + } + } + } + if (res2 != E_OK) + res = res2; + } + + return(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int _nc_Set_Current_Field(FORM * form, +| FIELD * newfield) +| +| Description : Make the newfield the new current field. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid form or field pointer +| E_SYSTEM_ERROR - some severe basic error ++--------------------------------------------------------------------------*/ +int +_nc_Set_Current_Field(FORM *form, FIELD *newfield) +{ + FIELD *field; + WINDOW *new_window; + + if (!form || !newfield || !form->current || (newfield->form!=form)) + return(E_BAD_ARGUMENT); + + if ( (form->status & _IN_DRIVER) ) + return(E_BAD_STATE); + + if (!(form->field)) + return(E_NOT_CONNECTED); + + field = form->current; + + if ((field!=newfield) || + !(form->status & _POSTED)) + { + if ((form->w) && + (field->opts & O_VISIBLE) && + (field->form->curpage == field->page)) + { + _nc_Refresh_Current_Field(form); + if (field->opts & O_PUBLIC) + { + if (field->drows > field->rows) + { + if (form->toprow==0) + field->status &= ~_NEWTOP; + else + field->status |= _NEWTOP; + } + else + { + if (Justification_Allowed(field)) + { + Window_To_Buffer(form->w,field); + werase(form->w); + Perform_Justification(field,form->w); + wsyncup(form->w); + } + } + } + delwin(form->w); + } + + field = newfield; + + if (Has_Invisible_Parts(field)) + new_window = newpad(field->drows,field->dcols); + else + new_window = derwin(Get_Form_Window(form), + field->rows,field->cols,field->frow,field->fcol); + + if (!new_window) + return(E_SYSTEM_ERROR); + + form->current = field; + form->w = new_window; + form->status &= ~_WINDOW_MODIFIED; + Set_Field_Window_Attributes(field,form->w); + + if (Has_Invisible_Parts(field)) + { + werase(form->w); + Buffer_To_Window(field,form->w); + } + else + { + if (Justification_Allowed(field)) + { + werase(form->w); + Undo_Justification(field,form->w); + wsyncup(form->w); + } + } + + untouchwin(form->w); + } + + form->currow = form->curcol = form->toprow = form->begincol = 0; + return(E_OK); +} + +/*---------------------------------------------------------------------------- + Intra-Field Navigation routines + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Next_Character(FORM * form) +| +| Description : Move to the next character in the field. In a multiline +| field this wraps at the end of the line. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - at the rightmost position ++--------------------------------------------------------------------------*/ +static int IFN_Next_Character(FORM * form) +{ + FIELD *field = form->current; + + if ((++(form->curcol))==field->dcols) + { + if ((++(form->currow))==field->drows) + { +#if GROW_IF_NAVIGATE + if (!Single_Line_Field(field) && Field_Grown(field,1)) { + form->curcol = 0; + return(E_OK); + } +#endif + form->currow--; +#if GROW_IF_NAVIGATE + if (Single_Line_Field(field) && Field_Grown(field,1)) + return(E_OK); +#endif + form->curcol--; + return(E_REQUEST_DENIED); + } + form->curcol = 0; + } + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Previous_Character(FORM * form) +| +| Description : Move to the previous character in the field. In a +| multiline field this wraps and the beginning of the +| line. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - at the leftmost position ++--------------------------------------------------------------------------*/ +static int IFN_Previous_Character(FORM * form) +{ + if ((--(form->curcol))<0) + { + if ((--(form->currow))<0) + { + form->currow++; + form->curcol++; + return(E_REQUEST_DENIED); + } + form->curcol = form->current->dcols - 1; + } + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Next_Line(FORM * form) +| +| Description : Move to the beginning of the next line in the field +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - at the last line ++--------------------------------------------------------------------------*/ +static int IFN_Next_Line(FORM * form) +{ + FIELD *field = form->current; + + if ((++(form->currow))==field->drows) + { +#if GROW_IF_NAVIGATE + if (!Single_Line_Field(field) && Field_Grown(field,1)) + return(E_OK); +#endif + form->currow--; + return(E_REQUEST_DENIED); + } + form->curcol = 0; + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Previous_Line(FORM * form) +| +| Description : Move to the beginning of the previous line in the field +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - at the first line ++--------------------------------------------------------------------------*/ +static int IFN_Previous_Line(FORM * form) +{ + if ( (--(form->currow)) < 0 ) + { + form->currow++; + return(E_REQUEST_DENIED); + } + form->curcol = 0; + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Next_Word(FORM * form) +| +| Description : Move to the beginning of the next word in the field. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - there is no next word ++--------------------------------------------------------------------------*/ +static int IFN_Next_Word(FORM * form) +{ + FIELD *field = form->current; + char *bp = Address_Of_Current_Position_In_Buffer(form); + char *s; + char *t; + + /* We really need access to the data, so we have to synchronize */ + Synchronize_Buffer(form); + + /* Go to the first whitespace after the current position (including + current position). This is then the startpoint to look for the + next non-blank data */ + s = Get_First_Whitespace_Character(bp,Buffer_Length(field) - + (int)(bp - field->buf)); + + /* Find the start of the next word */ + t = Get_Start_Of_Data(s,Buffer_Length(field) - + (int)(s - field->buf)); +#if !FRIENDLY_PREV_NEXT_WORD + if (s==t) + return(E_REQUEST_DENIED); + else +#endif + { + Adjust_Cursor_Position(form,t); + return(E_OK); + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Previous_Word(FORM * form) +| +| Description : Move to the beginning of the previous word in the field. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - there is no previous word ++--------------------------------------------------------------------------*/ +static int IFN_Previous_Word(FORM * form) +{ + FIELD *field = form->current; + char *bp = Address_Of_Current_Position_In_Buffer(form); + char *s; + char *t; + bool again = FALSE; + + /* We really need access to the data, so we have to synchronize */ + Synchronize_Buffer(form); + + s = After_End_Of_Data(field->buf,(int)(bp-field->buf)); + /* s points now right after the last non-blank in the buffer before bp. + If bp was in a word, s equals bp. In this case we must find the last + whitespace in the buffer before bp and repeat the game to really find + the previous word! */ + if (s==bp) + again = TRUE; + + /* And next call now goes backward to look for the last whitespace + before that, pointing right after this, so it points to the begin + of the previous word. + */ + t = After_Last_Whitespace_Character(field->buf,(int)(s - field->buf)); +#if !FRIENDLY_PREV_NEXT_WORD + if (s==t) + return(E_REQUEST_DENIED); +#endif + if (again) + { /* and do it again, replacing bp by t */ + s = After_End_Of_Data(field->buf,(int)(t - field->buf)); + t = After_Last_Whitespace_Character(field->buf,(int)(s - field->buf)); +#if !FRIENDLY_PREV_NEXT_WORD + if (s==t) + return(E_REQUEST_DENIED); +#endif + } + Adjust_Cursor_Position(form,t); + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Beginning_Of_Field(FORM * form) +| +| Description : Place the cursor at the first non-pad character in +| the field. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int IFN_Beginning_Of_Field(FORM * form) +{ + FIELD *field = form->current; + + Synchronize_Buffer(form); + Adjust_Cursor_Position(form, + Get_Start_Of_Data(field->buf,Buffer_Length(field))); + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_End_Of_Field(FORM * form) +| +| Description : Place the cursor after the last non-pad character in +| the field. If the field occupies the last position in +| the buffer, the cursos is positioned on the last +| character. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int IFN_End_Of_Field(FORM * form) +{ + FIELD *field = form->current; + char *pos; + + Synchronize_Buffer(form); + pos = After_End_Of_Data(field->buf,Buffer_Length(field)); + if (pos==(field->buf + Buffer_Length(field))) + pos--; + Adjust_Cursor_Position(form,pos); + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Beginning_Of_Line(FORM * form) +| +| Description : Place the cursor on the first non-pad character in +| the current line of the field. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int IFN_Beginning_Of_Line(FORM * form) +{ + FIELD *field = form->current; + + Synchronize_Buffer(form); + Adjust_Cursor_Position(form, + Get_Start_Of_Data(Address_Of_Current_Row_In_Buffer(form), + field->dcols)); + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_End_Of_Line(FORM * form) +| +| Description : Place the cursor after the last non-pad character in the +| current line of the field. If the field occupies the +| last column in the line, the cursor is positioned on the +| last character of the line. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int IFN_End_Of_Line(FORM * form) +{ + FIELD *field = form->current; + char *pos; + char *bp; + + Synchronize_Buffer(form); + bp = Address_Of_Current_Row_In_Buffer(form); + pos = After_End_Of_Data(bp,field->dcols); + if (pos == (bp + field->dcols)) + pos--; + Adjust_Cursor_Position(form,pos); + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Left_Character(FORM * form) +| +| Description : Move one character to the left in the current line. +| This doesn't cycle. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - already in first column ++--------------------------------------------------------------------------*/ +static int IFN_Left_Character(FORM * form) +{ + if ( (--(form->curcol)) < 0 ) + { + form->curcol++; + return(E_REQUEST_DENIED); + } + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Right_Character(FORM * form) +| +| Description : Move one character to the right in the current line. +| This doesn't cycle. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - already in last column ++--------------------------------------------------------------------------*/ +static int IFN_Right_Character(FORM * form) +{ + if ( (++(form->curcol)) == form->current->dcols ) + { +#if GROW_IF_NAVIGATE + FIELD *field = form->current; + if (Single_Line_Field(field) && Field_Grown(field,1)) + return(E_OK); +#endif + --(form->curcol); + return(E_REQUEST_DENIED); + } + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Up_Character(FORM * form) +| +| Description : Move one line up. This doesn't cycle through the lines +| of the field. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - already in last column ++--------------------------------------------------------------------------*/ +static int IFN_Up_Character(FORM * form) +{ + if ( (--(form->currow)) < 0 ) + { + form->currow++; + return(E_REQUEST_DENIED); + } + return(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int IFN_Down_Character(FORM * form) +| +| Description : Move one line down. This doesn't cycle through the +| lines of the field. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - already in last column ++--------------------------------------------------------------------------*/ +static int IFN_Down_Character(FORM * form) +{ + FIELD *field = form->current; + + if ( (++(form->currow)) == field->drows ) + { +#if GROW_IF_NAVIGATE + if (!Single_Line_Field(field) && Field_Grown(field,1)) + return(E_OK); +#endif + --(form->currow); + return(E_REQUEST_DENIED); + } + return(E_OK); +} +/*---------------------------------------------------------------------------- + END of Intra-Field Navigation routines + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Vertical scrolling helper routines + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int VSC_Generic(FORM *form, int lines) +| +| Description : Scroll multi-line field forward (lines>0) or +| backward (lines<0) this many lines. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - can't scroll ++--------------------------------------------------------------------------*/ +static int VSC_Generic(FORM *form, int lines) +{ + FIELD *field = form->current; + int res = E_REQUEST_DENIED; + int rows_to_go = (lines > 0 ? lines : -lines); + + if (lines > 0) + { + if ( (rows_to_go + form->toprow) > (field->drows - field->rows) ) + rows_to_go = (field->drows - field->rows - form->toprow); + + if (rows_to_go > 0) + { + form->currow += rows_to_go; + form->toprow += rows_to_go; + res = E_OK; + } + } + else + { + if (rows_to_go > form->toprow) + rows_to_go = form->toprow; + + if (rows_to_go > 0) + { + form->currow -= rows_to_go; + form->toprow -= rows_to_go; + res = E_OK; + } + } + return(res); +} +/*---------------------------------------------------------------------------- + End of Vertical scrolling helper routines + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Vertical scrolling routines + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Vertical_Scrolling( +| int (* const fct) (FORM *), +| FORM * form) +| +| Description : Performs the generic vertical scrolling routines. +| This has to check for a multi-line field and to set +| the _NEWTOP flag if scrolling really occured. +| +| Return Values : Propagated error code from low-level driver calls ++--------------------------------------------------------------------------*/ +static int Vertical_Scrolling(int (* const fct) (FORM *), FORM * form) +{ + int res = E_REQUEST_DENIED; + + if (!Single_Line_Field(form->current)) + { + res = fct(form); + if (res == E_OK) + form->current->status |= _NEWTOP; + } + return(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int VSC_Scroll_Line_Forward(FORM * form) +| +| Description : Scroll multi-line field forward a line +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data ahead ++--------------------------------------------------------------------------*/ +static int VSC_Scroll_Line_Forward(FORM * form) +{ + return VSC_Generic(form,1); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int VSC_Scroll_Line_Backward(FORM * form) +| +| Description : Scroll multi-line field backward a line +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data behind ++--------------------------------------------------------------------------*/ +static int VSC_Scroll_Line_Backward(FORM * form) +{ + return VSC_Generic(form,-1); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int VSC_Scroll_Page_Forward(FORM * form) +| +| Description : Scroll a multi-line field forward a page +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data ahead ++--------------------------------------------------------------------------*/ +static int VSC_Scroll_Page_Forward(FORM * form) +{ + return VSC_Generic(form,form->current->rows); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int VSC_Scroll_Half_Page_Forward(FORM * form) +| +| Description : Scroll a multi-line field forward half a page +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data ahead ++--------------------------------------------------------------------------*/ +static int VSC_Scroll_Half_Page_Forward(FORM * form) +{ + return VSC_Generic(form,(form->current->rows + 1)/2); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int VSC_Scroll_Page_Backward(FORM * form) +| +| Description : Scroll a multi-line field backward a page +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data behind ++--------------------------------------------------------------------------*/ +static int VSC_Scroll_Page_Backward(FORM * form) +{ + return VSC_Generic(form, -(form->current->rows)); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int VSC_Scroll_Half_Page_Backward(FORM * form) +| +| Description : Scroll a multi-line field backward half a page +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data behind ++--------------------------------------------------------------------------*/ +static int VSC_Scroll_Half_Page_Backward(FORM * form) +{ + return VSC_Generic(form, -((form->current->rows + 1)/2)); +} +/*---------------------------------------------------------------------------- + End of Vertical scrolling routines + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Horizontal scrolling helper routines + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int HSC_Generic(FORM *form, int columns) +| +| Description : Scroll single-line field forward (columns>0) or +| backward (columns<0) this many columns. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - can't scroll ++--------------------------------------------------------------------------*/ +static int HSC_Generic(FORM *form, int columns) +{ + FIELD *field = form->current; + int res = E_REQUEST_DENIED; + int cols_to_go = (columns > 0 ? columns : -columns); + + if (columns > 0) + { + if ((cols_to_go + form->begincol) > (field->dcols - field->cols)) + cols_to_go = field->dcols - field->cols - form->begincol; + + if (cols_to_go > 0) + { + form->curcol += cols_to_go; + form->begincol += cols_to_go; + res = E_OK; + } + } + else + { + if ( cols_to_go > form->begincol ) + cols_to_go = form->begincol; + + if (cols_to_go > 0) + { + form->curcol -= cols_to_go; + form->begincol -= cols_to_go; + res = E_OK; + } + } + return(res); +} +/*---------------------------------------------------------------------------- + End of Horizontal scrolling helper routines + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Horizontal scrolling routines + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Horizontal_Scrolling( +| int (* const fct) (FORM *), +| FORM * form) +| +| Description : Performs the generic horizontal scrolling routines. +| This has to check for a single-line field. +| +| Return Values : Propagated error code from low-level driver calls ++--------------------------------------------------------------------------*/ +static int Horizontal_Scrolling(int (* const fct) (FORM *), FORM * form) +{ + if (Single_Line_Field(form->current)) + return fct(form); + else + return(E_REQUEST_DENIED); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int HSC_Scroll_Char_Forward(FORM * form) +| +| Description : Scroll single-line field forward a character +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data ahead ++--------------------------------------------------------------------------*/ +static int HSC_Scroll_Char_Forward(FORM *form) +{ + return HSC_Generic(form,1); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int HSC_Scroll_Char_Backward(FORM * form) +| +| Description : Scroll single-line field backward a character +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data behind ++--------------------------------------------------------------------------*/ +static int HSC_Scroll_Char_Backward(FORM *form) +{ + return HSC_Generic(form,-1); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int HSC_Horizontal_Line_Forward(FORM* form) +| +| Description : Scroll single-line field forward a line +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data ahead ++--------------------------------------------------------------------------*/ +static int HSC_Horizontal_Line_Forward(FORM * form) +{ + return HSC_Generic(form,form->current->cols); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int HSC_Horizontal_Half_Line_Forward(FORM* form) +| +| Description : Scroll single-line field forward half a line +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data ahead ++--------------------------------------------------------------------------*/ +static int HSC_Horizontal_Half_Line_Forward(FORM * form) +{ + return HSC_Generic(form,(form->current->cols + 1)/2); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int HSC_Horizontal_Line_Backward(FORM* form) +| +| Description : Scroll single-line field backward a line +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data behind ++--------------------------------------------------------------------------*/ +static int HSC_Horizontal_Line_Backward(FORM * form) +{ + return HSC_Generic(form,-(form->current->cols)); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int HSC_Horizontal_Half_Line_Backward(FORM* form) +| +| Description : Scroll single-line field backward half a line +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - no data behind ++--------------------------------------------------------------------------*/ +static int HSC_Horizontal_Half_Line_Backward(FORM * form) +{ + return HSC_Generic(form,-((form->current->cols + 1)/2)); +} + +/*---------------------------------------------------------------------------- + End of Horizontal scrolling routines + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Helper routines for Field Editing + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Is_There_Room_For_A_Line(FORM * form) +| +| Description : Check whether or not there is enough room in the +| buffer to enter a whole line. +| +| Return Values : TRUE - there is enough space +| FALSE - there is not enough space ++--------------------------------------------------------------------------*/ +INLINE static bool Is_There_Room_For_A_Line(FORM * form) +{ + FIELD *field = form->current; + char *begin_of_last_line, *s; + + Synchronize_Buffer(form); + begin_of_last_line = Address_Of_Row_In_Buffer(field,(field->drows-1)); + s = After_End_Of_Data(begin_of_last_line,field->dcols); + return ((s==begin_of_last_line) ? TRUE : FALSE); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Is_There_Room_For_A_Char_In_Line(FORM * form) +| +| Description : Checks whether or not there is room for a new character +| in the current line. +| +| Return Values : TRUE - there is room +| FALSE - there is not enough room (line full) ++--------------------------------------------------------------------------*/ +INLINE static bool Is_There_Room_For_A_Char_In_Line(FORM * form) +{ + int last_char_in_line; + + wmove(form->w,form->currow,form->current->dcols-1); + last_char_in_line = (int)(winch(form->w) & A_CHARTEXT); + wmove(form->w,form->currow,form->curcol); + return (((last_char_in_line == form->current->pad) || + is_blank(last_char_in_line)) ? TRUE : FALSE); +} + +#define There_Is_No_Room_For_A_Char_In_Line(f) \ + !Is_There_Room_For_A_Char_In_Line(f) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Insert_String( +| FORM * form, +| int row, +| char *txt, +| int len ) +| +| Description : Insert the 'len' characters beginning at pointer 'txt' +| into the 'row' of the 'form'. The insertion occurs +| on the beginning of the row, all other characters are +| moved to the right. After the text a pad character will +| be inserted to separate the text from the rest. If +| necessary the insertion moves characters on the next +| line to make place for the requested insertion string. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +static int Insert_String(FORM *form, int row, char *txt, int len) +{ + FIELD *field = form->current; + char *bp = Address_Of_Row_In_Buffer(field,row); + int datalen = (int)(After_End_Of_Data(bp,field->dcols) - bp); + int freelen = field->dcols - datalen; + int requiredlen = len+1; + char *split; + int result = E_REQUEST_DENIED; + char *Space; + + Space = (char*)malloc(2*sizeof(char)); + strcpy(Space, " "); + + if (freelen >= requiredlen) + { + wmove(form->w,row,0); + winsnstr(form->w,txt,len); + wmove(form->w,row,len); + winsnstr(form->w,Space,1); + free(Space); + return E_OK; + } + else + { /* we have to move characters on the next line. If we are on the + last line this may work, if the field is growable */ + if ((row == (field->drows - 1)) && Growable(field)) + { + if (!Field_Grown(field,1)) + { + free(Space); + return(E_SYSTEM_ERROR); + } + /* !!!Side-Effect : might be changed due to growth!!! */ + bp = Address_Of_Row_In_Buffer(field,row); + } + + if (row < (field->drows - 1)) + { + split = After_Last_Whitespace_Character(bp, + (int)(Get_Start_Of_Data(bp + field->dcols - requiredlen , + requiredlen) - bp)); + /* split points now to the first character of the portion of the + line that must be moved to the next line */ + datalen = (int)(split-bp); /* + freelen has to stay on this line */ + freelen = field->dcols - (datalen + freelen); /* for the next line */ + + if ((result=Insert_String(form,row+1,split,freelen))==E_OK) + { + wmove(form->w,row,datalen); + wclrtoeol(form->w); + wmove(form->w,row,0); + winsnstr(form->w,txt,len); + wmove(form->w,row,len); + winsnstr(form->w,Space,1); + free(Space); + return E_OK; + } + } + free(Space); + return(result); + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Wrapping_Not_Necessary_Or_Wrapping_Ok( +| FORM * form) +| +| Description : If a character has been entered into a field, it may +| be that wrapping has to occur. This routine checks +| whether or not wrapping is required and if so, performs +| the wrapping. +| +| Return Values : E_OK - no wrapping required or wrapping +| was successfull +| E_REQUEST_DENIED - +| E_SYSTEM_ERROR - some system error ++--------------------------------------------------------------------------*/ +static int Wrapping_Not_Necessary_Or_Wrapping_Ok(FORM * form) +{ + FIELD *field = form->current; + int result = E_REQUEST_DENIED; + bool Last_Row = ((field->drows - 1) == form->currow); + + if ( (field->opts & O_WRAP) && /* wrapping wanted */ + (!Single_Line_Field(field)) && /* must be multi-line */ + (There_Is_No_Room_For_A_Char_In_Line(form)) && /* line is full */ + (!Last_Row || Growable(field)) ) /* there are more lines*/ + { + char *bp; + char *split; + int chars_to_be_wrapped; + int chars_to_remain_on_line; + if (Last_Row) + { /* the above logic already ensures, that in this case the field + is growable */ + if (!Field_Grown(field,1)) + return E_SYSTEM_ERROR; + } + bp = Address_Of_Current_Row_In_Buffer(form); + Window_To_Buffer(form->w,field); + split = After_Last_Whitespace_Character(bp,field->dcols); + /* split points to the first character of the sequence to be brought + on the next line */ + chars_to_remain_on_line = (int)(split - bp); + chars_to_be_wrapped = field->dcols - chars_to_remain_on_line; + if (chars_to_remain_on_line > 0) + { + if ((result=Insert_String(form,form->currow+1,split, + chars_to_be_wrapped)) == E_OK) + { + wmove(form->w,form->currow,chars_to_remain_on_line); + wclrtoeol(form->w); + if (form->curcol >= chars_to_remain_on_line) + { + form->currow++; + form->curcol -= chars_to_remain_on_line; + } + return E_OK; + } + } + else + return E_OK; + if (result!=E_OK) + { + wmove(form->w,form->currow,form->curcol); + wdelch(form->w); + Window_To_Buffer(form->w,field); + result = E_REQUEST_DENIED; + } + } + else + result = E_OK; /* wrapping was not necessary */ + return(result); +} + +/*---------------------------------------------------------------------------- + Field Editing routines + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Field_Editing( +| int (* const fct) (FORM *), +| FORM * form) +| +| Description : Generic routine for field editing requests. The driver +| routines are only called for editable fields, the +| _WINDOW_MODIFIED flag is set if editing occured. +| This is somewhat special due to the overload semantics +| of the NEW_LINE and DEL_PREV requests. +| +| Return Values : Error code from low level drivers. ++--------------------------------------------------------------------------*/ +static int Field_Editing(int (* const fct) (FORM *), FORM * form) +{ + int res = E_REQUEST_DENIED; + + /* We have to deal here with the specific case of the overloaded + behaviour of New_Line and Delete_Previous requests. + They may end up in navigational requests if we are on the first + character in a field. But navigation is also allowed on non- + editable fields. + */ + if ((fct==FE_Delete_Previous) && + (form->opts & O_BS_OVERLOAD) && + First_Position_In_Current_Field(form) ) + { + res = Inter_Field_Navigation(FN_Previous_Field,form); + } + else + { + if (fct==FE_New_Line) + { + if ((form->opts & O_NL_OVERLOAD) && + First_Position_In_Current_Field(form)) + { + res = Inter_Field_Navigation(FN_Next_Field,form); + } + else + /* FE_New_Line deals itself with the _WINDOW_MODIFIED flag */ + res = fct(form); + } + else + { + /* From now on, everything must be editable */ + if (form->current->opts & O_EDIT) + { + res = fct(form); + if (res==E_OK) + form->status |= _WINDOW_MODIFIED; + } + } + } + return res; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FE_New_Line(FORM * form) +| +| Description : Perform a new line request. This is rather complex +| compared to other routines in this code due to the +| rather difficult to understand description in the +| manuals. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - new line not allowed +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +static int FE_New_Line(FORM * form) +{ + FIELD *field = form->current; + char *bp, *t; + bool Last_Row = ((field->drows - 1)==form->currow); + + if (form->status & _OVLMODE) + { + if (Last_Row && + (!(Growable(field) && !Single_Line_Field(field)))) + { + if (!(form->opts & O_NL_OVERLOAD)) + return(E_REQUEST_DENIED); + wclrtoeol(form->w); + /* we have to set this here, although it is also + handled in the generic routine. The reason is, + that FN_Next_Field may fail, but the form is + definitively changed */ + form->status |= _WINDOW_MODIFIED; + return Inter_Field_Navigation(FN_Next_Field,form); + } + else + { + if (Last_Row && !Field_Grown(field,1)) + { /* N.B.: due to the logic in the 'if', LastRow==TRUE + means here that the field is growable and not + a single-line field */ + return(E_SYSTEM_ERROR); + } + wclrtoeol(form->w); + form->currow++; + form->curcol = 0; + form->status |= _WINDOW_MODIFIED; + return(E_OK); + } + } + else + { /* Insert Mode */ + if (Last_Row && + !(Growable(field) && !Single_Line_Field(field))) + { + if (!(form->opts & O_NL_OVERLOAD)) + return(E_REQUEST_DENIED); + return Inter_Field_Navigation(FN_Next_Field,form); + } + else + { + bool May_Do_It = !Last_Row && Is_There_Room_For_A_Line(form); + + if (!(May_Do_It || Growable(field))) + return(E_REQUEST_DENIED); + if (!May_Do_It && !Field_Grown(field,1)) + return(E_SYSTEM_ERROR); + + bp= Address_Of_Current_Position_In_Buffer(form); + t = After_End_Of_Data(bp,field->dcols - form->curcol); + wclrtoeol(form->w); + form->currow++; + form->curcol=0; + wmove(form->w,form->currow,form->curcol); + winsertln(form->w); + waddnstr(form->w,bp,(int)(t-bp)); + form->status |= _WINDOW_MODIFIED; + return E_OK; + } + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FE_Insert_Character(FORM * form) +| +| Description : Insert blank character at the cursor position +| +| Return Values : E_OK +| E_REQUEST_DENIED ++--------------------------------------------------------------------------*/ +static int FE_Insert_Character(FORM * form) +{ + FIELD *field = form->current; + int result = E_REQUEST_DENIED; + + if (Check_Char(field->type,(int)C_BLANK,(TypeArgument *)(field->arg))) + { + bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form); + + if (There_Is_Room || + ((Single_Line_Field(field) && Growable(field)))) + { + if (!There_Is_Room && !Field_Grown(field,1)) + result = E_SYSTEM_ERROR; + else + { + winsch(form->w,(chtype)C_BLANK); + result = Wrapping_Not_Necessary_Or_Wrapping_Ok(form); + } + } + } + return result; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FE_Insert_Line(FORM * form) +| +| Description : Insert a blank line at the cursor position +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - line can not be inserted ++--------------------------------------------------------------------------*/ +static int FE_Insert_Line(FORM * form) +{ + FIELD *field = form->current; + int result = E_REQUEST_DENIED; + + if (Check_Char(field->type,(int)C_BLANK,(TypeArgument *)(field->arg))) + { + bool Maybe_Done = (form->currow!=(field->drows-1)) && + Is_There_Room_For_A_Line(form); + + if (!Single_Line_Field(field) && + (Maybe_Done || Growable(field))) + { + if (!Maybe_Done && !Field_Grown(field,1)) + result = E_SYSTEM_ERROR; + else + { + form->curcol = 0; + winsertln(form->w); + result = E_OK; + } + } + } + return result; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FE_Delete_Character(FORM * form) +| +| Description : Delete character at the cursor position +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int FE_Delete_Character(FORM * form) +{ + wdelch(form->w); + return E_OK; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FE_Delete_Previous(FORM * form) +| +| Description : Delete character before cursor. Again this is a rather +| difficult piece compared to others due to the overloading +| semantics of backspace. +| N.B.: The case of overloaded BS on first field position +| is already handled in the generic routine. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - Character can't be deleted ++--------------------------------------------------------------------------*/ +static int FE_Delete_Previous(FORM * form) +{ + FIELD *field = form->current; + + if (First_Position_In_Current_Field(form)) + return E_REQUEST_DENIED; + + if ( (--(form->curcol))<0 ) + { + char *this_line, *prev_line, *prev_end, *this_end; + + form->curcol++; + if (form->status & _OVLMODE) + return E_REQUEST_DENIED; + + prev_line = Address_Of_Row_In_Buffer(field,(form->currow-1)); + this_line = Address_Of_Row_In_Buffer(field,(form->currow)); + Synchronize_Buffer(form); + prev_end = After_End_Of_Data(prev_line,field->dcols); + this_end = After_End_Of_Data(this_line,field->dcols); + if ((int)(this_end-this_line) > + (field->cols-(int)(prev_end-prev_line))) + return E_REQUEST_DENIED; + wdeleteln(form->w); + Adjust_Cursor_Position(form,prev_end); + wmove(form->w,form->currow,form->curcol); + waddnstr(form->w,this_line,(int)(this_end-this_line)); + } + else + { + wmove(form->w,form->currow,form->curcol); + wdelch(form->w); + } + return E_OK; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FE_Delete_Line(FORM * form) +| +| Description : Delete line at cursor position. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int FE_Delete_Line(FORM * form) +{ + form->curcol = 0; + wdeleteln(form->w); + return E_OK; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FE_Delete_Word(FORM * form) +| +| Description : Delete word at cursor position +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - failure ++--------------------------------------------------------------------------*/ +static int FE_Delete_Word(FORM * form) +{ + FIELD *field = form->current; + char *bp = Address_Of_Current_Row_In_Buffer(form); + char *ep = bp + field->dcols; + char *cp = bp + form->curcol; + char *s; + + Synchronize_Buffer(form); + if (is_blank(*cp)) + return E_REQUEST_DENIED; /* not in word */ + + /* move cursor to begin of word and erase to end of screen-line */ + Adjust_Cursor_Position(form, + After_Last_Whitespace_Character(bp,form->curcol)); + wmove(form->w,form->currow,form->curcol); + wclrtoeol(form->w); + + /* skip over word in buffer */ + s = Get_First_Whitespace_Character(cp,(int)(ep-cp)); + /* to begin of next word */ + s = Get_Start_Of_Data(s,(int)(ep - s)); + if ( (s!=cp) && !is_blank(*s)) + { + /* copy remaining line to window */ + waddnstr(form->w,s,(int)(s - After_End_Of_Data(s,(int)(ep - s)))); + } + return E_OK; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FE_Clear_To_End_Of_Line(FORM * form) +| +| Description : Clear to end of current line. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int FE_Clear_To_End_Of_Line(FORM * form) +{ + wclrtoeol(form->w); + return E_OK; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FE_Clear_To_End_Of_Form(FORM * form) +| +| Description : Clear to end of form. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int FE_Clear_To_End_Of_Form(FORM * form) +{ + wclrtobot(form->w); + return E_OK; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FE_Clear_Field(FORM * form) +| +| Description : Clear entire field. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int FE_Clear_Field(FORM * form) +{ + form->currow = form->curcol = 0; + werase(form->w); + return E_OK; +} +/*---------------------------------------------------------------------------- + END of Field Editing routines + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Edit Mode routines + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int EM_Overlay_Mode(FORM * form) +| +| Description : Switch to overlay mode. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int EM_Overlay_Mode(FORM * form) +{ + form->status |= _OVLMODE; + return E_OK; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int EM_Insert_Mode(FORM * form) +| +| Description : Switch to insert mode +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +static int EM_Insert_Mode(FORM * form) +{ + form->status &= ~_OVLMODE; + return E_OK; +} + +/*---------------------------------------------------------------------------- + END of Edit Mode routines + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Helper routines for Choice Requests + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Next_Choice( +| FIELDTYPE * typ, +| FIELD * field, +| TypeArgument *argp) +| +| Description : Get the next field choice. For linked types this is +| done recursively. +| +| Return Values : TRUE - next choice successfully retrieved +| FALSE - couldn't retrieve next choice ++--------------------------------------------------------------------------*/ +static bool Next_Choice(FIELDTYPE * typ, FIELD *field, TypeArgument *argp) +{ + if (!typ || !(typ->status & _HAS_CHOICE)) + return FALSE; + + if (typ->status & _LINKED_TYPE) + { + assert(argp != 0); + return( + Next_Choice(typ->left ,field,argp->left) || + Next_Choice(typ->right,field,argp->right) ); + } + else + { + assert(typ->next != 0); + return typ->next(field,(void *)argp); + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Previous_Choice( +| FIELDTYPE * typ, +| FIELD * field, +| TypeArgument *argp) +| +| Description : Get the previous field choice. For linked types this +| is done recursively. +| +| Return Values : TRUE - previous choice successfully retrieved +| FALSE - couldn't retrieve previous choice ++--------------------------------------------------------------------------*/ +static bool Previous_Choice(FIELDTYPE *typ, FIELD *field, TypeArgument *argp) +{ + if (!typ || !(typ->status & _HAS_CHOICE)) + return FALSE; + + if (typ->status & _LINKED_TYPE) + { + assert(argp != 0); + return( + Previous_Choice(typ->left ,field,argp->left) || + Previous_Choice(typ->right,field,argp->right)); + } + else + { + assert(typ->prev != 0); + return typ->prev(field,(void *)argp); + } +} +/*---------------------------------------------------------------------------- + End of Helper routines for Choice Requests + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Routines for Choice Requests + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int CR_Next_Choice(FORM * form) +| +| Description : Get the next field choice. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - next choice couldn't be retrieved ++--------------------------------------------------------------------------*/ +static int CR_Next_Choice(FORM * form) +{ + FIELD *field = form->current; + Synchronize_Buffer(form); + return ((Next_Choice(field->type,field,(TypeArgument *)(field->arg))) ? + E_OK : E_REQUEST_DENIED); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int CR_Previous_Choice(FORM * form) +| +| Description : Get the previous field choice. +| +| Return Values : E_OK - success +| E_REQUEST_DENIED - prev. choice couldn't be retrieved ++--------------------------------------------------------------------------*/ +static int CR_Previous_Choice(FORM * form) +{ + FIELD *field = form->current; + Synchronize_Buffer(form); + return ((Previous_Choice(field->type,field,(TypeArgument *)(field->arg))) ? + E_OK : E_REQUEST_DENIED); +} +/*---------------------------------------------------------------------------- + End of Routines for Choice Requests + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Helper routines for Field Validations. + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_Field( +| FIELDTYPE * typ, +| FIELD * field, +| TypeArgument * argp) +| +| Description : Check the field according to its fieldtype and its +| actual arguments. For linked fieldtypes this is done +| recursively. +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid. ++--------------------------------------------------------------------------*/ +static bool Check_Field(FIELDTYPE *typ, FIELD *field, TypeArgument *argp) +{ + if (typ) + { + if (field->opts & O_NULLOK) + { + char *bp = field->buf; + assert(bp != 0); + while(is_blank(*bp)) + { bp++; } + if (*bp == '\0') + return TRUE; + } + + if (typ->status & _LINKED_TYPE) + { + assert(argp != 0); + return( + Check_Field(typ->left ,field,argp->left ) || + Check_Field(typ->right,field,argp->right) ); + } + else + { + if (typ->fcheck) + return typ->fcheck(field,(void *)argp); + } + } + return TRUE; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : bool _nc_Internal_Validation(FORM * form ) +| +| Description : Validate the current field of the form. +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid ++--------------------------------------------------------------------------*/ +bool +_nc_Internal_Validation(FORM *form) +{ + FIELD *field; + + field = form->current; + + Synchronize_Buffer(form); + if ((form->status & _FCHECK_REQUIRED) || + (!(field->opts & O_PASSOK))) + { + if (!Check_Field(field->type,field,(TypeArgument *)(field->arg))) + return FALSE; + form->status &= ~_FCHECK_REQUIRED; + field->status |= _CHANGED; + Synchronize_Linked_Fields(field); + } + return TRUE; +} +/*---------------------------------------------------------------------------- + End of Helper routines for Field Validations. + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Routines for Field Validation. + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FV_Validation(FORM * form) +| +| Description : Validate the current field of the form. +| +| Return Values : E_OK - field valid +| E_INVALID_FIELD - field not valid ++--------------------------------------------------------------------------*/ +static int FV_Validation(FORM * form) +{ + if (_nc_Internal_Validation(form)) + return E_OK; + else + return E_INVALID_FIELD; +} +/*---------------------------------------------------------------------------- + End of routines for Field Validation. + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Helper routines for Inter-Field Navigation + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static FIELD *Next_Field_On_Page(FIELD * field) +| +| Description : Get the next field after the given field on the current +| page. The order of fields is the one defined by the +| fields array. Only visible and active fields are +| counted. +| +| Return Values : Pointer to the next field. ++--------------------------------------------------------------------------*/ +INLINE static FIELD *Next_Field_On_Page(FIELD * field) +{ + FORM *form = field->form; + FIELD **field_on_page = &form->field[field->index]; + FIELD **first_on_page = &form->field[form->page[form->curpage].pmin]; + FIELD **last_on_page = &form->field[form->page[form->curpage].pmax]; + + do + { + field_on_page = + (field_on_page==last_on_page) ? first_on_page : field_on_page + 1; + if (Field_Is_Selectable(*field_on_page)) + break; + } while(field!=(*field_on_page)); + return(*field_on_page); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : FIELD* _nc_First_Active_Field(FORM * form) +| +| Description : Get the first active field on the current page, +| if there are such. If there are none, get the first +| visible field on the page. If there are also none, +| we return the first field on page and hope the best. +| +| Return Values : Pointer to calculated field. ++--------------------------------------------------------------------------*/ +FIELD* +_nc_First_Active_Field(FORM * form) +{ + FIELD **last_on_page = &form->field[form->page[form->curpage].pmax]; + FIELD *proposed = Next_Field_On_Page(*last_on_page); + + if (proposed == *last_on_page) + { /* there might be the special situation, where there is no + active and visible field on the current page. We then select + the first visible field on this readonly page + */ + if (Field_Is_Not_Selectable(proposed)) + { + FIELD **field = &form->field[proposed->index]; + FIELD **first = &form->field[form->page[form->curpage].pmin]; + + do + { + field = (field==last_on_page) ? first : field + 1; + if (((*field)->opts & O_VISIBLE)) + break; + } while(proposed!=(*field)); + + proposed = *field; + + if ((proposed == *last_on_page) && !(proposed->opts&O_VISIBLE)) + { /* This means, there is also no visible field on the page. + So we propose the first one and hope the very best... + Some very clever user has designed a readonly and invisible + page on this form. + */ + proposed = *first; + } + } + } + return(proposed); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static FIELD *Previous_Field_On_Page(FIELD * field) +| +| Description : Get the previous field before the given field on the +| current page. The order of fields is the one defined by +| the fields array. Only visible and active fields are +| counted. +| +| Return Values : Pointer to the previous field. ++--------------------------------------------------------------------------*/ +INLINE static FIELD *Previous_Field_On_Page(FIELD * field) +{ + FORM *form = field->form; + FIELD **field_on_page = &form->field[field->index]; + FIELD **first_on_page = &form->field[form->page[form->curpage].pmin]; + FIELD **last_on_page = &form->field[form->page[form->curpage].pmax]; + + do + { + field_on_page = + (field_on_page==first_on_page) ? last_on_page : field_on_page - 1; + if (Field_Is_Selectable(*field_on_page)) + break; + } while(field!=(*field_on_page)); + + return (*field_on_page); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static FIELD *Sorted_Next_Field(FIELD * field) +| +| Description : Get the next field after the given field on the current +| page. The order of fields is the one defined by the +| (row,column) geometry, rows are major. +| +| Return Values : Pointer to the next field. ++--------------------------------------------------------------------------*/ +INLINE static FIELD *Sorted_Next_Field(FIELD * field) +{ + FIELD *field_on_page = field; + + do + { + field_on_page = field_on_page->snext; + if (Field_Is_Selectable(field_on_page)) + break; + } while(field_on_page!=field); + + return (field_on_page); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static FIELD *Sorted_Previous_Field(FIELD * field) +| +| Description : Get the previous field before the given field on the +| current page. The order of fields is the one defined +| by the (row,column) geometry, rows are major. +| +| Return Values : Pointer to the previous field. ++--------------------------------------------------------------------------*/ +INLINE static FIELD *Sorted_Previous_Field(FIELD * field) +{ + FIELD *field_on_page = field; + + do + { + field_on_page = field_on_page->sprev; + if (Field_Is_Selectable(field_on_page)) + break; + } while(field_on_page!=field); + + return (field_on_page); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static FIELD *Left_Neighbour_Field(FIELD * field) +| +| Description : Get the left neighbour of the field on the same line +| and the same page. Cycles through the line. +| +| Return Values : Pointer to left neighbour field. ++--------------------------------------------------------------------------*/ +INLINE static FIELD *Left_Neighbour_Field(FIELD * field) +{ + FIELD *field_on_page = field; + + /* For a field that has really a left neighbour, the while clause + immediately fails and the loop is left, positioned at the right + neighbour. Otherwise we cycle backwards through the sorted fieldlist + until we enter the same line (from the right end). + */ + do + { + field_on_page = Sorted_Previous_Field(field_on_page); + } while(field_on_page->frow != field->frow); + + return (field_on_page); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static FIELD *Right_Neighbour_Field(FIELD * field) +| +| Description : Get the right neighbour of the field on the same line +| and the same page. +| +| Return Values : Pointer to right neighbour field. ++--------------------------------------------------------------------------*/ +INLINE static FIELD *Right_Neighbour_Field(FIELD * field) +{ + FIELD *field_on_page = field; + + /* See the comments on Left_Neighbour_Field to understand how it works */ + do + { + field_on_page = Sorted_Next_Field(field_on_page); + } while(field_on_page->frow != field->frow); + + return (field_on_page); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static FIELD *Upper_Neighbour_Field(FIELD * field) +| +| Description : Because of the row-major nature of sorting the fields, +| its more difficult to define whats the upper neighbour +| field really means. We define that it must be on a +| 'previous' line (cyclic order!) and is the rightmost +| field laying on the left side of the given field. If +| this set is empty, we take the first field on the line. +| +| Return Values : Pointer to the upper neighbour field. ++--------------------------------------------------------------------------*/ +static FIELD *Upper_Neighbour_Field(FIELD * field) +{ + FIELD *field_on_page = field; + int frow = field->frow; + int fcol = field->fcol; + + /* Walk back to the 'previous' line. The second term in the while clause + just guarantees that we stop if we cycled through the line because + there might be no 'previous' line if the page has just one line. + */ + do + { + field_on_page = Sorted_Previous_Field(field_on_page); + } while(field_on_page->frow==frow && field_on_page->fcol!=fcol); + + if (field_on_page->frow!=frow) + { /* We really found a 'previous' line. We are positioned at the + rightmost field on this line */ + frow = field_on_page->frow; + + /* We walk to the left as long as we are really right of the + field. */ + while(field_on_page->frow==frow && field_on_page->fcol>fcol) + field_on_page = Sorted_Previous_Field(field_on_page); + + /* If we wrapped, just go to the right which is the first field on + the row */ + if (field_on_page->frow!=frow) + field_on_page = Sorted_Next_Field(field_on_page); + } + + return (field_on_page); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static FIELD *Down_Neighbour_Field(FIELD * field) +| +| Description : Because of the row-major nature of sorting the fields, +| its more difficult to define whats the down neighbour +| field really means. We define that it must be on a +| 'next' line (cyclic order!) and is the leftmost +| field laying on the right side of the given field. If +| this set is empty, we take the last field on the line. +| +| Return Values : Pointer to the upper neighbour field. ++--------------------------------------------------------------------------*/ +static FIELD *Down_Neighbour_Field(FIELD * field) +{ + FIELD *field_on_page = field; + int frow = field->frow; + int fcol = field->fcol; + + /* Walk forward to the 'next' line. The second term in the while clause + just guarantees that we stop if we cycled through the line because + there might be no 'next' line if the page has just one line. + */ + do + { + field_on_page = Sorted_Next_Field(field_on_page); + } while(field_on_page->frow==frow && field_on_page->fcol!=fcol); + + if (field_on_page->frow!=frow) + { /* We really found a 'next' line. We are positioned at the rightmost + field on this line */ + frow = field_on_page->frow; + + /* We walk to the right as long as we are really left of the + field. */ + while(field_on_page->frow==frow && field_on_page->fcolfrow!=frow) + field_on_page = Sorted_Previous_Field(field_on_page); + } + + return(field_on_page); +} + +/*---------------------------------------------------------------------------- + Inter-Field Navigation routines + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Inter_Field_Navigation( +| int (* const fct) (FORM *), +| FORM * form) +| +| Description : Generic behaviour for changing the current field, the +| field is left and a new field is entered. So the field +| must be validated and the field init/term hooks must +| be called. +| +| Return Values : E_OK - success +| E_INVALID_FIELD - field is invalid +| some other - error from subordinate call ++--------------------------------------------------------------------------*/ +static int Inter_Field_Navigation(int (* const fct) (FORM *),FORM *form) +{ + int res; + + if (!_nc_Internal_Validation(form)) + res = E_INVALID_FIELD; + else + { + Call_Hook(form,fieldterm); + res = fct(form); + Call_Hook(form,fieldinit); + } + return res; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Next_Field(FORM * form) +| +| Description : Move to the next field on the current page of the form +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Next_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Next_Field_On_Page(form->current)); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Previous_Field(FORM * form) +| +| Description : Move to the previous field on the current page of the +| form +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Previous_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Previous_Field_On_Page(form->current)); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_First_Field(FORM * form) +| +| Description : Move to the first field on the current page of the form +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_First_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Next_Field_On_Page(form->field[form->page[form->curpage].pmax])); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Last_Field(FORM * form) +| +| Description : Move to the last field on the current page of the form +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Last_Field(FORM * form) +{ + return + _nc_Set_Current_Field(form, + Previous_Field_On_Page(form->field[form->page[form->curpage].pmin])); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Sorted_Next_Field(FORM * form) +| +| Description : Move to the sorted next field on the current page +| of the form. +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Sorted_Next_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Sorted_Next_Field(form->current)); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Sorted_Previous_Field(FORM * form) +| +| Description : Move to the sorted previous field on the current page +| of the form. +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Sorted_Previous_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Sorted_Previous_Field(form->current)); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Sorted_First_Field(FORM * form) +| +| Description : Move to the sorted first field on the current page +| of the form. +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Sorted_First_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Sorted_Next_Field(form->field[form->page[form->curpage].smax])); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Sorted_Last_Field(FORM * form) +| +| Description : Move to the sorted last field on the current page +| of the form. +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Sorted_Last_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Sorted_Previous_Field(form->field[form->page[form->curpage].smin])); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Left_Field(FORM * form) +| +| Description : Get the field on the left of the current field on the +| same line and the same page. Cycles through the line. +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Left_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Left_Neighbour_Field(form->current)); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Right_Field(FORM * form) +| +| Description : Get the field on the right of the current field on the +| same line and the same page. Cycles through the line. +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Right_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Right_Neighbour_Field(form->current)); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Up_Field(FORM * form) +| +| Description : Get the upper neighbour of the current field. This +| cycles through the page. See the comments of the +| Upper_Neighbour_Field function to understand how +| 'upper' is defined. +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Up_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Upper_Neighbour_Field(form->current)); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int FN_Down_Field(FORM * form) +| +| Description : Get the down neighbour of the current field. This +| cycles through the page. See the comments of the +| Down_Neighbour_Field function to understand how +| 'down' is defined. +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int FN_Down_Field(FORM * form) +{ + return _nc_Set_Current_Field(form, + Down_Neighbour_Field(form->current)); +} +/*---------------------------------------------------------------------------- + END of Field Navigation routines + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Helper routines for Page Navigation + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int _nc_Set_Form_Page(FORM * form, +| int page, +| FIELD * field) +| +| Description : Make the given page nr. the current page and make +| the given field the current field on the page. If +| for the field NULL is given, make the first field on +| the page the current field. The routine acts only +| if the requested page is not the current page. +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +int +_nc_Set_Form_Page(FORM * form, int page, FIELD * field) +{ + int res = E_OK; + + if ((form->curpage!=page)) + { + FIELD *last_field, *field_on_page; + + werase(Get_Form_Window(form)); + form->curpage = page; + last_field = field_on_page = form->field[form->page[page].smin]; + do + { + if (field_on_page->opts & O_VISIBLE) + if ((res=Display_Field(field_on_page))!=E_OK) + return(res); + field_on_page = field_on_page->snext; + } while(field_on_page != last_field); + + if (field) + res = _nc_Set_Current_Field(form,field); + else + /* N.B.: we don't encapsulate this by Inter_Field_Navigation(), + because this is already executed in a page navigation + context that contains field navigation + */ + res = FN_First_Field(form); + } + return(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Next_Page_Number(const FORM * form) +| +| Description : Calculate the page number following the current page +| number. This cycles if the highest page number is +| reached. +| +| Return Values : The next page number ++--------------------------------------------------------------------------*/ +INLINE static int Next_Page_Number(const FORM * form) +{ + return (form->curpage + 1) % form->maxpage; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Previous_Page_Number(const FORM * form) +| +| Description : Calculate the page number before the current page +| number. This cycles if the first page number is +| reached. +| +| Return Values : The previous page number ++--------------------------------------------------------------------------*/ +INLINE static int Previous_Page_Number(const FORM * form) +{ + return (form->curpage!=0 ? form->curpage - 1 : form->maxpage - 1); +} + +/*---------------------------------------------------------------------------- + Page Navigation routines + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Page_Navigation( +| int (* const fct) (FORM *), +| FORM * form) +| +| Description : Generic behaviour for changing a page. This means +| that the field is left and a new field is entered. +| So the field must be validated and the field init/term +| hooks must be called. Because also the page is changed, +| the forms init/term hooks must be called also. +| +| Return Values : E_OK - success +| E_INVALID_FIELD - field is invalid +| some other - error from subordinate call ++--------------------------------------------------------------------------*/ +static int Page_Navigation(int (* const fct) (FORM *), FORM * form) +{ + int res; + + if (!_nc_Internal_Validation(form)) + res = E_INVALID_FIELD; + else + { + Call_Hook(form,fieldterm); + Call_Hook(form,formterm); + res = fct(form); + Call_Hook(form,forminit); + Call_Hook(form,fieldinit); + } + return res; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int PN_Next_Page(FORM * form) +| +| Description : Move to the next page of the form +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int PN_Next_Page(FORM * form) +{ + return _nc_Set_Form_Page(form,Next_Page_Number(form),(FIELD *)0); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int PN_Previous_Page(FORM * form) +| +| Description : Move to the previous page of the form +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int PN_Previous_Page(FORM * form) +{ + return _nc_Set_Form_Page(form,Previous_Page_Number(form),(FIELD *)0); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int PN_First_Page(FORM * form) +| +| Description : Move to the first page of the form +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int PN_First_Page(FORM * form) +{ + return _nc_Set_Form_Page(form,0,(FIELD *)0); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int PN_Last_Page(FORM * form) +| +| Description : Move to the last page of the form +| +| Return Values : E_OK - success +| != E_OK - error from subordinate call ++--------------------------------------------------------------------------*/ +static int PN_Last_Page(FORM * form) +{ + return _nc_Set_Form_Page(form,form->maxpage-1,(FIELD *)0); +} +/*---------------------------------------------------------------------------- + END of Field Navigation routines + --------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------- + Helper routines for the core form driver. + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Data_Entry(FORM * form,int c) +| +| Description : Enter character c into at the current position of the +| current field of the form. +| +| Return Values : E_OK - +| E_REQUEST_DENIED - +| E_SYSTEM_ERROR - ++--------------------------------------------------------------------------*/ +static int Data_Entry(FORM * form, int c) +{ + FIELD *field = form->current; + int result = E_REQUEST_DENIED; + + if ( (field->opts & O_EDIT) +#if FIX_FORM_INACTIVE_BUG + && (field->opts & O_ACTIVE) +#endif + ) + { + if ( (field->opts & O_BLANK) && + First_Position_In_Current_Field(form) && + !(form->status & _FCHECK_REQUIRED) && + !(form->status & _WINDOW_MODIFIED) ) + werase(form->w); + + if (form->status & _OVLMODE) + { + waddch(form->w,(chtype)c); + } + else /* no _OVLMODE */ + { + bool There_Is_Room = Is_There_Room_For_A_Char_In_Line(form); + + if (!(There_Is_Room || + ((Single_Line_Field(field) && Growable(field))))) + return E_REQUEST_DENIED; + + if (!There_Is_Room && !Field_Grown(field,1)) + return E_SYSTEM_ERROR; + + winsch(form->w,(chtype)c); + } + + if ((result=Wrapping_Not_Necessary_Or_Wrapping_Ok(form))==E_OK) + { + bool End_Of_Field= (((field->drows-1)==form->currow) && + ((field->dcols-1)==form->curcol)); + form->status |= _WINDOW_MODIFIED; + if (End_Of_Field && !Growable(field) && (field->opts & O_AUTOSKIP)) + result = Inter_Field_Navigation(FN_Next_Field,form); + else + { + if (End_Of_Field && Growable(field) && !Field_Grown(field,1)) + result = E_SYSTEM_ERROR; + else + { + IFN_Next_Character(form); + result = E_OK; + } + } + } + } + return result; +} + +/* Structure to describe the binding of a request code to a function. + The member keycode codes the request value as well as the generic + routine to use for the request. The code for the generic routine + is coded in the upper 16 Bits while the request code is coded in + the lower 16 bits. + + In terms of C++ you might think of a request as a class with a + virtual method "perform". The different types of request are + derived from this base class and overload (or not) the base class + implementation of perform. +*/ +typedef struct { + int keycode; /* must be at least 32 bit: hi:mode, lo: key */ + int (*cmd)(FORM *); /* low level driver routine for this key */ +} Binding_Info; + +/* You may see this is the class-id of the request type class */ +#define ID_PN (0x00000000) /* Page navigation */ +#define ID_FN (0x00010000) /* Inter-Field navigation */ +#define ID_IFN (0x00020000) /* Intra-Field navigation */ +#define ID_VSC (0x00030000) /* Vertical Scrolling */ +#define ID_HSC (0x00040000) /* Horizontal Scrolling */ +#define ID_FE (0x00050000) /* Field Editing */ +#define ID_EM (0x00060000) /* Edit Mode */ +#define ID_FV (0x00070000) /* Field Validation */ +#define ID_CH (0x00080000) /* Choice */ +#define ID_Mask (0xffff0000) +#define Key_Mask (0x0000ffff) +#define ID_Shft (16) + +/* This array holds all the Binding Infos */ +static const Binding_Info bindings[MAX_FORM_COMMAND - MIN_FORM_COMMAND + 1] = +{ + { REQ_NEXT_PAGE |ID_PN ,PN_Next_Page}, + { REQ_PREV_PAGE |ID_PN ,PN_Previous_Page}, + { REQ_FIRST_PAGE |ID_PN ,PN_First_Page}, + { REQ_LAST_PAGE |ID_PN ,PN_Last_Page}, + + { REQ_NEXT_FIELD |ID_FN ,FN_Next_Field}, + { REQ_PREV_FIELD |ID_FN ,FN_Previous_Field}, + { REQ_FIRST_FIELD |ID_FN ,FN_First_Field}, + { REQ_LAST_FIELD |ID_FN ,FN_Last_Field}, + { REQ_SNEXT_FIELD |ID_FN ,FN_Sorted_Next_Field}, + { REQ_SPREV_FIELD |ID_FN ,FN_Sorted_Previous_Field}, + { REQ_SFIRST_FIELD |ID_FN ,FN_Sorted_First_Field}, + { REQ_SLAST_FIELD |ID_FN ,FN_Sorted_Last_Field}, + { REQ_LEFT_FIELD |ID_FN ,FN_Left_Field}, + { REQ_RIGHT_FIELD |ID_FN ,FN_Right_Field}, + { REQ_UP_FIELD |ID_FN ,FN_Up_Field}, + { REQ_DOWN_FIELD |ID_FN ,FN_Down_Field}, + + { REQ_NEXT_CHAR |ID_IFN ,IFN_Next_Character}, + { REQ_PREV_CHAR |ID_IFN ,IFN_Previous_Character}, + { REQ_NEXT_LINE |ID_IFN ,IFN_Next_Line}, + { REQ_PREV_LINE |ID_IFN ,IFN_Previous_Line}, + { REQ_NEXT_WORD |ID_IFN ,IFN_Next_Word}, + { REQ_PREV_WORD |ID_IFN ,IFN_Previous_Word}, + { REQ_BEG_FIELD |ID_IFN ,IFN_Beginning_Of_Field}, + { REQ_END_FIELD |ID_IFN ,IFN_End_Of_Field}, + { REQ_BEG_LINE |ID_IFN ,IFN_Beginning_Of_Line}, + { REQ_END_LINE |ID_IFN ,IFN_End_Of_Line}, + { REQ_LEFT_CHAR |ID_IFN ,IFN_Left_Character}, + { REQ_RIGHT_CHAR |ID_IFN ,IFN_Right_Character}, + { REQ_UP_CHAR |ID_IFN ,IFN_Up_Character}, + { REQ_DOWN_CHAR |ID_IFN ,IFN_Down_Character}, + + { REQ_NEW_LINE |ID_FE ,FE_New_Line}, + { REQ_INS_CHAR |ID_FE ,FE_Insert_Character}, + { REQ_INS_LINE |ID_FE ,FE_Insert_Line}, + { REQ_DEL_CHAR |ID_FE ,FE_Delete_Character}, + { REQ_DEL_PREV |ID_FE ,FE_Delete_Previous}, + { REQ_DEL_LINE |ID_FE ,FE_Delete_Line}, + { REQ_DEL_WORD |ID_FE ,FE_Delete_Word}, + { REQ_CLR_EOL |ID_FE ,FE_Clear_To_End_Of_Line}, + { REQ_CLR_EOF |ID_FE ,FE_Clear_To_End_Of_Form}, + { REQ_CLR_FIELD |ID_FE ,FE_Clear_Field}, + + { REQ_OVL_MODE |ID_EM ,EM_Overlay_Mode}, + { REQ_INS_MODE |ID_EM ,EM_Insert_Mode}, + + { REQ_SCR_FLINE |ID_VSC ,VSC_Scroll_Line_Forward}, + { REQ_SCR_BLINE |ID_VSC ,VSC_Scroll_Line_Backward}, + { REQ_SCR_FPAGE |ID_VSC ,VSC_Scroll_Page_Forward}, + { REQ_SCR_BPAGE |ID_VSC ,VSC_Scroll_Page_Backward}, + { REQ_SCR_FHPAGE |ID_VSC ,VSC_Scroll_Half_Page_Forward}, + { REQ_SCR_BHPAGE |ID_VSC ,VSC_Scroll_Half_Page_Backward}, + + { REQ_SCR_FCHAR |ID_HSC ,HSC_Scroll_Char_Forward}, + { REQ_SCR_BCHAR |ID_HSC ,HSC_Scroll_Char_Backward}, + { REQ_SCR_HFLINE |ID_HSC ,HSC_Horizontal_Line_Forward}, + { REQ_SCR_HBLINE |ID_HSC ,HSC_Horizontal_Line_Backward}, + { REQ_SCR_HFHALF |ID_HSC ,HSC_Horizontal_Half_Line_Forward}, + { REQ_SCR_HBHALF |ID_HSC ,HSC_Horizontal_Half_Line_Backward}, + + { REQ_VALIDATION |ID_FV ,FV_Validation}, + + { REQ_NEXT_CHOICE |ID_CH ,CR_Next_Choice}, + { REQ_PREV_CHOICE |ID_CH ,CR_Previous_Choice} +}; + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int form_driver(FORM * form,int c) +| +| Description : This is the workhorse of the forms system. It checks +| to determine whether the character c is a request or +| data. If it is a request, the form driver executes +| the request and returns the result. If it is data +| (printable character), it enters the data into the +| current position in the current field. If it is not +| recognized, the form driver assumes it is an application +| defined command and returns E_UNKNOWN_COMMAND. +| Application defined command should be defined relative +| to MAX_FORM_COMMAND, the maximum value of a request. +| +| Return Values : E_OK - success +| E_SYSTEM_ERROR - system error +| E_BAD_ARGUMENT - an argument is incorrect +| E_NOT_POSTED - form is not posted +| E_INVALID_FIELD - field contents are invalid +| E_BAD_STATE - called from inside a hook routine +| E_REQUEST_DENIED - request failed +| E_UNKNOWN_COMMAND - command not known ++--------------------------------------------------------------------------*/ +int form_driver(FORM * form, int c) +{ + const Binding_Info* BI = (Binding_Info *)0; + int res = E_UNKNOWN_COMMAND; + + if (!form) + RETURN(E_BAD_ARGUMENT); + + if (!(form->field)) + RETURN(E_NOT_CONNECTED); + + assert(form->page != 0); + + if (c==FIRST_ACTIVE_MAGIC) + { + form->current = _nc_First_Active_Field(form); + return E_OK; + } + + assert(form->current && + form->current->buf && + (form->current->form == form) + ); + + if ( form->status & _IN_DRIVER ) + RETURN(E_BAD_STATE); + + if ( !( form->status & _POSTED ) ) + RETURN(E_NOT_POSTED); + + if ((c>=MIN_FORM_COMMAND && c<=MAX_FORM_COMMAND) && + ((bindings[c-MIN_FORM_COMMAND].keycode & Key_Mask) == c)) + BI = &(bindings[c-MIN_FORM_COMMAND]); + + if (BI) + { + typedef int (*Generic_Method)(int (* const)(FORM *),FORM *); + static const Generic_Method Generic_Methods[] = + { + Page_Navigation, /* overloaded to call field&form hooks */ + Inter_Field_Navigation, /* overloaded to call field hooks */ + NULL, /* Intra-Field is generic */ + Vertical_Scrolling, /* Overloaded to check multi-line */ + Horizontal_Scrolling, /* Overloaded to check single-line */ + Field_Editing, /* Overloaded to mark modification */ + NULL, /* Edit Mode is generic */ + NULL, /* Field Validation is generic */ + NULL /* Choice Request is generic */ + }; + size_t nMethods = (sizeof(Generic_Methods)/sizeof(Generic_Methods[0])); + size_t method = ((BI->keycode & ID_Mask) >> ID_Shft) & 0xffff; + + if ( (method >= nMethods) || !(BI->cmd) ) + res = E_SYSTEM_ERROR; + else + { + Generic_Method fct = Generic_Methods[method]; + if (fct) + res = fct(BI->cmd,form); + else + res = (BI->cmd)(form); + } + } + else + { + if (!(c & (~(int)MAX_REGULAR_CHARACTER)) && + isprint((unsigned char)c) && + Check_Char(form->current->type,c, + (TypeArgument *)(form->current->arg))) + res = Data_Entry(form,c); + } + _nc_Refresh_Current_Field(form); + RETURN(res); +} + +/*---------------------------------------------------------------------------- + Field-Buffer manipulation routines. + The effects of setting a buffer is tightly coupled to the core of the form + driver logic. This is especially true in the case of growable fields. + So I don't separate this into an own module. + --------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_field_buffer(FIELD *field, +| int buffer, char *value) +| +| Description : Set the given buffer of the field to the given value. +| Buffer 0 stores the displayed content of the field. +| For dynamic fields this may grow the fieldbuffers if +| the length of the value exceeds the current buffer +| length. For buffer 0 only printable values are allowed. +| For static fields, the value needs not to be zero ter- +| minated. It is copied up to the length of the buffer. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid argument +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +int set_field_buffer(FIELD * field, int buffer, const char * value) +{ + char *s, *p; + int res = E_OK; + unsigned int len; + + if ( !field || !value || ((buffer < 0)||(buffer > field->nbuf)) ) + RETURN(E_BAD_ARGUMENT); + + len = Buffer_Length(field); + + if (buffer==0) + { + const char *v; + unsigned int i = 0; + + for(v=value; *v && (i len) + { + if (!Field_Grown(field, + (int)(1 + (vlen-len)/((field->rows+field->nrow)*field->cols)))) + RETURN(E_SYSTEM_ERROR); + + /* in this case we also have to check, wether or not the remaining + characters in value are also printable for buffer 0. */ + if (buffer==0) + { + unsigned int i; + + for(i=len; i= (unsigned int)(s-p)); + if (len > (unsigned int)(s-p)) + memset(s,C_BLANK,len-(unsigned int)(s-p)); + } + + if (buffer==0) + { + int syncres; + if (((syncres=Synchronize_Field( field ))!=E_OK) && + (res==E_OK)) + res = syncres; + if (((syncres=Synchronize_Linked_Fields(field ))!=E_OK) && + (res==E_OK)) + res = syncres; + } + RETURN(res); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : char *field_buffer(const FIELD *field,int buffer) +| +| Description : Return the address of the buffer for the field. +| +| Return Values : Pointer to buffer or NULL if arguments were invalid. ++--------------------------------------------------------------------------*/ +char *field_buffer(const FIELD * field, int buffer) +{ + if (field && (buffer >= 0) && (buffer <= field->nbuf)) + return Address_Of_Nth_Buffer(field,buffer); + else + return (char *)0; +} + +/* frm_driver.c ends here */ diff --git a/Source/CursesDialog/form/frm_hook.c b/Source/CursesDialog/form/frm_hook.c new file mode 100644 index 0000000..eb654c4 --- /dev/null +++ b/Source/CursesDialog/form/frm_hook.c @@ -0,0 +1,140 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/* "Template" macro to generate function to set application specific hook */ +#define GEN_HOOK_SET_FUNCTION( typ, name ) \ +int set_ ## typ ## _ ## name (FORM *form, Form_Hook func)\ +{\ + (Normalize_Form( form ) -> typ ## name) = func ;\ + RETURN(E_OK);\ +} + +/* "Template" macro to generate function to get application specific hook */ +#define GEN_HOOK_GET_FUNCTION( typ, name ) \ +Form_Hook typ ## _ ## name ( const FORM *form )\ +{\ + return ( Normalize_Form( form ) -> typ ## name );\ +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_field_init(FORM *form, Form_Hook f) +| +| Description : Assigns an application defined initialization function +| to be called when the form is posted and just after +| the current field changes. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +GEN_HOOK_SET_FUNCTION(field,init) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : Form_Hook field_init(const FORM *form) +| +| Description : Retrieve field initialization routine address. +| +| Return Values : The address or NULL if no hook defined. ++--------------------------------------------------------------------------*/ +GEN_HOOK_GET_FUNCTION(field,init) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_field_term(FORM *form, Form_Hook f) +| +| Description : Assigns an application defined finalization function +| to be called when the form is unposted and just before +| the current field changes. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +GEN_HOOK_SET_FUNCTION(field,term) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : Form_Hook field_term(const FORM *form) +| +| Description : Retrieve field finalization routine address. +| +| Return Values : The address or NULL if no hook defined. ++--------------------------------------------------------------------------*/ +GEN_HOOK_GET_FUNCTION(field,term) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_form_init(FORM *form, Form_Hook f) +| +| Description : Assigns an application defined initialization function +| to be called when the form is posted and just after +| a page change. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +GEN_HOOK_SET_FUNCTION(form,init) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : Form_Hook form_init(const FORM *form) +| +| Description : Retrieve form initialization routine address. +| +| Return Values : The address or NULL if no hook defined. ++--------------------------------------------------------------------------*/ +GEN_HOOK_GET_FUNCTION(form,init) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_form_term(FORM *form, Form_Hook f) +| +| Description : Assigns an application defined finalization function +| to be called when the form is unposted and just before +| a page change. +| +| Return Values : E_OK - success ++--------------------------------------------------------------------------*/ +GEN_HOOK_SET_FUNCTION(form,term) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : Form_Hook form_term(const FORM *form) +| +| Description : Retrieve form finalization routine address. +| +| Return Values : The address or NULL if no hook defined. ++--------------------------------------------------------------------------*/ +GEN_HOOK_GET_FUNCTION(form,term) + +/* frm_hook.c ends here */ diff --git a/Source/CursesDialog/form/frm_opts.c b/Source/CursesDialog/form/frm_opts.c new file mode 100644 index 0000000..7bbeaa1 --- /dev/null +++ b/Source/CursesDialog/form/frm_opts.c @@ -0,0 +1,116 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_form_opts(FORM *form, Form_Options opts) +| +| Description : Turns on the named options and turns off all the +| remaining options for that form. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid options ++--------------------------------------------------------------------------*/ +int set_form_opts(FORM * form, Form_Options opts) +{ + opts &= ALL_FORM_OPTS; + if (opts & ~ALL_FORM_OPTS) + RETURN(E_BAD_ARGUMENT); + else + { + Normalize_Form( form )->opts = opts; + RETURN(E_OK); + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : Form_Options form_opts(const FORM *) +| +| Description : Retrieves the current form options. +| +| Return Values : The option flags. ++--------------------------------------------------------------------------*/ +Form_Options form_opts(const FORM * form) +{ + return (Normalize_Form(form)->opts & ALL_FORM_OPTS); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int form_opts_on(FORM *form, Form_Options opts) +| +| Description : Turns on the named options; no other options are +| changed. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid options ++--------------------------------------------------------------------------*/ +int form_opts_on(FORM * form, Form_Options opts) +{ + opts &= ALL_FORM_OPTS; + if (opts & ~ALL_FORM_OPTS) + RETURN(E_BAD_ARGUMENT); + else + { + Normalize_Form( form )->opts |= opts; + RETURN(E_OK); + } +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int form_opts_off(FORM *form, Form_Options opts) +| +| Description : Turns off the named options; no other options are +| changed. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid options ++--------------------------------------------------------------------------*/ +int form_opts_off(FORM * form, Form_Options opts) +{ + opts &= ALL_FORM_OPTS; + if (opts & ~ALL_FORM_OPTS) + RETURN(E_BAD_ARGUMENT); + else + { + Normalize_Form(form)->opts &= ~opts; + RETURN(E_OK); + } +} + +/* frm_opts.c ends here */ diff --git a/Source/CursesDialog/form/frm_page.c b/Source/CursesDialog/form/frm_page.c new file mode 100644 index 0000000..842cbce --- /dev/null +++ b/Source/CursesDialog/form/frm_page.c @@ -0,0 +1,100 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_form_page(FORM * form,int page) +| +| Description : Set the page number of the form. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid form pointer or page number +| E_BAD_STATE - called from a hook routine +| E_INVALID_FIELD - current field can't be left +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +int set_form_page(FORM * form, int page) +{ + int err = E_OK; + + if ( !form || (page<0) || (page>=form->maxpage) ) + RETURN(E_BAD_ARGUMENT); + + if (!(form->status & _POSTED)) + { + form->curpage = page; + form->current = _nc_First_Active_Field(form); + } + else + { + if (form->status & _IN_DRIVER) + err = E_BAD_STATE; + else + { + if (form->curpage != page) + { + if (!_nc_Internal_Validation(form)) + err = E_INVALID_FIELD; + else + { + Call_Hook(form,fieldterm); + Call_Hook(form,formterm); + err = _nc_Set_Form_Page(form,page,(FIELD *)0); + Call_Hook(form,forminit); + Call_Hook(form,fieldinit); + _nc_Refresh_Current_Field(form); + } + } + } + } + RETURN(err); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int form_page(const FORM * form) +| +| Description : Return the current page of the form. +| +| Return Values : >= 0 : current page number +| -1 : invalid form pointer ++--------------------------------------------------------------------------*/ +int form_page(const FORM * form) +{ + return Normalize_Form(form)->curpage; +} + +/* frm_page.c ends here */ diff --git a/Source/CursesDialog/form/frm_post.c b/Source/CursesDialog/form/frm_post.c new file mode 100644 index 0000000..3c63de7 --- /dev/null +++ b/Source/CursesDialog/form/frm_post.c @@ -0,0 +1,124 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int post_form(FORM * form) +| +| Description : Writes the form into its associated subwindow. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid form pointer +| E_POSTED - form already posted +| E_NOT_CONNECTED - no fields connected to form +| E_NO_ROOM - form doesn't fit into subwindow +| E_SYSTEM_ERROR - system error ++--------------------------------------------------------------------------*/ +int post_form(FORM * form) +{ + WINDOW *formwin; + int err; + int page; + int height, width; + + if (!form) + RETURN(E_BAD_ARGUMENT); + + if (form->status & _POSTED) + RETURN(E_POSTED); + + if (!(form->field)) + RETURN(E_NOT_CONNECTED); + + formwin = Get_Form_Window(form); +#if defined(__LSB_VERSION__) + getmaxyx(formwin, height, width); +#else + width = getmaxx(formwin); + height = getmaxy(formwin); +#endif + if ((form->cols > width) || (form->rows > height)) + RETURN(E_NO_ROOM); + + /* reset form->curpage to an invald value. This forces Set_Form_Page + to do the page initialization which is required by post_form. + */ + page = form->curpage; + form->curpage = -1; + if ((err = _nc_Set_Form_Page(form,page,form->current))!=E_OK) + RETURN(err); + + form->status |= _POSTED; + + Call_Hook(form,forminit); + Call_Hook(form,fieldinit); + + _nc_Refresh_Current_Field(form); + RETURN(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int unpost_form(FORM * form) +| +| Description : Erase form from its associated subwindow. +| +| Return Values : E_OK - success +| E_BAD_ARGUMENT - invalid form pointer +| E_NOT_POSTED - form isn't posted +| E_BAD_STATE - called from a hook routine ++--------------------------------------------------------------------------*/ +int unpost_form(FORM * form) +{ + if (!form) + RETURN(E_BAD_ARGUMENT); + + if (!(form->status & _POSTED)) + RETURN(E_NOT_POSTED); + + if (form->status & _IN_DRIVER) + RETURN(E_BAD_STATE); + + Call_Hook(form,fieldterm); + Call_Hook(form,formterm); + + werase(Get_Form_Window(form)); + delwin(form->w); + form->w = (WINDOW *)0; + form->status &= ~_POSTED; + RETURN(E_OK); +} + +/* frm_post.c ends here */ diff --git a/Source/CursesDialog/form/frm_req_name.c b/Source/CursesDialog/form/frm_req_name.c new file mode 100644 index 0000000..b108dab --- /dev/null +++ b/Source/CursesDialog/form/frm_req_name.c @@ -0,0 +1,169 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +/*************************************************************************** +* Module form_request_name * +* Routines to handle external names of menu requests * +***************************************************************************/ + +#if defined(__hpux) + #define _XOPEN_SOURCE_EXTENDED +#endif +#include "form.priv.h" +#if defined(__hpux) + #undef _XOPEN_SOURCE_EXTENDED +#endif + +MODULE_ID("$Id$") + +static const char *request_names[ MAX_FORM_COMMAND - MIN_FORM_COMMAND + 1 ] = { + "NEXT_PAGE" , + "PREV_PAGE" , + "FIRST_PAGE" , + "LAST_PAGE" , + + "NEXT_FIELD" , + "PREV_FIELD" , + "FIRST_FIELD" , + "LAST_FIELD" , + "SNEXT_FIELD" , + "SPREV_FIELD" , + "SFIRST_FIELD" , + "SLAST_FIELD" , + "LEFT_FIELD" , + "RIGHT_FIELD" , + "UP_FIELD" , + "DOWN_FIELD" , + + "NEXT_CHAR" , + "PREV_CHAR" , + "NEXT_LINE" , + "PREV_LINE" , + "NEXT_WORD" , + "PREV_WORD" , + "BEG_FIELD" , + "END_FIELD" , + "BEG_LINE" , + "END_LINE" , + "LEFT_CHAR" , + "RIGHT_CHAR" , + "UP_CHAR" , + "DOWN_CHAR" , + + "NEW_LINE" , + "INS_CHAR" , + "INS_LINE" , + "DEL_CHAR" , + "DEL_PREV" , + "DEL_LINE" , + "DEL_WORD" , + "CLR_EOL" , + "CLR_EOF" , + "CLR_FIELD" , + "OVL_MODE" , + "INS_MODE" , + "SCR_FLINE" , + "SCR_BLINE" , + "SCR_FPAGE" , + "SCR_BPAGE" , + "SCR_FHPAGE" , + "SCR_BHPAGE" , + "SCR_FCHAR" , + "SCR_BCHAR" , + "SCR_HFLINE" , + "SCR_HBLINE" , + "SCR_HFHALF" , + "SCR_HBHALF" , + + "VALIDATION" , + "NEXT_CHOICE" , + "PREV_CHOICE" +}; +#define A_SIZE (sizeof(request_names)/sizeof(request_names[0])) + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : const char * form_request_name (int request); +| +| Description : Get the external name of a form request. +| +| Return Values : Pointer to name - on success +| NULL - on invalid request code ++--------------------------------------------------------------------------*/ +const char *form_request_name( int request ) +{ + if ( (request < MIN_FORM_COMMAND) || (request > MAX_FORM_COMMAND) ) + { + SET_ERROR (E_BAD_ARGUMENT); + return (const char *)0; + } + else + return request_names[ request - MIN_FORM_COMMAND ]; +} + + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int form_request_by_name (const char *str); +| +| Description : Search for a request with this name. +| +| Return Values : Request Id - on success +| E_NO_MATCH - request not found ++--------------------------------------------------------------------------*/ +int form_request_by_name( const char *str ) +{ + /* because the table is so small, it doesn't really hurt + to run sequentially through it. + */ + unsigned int i = 0; + char buf[16]; + + if (str) + { + strncpy(buf,str,sizeof(buf)); + while( (i 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int scale_form( const FORM *form, int *rows, int *cols ) +| +| Description : Retrieve size of form +| +| Return Values : E_OK - no error +| E_BAD_ARGUMENT - invalid form pointer +| E_NOT_CONNECTED - no fields connected to form ++--------------------------------------------------------------------------*/ +int scale_form(const FORM * form, int * rows, int * cols) +{ + if ( !form ) + RETURN(E_BAD_ARGUMENT); + + if ( !(form->field) ) + RETURN(E_NOT_CONNECTED); + + if (rows) + *rows = form->rows; + if (cols) + *cols = form->cols; + + RETURN(E_OK); +} + +/* frm_scale.c ends here */ diff --git a/Source/CursesDialog/form/frm_sub.c b/Source/CursesDialog/form/frm_sub.c new file mode 100644 index 0000000..62dc613 --- /dev/null +++ b/Source/CursesDialog/form/frm_sub.c @@ -0,0 +1,69 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_form_sub(FORM *form, WINDOW *win) +| +| Description : Set the subwindow of the form to win. +| +| Return Values : E_OK - success +| E_POSTED - form is posted ++--------------------------------------------------------------------------*/ +int set_form_sub(FORM * form, WINDOW * win) +{ + if (form && (form->status & _POSTED)) + RETURN(E_POSTED); + + Normalize_Form( form )->sub = win; + RETURN(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : WINDOW *form_sub(const FORM *) +| +| Description : Retrieve the window of the form. +| +| Return Values : The pointer to the Subwindow. ++--------------------------------------------------------------------------*/ +WINDOW *form_sub(const FORM * form) +{ + const FORM* f = Normalize_Form( form ); + return Get_Form_Window(f); +} + +/* frm_sub.c ends here */ diff --git a/Source/CursesDialog/form/frm_user.c b/Source/CursesDialog/form/frm_user.c new file mode 100644 index 0000000..f38bbbb --- /dev/null +++ b/Source/CursesDialog/form/frm_user.c @@ -0,0 +1,67 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_form_userptr(FORM *form, void *usrptr) +| +| Description : Set the pointer that is reserved in any form to store +| application relevant information +| +| Return Values : E_OK - on success ++--------------------------------------------------------------------------*/ +int set_form_userptr(FORM * form, void *usrptr) +{ + Normalize_Form(form)->usrptr = usrptr; + RETURN(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : void *form_userptr(const FORM *form) +| +| Description : Return the pointer that is reserved in any form to +| store application relevant information. +| +| Return Values : Value of pointer. If no such pointer has been set, +| NULL is returned ++--------------------------------------------------------------------------*/ +void *form_userptr(const FORM * form) +{ + return Normalize_Form(form)->usrptr; +} + +/* frm_user.c ends here */ diff --git a/Source/CursesDialog/form/frm_win.c b/Source/CursesDialog/form/frm_win.c new file mode 100644 index 0000000..82d716f --- /dev/null +++ b/Source/CursesDialog/form/frm_win.c @@ -0,0 +1,70 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : int set_form_win(FORM *form,WINDOW *win) +| +| Description : Set the window of the form to win. +| +| Return Values : E_OK - success +| E_POSTED - form is posted ++--------------------------------------------------------------------------*/ +int set_form_win(FORM * form, WINDOW * win) +{ + if (form && (form->status & _POSTED)) + RETURN(E_POSTED); + + Normalize_Form( form )->win = win; + RETURN(E_OK); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : WINDOW *form_win(const FORM *) +| +| Description : Retrieve the window of the form. +| +| Return Values : The pointer to the Window or stdscr if there is none. ++--------------------------------------------------------------------------*/ +WINDOW *form_win(const FORM * form) +{ + const FORM* f = Normalize_Form( form ); + return (f->win ? f->win : stdscr); +} + +/* frm_win.c ends here */ + diff --git a/Source/CursesDialog/form/fty_alnum.c b/Source/CursesDialog/form/fty_alnum.c new file mode 100644 index 0000000..6f3cfd4 --- /dev/null +++ b/Source/CursesDialog/form/fty_alnum.c @@ -0,0 +1,138 @@ + +/* + * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. + * You may freely copy it for use as a template for your own field types. + * If you develop a field type that might be of general use, please send + * it back to the ncurses maintainers for inclusion in the next version. + */ +/*************************************************************************** +* * +* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net * +* * +***************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +typedef struct { + int width; +} alnumARG; + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Make_AlphaNumeric_Type(va_list *ap) +| +| Description : Allocate structure for alphanumeric type argument. +| +| Return Values : Pointer to argument structure or NULL on error ++--------------------------------------------------------------------------*/ +static void *Make_AlphaNumeric_Type(va_list * ap) +{ + alnumARG *argp = (alnumARG *)malloc(sizeof(alnumARG)); + + if (argp) + argp->width = va_arg(*ap,int); + + return ((void *)argp); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Copy_AlphaNumericType(const void *argp) +| +| Description : Copy structure for alphanumeric type argument. +| +| Return Values : Pointer to argument structure or NULL on error. ++--------------------------------------------------------------------------*/ +static void *Copy_AlphaNumeric_Type(const void *argp) +{ + const alnumARG *ap = (const alnumARG *)argp; + alnumARG *result = (alnumARG *)malloc(sizeof(alnumARG)); + + if (result) + *result = *ap; + + return ((void *)result); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Free_AlphaNumeric_Type(void *argp) +| +| Description : Free structure for alphanumeric type argument. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Free_AlphaNumeric_Type(void * argp) +{ + if (argp) + free(argp); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_AlphaNumeric_Field( +| FIELD *field, +| const void *argp) +| +| Description : Validate buffer content to be a valid alphanumeric value +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid ++--------------------------------------------------------------------------*/ +static bool Check_AlphaNumeric_Field(FIELD * field, const void * argp) +{ + int width = ((const alnumARG *)argp)->width; + unsigned char *bp = (unsigned char *)field_buffer(field,0); + int l = -1; + unsigned char *s; + + while(*bp && *bp==' ') + bp++; + if (*bp) + { + s = bp; + while(*bp && isalnum(*bp)) + bp++; + l = (int)(bp-s); + while(*bp && *bp==' ') + bp++; + } + return ((*bp || (l < width)) ? FALSE : TRUE); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_AlphaNumeric_Character( +| int c, +| const void *argp ) +| +| Description : Check a character for the alphanumeric type. +| +| Return Values : TRUE - character is valid +| FALSE - character is invalid ++--------------------------------------------------------------------------*/ +static bool Check_AlphaNumeric_Character(int c, const void * argp) +{ + argp=0; /* Silence unused parameter warning. */ + return (isalnum(c) ? TRUE : FALSE); +} + +static FIELDTYPE typeALNUM = { + _HAS_ARGS | _RESIDENT, + 1, /* this is mutable, so we can't be const */ + (FIELDTYPE *)0, + (FIELDTYPE *)0, + Make_AlphaNumeric_Type, + Copy_AlphaNumeric_Type, + Free_AlphaNumeric_Type, + Check_AlphaNumeric_Field, + Check_AlphaNumeric_Character, + NULL, + NULL +}; + +FIELDTYPE* TYPE_ALNUM = &typeALNUM; + +/* fty_alnum.c ends here */ diff --git a/Source/CursesDialog/form/fty_alpha.c b/Source/CursesDialog/form/fty_alpha.c new file mode 100644 index 0000000..e4e9ceb --- /dev/null +++ b/Source/CursesDialog/form/fty_alpha.c @@ -0,0 +1,139 @@ + +/* + * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. + * You may freely copy it for use as a template for your own field types. + * If you develop a field type that might be of general use, please send + * it back to the ncurses maintainers for inclusion in the next version. + */ +/*************************************************************************** +* * +* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net * +* * +***************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +typedef struct { + int width; +} alphaARG; + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Make_Alpha_Type(va_list *ap) +| +| Description : Allocate structure for alpha type argument. +| +| Return Values : Pointer to argument structure or NULL on error ++--------------------------------------------------------------------------*/ +static void *Make_Alpha_Type(va_list * ap) +{ + alphaARG *argp = (alphaARG *)malloc(sizeof(alphaARG)); + if (argp) + { + argp->width = va_arg(*ap,int); + } + return ((void *)argp); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Copy_Alpha_Type(const void * argp) +| +| Description : Copy structure for alpha type argument. +| +| Return Values : Pointer to argument structure or NULL on error. ++--------------------------------------------------------------------------*/ +static void *Copy_Alpha_Type(const void * argp) +{ + const alphaARG *ap = (const alphaARG *)argp; + alphaARG *result = (alphaARG *)malloc(sizeof(alphaARG)); + + if (result) + { + *result = *ap; + } + return ((void *)result); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Free_Alpha_Type( void * argp ) +| +| Description : Free structure for alpha type argument. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Free_Alpha_Type(void * argp) +{ + if (argp) + free(argp); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_Alpha_Field( +| FIELD * field, +| const void * argp) +| +| Description : Validate buffer content to be a valid alpha value +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid ++--------------------------------------------------------------------------*/ +static bool Check_Alpha_Field(FIELD * field, const void * argp) +{ + int width = ((const alphaARG *)argp)->width; + unsigned char *bp = (unsigned char *)field_buffer(field,0); + int l = -1; + unsigned char *s; + + while(*bp && *bp==' ') + bp++; + if (*bp) + { + s = bp; + while(*bp && isalpha(*bp)) + bp++; + l = (int)(bp-s); + while(*bp && *bp==' ') + bp++; + } + return ((*bp || (l < width)) ? FALSE : TRUE); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_Alpha_Character( +| int c, +| const void * argp) +| +| Description : Check a character for the alpha type. +| +| Return Values : TRUE - character is valid +| FALSE - character is invalid ++--------------------------------------------------------------------------*/ +static bool Check_Alpha_Character(int c, const void * argp) +{ + argp=0; /* Silence unused parameter warning. */ + return (isalpha(c) ? TRUE : FALSE); +} + +static FIELDTYPE typeALPHA = { + _HAS_ARGS | _RESIDENT, + 1, /* this is mutable, so we can't be const */ + (FIELDTYPE *)0, + (FIELDTYPE *)0, + Make_Alpha_Type, + Copy_Alpha_Type, + Free_Alpha_Type, + Check_Alpha_Field, + Check_Alpha_Character, + NULL, + NULL +}; + +FIELDTYPE* TYPE_ALPHA = &typeALPHA; + +/* fty_alpha.c ends here */ diff --git a/Source/CursesDialog/form/fty_enum.c b/Source/CursesDialog/form/fty_enum.c new file mode 100644 index 0000000..8fc4cd7 --- /dev/null +++ b/Source/CursesDialog/form/fty_enum.c @@ -0,0 +1,295 @@ + +/* + * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. + * You may freely copy it for use as a template for your own field types. + * If you develop a field type that might be of general use, please send + * it back to the ncurses maintainers for inclusion in the next version. + */ +/*************************************************************************** +* * +* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net * +* * +***************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +typedef struct { + char **kwds; + int count; + bool checkcase; + bool checkunique; +} enumARG; + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Make_Enum_Type( va_list * ap ) +| +| Description : Allocate structure for enumeration type argument. +| +| Return Values : Pointer to argument structure or NULL on error ++--------------------------------------------------------------------------*/ +static void *Make_Enum_Type(va_list * ap) +{ + enumARG *argp = (enumARG *)malloc(sizeof(enumARG)); + + if (argp) + { + int cnt = 0; + char **kp = (char **)0; + int ccase, cunique; + + argp->kwds = va_arg(*ap,char **); + ccase = va_arg(*ap,int); + cunique = va_arg(*ap,int); + argp->checkcase = ccase ? TRUE : FALSE; + argp->checkunique = cunique ? TRUE : FALSE; + + kp = argp->kwds; + while( kp && (*kp++) ) cnt++; + argp->count = cnt; + } + return (void *)argp; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Copy_Enum_Type( const void * argp ) +| +| Description : Copy structure for enumeration type argument. +| +| Return Values : Pointer to argument structure or NULL on error. ++--------------------------------------------------------------------------*/ +static void *Copy_Enum_Type(const void * argp) +{ + enumARG *result = (enumARG *)0; + + if (argp) + { + const enumARG *ap = (const enumARG *)argp; + + result = (enumARG *)malloc(sizeof(enumARG)); + if (result) + *result = *ap; + } + return (void *)result; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Free_Enum_Type( void * argp ) +| +| Description : Free structure for enumeration type argument. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Free_Enum_Type(void * argp) +{ + if (argp) + free(argp); +} + +#define SKIP_SPACE(x) while(((*(x))!='\0') && (is_blank(*(x)))) (x)++ +#define NOMATCH 0 +#define PARTIAL 1 +#define EXACT 2 + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static int Compare(const unsigned char * s, +| const unsigned char * buf, +| bool ccase ) +| +| Description : Check wether or not the text in 'buf' matches the +| text in 's', at least partial. +| +| Return Values : NOMATCH - buffer doesn't match +| PARTIAL - buffer matches partially +| EXACT - buffer matches exactly ++--------------------------------------------------------------------------*/ +static int Compare(const unsigned char *s, const unsigned char *buf, + bool ccase) +{ + SKIP_SPACE(buf); /* Skip leading spaces in both texts */ + SKIP_SPACE(s); + + if (*buf=='\0') + { + return (((*s)!='\0') ? NOMATCH : EXACT); + } + else + { + if (ccase) + { + while(*s++ == *buf) + { + if (*buf++=='\0') return EXACT; + } + } + else + { + while(toupper(*s++)==toupper(*buf)) + { + if (*buf++=='\0') return EXACT; + } + } + } + /* At this location buf points to the first character where it no longer + matches with s. So if only blanks are following, we have a partial + match otherwise there is no match */ + SKIP_SPACE(buf); + if (*buf) + return NOMATCH; + + /* If it happens that the reference buffer is at its end, the partial + match is actually an exact match. */ + return ((s[-1]!='\0') ? PARTIAL : EXACT); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_Enum_Field( +| FIELD * field, +| const void * argp) +| +| Description : Validate buffer content to be a valid enumeration value +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid ++--------------------------------------------------------------------------*/ +static bool Check_Enum_Field(FIELD * field, const void * argp) +{ + char **kwds = ((const enumARG *)argp)->kwds; + bool ccase = ((const enumARG *)argp)->checkcase; + bool unique = ((const enumARG *)argp)->checkunique; + unsigned char *bp = (unsigned char *)field_buffer(field,0); + char *s, *t, *p; + int res; + + while( kwds && (s=(*kwds++)) ) + { + if ((res=Compare((unsigned char *)s,bp,ccase))!=NOMATCH) + { + p=t=s; /* t is at least a partial match */ + if ((unique && res!=EXACT)) + { + while( kwds && (p = *kwds++) ) + { + if ((res=Compare((unsigned char *)p,bp,ccase))!=NOMATCH) + { + if (res==EXACT) + { + t = p; + break; + } + else + t = (char *)0; + } + } + } + if (t) + { + set_field_buffer(field,0,t); + return TRUE; + } + if (!p) + break; + } + } + return FALSE; +} + +static const char *dummy[] = { (char *)0 }; + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Next_Enum(FIELD * field, +| const void * argp) +| +| Description : Check for the next enumeration value +| +| Return Values : TRUE - next value found and loaded +| FALSE - no next value loaded ++--------------------------------------------------------------------------*/ +static bool Next_Enum(FIELD * field, const void * argp) +{ + const enumARG *args = (const enumARG *)argp; + char **kwds = args->kwds; + bool ccase = args->checkcase; + int cnt = args->count; + unsigned char *bp = (unsigned char *)field_buffer(field,0); + + if (kwds) { + while(cnt--) + { + if (Compare((unsigned char *)(*kwds++),bp,ccase)==EXACT) + break; + } + if (cnt<=0) + kwds = args->kwds; + if ((cnt>=0) || (Compare((const unsigned char *)dummy,bp,ccase)==EXACT)) + { + set_field_buffer(field,0,*kwds); + return TRUE; + } + } + return FALSE; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Previous_Enum( +| FIELD * field, +| const void * argp) +| +| Description : Check for the previous enumeration value +| +| Return Values : TRUE - previous value found and loaded +| FALSE - no previous value loaded ++--------------------------------------------------------------------------*/ +static bool Previous_Enum(FIELD * field, const void * argp) +{ + const enumARG *args = (const enumARG *)argp; + int cnt = args->count; + char **kwds = &args->kwds[cnt-1]; + bool ccase = args->checkcase; + unsigned char *bp = (unsigned char *)field_buffer(field,0); + + if (kwds) { + while(cnt--) + { + if (Compare((unsigned char *)(*kwds--),bp,ccase)==EXACT) + break; + } + + if (cnt<=0) + kwds = &args->kwds[args->count-1]; + + if ((cnt>=0) || (Compare((const unsigned char *)dummy,bp,ccase)==EXACT)) + { + set_field_buffer(field,0,*kwds); + return TRUE; + } + } + return FALSE; +} + + +static FIELDTYPE typeENUM = { + _HAS_ARGS | _HAS_CHOICE | _RESIDENT, + 1, /* this is mutable, so we can't be const */ + (FIELDTYPE *)0, + (FIELDTYPE *)0, + Make_Enum_Type, + Copy_Enum_Type, + Free_Enum_Type, + Check_Enum_Field, + NULL, + Next_Enum, + Previous_Enum +}; + +FIELDTYPE* TYPE_ENUM = &typeENUM; + +/* fty_enum.c ends here */ diff --git a/Source/CursesDialog/form/fty_int.c b/Source/CursesDialog/form/fty_int.c new file mode 100644 index 0000000..7107fcc --- /dev/null +++ b/Source/CursesDialog/form/fty_int.c @@ -0,0 +1,161 @@ + +/* + * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. + * You may freely copy it for use as a template for your own field types. + * If you develop a field type that might be of general use, please send + * it back to the ncurses maintainers for inclusion in the next version. + */ +/*************************************************************************** +* * +* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net * +* * +***************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +typedef struct { + int precision; + long low; + long high; +} integerARG; + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Make_Integer_Type( va_list * ap ) +| +| Description : Allocate structure for integer type argument. +| +| Return Values : Pointer to argument structure or NULL on error ++--------------------------------------------------------------------------*/ +static void *Make_Integer_Type(va_list * ap) +{ + integerARG *argp = (integerARG *)malloc(sizeof(integerARG)); + + if (argp) + { + argp->precision = va_arg(*ap,int); + argp->low = va_arg(*ap,long); + argp->high = va_arg(*ap,long); + } + return (void *)argp; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Copy_Integer_Type(const void * argp) +| +| Description : Copy structure for integer type argument. +| +| Return Values : Pointer to argument structure or NULL on error. ++--------------------------------------------------------------------------*/ +static void *Copy_Integer_Type(const void * argp) +{ + const integerARG *ap = (const integerARG *)argp; + integerARG *result = (integerARG *)0; + + if (argp) + { + result = (integerARG *)malloc(sizeof(integerARG)); + if (result) + *result = *ap; + } + return (void *)result; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Free_Integer_Type(void * argp) +| +| Description : Free structure for integer type argument. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Free_Integer_Type(void * argp) +{ + if (argp) + free(argp); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_Integer_Field( +| FIELD * field, +| const void * argp) +| +| Description : Validate buffer content to be a valid integer value +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid ++--------------------------------------------------------------------------*/ +static bool Check_Integer_Field(FIELD * field, const void * argp) +{ + const integerARG *argi = (const integerARG *)argp; + long low = argi->low; + long high = argi->high; + int prec = argi->precision; + unsigned char *bp = (unsigned char *)field_buffer(field,0); + char *s = (char *)bp; + long val; + char buf[100]; + + while( *bp && *bp==' ') bp++; + if (*bp) + { + if (*bp=='-') bp++; + while (*bp) + { + if (!isdigit(*bp)) break; + bp++; + } + while(*bp && *bp==' ') bp++; + if (*bp=='\0') + { + val = atol(s); + if (lowhigh) return FALSE; + } + sprintf(buf,"%.*ld",(prec>0?prec:0),val); + set_field_buffer(field,0,buf); + return TRUE; + } + } + return FALSE; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_Integer_Character( +| int c, +| const void * argp) +| +| Description : Check a character for the integer type. +| +| Return Values : TRUE - character is valid +| FALSE - character is invalid ++--------------------------------------------------------------------------*/ +static bool Check_Integer_Character(int c, const void * argp) +{ + argp=0; /* Silence unused parameter warning. */ + return ((isdigit(c) || (c=='-')) ? TRUE : FALSE); +} + +static FIELDTYPE typeINTEGER = { + _HAS_ARGS | _RESIDENT, + 1, /* this is mutable, so we can't be const */ + (FIELDTYPE *)0, + (FIELDTYPE *)0, + Make_Integer_Type, + Copy_Integer_Type, + Free_Integer_Type, + Check_Integer_Field, + Check_Integer_Character, + NULL, + NULL +}; + +FIELDTYPE* TYPE_INTEGER = &typeINTEGER; + +/* fty_int.c ends here */ diff --git a/Source/CursesDialog/form/fty_ipv4.c b/Source/CursesDialog/form/fty_ipv4.c new file mode 100644 index 0000000..4ac8a50 --- /dev/null +++ b/Source/CursesDialog/form/fty_ipv4.c @@ -0,0 +1,84 @@ + +/* + * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. + * You may freely copy it for use as a template for your own field types. + * If you develop a field type that might be of general use, please send + * it back to the ncurses maintainers for inclusion in the next version. + */ +/*************************************************************************** +* * +* Author : Per Foreby, perf@efd.lth.se * +* * +***************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_IPV4_Field( +| FIELD * field, +| const void * argp) +| +| Description : Validate buffer content to be a valid IP number (Ver. 4) +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid ++--------------------------------------------------------------------------*/ +static bool Check_IPV4_Field(FIELD * field, const void * argp) +{ + char *bp = field_buffer(field,0); + int num = 0, len; + unsigned int d1, d2, d3, d4; + + argp=0; /* Silence unused parameter warning. */ + + if(isdigit((int)(*bp))) /* Must start with digit */ + { + num = sscanf(bp, "%u.%u.%u.%u%n", &d1, &d2, &d3, &d4, &len); + if (num == 4) + { + bp += len; /* Make bp point to what sscanf() left */ + while (*bp && isspace((int)(*bp))) + bp++; /* Allow trailing whitespace */ + } + } + return ((num != 4 || *bp || d1 > 255 || d2 > 255 + || d3 > 255 || d4 > 255) ? FALSE : TRUE); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_IPV4_Character( +| int c, +| const void *argp ) +| +| Description : Check a character for unsigned type or period. +| +| Return Values : TRUE - character is valid +| FALSE - character is invalid ++--------------------------------------------------------------------------*/ +static bool Check_IPV4_Character(int c, const void * argp) +{ + argp=0; /* Silence unused parameter warning. */ + return ((isdigit(c) || (c=='.')) ? TRUE : FALSE); +} + +static FIELDTYPE typeIPV4 = { + _RESIDENT, + 1, /* this is mutable, so we can't be const */ + (FIELDTYPE *)0, + (FIELDTYPE *)0, + NULL, + NULL, + NULL, + Check_IPV4_Field, + Check_IPV4_Character, + NULL, + NULL +}; + +FIELDTYPE* TYPE_IPV4 = &typeIPV4; + +/* fty_ipv4.c ends here */ diff --git a/Source/CursesDialog/form/fty_num.c b/Source/CursesDialog/form/fty_num.c new file mode 100644 index 0000000..7809599 --- /dev/null +++ b/Source/CursesDialog/form/fty_num.c @@ -0,0 +1,192 @@ + +/* + * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. + * You may freely copy it for use as a template for your own field types. + * If you develop a field type that might be of general use, please send + * it back to the ncurses maintainers for inclusion in the next version. + */ +/*************************************************************************** +* * +* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net * +* * +***************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +#if HAVE_LOCALE_H +#include +#endif + +typedef struct { + int precision; + double low; + double high; + struct lconv* L; +} numericARG; + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Make_Numeric_Type(va_list * ap) +| +| Description : Allocate structure for numeric type argument. +| +| Return Values : Pointer to argument structure or NULL on error ++--------------------------------------------------------------------------*/ +static void *Make_Numeric_Type(va_list * ap) +{ + numericARG *argn = (numericARG *)malloc(sizeof(numericARG)); + + if (argn) + { + argn->precision = va_arg(*ap,int); + argn->low = va_arg(*ap,double); + argn->high = va_arg(*ap,double); +#if HAVE_LOCALE_H + argn->L = localeconv(); +#else + argn->L = NULL; +#endif + } + return (void *)argn; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Copy_Numeric_Type(const void * argp) +| +| Description : Copy structure for numeric type argument. +| +| Return Values : Pointer to argument structure or NULL on error. ++--------------------------------------------------------------------------*/ +static void *Copy_Numeric_Type(const void * argp) +{ + const numericARG *ap = (const numericARG *)argp; + numericARG *result = (numericARG *)0; + + if (argp) + { + result = (numericARG *)malloc(sizeof(numericARG)); + if (result) + *result = *ap; + } + return (void *)result; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Free_Numeric_Type(void * argp) +| +| Description : Free structure for numeric type argument. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Free_Numeric_Type(void * argp) +{ + if (argp) + free(argp); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_Numeric_Field(FIELD * field, +| const void * argp) +| +| Description : Validate buffer content to be a valid numeric value +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid ++--------------------------------------------------------------------------*/ +static bool Check_Numeric_Field(FIELD * field, const void * argp) +{ + const numericARG *argn = (const numericARG *)argp; + double low = argn->low; + double high = argn->high; + int prec = argn->precision; + unsigned char *bp = (unsigned char *)field_buffer(field,0); + char *s = (char *)bp; + double val = 0.0; + char buf[64]; + + while(*bp && *bp==' ') bp++; + if (*bp) + { + if (*bp=='-' || *bp=='+') + bp++; + while(*bp) + { + if (!isdigit(*bp)) break; + bp++; + } + if (*bp==( +#if HAVE_LOCALE_H + (L && L->decimal_point) ? *(L->decimal_point) : +#endif + '.')) + { + bp++; + while(*bp) + { + if (!isdigit(*bp)) break; + bp++; + } + } + while(*bp && *bp==' ') bp++; + if (*bp=='\0') + { + val = atof(s); + if (lowhigh) return FALSE; + } + sprintf(buf,"%.*f",(prec>0?prec:0),val); + set_field_buffer(field,0,buf); + return TRUE; + } + } + return FALSE; +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_Numeric_Character( +| int c, +| const void * argp) +| +| Description : Check a character for the numeric type. +| +| Return Values : TRUE - character is valid +| FALSE - character is invalid ++--------------------------------------------------------------------------*/ +static bool Check_Numeric_Character(int c, const void * argp) +{ + argp=0; /* Silence unused parameter warning. */ + return (isdigit(c) || + c == '+' || + c == '-' || + c == ( +#if HAVE_LOCALE_H + (L && L->decimal_point) ? *(L->decimal_point) : +#endif + '.') + ) ? TRUE : FALSE; +} + +static FIELDTYPE typeNUMERIC = { + _HAS_ARGS | _RESIDENT, + 1, /* this is mutable, so we can't be const */ + (FIELDTYPE *)0, + (FIELDTYPE *)0, + Make_Numeric_Type, + Copy_Numeric_Type, + Free_Numeric_Type, + Check_Numeric_Field, + Check_Numeric_Character, + NULL, + NULL +}; + +FIELDTYPE* TYPE_NUMERIC = &typeNUMERIC; + +/* fty_num.c ends here */ diff --git a/Source/CursesDialog/form/fty_regex.c b/Source/CursesDialog/form/fty_regex.c new file mode 100644 index 0000000..0af1cef --- /dev/null +++ b/Source/CursesDialog/form/fty_regex.c @@ -0,0 +1,264 @@ + +/* + * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. + * You may freely copy it for use as a template for your own field types. + * If you develop a field type that might be of general use, please send + * it back to the ncurses maintainers for inclusion in the next version. + */ +/*************************************************************************** +* * +* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net * +* * +***************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id$") + +#if HAVE_REGEX_H_FUNCS /* We prefer POSIX regex */ +#include + +typedef struct +{ + regex_t *pRegExp; + unsigned long *refCount; +} RegExp_Arg; + +#elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS +#undef RETURN +static int reg_errno; + +static char *RegEx_Init(char *instring) +{ + reg_errno = 0; + return instring; +} + +static char *RegEx_Error(int code) +{ + reg_errno = code; + return 0; +} + +#define INIT register char *sp = RegEx_Init(instring); +#define GETC() (*sp++) +#define PEEKC() (*sp) +#define UNGETC(c) (--sp) +#define RETURN(c) return(c) +#define ERROR(c) return RegEx_Error(c) + +#if HAVE_REGEXP_H_FUNCS +#include +#else +#include +#endif + +typedef struct +{ + char *compiled_expression; + unsigned long *refCount; +} RegExp_Arg; + +/* Maximum Length we allow for a compiled regular expression */ +#define MAX_RX_LEN (2048) +#define RX_INCREMENT (256) + +#endif + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Make_RegularExpression_Type(va_list * ap) +| +| Description : Allocate structure for regex type argument. +| +| Return Values : Pointer to argument structure or NULL on error ++--------------------------------------------------------------------------*/ +static void *Make_RegularExpression_Type(va_list * ap) +{ +#if HAVE_REGEX_H_FUNCS + char *rx = va_arg(*ap,char *); + RegExp_Arg *preg; + + preg = (RegExp_Arg*)malloc(sizeof(RegExp_Arg)); + if (preg) + { + if (((preg->pRegExp = (regex_t*)malloc(sizeof(regex_t))) != (regex_t*)0) + && !regcomp(preg->pRegExp,rx, + (REG_EXTENDED | REG_NOSUB | REG_NEWLINE) )) + { + preg->refCount = (unsigned long *)malloc(sizeof(unsigned long)); + *(preg->refCount) = 1; + } + else + { + if (preg->pRegExp) + free(preg->pRegExp); + free(preg); + preg = (RegExp_Arg*)0; + } + } + return((void *)preg); +#elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS + char *rx = va_arg(*ap,char *); + RegExp_Arg *pArg; + + pArg = (RegExp_Arg *)malloc(sizeof(RegExp_Arg)); + + if (pArg) + { + int blen = RX_INCREMENT; + pArg->compiled_expression = NULL; + pArg->refCount = (unsigned long *)malloc(sizeof(unsigned long)); + *(pArg->refCount) = 1; + + do { + char *buf = (char *)malloc(blen); + if (buf) + { +#if HAVE_REGEXP_H_FUNCS + char *last_pos = compile (rx, buf, &buf[blen], '\0'); +#else /* HAVE_REGEXPR_H_FUNCS */ + char *last_pos = compile (rx, buf, &buf[blen]); +#endif + if (reg_errno) + { + free(buf); + if (reg_errno==50) + blen += RX_INCREMENT; + else + { + free(pArg); + pArg = NULL; + break; + } + } + else + { + pArg->compiled_expression = buf; + break; + } + } + } while( blen <= MAX_RX_LEN ); + } + if (pArg && !pArg->compiled_expression) + { + free(pArg); + pArg = NULL; + } + return (void *)pArg; +#else + ap=0; /* Silence unused parameter warning. */ + return 0; +#endif +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void *Copy_RegularExpression_Type( +| const void * argp) +| +| Description : Copy structure for regex type argument. +| +| Return Values : Pointer to argument structure or NULL on error. ++--------------------------------------------------------------------------*/ +static void *Copy_RegularExpression_Type(const void * argp) +{ +#if (HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS) + const RegExp_Arg *ap = (const RegExp_Arg *)argp; + const RegExp_Arg *result = (const RegExp_Arg *)0; + + if (ap) + { + *(ap->refCount) += 1; + result = ap; + } + return (void *)result; +#else + argp=0; /* Silence unused parameter warning. */ + return 0; +#endif +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static void Free_RegularExpression_Type(void * argp) +| +| Description : Free structure for regex type argument. +| +| Return Values : - ++--------------------------------------------------------------------------*/ +static void Free_RegularExpression_Type(void * argp) +{ +#if HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS + RegExp_Arg *ap = (RegExp_Arg *)argp; + if (ap) + { + if (--(*(ap->refCount)) == 0) + { +#if HAVE_REGEX_H_FUNCS + if (ap->pRegExp) + { + free(ap->refCount); + regfree(ap->pRegExp); + } +#elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS + if (ap->compiled_expression) + { + free(ap->refCount); + free(ap->compiled_expression); + } +#endif + free(ap); + } + } +#else + argp=0; /* Silence unused parameter warning. */ +#endif +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_RegularExpression_Field( +| FIELD * field, +| const void * argp) +| +| Description : Validate buffer content to be a valid regular expression +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid ++--------------------------------------------------------------------------*/ +static bool Check_RegularExpression_Field(FIELD * field, const void * argp) +{ + bool match = FALSE; +#if HAVE_REGEX_H_FUNCS + const RegExp_Arg *ap = (const RegExp_Arg*)argp; + if (ap && ap->pRegExp) + match = (regexec(ap->pRegExp,field_buffer(field,0),0,NULL,0) ? FALSE:TRUE); +#elif HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS + RegExp_Arg *ap = (RegExp_Arg *)argp; + if (ap && ap->compiled_expression) + match = (step(field_buffer(field,0),ap->compiled_expression) ? TRUE:FALSE); +#else + argp=0; /* Silence unused parameter warning. */ + field=0; /* Silence unused parameter warning. */ +#endif + return match; +} + +static FIELDTYPE typeREGEXP = { + _HAS_ARGS | _RESIDENT, + 1, /* this is mutable, so we can't be const */ + (FIELDTYPE *)0, + (FIELDTYPE *)0, + Make_RegularExpression_Type, + Copy_RegularExpression_Type, + Free_RegularExpression_Type, + Check_RegularExpression_Field, + NULL, + NULL, + NULL +}; + +FIELDTYPE* TYPE_REGEXP = &typeREGEXP; + +/* fty_regex.c ends here */ diff --git a/Source/CursesDialog/form/llib-lform b/Source/CursesDialog/form/llib-lform new file mode 100644 index 0000000..ac2ba43 --- /dev/null +++ b/Source/CursesDialog/form/llib-lform @@ -0,0 +1,694 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Thomas E. Dickey 1996,1997 * + ****************************************************************************/ +/* LINTLIBRARY */ + +/* ./fld_arg.c */ + +#include "form.priv.h" + +#undef set_fieldtype_arg +int set_fieldtype_arg( + FIELDTYPE *typ, + void *(*const make_arg)( + va_list *p1), + void *(*const copy_arg)( + const void *p1), + void (*const free_arg)( + void *p1)) + { return(*(int *)0); } + +#undef field_arg +void *field_arg( + const FIELD *field) + { return(*(void **)0); } + +/* ./fld_attr.c */ + +#undef set_field_fore +int set_field_fore( + FIELD *field, + chtype attr) + { return(*(int *)0); } + +#undef field_fore +chtype field_fore( + const FIELD *field) + { return(*(chtype *)0); } + +#undef set_field_back +int set_field_back( + FIELD *field, + chtype attr) + { return(*(int *)0); } + +#undef field_back +chtype field_back( + const FIELD *field) + { return(*(chtype *)0); } + +/* ./fld_current.c */ + +#undef set_current_field +int set_current_field( + FORM *form, + FIELD *field) + { return(*(int *)0); } + +#undef current_field +FIELD *current_field( + const FORM *form) + { return(*(FIELD **)0); } + +#undef field_index +int field_index( + const FIELD *field) + { return(*(int *)0); } + +/* ./fld_def.c */ + +#undef _nc_Default_Field +FIELD *_nc_Default_Field; + +#undef _nc_Make_Argument +TypeArgument *_nc_Make_Argument( + const FIELDTYPE *typ, + va_list *ap, + int *err) + { return(*(TypeArgument **)0); } + +#undef _nc_Copy_Argument +TypeArgument *_nc_Copy_Argument( + const FIELDTYPE *typ, + const TypeArgument *argp, + int *err) + { return(*(TypeArgument **)0); } + +#undef _nc_Free_Argument +void _nc_Free_Argument( + const FIELDTYPE *typ, + TypeArgument *argp) + { /* void */ } + +#undef _nc_Copy_Type +bool _nc_Copy_Type( + FIELD *dst, + FIELD const *src) + { return(*(bool *)0); } + +#undef _nc_Free_Type +void _nc_Free_Type( + FIELD *field) + { /* void */ } + +#undef new_field +FIELD *new_field( + int rows, + int cols, + int frow, + int fcol, + int nrow, + int nbuf) + { return(*(FIELD **)0); } + +#undef free_field +int free_field( + FIELD *field) + { return(*(int *)0); } + +/* ./fld_dup.c */ + +#undef dup_field +FIELD *dup_field( + FIELD *field, + int frow, + int fcol) + { return(*(FIELD **)0); } + +/* ./fld_ftchoice.c */ + +#undef set_fieldtype_choice +int set_fieldtype_choice( + FIELDTYPE *typ, + bool (*const next_choice)( + FIELD *p1, + const void *p2), + bool (*const prev_choice)( + FIELD *p1, + const void *p2)) + { return(*(int *)0); } + +/* ./fld_ftlink.c */ + +#undef link_fieldtype +FIELDTYPE *link_fieldtype( + FIELDTYPE *type1, + FIELDTYPE *type2) + { return(*(FIELDTYPE **)0); } + +/* ./fld_info.c */ + +#undef field_info +int field_info( + const FIELD *field, + int *rows, + int *cols, + int *frow, + int *fcol, + int *nrow, + int *nbuf) + { return(*(int *)0); } + +#undef dynamic_field_info +int dynamic_field_info( + const FIELD *field, + int *drows, + int *dcols, + int *maxgrow) + { return(*(int *)0); } + +/* ./fld_just.c */ + +#undef set_field_just +int set_field_just( + FIELD *field, + int just) + { return(*(int *)0); } + +#undef field_just +int field_just( + const FIELD *field) + { return(*(int *)0); } + +/* ./fld_link.c */ + +#undef link_field +FIELD *link_field( + FIELD *field, + int frow, + int fcol) + { return(*(FIELD **)0); } + +/* ./fld_max.c */ + +#undef set_max_field +int set_max_field( + FIELD *field, + int maxgrow) + { return(*(int *)0); } + +/* ./fld_move.c */ + +#undef move_field +int move_field( + FIELD *field, + int frow, + int fcol) + { return(*(int *)0); } + +/* ./fld_newftyp.c */ + +#undef _nc_Default_FieldType +const FIELDTYPE *_nc_Default_FieldType = {0}; + +#undef new_fieldtype +FIELDTYPE *new_fieldtype( + bool (*const field_check)( + FIELD *p1, + const void *p2), + bool (*const char_check)( + int p1, + const void *p2)) + { return(*(FIELDTYPE **)0); } + +#undef free_fieldtype +int free_fieldtype( + FIELDTYPE *typ) + { return(*(int *)0); } + +/* ./fld_opts.c */ + +#undef set_field_opts +int set_field_opts( + FIELD *field, + Field_Options opts) + { return(*(int *)0); } + +#undef field_opts +Field_Options field_opts( + const FIELD *field) + { return(*(Field_Options *)0); } + +#undef field_opts_on +int field_opts_on( + FIELD *field, + Field_Options opts) + { return(*(int *)0); } + +#undef field_opts_off +int field_opts_off( + FIELD *field, + Field_Options opts) + { return(*(int *)0); } + +/* ./fld_pad.c */ + +#undef set_field_pad +int set_field_pad( + FIELD *field, + int ch) + { return(*(int *)0); } + +#undef field_pad +int field_pad( + const FIELD *field) + { return(*(int *)0); } + +/* ./fld_page.c */ + +#undef set_new_page +int set_new_page( + FIELD *field, + bool new_page_flag) + { return(*(int *)0); } + +#undef new_page +bool new_page( + const FIELD *field) + { return(*(bool *)0); } + +/* ./fld_stat.c */ + +#undef set_field_status +int set_field_status( + FIELD *field, + bool status) + { return(*(int *)0); } + +#undef field_status +bool field_status( + const FIELD *field) + { return(*(bool *)0); } + +/* ./fld_type.c */ + +#undef set_field_type +int set_field_type( + FIELD *field, + FIELDTYPE *type, + ...) + { return(*(int *)0); } + +#undef field_type +FIELDTYPE *field_type( + const FIELD *field) + { return(*(FIELDTYPE **)0); } + +/* ./fld_user.c */ + +#undef set_field_userptr +int set_field_userptr( + FIELD *field, + void *usrptr) + { return(*(int *)0); } + +#undef field_userptr +void *field_userptr( + const FIELD *field) + { return(*(void **)0); } + +/* ./frm_cursor.c */ + +#undef pos_form_cursor +int pos_form_cursor( + FORM *form) + { return(*(int *)0); } + +/* ./frm_data.c */ + +#undef data_behind +bool data_behind( + const FORM *form) + { return(*(bool *)0); } + +#undef data_ahead +bool data_ahead( + const FORM *form) + { return(*(bool *)0); } + +/* ./frm_def.c */ + +#undef _nc_Default_Form +FORM *_nc_Default_Form; + +#undef new_form +FORM *new_form( + FIELD **fields) + { return(*(FORM **)0); } + +#undef free_form +int free_form( + FORM *form) + { return(*(int *)0); } + +#undef set_form_fields +int set_form_fields( + FORM *form, + FIELD **fields) + { return(*(int *)0); } + +#undef form_fields +FIELD **form_fields( + const FORM *form) + { return(*(FIELD ***)0); } + +#undef field_count +int field_count( + const FORM *form) + { return(*(int *)0); } + +/* ./frm_driver.c */ + +#undef _nc_Position_Form_Cursor +int _nc_Position_Form_Cursor( + FORM *form) + { return(*(int *)0); } + +#undef _nc_Refresh_Current_Field +int _nc_Refresh_Current_Field( + FORM *form) + { return(*(int *)0); } + +#undef _nc_Synchronize_Attributes +int _nc_Synchronize_Attributes( + FIELD *field) + { return(*(int *)0); } + +#undef _nc_Synchronize_Options +int _nc_Synchronize_Options( + FIELD *field, + Field_Options newopts) + { return(*(int *)0); } + +#undef _nc_Set_Current_Field +int _nc_Set_Current_Field( + FORM *form, + FIELD *newfield) + { return(*(int *)0); } + +#undef _nc_Internal_Validation +bool _nc_Internal_Validation( + FORM *form) + { return(*(bool *)0); } + +#undef _nc_First_Active_Field +FIELD *_nc_First_Active_Field( + FORM *form) + { return(*(FIELD **)0); } + +#undef _nc_Set_Form_Page +int _nc_Set_Form_Page( + FORM *form, + int page, + FIELD *field) + { return(*(int *)0); } + +typedef struct { + int keycode; + int (*cmd)(FORM *); +} Binding_Info; + +#undef form_driver +int form_driver( + FORM *form, + int c) + { return(*(int *)0); } + +#undef set_field_buffer +int set_field_buffer( + FIELD *field, + int buffer, + const char *value) + { return(*(int *)0); } + +#undef field_buffer +char *field_buffer( + const FIELD *field, + int buffer) + { return(*(char **)0); } + +/* ./frm_hook.c */ + +#undef set_field_init +int set_field_init( + FORM *form, + Form_Hook func) + { return(*(int *)0); } + +#undef field_init +Form_Hook field_init( + const FORM *form) + { return(*(Form_Hook *)0); } + +#undef set_field_term +int set_field_term( + FORM *form, + Form_Hook func) + { return(*(int *)0); } + +#undef field_term +Form_Hook field_term( + const FORM *form) + { return(*(Form_Hook *)0); } + +#undef set_form_init +int set_form_init( + FORM *form, + Form_Hook func) + { return(*(int *)0); } + +#undef form_init +Form_Hook form_init( + const FORM *form) + { return(*(Form_Hook *)0); } + +#undef set_form_term +int set_form_term( + FORM *form, + Form_Hook func) + { return(*(int *)0); } + +#undef form_term +Form_Hook form_term( + const FORM *form) + { return(*(Form_Hook *)0); } + +/* ./frm_opts.c */ + +#undef set_form_opts +int set_form_opts( + FORM *form, + Form_Options opts) + { return(*(int *)0); } + +#undef form_opts +Form_Options form_opts( + const FORM *form) + { return(*(Form_Options *)0); } + +#undef form_opts_on +int form_opts_on( + FORM *form, + Form_Options opts) + { return(*(int *)0); } + +#undef form_opts_off +int form_opts_off( + FORM *form, + Form_Options opts) + { return(*(int *)0); } + +/* ./frm_page.c */ + +#undef set_form_page +int set_form_page( + FORM *form, + int page) + { return(*(int *)0); } + +#undef form_page +int form_page( + const FORM *form) + { return(*(int *)0); } + +/* ./frm_post.c */ + +#undef post_form +int post_form( + FORM *form) + { return(*(int *)0); } + +#undef unpost_form +int unpost_form( + FORM *form) + { return(*(int *)0); } + +/* ./frm_req_name.c */ + +#undef form_request_name +const char *form_request_name( + int request) + { return(*(const char **)0); } + +#undef form_request_by_name +int form_request_by_name( + const char *str) + { return(*(int *)0); } + +/* ./frm_scale.c */ + +#undef scale_form +int scale_form( + const FORM *form, + int *rows, + int *cols) + { return(*(int *)0); } + +/* ./frm_sub.c */ + +#undef set_form_sub +int set_form_sub( + FORM *form, + WINDOW *win) + { return(*(int *)0); } + +#undef form_sub +WINDOW *form_sub( + const FORM *form) + { return(*(WINDOW **)0); } + +/* ./frm_user.c */ + +#undef set_form_userptr +int set_form_userptr( + FORM *form, + void *usrptr) + { return(*(int *)0); } + +#undef form_userptr +void *form_userptr( + const FORM *form) + { return(*(void **)0); } + +/* ./frm_win.c */ + +#undef set_form_win +int set_form_win( + FORM *form, + WINDOW *win) + { return(*(int *)0); } + +#undef form_win +WINDOW *form_win( + const FORM *form) + { return(*(WINDOW **)0); } + +/* ./fty_alnum.c */ + +typedef struct { + int width; +} alnumARG; + +#undef TYPE_ALNUM +FIELDTYPE *TYPE_ALNUM; + +/* ./fty_alpha.c */ + +typedef struct { + int width; +} alphaARG; + +#undef TYPE_ALPHA +FIELDTYPE *TYPE_ALPHA; + +/* ./fty_enum.c */ + +typedef struct { + char **kwds; + int count; + bool checkcase; + bool checkunique; +} enumARG; + +#undef TYPE_ENUM +FIELDTYPE *TYPE_ENUM; + +/* ./fty_int.c */ + +typedef struct { + int precision; + long low; + long high; +} integerARG; + +#undef TYPE_INTEGER +FIELDTYPE *TYPE_INTEGER; + +/* ./fty_ipv4.c */ +#undef TYPE_IPV4 +FIELDTYPE *TYPE_IPV4; + +/* ./fty_num.c */ + +#include + +typedef struct { + int precision; + double low; + double high; + struct lconv* L; +} numericARG; + +#undef TYPE_NUMERIC +FIELDTYPE *TYPE_NUMERIC; + +/* ./fty_regex.c */ + +#include + +typedef struct +{ + regex_t *pRegExp; + unsigned long *refCount; +} RegExp_Arg; + +#undef TYPE_REGEXP +FIELDTYPE *TYPE_REGEXP; diff --git a/Source/CursesDialog/form/mf_common.h b/Source/CursesDialog/form/mf_common.h new file mode 100644 index 0000000..6b1e8fe --- /dev/null +++ b/Source/CursesDialog/form/mf_common.h @@ -0,0 +1,93 @@ +/**************************************************************************** + * Copyright (c) 1998,2000 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Juergen Pfeifer 1995,1997 * + ****************************************************************************/ + +/* Common internal header for menu and form library */ + +#if HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include +#include + +#if DECL_ERRNO +extern int errno; +#endif + +/* in case of debug version we ignore the suppression of assertions */ +#ifdef TRACE +# ifdef NDEBUG +# undef NDEBUG +# endif +#endif + +#include + +#if USE_RCS_IDS +#define MODULE_ID(id) static const char Ident[] = id; +#else +#define MODULE_ID(id) /*nothing*/ +#endif + + +/* Maximum regular 8-bit character code */ +#define MAX_REGULAR_CHARACTER (0xff) + +#define SET_ERROR(code) (errno=(code)) +#define GET_ERROR() (errno) +#define RETURN(code) return( SET_ERROR(code) ) + +/* The few common values in the status fields for menus and forms */ +#define _POSTED (0x01) /* menu or form is posted */ +#define _IN_DRIVER (0x02) /* menu or form is processing hook routine */ + +/* Call object hook */ +#define Call_Hook( object, handler ) \ + if ( (object) && ((object)->handler) )\ + {\ + (object)->status |= _IN_DRIVER;\ + (object)->handler(object);\ + (object)->status &= ~_IN_DRIVER;\ + } + +#define INLINE + +#ifndef TRACE +# if CC_HAS_INLINE_FUNCS +# undef INLINE +# define INLINE inline +# endif +#endif diff --git a/Source/CursesDialog/form/nc_alloc.h b/Source/CursesDialog/form/nc_alloc.h new file mode 100644 index 0000000..f49ea93 --- /dev/null +++ b/Source/CursesDialog/form/nc_alloc.h @@ -0,0 +1,83 @@ +/**************************************************************************** + * Copyright (c) 1998 Free Software Foundation, Inc. * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + +/**************************************************************************** + * Author: Thomas E. Dickey 1996,1997 * + ****************************************************************************/ +/* $Id$ */ + +#ifndef NC_ALLOC_included +#define NC_ALLOC_included 1 + +#if HAVE_LIBDMALLOC +#include /* Gray Watson's library */ +#else +#undef HAVE_LIBDMALLOC +#define HAVE_LIBDMALLOC 0 +#endif + +#if HAVE_LIBDBMALLOC +#include /* Conor Cahill's library */ +#else +#undef HAVE_LIBDBMALLOC +#define HAVE_LIBDBMALLOC 0 +#endif + +#ifndef NO_LEAKS +#define NO_LEAKS 0 +#endif + +#if HAVE_LIBDBMALLOC || HAVE_LIBDMALLOC || NO_LEAKS +#define HAVE_NC_FREEALL 1 +struct termtype; +extern void _nc_free_and_exit(int) GCC_NORETURN; +extern void _nc_free_tparm(void); +extern void _nc_leaks_dump_entry(void); +#define ExitProgram(code) _nc_free_and_exit(code) +#endif + +#ifndef HAVE_NC_FREEALL +#define HAVE_NC_FREEALL 0 +#endif + +#ifndef ExitProgram +#define ExitProgram(code) return code +#endif + +/* doalloc.c */ +extern void *_nc_doalloc(void *, size_t); +#if !HAVE_STRDUP +/* #define strdup _nc_strdup */ +extern char *_nc_strdup(const char *); +#endif + +#define typeMalloc(type,elts) (type *)malloc((elts)*sizeof(type)) +#define typeCalloc(type,elts) (type *)calloc((elts),sizeof(type)) +#define typeRealloc(type,elts,ptr) (type *)_nc_doalloc(ptr, (elts)*sizeof(type)) + +#endif /* NC_ALLOC_included */ diff --git a/Source/QtDialog/AddCacheEntry.cxx b/Source/QtDialog/AddCacheEntry.cxx new file mode 100644 index 0000000..00aaf69 --- /dev/null +++ b/Source/QtDialog/AddCacheEntry.cxx @@ -0,0 +1,83 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "AddCacheEntry.h" +#include +#include + +static const int NumTypes = 4; +static const QString TypeStrings[NumTypes] = + { "BOOL", "PATH", "FILEPATH", "STRING" }; +static const QCMakeProperty::PropertyType Types[NumTypes] = + { QCMakeProperty::BOOL, QCMakeProperty::PATH, + QCMakeProperty::FILEPATH, QCMakeProperty::STRING}; + +AddCacheEntry::AddCacheEntry(QWidget* p, const QStringList& completions) + : QWidget(p) +{ + this->setupUi(this); + for(int i=0; iType->addItem(TypeStrings[i]); + } + QWidget* cb = new QCheckBox(); + QWidget* path = new QCMakePathEditor(); + QWidget* filepath = new QCMakeFilePathEditor(); + QWidget* string = new QLineEdit(); + this->StackedWidget->addWidget(cb); + this->StackedWidget->addWidget(path); + this->StackedWidget->addWidget(filepath); + this->StackedWidget->addWidget(string); + this->setTabOrder(this->Name, this->Type); + this->setTabOrder(this->Type, cb); + this->setTabOrder(cb, path); + this->setTabOrder(path, filepath); + this->setTabOrder(filepath, string); + this->setTabOrder(string, this->Description); + this->Name->setCompleter(new QCompleter(completions, this)); +} + +QString AddCacheEntry::name() const +{ + return this->Name->text(); +} + +QVariant AddCacheEntry::value() const +{ + QWidget* w = this->StackedWidget->currentWidget(); + if(qobject_cast(w)) + { + return static_cast(w)->text(); + } + else if(qobject_cast(w)) + { + return static_cast(w)->isChecked(); + } + return QVariant(); +} + +QString AddCacheEntry::description() const +{ + return this->Description->text(); +} + +QCMakeProperty::PropertyType AddCacheEntry::type() const +{ + int idx = this->Type->currentIndex(); + if(idx >= 0 && idx < NumTypes) + { + return Types[idx]; + } + return QCMakeProperty::BOOL; +} + + diff --git a/Source/QtDialog/AddCacheEntry.h b/Source/QtDialog/AddCacheEntry.h new file mode 100644 index 0000000..e219d4e --- /dev/null +++ b/Source/QtDialog/AddCacheEntry.h @@ -0,0 +1,36 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef AddCacheEntry_h +#define AddCacheEntry_h + +#include +#include +#include + +#include "QCMake.h" +#include "ui_AddCacheEntry.h" + +class AddCacheEntry : public QWidget, public Ui::AddCacheEntry +{ + Q_OBJECT +public: + AddCacheEntry(QWidget* p, const QStringList& completions); + + QString name() const; + QVariant value() const; + QString description() const; + QCMakeProperty::PropertyType type() const; +}; + +#endif + diff --git a/Source/QtDialog/AddCacheEntry.ui b/Source/QtDialog/AddCacheEntry.ui new file mode 100644 index 0000000..a815874 --- /dev/null +++ b/Source/QtDialog/AddCacheEntry.ui @@ -0,0 +1,97 @@ + + AddCacheEntry + + + + 0 + 0 + 380 + 158 + + + + Form + + + + 0 + + + + + Name: + + + + + + + + + + Type: + + + + + + + + + + + Value: + + + + + + + 0 + + + + + + + Description: + + + + + + + + + + + QCMakePathEditor + QLineEdit +
QCMakeWidgets.h
+
+ + QCMakeFilePathEditor + QLineEdit +
QCMakeWidgets.h
+
+
+ + + + Type + currentIndexChanged(int) + StackedWidget + setCurrentIndex(int) + + + 229 + 34 + + + 287 + 65 + + + + +
diff --git a/Source/QtDialog/CMake.desktop b/Source/QtDialog/CMake.desktop new file mode 100644 index 0000000..645eb76 --- /dev/null +++ b/Source/QtDialog/CMake.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Name=CMake +Comment=Cross-platform buildsystem +Exec=cmake-gui %f +Icon=CMakeSetup32.png +Terminal=false +X-MultipleArgs=false +Type=Application +Categories=Development; +StartupNotify=true +MimeType=application/x-cmakecache; diff --git a/Source/QtDialog/CMakeLists.txt b/Source/QtDialog/CMakeLists.txt new file mode 100644 index 0000000..056e48e --- /dev/null +++ b/Source/QtDialog/CMakeLists.txt @@ -0,0 +1,122 @@ +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +PROJECT(QtDialog) +SET(QT_MIN_VERSION "4.4.0") +FIND_PACKAGE(Qt4 REQUIRED) + +IF(NOT QT4_FOUND) + MESSAGE(SEND_ERROR "Failed to find Qt 4.4 or greater.") +ELSE(NOT QT4_FOUND) + + INCLUDE(${QT_USE_FILE}) + SET(CMAKE_PACKAGE_QTGUI TRUE) + SET(SRCS + AddCacheEntry.cxx + AddCacheEntry.h + CMakeSetup.cxx + CMakeSetupDialog.cxx + CMakeSetupDialog.h + FirstConfigure.cxx + FirstConfigure.h + QCMake.cxx + QCMake.h + QCMakeCacheView.cxx + QCMakeCacheView.h + QCMakeWidgets.cxx + QCMakeWidgets.h + QMacInstallDialog.cxx + QMacInstallDialog.h + ) + QT4_WRAP_UI(UI_SRCS + CMakeSetupDialog.ui + Compilers.ui + CrossCompiler.ui + AddCacheEntry.ui + MacInstallDialog.ui + ) + QT4_WRAP_CPP(MOC_SRCS + AddCacheEntry.h + Compilers.h + CMakeSetupDialog.h + FirstConfigure.h + QCMake.h + QCMakeCacheView.h + QCMakeWidgets.h + QMacInstallDialog.h + ) + QT4_ADD_RESOURCES(RC_SRCS CMakeSetup.qrc) + + SET(SRCS ${SRCS} ${UI_SRCS} ${MOC_SRCS} ${RC_SRCS}) + IF(Q_WS_WIN) + SET(SRCS ${SRCS} CMakeSetup.rc) + ENDIF(Q_WS_WIN) + IF(Q_WS_MAC) + SET(SRCS ${SRCS} CMakeSetup.icns) + SET(MACOSX_BUNDLE_ICON_FILE CMakeSetup.icns) + SET_SOURCE_FILES_PROPERTIES(CMakeSetup.icns PROPERTIES + MACOSX_PACKAGE_LOCATION Resources) + ENDIF(Q_WS_MAC) + + INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) + INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) + + ADD_EXECUTABLE(cmake-gui WIN32 MACOSX_BUNDLE ${SRCS}) + TARGET_LINK_LIBRARIES(cmake-gui CMakeLib ${QT_QTMAIN_LIBRARY} ${QT_LIBRARIES}) + IF(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.4) + IF(APPLE) + SET_TARGET_PROPERTIES(cmake-gui PROPERTIES + OUTPUT_NAME ${CMAKE_BUNDLE_NAME}) + ENDIF(APPLE) + SET(CMAKE_INSTALL_DESTINATION_ARGS + BUNDLE DESTINATION "${CMAKE_BUNDLE_LOCATION}") + ENDIF(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.4) + + INSTALL(TARGETS cmake-gui RUNTIME DESTINATION bin ${CMAKE_INSTALL_DESTINATION_ARGS}) + + IF(UNIX) + # install a desktop file so CMake appears in the application start menu + # with an icon + INSTALL(FILES CMake.desktop DESTINATION share/applications ) + INSTALL(FILES CMakeSetup32.png DESTINATION share/pixmaps ) + INSTALL(FILES cmakecache.xml DESTINATION share/mime/packages ) + ENDIF(UNIX) + + IF(APPLE) + SET(CMAKE_POSTFLIGHT_SCRIPT + "${CMake_BINARY_DIR}/Source/QtDialog/postflight.sh") + SET(CMAKE_POSTUPGRADE_SCRIPT + "${CMake_BINARY_DIR}/Source/QtDialog/postupgrade.sh") + configure_file("${CMake_SOURCE_DIR}/Source/QtDialog/postflight.sh.in" + "${CMake_BINARY_DIR}/Source/QtDialog/postflight.sh") + configure_file("${CMake_SOURCE_DIR}/Source/QtDialog/postupgrade.sh.in" + "${CMake_BINARY_DIR}/Source/QtDialog/postupgrade.sh") + INSTALL(CODE "execute_process(COMMAND ln -s \"../MacOS/${CMAKE_BUNDLE_NAME}\" cmake-gui + WORKING_DIRECTORY \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/bin)") + ENDIF(APPLE) + + if(APPLE OR WIN32) + # install rules for including 3rd party libs such as Qt + # if a system Qt is used (e.g. installed in /usr/lib/), it will not be included in the installation + set(fixup_exe "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/bin/cmake-gui${CMAKE_EXECUTABLE_SUFFIX}") + if(APPLE) + set(fixup_exe "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/MacOS/${CMAKE_BUNDLE_NAME}") + endif(APPLE) + install(CODE " + include(\"${CMake_SOURCE_DIR}/Modules/BundleUtilities.cmake\") + fixup_bundle(\"${fixup_exe}\" \"\" \"${QT_LIBRARY_DIR};${QT_BINARY_DIR}\") + ") + endif(APPLE OR WIN32) + + CONFIGURE_FILE("${QtDialog_SOURCE_DIR}/QtDialogCPack.cmake.in" + "${QtDialog_BINARY_DIR}/QtDialogCPack.cmake" @ONLY) +ENDIF(NOT QT4_FOUND) + diff --git a/Source/QtDialog/CMakeSetup.cxx b/Source/QtDialog/CMakeSetup.cxx new file mode 100644 index 0000000..b4f3d72 --- /dev/null +++ b/Source/QtDialog/CMakeSetup.cxx @@ -0,0 +1,199 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "QCMake.h" // include to disable MS warnings +#include +#include +#include +#include +#include "QMacInstallDialog.h" +#include "CMakeSetupDialog.h" +#include "cmDocumentation.h" +#include "cmake.h" +#include "cmVersion.h" +#include +#include + +//---------------------------------------------------------------------------- +static const char * cmDocumentationName[][3] = +{ + {0, + " cmake-gui - CMake GUI.", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationUsage[][3] = +{ + {0, + " cmake-gui [options]\n" + " cmake-gui [options] \n" + " cmake-gui [options] ", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationDescription[][3] = +{ + {0, + "The \"cmake-gui\" executable is the CMake GUI. Project " + "configuration settings may be specified interactively. " + "Brief instructions are provided at the bottom of the " + "window when the program is running.", 0}, + CMAKE_STANDARD_INTRODUCTION, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char * cmDocumentationOptions[][3] = +{ + {0,0,0} +}; + +int main(int argc, char** argv) +{ + cmSystemTools::FindExecutableDirectory(argv[0]); + // check docs first so that X is not need to get docs + // do docs, if args were given + cmDocumentation doc; + doc.addCMakeStandardDocSections(); + if(argc >1 && doc.CheckOptions(argc, argv)) + { + // Construct and print requested documentation. + cmake hcm; + hcm.AddCMakePaths(); + // just incase the install is bad avoid a seg fault + const char* root = hcm.GetCacheDefinition("CMAKE_ROOT"); + if(root) + { + doc.SetCMakeRoot(root); + } + std::vector commands; + std::vector compatCommands; + std::map propDocs; + + std::vector generators; + hcm.GetCommandDocumentation(commands, true, false); + hcm.GetCommandDocumentation(compatCommands, false, true); + hcm.GetGeneratorDocumentation(generators); + hcm.GetPropertiesDocumentation(propDocs); + doc.SetName("cmake"); + doc.SetSection("Name",cmDocumentationName); + doc.SetSection("Usage",cmDocumentationUsage); + doc.SetSection("Description",cmDocumentationDescription); + doc.AppendSection("Generators",generators); + doc.PrependSection("Options",cmDocumentationOptions); + doc.SetSection("Commands",commands); + doc.SetSection("Compatilbility Commands", compatCommands); + doc.SetSections(propDocs); + + return (doc.PrintRequestedDocumentation(std::cout)? 0:1); + } + + QApplication app(argc, argv); + + // clean out standard Qt paths for plugins, which we don't use anyway + // when creating Mac bundles, it potentially causes problems + foreach(QString p, QApplication::libraryPaths()) + { + QApplication::removeLibraryPath(p); + } + + // if arg for install + for(int i =0; i < argc; i++) + { + if(strcmp(argv[i], "--mac-install") == 0) + { + QMacInstallDialog setupdialog(0); + setupdialog.exec(); + return 0; + } + } + // tell the cmake library where cmake is + QDir cmExecDir(QApplication::applicationDirPath()); +#if defined(Q_OS_MAC) + cmExecDir.cd("../../../"); +#endif + + // pick up translation files if they exists in the data directory + QDir translationsDir = cmExecDir; + translationsDir.cd(".." CMAKE_DATA_DIR); + translationsDir.cd("i18n"); + QTranslator translator; + QString transfile = QString("cmake_%1").arg(QLocale::system().name()); + translator.load(transfile, translationsDir.path()); + app.installTranslator(&translator); + + // app setup + app.setApplicationName("CMakeSetup"); + app.setOrganizationName("Kitware"); + QIcon appIcon; + appIcon.addFile(":/Icons/CMakeSetup32.png"); + appIcon.addFile(":/Icons/CMakeSetup128.png"); + app.setWindowIcon(appIcon); + + CMakeSetupDialog dialog; + dialog.show(); + + cmsys::CommandLineArguments arg; + arg.Initialize(argc, argv); + std::string binaryDirectory; + std::string sourceDirectory; + typedef cmsys::CommandLineArguments argT; + arg.AddArgument("-B", argT::CONCAT_ARGUMENT, + &binaryDirectory, "Binary Directory"); + arg.AddArgument("-H", argT::CONCAT_ARGUMENT, + &sourceDirectory, "Source Directory"); + // do not complain about unknown options + arg.StoreUnusedArguments(true); + arg.Parse(); + if(!sourceDirectory.empty() && !binaryDirectory.empty()) + { + dialog.setSourceDirectory(sourceDirectory.c_str()); + dialog.setBinaryDirectory(binaryDirectory.c_str()); + } + else + { + QStringList args = app.arguments(); + if(args.count() == 2) + { + cmsys_stl::string filePath = cmSystemTools::CollapseFullPath(args[1].toAscii().data()); + + // check if argument is a directory containing CMakeCache.txt + cmsys_stl::string buildFilePath = + cmSystemTools::CollapseFullPath("CMakeCache.txt", filePath.c_str()); + + // check if argument is a CMakeCache.txt file + if(cmSystemTools::GetFilenameName(filePath) == "CMakeCache.txt" && + cmSystemTools::FileExists(filePath.c_str())) + { + buildFilePath = filePath; + } + + // check if argument is a directory containing CMakeLists.txt + cmsys_stl::string srcFilePath = + cmSystemTools::CollapseFullPath("CMakeLists.txt", filePath.c_str()); + + if(cmSystemTools::FileExists(buildFilePath.c_str())) + { + dialog.setBinaryDirectory(cmSystemTools::GetFilenamePath(buildFilePath).c_str()); + } + else if(cmSystemTools::FileExists(srcFilePath.c_str())) + { + dialog.setSourceDirectory(filePath.c_str()); + dialog.setBinaryDirectory(cmSystemTools::CollapseFullPath(".").c_str()); + } + } + } + + return app.exec(); +} + diff --git a/Source/QtDialog/CMakeSetup.icns b/Source/QtDialog/CMakeSetup.icns new file mode 100644 index 0000000000000000000000000000000000000000..4a50c0416994f9ae28aba15413872f666c4d62d5 GIT binary patch literal 138205 zcmeFa1z1#D`#!vf3A#I_K|(-MQo2)+P!I(aObl#s522Wdg@q_ml8PuIN~(a;C`d}# z-Ae8M+IwaQ1rMI1zSnnszj=KRFtgYFJomGn6?@%l?FsT*xfY@m?g(0|J`;lIE`$w{ zh6e|b!NK7jL!<$u!8r>Vh#X=VL^`*+x^^Oi5kn09NP=ptb_~)VKEyQKk6d)!923xv z42BIc^&{yv?*2D57bD-mU&x!CW_I(6j(dL^CJzbsBYWhmO`I+@nZ_dhLqnk88I@VH z^z)ii)_sJBT>6oN8fpq^hiYn`+1P^%29ZcH8NCz56|K+my^z6vge)y39grGd(fe>{ z-f3h2*~vMb2jVwP8TdL>x(Y!;l@vK30uEw!%K3;au}9W2;=>^(9K;`%WR1jIIXZ`6Z@6MOzNKyVM8Q|F_S7mj*x;+_+r_dZgF1I8=el(hA zcfL(!r_p>FUD9<$7^Atm9|;TYX)KWyr_vli&KJ}*mT1WcQfcl8Z746i?kG*88J&8k zAg$P&Ml)nZ!@;FzGM8u=Q)tGVkK%&(96U|!Tr`#=$hy#N^biq(h{AfV0a6~wb`4x4 z#DJ5LH9->1uv&C-va_)xuhm(x41#bB5aor#;i$h+evr(^{!IsIeUgXhMy|j^iO3NM zPy3q=(ilX>TtEkpo27rhKGiRXb6;#(F(^9(2prE z17Z@YjK%qX@$g(yL>}nTYfsMt^TpSpywG1`Z-D!^rF0W6Sqy`V>4th7TYt zgGe=`v|;@|I_MfQi2Yp!tqfdxSq~~e2C%*=KG}O&Di$z zF*3Xt;TT5V)@|@}pYM@!buS58j0}MH29R9H&%@QzIq_0~DHMRcH;80PF12x)Yj^tU zjabMZdk^#-&W<+rE*3|Nu2iUcApN@$o&hAC#bUmZm9>M(zMJ_K$2df*k-;eR{Zo*; zv5|?HwLy4gVM(n8bQ^pB8**68L*2k|wz=-c>e5>cNzg5%AGemaUZjzdy1It0re_X- zYiaFx*!A9gIw(j+M23*OkfoZUGSU)@E@h=>r`C3KboKUqxFWh8L=Z+q29VW|`807+ z3A1CV=i=gG@Ah{0J$d%*n=4d@48q8gugFp{Lp}jnBWB{P;Daajls@i#`ux?aftz%- z$hTnx^b{L3L^&07Nf1bRVdvH5{ZF2}eEa@A;-rrN50J_W8|9eP)Nv3FM+dGTT4%jL zKEHkc5h)c+zxr(uae|ClG!-CR7eLMkENH-m_qrm+Bo-$lnkAOcvmn8%0@@%<3ur^plovEU$j-yJ+JhLAuZ8M!do zJu*!4(8X!T zStT(vWpnM6w6t~g&6#J8Nm(sX8CiaxybI}BneM8(dIm<8Glj>ctb~}rrqrV+<4>RQ z)i5wLHZ`{sf@;u|-HxTK0KahRhx**uUAqqk&6;guW@+VUgd0s+aaOtF4;?){P1lY^ z`0JWmTG`k+xbd1%Q+9(QPVfGkj)(0JnwlF5_d6Sz+B!Nqxf=>(P*T<$=kn-zXIDo{ zQ$uy-?VDGk{cWwC+}!3#K-?f{{q01h7r%Y<@L@anyyi~X^~)D8WgcDU;ov;q2Fq$! z`GfsW9zE)L*w%cnwzBm4m5b>qX_<+;mwU_;W`8?`ERN}^uBpCLezW98{-w;6v!{+7 zJ{S{oDE4UhGJTF$L&!Q~quH}zBSu3*0|R|MUENu;!gQFlwe^g2WB4b|z}O@|4V`MQsc&d(Udbaen&kaRj6&z#+PeC>=50dL z#wPjEJ#BZYYies+!zCogCV5+KbVcQzs;cUSOEJpQ|%D5D(H0~v|nbDRHmf4gW>vHa5^W|l^7nVY0QZ0T;#m5#kMWQPqBCZ8_QSPw6-fHz zpW`8SWN=t-@(bwhBK=6_WS^tf2f++$QUFkV2pL4OCI-Mmp5Q~!ZB7P2R|SeAlL1hR zV*vUSS)dl51Yo52WB_=Ib>P569^fHxYlVJ>z5sp>~|}v=~r5 zz(d|Y79Z=ugvCcZn4~xj00#l?{eu&|zJXN6;lXrdq~a)^(f$i4Sb`o$FUZe-;@6^O z>OZuw@81Yohu&4p89?8s0q24{j7X5m?-A&8WIOcjCBit2ERdX`s3HcD!ijWE$k20y z3k@LXcVv~(UJv}cPkq-IBGM7ohZ4~K3L3fA2;Ayf?bvGwDh>2iGz25i-=qeFN1*SG zeHSvVpS}JPAKGJ%Tss?rl5%DR-nAO{t_fsbM>g?j+#rA=1KeKVeE1O8ATk?D&0J|~ zb1&8$#lD9OkcXh*N2uSLS`AxPxXi9e4;BKRKR|}M5yB8sZ)Ou_&1}b>kQunrUFY_d zeU>o9Xkce$ZEa_83K?ug2!lu=gd;=jc*vx7^OBX`YBvhv)(WBXX#xRSgA8Do6hj0u zo}B&I_hym87H5>c`mjnjQh^k9S!GPeAtC*=*;h^Ny zMet(AB}->+YCM;e5@U%ujTw`qTtf$$RfQ~C9I$xtQthDoNy(`RC^rbAx&-bZfj#hd zO0uuNKODfg)WEChd~(Y97|T(=DHq`(^Sf(({rzBnt{_wU`{~K4=g+M}v8YgtC=?h8 zQxbjPMX(=JptW(`h2+%Kv_sb4c}{>V?gaZRS_m)V_FL?zbN6!c`SWQ>ApnaC1(vG- z6qJ%MANJ*2xNyDwlit zcw<+R7W&A=Ri&iE8H`ye8->AA#bIQy1p#Yn1yITv4|qQ84g1h9@Ri@+kdl!BXEJ2R z+5)sS$cL~m(ARqG9)3ErMa5Egcph#(xSHF?XQ5(f)A@|d%&e^J^P5BoYQZ2P8N=#4vz#kf4;)Zl16ge%?H^80$inl`ZL5nd}S4?IJ-tghW3f!!?NH5Yhvg zR|L9wdU$$zd7+nkFVtAjO1<`C`eqR*oQ_CEeP;`X_>zvc){!(u4 z<;!`e9l}OSF=5t#v6~C+VQ1Mfb7*^{1cXu!f)ZnG9bqRC zXXlZU9&VC}^;uZ4D_8RJ^3OPp35W)2js#hhEwFWT05?KT&ZDkM9&XOYY=Kf&^K;3l zJ(@X1N>I)nv9hzbcR))5ixiXY(h;o}P#3S{UA>y0UvSQOOi(}`c|(vz$$Tr=PJVnz zce!<)IcO=g*tKiduY`#~pi8IFlSRwn&mA(iv9Yza8)ws9(XT5P1O)h)e+@2Rx{>HY z3ri^yKE&6LEP!l^z09qx$CZVhh32Zxd6KqDC`g&8K(**>@zSnF)D9u@|`rKF^^ zwCq;88w8PYV1&UyScj2E?38@9yy0R18!G@DGnzXT9D8fgjHat-ECCq+QdV~JR?#lt z3+ScC`2yZh#UfT$o~u@dtI4_OyD z=)#8T6T#St?CHu!YX)NjFmB(jDBUBDQlP@<(kS81?bO!SH!v_X{1M1bY;#}1D4kok z%PY$7WP5-ijEZ7PK>@zx+iL6SO^jnF8Tj}{(Woco6_u5DZtjx+-cVumsLtRLA~j~s z($%E^eHS2GS&zrXASNKNC?5>vPF0S_XnZN&5FqQT)*3oGKLCN62UTXHXw_RrsUDOM zxVOG@_ilB0G;oLNjTXflTtb+dmbUgJKvpWc4=YN>x^fq;Vyw;eLdVerq(2{_cmrAI zS*U4hYH3XjWT7#mxvFH8(A~RL)nFB%@_+;wXp_+dHpjf7OCYPLYiNuDQG-p5k-3gc zO+)Fe5kg?Opr)p_w&BV=5aJDmeaLVg2E+;3TrpSG0L#266qVdqC{sPr(g&r~=u(}j ztE+FQIw*<8ClwjUL+FQ*UN$HJR)%N7>e>?{85;^+>L@M8DrpQ%!@aBX(Ez0)U&9A4 zqBG^^1oJ%888g*TERG+rU_%LGJ$zzM8Ks^mwCd`?vP$Fqn!{26DIFQOh(JSO1El`p zWQO?dim)n94MUUr0nJF8!{z$J+aUYKy3`2YV`wh$0o~u)tLbniA?th@GMt6_hVUEb z87rx(j6lv93#qGTq{0H%C-s(t3>xd%z5Dl@9@HO|f^c90iigaQp%iq=oV#!Zyo`Q% z5J%j$=`&`)qo~SbPz_|cjyx+l-3MI!9`^z;_ zn4vrlR*?p)Cn}oNQ(bwYw~CTnXni&`-UCZk&CL%Uv^E}-hHzN_VnGEZLkwXA!r86z zN=mRY4h6-js=}i|)z;yjQQBTvTNT??izOPRMo``Wu%)%7z1TMbrH%mt-D5jC*`b51 zFB!@!DUN_r!%9|{(^O|MtG{0XGXF?>Llwwe8X)FjOKV$Od(#QvCD!rKyab@=(0pc# ztbziph#P^W`YNZcsm$QrT2p@a?w#5r&CS)d<9N4VsO_Dl3$aSVK*3xI^%OXoqc2PT z5tM$Wh8*L@j*4=)QoN!rwyv$3<|mbSYg>DJN5{jKQ!>jZ3 zf-=pRp`xOy&L^DOR1|(wzO3q0QEv@sE!5g>X+>j+0(N!vw4Iiv3<#K)j8yXR8zo^m zSROY5%B&3XN=21Tsi5Y1X?TfXaYg)3VFT8aw>v$m`+-B`HZS>woaC3&8dE_C2XwjExx>Z59*|vc8}#AtNm# z0|P{yygXVk#;h7#9`O2CpZ4Uj=jPJTL*(xsw|eL1ohcRy+y3r3;&=+WaRPo6$|`l31zi~`ok zP&`5yMiN3o;jN6DcdDCYtBXlWP%)WhWMpOKWQoStFQ;Yi%~H<15ZTrBU^MU0NGeEm2@9>S9ecpO;%!!Yf@pAeC7W~Ih{|&TdAr19qSh_;aB*#^-IARfv#m9M_7gs0Ec#y_US4@ zWDJii!63!S5R!BD?5Viu)3R}i+Y8>bj!iz)I||*GuU@@={q|YvbTHSYB7#5yL>R&o z&a4n1i^3QrtAr$j_?GD+3!@XxoH%xT?+LNvXSQE>--f0QmeFX%j8F!c@EiR5#${lD zpt#9KaTE1YSx{6&1jcYV#HZm^PAy@BAa>)8$K#J5Il4Pm?C2>t@l*R~I?^iq1?KA; z_$~4Mi!|UbOoe8pMt~5%oKHkp7{;)9#6=*pv#ulvkH$u3{;re94#pgeIwTfLKK8kj z;xb64adCL_=IvYf9n;7A%fVU}1dRzV9b}iL#4juaW9X!5{5Y>O#$Z@s!4ZIr%RYPU z!PuDn`*%c(9Sqy|>ERFYKx2%8zk}a1eSDPxe5ax_qOKDlLi{qGFbtew8Yd|@7F99A zA!gKdyo^`G;h4R9BKA((9})IpY&M|TN(l)-e)s-8{DJOs^9mR=v`VD^ID%o5fa8k1 zWI-69Gl(&1Gm5-RX?Mh?H;-s70ZUwfP4yaJfB5k6>z8F@Jfm5=7i)foCr=jBU8EgCM)}3OwNgOoD)2WvuFGn4dqxUkKk?SK%O-Kz9!XWg0>pAg5G$Zhk&K zn4eKVhzpt*KO3ab5l9OM7H=UA{h+9zn)i<={niM5s++*i&!2&~`SsiTY(+FP0BAI} zz6wSKTPPurgO8UN=40d+WF@YSRRPs^9AX9o2ZWb5DE#p7@l*IYH-`Cxo2&ry>p)vD zx}eyA41|HZ`vVAR2r)29lj98IW#ki}XN%Yk?(T4>APLOVX}&6^T=Q%x(0k5?T)zckX?!_2M;$l z4-YR$fyE#N5+Qy%GzA2`lkPov`I?4_dI*2P1Hu54eqdneQx1qF=*S6BIM{KALKcA~ zFgzz6@$_OgZY}`H1(_$ffXYt+jRCEFdfmvf-j{FQ!5zzvh8q}w2T4Q2 zpDzLLz`P9Xq8LR3i{6CO0W4gcoIH%gHL){5y=0*c75K(ru&d(f+Yh4@A%H^$`#ykI z7)cC{Ns@(w z15!I304nYpH7w#mmwG;Y=|^qDU_TE5GY;le)WY0YVH`w=^JC&Jp&9`jy$Zorp?F6~{Ky7w2v-FOVtiPvk2inp2O~gmV zNIl-43BuJue0VgWWY^w!_H}Rw`FaUd7Zn*SlNUm4q0FY|oPZY82=U;EAYEAPPCfY8 zKistz#F0W1NEAhoo{W2f0fjdk-G2sz3V+y#(GXZLBkaPTrn`(|q5}gX zj*$SlVGVi!iGc_&&`PHLeH7w+!AjsjWxt&W?nBS3K3vZ$1lb8XzBizsLRB*CKbTxL zs+HkBwMC2<%Wyx4Wm1@;0s=NpEZZ;(s39X_8MsSF#WIT+1N3GP#A2*imb}uIA9Qi! z-i1u-Eas?#Od0d;Y#^3hG<0+t^De+O0b&_!VZLMpcbr(Z!a+ZT1!T;RV%c(6txba1 zCliTfo-;Rs8`(+3G8T$hw!&LwJ?J$e(KwG&%2-B}vNgIW$d5u9D@`c#pRwGG3NcP3 zW2K2?i&X=h#$Es#Y%vH5hyhh13sm>^+KIY=mH$o~V^|WX?dk_Ihth3fm+(>$My0VJ zecNRO2&Qx?*d^cVV#FY0(=|*G45|a`0LEN2s*5oOTIy}!1b2OSO6P`M^qnk5TwPXtLdu_(4c z+1Cq4BEj?w4D=}2sU#Q4B%QOW(H7&VN+4X78n|A;w8e2L{Nx@i8w|T6Pr{O^D)ufCPIXn zNX*PEEUb)RK0u^NE0bzs-j=GNvIJ&egoTxrjfFI(3|N-{IvU7yiY6vBMiaAD*s4lk zp_E}`XTp!swkVchNa9CD%u#NW9)T4YVq;@x=U}5BQ);{-#xbI6xx0J1$gZ^@!mJEf zAr4L!^j?xi>nDPktLzFF5*uoYgM*Wki-TcIF-4Tw#DbWcT!1&t6epNBv4K0o5p!5M z0yL2zHh22G#mp!z4o)sEFoEM@98>Nmg4kRomtb}_%tf>qFE7{$076a?#HLLyh|N{C z+Q7pG17=`u$IHvd&ja?fQp){Y5F@&27;Y0{gSj{{bA0^#0-R_iPe~ASouvg!qVq}M zDIZ!?kdGOZothx#VxSVHz{-QU%f~Mu0B&@+L7y<8Af_~_AZ9$Btii@hGcPD4EG)3P01sq(hC^_)rSK4S)fQ;CP5&W=WMcfG!8bqo1o`7809m*svG?BErHVBBEkK ztUp!5_)UHgvFxpdOfWu%b** zKg6bi4dLvgAm3|Y3O`C%);6{hzDv2OZeSSV;t~=9Brx7kgEA#4%vO5tI*=7;Ku|8z z#3dvprKWL=qEI!gpG#r3vbI}<1t~!ln+6<_l#-H`5+Z>y>sO>O8wKMq2|*AMG$d3M z8CeO=QJCpiMgM~oW<5iD$87o`V%_0**>GaZQtGXZf*1pz{+ zEArD76lJ+Vd;Uc!Y`deN1f`C^nkMRuf`X!w;xu}c*pE_}FimhlrN>cG&DcO>qn98o zDFCW^42-g}JP$g%_!TKkmp(W^SV~fA3@t?^usp9U!2mp(TnhV9?laP6bKk#Y8j3W^ zObJ`)SL6kO`bQ~DX)IYx3JYxt4VL`gGayE&sY)?`sqDWH!k*p^-6%U+gBVp5aHhI4 zKNu6HDui*-T*ZX2s%r99C23fWn^Kz;&T0TtLtUD2RJ8)5{ZC{tOsS;GU^R6Su(~uX z&kd4n)J1@&p{XJ;3i!`5m<&w@tE%4_t}8tq%~~b2dI4p%nE((-wwiK`SZ|JL7r@7V z5W(0-MX<{Hy%DC;umTT?i3&O>XADzYM@?`P6ccTxCV~;m>kmfQNyCb~n3rhHV6=hQ ztvyR;IwRImW1db`0wdn6i4Av?hLw1~b5R>@Q|dyah*Oooh^2Sq$O~j(Wj-2bS~j5j z40IKkupS(9a;gg0wBqsvI8YAAtynVBC{tU#fu`^%Bo@qnR=~syZ>EF>Psi{^Y6VcH z?1V7XS7OF`cFfBuDqzJKTQ@5G;2*ZL0_^nA5gi4biUM{$dvmC&3MC6Qu+0pVE{?Ko z#Bc^P+9T3}_)iL$+|``T5t^zXS19Q>Lezk=1w|KZCc@CBqJZtmmA$knN>3Hr(tz%= zpl$m=_p_keYm8M`0NNA5loi3J!;-FdoTmd6X zkz|Fb0vItVBXrk%RajdDb5al86hxU&VLNBQ7A^~Q7BG4IM*&Qhmt$8x5Wu9)rouY{ zRCOjKZI12;vz{#x@l*YaUWS!>S7K~J{DITNxI}W;%9-#iVRUe%WZvlhDQuUTr3MR4 zPMc8tVwR91%GC8G?AvwtRNVd(#N+Ydp&Qg;U192mBWyz!g)D{#CXXhPG{i}iF9`|A z@bTBj&mQC*iQIGa#4$|yIvKfXyB1{*K-pIXDjM77g~7r$L|Yq8R&=R?BC1WOd~u13 zLSCQWclY)_dfI(EVQ2V0psF2`KDr}h$Akd@oBSxd{OnC7X=)usR2;8*@rm<8n~|5@ zeSN(>-QAD+?&U;pkBB}Pvol&OW@qqT!;yN&lG6;UCkixd$7FA-4g8)=^%4~4Af7;; z^Z;lSyX#?hUwdgBdE3tD=*YdqeNoE~nCiiXQfN|*3&_aUMn`igu%1Y%?J( zSH^7Zw3G&S$rH(74CuWKWc1`~H{2&dGXjXT11mtrZ)>ecj##%Td}n0X4*!E*da&`x z%@wdRjtJ~TbavFmc1TVjijjo)p?M&C;6B6etvqOMx___fLEYt;4QscCMfn}@(=)-k zwu!>!?;PWU>6d)ecDBz4K(+Ov*{#?=SCw&6!wWCm=e;W@&NZjcfVWZd{2CG}bV%1`;I$WuG@j6pwC7hvyPJ?Bt*c zG(C1yKci`S+dz(n^=VQolhUlQ90kE0t;|Zmv$VMAM!~hKS8{Xn@{+bW>&&unAUo1i zf{U`mp*BhG?rw&FDVUH_l^NQB7ofIb+8-|iDGsD+Sl=v~OKWR&%mFDxjV$aAdl2Rt0iIw=JB}v| zF;i4UZb44@dG*TWOF0*_voh1uQd7=nBt|VX(KB~; zbE6zFfZfR+cuy|}c`S)AZI7Y|qC9~R$;k;BKmXDl-e*R&hz$d1e>1kFpe!+q#f8@k zMlEKfoli|kPE1NoIl9i#z}Vi+9gQpOLG~oLqcp*+m`W4V6TwP6reCr{K40GflQ!R( z9M?F3Nwjg6l}uzZIWaLIAu09j4qr1vYgZ2scVINklMc`v%^*yUqza!bP$=@EC!$Xm zSp0c!fF^7qny`77b8{|U$jZz}Kc5OnCMCk>*b)-X0jg^qjm(@qygWQ2Jee_?=(+G773Yx)Qs%Y8`BuDft@lGjy8sIO&+zBHDW1o-#LDa*5NgdC@n8fj1-j<5SR)f z_U#Pwzr6)^Ce03X6a-__Xm^$mqDNyysjHZCZ~|9SYJ9j4%4ohL*n~&50i?AeNMAez zdD#>BNO#<93mewQ3`oF6#qIAhaI}UFgB0Wd6?AB|<7`Xk+2BD$6oDEjZZ{ywGe}>1 zWT$QiI`zR?FNRC4`kE@RZMU+b9P6miP6Kp}RR7TyoRoMj;p~~%c=Bo1grvCe1(rrK z031`d!Ts?e){^IGCr<1<4j-e7jXeqTy3+qQ1mylLZx^&#ulu358sb?~ZHD_5Rc!MtV*dE){TE*wP{2M5&lvCJ0aiQ?PC zyNf4+JDe+$GlC<5or#T|S6B$_z@`b};{TLufR#M~vc7&k+8`aIhef)7>HP9=J zc^4?;`NM}6IE;B0Q^;)wp2p7$m`EYN@ue@#ea!?4xjxeK__F(YpzQ}ZUg|LR0-8b&ZvO|m(fyJgn*uyW6>^HUjn>BX&+QM%U8IPG3&CGw z1ahi|j)!apyF1AbiM`SDgNWnwaXjh+490-MPi^Ffq|V+Go~xK4c$_>gi1`U7aRXf) zonSL)XJ6vnb(6{CMW5QjJBfYSb3wqzi{qGpPJkQ+J3GQUxjTBVx^IvItF-tDr17GU zt#Ak2N$Th+@!T+pGVVCo(H_>p)7jBo>GPv5j&&(e(TA3Ha1mpBcb)%g(;roFdi1QQ z(?CZXxgG8xwLiSSe1*gJnmB0Q1yJ#a2W@R(?Tlb+ZOghq&q+0L1ty1q_Es{ul%b;| z)Nj#G^>DEK2M&oAzi)1B4Fet!J9qgkWt>P02b&LjA^XAh7BaYytG%u3kk@LqNpx_a zP*G2Z5(?ipg@Xd5*6!1D*Yi!NfU}J#;12y@7j{c{D-5phN_E>LIrK&Ulr;fhJsYz!V>{JQ=g8M_{SKy2GPf89@1Y)150=bUd%;9N!+C=%XGY>)NW zEc`R^8Vo=Spt4tWVOR;cS-7b^!EM{mHEV|ZPfd&m?}PInlv0w-P3`Hf+ZEZSqE(aW z!1kA-SG5gftTefa_kP=Dx9yr!(x^dE$FKM5VQOJ+aL3bn!(-c&v}poV{IaH=+z*$#vl%QVfla z4b3Oq!W4e0AyZw(l|8*vT^&ZX8`eO4kT@q|=1*l~FvS476(F}SHC1G+Bx;tSp`pGx z%QZspr&2M+VY;#>l~q+?)Upxv5=~d!!v0Ad2J@vyT)=4c9WpQ*jL3$Dab zAW#C~wUQ0Fu1kMO?&Y=nQV9;nj>Ca##p+Y6_uLCz{cAFBQD0ekIXo6CtVXJ~_NaN> z^{KmGS^ewcZb^4>Ss8p2Hy)IHm#yZ4OYno5io17zQQHMxez;Xa z9*2pmtR&wdRiCqpXhY98PF>msQwqxI#*(f=aA2KWhP!zarqO2vXKnAqm>q8^1Lqs3 zF78s~V&LZcvLd(yHwKjn94W4-yuIBb<6d$2&3_^8mOQ);7mvjx-=?oDTH$!T<_0+2 z_^Z+`J>>STGmlLa!o#Zw((b$-O~1}*RR7jaAWXDWo3I!58ut* zo%f5%E(3bDao*d)YX$HqBqMlGK+$IN@9mF5T8UnxWR77$ieaQt+uYz3kVB^1*b-_(IU1`f@IG+MbzCkKUv|Cn~k+MJS zUu(KvZ?1s{kI*3LZxkLe+j=80DLVOAMO~`O31<9+o6TSa9HxSjt{3dG+IKnb7gb%F zvI(BZ_B#La6_|?0Sa4;d+QthB*ty1E6LzWRBvJpGaxTMENY;W2{zjYSgct0m9&7wH zZI_vH^bmOY>gpw!ipo)t>Sl3r37CPf8f_Rk)cA|iE;v*M4q*as%kE!*b1Bd~`Ei!6 z@ov;JjZ*V=ojiUBJ=6Gav|ZHYE8wv@6l_x70fT@z6R=!QInl^wxQ2G3@fWpSEFuKp z_Py+!92meegJLl*fWoWpeK(&aQ?{X?6uGmYHn5ivT+xuN^_ zU}qYCSUbnS;YDQ9i;mtlt*e_6l9+@>$9&&Y-^ zkS{V^iZyeM2M1qAPBluof>Vu=i+)kA1*;VfkoSum@E|Jq0^`MtyLAKNjKR_y?NB4T z-jba`yO#d4G7IiUZJ}FrX>b;t&3GYutLFM6=yBKMkR*Ddh)&kT!@-cY>ESyGelq

S9JFIg9Z^`f|-3Q4#==cBYYDP+8x^bj)@HTiSz^{z+uzDylml2A(9AIA8zp zMvw((!9gt4M-CYs6YzvxR92@xmTBrLD!9S*e10LFoWYQN%HHDCVvqpfNF(+rX?l^F zvw>Dm!!;cyRq+JA zlvF3Brp0^c9o_)euk#=#)Dt}K3{wXnfV<++1056Sh|~j(z=x+9$!W1R7N`6v2O6<6 zvrJO@b}p`%&^nPIIC7w|v?}rZenYo-^vr1?)iR%&rHdP;Bz`aI(M~gZJ;_K8(^?#d zo-8c^-@t%!W|1*+1PbJjvK;j=BeA3^VcpCPhi8B|-J)0`2x!>2x`Ps^bVwdiE2$?L zy`HA{X+)t9zyc>3sW#+{o!vdczmvwO2N}!CT=b5h5v-=73u@WAxqHAE`lz}^Imfu5 z%h5az4H!7bhy{#I-UL8V4_|bU&0JJ2`QN?j9}6*qZtQ>aLLUi^>=pp$>HbGAx;qH+)SCN$lmyrl z(Fc(@3C8~&{UPwgJ3H?GNd{o_5%BQt)BmFYU{8z(PXl;i$Mru50QNw8^eF^G|Dz0` z&_^GK@Zx`v0VDL$0K`lD{XT$39}9r}-);h9=u-mlxBGxm`qTjY)lP66{r^P(@aVTi zjJ$@Cm-c_N5BQG$-wptH&h6;;O<+Ozy8!?T0pEWu!Vq%iuZ;pf(np)XONYOe0Ta+i zGvIFpU?Tc|GXN9P|9b(Lm_8){e`6FF_hl|4JrMW>WPs$K9|ZvYv0oN5#sRbm{P_S( zO8@U<0HFWl*UeCa@HYZ5=@-hNKA?TTpPdMSmCA{}F6XZW;HUH{P2f)k;OF%Jd>?>^ ze7+y}sG+C+__Lz`4kFf#o%W2kjsEp#o4`NP|FfOoKhsA8@XGN|b%JCj&4g`e*>oO8$vHU~2TS0Q`|*aEkOP8Swi9Fje}0Dg&lWpOOK;dm;qr*Z;ih zLmMCE^(Xp(U!ead0)T@^Q>OnXG5`j0fM+KFL?0{*yCk0RC$RfJfJYqp1I6 zY2wd+M+W@l8(=3kI`-ZFo&o=bKGp>OV+P=%fPY*2XdwP;004b(j(BWHf9-d)3Gn;} zZSX(R|E~e~uk`=yJ{(lL;Z=sI{;M~6&27eEI zGyrd$|IILnhZg^ru5YxX8bT8PMF4&meJlh1MF4&qeKZ4pJpjLt{=dtB-$?)81mJhl z|2F~nt@P0VBuV|sk{AwRZ2m9f{%GT){PwGT03KTMd)hwD5zqvFAppOdK9&J4Q||=v zP~h*S|7#fl=!56D&_efneu4~`asYmN?V}W?-UR*xeM$yQZ7Ph1mj3SA|CIpXAm-NJ zUHhp0sb&BkTJ|UCPc;Mn6n$z2{Nr|QJhc4J(4SfW0R6T0<$yGucE4|L5udEC7Fl{?9VtFVz0eGT`sfpF9Kp68*_C;BV2NEC2*(<)3c* zSO-Aq1Ejyd8^l4Z?SE?Ar`e_b1fAfV@2A3lk^V#(@HgpClmY0#_igB}z52gf5yC-S zy??9r(JUB7K01PLwj6okAh8Ptx2tRZ+N=7m(^&hcBg_&?GydL7N`PtHfe{>m1ip3g z@4c|EkQ|Bs|NZiR5%~XU1cLljbs#AC5TMVp)Ja^Nm1!qBHu5Z9w<&mO@Jw+uEYzQl z;AbHClP@UHe+~MKR_y--dU~uSv-_=DzJ}7KIlw29e*OWAsb`bHrg_@c;DO6%zlSXY z060Iy5pjlQf_FwPKz~PHRCvlC;CTo1INZoT#03K1Fa#c>Km?CLz#;P?ZgD3M4`13p z4<{!N#2?~>aJCDVE%XmjUavW0<_tCD0E7+utCB&PL$xIWf-$cSU+rDd5))f_jJMmN zJ|187K!s9t#iVt5iJZ4{2 z_Iiy{`@`d~6|9}~@#f>2r}Y^_8=jwuX4b6dzQ%c#)b6bG+`2%Q>C0npzY>wt-jvUX znVCkdt7=PlIGtp0=efMjwTE2h5q`Nv%F0son$4aK1nxM&m^(g|e)rC=oCoRH-kmN2X`+qh5d`0cM!I+2o0(S@?bRoSl3iah$8 z7q^O>J~rn}UdyR@xboOMXU)Y%>C*#?nqOrziFwOwIKDT$5YE_Fpu3x2A)V{VZf^bk z7CQs0+|`aW?Y-U9PTC}SFXu_1+v{*&p-sNmGvm%rTn*>Bn>#fUpU6QbDP5Hj8c4dL*(dw0ZMG{4h&G8Fav7FVS z(PQ1Fs`HlL$g6e_9&qGwSrc!hdu2xXfv_iGi)@4RhZmlFtfUu`&@!#|?FH9GYvO`G zny9TfsHnBd^XuGQLjCRc=ee9s$X`73Z7x%S7$@D1+XstRoc@+qn0``pUVUqMm#5Lp ztH2TY8`tl&Z{5ga&8-D{XZ$-8z1(LX-Qw?hDiJ$1ZZMyf%;av|kS$@Jj zy}Xu>ak`P=H{A21QI$_Mvn*HH?jR}djgk3w`Id0-1DUPHgS$d?lT9RAgDv#UtMXnw zYcRWB#1mm+$kw#Nc-O4Pl_xyuS1ns?VzI+~MVvF~(0t$8szM{Y$KYLf5fef86*r&y zJu#u=x+M%fd)SVxkK6R+;o&nExQf;NddoZ;={jB}R9_WAl;JD})9}@eN!n*0i*3|D zm@m7;-;KVm>ym^D0etmM%M4!U^IRhC;*8|7;>OcwW_WyDe1s8ybZy(hZ(55MYp2Eg zvL7?GuW4Mdz0>K_*AtokJumiud*_#vV5&IpX73C4^E)+eo#MGuTXQ}>Zo#xTCk?Ha zT(Rp{#5**lNy&NI-upb4fj#uOXujgTYr2ufU-#xXymj{B6VPKlpB z?J3_)gum5~?oNpcDRZp;q;si+_7tPH^s-H(|cjM_z>vc0Z8aolxL&-Q>8GviY&pibRi_t}lBo zE#G)2^n%AV%{Unnq-<)&p1SMa`jf$P52vu7&wlqp*LcyOe=ygl zFSv68Ilhh&>z)+NYGG)vmayeJXUTNvWt45COBnI7F8wrp(fv*Sq4&KX7G~}?nm5Ga zA1hTHtM02KXd)<+A`E>v^S+%tVE?dBCg!#0T&;tRE%j`c_4DsoyAP&SD!-CY+shl! za=5xt;8WP5@~%cB?bJ{<@py-$YvpIjc=9;iDrEHbD0yZjnf4|rgkE#EY>R|a`OfAY z=R0JW?Z{a6If^Mz zdI{rMN8!SqPW~BnrVho*nbm?3CY$45G%WUcUKB1CaF^pzPJO`F7Y)|_u6{bLXLQb# zZq<;TURU$(DQ8_kWE_`@`oct2rpRSrJ<*vZPNz#vOZ*c2BpJ%7=5`3|oK z&4o_GNv6lvPD_G$euT^Qs zcF8pVvO2=@8L`Y*p0b2hTr1AQ>>GQ}wPR$Zz{=w3$u~19Q=4DEa#Q{0~N3p6V z%~LuiN2(HDC-%6YRzX^(J`?)r_}RL?tH6Ia^F#D-Sxev)H+g?46g>f`P#L~ z;?l-^2mZ4!YWr%MmDtY{_CG&v6Da5J#s)gjV^5CGIjzqq&?}PWd`CIJav*GmX33|O zeJ@~%P&3{7+nl|=NA_*J{pQVGmygp!s>;*PC?0-{Sdjytkjo9!^{hhTwv|g6JIQ2?K1D$zU(AQoK2D45cow$N8@WwW{&i`Y97^Tb9Z0hIa}V9 zH!b|S5eZW7%zL_B-F}_J{_+WedmixHvWc-~S!u_C?!f31Lw=GB`{yZ7yYfo6 zXSKuy$-wDT zb5~R?aI7>@HfHhEi1xpKJP3w~{rA7ttK4)wo_C^?yZ_aWB`FH?8Orq!oNwl@y!dC5g4M=d>>QY>v%cebzm-Jch%59%;Tsnwwdj_k19J`y8`A`=k7e zL63b`y_eR{y;~!2wzf7{>TOGEs4!E39FzZWMTpo(OY8X0r5r;nt7QGex|)&A;rGt8@1; z_;h$~F6;Kyuau)B?(eG_XeNlfi9E9G)atmXiZBo8-8Mm?ykU-8f=^`k>^m#(@@Y$A zttWR5SINm*i-3HFdFSiYmzgga3{Bmrymg4YrO$UJ!nZ|@Mbt9BAkW)%6YrLbvHNq3 zJGmWXDjGvXSf8GD-K|zr5p3G3w{_6Am2>`v=t}o05nbDLd*G}$m*sZ!m0Lu6%@K$W z=60)mel7AUQS7JXs;^_$ggnTo~xR1CIk6v`Dl zt;26%a9BW8S&t{Z@xn)?mBr6qf782~G(Ff~qssj0JL%%=qaNOU?rX@`28eN08mky) z&+hcuBXmaJA^34^_;J`tWmZ_zu=d6|lJstVpN|5XExeJ!D2 ze?}a?pjwRnLBLSobqmSI;oOSNh4YWZRIm_)UiB;vXnt_K_Jo&Fi-ELshVsp-D2`_# zAr8S}N4k#5-%Tovwmd3-F}`#b&YkWK9JgqB!}NJ_B_D4b+}^n5(Sa9bvr~HS(qDVC zcb9f0b7tdESYFS)n`#$swlH#LY#$Qby?ajDx~z=1IMZt^hG)AN3Hyz_NE&uRyV}mjN^32+(4R1+{idnYZu1F7=yPxAj&fzvAzr(7|ES@<5S5|Ji zab#;io%PJZA~!+LzyqD|U}#Sb;aLBP?IlT#ms2-BjJ=}OtA0IVzaUdoZkkWOa_YW= zD{eR)kG;VszIVI!i8#p#&M(*`@vvhLIB*nTzLBukTyBc$hg z+}DJQ$4h6t+xNI!jB!=NB8#UTGHC`}=PVs1Ls$B4)$l^BYlm_huCZi3cVAz|aYN^E zDLg$jFlS}gf`d3?NwdM#LoZJ3Z4A`dI{&e(ie{avic-aF?wVufi@s)6sRbWDd{p*X zw4R$V#|ly3V}>h5wz-B&Sf;V}n&Lb^Jj!yOoqMLI&3cyxU;R-x-jgK}H93Aqj!Iwt zRyuGCSZ66}s_ew%D=+U>utXIFecg3#XbDw){R_H0| zSFp<}5dr6$kr55+FWlag9o67~n8{J_i->zvunA+ir#M$cpO8%Q)<*9Qj zOD6l&XpuY@e6mWbi~CfKU)HewO?jnKPQO+}MUbk+?9cWcL6W54`mK`c`__jY#r59n z(+rW(feM@1dDB651?7tpo zzmV>o@w)eNp|NJ6eizT#A1ixR;PxjQwRTRrQA)2b~CFCKcbQO4Un=k7O#*=<3mozLo$ z-j}?1DfeO3pi^>@YrUA&+u83nG8(6uvEDn#P1rk=uBZM@T@ShJ?UCv)Ym&pR!u!Qu zmc7L35n_@Ybd3!da5|U;zANzdd)xD?J zhV>&q-pWw+s3$#b(^77$V<|sad`ZhbCE#5dbJ~#pDeaP2cB%WxM_yj>3@CW8Ci}Bl zl>GB8pBeq#@G}RSRxou%#2vaS_T>3V?HI=N$IE5EEOAdhbVHA?v$!Bz_2X{OhgAY+ z&F|xGHk2Q@#Ad=%GV5FQ=FhJqqbhAAW_TIaYi>B|EYf**-Y(9Z&yLx*-IMY21IoFJ zHY={Vom45=5Ow4%UZ`hz=x6pC7p`ijGm%c#D$cW-jSJqe^dIj|WJ?p8AME2K2F>d> z)UV*Qa7$#|W0;qy@YwTXf}q@!jBfSk>*A`nwp1K0Kj6A^-MXDe$d5YTl{ELOIM^z- z9eBFHFl~HC$>zm+>t6lhbna)IS=MU|%$mZkV@$K0mB+1&5sh+b-@5;wr zil>PljrXEzEx*i*!xv7lnW`?Xzm0OApB(+I7OxIOJu$x{AGHveVP+t>7~ZB}<% zn{UZeuT!{a{W;@aX5otTTiWHP8|UV2EAL)s*}cj1?UmxV9h)}!99kahq`xX4w#g@1 z|1kZr#z(HHCnV;2=Z9{sG_;M`D(={{sG~Q3xdc@Cj_IJDp5*ZpWmkjb_b|1tQy^307t(9e^V;a$CM$McJ#mKuU3oNYdcfwj8sg&D zKIc?iF*oH8XKb67+q)4~Fn4Gdw)m2ptgBgY&GjKe!NQ zSbV;0A>zo^eXb|kl(PRZ;TQ>mllN4_ zbolegMe=Qh&*qj+O%6}1>Ps>kLMc((apLMNv>eBqs9xv3CKnoWsS|&Ik#l-*o@d^^ z+e*^yg8H9+{KsO^*{ux4=wamvpt8jS#HHUz|4} z`E#Vt(VOLf1MBB(C}x+jz$b55^03$rCBs=h)14!<7J#$8c_oIB)A!>yV5cm<*mnXF6f(0TZ z1#h?ErmKPG#?g~J7xV&eA7S~XSERuyAi?&hinNnC4lub+)DYTncF|NE6(}X7&#$1M z%zn?@0~3#wCR%yMl7J~6zK-gjGz$wIOWJ3Z^*ep8<2n&c$3C}IuGX9&``M!#=tFz& zqefTFSeK+ni^BkHWVVJ1 zp#VZNi?wFu9xdTz6rcbA0D5r59q@U=)F)A8^?rS3_pCgh8wrEzXm^jB5(Ky@fx2|)wo2ro<%#tRJv;;@V*@wN6_zzMc9Z(!!&9ME?``lh3T(4 zoq@*Dxdm@fCvg?17d5)au|#&RV}QoTB=`u-%_4_(R6hPhpBX1Drb)3p04Ccm@}m?) zZGZZ1$KmL8ABTI<_;(D$7HoT(GYj_DnLbvtecU&(*yG-J;`7J)~)A044RK}nC8pgp$5XQojyFAO7`jpME^pV zNbrs&eXppzJgC|X|7@sWHBq7><=eD2%cDBb=2P;|qAI;ki{s2P;4xsUIQ6jgWcH>u*jSykQKr>Hu)pReu3Bn zr(>-4>c25NN&1!7miZV3(X4wG-^20v;i*j{*}vk)6tr+}A{b@s%wHiSQqbabv#HXi zNOzVzpq`<2tB-#ax{S%|!x<_vZ zTzxpJ6iN&Tz|Nu!h_IC!8?Wu`nN5JObHa(YBXCe2zr1hwRgGCw{a&Q|a0g@owm01j zi*KOl5?b6oLpbh1+WXS3LtMF43P+Anc|YC`4&a6=t?Oux`zh5qe3>S-^bLys?MUZ_ zLs+^WMv@@%dUqbd(!~;bVX9m0p{!t$;i-HNTmW*BvO2)S{j3JJc<*vW0DY){r&jF|K=oSi;cRzI@w{sB{k$8q8s{4wI z+Sc*7++JQXxzWebJ<8DfR*n>WCL_{PKqA3ybXn=h$4fBq1#!9{49eF2%awd=h0N0P z>~vN{*~UcN+MmlleYl5Wr_`dfP@}12t1}w7ke+Q&8xTsf`V=A7ugJXsu*`78l3Z%Z zW@J2Ub+7J={MSiU+SW0i^82LXGPodhg-v11zY5YQQ6ZQ4i%|YAzDZ;N6dtvPg&`(t*Z}wR`T@t30B50-KkQbw*}&wh1@m! zXkjMAY0QreJ6r|FH@)3G*LQPDor*f4rkGIR;8={%9elS&YjbFZCfZbCZ0xrqiA2)Z zp)yzhN;WdKpB5KcgldtRD`P7GYpM9@1_6-kFaLj^P@65v!BNzvNtu^5+=?51WI}-( zqhJUrvomm=liBBCOf@{Frex}N#fj3i50v0qwYw7nhs zL)1Y)L4gPB_z_lX-E`)16A175P!9GJwBo(kj%hMXyre5HBh~2F2Jx7wwTs7Zk_yQRV5`*?D5FZ@Z4c0C!xHpK zNXanEJTkIxjNj2#u>wxY5I7Xc7RZQl-eQM#%EW51j2Ktc2b^T+2)9G~-0tL*?I@z* zG*exqN8Khn1E*>DWX$AB<$wUo;FcMXdKlv!k3TY)s2le^{ADVEceZHFe$a_Cls5Wa zG4M^gdl?+oSdu|i`O>pJh~IPh3;RZjNcY45<@Xs0fiz-ChV8rtR(ucY zKQMqKy0mXrB#d-`6Sq*5nG+&qYz0P0eOGjmI($aXXQEsksRH0|O^!X^h4PFE%rnym zM^ma*-F~l5=8$DesC_NQyTX4A>%mEeMNz0&IT21{Y=C;S7^djHcVhI)*^;xRjdjL+ zUYsOEh1ij96fm8r#blL91AutL4i}?%5PZ<_p(oyR`lwNYVJ5is4j<>@cgubp)j(Alr*eR-TK;$1 zkQmFFr91B5c!K@i5R4;QnUnvV?+7u`~Srv!BsbM?j@`v3S3v zEB;_L_uJq}95LSaSZ`dYO;s}=YHXiPsAb7{%}$9P;DXM38}H0LK_OKxr^D(X)FT@W ztBP~(sceb(UH${VH+w4o4cD96ntsZ-<>8u$LKktpA(d+eu-s-GVO-eg5bTuka~8MK zcDiPG|0kNY)DxjwpzF@~=1ki(mAK*CO-~~KJsc3- zl40I|_v${6f#+x9gHZ_jFdCIo{dsx#DsCeVq1Oc`8b*Yb8#@9$G~^T-+-yc~=hg|M zX%UXv24f`S5xEOwMod&~ZI+dGddDe$l@G*mc-2^vyCA~=}?5GAYRC)7wFbTqc^*UGBza|+*J*~{;yg8Z0!fETt1yu zq-q=&b=7fU%^OSe`Sjs6eXwtyW`jqu7R#bATr+idU3oJQPPRao#da+js2->vPpwQi zjT4Kl|5;z}v%As&2Gs_`1=avtL!kCusc`qy$r{JV9_}%IjR_TH#R!^GRX(JbnSfkl zKDB&$TlGMA+0bT{H=2NlYbl6DE!0V%I6V#*!hx)!f%swd5;tjt&)Jux4vi;DkEL-9#(*gp)`=F5c!}r6CW){6FPx^vhqIek?)4O#Dp}2-xqcey(i=KIqj@0~J1>V(POeH->Q=T~)sriym1u+h-USbkb)|V0eTvY!A zE2XSU3yRL6WU*uacLqg8=!CYuhrm)H^hzm>6mRX=7%_fHI@%TPuq$=b5W$jMhI!9Q zG<-ag{|P!jpK+vwnUpq$0y@eRo8AJDhu&5pcw)(+B;MMWQ22t7x90y;XUtg0x7X@Y z=ednKgKn{?Q0U)rJC;T!1)PA`)=c24?c)-7E)6UL^Q_Vcy_DfewEVRt02BkTq#cU4 zbx*=i_9WGYUC)T}73@bf)K^!KE&MZaQjl;2mgG0~{AHi>!_cw{96>`w2r+O zUnHNNo5zc#gsdBNlQ;c5!qw>DQ}s#&o7SIkg0Hih)3Sel{|!^2H<+|ZR1h`WDnCfn zY%hyz(bbUH*gw>-+<$eR#q*=kDI^bRwmi;?e!>w3-qvJ^=eojqz0k|lccbJ?^D26R z*xf=b8Ygn1ou*w%<-&m6LJifB0>2;&6jh`t4ee`4_yxtFLK^SGB;&QSlDKWcXks;; zWB1W}j6634E6&qRBZSYNCdoXUaX; zP5yNv5U7}}#=Atf<(6{;>#4fb5#v%?H;(g1npn_sj5{rNyh8iMDp1?C6e|2R4OrHD z=s=S6@Zg0yA~6iY{a-=aYuD>z$Kk!P_-_0@-MYj=IE8VnV;50bCk@}>We9%U#^L}} znl&>@K*-t5$N}*3;o+CSp|`$M{hZ(}tY&g}ich{U9D-s|a;>n&gIcH!QUU)NB0P0l z#u{ZiPp>b7j-ls)yVX{q;cR;?1>G|EwwqY%fqRcMxmmq9>z$~RKx+;qq})A&4mc*z z;+Eo!{}bD@Zk5&Qzjzx%VWr%02UuaQ>ythkSHsfLSTPT3?>YyTV|l!kC#VOJmEd7) zt-kDlu6)Wqz$>#}*BfiD7%FsF9+&it%+c zQplE6l9m`dF3%HZLoQuhMck<`NO)7VYrVrNImC2TgCwhI=q-#cQy7hH9PIZaVIfz; zra;y^7UI(itwa9rgULSjr?jM}2HtswcO_g5H=7(N;(GO$&PIe9dzx1jH!ZpBfT|iV zAw$i5W)bAUbnZi}Hh`B|2NFgT&YZe&Oym5z*-2d#9PDsFJ0gR8u=4FR z=n7o*6s5K(Jkr!8hU5BEE=BUe~YJA)WV zrubho-ZYV;H%BH)(}>dk(6?$sZ9;;)WkEbW-ARs>&ngz6$o-Yx5R6Bbn$G{q`Wk8$Mh=mPzsHF_nz2_7HzPL zgfr?an0+a!LeIpUZrn9|FcD#M_O$bZ-Lyb}TfSKKywp(NQqt|l&L+$ZsI$67k;kMP zcDzwGvZS;>h{95L5eGZiB;wN8%y~;UgGt| zefhDe{%XmEEAn?6+h`YC@1JPN5Ug_s8?fRKgC^PNL(&c8fKDYl%4ajU*+@& z&;hz?zTA&EMS4~({V~ZYjy3`^R4Pwg)@41Jf zcQc@2{2O31G?91~rc$|=(R=xDX0^4j2I>*i-Ksa947`G3kGNYtAKgm&a7H^&bN~XV zvi?lmG@(pkPQ)WXm^~|uy(d31pXqC28@%?)1<>O$$ z3EUX1bFJNTjI#fIA|Bd3QSR$fJ9tB&k?pYp=|eYP?+k(NV=x=|jG}7xcCf@we+2Mz z+G8=4lWVwGRU;1KQrqiCBAjDnD{CG7kJ?=#C8M-hC{GS9$3^+u;`zVxt^;qHVz?u5 z{OB%|t`WNFS}>w(Hn~;@Cd+8MqJ{<`AN~C&41!1GPU=|}Z&1iz$Kj_i`*n&Bt4RRE zV##2va)G)IGhTFDdWS&z+Pj1&&rn=~QNE^oxG6j@h^(ic^=KVR_a`dOb{i0^NJNB4 zM1)8~;#hzGA!v7xB{CQ*2b47bfB~0bdH{k#xi45QDbMg+zh@rYMnXOY!ps+_Y9$l+ zfa^;f1v0&0wRGHV3tlzxT$H=O&^PI?AH<_n&V_Pq*#v6*?@|3BsI3t#wy zPCVn2G3R~zC~GKi$B!^PnB&pmHU};zWnjJw5oeXTeZ0ToV(Dq{L9^g2g{u-{JR-+I z_zK`EhBA1nH}_Qj~QE=)AjZJ;txUNB`QF^k))6*}}=a8HraGNo; z7*s7aCh=7T#G>5_8wk|~wc^BTK2>w1yVikNcVk?;opiK?f`$#v-ef514h5vSk&O-CWgHg`Ify2RyJw)m|5{LOqL1__yP_O zcMA}Byb5FKgnqEGL)}$a+v3+MYq1Ej=7^QqIs;ww??M!{0=qQVAJMTk*cJqxd~)OV?l0}%58K+u?d($@w^KiElm6b=zi(a`Usj;s zR+E0-wLfo7z{=s^Ddt<;YWzBibe_j}=KMXmU!XlBPf$bLWL63iFb3MC8N{ziw92a* zje?sR9dmeaaX+}!Uy3+na0u_QN^%woCLvsZ?0gGvKOF6RBs4tXB!jd+v`~1M1hM!> z`ASqtMOZ~>D+i9+6#$vv;hkr(bs(Mn6oEODMb0-UsUNPx@spW*tbroZ;L0MKZvK$9 zB1VMkBcye+wL*$A_qZ%KXYa<|Xoyih;y!$?oA=cjnL;YpXP< z{^+{Y?mx0$k+yJ!B^JCs`$|EJ<%DL03`Ia456#_H7aI6imr>$C*i`Fw*Ez{QLbP5u zQ+8C!X+Y}N&=?|EM1dYu-CVWzsuGC<$3k9`_l9h65pV})ph_Wf0~)A3$aPN?Me$86G25A6_4R1w&*^jZfFM9z%&%>$WNU(vl#%Nc>F?j}tJ!<<^{exxUSAb}|LK zg;j4HNEw`>SC&3(6fyHF8Jn!WZViG4oi2hMcs_SE0QUC)*8Ax617bD}lJM&}>htv# zm}mByD9~<#KGx>HM+<4?YIJFzRh_Nga#>%FT5Ys8tGZGa(yBdLAO=}1qV~2ITCHPM zh+T7Dhv<>scTvxSLsZQI)sAS;l6(Ad*y-`dp+| zWyT~6VcDT#ZU`2^hBGekBTZ2{6~+%~JU67vE}`fm7~K48pLMKX6>{xw)<7+=s2i`3 z$7ge)1;Fx3*-xPt<(R8&9I-g;$#+Ded;>i16+t<}vAi_TOl0B!>+7ueM>JAF!lw42rq zxDcDz+9A#3c@h*Wi)Atr3M_S7DvpeWXYMO1@d1TIJ!1Z1E`dnLXQO-{ZBekKIm`%) z7(z)meiHopodfvgl$8(c7f)d$sQas%*@p*%?|&y^!{$dY5H~)t%&Na$wh}0ZwM4v$ z$5T=q%0i9s4{tN)<3Yj%vL2qecA?~`-GIeW3h^8w-HQ9f3ZNTegg;lm5k-BNlb`Ml65SBqZJ9&-nwAkf%&rB;b^j|;LI~zsoMej_?;5AEG)#btBdn}Lt#rm4SmAJ zqEi>9V(mHr?>1K*Ay0)z_=@y&y1KCvYBWe9>0o-MR^%SRM`-#nGHLk6$Ha4Krbh9Z zpWh+(DT{1JITr9B*x|_J(6++8t`>xMf2V;g$VwCd)oi(5eL#B;%Q2^AzOFr{p9r^UvyUbH_)L!418k@OW(1YE97rdS#pn zjrC%s%0cPdH3}_vI?ab9dMQcdb@}0~-aAfN)F6fgUt%1qHs6eDS?|lGK3n@#H`I6BB-H_$>EY4iK(={Ld4hyqlO^{Xe`*;vi zt?zpf6o7yj6CFy6o3p}T=0yt|^Lrqs*7k<5)#&(yKFz^Z4MaVo#e_hFdzrC>oI02> z3@Nir*t>y2QDPQ8l!iLYj-)R(@MRQ|+shmV>qD#ITeRjh; z9(Cc2J?YK%=HkG*4?C!*(Z-Lq*@?hViDf+sMGUYKHKFtV^Rc1>ik|0@VTk>NTBKc* zf0G0_mP)~MzD}Cn)g2H|E+uUZGOCA9`(b5K90=X#V0#3?>^teFvFiUI1PgtxMe7|L z=fyziUYe8XNgYPbDS&T2)#=Q~U8JIYSB#9-86Kq?^!!Rt_A3p7D?#`B8>KunpUx%= z=$=i}C@X{{#dkw=idzfjmY-;kOO1lemRFO(h74tV$pU_6EKaqTmevbtOY>h!s&#Ue zXedsGh??LO`?(kwH6zr~Ty&1K%$ZlZGyuhgG4i5{ z>lfT6)@fN`a(Ot-*Qab1V6GMqe?2v*a$*u+ywQo1*9j(q^bcq#Dzhx)R)ozT+2nR znQZ@L+6@X9uGD7i7O&mRb)2f{2uPCXT9{6%kY0YLk@DVH& zX18ixg`0ZUJ7VsW3}N5fhIZ9h`GBDkuKO9iGQ7{j%tQ=b`H^jrbv)aJ29ERvvw!S+ zhPcV|=;O#efg;_^sM5T36bTVxIVGhIH{tV$mhkTZmm&9JERC|4x7}b(W>fR*)SThQ z7w#esT^ApUG zQDh`h;XE$Oj5x5Ay#W3L_((t|IYZzX%oEM=2NZzW!Ez zx?5f=6bbq0OBc&zbyq6CFdzW#sp6>5+4$6{#UCQ*$SG@WfOrRovj^k{6G?x&8;6H)?EYnb&1En;pK1U!!kr7|f#22Qw_+Qbo7on3i#M zCD|C-(uhw-itFFMnm3RjKa%@WRDK=AEN?T+O>O>oeu-DV9{XqHJsQ_VDrwNxiY~VK ze@uk?B?mY?;)G5iW|gnOq*dke7ARv$ppZPcui`1MfR*gDLzG*-T&TEJbSCy8c^5x8 zS4Br3t*N<@t8OztU%Id6PMCp36j1x4Jk%`>YkH4Jb!IV+!#w`L)+5 z@5CIwDKEB-J&o*fY^~1QSpZ7xl9Zf3`UJK|h77@=p-r(((TGd#qf7Pg9CG~Imf~!E z(y{nLmnbyKsq+uK-+%vh6VX9pa|u#A3IN?FwLxi=J$!cltACBeC;w&NJb!xXv}QX=KX~o zHUj>3Cic53}-g`%>k~Y z( zEZRpQf0=#h%|x%3L;#(($_S-)6I{#h`KJaZdyv0qucjAaf6cCRdHy;)k|KswxgzZl z!8B|8zRfv@6|5t|;9wj|>OCGrDANmWD6E>)Rik-5dkXwkmy)gI+$J47sn>irzIjDJ zv)&5*V-!sJHz2%5xJ)BmlDLTZcp$yB?E;{lS}(aDe-4GbFnLluwZ|*%IL8dwM(NxM zSaqL^F8FOJJ764UrZRlhK%RJf!x-wUF+cx*<`E=Yho-8n$}y*#Ca6CHI+ZQ}r95Mz zQZ?PdZ$<`KU#@*C8-uQAY&r|=pl~X~P>~`4S5v5HmZ4!U~dtbEsFF}EJm(xsJGI5AW;&+|CO(~qI6rneaDL2G7 z^1?nZ^`t*T%%^&eP5^tLotb)lR5zt6kthivxZ6t-2G8icy>0HuE{=FafQW1g?Hj|}Z zwVm9BA!lXmT7?YKC8n9N(*xgP4#&}Ns;YU6#$O{XeD{8RP`GCwS|*b&=}69y#PIvcs(|IJQ1TW5eeO!cP3yl003DUt?Ey|Y5)jj~TZ)QO>{M7i>+`id zdvye>96wIt8IT?m&T#+qEhtA5#aQ+dxamq$RbDI)mvhqx+D{ z7>=^2fa*(cKD-j~s{b~bJ%OZ9PW%pf>@M>xewXfm=GO2EIMwmN0Ou*G{?g;K=>cv+ z5NNTlagCZBqNk9|fE*@{+$mKM;)aEo21;d_b6J>g?P`6uezgF-=;)$7hLTbG%u31N z*MvzalrqC5gd^MgkE#q|@6lD zf?D_lwt^xrZ7KS@P4e3$l9?GMXzGGF131~O>Nk>fg@;bPn4az_h1s;$HpOf#)}mA= z2RterOTZ&N$u1<+7qITcTWTaTNze)s&)+N)LQn2Y$4o+e)VWIb&)mcxpd5g^W`@P^-+i0CL4aUBm$p~1lx_a$AM$`6xSj|L)$;%+Rd=pz_E!WS zeL-V^pLTm_C%Biw}tpeBCX{`X{C=2Nw9u{d&&yE;6QOEMH|sXevuS1)(FMaFpczjzvI^qa!|`YXj^QtpfJyyCUqyR= zlVhmOTZ?C5(n)6X-U$KjKC-ryDFZ6m6s`KDeBSa@GQw;23@4+f`1wZwloaH7m8O1} z--_mUMK>$+J;jWdgK>~Yn<+^`VzJ7PbQS97JQk$eRvkm}ONccp<*SXEbdYYMvz_+G z@z1eR+v9oGsEM%YWvGllGmvTfY*~^soA;A3MoDx^{Iv!A9+)@gk?WE@khBRJ3{r+| zZ7+IsHOWQN&0v9-3^brFvv&mZ|hQ(-i?t!Lz|Rj9W1Ro zRffLpL_RDMvW2=}v}g1V7G45KIw__ScO@`CRm&Tk*L8svW1bvflk8ZaR8)>fQ z?9+C4TLx1+d!RgT@CY9n--ZjHT>xm_exeBNiIhTBb&kYzHVH7w^Gt4Jk$Tc6%bhLl&gFyR1YiF{RgdQ&+$j>@Dq{i>uMLNPl zoK--mZ9LNH(L84>jYuI0C>TFjI0+2x9P_03;%0jL?(vQyYB?hgNokme2dea))dboM z**=zEs%tg^&kDR!DrT+Urd%Fn;}EbPdPyXcrrM}--7=xhq$r+@NTY?r2gqBXTcb)a zW-KnT_4}C_zO#mqo{{>_Am9Hu68>B+``L1k-4(JFAPR(9zz{0)Me1ZkPG2k~$(iU- zQ~DM{0HK5J@daFT-i@;T*Y$#HagB?T26-<2z9vWyhn_Kz8PehN{gAZ!^51FAECejA zQj^bk4UPHuy=O)(SaKf{7YYi7^ah@hM$K`l2I*wc*V$2nJ{bLm^b(b^u_7?Xq zfMc)x$3wAnJCqnU`(Cc&q1g$$tHn&jH1%h7OwKsKDyfW5(}n4oUm_lHxMr?Q;`+2& zeD+`4(yV-&ehf`PEsJKs`e!<-X_VnvMee~TNBRS8Yx-hvzaiAW?DdA%E zr*oTN^*4vpvk9Z5iBnddwV+CKkX$3^oz*or``1KL#<{SiUTNNHl`@SIFWo2D$M9+a z=$GmeFq=lp<+#OqJBL0IRm)`X#I}%w-UZ(5*fZwDDh&!bJ`qZNl~rK|@*FLzKX zI|&J8z;u9?^v8V9z$poQ1Mpmd;a9J>ph|v=EuI2hf4!@QRV0X9P;^{Y0(+FL9x1Mh zPh%@hAq(iIu+-bcfbM#U19mMzg(07l1Q^PIH^23fhtu=Q^C{>S7x8oN>nln=cr$xA zq#3o<|8H?%vov(vu`n|v?~;<1rO_Ldrqo<}aK1n(j9s!8CLu>(M0q@xT+C`RHVXvK z-N~%xYlqjDm8pw_{)$4C8nU<}0sG+Mgt-#J+{pN!_9F44sRZI{H%fj^wFN26cWM!-CFDuyI+mo^BMG;5F_7j~7$GpQz@z|vU9NB0dp zTJ5oZ+^MAWyWQ7H#UlJAjp!{uOu_v$6?urWAyOsGcEe`7IjuP7=o2z+RcZu280Q7^I?VTSYM&&wh)S3xrL)DuO%)LekhhG( zjxWCJ{MJ@kERZYEOhL4a?nn{Pv~#cC2^s#_p%l~1LR)oiavM1qkm(Y11+yF{N9gGJ zsk;vqWPtJ0lmzCcUySopw9$WhuiRLN>~DQR=K}VnL+6j}vvw>}$8IWDC89JXniXAk zU*z}s;APz-s(T-s$BX%D_6L!IFC)k2M6}_hX^Q_g{_@;C5pNXAm(<&7EM&RoazXZ9 z02!9{dSaq0Mq!kfWt8gz>a=>Xt1Keg06a+xqtArs8}FZ)$&$E!f{KO<&)RT%E!1ro z-&nx#0?~zZ#sYDYdgT8>eKbv1&Eu_MFuF$iD4(nLs3iycqA(1~bgXTle+7YSSJ*VXQ9Xl*ba;$m=RYN7s!M0>p@N!iduhl zwCwr)aNj{l>jplXo0~7fvuS7%8E9i?XKri}2)n43D@=T+;S3eu`jwkbf>}&pepJ1^ zH6$7~C+I`@!%oy=#Wcay99h^j-8VyqRJEiT6d|L-8ssFQ*rj>w&brr%ro(UJ*^|*8 z1F4%3YW4pH+a5?{yU{;|%>8^=pZq4nAK_$hR|YI!QLwrt#pwp49>^z8PERup8XvTV zq?#Uf;r-`rv)o3GZ`aQfHp2_4?7C52@0!*E^fs|j!Z z`{&dS^n1TsYEL1A1ue{KJ}UysWL*2Ht$TL&8N&M=H)}VDuyqn#tR|>7PEdkB@Z4bd zN&Rc&8)m04IdYz?}S*0a5yUlP`v24`$Thu~f3%k!?b0U%5Jj{4r*{O-7-xb)~`>x|I zqoWGP?>DNk5*Z}{EtBMWoG7GD_^kUwvoZLe8dsP17QFX*EaMt4k-0R=eX^VeN=9^! zT$4L7mOX0ztUXG$o8a$w4E9~sgYe>|?=cs{1)5VHN$D`sL3ntUu_1twzE*G_$_rlp zW@rC@y}b*L!0ibPyk{LyGQMXuzN%my{95$SXrd|c33$m%5$a*^_y1Y*x9{PxJXKw8 zJOt?h9xNitu}yUr0`WP~e^ZaIhxfI1g3B!xprZ>{e)7so{Rs&P)f2>$?&1kyU9O_8 zZviUg!1P^{U-QZRbBdWs7TERGeF}xaoTcG0#(m7N%v-8Pg+#hZ7yXoK|w@J zgHV!5dS7M~-}e$CL=|Dy!hhWK7Y$4fXEW2p%fZFXc&tJuIW0@a=4qK#cAMq;*JjXQ zUYz;+i@E=Foq%2q_28%?Rs`ST&sePm3;HUCxk_;RU0WGy7htf~R;vu2 zVq+~+8V5TS5@85k<^lfe=wm?up|X#anXK0EX?Qr{ zBQ5K9AfnvzRD!+4yrYDhO7i063Jc^b3%`k?CaYL>W)VcZqFQV!Jk~i8=G~*9g3tWH z6|7G3oDJBpuE@=aAdR6vD!?k!T+Z!*6UxNiyyaHV=CjIa8lIP*!Ur3&%RCNkG) zp|7b*co2c7JqCcwERRR+DrAe!w?C2vIO1eX_QQikJ-#MI|yqIZnsKuhxR-PnOFXK%pYo2iK(k z-SdzFHbgOh6OiLx%R^F6jNJ{Uc;8UJDz8(ecH!jl#656}PnbR9;e|}zG11nnFr6$| zyzt$U2q^04GI3Y1m_ykCy7{&PS%qTC1js~HGh6>X*)S3$iBouF3@AzNNoyes4a(5a z;#~&Gg7un+I!q9PAY!vue2v@oYKtT8dS;ymEx0O9dXJA=Vch6p`*za_74`-!y08Zk zt56f6kqj)K`?uL4R9d-2Tt_{6buSnkJY5+*u9tYu{SWuLkf5bC9^c47KbF*d%TUri z`^nqFG4G@Sn2x=YQ?(R3x!7#DE({>iF2M7aI9-qkDCDq(On1K%txbgY)jOf(*#QJH z%}&$(A9Js8CRF!Nq=sglN1?}v0?WX=cm7CmnWgpS$-i)iV;Swm5#m{+FSEjwK(=?k zey0g6_ImR+P#_lb2=na;Ra!6t{(S_Cqf?EBLdGT=DhPi5OzV?8N7FU;fPu>sOYRoT zc=R}&)y$l~q~&s+jR4-pJ}%sONZ)O+5hwiXE?pgWNf+}EuOr(_F?ZIKLjy@~3|5NU zEDnRrjHB7$j-f`Zy6@h8nXDMqLH@mTqo5(Mc_fSexn~N)HdTs0)l9DlFdj4G*3_td z%{)M%Bu(PsF(sx#GDq!NVZ;+=`3p5RhfT)!c?8gt>~p2ZoUO|VWXbe(z}RSE8CH>x z7hp~s5sd0uouha7(;hn2S;U}|AJ+MQvc_)-pa5XPM<|2XzWRY=#C{N_S|ZqAJODE#+3oQ( z76MTQWC(j64PQCsgENY}H@ej`96=D7>$4*=?-K%iIM>1+!Vn?qo%*(u<9ihOdGIZ1N)SOXJZ>|!=$KcNVz8JJEh_6$7Ymo5|KN-z z_bq7<6m^A^`}VghE!$wHa|mja9oBopuw{Rsun*I*re7*HPPvaRd2}uI`g6;Xf@Z1+ zV!bYhx&f9Y2_Cy2WkRxrwuKZhRX2FE1ruEMC z@}6`vtW)U&D^#*1faU2u{ldRH;CJ7jyS>-%EUx z9^Y@S33V5R>FI2TD ziUo1onNtJwe0%h-qiYlT{f7i!kplak6Qxi84i)49jH#4o6Z;k2&Q3c5Kqzc}m9oc7 zUFF_xF&fwg!c%+ca$P{tfax*2q-27L+pQ4=RIY07-bVIgNP7^;ZwM+J7Y%PQL7czL z(UivN;yVi@kEODTsX-IE<04ZGK~M5MvzFLfw8z@uWcW1b(@f3@HX@c2oD@GCu& z(`EGPNVie!uT-fi{6TGGB;e#LJ{tcQnsgBwb?*jU|s?_Q68=9h4&@Mqi=zPYrUVE2-%K|Su6-v&U7x0{PMMxK8-*YpRE3uYx$dVau6RfeZH-4t(lK@jU8<- zqR>}my}t(HB((xDq?gRolPtXO7`l&|4NCS=MRb-*HWgvNSVYP-jUzAn)MlsR%4@mI zMzY<9CQCAge%&T$1!S6xOH{UvRqI(0K8>RI)lic?37n6QYP3~hYW=T!vCL1HZM8(2 ziy&dI(nyuZQ+z%_<|HgY6W%V(!HhNXZu{POuqlSTusF*^$2Z&CLa)xyHXeb$0u{3u zl}VSCE%`g;5282imla`~asFuu>@E2-dO(V0pK+3mqZ8r8F-lj6z2I=bOKWWTyG0?C zcJOePeviK@_IEe@P`j|=)A*v+rqJ)Z1#m@xPQHeeGxouPh@C3y;S<`SFZh^Q6ZyC! zduK=xbJa7prX$PkMlo%Au;H5xclhR4h3(gD`I8K26Vq)Dl>_|YMoG$44VPiZvlg9n zALmO#j7(N3i{_0}w{3%YeIw>Zc7T$e+$lA`ikES3Ap1hU>V@&tcZ0&+Kyv|O@OLYT zZ*`kSCUXWN?2VAy@Wp5erN&aYr$=HOM7x}a&vxWk_`VwlVkY5b4}Fq$8aC@70PgBq z5Gn}uviD-ZO*9xWm8I^*D3jCmgtqbqxt=&UydZrxmLN4DzT~PgR4BTWFtO z=V2aGCl}mYsBMp1)0NQ|i!7?8+<&X;t^F&|9WY zK`(bFnudQ=AE(eSkC0kC3Z;C0jA=oqB2&umWxJ5`+kof5=9ROsr6m+v_Smy0S@MhL z3-I3fVay>g?QozO=8k{jpw_w@QYO)g27ev!QWa}1LaGz&+DENUp zg56(z`Gow!$4A@V++ipyuvF-V9gPp^I~0@Z`9%&xhsnhVyRM;;IqakI6a9*M0>rzQ zuVNKe$DbHMy4{Kbw+`0lGhoG*-wBv1bhGYO)E{jkPukQ$U#mNTbg2mrli!BHH>Mhx zi*nZCtY_fcXlER1`DM=SYj(uMSqH;w`^aurkDCko602b0jK{_)C%;2`(kGgv zl<#0%jYokQ(Mom1*7SO>bh}K=W*0%26a}*nVeg5xziUDor41c~HA^;{X-wbY)kDJP z08rSVqkrVXC9L2fYsTmTT*y~Dx*=JA(c?4vu4v-{pF|fa4JO*;on_m2S2?z&wsSI7_k(GrqvN`@BQWJjwrQi%xOA{kYHBd8KtwCwUr5 z|0AO7ByZ%x4)37O&lJgiz;C{EZz^O_U?|;7e6*YN8rxom@01h+kGXQd01qjghNpyt@7_(C((86a$zm$oGx5FwcG?w)jcSn2Iovu)l-Wytm#3v;;IiV(P_`J&aF{Y z!tTHn{;z3b4t8(aY-y@heyr*sx-~hrK6GGN7-e4@pDg5^P`u|=4Fu1-8+-!x>rW1l z^$w{`WKG7AE7FAHa%&1ZRiL#$)0ZIQpRw!o0zsNN6iQf|B=N_%FzZe}mBM zLR~{msnSJaT4S@aCN4xEsn;1G{8QTX+@^O%6$=+3;G7H_pR;d{DV}yN23U2jqW;EGUj}3OeNM2u;wj>dng%i{2WezO^!Kpe;W?W$2EN z#0!h3sqLN+s{DDv0?!YyzBZ9-sjpm8?s>{aeGW)S+?I?J~+h%>$}G zxf-Z)LZ8@jb^1{NI~5iDzbW(m3niC)oZjn+wP!K}TQQi}TsNA}GN%qTnPoy>Ucd_Z z?$iBYjz3>sLF!=TQ9ajuu8efVaARj(i8%O2zr{!|1lG@iMePK^2*}H?_bGh)JizmE zYni{6XVv{Meku6&KfKQF>lr8fApO=4DiC%TrWl{AwJq{lj-9zD;wznSQ#SPp{}n=& zSXz}uN)eyx3A*j?utM4zZ=1Yr?*&xF&!mogb{~|++3Y7xFMr^N4PsZab($O?EVw42 z|HPNFuydvUC0gK0);GT!ZZkm!-1p+iZK(X(H z)px#7(`^$|FWP%F4iG%&U#OTwXhPYw2?@Z==dtVM89{a};>b*>z+J}Vs_vRN>{^;a zw!KEV5}^L>^Y?5Yk-$$atsjl7GI*wa(M6f+UP-k3#kGS1MRp@~PcM<4#1Isaz|l*w z^rzuImxrob(j;OXw+#A(ED8&s#YsQItmIFgnUsu30>0s%PawmoUPMQ>UjWZ;_g`KG zs)z{lJP8(9EkHqxPf*AtwcPXO(21N-{Ay2QVZ3d3W7G2W2>+AEP2;GSH$@l``YK_g z2!(UFm)ELxO-YtBaIX<}ZW&OEKs&z956;%U5;UFOdRou1wPDhnA}EmD zSPFo^Vh?8Dk~FtkB}yEm3}n{xZNJ{KSVYB!1DPF7LBf478D0-pfOz2e6Mp$ox84*P z@>Hucp@`sVp+)Pkwx->n?C^oaN_<}AA(#yq3@$y;HC`+m>@)Fne`R z_$y*hIvid=*$Z|Il$a+E-xQn1wt4EY3!T57BL*`|UKnrYgk5XB>!^5$%L^u92VYcZ zEx=xv$xm5|AqmFLk~r}_&KI~yXG%W8t%j|jZ0+8Gr{wGm@7;QV=M=Z1Qm4N`ApZP1 z(+w37fD-wXymaM|lr2m&^m^{A7h2u8S&Sq(OvM()QpL)vP(R#;$9UD~Z#r*TUi!if zy>ZLK>3S^Bw*>x8Mc*oWS0naMXO*mpYG^|WUNkJB$aDW-x%5PiPU9xs!`g1Z1_vynq~EC zN_-v~D+0hdZgsaWvx4kS{$5gOMIc7OrZ`cgp??|~PyKRb9Uj7x3{YVBr^kaZpaEOD)*3+uivT_f`4MnE@eB?fJU%D^f zRqiSGRX_llDW1V@c1RXKiO>c~aVkdXc={``t-0WxUnCjHt#71~~(a9WfW&YY#S zj?EK{>-$>}R^{%Vp;|+O;Hy(rRi!gIU;Tu^7*4g?L-PM}*yECspWnaa7olc%1P-Bv zwU{4=8iQuV>R$p>CG$8v86lJJ#i=HOanzG85ruCDbK=3jsZ_I} zNr~lHv%C|s2KUB;cn}Yg>Q0N&OZ>av0Mr0Pn)3nw4nSTpta72o|ezRDp2+#p@_v0tvKoZIr~nM0PIqE>2Ma5Co;~L&}7y zIo7{X#l;iwjeBjshhN``Ws7$E&|Cd+^4;b>03yFP?>kG$D5W!$1k%iiJb{H2LR*lkV+Bcy_0?{MghV=V)@Iql-T((r`W;b`tSuLiez91C}K$pXQyB{L&T5-tY6n;CqS|1xP zVOk54lP)pa_@zb|d7hFlu*KJ@4p%j2$y(4@tF5uMxL}2%bvG4_S;l+3!#4I$3XV~N8p&;y(PMLn~urngSd+P-m9`0g6Coostn4;a)s01!I=P>$57rKn|15^~Le?wj}1T$FN2J=h@-$dv{1wIp>GMcP`bu+V7h3|^U zP<$~1w1`gMmUBibq4a_IMryeG)n0Uc0qR%4_LWHs|AXl&&r{AfiRY@S@)PCNyBnb^p&?ya*hG4lFd`{d7mbW`cnJQ~U zw-UT3)92y@@QP7g`j_{YW^7R%7}k{-eyx0^3SEr;L`h>p8KZZjuBhgI0QOOWQVzd7 z>u++H@;aj}TPA+-ldbehWE7t}FSwgPh{XFZ0`e6K){I%RX4L`bEWllL@4YZuOHWFY zB+0+66prGn!6Au6+>M<^!6Y>7FVMMvV&xwW4dS9dMA=jI`+$jT16v@z^m;PdN=*Gy z5$!wtNvSBP<2INWbza@mzs6|TkX@-O!trh9RxGa&Ron<0gam6Fy2LXnh}@i-v2BO@ zj6V`wTvhtF(I2pRjV(A+#7*m~j;Vo58B~;fW++Yk@0LF!ny2J7luPb*fNd`a6#r z${Wb77?H;;%)EWOI1(F*Y$F+o`&qG4M11TDlQw!bOe?!p<5cAl9LigtUsUt_Et?jD zj5^|?8LlR%l58qj${28z7#axJH6|CrtT+Z~A#J_b(rGzGf&>W?1bfJR6Mq}6lv34X zQ)?x69-n%LL6go(rBZb5{nftuV%D5o;&Sk5+)H0akQ1HEblYeq+axln-Vd-(ot{38iD0RX{C|GmBcf0Bg% zK@0xd|5uTO|NV0RF8aSM|KUT{uSzk z&W$JQA>(<6V|S~Xw(jqfHix8VPGLc>!_%Hh@HJL|;;d}&s-${-d0EFaB)E?HW;?k; zj|+j}P0f^$Iw`{{S+<-mS4jPQR1t+*V{dfjFqbgI2ch%(d>QYv`6v?aU{*p5WQv4nnw|`{ z-?Mo1^N`W_#z*SYx zA60c!y#nho`JL&HfVBYxV5Dy}$ivy_@+|*NkR{^^_`%VFZFm<{+|OxV#9l5;Apjl! z8X)JznkbX?HPb1b-a97q5#>U-PNYj@Df?Y!bgw{M==7nSOs0N z&VzY#;wSrA^WYy@zNx2Yjcg5xprHaF*zR96$6$bMOr|ugdG}@|9cTRKM`m-^OSXm> zEX@cp-(x!+RT$K1l~rcCtwFiTXk17!V5_;INkj$3@SzwiU|D**+~#*zhWNQs|5FKY2~(5d&lkD=uhf_~zlukN zgLjc8HU{+O%pfP8glvLIVjt|l41EFKNU+$Ei!!Vz+Q0buFCnD@!N5RE3j&n}FY0H4 z{CA4gaLSzuPMog3M$K0?NPX8_$~-l_|2oH3im@#8fkfQMUb&;f?s* z?+cqom_rbrAd{OiA)#~q7mL5XrDZ%!(1a~%fAZBl{QrOfVz`R!OF_P&uXE^dusrR{ zYL2=75(5#F)T$WFrrZ|s*>Gn13D|;h)~EI++D{p_-G0gl%4-+a!cnskxb*$9j7_N@ z6?}pFT2t!t#G=SR*abmhKV>b4oR#KBHt&5R;c8G@^$!agg(F%lI2 z)EfZ$Q8VnYK_8Fruko{I_`wDIPbI*}ftamkPw`VBU+*9EyFB*Y<3x@hVS zV?KQb+cX}!H<9$kX$O1v_HhYtA^47KnxA7M-&CV4$!2ERwDQHw=ZeQrgrktQHn-FG zjQ@8FaFSJg*JG4ObAjj)j$PKon9|L>qBO#vL*)_KMhWJ*Z!m^em)e6*i)KDE{Z25 zcShQ;!_alB#p604R>vYX_Lw92DH(>gJ5Tt9>ZeLe)Wg=Jb0}x)3C+CxO)k%X|0ZhI zgPqvz+1imJ=YJh+SlU(DJad7JuAMP~u&sNXqZ9W+z3{bWaCM353E=BAwEs^HP~so8 z$UDQba4nY{2KZNUuFi6BXq66=VTQXoeL`=b-|UF*0^S!*Y>E>0-0Q(Ib3S&ePI&KvYml40eaBRp^*P>RHCkK9Iit^c@@ngRY^{8|wA|`_J{J zK5j$;iQTM7Q9b~ALpnr#_nr>%t@K-)FYb3Kd<-^+{U}mTLA46_mdG56#XPr&13^DN63KaEF(Rh@{;T z%7-!bvq$M#-?-8xoqA5ESK*k!JXAo9E?GA8rbsT3tX6S^UKu6W?~?4Ol97r)2a1y` z?WO9IvzTaFfxUp{y>ohk)4F!Y&u6*MM_4Wo;FR}7vq#uO4mjEdTji~rRF zMD=wDi-?7rp`9>BtVIeU%Hbxcx*BLmUz!sbIkKo6GalVAN2Uueg7jq$n*q@kB=z}o z+z^3k2aUcQ7q&4&3#daYB@9&xB9Fz7uAsuV#)5JzP5Ah-0{)#x$DSQ@Eqy*hG5SAf zfV4%7hT{Q{is>_Ifmu=LMYm2PBPX%wcU?zd-cO!QDN15AIx&C9w@epsX`$4Xbj;>$ zUoJjWG<#oJzI0U#97&6A{Oz@uEr-A>0dmRb<{XXxZc2Q;aQyEW;N|vaE@Gr_O1RES zCVSq!55MA@spP<;^dOxA&eUJbTCn}{{l&Qd{RrW z?jq~QwDQNflC*xo)f{yf0~KBirxkp6#|^0;Hfnxvp=zViemx$9MM01xgK_>UHD#ap z(ITqPA`yn;V!$K^Vh$E(6dY|;zBd@lH*af=NwXz1SJ(H3>fc&aHpcQhX^!Q~CIDA9vb&J|B+ zcPi?n*Frp;@I&qZoRQoLP&?mWd2W*;m3msmQ0*UwOCC0(1Al>|AW@H++!K z2ZLSIV8Pznqsjo4?Grg{kF1Kuu}24Ayn+okO!RRWS9|P{BlaxCULZ*E$qYP`(l=vf za9IiPrEP0XL|YFZxA`_6UX;byqivBHvN_4fJFJ#!BMtuR5m7jxna}-YLQIV{LZNtw zF>#dy%l08RZaY30yh1!&roQ@joZ)W{%{~JHP(5l!ZEE6Kb?Ld_1uRX0_OM7Gk35rN z5t7b?pdS3d=Dp{U{Jb;Ne*BL2-a>GN0$!KbUW^rpjZe3QO4+iib62S@pn7YB=1h0E z=~d;G_S$b)@iXqz+Ibu%{^{+VO6KjI&3g8=#Q1>W-m74Xj9fyqRu#5}3%6+!gjR-U>Hiis}#c&m}7K%EyyTNd0%EYm> z*EF&3RwZT&$i*&BA@gAR&Dlt_mqhOzSbl!*FU>kSOfgFmxIpU11{?Y8=5~$4OKTZv z*MZ5_thV_9Wg{hkfmh5*)(3QE{niJ)>PsyXK=`v&C}S?QSq}MRMU{eWM?mNb&N8x{ zTuUU!J%f|$+Ve7t)aQ#YcMbd>*%57q2q0ACw=m)4kMh=oUhO9`kMoB|P2n!nG^H)V zk2;&CRu2H-zyY}`P7VY*wofLDUOJWH&h~u(dK}paZHMl#tqPI8`*L9oh9~+qD5wk- zPszvG^L;Y+Xs8}tDvmcF&+yWE_#Z-xxr()&YZZ&;P??9wXHCfYh8lSMHB7=rOfNnP z^_QcgTv~SlEsj$P*=bl+9jiL6;nzk)3$7M_##}q_{CbdJ(d=rzOFlO}-iHuwBnuFm zEI?@7x#$q%+n7>;hEp{unV@NNNAAI4=8Pa3#dr`YHqHm0MjZ1+En41e>-sFm$_5C~ zll;fQMBC`SATXuHZc){)?X=%dbR=f9wJ&DwB^e8wd~~?s7XAn_9Hp(ah28A%NyU?K za8O{4Tr3bn7mqeFyaz6X7M34Bz)%i2qzuAILkL!DhX=?>{URXo>%;$bwc}`e0qzJq zv>Q}S9KPu({!b*(BFDKaz9D_TBja;9jhP)#l1LGkjn^|nC%I-n^I z3tF2G_QEOfE@hzj1Wo7a0IvAF%inEhxi%*3ku)xjB$M7dEn&hBqdzPv&h!@y#f|C< zsRn^Q<;vKIg>;d0uqzlBf+hUR54O22S-nxNMd`=*W+rb^qvQ;YM5SU&*+Y&Spmb`K?34^Ht(~@yn46*R0)5b$LvQ- zkEoeNp>+1bwj<0U0XvKkKe!aNcMG8915TUz16qO8gh;d}bd3e3JArNk3i$QoAi^Hd zl9kJYx07`~_mm-u^WykeJFK6&l+yvYq~k!AVWe}lKT_{~UHM_929YU9*93Th8I4+M zi$HKYBNeZamkg_Xs6{Q}2MIL6J_Z(ZJy3+R$f zHD;KsW>{L>fXmXqy^|wosgNN1^o)QEbrY1jON{1~1}a8r;iiZcpLSgLOYD{p?GEFy_0ZbXurp=VvK;}jX~dvkrZN=E3}~@L$zGgMQHRRTtv^H ztt(pAAyI+_jsyL~OIn!7rs(wVZ5KPu^n20+`UoiT4-$X=7KA@G+B{3=F*TJDDLPR- zZaHPxF;Pq8d&0$$w;Ag^*1t#6Y-ftC_FR4!Q8DLU%G!&5|3%#tQ|Yjo=v8L2)YM?T zlQyM-#XkX1f^JJ=r3-YQs?Y?75 ze{T4`oI@TQ!UAtA6US|qtIG1PqCmS6;oYzqACR0@fBB{jIl&x?V`_>cV4m=*kFBoT z^58s6k%=v@pV^bS`BDyxI#68 zSTKixN*fGhqI@v15p4ufK&=fuXZ&hoVl-X`J#Ezd(N1UTNu|DkDFOjBQtZz=AR@L$&t+6jpj!tJ0ju$AFsper4ZS+AN&ZBX(`k_a0Z zpf7@4IxYh!^b#lD6|2*O_|V$A(LIw}h?)XZd|~l&B0e!3E8cldhzH{kIvc`vbs} zxuI#q_r#k&PKSHo3iBc(k%KUNcJ}^e?#i>11!e1Z@D6g_U0r@`c*dvdHdm8>*dBVx>i%x3h-$@j9rvJX3o3dh~Z z+b$2=D%X_dy>Q*sDTBF?1sFfj7C$f_{#*I~qy~n`Hl}9!e;n`bYZ|s^i3BbXIgk-J zfFh!AYa(J7a6>%6_30t5shdIZX>#!`f;VIrA=68+{!6T<>Ax~|M(%|y+tSoS^v(Tj`X_IdQ zLbSu|G^Z})KmT6ZF6e=C#?QPA45x~|G@(Rdw*6Nst zj{@^oIlp{lM5zMXnl;*4NGlw^p#NMSYqfv&Rg$V{7^3(SDuK1B8)7gj7&3$H$Rr8Y zPRf2?dPD&86|vMMvV@{ufB|(`6`$Uh6qYmBaY@QI5i z`ilH}B`&vN9yC_lTl2Mknzb0gZLF~MA9k^Cl81%xFH-|-s zCm;y1oKKefx~DcP+j}MkMOWhFA|Z+@vrhW2#EYUcXW|T1*qiGXI7oO@g_TDPN}c$e z?I!-wi>_8-S?ngT*Le)%m^gD3B(}GK+erM(2IPn|b7X?ViI-xdaRb4}9Gxf5cwPva zeKY7eBADjwLWxb=pISGVN9QUHDI{M+5RPYINf8T8V~Q|onx9m1`+HEQcZ<+U}(^~!({Du0_rOE&;5x!(he`fEhUUq^^Jha#ch4057 z>NFBU^6Ou1YBh7_yc+l)M%eh!!z)3hv5k37g|D~89l+~~oRw=3Hl%>~NP|MSeOEg4 zzV>-?OY_t6yENVLC~AZ$$!PGj9@bZ;pjc2*5?i{^-yIl)?ZON-3oTub0JKBVzp}9B zmK%=d`4#prUC{N-L%7fv|0S#p5w03UN{Zf^Hr__mGha2YY<}78JnM5 zKDUQs%R%9C9+PhTEx_b>NcbC0plYod>a?(C3V{AM~tYk%X~HD5ES2@Bb}08FJ!uv6Vx(adgf6B4rVQOCdo{xZ6@so5S9|Jf*Erj)djx^AxmP%gVgt@uvLv%-Q}UDRc})TX8uG~aZ}nppx3#K4@WuqG zDVOgK9XO&gZ>xsJ)8SS_IJ4UdEf2jv5B9&Aoh1~FRd9;H2_e1@<6%WGWnp|x+(nvj z>9+>d1i{64AIk2@nCk=(2ijmMpWRvoQrE&vDKmBH^xu`jRZ;Ku>kEdLN}6oUmBo&@ zJf20XhO(iZHbOXHv46n+RFk2oHI7d7?vp(ZTuExA-QIDrkfzE*gGAY;5+z2x()&(b zIQ)?)UTv=*S;ZHXIBcA~A1RlWWf|DRO5VWtETJxN&;Ry%A29o@yEJTh>m%hL=nAIV zbdXevVXGyipPRpqc#bl}mwSNK9Q$xtnE|$F*g+2>v>p_6&&zlG2G~ae6KjbML9uX| zDsf6Bem$2$;coZEXkZWWXSn{eXA9CmedOOo2<_*S@pRIIqJplW>+#v8s}oIyn<19n zld(~d`yMB)nwz|&g4FV=n|S79^@S2H_Tf0S(5`a5_#F9zCU>RCSsCB&!!6t}mQwrR z{3)WyD>G(IM};o*bd3f^if9gvTaQ67*xYjN<(hrwh)P08@FV4-{QVt$!&2B5{Wm62 z)d&&{9caliQ-bJ6N5$;o;9V)z{R-v4T(EE&Ac<(xW=qgU164G}3Jj0ZGxQ%SfhQIQ zjH)C|2zQ^`qT${Qy68B(ZbuqIdM>(YjPYVr^(?|^3}c>HY7e!QhSr~Ds#$_t9{EVS z03%GSnpG&=FRSs9{h6N3KNSRh+jjhn!o43Vz})$@tFZ+stGh-sS)tdZRqguge>;0k zcz)+Wm+mFn9sU&kLQwJ3vzu-~&lx78&GGfV3g1e~D96}(e`U>Jb8?lgn7XWqYPNw$ z1b|Gi7Bag36Grbdv|2#?jbHmG8Bb`rTQVMTqSmPwx=vI_b*WZ!Yi2dHDpgT&2B#ud z2Hr_nE7`w?+4d()M67_2tL*f(wKoJ?DvDwII;+ugA(Y?4a`rO8NwN#T7%*!dWb6Zr z5@6Ly?zjmG@?RlQ*$HmsxgA@?tfVulRucUoXbiz|4X1(<`O>SQ-pd6A4~SAN@AM7u zuHrWaV7(pW03^K35N&h3eB4y(Cma69?#F0qh^)8KIs6Qq*093oNfs>YC*n}tYqiQ2 zW=^yLTYZ6~CBSL~umd$f*@XHcqp@UHo5{#gUGJ3YANsaZVV6LWC#Wc;(=1Gt`es;e z^i+}6`JMyRiPTzfu=OfT*J=(fripnUy_H_)a2-WhYO!ItkZza`No_+g+6S{FQ~*q- zo}iOcE70Rwc!U$03P%e)Z0xPLZg&QB*v*R2?GRdcnXwmf%A>e!a!Q?vQi;0@eKc$y zZPSo}#7S^UMIM#!?mXwH8p-jBVC0$pcRnZug=4e2AJN5}mF%r2(USC9PZP$B$K}J% z)c_~((7!MdW`O_c#4{vn1y%QnQx5iLN@$TW**1Z;2E2h43k@c{8oeUPIOVc3_9WPG*3u-*>>w|bR0Sl6A>BGJ&1o4LqkYUuI3hi zS8$%1fp@9cq>pM-1!c@ODtR&H|Fz@1AmLvgp@mBQDWmOp%C)Kr-~2VEVt>;!+3HT> zT+HBkXxz|Bdp3VH4?iK_EMXUJoF?4K@gOZlR}f^_<7G)jG<26)*cTicIvpQpp{DpuWuX@-NtpBbhRr@ZuI!P?W`EB%IUPWMe8F3k1 zu5LrVKtfYveYg%PG6HXIHyr0U;G^L@(fxSW4!2_r{Q4=ELer!#&T}!-hWHyXAp1l| ztVe2Q{Dd6KePe3t?FnlbIHF5b99Hr?N6^Z;1QCvxha`#58nTgxJ>uA+LY-`+1}k|J z%1}5usVMjXtNZ9#!ISdYWba-$B_u3R)Maw0n*cz4$M1qvl##NtS9=iQn|GK?s@aEj zvlE2Yx!R4BvWZok&Dvvy9yL@L=jlE-c~LHI-?$=xCdbf*!|lK}v^XsD;i&NZ^fgc{ z84K_+UQ-VUIhqw5<8Ca9>RlPDUdl29202%~xq`d298xlC=JCZCtHDKf5|~69PHN1s zyBzOJf7gEsVH7`H;?d)|%>SVfBAoslhTi~RHUv>`rN}mH;&(r|gEKOFmNe+>w2%-ig7~ z64{+T*dI$rjM{cj7{42cS|gF4rb~-4&1s9TW#@@KZFcGd*q1I}9>RE&d$p>{>O&kY^CDyI z7YI(LLj@%X)c)2*I!Aeub667MbLbPq?KRZ<>xPxwQC3KG&^_|QA)93G%8&??`xJ%bu>22vIxFX@YBg| zMOZ#5W(7kRlgtW|Dt;l}QlV(C&L(nn%x!HGpDIgo-PinJc?vxPVyrkIEMpKQzCn8x zoF&RzL;KP57`1$*+wch8lm~aogHxSOvNHKltjFYd&c7uI2L22T#R^t1in3gQt&d|_ z2*MIKO_3&$ZWph_8h)(*b%SGYNNj)yBd5)RV^+*}fUW9>90dGt`rb^ri>ad!uPhuz z#Q2|Ja8zQmBJ1kd`-hmeN_{3S?%twtFl#0M2<|K7jdCh~kVE8zfAv-JN7}@YQ8k0&L4$pMG*H4&Vf- zYtof3xeL1JL^pRW-X7$ePHCcmjQQB;&tikk0ff^43+uAcNsjd}5BYumSj17%EBDtqWSaxUc%Kku3=h-rXlJFv(Z#}?*rXi6i0{O{J$Mic}1$J$)=^wU7Q`mu8 zClS08_zMqjz(HsGuh=Uw zk#_he&HeS6nLiL~M%Wl@AJ&b7+odkeS?Kq70UYl(aunyMajd^?)Vs}z^y1Bk1amwT z4^R9(tZh$A;2mCXqw8CRoz9RUc~>XK6$@&8SVX*Y_{@QY?BeZe*_cJ6A*w+jSIa81 zn2dP15Kb@4`3Xe30%-XW@Z=fUW`s~D+hC_nE@FlSoinj?WI3?F-J-BQq`B1s0wT~U zKDJ`_u;ydwHIj2eXsfW+n^i2F&N|T-Nu?m}XU8=&8f>v~de{vR9B1QV(u1ZI zDvGl|P5n6TndNP9iXY1S-Y78WyY|6DE{gtC?u_?BoW2ZQ%*|?F5D(^`?9obycX9JL z^R{xGf={&3QM|T}?lS-%di>SG)GLipKQ1aL!jqYuZr(37Dd*4B!MeDpNfMxv?%5{J z@ZaUidw+W-#_*6(t<8ijo#Kh1@5KhDkm*Xl5D%HutdJOPF~t3S+r)kufb1xXeR1|; z?3_9(G5Cp-OsO|oEXX*=;lA@fN) z!PbL_D3Us1vlA~^xr!4?tN@6%%D@~mLyI)WZfn~^1K}3TK)rNVGA<%T7bcFN^| zOb*Ju<@3@-GOKN-!@&KYbzi@()wOYsbCK&?snABO_Qmm&a@wk}#s?`~$An;QU#Y-m zNlsiVofmFS1QrdGDj$)?mm2Q)y!A;j)$+9A1@S#bFR|O77la;_&GlrI+h~>M6i2bW zAw_a1*%Vo$XZv(f?b?35Ix3v)P8QAzur*SAk~ZCN#7bR6DR#3?i+ zY^}5Ci#)Iob;*`!>wOO=n3ZdPacLMGGB|Un>Fo;R3$E^9wuHk2d=#HUO03Vyh`ve9qBvN4Up>uv#=-Kw!!4-wGJmDIce~hY$k}* z*>^Q*uY$|=0QCb3H3p!>1BPt+8KnbaA>+pvhq6ste4(HSn2)I9ODEh+ zqPW6Ud~l(k;x^ah6ICkd7E^bN%K=F`ZOfAW^VU5xjA`t_d4O(cx12J#HlWHV9*HaV zUuv#n9IaPH=Y)7#i&G{bBKU;}tXLI>k>$8LTU+H|Y!dgDs=^j3B!za+ll&ueqBPQ> zw3w84cF`43K0ei&x?U9CqJ*1-}A64rSo*ywr-{MY%DD0@*~`m+>DR zvkFy$ltr>V!hZr`>E(W&Opxy`l!&+Jt}(>uQFLBgJ#OS)EkUt5-u#vC9fqQ0#FZ{D zA>u>Kh*qBZkZN6H*J7wvL&J|!DM&8tu;lmJcXroBR%TWt=t2pHG9HtI zQEyN@r>i=AB;Z2h&4>8f*zg}b%Dw0|g#Q-l7g2(MZ6LU{;z=KV4ccR0{0meBou@lKmkf+IM7<*gwZ=m@2j z!)#d$1`hCbD`yFpq!aoz6rg6FcC+wYuu9-$yu>7AQkSSEuF;W`yvvPGC?)Ff znSs=e7TF_&&s+^zTkKc<_m`<5EQ9KWecZx{h}$%uK*NK6RJ-m9B})O_sx?_ASUfuT zr-3k*qS;EsnEP@vE~%F{ssiQ?zVq9AnR-2qZ4}8*LTdPp1H3xFoMnVxe?ABA%)ZB9 zI~0u4s)EQ7Ez^RCmH+^U(85`FRfumj#eVA^<_pPls^dpmbNt)QPw(MPr(<#fUu!FR zNmZL<;apLLajKj#4S@xj=?eb_E>t^GjsS#pN(0ZP^R{G07|bujNEomV128xTD#7R- zRDzN(rt}SxhR0a>?P$;$U>914X^IlhCIpISlQERjf+7aPk2?Pp?ZtWuv%pa=&Vy%| zJIIcAZODt~J(OTPY_Js|kn46ATPCeCj12r^5Kl9A>#^kCmT=h#B}fZ0s`^NPySgeH zp5>6=T01AWeIc&0xD&lwATb@xuCc&e7h!9ebMCjwt{ByF=G2Kq7BI0k02eU{Ts1N! zBNc4|$8pIkYE;1H69LEJr*Qjqq7S!DK*M6WMQa`i5Py%x1qmvc`IoSo*C z;GBigr5J9pLWvS2NUAFvubQgq=g*%$cSj1_UX)~z@-NAHezuaWsKo(sKm+Hz;iC=LHjiU(!~-EV5BS$R2yyN`AgwyVa{6hpB-xu;LuG zrp?3`P?wOUHJQ;7jn{~UStA2@0m2--=mjWsVHGf%06t19)%5$Inb+-0cUJ95E%jdY zsY*;ERFXvD0{S2ZyDk(7pm^-NL%3t-Jn*xD4Y))d5ARawiWCZpJ&|d5kk!O5pU$0> zxw{g7M=RvE_0)xRf?D#8M_k=sIaR4hyN^2`_zK`EhBA1T+lzqyNF(}XBeDAN6(Y8u zF+&xb55UO4x&8s&?OmU*i&hDt!~`QO-a|_Pe9_)0n%fJk9EFe6-%+`sSum1$hk;jx ze4LMq*Qhg!D*t~@;828so#{7>8qbS8rQr4*HEJ0B4G32TCU6R-E7opQLPw=AO$^Vk zfTIL-I7o?yjOV#MMZL2GPtcS5xR~1OOK;Yu<|lFVWgPGH_B&_PYuTX3k}Q~;aX)3) z30H7eR)RO65Nc1Swq%gK6$VqiA_)I-wQY*7VGQSIH0Fde9RR5p2A9o3;tmGdhJ>As zi<8JX5tq5T^JN2?K#+0_dJB{;&%WRDuuf|=;1a4a?Yn3O5)fa`m*dK9lXSWSY=0m6 z!>;UGxS{0TC3~p6OiT}C_n0r4yWezVK&g#Jtx5SG?tDo=Sk{0}Vo~6mffPD5k11%a zgC*8SY`~S(?|`7$R%%LI4~-IYn3b~R!(zIt@IUaBw_w7(ez)k(5+9O>d=;rT%5_ZQ zqo`iaq&yXXB@$7zScpxdp|Xns0ykss?@a1hmD_KTi@~o2fly>xmT=4dP|7j3 z_*2~xAMMB*oGK_z#g!h?C@#(wOD(HG1h%Wpkc|lCrCb4Vny@ZkYJ1D!hzcmCN50gZk^cK=D&UPc}y5aDO_tRg<~);q?#E7UBxnK+q(r@X4sXo|W+0$s6Y2)1Aqi5TC5+^~>6`yF&k^0 z{^Jp;+4LVBaAf9P2sw4xcFvFi{>*mfusX{_=1l-`0xYw7nEE3jaM1aFnVaiL0*_k|6g&-oi0VsL@=c<;IEE6JpIos4Dms3jZh(J8Ib~FeH`K&%pBo~Jqz7vKx+ak ztzGOZ3pf%-)TGtKZf$-mFGhn+<{>%fw(1YdY6*)^yE79K3Ke~RcVlR~+V%A*=-^wB zVHZ}@S9DYA@`Z%S{?kjY8CggNRWLbHUPj#u1S2ZffhhD{S|Za#zODAz$Nx51JIF%T1V!ga?kT zm>|rKe_d4NFC}5iSZ{`sMp@k(bUQsOLdrBo_VW>(j9Rbz{R@6<0N1(#P&>@ za-u}eFI=SCqjb}V&~pQaF4JkJWsB4&y|$^VHKu?mL5@^h1SOMM^z|mDK`TyB`V48L z=eSng^7dW_H4Y$~4A1Z%kWisPG3NJK^l43P^3%sH7do~2tku!8?Kd8I#gZJ*YuIKzD;dZ_pWk%@kV81;B_KhhEHeyR=+Y6+mR`s`f!UL8 z70aGV3BettXJ?EO&_@?qB=r?lmbVH z>CNqC65<(lr_d=MWSdguRQwGnnFrwW-Ct9Ttq-V)^aYncY(OuQ z9hk`i56_ThFAUQ>=mefm+uD5*i6TBlaYpO&vinA6qS`v$Yzr25=s~_%)|a)ZFOy7^)Nb35jsuk5Lm3arN3)!P zz1G~D`@|moA{+f^Hq$=Bz+HSf@@oclziK*&%oRNK#T>tWW;`EGz8w{!4nFxcik@fK zO=_xc%xKo{$T}>g#*l-c`$pH5I)Xz*wp6Y2y+2R=hFy z%$h_SNM90A>jDF=i$5`9O647oR+YP-gfi3#sA8DDOjDV+JeKz95>rbU><19ELaRpg z{}~-j@(VzQD#Mefp1uY5;Fh=nudy}E0t4iYd!&AoYhKPsczA#{WXaXGM3SRV&aNAw zN&M>>JHGPOpdDTuq&5hv{Nu8ay!UD`XwkC!rgSt9r7M|M2+>_!2{B6-kBs0%B+YtT z`WeUtM!lK{)m%_q>M|X&4uXYi@t8!R3{_tMcB43Zx}ZWQ+!`b5E>U3_h4k~&*J0Ta zG-G=!MK@P5?H6^3-03!G6gPk&qsXQSciHC9h4e$T(3nKe9#ckWNZWTrT341`V-mrz zCDom5)wOt4rf2VevCj0~x4#?N+$7yG;0(y(0V8p|X85=EGM*m#M3r?Y45_+ z^g}BRxGQH!eR>3jP6kdrg&3L*lxf(CxzXN^=xJ17{I;v(idQ_ADT3F|Wa1?*XW9f4 zx32aRq1%x_xhUb8?W|>&&eOKGEDVJI6kMqmCj+)0Vv?gm$XI%M8=Oxv5CZ!4%c|qh zXr3B}RE3#VExAGzWM|IYLu@C78%4Bibz;}{m-a~Lz?D%P(!n$qh{V}e*t*4$^mH|oh9YqP&L-y4G zKycP#2H(+slIK5>!-kKo+cK(Tz}QRd=Jnq&v+|cfH<{~@>wW2&2kzp)=foD<530@}h(zgS#8dDrH zZRDMI^Ig@Eg5wynRV?Kt9&JW&Y3hX==@rAZL=n;5vV7KwmQA>AGBmS{LRdJi8i)k` zkFAe>9Ys^73y+RMpKUS%X7mEJH;rGJ#V%1a)2GfI}_! zhqVzgsPHMg6|3_xzar0MxWbc-6kvATxq;%+Vtt7@rlg zXWBOxkf%@JVN{xATVu0+ddL(@P$LWpHDA0tFG&RvT z((SQL-9JuZO-df7Bd&8oWEJ;8x>>U6Mp$sKG(HZ0=mJKaeZ(0BeT?0ZWGw!ky%-0y zgcUXJTWH9!EAx+9qa>9JCq96Ne33zJ){7^w7C{HRJ3hIKs@s-Y&+O5igyL}~%nt|S zz0ucg_;jcTNLElg#3MmG8lAfx-BtDrv((q@C?gs*i-FyGA};S3#6YnQk&;H4nFd)& z=H8s=e2c-1QTVr)@guubv1hlFu?vjL+5?#%RDkEtm1D>&IG3n#Fh+7yasUg{K3zP` zY;=`ZjhIn)nJpOX9C@+vKv?_3x~7R=cq$L6qy>7D2IZAp@;?{)`RKR9h_ei?a`}*- z>r_wprBAiMnSv{$?(AlvfC>EaIJy+CP7m-;5jdo0?pt6I*!nX#(v04_?`_H|Ulq@V zj7R-&Asb4i_iFxiKKSqCtK^2*QaCbH7nPl>Yo?*T6o7H`a`&8pF7X$NsOs)8Wt?G# zHTluL68y))fFG1OysqRR3NS$V5VVwg&gR9ksPjL{J|Wu7hx8SBJXL*)+$$)+mN6F& zYY3zH#%nf{pT$Z8k|;%@PmwanI%49hFwOm)Yw7n(gFfsI%!F-sct1Y7R2{Co!N^e^ z2iDiY)P11*H!4Z~@krU%tgGmK-KZD2LK%7t z3lf$NjZdY1APzKDypJd<=)s3!H{B&CpK0Ct^O?|-xu`j|CAk{$22D8@RbsY>Gxxf)8!B>D@ZJM@%DOK<*C`&)t<7Ic(!k#GqMAT-tC zEDBgM9{>z)okb&Hi7|#a(`Ydx19dAVcV$drmj5kW=>zz106lxH_4gr$_l;J%@yv z9T_*c4n|=6wY#L?EYG3T^xzyTs9W~^j-yIiQYm@jvYp7% z4LoS=uf3X+t;Zq$Y_{#4R21_t829iOnvpr_DdvdjDnS!VVMrLpUf(1b1l6 z99_L8ZolPklCJe(;PeI*mZMhxe}W3XkUZ0eUmRBkGMor*D=?ZX5u19-;D0PwdnXPP zX=~g1b3LASV0D!NM4?%p&2&YC-yK-lX$ou(@fsFZZvwH;^a}a77SjG>-?5uLs>1aj zLN1F%ps@|LGahWtIC=1AJ)=QG2~r`{%uY{PKsG6;sM%|xKx!xil|%{v^hZ2j+ffM! z%0bdXC??hw2tuF>vJPg8YgB+nwL|WD zw$IslTBMGzoGFzQZU2ZRaqk`yA!!V<6Py8_UUtf*cehk{_X(hHbyA*`^Q=(!CgD0G zGe_b-8(Db^i`<`NYM~EkBJsbdODmk~^z%UqzW{q1`k8ivhX#HvVl+&`g-$8{I|XZMJ1RP50@TiL=+rKmAf79U{N*2 z%e2rz1k;OiG$>9(_%p}?D9i^gdu^}Ln3;pIT`TLx%2DMt;RWoew5&xTIxA$To<5nL z^P2d2(7Xv(-H?A`ApLQ~T|3LFDm)~`f8q@_`go-w$okjKG?{?eTX|0d!{K+f`SO~< zKerJ{;I_D_U1G+N-&3F@W%otgc-F>VH7E(S|= z?iYY3k|=&;V+sTu zQ{s|l1mJWUC18Kb&(fMnU2!cUfA73r1Lv^o$ktW*xtS}w4BIal2$#|2&_6?P_S|$i zc^(5DZ&5hs~O*+nCU|6^G#V3UkmT0rydoQh?dzwsFmz`Y$VA}V(4#9$6l11bX}!xTTWA0 zd5lDIIxdQP48~f&Zb{R0@$CDHR4TQFM{S30-I5s|xb7OoV36vi2HcWKB$7!al1U_z zNhFd|AtiO(ikoz4K~|COoNtm4WDNFOf)z% z?@$QTbK_P>%8XW`=E_~}zly6Ssn*R6C*%}16(W%0sg8=jx`PEb z4rqmoWVmv@GnTO=>}-RU6PIv2V@TI^dbuvEN~nIxPJRDE6p#LP6eX zw%a134R#Fi28x~yvpOU;CIeumJ|q|KL5d>RQG7tv&<*EpM>Bpz$oyq_IdlQbtmN+U z6p0aDvL4QN3u7I2?jyKzy!{8$WVDYG9*1HKylFE$IH&bAIzwP*q{|NG zv#w)0ZA8xCfJ;r^4~{IzpC(athndH6RR9%`0r*GCq;q)k*{UEMO@9;RI<0iN@Vyac| z-8Co7@O527B`y8semVeE-P58}J)q+o!PbA~wFELD%Ei?iJb&Y0J^%06P8Y|ETQ7>MZ)}xUB82<=PH_xH53{e$8aKPt-PR-I=Go znGCkTuYG3-rN1I+)>BgNthw-xME#&}Fv9tJTE`X)6$ra6h%#tXJaoP{u2!PH5e0@tv+_T|4adQFC+qhR{qhP(NboWjMSc4qiPli>J2WLO6*j zuwQY{Ahy;>M{ekYB@XStvCn0F2f5*dRu56t9&NvaR&Vv3k%by)qWbxAUDtz{o z4Qc3`SkxUK7+C(wETI=bs=CuVS6*RBJ!|^_-g1grENlvCd7ViZSvAz@d#|BRC)kH9 zeO$3iqjOHMmu1FjJej^$Y`hkfIl){CTul*LL{z8Mhxrfd&d6KL&Y0%5 zW@UH(H6k;X6d9>VFB)bSzwJvFk$89IOGgkW-y#Mj+SK)lNArI8GY+yj*x0mbG1FBZqqTNXqjf9jx3)bMFe~h z(pD+Kd_xqs{k#HG+{TC?qd-8Zyhlwp{PMnm$Nr#fT%Ql@Oy`+`o}ygsY*F;Fx-TL6 z%2h&dh>cLofbsNQfGNng=QF53DE+=;jUq>=FI@&)1;9R1r`ohA#Z;_ge4w;d_MISs zFJ|m6Mx$A*-tkYY5($Fqt`CHz8#_L7NHm9Z1@l*O5)*G$9cN2~2}=eMOEWB>>bmB+ ze8_V^CFCWYIx@p^p}~|Q^tA&=!$D5+U7Q#4?5UM%uR-)*^Y(ZBpqM*%AKKBW&3nUu zRXzDCtwpQ!xHm3Fp5za-LRnrIGaXc2UaZm1dfU}kW`%S;xG9pGgy6Tcu3ow<+&#b7 zUa2F7bKlx^=qp=*0_miWqdg9(IU{6h1=rrbnncD?1$KhL_3t)bX3!{*laWm!+|Jtx zwCrYM4`Ghg#X4bWew{s<&m_iQHsZ{+skhp<0f-EvEye;fSQ%>cg#NVgO+c?+nzj5I(1i zWq&O}3EFNksRkN&0=j^j4o{zgento=`vqv6tdhgNv*Rp!TO)& zwtKw0Iv}@~cr+@Pd>LdwR<_|H?3r;|+@Ft&N8(C7H=Wpb5GwQA zEqQrr-O0Fwlr(q^T4Xe6yux2rrH@kAkBj9h+DD(E{QStW2jvdq?t`akr2LXwsIssT zo6um|&^JU{={Eet26e)e!gB9JKAQz_+mq#3`E>@4g?{?2wN3Y}S2~ai%ansJyG-XS zxtjM4JWkKh*m7Sdt#N1sB4>*T7QC1_J&{D&{Z#jJ@Xz6ocSv;ayvwlcnaS25D0v>J ztPz}gUO<8!#62l zs&;ICyT7&4z`_ywrZo~Us2qY9#NR=(Pxfbz4wW>1FA=TUE#^-QS{>-VsOm)gee=Yn zsBP@_{S?jm!c2EG3(SI1W(lTxw_<hl>UO5%42mvt%4AsNRYAPYda| zQ}pmxA9_2bYmN(sYCTEL7$H(#>g_r>1|o*Qy4h{;9im3hSr;rm{($?r9L+Ek6BmbS zDI#4=6wG=`EwZ+)n5lxxO3_^u51PVLg=EM~U#0$|YiehPw8ijNbzy%bZTz1S1Q zS)+v6AmPi=^y|)l6YB18Dj_cuZh)n;v!Y8i;3zL&N`HFr^(Wa@33Yu{6*IQUA*NAq zbEzH(hf|BJ?jyx6HU!RZ$FQ>b?isEcFx{_1Lon%3F=<8xA5Pz1AkMlQi&JaA2(UuR zLBCcr-J$M?y8K0KIzyz+Wkqw12TO&}dll!NaB3^Ofgn%Z%W#2VVE=4HtF-n7=oWqL z@o21L3T?n}>KueHd72e%iQgaf28r@IC11E_LbG{~wijcN(#8Y>MKWj6%qj@HVGGYP z3?F=L8B3+}(~Ii*?~B8BY;XpRcd!0=fsX^yDL=28M7zraF8p>+&|WIgL@-SgrwQ_% z&+#^qCP@QlJX&oe*_F?b_s8=MmW`Zq)emwkCCCbo6ULVKC-{n{eTJw;B0MYjA5wb1 z8hrUi9Qqp)LG_fb+PR$CJP2JH^jDMk{)<@%Cmh)IW#()@Ple!BjB z*EEvaXe2Vdx3GgHRt7AL87-Yh>OG`LLk@S*V5lxQL-cZ7U%DAfj*7^nN>ux+{4QPM zNqIFvgB(fR4oEM>vJFTpn97YGzeGWJjwc&rU2R4ZckYYxV33N`OeZP0TgGZ9Zcnys z?4@KsMnOKTLHmtY>?gTF zO;rgUZ0kdx7oDB-6p$?6$b2Ijmx>>jfoX4r@#WtE4y6_tx7o+)7!^K{1B{jcGZ0Qk zKT7aV1Z5|MYMGJf^UhOv7p7|rgR-YDz zJJsFDZIk8>ds6&@k*`qHZs2=Vz)+?mfd?#ONNCIew=A=mbBbZox!JiTsHndnZjZ7} zfPezqs|7d}SlO5!JlbK*RJy|saSiYeoZ&8dj^iRIwHZ~X>;}59(+ncVb~ZGQEU1(w zZge~f5oA}g{5Opx?`oHaWN>u55ts~m<7?Wx3oard5~9uCtufN)L1z{+E%i@&uGns$>A z1x-qHm2N+*D^tu9GlGCbgJ!og@qbt$MrP(2zeLaLvrMaC?XHjXM?{hBS{)N7fK%RX z;in?~ZD8pJ&;1ZSg6=X_UyjXY)!%Ir!8M}NG35>(3YGOGo%L4y?W~(Dmz%=mxH4>y zqo}N`p>i6((&eYKp{z`H-R_V`brJ}x1E5lFMSWiq0+{qeCUGnX?w&dxT|f}NP~q0o z_M0xpP${Ta2l10{#o~XCp$mW=@!ssE~0Febf8B#TZgd|hw;>|Hdhb+9&9p0(*8wR zaALvoFRXc4B@cXEutOAlq-{_uza8<&;JeXmiKq~$heV}U8(eiQRj~KpZd`*qLqzed zql{c^TjT0xk@JeTbJG+RVKjeR`$?t{KPccb%t)(w0lFHb9aXW({dMcCu2snXjO$kH zq{{TBbfu7cFaLSYGPNHi}-TQtjfRGh$<&wG!}GZ-81{O`wV z4YW*4l(npX|9eBXYE|Sx&TpRB$v=Qds^P_gbMZN$AJ}Ol#yZ{`yBiM~gNt}661fvm z2`EoqlUsm9V}~raVl0j@R=41ZvR;6P3E1&Ma!WhYqp;8ELhgCqkLj9;4EV>@C0>9B z7=$>SUZj>j?>rKh_Q=vjj%9YRTw4D&3mP$&pUiR0^94tBcFis}0Fp^0l1U_zM_!WU zZevNXE=@2x6)$kicwkqb)2Jm`_RJ6p@2fu{hj{F6h94uJU&t6kRn)?>1i15_EFC0C^zcR<0w(f$<;bH3-Lq8j zbSK=);sQQVj%=6B&bfbPc6D~wyXF$BD22_jRlYdr7EDK3xHMq}5ZHk~pdq24o$Y{W zS;K?Qy8E&tY533}@h(=oD2UGUXiAsWCCfq42aM%pl#)$-7yiF6>p-D8z4Lm5Za>co zOoA?kf1>I>RgxPsgN!B`P^YV|qw8->+@}00mC1qqdA?Y>?;&>qE$B&E@`mjs<^pfS z-w)k= z@?}{ra1@t;ZI*4c5l$BVX%XEQ)GR2^`K0-YsVCct@KD>C7v0nQlB#UsdI%W(wGC@* z!qIC@7ZBxI;ZodTCVczT=3`bK#xXN`xQRO z6+#WvCeeV*v)M92T|JE0h?NbbO}Vdzl>_A*gzI*Dd`xMyWuUXo_Yr7 zcBN=n%w?@#=!KT1C@#t1Rv;s+@)OQm#DWQHhDT25EVi4wW>-o*5xN6k=6evfm{D09 z=*5*ae3W^1dY2CZ$~@2X+y4+sZI-X}kzhbz6W#n(ToLP%u8bs+-UXEf_*o}$4{w%y zQ_-`Gf_u!H2DW-Tg;>xWzCdHS#V5DI6hCV!sx0ivg5c#U<4E&W?|b1r0a8Kfnb_;? zjApMxGtr^A8IkTRXhe<%B3F}}#!^~RQ+-eBv3H6kX|nVGUFw&`lhbFZwYYx^A83la2^7t1QeYGYpM=r7Vh6P7<@RC?+2UPA5`xI7)GUf_BRh|MsN92uq}+Ohj#aBt zpzLP6hh3k2(9ToAU^wCG*Pze1E=2N!P|o{xp@;8}S>}?F59C}ipLZkL4(tdppW}%m z7Hx)xHU7McC+#xUWspmic{|SsuvkS_*^r9Mo+6i~n=J#Pyp-Q@C0-F{espx%Rd;(e!7O#Ne9>{pqg{`*ayrqvYLazT)Imokz9es)!&pAB1 zS$qF=LHUhw3ZOGgS9_o?rn-*jCDCNaKwHub0ELoS_iA>gz=RFzER{-qN00Nlr&CF@ zcL+AXRO|CQ(Y@SQ{qqfNnOweaVD)eRZzivyz1+;i=pTJIhtQOl*$BCA4eXtvMWon5 zSxK@P;B;{V6nw+l4%FJ`Tl1sS+HUtyMP>b3S%Z%;6p>ewC}C#kMR>kdG1`VgK#`i$ zN~l!-FO)#@hoEdk{wBx0fDE3`f=hn+j)N^Vv>EsdDGWEa5!Rgdn7bw()STUt&V(Y& z(^u)EyRk?c+cQmnU_u=X6DCofhaBJ52&8gC*8D-fsB03hMx*w^Jnpu=!_^dDv>0`W zO1od(Z7nexXZF*Lb|fR2d$L6UWV&O;*P)**zSg()H+>j%LPSz@<~`lI_4NmUT$_eD zBeK}#|5|5KoN2ks7inZAeEYx+^_T)lL5p<^95>dT6ov4{y_pGm_I@bnd`%x17Pn4s z5AszaXb<>}6r_-gE;?{ui4-{PAWeZDwxKuUWwjeXpb-hTt*Zg>h+^5(Oq6^{JMBDv zirM^-+;7!FN5YfN&S@@h-8L}3>uH}Mb)JrdNIYeMjULqmVF3-L!wIX3;xTti8~cGX zBab93DzL`akfOuYJ{Ho5C$I?SKkVGAH*Lea-OB4Ay4vI8|+b`>MBGQd9q$x_C zV2(CNv?$Ij-KM>My1s!ft@{!$TR(qmxgifpYLHjGVlmZx+A8s(k-*cynJ+D0& z-}&%pJi|q4+h%5Q@l&tbs}MOw^pb9-CqG}{UFIm?tZ}eVd3>I6j<$OK*|3Ep=uRn| zr0kP|YpdWm_KujYcZVM7gKtTG)I7#A|$pta$S&Eo9YVElg44Kk=YCOFVwks7z0I;O4E)1HGWgg0^ zW?i=H&gmcZ#j5Lt#`b5+;JNQiY~Dz;@$UP}M&t4jI$PBD8>qGwu zRQHdF@RZtva0JnU$uj>%UPMRtZ<@_l7E!Wt*35YhRDzQGihoiH=p| zWEwh`RWWP^2ZY`!WPLK}qlsNsUadqLfU#(2vrrKKYscT+dZ_`M*@qzeW^#x>jPycvlhbAJ<`0k+ z9ww%-%qE5>x3=wRKwV(<_Yx&attYEI4shPpZfz7z60J5iwoqVm?%RvybwBZzQF)&rnJmw8tkookBgb-s;Sc0YO)Lhu9K&5U8t>JC1iZE6>PgcleaVhXkkePzKOqUrwMo_dU(osri<3$SUQ3mV^YpT-Vvk_EY~RJ!YX!QCs6CShX zWv8&Es08OYAT&7s10SJ_9x}UT+1Pidqi$Vf@a1FPS*vU)xME3O^|ji5agUkjId#=y`>GATTiLvJuA} z?5L53PGqFJrU5(sD3j;dB_5mwj#fAc49&~Sf~ z?~@w#eUFQ%iJHOxAE&EQFnP#?l{o>u5%jktED`_)i{==m_`F@ZGUK4K$Fx+k8yBhb z(J;>{Ht6Q8&sZlxxT9RyZCC1Y@C~+dkLz=)+4+rA8FMD+3$&-XwqIf75I49(4f6Zd&YwlK^a}G zU56~59Bp{Qc5?A$oPZ-{=oB5Rt! z3NPqnQMM2>`Gu*5%Vi~2S?MTD*+@0haTv+ulTX9KdDB|Kc6@z<5Q+)53C05zGbp}; z{%&39>~GJJcB|ugdu9NB32uIiF4tlO^O-6ypP%>TJ|A?OOz-&dw9Pp4yw~!H82IN* zme6{aX9)@l^daa8j_9NSh>^fDdfcYQRY7ibWZf(Z!~&`p2+X2#lV#MgOD%)b1t>l zW^;S>FCJMwOd-g8_ymvEbnG$3@^>YROtpP3g1c2Zrse(2z-2g^c+eziLH#|NJQ8=p z)LHD&YXFv7StU%<=rV&jILc&kA}+=$PL|)O!e#6ofw(u=s&(?I!5Q{)ejX9nxOPpD znQ`|&DSVLrt$4U-W8Gzjn<=jhqN%IcD#B$RKm4|x4`Pc~ORKj#)`ArC=XX}4Xkv?7 z*O^6uJ>ext6_um`eN*?EC>Vw9uzKY;^Tgq^TC9Hj#MWa^WDggGC4-NL#I@3id2~&o zfqrTf>PE>3-v_@+X&9d`z!$Swxcp)M4ij=bn%2f;rB`$;&Cnc5>Q$PNhQN`FLoQcj)zrJT z7YO5q_qK{DKqQsLu*w2y8oj^RY@Sw3)xduV4ww~WNprh(+xC!nbc@b(6c`OXAfN8= zRqyIuKK}-1(uQ#(G#yr2D(q8i#FVmIl2SmpGGBkVR|f2peUPwLqk(*Sc1Fdq@1I$V zsL_E~OYpe=N{4u@uze0v=PndT@7sZal44Vx;Nec-#lOM43A?F#08PJEtP*Z}IQI9L z^DW}ni=Vmvbu}o3B(v}ioU-j944*t=3N+rb=_vd*zuO5Hl=!;u6PRfALv$8*&nB~b zOi2L&MSYE7avp7OX^j>Lh7XdhJg- ztK;5mp$(>(G_&?UcR)RQQ)S;W_Jcb8w62z~%+6CK{i55tZfE?W%DQgi57G2# zrI_|ivL;;U@4Ri8dBfEE-+ql{K63wM-}qq62#OK)>pMq@N>|OO1GBEs-9+4m@lnpH z$LJoKRD8iD-wbr;&+s4Sc;zAz_gKf*y)Vsv$u@(ivdpCW?cG62a?ao{!V_(t zk1ZfJ6vR9)Xj$)!(0;%FF|1#}hlYm(=w5@kaK`%4gTf^U!v3U7ogxx+=W6x^YcvR< zYIGB6G6k8s-mq)3_!d_E@rY@m3wL89tTlWj#R09t(~uXWEyFxkt>7{xsQz%=CKa!H z2CIB>?xPw!gz`2p{?X0RYhLY4$^P*>!0zEDF?tI&=sD}y+s}9yN5Ol_giywtH)H&N z+GJLOKccT~#ZO@ zdE&v~lewDt4i2pK$r}}bAw*|-n^U!xPnK?I>Dky|!L}uPXWgy?5l+;3UBhX*Pq7_3 zRJ-jRon~5;rUPRC(e8a?XI=nv*72K0qb<%SAAXU-9AxK$a>)%G4%lxkh80}8nH$xT zc02hz$2Mu^;?dR_5uLCt4@vh zMaVyacaIpvIe=~X_$7A49-F7uq=>`B(ZwABa|;teLTgS4WOukea9Lyh z(rxUQjA?E*<69G@tZ#4y2|T<+(?23=ZCe_LGD>y}OHHr3HIH41PkzC~h3NgWw{tF&O68?){q^JX1< z1_C`7|F&*es44wFkucQ-@b+uo3|F*o-iKa}s9I)r1z&|wtK9*-zZ>E1$Agt>d28HxC+cGT@VPi#= z3%6d$kX}~alk(0Bm&n+Cgu(h7jy>jhm1LxwpPA?#04O?fqjE!N%4~P zoN~oXGu$ybMFJ7XD2}m)1e_3n57qRg^n|cAB_u?eNk+0|OQD0+TWi~85e9E`Lxhcl zTYe=?m}u$D3+s2+0sB4R_MQ;yU(PBkFvhodmB=({qW^AjqQx}oz6;i?_1oeHEQ{bX ze8!SX=pfi5h!L6C5HZE7`{fhwGUx%yOBG*jl~jn=A(^qVvJWC!03g`t1N>vw!-YS{ zlwzhJqxSZWE43M5&BEDIzXATBjP5&&>HRyF{29OeH$4J#%ukSi9niGCsXZFq$)G#p z;UU@kY9(R`l{L_)8x)JkWI%+dFr(=pY15`jo4(TLdu@&GLf5pA#f^gR#}QapuW6|{91gO20*d2oJerLwQ`~v zqVmNM2l5}3v!W>2eu)*_ZHMypA|F==Uc`gytL?ZyQEiL{ElN9Td&O0(K=6MLat5}6 zX;fey$ymfNma>edFQGF}5kgD)MLo2k-qa>E#jx1SN zLNda}7A0q$vQI}f*KLv7>bXPHP%kNhNFWgzz|V;Ke>heoxBM>r75Vkarh+(LHZ1!A zeMaT+1w?tX-(85=`@3U0&D!CkQL@SaR2`tJxQ2U z#&nK4a-@cFhCRtAF%C_am-LzJt17*8V7p#lz8Rm3^waMkx>g005*# zPcO*@5N(!VB5NEGlAU^2;OhR^Za4?c>1B-WsksvKkGNJdiM@ab&UH9xszW5i-pzAq ztxY04FT?Yk)2E|;H0Lp}bTs$-jvEJgNSk<$7klY%7$(R=JV~|2vm3s}QtfP0yWG*Pa-l{?cx>Fl_jsBh4C2ZGXWWZ{@yXS4IQ=Qit!aEwyg zDf;^E2}K>5E(kmK{Ab7Omt6-|CFobXuCJ~9_T?G-)0zL}>E1`3{CZ7q ztEH2_O^kob3BN60eyeZk4Ebk=>bu9@udRT8%j##hu+O&cXE))OJ>LiVSM7z8Vnc*XgdZgUBk+$dw1l6W<#7qnqu8?Vsa_1#SU(-3=FudW`)6 z2~Ja~I9DCdtvA(D%qnSPnP`LWgB5D(_nM4+GEr78vU!CR@!0Jwvtv>35#*D_H;KaH zHRIqWeO(BR`x^43zD-C3Q)K09X3>i2E|6^4f<)*$$Q#J)^a~%1iy5s50!cK+QOe?H z0%b(=M>`(tumFA%=FQws-OT$0PIA~%e!_l{{tGnS+&MUOY+PB!j zV>etBC?PzMqr!#ygz0?s1k6D(cx4-kFo}0uvs?yc7iQebp9RQbMJpFw2c_%#(s~xp zh2X{_4964n4(p@NU!VFHgv4Y}nKz54)=@17pc3=_>K~ zoJUa-;qDsctpFutm8X`f;j;;+65G*AR`Bkle-DE{5zNE1FuW-G_o{dnKxKZs;*b{! zT<=$lJa6^63<5*L0Z}-Z+no*&90H2EWS?JrvB2Yq?%VC$RZK7_S+xmP`#ROU5KvGS_qc!;pONw+%5%7qt$XJfWsjikkrUqS5$ik zrOl}fmHaU|BSdvNa~A1?=03;1fkl9K=g$}!P7->*PTFi!SeIrmX>8nz@jFs3 zbP-TaYf?VWb=o2CLdqd$q^BC$t|@B(t*Xrw3i%|tI7&TvO9i;?rL&CYX-iHz>Q$|2 zY=-yL9$nJPh>Ow4Dx$GO$-s0B7|o###SLA7yd-=8>O#YK&%@o?rN)Ac3?ddDX+1Tk z_Gl#|inrhsf@qVK10e?(ZAxokGn6VDCk{LK z31KQdrlKi!QQJGPf4Cxek^P)e8N0=;`X<5-Hp@xvtw@VTeZA~lt+$QJDnDc`A9zzy zope$F`PUM>%_Y%V!NgC*+0ZJSc?9b>LM3!@!q5jz^0sDzXLntla2gfJqp~A)2r|MA zdb?gzUdv$UT3@xOddQC5RdTIQo|YiDAI+7&2>Y;dZ&gWwvR>yU9*l^d$ziT573}uDSJR>j{g7nx!uSW<@S;Rem%#+Dk@z znyu$ekFb>TGEi?Z?GVit8`=slF`I2%84_LKMUg&a=Fi(P77e9>thv9<_Q07i&nBpw z9ljC$JU%AU%6;S$72rXdyZK`rSJRV2^E_7|a z0hYFJDnQJK6U$Lz%cNsh^ZD&DnyigbRIoc%s)F~y?aD=4OAk>+P3eQ&2^Hv5;EPZ! zYFjDeVBSo=1GVVR-s{ZsAj`i$<|U}YIatQYV;!yCM_HNTa90X#y(IpD_k<;YK@u(p z^V7F-npp>VrmT*)exnDPTZFY&99MFyqQ zT~e!;U8R>!qA2$PZZsc9(OKIG&a8S+NQ9jR6J~xU>kQ|jJFG%gf${uqEooQ2GbIGs z7V0QwrEcA&h~qeYGCuz-RZqsg*G1z1zf$&B3N-#p$%zWBf-(Su zcgKERtQT=~rNK2CcEE$(@$xD2SaJ^{g+90K13%;M=hk822?)C5ew3`12Tg7o`OV0m zZD1q{D*2E7_srb%_NJ)*{Ze~1?fkcK31ru69)+qcE&K1;?Wv^n%oBLi$Pg5wtLk$V zEL5?|8q=OO+S6Y>l2P-Clu)eV)>*7R6{uguN1LnC;9zD%x9$(1+Lu1yh6!LIjT9@F zH6OwRqok!Xnd4ATC-?MJ7z!P#@~A>(@~|6qb()Ja{!)i_oHbr6grQ`oWP^aiG8x!8 z-GbfaF%vLE+cog5hMcO2_xTR3pw)qh(;;f7@&+7(UtEdNS7R!fx$as_XQ-0^MMaWz z;O*KmoilP$+o2z8sQa5nu!8qnCoPhd2H9fJ=Pxn5i1-aJ$ z$Q>js%0gDd2QkP;w|q-4yE;Z(MKOBr3uQFWM+l#{Yn!qwzKS-IbTT*CllLw(AtD>h zdZK(2dis!2khR(mFTSg{^r=4@GsXHHv>iYgJx-T5f5Y^%N7b28Av9O*Ul0je;C8hV zA`jpUk+0b3yUH=)2VDp7#fF~Y>q$4J82oBlc*DD!0^#gyA55YsXkIU3#VRA?-@vev z%7_E+#BHFlvgR#h)1sRx5B29mw=~u~<{t{66=5+Osk%>=!f#bxLeYKc`tEEaowOXW z&+za9DIy`mqTk-+G;>jihD7xMDp+Vuc9L5upvU|DLKn%m(Z-V~o01m0$hP`X&~Id= zaF^b0nRi!D+mFBcBo1)@@##83B-*jChy&e^wXClunKAWN9hWYB$`GJyM9CA68!kPr z2D$!WfJ789l)=@e$W;E8JlU&?@+G>%4xV~v-zRBGHeEr`)T6prhmJRP`@S1*c!BE0 zQu1e`{X?V>&c;Dj^7l*se6PzNyCJ%&=Mj5P!iq_|CI2uqc~Jo*1DI zP<|Rksw3{JAB32r8vl{#YzfRX_te`>9&FePW(io4l|%S#Kp2OGus+X$E21|LXg3(LNMrnTa?9q`pBC) zMcL<50EPeK@ubu)Vwg)z^Lzrp?hd)_58wkksx|pn*%)YD)BFghOfY1gWB=-+jXa%jR*pAe;@(Cruy~cTtQYC%fuw}?H4Kr>=18BjuPrkNx>jgFuO zk4$()HBOC2rhB{%T2u=X&q++-c&s zMFW_|dl$P2L1fe=C5^JIxf?3xGin8;RA1-2wg==RP8KT{53RiC*)*_-r8cLsoG9{J zwej3TTQf&Obv=}yzCu^7d=!a0>R|qi!AQGGw~KxCKm(HPaLWHG_9$Z@&7Ej&!N*)eWaCr zAJ;__9-bpw$6P}nbdk~2+ZqXW$o?hb2E|{do&n)za#b|U zhuL*(#xy;veJVOYdq$eXzo%$0&3VC6w}y*O&4EqrA~W6Sd<&iPZKrjA>{`>XT{{q> zxs(Idi=RB9mBqCB)hOjw-HMeT3px&01jeg77v=7s6wQiXlgds4fTMX!4meLI2__o7 z?qw8jO%`X3mM!GGr(+$%Ud!5YLsXx}5M$3Lx%ELo)4AYyzmpu_kVc)IKkwX~+DXNa z&k)5##A%{b#uk3+6n>F@S7*ADDD6l!3TDVxphSd|@vXURn@V z>4u#v0M0a$wkzfFA@-#{n(MEfUUTLuG6AZ!`7BP*_m59S}^vgn{3tZw_}{B1!j;0f=*TA!XDd5OlHqu9_FH3hO90g8-U; z_mIYT)Pj~tO@oGdm}kMJ6rzwj6@>I71a&K@w_@^m->2(89T8vzVZ+W^ihFo0*tA89 z^&Y$370@sKjYekP;XdMTkt|gb-WkDCNFf9>S56o0N<1I)GpoezG^xbu<$XHvIW;!x zl+i&!ls)2yQZl0&t_V#8kQLq1xqx^mWxW_8zHFB!KJgZG#9LZjW zChGkt;nS@fSehA4RE29RxQS>uefAhM(&?V?R0bh`hdQ0pRTPhQEz9DewiPZu{3IHxP?#Abs`J zpJ^BnK=s`~J_i?W5+HF&&8o&Lo%d{5PN#rjJg@b&c{MwZ7%1o=EA}!(0^hjxVW7r2 zws0q31iidBOpjbbBAOWoY{)O}p2+B0Ir4S_>k0?i!NOf&R*<|%T&Z55Swr4Fv+El6SStfwgnCchT4zg2neI$?XQgLp*4j|n zUF3>9xHD#4Ue%syq`$y#klivuMOW_ba)dn73BM&Xq>r*E)Fd@rS3#v%(p6&GHD2ISZhG;75bF-Rc3Q36lF zb&%TtAx9#?YmBpUaO20^0T^w<@&Du%UC(WgWZX_k?1l}4{}Z!%ZGEcm#mzMmUTEv} zrNd|pY!(+C!ThyK$ihO0mw0a%+0giKuFN^l2?R>y6PrC)%C;pu??WV?y@}SGsw~K_ za}}3H@mY2LjtyZ4(TI3oN&CB~^~8Kp|M+o?V~ok9k|sDoI&CusR?7up9KGUCgq*|P zF4=+OO$=spCWtj8Z;5gxo$X(iH6{L%+!Pt7hrG zDsy!qcHmf?+3JH9W~6Nn;R|o!MNBp^QH!WnBgmy}p^HQSJS&HR_%ar(r2=4=Utp4Z zrbD= z?+cCP;T#6FPI03Y?ADVutgmFeGYpfQkjFwsi;zPnzzUvznCA`VL&BS6OVkV3D1N$) zkeP_U8|^Za)b$=jP{uJ}m_dC&aw6jjsT4m*+b!6IWOMfDD7+Mx4Nn_hB;#47F8%%! zO6V@kd%8Hek-`BS{x8GfI$4C5Rxvt*FGHC3ATIknC#`S!MLPU$$mRAX_1?me5YDdb&M0ShxRR(AdwF@%ZX;kz2M&Npfxj^>t{J%b zT}>N0eK-LCUVAG_Kr&{z-69RNX4q_gL#UJAY^~e1=${~{&eTXyirC=I^MWVKaddb5 z>YxI;X=D###`=m$MIK$QdC$sKen{v)5!G1ckzJMR6IdX~rgh;) zQ)H+?Ei^K$YqT5mqJ*7HN(A^1$XK_-)d%s^Up4G_qAosytk2~Tu1+9@skr^crg9cH z5QJsTMC1c6B5o@dC>`5FeQ(a++)SSFPL85X_4-j>=e{3x6RIPBQ528Sx}l?dw&gLx z=SQ_wyMkmEkY2f#zDlntor#$yd;P!3wa_Zoi{M1ZaWxlOoe0I8vv>5>Q?riGI+c0{ zyG zT>H0?lAJ_%d5$g=Nm=IdSB_Z@_9B1|m(Gn#!MM7TQs3YaC`syuOy-@n3d&(_Zd%O;M88gsG}|G8nT$6# zLyzKw^=8b$*elBOj%s?IHw`?1ox!0xs-bL!hvBXfVi<87OYQ8Sh<=L6}%}bQB=r-v0K!gn*G>B*wzgBN5kF zV@)|V+sNOAOQ4LI1AU-{nSz$GJ#o)Bjq%of6|U%ZW8|z(b4pg96Cs&1$jb(@hu3K} zm-s@xf(t24D{1C-rpfJ=kcbTkiH|b2nf#y6U@$lQ&8AqlZ}u_>mk;2nBD5Wx z@XKbwm%qJb7lFoFzt1Dhwe(DU%t82aoM_hC0qo|6A|zZ?;#L>C8m48AZpjn`6&D)4 zpEUz?M6wJqj}|hq2Xi-Y-*jsYOZM)*Cwx%VXffdJbXys>x?{Zvd97RdtLgj-y38Lf zx;J+cqfXqW8R?Y|Xg}KAcBY1j_au=Hb-UUq7-n0Y|4=x+*bL0pq|c-8Nzt?=+}(7b z3P0^rvnLqXg2^p9^4_3RO)AT-vR3_v%u=SynGCnL6!`uQabqR=J<7#C-ib{ocd|G| zZtIXy!ooRKuAyY|ltRwMTN1daVg!5|RKs?6VdOa%jlo}soMkQ=wpc2@!F>K;x_KAW zCG`!wNi+O$BUGs0SqiD?eb+%?dGnmexC}zM?;xGw9*fe_JWXZ1jYl?id>M3J z1rxf54VFPI83OXNlA!EjCv#ZV&u&yeqV0m5aFa?>5tb#Fq*dq0`lY5fk0%esSbAMz zo$P`S9jyZ<%7`PM`UeVFsbYr;rUx;?TDfnLGvR@GwY}696ZJ~x8AGlIl zSmQoHY0ATbG&mog(2uaN0&;`Azt@RDR`X@o*rIaxca3=g0IzO~pg}W7S5|X|2SX~x zoFb4jqmA!p3;`8>8EV|H%!UO5Fbw#EAYK{Q-x){>!aYp!z$cbu&!^8dl1!{m{V*9U z&A+=aG%LmWPHwh@QzEMvL{vAv3Ae!^4?yr%PN^A~yS>qWD2aHOhIVvaZE*GaN+0E< zcFy&o;TrQ4dVdaKhDR?+!FD8;fYgjbSW|dJO&Hr{gfihW}3zg`aw8Y_aj-uMS;vLc!NAX-0MbOqD3lA$d7>4;wU5OzZg*xYK7W z$U8dDB)q@$dB2AG zB3kaohCa*i>_q}XGU2KJa%7RqRgnLb8eHTUhdmxH=uWMOzPJ(#_m?^f!0BD^wAP+{ zkk~{-s^8&3s~v0KP@FqB&^PhKPjCcqw3<9W5K<3a5vRzuV38pJ1KM#t8pL1!z#uWS zJ!K(`hTAvR8gPPLvrOLizSAlN8QiHVTt8|+5+0{47LA>yEBU$iNj^+6-UuxFo zb)jP9sw4&deZBvZijqRjm?9K!00MYewy!o8IHmUVJVos@g?-!ih0z1dJYs5=pq6an zVY!#0N*8!li?P1kLUGNvAVIW3`vAqgw)BRD04V|nzX#iR@kKW{+0S`R5A&-iY!5W7 z7}WpuB97r5wvH`n{PTwom}q2(tLaA)iQtE=F?!=eUAI|NP>vz-jBRpo^C}3L?xYdTlmkLBK<&hmg>uslw4&NEBAeoS?)N4x@Svb<5*SAXVt_}l~&&bxL>-9DQdouD+qxfD{*gBUfpOvDs1 zh=V@U`|OINvZZO{8%$tS+Ot2B^X}1i67eB@y=M8eO-~TBfSoQG=Tvy{@E!xyDn55v zypWj-#2{WFv41UCAk#;0-}B}00-+q06f7Ydx4w^@MVCFBzY`BP>DM2=OT@J7e-!=3 z1N_Y*QQT_vS1Y3GQr%$SGZoHO>mCs{@Z zQd3!F`K8b=b${IonMV=fSzBa%OKONQj4%}!H-g$g?E(yS)1 zJ{#kYJ1A0OMdEUK_}k;`j(bd2jcp&#CR{zh%w5ND&@%=ARds;e)?HxGjjmw#=IC;2^YMH^R)H>Oy*0-)Ns=0o$gjpG9RFIlNPxHc{mc+K z`Ki|fd$FC+a%N2v?93t%{K~g({Nlr7&66dOERu&&yfPvW=_pJzBtTdl*O%=&()dANy1p_s5NR~+6=Q~<}{*Ypz*cCDVth~$q-Hn5RJ zH?0b#p(MI-PCw$#gaRdvtVVb*N`$c3I zt3bOrOFgn6BWxcmz*`)8C}~TBjxAbzu&a!pvZrRDIW+=K8J3=}Wpf<$8U|t7(Jh6j z=G%Hp{H!sWOG0RQOvB&>Sa02~F5kgqC%+B%+k_yQ>3X6d|4Y*VmT8a%A4PCyPRwV} zGb~t=socQ%WI2SX_BX$bPgypBPFQ-ZB8fSb8xN|-+vi+xtyLQaJ^)uiE&$(u@D#f| z2fMr4=O*pyW8bA9`6m!O=W%SP{jw|;v6T=C;2(#_WO2-*<5{@&OEXY! z8*&ri__cubTwWJlNkgaPyC!!$&jmh|pMU|2hVm0@Gm;1SH9QBA-7nHV+Q1+jkC%>_ zDF%{M3)XB63d`3*#77C^u~G@~4W4UoWSF$G3^M9|JV6fw`l+{SJ%&&eC@`EN zG}sNQmqPJT!N)Ai67Criew7GHx6S(`f@QokcSqk5Qaf;?0mW;4e~eL%8Kx!0R%TG@ zFy#D2WZfFJLR)YIFRx9&7gu$aNmpjA4;^s-pUlSh;^uZ9VZ{WqPID_l(SCL^nhOw# zsptZvm%sJ}#B)lh8$@S`>otge9M%1S`+1I?j+SA+ewCEB9c-QU-!v=B22b*XU{ILG z^B=`M`M=Hww7#ZM4;WXqV+auyo5KPL%$P|3fhYUVV9-}OWk!vlId#)iEz!dwy}p{Z=OPY~#AYX+r|%|MzjK1)>_El~bY&gsLAW z*rOu5jr7-d9a;{==IbYbvJh|_Z!C-4c6w={&ebub{IvDd=wLG-qowz z&I@b*yh%75u`(J;BNI{sX76wMWaWQH;Is9bpK4IQ&~Vg11JANyU-c`4+riHw}K zw%`?2^G~cT`Oc|RO+UavBcSJDfJ)AJowb7BanUnatMa__yB`5M#~aq#hEP$h)>*Vs8?lYtPigdz z;3%!k+BmHEaVI?ra5bC}(8ytnPsn!|i#G8%;$zFM6Q@%(SmYS884sB`y(HlAZpB*( zxwCUg+s*&PzW?X!4?xtJ=U)F<)M-ed0z~K0(e{0wel0b?tb{vXwyayl99V{e@0OD6 zHeBos`r>!~>!#Zy@a$}wWKKoSyQ_Gz%GiF?52iNEo2NujHykB0EH}+JMCxgkGl}F% z@T-{omiJYm5#%Om8LOXT*8WGa0eELssUm!dGwNrNAxb}8NF0xZ>3_<5{(>3^N-p`A zLDsQtZG7vj>(-!?HsS%rKAj(cFcL~Ucg@~%9F_oUXD*P{ZzbKl;p2yMkl#%|7xdY1 z64l)>NFoU(_d4o`Rzs~M_{AM0*1Jv9DJfFN5f)oRkq+!&@>t;vybx)N_t)=^*wLbP z;(F|(=q*fjx~ZW&ohfDnSt*7E=(V0e>AcWiLe{6Tn3TQmam8^!I!Y6zWv{J5bK>y| z8H+G0KI*(^15P-{F~1pb7q)}cWbv`rE9Phtr*!*5idN|K=XWgIW=Z)p0 z@VuGR2KV7ZZ*?)IW8B63W@Io4&;w!>Q2{8Yn!sdy81q@HUkt|KJ%97GyOGoCOA$KF z*pr%!A%MEuSQ#TF&{Cw#cM$0fH^i4>VQo>tf~gaKt8c~2qmuCa8mbt~Ra{z7z6bj6 z&GauWHT6tgqLeT>g#Q6F$wJ<%#9$m`m*Q2%JI`2I;sXF)F7F-H(uN>V>B zYFp)EsPS4hDe81*?;t7EqRh$S`dD)OUco(HE1!&p7xhYzF5&kRSG{|?M$Ng>^E4h9 zin8+n5Yi*nyM7Nl{!^>1**SAq*rxNk^%w=_{JC@XA8my2?!_j(`0ibdv8z4@J&ZwF zh{Dvh_0rPYUi4$0ivpW3CYVsFNO^+Tix75IE(V_Xs@uQXnlX5g7RAfHf2@eCNaXaD zv|5O*SJ}WVS*Mxu>(d_#CG$%wtfWA5CgfDnTXBLmKAWid zXZRM>w!u4lj>_T=4DKiq_F|a}tqDSI1HMmtq$xT#M5EC!o|f~DXn_S;VpHkECmw4F zF>W=N7rtJA^ADIs$R92#8c%~^hcm<&GPZ4XLt|t67tQuJ57RV^oz!1 zy479*OgYU^(i@?DpmaSvk4-WIhUbHav_Sv=(^T|c+}zdI@y%` zR-^*7zQb1@JU$h+mbJoq$XrheuVVh@p|;)B?@>;u&n)v`w`vOMN-Xkods2$p=F$K{ z+cVBgWJ^WwL)F~WN?^Z8hj`#?L#r1lUKjypT2k@iO@`xpc_qS`E4kS)p6KFNNcu;* zx2?(l(@hnNmIwplvx8u|{s~!K-USD{wkMa}i_kR&dbLJGb}RVrJKr>fk#~(((_nIm z@zmpKM4pPJLYqm@V6`x>^k*S-$|a9dJ;&<)JjE2?Ia&AUX5k&Zy9EQmcLqEdva?ia zsPDtO>-BPg5Un;MOR(GmTk%qg#^Kj1q)vbjq)~Wt7aTTD>$!nh}%qv z0?T0NS#{P;gZ;F9&-biucPXZ_eZ;b@KSE&Rx1?icWoV$cLF&V(%PnP6Oae9*Y)FIx zMMv5$;qoHxdM#)b z<$RN8n`Lx5hr>78sDoxbu^f4qqoHQ{?s#{kt~s^K#7eRpCf?7Puuz+~4Yb8>WG5z8 zj)Qfo2XA0a_iaV@ZJIe0p?N|?Ef;Fx+ejqibhg_bwuB6`r+yagjuku_(Sd7dj@#Z4 z(w6(|lmYq^CG-*5*e%kEI^SNuor^~hRb=yUZT}~+?mTTF83;?xb1cjWUAP=nh*UtEaS(<(=oBN z=3f^LE%l&`u`wkQR@5(_{>VGT@8%jl&NWL#KRgn#%ZdD4si ziSZ`tZ!UhYSH6pCar(YB9%|=Fu&UN-qsnaA_f9B)8uS(0J*wYvsl~Cf8!W}f*q_U5 zl*V6&O0eMarH8FnUv0jD#U{{gIxID@N$Cg}scccECGcwU0;(8gH7GlZm&>`1%?6!{ z)h9pZfosFbv(T-xvCNW>uq|zK#of{7Dt$mG^rWej^#_21`<7A-EV~g_KITMA#901R zcB<1yH+Q<|1|G!xm78)t@?3c?oYvHLV)=YeMwkcx5ZuJ_4ly8fnQZ#Wuh34Z^l9~z z$lH97^58C!DluAT$|LY9QQlXNeuV;a2>iQ?^RzR43Pf?b4CdRJ>_R$~#48=%Zb8;R zW#Wk?yK6uVr$LClq+&vm>6Fv6@)!Cx$QuItW(7=OVkF$}fzlFWbXq05d~{m^8cz$L zHWLaX7pAGUlg3}Ct5EYmsKZhi6_GGZKI4`OZ?gu{MnT_r7Yh;E<|OngI^Gxi>+NDO zgCUk$Fh&v_dl;?sk?n4L7%~@$UW|)<&G9|l6*ML>nh?hcufG<1S7|1YrQ`#08TGI* zl+`8pvG_Q;91K|edB2h$^b2?<+puCy8*QjLXt4yCa$XX#{hF&*bYnTw0ltn`u@E;pfP}q&BTD zu>@M2;xThUZQ0!td>p=pN2TrXOqr{+i$=$N6dFCwU2qUMwX)od)5)bh8Wx)c6V0^@rts`@NE0~v02i@MUAmKwpMn`72JE`wdf#Fj#?AstA1F%8f zUmXFBgo;sEu{YX57R;lM;`v7=rqb^rsZ(ynNg4*9A2wttZA5xo1@D zIH>)@H_euM7N<{fQzuviPQONlUqnEqXJ~Qx9$J0^#y1762<;6^U}99_+sjK%AQRbk zliY#&v@!($I;pguXr!17mQFyb`O;)-1}FlaEEt`c!*{y?UDby@#wA7Tzrcc9O@!T- ze&P=q0l0-AY|=u(VodjxYcYEQfhZklI*ghhy8jM44ggqH6CAHP1`DFFb-R5nw;iR= zAT1MWcPE^qRKa`inBsP0Or0}0GTQ23H4$|B7u(aY)%|!GC}s(0CoUu+N^x?VTk9cl z+@*tOyONU`1NV4?&4ibRKB{Gz~{gIgQ2$+RvoB{NQc&_||6# zXGQ$m2)9dcoD5h-5N;MxR=YoZdIy2dOT@Q%0WEibQ)|&S(u%)BIKUc%zlm5F$(hbV zN~%bfQbb*StY=v7F2Z{&6p5Svq8&}Jr|hC>ep)9+Mp8gU50dHGi&WkpmHI&o-xcJH z{K`YHJ46H(Z8`m#%r*Q?*N1(|OuhBzI8-X2k^El(azKs0iS6lGfrDvYggLJeWA39W zfW8gbo$b$F0T3p|v)$8$rKl7hNUUd!HhIZs9X)C8QmS1)7a?vwt1J#Dc=>w6SC)vy zWz(2SU}8=9`V>H1gA5b`|ACGbQwiwGHbZYyL5KLTyTPvsrR?Pi{BLlDKVR=A4W6t< zr_Q}6aL>eX1G%(9470SE=GJH3urv)6`J&UnH}U`6a1Dgx#Lj z54gk|(8_RhY&6lqu~=>1HRDVgF1nH`RkpykNwqA+xmcM4-xre2g2Uw)ba2t=&^oZQ zYMxP8V_I<`ohvntd}On!Wz*3L`qjj;eq(v02ne3o95;+ab@(=tTcH`376X@1@7^d^V05pR8Fh8Z<#*B9lWn!FT1?Ua&$tH9Jr6v*{!Qfv1XBS&J}N|CBvTI+oXZ+Hh1nT zAXp);dB6I|BG3vw-+PhORhY{{bXz&PL_h8l)E-IZsC@6w6*N7OAiLta*lGSDz)x<_ zvx7`N2;=#O5qe)Wc1VvHowLb?bv*rUd2{@yguP%N7MwcOhDJ_}n=h}%P3+djwc6YO z>PkNtOQl%liBXDKD?oBT)-U2Xu4707xI`^0c07d{0wNZw%s^XewQ`8O#NFZH3=s?= zd00C}e5ymgG-jeh(wC>Hl~J6IWEvODW_KL02v7>u4-tX44Lxtr_X*`RvQ)6O%U9aD z_=9~Kvsb?BLsxG3pmev*&U2O1wfZ`Y_UpMGF(7l3&Lvs~3$Q~Tnwob4z z;M044z30b+6V`X=u!A1G9TgYAJEWkF2xzXWl0c}S*H$ZK_;?U8kTPR2pg?|!L?Wxb zMZ!2~*w0;Z>N)6eO_CP65^nrP*OLU)s+;?Bny^`|W2)+GuSr-o>!jdVq1+aW!I~W(tdP=*6{(*IxNj9GCqnh- z&y}kXe1u6$l4P+i;J4N^vT59yh)m9b^|yYCT3}A)KbHQr=(RWGK? zYh9g!+W;XowEr8eGEJragn@Z9DtEz=w?V&m1`Nea5&-^XomWU(00m2RBn4w}{H!v1 zGnhAqDD(s%!y5-M%4uAk$#~4VdLg8bA?Gfp?nFJ0(e_Qc24Yn1(9Tbd2>yFdzY%78 zw_I~cpqoGvic(sIqpt_eM`+NxB8jWfzE`>A1}~c^-s^aY{AXPTb0IvYOpN~p0At+` z(0m$L_^kZYvL{J@K|1-$!#eG<#L&Zk+G7VuRA9n43%K&Gn&F2Zq$f>^zRN8~#<~%4 z_xx2oc(s#ha4E>uP?TP3--dlC4S;jnqc+`Lxx|!@LTm&g zE#8wJDd$_3jKx3{%(DZ}o?-p(9%{)>rj|38n7<=|cI!hOJgOZb9WRcdb$p?XfEosO zWH&d68@csZkeFlgypl>P>?9KzEFC)2jC55G1ar0D-%%73vr$!=u-ClOdR0ZlSV(VG z7|osBBK>x~B~(`Dq-$>3@&od+l3nimnqTT;;k_B4@jD&Dy z;44Qx+p$kIYvMf2s1e{J{l3@WF%>IBCX9P)hzuw76_1c(T|Js82HAK=`iPsjI`>&8c>GF!p{NMZ?JaDbd+y~*6t-5&?o{_3cc-`p73o@{zep*EaEDCr zf?+c5IxKX2N66p!?YX|N=K86Kv_pgDP6iv8QB3MwC{N`lMhI>`1l>z1x-ILU9^21Xm?Il&?syfiaVjUfbqG|)=hxT<#Q3bj(hpUe7|s1AV77cS^+kCai6^5K zRCVeYL6{m{5KjsyaZ@_-JAtTdG)r!c)^5p7I`{^S;36P_kvmVL>rVAymDvJdJx*!7$I^SLK@lZLMBG8E*RS!^(`;RC2HnoCv61#OK^&=)YN77S+l-)FXGRAi%eA20g69O*uwag_aH{p5EUz; z?r^wVis(sG#mHtsk6>bE3?VxkXK8EMbyV)0y6E;0OSjxFEGVc;-`Y*20QV3l265V# z6DJ6nxjiOG5xYJ3T)%K76BDSHrsI(HS$h%P;irq%jL0Pm4pYmNclzkRRn3>l zK_|)D|7X>%eEPzC{)02~zkc1`pFd2mldN~iebEoY)_6UuKM%P+?rt9r_4|5$OjUG}r3sKYn)a)wRE?QolcKe?FJzpksry+4k4A z7OLsH)i=`7166JMBLz*1YfH`cY8sJ_$lbQko46i)r#kB{heL)T5Y1vQF?}J8alFty zL=MIts_6`;uMQ&BoemPIE4|x~lQ2E)0B|=3AU6!sNgzg<3l0-1WoYU4eE)C#IUT)C z?eUnOxo79ShJ8mm@z4g#^o8Yncgr}5wv}%NzU-q1`_F6nI0Z4HZ7K58kZdQLHSnle zU9U7wngM&-(M&qQ`ZZ}CjRETg=ZN>MYcA{FhEcL`yCShfC_z$GF%CT1#zUSt`PhE$ z{qQNqP4HYLYr5||ZtL>V*Z0&GC=(vdjrg4uQ$d}LPj&Q!lnQDuq4rMrF!24+M6l~p4d7S7F*XBkJI8k^< z9Wu}gug%^{OeL40&6Zm2w3t7dQSGJR{;aL~lL-bP3sGKf%`cKW0YV&lK7W(I=#?hm z?i3Uj=Pu@oaKzTvrFlQXQpJ%U1h&1{S?9ojpNqT(qh*M*S=zU{6BtnvIP~80h%C>% z=*leX_v+l?P zQfT7l^Tc2AY3E-bAOLZC_4$w0a0~CM)&Q9Lfj)o^VtTtAVLCmetQSSyK0`YuY1*3L zkbJhUDOmqsTWX>Lo$zayGLD+{>WyXq*P8KvVUs#Z;eICtyiJ6Fog^+Ou8V+zug9hF z&UlYhaf63l%>HA%Mjz(G-#_BZ*Z@N(UpS%umXKJYcJ#^tUC1ZP((z6aPPy&CW3$N@ zI;z|UhrP@|DXY$~zV$o93?%7Xg`%I`-~cJM`Ml!TKiMSd=8-YR<7r2EVtW@2AZ7*S zFKvCnUE)!EAX=Nfenfg;Xh%Mg!|eho3ui_ozc|ikvF%Ni)QG_(FzIVnOc%ibGJ1Kl z`s~IG0y?VX_=;RoJ@Is8u$-Y$=uw>JH;rO3vl)~l$te4vZKsc87?6awK*Wy~Nb8YW z#TFxjeGlV)atPDgeP!2WWlTeZY14F=Mkt-c|cQXN*-m@iW6gC>An>AxydshW%^^*P0EVsv0h7uz2 z?!RKMt#E{jIDR^K$Go=<5X6UyU%>an>nuan7sZKyW9!DBMvUDP=d~s^itJx7#}6~E z#r~5oPdDZspx@Y5ba=2?f5PsvK@XH1UOlkG|9p$E#=oFdzoag^IEll{7;C!A1BL{R$?!L(=8whGo$x#sTJ<;(Z(f>rw-q?!#n_fJQUQ6Pw$Flu;`E_j&PfKf+9t zd@uWnwG4{|fLAf3x7sE_7(b{C4p%bPpeL9V7CNSV8IX;Xo`oqLVA4siwMq&q-MUSg z^fOKx`UX6K0ascX_idObuyG{u)5`<4!!BdvW}dAa3I>{6m=jKe=~i3jyj zj*KSxaHZFUNgy`fWRh9WiaUjWN=K4chh$5iYXU z2#fZZPIvGh>2H5U*~Q9F>-b`zJZx?A)?E|=LnsK2!Wkn_Z~$_phiCGRqJ zwNrVTePi_CiwW%!SM%Ap$(C#DX=~KY;}f}YMBmgYjiQRl6Otgv;Qv+SBR6gT6-kOL zO6MiSFr}k;=}tTrSwAI7${hF9h|X5kyEm>vK4W9#D%!}hzxe{5(j~ZoIc)Jr9p|l? z49<-3GzjkNjGNqqroE`1U! zEFhs;MHEvi8BCV?N*`1@Zu?7^a=XmR!+pFQdvSXj!8ku2t+VnOA!%xVGF)ktT@>_m zbZ=GTZpp?lMS^gj=)RB>E%(mipw&xys&dP2gG{FpXY0=m8sT4|F@d@~K$Vtt2K^Vl zGfZzA_kf#$N%+SYuuc{CNH`1+@XbG4mxya<#Su*nkTef+mqpsq!)F;SCPwaG!c@(2x5dI>oKQ~hNi#UQO)hcz@?R0mYqM0DN%aW~!f z>b*h{Xk|6+=!6AFa|asj^Jl2PNmLxa3V_BgcR5|o#U??~6Wu1^)T3lAYO4=hqm>$_ zyvXaTII49neUTz2uQElwrcePI1`O+At^}?{q%AYNYWT+D%75-RPI>Pa2B<1PG+Pv{ zJ*Moyhm;|EejRah^LO-)9#l%6(^F4mJz}?=FdxVlsB-s)(gL%V1gRdPh$|&7S(tn2 z$iE>`^P}n*T=^TDY%CfJE}lj(3O4N~GPrM50PLfr@0_^fKvXj@z>E1TC%{`F=FHF} z-`i;9wy-y*7F|sd0Jjq1=~YzFRVILwh^gcT4}Z7=CfKp~#K=`W`75U==MPMS@U(6F z-U?06oD~*sZ+2Q*%Geb5a*XBSmXU6D6$dl>EMmOrj}h&;=X90S5}U?bFVx*SadLLh zYC=L%ASRF#a9SG_whmx$vrnb`4H)0;BbW&hnyx}Q^c|XrYYy>lAogwc6BmEI*slVprM4$v;lGT-;h5n-~n5vs3C4-a^bBe z%RB^VR-bLHV1pMQno8N4a~80&;;2`JI!?Ii3J)LY`OXrl0#$`Q+aT%IWKsOMAF_qEXKL17z7ka=UE!_~?t>}f2EV=P{`5NSWE zu%#Tw;@3&kYJ&>Ws!9U3lX13S{z_c_(g19M-On`FEdm(&b3ac$_j8n(I>xKGjgu9M z9>S_&?mw9aOixaq)C)B3U5P=F@cxu4sT%||1BW!q(c`lz@Ghkgc}C1DrBfK6NAO;S zVBImC@TA9=&z{;=E0;!Hj1AJjdrt+sP%}@`!NQJXeK`0Pt5||@r2w+A>LDiQSjDx4 znDliMVzYxjUKE>wrE?VX=D9<`0_jNso+^_sw@^wgZ*s)I%Xn z>M(dxN~+usIQP$NM$N;D|8ApUC%}@0juhc~cxB-^Q44lAJ#AkwKm3NW56@~&{vb{Ms8S%t?TAyN%I zSs4Yi-lE1P>kFN&mqttNdAW=R@6A3z72;d3G9EB*?QogNFJ1S`&jRR;AdnT1A)s?K z((|&S4#x0>!^D|LO^D%?3xqNkIDdv%PeaA2Igds=xNUB2imcVW!+zYt>h8Ebm5ygH zc8$!|$4LotuSi8d>)t-~$>0}qe_3dE=*(ktK;u#?61;(pY$!Ng&UOI%Oi;a-kV+h; zK3oeTVBFTDI%QimVl^(k+VH{M>93SjhhB**)>|l@80<6!T z5i?Wu%~;r%?Or9|BoWgtprqd07>1q)Fon zP(p})Ru?;W*swGu7HED}n|$*p2%F``Tk>=n@~`s(0atxq6ZSB{1tjkaU^;W8B*xa2 z4Jdq2yR%|NP$%LWVPJ#uy~&APe{}$7r2iEB?LoJ5PB_WvTkmyMY=1$nf$ZWRL? zI&oR%I-M*Vl=~o0wY7O(8|yfG>JQ5S;Vf zuHO>;wBWAfw>bEBt!rPp;%xQi)hJl5j57H)5#FIy@N7n-eT|{b#LEE2YCNONI?s-& znDue0+2DY|szzgxA^}7wIEN+JDhI2wpUsbaI91fG7}y#AGm`wO1Ar))&a4)IToi9V zojUnw$_lKhymqMbxcoFaH;D)MI5t0YgigUuhJ~;lbw#`c?t_ds!uil`$Fda)bBOZ? zYU}1rBO!|EMWNFZ>qEw|g7lN7N;Vu61}#`u)coy|)wYzwa&&Y0kHQ>2RnklZ7acsP#QDt9|U0OSFIBBFe!7pT!61X;<}?@y0}<&N$?t+rC1 zy0Q08^u<=~$pp?kUH?+>HR;-v9rq^OE6fQH;BG*!r8x&4qwrWm$q$vJZJt!-3hXGT z1#R7E&7BWy6+}SQ*l&fMI|^U&rlyZv542m^sYsg@-#Js)6Lb%RlFeZICy42Wz7}I{ z^~YTS3ZW_^zd>i(WuAr3x#*)#Qt|W3&2ngDeW#GH{mJzD=}@4HNVUUn)rnRYZ4=WN z5MR(i0Uuj_a9zH0-FJzyDQ-3@sM<2~$Uj)(1pU)dDrNANizX@(Hg!iXX!vEWY(bhk z*3eA|CbY>->9A;1KD0&V$P2R1MekhuJZ0weMKZaq0tm2;@{SV5I;QGu$zb6zLyZu% zAiV(g#9?wP7m0d9u?k2;TtXJ|%M;12ZvP36kVJ!d``BHWQkfjx9k#6-sc>BDW#38xLGNo%77N%*^?$(+6d!MxAlK z|0gLhoECZs6`&Y~7IRggx}cg3>v4Uri)cOF0la7=9P@T@;jM)oIQ41X#JG9UR~s}9 z0^e0sMRQOVU@7f52t~k;Ynvt*ycd? zQK{!>0yRPal~6C5pbTO!%tEHqojM8EpYIH+O(|N`E5jJ(`EdO5@O&ut&V*<;@nbb5 zR8+CBBX|&cDn6i~p7yklcoMJ2SusGnWt+GGx#`FgIwNNDdE#@>z+qb#Dx21u&NVni zeCmhu$5apP2T?8O8nEdVSS^63>i(c*YK)5u*F0iOu0#H3(^fX@yV|6v<{5{x9SH&RUH6zZUw+?$}jQ4L>OEjHM!lewBM zLk9+t6ws=I!3ppl3pi5{B4Mht05d0pT}>HZgz@aW46H(igkVcIsC{nus!frSFe@c6 zPKWcbd;vR0N)wC{#l2J!{1^Qx^7S*FMtRO~{PH)nqQ!T9su`{0{m}{jZWSs&WiKiuFuXbTz<5BOSvli-^pL(QG3xC#+ z?Y%bxRnIN~U2G*m=CG!m(X)<)f=J!is;We~D+`yKvt6C-$_-94af^^vxOT2^N;Q4m zu*1oYkS|5Qq%zya3?MQIPJg`vhXf3HX>|00Z0G1VcyQ8k>!#svReM)%1fH;=`WaZ! z6ngqa@iI}Yi34cBw2(fnmHX)N#EdRAzmi)1!xY)=Mfvo0(6_QMEJe+>Kpn_#sTUQ0WZ=Z?K*i3v?NUnrqlD$Z%EqS?TQHXhU28u-0!L#$DqX9(7x zHvs_WigE_vAWA=vsA_7M!HPtP2+d2y1wZ_=%qn}xNd_<7kocA72>UlE$&HUOi1)1l zq*fH!Lupflij;sxQRtDXpxcYJRMxyS-AN&yBANb|1W||-{#Ioq)+*OqUl9HY@wW=q z)mntKSBp;`I+WowGyU;X4%Xl6Kkv-L>X5|^cnK5{EL(t<09FbzjFq=mO9i72t02et z>9!Fouy~BsW;mr#AUeQl=jjH0jB@(M(huIjOvqvBnhDVVU>(Y!gN4_fw|Mx{gcJ=@ zYYkMUY%1Jz_4HfzT&zsW8a`mwB=|={wgaTFZ)bZK+QX1GrhJHwyS}w_tn~%nKjTe- z@&-S!09~&vWsCy#FwC>9aqhr7zqwQ#<04$5xb%9he?atG%`^XT9sz}ZDwLJ{;bt^B zsNcNZh>K|$ux7e7KjrOIgOnCj?2yTvh101(9uzRzK0Y?-5X`r{Re)Y6q{(_$xDYq+ zz9M(~z;BzoM!*U`!P-6K84id4F|)On1MIvfuAn_=2sO#JNxZBr1gImH&I>V)>nKFO>ewS?D-&h1OOx@z0;|_G~_|3peo5n9& z|9Gi5aEx`rIQnUf+*R@FDmhhsYt4)E{-N~2J zKA9T$ah~&gwO8ckobwL6aFw+TsKfg+G$hsWt>^cL zY@A!*S@^WKWMFPXAy*9p0SbGXktCF13N@(*5?TrM!ft}zuru%zuDl%&we;t4EJbMO z=Eu`ySydFTtO*lv-qH*rb@D#znEH-a@pl)d+P4Qz-iFK}eK*ofirbhgbP)4fMex+= z$7pXUq8l zklvKEh$bHqKK&CG?;(IGOA(|Ug0@)rK%a>*0)GVr^f1A%1AC-Od`&U+uH|_c`iNdq z4@t{-C{USg6ww(wQwkrzz z722u4zLVS2d|uhsSKqcK>Z$dz&i4(EKu(#fQhZyEdXctub5u>=crNOeOix5*y9yJI zMGo_3vfK6 zRw(D#(wZKUfVY+s^7~MDEaS_W_8(weu-e_4lZ#Ef_Muhy)z`9WB^3!e;ekuh3nK(| zjxm0FA?8q(nA0VG|9YDKRsRJYMth2uM++f;kG~90SY+ol1&^NAk{mG4OX9mutXKds()pg7RsCejN=*Um@r$*C+HNd zk*fblU_la8T~UGskd0r8qr!hI%|ghZw^!UL*Sts_N19_($_hlxN2Dw_P#pnL6Z6#l z;;+rMR#Ug84e4dQui>n;;s(@5Gnvc-tO9voiXcwbsh%QkZ-ZJA-)3nW$^B+F4Nd04 z-C0ZO#sk!OIBT3pH^MZsp{zJq5!$-9|6Af(`S2E#Fw(P$<>PJ6XZLP1O$xDjXZ>v6 zoE6>e=ZUTpr6#@c=5KR~5HG3cPLv^bEE z&jZx|C=vo67ia~{+f0=da#~it7EhdIc~>dy#;e$xry^aUeQ?$PW_g$aZpg(C z7ANO%6#hodFETgP+&*{{3-DFVYX#-3ElO|{yB2;Y_b=_sRyA^b@6CVZv-Q zf6WDg&VdC-1>tD3yvRc;-~1r$V8It&foOY)8QSWC6#bV7F~iyS_0zu;+MNC`W*fz7 zTW0F7%V`c1k_J3jas5X1I@fu|D~AKHf`5nr=cTY^s~<6UNXDs1*Z~tm>UB=Wr*>kg zUc?E?NsUzQ2Ksa?X*wbJB^_{uC)3x$;}i=FFcQ(~U>5QZr!W{!b}}JwHWF6dEI;5X zNRJ_@*B=n-l#@iL&g^uY?^@l$jWR`jd6a7e`5Z(XZv!UU!yGFW)KDQ`?=c+dl+o=} zut&SD$m0f^Nl?5_>@Yo}=Vv9wE}%#=DrDB-Fsw7|tFmp^84vhZVOn4l_Ep%shdT?T z&{00_$7z&l5EZK2djLO|_W=3B-io509w|5I&EI=Dh{MER! zt)ql1k894hZ^%On@`FLINTKvdD^dK3@&+D?#b+#V5 z@|oqR-i>YD?~Y{YSh@w7S;h-ox$j zUSCUYU99Lkq32yfzJ*)VE)gPY>-*IWyv(CsqhAM#T`Rg!31dr^i$~?dX>EGDA3ZIE zaZ($$g&UB_h$}uuGVAjoUS^U|j|cA(>xiqdk6jGEh{A7y37Z6A$BHzFj?^I5FoG!z zLBoUWs_=49!nNm?s_5L?eUYc_5PErbx&Je`ON0i82Dc(bQ3+4&l=P?qw84No#VF?? zCsA&36Vp&;#`gv}6&e)JP;E{BV4uR4&USkPE)|PW=<{eSU|xA6>@W{OKu9jf)k%-7 zzMJQ$w^%ZnvQZ;?PEvpi`{tHA|2(b*w7d0!k1G{(Z$;_y1tpwRv8B?%dx zR+73xvPS5O#aYfEx)1bu#okqw)~fVX&TUV_5>Oy+f%CBz~9 zU`7JK5Bj|h+(A1*1B-6mJlXHBTx=mJBw0#udrD zR808^?2yZeFtJHYd%nG?FMb&GIShRMKl}b69IAj9GMgIk+z~*_(*fx$cQT&4%T7P) zJ+SB?>=NKC5;>Gtvu^a{+uQDFz8yU!!}E+wPlQox(_@AtZ8K10*_G6MC1V;n=2+&T z&JG@NY{xg|CKcFs$-JVh;>(R&c{#X8(iC295lkgcxk1u3i~OG0Pv)iMb07p|jI5Ch z#xjS?{JztOwgGsg^m?7Nr*MHmspGY`t2`CB(2DjgZri4jEHH|Dh~tR7l+G3rCK^}h ze^9sjv{-(vrdQ|Lf9lbH)k=PS?R=d!{aZcywBJO2L0J5nm|qX0EBka)hr`=&_;>$p z)IZy;U$>+GZP^_M^$2gzv4!$=<$qPt&y%cEqaC zjXknP2Z5Y2f-Sou^5c~xx_FV1&(;PE>GX@|=3>&FH+qK$~9@_OCxc z>Pn-@d%En%#k5D^`dxVkcCH5&HG}o>YcXHV2yw<>CH!2A^zq@PMi*>iMP)0I*3LFH zl(zkIe@Ydg^oPNZ{{q=lxe>-6KX?!?Ac3QnVLH>9^S0+^$Dxq6|99U@F|z7ZJx}zU~ZP zEicy{ZhKkw+AZ>GQ>43fVCcp%^Sqy1O6Bhc$^)mh($J`CoW?4Pj^`20%b%GIJ%qjW ziLNwALET-MY%(eG^nbw`S_6{v-jh>_=$lR8(Qj3hrB!Ft|CA) z+v2{2hW74pXMj+=eVDB_hZDAtQi5dSL7pMoY6T>L(^1|YNfD8JF}(UA39HeJ_}BMZ z2!J!xv@omkjcq>IRBm3>l>yVzC7DK{mNp{{gEU6}g@)2Lw>gAosbs(>kq1x_`nr#b z4%Y#I_<&-d+yc|h_$uTbN^b4vxpIN{ zzFmtqqjP6Aq*IRyIi9#w8-+PWd_Sdu+ZSD`@144X!dWLr9dabiHfP z#w4Ho|7_@3Xpn@4vJ5P3#mO=+xD!jd&32%z93nU>z*o_`YyA>i(*UIGHiG<4-F<-r zwXMV8=?>6~I^m)6+^e2x<$<@LnM57BGP4KI%J<%JbtY|tz6Dq1alL-bK*`A=o~6uu zm$^oqvX7Oka6J!^rbSGbysSdZ-V2`z6tzx0Llq~NrG|kk=Wcek$8Qqkt<9wLm6Y&+ zA61~$>NR{zDzd%!CuU91ek;@Kgt|B?YILn|vb4$2Vpl^8LBoF;({|HO&l*`lfDnt@ zH7QmDJY4XX&xY|>XzXTjM#ezUSxcsk@{+(O==N3;2aD55vj1twB2j~UKrS>ujQQrH z9+^T|9tckIe$%M-J*dN6$N}3XU){45o6muaSzT6>(nka1ylZ6`=?)!@5~@vYOgy6; zNvUHD@dE!RfHx}+H*!8Kfph6b!g3dvy?`;Uq9!2QYex#(Gv9(met%hv4=8@7x@c}E zfd_ldZvRA2&ZYM-#$dzLt9O`_NYZfN(nV(nX~%r42@2O5{)aafvjtw*Re8zUqXyFB zuE1{~;)tjE1aBR178F2v0dm$$N9|Zgs z0N(F#RawO=Y*9Mr6=GVzSYqoJddVttcJ3;I-FbM#_pB5W9e3U1&q8R%_Bh>~f6u+{ zvwbz(TK!+0v5w0$`3=rBy!&JA7lKz9H=Vg%dfyo16JC92{MLjLKSdj2-kEMPr3h8F#V1pN`hB_V1__=XoC z4&=8~`K6)5vA^NJ11(m5op+~T3K*cs?Jj)oSTJ_r%A6t?Tq#^CV6dY^jz>ZPkmzY0 zY8HdsbWR`YOm@Q2K!a`q%r%V}hQobk!cTv+zz~}46ekLFx!_qlMzD-X6^O(jJ`=;J z&eq_eg|>|F4G8}d;VSMHH^NGgl6D52MxbtBEylN$(Cp5A@hch)HUb$kYQ5gYgkhOn zir}^2qeNc!ijDeso7f(x3ZMon%ZlBP76_eUxC;JXlQeeO@{L~%TS4S=XYm+ zCdE#6i*IvMuW2J~jSW1kA;7jDuPNet@owJ3f{}TC0i=(NcRqicWRFHb0zqm@5Hl1d zOn;Ae|7%5&5~C%oiAr2qRW!K^i@FR?AKE)%x4>Dgl;XLaApoEs3)T7Cc-?A5oOS96`m+a=3j&zSryf%f<1_Cd4>#OeqoM1PY9i|? zoK4yO*jad|uk;-Bip0rCq6jF}CCi}MSuDeq-lsQ$mgv=7lqqfLxM{UFp|~E411VN> zCrU`tVsTBRZm0Hx$r?%16D?+wES_i2ON>HQA+e1!Y}bOZO~kBqU$TAYK@-q686A;# z+Hese7-Z=)vA!ixyL!fRh?nm1SkOM{e5!_wEV3i2Aysvpy^ZTxFeQ%t9?C6#4Xe*~ zl~df|UHZAw4q57U-u2x^@-XFq*SawiQEx)WlBnvIoM<=zQdplho+wMrhXQ}k{Z5tC z!4z-cmp>WM6v?hC?%Kj>-hlQxJwe~Y<_KCYdOyNm6XGc0qRAcB`WXB%6!_%e~5oO+Y_l zVT69nk2G_c2;xHwn#cz!YOqawGOc5rZ}n`ovqQJQl~qZ2AGFJz=5fOv=&!wzQ)}~b zV2mu4j$7ciZ6`MLl$(zw$8-)6Ei&26?>t7S>1g=XiDHkM!^4+g0#}@eYTCFfpdrQN zDWV<&gbPbrP8?j*(!mIUt-ulYWEFnSfL4tc*VZ|vf0FS3Ky-?j#FiH?fzfTo?4poh z5H#lI$eX3-`tFY%(wEW}o;!p!D%|N*?{yBPp&8&bF5N;P-XH;4!w-gGp{PRgcYcp= zHst=2#dNF+g6cocnFYflTED95aV}g)2`WW1EM(KDTM#hc5AMZn_+f+ksB2{;L+{0f zdoGv{7^bB37ZnFr(_KAdSqI}|k9nQ0uqk+GU8_KSa)(u0LoHJ{kg!JR#geJ>^o|XqjW0FaH0?DpFmGQM|0r+^ zHCo>l{jI&h-y#vK!|&rB&%Q@M#aki}UUHiRX3QorZFhX&*T-Zha~*O!@B_|&=W&zl zjNe4<<*;fQOsG(QYcwhA(cPM&Tri{hjZ!C+?84N+#(+Sse~VORX4=sugP=JRIdprJ z-U3ThqM7SjBRrrA_GsAgDdF`+6|tPi|5|^U9-+zxabNfQ*I5&Z{gb@O8FEB>kn{dQ zj(9RI-(tH&bR5Tabfz_?6nI#?SZgf5Gf@;~cMf)4_`hUY5gT1HNLc3wl~8JSTwDaF zJ2i=p0T=)ydt9y$%C{m)8uU{rE3P`9uY_ot>&5fA2E-PlsI7 z=38W4jK=|N3l`ib-DMNxxGwFb4$_+I*b+B6suO{&`5R+aSNwv6;(x)2u_VqWMSu8n zEDlYK`B#{)r(qoBS3wMn2_Im27$c%a?W`$)8hPLrZcy_t{qgYHrutY7&Z9wRBt!oX zr*mEHx7YtB3?jE;Q}!@!9Zr@L*Diu2%UG^*a1J9!WGJ5pm2A#^P&Ibg)gJ_kJsoOG zcli|NiMTHjRUr(d&4^nr^0ghp@|;9k$$wz|%JJ1!*wIss;T^rUxkG}tM`Hc9bbbj4dD&*>&X`?O zUBtCh%Ss+lNm)B!9igxs;=&c@kTQxkXd`* zIeM}&kbJ$EGj%2(t$>Lk@V<^{qcx6n4HPzvkKdC}1kc6^g2K_>u?WRKoZw`v!~+aIvIdpnQzNe~!V zg)ugbvzkDikXuNM{mT!!9_&l~2Jz!L={aorEswGC2R%s%k*!t@g2o>Zz%pVy2*hC! z*v9m=ME1pOsyT`<18R$9&uk6hY8N~kt04MxD=?14NpC3b1TWVy&_WV%pboYHL_hu6611M zS_JU-zAIA8woipnKOdp!BtQy>sp#qRvT@{ZRv)L+Fk`@-{!Ja*d1G0aiYgqlo?Z#m z7AnccxbsBIm@H0s zN7X0yLd7g}w2mkEd*2Y-VLE?3RxUF)ZC?5A_B-!%Yg z)bjJI2uS$6-KpL~t_?0)t}gUK=USQbtSEx`%pZXrW;C)PxJWfho|wM2HaNZBZhlHx zC&b^q2ThfYUR2r_pdlaO=?P9d_}tU^^7Vq9E6}8O_{CxxzYWynr4JsSah;qF)%XZE z{y(@H4NkQFUkC8f8IiPoR?zDU~>?>TJyMQ+SXORSy=0p*iFkZ9r4%hT&H& zL+)y`xC(HTA|MRYXpS`$q7O3C0F&3fqH_?(YbaFC$|GoCTJeyAJjm{%>(=quSe+oh z*5KOTt@W#S3jw`>Q}#h|g&aiCDeSC5hJ;{CH>iL9VWeZ*Q!D6_(akvh%)zdvu1JdA z;^I9{`N+0m_zo}3g#D7Qe|gv}NIgF!cJE}H_@>q(o}12QAow5tUcNl-`Unu4%IWXo z8SJrV5+H5FyQTHh0RKzHn|}t|{T&SYPpZK07Drcb94Pv!El$)Fg|xTd@I(tH)uJw3 zUW*es@+pS8Zt&|%`MKhKvP9Og%33$CLB%+r>hCVXRP}ygP#uUgjmmopR>G-j9O$NL zpfh=(VS%Ibp#C)|^zglw3lsD)V)Y`^JZK^qvDI36fwy$#fqb0)A*@{RZr=xBLVdMFc)`w zq$(M+Y}Sr&V*g;?3P~fQnAlVCs73K^JN<6z2`6xzgIE!Vo$$8-VoZ(yCi( zNZVz!T2LX3|9oguF4(Ect$b^ks)Z)L9paX2iVD;pXPz zQ+J;}T}SEzVRq4+e0548LVO~nR04D3sLa%!rusyj=Cy|w)cuaVA!=|7v`XB;JUpUR z6Fg;}EdFDctp+#>n|`0MIZboJll^tgtk#`)+9=_>#paZ%X>i}Qsc$82 zDjEmE*MeHSIe8db+y1Q_|D0LltmuVSlfh3Poqcu6{m@zd%F zV1x#Xz^FkE+JDITO;l3k4L1qzHOYS4WUBo%Jmz=Hv_za#B2Aj^Hl4D;0?jR+IENGq zrmExGIOB=YxtPhB3yM^Ps26SJ!ez8nkGa<4@>6(a*CH&(Z>c2=MMYBAhoBh**3dt{ z*k4N2KYWTAc*#~w)?op{t8NP{(04*=a4?i+iDlfD&TgAQQ_ej8Y*N;nE@2U3N95@s z562z%JmTX7Qt9CMy?Xz?&W5k@fU7%{804Iuh$ZjrwZX4F%n z>qD{b@^po-u)Oz=KLt%3tlwE2Sg{tgk`DAl=@@E-xLv4F2^V7HUn{SVJhEO5{!^=gk&5EM)w)DODnW{~>#1yvVW z9ai|7&?X~{$yvTD{i^pLM)Soh5nPBx7zVDz324it$|evNP3WU{--SgZ=bct;2yZ)* zKAJ>qO0Nt3sC#{ZCb!{^NSyWNd-fD#;x7z;O~M)!T~@6T&bLQp<+x;{=;Eb4SW{EzlcD@*! zUy2kW0DWjz*`esHyDhmkJ_+t}zQIX)l(SROo^y(zt&1WikN?uO4uE0mlX9?KLfcOd zE7&a!TU|^XKfMM#);o6Hm=GiV@(rR782!~*Q5smLwdD?EjKBS+*`Ur&tO8|72IA9C zhMSx@r2EGZkAFHfc3<;yuz-rNPYcwbQE3s-OKqB?^%s6t1Vi2K7z<213!BBCn0o(gCutidu(jj~9bP@?rC zgHGmFX9sV#P&aB&N*XZf&8u8|(vR8~R`Pl`eBf31RkG|5fXW0pW)H?flE=9459+4J z&w&4OI9c%32rGo8`G=cR`+7(=rSkEwvVa11suDId(TrX%%nN;1tEYwXZtRSt#=3UO z6>cI*n|y#);`d{eT(OG_R?I3TRut*v~=_^b1e zh6rSfdw!X*jti;%5FvRo$lpG&0&QcAU+QOSDpjThlV7(O9V#~^Z*4~s50AJ_O2b7_ zilt;@czjl|deAFIdB&isoNe1B&%3Z|F8W}7mVbh%6|6_@LlqAtIRGAtIgB6OrS4G z1=%oeYis8+&tUjLrFQHGHm;l{Yd{2J7j_1uA}&6bzD4JTM+*LkHnx;3WLt*2Q^Z;M zh;%&(=~AGE6+FAGqko6pGdQvdn%?u!2TfJh8A*5F#W0iW8Nt93{g9`rsG)7q0{qk| zwJ-=oyhQr_0R(6Kyk-lLPSn>p$0)`QlZ>%9e>eB0rQ!EBFZ@m`rdmXLb+B6E9YQ@z zYbcmri`VRawlD+(JC#==#gxww5KHLL`+OqrB11vizj;t;$(y(!ov{52L^r| zLs&{Iz9ibjqFc@(L5Dd+og=hc;2>T8mWr`0P4|KiN%z7$&$lp9tUk&a4Ye2*81(p0 zb$c!R3=ZYa7l$e}Z@bUN>3o(yogkZ%U`3udqGaaAo=1P?%?~{L>!SxtYu`%F4VqMkH1=o{ioq|u>G<6 z$o_G>E6PLQSG~m$*+7VV%(l}o;+!<%z57L>ms(mxnk6CWGc-x;Cr-9NMyG5qmqf%uwpPW7l2%g*5+DqSb8)!6>6#_z6=n{v@|k+ive% zMND(BjZ;uza@cCq0)GmYVH5LzMLSML6+MJ} z=1Op)FPNT-KR~3cw`8)t#8OkFx zPHXuYy-+_Y9x4z1B4MA4a{5nOoo;W?mh?rY%rj_JnN|zPdk-FFhy____}OjwOu$7W zE{>e_12+~&3pBcBgVT~Co2Ac>OA*rjw{p&#&a!8|7pa2it({|S4MmDakhKY`Z1vl{ zl)r$|RZOr2)rbNKyp_EeU{bKSmw7uS`{qm`u(TM7{eflKPo(){NIrsxzkBuA;t_CL zwSc#AdH(9dIEnA#ywCjn_$9^N6a~*A{)tInPbOQ-?NrVAVxEj0Tv2=LvWxL64fMZl zrHj6V=%)QF9V)rf=BVY^d-Ld#N#>17(ylCnL(f&%2%{Gt!>@>wSUmEdFMx_^bA=+4gc(Vep|1M1s?E{ zXViWWbw*FrnzKG#+kQpy`Fv^`|=3;y3Kn zP-l8QuP^dSmAxGomrhmF4;t=TR$jrKsN%M}>+#!`l=xfXJy`U_=Dh_)z1=^y0N$YT z&A)9_9f09+E1h**cw?^(0os%(12~~1(rX5HLsJbd^gLHPP=|kW#Ece~80*5?c{EC> zkD|RnkqUH+Fa>x1F1hUq=nYN7rYb&VgEi)i`%Lyd=HaI-ue_FKzlDRb{(S16*VGMj zo%q3l+I)^hr3*tbc*S(o36agyFXZ)@;?#E{3;L7$S6hDK>dqE?8!6?Xpix?}pG?af zqhrM2x;JM|>w9Qmg|t1`RQ6eHdlYUIdfEOg%{Rn$8eyo*SDpVShKshs^D&GU+5?(V zCzNe)YbbkKk*}HCIm8e!EW}jPbGKD73jgj;t6`&UvReU2#g&D>K+3ZaEP7%=fFZ63 zO6WkxCGE_BmFFfuf$N|3%TIZO+BMr73^=`$+(HchY>MuZr9ag}rL6yVRwlhJ6Y@fG zi8;D%xMDxh=vw~9cYTWa?7>r=Lb0>uRo7;xCuBFw(rI)h^w7NQMwBMl5 zSetYzMPANM{||x21ijRwHW=5kh>wTRg6%+g7mK2W=Jo-(5UMbtWRX`pi}9#PoM=UM zaM+LdT`i;yZq;l!|IN~VnFpss(0lg=O^FL@|GJ1-x`N2 zjY45qEcQ1yl9zJ@>u)ohX*9&de#N7$c6GMv#du0S=dIS=8a+ho0gWn>NU*5JL?6QU zX{vjajWK&%KAxzHq~&t!SaLXQG@wp)g`X;DO@T-cWJ%T2z_6Rr<4YIUTLM}XuYZOY z{k#^}1@%}jr~)O9+uHE^Av{$ufj&zsK?t3kFH=_5;O5sGu5*Ne=g!XLCy~07Z^v(| zhObRn&$j8Ott1zPzSfGbAd<3?*M{7u@(z+UiKC>#Yb1I@a7 zot{O+LxSB+nLqmAS4O}11Y`sl%&cL|+8cIuj_dY^$<=xv6;W=-9xJ|@O!D~8oI|Re z*{N^^{IXyVzVSdB(2{2geT)cKi+C-)Xgm{*X}oMO8~#hH-*&p$MFjpg+qX{c6!|_3 z4c>O0z>I;ZpZ0MS-pxklIuVLOosEFC5(;vQ^RG@y>j{9$B}O z=v6ddSMGi&-Bq4GnBbxLoBlGDXJa=`LqePg4wbPCyi@je^v(<&iIl@nVr0q>Z~IM@g+F$NS0pF4?kN4v$)eJ}M;_vES?ab*mH2zI zgKNLx_2!AAN4B!O6%Qo*<+SnL4j*PYt{{=1M9}fSOR_5U7L@p7pdYOy~wE*&?+!5x>Ww*`9BisfGv+$FI81nJ;MFslh(H!LxFbr zIm-IE1;fyJseb${jKlx!xbKaI{84A((u<6Xije$KQIzqGX=NszH44?r5a^Ph7E50~8}~YBG5$wr@j+V>gJs+7{Zl$$uq>My1qk$s z#$T!(gP&9y$lhbczJyfr&mvtYlJ$?}|4Y9LB$!JqFDlkjWmT8-y~f8Uq%7YZV5-uI z5J}g!O|iFhi5%<-#twd zGc$-76H93UyK$ZWr)Z4|WD?k04f@zu+E+ld@cO|=X@9QlMhJq+ME?m56fP{0zL=J> zpKv7-e`23S+}{izMADzm8TIJ)q!fd_T0mGJ>aLbK+F0*JMdTkNMfBoS>H07odKNU+Ccp_Q3c`AVb>HP92_^e2D$uXO62aGfu86!=Y zUM9{$6A*W5xgy_;$ZL8rx7cN+EzWS==j_0wjCBtZDZaUz!_A(bvKJ5E^tRO?^|&-8g$9C3-#qSuoIP%(80LMG zx**k>rnZghqHSJMd3bPmo^A{3eX6HOvm$qS&1H)I)wPWtANjH5ZZM!{jYZgsb;W}}WKfyV#>=Hhg$k|kd z!dOLbsZw;K{L7uVjJ(xrlMS3<7!AU&7cwIabHeuw{@=}k8+?Tilie`)B@iIva zIeJgP>|wmob>90YZj763X^6Ex-j|N=pfyvb(2F^Iy!+!kK!EgX31jW!ez>q|0-=s;;=`X~=y#IQ>aHndgZXJl;nBCST-0+)}^2-f? zSyXLAthtJBTO;0jj3yi}(hiLRV`oYe%a(!l^wGb9ZOU`aS#Hyd0w4h81@tid;54;1?<@i_OGLGj(~8wCvK z8Jp$Z`N>9ZNtmm-Q$%L^?zr$6f>cuu0dpGqC>SQ#lk?Em{_9Kx=4YvDZWLN7gxtT4 z&zb}lF;8QI%AYMrS=gU&B1`8b&$i}VewE)utyt?$l}`yx8u#%bO;z8dC#X?a(K`;& zNw^&#Gf`E)t2Xa!>|RW)5IhV4KB=r6d)^)dOw_jTK3wh&4z8&V!l`}=7v-Of!B8>A z2%nEjq-To&W!K?jXiZrQG0C%hYu226EdCzF*>r9>Zb=E7$vs(-QiKG$^nz3Go>wn$ zZ=q+Gt9$o-RP~E7z15n&M{P1;aWc4ALQj4O0gVC@{ z*0TSLrBGq?|F`E}^s?nu{k2GbrXn0(=6B{F<%jExY^cvb!Q-R~6IM zCJ+xjc#zEZQYK?#`=(eTo%*`y^lheJGE#~9`Ep8+n4&DhSLjN?bAo#!QbvV(Efjw0 zd%~fT6Guv8oig7p_Fj=`S;u1I?(i3qfxiGh{G(fy%o#o6Z@)eKrGQ{ z9P3cGNwbJ+rzomq`;tS_hzNr&aNw^%!hb$N|1;#(V;e%sX^%N$_Z%u`8h?8!0S)sl z>SV2P}I7ufolM60DEzYF6- zl#IZk)|zW5mZt+IwS=`ru?#`n`9H~IET~be6G;clZUmzFkP{F|)W0O1ex+&Tbg8Aj z?_Iwt?J&*9zwZ`JMyd{fcEeeJH*C5&rocNh7m#-6 zIr3hpzY3Oq4W5^xA1T+*e7sGC&s4GE4hp-n!$Abt}jJP+Sq zuNJa}`~8+POhO#d)^rgYIW$j`4)BY>!pcu0)(blA9gV;Sc>QC2=axPoh{M~duNqh> zGb&47}??(%hf=Cf_Y|M2$6;6MT{&|6p@T}x7 z(1}6P8TM&Z-31cqq*A04-ACyItf%&%FH!jOK^%Lg8S#=pHg*hTu1MAY@or+uie*D& z`l}UpsXC~8t>!15lwGdHp<~`!(?y%Ze}u(t?vhE@+xL0?&PhnEjdI#oN$FFe&W2qH zTj{L-R)&i*xqADi)fuVN_(}ZaN?QL=+zh*tt>e4!ZoRPaayZHezVmEu?EXBO2*6r{ zkV_iW1sc3Z3E(+tgO?6`Y5$-&P(eU!AXZ50wNV)lgO}AhA_htCHCq0gXOvM=yooLa zOF;lfIyp84Uf*-zf!G~zGM(-L(1RX5#j+g~LPMe(IM^&9x8IJgWk!%mMEPl!&gPI; zSvqQK8G#JBic41h|4tdF>`$74ifV)2B#?exw=>mZgezz%T_}b!<+V-;-Hk z?+$0wdo}Ed35^9f==+Q0_jX)8K6|zCFt)f%8{F?MKhWU604RwG=I_p7gOg|CC;Oa> zrvJ0kAglTjJFwi)h#DZUdWEPt!FiE;?iQ@w$EvH)ZL4*z3BwJ>6_ia=TPwJ`Is?6k z>ibun>S_ymaPF&l46b!Fvn%vCJoOxorHX|`OZ>XXTxCg2mRE5djWS$Bm7r6YG>n}jN@Dc zQKzgeW5JPV&BZowNct!{IljWO3AeT>%NJ{$hE& z5V?$W1(T)ZcpDREGh}Mh6(X@hmjH9mDZyc&V56#8z$L4Iz)T?f#;~&8(+Rs>aRsq4 z&(GxIF4539eqD1`zd8Ym`mqOebI3h5E>!UeE)xT5)nU0(*jMzy6hF&9HAR3&;gze- o^$qfJroc$QyMBhJ-F87)*d|7Z@cW9jse{JH*BQ0T4+`qP04yyW`2YX_ literal 0 HcmV?d00001 diff --git a/Source/QtDialog/CMakeSetup.ico b/Source/QtDialog/CMakeSetup.ico new file mode 100644 index 0000000000000000000000000000000000000000..e13bb156f4e0bd05a4c5df7de920ebc681e82799 GIT binary patch literal 24542 zcmeHPO^9X16|P~%^rR6-vzTlQuOkjPLl}iS1l-u2At?BhaglcGki|_03?c+(6L^h_ z-Z+GSFf(uGBFQxi6A;{nUS$z4^iDSs8e9k_(BsM;BHn!8sXFy@|KID^i=?~8dZ$iR zopZiZ_ujfybx&)|8S{{N^ihL!-fTT&%xfsEty%v4^TzxQbhAvf13+G_Sn!in)IMx_S25XU+C+ zEA#5Bm3h~EVyb_a=I@^zm`}d=!ukQWFHv8jzC=Zd`U-pnzAD9XhTjbKGbqX+l$pwidHiI+ zkO4ym3>h#8Bw)yZAp?dC7&2fGn81($Lk0{PFl4|W(19TXh71@oV901JW88FN+4!mp_74aT5p!nrw#2A#YR{~oJ z93||@r6mrGK?xisalkRT+z={(r397|AW9gNTL4%}2$twnqM`&A{D%xZxF#jAlpGJi z!n=W20d>Go0Ye206);r5PyvJ7PQXwCLj?>KFqFUmHOS}>3>7d`z)%4LR3oDv7%E_> zfT03_3ieAVs~}jRQw|+D_#8MY(ak=&`JwrvdHwa*&8=Iv%+Ah^xpU`^`S|0H&4(X; zXg>Y)Q}fwppPA1;|J;1}<(KBGuf8&ehll3=e=75b_uj*Eyp7T2Ge81;!ci|-a<%jp zo@7lgzGPO-cQTu03z>J%+PuGF z4D_=5MDmoHEa@LB|HNpJ&g3(Zo6Sbe=t(XE~=~ewdxkvnO(%ji#LT zqRtoX6cg2r8=E)U(&pxkH#xhRH{3*BBiF86vh8~x{Jho#_UTK0V#dV%v$Vt2D{R%7 z*zBbpM3n71w{qrx%W2rW`!buD{8UT@g`nKLd$96?Z4KfwuNQcm+`YH5a&VySUL5UI zz_-f*lD4aL4l5C82d6#~_X>)SAn)2^aj&4*JCGMz1m0dXhoC6-erM%V@t~l1TiO%r zg3!896c0&zT|6kj3$kH7R)7~~JaiVGbg*Nv(Jt=CfbC7|K>^wu;H?om254^=cP?~_ zTLibe#YMsGF6)ADuejZ5-Ma902Y7X1s|&pA@XP-8)q!TKCHlo$tJ*c@>^4>dpv-6Y zZC<%=4D*FUnJ>eYbt8mhVeOZ(T~w{E3Z+@NY%59)%h zO?@y>?Agv?0Vw_J>fI1=DYb{LOm0Egu0ApV0WlHxZ>o!wQ zO?_ejOXii(Ke}_`XPmdGPkT}ScJ--&V()py-=RMBpeVQimDHuaWr`XhyR|*DuJgFo-Lw+~Vv*h;y!_gH|7*=|LJOC)2 zkmqL7(REU8Djl7YA}eLtZZd^plS#_Wrci7)NxA71icKdeH=jbW`6T5gROrM~Zbr#- zLrTg`snDsV6%u(%xli3d-bVKO)JMT+I^Cz9?o;v9;0xaAdHM7 zQ$8}kx{8Hc`$jvGWYLYh;nvHPNK*|xFC`bxNVUs=FGT49fas}vPkG(7#tP)Tp+&yMya(Vf z13ym54n95L0Dw000f4;>*0h`$q^^T&H6H-*)0ZA*)D9dvy^lwrDBic9#>9GZU?K7y z<|6>^D8kBz0|V^fIQkRdPdm4?C-UD(c?OFJB`5yBr07dY9 z>$dyt_MSiz0B#ihfk^-0TR#MO_~D6Aa{Kk0Zvfyo(nP-3dqN1dZE5cyc7Mox6F~8o zSbora6M#Da5iP^!n*d_@5#}2JBKf{s&t5+M*6sm&z+$g`=+swAFF}wWXTA;~$oJVy z+7bYIewMs&lkN>B838Zf=+<2k15o*~-cxG~KySZpYb`Ai04G0>`51uSJ}pN2syqNE zKcD#sfRpdD)!L>2?CmqJ`2fJmx0>j$bO1zte)ArH+&=x5I$A9N$}eJG0Z_ifz)-aS zfc#?S9e~Bn%S?#dXHoM40P;g__O#1+XHWZ3(+=WGhx+uk<2B zC%xI87dC(8{1r!_avp2rYIt(U_!=h0*u<1^HcUzxbHk)`ila#;r92*Ga+Gm6WR)@= zhrCk8<&am(_#E;|CpZ=*uXG*9qvVxNE1r$gyrm%afY?%)6#z?gyTl;6Q;8aU>p<%%{7CHqIxRHdTL&7a^dprc z#?j&Kg6|wy$Ux&8M;m-~z@PGuhrX6#2iF*VKFPd=nCAH=mX5mGX&HSn;7+%Oqg9=6 zN%*HK?}8s3D0X_ITXo<WlsZ5{pi3Je<9e5qBjt?Yy! zJJ53*A$&DGdav2)gdbgj?%SyA%a%9N13z(~ZL-kF+vMoqYqo_R_^AVp+bBfp#-Xt_ z^}X;@2a?;!L+8hz9{s)WYYxPJ%@%!^>(f5~zwUtCMhSHJc2)m!7RG1*e#3#{jpUPJ z`}>dK>W$l=}*7h1^px7w>cnxZWs?x z@?|clA2IszdjOM!roC8u?aN`%KMH=U1NuqSnF%W6(n$DiR{&A=5(D3>e!Tzukf8Hfq;D8h)1p{x)iTyyk%4<$zx0R{e9p?{vT!XwyFz{7wh#ZPYeB%mu&O z0lAG@^v?;u+X380ZL5bl;rBUE{Ixm#%niTKf#N6etRUsN;rBYwP`?2D9tYf))5yvK z@OvC+=wAqaw*w9R3&HPpAOsfJAzBcArvr8U3&QVopr(Ie_+1YCD!Ow}To`_r1N^ca z(h=ZyIFRZ;0{jjK68%Sl-|j#d8+^&c62 ziv!W)y9D@62O|ATfZuc==wAx_h6Ca8S_=Gz1781<;MX1S`j-U1?tnhNOM_o?K=m&T ze(HceUQ2|ZIH3BM2tRSa>0c`R*a7!=Efs$3fYrZb_>luv|B~TH4#?xRbojvm(Z6)~ z!2#+&2Ke3q>OThf-htzS?;POcbu93m1JHjgqpt^B(0@$utpi)f2Vbth*73m?2j=@b zZI0?Z$?R+$+vpRA$)8KV>&^piOkV^5jOljT=cJ54NBH2VY8M;IppuD;8)aEzNTojR z6O}c7lzrl|#*wl!Y&9m9jc6YkVo|<1!*HU7%}-Ib|P2TzUuM^2EiTvQJ!I zcX6n!kIU1_#-Xx4E~DB7#@fH+-)0Aa>;h!dvc{*fPh8eGRo2I42^e(_#N`R?x>1kI z>#WyE-l#lf*+=w-vQ+!XUUJ)npz*EsvOq?BE9>L3Kz3IkE(_!k`Ahxc%!DQ9z(k7H znRQ#%NMLeOp4xgJ5logCT(y9X$_{>r5N6x1hb#^__)>O|#eul&;0x%uJW*S?0&#g= z>ot;?Jjzq8_YuXc2=F=TzKi^S4wd8ofU$%QL$|)te*w4VW6l5o literal 0 HcmV?d00001 diff --git a/Source/QtDialog/CMakeSetup.qrc b/Source/QtDialog/CMakeSetup.qrc new file mode 100644 index 0000000..eaac192 --- /dev/null +++ b/Source/QtDialog/CMakeSetup.qrc @@ -0,0 +1,8 @@ + + + CMakeSetup128.png + CMakeSetup32.png + Delete16.png + Plus16.png + + diff --git a/Source/QtDialog/CMakeSetup.rc b/Source/QtDialog/CMakeSetup.rc new file mode 100644 index 0000000..fcc887d --- /dev/null +++ b/Source/QtDialog/CMakeSetup.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "CMakeSetup.ico" diff --git a/Source/QtDialog/CMakeSetup128.png b/Source/QtDialog/CMakeSetup128.png new file mode 100644 index 0000000000000000000000000000000000000000..12f1d9a9a19da2dbc0e4535e27044d59bb49d68a GIT binary patch literal 13269 zcmV;`Gb+r9P)4Tx0C)j~RL^S@K@|QrZmG~B2wH0nvUrdpNm;9CMbtL^5n^i$+aIn^?(HA4aZWV5ov6ELTdbo0FI&wK{O>*+w4vx20?>!`FrQsdJlnHR>OPy zcd~b_n$otK2Za4V;76L-DzNVtaSB-y0*E}{p()372;bw_^6ZZ}PI-92wGS&j#91PI zKs7DSe@(bk%_Y-7gGe}(^>I=@oY#w#*Bu9GZf3^F5WP>3rn}7Ut74&?PWBFvy`A)a zPP5)V!Xd&78LdA?xQ(9mjMYElVd13a#D+Z_7&Y|xU=_C-srWU*6kiZcC!$nw*)9$7 zn6CX+@=AhmkT}X@VSsa5NKe;HZuq)~1$`#h6R+ZTR#D-3j}vF!)ZOnz+5)dI4jl{{ z44Mr{P!L4~VVJN`K!!XTF*LGrKO?IK8z<8w`3e3jI8lUGNUta*C8 zn(P`s>{pjD=7Kek#B;Fw@hxAK%$F&Q6vg9J^Xf~4by_hu-=A!MJ3Znq&n~srbFGPs zH&&aMXZ>nO`|hf|ljc?VPhR!${AbO?W8x_>CU%PFA&Hm8F7cAsOREdwU~R_;ot1_u z(ruCYB-LPGn!NQdT|ZlRy+(fw^-+`=%+gee_kY4FWHg<*4sZI8+sFJD270UUORdLHO0nA4V) z%{fwsET5CQ>B?eK%uw4yQc~9?*JVo2}ze(;aRcp*ceL#HUJSllrgm5wQKR zQu+C;QrUh^8rFfA`ftFz{YAidi-`aL010qNS#tmY3ljhU3ljkVnw%H_03ZNKL_t(| z0quPWcwNPn=DBav(`L!L4PIm$jQ0&293U*l3pOU$nAI3C@Z}ql4&a5RC(U#>neORK znDq1{B$?@iEg^~1A%?Jr5WwIC0yxAr;N5tWWlNSV$=WQvW&XeJJMWdA?vvzQk}3PD z_PTZJob%VIQ+4li;_CWB}@SVMn{^gT%1ioZ|vz!mUWPr1r0Rm_9^Hcw6O$YM% zI=75CtqnjYXAn}?!4>V~&zbS@&SnH~>T2ua`}P&b#32uOyZ-(AODGib&g=xKot^=R za1IE(aN$B(xpJlC<>g5<8ubMNf!N{0hi2{GvnMYU4E+}6I2Ms~nyy>7PKFO3F0oil zI^%TE=@~!?x?{%<;pO-HLCkn89*@b;A(Ov5x^GU;4f{5)0+UpN31TQ8Bg5#_sJ^z- z+5FC};aJpy#G4qT*iQl@ddr*}9~m=u;IO{PSrm7C`A82lj~5*!Uc)A#6aG1C7=RF- zaM4&S>YF-c_R_+0MoO1JTrLU7of35J{VqIF$zqSL$g=#8`+ewYQ$7I(HW0QA3z@9L|kFC9MOa@o3Ri*qC#_Koe= zUwVmL2L>1k@XrD9&zf;LYaSGHxj!M*H{Em3(n-5^#iK{-8+=ufxYMV9|JVePp2)ue z7f~Q9QMS{2XAJ{Dp`)?KH*MOihenQ^BASTxWq@p$=;oiNSvB>Nbi(Q8af+ zvYnp#o#i2^tWn9!bm2KM_Zubf=6mm5I&u5;>!-_N>yD%oG$rJQC?nbv`7!A z{d2(t1*l_CK$S2Mw5F!UchNC8 z+6IvZtO%zXXHXQXlb2ecX}U++3$Wj6g(zeew7_Fu-SMtM2Px z|9WjfL4iafK#GKYfX1ZC%1XKGuDj&kd+()X(HNLer^C4p%>YX5^73-|)1Uri2&8FB z2@;>C-zihBSvq?3bb0Q%5+nTrF%Jd8ay06fIxtc&Cr1jgF*FJlH;ByMC-OXWfhw4f z>yeZ+BCuVe0vTe`q)Ch>t%fGj!TxlLDS#+IN6AdPjMWcWX71m%EfPI=uo1-_fh`z> z3`;Z~l$uCXf_b@uEuSO`pw128kuGR2E3M6>wCnW1dv{dVDHuQppHOUHpm7wEigo`r zONS4?3Uhxcgc|?hXb=kcvmn}8a-;za00aQRr7H>~bb;B3j*3O2IcU?d+hv$89c@fv z2m8~h7$9xz{qEk5+E4rDA4H`0K)4_S^XZmaLbmXnEM-C%|Ef21Iil&peTpH0G0Joak4@ZNF4pb zrjTTzp#ekz#~}*L>#Qiy*%$!QPn&<-KW*CVrRSaZRZIF^sdtI5(|`lxQH~q|1H^+t z@qr2G)Zo(%0WbhjfGdL0olzI)R19ECKX&{s+`PFVsrlP;zq<->nScmT4RbKo2NDcZ z*K?gg0q_EKfw3+MbV^;IGckaXero>Hr+;nfkRe}{k3T+O&HV|&8u(`z8%ThIP#|0C z8Xakbqz7|c1|R}Z51=Coi~@6<<2aoX1v(Q0BPc9G z2uL^k0Z|{!!ID}EBA-lvKSmcQ^7&$8eZEe)BIqm(K!L?sznFiFWpYvnFie1WR|KdFoSQ;{PIGFgQ!oGssn2oC!i9@2+_By5TqTt?vWK$?T2@es_x5m*CL44}j}C;*=DLIEw~-b0zIxzBsISEmElUi;UU zemU5bp>f`S%{6nD4jz1&eDslP^&^VAL|3A?&7~ND+sQ$RJ7JiEBN7Ax=-f}@DuL+} z1;#)ZAPPjHQCbIce)z*5`hNW5A7dH`n!_ksC*5z$L!7BHonbrJS6`2HoX9PA-L+`K z#*Li&8~uTRc>x5;B&5p-_?sAKk{LUKfB>H_AdZjb;A#nR3LxRN6f4597GD?`2wh+t zbb;b%^ak8u1MXXkmrd$ermn8eY!fqVJ2FF7R{K3-*dZA}4}$F9zu%cYeMWTm?w!>9 z9~w01Qu)O%cA5QtO1bMa(3BCBDaZhRe-5mHhb54ojlBW)>?jFGr#{2ou#Y?j`Rn5G z*?S|A=aE$P)KgC#ec^={(4~Zxi3QpLs^-{uI=+V9L4aBqkZbWek@fY@))M2K8v?26GVYq>tPwD^k)4FJBDR=x_ zsV9LcdG2MWd8dak1=KcTKfv)xh~{9_Rbtb(FER#EfV#l=KtQd79rkUa4#5Cv#5eo> zpi*%9^y`-t6S1ZX@o<`hX$v6qD+4IeHBMhq zU=Y4CVxd5XJT=tO7@&#t4;+}1epl-GikOW6Ueez@jppD+91pL?>EKW<1erv(n7|M{ z5!ZD3M1k>GH2?*8YKZ3rIvfggGzL)VpMU3_w)DG-T?+b-g%RT7_l0mg9OhuNACPAl zz>DaaP~gH~up1bF?-X`8U7#Z|fGz!tDg7UOupdIlM@T2Q>Hszxcux(S0vrd6A?ycK z)HfIez>S(r14?+@$V?4MA4t)ID1f762^1L9(NLfxF#x3BEYRlPamS*u>(|#r4;*NK z9fmf2o8YYzJzXCl1NiWMKn0cp=5%ldbFeak`kX3g9UKf@U}7jl6wp&c9p*iPj=}(( zl=+qqHUGr}23#WVzn_x+=F7d*Jl`^Nka4)2^d#el zC@{cX5p<~c2s#P_n0~_e1LH-}C1=C-;WU$9`&*mdiw&D?L^@J-D9>1X~@jL}wo0NjQBfGQj- zh+_T^gx&r7bm=FNlmU{yn`o?qM1e^u6fkxHJ{Qf|bm`Bi?VHRq^yiH41<B zrNkZw*!rFB-MdGNi}wUCzWAyo{rY`HUV3S>`+mRK$YE)BUS^0A1)*$`hEyiNrOKtJ zQ9x-8tgekGkB2v+ni5EfZCY_}kYt2p8qy64U^D5Xqeo}&jz)Q2pc1>4M>lWY9Ls@) zk$W537N5IczkbrCOP55y?f$XV)8oz<1GvO;q^zt=F1qL(L?o4nOQT z|K~q{XUy8QmC^nCx#P#vK3b|df!o3eL5N$!URi zRzhl+`Iz*bA)!$0qHws|?&@lDUSNMoN$rFQ6U?b0mZjr!Ha0fOuYUC_nLmHNVGKnH zx5VlDtMGdI?wEEb5-Y;o_pe!#___z$Xb$@+g^$GL)w~STo0nr+5T}Fd z8}YReV-9YG0RgFQq&YZo zIylict4~e($<8G6+y{^_l#}xkD1anm7eJZhH;A>oX{a6iX%`HjZ;6Fpt?SLR7E3{D68LlTLF%*P_k>0oyb$i$o((~)6x zfr&T+m_z~h8^mB}?dO@7d>!+4#Q@qV_{Qpov7CSV?Taw?A4zEbO{G6Ipqj1&tc*cF zm6nMShyXr^$HTK=4#w9)xFKXqH#$PerBeycK*)Rq*z#5nXW!LMs#4VNL4^yTBx%Kv5{9=LL*ifMwg0YmW?o(>`Xo1O@rQF&}?inNj*r9wTr` z0b7J$8Gs*)NSK3>qeLa)G@QvNlh8V-C@{Gx3beZy1lk(|*wVkGSFcHs{(WZdSLt^l zy(z?>3`QUW1bjJisHVX+2h(_yCiR(!o}P{!DpS{>0MKMm3I*ETd4cxE07>b;?Y0L; zyVB1ud!@Afwm^Jl*l%fS;C=wj!8ja<4@KZpqRplNCA5tMc9{7ZC-a1{Bs`zGKyGfk z)dkuU16a~O57Ix;%>9(iwh}bO95zBUo&UX&#AOU)48ndu6w=S*;UuRQ(KU^}tryto zCXD($gFy$%pp63UN*8EP44~4#fYSfrhZV_nzZdLlT8ii-qDy#pO7NEUrqe~LOf2T^ z2v*@k0r;u_z7_(d9St@kDu|vbjZ&Y?1MyWCI6oYYeI+k1i2`7(CSM}wvz#f{UKoJF z#&v%dHUFMHDgCLrUy0n5cugf+%P3=TOjBttV<>~LOw+a!=3u-dSbfwr2M3_R(~+Py zVKq$&-6WnUuX#yb04Q(~j7x*EvfLGc;}~5)&A;XzZ0HQQ_QC+BAAr-_Z@cY*QI!4z z2i&>eCa6ombmBE-1TACNOCdrFi~w5zKNeAk{QzSQ#=(%}6ac~`iRxh=&^#}n%##gW zU}$!B>=G9R=D{Rv>;n8v!gthSJcg7h2L@{$e9(=*Aw>~iP!w(N9=6?76eU*yimTaRJw9W`* z4nMvVz^{c=;@iPA2Se^%$+x7Q1X4-Q6lQ*tJj7`iFes3ppV9>!m>w-h2FP?-#ZGGQ zOfvvp$PGnnYpcW4rp;Z#xqs!#eHcFupi4A9tqbQaJhsdTtfOe))^nv^)0#4Zw#zbH zZA7D$a-eLN`|V(ugB^TU-VhtP#y>_BNY+WzCkjl?&zB+L@U=)9jm{cffZM}#^fO(i zz$y51%FhGn7HE3kIrvb5eE6XUth#~==FeX=;)4$kLHdvS@y4%F((F1MOhp4X%v_f# zD5)lfsJqAS#!aG|V;F<=T<6v!voHytmX+GtFJ$w^XXN@hBc;!Pz7pMBB{+ECwoC*- zMXgUiJ)9oree7~v5#T*?=YpJ^*rh;$?e+EZa1LPuiq(Da!3VYZV2mS2j+kX7>(a44 z&kdY&&N*_~WtW-f*Za67PW&%U*XSUgcw=pCf%n9Na7^QU`t%Bq7;*91haY}!#AA=G zkCm0hV1?B;c$HvH2Vd`F4~A*YK(?F9xaPZgjBB17U>rP%!ziE2_U*rrhn7r{xwp=g zPk-}UxxDI#?0xA)ObaeZvaM8m&BHC_@vh9LK5!Hdzxv1#=iiEp4}l5pMHg0r0*6r~ zdBnx-rHcrh5~fa_DsR5|CWPYT|A6%=LjdjUtFOK)%a<=VzuL_-br=xN{n4XG8}C@K zVCjf8YsxwIC#9bQrp#%Ft@>&C%u!}`3G6Z&)7>~ju46fTD;&sMQnDJ~9(X~%_q|)? z#(6Vk(~ezol({$;$o&AWC3$~dbY9_>^6WZl7a$5;R!~3`;CX@dP#EjbMzik=a5^9Z z=yK6?;3WS!`g$HqPO=dDqnCM*V_*(c zGDqNI&gDHK zW5x^z5|m>8C1XJ9c##2c%$uc^;3w*H3Ly4S7Z{eCYfu1DqQDt@kKmLufO0RTKXExA zGT-u{=D)aGw+ZszdwVg?9O}$OS7M@28eucnam%{pUB>dG59RXdr$3YNOS&nagBk7qHbeK1IO+;YpeApK_UZ?p7!F#_-5N`8tNG)>cagZlbi^4VuUk-2jV znlggj4p$sL5c)IO zw(bAPqD2$r(MSJA4jrm6-|-{tQ}Xp9!F`zfsR-Kp0ZPP^;-hW0(>p86xwNoQ&d<)~ z9>Ezwfm5ag;(@#zr9VpPzxn2G4S)ZAN)J8`$}&bXU_a zD_e!7-pkPRZ<1NFu9V{9{YL6phf=Q&%9x4c`*V0dATEU#0=T_ONjB@SzFu~`tzlXR zi2_%2?b>x~U7cAGpl-%5j5nQEO3C)MK(==VvTFPf0 zHT~VYU&Xxts{F@)+=un_rLt#FiBb00hDyEd$GPkR0`S*F{n*C`g_A_~BDVHl^K74e z(6}AeH2Oq=OMn7Hb8^lI3Y<;`NY4F~ey;mVN{#{y(rx~!d0Yw3!Be8EZ>MP(rBE)V z>2KY-OnUYDt330}!!mT}VA;3tfRTJkz2^m@Q&9yZNgWu3Q-E0lCYaPFT&6Jl;+5A- zhd`UgItX20I93Ei0aVrBCOU1p!0BRuCeq)n+c<$`+-UkFye;wRVde)o1rPyvDkxzCP)1;%y@=^W^h{|s zsxaJ(x&Y`uG&h$hFcw5PZKsA#mkwa8ei*nrUFkna=}%hyNLY0oG?$RBBx%^rXE;5b zX|(AdJ-P=koBmR6x@n+1^w3?H`>Uj(0Uv(AGLO>Tl4F}JLk8d!z@L)CIW;5EtY;I{ zj%Nz9yymIjBrTDjLlnr%i(T2RTj7?Pnt8ymbtr#Ybb-@>02~DfR)m`WqOM)X$%+-6 z`+4i8($7I65tO*;;q-hv&ZXRuBcH*#_cM9$!3py4!wYfH;-Jy=InJ#~K9PX;gMk9m zgx??lep1Xe2jfOI0`R`d44J|tOgcNw4!gO{^Fc4XWxPgeYF?Lr{nxp2<&_sh`P*lt zo^?q4wmPl^3{%iJZ*-(9v%xoGH()t7Ve908yZO_pX~0D1gU0IpO}3$l$LOCh1F#b6?MK!X}$ z-}w%J$VDQS=U9L9o8Odk&pkIG5bph%cP#FN8DQD6W%By#ubX+(o@+4>d>xurzdN6N z@(06LuH0|teoCkA_;IjWBfedR55}K(X=vC3nE#E@^uO_qc~V+>2=M4?`W&PaaqJH@ ze{|eT139z>pr7VSG@Oi+XmA?Wu=-55!*<+G*D(ETOq&J;dh{p+1KfzD^*ivpM2|lD zX!5)O+hITF&YgSa7=WFnv$uQo0g-Ip^1*NBWY3;`>*6k5M&tPNN62>Pe)Qc8+OZIy zz{@jwRn?!$!O|Dx{`)7(_19lzls(>;2BpTvmX~>^!>#;bpE#|>&?b#RUBCczyobt| z2{VpM^VGM~w4COtZFF;{C8PmaWBLF*2 zr?5}hO(B5eLmXS`fje)w;hV$WeRn_i`=L-1x-;ALIWU=+!tuwX^6+0I+W3xq=U-;Z z_;JHif{XT-IC~?(q8w#+V z<8P3ICGSaH=nc95+cRX;xkIFMM>&peV>*a7h=ZSf;lGpNlmS2;si94P2moftM6mR9 z_CeEZ0^8{tRzJNQ)B9jWU{Ii}?Andh)z3rsuYiWt1O-^`MBOQ10LSe3LHh5SH}7wT zz4soaUw8c2UFy4SBR;1L$5$i8J71ALMO)>Y&&`zQdn}h_Z$B&3YNyJWsNcmlckm84Lq};3Rqt^a=Cr;DoeltA=1qOFV}@j}l(v>ZcPpSXt6`XRV^S`Aw=b7bmsiUDzgZw3 zb^BO~5ABz#8I|(%;h#&v7x^+_#{{|fz+}9AI~c$Hiw`{o8t_}d(3bJCr{0%?+E&MY zaXO>rubK>?=3qA9K`^}s{Y>H3>bXs)>T6&7Ko__Iy1?6IWwSOOIkFrpg$f)cKdC5i zk{KW={ha$RaOeJdoUJ@I&7aCmB(huf?)j}uou4mvJaL=69C=M%I`E=2_!`8IU-yuF ztdGVYk#|PCEAJMslp)&&$;HK!WpreWbi=24qC^G!iysFna2-KnR+ABMc+-3>1o3o2 zr4!taw^r7RDYOoKg96Y6hyqtb7ua;<2;U=EhhEeHLz624mOT-7G8rH#{jmBi=G?zx z#h)=I$ENxF{LsGZHcIJ%8hspH+Fx1O~?EjJcweb@uf+St44Gs{t zjRZ$c@pE4|{1H!}!h|YWG2%U0xo?#W-a1Go?VTheA|s_Rr>jAQMuQ5_=J79+BLmPd zLnY9dgRviA7y!tmwMZx>R!d>tBR#*RG|i)L>jG1$3jhT`{B>xr7Csg!?jFa9ED28* z0~qN?pL4Id=4NRAock&LBp4rst|jG<#BY!!Klw@k01$ymL_t)t11qrXdSCwWrR(vk zuwNc4{=R$>-(lAOrUh***=Dj?0D^@Iv=kB*`U4dXZGzN(G&=u64SqBEt)4?&mAAskf<6nl8@wBih!?H~GD4WbrysBzBR|FV>dTg+nuC`*1H*IA4bFvsf*Zm9U&HKjrD^~1FlYaO1E<-eB1l9ES z?R`!94%sFT|89YljM^tZ*z<&xIb~*$Dd`FRY3{RWHt9AC52!%6Z%Cj5PTW@j72X@M zN>=Y%BZIaS$%XqS%CN{VDabCANLCa-7zJH{_KCzlHp#x$L&B&J@OU^!+7O+Ya3-7} z5W`++cDm*#ebiCrNTwl>UWX{avxC$Hhyoj{s*EmxqILK|&Dx%r9`HeGdF-*r%*Usx z#A+LCw>5V%7=X`#b$={()~s6|%*h#MNk6IL4h}oQ&e5@hZbzXXK+`YY^MZ`KqDCJ0 z%|iKe*N^0vdwwM~{%S*x7Kv{W-ZY#RPohF25C*G?C{SVBfE}{!&<>zNfsEcUTE-q6 zE9VCL;oE?)DFB5cKm~#cUkq(Pe`yV*IT)!f(anvT5=sZ$_A`Z9-Ofvor{|e`{OL3KN-bu`Eu@0NI&=coA3DXVdzMFqv=QY z7-etj?S*pZ&u)_!ad`8k120JjH<_EL0hr#CmKAyvs`gDmm0|3H881a(E zMx4$6z1;rDNSXRCljW)MU&y;PD~zUpT*PPNbT%_+*v&D24JtsKX+88|g%T?wDr^TT zP**6BQ9DP;=tHAqU~Z8F;#v4f*`qK9;T5qHB)X2t@%rq%>H>c{aA4MF&;@Y9{)FuU zEiwQJs6@2J&;+>$0IoA<{g80?4L96(-ij5)t?u~IrhlYrt<*QXA&Z~5N`~G$5Ssqu zvaa#3DNUbLB=P9Hd^;^Y%(z~r0V{5$6BW#I5~7V=e{l*NskpFGR*hIK@9%wI&fj^S z^epKo6>AQQQ&kH~qffGc3O?KHoM7}MbC5}JyJI18rn2n1oyV^8TSKD?3JeNh8ZavY zB%3_~-IGzD^=+5zqn(IwiwuydQlbq$YqYAWBJYYTW zo>$yXGv@`6KwaRf-o53`1PY)B=9kMc9hemX`^BrR&hrBi3F(&g>(}FO<->ycJxNGy z7!MObxyb6(Yrgf^W6K|3yS8g|*|N>%te=*l?+OXO!&@U|`~M*44&5n#_x!C=JbbVG ztoTVeXlwdfkp!bt!f9Cj^!)U48gGlQZF2Zno<1&r4D%F5H|mFug%w3;r%%Rx+(l+> z=qZ;U?k+{)9LdRp87gS-0~kVw3j9l^a39>$*E}uTl5gj6FnL&IXH8A)@vU2ZKiINm z8M^!rC{uFfl~>jl;sq09#!lRub-6^WtgMv#?z>NJzWHXeV{0!PJrO{qmOtn6#v5-K zj!J_T?)OJvfXJIY`?d%3@xI|!BiKk)p6KyB+)5~c*lh1Z+XO~kZK$=<`efVq~VZX5`E*}E&G=>vWZ`!xR$m8z`@p3S{{x~R%kB5~^Zjfik@0H)~+9wyTE0Ak9_mRs>feP8V zl5J3-DI@T<96uey)_g7R<+FP{HAG!tdY?W8pI25Iy8vj_?7RT$lZHeEGJ==$PEC|l zB%rBL!^nc>?~ecx@@CDN_h2}D0i=I5shw<}2taAT?`7ew+?Qm*Ka7^E|NCTlvi#@r zUd_8rHGQo`LeQoAnr5dntZ_SE)7595?KIu?EvawD2wDzh7>rU^z>Hu}0ifSd6qhwc zhh@#7!_se4Sf+j2OJE`R}66!_!* z{nvh0S-BkMYtI#d)=fijHf3Ck44{RY`q1NJ(FiySntw|AQ#*dHO~2;ICornKDNCN5 zD(BxbK>mII4`qGhx~7`GHq6nb^YS%K^S$Cs(~ITQX%tMVuKPp z-REOzT9YtP;2h`zS5p@#DVg;tP=LAs7{OB)U|lbFj0}+6?}zmNm-F6!+nxK}9X~u2 zH2v~}Z^(cP_CV8LD0_zOktg;*)At=T57A`4XKy%ybY8xlreQ71xP4_xx67o5EkfEv z%@|IvZ{HJPyjbSy3a~2}RKR(K-IMC%XQOw@vwQc*AWL-tpa7-;>H>d7)-j>Lu`qzK`lC$x4fVKf&6;!GHCjEsRI9wiTKH<c38{7XV9Pmbp`A}PzN|#6q6ML%VfpjGAY`TBQv-5bx|QuC|!XH)D`?V)of59 z@l2jlk32h_%dMm?;G%$85gZE&w3z{Lj>Cei-D_F6;QdRkTnSN()S@6?Y z^1{)V<(1NxVbk}}^!b1sCAyY;=GpmnTea+RKFs3{Np&8@|}z2iG$C` z%DVTwHGTFv-6bBh8L_n-^YvnyhTH0=w?kri5zH&Ct@qG!dN2A+ql3@sK8XrZNIImw zesE0Q8dNH89WIr@+w#gEwX=$xL5?PO>(c7}*>1lG_!v6BVOMW05qU(*a=L!4lwKXtJ!kU+! z&v>RZ&9i;BV>>&~CbEX<+hLZ^6u0y2b{VEiPt$Za*HFyp3MiOFg+h@Xld9$M(Oc!o z;xFW~tvzH;aX-1df~b&_M1{o99BWHSpSMUufn(AI+QI+{%|DihbN&wmgBQpfZ@%Ny zU_D>hbDccA>}K&@9fwVyn*OdNr#74O*<~FN^^=d0$kTNC_Qi5`+zvC(c6OeI(}|o; zV3tcyOOIajwiNJx4}| z3Z;;`LKbxjh!*>na3_iaZD9aNdIVO#;5}UT|8Du#Xz`xs{6!-U$lw0%ZrOdoZlmd! zXVUbwryL+UFJA{w^X+(gn&#Q<*lFouB_z|m!ggAE-Sqgelx4r$;y}UV3WB->-_(uW6d^6=#~A&a!lx-kMLs zDe=^29SyhUx7NO$&wd@Jvr&PHpo5L3n)9Oa`rs0I{ZNSv#o5N|wx45AVN|F<3KFQm z=@z?sW<|iA!arJe0d%EByFe=pfYX&=fG!2ucMl)2aL9N6`Fqi;7dZZfPu?!e>t2MW z{|XLGX3+F?5I8t=I!GE;KRrLaoW?Wx+75}RVV1Rt%CH^Rd`-&~*L&LKw5)wEEl2-k zIEWpL@8~mE5RL>fNyLB(TP~`Se;ZvTKi#`cuGrd3=9Ki4%YX{~5~vUg`kc{)1+f{H zT>uMoo*2sb9zjbC0NoFt-+=Uw9)05j%YMF2X5Sxku6^t}`Dyu6vZ{6^zNigl2LC+g zdkzE#gczbe)705%4AZf!I!$BTPSMyUYyD=|tcw>jS|mPi zrv$KlJFI1xrk7Wmou?9+sT}jQjP2WDwwE5a)6&Cw|4csna*7>4RKX){LAC^h8-Qe={Z`;ppu4G_K{9 zxEeoEU)xvT>)y;e4UR&GW2@#)TtPT^Z>2K3QC=EcEHC#3DwO0qm->6k=<>oj>kn5x zhk|9BHf_Rez|S5urJ5%L=rc4lIC=5-jTGp>ooBb zgQR2CB(J52RiO=cNil*~o0 z>LgNwZTlJou`^+1Y9aWU7{C<4+MfdG&o9VtgehP@nrM?iTJ3)sJd+~;sK$w)XhlUu zBpeQ>xWnp`=b=!|udc3^!-o%>Gl81+rQh*JfTw|SvDwtE8-JUkscVq|nil;s))_~j z#VLU20Ijoto$>k4nrEW+pS}X%!+(hYXAKK@Kj@blz4y4BHK|`Rz*$3T?+5+=>&fNh Twd6(O00000NkvXXu0mjfNfhR^ literal 0 HcmV?d00001 diff --git a/Source/QtDialog/CMakeSetup32.png b/Source/QtDialog/CMakeSetup32.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbcee413c54c4d10e0c484c4d57a3c3eb0f9761 GIT binary patch literal 358 zcmV-s0h#`ZP);p`P#|k5gaOX1ehQ$a*%U$mXICEv z7-=R2H^3FuhXC42o$&b59kXA>0ZNg9W0pk{oh`_NlMgoiG zN01^BD}@Y@C$4zu6(C2|=fK*##ijCGFx&8#y8X}T3*E!3SIemRGXMYp07*qoM6N<$ Eg5PG87XSbN literal 0 HcmV?d00001 diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx new file mode 100644 index 0000000..45b4cd3 --- /dev/null +++ b/Source/QtDialog/CMakeSetupDialog.cxx @@ -0,0 +1,1153 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "CMakeSetupDialog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "QCMake.h" +#include "QCMakeCacheView.h" +#include "AddCacheEntry.h" +#include "FirstConfigure.h" +#include "cmVersion.h" + +QCMakeThread::QCMakeThread(QObject* p) + : QThread(p), CMakeInstance(NULL) +{ +} + +QCMake* QCMakeThread::cmakeInstance() const +{ + return this->CMakeInstance; +} + +void QCMakeThread::run() +{ + this->CMakeInstance = new QCMake; + // emit that this cmake thread is ready for use + emit this->cmakeInitialized(); + this->exec(); + delete this->CMakeInstance; + this->CMakeInstance = NULL; +} + +CMakeSetupDialog::CMakeSetupDialog() + : ExitAfterGenerate(true), CacheModified(false), ConfigureNeeded(true), CurrentState(Interrupting) +{ + QString title = QString(tr("CMake %1")); + title = title.arg(cmVersion::GetCMakeVersion()); + this->setWindowTitle(title); + + // create the GUI + QSettings settings; + settings.beginGroup("Settings/StartPath"); + int h = settings.value("Height", 500).toInt(); + int w = settings.value("Width", 700).toInt(); + this->resize(w, h); + + this->AddVariableCompletions = settings.value("AddVariableCompletionEntries", + QStringList("CMAKE_INSTALL_PREFIX")).toStringList(); + + QWidget* cont = new QWidget(this); + this->setupUi(cont); + this->Splitter->setStretchFactor(0, 3); + this->Splitter->setStretchFactor(1, 1); + this->setCentralWidget(cont); + this->ProgressBar->reset(); + this->RemoveEntry->setEnabled(false); + this->AddEntry->setEnabled(false); + + QByteArray p = settings.value("SplitterSizes").toByteArray(); + this->Splitter->restoreState(p); + + bool groupView = settings.value("GroupView", false).toBool(); + this->setGroupedView(groupView); + this->groupedCheck->setCheckState(groupView ? Qt::Checked : Qt::Unchecked); + + bool advancedView = settings.value("AdvancedView", false).toBool(); + this->setAdvancedView(advancedView); + this->advancedCheck->setCheckState(advancedView?Qt::Checked : Qt::Unchecked); + + QMenu* FileMenu = this->menuBar()->addMenu(tr("&File")); + this->ReloadCacheAction = FileMenu->addAction(tr("&Reload Cache")); + QObject::connect(this->ReloadCacheAction, SIGNAL(triggered(bool)), + this, SLOT(doReloadCache())); + this->DeleteCacheAction = FileMenu->addAction(tr("&Delete Cache")); + QObject::connect(this->DeleteCacheAction, SIGNAL(triggered(bool)), + this, SLOT(doDeleteCache())); + this->ExitAction = FileMenu->addAction(tr("E&xit")); + this->ExitAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q)); + QObject::connect(this->ExitAction, SIGNAL(triggered(bool)), + this, SLOT(close())); + + QMenu* ToolsMenu = this->menuBar()->addMenu(tr("&Tools")); + this->ConfigureAction = ToolsMenu->addAction(tr("&Configure")); + // prevent merging with Preferences menu item on Mac OS X + this->ConfigureAction->setMenuRole(QAction::NoRole); + QObject::connect(this->ConfigureAction, SIGNAL(triggered(bool)), + this, SLOT(doConfigure())); + this->GenerateAction = ToolsMenu->addAction(tr("&Generate")); + QObject::connect(this->GenerateAction, SIGNAL(triggered(bool)), + this, SLOT(doGenerate())); + QAction* showChangesAction = ToolsMenu->addAction(tr("&Show My Changes")); + QObject::connect(showChangesAction, SIGNAL(triggered(bool)), + this, SLOT(showUserChanges())); +#if defined(Q_WS_MAC) + this->InstallForCommandLineAction + = ToolsMenu->addAction(tr("&Install For Command Line Use")); + QObject::connect(this->InstallForCommandLineAction, SIGNAL(triggered(bool)), + this, SLOT(doInstallForCommandLine())); +#endif + QMenu* OptionsMenu = this->menuBar()->addMenu(tr("&Options")); + this->SuppressDevWarningsAction = + OptionsMenu->addAction(tr("&Suppress dev Warnings (-Wno-dev)")); + this->SuppressDevWarningsAction->setCheckable(true); + this->WarnUninitializedAction = + OptionsMenu->addAction(tr("&Warn Uninitialized (--warn-uninitialized)")); + this->WarnUninitializedAction->setCheckable(true); + this->WarnUnusedAction = + OptionsMenu->addAction(tr("&Warn Unused (--warn-unused-vars)")); + this->WarnUnusedAction->setCheckable(true); + + QAction* debugAction = OptionsMenu->addAction(tr("&Debug Output")); + debugAction->setCheckable(true); + QObject::connect(debugAction, SIGNAL(toggled(bool)), + this, SLOT(setDebugOutput(bool))); + + OptionsMenu->addSeparator(); + QAction* expandAction = OptionsMenu->addAction(tr("&Expand Grouped Entries")); + QObject::connect(expandAction, SIGNAL(triggered(bool)), + this->CacheValues, SLOT(expandAll())); + QAction* collapseAction = OptionsMenu->addAction(tr("&Collapse Grouped Entries")); + QObject::connect(collapseAction, SIGNAL(triggered(bool)), + this->CacheValues, SLOT(collapseAll())); + + QMenu* HelpMenu = this->menuBar()->addMenu(tr("&Help")); + QAction* a = HelpMenu->addAction(tr("About")); + QObject::connect(a, SIGNAL(triggered(bool)), + this, SLOT(doAbout())); + a = HelpMenu->addAction(tr("Help")); + QObject::connect(a, SIGNAL(triggered(bool)), + this, SLOT(doHelp())); + + QShortcut* filterShortcut = new QShortcut(QKeySequence::Find, this); + QObject::connect(filterShortcut, SIGNAL(activated()), + this, SLOT(startSearch())); + + this->setAcceptDrops(true); + + // get the saved binary directories + QStringList buildPaths = this->loadBuildPaths(); + this->BinaryDirectory->addItems(buildPaths); + + this->BinaryDirectory->setCompleter(new QCMakeFileCompleter(this, true)); + this->SourceDirectory->setCompleter(new QCMakeFileCompleter(this, true)); + + // fixed pitch font in output window + QFont outputFont("Courier"); + this->Output->setFont(outputFont); + this->ErrorFormat.setForeground(QBrush(Qt::red)); + + // start the cmake worker thread + this->CMakeThread = new QCMakeThread(this); + QObject::connect(this->CMakeThread, SIGNAL(cmakeInitialized()), + this, SLOT(initialize()), Qt::QueuedConnection); + this->CMakeThread->start(); + + this->enterState(ReadyConfigure); + + ProgressOffset = 0.0; + ProgressFactor = 1.0; +} + +void CMakeSetupDialog::initialize() +{ + // now the cmake worker thread is running, lets make our connections to it + QObject::connect(this->CMakeThread->cmakeInstance(), + SIGNAL(propertiesChanged(const QCMakePropertyList&)), + this->CacheValues->cacheModel(), + SLOT(setProperties(const QCMakePropertyList&))); + + QObject::connect(this->ConfigureButton, SIGNAL(clicked(bool)), + this, SLOT(doConfigure())); + + QObject::connect(this->CMakeThread->cmakeInstance(), SIGNAL(configureDone(int)), + this, SLOT(exitLoop(int))); + QObject::connect(this->CMakeThread->cmakeInstance(), SIGNAL(generateDone(int)), + this, SLOT(exitLoop(int))); + + QObject::connect(this->GenerateButton, SIGNAL(clicked(bool)), + this, SLOT(doGenerate())); + + QObject::connect(this->BrowseSourceDirectoryButton, SIGNAL(clicked(bool)), + this, SLOT(doSourceBrowse())); + QObject::connect(this->BrowseBinaryDirectoryButton, SIGNAL(clicked(bool)), + this, SLOT(doBinaryBrowse())); + + QObject::connect(this->BinaryDirectory, SIGNAL(editTextChanged(QString)), + this, SLOT(onBinaryDirectoryChanged(QString))); + QObject::connect(this->SourceDirectory, SIGNAL(textChanged(QString)), + this, SLOT(onSourceDirectoryChanged(QString))); + + QObject::connect(this->CMakeThread->cmakeInstance(), + SIGNAL(sourceDirChanged(QString)), + this, SLOT(updateSourceDirectory(QString))); + QObject::connect(this->CMakeThread->cmakeInstance(), + SIGNAL(binaryDirChanged(QString)), + this, SLOT(updateBinaryDirectory(QString))); + + QObject::connect(this->CMakeThread->cmakeInstance(), + SIGNAL(progressChanged(QString, float)), + this, SLOT(showProgress(QString,float))); + + QObject::connect(this->CMakeThread->cmakeInstance(), + SIGNAL(errorMessage(QString)), + this, SLOT(error(QString))); + + QObject::connect(this->CMakeThread->cmakeInstance(), + SIGNAL(outputMessage(QString)), + this, SLOT(message(QString))); + + QObject::connect(this->groupedCheck, SIGNAL(toggled(bool)), + this, SLOT(setGroupedView(bool))); + QObject::connect(this->advancedCheck, SIGNAL(toggled(bool)), + this, SLOT(setAdvancedView(bool))); + QObject::connect(this->Search, SIGNAL(textChanged(QString)), + this, SLOT(setSearchFilter(QString))); + + QObject::connect(this->CMakeThread->cmakeInstance(), + SIGNAL(generatorChanged(QString)), + this, SLOT(updateGeneratorLabel(QString))); + this->updateGeneratorLabel(QString()); + + QObject::connect(this->CacheValues->cacheModel(), + SIGNAL(dataChanged(QModelIndex,QModelIndex)), + this, SLOT(setCacheModified())); + + QObject::connect(this->CacheValues->selectionModel(), + SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SLOT(selectionChanged())); + QObject::connect(this->RemoveEntry, SIGNAL(clicked(bool)), + this, SLOT(removeSelectedCacheEntries())); + QObject::connect(this->AddEntry, SIGNAL(clicked(bool)), + this, SLOT(addCacheEntry())); + + QObject::connect(this->SuppressDevWarningsAction, SIGNAL(triggered(bool)), + this->CMakeThread->cmakeInstance(), SLOT(setSuppressDevWarnings(bool))); + + QObject::connect(this->WarnUninitializedAction, SIGNAL(triggered(bool)), + this->CMakeThread->cmakeInstance(), + SLOT(setWarnUninitializedMode(bool))); + QObject::connect(this->WarnUnusedAction, SIGNAL(triggered(bool)), + this->CMakeThread->cmakeInstance(), + SLOT(setWarnUnusedMode(bool))); + + if(!this->SourceDirectory->text().isEmpty() || + !this->BinaryDirectory->lineEdit()->text().isEmpty()) + { + this->onSourceDirectoryChanged(this->SourceDirectory->text()); + this->onBinaryDirectoryChanged(this->BinaryDirectory->lineEdit()->text()); + } + else + { + this->onBinaryDirectoryChanged(this->BinaryDirectory->lineEdit()->text()); + } +} + +CMakeSetupDialog::~CMakeSetupDialog() +{ + QSettings settings; + settings.beginGroup("Settings/StartPath"); + settings.setValue("Height", this->height()); + settings.setValue("Width", this->width()); + settings.setValue("SplitterSizes", this->Splitter->saveState()); + + // wait for thread to stop + this->CMakeThread->quit(); + this->CMakeThread->wait(2000); +} + +bool CMakeSetupDialog::prepareConfigure() +{ + // make sure build directory exists + QString bindir = this->CMakeThread->cmakeInstance()->binaryDirectory(); + QDir dir(bindir); + if(!dir.exists()) + { + QString msg = tr("Build directory does not exist, " + "should I create it?") + + "\n\n" + + tr("Directory: "); + msg += bindir; + QString title = tr("Create Directory"); + QMessageBox::StandardButton btn; + btn = QMessageBox::information(this, title, msg, + QMessageBox::Yes | QMessageBox::No); + if(btn == QMessageBox::No) + { + return false; + } + if(!dir.mkpath(".")) + { + QMessageBox::information(this, tr("Create Directory Failed"), + QString(tr("Failed to create directory %1")).arg(dir.path()), + QMessageBox::Ok); + + return false; + } + } + + // if no generator, prompt for it and other setup stuff + if(this->CMakeThread->cmakeInstance()->generator().isEmpty()) + { + if(!this->setupFirstConfigure()) + { + return false; + } + } + + // remember path + this->addBinaryPath(dir.absolutePath()); + + return true; +} + +void CMakeSetupDialog::exitLoop(int err) +{ + this->LocalLoop.exit(err); +} + +void CMakeSetupDialog::doConfigure() +{ + if(this->CurrentState == Configuring) + { + // stop configure + doInterrupt(); + return; + } + + if(!prepareConfigure()) + { + return; + } + + this->enterState(Configuring); + + bool ret = doConfigureInternal(); + + if(ret) + { + this->ConfigureNeeded = false; + } + + if(ret && !this->CacheValues->cacheModel()->newPropertyCount()) + { + this->enterState(ReadyGenerate); + } + else + { + this->enterState(ReadyConfigure); + this->CacheValues->scrollToTop(); + } + this->ProgressBar->reset(); +} + +bool CMakeSetupDialog::doConfigureInternal() +{ + this->Output->clear(); + this->CacheValues->selectionModel()->clear(); + + QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(), + "setProperties", Qt::QueuedConnection, + Q_ARG(QCMakePropertyList, + this->CacheValues->cacheModel()->properties())); + QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(), + "configure", Qt::QueuedConnection); + + int err = this->LocalLoop.exec(); + + if(err != 0) + { + QMessageBox::critical(this, tr("Error"), + tr("Error in configuration process, project files may be invalid"), + QMessageBox::Ok); + } + + return 0 == err; +} + +void CMakeSetupDialog::doInstallForCommandLine() +{ + QMacInstallDialog setupdialog(0); + setupdialog.exec(); +} + +bool CMakeSetupDialog::doGenerateInternal() +{ + QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(), + "generate", Qt::QueuedConnection); + + int err = this->LocalLoop.exec(); + + if(err != 0) + { + QMessageBox::critical(this, tr("Error"), + tr("Error in generation process, project files may be invalid"), + QMessageBox::Ok); + } + + return 0 == err; +} + +void CMakeSetupDialog::doGenerate() +{ + if(this->CurrentState == Generating) + { + // stop generate + doInterrupt(); + return; + } + + // see if we need to configure + // we'll need to configure if: + // the configure step hasn't been done yet + // generate was the last step done + if(this->ConfigureNeeded) + { + if(!prepareConfigure()) + { + return; + } + } + + this->enterState(Generating); + + bool config_passed = true; + if(this->ConfigureNeeded) + { + this->CacheValues->cacheModel()->setShowNewProperties(false); + this->ProgressFactor = 0.5; + config_passed = doConfigureInternal(); + this->ProgressOffset = 0.5; + } + + if(config_passed) + { + doGenerateInternal(); + } + + this->ProgressOffset = 0.0; + this->ProgressFactor = 1.0; + this->CacheValues->cacheModel()->setShowNewProperties(true); + + this->enterState(ReadyConfigure); + this->ProgressBar->reset(); + + this->ConfigureNeeded = true; +} + +void CMakeSetupDialog::closeEvent(QCloseEvent* e) +{ + // prompt for close if there are unsaved changes, and we're not busy + if(this->CacheModified) + { + QString msg = tr("You have changed options but not rebuilt, " + "are you sure you want to exit?"); + QString title = tr("Confirm Exit"); + QMessageBox::StandardButton btn; + btn = QMessageBox::critical(this, title, msg, + QMessageBox::Yes | QMessageBox::No); + if(btn == QMessageBox::No) + { + e->ignore(); + } + } + + // don't close if we're busy, unless the user really wants to + if(this->CurrentState == Configuring) + { + QString msg = "You are in the middle of a Configure.\n" + "If you Exit now the configure information will be lost.\n" + "Are you sure you want to Exit?"; + QString title = tr("Confirm Exit"); + QMessageBox::StandardButton btn; + btn = QMessageBox::critical(this, title, msg, + QMessageBox::Yes | QMessageBox::No); + if(btn == QMessageBox::No) + { + e->ignore(); + } + else + { + this->doInterrupt(); + } + } + + // let the generate finish + if(this->CurrentState == Generating) + { + e->ignore(); + } +} + +void CMakeSetupDialog::doHelp() +{ + QString msg = tr("CMake is used to configure and generate build files for " + "software projects. The basic steps for configuring a project are as " + "follows:\r\n\r\n1. Select the source directory for the project. This should " + "contain the CMakeLists.txt files for the project.\r\n\r\n2. Select the build " + "directory for the project. This is the directory where the project will be " + "built. It can be the same or a different directory than the source " + "directory. For easy clean up, a separate build directory is recommended. " + "CMake will create the directory if it does not exist.\r\n\r\n3. Once the " + "source and binary directories are selected, it is time to press the " + "Configure button. This will cause CMake to read all of the input files and " + "discover all the variables used by the project. The first time a variable " + "is displayed it will be in Red. Users should inspect red variables making " + "sure the values are correct. For some projects the Configure process can " + "be iterative, so continue to press the Configure button until there are no " + "longer red entries.\r\n\r\n4. Once there are no longer red entries, you " + "should click the Generate button. This will write the build files to the build " + "directory."); + + QDialog dialog; + QFontMetrics met(this->font()); + int msgWidth = met.width(msg); + dialog.setMinimumSize(msgWidth/15,20); + dialog.setWindowTitle(tr("Help")); + QVBoxLayout* l = new QVBoxLayout(&dialog); + QLabel* lab = new QLabel(&dialog); + lab->setText(msg); + lab->setWordWrap(true); + QDialogButtonBox* btns = new QDialogButtonBox(QDialogButtonBox::Ok, + Qt::Horizontal, &dialog); + QObject::connect(btns, SIGNAL(accepted()), &dialog, SLOT(accept())); + l->addWidget(lab); + l->addWidget(btns); + dialog.exec(); +} + +void CMakeSetupDialog::doInterrupt() +{ + this->enterState(Interrupting); + this->CMakeThread->cmakeInstance()->interrupt(); +} + +void CMakeSetupDialog::doSourceBrowse() +{ + QString dir = QFileDialog::getExistingDirectory(this, + tr("Enter Path to Source"), this->SourceDirectory->text()); + if(!dir.isEmpty()) + { + this->setSourceDirectory(dir); + } +} + +void CMakeSetupDialog::updateSourceDirectory(const QString& dir) +{ + if(this->SourceDirectory->text() != dir) + { + this->SourceDirectory->blockSignals(true); + this->SourceDirectory->setText(dir); + this->SourceDirectory->blockSignals(false); + } +} + +void CMakeSetupDialog::updateBinaryDirectory(const QString& dir) +{ + if(this->BinaryDirectory->currentText() != dir) + { + this->BinaryDirectory->blockSignals(true); + this->BinaryDirectory->setEditText(dir); + this->BinaryDirectory->blockSignals(false); + } +} + +void CMakeSetupDialog::doBinaryBrowse() +{ + QString dir = QFileDialog::getExistingDirectory(this, + tr("Enter Path to Build"), this->BinaryDirectory->currentText()); + if(!dir.isEmpty() && dir != this->BinaryDirectory->currentText()) + { + this->setBinaryDirectory(dir); + } +} + +void CMakeSetupDialog::setBinaryDirectory(const QString& dir) +{ + this->BinaryDirectory->setEditText(dir); +} + +void CMakeSetupDialog::onSourceDirectoryChanged(const QString& dir) +{ + this->Output->clear(); + QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(), + "setSourceDirectory", Qt::QueuedConnection, Q_ARG(QString, dir)); +} + +void CMakeSetupDialog::onBinaryDirectoryChanged(const QString& dir) +{ + QString title = QString(tr("CMake %1 - %2")); + title = title.arg(cmVersion::GetCMakeVersion()); + title = title.arg(dir); + this->setWindowTitle(title); + + this->CacheModified = false; + this->CacheValues->cacheModel()->clear(); + qobject_cast(this->CacheValues->itemDelegate())->clearChanges(); + this->Output->clear(); + QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(), + "setBinaryDirectory", Qt::QueuedConnection, Q_ARG(QString, dir)); +} + +void CMakeSetupDialog::setSourceDirectory(const QString& dir) +{ + this->SourceDirectory->setText(dir); +} + +void CMakeSetupDialog::showProgress(const QString& /*msg*/, float percent) +{ + percent = (percent * ProgressFactor) + ProgressOffset; + this->ProgressBar->setValue(qRound(percent * 100)); +} + +void CMakeSetupDialog::error(const QString& msg) +{ + this->Output->setCurrentCharFormat(this->ErrorFormat); + this->Output->append(msg); +} + +void CMakeSetupDialog::message(const QString& msg) +{ + this->Output->setCurrentCharFormat(this->MessageFormat); + this->Output->append(msg); +} + +void CMakeSetupDialog::setEnabledState(bool enabled) +{ + // disable parts of the GUI during configure/generate + this->CacheValues->cacheModel()->setEditEnabled(enabled); + this->SourceDirectory->setEnabled(enabled); + this->BrowseSourceDirectoryButton->setEnabled(enabled); + this->BinaryDirectory->setEnabled(enabled); + this->BrowseBinaryDirectoryButton->setEnabled(enabled); + this->ReloadCacheAction->setEnabled(enabled); + this->DeleteCacheAction->setEnabled(enabled); + this->ExitAction->setEnabled(enabled); + this->ConfigureAction->setEnabled(enabled); + this->AddEntry->setEnabled(enabled); + this->RemoveEntry->setEnabled(false); // let selection re-enable it +} + +bool CMakeSetupDialog::setupFirstConfigure() +{ + FirstConfigure dialog; + + // initialize dialog and restore saved settings + + // add generators + dialog.setGenerators(this->CMakeThread->cmakeInstance()->availableGenerators()); + + // restore from settings + dialog.loadFromSettings(); + + if(dialog.exec() == QDialog::Accepted) + { + dialog.saveToSettings(); + this->CMakeThread->cmakeInstance()->setGenerator(dialog.getGenerator()); + + QCMakeCacheModel* m = this->CacheValues->cacheModel(); + + if(dialog.compilerSetup()) + { + QString fortranCompiler = dialog.getFortranCompiler(); + if(!fortranCompiler.isEmpty()) + { + m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_Fortran_COMPILER", + "Fortran compiler.", fortranCompiler, false); + } + QString cxxCompiler = dialog.getCXXCompiler(); + if(!cxxCompiler.isEmpty()) + { + m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_CXX_COMPILER", + "CXX compiler.", cxxCompiler, false); + } + + QString cCompiler = dialog.getCCompiler(); + if(!cCompiler.isEmpty()) + { + m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_C_COMPILER", + "C compiler.", cCompiler, false); + } + } + else if(dialog.crossCompilerSetup()) + { + QString fortranCompiler = dialog.getFortranCompiler(); + if(!fortranCompiler.isEmpty()) + { + m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_Fortran_COMPILER", + "Fortran compiler.", fortranCompiler, false); + } + + QString mode = dialog.getCrossIncludeMode(); + m->insertProperty(QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_INCLUDE", + "CMake Find Include Mode", mode, false); + mode = dialog.getCrossLibraryMode(); + m->insertProperty(QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_LIBRARY", + "CMake Find Library Mode", mode, false); + mode = dialog.getCrossProgramMode(); + m->insertProperty(QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_PROGRAM", + "CMake Find Program Mode", mode, false); + + QString rootPath = dialog.getCrossRoot(); + m->insertProperty(QCMakeProperty::PATH, "CMAKE_FIND_ROOT_PATH", + "CMake Find Root Path", rootPath, false); + + QString systemName = dialog.getSystemName(); + m->insertProperty(QCMakeProperty::STRING, "CMAKE_SYSTEM_NAME", + "CMake System Name", systemName, false); + QString cxxCompiler = dialog.getCXXCompiler(); + m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_CXX_COMPILER", + "CXX compiler.", cxxCompiler, false); + QString cCompiler = dialog.getCCompiler(); + m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_C_COMPILER", + "C compiler.", cCompiler, false); + } + else if(dialog.crossCompilerToolChainFile()) + { + QString toolchainFile = dialog.getCrossCompilerToolChainFile(); + m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_TOOLCHAIN_FILE", + "Cross Compile ToolChain File", toolchainFile, false); + } + return true; + } + + return false; +} + +void CMakeSetupDialog::updateGeneratorLabel(const QString& gen) +{ + QString str = tr("Current Generator: "); + if(gen.isEmpty()) + { + str += tr("None"); + } + else + { + str += gen; + } + this->Generator->setText(str); +} + +void CMakeSetupDialog::doReloadCache() +{ + QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(), + "reloadCache", Qt::QueuedConnection); +} + +void CMakeSetupDialog::doDeleteCache() +{ + QString title = tr("Delete Cache"); + QString msg = "Are you sure you want to delete the cache?"; + QMessageBox::StandardButton btn; + btn = QMessageBox::information(this, title, msg, + QMessageBox::Yes | QMessageBox::No); + if(btn == QMessageBox::No) + { + return; + } + QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(), + "deleteCache", Qt::QueuedConnection); +} + +void CMakeSetupDialog::doAbout() +{ + QString msg = "CMake %1\n" + "Using Qt %2\n" + "www.cmake.org"; + + msg = msg.arg(cmVersion::GetCMakeVersion()); + msg = msg.arg(qVersion()); + + QDialog dialog; + dialog.setWindowTitle(tr("About")); + QVBoxLayout* l = new QVBoxLayout(&dialog); + QLabel* lab = new QLabel(&dialog); + l->addWidget(lab); + lab->setText(msg); + lab->setWordWrap(true); + QDialogButtonBox* btns = new QDialogButtonBox(QDialogButtonBox::Ok, + Qt::Horizontal, &dialog); + QObject::connect(btns, SIGNAL(accepted()), &dialog, SLOT(accept())); + l->addWidget(btns); + dialog.exec(); +} + +void CMakeSetupDialog::setExitAfterGenerate(bool b) +{ + this->ExitAfterGenerate = b; +} + +void CMakeSetupDialog::addBinaryPath(const QString& path) +{ + QString cleanpath = QDir::cleanPath(path); + + // update UI + this->BinaryDirectory->blockSignals(true); + int idx = this->BinaryDirectory->findText(cleanpath); + if(idx != -1) + { + this->BinaryDirectory->removeItem(idx); + } + this->BinaryDirectory->insertItem(0, cleanpath); + this->BinaryDirectory->setCurrentIndex(0); + this->BinaryDirectory->blockSignals(false); + + // save to registry + QStringList buildPaths = this->loadBuildPaths(); + buildPaths.removeAll(cleanpath); + buildPaths.prepend(cleanpath); + this->saveBuildPaths(buildPaths); +} + +void CMakeSetupDialog::dragEnterEvent(QDragEnterEvent* e) +{ + if(!(this->CurrentState == ReadyConfigure || + this->CurrentState == ReadyGenerate)) + { + e->ignore(); + return; + } + + const QMimeData* dat = e->mimeData(); + QList urls = dat->urls(); + QString file = urls.count() ? urls[0].toLocalFile() : QString(); + if(!file.isEmpty() && + (file.endsWith("CMakeCache.txt", Qt::CaseInsensitive) || + file.endsWith("CMakeLists.txt", Qt::CaseInsensitive) ) ) + { + e->accept(); + } + else + { + e->ignore(); + } +} + +void CMakeSetupDialog::dropEvent(QDropEvent* e) +{ + if(!(this->CurrentState == ReadyConfigure || + this->CurrentState == ReadyGenerate)) + { + return; + } + + const QMimeData* dat = e->mimeData(); + QList urls = dat->urls(); + QString file = urls.count() ? urls[0].toLocalFile() : QString(); + if(file.endsWith("CMakeCache.txt", Qt::CaseInsensitive)) + { + QFileInfo info(file); + if(this->CMakeThread->cmakeInstance()->binaryDirectory() != info.absolutePath()) + { + this->setBinaryDirectory(info.absolutePath()); + } + } + else if(file.endsWith("CMakeLists.txt", Qt::CaseInsensitive)) + { + QFileInfo info(file); + if(this->CMakeThread->cmakeInstance()->binaryDirectory() != info.absolutePath()) + { + this->setSourceDirectory(info.absolutePath()); + this->setBinaryDirectory(info.absolutePath()); + } + } +} + +QStringList CMakeSetupDialog::loadBuildPaths() +{ + QSettings settings; + settings.beginGroup("Settings/StartPath"); + + QStringList buildPaths; + for(int i=0; i<10; i++) + { + QString p = settings.value(QString("WhereBuild%1").arg(i)).toString(); + if(!p.isEmpty()) + { + buildPaths.append(p); + } + } + return buildPaths; +} + +void CMakeSetupDialog::saveBuildPaths(const QStringList& paths) +{ + QSettings settings; + settings.beginGroup("Settings/StartPath"); + + int num = paths.count(); + if(num > 10) + { + num = 10; + } + + for(int i=0; iCacheModified = true; + this->enterState(ReadyConfigure); +} + +void CMakeSetupDialog::removeSelectedCacheEntries() +{ + QModelIndexList idxs = this->CacheValues->selectionModel()->selectedRows(); + QList pidxs; + foreach(QModelIndex i, idxs) + { + pidxs.append(i); + } + foreach(QPersistentModelIndex pi, pidxs) + { + this->CacheValues->model()->removeRow(pi.row(), pi.parent()); + } +} + +void CMakeSetupDialog::selectionChanged() +{ + QModelIndexList idxs = this->CacheValues->selectionModel()->selectedRows(); + if(idxs.count() && + (this->CurrentState == ReadyConfigure || + this->CurrentState == ReadyGenerate) ) + { + this->RemoveEntry->setEnabled(true); + } + else + { + this->RemoveEntry->setEnabled(false); + } +} + +void CMakeSetupDialog::enterState(CMakeSetupDialog::State s) +{ + if(s == this->CurrentState) + { + return; + } + + this->CurrentState = s; + + if(s == Interrupting) + { + this->ConfigureButton->setEnabled(false); + this->GenerateButton->setEnabled(false); + } + else if(s == Configuring) + { + this->setEnabledState(false); + this->GenerateButton->setEnabled(false); + this->GenerateAction->setEnabled(false); + this->ConfigureButton->setText(tr("&Stop")); + } + else if(s == Generating) + { + this->CacheModified = false; + this->setEnabledState(false); + this->ConfigureButton->setEnabled(false); + this->GenerateAction->setEnabled(false); + this->GenerateButton->setText(tr("&Stop")); + } + else if(s == ReadyConfigure) + { + this->setEnabledState(true); + this->GenerateButton->setEnabled(true); + this->GenerateAction->setEnabled(true); + this->ConfigureButton->setEnabled(true); + this->ConfigureButton->setText(tr("&Configure")); + this->GenerateButton->setText(tr("&Generate")); + } + else if(s == ReadyGenerate) + { + this->setEnabledState(true); + this->GenerateButton->setEnabled(true); + this->GenerateAction->setEnabled(true); + this->ConfigureButton->setEnabled(true); + this->ConfigureButton->setText(tr("&Configure")); + this->GenerateButton->setText(tr("&Generate")); + } +} + +void CMakeSetupDialog::addCacheEntry() +{ + QDialog dialog(this); + dialog.resize(400, 200); + dialog.setWindowTitle(tr("Add Cache Entry")); + QVBoxLayout* l = new QVBoxLayout(&dialog); + AddCacheEntry* w = new AddCacheEntry(&dialog, this->AddVariableCompletions); + QDialogButtonBox* btns = new QDialogButtonBox( + QDialogButtonBox::Ok | QDialogButtonBox::Cancel, + Qt::Horizontal, &dialog); + QObject::connect(btns, SIGNAL(accepted()), &dialog, SLOT(accept())); + QObject::connect(btns, SIGNAL(rejected()), &dialog, SLOT(reject())); + l->addWidget(w); + l->addStretch(); + l->addWidget(btns); + if(QDialog::Accepted == dialog.exec()) + { + QCMakeCacheModel* m = this->CacheValues->cacheModel(); + m->insertProperty(w->type(), w->name(), w->description(), w->value(), false); + + // only add variable names to the completion which are new + if (!this->AddVariableCompletions.contains(w->name())) + { + this->AddVariableCompletions << w->name(); + // limit to at most 100 completion items + if (this->AddVariableCompletions.size() > 100) + { + this->AddVariableCompletions.removeFirst(); + } + // make sure CMAKE_INSTALL_PREFIX is always there + if (!this->AddVariableCompletions.contains("CMAKE_INSTALL_PREFIX")) + { + this->AddVariableCompletions << QString("CMAKE_INSTALL_PREFIX"); + } + QSettings settings; + settings.beginGroup("Settings/StartPath"); + settings.setValue("AddVariableCompletionEntries", + this->AddVariableCompletions); + } + } +} + +void CMakeSetupDialog::startSearch() +{ + this->Search->setFocus(Qt::OtherFocusReason); + this->Search->selectAll(); +} + +void CMakeSetupDialog::setDebugOutput(bool flag) +{ + QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(), + "setDebugOutput", Qt::QueuedConnection, Q_ARG(bool, flag)); +} + +void CMakeSetupDialog::setGroupedView(bool v) +{ + this->CacheValues->cacheModel()->setViewType(v ? QCMakeCacheModel::GroupView : QCMakeCacheModel::FlatView); + this->CacheValues->setRootIsDecorated(v); + + QSettings settings; + settings.beginGroup("Settings/StartPath"); + settings.setValue("GroupView", v); + +} + +void CMakeSetupDialog::setAdvancedView(bool v) +{ + this->CacheValues->setShowAdvanced(v); + QSettings settings; + settings.beginGroup("Settings/StartPath"); + settings.setValue("AdvancedView", v); +} + +void CMakeSetupDialog::showUserChanges() +{ + QSet changes = + qobject_cast(this->CacheValues->itemDelegate())->changes(); + + QDialog dialog(this); + dialog.setWindowTitle(tr("My Changes")); + dialog.resize(600, 400); + QVBoxLayout* l = new QVBoxLayout(&dialog); + QTextEdit* textedit = new QTextEdit(&dialog); + textedit->setReadOnly(true); + l->addWidget(textedit); + QDialogButtonBox* btns = new QDialogButtonBox(QDialogButtonBox::Close, + Qt::Horizontal, &dialog); + QObject::connect(btns, SIGNAL(rejected()), &dialog, SLOT(accept())); + l->addWidget(btns); + + QString command; + QString cache; + + foreach(QCMakeProperty prop, changes) + { + QString type; + switch(prop.Type) + { + case QCMakeProperty::BOOL: + type = "BOOL"; + break; + case QCMakeProperty::PATH: + type = "PATH"; + break; + case QCMakeProperty::FILEPATH: + type = "FILEPATH"; + break; + case QCMakeProperty::STRING: + type = "STRING"; + break; + } + QString value; + if(prop.Type == QCMakeProperty::BOOL) + { + value = prop.Value.toBool() ? "1" : "0"; + } + else + { + value = prop.Value.toString(); + } + + QString line("%1:%2="); + line = line.arg(prop.Key); + line = line.arg(type); + + command += QString("-D%1\"%2\" ").arg(line).arg(value); + cache += QString("%1%2\n").arg(line).arg(value); + } + + textedit->append(tr("Commandline options:")); + textedit->append(command); + textedit->append("\n"); + textedit->append(tr("Cache file:")); + textedit->append(cache); + + dialog.exec(); +} + +void CMakeSetupDialog::setSearchFilter(const QString& str) +{ + this->CacheValues->selectionModel()->clear(); + this->CacheValues->setSearchFilter(str); +} + + diff --git a/Source/QtDialog/CMakeSetupDialog.h b/Source/QtDialog/CMakeSetupDialog.h new file mode 100644 index 0000000..2599675 --- /dev/null +++ b/Source/QtDialog/CMakeSetupDialog.h @@ -0,0 +1,132 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef CMakeSetupDialog_h +#define CMakeSetupDialog_h + +#include "QCMake.h" +#include +#include +#include +#include "ui_CMakeSetupDialog.h" + +class QCMakeThread; +class CMakeCacheModel; +class QProgressBar; +class QToolButton; + +/// Qt user interface for CMake +class CMakeSetupDialog : public QMainWindow, public Ui::CMakeSetupDialog +{ + Q_OBJECT +public: + CMakeSetupDialog(); + ~CMakeSetupDialog(); + +public slots: + void setBinaryDirectory(const QString& dir); + void setSourceDirectory(const QString& dir); + +protected slots: + void initialize(); + void doConfigure(); + void doGenerate(); + void doInstallForCommandLine(); + void doHelp(); + void doAbout(); + void doInterrupt(); + void error(const QString& message); + void message(const QString& message); + + void doSourceBrowse(); + void doBinaryBrowse(); + void doReloadCache(); + void doDeleteCache(); + void updateSourceDirectory(const QString& dir); + void updateBinaryDirectory(const QString& dir); + void showProgress(const QString& msg, float percent); + void setEnabledState(bool); + bool setupFirstConfigure(); + void updateGeneratorLabel(const QString& gen); + void setExitAfterGenerate(bool); + void addBinaryPath(const QString&); + QStringList loadBuildPaths(); + void saveBuildPaths(const QStringList&); + void onBinaryDirectoryChanged(const QString& dir); + void onSourceDirectoryChanged(const QString& dir); + void setCacheModified(); + void removeSelectedCacheEntries(); + void selectionChanged(); + void addCacheEntry(); + void startSearch(); + void setDebugOutput(bool); + void setAdvancedView(bool); + void setGroupedView(bool); + void showUserChanges(); + void setSearchFilter(const QString& str); + bool prepareConfigure(); + bool doConfigureInternal(); + bool doGenerateInternal(); + void exitLoop(int); + +protected: + + enum State { Interrupting, ReadyConfigure, ReadyGenerate, Configuring, Generating }; + void enterState(State s); + + void closeEvent(QCloseEvent*); + void dragEnterEvent(QDragEnterEvent*); + void dropEvent(QDropEvent*); + + QCMakeThread* CMakeThread; + bool ExitAfterGenerate; + bool CacheModified; + bool ConfigureNeeded; + QAction* ReloadCacheAction; + QAction* DeleteCacheAction; + QAction* ExitAction; + QAction* ConfigureAction; + QAction* GenerateAction; + QAction* SuppressDevWarningsAction; + QAction* WarnUninitializedAction; + QAction* WarnUnusedAction; + QAction* InstallForCommandLineAction; + State CurrentState; + + QTextCharFormat ErrorFormat; + QTextCharFormat MessageFormat; + + QStringList AddVariableCompletions; + + QEventLoop LocalLoop; + + float ProgressOffset; + float ProgressFactor; +}; + +// QCMake instance on a thread +class QCMakeThread : public QThread +{ + Q_OBJECT +public: + QCMakeThread(QObject* p); + QCMake* cmakeInstance() const; + +signals: + void cmakeInitialized(); + +protected: + virtual void run(); + QCMake* CMakeInstance; +}; + +#endif // CMakeSetupDialog_h diff --git a/Source/QtDialog/CMakeSetupDialog.ui b/Source/QtDialog/CMakeSetupDialog.ui new file mode 100644 index 0000000..dc8ee3f --- /dev/null +++ b/Source/QtDialog/CMakeSetupDialog.ui @@ -0,0 +1,310 @@ + + + CMakeSetupDialog + + + + 0 + 0 + 707 + 582 + + + + + 9 + + + 6 + + + + + 0 + + + 6 + + + + + Where is the source code: + + + + + + + + + + Browse &Source... + + + + + + + Where to build the binaries: + + + + + + + + 0 + 0 + + + + true + + + + + + + Browse &Build... + + + + + + + + + Qt::Vertical + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 6 + + + 0 + + + + + 6 + + + 0 + + + + + + 0 + 0 + + + + Search: + + + + + + + + 0 + 0 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 40 + 23 + + + + + + + + Grouped + + + + + + + Advanced + + + + + + + Add New Entry + + + &Add Entry + + + + :/Icons/Plus16.png:/Icons/Plus16.png + + + Qt::ToolButtonTextBesideIcon + + + + + + + Remove Selected Entries + + + &Remove Entry + + + + :/Icons/Delete16.png:/Icons/Delete16.png + + + Qt::ToolButtonTextBesideIcon + + + + + + + + + true + + + QAbstractItemView::ExtendedSelection + + + QAbstractItemView::SelectRows + + + + + + + Press Configure to update and display new values in red, then press Generate to generate selected build files. + + + Qt::AlignCenter + + + true + + + + + + + 6 + + + 0 + + + + + &Configure + + + + + + + &Generate + + + + + + + Current Generator: + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 121 + 27 + + + + + + + + 0 + + + 100 + + + 0 + + + false + + + Qt::Horizontal + + + QProgressBar::BottomToTop + + + + + + + + + + QTextEdit::NoWrap + + + true + + + + + + + + + QCMakeCacheView + QTreeView +

QCMakeCacheView.h
+ + + + + + + diff --git a/Source/QtDialog/Compilers.h b/Source/QtDialog/Compilers.h new file mode 100644 index 0000000..e9c90a5 --- /dev/null +++ b/Source/QtDialog/Compilers.h @@ -0,0 +1,21 @@ + + +#ifndef COMPILERS_HPP +#define COMPILERS_HPP + +#include +#include + +class Compilers : public QWidget, public Ui::Compilers +{ + Q_OBJECT +public: + Compilers(QWidget* p=NULL) : + QWidget(p) + { + this->setupUi(this); + } +}; + +#endif + diff --git a/Source/QtDialog/Compilers.ui b/Source/QtDialog/Compilers.ui new file mode 100644 index 0000000..41f70ac --- /dev/null +++ b/Source/QtDialog/Compilers.ui @@ -0,0 +1,87 @@ + + Compilers + + + + 0 + 0 + 506 + 115 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Compilers + + + + 4 + + + 4 + + + 4 + + + + + C + + + + + + + + + + C++ + + + + + + + + + + Fortran + + + + + + + + + + + + + + QCMakeFilePathEditor + QLineEdit +
QCMakeWidgets.h
+
+
+ + +
diff --git a/Source/QtDialog/CrossCompiler.ui b/Source/QtDialog/CrossCompiler.ui new file mode 100644 index 0000000..1fb1ebf --- /dev/null +++ b/Source/QtDialog/CrossCompiler.ui @@ -0,0 +1,213 @@ + + CrossCompiler + + + + 0 + 0 + 433 + 319 + + + + CrossCompiler + + + + + + + 0 + 0 + + + + Target System + + + + + + + 0 + 0 + + + + Operating System + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Version + + + true + + + + + + + + + + + 0 + 0 + + + + Processor + + + true + + + + + + + + + + + + + + 0 + 0 + + + + Find Program/Library/Include + + + + + + + 0 + 0 + + + + Target Root + + + true + + + + + + + + + + + 0 + 0 + + + + Program Mode + + + + + + + + + + + 0 + 0 + + + + Library Mode + + + + + + + + + + + 0 + 0 + + + + Include Mode + + + + + + + + + + + + + Qt::TabFocus + + + + + + + + QCMakePathEditor + QLineEdit +
QCMakeWidgets.h
+
+ + Compilers + QWidget +
Compilers.h
+ 1 +
+
+ + systemVersion + systemProcessor + CrossCompilers + crossFindRoot + crossProgramMode + crossLibraryMode + crossIncludeMode + + + +
diff --git a/Source/QtDialog/Delete16.png b/Source/QtDialog/Delete16.png new file mode 100644 index 0000000000000000000000000000000000000000..16989fee1288db63c3d4831a6f7ddc52443df7e0 GIT binary patch literal 731 zcmV<10wn#3P)s0$52zK~#9!ty4`;6HydBZ$3IxL52jECL*S_$cTJ}AovmZ1+Y+y z+K4XISRtYbVQXBdAq_!eqH9Pn#!7`BfCeVPAW&GiaHA2aNP&Tw_h#BY7t#qrWW`PH z;=Pk|-o5v{3+#79qv85Ju*RKt;`T##*OgXPlHzAiR|ab8E8ZDK(!+W>+n-86e^Z10 z?c-!}W|zSIuB)vjiu$r!uh2|J%hC=DRoClr!$_jHv%N1Uk{h>u*}?^vpRZ}qmp&Nt zGXOxgN;@VC!otJqDxc4F0EgoBkHz)R8+HQVzk(t5h5;?a4(HaK{wbe&TRuuQaloi1X66b7Js6&OY`eXc?O zG7G7tcJsIYy`q^@{^GF>QNHlFe>f3psx3{)YB03=QyDnfvSQ1=dr$g@N4<}fj|X=y zUXpn36*wQ+5ar9;r`>b2?HPb;oRF?Z18-jJwM=KC(J=WB*1YfA`v>dX9zW4_2%i7| N002ovPDHLkV1l+-LHGaw literal 0 HcmV?d00001 diff --git a/Source/QtDialog/FirstConfigure.cxx b/Source/QtDialog/FirstConfigure.cxx new file mode 100644 index 0000000..f522760 --- /dev/null +++ b/Source/QtDialog/FirstConfigure.cxx @@ -0,0 +1,509 @@ + +#include "FirstConfigure.h" +#include "Compilers.h" + +#include +#include +#include +#include + + +StartCompilerSetup::StartCompilerSetup(QWidget* p) + : QWizardPage(p) +{ + QVBoxLayout* l = new QVBoxLayout(this); + l->addWidget(new QLabel(tr("Specify the generator for this project"))); + this->GeneratorOptions = new QComboBox(this); + l->addWidget(this->GeneratorOptions); + l->addSpacing(6); + + this->CompilerSetupOptions[0] = new QRadioButton("Use default native compilers", this); + this->CompilerSetupOptions[1] = new QRadioButton("Specify native compilers", this); + this->CompilerSetupOptions[2] = new QRadioButton("Specify toolchain file for cross-compiling", this); + this->CompilerSetupOptions[3] = new QRadioButton("Specify options for cross-compiling", this); + l->addWidget(this->CompilerSetupOptions[0]); + l->addWidget(this->CompilerSetupOptions[1]); + l->addWidget(this->CompilerSetupOptions[2]); + l->addWidget(this->CompilerSetupOptions[3]); + + this->CompilerSetupOptions[0]->setChecked(true); + + QObject::connect(this->CompilerSetupOptions[0], SIGNAL(toggled(bool)), + this, SLOT(onSelectionChanged(bool))); + QObject::connect(this->CompilerSetupOptions[1], SIGNAL(toggled(bool)), + this, SLOT(onSelectionChanged(bool))); + QObject::connect(this->CompilerSetupOptions[2], SIGNAL(toggled(bool)), + this, SLOT(onSelectionChanged(bool))); + QObject::connect(this->CompilerSetupOptions[3], SIGNAL(toggled(bool)), + this, SLOT(onSelectionChanged(bool))); +} + +StartCompilerSetup::~StartCompilerSetup() +{ +} + +void StartCompilerSetup::setGenerators(const QStringList& gens) +{ + this->GeneratorOptions->clear(); + this->GeneratorOptions->addItems(gens); +}; + +void StartCompilerSetup::setCurrentGenerator(const QString& gen) +{ + int idx = this->GeneratorOptions->findText(gen); + if(idx != -1) + { + this->GeneratorOptions->setCurrentIndex(idx); + } +} + +QString StartCompilerSetup::getGenerator() const +{ + return this->GeneratorOptions->currentText(); +}; + +bool StartCompilerSetup::defaultSetup() const +{ + return this->CompilerSetupOptions[0]->isChecked(); +} + +bool StartCompilerSetup::compilerSetup() const +{ + return this->CompilerSetupOptions[1]->isChecked(); +} + +bool StartCompilerSetup::crossCompilerToolChainFile() const +{ + return this->CompilerSetupOptions[2]->isChecked(); +} + +bool StartCompilerSetup::crossCompilerSetup() const +{ + return this->CompilerSetupOptions[3]->isChecked(); +} + +void StartCompilerSetup::onSelectionChanged(bool on) +{ + if(on) + selectionChanged(); +} + +int StartCompilerSetup::nextId() const +{ + if(compilerSetup()) + return NativeSetup; + if(crossCompilerSetup()) + return CrossSetup; + if(crossCompilerToolChainFile()) + return ToolchainSetup; + return -1; +} + +NativeCompilerSetup::NativeCompilerSetup(QWidget* p) + : QWizardPage(p) +{ + QVBoxLayout* l = new QVBoxLayout(this); + QWidget* c = new QWidget(this); + l->addWidget(c); + this->setupUi(c); +} + +NativeCompilerSetup::~NativeCompilerSetup() +{ +} + +QString NativeCompilerSetup::getCCompiler() const +{ + return this->CCompiler->text(); +} + +void NativeCompilerSetup::setCCompiler(const QString& s) +{ + this->CCompiler->setText(s); +} + +QString NativeCompilerSetup::getCXXCompiler() const +{ + return this->CXXCompiler->text(); +} + +void NativeCompilerSetup::setCXXCompiler(const QString& s) +{ + this->CXXCompiler->setText(s); +} + +QString NativeCompilerSetup::getFortranCompiler() const +{ + return this->FortranCompiler->text(); +} + +void NativeCompilerSetup::setFortranCompiler(const QString& s) +{ + this->FortranCompiler->setText(s); +} + + +CrossCompilerSetup::CrossCompilerSetup(QWidget* p) + : QWizardPage(p) +{ + this->setupUi(this); + QWidget::setTabOrder(systemName, systemVersion); + QWidget::setTabOrder(systemVersion, systemProcessor); + QWidget::setTabOrder(systemProcessor, CrossCompilers->CCompiler); + QWidget::setTabOrder(CrossCompilers->CCompiler, CrossCompilers->CXXCompiler); + QWidget::setTabOrder(CrossCompilers->CXXCompiler, CrossCompilers->FortranCompiler); + QWidget::setTabOrder(CrossCompilers->FortranCompiler, crossFindRoot); + QWidget::setTabOrder(crossFindRoot, crossProgramMode); + QWidget::setTabOrder(crossProgramMode, crossLibraryMode); + QWidget::setTabOrder(crossLibraryMode, crossIncludeMode); + + // fill in combo boxes + QStringList modes; + modes << "Search in Target Root, then native system"; + modes << "Search only in Target Root"; + modes << "Search only in native system"; + crossProgramMode->addItems(modes); + crossLibraryMode->addItems(modes); + crossIncludeMode->addItems(modes); + crossProgramMode->setCurrentIndex(2); + crossLibraryMode->setCurrentIndex(1); + crossIncludeMode->setCurrentIndex(1); + + this->registerField("systemName*", this->systemName); +} + +CrossCompilerSetup::~CrossCompilerSetup() +{ +} + +QString CrossCompilerSetup::getCCompiler() const +{ + return this->CrossCompilers->CCompiler->text(); +} + +void CrossCompilerSetup::setCCompiler(const QString& s) +{ + this->CrossCompilers->CCompiler->setText(s); +} + +QString CrossCompilerSetup::getCXXCompiler() const +{ + return this->CrossCompilers->CXXCompiler->text(); +} + +void CrossCompilerSetup::setCXXCompiler(const QString& s) +{ + this->CrossCompilers->CXXCompiler->setText(s); +} + +QString CrossCompilerSetup::getFortranCompiler() const +{ + return this->CrossCompilers->FortranCompiler->text(); +} + +void CrossCompilerSetup::setFortranCompiler(const QString& s) +{ + this->CrossCompilers->FortranCompiler->setText(s); +} + +QString CrossCompilerSetup::getSystem() const +{ + return this->systemName->text(); +} + +void CrossCompilerSetup::setSystem(const QString& t) +{ + this->systemName->setText(t); +} + + +QString CrossCompilerSetup::getVersion() const +{ + return this->systemVersion->text(); +} + +void CrossCompilerSetup::setVersion(const QString& t) +{ + this->systemVersion->setText(t); +} + + +QString CrossCompilerSetup::getProcessor() const +{ + return this->systemProcessor->text(); +} + +void CrossCompilerSetup::setProcessor(const QString& t) +{ + this->systemProcessor->setText(t); +} + +QString CrossCompilerSetup::getFindRoot() const +{ + return this->crossFindRoot->text(); +} + +void CrossCompilerSetup::setFindRoot(const QString& t) +{ + return this->crossFindRoot->setText(t); +} + +int CrossCompilerSetup::getProgramMode() const +{ + return this->crossProgramMode->currentIndex(); +} + +int CrossCompilerSetup::getLibraryMode() const +{ + return this->crossLibraryMode->currentIndex(); +} + +int CrossCompilerSetup::getIncludeMode() const +{ + return this->crossIncludeMode->currentIndex(); +} + +void CrossCompilerSetup::setProgramMode(int m) +{ + this->crossProgramMode->setCurrentIndex(m); +} + +void CrossCompilerSetup::setLibraryMode(int m) +{ + this->crossLibraryMode->setCurrentIndex(m); +} + +void CrossCompilerSetup::setIncludeMode(int m) +{ + this->crossIncludeMode->setCurrentIndex(m); +} + +ToolchainCompilerSetup::ToolchainCompilerSetup(QWidget* p) + : QWizardPage(p) +{ + QVBoxLayout* l = new QVBoxLayout(this); + l->addWidget(new QLabel(tr("Specify the Toolchain file"))); + this->ToolchainFile = new QCMakeFilePathEditor(this); + l->addWidget(this->ToolchainFile); +} + +ToolchainCompilerSetup::~ToolchainCompilerSetup() +{ +} + +QString ToolchainCompilerSetup::toolchainFile() const +{ + return this->ToolchainFile->text(); +} + +void ToolchainCompilerSetup::setToolchainFile(const QString& t) +{ + this->ToolchainFile->setText(t); +} + + + +FirstConfigure::FirstConfigure() +{ + //this->setOption(QWizard::HaveFinishButtonOnEarlyPages, true); + this->mStartCompilerSetupPage = new StartCompilerSetup(this); + this->setPage(Start, this->mStartCompilerSetupPage); + QObject::connect(this->mStartCompilerSetupPage, SIGNAL(selectionChanged()), + this, SLOT(restart())); + + this->mNativeCompilerSetupPage = new NativeCompilerSetup(this); + this->setPage(NativeSetup, this->mNativeCompilerSetupPage); + + this->mCrossCompilerSetupPage = new CrossCompilerSetup(this); + this->setPage(CrossSetup, this->mCrossCompilerSetupPage); + + this->mToolchainCompilerSetupPage = new ToolchainCompilerSetup(this); + this->setPage(ToolchainSetup, this->mToolchainCompilerSetupPage); +} + +FirstConfigure::~FirstConfigure() +{ +} + +void FirstConfigure::setGenerators(const QStringList& gens) +{ + this->mStartCompilerSetupPage->setGenerators(gens); +} + +QString FirstConfigure::getGenerator() const +{ + return this->mStartCompilerSetupPage->getGenerator(); +} + +void FirstConfigure::loadFromSettings() +{ + QSettings settings; + // restore generator + settings.beginGroup("Settings/StartPath"); + QString lastGen = settings.value("LastGenerator").toString(); + this->mStartCompilerSetupPage->setCurrentGenerator(lastGen); + settings.endGroup(); + + // restore compiler setup + settings.beginGroup("Settings/Compiler"); + this->mNativeCompilerSetupPage->setCCompiler(settings.value("CCompiler").toString()); + this->mNativeCompilerSetupPage->setCXXCompiler(settings.value("CXXCompiler").toString()); + this->mNativeCompilerSetupPage->setFortranCompiler(settings.value("FortranCompiler").toString()); + settings.endGroup(); + + // restore cross compiler setup + settings.beginGroup("Settings/CrossCompiler"); + this->mCrossCompilerSetupPage->setCCompiler(settings.value("CCompiler").toString()); + this->mCrossCompilerSetupPage->setCXXCompiler(settings.value("CXXCompiler").toString()); + this->mCrossCompilerSetupPage->setFortranCompiler(settings.value("FortranCompiler").toString()); + this->mToolchainCompilerSetupPage->setToolchainFile(settings.value("ToolChainFile").toString()); + this->mCrossCompilerSetupPage->setSystem(settings.value("SystemName").toString()); + this->mCrossCompilerSetupPage->setVersion(settings.value("SystemVersion").toString()); + this->mCrossCompilerSetupPage->setProcessor(settings.value("SystemProcessor").toString()); + this->mCrossCompilerSetupPage->setFindRoot(settings.value("FindRoot").toString()); + this->mCrossCompilerSetupPage->setProgramMode(settings.value("ProgramMode", 0).toInt()); + this->mCrossCompilerSetupPage->setLibraryMode(settings.value("LibraryMode", 0).toInt()); + this->mCrossCompilerSetupPage->setIncludeMode(settings.value("IncludeMode", 0).toInt()); + settings.endGroup(); +} + +void FirstConfigure::saveToSettings() +{ + QSettings settings; + + // save generator + settings.beginGroup("Settings/StartPath"); + QString lastGen = this->mStartCompilerSetupPage->getGenerator(); + settings.setValue("LastGenerator", lastGen); + settings.endGroup(); + + // save compiler setup + settings.beginGroup("Settings/Compiler"); + settings.setValue("CCompiler", this->mNativeCompilerSetupPage->getCCompiler()); + settings.setValue("CXXCompiler", this->mNativeCompilerSetupPage->getCXXCompiler()); + settings.setValue("FortranCompiler", this->mNativeCompilerSetupPage->getFortranCompiler()); + settings.endGroup(); + + // save cross compiler setup + settings.beginGroup("Settings/CrossCompiler"); + settings.setValue("CCompiler", this->mCrossCompilerSetupPage->getCCompiler()); + settings.setValue("CXXCompiler", this->mCrossCompilerSetupPage->getCXXCompiler()); + settings.setValue("FortranCompiler", this->mCrossCompilerSetupPage->getFortranCompiler()); + settings.setValue("ToolChainFile", this->getCrossCompilerToolChainFile()); + settings.setValue("SystemName", this->mCrossCompilerSetupPage->getSystem()); + settings.setValue("SystemVersion", this->mCrossCompilerSetupPage->getVersion()); + settings.setValue("SystemProcessor", this->mCrossCompilerSetupPage->getProcessor()); + settings.setValue("FindRoot", this->mCrossCompilerSetupPage->getFindRoot()); + settings.setValue("ProgramMode", this->mCrossCompilerSetupPage->getProgramMode()); + settings.setValue("LibraryMode", this->mCrossCompilerSetupPage->getLibraryMode()); + settings.setValue("IncludeMode", this->mCrossCompilerSetupPage->getIncludeMode()); + settings.endGroup(); +} + +bool FirstConfigure::defaultSetup() const +{ + return this->mStartCompilerSetupPage->defaultSetup(); +} + +bool FirstConfigure::compilerSetup() const +{ + return this->mStartCompilerSetupPage->compilerSetup(); +} + +bool FirstConfigure::crossCompilerSetup() const +{ + return this->mStartCompilerSetupPage->crossCompilerSetup(); +} + +bool FirstConfigure::crossCompilerToolChainFile() const +{ + return this->mStartCompilerSetupPage->crossCompilerToolChainFile(); +} + +QString FirstConfigure::getCrossCompilerToolChainFile() const +{ + return this->mToolchainCompilerSetupPage->toolchainFile(); +} + +QString FirstConfigure::getSystemName() const +{ + return this->mCrossCompilerSetupPage->getSystem(); +} + +QString FirstConfigure::getCCompiler() const +{ + if(this->compilerSetup()) + { + return this->mNativeCompilerSetupPage->getCCompiler(); + } + else if(this->crossCompilerSetup()) + { + return this->mCrossCompilerSetupPage->getCCompiler(); + } + return QString(); +} + +QString FirstConfigure::getCXXCompiler() const +{ + if(this->compilerSetup()) + { + return this->mNativeCompilerSetupPage->getCXXCompiler(); + } + else if(this->crossCompilerSetup()) + { + return this->mCrossCompilerSetupPage->getCXXCompiler(); + } + return QString(); +} + +QString FirstConfigure::getFortranCompiler() const +{ + if(this->compilerSetup()) + { + return this->mNativeCompilerSetupPage->getFortranCompiler(); + } + else if(this->crossCompilerSetup()) + { + return this->mCrossCompilerSetupPage->getFortranCompiler(); + } + return QString(); +} + + +QString FirstConfigure::getSystemVersion() const +{ + return this->mCrossCompilerSetupPage->getVersion(); +} + +QString FirstConfigure::getSystemProcessor() const +{ + return this->mCrossCompilerSetupPage->getProcessor(); +} + +QString FirstConfigure::getCrossRoot() const +{ + return this->mCrossCompilerSetupPage->getFindRoot(); +} + +const QString CrossModes[] = +{ + "BOTH", + "ONLY", + "NEVER" +}; + +QString FirstConfigure::getCrossProgramMode() const +{ + return CrossModes[this->mCrossCompilerSetupPage->getProgramMode()]; +} + +QString FirstConfigure::getCrossLibraryMode() const +{ + return CrossModes[this->mCrossCompilerSetupPage->getLibraryMode()]; +} + +QString FirstConfigure::getCrossIncludeMode() const +{ + return CrossModes[this->mCrossCompilerSetupPage->getIncludeMode()]; +} + diff --git a/Source/QtDialog/FirstConfigure.h b/Source/QtDialog/FirstConfigure.h new file mode 100644 index 0000000..f4e368b --- /dev/null +++ b/Source/QtDialog/FirstConfigure.h @@ -0,0 +1,177 @@ + +#ifndef FirstConfigure_h +#define FirstConfigure_h + +#include +#include +#include "ui_Compilers.h" +#include "ui_CrossCompiler.h" + +class QRadioButton; +class QComboBox; + +//! the wizard pages we'll use for the first configure of a build +enum FirstConfigurePages +{ + Start, + NativeSetup, + ToolchainSetup, + CrossSetup, + Done +}; + +//! the first page that gives basic options for what compilers setup to choose from +class StartCompilerSetup : public QWizardPage +{ + Q_OBJECT + public: + StartCompilerSetup(QWidget* p); + ~StartCompilerSetup(); + void setGenerators(const QStringList& gens); + void setCurrentGenerator(const QString& gen); + QString getGenerator() const; + + bool defaultSetup() const; + bool compilerSetup() const; + bool crossCompilerSetup() const; + bool crossCompilerToolChainFile() const; + + int nextId() const; + + signals: + void selectionChanged(); + + protected slots: + void onSelectionChanged(bool); + + protected: + QComboBox* GeneratorOptions; + QRadioButton* CompilerSetupOptions[4]; +}; + +//! the page that gives basic options for native compilers +class NativeCompilerSetup : public QWizardPage, protected Ui::Compilers +{ + Q_OBJECT + public: + NativeCompilerSetup(QWidget* p); + ~NativeCompilerSetup(); + + QString getCCompiler() const; + void setCCompiler(const QString&); + + QString getCXXCompiler() const; + void setCXXCompiler(const QString&); + + QString getFortranCompiler() const; + void setFortranCompiler(const QString&); + + int nextId() const { return -1; } +}; + +//! the page that gives options for cross compilers +class CrossCompilerSetup : public QWizardPage, protected Ui::CrossCompiler +{ + Q_OBJECT + public: + CrossCompilerSetup(QWidget* p); + ~CrossCompilerSetup(); + + QString getSystem() const; + void setSystem(const QString&); + + QString getVersion() const; + void setVersion(const QString&); + + QString getProcessor() const; + void setProcessor(const QString&); + + QString getCCompiler() const; + void setCCompiler(const QString&); + + QString getCXXCompiler() const; + void setCXXCompiler(const QString&); + + QString getFortranCompiler() const; + void setFortranCompiler(const QString&); + + QString getFindRoot() const; + void setFindRoot(const QString&); + + enum CrossMode + { + BOTH, + ONLY, + NEVER + }; + + int getProgramMode() const; + void setProgramMode(int); + int getLibraryMode() const; + void setLibraryMode(int); + int getIncludeMode() const; + void setIncludeMode(int); + + int nextId() const { return -1; } +}; + +//! the page that gives options for a toolchain file +class ToolchainCompilerSetup : public QWizardPage +{ + Q_OBJECT + public: + ToolchainCompilerSetup(QWidget* p); + ~ToolchainCompilerSetup(); + + QString toolchainFile() const; + void setToolchainFile(const QString&); + + int nextId() const { return -1; } + + protected: + QCMakeFilePathEditor* ToolchainFile; +}; + +//! the wizard with the pages +class FirstConfigure : public QWizard +{ + Q_OBJECT +public: + FirstConfigure(); + ~FirstConfigure(); + + void setGenerators(const QStringList& gens); + QString getGenerator() const; + + bool defaultSetup() const; + bool compilerSetup() const; + bool crossCompilerSetup() const; + bool crossCompilerToolChainFile() const; + + QString getCCompiler() const; + QString getCXXCompiler() const; + QString getFortranCompiler() const; + + QString getSystemName() const; + QString getSystemVersion() const; + QString getSystemProcessor() const; + QString getCrossRoot() const; + QString getCrossProgramMode() const; + QString getCrossLibraryMode() const; + QString getCrossIncludeMode() const; + + QString getCrossCompilerToolChainFile() const; + + void loadFromSettings(); + void saveToSettings(); + +protected: + StartCompilerSetup* mStartCompilerSetupPage; + NativeCompilerSetup* mNativeCompilerSetupPage; + CrossCompilerSetup* mCrossCompilerSetupPage; + ToolchainCompilerSetup* mToolchainCompilerSetupPage; + +}; + +#endif // FirstConfigure_h + diff --git a/Source/QtDialog/MacInstallDialog.ui b/Source/QtDialog/MacInstallDialog.ui new file mode 100644 index 0000000..c7e31db --- /dev/null +++ b/Source/QtDialog/MacInstallDialog.ui @@ -0,0 +1,103 @@ + + Dialog + + + + 0 + 0 + 470 + 159 + + + + Install Command Line Tools + + + + 9 + + + 6 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Skip Install Command Line + + + + + + + Install Command Line Links + + + + + + + + + Choose... + + + + + + + Install Folder: + + + + + + + + + + This will create symbolic links to the command line tools of cmake into the specified install folder. + + + true + + + + + + + + diff --git a/Source/QtDialog/Plus16.png b/Source/QtDialog/Plus16.png new file mode 100644 index 0000000000000000000000000000000000000000..552f6f0045f036955e577ac8ca64650e58a083f1 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;RN#5=* z4F5rJ!QSPQfg+p*9+AZi4BWyX%*Zfnjs#GUy~NYkmHirxiUnk8ypU!@Qr>oI5@}!XTZnLP> zL1)fBe)s8b)#Q*3r(_jpJ1k8zYo6(|XodbY;Z6Oe#jGh#DQO#9V$ZkFRW4B5^lXL8 z$1qW&eVkRyjXRQNo~(Z=q`F`V`|Zb^0!)GhyRUfMZH +#include + +#include "cmake.h" +#include "cmCacheManager.h" +#include "cmSystemTools.h" +#include "cmExternalMakefileProjectGenerator.h" + +#ifdef Q_OS_WIN +#include "qt_windows.h" // For SetErrorMode +#endif + +QCMake::QCMake(QObject* p) + : QObject(p) +{ + this->SuppressDevWarnings = false; + this->WarnUninitializedMode = false; + this->WarnUnusedMode = false; + qRegisterMetaType(); + qRegisterMetaType(); + + QDir execDir(QCoreApplication::applicationDirPath()); + +#if defined(Q_OS_MAC) + if(execDir.exists("../bin/cmake")) + { + execDir.cd("../bin"); + } + else + { + execDir.cd("../../../"); // path to cmake in build directory (need to fix for deployment) + } +#endif + + QString cmakeCommand = QString("cmake")+cmSystemTools::GetExecutableExtension(); + cmakeCommand = execDir.filePath(cmakeCommand); + + cmSystemTools::DisableRunCommandOutput(); + cmSystemTools::SetRunCommandHideConsole(true); + cmSystemTools::SetErrorCallback(QCMake::errorCallback, this); + cmSystemTools::FindExecutableDirectory(cmakeCommand.toAscii().data()); + + this->CMakeInstance = new cmake; + this->CMakeInstance->SetCMakeCommand(cmakeCommand.toAscii().data()); +#if defined(Q_OS_MAC) + this->CMakeInstance->SetCMakeEditCommand("cmake-gui.app/Contents/MacOS/cmake-gui"); +#else + this->CMakeInstance->SetCMakeEditCommand("cmake-gui"); +#endif + this->CMakeInstance->SetProgressCallback(QCMake::progressCallback, this); + + cmSystemTools::SetInterruptCallback(QCMake::interruptCallback, this); + + std::vector generators; + this->CMakeInstance->GetRegisteredGenerators(generators); + std::vector::iterator iter; + for(iter = generators.begin(); iter != generators.end(); ++iter) + { + // Skip the generator "KDevelop3", since there is also + // "KDevelop3 - Unix Makefiles", which is the full and official name. + // The short name is actually only still there since this was the name + // in CMake 2.4, to keep "command line argument compatibility", but + // this is not necessary in the GUI. + if (*iter == "KDevelop3") + { + continue; + } + this->AvailableGenerators.append(iter->c_str()); + } +} + +QCMake::~QCMake() +{ + delete this->CMakeInstance; + //cmDynamicLoader::FlushCache(); +} + +void QCMake::loadCache(const QString& dir) +{ + this->setBinaryDirectory(dir); +} + +void QCMake::setSourceDirectory(const QString& _dir) +{ + QString dir = + cmSystemTools::GetActualCaseForPath(_dir.toAscii().data()).c_str(); + if(this->SourceDirectory != dir) + { + this->SourceDirectory = QDir::fromNativeSeparators(dir); + emit this->sourceDirChanged(this->SourceDirectory); + } +} + +void QCMake::setBinaryDirectory(const QString& _dir) +{ + QString dir = + cmSystemTools::GetActualCaseForPath(_dir.toAscii().data()).c_str(); + if(this->BinaryDirectory != dir) + { + this->BinaryDirectory = QDir::fromNativeSeparators(dir); + emit this->binaryDirChanged(this->BinaryDirectory); + cmCacheManager *cachem = this->CMakeInstance->GetCacheManager(); + this->setGenerator(QString()); + if(!this->CMakeInstance->GetCacheManager()->LoadCache( + this->BinaryDirectory.toLocal8Bit().data())) + { + QDir testDir(this->BinaryDirectory); + if(testDir.exists("CMakeCache.txt")) + { + cmSystemTools::Error("There is a CMakeCache.txt file for the current binary " + "tree but cmake does not have permission to read it. " + "Please check the permissions of the directory you are trying to run CMake on."); + } + } + + QCMakePropertyList props = this->properties(); + emit this->propertiesChanged(props); + cmCacheManager::CacheIterator itm = cachem->NewIterator(); + if ( itm.Find("CMAKE_HOME_DIRECTORY")) + { + setSourceDirectory(itm.GetValue()); + } + if ( itm.Find("CMAKE_GENERATOR")) + { + const char* extraGen = cachem->GetCacheValue("CMAKE_EXTRA_GENERATOR"); + std::string curGen = cmExternalMakefileProjectGenerator:: + CreateFullGeneratorName(itm.GetValue(), extraGen); + this->setGenerator(curGen.c_str()); + } + } +} + + +void QCMake::setGenerator(const QString& gen) +{ + if(this->Generator != gen) + { + this->Generator = gen; + emit this->generatorChanged(this->Generator); + } +} + +void QCMake::configure() +{ +#ifdef Q_OS_WIN + UINT lastErrorMode = SetErrorMode(0); +#endif + + this->CMakeInstance->SetHomeDirectory(this->SourceDirectory.toAscii().data()); + this->CMakeInstance->SetStartDirectory(this->SourceDirectory.toAscii().data()); + this->CMakeInstance->SetHomeOutputDirectory(this->BinaryDirectory.toAscii().data()); + this->CMakeInstance->SetStartOutputDirectory(this->BinaryDirectory.toAscii().data()); + this->CMakeInstance->SetGlobalGenerator( + this->CMakeInstance->CreateGlobalGenerator(this->Generator.toAscii().data())); + this->CMakeInstance->LoadCache(); + this->CMakeInstance->SetSuppressDevWarnings(this->SuppressDevWarnings); + this->CMakeInstance->SetWarnUninitialized(this->WarnUninitializedMode); + this->CMakeInstance->SetWarnUnused(this->WarnUnusedMode); + this->CMakeInstance->PreLoadCMakeFiles(); + + InterruptFlag = 0; + cmSystemTools::ResetErrorOccuredFlag(); + + int err = this->CMakeInstance->Configure(); + +#ifdef Q_OS_WIN + SetErrorMode(lastErrorMode); +#endif + + emit this->propertiesChanged(this->properties()); + emit this->configureDone(err); +} + +void QCMake::generate() +{ +#ifdef Q_OS_WIN + UINT lastErrorMode = SetErrorMode(0); +#endif + + InterruptFlag = 0; + cmSystemTools::ResetErrorOccuredFlag(); + + int err = this->CMakeInstance->Generate(); + +#ifdef Q_OS_WIN + SetErrorMode(lastErrorMode); +#endif + + emit this->generateDone(err); +} + +void QCMake::setProperties(const QCMakePropertyList& newProps) +{ + QCMakePropertyList props = newProps; + + QStringList toremove; + + // set the value of properties + cmCacheManager *cachem = this->CMakeInstance->GetCacheManager(); + for(cmCacheManager::CacheIterator i = cachem->NewIterator(); + !i.IsAtEnd(); i.Next()) + { + + if(i.GetType() == cmCacheManager::INTERNAL || + i.GetType() == cmCacheManager::STATIC) + { + continue; + } + + QCMakeProperty prop; + prop.Key = i.GetName(); + int idx = props.indexOf(prop); + if(idx == -1) + { + toremove.append(i.GetName()); + } + else + { + prop = props[idx]; + if(prop.Value.type() == QVariant::Bool) + { + i.SetValue(prop.Value.toBool() ? "ON" : "OFF"); + } + else + { + i.SetValue(prop.Value.toString().toAscii().data()); + } + props.removeAt(idx); + } + + } + + // remove some properites + foreach(QString s, toremove) + { + this->CMakeInstance->UnwatchUnusedCli(s.toAscii().data()); + + cachem->RemoveCacheEntry(s.toAscii().data()); + } + + // add some new properites + foreach(QCMakeProperty s, props) + { + this->CMakeInstance->WatchUnusedCli(s.Key.toAscii().data()); + + if(s.Type == QCMakeProperty::BOOL) + { + this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(), + s.Value.toBool() ? "ON" : "OFF", + s.Help.toAscii().data(), + cmCacheManager::BOOL); + } + else if(s.Type == QCMakeProperty::STRING) + { + this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(), + s.Value.toString().toAscii().data(), + s.Help.toAscii().data(), + cmCacheManager::STRING); + } + else if(s.Type == QCMakeProperty::PATH) + { + this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(), + s.Value.toString().toAscii().data(), + s.Help.toAscii().data(), + cmCacheManager::PATH); + } + else if(s.Type == QCMakeProperty::FILEPATH) + { + this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(), + s.Value.toString().toAscii().data(), + s.Help.toAscii().data(), + cmCacheManager::FILEPATH); + } + } + + cachem->SaveCache(this->BinaryDirectory.toAscii().data()); +} + +QCMakePropertyList QCMake::properties() const +{ + QCMakePropertyList ret; + + cmCacheManager *cachem = this->CMakeInstance->GetCacheManager(); + for(cmCacheManager::CacheIterator i = cachem->NewIterator(); + !i.IsAtEnd(); i.Next()) + { + + if(i.GetType() == cmCacheManager::INTERNAL || + i.GetType() == cmCacheManager::STATIC || + i.GetType() == cmCacheManager::UNINITIALIZED) + { + continue; + } + + QCMakeProperty prop; + prop.Key = i.GetName(); + prop.Help = i.GetProperty("HELPSTRING"); + prop.Value = i.GetValue(); + prop.Advanced = i.GetPropertyAsBool("ADVANCED"); + + if(i.GetType() == cmCacheManager::BOOL) + { + prop.Type = QCMakeProperty::BOOL; + prop.Value = cmSystemTools::IsOn(i.GetValue()); + } + else if(i.GetType() == cmCacheManager::PATH) + { + prop.Type = QCMakeProperty::PATH; + } + else if(i.GetType() == cmCacheManager::FILEPATH) + { + prop.Type = QCMakeProperty::FILEPATH; + } + else if(i.GetType() == cmCacheManager::STRING) + { + prop.Type = QCMakeProperty::STRING; + if (i.PropertyExists("STRINGS")) + { + prop.Strings = QString(i.GetProperty("STRINGS")).split(";"); + } + } + + ret.append(prop); + } + + return ret; +} + +void QCMake::interrupt() +{ + this->InterruptFlag.ref(); +} + +bool QCMake::interruptCallback(void* cd) +{ + QCMake* self = reinterpret_cast(cd); + return self->InterruptFlag; +} + +void QCMake::progressCallback(const char* msg, float percent, void* cd) +{ + QCMake* self = reinterpret_cast(cd); + if(percent >= 0) + { + emit self->progressChanged(msg, percent); + } + else + { + emit self->outputMessage(msg); + } + QCoreApplication::processEvents(); +} + +void QCMake::errorCallback(const char* msg, const char* /*title*/, + bool& /*stop*/, void* cd) +{ + QCMake* self = reinterpret_cast(cd); + emit self->errorMessage(msg); + QCoreApplication::processEvents(); +} + +QString QCMake::binaryDirectory() const +{ + return this->BinaryDirectory; +} + +QString QCMake::sourceDirectory() const +{ + return this->SourceDirectory; +} + +QString QCMake::generator() const +{ + return this->Generator; +} + +QStringList QCMake::availableGenerators() const +{ + return this->AvailableGenerators; +} + +void QCMake::deleteCache() +{ + // delete cache + this->CMakeInstance->GetCacheManager()->DeleteCache(this->BinaryDirectory.toAscii().data()); + // reload to make our cache empty + this->CMakeInstance->GetCacheManager()->LoadCache(this->BinaryDirectory.toAscii().data()); + // emit no generator and no properties + this->setGenerator(QString()); + QCMakePropertyList props = this->properties(); + emit this->propertiesChanged(props); +} + +void QCMake::reloadCache() +{ + // emit that the cache was cleaned out + QCMakePropertyList props; + emit this->propertiesChanged(props); + // reload + this->CMakeInstance->GetCacheManager()->LoadCache(this->BinaryDirectory.toAscii().data()); + // emit new cache properties + props = this->properties(); + emit this->propertiesChanged(props); +} + +void QCMake::setDebugOutput(bool flag) +{ + if(flag != this->CMakeInstance->GetDebugOutput()) + { + this->CMakeInstance->SetDebugOutputOn(flag); + emit this->debugOutputChanged(flag); + } +} + +bool QCMake::getDebugOutput() const +{ + return this->CMakeInstance->GetDebugOutput(); +} + + +void QCMake::setSuppressDevWarnings(bool value) +{ + this->SuppressDevWarnings = value; +} + +void QCMake::setWarnUninitializedMode(bool value) +{ + this->WarnUninitializedMode = value; +} + +void QCMake::setWarnUnusedMode(bool value) +{ + this->WarnUnusedMode = value; +} diff --git a/Source/QtDialog/QCMake.h b/Source/QtDialog/QCMake.h new file mode 100644 index 0000000..0d68586 --- /dev/null +++ b/Source/QtDialog/QCMake.h @@ -0,0 +1,154 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef __QCMake_h +#define __QCMake_h +#ifdef _MSC_VER +#pragma warning ( disable : 4127 ) +#pragma warning ( disable : 4512 ) +#endif + +#include +#include +#include +#include +#include +#include +#include + +class cmake; + +/// struct to represent cmake properties in Qt +/// Value is of type String or Bool +struct QCMakeProperty +{ + enum PropertyType { BOOL, PATH, FILEPATH, STRING }; + QString Key; + QVariant Value; + QStringList Strings; + QString Help; + PropertyType Type; + bool Advanced; + bool operator==(const QCMakeProperty& other) const + { + return this->Key == other.Key; + } + bool operator<(const QCMakeProperty& other) const + { + return this->Key < other.Key; + } +}; + +// list of properties +typedef QList QCMakePropertyList; + +// allow QVariant to be a property or list of properties +Q_DECLARE_METATYPE(QCMakeProperty) +Q_DECLARE_METATYPE(QCMakePropertyList) + +/// Qt API for CMake library. +/// Wrapper like class allows for easier integration with +/// Qt features such as, signal/slot connections, multi-threading, etc.. +class QCMake : public QObject +{ + Q_OBJECT +public: + QCMake(QObject* p=0); + ~QCMake(); +public slots: + /// load the cache file in a directory + void loadCache(const QString& dir); + /// set the source directory containing the source + void setSourceDirectory(const QString& dir); + /// set the binary directory to build in + void setBinaryDirectory(const QString& dir); + /// set the desired generator to use + void setGenerator(const QString& generator); + /// do the configure step + void configure(); + /// generate the files + void generate(); + /// set the property values + void setProperties(const QCMakePropertyList&); + /// interrupt the configure or generate process (if connecting, make a direct connection) + void interrupt(); + /// delete the cache in binary directory + void deleteCache(); + /// reload the cache in binary directory + void reloadCache(); + /// set whether to do debug output + void setDebugOutput(bool); + /// set whether to do suppress dev warnings + void setSuppressDevWarnings(bool value); + /// set whether to run cmake with warnings about uninitialized variables + void setWarnUninitializedMode(bool value); + /// set whether to run cmake with warnings about unused variables + void setWarnUnusedMode(bool value); + +public: + /// get the list of cache properties + QCMakePropertyList properties() const; + /// get the current binary directory + QString binaryDirectory() const; + /// get the current source directory + QString sourceDirectory() const; + /// get the current generator + QString generator() const; + /// get the available generators + QStringList availableGenerators() const; + /// get whether to do debug output + bool getDebugOutput() const; + +signals: + /// signal when properties change (during read from disk or configure process) + void propertiesChanged(const QCMakePropertyList& vars); + /// signal when the generator changes + void generatorChanged(const QString& gen); + /// signal when the source directory changes (binary directory already + /// containing a CMakeCache.txt file) + void sourceDirChanged(const QString& dir); + /// signal when the binary directory changes + void binaryDirChanged(const QString& dir); + /// signal for progress events + void progressChanged(const QString& msg, float percent); + /// signal when configure is done + void configureDone(int error); + /// signal when generate is done + void generateDone(int error); + /// signal when there is an output message + void outputMessage(const QString& msg); + /// signal when there is an error message + void errorMessage(const QString& msg); + /// signal when debug output changes + void debugOutputChanged(bool); + +protected: + cmake* CMakeInstance; + + static bool interruptCallback(void*); + static void progressCallback(const char* msg, float percent, void* cd); + static void errorCallback(const char* msg, const char* title, + bool&, void* cd); + bool SuppressDevWarnings; + bool WarnUninitializedMode; + bool WarnUnusedMode; + bool WarnUnusedAllMode; + QString SourceDirectory; + QString BinaryDirectory; + QString Generator; + QStringList AvailableGenerators; + QString CMakeExecutable; + QAtomicInt InterruptFlag; +}; + +#endif // __QCMake_h + diff --git a/Source/QtDialog/QCMakeCacheView.cxx b/Source/QtDialog/QCMakeCacheView.cxx new file mode 100644 index 0000000..72e9b24 --- /dev/null +++ b/Source/QtDialog/QCMakeCacheView.cxx @@ -0,0 +1,735 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "QCMakeCacheView.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "QCMakeWidgets.h" + +// filter for searches +class QCMakeSearchFilter : public QSortFilterProxyModel +{ +public: + QCMakeSearchFilter(QObject* o) : QSortFilterProxyModel(o) {} +protected: + bool filterAcceptsRow(int row, const QModelIndex& p) const + { + QStringList strs; + const QAbstractItemModel* m = this->sourceModel(); + QModelIndex idx = m->index(row, 0, p); + + // if there are no children, get strings for column 0 and 1 + if(!m->hasChildren(idx)) + { + strs.append(m->data(idx).toString()); + idx = m->index(row, 1, p); + strs.append(m->data(idx).toString()); + } + else + { + // get strings for children entries to compare with + // instead of comparing with the parent + int num = m->rowCount(idx); + for(int i=0; iindex(i, 0, idx); + strs.append(m->data(tmpidx).toString()); + tmpidx = m->index(i, 1, idx); + strs.append(m->data(tmpidx).toString()); + } + } + + // check all strings for a match + foreach(QString str, strs) + { + if(str.contains(this->filterRegExp())) + { + return true; + } + } + + return false; + } +}; + +// filter for searches +class QCMakeAdvancedFilter : public QSortFilterProxyModel +{ +public: + QCMakeAdvancedFilter(QObject* o) + : QSortFilterProxyModel(o), ShowAdvanced(false) {} + + void setShowAdvanced(bool f) + { + this->ShowAdvanced = f; + this->invalidate(); + } + bool showAdvanced() const { return this->ShowAdvanced; } + +protected: + + bool ShowAdvanced; + + bool filterAcceptsRow(int row, const QModelIndex& p) const + { + const QAbstractItemModel* m = this->sourceModel(); + QModelIndex idx = m->index(row, 0, p); + + // if there are no children + if(!m->hasChildren(idx)) + { + bool adv = m->data(idx, QCMakeCacheModel::AdvancedRole).toBool(); + if(!adv || (adv && this->ShowAdvanced)) + { + return true; + } + return false; + } + + // check children + int num = m->rowCount(idx); + for(int i=0; ifilterAcceptsRow(i, idx); + if(accept) + { + return true; + } + } + return false; + } +}; + +QCMakeCacheView::QCMakeCacheView(QWidget* p) + : QTreeView(p) +{ + // hook up our model and search/filter proxies + this->CacheModel = new QCMakeCacheModel(this); + this->AdvancedFilter = new QCMakeAdvancedFilter(this); + this->AdvancedFilter->setSourceModel(this->CacheModel); + this->AdvancedFilter->setDynamicSortFilter(true); + this->SearchFilter = new QCMakeSearchFilter(this); + this->SearchFilter->setSourceModel(this->AdvancedFilter); + this->SearchFilter->setFilterCaseSensitivity(Qt::CaseInsensitive); + this->SearchFilter->setDynamicSortFilter(true); + this->setModel(this->SearchFilter); + + // our delegate for creating our editors + QCMakeCacheModelDelegate* delegate = new QCMakeCacheModelDelegate(this); + this->setItemDelegate(delegate); + + this->setUniformRowHeights(true); + + this->setEditTriggers(QAbstractItemView::AllEditTriggers); + + // tab, backtab doesn't step through items + this->setTabKeyNavigation(false); + + this->setRootIsDecorated(false); +} + +bool QCMakeCacheView::event(QEvent* e) +{ + if(e->type() == QEvent::Show) + { + this->header()->setDefaultSectionSize(this->viewport()->width()/2); + } + return QTreeView::event(e); +} + +QCMakeCacheModel* QCMakeCacheView::cacheModel() const +{ + return this->CacheModel; +} + +QModelIndex QCMakeCacheView::moveCursor(CursorAction act, + Qt::KeyboardModifiers mod) +{ + // want home/end to go to begin/end of rows, not columns + if(act == MoveHome) + { + return this->model()->index(0, 1); + } + else if(act == MoveEnd) + { + return this->model()->index(this->model()->rowCount()-1, 1); + } + return QTreeView::moveCursor(act, mod); +} + +void QCMakeCacheView::setShowAdvanced(bool s) +{ +#if QT_VERSION >= 040300 + // new 4.3 api that needs to be called. what about an older Qt? + this->SearchFilter->invalidate(); +#endif + + this->AdvancedFilter->setShowAdvanced(s); +} + +bool QCMakeCacheView::showAdvanced() const +{ + return this->AdvancedFilter->showAdvanced(); +} + +void QCMakeCacheView::setSearchFilter(const QString& s) +{ + this->SearchFilter->setFilterFixedString(s); +} + +QCMakeCacheModel::QCMakeCacheModel(QObject* p) + : QStandardItemModel(p), + EditEnabled(true), + NewPropertyCount(0), + View(FlatView) +{ + this->ShowNewProperties = true; + QStringList labels; + labels << tr("Name") << tr("Value"); + this->setHorizontalHeaderLabels(labels); +} + +QCMakeCacheModel::~QCMakeCacheModel() +{ +} + +static uint qHash(const QCMakeProperty& p) +{ + return qHash(p.Key); +} + +void QCMakeCacheModel::setShowNewProperties(bool f) +{ + this->ShowNewProperties = f; +} + +void QCMakeCacheModel::clear() +{ + this->QStandardItemModel::clear(); + this->NewPropertyCount = 0; + + QStringList labels; + labels << tr("Name") << tr("Value"); + this->setHorizontalHeaderLabels(labels); +} + +void QCMakeCacheModel::setProperties(const QCMakePropertyList& props) +{ + QSet newProps, newProps2; + + if(this->ShowNewProperties) + { + newProps = props.toSet(); + newProps2 = newProps; + QSet oldProps = this->properties().toSet(); + oldProps.intersect(newProps); + newProps.subtract(oldProps); + newProps2.subtract(newProps); + } + else + { + newProps2 = props.toSet(); + } + + bool b = this->blockSignals(true); + + this->clear(); + this->NewPropertyCount = newProps.size(); + + if(View == FlatView) + { + QCMakePropertyList newP = newProps.toList(); + QCMakePropertyList newP2 = newProps2.toList(); + qSort(newP); + qSort(newP2); + int row_count = 0; + foreach(QCMakeProperty p, newP) + { + this->insertRow(row_count); + this->setPropertyData(this->index(row_count, 0), p, true); + row_count++; + } + foreach(QCMakeProperty p, newP2) + { + this->insertRow(row_count); + this->setPropertyData(this->index(row_count, 0), p, false); + row_count++; + } + } + else if(this->View == GroupView) + { + QMap newPropsTree; + this->breakProperties(newProps, newPropsTree); + QMap newPropsTree2; + this->breakProperties(newProps2, newPropsTree2); + + QStandardItem* root = this->invisibleRootItem(); + + foreach(QString key, newPropsTree.keys()) + { + QCMakePropertyList props2 = newPropsTree[key]; + + QList parentItems; + parentItems.append( + new QStandardItem(key.isEmpty() ? tr("Ungrouped Entries") : key) + ); + parentItems.append(new QStandardItem()); + parentItems[0]->setData(QBrush(QColor(255,100,100)), Qt::BackgroundColorRole); + parentItems[1]->setData(QBrush(QColor(255,100,100)), Qt::BackgroundColorRole); + parentItems[0]->setData(1, GroupRole); + parentItems[1]->setData(1, GroupRole); + root->appendRow(parentItems); + + int num = props2.size(); + for(int i=0; i items; + items.append(new QStandardItem()); + items.append(new QStandardItem()); + parentItems[0]->appendRow(items); + this->setPropertyData(this->indexFromItem(items[0]), prop, true); + } + } + + foreach(QString key, newPropsTree2.keys()) + { + QCMakePropertyList props2 = newPropsTree2[key]; + + QStandardItem* parentItem = + new QStandardItem(key.isEmpty() ? tr("Ungrouped Entries") : key); + root->appendRow(parentItem); + parentItem->setData(1, GroupRole); + + int num = props2.size(); + for(int i=0; i items; + items.append(new QStandardItem()); + items.append(new QStandardItem()); + parentItem->appendRow(items); + this->setPropertyData(this->indexFromItem(items[0]), prop, false); + } + } + } + + this->blockSignals(b); + this->reset(); +} + +QCMakeCacheModel::ViewType QCMakeCacheModel::viewType() const +{ + return this->View; +} + +void QCMakeCacheModel::setViewType(QCMakeCacheModel::ViewType t) +{ + this->View = t; + + QCMakePropertyList props = this->properties(); + QCMakePropertyList oldProps; + int numNew = this->NewPropertyCount; + int numTotal = props.count(); + for(int i=numNew; iblockSignals(true); + this->clear(); + this->setProperties(oldProps); + this->setProperties(props); + this->blockSignals(b); + this->reset(); +} + +void QCMakeCacheModel::setPropertyData(const QModelIndex& idx1, + const QCMakeProperty& prop, bool isNew) +{ + QModelIndex idx2 = idx1.sibling(idx1.row(), 1); + + this->setData(idx1, prop.Key, Qt::DisplayRole); + this->setData(idx1, prop.Help, QCMakeCacheModel::HelpRole); + this->setData(idx1, prop.Type, QCMakeCacheModel::TypeRole); + this->setData(idx1, prop.Advanced, QCMakeCacheModel::AdvancedRole); + + if(prop.Type == QCMakeProperty::BOOL) + { + int check = prop.Value.toBool() ? Qt::Checked : Qt::Unchecked; + this->setData(idx2, check, Qt::CheckStateRole); + } + else + { + this->setData(idx2, prop.Value, Qt::DisplayRole); + } + this->setData(idx2, prop.Help, QCMakeCacheModel::HelpRole); + + if (!prop.Strings.isEmpty()) + { + this->setData(idx1, prop.Strings, QCMakeCacheModel::StringsRole); + } + + if(isNew) + { + this->setData(idx1, QBrush(QColor(255,100,100)), Qt::BackgroundColorRole); + this->setData(idx2, QBrush(QColor(255,100,100)), Qt::BackgroundColorRole); + } +} + +void QCMakeCacheModel::getPropertyData(const QModelIndex& idx1, + QCMakeProperty& prop) const +{ + QModelIndex idx2 = idx1.sibling(idx1.row(), 1); + + prop.Key = this->data(idx1, Qt::DisplayRole).toString(); + prop.Help = this->data(idx1, HelpRole).toString(); + prop.Type = static_cast(this->data(idx1, TypeRole).toInt()); + prop.Advanced = this->data(idx1, AdvancedRole).toBool(); + prop.Strings = this->data(idx1, QCMakeCacheModel::StringsRole).toStringList(); + if(prop.Type == QCMakeProperty::BOOL) + { + int check = this->data(idx2, Qt::CheckStateRole).toInt(); + prop.Value = check == Qt::Checked; + } + else + { + prop.Value = this->data(idx2, Qt::DisplayRole).toString(); + } +} + +QString QCMakeCacheModel::prefix(const QString& s) +{ + QString prefix = s.section('_', 0, 0); + if(prefix == s) + { + prefix = QString(); + } + return prefix; +} + +void QCMakeCacheModel::breakProperties(const QSet& props, + QMap& result) +{ + QMap tmp; + // return a map of properties grouped by prefixes, and sorted + foreach(QCMakeProperty p, props) + { + QString prefix = QCMakeCacheModel::prefix(p.Key); + tmp[prefix].append(p); + } + // sort it and re-org any properties with only one sub item + QCMakePropertyList reorgProps; + QMap::iterator iter; + for(iter = tmp.begin(); iter != tmp.end();) + { + if(iter->count() == 1) + { + reorgProps.append((*iter)[0]); + iter = tmp.erase(iter); + } + else + { + qSort(*iter); + ++iter; + } + } + if(reorgProps.count()) + { + tmp[QString()] += reorgProps; + } + result = tmp; +} + +QCMakePropertyList QCMakeCacheModel::properties() const +{ + QCMakePropertyList props; + + if(!this->rowCount()) + { + return props; + } + + QList idxs; + idxs.append(this->index(0,0)); + + // walk the entire model for property entries + // this works regardless of a flat view or a tree view + while(!idxs.isEmpty()) + { + QModelIndex idx = idxs.last(); + if(this->hasChildren(idx) && this->rowCount(idx)) + { + idxs.append(this->index(0,0, idx)); + } + else + { + if(!data(idx, GroupRole).toInt()) + { + // get data + QCMakeProperty prop; + this->getPropertyData(idx, prop); + props.append(prop); + } + + // go to the next in the tree + while(!idxs.isEmpty() && !idxs.last().sibling(idxs.last().row()+1, 0).isValid()) + { + idxs.removeLast(); + } + if(!idxs.isEmpty()) + { + idxs.last() = idxs.last().sibling(idxs.last().row()+1, 0); + } + } + } + + return props; +} + +bool QCMakeCacheModel::insertProperty(QCMakeProperty::PropertyType t, + const QString& name, const QString& description, + const QVariant& value, bool advanced) +{ + QCMakeProperty prop; + prop.Key = name; + prop.Value = value; + prop.Help = description; + prop.Type = t; + prop.Advanced = advanced; + + //insert at beginning + this->insertRow(0); + this->setPropertyData(this->index(0,0), prop, true); + this->NewPropertyCount++; + return true; +} + +void QCMakeCacheModel::setEditEnabled(bool e) +{ + this->EditEnabled = e; +} + +bool QCMakeCacheModel::editEnabled() const +{ + return this->EditEnabled; +} + +int QCMakeCacheModel::newPropertyCount() const +{ + return this->NewPropertyCount; +} + +Qt::ItemFlags QCMakeCacheModel::flags (const QModelIndex& idx) const +{ + Qt::ItemFlags f = QStandardItemModel::flags(idx); + if(!this->EditEnabled) + { + f &= ~Qt::ItemIsEditable; + return f; + } + if(QCMakeProperty::BOOL == this->data(idx, TypeRole).toInt()) + { + f |= Qt::ItemIsUserCheckable; + } + return f; +} + +QModelIndex QCMakeCacheModel::buddy(const QModelIndex& idx) const +{ + if(!this->hasChildren(idx) && + this->data(idx, TypeRole).toInt() != QCMakeProperty::BOOL) + { + return this->index(idx.row(), 1, idx.parent()); + } + return idx; +} + +QCMakeCacheModelDelegate::QCMakeCacheModelDelegate(QObject* p) + : QItemDelegate(p), FileDialogFlag(false) +{ +} + +void QCMakeCacheModelDelegate::setFileDialogFlag(bool f) +{ + this->FileDialogFlag = f; +} + +QWidget* QCMakeCacheModelDelegate::createEditor(QWidget* p, + const QStyleOptionViewItem&, const QModelIndex& idx) const +{ + QModelIndex var = idx.sibling(idx.row(), 0); + int type = var.data(QCMakeCacheModel::TypeRole).toInt(); + if(type == QCMakeProperty::BOOL) + { + return NULL; + } + else if(type == QCMakeProperty::PATH) + { + QCMakePathEditor* editor = + new QCMakePathEditor(p, + var.data(Qt::DisplayRole).toString()); + QObject::connect(editor, SIGNAL(fileDialogExists(bool)), this, + SLOT(setFileDialogFlag(bool))); + return editor; + } + else if(type == QCMakeProperty::FILEPATH) + { + QCMakeFilePathEditor* editor = + new QCMakeFilePathEditor(p, + var.data(Qt::DisplayRole).toString()); + QObject::connect(editor, SIGNAL(fileDialogExists(bool)), this, + SLOT(setFileDialogFlag(bool))); + return editor; + } + else if(type == QCMakeProperty::STRING && + var.data(QCMakeCacheModel::StringsRole).isValid()) + { + QCMakeComboBox* editor = + new QCMakeComboBox(p, var.data(QCMakeCacheModel::StringsRole).toStringList()); + editor->setFrame(false); + return editor; + } + + QLineEdit* editor = new QLineEdit(p); + editor->setFrame(false); + return editor; +} + +bool QCMakeCacheModelDelegate::editorEvent(QEvent* e, QAbstractItemModel* model, + const QStyleOptionViewItem& option, const QModelIndex& index) +{ + Qt::ItemFlags flags = model->flags(index); + if (!(flags & Qt::ItemIsUserCheckable) || !(option.state & QStyle::State_Enabled) + || !(flags & Qt::ItemIsEnabled)) + { + return false; + } + + QVariant value = index.data(Qt::CheckStateRole); + if (!value.isValid()) + { + return false; + } + + if ((e->type() == QEvent::MouseButtonRelease) + || (e->type() == QEvent::MouseButtonDblClick)) + { + // eat the double click events inside the check rect + if (e->type() == QEvent::MouseButtonDblClick) + { + return true; + } + } + else if (e->type() == QEvent::KeyPress) + { + if(static_cast(e)->key() != Qt::Key_Space && + static_cast(e)->key() != Qt::Key_Select) + { + return false; + } + } + else + { + return false; + } + + Qt::CheckState state = (static_cast(value.toInt()) == Qt::Checked + ? Qt::Unchecked : Qt::Checked); + bool success = model->setData(index, state, Qt::CheckStateRole); + if(success) + { + this->recordChange(model, index); + } + return success; +} + +// Issue 205903 fixed in Qt 4.5.0. +// Can remove this function and FileDialogFlag when minimum Qt version is 4.5 +bool QCMakeCacheModelDelegate::eventFilter(QObject* object, QEvent* evt) +{ + // workaround for what looks like a bug in Qt on Mac OS X + // where it doesn't create a QWidget wrapper for the native file dialog + // so the Qt library ends up assuming the focus was lost to something else + + if(evt->type() == QEvent::FocusOut && this->FileDialogFlag) + { + return false; + } + return QItemDelegate::eventFilter(object, evt); +} + +void QCMakeCacheModelDelegate::setModelData(QWidget* editor, + QAbstractItemModel* model, const QModelIndex& index ) const +{ + QItemDelegate::setModelData(editor, model, index); + const_cast(this)->recordChange(model, index); +} + +QSize QCMakeCacheModelDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + QSize sz = QItemDelegate::sizeHint(option, index); + QStyle *style = QApplication::style(); + + // increase to checkbox size + QStyleOptionButton opt; + opt.QStyleOption::operator=(option); + sz = sz.expandedTo(style->subElementRect(QStyle::SE_ViewItemCheckIndicator, &opt, NULL).size()); + + return sz; +} + +QSet QCMakeCacheModelDelegate::changes() const +{ + return mChanges; +} + +void QCMakeCacheModelDelegate::clearChanges() +{ + mChanges.clear(); +} + +void QCMakeCacheModelDelegate::recordChange(QAbstractItemModel* model, const QModelIndex& index) +{ + QModelIndex idx = index; + QAbstractItemModel* mymodel = model; + while(qobject_cast(mymodel)) + { + idx = static_cast(mymodel)->mapToSource(idx); + mymodel = static_cast(mymodel)->sourceModel(); + } + QCMakeCacheModel* cache_model = qobject_cast(mymodel); + if(cache_model && idx.isValid()) + { + QCMakeProperty prop; + idx = idx.sibling(idx.row(), 0); + cache_model->getPropertyData(idx, prop); + + // clean out an old one + QSet::iterator iter = mChanges.find(prop); + if(iter != mChanges.end()) + { + mChanges.erase(iter); + } + // now add the new item + mChanges.insert(prop); + } +} + diff --git a/Source/QtDialog/QCMakeCacheView.h b/Source/QtDialog/QCMakeCacheView.h new file mode 100644 index 0000000..0a628b9 --- /dev/null +++ b/Source/QtDialog/QCMakeCacheView.h @@ -0,0 +1,172 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef QCMakeCacheView_h +#define QCMakeCacheView_h + +#include "QCMake.h" +#include +#include +#include +#include + +class QSortFilterProxyModel; +class QCMakeCacheModel; +class QCMakeAdvancedFilter; + +/// Qt view class for cache properties +class QCMakeCacheView : public QTreeView +{ + Q_OBJECT +public: + QCMakeCacheView(QWidget* p); + + // retrieve the QCMakeCacheModel storing all the pointers + // this isn't necessarily the model one would get from model() + QCMakeCacheModel* cacheModel() const; + + // get whether to show advanced entries + bool showAdvanced() const; + + QSize sizeHint() const { return QSize(200,200); } + +public slots: + // set whether to show advanced entries + void setShowAdvanced(bool); + // set the search filter string. any property key or value not matching will + // be filtered out + void setSearchFilter(const QString&); + +protected: + QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers); + bool event(QEvent* e); + QCMakeCacheModel* CacheModel; + QCMakeAdvancedFilter* AdvancedFilter; + QSortFilterProxyModel* SearchFilter; +}; + +/// Qt model class for cache properties +class QCMakeCacheModel : public QStandardItemModel +{ + Q_OBJECT +public: + QCMakeCacheModel(QObject* parent); + ~QCMakeCacheModel(); + + // roles used to retrieve extra data such has help strings, types of + // properties, and the advanced flag + enum { HelpRole = Qt::ToolTipRole, + TypeRole = Qt::UserRole, + AdvancedRole, + StringsRole, + GroupRole + }; + + enum ViewType { FlatView, GroupView }; + +public slots: + // set a list of properties. This list will be sorted and grouped according + // to prefix. Any property that existed already and which is found in this + // list of properties to set will become an old property. All others will + // become new properties and be marked red. + void setProperties(const QCMakePropertyList& props); + + // set whether to show new properties in red + void setShowNewProperties(bool); + + // clear everything from the model + void clear(); + + // set flag whether the model can currently be edited. + void setEditEnabled(bool); + + // insert a new property at a row specifying all the information about the + // property + bool insertProperty(QCMakeProperty::PropertyType t, + const QString& name, const QString& description, + const QVariant& value, bool advanced); + + // set the view type + void setViewType(ViewType t); + ViewType viewType() const; + +public: + // get the properties + QCMakePropertyList properties() const; + + // editing enabled + bool editEnabled() const; + + // returns how many new properties there are + int newPropertyCount() const; + + // return flags (overloaded to modify flag based on EditEnabled flag) + Qt::ItemFlags flags (const QModelIndex& index) const; + QModelIndex buddy(const QModelIndex& idx) const; + + // get the data in the model for this property + void getPropertyData(const QModelIndex& idx1, + QCMakeProperty& prop) const; + +protected: + bool EditEnabled; + int NewPropertyCount; + bool ShowNewProperties; + ViewType View; + + // set the data in the model for this property + void setPropertyData(const QModelIndex& idx1, + const QCMakeProperty& p, bool isNew); + + // breaks up he property list into groups + // where each group has the same prefix up to the first underscore + static void breakProperties(const QSet& props, + QMap& result); + + // gets the prefix of a string up to the first _ + static QString prefix(const QString& s); + +}; + +/// Qt delegate class for interaction (or other customization) +/// with cache properties +class QCMakeCacheModelDelegate : public QItemDelegate +{ + Q_OBJECT +public: + QCMakeCacheModelDelegate(QObject* p); + /// create our own editors for cache properties + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, + const QModelIndex& index ) const; + bool editorEvent (QEvent* event, QAbstractItemModel* model, + const QStyleOptionViewItem& option, const QModelIndex& index); + bool eventFilter(QObject* object, QEvent* event); + void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const; + QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; + + QSet changes() const; + void clearChanges(); + +protected slots: + void setFileDialogFlag(bool); +protected: + bool FileDialogFlag; + // record a change to an item in the model. + // this simply saves the item in the set of changes + void recordChange(QAbstractItemModel* model, const QModelIndex& index); + + // properties changed by user via this delegate + QSet mChanges; +}; + +#endif + diff --git a/Source/QtDialog/QCMakeWidgets.cxx b/Source/QtDialog/QCMakeWidgets.cxx new file mode 100644 index 0000000..144e1f3 --- /dev/null +++ b/Source/QtDialog/QCMakeWidgets.cxx @@ -0,0 +1,134 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "QCMakeWidgets.h" + +#include +#include +#include +#include +#include + +QCMakeFileEditor::QCMakeFileEditor(QWidget* p, const QString& var) + : QLineEdit(p), Variable(var) +{ + this->ToolButton = new QToolButton(this); + this->ToolButton->setText("..."); + this->ToolButton->setCursor(QCursor(Qt::ArrowCursor)); + QObject::connect(this->ToolButton, SIGNAL(clicked(bool)), + this, SLOT(chooseFile())); +} + +QCMakeFilePathEditor::QCMakeFilePathEditor(QWidget* p, const QString& var) + : QCMakeFileEditor(p, var) +{ + this->setCompleter(new QCMakeFileCompleter(this, false)); +} + +QCMakePathEditor::QCMakePathEditor(QWidget* p, const QString& var) + : QCMakeFileEditor(p, var) +{ + this->setCompleter(new QCMakeFileCompleter(this, true)); +} + +void QCMakeFileEditor::resizeEvent(QResizeEvent* e) +{ + // make the tool button fit on the right side + int h = e->size().height(); + // move the line edit to make room for the tool button + this->setContentsMargins(0, 0, h, 0); + // put the tool button in its place + this->ToolButton->resize(h, h); + this->ToolButton->move(this->width() - h, 0); +} + +void QCMakeFilePathEditor::chooseFile() +{ + // choose a file and set it + QString path; + QFileInfo info(this->text()); + QString title; + if(this->Variable.isEmpty()) + { + title = tr("Select File"); + } + else + { + title = tr("Select File for %1"); + title = title.arg(this->Variable); + } + this->fileDialogExists(true); + path = QFileDialog::getOpenFileName(this, title, info.absolutePath()); + this->fileDialogExists(false); + + if(!path.isEmpty()) + { + this->setText(QDir::fromNativeSeparators(path)); + } +} + +void QCMakePathEditor::chooseFile() +{ + // choose a file and set it + QString path; + QString title; + if(this->Variable.isEmpty()) + { + title = tr("Select Path"); + } + else + { + title = tr("Select Path for %1"); + title = title.arg(this->Variable); + } + this->fileDialogExists(true); + path = QFileDialog::getExistingDirectory(this, title, this->text()); + this->fileDialogExists(false); + if(!path.isEmpty()) + { + this->setText(QDir::fromNativeSeparators(path)); + } +} + +// use same QDirModel for all completers +static QDirModel* fileDirModel() +{ + static QDirModel* m = NULL; + if(!m) + { + m = new QDirModel(); + } + return m; +} +static QDirModel* pathDirModel() +{ + static QDirModel* m = NULL; + if(!m) + { + m = new QDirModel(); + m->setFilter(QDir::AllDirs | QDir::Drives | QDir::NoDotAndDotDot); + } + return m; +} + +QCMakeFileCompleter::QCMakeFileCompleter(QObject* o, bool dirs) + : QCompleter(o) +{ + QDirModel* m = dirs ? pathDirModel() : fileDirModel(); + this->setModel(m); +} + +QString QCMakeFileCompleter::pathFromIndex(const QModelIndex& idx) const +{ + return QDir::fromNativeSeparators(QCompleter::pathFromIndex(idx)); +} + diff --git a/Source/QtDialog/QCMakeWidgets.h b/Source/QtDialog/QCMakeWidgets.h new file mode 100644 index 0000000..8f58df2 --- /dev/null +++ b/Source/QtDialog/QCMakeWidgets.h @@ -0,0 +1,87 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef QCMakeWidgets_h +#define QCMakeWidgets_h + +#include +#include +#include +class QToolButton; + +// common widgets for Qt based CMake + +/// Editor widget for editing paths or file paths +class QCMakeFileEditor : public QLineEdit +{ + Q_OBJECT +public: + QCMakeFileEditor(QWidget* p, const QString& var); +protected slots: + virtual void chooseFile() = 0; +signals: + void fileDialogExists(bool); +protected: + void resizeEvent(QResizeEvent* e); + QToolButton* ToolButton; + QString Variable; +}; + +/// editor widget for editing files +class QCMakePathEditor : public QCMakeFileEditor +{ + Q_OBJECT +public: + QCMakePathEditor(QWidget* p = NULL, const QString& var = QString()); + void chooseFile(); +}; + +/// editor widget for editing paths +class QCMakeFilePathEditor : public QCMakeFileEditor +{ + Q_OBJECT +public: + QCMakeFilePathEditor(QWidget* p = NULL, const QString& var = QString()); + void chooseFile(); +}; + +/// completer class that returns native cmake paths +class QCMakeFileCompleter : public QCompleter +{ + Q_OBJECT +public: + QCMakeFileCompleter(QObject* o, bool dirs); + virtual QString pathFromIndex(const QModelIndex& idx) const; +}; + +// editor for strings +class QCMakeComboBox : public QComboBox +{ + Q_OBJECT + Q_PROPERTY(QString value READ currentText WRITE setValue USER true); +public: + QCMakeComboBox(QWidget* p, QStringList strings) : QComboBox(p) + { + this->addItems(strings); + } + void setValue(const QString& v) + { + int i = this->findText(v); + if(i != -1) + { + this->setCurrentIndex(i); + } + } +}; + +#endif + diff --git a/Source/QtDialog/QMacInstallDialog.cxx b/Source/QtDialog/QMacInstallDialog.cxx new file mode 100644 index 0000000..3aa509d --- /dev/null +++ b/Source/QtDialog/QMacInstallDialog.cxx @@ -0,0 +1,122 @@ +#include "QMacInstallDialog.h" +#include +#include "cmSystemTools.h" +#include +#include +#include "ui_MacInstallDialog.h" + +class QMacInstallDialog::QMacInstallDialogInternals : public Ui::Dialog +{ +public: +}; + +QMacInstallDialog::QMacInstallDialog(QWidget*w) + :QDialog(w) +{ + this->Internals = new QMacInstallDialogInternals; + this->Internals->setupUi(this); + QObject::connect(this->Internals->choosePathButton, SIGNAL(pressed()), + this, SLOT(ShowBrowser())); + QObject::connect(this->Internals->skipInstallButton, SIGNAL(pressed()), + this, SLOT(SkipInstall())); + QObject::connect(this->Internals->doInstallButton, SIGNAL(pressed()), + this, SLOT(DoInstall())); + this->Internals->InstallPrefix->setText("/usr/bin/"); + +} + +QMacInstallDialog::~QMacInstallDialog() +{ + delete this->Internals; +} + +void QMacInstallDialog::DoInstall() +{ + QDir installDir(this->Internals->InstallPrefix->text()); + QString installTo = installDir.path(); + if(!cmSystemTools::FileExists(installTo.toAscii().data())) + { + QString message = tr("Build install does not exist, " + "should I create it?") + + "\n\n" + + tr("Directory: "); + message += installDir.path(); + QString title = tr("Create Directory"); + QMessageBox::StandardButton btn; + btn = QMessageBox::information(this, title, message, + QMessageBox::Yes | QMessageBox::No); + if(btn == QMessageBox::Yes) + { + cmSystemTools::MakeDirectory(installTo.toAscii().data()); + } + } + QDir cmExecDir(QApplication::applicationDirPath()); + cmExecDir.cd("../bin"); + QFileInfoList list = cmExecDir.entryInfoList(); + for (int i = 0; i < list.size(); ++i) + { + QFileInfo fileInfo = list.at(i); + QString filename = fileInfo.fileName(); + if(filename.size() && filename[0] == '.') + { + continue; + } + QString file = fileInfo.absoluteFilePath(); + QString newName = installTo; + newName += "/"; + newName += filename; + // Remove the old files + if(cmSystemTools::FileExists(newName.toAscii().data())) + { + std::cout << "rm [" << newName.toAscii().data() << "]\n"; + if(!cmSystemTools::RemoveFile(newName.toAscii().data())) + { + QString message = tr("Failed to remove file " + "installation may be incomplete: "); + message += newName.toAscii().data(); + QString title = tr("Error Removing file"); + QMessageBox::StandardButton btn = + QMessageBox::critical(this, title, message, + QMessageBox::Ok|QMessageBox::Abort); + if(btn == QMessageBox::Abort) + { + return; + } + } + } + std::cout << "ln -s [" << file.toAscii().data() << "] ["; + std::cout << newName.toAscii().data() << "]\n"; + if(!cmSystemTools::CreateSymlink(file.toAscii().data(), + newName.toAscii().data())) + { + QString message = tr("Failed create symlink " + "installation may be incomplete: "); + message += newName.toAscii().data(); + QString title = tr("Error Creating Symlink"); + QMessageBox::StandardButton btn = + QMessageBox::critical(this, title, message, + QMessageBox::Ok|QMessageBox::Abort); + if(btn == QMessageBox::Abort) + { + return; + } + } + } + this->done(0); +} + +void QMacInstallDialog::SkipInstall() +{ + this->done(0); +} + + +void QMacInstallDialog::ShowBrowser() +{ + QString dir = QFileDialog::getExistingDirectory(this, + tr("Enter Install Prefix"), this->Internals->InstallPrefix->text()); + if(!dir.isEmpty()) + { + this->Internals->InstallPrefix->setText(dir); + } +} diff --git a/Source/QtDialog/QMacInstallDialog.h b/Source/QtDialog/QMacInstallDialog.h new file mode 100644 index 0000000..efe67df --- /dev/null +++ b/Source/QtDialog/QMacInstallDialog.h @@ -0,0 +1,20 @@ +#ifndef QMacInstallDialog_h +#define QMacInstallDialog_h +#include + +class QMacInstallDialog : public QDialog +{ + Q_OBJECT; +public: + QMacInstallDialog(QWidget*w); + ~QMacInstallDialog(); +private slots: + void ShowBrowser(); + void SkipInstall(); + void DoInstall(); +private: + class QMacInstallDialogInternals; + QMacInstallDialogInternals* Internals; +}; + +#endif diff --git a/Source/QtDialog/QtDialogCPack.cmake.in b/Source/QtDialog/QtDialogCPack.cmake.in new file mode 100644 index 0000000..701991b --- /dev/null +++ b/Source/QtDialog/QtDialogCPack.cmake.in @@ -0,0 +1,18 @@ +SET(IS_APPLE @APPLE@) +SET(CMAKE_PACKAGE_QTGUI @CMAKE_PACKAGE_QTGUI@) + +IF(CMAKE_PACKAGE_QTGUI) + SET(CPACK_PACKAGE_EXECUTABLES "cmake-gui" "CMake (cmake-gui)" ${CPACK_PACKAGE_EXECUTABLES}) + SET(CPACK_CREATE_DESKTOP_LINKS "cmake-gui" ${CPACK_CREATE_DESKTOP_LINKS}) + IF(IS_APPLE) + # for apple install we set the install prefix to + # / and then install + # cmake into the bundle for cmake-gui and must use DESTDIR + SET(CPACK_SET_DESTDIR TRUE) + # we also want to run post install stuff to setup command line + SET(CPACK_POSTFLIGHT_SCRIPT "@CMAKE_POSTFLIGHT_SCRIPT@") + SET(CPACK_POSTUPGRADE_SCRIPT "@CMAKE_POSTUPGRADE_SCRIPT@") + ENDIF(IS_APPLE) +ENDIF(CMAKE_PACKAGE_QTGUI) + + diff --git a/Source/QtDialog/cmakecache.xml b/Source/QtDialog/cmakecache.xml new file mode 100644 index 0000000..a13b5b1 --- /dev/null +++ b/Source/QtDialog/cmakecache.xml @@ -0,0 +1,8 @@ + + + + CMake cache file + + + + diff --git a/Source/QtDialog/postflight.sh.in b/Source/QtDialog/postflight.sh.in new file mode 100755 index 0000000..33be352 --- /dev/null +++ b/Source/QtDialog/postflight.sh.in @@ -0,0 +1,3 @@ +#!/bin/bash +"$2@CMAKE_INSTALL_SUBDIR@/@CMAKE_BUNDLE_NAME@.app/Contents/MacOS/@CMAKE_BUNDLE_NAME@" --mac-install +exit 0 diff --git a/Source/QtDialog/postupgrade.sh.in b/Source/QtDialog/postupgrade.sh.in new file mode 100755 index 0000000..06bd986 --- /dev/null +++ b/Source/QtDialog/postupgrade.sh.in @@ -0,0 +1,2 @@ +#!/bin/bash +exit 0 diff --git a/Source/cmAddCustomCommandCommand.cxx b/Source/cmAddCustomCommandCommand.cxx new file mode 100644 index 0000000..5634849 --- /dev/null +++ b/Source/cmAddCustomCommandCommand.cxx @@ -0,0 +1,387 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmAddCustomCommandCommand.h" + +#include "cmTarget.h" + +#include "cmSourceFile.h" + +// cmAddCustomCommandCommand +bool cmAddCustomCommandCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + /* Let's complain at the end of this function about the lack of a particular + arg. For the moment, let's say that COMMAND, and either TARGET or SOURCE + are required. + */ + if (args.size() < 4) + { + this->SetError("called with wrong number of arguments."); + return false; + } + + std::string source, target, main_dependency, working; + std::string comment_buffer; + const char* comment = 0; + std::vector depends, outputs, output; + bool verbatim = false; + bool append = false; + std::string implicit_depends_lang; + cmCustomCommand::ImplicitDependsList implicit_depends; + + // Accumulate one command line at a time. + cmCustomCommandLine currentLine; + + // Save all command lines. + cmCustomCommandLines commandLines; + + cmTarget::CustomCommandType cctype = cmTarget::POST_BUILD; + + enum tdoing { + doing_source, + doing_command, + doing_target, + doing_depends, + doing_implicit_depends_lang, + doing_implicit_depends_file, + doing_main_dependency, + doing_output, + doing_outputs, + doing_comment, + doing_working_directory, + doing_nothing + }; + + tdoing doing = doing_nothing; + + for (unsigned int j = 0; j < args.size(); ++j) + { + std::string const& copy = args[j]; + + if(copy == "SOURCE") + { + doing = doing_source; + } + else if(copy == "COMMAND") + { + doing = doing_command; + + // Save the current command before starting the next command. + if(!currentLine.empty()) + { + commandLines.push_back(currentLine); + currentLine.clear(); + } + } + else if(copy == "PRE_BUILD") + { + cctype = cmTarget::PRE_BUILD; + } + else if(copy == "PRE_LINK") + { + cctype = cmTarget::PRE_LINK; + } + else if(copy == "POST_BUILD") + { + cctype = cmTarget::POST_BUILD; + } + else if(copy == "VERBATIM") + { + verbatim = true; + } + else if(copy == "APPEND") + { + append = true; + } + else if(copy == "TARGET") + { + doing = doing_target; + } + else if(copy == "ARGS") + { + // Ignore this old keyword. + } + else if (copy == "DEPENDS") + { + doing = doing_depends; + } + else if (copy == "OUTPUTS") + { + doing = doing_outputs; + } + else if (copy == "OUTPUT") + { + doing = doing_output; + } + else if (copy == "WORKING_DIRECTORY") + { + doing = doing_working_directory; + } + else if (copy == "MAIN_DEPENDENCY") + { + doing = doing_main_dependency; + } + else if (copy == "IMPLICIT_DEPENDS") + { + doing = doing_implicit_depends_lang; + } + else if (copy == "COMMENT") + { + doing = doing_comment; + } + else + { + std::string filename; + switch (doing) + { + case doing_output: + case doing_outputs: + if (!cmSystemTools::FileIsFullPath(copy.c_str())) + { + // This is an output to be generated, so it should be + // under the build tree. CMake 2.4 placed this under the + // source tree. However the only case that this change + // will break is when someone writes + // + // add_custom_command(OUTPUT out.txt ...) + // + // and later references "${CMAKE_CURRENT_SOURCE_DIR}/out.txt". + // This is fairly obscure so we can wait for someone to + // complain. + filename = this->Makefile->GetCurrentOutputDirectory(); + filename += "/"; + } + filename += copy; + cmSystemTools::ConvertToUnixSlashes(filename); + break; + case doing_source: + // We do not want to convert the argument to SOURCE because + // that option is only available for backward compatibility. + // Old-style use of this command may use the SOURCE==TARGET + // trick which we must preserve. If we convert the source + // to a full path then it will no longer equal the target. + default: + break; + } + + switch (doing) + { + case doing_working_directory: + working = copy; + break; + case doing_source: + source = copy; + break; + case doing_output: + output.push_back(filename); + break; + case doing_main_dependency: + main_dependency = copy; + break; + case doing_implicit_depends_lang: + implicit_depends_lang = copy; + doing = doing_implicit_depends_file; + break; + case doing_implicit_depends_file: + { + // An implicit dependency starting point is also an + // explicit dependency. + std::string dep = copy; + cmSystemTools::ConvertToUnixSlashes(dep); + depends.push_back(dep); + + // Add the implicit dependency language and file. + cmCustomCommand::ImplicitDependsPair + entry(implicit_depends_lang, dep); + implicit_depends.push_back(entry); + + // Switch back to looking for a language. + doing = doing_implicit_depends_lang; + } + break; + case doing_command: + currentLine.push_back(copy); + break; + case doing_target: + target = copy; + break; + case doing_depends: + { + std::string dep = copy; + cmSystemTools::ConvertToUnixSlashes(dep); + depends.push_back(dep); + } + break; + case doing_outputs: + outputs.push_back(filename); + break; + case doing_comment: + comment_buffer = copy; + comment = comment_buffer.c_str(); + break; + default: + this->SetError("Wrong syntax. Unknown type of argument."); + return false; + } + } + } + + // Store the last command line finished. + if(!currentLine.empty()) + { + commandLines.push_back(currentLine); + currentLine.clear(); + } + + // At this point we could complain about the lack of arguments. For + // the moment, let's say that COMMAND, TARGET are always required. + if(output.empty() && target.empty()) + { + this->SetError("Wrong syntax. A TARGET or OUTPUT must be specified."); + return false; + } + + if(source.empty() && !target.empty() && !output.empty()) + { + this->SetError( + "Wrong syntax. A TARGET and OUTPUT can not both be specified."); + return false; + } + if(append && output.empty()) + { + this->SetError("given APPEND option with no OUTPUT."); + return false; + } + + // Make sure the output names and locations are safe. + if(!this->CheckOutputs(output) || !this->CheckOutputs(outputs)) + { + return false; + } + + // Check for an append request. + if(append) + { + // Lookup an existing command. + if(cmSourceFile* sf = + this->Makefile->GetSourceFileWithOutput(output[0].c_str())) + { + if(cmCustomCommand* cc = sf->GetCustomCommand()) + { + cc->AppendCommands(commandLines); + cc->AppendDepends(depends); + cc->AppendImplicitDepends(implicit_depends); + return true; + } + } + + // No command for this output exists. + cmOStringStream e; + e << "given APPEND option with output \"" << output[0].c_str() + << "\" which is not already a custom command output."; + this->SetError(e.str().c_str()); + return false; + } + + // Convert working directory to a full path. + if(!working.empty()) + { + const char* build_dir = this->Makefile->GetCurrentOutputDirectory(); + working = cmSystemTools::CollapseFullPath(working.c_str(), build_dir); + } + + // Choose which mode of the command to use. + bool escapeOldStyle = !verbatim; + if(source.empty() && output.empty()) + { + // Source is empty, use the target. + std::vector no_depends; + this->Makefile->AddCustomCommandToTarget(target.c_str(), no_depends, + commandLines, cctype, + comment, working.c_str(), + escapeOldStyle); + } + else if(target.empty()) + { + // Target is empty, use the output. + this->Makefile->AddCustomCommandToOutput(output, depends, + main_dependency.c_str(), + commandLines, comment, + working.c_str(), false, + escapeOldStyle); + + // Add implicit dependency scanning requests if any were given. + if(!implicit_depends.empty()) + { + bool okay = false; + if(cmSourceFile* sf = + this->Makefile->GetSourceFileWithOutput(output[0].c_str())) + { + if(cmCustomCommand* cc = sf->GetCustomCommand()) + { + okay = true; + cc->SetImplicitDepends(implicit_depends); + } + } + if(!okay) + { + cmOStringStream e; + e << "could not locate source file with a custom command producing \"" + << output[0] << "\" even though this command tried to create it!"; + this->SetError(e.str().c_str()); + return false; + } + } + } + else + { + // Use the old-style mode for backward compatibility. + this->Makefile->AddCustomCommandOldStyle(target.c_str(), outputs, depends, + source.c_str(), commandLines, + comment); + } + + return true; +} + +//---------------------------------------------------------------------------- +bool +cmAddCustomCommandCommand +::CheckOutputs(const std::vector& outputs) +{ + for(std::vector::const_iterator o = outputs.begin(); + o != outputs.end(); ++o) + { + // Make sure the file will not be generated into the source + // directory during an out of source build. + if(!this->Makefile->CanIWriteThisFile(o->c_str())) + { + std::string e = "attempted to have a file \"" + *o + + "\" in a source directory as an output of custom command."; + this->SetError(e.c_str()); + cmSystemTools::SetFatalErrorOccured(); + return false; + } + + // Make sure the output file name has no invalid characters. + std::string::size_type pos = o->find_first_of("#<>"); + if(pos != o->npos) + { + cmOStringStream msg; + msg << "called with OUTPUT containing a \"" << (*o)[pos] + << "\". This character is not allowed."; + this->SetError(msg.str().c_str()); + return false; + } + } + return true; +} diff --git a/Source/cmAddCustomCommandCommand.h b/Source/cmAddCustomCommandCommand.h new file mode 100644 index 0000000..1f770ed --- /dev/null +++ b/Source/cmAddCustomCommandCommand.h @@ -0,0 +1,187 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmAddCustomCommandCommand_h +#define cmAddCustomCommandCommand_h + +#include "cmCommand.h" +#include "cmDocumentGeneratorExpressions.h" + +/** \class cmAddCustomCommandCommand + * \brief + * + * cmAddCustomCommandCommand defines a new command (rule) that can + * be executed within the build process + * + */ + +class cmAddCustomCommandCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmAddCustomCommandCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const {return "add_custom_command";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Add a custom build rule to the generated build system."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + "There are two main signatures for add_custom_command " + "The first signature is for adding a custom command " + "to produce an output.\n" + " add_custom_command(OUTPUT output1 [output2 ...]\n" + " COMMAND command1 [ARGS] [args1...]\n" + " [COMMAND command2 [ARGS] [args2...] ...]\n" + " [MAIN_DEPENDENCY depend]\n" + " [DEPENDS [depends...]]\n" + " [IMPLICIT_DEPENDS depend1 ...]\n" + " [WORKING_DIRECTORY dir]\n" + " [COMMENT comment] [VERBATIM] [APPEND])\n" + "This defines a command to generate specified OUTPUT file(s). " + "A target created in the same directory (CMakeLists.txt file) that " + "specifies any output of the custom command as a source file is given " + "a rule to generate the file using the command at build time. " + "Do not list the output in more than one independent target that may " + "build in parallel or the two instances of the rule may conflict " + "(instead use add_custom_target to drive the command and make the " + "other targets depend on that one). " + "If an output name is a relative path it will be interpreted " + "relative to the build tree directory corresponding to the current " + "source directory. " + "Note that MAIN_DEPENDENCY is completely optional and is " + "used as a suggestion to visual studio about where to hang the " + "custom command. In makefile terms this creates a new target in the " + "following form:\n" + " OUTPUT: MAIN_DEPENDENCY DEPENDS\n" + " COMMAND\n" + "If more than one command is specified they will be executed in order. " + "The optional ARGS argument is for backward compatibility and will be " + "ignored.\n" + "The second signature adds a custom command to a target " + "such as a library or executable. This is useful for " + "performing an operation before or after building the target. " + "The command becomes part of the target and will only execute " + "when the target itself is built. If the target is already built," + " the command will not execute.\n" + " add_custom_command(TARGET target\n" + " PRE_BUILD | PRE_LINK | POST_BUILD\n" + " COMMAND command1 [ARGS] [args1...]\n" + " [COMMAND command2 [ARGS] [args2...] ...]\n" + " [WORKING_DIRECTORY dir]\n" + " [COMMENT comment] [VERBATIM])\n" + "This defines a new command that will be associated with " + "building the specified target. When the command will " + "happen is determined by which of the following is specified:\n" + " PRE_BUILD - run before all other dependencies\n" + " PRE_LINK - run after other dependencies\n" + " POST_BUILD - run after the target has been built\n" + "Note that the PRE_BUILD option is only supported on Visual " + "Studio 7 or later. For all other generators PRE_BUILD " + "will be treated as PRE_LINK.\n" + "If WORKING_DIRECTORY is specified the command will be executed " + "in the directory given. " + "If it is a relative path it will be interpreted relative to the " + "build tree directory corresponding to the current source directory. " + "If COMMENT is set, the value will be displayed as a " + "message before the commands are executed at build time. " + "If APPEND is specified the COMMAND and DEPENDS option values " + "are appended to the custom command for the first output specified. " + "There must have already been a previous call to this command with " + "the same output. The COMMENT, WORKING_DIRECTORY, and MAIN_DEPENDENCY " + "options are currently ignored when APPEND is given, " + "but may be used in the future." + "\n" + "If VERBATIM is given then all arguments to the commands will be " + "escaped properly for the build tool so that the invoked command " + "receives each argument unchanged. " + "Note that one level of escapes is still used by the CMake language " + "processor before add_custom_command even sees the arguments. " + "Use of VERBATIM is recommended as it enables correct behavior. " + "When VERBATIM is not given the behavior is platform specific because " + "there is no protection of tool-specific special characters." + "\n" + "If the output of the custom command is not actually " + "created as a file on disk it should be marked as SYMBOLIC with " + "SET_SOURCE_FILES_PROPERTIES.\n" + + "The IMPLICIT_DEPENDS option requests scanning of implicit " + "dependencies of an input file. The language given specifies the " + "programming language whose corresponding dependency scanner should " + "be used. Currently only C and CXX language scanners are supported. " + "Dependencies discovered from the scanning are added to those of " + "the custom command at build time. Note that the IMPLICIT_DEPENDS " + "option is currently supported only for Makefile generators and " + "will be ignored by other generators." + "\n" + "If COMMAND specifies an executable target (created by " + "ADD_EXECUTABLE) it will automatically be replaced by the location " + "of the executable created at build time. Additionally a " + "target-level dependency will be added so that the executable target " + "will be built before any target using this custom command. However " + "this does NOT add a file-level dependency that would cause the " + "custom command to re-run whenever the executable is recompiled." + "\n" + "Arguments to COMMAND may use \"generator expressions\" with the " + "syntax \"$<...>\". " + CM_DOCUMENT_COMMAND_GENERATOR_EXPRESSIONS + "References to target names in generator expressions imply " + "target-level dependencies, but NOT file-level dependencies. " + "List target names with the DEPENDS option to add file dependencies." + "\n" + "The DEPENDS option specifies files on which the command depends. " + "If any dependency is an OUTPUT of another custom command in the " + "same directory (CMakeLists.txt file) CMake automatically brings the " + "other custom command into the target in which this command is built. " + "If DEPENDS is not specified the command will run whenever the OUTPUT " + "is missing; if the command does not actually create the OUTPUT then " + "the rule will always run. " + "If DEPENDS specifies any target (created by an ADD_* command) " + "a target-level dependency is created to make sure the target is " + "built before any target using this custom command. Additionally, " + "if the target is an executable or library a file-level dependency " + "is created to cause the custom command to re-run whenever the target " + "is recompiled.\n" + ; + } + + cmTypeMacro(cmAddCustomCommandCommand, cmCommand); +protected: + bool CheckOutputs(const std::vector& outputs); +}; + + +#endif diff --git a/Source/cmAddCustomTargetCommand.cxx b/Source/cmAddCustomTargetCommand.cxx new file mode 100644 index 0000000..4eba886 --- /dev/null +++ b/Source/cmAddCustomTargetCommand.cxx @@ -0,0 +1,192 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmAddCustomTargetCommand.h" + +// cmAddCustomTargetCommand +bool cmAddCustomTargetCommand +::InitialPass(std::vector const& args, + cmExecutionStatus&) +{ + if(args.size() < 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + // Check the target name. + if(args[0].find_first_of("/\\") != args[0].npos) + { + if(!this->Makefile->NeedBackwardsCompatibility(2,2)) + { + cmOStringStream e; + e << "called with invalid target name \"" << args[0] + << "\". Target names may not contain a slash. " + << "Use ADD_CUSTOM_COMMAND to generate files. " + << "Set CMAKE_BACKWARDS_COMPATIBILITY to 2.2 " + << "or lower to skip this check."; + this->SetError(e.str().c_str()); + return false; + } + } + + // Accumulate one command line at a time. + cmCustomCommandLine currentLine; + + // Save all command lines. + cmCustomCommandLines commandLines; + + // Accumulate dependencies. + std::vector depends; + std::string working_directory; + bool verbatim = false; + std::string comment_buffer; + const char* comment = 0; + std::vector sources; + + // Keep track of parser state. + enum tdoing { + doing_command, + doing_depends, + doing_working_directory, + doing_comment, + doing_source, + doing_verbatim + }; + tdoing doing = doing_command; + + // Look for the ALL option. + bool excludeFromAll = true; + unsigned int start = 1; + if(args.size() > 1) + { + if(args[1] == "ALL") + { + excludeFromAll = false; + start = 2; + } + } + + // Parse the rest of the arguments. + for(unsigned int j = start; j < args.size(); ++j) + { + std::string const& copy = args[j]; + + if(copy == "DEPENDS") + { + doing = doing_depends; + } + else if(copy == "WORKING_DIRECTORY") + { + doing = doing_working_directory; + } + else if(copy == "VERBATIM") + { + doing = doing_verbatim; + verbatim = true; + } + else if (copy == "COMMENT") + { + doing = doing_comment; + } + else if(copy == "COMMAND") + { + doing = doing_command; + + // Save the current command before starting the next command. + if(!currentLine.empty()) + { + commandLines.push_back(currentLine); + currentLine.clear(); + } + } + else if(copy == "SOURCES") + { + doing = doing_source; + } + else + { + switch (doing) + { + case doing_working_directory: + working_directory = copy; + break; + case doing_command: + currentLine.push_back(copy); + break; + case doing_depends: + { + std::string dep = copy; + cmSystemTools::ConvertToUnixSlashes(dep); + depends.push_back(dep); + } + break; + case doing_comment: + comment_buffer = copy; + comment = comment_buffer.c_str(); + break; + case doing_source: + sources.push_back(copy); + break; + default: + this->SetError("Wrong syntax. Unknown type of argument."); + return false; + } + } + } + + std::string::size_type pos = args[0].find_first_of("#<>"); + if(pos != args[0].npos) + { + cmOStringStream msg; + msg << "called with target name containing a \"" << args[0][pos] + << "\". This character is not allowed."; + this->SetError(msg.str().c_str()); + return false; + } + + // Store the last command line finished. + if(!currentLine.empty()) + { + commandLines.push_back(currentLine); + currentLine.clear(); + } + + // Enforce name uniqueness. + { + std::string msg; + if(!this->Makefile->EnforceUniqueName(args[0], msg, true)) + { + this->SetError(msg.c_str()); + return false; + } + } + + // Convert working directory to a full path. + if(!working_directory.empty()) + { + const char* build_dir = this->Makefile->GetCurrentOutputDirectory(); + working_directory = + cmSystemTools::CollapseFullPath(working_directory.c_str(), build_dir); + } + + // Add the utility target to the makefile. + bool escapeOldStyle = !verbatim; + cmTarget* target = + this->Makefile->AddUtilityCommand(args[0].c_str(), excludeFromAll, + working_directory.c_str(), depends, + commandLines, escapeOldStyle, comment); + + // Add additional user-specified source files to the target. + target->AddSources(sources); + + return true; +} diff --git a/Source/cmAddCustomTargetCommand.h b/Source/cmAddCustomTargetCommand.h new file mode 100644 index 0000000..50bffef --- /dev/null +++ b/Source/cmAddCustomTargetCommand.h @@ -0,0 +1,108 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmAddCustomTargetCommand_h +#define cmAddCustomTargetCommand_h + +#include "cmCommand.h" + +/** \class cmAddCustomTargetCommand + * \brief Command that adds a target to the build system. + * + * cmAddCustomTargetCommand adds an extra target to the build system. + * This is useful when you would like to add special + * targets like "install,", "clean," and so on. + */ +class cmAddCustomTargetCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmAddCustomTargetCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const + {return "add_custom_target";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Add a target with no output so it will always be built."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " add_custom_target(Name [ALL] [command1 [args1...]]\n" + " [COMMAND command2 [args2...] ...]\n" + " [DEPENDS depend depend depend ... ]\n" + " [WORKING_DIRECTORY dir]\n" + " [COMMENT comment] [VERBATIM]\n" + " [SOURCES src1 [src2...]])\n" + "Adds a target with the given name that executes the given commands. " + "The target has no output file and is ALWAYS CONSIDERED OUT OF DATE " + "even if the commands try to create a file with the name of the " + "target. Use ADD_CUSTOM_COMMAND to generate a file with dependencies. " + "By default nothing depends on the custom target. Use " + "ADD_DEPENDENCIES to add dependencies to or from other targets. " + "If the ALL option is specified " + "it indicates that this target should be added to the default build " + "target so that it will be run every time " + "(the command cannot be called ALL). " + "The command and arguments are optional and if not specified an " + "empty target will be created. " + "If WORKING_DIRECTORY is set, then the command will be run in that " + "directory. " + "If it is a relative path it will be interpreted relative to the " + "build tree directory corresponding to the current source directory. " + "If COMMENT is set, the value will be displayed as a " + "message before the commands are executed at build time. " + "Dependencies listed with the DEPENDS argument may reference files " + "and outputs of custom commands created with add_custom_command() in " + "the same directory (CMakeLists.txt file).\n" + "If VERBATIM is given then all arguments to the commands will be " + "escaped properly for the build tool so that the invoked command " + "receives each argument unchanged. " + "Note that one level of escapes is still used by the CMake language " + "processor before add_custom_target even sees the arguments. " + "Use of VERBATIM is recommended as it enables correct behavior. " + "When VERBATIM is not given the behavior is platform specific because " + "there is no protection of tool-specific special characters." + "\n" + "The SOURCES option specifies additional source files to be included " + "in the custom target. " + "Specified source files will be added to IDE project files for " + "convenience in editing even if they have not build rules." + ; + } + + cmTypeMacro(cmAddCustomTargetCommand, cmCommand); +}; + +#endif diff --git a/Source/cmAddDefinitionsCommand.cxx b/Source/cmAddDefinitionsCommand.cxx new file mode 100644 index 0000000..b813e3e --- /dev/null +++ b/Source/cmAddDefinitionsCommand.cxx @@ -0,0 +1,31 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmAddDefinitionsCommand.h" + +// cmAddDefinitionsCommand +bool cmAddDefinitionsCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + // it is OK to have no arguments + if(args.size() < 1 ) + { + return true; + } + + for(std::vector::const_iterator i = args.begin(); + i != args.end(); ++i) + { + this->Makefile->AddDefineFlag(i->c_str()); + } + return true; +} + diff --git a/Source/cmAddDefinitionsCommand.h b/Source/cmAddDefinitionsCommand.h new file mode 100644 index 0000000..7bb3767 --- /dev/null +++ b/Source/cmAddDefinitionsCommand.h @@ -0,0 +1,82 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmAddDefinitionsCommand_h +#define cmAddDefinitionsCommand_h + +#include "cmCommand.h" + +/** \class cmAddDefinitionsCommand + * \brief Specify a list of compiler defines + * + * cmAddDefinitionsCommand specifies a list of compiler defines. These defines + * will be added to the compile command. + */ +class cmAddDefinitionsCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmAddDefinitionsCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const {return "add_definitions";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Adds -D define flags to the compilation of source files."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " add_definitions(-DFOO -DBAR ...)\n" + "Adds flags to the compiler command line for sources in the current " + "directory and below. This command can be used to add any flags, " + "but it was originally intended to add preprocessor definitions. " + "Flags beginning in -D or /D that look like preprocessor definitions " + "are automatically added to the COMPILE_DEFINITIONS property for " + "the current directory. Definitions with non-trival values may be " + "left in the set of flags instead of being converted for reasons of " + "backwards compatibility. See documentation of the directory, " + "target, and source file COMPILE_DEFINITIONS properties for details " + "on adding preprocessor definitions to specific scopes and " + "configurations." + ; + } + + cmTypeMacro(cmAddDefinitionsCommand, cmCommand); +private: + bool ParseDefinition(std::string const& def); +}; + + + +#endif diff --git a/Source/cmAddDependenciesCommand.cxx b/Source/cmAddDependenciesCommand.cxx new file mode 100644 index 0000000..a77140d --- /dev/null +++ b/Source/cmAddDependenciesCommand.cxx @@ -0,0 +1,46 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmAddDependenciesCommand.h" +#include "cmLocalGenerator.h" +#include "cmGlobalGenerator.h" + +// cmDependenciesCommand +bool cmAddDependenciesCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 2 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + std::string target_name = args[0]; + if(cmTarget* target = this->Makefile->FindTargetToUse(target_name.c_str())) + { + std::vector::const_iterator s = args.begin(); + ++s; // skip over target_name + for (; s != args.end(); ++s) + { + target->AddUtility(s->c_str()); + } + } + else + { + std::string error = "Adding dependency to non-existent target: "; + error += target_name; + this->SetError(error.c_str()); + return false; + } + + return true; +} + diff --git a/Source/cmAddDependenciesCommand.h b/Source/cmAddDependenciesCommand.h new file mode 100644 index 0000000..14a7741 --- /dev/null +++ b/Source/cmAddDependenciesCommand.h @@ -0,0 +1,78 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDependenciessCommand_h +#define cmDependenciessCommand_h + +#include "cmCommand.h" + +/** \class cmAddDependenciesCommand + * \brief Add a dependency to a target + * + * cmAddDependenciesCommand adds a dependency to a target + */ +class cmAddDependenciesCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmAddDependenciesCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "add_dependencies";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Add a dependency between top-level targets."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " add_dependencies(target-name depend-target1\n" + " depend-target2 ...)\n" + "Make a top-level target depend on other top-level targets. A " + "top-level target is one created by ADD_EXECUTABLE, ADD_LIBRARY, " + "or ADD_CUSTOM_TARGET. Adding dependencies with this command " + "can be used to make sure one target is built before another target. " + "Dependencies added to an IMPORTED target are followed transitively " + "in its place since the target itself does not build. " + "See the DEPENDS option of ADD_CUSTOM_TARGET " + "and ADD_CUSTOM_COMMAND for adding file-level dependencies in custom " + "rules. See the OBJECT_DEPENDS option in " + "SET_SOURCE_FILES_PROPERTIES to add file-level dependencies to object " + "files."; + } + + cmTypeMacro(cmAddDependenciesCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmAddExecutableCommand.cxx b/Source/cmAddExecutableCommand.cxx new file mode 100644 index 0000000..6dd8e5c --- /dev/null +++ b/Source/cmAddExecutableCommand.cxx @@ -0,0 +1,136 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmAddExecutableCommand.h" + +// cmExecutableCommand +bool cmAddExecutableCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 2 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + std::vector::const_iterator s = args.begin(); + + std::string exename = *s; + + ++s; + bool use_win32 = false; + bool use_macbundle = false; + bool excludeFromAll = false; + bool importTarget = false; + bool importGlobal = false; + while ( s != args.end() ) + { + if (*s == "WIN32") + { + ++s; + use_win32 = true; + } + else if ( *s == "MACOSX_BUNDLE" ) + { + ++s; + use_macbundle = true; + } + else if(*s == "EXCLUDE_FROM_ALL") + { + ++s; + excludeFromAll = true; + } + else if(*s == "IMPORTED") + { + ++s; + importTarget = true; + } + else if(importTarget && *s == "GLOBAL") + { + ++s; + importGlobal = true; + } + else + { + break; + } + } + + // Special modifiers are not allowed with IMPORTED signature. + if(importTarget + && (use_win32 || use_macbundle || excludeFromAll)) + { + if(use_win32) + { + this->SetError("may not be given WIN32 for an IMPORTED target."); + } + else if(use_macbundle) + { + this->SetError( + "may not be given MACOSX_BUNDLE for an IMPORTED target."); + } + else // if(excludeFromAll) + { + this->SetError( + "may not be given EXCLUDE_FROM_ALL for an IMPORTED target."); + } + return false; + } + + // Handle imported target creation. + if(importTarget) + { + // Make sure the target does not already exist. + if(this->Makefile->FindTargetToUse(exename.c_str())) + { + cmOStringStream e; + e << "cannot create imported target \"" << exename + << "\" because another target with the same name already exists."; + this->SetError(e.str().c_str()); + return false; + } + + // Create the imported target. + this->Makefile->AddImportedTarget(exename.c_str(), cmTarget::EXECUTABLE, + importGlobal); + return true; + } + + // Enforce name uniqueness. + { + std::string msg; + if(!this->Makefile->EnforceUniqueName(exename, msg)) + { + this->SetError(msg.c_str()); + return false; + } + } + + if (s == args.end()) + { + this->SetError + ("called with incorrect number of arguments, no sources provided"); + return false; + } + + std::vector srclists(s, args.end()); + cmTarget* tgt = this->Makefile->AddExecutable(exename.c_str(), srclists, + excludeFromAll); + if ( use_win32 ) + { + tgt->SetProperty("WIN32_EXECUTABLE", "ON"); + } + if ( use_macbundle) + { + tgt->SetProperty("MACOSX_BUNDLE", "ON"); + } + + return true; +} diff --git a/Source/cmAddExecutableCommand.h b/Source/cmAddExecutableCommand.h new file mode 100644 index 0000000..1e9f9b3 --- /dev/null +++ b/Source/cmAddExecutableCommand.h @@ -0,0 +1,117 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExecutablesCommand_h +#define cmExecutablesCommand_h + +#include "cmCommand.h" + +/** \class cmExecutablesCommand + * \brief Defines a list of executables to build. + * + * cmExecutablesCommand defines a list of executable (i.e., test) + * programs to create. + */ +class cmAddExecutableCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmAddExecutableCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "add_executable";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return + "Add an executable to the project using the specified source files."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " add_executable( [WIN32] [MACOSX_BUNDLE]\n" + " [EXCLUDE_FROM_ALL]\n" + " source1 source2 ... sourceN)\n" + "Adds an executable target called to be built from the " + "source files listed in the command invocation. " + "The corresponds to the logical target name and must be " + "globally unique within a project. " + "The actual file name of the executable built is constructed based on " + "conventions of the native platform " + "(such as .exe or just ). " + "\n" + "By default the executable file will be created in the build tree " + "directory corresponding to the source tree directory in which " + "the command was invoked. " + "See documentation of the RUNTIME_OUTPUT_DIRECTORY " + "target property to change this location. " + "See documentation of the OUTPUT_NAME target property to change " + "the part of the final file name. " + "\n" + "If WIN32 is given the property WIN32_EXECUTABLE will be set on the " + "target created. " + "See documentation of that target property for details." + "\n" + "If MACOSX_BUNDLE is given the corresponding property will be " + "set on the created target. " + "See documentation of the MACOSX_BUNDLE target property for details." + "\n" + "If EXCLUDE_FROM_ALL is given the corresponding property will be " + "set on the created target. " + "See documentation of the EXCLUDE_FROM_ALL target property for " + "details." + "\n" + "The add_executable command can also create IMPORTED executable " + "targets using this signature:\n" + " add_executable( IMPORTED [GLOBAL])\n" + "An IMPORTED executable target references an executable file located " + "outside the project. " + "No rules are generated to build it. " + "The target name has scope in the directory in which it is created " + "and below, but the GLOBAL option extends visibility. " + "It may be referenced like any target built within the project. " + "IMPORTED executables are useful for convenient reference from " + "commands like add_custom_command. " + "Details about the imported executable are specified by setting " + "properties whose names begin in \"IMPORTED_\". " + "The most important such property is IMPORTED_LOCATION " + "(and its per-configuration version IMPORTED_LOCATION_) " + "which specifies the location of the main executable file on disk. " + "See documentation of the IMPORTED_* properties for more information." + ; + } + + cmTypeMacro(cmAddExecutableCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmAddLibraryCommand.cxx b/Source/cmAddLibraryCommand.cxx new file mode 100644 index 0000000..c1d0e9d --- /dev/null +++ b/Source/cmAddLibraryCommand.cxx @@ -0,0 +1,192 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmAddLibraryCommand.h" + +#include "cmake.h" + +// cmLibraryCommand +bool cmAddLibraryCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + // Library type defaults to value of BUILD_SHARED_LIBS, if it exists, + // otherwise it defaults to static library. + cmTarget::TargetType type = cmTarget::SHARED_LIBRARY; + if (cmSystemTools::IsOff(this->Makefile->GetDefinition("BUILD_SHARED_LIBS"))) + { + type = cmTarget::STATIC_LIBRARY; + } + bool excludeFromAll = false; + bool importTarget = false; + bool importGlobal = false; + + std::vector::const_iterator s = args.begin(); + + std::string libName = *s; + + ++s; + + // If the second argument is "SHARED" or "STATIC", then it controls + // the type of library. Otherwise, it is treated as a source or + // source list name. There may be two keyword arguments, check for them + bool haveSpecifiedType = false; + while ( s != args.end() ) + { + std::string libType = *s; + if(libType == "STATIC") + { + ++s; + type = cmTarget::STATIC_LIBRARY; + haveSpecifiedType = true; + } + else if(libType == "SHARED") + { + ++s; + type = cmTarget::SHARED_LIBRARY; + haveSpecifiedType = true; + } + else if(libType == "MODULE") + { + ++s; + type = cmTarget::MODULE_LIBRARY; + haveSpecifiedType = true; + } + else if(libType == "OBJECT") + { + ++s; + type = cmTarget::OBJECT_LIBRARY; + haveSpecifiedType = true; + } + else if(libType == "UNKNOWN") + { + ++s; + type = cmTarget::UNKNOWN_LIBRARY; + haveSpecifiedType = true; + } + else if(*s == "EXCLUDE_FROM_ALL") + { + ++s; + excludeFromAll = true; + } + else if(*s == "IMPORTED") + { + ++s; + importTarget = true; + } + else if(importTarget && *s == "GLOBAL") + { + ++s; + importGlobal = true; + } + else + { + break; + } + } + + /* ideally we should check whether for the linker language of the target + CMAKE_${LANG}_CREATE_SHARED_LIBRARY is defined and if not default to + STATIC. But at this point we know only the name of the target, but not + yet its linker language. */ + if ((type != cmTarget::STATIC_LIBRARY) && + (this->Makefile->GetCMakeInstance()->GetPropertyAsBool( + "TARGET_SUPPORTS_SHARED_LIBS") == false)) + { + std::string msg = "ADD_LIBRARY for library "; + msg += args[0]; + msg += " is used with the "; + msg += type==cmTarget::SHARED_LIBRARY ? "SHARED" : "MODULE"; + msg += " option, but the target platform supports only STATIC libraries. " + "Building it STATIC instead. This may lead to problems."; + cmSystemTools::Message(msg.c_str() ,"Warning"); + type = cmTarget::STATIC_LIBRARY; + } + + // Handle imported target creation. + if(importTarget) + { + // The IMPORTED signature requires a type to be specified explicitly. + if (!haveSpecifiedType) + { + 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())) + { + cmOStringStream e; + e << "cannot create imported target \"" << libName + << "\" because another target with the same name already exists."; + this->SetError(e.str().c_str()); + return false; + } + + // Create the imported target. + this->Makefile->AddImportedTarget(libName.c_str(), type, importGlobal); + return true; + } + + // A non-imported target may not have UNKNOWN type. + if(type == cmTarget::UNKNOWN_LIBRARY) + { + this->Makefile->IssueMessage( + cmake::FATAL_ERROR, + "The UNKNOWN library type may be used only for IMPORTED libraries." + ); + return true; + } + + // Enforce name uniqueness. + { + std::string msg; + if(!this->Makefile->EnforceUniqueName(libName, msg)) + { + this->SetError(msg.c_str()); + return false; + } + } + + if (s == args.end()) + { + std::string msg = "You have called ADD_LIBRARY for library "; + msg += args[0]; + msg += " without any source files. This typically indicates a problem "; + msg += "with your CMakeLists.txt file"; + cmSystemTools::Message(msg.c_str() ,"Warning"); + } + + std::vector srclists; + while (s != args.end()) + { + srclists.push_back(*s); + ++s; + } + + this->Makefile->AddLibrary(libName.c_str(), type, srclists, excludeFromAll); + + return true; +} + + diff --git a/Source/cmAddLibraryCommand.h b/Source/cmAddLibraryCommand.h new file mode 100644 index 0000000..b1ae202 --- /dev/null +++ b/Source/cmAddLibraryCommand.h @@ -0,0 +1,142 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmLibrarysCommand_h +#define cmLibrarysCommand_h + +#include "cmCommand.h" + +/** \class cmLibrarysCommand + * \brief Defines a list of executables to build. + * + * cmLibrarysCommand defines a list of executable (i.e., test) + * programs to create. + */ +class cmAddLibraryCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmAddLibraryCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "add_library";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Add a library to the project using the specified source files."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " add_library( [STATIC | SHARED | MODULE]\n" + " [EXCLUDE_FROM_ALL]\n" + " source1 source2 ... sourceN)\n" + "Adds a library target called to be built from the " + "source files listed in the command invocation. " + "The corresponds to the logical target name and must be " + "globally unique within a project. " + "The actual file name of the library built is constructed based on " + "conventions of the native platform " + "(such as lib.a or .lib)." + "\n" + "STATIC, SHARED, or MODULE may be given to specify the type of library " + "to be created. " + "STATIC libraries are archives of object files for use when linking " + "other targets. " + "SHARED libraries are linked dynamically and loaded at runtime. " + "MODULE libraries are plugins that are not linked into other targets " + "but may be loaded dynamically at runtime using dlopen-like " + "functionality. " + "If no type is given explicitly the type is STATIC or SHARED based " + "on whether the current value of the variable BUILD_SHARED_LIBS is " + "true." + "\n" + "By default the library file will be created in the build tree " + "directory corresponding to the source tree directory in which " + "the command was invoked. " + "See documentation of the ARCHIVE_OUTPUT_DIRECTORY, " + "LIBRARY_OUTPUT_DIRECTORY, and RUNTIME_OUTPUT_DIRECTORY " + "target properties to change this location. " + "See documentation of the OUTPUT_NAME target property to change " + "the part of the final file name. " + "\n" + "If EXCLUDE_FROM_ALL is given the corresponding property will be " + "set on the created target. " + "See documentation of the EXCLUDE_FROM_ALL target property for " + "details." + "\n" + "The add_library command can also create IMPORTED library " + "targets using this signature:\n" + " add_library( IMPORTED\n" + " [GLOBAL])\n" + "An IMPORTED library target references a library file located " + "outside the project. " + "No rules are generated to build it. " + "The target name has scope in the directory in which it is created " + "and below, but the GLOBAL option extends visibility. " + "It may be referenced like any target built within the project. " + "IMPORTED libraries are useful for convenient reference from " + "commands like target_link_libraries. " + "Details about the imported library are specified by setting " + "properties whose names begin in \"IMPORTED_\". " + "The most important such property is IMPORTED_LOCATION " + "(and its per-configuration version IMPORTED_LOCATION_) " + "which specifies the location of the main library file on disk. " + "See documentation of the IMPORTED_* properties for more information." + "\n" + "The signature\n" + " add_library( OBJECT ...)\n" + "creates a special \"object library\" target. " + "An object library compiles source files but does not archive or link " + "their object files into a library. " + "Instead other targets created by add_library or add_executable may " + "reference the objects using an expression of the form " + "$ as a source, where \"objlib\" is the " + "object library name. " + "For example:\n" + " add_library(... $ ...)\n" + " add_executable(... $ ...)\n" + "will include objlib's object files in a library and an executable " + "along with those compiled from their own sources. " + "Object libraries may contain only sources (and headers) that compile " + "to object files. " + "They may contain custom commands generating such sources, but not " + "PRE_BUILD, PRE_LINK, or POST_BUILD commands. " + "Object libraries cannot be imported, exported, installed, or linked." + ; + } + + cmTypeMacro(cmAddLibraryCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmAddSubDirectoryCommand.cxx b/Source/cmAddSubDirectoryCommand.cxx new file mode 100644 index 0000000..5fca527 --- /dev/null +++ b/Source/cmAddSubDirectoryCommand.cxx @@ -0,0 +1,123 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmAddSubDirectoryCommand.h" + +// cmAddSubDirectoryCommand +bool cmAddSubDirectoryCommand::InitialPass +(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + // store the binpath + std::string srcArg = args[0]; + std::string binArg; + + bool excludeFromAll = false; + + // process the rest of the arguments looking for optional args + std::vector::const_iterator i = args.begin(); + ++i; + for(;i != args.end(); ++i) + { + if(*i == "EXCLUDE_FROM_ALL") + { + excludeFromAll = true; + continue; + } + else if (!binArg.size()) + { + binArg = *i; + } + else + { + this->SetError("called with incorrect number of arguments"); + return false; + } + } + + // Compute the full path to the specified source directory. + // Interpret a relative path with respect to the current source directory. + std::string srcPath; + if(cmSystemTools::FileIsFullPath(srcArg.c_str())) + { + srcPath = srcArg; + } + else + { + srcPath = this->Makefile->GetCurrentDirectory(); + srcPath += "/"; + srcPath += srcArg; + } + if(!cmSystemTools::FileIsDirectory(srcPath.c_str())) + { + std::string error = "given source \""; + error += srcArg; + error += "\" which is not an existing directory."; + this->SetError(error.c_str()); + return false; + } + srcPath = cmSystemTools::CollapseFullPath(srcPath.c_str()); + + // Compute the full path to the binary directory. + std::string binPath; + if(binArg.empty()) + { + // No binary directory was specified. If the source directory is + // not a subdirectory of the current directory then it is an + // error. + if(!cmSystemTools::FindLastString(srcPath.c_str(), + this->Makefile->GetCurrentDirectory())) + { + cmOStringStream e; + e << "not given a binary directory but the given source directory " + << "\"" << srcPath << "\" is not a subdirectory of \"" + << this->Makefile->GetCurrentDirectory() << "\". " + << "When specifying an out-of-tree source a binary directory " + << "must be explicitly specified."; + this->SetError(e.str().c_str()); + return false; + } + + // Remove the CurrentDirectory from the srcPath and replace it + // with the CurrentOutputDirectory. + binPath = srcPath; + cmSystemTools::ReplaceString(binPath, + this->Makefile->GetCurrentDirectory(), + this->Makefile->GetCurrentOutputDirectory()); + } + else + { + // Use the binary directory specified. + // Interpret a relative path with respect to the current binary directory. + if(cmSystemTools::FileIsFullPath(binArg.c_str())) + { + binPath = binArg; + } + else + { + binPath = this->Makefile->GetCurrentOutputDirectory(); + binPath += "/"; + binPath += binArg; + } + } + binPath = cmSystemTools::CollapseFullPath(binPath.c_str()); + + // Add the subdirectory using the computed full paths. + this->Makefile->AddSubDirectory(srcPath.c_str(), binPath.c_str(), + excludeFromAll, false, true); + + return true; +} diff --git a/Source/cmAddSubDirectoryCommand.h b/Source/cmAddSubDirectoryCommand.h new file mode 100644 index 0000000..3d6f51e --- /dev/null +++ b/Source/cmAddSubDirectoryCommand.h @@ -0,0 +1,99 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmAddSubDirectoryCommand_h +#define cmAddSubDirectoryCommand_h + +#include "cmCommand.h" + +/** \class cmAddSubDirectoryCommand + * \brief Specify a subdirectory to build + * + * cmAddSubDirectoryCommand specifies a subdirectory to process + * by CMake. CMake will descend + * into the specified source directory and process any CMakeLists.txt found. + */ +class cmAddSubDirectoryCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmAddSubDirectoryCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "add_subdirectory";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Add a subdirectory to the build."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " add_subdirectory(source_dir [binary_dir] \n" + " [EXCLUDE_FROM_ALL])\n" + "Add a subdirectory to the build. The source_dir specifies the " + "directory in which the source CmakeLists.txt and code files are " + "located. If it is a relative " + "path it will be evaluated with respect to the current " + "directory (the typical usage), but it may also be an absolute path. " + "The binary_dir specifies the directory in which to place the output " + "files. If it is a relative path it will be evaluated with respect " + "to the current output directory, but it may also be an absolute " + "path. If binary_dir is not specified, the value of source_dir, " + "before expanding any relative path, will be used (the typical usage). " + "The CMakeLists.txt file in the specified source directory will " + "be processed immediately by CMake before processing in the current " + "input file continues beyond this command.\n" + + "If the EXCLUDE_FROM_ALL argument is provided then targets in the " + "subdirectory will not be included in the ALL target of the parent " + "directory by default, and will be excluded from IDE project files. " + "Users must explicitly build targets in the subdirectory. " + "This is meant for use when the subdirectory contains a separate part " + "of the project that is useful but not necessary, such as a set of " + "examples. " + "Typically the subdirectory should contain its own project() command " + "invocation so that a full build system will be generated in the " + "subdirectory (such as a VS IDE solution file). " + "Note that inter-target dependencies supercede this exclusion. " + "If a target built by the parent project depends on a target in the " + "subdirectory, the dependee target will be included in the parent " + "project build system to satisfy the dependency." + ; + } + + cmTypeMacro(cmAddSubDirectoryCommand, cmCommand); +}; + + + +#endif diff --git a/Source/cmAddTestCommand.cxx b/Source/cmAddTestCommand.cxx new file mode 100644 index 0000000..a9165f5 --- /dev/null +++ b/Source/cmAddTestCommand.cxx @@ -0,0 +1,180 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmAddTestCommand.h" + +#include "cmTestGenerator.h" + +#include "cmTest.h" + + +// cmExecutableCommand +bool cmAddTestCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(!args.empty() && args[0] == "NAME") + { + return this->HandleNameMode(args); + } + + // First argument is the name of the test Second argument is the name of + // the executable to run (a target or external program) Remaining arguments + // are the arguments to pass to the executable + if(args.size() < 2 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + // Collect the command with arguments. + std::vector command; + for(std::vector::const_iterator it = args.begin() + 1; + it != args.end(); ++it) + { + command.push_back(*it); + } + + // Create the test but add a generator only the first time it is + // seen. This preserves behavior from before test generators. + cmTest* test = this->Makefile->GetTest(args[0].c_str()); + if(test) + { + // If the test was already added by a new-style signature do not + // allow it to be duplicated. + if(!test->GetOldStyle()) + { + cmOStringStream e; + e << " given test name \"" << args[0] + << "\" which already exists in this directory."; + this->SetError(e.str().c_str()); + return false; + } + } + else + { + test = this->Makefile->CreateTest(args[0].c_str()); + test->SetOldStyle(true); + this->Makefile->AddTestGenerator(new cmTestGenerator(test)); + } + test->SetCommand(command); + + return true; +} + +//---------------------------------------------------------------------------- +bool cmAddTestCommand::HandleNameMode(std::vector const& args) +{ + std::string name; + std::vector configurations; + std::string working_directory; + std::vector command; + + // Read the arguments. + enum Doing { + DoingName, + DoingCommand, + DoingConfigs, + DoingWorkingDirectory, + DoingNone + }; + Doing doing = DoingName; + for(unsigned int i=1; i < args.size(); ++i) + { + if(args[i] == "COMMAND") + { + if(!command.empty()) + { + this->SetError(" may be given at most one COMMAND."); + return false; + } + doing = DoingCommand; + } + else if(args[i] == "CONFIGURATIONS") + { + if(!configurations.empty()) + { + this->SetError(" may be given at most one set of CONFIGURATIONS."); + return false; + } + doing = DoingConfigs; + } + else if(args[i] == "WORKING_DIRECTORY") + { + if(!working_directory.empty()) + { + this->SetError(" may be given at most one WORKING_DIRECTORY."); + return false; + } + doing = DoingWorkingDirectory; + } + else if(doing == DoingName) + { + name = args[i]; + doing = DoingNone; + } + else if(doing == DoingCommand) + { + command.push_back(args[i]); + } + else if(doing == DoingConfigs) + { + configurations.push_back(args[i]); + } + else if(doing == DoingWorkingDirectory) + { + working_directory = args[i]; + doing = DoingNone; + } + else + { + cmOStringStream e; + e << " given unknown argument:\n " << args[i] << "\n"; + this->SetError(e.str().c_str()); + return false; + } + } + + // Require a test name. + if(name.empty()) + { + this->SetError(" must be given non-empty NAME."); + return false; + } + + // Require a command. + if(command.empty()) + { + this->SetError(" must be given non-empty COMMAND."); + return false; + } + + // Require a unique test name within the directory. + if(this->Makefile->GetTest(name.c_str())) + { + cmOStringStream e; + e << " given test NAME \"" << name + << "\" which already exists in this directory."; + this->SetError(e.str().c_str()); + return false; + } + + // Add the test. + cmTest* test = this->Makefile->CreateTest(name.c_str()); + test->SetOldStyle(false); + test->SetCommand(command); + if(!working_directory.empty()) + { + test->SetProperty("WORKING_DIRECTORY", working_directory.c_str()); + } + this->Makefile->AddTestGenerator(new cmTestGenerator(test, configurations)); + + return true; +} diff --git a/Source/cmAddTestCommand.h b/Source/cmAddTestCommand.h new file mode 100644 index 0000000..59f10f6 --- /dev/null +++ b/Source/cmAddTestCommand.h @@ -0,0 +1,101 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmAddTestCommand_h +#define cmAddTestCommand_h + +#include "cmCommand.h" +#include "cmDocumentGeneratorExpressions.h" + +/** \class cmAddTestCommand + * \brief Add a test to the lists of tests to run. + * + * cmAddTestCommand adds a test to the list of tests to run . + */ +class cmAddTestCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmAddTestCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "add_test";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Add a test to the project with the specified arguments."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " add_test(testname Exename arg1 arg2 ... )\n" + "If the ENABLE_TESTING command has been run, this command adds a " + "test target to the current directory. If ENABLE_TESTING has not " + "been run, this command does nothing. " + "The tests are run by the testing subsystem by executing Exename " + "with the specified arguments. Exename can be either an executable " + "built by this project or an arbitrary executable on the " + "system (like tclsh). The test will be run with the current working " + "directory set to the CMakeList.txt files corresponding directory " + "in the binary tree.\n" + "\n" + " add_test(NAME [CONFIGURATIONS [Debug|Release|...]]\n" + " [WORKING_DIRECTORY dir]\n" + " COMMAND [arg1 [arg2 ...]])\n" + "If COMMAND specifies an executable target (created by " + "add_executable) it will automatically be replaced by the location " + "of the executable created at build time. " + "If a CONFIGURATIONS option is given then the test will be executed " + "only when testing under one of the named configurations. " + "If a WORKING_DIRECTORY option is given then the test will be executed " + "in the given directory." + "\n" + "Arguments after COMMAND may use \"generator expressions\" with the " + "syntax \"$<...>\". " + CM_DOCUMENT_COMMAND_GENERATOR_EXPRESSIONS + "Example usage:\n" + " add_test(NAME mytest\n" + " COMMAND testDriver --config $\n" + " --exe $)\n" + "This creates a test \"mytest\" whose command runs a testDriver " + "tool passing the configuration name and the full path to the " + "executable file produced by target \"myexe\"." + ; + } + + cmTypeMacro(cmAddTestCommand, cmCommand); +private: + bool HandleNameMode(std::vector const& args); +}; + + +#endif diff --git a/Source/cmArchiveWrite.cxx b/Source/cmArchiveWrite.cxx new file mode 100644 index 0000000..dc6b749 --- /dev/null +++ b/Source/cmArchiveWrite.cxx @@ -0,0 +1,307 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2010 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 "cmArchiveWrite.h" + +#include "cmSystemTools.h" +#include +#include +#include + +//---------------------------------------------------------------------------- +class cmArchiveWrite::Entry +{ + struct archive_entry* Object; +public: + Entry(): Object(archive_entry_new()) {} + ~Entry() { archive_entry_free(this->Object); } + operator struct archive_entry*() { return this->Object; } +}; + +//---------------------------------------------------------------------------- +struct cmArchiveWrite::Callback +{ + // archive_write_callback + static __LA_SSIZE_T Write(struct archive*, void *cd, + const void *b, size_t n) + { + cmArchiveWrite* self = static_cast(cd); + if(self->Stream.write(static_cast(b), + static_cast(n))) + { + return static_cast<__LA_SSIZE_T>(n); + } + else + { + return static_cast<__LA_SSIZE_T>(-1); + } + } +}; + +//---------------------------------------------------------------------------- +cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t): + Stream(os), + Archive(archive_write_new()), + Disk(archive_read_disk_new()), + Verbose(false) +{ + switch (c) + { + case CompressNone: + if(archive_write_set_compression_none(this->Archive) != ARCHIVE_OK) + { + this->Error = "archive_write_set_compression_none: "; + this->Error += archive_error_string(this->Archive); + return; + } + break; + case CompressCompress: + if(archive_write_set_compression_compress(this->Archive) != ARCHIVE_OK) + { + this->Error = "archive_write_set_compression_compress: "; + this->Error += archive_error_string(this->Archive); + return; + } + break; + case CompressGZip: + if(archive_write_set_compression_gzip(this->Archive) != ARCHIVE_OK) + { + this->Error = "archive_write_set_compression_gzip: "; + this->Error += archive_error_string(this->Archive); + return; + } + break; + case CompressBZip2: + if(archive_write_set_compression_bzip2(this->Archive) != ARCHIVE_OK) + { + this->Error = "archive_write_set_compression_bzip2: "; + this->Error += archive_error_string(this->Archive); + return; + } + break; + case CompressLZMA: + if(archive_write_set_compression_lzma(this->Archive) != ARCHIVE_OK) + { + this->Error = "archive_write_set_compression_lzma: "; + this->Error += archive_error_string(this->Archive); + return; + } + break; + case CompressXZ: + if(archive_write_set_compression_xz(this->Archive) != ARCHIVE_OK) + { + this->Error = "archive_write_set_compression_xz: "; + this->Error += archive_error_string(this->Archive); + return; + } + break; + }; +#if !defined(_WIN32) || defined(__CYGWIN__) + if (archive_read_disk_set_standard_lookup(this->Disk) != ARCHIVE_OK) + { + this->Error = "archive_read_disk_set_standard_lookup: "; + this->Error += archive_error_string(this->Archive); + return;; + } +#endif + switch (t) + { + case TypeZIP: + if(archive_write_set_format_zip(this->Archive) != ARCHIVE_OK) + { + this->Error = "archive_write_set_format_zip: "; + this->Error += archive_error_string(this->Archive); + return; + } + break; + case TypeTAR: + if(archive_write_set_format_pax_restricted(this->Archive) != ARCHIVE_OK) + { + this->Error = "archive_write_set_format_pax_restricted: "; + this->Error += archive_error_string(this->Archive); + return; + } + break; + } + + // do not pad the last block!! + if (archive_write_set_bytes_in_last_block(this->Archive, 1)) + { + this->Error = "archive_write_set_bytes_in_last_block: "; + this->Error += archive_error_string(this->Archive); + return; + } + + if(archive_write_open( + this->Archive, this, 0, + reinterpret_cast(&Callback::Write), + 0) != ARCHIVE_OK) + { + this->Error = "archive_write_open: "; + this->Error += archive_error_string(this->Archive); + return; + } +} + +//---------------------------------------------------------------------------- +cmArchiveWrite::~cmArchiveWrite() +{ + archive_read_finish(this->Disk); + archive_write_finish(this->Archive); +} + +//---------------------------------------------------------------------------- +bool cmArchiveWrite::Add(std::string path, size_t skip, const char* prefix) +{ + if(this->Okay()) + { + if(!path.empty() && path[path.size()-1] == '/') + { + path.erase(path.size()-1); + } + this->AddPath(path.c_str(), skip, prefix); + } + return this->Okay(); +} + +//---------------------------------------------------------------------------- +bool cmArchiveWrite::AddPath(const char* path, + size_t skip, const char* prefix) +{ + if(!this->AddFile(path, skip, prefix)) + { + return false; + } + if(!cmSystemTools::FileIsDirectory(path) || + cmSystemTools::FileIsSymlink(path)) + { + return true; + } + cmsys::Directory d; + if(d.Load(path)) + { + std::string next = path; + next += "/"; + std::string::size_type end = next.size(); + unsigned long n = d.GetNumberOfFiles(); + for(unsigned long i = 0; i < n; ++i) + { + const char* file = d.GetFile(i); + if(strcmp(file, ".") != 0 && strcmp(file, "..") != 0) + { + next.erase(end); + next += file; + if(!this->AddPath(next.c_str(), skip, prefix)) + { + return false; + } + } + } + } + return true; +} + +//---------------------------------------------------------------------------- +bool cmArchiveWrite::AddFile(const char* file, + size_t skip, const char* prefix) +{ + // Skip the file if we have no name for it. This may happen on a + // top-level directory, which does not need to be included anyway. + if(skip >= strlen(file)) + { + return true; + } + const char* out = file + skip; + + // Meta-data. + std::string dest = prefix? prefix : ""; + dest += out; + if(this->Verbose) + { + std::cout << dest << "\n"; + } + Entry e; + archive_entry_copy_sourcepath(e, file); + archive_entry_set_pathname(e, dest.c_str()); + if(archive_read_disk_entry_from_file(this->Disk, e, -1, 0) != ARCHIVE_OK) + { + this->Error = "archive_read_disk_entry_from_file: "; + this->Error += archive_error_string(this->Disk); + return false; + } + // Clear acl and xattr fields not useful for distribution. + archive_entry_acl_clear(e); + archive_entry_xattr_clear(e); + if(archive_write_header(this->Archive, e) != ARCHIVE_OK) + { + this->Error = "archive_write_header: "; + this->Error += archive_error_string(this->Archive); + return false; + } + + // do not copy content of symlink + if (!archive_entry_symlink(e)) + { + // Content. + if(size_t size = static_cast(archive_entry_size(e))) + { + return this->AddData(file, size); + } + } + return true; +} + +//---------------------------------------------------------------------------- +bool cmArchiveWrite::AddData(const char* file, size_t size) +{ + std::ifstream fin(file, std::ios::in | cmsys_ios_binary); + if(!fin) + { + this->Error = "Error opening \""; + this->Error += file; + this->Error += "\": "; + this->Error += cmSystemTools::GetLastSystemError(); + return false; + } + + char buffer[16384]; + size_t nleft = size; + while(nleft > 0) + { + typedef cmsys_ios::streamsize ssize_type; + size_t const nnext = nleft > sizeof(buffer)? sizeof(buffer) : nleft; + ssize_type const nnext_s = static_cast(nnext); + fin.read(buffer, nnext_s); + // Some stream libraries (older HPUX) return failure at end of + // file on the last read even if some data were read. Check + // gcount instead of trusting the stream error status. + if(static_cast(fin.gcount()) != nnext) + { + break; + } + if(archive_write_data(this->Archive, buffer, nnext) != nnext_s) + { + this->Error = "archive_write_data: "; + this->Error += archive_error_string(this->Archive); + return false; + } + nleft -= nnext; + } + if(nleft > 0) + { + this->Error = "Error reading \""; + this->Error += file; + this->Error += "\": "; + this->Error += cmSystemTools::GetLastSystemError(); + return false; + } + return true; +} diff --git a/Source/cmArchiveWrite.h b/Source/cmArchiveWrite.h new file mode 100644 index 0000000..3e3b2f0 --- /dev/null +++ b/Source/cmArchiveWrite.h @@ -0,0 +1,94 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2010 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 cmArchiveWrite_h +#define cmArchiveWrite_h + +#include "cmStandardIncludes.h" + +#if !defined(CMAKE_BUILD_WITH_CMAKE) +# error "cmArchiveWrite not allowed during bootstrap build!" +#endif + +/** \class cmArchiveWrite + * \brief Wrapper around libarchive for writing. + * + */ +class cmArchiveWrite +{ + typedef void (cmArchiveWrite::* safe_bool)(); + void safe_bool_true() {} +public: + /** Compression type. */ + enum Compress + { + CompressNone, + CompressCompress, + CompressGZip, + CompressBZip2, + CompressLZMA, + CompressXZ + }; + + /** Archive Type */ + enum Type + { + TypeTAR, + TypeZIP + }; + + /** Construct with output stream to which to write archive. */ + cmArchiveWrite(std::ostream& os, Compress c = CompressNone, Type = TypeTAR); + ~cmArchiveWrite(); + + /** + * Add a path (file or directory) to the archive. Directories are + * added recursively. The "path" must be readable on disk, either + * full path or relative to current working directory. The "skip" + * value indicates how many leading bytes from the input path to + * skip. The remaining part of the input path is appended to the + * "prefix" value to construct the final name in the archive. + */ + bool Add(std::string path, size_t skip = 0, const char* prefix = 0); + + /** Returns true if there has been no error. */ + operator safe_bool() const + { return this->Okay()? &cmArchiveWrite::safe_bool_true : 0; } + + /** Returns true if there has been an error. */ + bool operator!() const { return !this->Okay(); } + + /** Return the error string; empty if none. */ + std::string GetError() const { return this->Error; } + + // TODO: More general callback instead of hard-coding calls to + // std::cout. + void SetVerbose(bool v) { this->Verbose = v; } + +private: + bool Okay() const { return this->Error.empty(); } + bool AddPath(const char* path, size_t skip, const char* prefix); + bool AddFile(const char* file, size_t skip, const char* prefix); + bool AddData(const char* file, size_t size); + + struct Callback; + friend struct Callback; + + class Entry; + + std::ostream& Stream; + struct archive* Archive; + struct archive* Disk; + bool Verbose; + std::string Error; +}; + +#endif diff --git a/Source/cmAuxSourceDirectoryCommand.cxx b/Source/cmAuxSourceDirectoryCommand.cxx new file mode 100644 index 0000000..f88be3d --- /dev/null +++ b/Source/cmAuxSourceDirectoryCommand.cxx @@ -0,0 +1,89 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmAuxSourceDirectoryCommand.h" +#include "cmSourceFile.h" + +#include + +// cmAuxSourceDirectoryCommand +bool cmAuxSourceDirectoryCommand::InitialPass +(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 2 || args.size() > 2) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + std::string sourceListValue; + std::string templateDirectory = args[0]; + this->Makefile->AddExtraDirectory(templateDirectory.c_str()); + std::string tdir; + if(!cmSystemTools::FileIsFullPath(templateDirectory.c_str())) + { + tdir = this->Makefile->GetCurrentDirectory(); + tdir += "/"; + tdir += templateDirectory; + } + else + { + tdir = templateDirectory; + } + + // was the list already populated + const char *def = this->Makefile->GetDefinition(args[1].c_str()); + if (def) + { + sourceListValue = def; + } + + // Load all the files in the directory + cmsys::Directory dir; + if(dir.Load(tdir.c_str())) + { + size_t numfiles = dir.GetNumberOfFiles(); + for(size_t i =0; i < numfiles; ++i) + { + std::string file = dir.GetFile(static_cast(i)); + // Split the filename into base and extension + std::string::size_type dotpos = file.rfind("."); + if( dotpos != std::string::npos ) + { + std::string ext = file.substr(dotpos+1); + std::string base = file.substr(0, dotpos); + // Process only source files + if( base.size() != 0 + && std::find( this->Makefile->GetSourceExtensions().begin(), + this->Makefile->GetSourceExtensions().end(), ext ) + != this->Makefile->GetSourceExtensions().end() ) + { + std::string fullname = templateDirectory; + fullname += "/"; + fullname += file; + // add the file as a class file so + // depends can be done + cmSourceFile* sf = + this->Makefile->GetOrCreateSource(fullname.c_str()); + sf->SetProperty("ABSTRACT","0"); + if(!sourceListValue.empty()) + { + sourceListValue += ";"; + } + sourceListValue += fullname; + } + } + } + } + this->Makefile->AddDefinition(args[1].c_str(), sourceListValue.c_str()); + return true; +} + diff --git a/Source/cmAuxSourceDirectoryCommand.h b/Source/cmAuxSourceDirectoryCommand.h new file mode 100644 index 0000000..f059e44 --- /dev/null +++ b/Source/cmAuxSourceDirectoryCommand.h @@ -0,0 +1,86 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmAuxSourceDirectoryCommand_h +#define cmAuxSourceDirectoryCommand_h + +#include "cmCommand.h" + +/** \class cmAuxSourceDirectoryCommand + * \brief Specify auxiliary source code directories. + * + * cmAuxSourceDirectoryCommand specifies source code directories + * that must be built as part of this build process. This directories + * are not recursively processed like the SUBDIR command (cmSubdirCommand). + * A side effect of this command is to create a subdirectory in the build + * directory structure. + */ +class cmAuxSourceDirectoryCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmAuxSourceDirectoryCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "aux_source_directory";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Find all source files in a directory."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " aux_source_directory( )\n" + "Collects the names of all the source files in the specified " + "directory and stores the list in the provided. This " + "command is intended to be used by projects that use explicit " + "template instantiation. Template instantiation files can be " + "stored in a \"Templates\" subdirectory and collected automatically " + "using this command to avoid manually listing all instantiations.\n" + "It is tempting to use this command to avoid writing the list of " + "source files for a library or executable target. While this seems " + "to work, there is no way for CMake to generate a build system that " + "knows when a new source file has been added. Normally the " + "generated build system knows when it needs to rerun CMake because " + "the CMakeLists.txt file is modified to add a new source. When the " + "source is just added to the directory without modifying this file, " + "one would have to manually rerun CMake to generate a build system " + "incorporating the new file."; + } + + cmTypeMacro(cmAuxSourceDirectoryCommand, cmCommand); +}; + + + +#endif diff --git a/Source/cmBootstrapCommands.cxx b/Source/cmBootstrapCommands.cxx new file mode 100644 index 0000000..9097a74 --- /dev/null +++ b/Source/cmBootstrapCommands.cxx @@ -0,0 +1,171 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +// This file is used to compile all the commands +// that CMake knows about at compile time. +// This is sort of a boot strapping approach since you would +// like to have CMake to build CMake. +#include "cmCommands.h" +#include "cmAddCustomCommandCommand.cxx" +#include "cmAddCustomTargetCommand.cxx" +#include "cmAddDefinitionsCommand.cxx" +#include "cmAddDependenciesCommand.cxx" +#include "cmAddExecutableCommand.cxx" +#include "cmAddLibraryCommand.cxx" +#include "cmAddSubDirectoryCommand.cxx" +#include "cmAddTestCommand.cxx" +#include "cmBreakCommand.cxx" +#include "cmBuildCommand.cxx" +#include "cmCMakeMinimumRequired.cxx" +#include "cmCMakePolicyCommand.cxx" +#include "cmCommandArgumentsHelper.cxx" +#include "cmConfigureFileCommand.cxx" +#include "cmCoreTryCompile.cxx" +#include "cmCreateTestSourceList.cxx" +#include "cmDefinePropertyCommand.cxx" +#include "cmElseCommand.cxx" +#include "cmEnableLanguageCommand.cxx" +#include "cmEnableTestingCommand.cxx" +#include "cmEndForEachCommand.cxx" +#include "cmEndFunctionCommand.cxx" +#include "cmEndIfCommand.cxx" +#include "cmEndMacroCommand.cxx" +#include "cmEndWhileCommand.cxx" +#include "cmExecProgramCommand.cxx" +#include "cmExecuteProcessCommand.cxx" +#include "cmExternalMakefileProjectGenerator.cxx" +#include "cmFindBase.cxx" +#include "cmFindCommon.cxx" +#include "cmFileCommand.cxx" +#include "cmFindFileCommand.cxx" +#include "cmFindLibraryCommand.cxx" +#include "cmFindPackageCommand.cxx" +#include "cmFindPathCommand.cxx" +#include "cmFindProgramCommand.cxx" +#include "cmForEachCommand.cxx" +#include "cmFunctionCommand.cxx" +#include "cmGetCMakePropertyCommand.cxx" +#include "cmGetDirectoryPropertyCommand.cxx" +#include "cmGetFilenameComponentCommand.cxx" +#include "cmGetPropertyCommand.cxx" +#include "cmGetSourceFilePropertyCommand.cxx" +#include "cmGetTargetPropertyCommand.cxx" +#include "cmHexFileConverter.cxx" +#include "cmIfCommand.cxx" +#include "cmIncludeCommand.cxx" +#include "cmIncludeDirectoryCommand.cxx" +#include "cmIncludeRegularExpressionCommand.cxx" +#include "cmInstallFilesCommand.cxx" +#include "cmInstallCommandArguments.cxx" +#include "cmInstallCommand.cxx" +#include "cmInstallTargetsCommand.cxx" +#include "cmLinkDirectoriesCommand.cxx" +#include "cmListCommand.cxx" +#include "cmMacroCommand.cxx" +#include "cmMakeDirectoryCommand.cxx" +#include "cmMarkAsAdvancedCommand.cxx" +#include "cmMathCommand.cxx" +#include "cmMessageCommand.cxx" +#include "cmOptionCommand.cxx" +#include "cmProjectCommand.cxx" +#include "cmReturnCommand.cxx" +#include "cmSeparateArgumentsCommand.cxx" +#include "cmSetCommand.cxx" +#include "cmSetDirectoryPropertiesCommand.cxx" +#include "cmSetPropertyCommand.cxx" +#include "cmSetSourceFilesPropertiesCommand.cxx" +#include "cmSetTargetPropertiesCommand.cxx" +#include "cmSetTestsPropertiesCommand.cxx" +#include "cmGetTestPropertyCommand.cxx" +#include "cmSiteNameCommand.cxx" +#include "cmStringCommand.cxx" +#include "cmSubdirCommand.cxx" +#include "cmTargetLinkLibrariesCommand.cxx" +#include "cmTryCompileCommand.cxx" +#include "cmTryRunCommand.cxx" +#include "cmUnsetCommand.cxx" +#include "cmWhileCommand.cxx" + +void GetBootstrapCommands(std::list& commands) +{ + commands.push_back(new cmAddCustomCommandCommand); + commands.push_back(new cmAddCustomTargetCommand); + commands.push_back(new cmAddDefinitionsCommand); + commands.push_back(new cmAddDependenciesCommand); + commands.push_back(new cmAddExecutableCommand); + commands.push_back(new cmAddLibraryCommand); + commands.push_back(new cmAddSubDirectoryCommand); + commands.push_back(new cmAddTestCommand); + commands.push_back(new cmBreakCommand); + commands.push_back(new cmBuildCommand); + commands.push_back(new cmCMakeMinimumRequired); + commands.push_back(new cmCMakePolicyCommand); + commands.push_back(new cmConfigureFileCommand); + commands.push_back(new cmCreateTestSourceList); + commands.push_back(new cmDefinePropertyCommand); + commands.push_back(new cmElseCommand); + commands.push_back(new cmEnableLanguageCommand); + commands.push_back(new cmEnableTestingCommand); + commands.push_back(new cmEndForEachCommand); + commands.push_back(new cmEndFunctionCommand); + commands.push_back(new cmEndIfCommand); + commands.push_back(new cmEndMacroCommand); + commands.push_back(new cmEndWhileCommand); + commands.push_back(new cmExecProgramCommand); + commands.push_back(new cmExecuteProcessCommand); + commands.push_back(new cmFileCommand); + commands.push_back(new cmFindFileCommand); + commands.push_back(new cmFindLibraryCommand); + commands.push_back(new cmFindPackageCommand); + commands.push_back(new cmFindPathCommand); + commands.push_back(new cmFindProgramCommand); + commands.push_back(new cmForEachCommand); + commands.push_back(new cmFunctionCommand); + commands.push_back(new cmGetCMakePropertyCommand); + commands.push_back(new cmGetDirectoryPropertyCommand); + commands.push_back(new cmGetFilenameComponentCommand); + commands.push_back(new cmGetPropertyCommand); + commands.push_back(new cmGetSourceFilePropertyCommand); + commands.push_back(new cmGetTargetPropertyCommand); + commands.push_back(new cmIfCommand); + commands.push_back(new cmIncludeCommand); + commands.push_back(new cmIncludeDirectoryCommand); + commands.push_back(new cmIncludeRegularExpressionCommand); + commands.push_back(new cmInstallCommand); + commands.push_back(new cmInstallFilesCommand); + commands.push_back(new cmInstallTargetsCommand); + commands.push_back(new cmLinkDirectoriesCommand); + commands.push_back(new cmListCommand); + commands.push_back(new cmMacroCommand); + commands.push_back(new cmMakeDirectoryCommand); + commands.push_back(new cmMarkAsAdvancedCommand); + commands.push_back(new cmMathCommand); + commands.push_back(new cmMessageCommand); + commands.push_back(new cmOptionCommand); + commands.push_back(new cmProjectCommand); + commands.push_back(new cmReturnCommand); + commands.push_back(new cmSeparateArgumentsCommand); + commands.push_back(new cmSetCommand); + commands.push_back(new cmSetDirectoryPropertiesCommand); + commands.push_back(new cmSetPropertyCommand); + commands.push_back(new cmSetSourceFilesPropertiesCommand); + commands.push_back(new cmSetTargetPropertiesCommand); + commands.push_back(new cmGetTestPropertyCommand); + commands.push_back(new cmSetTestsPropertiesCommand); + commands.push_back(new cmSiteNameCommand); + commands.push_back(new cmStringCommand); + commands.push_back(new cmSubdirCommand); + commands.push_back(new cmTargetLinkLibrariesCommand); + commands.push_back(new cmTryCompileCommand); + commands.push_back(new cmTryRunCommand); + commands.push_back(new cmUnsetCommand); + commands.push_back(new cmWhileCommand); +} diff --git a/Source/cmBreakCommand.cxx b/Source/cmBreakCommand.cxx new file mode 100644 index 0000000..b70e400 --- /dev/null +++ b/Source/cmBreakCommand.cxx @@ -0,0 +1,21 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmBreakCommand.h" + +// cmBreakCommand +bool cmBreakCommand::InitialPass(std::vector const&, + cmExecutionStatus &status) +{ + status.SetBreakInvoked(true); + return true; +} + diff --git a/Source/cmBreakCommand.h b/Source/cmBreakCommand.h new file mode 100644 index 0000000..67ef37e --- /dev/null +++ b/Source/cmBreakCommand.h @@ -0,0 +1,73 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmBreakCommand_h +#define cmBreakCommand_h + +#include "cmCommand.h" + +/** \class cmBreakCommand + * \brief Break from an enclosing foreach or while loop + * + * cmBreakCommand returns from an enclosing foreach or while loop + */ +class cmBreakCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmBreakCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const {return "break";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Break from an enclosing foreach or while loop."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " break()\n" + "Breaks from an enclosing foreach loop or while loop"; + } + + cmTypeMacro(cmBreakCommand, cmCommand); +}; + + + +#endif diff --git a/Source/cmBuildCommand.cxx b/Source/cmBuildCommand.cxx new file mode 100644 index 0000000..3722ab6 --- /dev/null +++ b/Source/cmBuildCommand.cxx @@ -0,0 +1,161 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmBuildCommand.h" + +#include "cmLocalGenerator.h" +#include "cmGlobalGenerator.h" + +//---------------------------------------------------------------------- +bool cmBuildCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + // Support the legacy signature of the command: + // + if(2 == args.size()) + { + return this->TwoArgsSignature(args); + } + + return this->MainSignature(args); +} + +//---------------------------------------------------------------------- +bool cmBuildCommand +::MainSignature(std::vector const& args) +{ + if(args.size() < 1) + { + this->SetError("requires at least one argument naming a CMake variable"); + return false; + } + + // The cmake variable in which to store the result. + const char* variable = args[0].c_str(); + + // Parse remaining arguments. + const char* configuration = 0; + const char* project_name = 0; + const char* target = 0; + enum Doing { DoingNone, DoingConfiguration, DoingProjectName, DoingTarget }; + Doing doing = DoingNone; + for(unsigned int i=1; i < args.size(); ++i) + { + if(args[i] == "CONFIGURATION") + { + doing = DoingConfiguration; + } + else if(args[i] == "PROJECT_NAME") + { + doing = DoingProjectName; + } + else if(args[i] == "TARGET") + { + doing = DoingTarget; + } + else if(doing == DoingConfiguration) + { + doing = DoingNone; + configuration = args[i].c_str(); + } + else if(doing == DoingProjectName) + { + doing = DoingNone; + project_name = args[i].c_str(); + } + else if(doing == DoingTarget) + { + doing = DoingNone; + target = args[i].c_str(); + } + else + { + cmOStringStream e; + e << "unknown argument \"" << args[i] << "\""; + this->SetError(e.str().c_str()); + return false; + } + } + + const char* makeprogram + = this->Makefile->GetDefinition("CMAKE_MAKE_PROGRAM"); + + // If null/empty CONFIGURATION argument, GenerateBuildCommand uses 'Debug' + // in the currently implemented multi-configuration global generators... + // so we put this code here to end up with the same default configuration + // as the original 2-arg build_command signature: + // + if(!configuration || !*configuration) + { + configuration = getenv("CMAKE_CONFIG_TYPE"); + } + if(!configuration || !*configuration) + { + configuration = "Release"; + } + + // If null/empty PROJECT_NAME argument, use the Makefile's project name: + // + if(!project_name || !*project_name) + { + project_name = this->Makefile->GetProjectName(); + } + + // If null/empty TARGET argument, GenerateBuildCommand omits any mention + // of a target name on the build command line... + // + std::string makecommand = this->Makefile->GetLocalGenerator() + ->GetGlobalGenerator()->GenerateBuildCommand + (makeprogram, project_name, 0, target, configuration, true, false); + + this->Makefile->AddDefinition(variable, makecommand.c_str()); + + return true; +} + +//---------------------------------------------------------------------- +bool cmBuildCommand +::TwoArgsSignature(std::vector const& args) +{ + if(args.size() < 2 ) + { + this->SetError("called with less than two arguments"); + return false; + } + + const char* define = args[0].c_str(); + const char* cacheValue + = this->Makefile->GetDefinition(define); + std::string makeprogram = args[1]; + + std::string configType = "Release"; + const char* cfg = getenv("CMAKE_CONFIG_TYPE"); + if ( cfg ) + { + configType = cfg; + } + + std::string makecommand = this->Makefile->GetLocalGenerator() + ->GetGlobalGenerator()->GenerateBuildCommand + (makeprogram.c_str(), this->Makefile->GetProjectName(), 0, + 0, configType.c_str(), true, false); + + if(cacheValue) + { + return true; + } + this->Makefile->AddCacheDefinition(define, + makecommand.c_str(), + "Command used to build entire project " + "from the command line.", + cmCacheManager::STRING); + return true; +} diff --git a/Source/cmBuildCommand.h b/Source/cmBuildCommand.h new file mode 100644 index 0000000..a333c5d --- /dev/null +++ b/Source/cmBuildCommand.h @@ -0,0 +1,97 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmBuildCommand_h +#define cmBuildCommand_h + +#include "cmCommand.h" + +/** \class cmBuildCommand + * \brief build_command command + * + * cmBuildCommand implements the build_command CMake command + */ +class cmBuildCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmBuildCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The primary command signature with optional, KEYWORD-based args. + */ + virtual bool MainSignature(std::vector const& args); + + /** + * Legacy "exactly 2 args required" signature. + */ + virtual bool TwoArgsSignature(std::vector const& args); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const {return "build_command";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Get the command line to build this project."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " build_command(\n" + " [CONFIGURATION ]\n" + " [PROJECT_NAME ]\n" + " [TARGET ])\n" + "Sets the given to a string containing the command line " + "for building one configuration of a target in a project using the " + "build tool appropriate for the current CMAKE_GENERATOR.\n" + "If CONFIGURATION is omitted, CMake chooses a reasonable default " + "value for multi-configuration generators. CONFIGURATION is " + "ignored for single-configuration generators.\n" + "If PROJECT_NAME is omitted, the resulting command line will build " + "the top level PROJECT in the current build tree.\n" + "If TARGET is omitted, the resulting command line will build " + "everything, effectively using build target 'all' or 'ALL_BUILD'.\n" + " build_command( )\n" + "This second signature is deprecated, but still available for " + "backwards compatibility. Use the first signature instead.\n" + "Sets the given to a string containing the command " + "to build this project from the root of the build tree using " + "the build tool given by . should be " + "the full path to msdev, devenv, nmake, make or one of the end " + "user build tools." + ; + } + + cmTypeMacro(cmBuildCommand, cmCommand); +}; + +#endif diff --git a/Source/cmBuildNameCommand.cxx b/Source/cmBuildNameCommand.cxx new file mode 100644 index 0000000..fa69830 --- /dev/null +++ b/Source/cmBuildNameCommand.cxx @@ -0,0 +1,77 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmBuildNameCommand.h" + +#include + +// cmBuildNameCommand +bool cmBuildNameCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + const char* cacheValue = this->Makefile->GetDefinition(args[0].c_str()); + if(cacheValue) + { + // do we need to correct the value? + cmsys::RegularExpression reg("[()/]"); + if (reg.find(cacheValue)) + { + std::string cv = cacheValue; + cmSystemTools::ReplaceString(cv,"/", "_"); + cmSystemTools::ReplaceString(cv,"(", "_"); + cmSystemTools::ReplaceString(cv,")", "_"); + this->Makefile->AddCacheDefinition(args[0].c_str(), + cv.c_str(), + "Name of build.", + cmCacheManager::STRING); + } + return true; + } + + + std::string buildname = "WinNT"; + if(this->Makefile->GetDefinition("UNIX")) + { + buildname = ""; + cmSystemTools::RunSingleCommand("uname -a", &buildname); + if(buildname.length()) + { + std::string RegExp = "([^ ]*) [^ ]* ([^ ]*) "; + cmsys::RegularExpression reg( RegExp.c_str() ); + if(reg.find(buildname.c_str())) + { + buildname = reg.match(1) + "-" + reg.match(2); + } + } + } + std::string compiler = "${CMAKE_CXX_COMPILER}"; + this->Makefile->ExpandVariablesInString ( compiler ); + buildname += "-"; + buildname += cmSystemTools::GetFilenameName(compiler); + cmSystemTools::ReplaceString(buildname, + "/", "_"); + cmSystemTools::ReplaceString(buildname, + "(", "_"); + cmSystemTools::ReplaceString(buildname, + ")", "_"); + + this->Makefile->AddCacheDefinition(args[0].c_str(), + buildname.c_str(), + "Name of build.", + cmCacheManager::STRING); + return true; +} + diff --git a/Source/cmBuildNameCommand.h b/Source/cmBuildNameCommand.h new file mode 100644 index 0000000..26505a2 --- /dev/null +++ b/Source/cmBuildNameCommand.h @@ -0,0 +1,82 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmBuildNameCommand_h +#define cmBuildNameCommand_h + +#include "cmCommand.h" + +/** \class cmBuildNameCommand + * \brief build_name command + * + * cmBuildNameCommand implements the build_name CMake command + */ +class cmBuildNameCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmBuildNameCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const {return "build_name";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return + "Deprecated. Use ${CMAKE_SYSTEM} and ${CMAKE_CXX_COMPILER} instead."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " build_name(variable)\n" + "Sets the specified variable to a string representing the platform " + "and compiler settings. These values are now available through the " + "CMAKE_SYSTEM and CMAKE_CXX_COMPILER variables."; + } + + /** This command is kept for compatibility with older CMake versions. */ + virtual bool IsDiscouraged() const + { + return true; + } + + cmTypeMacro(cmBuildNameCommand, cmCommand); +}; + + + +#endif diff --git a/Source/cmCMakeMinimumRequired.cxx b/Source/cmCMakeMinimumRequired.cxx new file mode 100644 index 0000000..126934c --- /dev/null +++ b/Source/cmCMakeMinimumRequired.cxx @@ -0,0 +1,139 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCMakeMinimumRequired.h" + +#include "cmVersion.h" + +// cmCMakeMinimumRequired +bool cmCMakeMinimumRequired +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + // Process arguments. + std::string version_string; + bool doing_version = false; + for(unsigned int i=0; i < args.size(); ++i) + { + if(args[i] == "VERSION") + { + doing_version = true; + } + else if(args[i] == "FATAL_ERROR") + { + if(doing_version) + { + this->SetError("called with no value for VERSION."); + return false; + } + doing_version = false; + } + else if(doing_version) + { + doing_version = false; + version_string = args[i]; + } + else + { + this->UnknownArguments.push_back(args[i]); + } + } + if(doing_version) + { + this->SetError("called with no value for VERSION."); + return false; + } + + // Make sure there was a version to check. + if(version_string.empty()) + { + return this->EnforceUnknownArguments(); + } + + // Save the required version string. + this->Makefile->AddDefinition("CMAKE_MINIMUM_REQUIRED_VERSION", + version_string.c_str()); + + + // Get the current version number. + int current_major = cmVersion::GetMajorVersion(); + int current_minor = cmVersion::GetMinorVersion(); + int current_patch = cmVersion::GetPatchVersion(); + int current_tweak = cmVersion::GetTweakVersion(); + + // Parse at least two components of the version number. + // Use zero for those not specified. + int required_major = 0; + int required_minor = 0; + int required_patch = 0; + int required_tweak = 0; + if(sscanf(version_string.c_str(), "%u.%u.%u.%u", + &required_major, &required_minor, + &required_patch, &required_tweak) < 2) + { + cmOStringStream e; + e << "could not parse VERSION \"" << version_string.c_str() << "\"."; + this->SetError(e.str().c_str()); + return false; + } + + // Compare the version numbers. + if((current_major < required_major) || + (current_major == required_major && + current_minor < required_minor) || + (current_major == required_major && + current_minor == required_minor && + current_patch < required_patch) || + (current_major == required_major && + current_minor == required_minor && + current_patch == required_patch && + current_tweak < required_tweak)) + { + // The current version is too low. + cmOStringStream e; + e << "CMake " << version_string.c_str() + << " or higher is required. You are running version " + << cmVersion::GetCMakeVersion(); + this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); + cmSystemTools::SetFatalErrorOccured(); + return true; + } + + // The version is not from the future, so enforce unknown arguments. + if(!this->EnforceUnknownArguments()) + { + return false; + } + + if (required_major < 2 || (required_major == 2 && required_minor < 4)) + { + this->Makefile->SetPolicyVersion("2.4"); + } + else + { + this->Makefile->SetPolicyVersion(version_string.c_str()); + } + + return true; +} + +//---------------------------------------------------------------------------- +bool cmCMakeMinimumRequired::EnforceUnknownArguments() +{ + if(!this->UnknownArguments.empty()) + { + cmOStringStream e; + e << "called with unknown argument \"" + << this->UnknownArguments[0] << "\"."; + this->SetError(e.str().c_str()); + return false; + } + return true; +} diff --git a/Source/cmCMakeMinimumRequired.h b/Source/cmCMakeMinimumRequired.h new file mode 100644 index 0000000..d23ce79 --- /dev/null +++ b/Source/cmCMakeMinimumRequired.h @@ -0,0 +1,90 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCMakeMinimumRequired_h +#define cmCMakeMinimumRequired_h + +#include "cmCommand.h" + +/** \class cmCMakeMinimumRequired + * \brief cmake_minimum_required command + * + * cmCMakeMinimumRequired implements the cmake_minimum_required CMake command + */ +class cmCMakeMinimumRequired : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmCMakeMinimumRequired; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const {return "cmake_minimum_required";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Set the minimum required version of cmake for a project."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " cmake_minimum_required(VERSION major[.minor[.patch[.tweak]]]\n" + " [FATAL_ERROR])\n" + "If the current version of CMake is lower than that required " + "it will stop processing the project and report an error. " + "When a version higher than 2.4 is specified the command implicitly " + "invokes\n" + " cmake_policy(VERSION major[.minor[.patch[.tweak]]])\n" + "which sets the cmake policy version level to the version specified. " + "When version 2.4 or lower is given the command implicitly invokes\n" + " cmake_policy(VERSION 2.4)\n" + "which enables compatibility features for CMake 2.4 and lower.\n" + "The FATAL_ERROR option is accepted but ignored by CMake 2.6 " + "and higher. " + "It should be specified so CMake versions 2.4 and lower fail with an " + "error instead of just a warning."; + } + + cmTypeMacro(cmCMakeMinimumRequired, cmCommand); + +private: + std::vector UnknownArguments; + bool EnforceUnknownArguments(); +}; + + + +#endif diff --git a/Source/cmCMakePolicyCommand.cxx b/Source/cmCMakePolicyCommand.cxx new file mode 100644 index 0000000..f4be559 --- /dev/null +++ b/Source/cmCMakePolicyCommand.cxx @@ -0,0 +1,172 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCMakePolicyCommand.h" + +#include "cmVersion.h" + +// cmCMakePolicyCommand +bool cmCMakePolicyCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1) + { + this->SetError("requires at least one argument."); + return false; + } + + if(args[0] == "SET") + { + return this->HandleSetMode(args); + } + else if(args[0] == "GET") + { + return this->HandleGetMode(args); + } + else if(args[0] == "PUSH") + { + if(args.size() > 1) + { + this->SetError("PUSH may not be given additional arguments."); + return false; + } + this->Makefile->PushPolicy(); + return true; + } + else if(args[0] == "POP") + { + if(args.size() > 1) + { + this->SetError("POP may not be given additional arguments."); + return false; + } + this->Makefile->PopPolicy(); + return true; + } + else if(args[0] == "VERSION") + { + return this->HandleVersionMode(args); + } + + cmOStringStream e; + e << "given unknown first argument \"" << args[0] << "\""; + this->SetError(e.str().c_str()); + return false; +} + +//---------------------------------------------------------------------------- +bool cmCMakePolicyCommand::HandleSetMode(std::vector const& args) +{ + if(args.size() != 3) + { + this->SetError("SET must be given exactly 2 additional arguments."); + return false; + } + + cmPolicies::PolicyStatus status; + if(args[2] == "OLD") + { + status = cmPolicies::OLD; + } + else if(args[2] == "NEW") + { + status = cmPolicies::NEW; + } + else + { + cmOStringStream e; + e << "SET given unrecognized policy status \"" << args[2] << "\""; + this->SetError(e.str().c_str()); + return false; + } + + if(!this->Makefile->SetPolicy(args[1].c_str(), status)) + { + this->SetError("SET failed to set policy."); + return false; + } + return true; +} + +//---------------------------------------------------------------------------- +bool cmCMakePolicyCommand::HandleGetMode(std::vector const& args) +{ + if(args.size() != 3) + { + this->SetError("GET must be given exactly 2 additional arguments."); + return false; + } + + // Get arguments. + std::string const& id = args[1]; + std::string const& var = args[2]; + + // Lookup the policy number. + cmPolicies::PolicyID pid; + if(!this->Makefile->GetPolicies()->GetPolicyID(id.c_str(), pid)) + { + cmOStringStream e; + e << "GET given policy \"" << id << "\" which is not known to this " + << "version of CMake."; + this->SetError(e.str().c_str()); + return false; + } + + // Lookup the policy setting. + cmPolicies::PolicyStatus status = this->Makefile->GetPolicyStatus(pid); + switch (status) + { + case cmPolicies::OLD: + // Report that the policy is set to OLD. + this->Makefile->AddDefinition(var.c_str(), "OLD"); + break; + case cmPolicies::WARN: + // Report that the policy is not set. + this->Makefile->AddDefinition(var.c_str(), ""); + break; + case cmPolicies::NEW: + // Report that the policy is set to NEW. + this->Makefile->AddDefinition(var.c_str(), "NEW"); + break; + case cmPolicies::REQUIRED_IF_USED: + case cmPolicies::REQUIRED_ALWAYS: + // The policy is required to be set before anything needs it. + { + cmOStringStream e; + e << this->Makefile->GetPolicies()->GetRequiredPolicyError(pid) + << "\n" + << "The call to cmake_policy(GET " << id << " ...) at which this " + << "error appears requests the policy, and this version of CMake " + << "requires that the policy be set to NEW before it is checked."; + this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); + } + } + + return true; +} + +//---------------------------------------------------------------------------- +bool +cmCMakePolicyCommand::HandleVersionMode(std::vector const& args) +{ + if(args.size() <= 1) + { + this->SetError("VERSION not given an argument"); + return false; + } + else if(args.size() >= 3) + { + this->SetError("VERSION given too many arguments"); + return false; + } + this->Makefile->SetPolicyVersion(args[1].c_str()); + return true; +} diff --git a/Source/cmCMakePolicyCommand.h b/Source/cmCMakePolicyCommand.h new file mode 100644 index 0000000..4f1ed36 --- /dev/null +++ b/Source/cmCMakePolicyCommand.h @@ -0,0 +1,142 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCMakePolicyCommand_h +#define cmCMakePolicyCommand_h + +#include "cmCommand.h" + +/** \class cmCMakePolicyCommand + * \brief Set how CMake should handle policies + * + * cmCMakePolicyCommand sets how CMake should deal with backwards + * compatibility policies. + */ +class cmCMakePolicyCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmCMakePolicyCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const {return "cmake_policy";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Manage CMake Policy settings."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + "As CMake evolves it is sometimes necessary to change existing " + "behavior in order to fix bugs or improve implementations of " + "existing features. " + "The CMake Policy mechanism is designed to help keep existing projects " + "building as new versions of CMake introduce changes in behavior. " + "Each new policy (behavioral change) is given an identifier of " + "the form \"CMP\" where \"\" is an integer index. " + "Documentation associated with each policy describes the OLD and NEW " + "behavior and the reason the policy was introduced. " + "Projects may set each policy to select the desired behavior. " + "When CMake needs to know which behavior to use it checks for " + "a setting specified by the project. " + "If no setting is available the OLD behavior is assumed and a warning " + "is produced requesting that the policy be set.\n" + "The cmake_policy command is used to set policies to OLD or NEW " + "behavior. " + "While setting policies individually is supported, we encourage " + "projects to set policies based on CMake versions.\n" + " cmake_policy(VERSION major.minor[.patch[.tweak]])\n" + "Specify that the current CMake list file is written for the " + "given version of CMake. " + "All policies introduced in the specified version or earlier " + "will be set to use NEW behavior. " + "All policies introduced after the specified version will be unset " + "(unless variable CMAKE_POLICY_DEFAULT_CMP sets a default). " + "This effectively requests behavior preferred as of a given CMake " + "version and tells newer CMake versions to warn about their new " + "policies. " + "The policy version specified must be at least 2.4 or the command " + "will report an error. " + "In order to get compatibility features supporting versions earlier " + "than 2.4 see documentation of policy CMP0001." + "\n" + " cmake_policy(SET CMP NEW)\n" + " cmake_policy(SET CMP OLD)\n" + "Tell CMake to use the OLD or NEW behavior for a given policy. " + "Projects depending on the old behavior of a given policy may " + "silence a policy warning by setting the policy state to OLD. " + "Alternatively one may fix the project to work with the new behavior " + "and set the policy state to NEW." + "\n" + " cmake_policy(GET CMP )\n" + "Check whether a given policy is set to OLD or NEW behavior. " + "The output variable value will be \"OLD\" or \"NEW\" if the " + "policy is set, and empty otherwise." + "\n" + "CMake keeps policy settings on a stack, so changes made by the " + "cmake_policy command affect only the top of the stack. " + "A new entry on the policy stack is managed automatically for each " + "subdirectory to protect its parents and siblings. " + "CMake also manages a new entry for scripts loaded by include() and " + "find_package() commands except when invoked with the NO_POLICY_SCOPE " + "option (see also policy CMP0011). " + "The cmake_policy command provides an interface to manage custom " + "entries on the policy stack:\n" + " cmake_policy(PUSH)\n" + " cmake_policy(POP)\n" + "Each PUSH must have a matching POP to erase any changes. " + "This is useful to make temporary changes to policy settings." + "\n" + "Functions and macros record policy settings when they are created " + "and use the pre-record policies when they are invoked. " + "If the function or macro implementation sets policies, the changes " + "automatically propagate up through callers until they reach the " + "closest nested policy stack entry." + ; + } + + cmTypeMacro(cmCMakePolicyCommand, cmCommand); +private: + bool HandleSetMode(std::vector const& args); + bool HandleGetMode(std::vector const& args); + bool HandleVersionMode(std::vector const& args); +}; + + + +#endif diff --git a/Source/cmCPluginAPI.cxx b/Source/cmCPluginAPI.cxx new file mode 100644 index 0000000..e237913 --- /dev/null +++ b/Source/cmCPluginAPI.cxx @@ -0,0 +1,934 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + this file contains the implementation of the C API to CMake. Generally + these routines just manipulate arguments and then call the associated + methods on the CMake classes. */ + +#include "cmMakefile.h" +#include "cmCPluginAPI.h" +#include "cmVersion.h" + +#include "cmSourceFile.h" + +#include + +#ifdef __QNX__ +# include /* for malloc/free on QNX */ +#endif + +extern "C" +{ + +void CCONV *cmGetClientData(void *info) +{ + return ((cmLoadedCommandInfo *)info)->ClientData; +} + +void CCONV cmSetClientData(void *info, void *cd) +{ + ((cmLoadedCommandInfo *)info)->ClientData = cd; +} + +void CCONV cmSetError(void *info, const char *err) +{ + if (((cmLoadedCommandInfo *)info)->Error) + { + free(((cmLoadedCommandInfo *)info)->Error); + } + ((cmLoadedCommandInfo *)info)->Error = strdup(err); +} + +unsigned int CCONV cmGetCacheMajorVersion(void *arg) +{ + cmMakefile *mf = static_cast(arg); + return mf->GetCacheMajorVersion(); +} +unsigned int CCONV cmGetCacheMinorVersion(void *arg) +{ + cmMakefile *mf = static_cast(arg); + return mf->GetCacheMinorVersion(); +} + +unsigned int CCONV cmGetMajorVersion(void *) +{ + return cmVersion::GetMajorVersion(); +} + +unsigned int CCONV cmGetMinorVersion(void *) +{ + return cmVersion::GetMinorVersion(); +} + +void CCONV cmAddDefinition(void *arg, const char* name, const char* value) +{ + cmMakefile *mf = static_cast(arg); + mf->AddDefinition(name,value); +} + +/* Add a definition to this makefile and the global cmake cache. */ +void CCONV cmAddCacheDefinition(void *arg, const char* name, + const char* value, const char* doc, int type) +{ + cmMakefile *mf = static_cast(arg); + + switch (type) + { + case CM_CACHE_BOOL: + mf->AddCacheDefinition(name,value,doc, + cmCacheManager::BOOL); + break; + case CM_CACHE_PATH: + mf->AddCacheDefinition(name,value,doc, + cmCacheManager::PATH); + break; + case CM_CACHE_FILEPATH: + mf->AddCacheDefinition(name,value,doc, + cmCacheManager::FILEPATH); + break; + case CM_CACHE_STRING: + mf->AddCacheDefinition(name,value,doc, + cmCacheManager::STRING); + break; + case CM_CACHE_INTERNAL: + mf->AddCacheDefinition(name,value,doc, + cmCacheManager::INTERNAL); + break; + case CM_CACHE_STATIC: + mf->AddCacheDefinition(name,value,doc, + cmCacheManager::STATIC); + break; + } +} + +const char* CCONV cmGetProjectName(void *arg) +{ + cmMakefile *mf = static_cast(arg); + return mf->GetProjectName(); +} + +const char* CCONV cmGetHomeDirectory(void *arg) +{ + cmMakefile *mf = static_cast(arg); + return mf->GetHomeDirectory(); +} +const char* CCONV cmGetHomeOutputDirectory(void *arg) +{ + cmMakefile *mf = static_cast(arg); + return mf->GetHomeOutputDirectory(); +} +const char* CCONV cmGetStartDirectory(void *arg) +{ + cmMakefile *mf = static_cast(arg); + return mf->GetStartDirectory(); +} +const char* CCONV cmGetStartOutputDirectory(void *arg) +{ + cmMakefile *mf = static_cast(arg); + return mf->GetStartOutputDirectory(); +} +const char* CCONV cmGetCurrentDirectory(void *arg) +{ + cmMakefile *mf = static_cast(arg); + return mf->GetCurrentDirectory(); +} +const char* CCONV cmGetCurrentOutputDirectory(void *arg) +{ + cmMakefile *mf = static_cast(arg); + return mf->GetCurrentOutputDirectory(); +} +const char* CCONV cmGetDefinition(void *arg,const char*def) +{ + cmMakefile *mf = static_cast(arg); + return mf->GetDefinition(def); +} + +int CCONV cmIsOn(void *arg, const char* name) +{ + cmMakefile *mf = static_cast(arg); + return static_cast(mf->IsOn(name)); +} + +/** Check if a command exists. */ +int CCONV cmCommandExists(void *arg, const char* name) +{ + cmMakefile *mf = static_cast(arg); + return static_cast(mf->CommandExists(name)); +} + +void CCONV cmAddDefineFlag(void *arg, const char* definition) +{ + cmMakefile *mf = static_cast(arg); + mf->AddDefineFlag(definition); +} + +void CCONV cmAddLinkDirectoryForTarget(void *arg, const char *tgt, + const char* d) +{ + cmMakefile *mf = static_cast(arg); + mf->AddLinkDirectoryForTarget(tgt,d); +} + + +void CCONV cmAddExecutable(void *arg, const char *exename, + int numSrcs, const char **srcs, int win32) +{ + cmMakefile *mf = static_cast(arg); + std::vector srcs2; + int i; + for (i = 0; i < numSrcs; ++i) + { + srcs2.push_back(srcs[i]); + } + cmTarget* tg = mf->AddExecutable(exename, srcs2); + if ( win32 ) + { + tg->SetProperty("WIN32_EXECUTABLE", "ON"); + } +} + +void CCONV cmAddUtilityCommand(void *arg, const char* utilityName, + const char* command, + const char* arguments, + int all, + int numDepends, + const char **depends, + int, + const char **) +{ + // Get the makefile instance. Perform an extra variable expansion + // now because the API caller expects it. + cmMakefile* mf = static_cast(arg); + + // Construct the command line for the command. + cmCustomCommandLine commandLine; + std::string expand = command; + commandLine.push_back(mf->ExpandVariablesInString(expand)); + if(arguments && arguments[0]) + { + // TODO: Parse arguments! + expand = arguments; + commandLine.push_back(mf->ExpandVariablesInString(expand)); + } + cmCustomCommandLines commandLines; + commandLines.push_back(commandLine); + + // Accumulate the list of dependencies. + std::vector depends2; + for(int i = 0; i < numDepends; ++i) + { + expand = depends[i]; + depends2.push_back(mf->ExpandVariablesInString(expand)); + } + + // Pass the call to the makefile instance. + mf->AddUtilityCommand(utilityName, (all ? false : true), + 0, depends2, commandLines); +} +void CCONV cmAddCustomCommand(void *arg, const char* source, + const char* command, + int numArgs, const char **args, + int numDepends, const char **depends, + int numOutputs, const char **outputs, + const char *target) +{ + // Get the makefile instance. Perform an extra variable expansion + // now because the API caller expects it. + cmMakefile* mf = static_cast(arg); + + // Construct the command line for the command. + cmCustomCommandLine commandLine; + std::string expand = command; + commandLine.push_back(mf->ExpandVariablesInString(expand)); + for(int i=0; i < numArgs; ++i) + { + expand = args[i]; + commandLine.push_back(mf->ExpandVariablesInString(expand)); + } + cmCustomCommandLines commandLines; + commandLines.push_back(commandLine); + + // Accumulate the list of dependencies. + std::vector depends2; + for(int i = 0; i < numDepends; ++i) + { + expand = depends[i]; + depends2.push_back(mf->ExpandVariablesInString(expand)); + } + + // Accumulate the list of outputs. + std::vector outputs2; + for(int i = 0; i < numOutputs; ++i) + { + expand = outputs[i]; + outputs2.push_back(mf->ExpandVariablesInString(expand)); + } + + // Pass the call to the makefile instance. + const char* no_comment = 0; + mf->AddCustomCommandOldStyle(target, outputs2, depends2, source, + commandLines, no_comment); +} + +void CCONV cmAddCustomCommandToOutput(void *arg, const char* output, + const char* command, + int numArgs, const char **args, + const char* main_dependency, + int numDepends, const char **depends) +{ + // Get the makefile instance. Perform an extra variable expansion + // now because the API caller expects it. + cmMakefile* mf = static_cast(arg); + + // Construct the command line for the command. + cmCustomCommandLine commandLine; + std::string expand = command; + commandLine.push_back(mf->ExpandVariablesInString(expand)); + for(int i=0; i < numArgs; ++i) + { + expand = args[i]; + commandLine.push_back(mf->ExpandVariablesInString(expand)); + } + cmCustomCommandLines commandLines; + commandLines.push_back(commandLine); + + // Accumulate the list of dependencies. + std::vector depends2; + for(int i = 0; i < numDepends; ++i) + { + expand = depends[i]; + depends2.push_back(mf->ExpandVariablesInString(expand)); + } + + // Pass the call to the makefile instance. + const char* no_comment = 0; + const char* no_working_dir = 0; + mf->AddCustomCommandToOutput(output, depends2, main_dependency, + commandLines, no_comment, no_working_dir); +} + +void CCONV cmAddCustomCommandToTarget(void *arg, const char* target, + const char* command, + int numArgs, const char **args, + int commandType) +{ + // Get the makefile instance. + cmMakefile* mf = static_cast(arg); + + // Construct the command line for the command. Perform an extra + // variable expansion now because the API caller expects it. + cmCustomCommandLine commandLine; + std::string expand = command; + commandLine.push_back(mf->ExpandVariablesInString(expand)); + for(int i=0; i < numArgs; ++i) + { + expand = args[i]; + commandLine.push_back(mf->ExpandVariablesInString(expand)); + } + cmCustomCommandLines commandLines; + commandLines.push_back(commandLine); + + // Select the command type. + cmTarget::CustomCommandType cctype = cmTarget::POST_BUILD; + switch (commandType) + { + case CM_PRE_BUILD: + cctype = cmTarget::PRE_BUILD; + break; + case CM_PRE_LINK: + cctype = cmTarget::PRE_LINK; + break; + case CM_POST_BUILD: + cctype = cmTarget::POST_BUILD; + break; + } + + // Pass the call to the makefile instance. + std::vector no_depends; + const char* no_comment = 0; + const char* no_working_dir = 0; + mf->AddCustomCommandToTarget(target, no_depends, commandLines, + cctype, no_comment, no_working_dir); +} + +void CCONV cmAddLinkLibraryForTarget(void *arg, const char *tgt, + const char*value, int libtype) +{ + cmMakefile *mf = static_cast(arg); + + switch (libtype) + { + case CM_LIBRARY_GENERAL: + mf->AddLinkLibraryForTarget(tgt,value, cmTarget::GENERAL); + break; + case CM_LIBRARY_DEBUG: + mf->AddLinkLibraryForTarget(tgt,value, cmTarget::DEBUG); + break; + case CM_LIBRARY_OPTIMIZED: + mf->AddLinkLibraryForTarget(tgt,value, cmTarget::OPTIMIZED); + break; + } +} + +void CCONV cmAddLibrary(void *arg, const char *libname, int shared, + int numSrcs, const char **srcs) +{ + cmMakefile *mf = static_cast(arg); + std::vector srcs2; + int i; + for (i = 0; i < numSrcs; ++i) + { + srcs2.push_back(srcs[i]); + } + mf->AddLibrary(libname, + (shared? cmTarget::SHARED_LIBRARY : cmTarget::STATIC_LIBRARY), + srcs2); +} + +char CCONV *cmExpandVariablesInString(void *arg, const char *source, + int escapeQuotes, int atOnly) +{ + cmMakefile *mf = static_cast(arg); + std::string barf = source; + std::string result = + mf->ExpandVariablesInString(barf, + (escapeQuotes ? true : false), + (atOnly ? true : false)); + char *res = static_cast(malloc(result.size() + 1)); + if (result.size()) + { + strcpy(res,result.c_str()); + } + res[result.size()] = '\0'; + return res; +} + + +int CCONV cmExecuteCommand(void *arg, const char *name, + int numArgs, const char **args) +{ + cmMakefile *mf = static_cast(arg); + cmListFileFunction lff; + lff.Name = name; + for(int i = 0; i < numArgs; ++i) + { + // Assume all arguments are quoted. + lff.Arguments.push_back(cmListFileArgument(args[i], true, + "[CMake-Plugin]", 0)); + } + cmExecutionStatus status; + return mf->ExecuteCommand(lff,status); +} + +void CCONV cmExpandSourceListArguments(void *arg, + int numArgs, + const char **args, + int *resArgc, + char ***resArgv, + unsigned int startArgumentIndex) +{ + cmMakefile *mf = static_cast(arg); + std::vector result; + std::vector args2; + int i; + for (i = 0; i < numArgs; ++i) + { + args2.push_back(args[i]); + } + mf->ExpandSourceListArguments(args2, result, startArgumentIndex); + int resargc = static_cast(result.size()); + char **resargv = 0; + if (resargc) + { + resargv = (char **)malloc(resargc*sizeof(char *)); + } + for (i = 0; i < resargc; ++i) + { + resargv[i] = strdup(result[i].c_str()); + } + *resArgc = resargc; + *resArgv = resargv; +} + +void CCONV cmFreeArguments(int argc, char **argv) +{ + int i; + for (i = 0; i < argc; ++i) + { + free(argv[i]); + } + if (argv) + { + free(argv); + } +} + +int CCONV cmGetTotalArgumentSize(int argc, char **argv) +{ + int i; + int result = 0; + for (i = 0; i < argc; ++i) + { + if (argv[i]) + { + result = result + static_cast(strlen(argv[i])); + } + } + return result; +} + +// Source file proxy object to support the old cmSourceFile/cmMakefile +// API for source files. +struct cmCPluginAPISourceFile +{ + cmCPluginAPISourceFile(): RealSourceFile(0) {} + cmSourceFile* RealSourceFile; + std::string SourceName; + std::string SourceExtension; + std::string FullPath; + std::vector Depends; + cmPropertyMap Properties; +}; + +// Keep a map from real cmSourceFile instances stored in a makefile to +// the CPluginAPI proxy source file. +class cmCPluginAPISourceFileMap: + public std::map +{ +public: + typedef std::map derived; + typedef derived::iterator iterator; + typedef derived::value_type value_type; + ~cmCPluginAPISourceFileMap() + { + for(iterator i=this->begin(); i != this->end(); ++i) + { + delete i->second; + } + } +}; +cmCPluginAPISourceFileMap cmCPluginAPISourceFiles; + +void * CCONV cmCreateSourceFile(void) +{ + return (void*)new cmCPluginAPISourceFile; +} + +void * CCONV cmCreateNewSourceFile(void *arg) +{ + cmMakefile *mf = static_cast(arg); + cmCPluginAPISourceFile *sf = new cmCPluginAPISourceFile; + sf->Properties.SetCMakeInstance(mf->GetCMakeInstance()); + return (void*)sf; +} + +void CCONV cmDestroySourceFile(void *arg) +{ + cmCPluginAPISourceFile* sf = static_cast(arg); + // Only delete if it was created by cmCreateSourceFile or + // cmCreateNewSourceFile and is therefore not in the map. + if(!sf->RealSourceFile) + { + delete sf; + } +} + +void CCONV *cmGetSource(void *arg, const char *name) +{ + cmMakefile *mf = static_cast(arg); + if(cmSourceFile* rsf = mf->GetSource(name)) + { + // Lookup the proxy source file object for this source. + cmCPluginAPISourceFileMap::iterator i = cmCPluginAPISourceFiles.find(rsf); + if(i == cmCPluginAPISourceFiles.end()) + { + // Create a proxy source file object for this source. + cmCPluginAPISourceFile* sf = new cmCPluginAPISourceFile; + sf->RealSourceFile = rsf; + sf->FullPath = rsf->GetFullPath(); + sf->SourceName = + cmSystemTools::GetFilenameWithoutLastExtension(sf->FullPath.c_str()); + sf->SourceExtension = + cmSystemTools::GetFilenameLastExtension(sf->FullPath.c_str()); + + // Store the proxy in the map so it can be re-used and deleted later. + cmCPluginAPISourceFileMap::value_type entry(rsf, sf); + i = cmCPluginAPISourceFiles.insert(entry).first; + } + return (void *)i->second; + } + else + { + return 0; + } +} + +void * CCONV cmAddSource(void *arg, void *arg2) +{ + cmMakefile *mf = static_cast(arg); + cmCPluginAPISourceFile* osf = static_cast(arg2); + if(osf->FullPath.empty()) + { + return 0; + } + + // Create the real cmSourceFile instance and copy over saved information. + cmSourceFile* rsf = mf->GetOrCreateSource(osf->FullPath.c_str()); + rsf->GetProperties() = osf->Properties; + for(std::vector::iterator i = osf->Depends.begin(); + i != osf->Depends.end(); ++i) + { + rsf->AddDepend(i->c_str()); + } + + // Create the proxy for the real source file. + cmCPluginAPISourceFile* sf = new cmCPluginAPISourceFile; + sf->RealSourceFile = rsf; + sf->FullPath = osf->FullPath; + sf->SourceName = osf->SourceName; + sf->SourceExtension = osf->SourceExtension; + + // Store the proxy in the map so it can be re-used and deleted later. + cmCPluginAPISourceFiles[rsf] = sf; + return (void *)sf; +} + +const char * CCONV cmSourceFileGetSourceName(void *arg) +{ + cmCPluginAPISourceFile* sf = static_cast(arg); + return sf->SourceName.c_str(); +} + +const char * CCONV cmSourceFileGetFullPath(void *arg) +{ + cmCPluginAPISourceFile* sf = static_cast(arg); + return sf->FullPath.c_str(); +} + +const char * CCONV cmSourceFileGetProperty(void *arg,const char *prop) +{ + cmCPluginAPISourceFile* sf = static_cast(arg); + if(cmSourceFile* rsf = sf->RealSourceFile) + { + return rsf->GetProperty(prop); + } + else + { + if(!strcmp(prop,"LOCATION")) + { + return sf->FullPath.c_str(); + } + bool chain = false; + // Ignore chain because old code will not expect it and it is a + // pain to implement here anyway. + return sf->Properties.GetPropertyValue(prop, cmProperty::SOURCE_FILE, + chain); + } +} + +int CCONV cmSourceFileGetPropertyAsBool(void *arg,const char *prop) +{ + cmCPluginAPISourceFile* sf = static_cast(arg); + if(cmSourceFile* rsf = sf->RealSourceFile) + { + return rsf->GetPropertyAsBool(prop) ? 1:0; + } + else + { + return cmSystemTools::IsOn(cmSourceFileGetProperty(arg, prop))? 1:0; + } +} + +void CCONV cmSourceFileSetProperty(void *arg,const char *prop, + const char *value) +{ + cmCPluginAPISourceFile* sf = static_cast(arg); + if(cmSourceFile* rsf = sf->RealSourceFile) + { + rsf->SetProperty(prop, value); + } + else if(prop) + { + if(!value) { value = "NOTFOUND"; } + sf->Properties.SetProperty(prop, value, cmProperty::SOURCE_FILE); + } +} + +void CCONV cmSourceFileAddDepend(void *arg, const char *depend) +{ + cmCPluginAPISourceFile* sf = static_cast(arg); + if(cmSourceFile* rsf = sf->RealSourceFile) + { + rsf->AddDepend(depend); + } + else + { + sf->Depends.push_back(depend); + } +} + +void CCONV cmSourceFileSetName(void *arg, const char* name, const char* dir, + int numSourceExtensions, + const char **sourceExtensions, + int numHeaderExtensions, + const char **headerExtensions) +{ + cmCPluginAPISourceFile* sf = static_cast(arg); + if(sf->RealSourceFile) + { + // SetName is allowed only on temporary source files created by + // the command for building and passing to AddSource. + return; + } + std::vector sourceExts; + std::vector headerExts; + int i; + for (i = 0; i < numSourceExtensions; ++i) + { + sourceExts.push_back(sourceExtensions[i]); + } + for (i = 0; i < numHeaderExtensions; ++i) + { + headerExts.push_back(headerExtensions[i]); + } + + // Save the original name given. + sf->SourceName = name; + + // Convert the name to a full path in case the given name is a + // relative path. + std::string pathname = cmSystemTools::CollapseFullPath(name, dir); + + // First try and see whether the listed file can be found + // as is without extensions added on. + std::string hname = pathname; + if(cmSystemTools::FileExists(hname.c_str())) + { + sf->SourceName = cmSystemTools::GetFilenamePath(name); + if ( sf->SourceName.size() > 0 ) + { + sf->SourceName += "/"; + } + sf->SourceName += cmSystemTools::GetFilenameWithoutLastExtension(name); + std::string::size_type pos = hname.rfind('.'); + if(pos != std::string::npos) + { + sf->SourceExtension = hname.substr(pos+1, hname.size()-pos); + if ( cmSystemTools::FileIsFullPath(name) ) + { + std::string::size_type pos2 = hname.rfind('/'); + if(pos2 != std::string::npos) + { + sf->SourceName = hname.substr(pos2+1, pos - pos2-1); + } + } + } + + sf->FullPath = hname; + return; + } + + // Next, try the various source extensions + for( std::vector::const_iterator ext = sourceExts.begin(); + ext != sourceExts.end(); ++ext ) + { + hname = pathname; + hname += "."; + hname += *ext; + if(cmSystemTools::FileExists(hname.c_str())) + { + sf->SourceExtension = *ext; + sf->FullPath = hname; + return; + } + } + + // Finally, try the various header extensions + for( std::vector::const_iterator ext = headerExts.begin(); + ext != headerExts.end(); ++ext ) + { + hname = pathname; + hname += "."; + hname += *ext; + if(cmSystemTools::FileExists(hname.c_str())) + { + sf->SourceExtension = *ext; + sf->FullPath = hname; + return; + } + } + + cmOStringStream e; + e << "Cannot find source file \"" << pathname << "\""; + e << "\n\nTried extensions"; + for( std::vector::const_iterator ext = sourceExts.begin(); + ext != sourceExts.end(); ++ext ) + { + e << " ." << *ext; + } + for( std::vector::const_iterator ext = headerExts.begin(); + ext != headerExts.end(); ++ext ) + { + e << " ." << *ext; + } + cmSystemTools::Error(e.str().c_str()); + return; +} + +void CCONV cmSourceFileSetName2(void *arg, const char* name, const char* dir, + const char *ext, int headerFileOnly) +{ + cmCPluginAPISourceFile* sf = static_cast(arg); + if(sf->RealSourceFile) + { + // SetName is allowed only on temporary source files created by + // the command for building and passing to AddSource. + return; + } + + // Implement the old SetName method code here. + if(headerFileOnly) + { + sf->Properties.SetProperty("HEADER_FILE_ONLY", "1", + cmProperty::SOURCE_FILE); + } + sf->SourceName = name; + std::string fname = sf->SourceName; + if(ext && strlen(ext)) + { + fname += "."; + fname += ext; + } + sf->FullPath = cmSystemTools::CollapseFullPath(fname.c_str(), dir); + cmSystemTools::ConvertToUnixSlashes(sf->FullPath); + sf->SourceExtension = ext; +} + +char * CCONV cmGetFilenameWithoutExtension(const char *name) +{ + std::string sres = cmSystemTools::GetFilenameWithoutExtension(name); + char *result = (char *)malloc(sres.size()+1); + strcpy(result,sres.c_str()); + return result; +} + +char * CCONV cmGetFilenamePath(const char *name) +{ + std::string sres = cmSystemTools::GetFilenamePath(name); + char *result = (char *)malloc(sres.size()+1); + strcpy(result,sres.c_str()); + return result; +} + +char * CCONV cmCapitalized(const char *name) +{ + std::string sres = cmSystemTools::Capitalized(name); + char *result = (char *)malloc(sres.size()+1); + strcpy(result,sres.c_str()); + return result; +} + +void CCONV cmCopyFileIfDifferent(const char *name1, const char *name2) +{ + cmSystemTools::CopyFileIfDifferent(name1,name2); +} + +void CCONV cmRemoveFile(const char *name) +{ + cmSystemTools::RemoveFile(name); +} + +void CCONV cmDisplayStatus(void *arg, const char* message) +{ + cmMakefile *mf = static_cast(arg); + mf->DisplayStatus(message, -1); +} + +void CCONV cmFree(void *data) +{ + free(data); +} + +void CCONV DefineSourceFileProperty (void *arg, const char *name, + const char *briefDocs, + const char *longDocs, + int chained) +{ + cmMakefile *mf = static_cast(arg); + mf->GetCMakeInstance()->DefineProperty(name,cmProperty::SOURCE_FILE, + briefDocs, longDocs, + chained != 0); +} + +} // close the extern "C" scope + +cmCAPI cmStaticCAPI = +{ + cmGetClientData, + cmGetTotalArgumentSize, + cmFreeArguments, + cmSetClientData, + cmSetError, + cmAddCacheDefinition, + cmAddCustomCommand, + cmAddDefineFlag, + cmAddDefinition, + cmAddExecutable, + cmAddLibrary, + cmAddLinkDirectoryForTarget, + cmAddLinkLibraryForTarget, + cmAddUtilityCommand, + cmCommandExists, + cmExecuteCommand, + cmExpandSourceListArguments, + cmExpandVariablesInString, + cmGetCacheMajorVersion, + cmGetCacheMinorVersion, + cmGetCurrentDirectory, + cmGetCurrentOutputDirectory, + cmGetDefinition, + cmGetHomeDirectory, + cmGetHomeOutputDirectory, + cmGetMajorVersion, + cmGetMinorVersion, + cmGetProjectName, + cmGetStartDirectory, + cmGetStartOutputDirectory, + cmIsOn, + + cmAddSource, + cmCreateSourceFile, + cmDestroySourceFile, + cmGetSource, + cmSourceFileAddDepend, + cmSourceFileGetProperty, + cmSourceFileGetPropertyAsBool, + cmSourceFileGetSourceName, + cmSourceFileGetFullPath, + cmSourceFileSetName, + cmSourceFileSetName2, + cmSourceFileSetProperty, + + cmCapitalized, + cmCopyFileIfDifferent, + cmGetFilenameWithoutExtension, + cmGetFilenamePath, + cmRemoveFile, + cmFree, + + cmAddCustomCommandToOutput, + cmAddCustomCommandToTarget, + cmDisplayStatus, + cmCreateNewSourceFile, + DefineSourceFileProperty, +}; + diff --git a/Source/cmCPluginAPI.h b/Source/cmCPluginAPI.h new file mode 100644 index 0000000..fd5a4f8 --- /dev/null +++ b/Source/cmCPluginAPI.h @@ -0,0 +1,243 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* This header file defines the API that loadable commands can use. In many + of these commands C++ instances of cmMakefile of cmSourceFile are passed + in as arguments or returned. In these cases they are passed as a void * + argument. In the function prototypes mf is used to represent a makefile + and sf is used to represent a source file. The functions are grouped + loosely into four groups 1) Utility 2) cmMakefile 3) cmSourceFile 4) + cmSystemTools. Within each grouping functions are listed alphabetically */ +/*=========================================================================*/ +#ifndef cmCPluginAPI_h +#define cmCPluginAPI_h + +#define CMAKE_VERSION_MAJOR 2 +#define CMAKE_VERSION_MINOR 5 + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __WATCOMC__ +#define CCONV __cdecl +#else +#define CCONV +#endif +/*========================================================================= +this is the structure of function entry points that a plugin may call. This +structure must be kept in sync with the static decaled at the bottom of +cmCPLuginAPI.cxx +=========================================================================*/ +typedef struct +{ + /*========================================================================= + Here we define the set of functions that a plugin may call. The first goup + of functions are utility functions that are specific to the plugin API + =========================================================================*/ + /* set/Get the ClientData in the cmLoadedCommandInfo structure, this is how + information is passed from the InitialPass to FInalPass for commands + that need a FinalPass and need information from the InitialPass */ + void *(CCONV *GetClientData) (void *info); + /* return the summed size in characters of all the arguments */ + int (CCONV *GetTotalArgumentSize) (int argc, char **argv); + /* free all the memory associated with an argc, argv pair */ + void (CCONV *FreeArguments) (int argc, char **argv); + /* set/Get the ClientData in the cmLoadedCommandInfo structure, this is how + information is passed from the InitialPass to FInalPass for commands + that need a FinalPass and need information from the InitialPass */ + void (CCONV *SetClientData) (void *info, void *cd); + /* when an error occurs, call this function to set the error string */ + void (CCONV *SetError) (void *info, const char *err); + + /*========================================================================= + The following functions all directly map to methods in the cmMakefile + class. See cmMakefile.h for descriptions of what each method does. All of + these methods take the void * makefile pointer as their first argument. + =========================================================================*/ + void (CCONV *AddCacheDefinition) (void *mf, const char* name, + const char* value, + const char* doc, int cachetype); + void (CCONV *AddCustomCommand) (void *mf, const char* source, + const char* command, + int numArgs, const char **args, + int numDepends, const char **depends, + int numOutputs, const char **outputs, + const char *target); + void (CCONV *AddDefineFlag) (void *mf, const char* definition); + void (CCONV *AddDefinition) (void *mf, const char* name, + const char* value); + void (CCONV *AddExecutable) (void *mf, const char *exename, + int numSrcs, const char **srcs, int win32); + void (CCONV *AddLibrary) (void *mf, const char *libname, + int shared, int numSrcs, const char **srcs); + void (CCONV *AddLinkDirectoryForTarget) (void *mf, const char *tgt, + const char* d); + void (CCONV *AddLinkLibraryForTarget) (void *mf, const char *tgt, + const char *libname, int libtype); + void (CCONV *AddUtilityCommand) (void *mf, const char* utilityName, + const char *command, const char *arguments, + int all, int numDepends, const char **depends, + int numOutputs, const char **outputs); + int (CCONV *CommandExists) (void *mf, const char* name); + int (CCONV *ExecuteCommand) (void *mf, const char *name, + int numArgs, const char **args); + void (CCONV *ExpandSourceListArguments) (void *mf,int argc, + const char **argv, + int *resArgc, char ***resArgv, + unsigned int startArgumentIndex); + char *(CCONV *ExpandVariablesInString) (void *mf, const char *source, + int escapeQuotes, int atOnly); + unsigned int (CCONV *GetCacheMajorVersion) (void *mf); + unsigned int (CCONV *GetCacheMinorVersion) (void *mf); + const char* (CCONV *GetCurrentDirectory) (void *mf); + const char* (CCONV *GetCurrentOutputDirectory) (void *mf); + const char* (CCONV *GetDefinition) (void *mf, const char *def); + const char* (CCONV *GetHomeDirectory) (void *mf); + const char* (CCONV *GetHomeOutputDirectory) (void *mf); + unsigned int (CCONV *GetMajorVersion) (void *mf); + unsigned int (CCONV *GetMinorVersion) (void *mf); + const char* (CCONV *GetProjectName) (void *mf); + const char* (CCONV *GetStartDirectory) (void *mf); + const char* (CCONV *GetStartOutputDirectory) (void *mf); + int (CCONV *IsOn) (void *mf, const char* name); + + + /*========================================================================= + The following functions are designed to operate or manipulate + cmSourceFiles. Please see cmSourceFile.h for additional information on many + of these methods. Some of these methods are in cmMakefile.h. + =========================================================================*/ + void *(CCONV *AddSource) (void *mf, void *sf); + void *(CCONV *CreateSourceFile) (); + void (CCONV *DestroySourceFile) (void *sf); + void *(CCONV *GetSource) (void *mf, const char* sourceName); + void (CCONV *SourceFileAddDepend) (void *sf, const char *depend); + const char *(CCONV *SourceFileGetProperty) (void *sf, const char *prop); + int (CCONV *SourceFileGetPropertyAsBool) (void *sf, const char *prop); + const char *(CCONV *SourceFileGetSourceName) (void *sf); + const char *(CCONV *SourceFileGetFullPath) (void *sf); + void (CCONV *SourceFileSetName) (void *sf, const char* name, + const char* dir, + int numSourceExtensions, + const char **sourceExtensions, + int numHeaderExtensions, + const char **headerExtensions); + void (CCONV *SourceFileSetName2) (void *sf, const char* name, + const char* dir, + const char *ext, int headerFileOnly); + void (CCONV *SourceFileSetProperty) (void *sf, const char *prop, + const char *value); + + + /*========================================================================= + The following methods are from cmSystemTools.h see that file for specific + documentation on each method. + =========================================================================*/ + char *(CCONV *Capitalized)(const char *); + void (CCONV *CopyFileIfDifferent)(const char *f1, const char *f2); + char *(CCONV *GetFilenameWithoutExtension)(const char *); + char *(CCONV *GetFilenamePath)(const char *); + void (CCONV *RemoveFile)(const char *f1); + void (CCONV *Free)(void *); + + /*========================================================================= + The following are new functions added after 1.6 + =========================================================================*/ + void (CCONV *AddCustomCommandToOutput) (void *mf, const char* output, + const char* command, + int numArgs, const char **args, + const char* main_dependency, + int numDepends, const char **depends); + void (CCONV *AddCustomCommandToTarget) (void *mf, const char* target, + const char* command, + int numArgs, const char **args, + int commandType); + + /* display status information */ + void (CCONV *DisplaySatus) (void *info, const char *message); + + /* new functions added after 2.4 */ + void *(CCONV *CreateNewSourceFile) (void *mf); + void (CCONV *DefineSourceFileProperty) (void *mf, const char *name, + const char *briefDocs, + const char *longDocs, + int chained); + + /* this is the end of the C function stub API structure */ +} cmCAPI; + + +/*========================================================================= +CM_PLUGIN_EXPORT should be used by plugins +=========================================================================*/ +#ifdef _WIN32 +#define CM_PLUGIN_EXPORT __declspec( dllexport ) +#else +#define CM_PLUGIN_EXPORT +#endif + +/*========================================================================= +define the different types of cache entries, see cmCacheManager.h for more +information +=========================================================================*/ +#define CM_CACHE_BOOL 0 +#define CM_CACHE_PATH 1 +#define CM_CACHE_FILEPATH 2 +#define CM_CACHE_STRING 3 +#define CM_CACHE_INTERNAL 4 +#define CM_CACHE_STATIC 5 + +/*========================================================================= +define the different types of compiles a library may be +=========================================================================*/ +#define CM_LIBRARY_GENERAL 0 +#define CM_LIBRARY_DEBUG 1 +#define CM_LIBRARY_OPTIMIZED 2 + +/*========================================================================= +define the different types of custom commands for a target +=========================================================================*/ +#define CM_PRE_BUILD 0 +#define CM_PRE_LINK 1 +#define CM_POST_BUILD 2 + +/*========================================================================= +Finally we define the key data structures and function prototypes +=========================================================================*/ + typedef const char* (CCONV *CM_DOC_FUNCTION)(); + typedef int (CCONV *CM_INITIAL_PASS_FUNCTION)(void *info, void *mf, + int argc, char *[]); + typedef void (CCONV *CM_FINAL_PASS_FUNCTION)(void *info, void *mf); + typedef void (CCONV *CM_DESTRUCTOR_FUNCTION)(void *info); + + typedef struct { + unsigned long reserved1; /* Reserved for future use. DO NOT USE. */ + unsigned long reserved2; /* Reserved for future use. DO NOT USE. */ + cmCAPI *CAPI; + int m_Inherited; /* this ivar is no longer used in CMake 2.2 or later */ + CM_INITIAL_PASS_FUNCTION InitialPass; + CM_FINAL_PASS_FUNCTION FinalPass; + CM_DESTRUCTOR_FUNCTION Destructor; + CM_DOC_FUNCTION GetTerseDocumentation; + CM_DOC_FUNCTION GetFullDocumentation; + const char *Name; + char *Error; + void *ClientData; + } cmLoadedCommandInfo; + + typedef void (CCONV *CM_INIT_FUNCTION)(cmLoadedCommandInfo *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx new file mode 100644 index 0000000..3f7fdc7 --- /dev/null +++ b/Source/cmCTest.cxx @@ -0,0 +1,3204 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cm_curl.h" + +#include "cmCTest.h" +#include "cmake.h" +#include "cmMakefile.h" +#include "cmLocalGenerator.h" +#include "cmGlobalGenerator.h" +#include +#include +#include +#include "cmDynamicLoader.h" +#include "cmGeneratedFileStream.h" +#include "cmXMLSafe.h" +#include "cmVersionMacros.h" +#include "cmCTestCommand.h" +#include "cmCTestStartCommand.h" + +#include "cmCTestBuildHandler.h" +#include "cmCTestBuildAndTestHandler.h" +#include "cmCTestConfigureHandler.h" +#include "cmCTestCoverageHandler.h" +#include "cmCTestMemCheckHandler.h" +#include "cmCTestScriptHandler.h" +#include "cmCTestSubmitHandler.h" +#include "cmCTestTestHandler.h" +#include "cmCTestUpdateHandler.h" +#include "cmCTestUploadHandler.h" + +#include "cmVersion.h" + +#include +#include +#include + +#include +#include +#include +#include + +#include // auto_ptr + +#include +#include + +#if defined(__BEOS__) && !defined(__HAIKU__) +#include /* disable_debugger() API. */ +#endif + +#if defined(__HAIKU__) +#include /* disable_debugger() API. */ +#endif + + +#define DEBUGOUT std::cout << __LINE__ << " "; std::cout +#define DEBUGERR std::cerr << __LINE__ << " "; std::cerr + +//---------------------------------------------------------------------- +struct tm* cmCTest::GetNightlyTime(std::string str, + bool tomorrowtag) +{ + struct tm* lctime; + time_t tctime = time(0); + lctime = gmtime(&tctime); + char buf[1024]; + // add todays year day and month to the time in str because + // curl_getdate no longer assumes the day is today + sprintf(buf, "%d%02d%02d %s", + lctime->tm_year+1900, + lctime->tm_mon +1, + lctime->tm_mday, + str.c_str()); + cmCTestLog(this, OUTPUT, "Determine Nightly Start Time" << std::endl + << " Specified time: " << str.c_str() << std::endl); + //Convert the nightly start time to seconds. Since we are + //providing only a time and a timezone, the current date of + //the local machine is assumed. Consequently, nightlySeconds + //is the time at which the nightly dashboard was opened or + //will be opened on the date of the current client machine. + //As such, this time may be in the past or in the future. + time_t ntime = curl_getdate(buf, &tctime); + cmCTestLog(this, DEBUG, " Get curl time: " << ntime << std::endl); + tctime = time(0); + cmCTestLog(this, DEBUG, " Get the current time: " << tctime << std::endl); + + const int dayLength = 24 * 60 * 60; + cmCTestLog(this, DEBUG, "Seconds: " << tctime << std::endl); + while ( ntime > tctime ) + { + // If nightlySeconds is in the past, this is the current + // open dashboard, then return nightlySeconds. If + // nightlySeconds is in the future, this is the next + // dashboard to be opened, so subtract 24 hours to get the + // time of the current open dashboard + ntime -= dayLength; + cmCTestLog(this, DEBUG, "Pick yesterday" << std::endl); + cmCTestLog(this, DEBUG, " Future time, subtract day: " << ntime + << std::endl); + } + while ( tctime > (ntime + dayLength) ) + { + ntime += dayLength; + cmCTestLog(this, DEBUG, " Past time, add day: " << ntime << std::endl); + } + cmCTestLog(this, DEBUG, "nightlySeconds: " << ntime << std::endl); + cmCTestLog(this, DEBUG, " Current time: " << tctime + << " Nightly time: " << ntime << std::endl); + if ( tomorrowtag ) + { + cmCTestLog(this, OUTPUT, " Use future tag, Add a day" << std::endl); + ntime += dayLength; + } + lctime = gmtime(&ntime); + return lctime; +} + +//---------------------------------------------------------------------- +std::string cmCTest::CleanString(const std::string& str) +{ + std::string::size_type spos = str.find_first_not_of(" \n\t\r\f\v"); + std::string::size_type epos = str.find_last_not_of(" \n\t\r\f\v"); + if ( spos == str.npos ) + { + return std::string(); + } + if ( epos != str.npos ) + { + epos = epos - spos + 1; + } + return str.substr(spos, epos); +} + +//---------------------------------------------------------------------- +std::string cmCTest::CurrentTime() +{ + time_t currenttime = time(0); + struct tm* t = localtime(¤ttime); + //return ::CleanString(ctime(¤ttime)); + char current_time[1024]; + if ( this->ShortDateFormat ) + { + strftime(current_time, 1000, "%b %d %H:%M %Z", t); + } + else + { + strftime(current_time, 1000, "%a %b %d %H:%M:%S %Z %Y", t); + } + cmCTestLog(this, DEBUG, " Current_Time: " << current_time << std::endl); + return cmXMLSafe(cmCTest::CleanString(current_time)).str(); +} + +//---------------------------------------------------------------------- +std::string cmCTest::GetCostDataFile() +{ + std::string fname = this->GetCTestConfiguration("CostDataFile"); + if(fname == "") + { + fname= this->GetBinaryDir() + "/Testing/Temporary/CTestCostData.txt"; + } + return fname; +} + +#ifdef CMAKE_BUILD_WITH_CMAKE +//---------------------------------------------------------------------------- +static size_t +HTTPResponseCallback(void *ptr, size_t size, size_t nmemb, void *data) +{ + register int realsize = (int)(size * nmemb); + + std::string *response + = static_cast(data); + const char* chPtr = static_cast(ptr); + *response += chPtr; + + return realsize; +} + +//---------------------------------------------------------------------------- +int cmCTest::HTTPRequest(std::string url, HTTPMethod method, + std::string& response, + std::string fields, + std::string putFile, int timeout) +{ + CURL* curl; + FILE* file; + ::curl_global_init(CURL_GLOBAL_ALL); + curl = ::curl_easy_init(); + + //set request options based on method + switch(method) + { + case cmCTest::HTTP_POST: + ::curl_easy_setopt(curl, CURLOPT_POST, 1); + ::curl_easy_setopt(curl, CURLOPT_POSTFIELDS, fields.c_str()); + break; + case cmCTest::HTTP_PUT: + if(!cmSystemTools::FileExists(putFile.c_str())) + { + response = "Error: File "; + response += putFile + " does not exist.\n"; + return -1; + } + ::curl_easy_setopt(curl, CURLOPT_PUT, 1); + file = ::fopen(putFile.c_str(), "rb"); + ::curl_easy_setopt(curl, CURLOPT_INFILE, file); + //fall through to append GET fields + case cmCTest::HTTP_GET: + if(fields.size()) + { + url += "?" + fields; + } + break; + default: + break; + } + + ::curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + ::curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout); + ::curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); + + //set response options + ::curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HTTPResponseCallback); + ::curl_easy_setopt(curl, CURLOPT_FILE, (void *)&response); + ::curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1); + + CURLcode res = ::curl_easy_perform(curl); + + ::curl_easy_cleanup(curl); + ::curl_global_cleanup(); + + return static_cast(res); +} +#endif + +//---------------------------------------------------------------------- +std::string cmCTest::MakeURLSafe(const std::string& str) +{ + cmOStringStream ost; + char buffer[10]; + for ( std::string::size_type pos = 0; pos < str.size(); pos ++ ) + { + unsigned char ch = str[pos]; + if ( ( ch > 126 || ch < 32 || + ch == '&' || + ch == '%' || + ch == '+' || + ch == '=' || + ch == '@' + ) && ch != 9 ) + { + sprintf(buffer, "%02x;", (unsigned int)ch); + ost << buffer; + } + else + { + ost << ch; + } + } + return ost.str(); +} + +//---------------------------------------------------------------------------- +std::string cmCTest::DecodeURL(const std::string& in) +{ + std::string out; + for(const char* c = in.c_str(); *c; ++c) + { + if(*c == '%' && isxdigit(*(c+1)) && isxdigit(*(c+2))) + { + char buf[3] = {*(c+1), *(c+2), 0}; + out.append(1, char(strtoul(buf, 0, 16))); + c += 2; + } + else + { + out.append(1, *c); + } + } + return out; +} + +//---------------------------------------------------------------------- +cmCTest::cmCTest() +{ + this->LabelSummary = true; + this->ParallelLevel = 1; + this->SubmitIndex = 0; + this->Failover = false; + this->BatchJobs = false; + this->ForceNewCTestProcess = false; + this->TomorrowTag = false; + this->Verbose = false; + + this->Debug = false; + this->ShowLineNumbers = false; + this->Quiet = false; + this->ExtraVerbose = false; + this->ProduceXML = false; + this->ShowOnly = false; + this->RunConfigurationScript = false; + this->UseHTTP10 = false; + this->PrintLabels = false; + this->CompressTestOutput = true; + this->CompressMemCheckOutput = true; + this->TestModel = cmCTest::EXPERIMENTAL; + this->MaxTestNameWidth = 30; + this->InteractiveDebugMode = true; + this->TimeOut = 0; + this->GlobalTimeout = 0; + this->LastStopTimeout = 24 * 60 * 60; + this->CompressXMLFiles = false; + this->CTestConfigFile = ""; + this->ScheduleType = ""; + this->StopTime = ""; + this->NextDayStopTime = false; + this->OutputLogFile = 0; + this->OutputLogFileLastTag = -1; + this->SuppressUpdatingCTestConfiguration = false; + this->DartVersion = 1; + this->OutputTestOutputOnTestFailure = false; + this->ComputedCompressTestOutput = false; + this->ComputedCompressMemCheckOutput = false; + if(cmSystemTools::GetEnv("CTEST_OUTPUT_ON_FAILURE")) + { + this->OutputTestOutputOnTestFailure = true; + } + this->InitStreams(); + + this->Parts[PartStart].SetName("Start"); + this->Parts[PartUpdate].SetName("Update"); + this->Parts[PartConfigure].SetName("Configure"); + this->Parts[PartBuild].SetName("Build"); + this->Parts[PartTest].SetName("Test"); + this->Parts[PartCoverage].SetName("Coverage"); + this->Parts[PartMemCheck].SetName("MemCheck"); + this->Parts[PartSubmit].SetName("Submit"); + this->Parts[PartNotes].SetName("Notes"); + this->Parts[PartExtraFiles].SetName("ExtraFiles"); + this->Parts[PartUpload].SetName("Upload"); + + // Fill the part name-to-id map. + for(Part p = PartStart; p != PartCount; p = Part(p+1)) + { + this->PartMap[cmSystemTools::LowerCase(this->Parts[p].GetName())] = p; + } + + this->ShortDateFormat = true; + + this->TestingHandlers["build"] = new cmCTestBuildHandler; + this->TestingHandlers["buildtest"] = new cmCTestBuildAndTestHandler; + this->TestingHandlers["coverage"] = new cmCTestCoverageHandler; + this->TestingHandlers["script"] = new cmCTestScriptHandler; + this->TestingHandlers["test"] = new cmCTestTestHandler; + this->TestingHandlers["update"] = new cmCTestUpdateHandler; + this->TestingHandlers["configure"] = new cmCTestConfigureHandler; + this->TestingHandlers["memcheck"] = new cmCTestMemCheckHandler; + this->TestingHandlers["submit"] = new cmCTestSubmitHandler; + this->TestingHandlers["upload"] = new cmCTestUploadHandler; + + cmCTest::t_TestingHandlers::iterator it; + for ( it = this->TestingHandlers.begin(); + it != this->TestingHandlers.end(); ++ it ) + { + it->second->SetCTestInstance(this); + } + + // Make sure we can capture the build tool output. + cmSystemTools::EnableVSConsoleOutput(); +} + +//---------------------------------------------------------------------- +cmCTest::~cmCTest() +{ + cmCTest::t_TestingHandlers::iterator it; + for ( it = this->TestingHandlers.begin(); + it != this->TestingHandlers.end(); ++ it ) + { + delete it->second; + it->second = 0; + } + this->SetOutputLogFileName(0); +} + +void cmCTest::SetParallelLevel(int level) +{ + this->ParallelLevel = level < 1 ? 1 : level; +} + +//---------------------------------------------------------------------------- +bool cmCTest::ShouldCompressTestOutput() +{ + if(!this->ComputedCompressTestOutput) + { + std::string cdashVersion = this->GetCDashVersion(); + //version >= 1.6? + bool cdashSupportsGzip = cmSystemTools::VersionCompare( + cmSystemTools::OP_GREATER, cdashVersion.c_str(), "1.6") || + cmSystemTools::VersionCompare(cmSystemTools::OP_EQUAL, + cdashVersion.c_str(), "1.6"); + this->CompressTestOutput &= cdashSupportsGzip; + this->ComputedCompressTestOutput = true; + } + return this->CompressTestOutput; +} + +//---------------------------------------------------------------------------- +bool cmCTest::ShouldCompressMemCheckOutput() +{ + if(!this->ComputedCompressMemCheckOutput) + { + std::string cdashVersion = this->GetCDashVersion(); + + bool compressionSupported = cmSystemTools::VersionCompare( + cmSystemTools::OP_GREATER, cdashVersion.c_str(), "1.9.0"); + this->CompressMemCheckOutput &= compressionSupported; + this->ComputedCompressMemCheckOutput = true; + } + return this->CompressMemCheckOutput; +} + +//---------------------------------------------------------------------------- +std::string cmCTest::GetCDashVersion() +{ +#ifdef CMAKE_BUILD_WITH_CMAKE + //First query the server. If that fails, fall back to the local setting + std::string response; + std::string url = "http://"; + url += this->GetCTestConfiguration("DropSite"); + + std::string cdashUri = this->GetCTestConfiguration("DropLocation"); + cdashUri = cdashUri.substr(0, cdashUri.find("/submit.php")); + + int res = 1; + if ( ! cdashUri.empty() ) + { + url += cdashUri + "/api/getversion.php"; + res = cmCTest::HTTPRequest(url, cmCTest::HTTP_GET, response, "", "", 3); + } + + return res ? this->GetCTestConfiguration("CDashVersion") : response; +#else + return this->GetCTestConfiguration("CDashVersion"); +#endif +} + +//---------------------------------------------------------------------------- +cmCTest::Part cmCTest::GetPartFromName(const char* name) +{ + // Look up by lower-case to make names case-insensitive. + std::string lower_name = cmSystemTools::LowerCase(name); + PartMapType::const_iterator i = this->PartMap.find(lower_name); + if(i != this->PartMap.end()) + { + return i->second; + } + + // The string does not name a valid part. + return PartCount; +} + +//---------------------------------------------------------------------- +int cmCTest::Initialize(const char* binary_dir, cmCTestStartCommand* command) +{ + cmCTestLog(this, DEBUG, "Here: " << __LINE__ << std::endl); + if(!this->InteractiveDebugMode) + { + this->BlockTestErrorDiagnostics(); + } + else + { + cmSystemTools::PutEnv("CTEST_INTERACTIVE_DEBUG_MODE=1"); + } + + this->BinaryDir = binary_dir; + cmSystemTools::ConvertToUnixSlashes(this->BinaryDir); + + this->UpdateCTestConfiguration(); + + cmCTestLog(this, DEBUG, "Here: " << __LINE__ << std::endl); + if ( this->ProduceXML ) + { + cmCTestLog(this, DEBUG, "Here: " << __LINE__ << std::endl); + cmCTestLog(this, OUTPUT, + " Site: " << this->GetCTestConfiguration("Site") << std::endl + << " Build name: " << this->GetCTestConfiguration("BuildName") + << std::endl); + cmCTestLog(this, DEBUG, "Produce XML is on" << std::endl); + if ( this->TestModel == cmCTest::NIGHTLY && + this->GetCTestConfiguration("NightlyStartTime").empty() ) + { + cmCTestLog(this, WARNING, + "WARNING: No nightly start time found please set in" + " CTestConfig.cmake or DartConfig.cmake" << std::endl); + cmCTestLog(this, DEBUG, "Here: " << __LINE__ << std::endl); + return 0; + } + } + + cmake cm; + cmGlobalGenerator gg; + gg.SetCMakeInstance(&cm); + std::auto_ptr lg(gg.CreateLocalGenerator()); + cmMakefile *mf = lg->GetMakefile(); + if ( !this->ReadCustomConfigurationFileTree(this->BinaryDir.c_str(), mf) ) + { + cmCTestLog(this, DEBUG, "Cannot find custom configuration file tree" + << std::endl); + return 0; + } + + if ( this->ProduceXML ) + { + // Verify "Testing" directory exists: + // + std::string testingDir = this->BinaryDir + "/Testing"; + if ( cmSystemTools::FileExists(testingDir.c_str()) ) + { + if ( !cmSystemTools::FileIsDirectory(testingDir.c_str()) ) + { + cmCTestLog(this, ERROR_MESSAGE, "File " << testingDir + << " is in the place of the testing directory" << std::endl); + return 0; + } + } + else + { + if ( !cmSystemTools::MakeDirectory(testingDir.c_str()) ) + { + cmCTestLog(this, ERROR_MESSAGE, "Cannot create directory " + << testingDir << std::endl); + return 0; + } + } + + // Create new "TAG" file or read existing one: + // + bool createNewTag = true; + if (command) + { + createNewTag = command->ShouldCreateNewTag(); + } + + std::string tagfile = testingDir + "/TAG"; + std::ifstream tfin(tagfile.c_str()); + std::string tag; + + if (createNewTag) + { + time_t tctime = time(0); + if ( this->TomorrowTag ) + { + tctime += ( 24 * 60 * 60 ); + } + struct tm *lctime = gmtime(&tctime); + if ( tfin && cmSystemTools::GetLineFromStream(tfin, tag) ) + { + int year = 0; + int mon = 0; + int day = 0; + int hour = 0; + int min = 0; + sscanf(tag.c_str(), "%04d%02d%02d-%02d%02d", + &year, &mon, &day, &hour, &min); + if ( year != lctime->tm_year + 1900 || + mon != lctime->tm_mon+1 || + day != lctime->tm_mday ) + { + tag = ""; + } + std::string tagmode; + if ( cmSystemTools::GetLineFromStream(tfin, tagmode) ) + { + if (tagmode.size() > 4 && !this->Parts[PartStart]) + { + this->TestModel = cmCTest::GetTestModelFromString(tagmode.c_str()); + } + } + tfin.close(); + } + if (tag.size() == 0 || (0 != command) || this->Parts[PartStart]) + { + cmCTestLog(this, DEBUG, "TestModel: " << this->GetTestModelString() + << std::endl); + cmCTestLog(this, DEBUG, "TestModel: " << this->TestModel << std::endl); + if ( this->TestModel == cmCTest::NIGHTLY ) + { + lctime = this->GetNightlyTime( + this->GetCTestConfiguration("NightlyStartTime"), + this->TomorrowTag); + } + char datestring[100]; + sprintf(datestring, "%04d%02d%02d-%02d%02d", + lctime->tm_year + 1900, + lctime->tm_mon+1, + lctime->tm_mday, + lctime->tm_hour, + lctime->tm_min); + tag = datestring; + std::ofstream ofs(tagfile.c_str()); + if ( ofs ) + { + ofs << tag << std::endl; + ofs << this->GetTestModelString() << std::endl; + } + ofs.close(); + if ( 0 == command ) + { + cmCTestLog(this, OUTPUT, "Create new tag: " << tag << " - " + << this->GetTestModelString() << std::endl); + } + } + } + else + { + if ( tfin ) + { + cmSystemTools::GetLineFromStream(tfin, tag); + tfin.close(); + } + + if ( tag.empty() ) + { + cmCTestLog(this, ERROR_MESSAGE, + "Cannot read existing TAG file in " << testingDir + << std::endl); + return 0; + } + + cmCTestLog(this, OUTPUT, " Use existing tag: " << tag << " - " + << this->GetTestModelString() << std::endl); + } + + this->CurrentTag = tag; + } + + return 1; +} + +//---------------------------------------------------------------------- +bool cmCTest::InitializeFromCommand(cmCTestStartCommand* command) +{ + std::string src_dir + = this->GetCTestConfiguration("SourceDirectory").c_str(); + std::string bld_dir = this->GetCTestConfiguration("BuildDirectory").c_str(); + this->DartVersion = 1; + for(Part p = PartStart; p != PartCount; p = Part(p+1)) + { + this->Parts[p].SubmitFiles.clear(); + } + + cmMakefile* mf = command->GetMakefile(); + std::string fname; + + std::string src_dir_fname = src_dir; + src_dir_fname += "/CTestConfig.cmake"; + cmSystemTools::ConvertToUnixSlashes(src_dir_fname); + + std::string bld_dir_fname = bld_dir; + bld_dir_fname += "/CTestConfig.cmake"; + cmSystemTools::ConvertToUnixSlashes(bld_dir_fname); + + if ( cmSystemTools::FileExists(bld_dir_fname.c_str()) ) + { + fname = bld_dir_fname; + } + else if ( cmSystemTools::FileExists(src_dir_fname.c_str()) ) + { + fname = src_dir_fname; + } + + if ( !fname.empty() ) + { + cmCTestLog(this, OUTPUT, " Reading ctest configuration file: " + << fname.c_str() << std::endl); + bool readit = mf->ReadListFile(mf->GetCurrentListFile(), + fname.c_str() ); + if(!readit) + { + std::string m = "Could not find include file: "; + m += fname; + command->SetError(m.c_str()); + return false; + } + } + else + { + cmCTestLog(this, WARNING, + "Cannot locate CTest configuration: in BuildDirectory: " + << bld_dir_fname.c_str() << std::endl); + cmCTestLog(this, WARNING, + "Cannot locate CTest configuration: in SourceDirectory: " + << src_dir_fname.c_str() << std::endl); + } + + this->SetCTestConfigurationFromCMakeVariable(mf, "NightlyStartTime", + "CTEST_NIGHTLY_START_TIME"); + this->SetCTestConfigurationFromCMakeVariable(mf, "Site", "CTEST_SITE"); + this->SetCTestConfigurationFromCMakeVariable(mf, "BuildName", + "CTEST_BUILD_NAME"); + const char* dartVersion = mf->GetDefinition("CTEST_DART_SERVER_VERSION"); + if ( dartVersion ) + { + this->DartVersion = atoi(dartVersion); + if ( this->DartVersion < 0 ) + { + cmCTestLog(this, ERROR_MESSAGE, "Invalid Dart server version: " + << dartVersion << ". Please specify the version number." + << std::endl); + return false; + } + } + + if ( !this->Initialize(bld_dir.c_str(), command) ) + { + return false; + } + cmCTestLog(this, OUTPUT, " Use " << this->GetTestModelString() + << " tag: " << this->GetCurrentTag() << std::endl); + return true; +} + + +//---------------------------------------------------------------------- +bool cmCTest::UpdateCTestConfiguration() +{ + if ( this->SuppressUpdatingCTestConfiguration ) + { + return true; + } + std::string fileName = this->CTestConfigFile; + if ( fileName.empty() ) + { + fileName = this->BinaryDir + "/CTestConfiguration.ini"; + if ( !cmSystemTools::FileExists(fileName.c_str()) ) + { + fileName = this->BinaryDir + "/DartConfiguration.tcl"; + } + } + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, "UpdateCTestConfiguration from :" + << fileName.c_str() << "\n"); + if ( !cmSystemTools::FileExists(fileName.c_str()) ) + { + // No need to exit if we are not producing XML + if ( this->ProduceXML ) + { + cmCTestLog(this, ERROR_MESSAGE, "Cannot find file: " << fileName.c_str() + << std::endl); + return false; + } + } + else + { + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, "Parse Config file:" + << fileName.c_str() << "\n"); + // parse the dart test file + std::ifstream fin(fileName.c_str()); + + if(!fin) + { + return false; + } + + char buffer[1024]; + while ( fin ) + { + buffer[0] = 0; + fin.getline(buffer, 1023); + buffer[1023] = 0; + std::string line = cmCTest::CleanString(buffer); + if(line.size() == 0) + { + continue; + } + while ( fin && (line[line.size()-1] == '\\') ) + { + line = line.substr(0, line.size()-1); + buffer[0] = 0; + fin.getline(buffer, 1023); + buffer[1023] = 0; + line += cmCTest::CleanString(buffer); + } + if ( line[0] == '#' ) + { + continue; + } + std::string::size_type cpos = line.find_first_of(":"); + if ( cpos == line.npos ) + { + continue; + } + std::string key = line.substr(0, cpos); + std::string value + = cmCTest::CleanString(line.substr(cpos+1, line.npos)); + this->CTestConfiguration[key] = value; + } + fin.close(); + } + if ( !this->GetCTestConfiguration("BuildDirectory").empty() ) + { + this->BinaryDir = this->GetCTestConfiguration("BuildDirectory"); + cmSystemTools::ChangeDirectory(this->BinaryDir.c_str()); + } + this->TimeOut = atoi(this->GetCTestConfiguration("TimeOut").c_str()); + if ( this->ProduceXML ) + { + this->CompressXMLFiles = cmSystemTools::IsOn( + this->GetCTestConfiguration("CompressSubmission").c_str()); + } + return true; +} + +//---------------------------------------------------------------------- +void cmCTest::BlockTestErrorDiagnostics() +{ + cmSystemTools::PutEnv("DART_TEST_FROM_DART=1"); + cmSystemTools::PutEnv("DASHBOARD_TEST_FROM_CTEST=" CMake_VERSION); +#if defined(_WIN32) + SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); +#elif defined(__BEOS__) || defined(__HAIKU__) + disable_debugger(1); +#endif +} + +//---------------------------------------------------------------------- +void cmCTest::SetTestModel(int mode) +{ + this->InteractiveDebugMode = false; + this->TestModel = mode; +} + +//---------------------------------------------------------------------- +bool cmCTest::SetTest(const char* ttype, bool report) +{ + if ( cmSystemTools::LowerCase(ttype) == "all" ) + { + for(Part p = PartStart; p != PartCount; p = Part(p+1)) + { + this->Parts[p].Enable(); + } + return true; + } + Part p = this->GetPartFromName(ttype); + if(p != PartCount) + { + this->Parts[p].Enable(); + return true; + } + else + { + if ( report ) + { + cmCTestLog(this, ERROR_MESSAGE, "Don't know about test \"" << ttype + << "\" yet..." << std::endl); + } + return false; + } +} + +//---------------------------------------------------------------------- +void cmCTest::Finalize() +{ +} + +//---------------------------------------------------------------------- +bool cmCTest::OpenOutputFile(const std::string& path, + const std::string& name, cmGeneratedFileStream& stream, + bool compress) +{ + std::string testingDir = this->BinaryDir + "/Testing"; + if ( path.size() > 0 ) + { + testingDir += "/" + path; + } + if ( cmSystemTools::FileExists(testingDir.c_str()) ) + { + if ( !cmSystemTools::FileIsDirectory(testingDir.c_str()) ) + { + cmCTestLog(this, ERROR_MESSAGE, "File " << testingDir + << " is in the place of the testing directory" + << std::endl); + return false; + } + } + else + { + if ( !cmSystemTools::MakeDirectory(testingDir.c_str()) ) + { + cmCTestLog(this, ERROR_MESSAGE, "Cannot create directory " << testingDir + << std::endl); + return false; + } + } + std::string filename = testingDir + "/" + name; + stream.Open(filename.c_str()); + if( !stream ) + { + cmCTestLog(this, ERROR_MESSAGE, "Problem opening file: " << filename + << std::endl); + return false; + } + if ( compress ) + { + if ( this->CompressXMLFiles ) + { + stream.SetCompression(true); + } + } + return true; +} + +//---------------------------------------------------------------------- +bool cmCTest::AddIfExists(Part part, const char* file) +{ + if ( this->CTestFileExists(file) ) + { + this->AddSubmitFile(part, file); + } + else + { + std::string name = file; + name += ".gz"; + if ( this->CTestFileExists(name.c_str()) ) + { + this->AddSubmitFile(part, file); + } + else + { + return false; + } + } + return true; +} + +//---------------------------------------------------------------------- +bool cmCTest::CTestFileExists(const std::string& filename) +{ + std::string testingDir = this->BinaryDir + "/Testing/" + + this->CurrentTag + "/" + filename; + return cmSystemTools::FileExists(testingDir.c_str()); +} + +//---------------------------------------------------------------------- +cmCTestGenericHandler* cmCTest::GetInitializedHandler(const char* handler) +{ + cmCTest::t_TestingHandlers::iterator it = + this->TestingHandlers.find(handler); + if ( it == this->TestingHandlers.end() ) + { + return 0; + } + it->second->Initialize(); + return it->second; +} + +//---------------------------------------------------------------------- +cmCTestGenericHandler* cmCTest::GetHandler(const char* handler) +{ + cmCTest::t_TestingHandlers::iterator it = + this->TestingHandlers.find(handler); + if ( it == this->TestingHandlers.end() ) + { + return 0; + } + return it->second; +} + +//---------------------------------------------------------------------- +int cmCTest::ExecuteHandler(const char* shandler) +{ + cmCTestGenericHandler* handler = this->GetHandler(shandler); + if ( !handler ) + { + return -1; + } + handler->Initialize(); + return handler->ProcessHandler(); +} + +//---------------------------------------------------------------------- +int cmCTest::ProcessTests() +{ + int res = 0; + bool notest = true; + int update_count = 0; + + for(Part p = PartStart; notest && p != PartCount; p = Part(p+1)) + { + notest = !this->Parts[p]; + } + if (this->Parts[PartUpdate] && + (this->GetRemainingTimeAllowed() - 120 > 0)) + { + cmCTestGenericHandler* uphandler = this->GetHandler("update"); + uphandler->SetPersistentOption("SourceDirectory", + this->GetCTestConfiguration("SourceDirectory").c_str()); + update_count = uphandler->ProcessHandler(); + if ( update_count < 0 ) + { + res |= cmCTest::UPDATE_ERRORS; + } + } + if ( this->TestModel == cmCTest::CONTINUOUS && !update_count ) + { + return 0; + } + if (this->Parts[PartConfigure] && + (this->GetRemainingTimeAllowed() - 120 > 0)) + { + if (this->GetHandler("configure")->ProcessHandler() < 0) + { + res |= cmCTest::CONFIGURE_ERRORS; + } + } + if (this->Parts[PartBuild] && + (this->GetRemainingTimeAllowed() - 120 > 0)) + { + this->UpdateCTestConfiguration(); + if (this->GetHandler("build")->ProcessHandler() < 0) + { + res |= cmCTest::BUILD_ERRORS; + } + } + if ((this->Parts[PartTest] || notest) && + (this->GetRemainingTimeAllowed() - 120 > 0)) + { + this->UpdateCTestConfiguration(); + if (this->GetHandler("test")->ProcessHandler() < 0) + { + res |= cmCTest::TEST_ERRORS; + } + } + if (this->Parts[PartCoverage] && + (this->GetRemainingTimeAllowed() - 120 > 0)) + { + this->UpdateCTestConfiguration(); + if (this->GetHandler("coverage")->ProcessHandler() < 0) + { + res |= cmCTest::COVERAGE_ERRORS; + } + } + if (this->Parts[PartMemCheck] && + (this->GetRemainingTimeAllowed() - 120 > 0)) + { + this->UpdateCTestConfiguration(); + if (this->GetHandler("memcheck")->ProcessHandler() < 0) + { + res |= cmCTest::MEMORY_ERRORS; + } + } + if ( !notest ) + { + std::string notes_dir = this->BinaryDir + "/Testing/Notes"; + if ( cmSystemTools::FileIsDirectory(notes_dir.c_str()) ) + { + cmsys::Directory d; + d.Load(notes_dir.c_str()); + unsigned long kk; + for ( kk = 0; kk < d.GetNumberOfFiles(); kk ++ ) + { + const char* file = d.GetFile(kk); + std::string fullname = notes_dir + "/" + file; + if ( cmSystemTools::FileExists(fullname.c_str()) && + !cmSystemTools::FileIsDirectory(fullname.c_str()) ) + { + if ( this->NotesFiles.size() > 0 ) + { + this->NotesFiles += ";"; + } + this->NotesFiles += fullname; + this->Parts[PartNotes].Enable(); + } + } + } + } + if (this->Parts[PartNotes]) + { + this->UpdateCTestConfiguration(); + if ( this->NotesFiles.size() ) + { + this->GenerateNotesFile(this->NotesFiles.c_str()); + } + } + if (this->Parts[PartSubmit]) + { + this->UpdateCTestConfiguration(); + if (this->GetHandler("submit")->ProcessHandler() < 0) + { + res |= cmCTest::SUBMIT_ERRORS; + } + } + if ( res != 0 ) + { + cmCTestLog(this, ERROR_MESSAGE, "Errors while running CTest" + << std::endl); + } + return res; +} + +//---------------------------------------------------------------------- +std::string cmCTest::GetTestModelString() +{ + if ( !this->SpecificTrack.empty() ) + { + return this->SpecificTrack; + } + switch ( this->TestModel ) + { + case cmCTest::NIGHTLY: + return "Nightly"; + case cmCTest::CONTINUOUS: + return "Continuous"; + } + return "Experimental"; +} + +//---------------------------------------------------------------------- +int cmCTest::GetTestModelFromString(const char* str) +{ + if ( !str ) + { + return cmCTest::EXPERIMENTAL; + } + std::string rstr = cmSystemTools::LowerCase(str); + if ( strncmp(rstr.c_str(), "cont", 4) == 0 ) + { + return cmCTest::CONTINUOUS; + } + if ( strncmp(rstr.c_str(), "nigh", 4) == 0 ) + { + return cmCTest::NIGHTLY; + } + return cmCTest::EXPERIMENTAL; +} + +//###################################################################### +//###################################################################### +//###################################################################### +//###################################################################### + +//---------------------------------------------------------------------- +int cmCTest::RunMakeCommand(const char* command, std::string* output, + int* retVal, const char* dir, int timeout, std::ofstream& ofs) +{ + // First generate the command and arguments + std::vector args = cmSystemTools::ParseArguments(command); + + if(args.size() < 1) + { + return false; + } + + std::vector argv; + for(std::vector::const_iterator a = args.begin(); + a != args.end(); ++a) + { + argv.push_back(a->c_str()); + } + argv.push_back(0); + + if ( output ) + { + *output = ""; + } + + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, "Run command:"); + std::vector::iterator ait; + for ( ait = argv.begin(); ait != argv.end() && *ait; ++ ait ) + { + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, " \"" << *ait << "\""); + } + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, std::endl); + + // Now create process object + cmsysProcess* cp = cmsysProcess_New(); + cmsysProcess_SetCommand(cp, &*argv.begin()); + cmsysProcess_SetWorkingDirectory(cp, dir); + cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1); + cmsysProcess_SetTimeout(cp, timeout); + cmsysProcess_Execute(cp); + + // Initialize tick's + std::string::size_type tick = 0; + std::string::size_type tick_len = 1024; + std::string::size_type tick_line_len = 50; + + char* data; + int length; + cmCTestLog(this, HANDLER_OUTPUT, + " Each . represents " << tick_len << " bytes of output" << std::endl + << " " << std::flush); + while(cmsysProcess_WaitForData(cp, &data, &length, 0)) + { + if ( output ) + { + for(int cc =0; cc < length; ++cc) + { + if(data[cc] == 0) + { + data[cc] = '\n'; + } + } + + output->append(data, length); + while ( output->size() > (tick * tick_len) ) + { + tick ++; + cmCTestLog(this, HANDLER_OUTPUT, "." << std::flush); + if ( tick % tick_line_len == 0 && tick > 0 ) + { + cmCTestLog(this, HANDLER_OUTPUT, " Size: " + << int((double(output->size()) / 1024.0) + 1) << "K" << std::endl + << " " << std::flush); + } + } + } + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, cmCTestLogWrite(data, length)); + if ( ofs ) + { + ofs << cmCTestLogWrite(data, length); + } + } + cmCTestLog(this, OUTPUT, " Size of output: " + << int(double(output->size()) / 1024.0) << "K" << std::endl); + + cmsysProcess_WaitForExit(cp, 0); + + int result = cmsysProcess_GetState(cp); + + if(result == cmsysProcess_State_Exited) + { + *retVal = cmsysProcess_GetExitValue(cp); + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, "Command exited with the value: " + << *retVal << std::endl); + } + else if(result == cmsysProcess_State_Exception) + { + *retVal = cmsysProcess_GetExitException(cp); + cmCTestLog(this, WARNING, "There was an exception: " << *retVal + << std::endl); + } + else if(result == cmsysProcess_State_Expired) + { + cmCTestLog(this, WARNING, "There was a timeout" << std::endl); + } + else if(result == cmsysProcess_State_Error) + { + *output += "\n*** ERROR executing: "; + *output += cmsysProcess_GetErrorString(cp); + *output += "\n***The build process failed."; + cmCTestLog(this, ERROR_MESSAGE, "There was an error: " + << cmsysProcess_GetErrorString(cp) << std::endl); + } + + cmsysProcess_Delete(cp); + + return result; +} + +//###################################################################### +//###################################################################### +//###################################################################### +//###################################################################### + +//---------------------------------------------------------------------- +int cmCTest::RunTest(std::vector argv, + std::string* output, int *retVal, + std::ostream* log, double testTimeOut, + std::vector* environment) +{ + std::vector origEnv; + bool modifyEnv = (environment && environment->size()>0); + + // determine how much time we have + double timeout = this->GetRemainingTimeAllowed() - 120; + if (this->TimeOut > 0 && this->TimeOut < timeout) + { + timeout = this->TimeOut; + } + if (testTimeOut > 0 + && testTimeOut < this->GetRemainingTimeAllowed()) + { + timeout = testTimeOut; + } + + // always have at least 1 second if we got to here + if (timeout <= 0) + { + timeout = 1; + } + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, + "Test timeout computed to be: " << timeout << "\n"); + if(cmSystemTools::SameFile(argv[0], this->CTestSelf.c_str()) && + !this->ForceNewCTestProcess) + { + cmCTest inst; + inst.ConfigType = this->ConfigType; + inst.TimeOut = timeout; + + // Capture output of the child ctest. + cmOStringStream oss; + inst.SetStreams(&oss, &oss); + + std::vector args; + for(unsigned int i =0; i < argv.size(); ++i) + { + if(argv[i]) + { + // make sure we pass the timeout in for any build and test + // invocations. Since --build-generator is required this is a + // good place to check for it, and to add the arguments in + if (strcmp(argv[i],"--build-generator") == 0 && timeout > 0) + { + args.push_back("--test-timeout"); + cmOStringStream msg; + msg << timeout; + args.push_back(msg.str()); + } + args.push_back(argv[i]); + } + } + if ( log ) + { + *log << "* Run internal CTest" << std::endl; + } + std::string oldpath = cmSystemTools::GetCurrentWorkingDirectory(); + + if (modifyEnv) + { + origEnv = cmSystemTools::AppendEnv(environment); + } + + *retVal = inst.Run(args, output); + *output += oss.str(); + if ( log ) + { + *log << output->c_str(); + } + cmSystemTools::ChangeDirectory(oldpath.c_str()); + + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, + "Internal cmCTest object used to run test." << std::endl + << *output << std::endl); + + if (modifyEnv) + { + cmSystemTools::RestoreEnv(origEnv); + } + + return cmsysProcess_State_Exited; + } + std::vector tempOutput; + if ( output ) + { + *output = ""; + } + + if (modifyEnv) + { + origEnv = cmSystemTools::AppendEnv(environment); + } + + cmsysProcess* cp = cmsysProcess_New(); + cmsysProcess_SetCommand(cp, &*argv.begin()); + cmCTestLog(this, DEBUG, "Command is: " << argv[0] << std::endl); + if(cmSystemTools::GetRunCommandHideConsole()) + { + cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1); + } + + cmsysProcess_SetTimeout(cp, timeout); + cmsysProcess_Execute(cp); + + char* data; + int length; + while(cmsysProcess_WaitForData(cp, &data, &length, 0)) + { + if ( output ) + { + tempOutput.insert(tempOutput.end(), data, data+length); + } + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, cmCTestLogWrite(data, length)); + if ( log ) + { + log->write(data, length); + } + } + + cmsysProcess_WaitForExit(cp, 0); + if(output && tempOutput.begin() != tempOutput.end()) + { + output->append(&*tempOutput.begin(), tempOutput.size()); + } + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, "-- Process completed" + << std::endl); + + int result = cmsysProcess_GetState(cp); + + if(result == cmsysProcess_State_Exited) + { + *retVal = cmsysProcess_GetExitValue(cp); + if(*retVal != 0 && this->OutputTestOutputOnTestFailure) + { + OutputTestErrors(tempOutput); + } + } + else if(result == cmsysProcess_State_Exception) + { + if(this->OutputTestOutputOnTestFailure) + { + OutputTestErrors(tempOutput); + } + *retVal = cmsysProcess_GetExitException(cp); + std::string outerr = "\n*** Exception executing: "; + outerr += cmsysProcess_GetExceptionString(cp); + *output += outerr; + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, outerr.c_str() << std::endl + << std::flush); + } + else if(result == cmsysProcess_State_Error) + { + std::string outerr = "\n*** ERROR executing: "; + outerr += cmsysProcess_GetErrorString(cp); + *output += outerr; + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, outerr.c_str() << std::endl + << std::flush); + } + cmsysProcess_Delete(cp); + + if (modifyEnv) + { + cmSystemTools::RestoreEnv(origEnv); + } + + return result; +} + +//---------------------------------------------------------------------- +std::string cmCTest::SafeBuildIdField(const std::string& value) +{ + std::string safevalue(value); + + if (safevalue != "") + { + // Disallow non-filename and non-space whitespace characters. + // If they occur, replace them with "" + // + const char *disallowed = "\\/:*?\"<>|\n\r\t\f\v"; + + if (safevalue.find_first_of(disallowed) != value.npos) + { + std::string::size_type i = 0; + std::string::size_type n = strlen(disallowed); + char replace[2]; + replace[1] = 0; + + for (i= 0; iCurrentTag.empty()) + { + cmCTestLog(this, ERROR_MESSAGE, + "Current Tag empty, this may mean" + " NightlStartTime was not set correctly." << std::endl); + cmSystemTools::SetFatalErrorOccured(); + } + + // find out about the system + cmsys::SystemInformation info; + info.RunCPUCheck(); + info.RunOSCheck(); + info.RunMemoryCheck(); + + std::string buildname = cmCTest::SafeBuildIdField( + this->GetCTestConfiguration("BuildName")); + std::string stamp = cmCTest::SafeBuildIdField( + this->CurrentTag + "-" + this->GetTestModelString()); + std::string site = cmCTest::SafeBuildIdField( + this->GetCTestConfiguration("Site")); + + ostr << "\n" + << "GetCTestConfiguration("Compiler") + << "\"\n" +#ifdef _COMPILER_VERSION + << "\tCompilerVersion=\"_COMPILER_VERSION\"\n" +#endif + << "\tOSName=\"" << info.GetOSName() << "\"\n" + << "\tHostname=\"" << info.GetHostname() << "\"\n" + << "\tOSRelease=\"" << info.GetOSRelease() << "\"\n" + << "\tOSVersion=\"" << info.GetOSVersion() << "\"\n" + << "\tOSPlatform=\"" << info.GetOSPlatform() << "\"\n" + << "\tIs64Bits=\"" << info.Is64Bits() << "\"\n" + << "\tVendorString=\"" << info.GetVendorString() << "\"\n" + << "\tVendorID=\"" << info.GetVendorID() << "\"\n" + << "\tFamilyID=\"" << info.GetFamilyID() << "\"\n" + << "\tModelID=\"" << info.GetModelID() << "\"\n" + << "\tProcessorCacheSize=\"" << info.GetProcessorCacheSize() << "\"\n" + << "\tNumberOfLogicalCPU=\"" << info.GetNumberOfLogicalCPU() << "\"\n" + << "\tNumberOfPhysicalCPU=\""<< info.GetNumberOfPhysicalCPU() << "\"\n" + << "\tTotalVirtualMemory=\"" << info.GetTotalVirtualMemory() << "\"\n" + << "\tTotalPhysicalMemory=\""<< info.GetTotalPhysicalMemory() << "\"\n" + << "\tLogicalProcessorsPerPhysical=\"" + << info.GetLogicalProcessorsPerPhysical() << "\"\n" + << "\tProcessorClockFrequency=\"" + << info.GetProcessorClockFrequency() << "\"\n" + << ">" << std::endl; + this->AddSiteProperties(ostr); +} + +//---------------------------------------------------------------------- +void cmCTest::AddSiteProperties(std::ostream& ostr) +{ + cmCTestScriptHandler* ch = + static_cast(this->GetHandler("script")); + cmake* cm = ch->GetCMake(); + // if no CMake then this is the old style script and props like + // this will not work anyway. + if(!cm) + { + return; + } + // This code should go when cdash is changed to use labels only + const char* subproject = cm->GetProperty("SubProject", cmProperty::GLOBAL); + if(subproject) + { + ostr << "\n"; + const char* labels = + ch->GetCMake()->GetProperty("SubProjectLabels", cmProperty::GLOBAL); + if(labels) + { + ostr << " \n"; + std::string l = labels; + std::vector args; + cmSystemTools::ExpandListArgument(l, args); + for(std::vector::iterator i = args.begin(); + i != args.end(); ++i) + { + ostr << " \n"; + } + ostr << " \n"; + } + ostr << "\n"; + } + + // This code should stay when cdash only does label based sub-projects + const char* label = cm->GetProperty("Label", cmProperty::GLOBAL); + if(label) + { + ostr << "\n"; + ostr << " \n"; + ostr << "\n"; + } +} + + +//---------------------------------------------------------------------- +void cmCTest::EndXML(std::ostream& ostr) +{ + ostr << "" << std::endl; +} + +//---------------------------------------------------------------------- +int cmCTest::GenerateCTestNotesOutput(std::ostream& os, + const cmCTest::VectorOfStrings& files) +{ + cmCTest::VectorOfStrings::const_iterator it; + os << "\n" + << " \"?>\n" + << "GetCTestConfiguration("BuildName") + << "\" BuildStamp=\"" + << this->CurrentTag << "-" << this->GetTestModelString() << "\" Name=\"" + << this->GetCTestConfiguration("Site") << "\" Generator=\"ctest" + << cmVersion::GetCMakeVersion() + << "\">\n"; + this->AddSiteProperties(os); + os << "" << std::endl; + + for ( it = files.begin(); it != files.end(); it ++ ) + { + cmCTestLog(this, OUTPUT, "\tAdd file: " << it->c_str() << std::endl); + std::string note_time = this->CurrentTime(); + os << "\n" + << "\n" + << "" << note_time << "\n" + << "" << std::endl; + std::ifstream ifs(it->c_str()); + if ( ifs ) + { + std::string line; + while ( cmSystemTools::GetLineFromStream(ifs, line) ) + { + os << cmXMLSafe(line) << std::endl; + } + ifs.close(); + } + else + { + os << "Problem reading file: " << it->c_str() << std::endl; + cmCTestLog(this, ERROR_MESSAGE, "Problem reading file: " << it->c_str() + << " while creating notes" << std::endl); + } + os << "\n" + << "" << std::endl; + } + os << "\n" + << "" << std::endl; + return 1; +} + +//---------------------------------------------------------------------- +int cmCTest::GenerateNotesFile(const std::vector &files) +{ + cmGeneratedFileStream ofs; + if ( !this->OpenOutputFile(this->CurrentTag, "Notes.xml", ofs) ) + { + cmCTestLog(this, ERROR_MESSAGE, "Cannot open notes file" << std::endl); + return 1; + } + + this->GenerateCTestNotesOutput(ofs, files); + return 0; +} + +//---------------------------------------------------------------------- +int cmCTest::GenerateNotesFile(const char* cfiles) +{ + if ( !cfiles ) + { + return 1; + } + + std::vector files; + + cmCTestLog(this, OUTPUT, "Create notes file" << std::endl); + + files = cmSystemTools::SplitString(cfiles, ';'); + if ( files.size() == 0 ) + { + return 1; + } + + return this->GenerateNotesFile(files); +} + +//---------------------------------------------------------------------- +std::string cmCTest::Base64GzipEncodeFile(std::string file) +{ + std::string tarFile = file + "_temp.tar.gz"; + std::vector files; + files.push_back(file); + + if(!cmSystemTools::CreateTar(tarFile.c_str(), files, true, false, false)) + { + cmCTestLog(this, ERROR_MESSAGE, "Error creating tar while " + "encoding file: " << file << std::endl); + return ""; + } + std::string base64 = this->Base64EncodeFile(tarFile); + cmSystemTools::RemoveFile(tarFile.c_str()); + return base64; +} + +//---------------------------------------------------------------------- +std::string cmCTest::Base64EncodeFile(std::string file) +{ + long len = cmSystemTools::FileLength(file.c_str()); + std::ifstream ifs(file.c_str(), std::ios::in +#ifdef _WIN32 + | std::ios::binary +#endif + ); + unsigned char *file_buffer = new unsigned char [ len + 1 ]; + ifs.read(reinterpret_cast(file_buffer), len); + ifs.close(); + + unsigned char *encoded_buffer + = new unsigned char [ static_cast( + static_cast(len) * 1.5 + 5.0) ]; + + unsigned long rlen + = cmsysBase64_Encode(file_buffer, len, encoded_buffer, 1); + + std::string base64 = ""; + for(unsigned long i = 0; i < rlen; i++) + { + base64 += encoded_buffer[i]; + } + delete [] file_buffer; + delete [] encoded_buffer; + + return base64; +} + + +//---------------------------------------------------------------------- +bool cmCTest::SubmitExtraFiles(const std::vector &files) +{ + std::vector::const_iterator it; + for ( it = files.begin(); + it != files.end(); + ++ it ) + { + if ( !cmSystemTools::FileExists(it->c_str()) ) + { + cmCTestLog(this, ERROR_MESSAGE, "Cannot find extra file: " + << it->c_str() << " to submit." + << std::endl;); + return false; + } + this->AddSubmitFile(PartExtraFiles, it->c_str()); + } + return true; +} + +//---------------------------------------------------------------------- +bool cmCTest::SubmitExtraFiles(const char* cfiles) +{ + if ( !cfiles ) + { + return 1; + } + + std::vector files; + + cmCTestLog(this, OUTPUT, "Submit extra files" << std::endl); + + files = cmSystemTools::SplitString(cfiles, ';'); + if ( files.size() == 0 ) + { + return 1; + } + + return this->SubmitExtraFiles(files); +} + + +//------------------------------------------------------- +// for a -D argument convert the next argument into +// the proper list of dashboard steps via SetTest +bool cmCTest::AddTestsForDashboardType(std::string &targ) +{ + if ( targ == "Experimental" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + this->SetTest("Start"); + this->SetTest("Configure"); + this->SetTest("Build"); + this->SetTest("Test"); + this->SetTest("Coverage"); + this->SetTest("Submit"); + } + else if ( targ == "ExperimentalStart" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + this->SetTest("Start"); + } + else if ( targ == "ExperimentalUpdate" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + this->SetTest("Update"); + } + else if ( targ == "ExperimentalConfigure" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + this->SetTest("Configure"); + } + else if ( targ == "ExperimentalBuild" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + this->SetTest("Build"); + } + else if ( targ == "ExperimentalTest" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + this->SetTest("Test"); + } + else if ( targ == "ExperimentalMemCheck" + || targ == "ExperimentalPurify" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + this->SetTest("MemCheck"); + } + else if ( targ == "ExperimentalCoverage" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + this->SetTest("Coverage"); + } + else if ( targ == "ExperimentalSubmit" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + this->SetTest("Submit"); + } + else if ( targ == "Continuous" ) + { + this->SetTestModel(cmCTest::CONTINUOUS); + this->SetTest("Start"); + this->SetTest("Update"); + this->SetTest("Configure"); + this->SetTest("Build"); + this->SetTest("Test"); + this->SetTest("Coverage"); + this->SetTest("Submit"); + } + else if ( targ == "ContinuousStart" ) + { + this->SetTestModel(cmCTest::CONTINUOUS); + this->SetTest("Start"); + } + else if ( targ == "ContinuousUpdate" ) + { + this->SetTestModel(cmCTest::CONTINUOUS); + this->SetTest("Update"); + } + else if ( targ == "ContinuousConfigure" ) + { + this->SetTestModel(cmCTest::CONTINUOUS); + this->SetTest("Configure"); + } + else if ( targ == "ContinuousBuild" ) + { + this->SetTestModel(cmCTest::CONTINUOUS); + this->SetTest("Build"); + } + else if ( targ == "ContinuousTest" ) + { + this->SetTestModel(cmCTest::CONTINUOUS); + this->SetTest("Test"); + } + else if ( targ == "ContinuousMemCheck" + || targ == "ContinuousPurify" ) + { + this->SetTestModel(cmCTest::CONTINUOUS); + this->SetTest("MemCheck"); + } + else if ( targ == "ContinuousCoverage" ) + { + this->SetTestModel(cmCTest::CONTINUOUS); + this->SetTest("Coverage"); + } + else if ( targ == "ContinuousSubmit" ) + { + this->SetTestModel(cmCTest::CONTINUOUS); + this->SetTest("Submit"); + } + else if ( targ == "Nightly" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + this->SetTest("Start"); + this->SetTest("Update"); + this->SetTest("Configure"); + this->SetTest("Build"); + this->SetTest("Test"); + this->SetTest("Coverage"); + this->SetTest("Submit"); + } + else if ( targ == "NightlyStart" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + this->SetTest("Start"); + } + else if ( targ == "NightlyUpdate" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + this->SetTest("Update"); + } + else if ( targ == "NightlyConfigure" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + this->SetTest("Configure"); + } + else if ( targ == "NightlyBuild" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + this->SetTest("Build"); + } + else if ( targ == "NightlyTest" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + this->SetTest("Test"); + } + else if ( targ == "NightlyMemCheck" + || targ == "NightlyPurify" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + this->SetTest("MemCheck"); + } + else if ( targ == "NightlyCoverage" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + this->SetTest("Coverage"); + } + else if ( targ == "NightlySubmit" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + this->SetTest("Submit"); + } + else if ( targ == "MemoryCheck" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + this->SetTest("Start"); + this->SetTest("Configure"); + this->SetTest("Build"); + this->SetTest("MemCheck"); + this->SetTest("Coverage"); + this->SetTest("Submit"); + } + else if ( targ == "NightlyMemoryCheck" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + this->SetTest("Start"); + this->SetTest("Update"); + this->SetTest("Configure"); + this->SetTest("Build"); + this->SetTest("MemCheck"); + this->SetTest("Coverage"); + this->SetTest("Submit"); + } + else + { + cmCTestLog(this, ERROR_MESSAGE, + "CTest -D called with incorrect option: " + << targ << std::endl); + cmCTestLog(this, ERROR_MESSAGE, "Available options are:" << std::endl + << " " << "ctest" << " -D Continuous" << std::endl + << " " << "ctest" + << " -D Continuous(Start|Update|Configure|Build)" << std::endl + << " " << "ctest" + << " -D Continuous(Test|Coverage|MemCheck|Submit)" + << std::endl + << " " << "ctest" << " -D Experimental" << std::endl + << " " << "ctest" + << " -D Experimental(Start|Update|Configure|Build)" + << std::endl + << " " << "ctest" + << " -D Experimental(Test|Coverage|MemCheck|Submit)" + << std::endl + << " " << "ctest" << " -D Nightly" << std::endl + << " " << "ctest" + << " -D Nightly(Start|Update|Configure|Build)" << std::endl + << " " << "ctest" + << " -D Nightly(Test|Coverage|MemCheck|Submit)" << std::endl + << " " << "ctest" << " -D NightlyMemoryCheck" << std::endl); + return false; + } + return true; +} + + +//---------------------------------------------------------------------- +bool cmCTest::CheckArgument(const std::string& arg, const char* varg1, + const char* varg2) +{ + return (varg1 && arg == varg1) || (varg2 && arg == varg2); +} + + +//---------------------------------------------------------------------- +// Processes one command line argument (and its arguments if any) +// for many simple options and then returns +void cmCTest::HandleCommandLineArguments(size_t &i, + std::vector &args) +{ + std::string arg = args[i]; + + if(this->CheckArgument(arg, "-F")) + { + this->Failover = true; + } + if(this->CheckArgument(arg, "-j", "--parallel") && i < args.size() - 1) + { + i++; + int plevel = atoi(args[i].c_str()); + this->SetParallelLevel(plevel); + } + else if(arg.find("-j") == 0) + { + int plevel = atoi(arg.substr(2).c_str()); + this->SetParallelLevel(plevel); + } + + if(this->CheckArgument(arg, "--no-compress-output")) + { + this->CompressTestOutput = false; + this->CompressMemCheckOutput = false; + } + + if(this->CheckArgument(arg, "--print-labels")) + { + this->PrintLabels = true; + } + + if(this->CheckArgument(arg, "--http1.0")) + { + this->UseHTTP10 = true; + } + + if(this->CheckArgument(arg, "--timeout") && i < args.size() - 1) + { + i++; + double timeout = (double)atof(args[i].c_str()); + this->GlobalTimeout = timeout; + } + + if(this->CheckArgument(arg, "--stop-time") && i < args.size() - 1) + { + i++; + this->SetStopTime(args[i]); + } + + if(this->CheckArgument(arg, "-C", "--build-config") && + i < args.size() - 1) + { + i++; + this->SetConfigType(args[i].c_str()); + } + + if(this->CheckArgument(arg, "--debug")) + { + this->Debug = true; + this->ShowLineNumbers = true; + } + if(this->CheckArgument(arg, "--track") && i < args.size() - 1) + { + i++; + this->SpecificTrack = args[i]; + } + if(this->CheckArgument(arg, "--show-line-numbers")) + { + this->ShowLineNumbers = true; + } + if(this->CheckArgument(arg, "--no-label-summary")) + { + this->LabelSummary = false; + } + if(this->CheckArgument(arg, "-Q", "--quiet")) + { + this->Quiet = true; + } + if(this->CheckArgument(arg, "-V", "--verbose")) + { + this->Verbose = true; + } + if(this->CheckArgument(arg, "-B")) + { + this->BatchJobs = true; + } + if(this->CheckArgument(arg, "-VV", "--extra-verbose")) + { + this->ExtraVerbose = true; + this->Verbose = true; + } + if(this->CheckArgument(arg, "--output-on-failure")) + { + this->OutputTestOutputOnTestFailure = true; + } + + if(this->CheckArgument(arg, "-N", "--show-only")) + { + this->ShowOnly = true; + } + + if(this->CheckArgument(arg, "-O", "--output-log") && i < args.size() - 1 ) + { + i++; + this->SetOutputLogFileName(args[i].c_str()); + } + + if(this->CheckArgument(arg, "--tomorrow-tag")) + { + this->TomorrowTag = true; + } + if(this->CheckArgument(arg, "--force-new-ctest-process")) + { + this->ForceNewCTestProcess = true; + } + if(this->CheckArgument(arg, "-W", "--max-width") && i < args.size() - 1) + { + i++; + this->MaxTestNameWidth = atoi(args[i].c_str()); + } + if(this->CheckArgument(arg, "--interactive-debug-mode") && + i < args.size() - 1 ) + { + i++; + this->InteractiveDebugMode = cmSystemTools::IsOn(args[i].c_str()); + } + if(this->CheckArgument(arg, "--submit-index") && i < args.size() - 1 ) + { + i++; + this->SubmitIndex = atoi(args[i].c_str()); + if ( this->SubmitIndex < 0 ) + { + this->SubmitIndex = 0; + } + } + + if(this->CheckArgument(arg, "--overwrite") && i < args.size() - 1) + { + i++; + this->AddCTestConfigurationOverwrite(args[i].c_str()); + } + if(this->CheckArgument(arg, "-A", "--add-notes") && i < args.size() - 1) + { + this->ProduceXML = true; + this->SetTest("Notes"); + i++; + this->SetNotesFiles(args[i].c_str()); + } + + // options that control what tests are run + if(this->CheckArgument(arg, "-I", "--tests-information") && + i < args.size() - 1) + { + i++; + this->GetHandler("test")->SetPersistentOption("TestsToRunInformation", + args[i].c_str()); + this->GetHandler("memcheck")-> + SetPersistentOption("TestsToRunInformation",args[i].c_str()); + } + if(this->CheckArgument(arg, "-U", "--union")) + { + this->GetHandler("test")->SetPersistentOption("UseUnion", "true"); + this->GetHandler("memcheck")->SetPersistentOption("UseUnion", "true"); + } + if(this->CheckArgument(arg, "-R", "--tests-regex") && i < args.size() - 1) + { + i++; + this->GetHandler("test")-> + SetPersistentOption("IncludeRegularExpression", args[i].c_str()); + this->GetHandler("memcheck")-> + SetPersistentOption("IncludeRegularExpression", args[i].c_str()); + } + if(this->CheckArgument(arg, "-L", "--label-regex") && i < args.size() - 1) + { + i++; + this->GetHandler("test")-> + SetPersistentOption("LabelRegularExpression", args[i].c_str()); + this->GetHandler("memcheck")-> + SetPersistentOption("LabelRegularExpression", args[i].c_str()); + } + if(this->CheckArgument(arg, "-LE", "--label-exclude") && i < args.size() - 1) + { + i++; + this->GetHandler("test")-> + SetPersistentOption("ExcludeLabelRegularExpression", args[i].c_str()); + this->GetHandler("memcheck")-> + SetPersistentOption("ExcludeLabelRegularExpression", args[i].c_str()); + } + + if(this->CheckArgument(arg, "-E", "--exclude-regex") && + i < args.size() - 1) + { + i++; + this->GetHandler("test")-> + SetPersistentOption("ExcludeRegularExpression", args[i].c_str()); + this->GetHandler("memcheck")-> + SetPersistentOption("ExcludeRegularExpression", args[i].c_str()); + } +} + +//---------------------------------------------------------------------- +// handle the -S -SR and -SP arguments +void cmCTest::HandleScriptArguments(size_t &i, + std::vector &args, + bool &SRArgumentSpecified) +{ + std::string arg = args[i]; + if(this->CheckArgument(arg, "-SP", "--script-new-process") && + i < args.size() - 1 ) + { + this->RunConfigurationScript = true; + i++; + cmCTestScriptHandler* ch + = static_cast(this->GetHandler("script")); + // -SR is an internal argument, -SP should be ignored when it is passed + if (!SRArgumentSpecified) + { + ch->AddConfigurationScript(args[i].c_str(),false); + } + } + + if(this->CheckArgument(arg, "-SR", "--script-run") && + i < args.size() - 1 ) + { + SRArgumentSpecified = true; + this->RunConfigurationScript = true; + i++; + cmCTestScriptHandler* ch + = static_cast(this->GetHandler("script")); + ch->AddConfigurationScript(args[i].c_str(),true); + } + + if(this->CheckArgument(arg, "-S", "--script") && i < args.size() - 1 ) + { + this->RunConfigurationScript = true; + i++; + cmCTestScriptHandler* ch + = static_cast(this->GetHandler("script")); + // -SR is an internal argument, -S should be ignored when it is passed + if (!SRArgumentSpecified) + { + ch->AddConfigurationScript(args[i].c_str(),true); + } + } +} + +//---------------------------------------------------------------------- +// the main entry point of ctest, called from main +int cmCTest::Run(std::vector &args, std::string* output) +{ + this->FindRunningCMake(); + const char* ctestExec = "ctest"; + bool cmakeAndTest = false; + bool performSomeTest = true; + bool SRArgumentSpecified = false; + + // copy the command line + for(size_t i=0; i < args.size(); ++i) + { + this->InitialCommandLineArguments.push_back(args[i]); + } + + // process the command line arguments + for(size_t i=1; i < args.size(); ++i) + { + // handle the simple commandline arguments + this->HandleCommandLineArguments(i,args); + + // handle the script arguments -S -SR -SP + this->HandleScriptArguments(i,args,SRArgumentSpecified); + + // handle a request for a dashboard + std::string arg = args[i]; + if(this->CheckArgument(arg, "-D", "--dashboard") && i < args.size() - 1 ) + { + this->ProduceXML = true; + i++; + std::string targ = args[i]; + // AddTestsForDashboard parses the dashborad type and converts it + // into the separate stages + if (!this->AddTestsForDashboardType(targ)) + { + performSomeTest = false; + } + } + + if(this->CheckArgument(arg, "-T", "--test-action") && + (i < args.size() -1) ) + { + this->ProduceXML = true; + i++; + if ( !this->SetTest(args[i].c_str(), false) ) + { + performSomeTest = false; + cmCTestLog(this, ERROR_MESSAGE, + "CTest -T called with incorrect option: " + << args[i].c_str() << std::endl); + cmCTestLog(this, ERROR_MESSAGE, "Available options are:" << std::endl + << " " << ctestExec << " -T all" << std::endl + << " " << ctestExec << " -T start" << std::endl + << " " << ctestExec << " -T update" << std::endl + << " " << ctestExec << " -T configure" << std::endl + << " " << ctestExec << " -T build" << std::endl + << " " << ctestExec << " -T test" << std::endl + << " " << ctestExec << " -T coverage" << std::endl + << " " << ctestExec << " -T memcheck" << std::endl + << " " << ctestExec << " -T notes" << std::endl + << " " << ctestExec << " -T submit" << std::endl); + } + } + + // what type of test model + if(this->CheckArgument(arg, "-M", "--test-model") && + (i < args.size() -1) ) + { + i++; + std::string const& str = args[i]; + if ( cmSystemTools::LowerCase(str) == "nightly" ) + { + this->SetTestModel(cmCTest::NIGHTLY); + } + else if ( cmSystemTools::LowerCase(str) == "continuous" ) + { + this->SetTestModel(cmCTest::CONTINUOUS); + } + else if ( cmSystemTools::LowerCase(str) == "experimental" ) + { + this->SetTestModel(cmCTest::EXPERIMENTAL); + } + else + { + performSomeTest = false; + cmCTestLog(this, ERROR_MESSAGE, + "CTest -M called with incorrect option: " << str.c_str() + << std::endl); + cmCTestLog(this, ERROR_MESSAGE, "Available options are:" << std::endl + << " " << ctestExec << " -M Continuous" << std::endl + << " " << ctestExec << " -M Experimental" << std::endl + << " " << ctestExec << " -M Nightly" << std::endl); + } + } + + if(this->CheckArgument(arg, "--extra-submit") && i < args.size() - 1) + { + this->ProduceXML = true; + this->SetTest("Submit"); + i++; + if ( !this->SubmitExtraFiles(args[i].c_str()) ) + { + return 0; + } + } + + // --build-and-test options + if(this->CheckArgument(arg, "--build-and-test") && i < args.size() - 1) + { + cmakeAndTest = true; + } + + if(this->CheckArgument(arg, "--schedule-random")) + { + this->ScheduleType = "Random"; + } + + // pass the argument to all the handlers as well, but i may no longer be + // set to what it was originally so I'm not sure this is working as + // intended + cmCTest::t_TestingHandlers::iterator it; + for ( it = this->TestingHandlers.begin(); + it != this->TestingHandlers.end(); + ++ it ) + { + if ( !it->second->ProcessCommandLineArguments(arg, i, args) ) + { + cmCTestLog(this, ERROR_MESSAGE, + "Problem parsing command line arguments within a handler"); + return 0; + } + } + } // the close of the for argument loop + + + // now what sould cmake do? if --build-and-test was specified then + // we run the build and test handler and return + if(cmakeAndTest) + { + this->Verbose = true; + cmCTestBuildAndTestHandler* handler = + static_cast(this->GetHandler("buildtest")); + int retv = handler->ProcessHandler(); + *output = handler->GetOutput(); +#ifdef CMAKE_BUILD_WITH_CMAKE + cmDynamicLoader::FlushCache(); +#endif + if(retv != 0) + { + cmCTestLog(this, DEBUG, "build and test failing returing: " << retv + << std::endl); + } + return retv; + } + + // if some tests must be run + if(performSomeTest) + { + int res; + // call process directory + if (this->RunConfigurationScript) + { + if ( this->ExtraVerbose ) + { + cmCTestLog(this, OUTPUT, "* Extra verbosity turned on" << std::endl); + } + cmCTest::t_TestingHandlers::iterator it; + for ( it = this->TestingHandlers.begin(); + it != this->TestingHandlers.end(); + ++ it ) + { + it->second->SetVerbose(this->ExtraVerbose); + it->second->SetSubmitIndex(this->SubmitIndex); + } + this->GetHandler("script")->SetVerbose(this->Verbose); + res = this->GetHandler("script")->ProcessHandler(); + if(res != 0) + { + cmCTestLog(this, DEBUG, "running script failing returning: " << res + << std::endl); + } + + } + else + { + // What is this? -V seems to be the same as -VV, + // and Verbose is always on in this case + this->ExtraVerbose = this->Verbose; + this->Verbose = true; + cmCTest::t_TestingHandlers::iterator it; + for ( it = this->TestingHandlers.begin(); + it != this->TestingHandlers.end(); + ++ it ) + { + it->second->SetVerbose(this->Verbose); + it->second->SetSubmitIndex(this->SubmitIndex); + } + std::string cwd = cmSystemTools::GetCurrentWorkingDirectory(); + if(!this->Initialize(cwd.c_str(), 0)) + { + res = 12; + cmCTestLog(this, ERROR_MESSAGE, "Problem initializing the dashboard." + << std::endl); + } + else + { + res = this->ProcessTests(); + } + this->Finalize(); + } + if(res != 0) + { + cmCTestLog(this, DEBUG, "Running a test(s) failed returning : " << res + << std::endl); + } + return res; + } + + return 1; +} + +//---------------------------------------------------------------------- +void cmCTest::FindRunningCMake() +{ + // Find our own executable. + this->CTestSelf = cmSystemTools::GetExecutableDirectory(); + this->CTestSelf += "/ctest"; + this->CTestSelf += cmSystemTools::GetExecutableExtension(); + if(!cmSystemTools::FileExists(this->CTestSelf.c_str())) + { + cmSystemTools::Error("CTest executable cannot be found at ", + this->CTestSelf.c_str()); + } + + this->CMakeSelf = cmSystemTools::GetExecutableDirectory(); + this->CMakeSelf += "/cmake"; + this->CMakeSelf += cmSystemTools::GetExecutableExtension(); + if(!cmSystemTools::FileExists(this->CMakeSelf.c_str())) + { + cmSystemTools::Error("CMake executable cannot be found at ", + this->CMakeSelf.c_str()); + } +} + +//---------------------------------------------------------------------- +void cmCTest::SetNotesFiles(const char* notes) +{ + if ( !notes ) + { + return; + } + this->NotesFiles = notes; +} + +//---------------------------------------------------------------------- +void cmCTest::SetStopTime(std::string time) +{ + this->StopTime = time; + this->DetermineNextDayStop(); +} + +//---------------------------------------------------------------------- +int cmCTest::ReadCustomConfigurationFileTree(const char* dir, cmMakefile* mf) +{ + bool found = false; + VectorOfStrings dirs; + VectorOfStrings ndirs; + cmCTestLog(this, DEBUG, "* Read custom CTest configuration directory: " + << dir << std::endl); + + std::string fname = dir; + fname += "/CTestCustom.cmake"; + cmCTestLog(this, DEBUG, "* Check for file: " + << fname.c_str() << std::endl); + if ( cmSystemTools::FileExists(fname.c_str()) ) + { + cmCTestLog(this, DEBUG, "* Read custom CTest configuration file: " + << fname.c_str() << std::endl); + bool erroroc = cmSystemTools::GetErrorOccuredFlag(); + cmSystemTools::ResetErrorOccuredFlag(); + + if ( !mf->ReadListFile(0, fname.c_str()) || + cmSystemTools::GetErrorOccuredFlag() ) + { + cmCTestLog(this, ERROR_MESSAGE, + "Problem reading custom configuration: " + << fname.c_str() << std::endl); + } + found = true; + if ( erroroc ) + { + cmSystemTools::SetErrorOccured(); + } + } + + std::string rexpr = dir; + rexpr += "/CTestCustom.ctest"; + cmCTestLog(this, DEBUG, "* Check for file: " + << rexpr.c_str() << std::endl); + if ( !found && cmSystemTools::FileExists(rexpr.c_str()) ) + { + cmsys::Glob gl; + gl.RecurseOn(); + gl.FindFiles(rexpr); + std::vector& files = gl.GetFiles(); + std::vector::iterator fileIt; + for ( fileIt = files.begin(); fileIt != files.end(); + ++ fileIt ) + { + cmCTestLog(this, DEBUG, "* Read custom CTest configuration file: " + << fileIt->c_str() << std::endl); + if ( !mf->ReadListFile(0, fileIt->c_str()) || + cmSystemTools::GetErrorOccuredFlag() ) + { + cmCTestLog(this, ERROR_MESSAGE, + "Problem reading custom configuration: " + << fileIt->c_str() << std::endl); + } + } + found = true; + } + + if ( found ) + { + cmCTest::t_TestingHandlers::iterator it; + for ( it = this->TestingHandlers.begin(); + it != this->TestingHandlers.end(); ++ it ) + { + cmCTestLog(this, DEBUG, + "* Read custom CTest configuration vectors for handler: " + << it->first.c_str() << " (" << it->second << ")" << std::endl); + it->second->PopulateCustomVectors(mf); + } + } + + return 1; +} + +//---------------------------------------------------------------------- +void cmCTest::PopulateCustomVector(cmMakefile* mf, const char* def, + VectorOfStrings& vec) +{ + if ( !def) + { + return; + } + const char* dval = mf->GetDefinition(def); + if ( !dval ) + { + return; + } + cmCTestLog(this, DEBUG, "PopulateCustomVector: " << def << std::endl); + std::vector slist; + cmSystemTools::ExpandListArgument(dval, slist); + std::vector::iterator it; + + vec.clear(); + + for ( it = slist.begin(); it != slist.end(); ++it ) + { + cmCTestLog(this, DEBUG, " -- " << it->c_str() << std::endl); + vec.push_back(it->c_str()); + } +} + +//---------------------------------------------------------------------- +void cmCTest::PopulateCustomInteger(cmMakefile* mf, const char* def, int& val) +{ + if ( !def) + { + return; + } + const char* dval = mf->GetDefinition(def); + if ( !dval ) + { + return; + } + val = atoi(dval); +} + +//---------------------------------------------------------------------- +std::string cmCTest::GetShortPathToFile(const char* cfname) +{ + const std::string& sourceDir + = cmSystemTools::CollapseFullPath( + this->GetCTestConfiguration("SourceDirectory").c_str()); + const std::string& buildDir + = cmSystemTools::CollapseFullPath( + this->GetCTestConfiguration("BuildDirectory").c_str()); + std::string fname = cmSystemTools::CollapseFullPath(cfname); + + // Find relative paths to both directories + std::string srcRelpath + = cmSystemTools::RelativePath(sourceDir.c_str(), fname.c_str()); + std::string bldRelpath + = cmSystemTools::RelativePath(buildDir.c_str(), fname.c_str()); + + // If any contains "." it is not parent directory + bool inSrc = srcRelpath.find("..") == srcRelpath.npos; + bool inBld = bldRelpath.find("..") == bldRelpath.npos; + // TODO: Handle files with .. in their name + + std::string* res = 0; + + if ( inSrc && inBld ) + { + // If both have relative path with no dots, pick the shorter one + if ( srcRelpath.size() < bldRelpath.size() ) + { + res = &srcRelpath; + } + else + { + res = &bldRelpath; + } + } + else if ( inSrc ) + { + res = &srcRelpath; + } + else if ( inBld ) + { + res = &bldRelpath; + } + + std::string path; + + if ( !res ) + { + path = fname; + } + else + { + cmSystemTools::ConvertToUnixSlashes(*res); + + path = "./" + *res; + if ( path[path.size()-1] == '/' ) + { + path = path.substr(0, path.size()-1); + } + } + + cmsys::SystemTools::ReplaceString(path, ":", "_"); + cmsys::SystemTools::ReplaceString(path, " ", "_"); + return path; +} + +//---------------------------------------------------------------------- +std::string cmCTest::GetCTestConfiguration(const char *name) +{ + if ( this->CTestConfigurationOverwrites.find(name) != + this->CTestConfigurationOverwrites.end() ) + { + return this->CTestConfigurationOverwrites[name]; + } + return this->CTestConfiguration[name]; +} + +//---------------------------------------------------------------------- +void cmCTest::EmptyCTestConfiguration() +{ + this->CTestConfiguration.clear(); +} + +//---------------------------------------------------------------------- +void cmCTest::DetermineNextDayStop() +{ + struct tm* lctime; + time_t current_time = time(0); + lctime = gmtime(¤t_time); + int gm_hour = lctime->tm_hour; + time_t gm_time = mktime(lctime); + lctime = localtime(¤t_time); + int local_hour = lctime->tm_hour; + + int tzone_offset = local_hour - gm_hour; + if(gm_time > current_time && gm_hour < local_hour) + { + // this means gm_time is on the next day + tzone_offset -= 24; + } + else if(gm_time < current_time && gm_hour > local_hour) + { + // this means gm_time is on the previous day + tzone_offset += 24; + } + + tzone_offset *= 100; + char buf[1024]; + sprintf(buf, "%d%02d%02d %s %+05i", + lctime->tm_year + 1900, + lctime->tm_mon + 1, + lctime->tm_mday, + this->StopTime.c_str(), + tzone_offset); + + time_t stop_time = curl_getdate(buf, ¤t_time); + + if(stop_time < current_time) + { + this->NextDayStopTime = true; + } +} + +//---------------------------------------------------------------------- +void cmCTest::SetCTestConfiguration(const char *name, const char* value) +{ + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, "SetCTestConfiguration:" + << name << ":" << (value ? value : "(null)") << "\n"); + + if ( !name ) + { + return; + } + if ( !value ) + { + this->CTestConfiguration.erase(name); + return; + } + this->CTestConfiguration[name] = value; +} + + +//---------------------------------------------------------------------- +std::string cmCTest::GetCurrentTag() +{ + return this->CurrentTag; +} + +//---------------------------------------------------------------------- +std::string cmCTest::GetBinaryDir() +{ + return this->BinaryDir; +} + +//---------------------------------------------------------------------- +std::string const& cmCTest::GetConfigType() +{ + return this->ConfigType; +} + +//---------------------------------------------------------------------- +bool cmCTest::GetShowOnly() +{ + return this->ShowOnly; +} + +//---------------------------------------------------------------------- +int cmCTest::GetMaxTestNameWidth() const +{ + return this->MaxTestNameWidth; +} + +//---------------------------------------------------------------------- +void cmCTest::SetProduceXML(bool v) +{ + this->ProduceXML = v; +} + +//---------------------------------------------------------------------- +bool cmCTest::GetProduceXML() +{ + return this->ProduceXML; +} + +//---------------------------------------------------------------------- +const char* cmCTest::GetSpecificTrack() +{ + if ( this->SpecificTrack.empty() ) + { + return 0; + } + return this->SpecificTrack.c_str(); +} + +//---------------------------------------------------------------------- +void cmCTest::SetSpecificTrack(const char* track) +{ + if ( !track ) + { + this->SpecificTrack = ""; + return; + } + this->SpecificTrack = track; +} + +//---------------------------------------------------------------------- +void cmCTest::AddSubmitFile(Part part, const char* name) +{ + this->Parts[part].SubmitFiles.push_back(name); +} + +//---------------------------------------------------------------------- +void cmCTest::AddCTestConfigurationOverwrite(const char* encstr) +{ + std::string overStr = encstr; + size_t epos = overStr.find("="); + if ( epos == overStr.npos ) + { + cmCTestLog(this, ERROR_MESSAGE, + "CTest configuration overwrite specified in the wrong format." + << std::endl + << "Valid format is: --overwrite key=value" << std::endl + << "The specified was: --overwrite " << overStr.c_str() << std::endl); + return; + } + std::string key = overStr.substr(0, epos); + std::string value = overStr.substr(epos+1, overStr.npos); + this->CTestConfigurationOverwrites[key] = value; +} + +//---------------------------------------------------------------------- +void cmCTest::SetConfigType(const char* ct) +{ + this->ConfigType = ct?ct:""; + cmSystemTools::ReplaceString(this->ConfigType, ".\\", ""); + std::string confTypeEnv + = "CMAKE_CONFIG_TYPE=" + this->ConfigType; + cmSystemTools::PutEnv(confTypeEnv.c_str()); +} + +//---------------------------------------------------------------------- +bool cmCTest::SetCTestConfigurationFromCMakeVariable(cmMakefile* mf, + const char* dconfig, const char* cmake_var) +{ + const char* ctvar; + ctvar = mf->GetDefinition(cmake_var); + if ( !ctvar ) + { + return false; + } + cmCTestLog(this, HANDLER_VERBOSE_OUTPUT, + "SetCTestConfigurationFromCMakeVariable:" + << dconfig << ":" << cmake_var << std::endl); + this->SetCTestConfiguration(dconfig, ctvar); + return true; +} + +bool cmCTest::RunCommand( + const char* command, + std::string* stdOut, + std::string* stdErr, + int *retVal, + const char* dir, + double timeout) +{ + std::vector args = cmSystemTools::ParseArguments(command); + + if(args.size() < 1) + { + return false; + } + + std::vector argv; + for(std::vector::const_iterator a = args.begin(); + a != args.end(); ++a) + { + argv.push_back(a->c_str()); + } + argv.push_back(0); + + *stdOut = ""; + *stdErr = ""; + + cmsysProcess* cp = cmsysProcess_New(); + cmsysProcess_SetCommand(cp, &*argv.begin()); + cmsysProcess_SetWorkingDirectory(cp, dir); + if(cmSystemTools::GetRunCommandHideConsole()) + { + cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1); + } + cmsysProcess_SetTimeout(cp, timeout); + cmsysProcess_Execute(cp); + + std::vector tempOutput; + std::vector tempError; + char* data; + int length; + int res; + bool done = false; + while(!done) + { + res = cmsysProcess_WaitForData(cp, &data, &length, 0); + switch ( res ) + { + case cmsysProcess_Pipe_STDOUT: + tempOutput.insert(tempOutput.end(), data, data+length); + break; + case cmsysProcess_Pipe_STDERR: + tempError.insert(tempError.end(), data, data+length); + break; + default: + done = true; + } + if ( (res == cmsysProcess_Pipe_STDOUT || + res == cmsysProcess_Pipe_STDERR) && this->ExtraVerbose ) + { + cmSystemTools::Stdout(data, length); + } + } + + cmsysProcess_WaitForExit(cp, 0); + if ( tempOutput.size() > 0 ) + { + stdOut->append(&*tempOutput.begin(), tempOutput.size()); + } + if ( tempError.size() > 0 ) + { + stdErr->append(&*tempError.begin(), tempError.size()); + } + + bool result = true; + if(cmsysProcess_GetState(cp) == cmsysProcess_State_Exited) + { + if ( retVal ) + { + *retVal = cmsysProcess_GetExitValue(cp); + } + else + { + if ( cmsysProcess_GetExitValue(cp) != 0 ) + { + result = false; + } + } + } + else if(cmsysProcess_GetState(cp) == cmsysProcess_State_Exception) + { + const char* exception_str = cmsysProcess_GetExceptionString(cp); + cmCTestLog(this, ERROR_MESSAGE, exception_str << std::endl); + stdErr->append(exception_str, strlen(exception_str)); + result = false; + } + else if(cmsysProcess_GetState(cp) == cmsysProcess_State_Error) + { + const char* error_str = cmsysProcess_GetErrorString(cp); + cmCTestLog(this, ERROR_MESSAGE, error_str << std::endl); + stdErr->append(error_str, strlen(error_str)); + result = false; + } + else if(cmsysProcess_GetState(cp) == cmsysProcess_State_Expired) + { + const char* error_str = "Process terminated due to timeout\n"; + cmCTestLog(this, ERROR_MESSAGE, error_str << std::endl); + stdErr->append(error_str, strlen(error_str)); + result = false; + } + + cmsysProcess_Delete(cp); + return result; +} + +//---------------------------------------------------------------------- +void cmCTest::SetOutputLogFileName(const char* name) +{ + if ( this->OutputLogFile) + { + delete this->OutputLogFile; + this->OutputLogFile= 0; + } + if ( name ) + { + this->OutputLogFile = new cmGeneratedFileStream(name); + } +} + +//---------------------------------------------------------------------- +static const char* cmCTestStringLogType[] = +{ + "DEBUG", + "OUTPUT", + "HANDLER_OUTPUT", + "HANDLER_VERBOSE_OUTPUT", + "WARNING", + "ERROR_MESSAGE", + 0 +}; + +//---------------------------------------------------------------------- +#ifdef cerr +# undef cerr +#endif +#ifdef cout +# undef cout +#endif + +#define cmCTestLogOutputFileLine(stream) \ + if ( this->ShowLineNumbers ) \ + { \ + (stream) << std::endl << file << ":" << line << " "; \ + } + +void cmCTest::InitStreams() +{ + // By default we write output to the process output streams. + this->StreamOut = &std::cout; + this->StreamErr = &std::cerr; +} + +void cmCTest::Log(int logType, const char* file, int line, const char* msg) +{ + if ( !msg || !*msg ) + { + return; + } + if ( this->OutputLogFile ) + { + bool display = true; + if ( logType == cmCTest::DEBUG && !this->Debug ) { display = false; } + if ( logType == cmCTest::HANDLER_VERBOSE_OUTPUT && !this->Debug && + !this->ExtraVerbose ) { display = false; } + if ( display ) + { + cmCTestLogOutputFileLine(*this->OutputLogFile); + if ( logType != this->OutputLogFileLastTag ) + { + *this->OutputLogFile << "["; + if ( logType >= OTHER || logType < 0 ) + { + *this->OutputLogFile << "OTHER"; + } + else + { + *this->OutputLogFile << cmCTestStringLogType[logType]; + } + *this->OutputLogFile << "] " << std::endl << std::flush; + } + *this->OutputLogFile << msg << std::flush; + if ( logType != this->OutputLogFileLastTag ) + { + *this->OutputLogFile << std::endl << std::flush; + this->OutputLogFileLastTag = logType; + } + } + } + if ( !this->Quiet ) + { + std::ostream& out = *this->StreamOut; + std::ostream& err = *this->StreamErr; + switch ( logType ) + { + case DEBUG: + if ( this->Debug ) + { + cmCTestLogOutputFileLine(out); + out << msg; + out.flush(); + } + break; + case OUTPUT: case HANDLER_OUTPUT: + if ( this->Debug || this->Verbose ) + { + cmCTestLogOutputFileLine(out); + out << msg; + out.flush(); + } + break; + case HANDLER_VERBOSE_OUTPUT: + if ( this->Debug || this->ExtraVerbose ) + { + cmCTestLogOutputFileLine(out); + out << msg; + out.flush(); + } + break; + case WARNING: + cmCTestLogOutputFileLine(err); + err << msg; + err.flush(); + break; + case ERROR_MESSAGE: + cmCTestLogOutputFileLine(err); + err << msg; + err.flush(); + cmSystemTools::SetErrorOccured(); + break; + default: + cmCTestLogOutputFileLine(out); + out << msg; + out.flush(); + } + } +} + +//------------------------------------------------------------------------- +double cmCTest::GetRemainingTimeAllowed() +{ + if (!this->GetHandler("script")) + { + return 1.0e7; + } + + cmCTestScriptHandler* ch + = static_cast(this->GetHandler("script")); + + return ch->GetRemainingTimeAllowed(); +} + +//---------------------------------------------------------------------- +void cmCTest::OutputTestErrors(std::vector const &process_output) +{ + std::string test_outputs("\n*** Test Failed:\n"); + if(process_output.size()) + { + test_outputs.append(&*process_output.begin(), process_output.size()); + } + cmCTestLog(this, HANDLER_OUTPUT, test_outputs << std::endl << std::flush); +} + +//---------------------------------------------------------------------- +bool cmCTest::CompressString(std::string& str) +{ + int ret; + z_stream strm; + + unsigned char* in = reinterpret_cast( + const_cast(str.c_str())); + //zlib makes the guarantee that this is the maximum output size + int outSize = static_cast( + static_cast(str.size()) * 1.001 + 13.0); + unsigned char* out = new unsigned char[outSize]; + + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + ret = deflateInit(&strm, -1); //default compression level + if (ret != Z_OK) + { + delete[] out; + return false; + } + + strm.avail_in = static_cast(str.size()); + strm.next_in = in; + strm.avail_out = outSize; + strm.next_out = out; + ret = deflate(&strm, Z_FINISH); + + if(ret == Z_STREAM_ERROR || ret != Z_STREAM_END) + { + cmCTestLog(this, ERROR_MESSAGE, "Error during gzip compression." + << std::endl); + delete[] out; + return false; + } + + (void)deflateEnd(&strm); + + // Now base64 encode the resulting binary string + unsigned char* base64EncodedBuffer + = new unsigned char[static_cast(outSize * 1.5)]; + + unsigned long rlen + = cmsysBase64_Encode(out, strm.total_out, base64EncodedBuffer, 1); + + str = ""; + str.append(reinterpret_cast(base64EncodedBuffer), rlen); + + delete [] base64EncodedBuffer; + delete [] out; + + return true; +} diff --git a/Source/cmCTest.h b/Source/cmCTest.h new file mode 100644 index 0000000..7c71b00 --- /dev/null +++ b/Source/cmCTest.h @@ -0,0 +1,584 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#ifndef cmCTest_h +#define cmCTest_h + +#include "cmStandardIncludes.h" +#include "cmListFileCache.h" +#include + +class cmake; +class cmMakefile; +class cmCTestGenericHandler; +class cmGeneratedFileStream; +class cmCTestCommand; +class cmCTestScriptHandler; +class cmCTestStartCommand; + +#define cmCTestLog(ctSelf, logType, msg) \ + do { \ + cmOStringStream cmCTestLog_msg; \ + cmCTestLog_msg << msg; \ + (ctSelf)->Log(cmCTest::logType, __FILE__, __LINE__,\ + cmCTestLog_msg.str().c_str());\ + } while ( 0 ) + +#ifdef cerr +# undef cerr +#endif +#define cerr no_cerr_use_cmCTestLog + +#ifdef cout +# undef cout +#endif +#define cout no_cout_use_cmCTestLog + +class cmCTest +{ + friend class cmCTestRunTest; + friend class cmCTestMultiProcessHandler; +public: + /** Enumerate parts of the testing and submission process. */ + enum Part + { + PartStart, + PartUpdate, + PartConfigure, + PartBuild, + PartTest, + PartCoverage, + PartMemCheck, + PartSubmit, + PartNotes, + PartExtraFiles, + PartUpload, + PartCount // Update names in constructor when adding a part + }; + + /** Representation of one part. */ + struct PartInfo + { + PartInfo(): Enabled(false) {} + + void SetName(const char* name) { this->Name = name; } + const char* GetName() const { return this->Name.c_str(); } + + void Enable() { this->Enabled = true; } + operator bool() const { return this->Enabled; } + + std::vector SubmitFiles; + private: + bool Enabled; + std::string Name; + }; +#ifdef CMAKE_BUILD_WITH_CMAKE + enum HTTPMethod { + HTTP_GET, + HTTP_POST, + HTTP_PUT + }; + + /** + * Perform an HTTP request. + */ + static int HTTPRequest(std::string url, HTTPMethod method, + std::string& response, + std::string fields = "", + std::string putFile = "", int timeout = 0); +#endif + + /** Get a testing part id from its string name. Returns PartCount + if the string does not name a valid part. */ + Part GetPartFromName(const char* name); + + typedef std::vector VectorOfStrings; + typedef std::set SetOfStrings; + + ///! Process Command line arguments + int Run(std::vector &, std::string* output = 0); + + /** + * Initialize and finalize testing + */ + bool InitializeFromCommand(cmCTestStartCommand* command); + void Finalize(); + + /** + * Process the tests. This is the main routine. The execution of the + * tests should look like this: + * + * ctest foo; + * foo.Initialize(); + * // Set some things on foo + * foo.ProcessTests(); + * foo.Finalize(); + */ + int ProcessTests(); + + /* + * A utility function that returns the nightly time + */ + struct tm* GetNightlyTime(std::string str, + bool tomorrowtag); + + /* + * Is the tomorrow tag set? + */ + bool GetTomorrowTag() { return this->TomorrowTag; }; + + /** + * Try to run tests of the project + */ + int TestDirectory(bool memcheck); + + ///! what is the configuraiton type, e.g. Debug, Release etc. + std::string const& GetConfigType(); + double GetTimeOut() { return this->TimeOut; } + void SetTimeOut(double t) { this->TimeOut = t; } + + double GetGlobalTimeout() { return this->GlobalTimeout; } + + // how many test to run at the same time + int GetParallelLevel() { return this->ParallelLevel; } + void SetParallelLevel(int); + + /** + * Check if CTest file exists + */ + bool CTestFileExists(const std::string& filename); + bool AddIfExists(Part part, const char* file); + + /** + * Set the cmake test + */ + bool SetTest(const char*, bool report = true); + + /** + * Set the cmake test mode (experimental, nightly, continuous). + */ + void SetTestModel(int mode); + int GetTestModel() { return this->TestModel; }; + + std::string GetTestModelString(); + static int GetTestModelFromString(const char* str); + static std::string CleanString(const std::string& str); + std::string GetCTestConfiguration(const char *name); + void SetCTestConfiguration(const char *name, const char* value); + void EmptyCTestConfiguration(); + + /** + * constructor and destructor + */ + cmCTest(); + ~cmCTest(); + + //! Set the notes files to be created. + void SetNotesFiles(const char* notes); + + void PopulateCustomVector(cmMakefile* mf, const char* definition, + VectorOfStrings& vec); + void PopulateCustomInteger(cmMakefile* mf, const char* def, + int& val); + + ///! Get the current time as string + std::string CurrentTime(); + + //! tar/gzip and then base 64 encode a file + std::string Base64GzipEncodeFile(std::string file); + //! base64 encode a file + std::string Base64EncodeFile(std::string file); + + /** + * Return the time remaining that the script is allowed to run in + * seconds if the user has set the variable CTEST_TIME_LIMIT. If that has + * not been set it returns 1e7 seconds + */ + double GetRemainingTimeAllowed(); + + ///! Open file in the output directory and set the stream + bool OpenOutputFile(const std::string& path, + const std::string& name, + cmGeneratedFileStream& stream, + bool compress = false); + + ///! Should we only show what we would do? + bool GetShowOnly(); + + bool ShouldUseHTTP10() { return this->UseHTTP10; } + + bool ShouldPrintLabels() { return this->PrintLabels; } + + bool ShouldCompressTestOutput(); + bool ShouldCompressMemCheckOutput(); + bool CompressString(std::string& str); + + std::string GetCDashVersion(); + + std::string GetStopTime() { return this->StopTime; } + void SetStopTime(std::string time); + + //Used for parallel ctest job scheduling + std::string GetScheduleType() { return this->ScheduleType; } + void SetScheduleType(std::string type) { this->ScheduleType = type; } + + ///! The max output width + int GetMaxTestNameWidth() const; + void SetMaxTestNameWidth(int w) { this->MaxTestNameWidth = w;} + + /** + * Run a single executable command and put the stdout and stderr + * in output. + * + * If verbose is false, no user-viewable output from the program + * being run will be generated. + * + * If timeout is specified, the command will be terminated after + * timeout expires. Timeout is specified in seconds. + * + * Argument retVal should be a pointer to the location where the + * exit code will be stored. If the retVal is not specified and + * the program exits with a code other than 0, then the this + * function will return false. + * + * If the command has spaces in the path the caller MUST call + * cmSystemTools::ConvertToRunCommandPath on the command before passing + * it into this function or it will not work. The command must be correctly + * escaped for this to with spaces. + */ + bool RunCommand(const char* command, + std::string* stdOut, std::string* stdErr, + int* retVal = 0, const char* dir = 0, double timeout = 0.0); + + //! Clean/make safe for xml the given value such that it may be used as + // one of the key fields by CDash when computing the buildid. + static std::string SafeBuildIdField(const std::string& value); + + //! Start CTest XML output file + void StartXML(std::ostream& ostr, bool append); + + //! End CTest XML output file + void EndXML(std::ostream& ostr); + + //! Run command specialized for make and configure. Returns process status + // and retVal is return value or exception. + int RunMakeCommand(const char* command, std::string* output, + int* retVal, const char* dir, int timeout, + std::ofstream& ofs); + + /* + * return the current tag + */ + std::string GetCurrentTag(); + + //! Get the path to the build tree + std::string GetBinaryDir(); + + //! Get the short path to the file. This means if the file is in binary or + //source directory, it will become /.../relative/path/to/file + std::string GetShortPathToFile(const char* fname); + + //! Get the path to CTest + const char* GetCTestExecutable() { return this->CTestSelf.c_str(); } + const char* GetCMakeExecutable() { return this->CMakeSelf.c_str(); } + + enum { + EXPERIMENTAL, + NIGHTLY, + CONTINUOUS + }; + + // provide some more detailed info on the return code for ctest + enum { + UPDATE_ERRORS = 0x01, + CONFIGURE_ERRORS = 0x02, + BUILD_ERRORS = 0x04, + TEST_ERRORS = 0x08, + MEMORY_ERRORS = 0x10, + COVERAGE_ERRORS = 0x20, + SUBMIT_ERRORS = 0x40 + }; + + ///! Are we producing XML + bool GetProduceXML(); + void SetProduceXML(bool v); + + //! Run command specialized for tests. Returns process status and retVal is + // return value or exception. If environment is non-null, it is used to set + // environment variables prior to running the test. After running the test, + // environment variables are restored to their previous values. + int RunTest(std::vector args, std::string* output, int *retVal, + std::ostream* logfile, double testTimeOut, + std::vector* environment); + + /** + * Execute handler and return its result. If the handler fails, it returns + * negative value. + */ + int ExecuteHandler(const char* handler); + + /* + * Get the handler object + */ + cmCTestGenericHandler* GetHandler(const char* handler); + cmCTestGenericHandler* GetInitializedHandler(const char* handler); + + /* + * Set the CTest variable from CMake variable + */ + bool SetCTestConfigurationFromCMakeVariable(cmMakefile* mf, + const char* dconfig, const char* cmake_var); + + //! Make string safe to be send as an URL + static std::string MakeURLSafe(const std::string&); + + /** Decode a URL to the original string. */ + static std::string DecodeURL(const std::string&); + + //! Should ctect configuration be updated. When using new style ctest + // script, this should be true. + void SetSuppressUpdatingCTestConfiguration(bool val) + { + this->SuppressUpdatingCTestConfiguration = val; + } + + //! Add overwrite to ctest configuration. + // The format is key=value + void AddCTestConfigurationOverwrite(const char* encstr); + + //! Create XML file that contains all the notes specified + int GenerateNotesFile(const std::vector &files); + + //! Submit extra files to the server + bool SubmitExtraFiles(const char* files); + bool SubmitExtraFiles(const std::vector &files); + + //! Set the output log file name + void SetOutputLogFileName(const char* name); + + //! Set the visual studio or Xcode config type + void SetConfigType(const char* ct); + + //! Various log types + enum { + DEBUG = 0, + OUTPUT, + HANDLER_OUTPUT, + HANDLER_VERBOSE_OUTPUT, + WARNING, + ERROR_MESSAGE, + OTHER + }; + + //! Add log to the output + void Log(int logType, const char* file, int line, const char* msg); + + //! Get the version of dart server + int GetDartVersion() { return this->DartVersion; } + + //! Add file to be submitted + void AddSubmitFile(Part part, const char* name); + std::vector const& GetSubmitFiles(Part part) + { return this->Parts[part].SubmitFiles; } + void ClearSubmitFiles(Part part) { this->Parts[part].SubmitFiles.clear(); } + + //! Read the custom configuration files and apply them to the current ctest + int ReadCustomConfigurationFileTree(const char* dir, cmMakefile* mf); + + std::vector &GetInitialCommandLineArguments() + { return this->InitialCommandLineArguments; }; + + //! Set the track to submit to + void SetSpecificTrack(const char* track); + const char* GetSpecificTrack(); + + void SetFailover(bool failover) { this->Failover = failover; } + bool GetFailover() { return this->Failover; } + + void SetBatchJobs(bool batch = true) { this->BatchJobs = batch; } + bool GetBatchJobs() { return this->BatchJobs; } + + bool GetVerbose() { return this->Verbose;} + bool GetExtraVerbose() { return this->ExtraVerbose;} + + /** Direct process output to given streams. */ + void SetStreams(std::ostream* out, std::ostream* err) + { this->StreamOut = out; this->StreamErr = err; } + void AddSiteProperties(std::ostream& ); + bool GetLabelSummary() { return this->LabelSummary;} + + std::string GetCostDataFile(); +private: + std::string ConfigType; + std::string ScheduleType; + std::string StopTime; + bool NextDayStopTime; + bool Verbose; + bool ExtraVerbose; + bool ProduceXML; + bool LabelSummary; + bool UseHTTP10; + bool PrintLabels; + bool Failover; + bool BatchJobs; + + bool ForceNewCTestProcess; + + bool RunConfigurationScript; + + //flag for lazy getter (optimization) + bool ComputedCompressTestOutput; + bool ComputedCompressMemCheckOutput; + + int GenerateNotesFile(const char* files); + + void DetermineNextDayStop(); + + // these are helper classes + typedef std::map t_TestingHandlers; + t_TestingHandlers TestingHandlers; + + bool ShowOnly; + + //! Map of configuration properties + typedef std::map CTestConfigurationMap; + + std::string CTestConfigFile; + // TODO: The ctest configuration should be a hierarchy of + // configuration option sources: command-line, script, ini file. + // Then the ini file can get re-loaded whenever it changes without + // affecting any higher-precedence settings. + CTestConfigurationMap CTestConfiguration; + CTestConfigurationMap CTestConfigurationOverwrites; + PartInfo Parts[PartCount]; + typedef std::map PartMapType; + PartMapType PartMap; + + std::string CurrentTag; + bool TomorrowTag; + + int TestModel; + std::string SpecificTrack; + + double TimeOut; + + double GlobalTimeout; + + int LastStopTimeout; + + int MaxTestNameWidth; + + int ParallelLevel; + + int CompatibilityMode; + + // information for the --build-and-test options + std::string CMakeSelf; + std::string CTestSelf; + std::string BinaryDir; + + std::string NotesFiles; + + + bool InteractiveDebugMode; + + bool ShortDateFormat; + + bool CompressXMLFiles; + bool CompressTestOutput; + bool CompressMemCheckOutput; + + void InitStreams(); + std::ostream* StreamOut; + std::ostream* StreamErr; + + void BlockTestErrorDiagnostics(); + + /** + * Initialize a dashboard run in the given build tree. The "command" + * argument is non-NULL when running from a command-driven (ctest_start) + * dashboard script, and NULL when running from the CTest command + * line. Note that a declarative dashboard script does not actually + * call this method because it sets CTEST_COMMAND to drive a build + * through the ctest command line. + */ + int Initialize(const char* binary_dir, cmCTestStartCommand* command); + + //! parse the option after -D and convert it into the appropriate steps + bool AddTestsForDashboardType(std::string &targ); + + //! parse and process most common command line arguments + void HandleCommandLineArguments(size_t &i, + std::vector &args); + + //! hande the -S -SP and -SR arguments + void HandleScriptArguments(size_t &i, + std::vector &args, + bool &SRArgumentSpecified); + + //! Reread the configuration file + bool UpdateCTestConfiguration(); + + //! Create note from files. + int GenerateCTestNotesOutput(std::ostream& os, + const VectorOfStrings& files); + + ///! Find the running cmake + void FindRunningCMake(); + + //! Check if the argument is the one specified + bool CheckArgument(const std::string& arg, const char* varg1, + const char* varg2 = 0); + + //! Output errors from a test + void OutputTestErrors(std::vector const &process_output); + + bool SuppressUpdatingCTestConfiguration; + + bool Debug; + bool ShowLineNumbers; + bool Quiet; + + int DartVersion; + + std::vector InitialCommandLineArguments; + + int SubmitIndex; + + cmGeneratedFileStream* OutputLogFile; + int OutputLogFileLastTag; + + bool OutputTestOutputOnTestFailure; +}; + +class cmCTestLogWrite +{ +public: + cmCTestLogWrite(const char* data, size_t length) + : Data(data), Length(length) {} + + const char* Data; + size_t Length; +}; + +inline std::ostream& operator<< (std::ostream& os, const cmCTestLogWrite& c) +{ + if (!c.Length) + { + return os; + } + os.write(c.Data, c.Length); + os.flush(); + return os; +} + +#endif diff --git a/Source/cmCacheManager.cxx b/Source/cmCacheManager.cxx new file mode 100644 index 0000000..47a0e85 --- /dev/null +++ b/Source/cmCacheManager.cxx @@ -0,0 +1,1003 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCacheManager.h" +#include "cmSystemTools.h" +#include "cmCacheManager.h" +#include "cmGeneratedFileStream.h" +#include "cmMakefile.h" +#include "cmake.h" +#include "cmVersion.h" + +#include +#include + +#include + +const char* cmCacheManagerTypes[] = +{ "BOOL", + "PATH", + "FILEPATH", + "STRING", + "INTERNAL", + "STATIC", + "UNINITIALIZED", + 0 +}; + +cmCacheManager::cmCacheManager(cmake* cm) +{ + this->CacheMajorVersion = 0; + this->CacheMinorVersion = 0; + this->CMakeInstance = cm; +} + +const char* cmCacheManager::TypeToString(cmCacheManager::CacheEntryType type) +{ + if ( type > 6 ) + { + return cmCacheManagerTypes[6]; + } + return cmCacheManagerTypes[type]; +} + +cmCacheManager::CacheEntryType cmCacheManager::StringToType(const char* s) +{ + int i = 0; + while(cmCacheManagerTypes[i]) + { + if(strcmp(s, cmCacheManagerTypes[i]) == 0) + { + return static_cast(i); + } + ++i; + } + return STRING; +} + +bool cmCacheManager::IsType(const char* s) +{ + for(int i=0; cmCacheManagerTypes[i]; ++i) + { + if(strcmp(s, cmCacheManagerTypes[i]) == 0) + { + return true; + } + } + return false; +} + +bool cmCacheManager::LoadCache(cmMakefile* mf) +{ + return this->LoadCache(mf->GetHomeOutputDirectory()); +} + + +bool cmCacheManager::LoadCache(const char* path) +{ + return this->LoadCache(path,true); +} + +bool cmCacheManager::LoadCache(const char* path, + bool internal) +{ + std::set emptySet; + return this->LoadCache(path, internal, emptySet, emptySet); +} + +static bool ParseEntryWithoutType(const char* entry, + std::string& var, + std::string& value) +{ + // input line is: key=value + static cmsys::RegularExpression reg( + "^([^=]*)=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$"); + // input line is: "key"=value + static cmsys::RegularExpression regQuoted( + "^\"([^\"]*)\"=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$"); + bool flag = false; + if(regQuoted.find(entry)) + { + var = regQuoted.match(1); + value = regQuoted.match(2); + flag = true; + } + else if (reg.find(entry)) + { + var = reg.match(1); + value = reg.match(2); + flag = true; + } + + // if value is enclosed in single quotes ('foo') then remove them + // it is used to enclose trailing space or tab + if (flag && + value.size() >= 2 && + value[0] == '\'' && + value[value.size() - 1] == '\'') + { + value = value.substr(1, + value.size() - 2); + } + + return flag; +} + +bool cmCacheManager::ParseEntry(const char* entry, + std::string& var, + std::string& value, + CacheEntryType& type) +{ + // input line is: key:type=value + static cmsys::RegularExpression reg( + "^([^:]*):([^=]*)=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$"); + // input line is: "key":type=value + static cmsys::RegularExpression regQuoted( + "^\"([^\"]*)\":([^=]*)=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$"); + bool flag = false; + if(regQuoted.find(entry)) + { + var = regQuoted.match(1); + type = cmCacheManager::StringToType(regQuoted.match(2).c_str()); + value = regQuoted.match(3); + flag = true; + } + else if (reg.find(entry)) + { + var = reg.match(1); + type = cmCacheManager::StringToType(reg.match(2).c_str()); + value = reg.match(3); + flag = true; + } + + // if value is enclosed in single quotes ('foo') then remove them + // it is used to enclose trailing space or tab + if (flag && + value.size() >= 2 && + value[0] == '\'' && + value[value.size() - 1] == '\'') + { + value = value.substr(1, + value.size() - 2); + } + + if (!flag) + { + return ParseEntryWithoutType(entry, var, value); + } + + return flag; +} + +void cmCacheManager::CleanCMakeFiles(const char* path) +{ + std::string glob = path; + glob += cmake::GetCMakeFilesDirectory(); + glob += "/*.cmake"; + cmsys::Glob globIt; + globIt.FindFiles(glob); + std::vector files = globIt.GetFiles(); + for(std::vector::iterator i = files.begin(); + i != files.end(); ++i) + { + cmSystemTools::RemoveFile(i->c_str()); + } +} + +bool cmCacheManager::LoadCache(const char* path, + bool internal, + std::set& excludes, + std::set& includes) +{ + std::string cacheFile = path; + cacheFile += "/CMakeCache.txt"; + // clear the old cache, if we are reading in internal values + if ( internal ) + { + this->Cache.clear(); + } + if(!cmSystemTools::FileExists(cacheFile.c_str())) + { + this->CleanCMakeFiles(path); + return false; + } + + std::ifstream fin(cacheFile.c_str()); + if(!fin) + { + return false; + } + const char *realbuffer; + std::string buffer; + std::string entryKey; + while(fin) + { + // Format is key:type=value + std::string helpString; + CacheEntry e; + e.Properties.SetCMakeInstance(this->CMakeInstance); + cmSystemTools::GetLineFromStream(fin, buffer); + realbuffer = buffer.c_str(); + while(*realbuffer != '0' && + (*realbuffer == ' ' || + *realbuffer == '\t' || + *realbuffer == '\r' || + *realbuffer == '\n')) + { + realbuffer++; + } + // skip blank lines and comment lines + if(realbuffer[0] == '#' || realbuffer[0] == 0) + { + continue; + } + while(realbuffer[0] == '/' && realbuffer[1] == '/') + { + if ((realbuffer[2] == '\\') && (realbuffer[3]=='n')) + { + helpString += "\n"; + helpString += &realbuffer[4]; + } + else + { + helpString += &realbuffer[2]; + } + cmSystemTools::GetLineFromStream(fin, buffer); + realbuffer = buffer.c_str(); + if(!fin) + { + continue; + } + } + e.SetProperty("HELPSTRING", helpString.c_str()); + if(cmCacheManager::ParseEntry(realbuffer, entryKey, e.Value, e.Type)) + { + if ( excludes.find(entryKey) == excludes.end() ) + { + // Load internal values if internal is set. + // If the entry is not internal to the cache being loaded + // or if it is in the list of internal entries to be + // imported, load it. + if ( internal || (e.Type != INTERNAL) || + (includes.find(entryKey) != includes.end()) ) + { + // If we are loading the cache from another project, + // make all loaded entries internal so that it is + // not visible in the gui + if (!internal) + { + e.Type = INTERNAL; + helpString = "DO NOT EDIT, "; + helpString += entryKey; + helpString += " loaded from external file. " + "To change this value edit this file: "; + helpString += path; + helpString += "/CMakeCache.txt" ; + e.SetProperty("HELPSTRING", helpString.c_str()); + } + if(!this->ReadPropertyEntry(entryKey, e)) + { + e.Initialized = true; + this->Cache[entryKey] = e; + } + } + } + } + else + { + cmSystemTools::Error("Parse error in cache file ", cacheFile.c_str(), + ". Offending entry: ", realbuffer); + } + } + this->CacheMajorVersion = 0; + this->CacheMinorVersion = 0; + if(const char* cmajor = this->GetCacheValue("CMAKE_CACHE_MAJOR_VERSION")) + { + unsigned int v=0; + if(sscanf(cmajor, "%u", &v) == 1) + { + this->CacheMajorVersion = v; + } + if(const char* cminor = this->GetCacheValue("CMAKE_CACHE_MINOR_VERSION")) + { + if(sscanf(cminor, "%u", &v) == 1) + { + this->CacheMinorVersion = v; + } + } + } + else + { + // CMake version not found in the list file. + // Set as version 0.0 + this->AddCacheEntry("CMAKE_CACHE_MINOR_VERSION", "0", + "Minor version of cmake used to create the " + "current loaded cache", cmCacheManager::INTERNAL); + this->AddCacheEntry("CMAKE_CACHE_MAJOR_VERSION", "0", + "Major version of cmake used to create the " + "current loaded cache", cmCacheManager::INTERNAL); + + } + // check to make sure the cache directory has not + // been moved + if ( internal && this->GetCacheValue("CMAKE_CACHEFILE_DIR") ) + { + std::string currentcwd = path; + std::string oldcwd = this->GetCacheValue("CMAKE_CACHEFILE_DIR"); + cmSystemTools::ConvertToUnixSlashes(currentcwd); + currentcwd += "/CMakeCache.txt"; + oldcwd += "/CMakeCache.txt"; + if(!cmSystemTools::SameFile(oldcwd.c_str(), currentcwd.c_str())) + { + std::string message = + std::string("The current CMakeCache.txt directory ") + + currentcwd + std::string(" is different than the directory ") + + std::string(this->GetCacheValue("CMAKE_CACHEFILE_DIR")) + + std::string(" where CMakeCache.txt was created. This may result " + "in binaries being created in the wrong place. If you " + "are not sure, reedit the CMakeCache.txt"); + cmSystemTools::Error(message.c_str()); + } + } + return true; +} + +//---------------------------------------------------------------------------- +const char* cmCacheManager::PersistentProperties[] = +{ + "ADVANCED", + "MODIFIED", + "STRINGS", + 0 +}; + +//---------------------------------------------------------------------------- +bool cmCacheManager::ReadPropertyEntry(std::string const& entryKey, + CacheEntry& e) +{ + // All property entries are internal. + if(e.Type != cmCacheManager::INTERNAL) + { + return false; + } + + const char* end = entryKey.c_str() + entryKey.size(); + for(const char** p = this->PersistentProperties; *p; ++p) + { + std::string::size_type plen = strlen(*p) + 1; + if(entryKey.size() > plen && *(end-plen) == '-' && + strcmp(end-plen+1, *p) == 0) + { + std::string key = entryKey.substr(0, entryKey.size() - plen); + cmCacheManager::CacheIterator it = this->GetCacheIterator(key.c_str()); + if(it.IsAtEnd()) + { + // Create an entry and store the property. + CacheEntry& ne = this->Cache[key]; + ne.Properties.SetCMakeInstance(this->CMakeInstance); + ne.Type = cmCacheManager::UNINITIALIZED; + ne.SetProperty(*p, e.Value.c_str()); + } + else + { + // Store this property on its entry. + it.SetProperty(*p, e.Value.c_str()); + } + return true; + } + } + return false; +} + +//---------------------------------------------------------------------------- +void cmCacheManager::WritePropertyEntries(std::ostream& os, + CacheIterator const& i) +{ + for(const char** p = this->PersistentProperties; *p; ++p) + { + if(const char* value = i.GetProperty(*p)) + { + std::string helpstring = *p; + helpstring += " property for variable: "; + helpstring += i.GetName(); + cmCacheManager::OutputHelpString(os, helpstring); + + std::string key = i.GetName(); + key += "-"; + key += *p; + this->OutputKey(os, key); + os << ":INTERNAL="; + this->OutputValue(os, value); + os << "\n"; + } + } +} + +bool cmCacheManager::SaveCache(cmMakefile* mf) +{ + return this->SaveCache(mf->GetHomeOutputDirectory()); +} + + +bool cmCacheManager::SaveCache(const char* path) +{ + std::string cacheFile = path; + cacheFile += "/CMakeCache.txt"; + cmGeneratedFileStream fout(cacheFile.c_str()); + fout.SetCopyIfDifferent(true); + if(!fout) + { + cmSystemTools::Error("Unable to open cache file for save. ", + cacheFile.c_str()); + cmSystemTools::ReportLastSystemError(""); + return false; + } + // before writing the cache, update the version numbers + // to the + char temp[1024]; + sprintf(temp, "%d", cmVersion::GetMinorVersion()); + this->AddCacheEntry("CMAKE_CACHE_MINOR_VERSION", temp, + "Minor version of cmake used to create the " + "current loaded cache", cmCacheManager::INTERNAL); + sprintf(temp, "%d", cmVersion::GetMajorVersion()); + this->AddCacheEntry("CMAKE_CACHE_MAJOR_VERSION", temp, + "Major version of cmake used to create the " + "current loaded cache", cmCacheManager::INTERNAL); + sprintf(temp, "%d", cmVersion::GetPatchVersion()); + this->AddCacheEntry("CMAKE_CACHE_PATCH_VERSION", temp, + "Patch version of cmake used to create the " + "current loaded cache", cmCacheManager::INTERNAL); + + // Let us store the current working directory so that if somebody + // Copies it, he will not be surprised + std::string currentcwd = path; + if ( currentcwd[0] >= 'A' && currentcwd[0] <= 'Z' && + currentcwd[1] == ':' ) + { + // Cast added to avoid compiler warning. Cast is ok because + // value is guaranteed to fit in char by the above if... + currentcwd[0] = static_cast(currentcwd[0] - 'A' + 'a'); + } + cmSystemTools::ConvertToUnixSlashes(currentcwd); + this->AddCacheEntry("CMAKE_CACHEFILE_DIR", currentcwd.c_str(), + "This is the directory where this CMakeCache.txt" + " was created", cmCacheManager::INTERNAL); + + fout << "# This is the CMakeCache file.\n" + << "# For build in directory: " << currentcwd << "\n"; + cmCacheManager::CacheEntry* cmakeCacheEntry + = this->GetCacheEntry("CMAKE_COMMAND"); + if ( cmakeCacheEntry ) + { + fout << "# It was generated by CMake: " << + cmakeCacheEntry->Value << std::endl; + } + + fout << "# You can edit this file to change values found and used by cmake." + << std::endl + << "# If you do not want to change any of the values, simply exit the " + "editor." << std::endl + << "# If you do want to change a value, simply edit, save, and exit " + "the editor." << std::endl + << "# The syntax for the file is as follows:\n" + << "# KEY:TYPE=VALUE\n" + << "# KEY is the name of a variable in the cache.\n" + << "# TYPE is a hint to GUI's for the type of VALUE, DO NOT EDIT " + "TYPE!." << std::endl + << "# VALUE is the current value for the KEY.\n\n"; + + fout << "########################\n"; + fout << "# EXTERNAL cache entries\n"; + fout << "########################\n"; + fout << "\n"; + + for( std::map::const_iterator i = + this->Cache.begin(); i != this->Cache.end(); ++i) + { + const CacheEntry& ce = (*i).second; + CacheEntryType t = ce.Type; + if(!ce.Initialized) + { + /* + // This should be added in, but is not for now. + cmSystemTools::Error("Cache entry \"", (*i).first.c_str(), + "\" is uninitialized"); + */ + } + else if(t != INTERNAL) + { + // Format is key:type=value + if(const char* help = ce.GetProperty("HELPSTRING")) + { + cmCacheManager::OutputHelpString(fout, help); + } + else + { + cmCacheManager::OutputHelpString(fout, "Missing description"); + } + this->OutputKey(fout, i->first); + fout << ":" << cmCacheManagerTypes[t] << "="; + this->OutputValue(fout, ce.Value); + fout << "\n\n"; + } + } + + fout << "\n"; + fout << "########################\n"; + fout << "# INTERNAL cache entries\n"; + fout << "########################\n"; + fout << "\n"; + + for( cmCacheManager::CacheIterator i = this->NewIterator(); + !i.IsAtEnd(); i.Next()) + { + if ( !i.Initialized() ) + { + continue; + } + + CacheEntryType t = i.GetType(); + this->WritePropertyEntries(fout, i); + if(t == cmCacheManager::INTERNAL) + { + // Format is key:type=value + if(const char* help = i.GetProperty("HELPSTRING")) + { + this->OutputHelpString(fout, help); + } + this->OutputKey(fout, i.GetName()); + fout << ":" << cmCacheManagerTypes[t] << "="; + this->OutputValue(fout, i.GetValue()); + fout << "\n"; + } + } + fout << "\n"; + fout.Close(); + std::string checkCacheFile = path; + checkCacheFile += cmake::GetCMakeFilesDirectory(); + cmSystemTools::MakeDirectory(checkCacheFile.c_str()); + checkCacheFile += "/cmake.check_cache"; + std::ofstream checkCache(checkCacheFile.c_str()); + if(!checkCache) + { + cmSystemTools::Error("Unable to open check cache file for write. ", + checkCacheFile.c_str()); + return false; + } + checkCache << "# This file is generated by cmake for dependency checking " + "of the CMakeCache.txt file\n"; + return true; +} + +bool cmCacheManager::DeleteCache(const char* path) +{ + std::string cacheFile = path; + cmSystemTools::ConvertToUnixSlashes(cacheFile); + std::string cmakeFiles = cacheFile; + cacheFile += "/CMakeCache.txt"; + cmSystemTools::RemoveFile(cacheFile.c_str()); + // now remove the files in the CMakeFiles directory + // this cleans up language cache files + cmsys::Directory dir; + cmakeFiles += cmake::GetCMakeFilesDirectory(); + dir.Load(cmakeFiles.c_str()); + for (unsigned long fileNum = 0; + fileNum < dir.GetNumberOfFiles(); + ++fileNum) + { + if(!cmSystemTools:: + FileIsDirectory(dir.GetFile(fileNum))) + { + std::string fullPath = cmakeFiles; + fullPath += "/"; + fullPath += dir.GetFile(fileNum); + cmSystemTools::RemoveFile(fullPath.c_str()); + } + } + return true; +} + +void cmCacheManager::OutputKey(std::ostream& fout, std::string const& key) +{ + // support : in key name by double quoting + const char* q = (key.find(':') != key.npos || + key.find("//") == 0)? "\"" : ""; + fout << q << key << q; +} + +void cmCacheManager::OutputValue(std::ostream& fout, std::string const& value) +{ + // if value has trailing space or tab, enclose it in single quotes + if (value.size() && + (value[value.size() - 1] == ' ' || + value[value.size() - 1] == '\t')) + { + fout << '\'' << value << '\''; + } + else + { + fout << value; + } +} + +void cmCacheManager::OutputHelpString(std::ostream& fout, + const std::string& helpString) +{ + std::string::size_type end = helpString.size(); + if(end == 0) + { + return; + } + std::string oneLine; + std::string::size_type pos = 0; + for (std::string::size_type i=0; i<=end; i++) + { + if ((i==end) + || (helpString[i]=='\n') + || ((i-pos >= 60) && (helpString[i]==' '))) + { + fout << "//"; + if (helpString[pos] == '\n') + { + pos++; + fout << "\\n"; + } + oneLine = helpString.substr(pos, i - pos); + fout << oneLine.c_str() << "\n"; + pos = i; + } + } +} + +void cmCacheManager::RemoveCacheEntry(const char* key) +{ + CacheEntryMap::iterator i = this->Cache.find(key); + if(i != this->Cache.end()) + { + this->Cache.erase(i); + } +} + + +cmCacheManager::CacheEntry *cmCacheManager::GetCacheEntry(const char* key) +{ + CacheEntryMap::iterator i = this->Cache.find(key); + if(i != this->Cache.end()) + { + return &i->second; + } + return 0; +} + +cmCacheManager::CacheIterator cmCacheManager::GetCacheIterator( + const char *key) +{ + return CacheIterator(*this, key); +} + +const char* cmCacheManager::GetCacheValue(const char* key) const +{ + CacheEntryMap::const_iterator i = this->Cache.find(key); + if(i != this->Cache.end() && + i->second.Initialized) + { + return i->second.Value.c_str(); + } + return 0; +} + + +void cmCacheManager::PrintCache(std::ostream& out) const +{ + out << "=================================================" << std::endl; + out << "CMakeCache Contents:" << std::endl; + for(std::map::const_iterator i = + this->Cache.begin(); i != this->Cache.end(); ++i) + { + if((*i).second.Type != INTERNAL) + { + out << (*i).first.c_str() << " = " << (*i).second.Value.c_str() + << std::endl; + } + } + out << "\n\n"; + out << "To change values in the CMakeCache, " + << std::endl << "edit CMakeCache.txt in your output directory.\n"; + out << "=================================================" << std::endl; +} + + +void cmCacheManager::AddCacheEntry(const char* key, + const char* value, + const char* helpString, + CacheEntryType type) +{ + CacheEntry& e = this->Cache[key]; + e.Properties.SetCMakeInstance(this->CMakeInstance); + if ( value ) + { + e.Value = value; + e.Initialized = true; + } + else + { + e.Value = ""; + } + e.Type = type; + // make sure we only use unix style paths + if(type == FILEPATH || type == PATH) + { + if(e.Value.find(';') != e.Value.npos) + { + std::vector paths; + cmSystemTools::ExpandListArgument(e.Value, paths); + const char* sep = ""; + e.Value = ""; + for(std::vector::iterator i = paths.begin(); + i != paths.end(); ++i) + { + cmSystemTools::ConvertToUnixSlashes(*i); + e.Value += sep; + e.Value += *i; + sep = ";"; + } + } + else + { + cmSystemTools::ConvertToUnixSlashes(e.Value); + } + } + e.SetProperty("HELPSTRING", helpString? helpString : + "(This variable does not exist and should not be used)"); + this->Cache[key] = e; +} + +bool cmCacheManager::CacheIterator::IsAtEnd() const +{ + return this->Position == this->Container.Cache.end(); +} + +void cmCacheManager::CacheIterator::Begin() +{ + this->Position = this->Container.Cache.begin(); +} + +bool cmCacheManager::CacheIterator::Find(const char* key) +{ + this->Position = this->Container.Cache.find(key); + return !this->IsAtEnd(); +} + +void cmCacheManager::CacheIterator::Next() +{ + if (!this->IsAtEnd()) + { + ++this->Position; + } +} + +void cmCacheManager::CacheIterator::SetValue(const char* value) +{ + if (this->IsAtEnd()) + { + return; + } + CacheEntry* entry = &this->GetEntry(); + if ( value ) + { + entry->Value = value; + entry->Initialized = true; + } + else + { + entry->Value = ""; + } +} + +//---------------------------------------------------------------------------- +bool cmCacheManager::CacheIterator::GetValueAsBool() const +{ + return cmSystemTools::IsOn(this->GetEntry().Value.c_str()); +} + +//---------------------------------------------------------------------------- +const char* +cmCacheManager::CacheEntry::GetProperty(const char* prop) const +{ + if(strcmp(prop, "TYPE") == 0) + { + return cmCacheManagerTypes[this->Type]; + } + else if(strcmp(prop, "VALUE") == 0) + { + return this->Value.c_str(); + } + bool c = false; + return + this->Properties.GetPropertyValue(prop, cmProperty::CACHE, c); +} + +//---------------------------------------------------------------------------- +void cmCacheManager::CacheEntry::SetProperty(const char* prop, + const char* value) +{ + if(strcmp(prop, "TYPE") == 0) + { + this->Type = cmCacheManager::StringToType(value? value : "STRING"); + } + else if(strcmp(prop, "VALUE") == 0) + { + this->Value = value? value : ""; + } + else + { + this->Properties.SetProperty(prop, value, cmProperty::CACHE); + } +} + +//---------------------------------------------------------------------------- +void cmCacheManager::CacheEntry::AppendProperty(const char* prop, + const char* value, + bool asString) +{ + if(strcmp(prop, "TYPE") == 0) + { + this->Type = cmCacheManager::StringToType(value? value : "STRING"); + } + else if(strcmp(prop, "VALUE") == 0) + { + if(value) + { + if(!this->Value.empty() && *value && !asString) + { + this->Value += ";"; + } + this->Value += value; + } + } + else + { + this->Properties.AppendProperty(prop, value, cmProperty::CACHE, asString); + } +} + +//---------------------------------------------------------------------------- +const char* cmCacheManager::CacheIterator::GetProperty(const char* prop) const +{ + if(!this->IsAtEnd()) + { + return this->GetEntry().GetProperty(prop); + } + return 0; +} + +//---------------------------------------------------------------------------- +void cmCacheManager::CacheIterator::SetProperty(const char* p, const char* v) +{ + if(!this->IsAtEnd()) + { + this->GetEntry().SetProperty(p, v); + } +} + +//---------------------------------------------------------------------------- +void cmCacheManager::CacheIterator::AppendProperty(const char* p, + const char* v, + bool asString) +{ + if(!this->IsAtEnd()) + { + this->GetEntry().AppendProperty(p, v, asString); + } +} + +//---------------------------------------------------------------------------- +bool cmCacheManager::CacheIterator::GetPropertyAsBool(const char* prop) const +{ + if(const char* value = this->GetProperty(prop)) + { + return cmSystemTools::IsOn(value); + } + return false; +} + +//---------------------------------------------------------------------------- +void cmCacheManager::CacheIterator::SetProperty(const char* p, bool v) +{ + this->SetProperty(p, v ? "ON" : "OFF"); +} + +//---------------------------------------------------------------------------- +bool cmCacheManager::CacheIterator::PropertyExists(const char* prop) const +{ + return this->GetProperty(prop)? true:false; +} + +//---------------------------------------------------------------------------- +bool cmCacheManager::NeedCacheCompatibility(int major, int minor) +{ + // Compatibility is not needed if the cache version is zero because + // the cache was created or modified by the user. + if(this->CacheMajorVersion == 0) + { + return false; + } + + // Compatibility is needed if the cache version is equal to or lower + // than the given version. + unsigned int actual_compat = + CMake_VERSION_ENCODE(this->CacheMajorVersion, this->CacheMinorVersion, 0); + return (actual_compat && + actual_compat <= CMake_VERSION_ENCODE(major, minor, 0)); +} + +//---------------------------------------------------------------------------- +void cmCacheManager::DefineProperties(cmake *cm) +{ + cm->DefineProperty + ("ADVANCED", cmProperty::CACHE, + "True if entry should be hidden by default in GUIs.", + "This is a boolean value indicating whether the entry is considered " + "interesting only for advanced configuration. " + "The mark_as_advanced() command modifies this property." + ); + + cm->DefineProperty + ("HELPSTRING", cmProperty::CACHE, + "Help associated with entry in GUIs.", + "This string summarizes the purpose of an entry to help users set it " + "through a CMake GUI." + ); + + cm->DefineProperty + ("TYPE", cmProperty::CACHE, + "Widget type for entry in GUIs.", + "Cache entry values are always strings, but CMake GUIs present widgets " + "to help users set values. " + "The GUIs use this property as a hint to determine the widget type. " + "Valid TYPE values are:\n" + " BOOL = Boolean ON/OFF value.\n" + " PATH = Path to a directory.\n" + " FILEPATH = Path to a file.\n" + " STRING = Generic string value.\n" + " INTERNAL = Do not present in GUI at all.\n" + " STATIC = Value managed by CMake, do not change.\n" + " UNINITIALIZED = Type not yet specified.\n" + "Generally the TYPE of a cache entry should be set by the command " + "which creates it (set, option, find_library, etc.)." + ); + + cm->DefineProperty + ("MODIFIED", cmProperty::CACHE, + "Internal management property. Do not set or get.", + "This is an internal cache entry property managed by CMake to " + "track interactive user modification of entries. Ignore it." + ); + + cm->DefineProperty + ("STRINGS", cmProperty::CACHE, + "Enumerate possible STRING entry values for GUI selection.", + "For cache entries with type STRING, this enumerates a set of values. " + "CMake GUIs may use this to provide a selection widget instead of a " + "generic string entry field. " + "This is for convenience only. " + "CMake does not enforce that the value matches one of those listed." + ); + + cm->DefineProperty + ("VALUE", cmProperty::CACHE, + "Value of a cache entry.", + "This property maps to the actual value of a cache entry. " + "Setting this property always sets the value without checking, so " + "use with care." + ); +} diff --git a/Source/cmCacheManager.h b/Source/cmCacheManager.h new file mode 100644 index 0000000..9c94d21 --- /dev/null +++ b/Source/cmCacheManager.h @@ -0,0 +1,189 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCacheManager_h +#define cmCacheManager_h + +#include "cmStandardIncludes.h" +#include "cmPropertyMap.h" +class cmMakefile; +class cmMarkAsAdvancedCommand; +class cmake; + +/** \class cmCacheManager + * \brief Control class for cmake's cache + * + * Load and Save CMake cache files. + * + */ +class cmCacheManager +{ +public: + cmCacheManager(cmake* cm); + class CacheIterator; + friend class cmCacheManager::CacheIterator; + enum CacheEntryType{ BOOL=0, PATH, FILEPATH, STRING, INTERNAL,STATIC, + UNINITIALIZED }; + +private: + struct CacheEntry + { + std::string Value; + CacheEntryType Type; + cmPropertyMap Properties; + const char* GetProperty(const char*) const; + void SetProperty(const char* property, const char* value); + void AppendProperty(const char* property, const char* value, + bool asString=false); + bool Initialized; + CacheEntry() : Value(""), Type(UNINITIALIZED), Initialized(false) + {} + }; + +public: + class CacheIterator + { + public: + void Begin(); + bool Find(const char*); + bool IsAtEnd() const; + void Next(); + const char *GetName() const { + return this->Position->first.c_str(); } + const char* GetProperty(const char*) const ; + bool GetPropertyAsBool(const char*) const ; + bool PropertyExists(const char*) const; + void SetProperty(const char* property, const char* value); + void AppendProperty(const char* property, const char* value, + bool asString=false); + void SetProperty(const char* property, bool value); + const char* GetValue() const { return this->GetEntry().Value.c_str(); } + bool GetValueAsBool() const; + void SetValue(const char*); + CacheEntryType GetType() const { return this->GetEntry().Type; } + void SetType(CacheEntryType ty) { this->GetEntry().Type = ty; } + bool Initialized() { return this->GetEntry().Initialized; } + cmCacheManager &Container; + std::map::iterator Position; + CacheIterator(cmCacheManager &cm) : Container(cm) { + this->Begin(); + } + CacheIterator(cmCacheManager &cm, const char* key) : Container(cm) + { + if ( key ) + { + this->Find(key); + } + } + private: + CacheEntry const& GetEntry() const { return this->Position->second; } + CacheEntry& GetEntry() { return this->Position->second; } + }; + + ///! return an iterator to iterate through the cache map + cmCacheManager::CacheIterator NewIterator() + { + return CacheIterator(*this); + } + + /** + * Types for the cache entries. These are useful as + * hints for a cache editor program. Path should bring + * up a file chooser, BOOL a check box, and STRING a + * text entry box, FILEPATH is a full path to a file which + * can be different than just a path input + */ + static CacheEntryType StringToType(const char*); + static const char* TypeToString(CacheEntryType); + static bool IsType(const char*); + + ///! Load a cache for given makefile. Loads from ouput home. + bool LoadCache(cmMakefile*); + ///! Load a cache for given makefile. Loads from path/CMakeCache.txt. + bool LoadCache(const char* path); + bool LoadCache(const char* path, bool internal); + bool LoadCache(const char* path, bool internal, + std::set& excludes, + std::set& includes); + + ///! Save cache for given makefile. Saves to ouput home CMakeCache.txt. + bool SaveCache(cmMakefile*) ; + ///! Save cache for given makefile. Saves to ouput path/CMakeCache.txt + bool SaveCache(const char* path) ; + + ///! Delete the cache given + bool DeleteCache(const char* path); + + ///! Print the cache to a stream + void PrintCache(std::ostream&) const; + + ///! Get the iterator for an entry with a given key. + cmCacheManager::CacheIterator GetCacheIterator(const char *key=0); + + ///! Remove an entry from the cache + void RemoveCacheEntry(const char* key); + + ///! Get the number of entries in the cache + int GetSize() { + return static_cast(this->Cache.size()); } + + ///! Break up a line like VAR:type="value" into var, type and value + static bool ParseEntry(const char* entry, + std::string& var, + std::string& value, + CacheEntryType& type); + + ///! Get a value from the cache given a key + const char* GetCacheValue(const char* key) const; + + /** Get the version of CMake that wrote the cache. */ + unsigned int GetCacheMajorVersion() { return this->CacheMajorVersion; } + unsigned int GetCacheMinorVersion() { return this->CacheMinorVersion; } + bool NeedCacheCompatibility(int major, int minor); + + /** Define and document CACHE entry properties. */ + static void DefineProperties(cmake *cm); + +protected: + ///! Add an entry into the cache + void AddCacheEntry(const char* key, const char* value, + const char* helpString, CacheEntryType type); + + ///! Get a cache entry object for a key + CacheEntry *GetCacheEntry(const char *key); + ///! Clean out the CMakeFiles directory if no CMakeCache.txt + void CleanCMakeFiles(const char* path); + + // Cache version info + unsigned int CacheMajorVersion; + unsigned int CacheMinorVersion; +private: + cmake* CMakeInstance; + typedef std::map CacheEntryMap; + static void OutputHelpString(std::ostream& fout, + const std::string& helpString); + static void OutputKey(std::ostream& fout, std::string const& key); + static void OutputValue(std::ostream& fout, std::string const& value); + + static const char* PersistentProperties[]; + bool ReadPropertyEntry(std::string const& key, CacheEntry& e); + void WritePropertyEntries(std::ostream& os, CacheIterator const& i); + + CacheEntryMap Cache; + // Only cmake and cmMakefile should be able to add cache values + // the commands should never use the cmCacheManager directly + friend class cmMakefile; // allow access to add cache values + friend class cmake; // allow access to add cache values + friend class cmakewizard; // allow access to add cache values + friend class cmMarkAsAdvancedCommand; // allow access to add cache values +}; + +#endif diff --git a/Source/cmCallVisualStudioMacro.cxx b/Source/cmCallVisualStudioMacro.cxx new file mode 100644 index 0000000..0c15477 --- /dev/null +++ b/Source/cmCallVisualStudioMacro.cxx @@ -0,0 +1,540 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCallVisualStudioMacro.h" +#include "cmSystemTools.h" + + +#if defined(_MSC_VER) +#define HAVE_COMDEF_H +#endif + + +// Just for this file: +// +static bool LogErrorsAsMessages; + + +#if defined(HAVE_COMDEF_H) + + +#include + + +//---------------------------------------------------------------------------- +// Copied from a correct comdef.h to avoid problems with deficient versions +// of comdef.h that exist in the wild... Fixes issue #7533. +// +#if ( _MSC_VER >= 1300 ) +// VS7 and later: +#ifdef _NATIVE_WCHAR_T_DEFINED +# ifdef _DEBUG +# pragma comment(lib, "comsuppwd.lib") +# else +# pragma comment(lib, "comsuppw.lib") +# endif +#else +# ifdef _DEBUG +# pragma comment(lib, "comsuppd.lib") +# else +# pragma comment(lib, "comsupp.lib") +# endif +#endif +#else +// VS6 only had comsupp.lib: +# pragma comment(lib, "comsupp.lib") +#endif + + +//---------------------------------------------------------------------------- +///! Use ReportHRESULT to make a cmSystemTools::Message after calling +///! a COM method that may have failed. +#define ReportHRESULT(hr, context) \ + if (FAILED(hr)) \ + { \ + if (LogErrorsAsMessages) \ + { \ + std::ostringstream oss; \ + oss.flags(std::ios::hex); \ + oss << context << " failed HRESULT, hr = 0x" << hr << std::endl; \ + oss.flags(std::ios::dec); \ + oss << __FILE__ << "(" << __LINE__ << ")"; \ + cmSystemTools::Message(oss.str().c_str()); \ + } \ + } + + +//---------------------------------------------------------------------------- +///! Using the given instance of Visual Studio, call the named macro +HRESULT InstanceCallMacro( + IDispatch* vsIDE, + const std::string& macro, + const std::string& args) +{ + HRESULT hr = E_POINTER; + + _bstr_t macroName(macro.c_str()); + _bstr_t macroArgs(args.c_str()); + + if (0 != vsIDE) + { + DISPID dispid = (DISPID) -1; + OLECHAR *name = L"ExecuteCommand"; + + hr = vsIDE->GetIDsOfNames(IID_NULL, &name, 1, + LOCALE_USER_DEFAULT, &dispid); + ReportHRESULT(hr, "GetIDsOfNames(ExecuteCommand)"); + + if (SUCCEEDED(hr)) + { + VARIANTARG vargs[2]; + DISPPARAMS params; + VARIANT result; + EXCEPINFO excep; + UINT arg = (UINT) -1; + + // No VariantInit or VariantClear calls are necessary for + // these two vargs. They are both local _bstr_t variables + // that remain in scope for the duration of the Invoke call. + // + V_VT(&vargs[1]) = VT_BSTR; + V_BSTR(&vargs[1]) = macroName; + V_VT(&vargs[0]) = VT_BSTR; + V_BSTR(&vargs[0]) = macroArgs; + + params.rgvarg = &vargs[0]; + params.rgdispidNamedArgs = 0; + params.cArgs = sizeof(vargs)/sizeof(vargs[0]); + params.cNamedArgs = 0; + + VariantInit(&result); + + memset(&excep, 0, sizeof(excep)); + + hr = vsIDE->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, + DISPATCH_METHOD, ¶ms, &result, &excep, &arg); + + std::ostringstream oss; + oss << std::endl; + oss << "Invoke(ExecuteCommand)" << std::endl; + oss << " Macro: " << macro.c_str() << std::endl; + oss << " Args: " << args.c_str() << std::endl; + + if (DISP_E_EXCEPTION == hr) + { + oss << "DISP_E_EXCEPTION EXCEPINFO:" << excep.wCode << std::endl; + oss << " wCode: " << excep.wCode << std::endl; + oss << " wReserved: " << excep.wReserved << std::endl; + if (excep.bstrSource) + { + oss << " bstrSource: " << + (const char*)(_bstr_t)excep.bstrSource << std::endl; + } + if (excep.bstrDescription) + { + oss << " bstrDescription: " << + (const char*)(_bstr_t)excep.bstrDescription << std::endl; + } + if (excep.bstrHelpFile) + { + oss << " bstrHelpFile: " << + (const char*)(_bstr_t)excep.bstrHelpFile << std::endl; + } + oss << " dwHelpContext: " << excep.dwHelpContext << std::endl; + oss << " pvReserved: " << excep.pvReserved << std::endl; + oss << " pfnDeferredFillIn: " << excep.pfnDeferredFillIn << std::endl; + oss << " scode: " << excep.scode << std::endl; + } + + std::string exstr(oss.str()); + ReportHRESULT(hr, exstr.c_str()); + + VariantClear(&result); + } + } + + return hr; +} + + +//---------------------------------------------------------------------------- +///! Get the Solution object from the IDE object +HRESULT GetSolutionObject( + IDispatch* vsIDE, + IDispatchPtr& vsSolution) +{ + HRESULT hr = E_POINTER; + + if (0 != vsIDE) + { + DISPID dispid = (DISPID) -1; + OLECHAR *name = L"Solution"; + + hr = vsIDE->GetIDsOfNames(IID_NULL, &name, 1, + LOCALE_USER_DEFAULT, &dispid); + ReportHRESULT(hr, "GetIDsOfNames(Solution)"); + + if (SUCCEEDED(hr)) + { + DISPPARAMS params; + VARIANT result; + EXCEPINFO excep; + UINT arg = (UINT) -1; + + params.rgvarg = 0; + params.rgdispidNamedArgs = 0; + params.cArgs = 0; + params.cNamedArgs = 0; + + VariantInit(&result); + + memset(&excep, 0, sizeof(excep)); + + hr = vsIDE->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, + DISPATCH_PROPERTYGET, ¶ms, &result, &excep, &arg); + ReportHRESULT(hr, "Invoke(Solution)"); + + if (SUCCEEDED(hr)) + { + vsSolution = V_DISPATCH(&result); + } + + VariantClear(&result); + } + } + + return hr; +} + + +//---------------------------------------------------------------------------- +///! Get the FullName property from the Solution object +HRESULT GetSolutionFullName( + IDispatch* vsSolution, + std::string& fullName) +{ + HRESULT hr = E_POINTER; + + if (0 != vsSolution) + { + DISPID dispid = (DISPID) -1; + OLECHAR *name = L"FullName"; + + hr = vsSolution->GetIDsOfNames(IID_NULL, &name, 1, + LOCALE_USER_DEFAULT, &dispid); + ReportHRESULT(hr, "GetIDsOfNames(FullName)"); + + if (SUCCEEDED(hr)) + { + DISPPARAMS params; + VARIANT result; + EXCEPINFO excep; + UINT arg = (UINT) -1; + + params.rgvarg = 0; + params.rgdispidNamedArgs = 0; + params.cArgs = 0; + params.cNamedArgs = 0; + + VariantInit(&result); + + memset(&excep, 0, sizeof(excep)); + + hr = vsSolution->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, + DISPATCH_PROPERTYGET, ¶ms, &result, &excep, &arg); + ReportHRESULT(hr, "Invoke(FullName)"); + + if (SUCCEEDED(hr)) + { + fullName = (std::string) (_bstr_t) V_BSTR(&result); + } + + VariantClear(&result); + } + } + + return hr; +} + + +//---------------------------------------------------------------------------- +///! Get the FullName property from the Solution object, given the IDE object +HRESULT GetIDESolutionFullName( + IDispatch* vsIDE, + std::string& fullName) +{ + IDispatchPtr vsSolution; + HRESULT hr = GetSolutionObject(vsIDE, vsSolution); + ReportHRESULT(hr, "GetSolutionObject"); + + if (SUCCEEDED(hr)) + { + GetSolutionFullName(vsSolution, fullName); + ReportHRESULT(hr, "GetSolutionFullName"); + } + + return hr; +} + + +//---------------------------------------------------------------------------- +///! Get all running objects from the Windows running object table. +///! Save them in a map by their display names. +HRESULT GetRunningInstances(std::map& mrot) +{ + // mrot == Map of the Running Object Table + + IRunningObjectTablePtr runningObjectTable; + IEnumMonikerPtr monikerEnumerator; + IMonikerPtr moniker; + ULONG numFetched = 0; + + HRESULT hr = GetRunningObjectTable(0, &runningObjectTable); + ReportHRESULT(hr, "GetRunningObjectTable"); + + if(SUCCEEDED(hr)) + { + hr = runningObjectTable->EnumRunning(&monikerEnumerator); + ReportHRESULT(hr, "EnumRunning"); + } + + if(SUCCEEDED(hr)) + { + hr = monikerEnumerator->Reset(); + ReportHRESULT(hr, "Reset"); + } + + if(SUCCEEDED(hr)) + { + while (S_OK == monikerEnumerator->Next(1, &moniker, &numFetched)) + { + std::string runningObjectName; + IUnknownPtr runningObjectVal; + IBindCtxPtr ctx; + + hr = CreateBindCtx(0, &ctx); + ReportHRESULT(hr, "CreateBindCtx"); + + if(SUCCEEDED(hr)) + { + LPOLESTR displayName = 0; + hr = moniker->GetDisplayName(ctx, 0, &displayName); + ReportHRESULT(hr, "GetDisplayName"); + if (displayName) + { + runningObjectName = (std::string) (_bstr_t) displayName; + CoTaskMemFree(displayName); + } + + hr = runningObjectTable->GetObject(moniker, &runningObjectVal); + ReportHRESULT(hr, "GetObject"); + if(SUCCEEDED(hr)) + { + mrot.insert(std::make_pair(runningObjectName, runningObjectVal)); + } + } + + numFetched = 0; + moniker = 0; + } + } + + return hr; +} + + +//---------------------------------------------------------------------------- +///! Do the two file names refer to the same Visual Studio solution? Or are +///! we perhaps looking for any and all solutions? +bool FilesSameSolution( + const std::string& slnFile, + const std::string& slnName) +{ + if (slnFile == "ALL" || slnName == "ALL") + { + return true; + } + + // Otherwise, make lowercase local copies, convert to Unix slashes, and + // see if the resulting strings are the same: + std::string s1 = cmSystemTools::LowerCase(slnFile); + std::string s2 = cmSystemTools::LowerCase(slnName); + cmSystemTools::ConvertToUnixSlashes(s1); + cmSystemTools::ConvertToUnixSlashes(s2); + + return s1 == s2; +} + + +//---------------------------------------------------------------------------- +///! Find instances of Visual Studio with the given solution file +///! open. Pass "ALL" for slnFile to gather all running instances +///! of Visual Studio. +HRESULT FindVisualStudioInstances( + const std::string& slnFile, + std::vector& instances) +{ + std::map mrot; + + HRESULT hr = GetRunningInstances(mrot); + ReportHRESULT(hr, "GetRunningInstances"); + + if(SUCCEEDED(hr)) + { + std::map::iterator it; + for(it = mrot.begin(); it != mrot.end(); ++it) + { + if (cmSystemTools::StringStartsWith(it->first.c_str(), + "!VisualStudio.DTE.")) + { + IDispatchPtr disp(it->second); + if (disp != (IDispatch*) 0) + { + std::string slnName; + hr = GetIDESolutionFullName(disp, slnName); + ReportHRESULT(hr, "GetIDESolutionFullName"); + + if (FilesSameSolution(slnFile, slnName)) + { + instances.push_back(disp); + + //std::cout << "Found Visual Studio instance." << std::endl; + //std::cout << " ROT entry name: " << it->first << std::endl; + //std::cout << " ROT entry object: " + // << (IUnknown*) it->second << std::endl; + //std::cout << " slnFile: " << slnFile << std::endl; + //std::cout << " slnName: " << slnName << std::endl; + } + } + } + } + } + + return hr; +} + + +#endif //defined(HAVE_COMDEF_H) + + +//---------------------------------------------------------------------------- +int cmCallVisualStudioMacro::GetNumberOfRunningVisualStudioInstances( + const std::string& slnFile) +{ + int count = 0; + + LogErrorsAsMessages = false; + +#if defined(HAVE_COMDEF_H) + HRESULT hr = CoInitialize(0); + ReportHRESULT(hr, "CoInitialize"); + + if(SUCCEEDED(hr)) + { + std::vector instances; + hr = FindVisualStudioInstances(slnFile, instances); + ReportHRESULT(hr, "FindVisualStudioInstances"); + + if(SUCCEEDED(hr)) + { + count = static_cast(instances.size()); + } + + // Force release all COM pointers before CoUninitialize: + instances.clear(); + + CoUninitialize(); + } +#else + (void)slnFile; +#endif + + return count; +} + + +//---------------------------------------------------------------------------- +///! Get all running objects from the Windows running object table. +///! Save them in a map by their display names. +int cmCallVisualStudioMacro::CallMacro( + const std::string& slnFile, + const std::string& macro, + const std::string& args, + const bool logErrorsAsMessages) +{ + int err = 1; // no comdef.h + + LogErrorsAsMessages = logErrorsAsMessages; + +#if defined(HAVE_COMDEF_H) + err = 2; // error initializing + + HRESULT hr = CoInitialize(0); + ReportHRESULT(hr, "CoInitialize"); + + if(SUCCEEDED(hr)) + { + std::vector instances; + hr = FindVisualStudioInstances(slnFile, instances); + ReportHRESULT(hr, "FindVisualStudioInstances"); + + if(SUCCEEDED(hr)) + { + err = 0; // no error + + std::vector::iterator it; + for(it = instances.begin(); it != instances.end(); ++it) + { + hr = InstanceCallMacro(*it, macro, args); + ReportHRESULT(hr, "InstanceCallMacro"); + + if (FAILED(hr)) + { + err = 3; // error attempting to call the macro + } + } + + if(0 == instances.size()) + { + // no instances to call + + //cmSystemTools::Message( + // "cmCallVisualStudioMacro::CallMacro no instances found to call", + // "Warning"); + } + } + + // Force release all COM pointers before CoUninitialize: + instances.clear(); + + CoUninitialize(); + } +#else + (void)slnFile; + (void)macro; + (void)args; + if (LogErrorsAsMessages) + { + cmSystemTools::Message("cmCallVisualStudioMacro::CallMacro is not " + "supported on this platform"); + } +#endif + + if (err && LogErrorsAsMessages) + { + std::ostringstream oss; + oss << "cmCallVisualStudioMacro::CallMacro failed, err = " << err; + cmSystemTools::Message(oss.str().c_str()); + } + + return 0; +} diff --git a/Source/cmCallVisualStudioMacro.h b/Source/cmCallVisualStudioMacro.h new file mode 100644 index 0000000..09bddfa --- /dev/null +++ b/Source/cmCallVisualStudioMacro.h @@ -0,0 +1,45 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCallVisualStudioMacro_h +#define cmCallVisualStudioMacro_h + +#include "cmStandardIncludes.h" + +/** \class cmCallVisualStudioMacro + * \brief Control class for communicating with CMake's Visual Studio macros + * + * Find running instances of Visual Studio by full path solution name. + * Call a Visual Studio IDE macro in any of those instances. + */ +class cmCallVisualStudioMacro +{ +public: + ///! Call the named macro in instances of Visual Studio with the + ///! given solution file open. Pass "ALL" for slnFile to call the + ///! macro in each Visual Studio instance. + static int CallMacro(const std::string& slnFile, + const std::string& macro, + const std::string& args, + const bool logErrorsAsMessages); + + ///! Count the number of running instances of Visual Studio with the + ///! given solution file open. Pass "ALL" for slnFile to count all + ///! running Visual Studio instances. + static int GetNumberOfRunningVisualStudioInstances( + const std::string& slnFile); + +protected: + +private: +}; + +#endif diff --git a/Source/cmCommand.h b/Source/cmCommand.h new file mode 100644 index 0000000..4faaee3 --- /dev/null +++ b/Source/cmCommand.h @@ -0,0 +1,195 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCommand_h +#define cmCommand_h + +#include "cmObject.h" +#include "cmListFileCache.h" +#include "cmMakefile.h" +#include "cmCommandArgumentsHelper.h" + +/** \class cmCommand + * \brief Superclass for all commands in CMake. + * + * cmCommand is the base class for all commands in CMake. A command + * manifests as an entry in CMakeLists.txt and produces one or + * more makefile rules. Commands are associated with a particular + * makefile. This base class cmCommand defines the API for commands + * to support such features as enable/disable, inheritance, + * documentation, and construction. + */ +class cmCommand : public cmObject +{ +public: + cmTypeMacro(cmCommand, cmObject); + + /** + * Construct the command. By default it is enabled with no makefile. + */ + cmCommand() + {this->Makefile = 0; this->Enabled = true;} + + /** + * Need virtual destructor to destroy real command type. + */ + virtual ~cmCommand() {} + + /** + * Specify the makefile. + */ + void SetMakefile(cmMakefile*m) + {this->Makefile = m; } + cmMakefile* GetMakefile() { return this->Makefile; } + + /** + * This is called by the cmMakefile when the command is first + * encountered in the CMakeLists.txt file. It expands the command's + * arguments and then invokes the InitialPass. + */ + virtual bool InvokeInitialPass(const std::vector& args, + cmExecutionStatus &status) + { + std::vector expandedArguments; + if(!this->Makefile->ExpandArguments(args, expandedArguments)) + { + // There was an error expanding arguments. It was already + // reported, so we can skip this command without error. + return true; + } + return this->InitialPass(expandedArguments,status); + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &) = 0; + + /** + * This is called at the end after all the information + * specified by the command is accumulated. Most commands do + * not implement this method. At this point, reading and + * writing to the cache can be done. + */ + virtual void FinalPass() {}; + + /** + * Does this command have a final pass? Query after InitialPass. + */ + virtual bool HasFinalPass() const { return false; } + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() = 0; + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const + { + return false; + } + + /** + * This determines if usage of the method is discouraged or not. + * This is currently only used for generating the documentation. + */ + virtual bool IsDiscouraged() const + { + return false; + } + + /** + * This is used to avoid including this command + * in documentation. This is mainly used by + * cmMacroHelperCommand and cmFunctionHelperCommand + * which cannot provide appropriate documentation. + */ + virtual bool ShouldAppearInDocumentation() const + { + return true; + } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const = 0; + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const = 0; + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const = 0; + + /** + * Enable the command. + */ + void EnabledOn() + {this->Enabled = true;} + + /** + * Disable the command. + */ + void EnabledOff() + {this->Enabled = false;} + + /** + * Query whether the command is enabled. + */ + bool GetEnabled() const + {return this->Enabled;} + + /** + * Disable or enable the command. + */ + void SetEnabled(bool enabled) + {this->Enabled = enabled;} + + /** + * Return the last error string. + */ + const char* GetError() + { + if(this->Error.length() == 0) + { + this->Error = this->GetName(); + this->Error += " unknown error."; + } + return this->Error.c_str(); + } + + /** + * Set the error message + */ + void SetError(const char* e) + { + this->Error = this->GetName(); + this->Error += " "; + this->Error += e; + } + +protected: + cmMakefile* Makefile; + cmCommandArgumentsHelper Helper; + +private: + bool Enabled; + std::string Error; +}; + +#endif diff --git a/Source/cmCommandArgumentLexer.cxx b/Source/cmCommandArgumentLexer.cxx new file mode 100644 index 0000000..1d7140b --- /dev/null +++ b/Source/cmCommandArgumentLexer.cxx @@ -0,0 +1,2077 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmStandardIncludes.h" + +#line 2 "cmCommandArgumentLexer.cxx" + +#line 4 "cmCommandArgumentLexer.cxx" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE cmCommandArgument_yyrestart(yyin ,yyscanner ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via cmCommandArgument_yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void cmCommandArgument_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void cmCommandArgument_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmCommandArgument_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void cmCommandArgument_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmCommandArgument_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmCommandArgument_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void cmCommandArgument_yypop_buffer_state (yyscan_t yyscanner ); + +static void cmCommandArgument_yyensure_buffer_stack (yyscan_t yyscanner ); +static void cmCommandArgument_yy_load_buffer_state (yyscan_t yyscanner ); +static void cmCommandArgument_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); + +#define YY_FLUSH_BUFFER cmCommandArgument_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) + +YY_BUFFER_STATE cmCommandArgument_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmCommandArgument_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmCommandArgument_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +void *cmCommandArgument_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *cmCommandArgument_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void cmCommandArgument_yyfree (void * ,yyscan_t yyscanner ); + +#define yy_new_buffer cmCommandArgument_yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + cmCommandArgument_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + cmCommandArgument_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + cmCommandArgument_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + cmCommandArgument_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define cmCommandArgument_yywrap(n) 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); +static int yy_get_next_buffer (yyscan_t yyscanner ); +static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; + +#define YY_NUM_RULES 14 +#define YY_END_OF_BUFFER 15 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[30] = + { 0, + 0, 0, 0, 0, 0, 0, 15, 9, 10, 7, + 6, 14, 11, 5, 12, 13, 9, 0, 0, 4, + 7, 0, 8, 2, 0, 3, 0, 1, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, + 1, 1, 4, 1, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, + 1, 1, 1, 5, 4, 4, 4, 4, 6, 4, + 4, 4, 4, 4, 4, 4, 4, 7, 4, 4, + 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, + 1, 9, 1, 1, 4, 1, 4, 4, 4, 4, + + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 10, 1, 11, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[12] = + { 0, + 1, 2, 3, 4, 3, 4, 4, 4, 3, 5, + 3 + } ; + +static yyconst flex_int16_t yy_base[35] = + { 0, + 0, 0, 31, 30, 29, 28, 36, 0, 6, 16, + 0, 41, 41, 41, 0, 41, 0, 22, 22, 41, + 18, 18, 41, 41, 7, 41, 4, 41, 41, 20, + 21, 26, 9, 30 + } ; + +static yyconst flex_int16_t yy_def[35] = + { 0, + 29, 1, 1, 1, 1, 1, 29, 30, 31, 32, + 33, 29, 29, 29, 34, 29, 30, 31, 18, 29, + 32, 33, 29, 29, 18, 29, 18, 29, 0, 29, + 29, 29, 29, 29 + } ; + +static yyconst flex_int16_t yy_nxt[53] = + { 0, + 8, 8, 9, 10, 11, 10, 10, 10, 12, 13, + 14, 19, 22, 28, 27, 20, 17, 17, 17, 17, + 17, 17, 26, 17, 18, 18, 21, 21, 25, 21, + 23, 24, 23, 23, 23, 29, 16, 16, 15, 15, + 7, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29 + } ; + +static yyconst flex_int16_t yy_chk[53] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 9, 33, 27, 25, 9, 10, 10, 21, 21, + 30, 30, 22, 30, 31, 31, 32, 32, 19, 32, + 34, 18, 34, 34, 34, 7, 6, 5, 4, 3, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "cmCommandArgumentLexer.in.l" +#line 2 "cmCommandArgumentLexer.in.l" +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run flex like this: + + flex --prefix=cmCommandArgument_yy --header-file=cmCommandArgumentLexer.h -ocmCommandArgumentLexer.cxx cmCommandArgumentLexer.in.l + +Modify cmCommandArgumentLexer.cxx: + - add #include "cmStandardIncludes.h" to top of file + - put header block at top of file + - remove TABs + - remove "yyscanner" argument from these methods: + yy_fatal_error, cmCommandArgument_yyalloc, cmCommandArgument_yyrealloc, cmCommandArgument_yyfree + - remove all YY_BREAK lines occurring right after return statements + - change while ( 1 ) to for(;;) + - add "return 0;" to end of cmCommandArgument_yylex + +Modify cmCommandArgumentLexer.h: + - remove TABs + - remove the yy_init_globals function + - remove the block that includes unistd.h + - remove #line directives (avoids bogus warning on old Sun) + +*/ + +#include "cmStandardLexer.h" + +#include "cmCommandArgumentParserHelper.h" + +/* Replace the lexer input function. */ +#undef YY_INPUT +#define YY_INPUT(buf, result, max_size) \ + { result = yyextra->LexInput(buf, max_size); } + +/* Include the set of tokens from the parser. */ +#include "cmCommandArgumentParserTokens.h" + +/*--------------------------------------------------------------------------*/ + + +#line 508 "cmCommandArgumentLexer.cxx" + +#define INITIAL 0 +#define ESCAPES 1 +#define NOESCAPES 2 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals (yyscan_t yyscanner ); + +int cmCommandArgument_yylex_init (yyscan_t* scanner); + +int cmCommandArgument_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int cmCommandArgument_yylex_destroy (yyscan_t yyscanner ); + +int cmCommandArgument_yyget_debug (yyscan_t yyscanner ); + +void cmCommandArgument_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE cmCommandArgument_yyget_extra (yyscan_t yyscanner ); + +void cmCommandArgument_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *cmCommandArgument_yyget_in (yyscan_t yyscanner ); + +void cmCommandArgument_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *cmCommandArgument_yyget_out (yyscan_t yyscanner ); + +void cmCommandArgument_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int cmCommandArgument_yyget_leng (yyscan_t yyscanner ); + +char *cmCommandArgument_yyget_text (yyscan_t yyscanner ); + +int cmCommandArgument_yyget_lineno (yyscan_t yyscanner ); + +void cmCommandArgument_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int cmCommandArgument_yywrap (yyscan_t yyscanner ); +#else +extern int cmCommandArgument_yywrap (yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (yyscan_t yyscanner ); +#else +static int input (yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO fwrite( yytext, yyleng, 1, yyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int cmCommandArgument_yylex (yyscan_t yyscanner); + +#define YY_DECL int cmCommandArgument_yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + +#line 64 "cmCommandArgumentLexer.in.l" + + +#line 732 "cmCommandArgumentLexer.cxx" + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + cmCommandArgument_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + cmCommandArgument_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + cmCommandArgument_yy_load_buffer_state(yyscanner ); + } + + for(;;) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 30 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 41 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 66 "cmCommandArgumentLexer.in.l" +{ + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2); + return cal_ENVCURLY; +} +case 2: +YY_RULE_SETUP +#line 72 "cmCommandArgumentLexer.in.l" +{ + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2); + return cal_NCURLY; +} +case 3: +YY_RULE_SETUP +#line 78 "cmCommandArgumentLexer.in.l" +{ + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2); + return cal_ATNAME; +} +case 4: +YY_RULE_SETUP +#line 84 "cmCommandArgumentLexer.in.l" +{ + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->DCURLYVariable; + return cal_DCURLY; +} +case 5: +YY_RULE_SETUP +#line 91 "cmCommandArgumentLexer.in.l" +{ + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->RCURLYVariable; + return cal_RCURLY; +} +case 6: +YY_RULE_SETUP +#line 98 "cmCommandArgumentLexer.in.l" +{ + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->ATVariable; + return cal_AT; +} +case 7: +YY_RULE_SETUP +#line 105 "cmCommandArgumentLexer.in.l" +{ + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + return cal_NAME; +} +case 8: +YY_RULE_SETUP +#line 111 "cmCommandArgumentLexer.in.l" +{ + if ( !yyextra->HandleEscapeSymbol(yylvalp, *(yytext+1)) ) + { + return cal_ERROR; + } + return cal_SYMBOL; +} +case 9: +/* rule 9 can match eol */ +YY_RULE_SETUP +#line 119 "cmCommandArgumentLexer.in.l" +{ + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + return cal_SYMBOL; +} +case 10: +YY_RULE_SETUP +#line 125 "cmCommandArgumentLexer.in.l" +{ + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->DOLLARVariable; + return cal_DOLLAR; +} +case 11: +YY_RULE_SETUP +#line 131 "cmCommandArgumentLexer.in.l" +{ + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->LCURLYVariable; + return cal_LCURLY; +} +case 12: +YY_RULE_SETUP +#line 137 "cmCommandArgumentLexer.in.l" +{ + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->BSLASHVariable; + return cal_BSLASH; +} +case 13: +YY_RULE_SETUP +#line 143 "cmCommandArgumentLexer.in.l" +{ + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->BSLASHVariable; + return cal_SYMBOL; +} +case 14: +YY_RULE_SETUP +#line 149 "cmCommandArgumentLexer.in.l" +ECHO; + YY_BREAK +#line 943 "cmCommandArgumentLexer.cxx" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(ESCAPES): +case YY_STATE_EOF(NOESCAPES): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * cmCommandArgument_yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( cmCommandArgument_yywrap(yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +return 0; /* this should not happend but it should silence a warning */ +} /* end of cmCommandArgument_yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = yyg->yytext_ptr; + register int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + cmCommandArgument_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + cmCommandArgument_yyrestart(yyin ,yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) cmCommandArgument_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 30 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + register int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + register char *yy_cp = yyg->yy_c_buf_p; + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 30 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 29); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + cmCommandArgument_yyrestart(yyin ,yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( cmCommandArgument_yywrap(yyscanner ) ) + return EOF; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void cmCommandArgument_yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + cmCommandArgument_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + cmCommandArgument_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + cmCommandArgument_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); + cmCommandArgument_yy_load_buffer_state(yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void cmCommandArgument_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * cmCommandArgument_yypop_buffer_state(); + * cmCommandArgument_yypush_buffer_state(new_buffer); + */ + cmCommandArgument_yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + cmCommandArgument_yy_load_buffer_state(yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (cmCommandArgument_yywrap()) processing, but the only time this flag + * is looked at is after cmCommandArgument_yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void cmCommandArgument_yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE cmCommandArgument_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) cmCommandArgument_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in cmCommandArgument_yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) cmCommandArgument_yyalloc(b->yy_buf_size + 2 ,yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in cmCommandArgument_yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + cmCommandArgument_yy_init_buffer(b,file ,yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with cmCommandArgument_yy_create_buffer() + * @param yyscanner The scanner object. + */ + void cmCommandArgument_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + cmCommandArgument_yyfree((void *) b->yy_ch_buf ,yyscanner ); + + cmCommandArgument_yyfree((void *) b ,yyscanner ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a cmCommandArgument_yyrestart() or at EOF. + */ + static void cmCommandArgument_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + cmCommandArgument_yy_flush_buffer(b ,yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then cmCommandArgument_yy_init_buffer was _probably_ + * called from cmCommandArgument_yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void cmCommandArgument_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + cmCommandArgument_yy_load_buffer_state(yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void cmCommandArgument_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + cmCommandArgument_yyensure_buffer_stack(yyscanner); + + /* This block is copied from cmCommandArgument_yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from cmCommandArgument_yy_switch_to_buffer. */ + cmCommandArgument_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void cmCommandArgument_yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + cmCommandArgument_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + cmCommandArgument_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void cmCommandArgument_yyensure_buffer_stack (yyscan_t yyscanner) +{ + int num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + yyg->yy_buffer_stack = (struct yy_buffer_state**)cmCommandArgument_yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in cmCommandArgument_yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)cmCommandArgument_yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in cmCommandArgument_yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE cmCommandArgument_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) cmCommandArgument_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in cmCommandArgument_yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + cmCommandArgument_yy_switch_to_buffer(b ,yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to cmCommandArgument_yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * cmCommandArgument_yy_scan_bytes() instead. + */ +YY_BUFFER_STATE cmCommandArgument_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner) +{ + + return cmCommandArgument_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to cmCommandArgument_yylex() will + * scan from a @e copy of @a yybytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE cmCommandArgument_yy_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) cmCommandArgument_yyalloc(n ,yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in cmCommandArgument_yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = cmCommandArgument_yy_scan_buffer(buf,n ,yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in cmCommandArgument_yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg , yyscan_t) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE cmCommandArgument_yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int cmCommandArgument_yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int cmCommandArgument_yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *cmCommandArgument_yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *cmCommandArgument_yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int cmCommandArgument_yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *cmCommandArgument_yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void cmCommandArgument_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param line_number + * @param yyscanner The scanner object. + */ +void cmCommandArgument_yyset_lineno (int line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "cmCommandArgument_yyset_lineno called with no buffer" , yyscanner); + + yylineno = line_number; +} + +/** Set the current column. + * @param column_no + * @param yyscanner The scanner object. + */ +void cmCommandArgument_yyset_column (int column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "cmCommandArgument_yyset_column called with no buffer" , yyscanner); + + yycolumn = column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * @param yyscanner The scanner object. + * @see cmCommandArgument_yy_switch_to_buffer + */ +void cmCommandArgument_yyset_in (FILE * in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = in_str ; +} + +void cmCommandArgument_yyset_out (FILE * out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = out_str ; +} + +int cmCommandArgument_yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void cmCommandArgument_yyset_debug (int bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* cmCommandArgument_yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ + +int cmCommandArgument_yylex_init(yyscan_t* ptr_yy_globals) + +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) cmCommandArgument_yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* cmCommandArgument_yylex_init_extra has the same functionality as cmCommandArgument_yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to cmCommandArgument_yyalloc in + * the yyextra field. + */ + +int cmCommandArgument_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals ) + +{ + struct yyguts_t dummy_yyguts; + + cmCommandArgument_yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) cmCommandArgument_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + cmCommandArgument_yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from cmCommandArgument_yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = 0; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = (char *) 0; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * cmCommandArgument_yylex_init() + */ + return 0; +} + +/* cmCommandArgument_yylex_destroy is for both reentrant and non-reentrant scanners. */ +int cmCommandArgument_yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + cmCommandArgument_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + cmCommandArgument_yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + cmCommandArgument_yyfree(yyg->yy_buffer_stack ,yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + cmCommandArgument_yyfree(yyg->yy_start_stack ,yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * cmCommandArgument_yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + cmCommandArgument_yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *cmCommandArgument_yyalloc (yy_size_t size , yyscan_t) +{ + return (void *) malloc( size ); +} + +void *cmCommandArgument_yyrealloc (void * ptr, yy_size_t size , yyscan_t) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void cmCommandArgument_yyfree (void * ptr , yyscan_t) +{ + free( (char *) ptr ); /* see cmCommandArgument_yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 149 "cmCommandArgumentLexer.in.l" + + + +/*--------------------------------------------------------------------------*/ +void cmCommandArgument_SetupEscapes(yyscan_t yyscanner, bool noEscapes) +{ + /* Hack into the internal flex-generated scanner to set the state. */ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if(noEscapes) + { + BEGIN(NOESCAPES); + } + else + { + BEGIN(ESCAPES); + } +} + diff --git a/Source/cmCommandArgumentLexer.h b/Source/cmCommandArgumentLexer.h new file mode 100644 index 0000000..828122b --- /dev/null +++ b/Source/cmCommandArgumentLexer.h @@ -0,0 +1,333 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCommandArgument_yyHEADER_H +#define cmCommandArgument_yyHEADER_H 1 +#define cmCommandArgument_yyIN_HEADER 1 + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +void cmCommandArgument_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void cmCommandArgument_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmCommandArgument_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void cmCommandArgument_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmCommandArgument_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmCommandArgument_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void cmCommandArgument_yypop_buffer_state (yyscan_t yyscanner ); + +YY_BUFFER_STATE cmCommandArgument_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmCommandArgument_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmCommandArgument_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +void *cmCommandArgument_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *cmCommandArgument_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void cmCommandArgument_yyfree (void * ,yyscan_t yyscanner ); + +/* Begin user sect3 */ + +#define cmCommandArgument_yywrap(n) 1 +#define YY_SKIP_YYWRAP + +#define yytext_ptr yytext_r + +#ifdef YY_HEADER_EXPORT_START_CONDITIONS +#define INITIAL 0 +#define ESCAPES 1 +#define NOESCAPES 2 + +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +int cmCommandArgument_yylex_init (yyscan_t* scanner); + +int cmCommandArgument_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int cmCommandArgument_yylex_destroy (yyscan_t yyscanner ); + +int cmCommandArgument_yyget_debug (yyscan_t yyscanner ); + +void cmCommandArgument_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE cmCommandArgument_yyget_extra (yyscan_t yyscanner ); + +void cmCommandArgument_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *cmCommandArgument_yyget_in (yyscan_t yyscanner ); + +void cmCommandArgument_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *cmCommandArgument_yyget_out (yyscan_t yyscanner ); + +void cmCommandArgument_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int cmCommandArgument_yyget_leng (yyscan_t yyscanner ); + +char *cmCommandArgument_yyget_text (yyscan_t yyscanner ); + +int cmCommandArgument_yyget_lineno (yyscan_t yyscanner ); + +void cmCommandArgument_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int cmCommandArgument_yywrap (yyscan_t yyscanner ); +#else +extern int cmCommandArgument_yywrap (yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int cmCommandArgument_yylex (yyscan_t yyscanner); + +#define YY_DECL int cmCommandArgument_yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + +#undef YY_NEW_FILE +#undef YY_FLUSH_BUFFER +#undef yy_set_bol +#undef yy_new_buffer +#undef yy_set_interactive +#undef YY_DO_BEFORE_ACTION + +#ifdef YY_DECL_IS_OURS +#undef YY_DECL_IS_OURS +#undef YY_DECL +#endif + +#undef cmCommandArgument_yyIN_HEADER +#endif /* cmCommandArgument_yyHEADER_H */ diff --git a/Source/cmCommandArgumentLexer.in.l b/Source/cmCommandArgumentLexer.in.l new file mode 100644 index 0000000..d10e50d --- /dev/null +++ b/Source/cmCommandArgumentLexer.in.l @@ -0,0 +1,161 @@ +%{ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run flex like this: + + flex --prefix=cmCommandArgument_yy --header-file=cmCommandArgumentLexer.h -ocmCommandArgumentLexer.cxx cmCommandArgumentLexer.in.l + +Modify cmCommandArgumentLexer.cxx: + - add #include "cmStandardIncludes.h" to top of file + - put header block at top of file + - remove TABs + - remove "yyscanner" argument from these methods: + yy_fatal_error, cmCommandArgument_yyalloc, cmCommandArgument_yyrealloc, cmCommandArgument_yyfree + - remove all YY_BREAK lines occurring right after return statements + - change while ( 1 ) to for(;;) + - add "return 0;" to end of cmCommandArgument_yylex + +Modify cmCommandArgumentLexer.h: + - remove TABs + - remove the yy_init_globals function + - remove the block that includes unistd.h + - remove #line directives (avoids bogus warning on old Sun) + +*/ + +#include "cmStandardLexer.h" + +#include "cmCommandArgumentParserHelper.h" + +/* Replace the lexer input function. */ +#undef YY_INPUT +#define YY_INPUT(buf, result, max_size) \ + { result = yyextra->LexInput(buf, max_size); } + +/* Include the set of tokens from the parser. */ +#include "cmCommandArgumentParserTokens.h" + +/*--------------------------------------------------------------------------*/ +%} + +%option reentrant +%option noyywrap +%option nounput +%pointer +%s ESCAPES +%s NOESCAPES + +%% + +\$ENV\{ { + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2); + return cal_ENVCURLY; +} + +\$[A-Za-z0-9/_.+-]+\{ { + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2); + return cal_NCURLY; +} + +@[A-Za-z0-9/_.+-]+@ { + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + yyextra->AllocateParserType(yylvalp, yytext+1, strlen(yytext)-2); + return cal_ATNAME; +} + +"${" { + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->DCURLYVariable; + return cal_DCURLY; +} + +"}" { + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->RCURLYVariable; + return cal_RCURLY; +} + +"@" { + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->ATVariable; + return cal_AT; +} + +[A-Za-z0-9/_.+-]+ { + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + return cal_NAME; +} + +\\. { + if ( !yyextra->HandleEscapeSymbol(yylvalp, *(yytext+1)) ) + { + return cal_ERROR; + } + return cal_SYMBOL; +} + +[^\${}\\@]+ { + //std::cerr << __LINE__ << " here: [" << yytext << "]" << std::endl; + yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + return cal_SYMBOL; +} + +"$" { + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->DOLLARVariable; + return cal_DOLLAR; +} + +"{" { + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->LCURLYVariable; + return cal_LCURLY; +} + +"\\" { + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->BSLASHVariable; + return cal_BSLASH; +} + +"\\" { + //yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + yylvalp->str = yyextra->BSLASHVariable; + return cal_SYMBOL; +} + +%% + +/*--------------------------------------------------------------------------*/ +void cmCommandArgument_SetupEscapes(yyscan_t yyscanner, bool noEscapes) +{ + /* Hack into the internal flex-generated scanner to set the state. */ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if(noEscapes) + { + BEGIN(NOESCAPES); + } + else + { + BEGIN(ESCAPES); + } +} diff --git a/Source/cmCommandArgumentParser.cxx b/Source/cmCommandArgumentParser.cxx new file mode 100644 index 0000000..696a6a8 --- /dev/null +++ b/Source/cmCommandArgumentParser.cxx @@ -0,0 +1,1835 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* Substitute the variable and function names. */ +#define yyparse cmCommandArgument_yyparse +#define yylex cmCommandArgument_yylex +#define yyerror cmCommandArgument_yyerror +#define yylval cmCommandArgument_yylval +#define yychar cmCommandArgument_yychar +#define yydebug cmCommandArgument_yydebug +#define yynerrs cmCommandArgument_yynerrs + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + cal_ENVCURLY = 258, + cal_NCURLY = 259, + cal_DCURLY = 260, + cal_DOLLAR = 261, + cal_LCURLY = 262, + cal_RCURLY = 263, + cal_NAME = 264, + cal_BSLASH = 265, + cal_SYMBOL = 266, + cal_AT = 267, + cal_ERROR = 268, + cal_ATNAME = 269 + }; +#endif +/* Tokens. */ +#define cal_ENVCURLY 258 +#define cal_NCURLY 259 +#define cal_DCURLY 260 +#define cal_DOLLAR 261 +#define cal_LCURLY 262 +#define cal_RCURLY 263 +#define cal_NAME 264 +#define cal_BSLASH 265 +#define cal_SYMBOL 266 +#define cal_AT 267 +#define cal_ERROR 268 +#define cal_ATNAME 269 + + + + +/* Copy the first part of user declarations. */ +#line 1 "cmCommandArgumentParser.y" + +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run bison like this: + + bison --yacc --name-prefix=cmCommandArgument_yy --defines=cmCommandArgumentParserTokens.h -ocmCommandArgumentParser.cxx cmCommandArgumentParser.y + +Modify cmCommandArgumentParser.cxx: + - remove TABs + - put header block at top of file + +*/ + +#include "cmStandardIncludes.h" + +/* Configure the parser to use a lexer object. */ +#define YYPARSE_PARAM yyscanner +#define YYLEX_PARAM yyscanner +#define YYERROR_VERBOSE 1 +#define cmCommandArgument_yyerror(x) \ + cmCommandArgumentError(yyscanner, x) +#define yyGetParser (cmCommandArgument_yyget_extra(yyscanner)) + +/* Make sure malloc and free are available on QNX. */ +#ifdef __QNX__ +# include +#endif + +/* Make sure the parser uses standard memory allocation. The default + generated parser malloc/free declarations do not work on all + platforms. */ +#include +#define YYMALLOC malloc +#define YYFREE free + +/*-------------------------------------------------------------------------*/ +#include "cmCommandArgumentParserHelper.h" /* Interface to parser object. */ +#include "cmCommandArgumentLexer.h" /* Interface to lexer object. */ +#include "cmCommandArgumentParserTokens.h" /* Need YYSTYPE for YY_DECL. */ + +/* Forward declare the lexer entry point. */ +YY_DECL; + +/* Internal utility functions. */ +static void cmCommandArgumentError(yyscan_t yyscanner, const char* message); + +#define YYDEBUG 1 +/* Configure the parser to support large input. */ +#define YYMAXDEPTH 100000 +#define YYINITDEPTH 10000 + +/* Disable some warnings in the generated code. */ +#ifdef __BORLANDC__ +# pragma warn -8004 /* Variable assigned a value that is not used. */ +# pragma warn -8008 /* condition always returns true */ +# pragma warn -8060 /* possibly incorrect assignment */ +# pragma warn -8066 /* unreachable code */ +#endif +#ifdef _MSC_VER +# pragma warning (disable: 4102) /* Unused goto label. */ +# pragma warning (disable: 4065) /* Switch statement contains default but no + case. */ +# pragma warning (disable: 4244) /* loss of precision */ +# pragma warning (disable: 4702) /* unreachable code */ +#endif + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 227 "cmCommandArgumentParser.cxx" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 25 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 40 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 15 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 10 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 24 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 33 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 269 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 5, 7, 10, 11, 14, 16, 18, + 20, 22, 24, 26, 28, 30, 34, 38, 42, 44, + 46, 49, 50, 53, 55 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 16, 0, -1, 17, -1, 18, -1, 18, 10, -1, + -1, 19, 18, -1, 20, -1, 21, -1, 9, -1, + 12, -1, 6, -1, 7, -1, 8, -1, 11, -1, + 3, 22, 8, -1, 4, 23, 8, -1, 5, 23, + 8, -1, 14, -1, 23, -1, 11, 22, -1, -1, + 24, 23, -1, 9, -1, 21, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint8 yyrline[] = +{ + 0, 116, 116, 123, 128, 134, 138, 144, 149, 155, + 160, 165, 170, 175, 180, 186, 192, 198, 204, 210, + 215, 221, 225, 231, 236 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "cal_ENVCURLY", "cal_NCURLY", + "cal_DCURLY", "\"$\"", "\"{\"", "\"}\"", "cal_NAME", "\"\\\\\"", + "cal_SYMBOL", "\"@\"", "cal_ERROR", "cal_ATNAME", "$accept", "Start", + "GoalWithOptionalBackSlash", "Goal", "String", "OuterText", "Variable", + "EnvVarName", "MultipleIds", "ID", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 15, 16, 17, 17, 18, 18, 19, 19, 20, + 20, 20, 20, 20, 20, 21, 21, 21, 21, 22, + 22, 23, 23, 24, 24 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 1, 2, 0, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, + 2, 0, 2, 1, 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 5, 21, 21, 21, 11, 12, 13, 9, 14, 10, + 18, 0, 2, 3, 5, 7, 8, 23, 21, 24, + 0, 19, 21, 0, 0, 1, 4, 6, 20, 15, + 22, 16, 17 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 11, 12, 13, 14, 15, 19, 20, 21, 22 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -3 +static const yytype_int8 yypact[] = +{ + 0, 14, 26, 26, -3, -3, -3, -3, -3, -3, + -3, 10, -3, 3, 0, -3, -3, -3, 14, -3, + 7, -3, 26, 13, 16, -3, -3, -3, -3, -3, + -3, -3, -3 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -3, -3, -3, 8, -3, -3, 2, 9, -2, -3 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const yytype_uint8 yytable[] = +{ + 23, 24, 16, 1, 2, 3, 4, 5, 6, 7, + 25, 8, 9, 26, 10, 29, 16, 1, 2, 3, + 30, 31, 27, 17, 32, 18, 0, 28, 10, 1, + 2, 3, 0, 0, 0, 17, 0, 0, 0, 0, + 10 +}; + +static const yytype_int8 yycheck[] = +{ + 2, 3, 0, 3, 4, 5, 6, 7, 8, 9, + 0, 11, 12, 10, 14, 8, 14, 3, 4, 5, + 22, 8, 14, 9, 8, 11, -1, 18, 14, 3, + 4, 5, -1, -1, -1, 9, -1, -1, -1, -1, + 14 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 3, 4, 5, 6, 7, 8, 9, 11, 12, + 14, 16, 17, 18, 19, 20, 21, 9, 11, 21, + 22, 23, 24, 23, 23, 0, 10, 18, 22, 8, + 23, 8, 8 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval) +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + /* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 117 "cmCommandArgumentParser.y" + { + (yyval.str) = 0; + yyGetParser->SetResult((yyvsp[(1) - (1)].str)); +} + break; + + case 3: +#line 124 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 4: +#line 129 "cmCommandArgumentParser.y" + { + (yyval.str) = yyGetParser->CombineUnions((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); +} + break; + + case 5: +#line 134 "cmCommandArgumentParser.y" + { + (yyval.str) = 0; +} + break; + + case 6: +#line 139 "cmCommandArgumentParser.y" + { + (yyval.str) = yyGetParser->CombineUnions((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); +} + break; + + case 7: +#line 145 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 8: +#line 150 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 9: +#line 156 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 10: +#line 161 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 11: +#line 166 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 12: +#line 171 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 13: +#line 176 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 14: +#line 181 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 15: +#line 187 "cmCommandArgumentParser.y" + { + (yyval.str) = yyGetParser->ExpandSpecialVariable((yyvsp[(1) - (3)].str),(yyvsp[(2) - (3)].str)); + //std::cerr << __LINE__ << " here: [" << $1 << "] [" << $2 << "] [" << $3 << "]" << std::endl; +} + break; + + case 16: +#line 193 "cmCommandArgumentParser.y" + { + (yyval.str) = yyGetParser->ExpandSpecialVariable((yyvsp[(1) - (3)].str),(yyvsp[(2) - (3)].str)); + //std::cerr << __LINE__ << " here: [" << $1 << "] [" << $2 << "] [" << $3 << "]" << std::endl; +} + break; + + case 17: +#line 199 "cmCommandArgumentParser.y" + { + (yyval.str) = yyGetParser->ExpandVariable((yyvsp[(2) - (3)].str)); + //std::cerr << __LINE__ << " here: [" << $1 << "] [" << $2 << "] [" << $3 << "]" << std::endl; +} + break; + + case 18: +#line 205 "cmCommandArgumentParser.y" + { + (yyval.str) = yyGetParser->ExpandVariableForAt((yyvsp[(1) - (1)].str)); +} + break; + + case 19: +#line 211 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 20: +#line 216 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (2)].str); +} + break; + + case 21: +#line 221 "cmCommandArgumentParser.y" + { + (yyval.str) = 0; +} + break; + + case 22: +#line 226 "cmCommandArgumentParser.y" + { + (yyval.str) = yyGetParser->CombineUnions((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); +} + break; + + case 23: +#line 232 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + case 24: +#line 237 "cmCommandArgumentParser.y" + { + (yyval.str) = (yyvsp[(1) - (1)].str); +} + break; + + +/* Line 1267 of yacc.c. */ +#line 1606 "cmCommandArgumentParser.cxx" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 242 "cmCommandArgumentParser.y" + +/* End of grammar */ + +/*--------------------------------------------------------------------------*/ +void cmCommandArgumentError(yyscan_t yyscanner, const char* message) +{ + yyGetParser->Error(message); +} + + diff --git a/Source/cmCommandArgumentParser.y b/Source/cmCommandArgumentParser.y new file mode 100644 index 0000000..3e700c8 --- /dev/null +++ b/Source/cmCommandArgumentParser.y @@ -0,0 +1,245 @@ +%{ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run bison like this: + + bison --yacc --name-prefix=cmCommandArgument_yy --defines=cmCommandArgumentParserTokens.h -ocmCommandArgumentParser.cxx cmCommandArgumentParser.y + +Modify cmCommandArgumentParser.cxx: + - remove TABs + - put header block at top of file + +*/ + +#include "cmStandardIncludes.h" + +/* Configure the parser to use a lexer object. */ +#define YYPARSE_PARAM yyscanner +#define YYLEX_PARAM yyscanner +#define YYERROR_VERBOSE 1 +#define cmCommandArgument_yyerror(x) \ + cmCommandArgumentError(yyscanner, x) +#define yyGetParser (cmCommandArgument_yyget_extra(yyscanner)) + +/* Make sure malloc and free are available on QNX. */ +#ifdef __QNX__ +# include +#endif + +/* Make sure the parser uses standard memory allocation. The default + generated parser malloc/free declarations do not work on all + platforms. */ +#include +#define YYMALLOC malloc +#define YYFREE free + +/*-------------------------------------------------------------------------*/ +#include "cmCommandArgumentParserHelper.h" /* Interface to parser object. */ +#include "cmCommandArgumentLexer.h" /* Interface to lexer object. */ +#include "cmCommandArgumentParserTokens.h" /* Need YYSTYPE for YY_DECL. */ + +/* Forward declare the lexer entry point. */ +YY_DECL; + +/* Internal utility functions. */ +static void cmCommandArgumentError(yyscan_t yyscanner, const char* message); + +#define YYDEBUG 1 +/* Configure the parser to support large input. */ +#define YYMAXDEPTH 100000 +#define YYINITDEPTH 10000 + +/* Disable some warnings in the generated code. */ +#ifdef __BORLANDC__ +# pragma warn -8004 /* Variable assigned a value that is not used. */ +# pragma warn -8008 /* condition always returns true */ +# pragma warn -8060 /* possibly incorrect assignment */ +# pragma warn -8066 /* unreachable code */ +#endif +#ifdef _MSC_VER +# pragma warning (disable: 4102) /* Unused goto label. */ +# pragma warning (disable: 4065) /* Switch statement contains default but no + case. */ +# pragma warning (disable: 4244) /* loss of precision */ +# pragma warning (disable: 4702) /* unreachable code */ +#endif +%} + +/* Generate a reentrant parser object. */ +%pure_parser + +/* +%union { + char* string; +} +*/ + +/*-------------------------------------------------------------------------*/ +/* Tokens */ +%token cal_ENVCURLY +%token cal_NCURLY +%token cal_DCURLY +%token cal_DOLLAR "$" +%token cal_LCURLY "{" +%token cal_RCURLY "}" +%token cal_NAME +%token cal_BSLASH "\\" +%token cal_SYMBOL +%token cal_AT "@" +%token cal_ERROR +%token cal_ATNAME + +/*-------------------------------------------------------------------------*/ +/* grammar */ +%% + + +Start: +GoalWithOptionalBackSlash +{ + $$ = 0; + yyGetParser->SetResult($1); +} + +GoalWithOptionalBackSlash: +Goal +{ + $$ = $1; +} +| +Goal cal_BSLASH +{ + $$ = yyGetParser->CombineUnions($1, $2); +} + +Goal: +{ + $$ = 0; +} +| +String Goal +{ + $$ = yyGetParser->CombineUnions($1, $2); +} + +String: +OuterText +{ + $$ = $1; +} +| +Variable +{ + $$ = $1; +} + +OuterText: +cal_NAME +{ + $$ = $1; +} +| +cal_AT +{ + $$ = $1; +} +| +cal_DOLLAR +{ + $$ = $1; +} +| +cal_LCURLY +{ + $$ = $1; +} +| +cal_RCURLY +{ + $$ = $1; +} +| +cal_SYMBOL +{ + $$ = $1; +} + +Variable: +cal_ENVCURLY EnvVarName cal_RCURLY +{ + $$ = yyGetParser->ExpandSpecialVariable($1,$2); + //std::cerr << __LINE__ << " here: [" << $1 << "] [" << $2 << "] [" << $3 << "]" << std::endl; +} +| +cal_NCURLY MultipleIds cal_RCURLY +{ + $$ = yyGetParser->ExpandSpecialVariable($1,$2); + //std::cerr << __LINE__ << " here: [" << $1 << "] [" << $2 << "] [" << $3 << "]" << std::endl; +} +| +cal_DCURLY MultipleIds cal_RCURLY +{ + $$ = yyGetParser->ExpandVariable($2); + //std::cerr << __LINE__ << " here: [" << $1 << "] [" << $2 << "] [" << $3 << "]" << std::endl; +} +| +cal_ATNAME +{ + $$ = yyGetParser->ExpandVariableForAt($1); +} + +EnvVarName: +MultipleIds +{ + $$ = $1; +} +| +cal_SYMBOL EnvVarName +{ + $$ = $1; +} + +MultipleIds: +{ + $$ = 0; +} +| +ID MultipleIds +{ + $$ = yyGetParser->CombineUnions($1, $2); +} + +ID: +cal_NAME +{ + $$ = $1; +} +| +Variable +{ + $$ = $1; +} + + +%% +/* End of grammar */ + +/*--------------------------------------------------------------------------*/ +void cmCommandArgumentError(yyscan_t yyscanner, const char* message) +{ + yyGetParser->Error(message); +} + diff --git a/Source/cmCommandArgumentParserHelper.cxx b/Source/cmCommandArgumentParserHelper.cxx new file mode 100644 index 0000000..a781767 --- /dev/null +++ b/Source/cmCommandArgumentParserHelper.cxx @@ -0,0 +1,367 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCommandArgumentParserHelper.h" + +#include "cmSystemTools.h" +#include "cmCommandArgumentLexer.h" + +#include "cmMakefile.h" + +int cmCommandArgument_yyparse( yyscan_t yyscanner ); +// +cmCommandArgumentParserHelper::cmCommandArgumentParserHelper() +{ + this->WarnUninitialized = false; + this->CheckSystemVars = false; + this->FileLine = -1; + this->FileName = 0; + this->RemoveEmpty = true; + this->EmptyVariable[0] = 0; + strcpy(this->DCURLYVariable, "${"); + strcpy(this->RCURLYVariable, "}"); + strcpy(this->ATVariable, "@"); + strcpy(this->DOLLARVariable, "$"); + strcpy(this->LCURLYVariable, "{"); + strcpy(this->BSLASHVariable, "\\"); + + this->NoEscapeMode = false; + this->ReplaceAtSyntax = false; +} + + +cmCommandArgumentParserHelper::~cmCommandArgumentParserHelper() +{ + this->CleanupParser(); +} + +void cmCommandArgumentParserHelper::SetLineFile(long line, const char* file) +{ + this->FileLine = line; + this->FileName = file; +} + +char* cmCommandArgumentParserHelper::AddString(const char* str) +{ + if ( !str || !*str ) + { + return this->EmptyVariable; + } + char* stVal = new char[strlen(str)+1]; + strcpy(stVal, str); + this->Variables.push_back(stVal); + return stVal; +} + +char* cmCommandArgumentParserHelper::ExpandSpecialVariable(const char* key, + const char* var) +{ + if ( !key ) + { + return this->ExpandVariable(var); + } + if(!var) + { + return this->EmptyVariable; + } + if ( strcmp(key, "ENV") == 0 ) + { + char *ptr = getenv(var); + if (ptr) + { + if (this->EscapeQuotes) + { + return this->AddString(cmSystemTools::EscapeQuotes(ptr).c_str()); + } + else + { + return ptr; + } + } + return this->EmptyVariable; + } + if ( strcmp(key, "CACHE") == 0 ) + { + if(const char* c = this->Makefile->GetCacheManager()->GetCacheValue(var)) + { + if(this->EscapeQuotes) + { + return this->AddString(cmSystemTools::EscapeQuotes(c).c_str()); + } + else + { + return this->AddString(c); + } + } + return this->EmptyVariable; + } + cmOStringStream e; + e << "Syntax $" << key << "{} is not supported. " + << "Only ${}, $ENV{}, and $CACHE{} are allowed."; + this->SetError(e.str()); + return 0; +} + +char* cmCommandArgumentParserHelper::ExpandVariable(const char* var) +{ + if(!var) + { + return 0; + } + if(this->FileLine >= 0 && strcmp(var, "CMAKE_CURRENT_LIST_LINE") == 0) + { + cmOStringStream ostr; + ostr << this->FileLine; + return this->AddString(ostr.str().c_str()); + } + const char* value = this->Makefile->GetDefinition(var); + if(!value && !this->RemoveEmpty) + { + // check to see if we need to print a warning + // if strict mode is on and the variable has + // not been "cleared"/initialized with a set(foo ) call + if(this->WarnUninitialized && !this->Makefile->VariableInitialized(var)) + { + if (this->CheckSystemVars || + cmSystemTools::IsSubDirectory(this->FileName, + this->Makefile->GetHomeDirectory()) || + cmSystemTools::IsSubDirectory(this->FileName, + this->Makefile->GetHomeOutputDirectory())) + { + cmOStringStream msg; + cmListFileBacktrace bt; + cmListFileContext lfc; + lfc.FilePath = this->FileName; + lfc.Line = this->FileLine; + bt.push_back(lfc); + msg << "uninitialized variable \'" << var << "\'"; + this->Makefile->GetCMakeInstance()->IssueMessage(cmake::AUTHOR_WARNING, + msg.str().c_str(), bt); + } + } + return 0; + } + if (this->EscapeQuotes && value) + { + return this->AddString(cmSystemTools::EscapeQuotes(value).c_str()); + } + return this->AddString(value); +} + +char* cmCommandArgumentParserHelper::ExpandVariableForAt(const char* var) +{ + if(this->ReplaceAtSyntax) + { + // try to expand the variable + char* ret = this->ExpandVariable(var); + // if the return was 0 and we want to replace empty strings + // then return an empty string + if(!ret && this->RemoveEmpty) + { + return this->AddString(ret); + } + // if the ret was not 0, then return it + if(ret) + { + return ret; + } + } + // at this point we want to put it back because of one of these cases: + // - this->ReplaceAtSyntax is false + // - this->ReplaceAtSyntax is true, but this->RemoveEmpty is false, + // and the variable was not defined + std::string ref = "@"; + ref += var; + ref += "@"; + return this->AddString(ref.c_str()); +} + +char* cmCommandArgumentParserHelper::CombineUnions(char* in1, char* in2) +{ + if ( !in1 ) + { + return in2; + } + else if ( !in2 ) + { + return in1; + } + size_t len = strlen(in1) + strlen(in2) + 1; + char* out = new char [ len ]; + strcpy(out, in1); + strcat(out, in2); + this->Variables.push_back(out); + return out; +} + +void cmCommandArgumentParserHelper::AllocateParserType +(cmCommandArgumentParserHelper::ParserType* pt,const char* str, int len) +{ + pt->str = 0; + if ( len == 0 ) + { + len = static_cast(strlen(str)); + } + if ( len == 0 ) + { + return; + } + pt->str = new char[ len + 1 ]; + strncpy(pt->str, str, len); + pt->str[len] = 0; + this->Variables.push_back(pt->str); +} + +bool cmCommandArgumentParserHelper::HandleEscapeSymbol +(cmCommandArgumentParserHelper::ParserType* pt, char symbol) +{ + switch ( symbol ) + { + case '\\': + case '"': + case ' ': + case '#': + case '(': + case ')': + case '$': + case '@': + case '^': + this->AllocateParserType(pt, &symbol, 1); + break; + case ';': + this->AllocateParserType(pt, "\\;", 2); + break; + case 't': + this->AllocateParserType(pt, "\t", 1); + break; + case 'n': + this->AllocateParserType(pt, "\n", 1); + break; + case 'r': + this->AllocateParserType(pt, "\r", 1); + break; + case '0': + this->AllocateParserType(pt, "\0", 1); + break; + default: + { + cmOStringStream e; + e << "Invalid escape sequence \\" << symbol; + this->SetError(e.str()); + } + return false; + } + return true; +} + +void cmCommandArgument_SetupEscapes(yyscan_t yyscanner, bool noEscapes); + +int cmCommandArgumentParserHelper::ParseString(const char* str, int verb) +{ + if ( !str) + { + return 0; + } + this->Verbose = verb; + this->InputBuffer = str; + this->InputBufferPos = 0; + this->CurrentLine = 0; + + this->Result = ""; + + yyscan_t yyscanner; + cmCommandArgument_yylex_init(&yyscanner); + cmCommandArgument_yyset_extra(this, yyscanner); + cmCommandArgument_SetupEscapes(yyscanner, this->NoEscapeMode); + int res = cmCommandArgument_yyparse(yyscanner); + cmCommandArgument_yylex_destroy(yyscanner); + if ( res != 0 ) + { + return 0; + } + + this->CleanupParser(); + + if ( Verbose ) + { + std::cerr << "Expanding [" << str << "] produced: [" + << this->Result.c_str() << "]" << std::endl; + } + return 1; +} + +void cmCommandArgumentParserHelper::CleanupParser() +{ + std::vector::iterator sit; + for ( sit = this->Variables.begin(); + sit != this->Variables.end(); + ++ sit ) + { + delete [] *sit; + } + this->Variables.erase(this->Variables.begin(), this->Variables.end()); +} + +int cmCommandArgumentParserHelper::LexInput(char* buf, int maxlen) +{ + if ( maxlen < 1 ) + { + return 0; + } + if ( this->InputBufferPos < this->InputBuffer.size() ) + { + buf[0] = this->InputBuffer[ this->InputBufferPos++ ]; + if ( buf[0] == '\n' ) + { + this->CurrentLine ++; + } + return(1); + } + else + { + buf[0] = '\n'; + return( 0 ); + } +} + +void cmCommandArgumentParserHelper::Error(const char* str) +{ + unsigned long pos = static_cast(this->InputBufferPos); + cmOStringStream ostr; + ostr << str << " (" << pos << ")"; + this->SetError(ostr.str()); +} + +void cmCommandArgumentParserHelper::SetMakefile(const cmMakefile* mf) +{ + this->Makefile = mf; + this->WarnUninitialized = mf->GetCMakeInstance()->GetWarnUninitialized(); + this->CheckSystemVars = mf->GetCMakeInstance()->GetCheckSystemVars(); +} + +void cmCommandArgumentParserHelper::SetResult(const char* value) +{ + if ( !value ) + { + this->Result = ""; + return; + } + this->Result = value; +} + +void cmCommandArgumentParserHelper::SetError(std::string const& msg) +{ + // Keep only the first error. + if(this->ErrorString.empty()) + { + this->ErrorString = msg; + } +} diff --git a/Source/cmCommandArgumentParserHelper.h b/Source/cmCommandArgumentParserHelper.h new file mode 100644 index 0000000..cdb832b --- /dev/null +++ b/Source/cmCommandArgumentParserHelper.h @@ -0,0 +1,110 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCommandArgumentParserHelper_h +#define cmCommandArgumentParserHelper_h + +#include "cmStandardIncludes.h" + +#define YYSTYPE cmCommandArgumentParserHelper::ParserType +#define YYSTYPE_IS_DECLARED +#define YY_EXTRA_TYPE cmCommandArgumentParserHelper* +#define YY_DECL int cmCommandArgument_yylex(YYSTYPE* yylvalp,\ + yyscan_t yyscanner) + +/** \class cmCommandArgumentParserHelper + * \brief Helper class for parsing java source files + * + * Finds dependencies for java file and list of outputs + */ + +class cmMakefile; + +class cmCommandArgumentParserHelper +{ +public: + typedef struct { + char* str; + } ParserType; + + cmCommandArgumentParserHelper(); + ~cmCommandArgumentParserHelper(); + + int ParseString(const char* str, int verb); + + // For the lexer: + void AllocateParserType(cmCommandArgumentParserHelper::ParserType* pt, + const char* str, int len = 0); + bool HandleEscapeSymbol(cmCommandArgumentParserHelper::ParserType* pt, + char symbol); + + int LexInput(char* buf, int maxlen); + void Error(const char* str); + + // For yacc + char* CombineUnions(char* in1, char* in2); + + char* ExpandSpecialVariable(const char* key, const char* var); + char* ExpandVariable(const char* var); + char* ExpandVariableForAt(const char* var); + void SetResult(const char* value); + + void SetMakefile(const cmMakefile* mf); + + std::string& GetResult() { return this->Result; } + + void SetLineFile(long line, const char* file); + void SetEscapeQuotes(bool b) { this->EscapeQuotes = b; } + void SetNoEscapeMode(bool b) { this->NoEscapeMode = b; } + void SetReplaceAtSyntax(bool b) { this->ReplaceAtSyntax = b; } + void SetRemoveEmpty(bool b) { this->RemoveEmpty = b; } + + const char* GetError() { return this->ErrorString.c_str(); } + char EmptyVariable[1]; + char DCURLYVariable[3]; + char RCURLYVariable[3]; + char ATVariable[3]; + char DOLLARVariable[3]; + char LCURLYVariable[3]; + char BSLASHVariable[3]; + +private: + cmStdString::size_type InputBufferPos; + cmStdString InputBuffer; + std::vector OutputBuffer; + int CurrentLine; + int Verbose; + + void Print(const char* place, const char* str); + void SafePrintMissing(const char* str, int line, int cnt); + + char* AddString(const char* str); + + void CleanupParser(); + void SetError(std::string const& msg); + + std::vector Variables; + const cmMakefile* Makefile; + std::string Result; + const char* FileName; + bool WarnUninitialized; + bool CheckSystemVars; + long FileLine; + bool EscapeQuotes; + std::string ErrorString; + bool NoEscapeMode; + bool ReplaceAtSyntax; + bool RemoveEmpty; +}; + +#endif + + diff --git a/Source/cmCommandArgumentParserTokens.h b/Source/cmCommandArgumentParserTokens.h new file mode 100644 index 0000000..7fb58e2 --- /dev/null +++ b/Source/cmCommandArgumentParserTokens.h @@ -0,0 +1,92 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + cal_ENVCURLY = 258, + cal_NCURLY = 259, + cal_DCURLY = 260, + cal_DOLLAR = 261, + cal_LCURLY = 262, + cal_RCURLY = 263, + cal_NAME = 264, + cal_BSLASH = 265, + cal_SYMBOL = 266, + cal_AT = 267, + cal_ERROR = 268, + cal_ATNAME = 269 + }; +#endif +/* Tokens. */ +#define cal_ENVCURLY 258 +#define cal_NCURLY 259 +#define cal_DCURLY 260 +#define cal_DOLLAR 261 +#define cal_LCURLY 262 +#define cal_RCURLY 263 +#define cal_NAME 264 +#define cal_BSLASH 265 +#define cal_SYMBOL 266 +#define cal_AT 267 +#define cal_ERROR 268 +#define cal_ATNAME 269 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + diff --git a/Source/cmCommandArgumentsHelper.cxx b/Source/cmCommandArgumentsHelper.cxx new file mode 100644 index 0000000..1c906a6 --- /dev/null +++ b/Source/cmCommandArgumentsHelper.cxx @@ -0,0 +1,307 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmCommandArgumentsHelper.h" + +cmCommandArgument::cmCommandArgument(cmCommandArgumentsHelper* args, + const char* key, + cmCommandArgumentGroup* group) +:Key(key) +,Group(group) +,WasActive(false) +,ArgumentsBeforeEmpty(true) +,CurrentIndex(0) +{ + if (args!=0) + { + args->AddArgument(this); + } + + if (this->Group!=0) + { + this->Group->ContainedArguments.push_back(this); + } +} + +void cmCommandArgument::Reset() +{ + this->WasActive =false; + this->CurrentIndex = 0; + this->DoReset(); +} + +void cmCommandArgument::Follows(const cmCommandArgument* arg) +{ + this->ArgumentsBeforeEmpty = false; + this->ArgumentsBefore.insert(arg); +} + +void cmCommandArgument::FollowsGroup(const cmCommandArgumentGroup* group) +{ + if (group!=0) + { + this->ArgumentsBeforeEmpty = false; + for(std::vector::const_iterator + argIt= group->ContainedArguments.begin(); + argIt != group->ContainedArguments.end(); + ++argIt) + { + this->ArgumentsBefore.insert(*argIt); + } + } +} + +bool cmCommandArgument::MayFollow(const cmCommandArgument* current) const +{ + if (this->ArgumentsBeforeEmpty) + { + return true; + } + + std::set::const_iterator argIt + = this->ArgumentsBefore.find(current); + if (argIt != this->ArgumentsBefore.end()) + { + return true; + } + + return false; +} + +bool cmCommandArgument::KeyMatches(const std::string& key) const +{ + if ((this->Key==0) || (this->Key[0]=='\0')) + { + return true; + } + return (key==this->Key); +} + +void cmCommandArgument::ApplyOwnGroup() +{ + if (this->Group!=0) + { + for (std::vector::const_iterator + it = this->Group->ContainedArguments.begin(); + it != this->Group->ContainedArguments.end(); + ++it) + { + if(*it != this) + { + this->ArgumentsBefore.insert(*it); + } + } + } +} + +void cmCommandArgument::Activate() +{ + this->WasActive = true; + this->CurrentIndex = 0; +} + +bool cmCommandArgument::Consume(const std::string& arg) +{ + bool res=this->DoConsume(arg, this->CurrentIndex); + this->CurrentIndex++; + return res; +} + + +cmCAStringVector::cmCAStringVector(cmCommandArgumentsHelper* args, + const char* key, + cmCommandArgumentGroup* group) +:cmCommandArgument(args, key, group) +,Ignore(0) +{ + if ((key==0) || (*key==0)) + { + this->DataStart = 0; + } + else + { + this->DataStart = 1; + } +} + +bool cmCAStringVector::DoConsume(const std::string& arg,unsigned int index) +{ + if (index >= this->DataStart) + { + if ((this->Ignore==0) || (arg != this->Ignore)) + { + this->Vector.push_back(arg); + } + } + + return false; +} + +void cmCAStringVector::DoReset() +{ + this->Vector.clear(); +} + +cmCAString::cmCAString(cmCommandArgumentsHelper* args, + const char* key, + cmCommandArgumentGroup* group) +:cmCommandArgument(args, key, group) +{ + if ((key==0) || (*key==0)) + { + this->DataStart = 0; + } + else + { + this->DataStart = 1; + } +} + +bool cmCAString::DoConsume(const std::string& arg, unsigned int index) +{ + if (index == this->DataStart) + { + this->String = arg; + } + + return index >= this->DataStart; +} + +void cmCAString::DoReset() +{ + this->String = this->DefaultString; +} + +cmCAEnabler::cmCAEnabler(cmCommandArgumentsHelper* args, + const char* key, + cmCommandArgumentGroup* group) +:cmCommandArgument(args, key, group) +,Enabled(false) +{} + +bool cmCAEnabler::DoConsume(const std::string&, unsigned int index) +{ + if (index==0) + { + this->Enabled = true; + } + return true; +} + +void cmCAEnabler::DoReset() +{ + this->Enabled = false; +} + +cmCADisabler::cmCADisabler(cmCommandArgumentsHelper* args, + const char* key, + cmCommandArgumentGroup* group) +:cmCommandArgument(args, key, group) +,Enabled(true) +{} + +bool cmCADisabler::DoConsume(const std::string&, unsigned int index) +{ + if (index==0) + { + this->Enabled = false; + } + return true; +} + +void cmCADisabler::DoReset() +{ + this->Enabled = true; +} + +void cmCommandArgumentGroup::Follows(const cmCommandArgument* arg) +{ + for(std::vector::iterator + it = this->ContainedArguments.begin(); + it != this->ContainedArguments.end(); + ++it) + { + (*it)->Follows(arg); + } +} + +void cmCommandArgumentGroup::FollowsGroup(const cmCommandArgumentGroup* group) +{ + for(std::vector::iterator + it = this->ContainedArguments.begin(); + it != this->ContainedArguments.end(); + ++it) + { + (*it)->FollowsGroup(group); + } +} + +void cmCommandArgumentsHelper::Parse(const std::vector* args, + std::vector* unconsumedArgs) +{ + if(args==0) + { + return; + } + + for(std::vector::iterator + argIt = this->Arguments.begin(); + argIt != this->Arguments.end(); + ++argIt) + { + (*argIt)->ApplyOwnGroup(); + (*argIt)->Reset(); + } + + cmCommandArgument* activeArgument = 0; + const cmCommandArgument* previousArgument = 0; + for(std::vector::const_iterator it = args->begin(); + it != args->end(); + ++it) + { + for(std::vector::iterator + argIt = this->Arguments.begin(); + argIt != this->Arguments.end(); + ++argIt) + { + if ((*argIt)->KeyMatches(*it) && ((*argIt)->MayFollow(previousArgument))) + { + activeArgument = *argIt; + activeArgument->Activate(); + break; + } + } + + if (activeArgument) + { + bool argDone = activeArgument->Consume(*it); + previousArgument = activeArgument; + if (argDone) + { + activeArgument = 0; + } + } + else + { + if (unconsumedArgs!=0) + { + unconsumedArgs->push_back(*it); + } + } + } +} + +void cmCommandArgumentsHelper::AddArgument(cmCommandArgument* arg) +{ + this->Arguments.push_back(arg); +} + diff --git a/Source/cmCommandArgumentsHelper.h b/Source/cmCommandArgumentsHelper.h new file mode 100644 index 0000000..cb33ccd --- /dev/null +++ b/Source/cmCommandArgumentsHelper.h @@ -0,0 +1,207 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCommandArgumentsHelper_h +#define cmCommandArgumentsHelper_h + +#include "cmStandardIncludes.h" + +class cmCommandArgumentsHelper; +class cmCommandArgumentGroup; + +/* cmCommandArgumentsHelper, cmCommandArgumentGroup and cmCommandArgument (i.e. +its derived classes cmCAXXX can be used to simplify the processing of +arguments to cmake commands. Maybe they can also be used to generate +documentation. + +For every argument supported by a command one cmCommandArgument is created +and added to cmCommandArgumentsHelper. cmCommand has a cmCommandArgumentsHelper +as member variable so this should be used. + +The order of the arguments is defined using the Follows(arg) method. It says +that this argument follows immediateley the given argument. It can be used +with multiple arguments if the argument can follow after different arguments. + +Arguments can be arranged in groups using cmCommandArgumentGroup. Every +member of a group can follow any other member of the group. These groups +can also be used to define the order. + +Once all arguments and groups are set up, cmCommandArgumentsHelper::Parse() +is called and afterwards the values of the arguments can be evaluated. + +For an example see cmExportCommand.cxx. +*/ +class cmCommandArgument +{ + public: + cmCommandArgument(cmCommandArgumentsHelper* args, + const char* key, + cmCommandArgumentGroup* group=0); + virtual ~cmCommandArgument() {} + + /// this argument may follow after arg. 0 means it comes first. + void Follows(const cmCommandArgument* arg); + + /// this argument may follow after any of the arguments in the given group + void FollowsGroup(const cmCommandArgumentGroup* group); + + /// Returns true if the argument was found in the argument list + bool WasFound() const {return this->WasActive;} + + // The following methods are only called from + // cmCommandArgumentsHelper::Parse(), but making this a friend would + // give it access to everything + + /// Make the current argument the currently active argument + void Activate(); + /// Consume the current string + bool Consume(const std::string& arg); + + /// Return true if this argument may follow after the given argument. + bool MayFollow(const cmCommandArgument* current) const; + + /** Returns true if the given key matches the key for this argument. + If this argument has an empty key everything matches. */ + bool KeyMatches(const std::string& key) const; + + /// Make this argument follow all members of the own group + void ApplyOwnGroup(); + + /// Reset argument, so it's back to its initial state + void Reset(); + private: + const char* Key; + std::set ArgumentsBefore; + cmCommandArgumentGroup* Group; + bool WasActive; + bool ArgumentsBeforeEmpty; + unsigned int CurrentIndex; + + virtual bool DoConsume(const std::string& arg, unsigned int index) = 0; + virtual void DoReset() = 0; +}; + +/** cmCAStringVector is to be used for arguments which can consist of more +than one string, e.g. the FILES argument in INSTALL(FILES f1 f2 f3 ...). */ +class cmCAStringVector : public cmCommandArgument +{ + public: + cmCAStringVector(cmCommandArgumentsHelper* args, + const char* key, + cmCommandArgumentGroup* group=0); + + /// Return the vector of strings + const std::vector& GetVector() const {return this->Vector;} + + /** Is there a keyword which should be skipped in + the arguments (e.g. ARGS for ADD_CUSTOM_COMMAND) ? */ + void SetIgnore(const char* ignore) {this->Ignore=ignore;} + private: + std::vector Vector; + unsigned int DataStart; + const char* Ignore; + cmCAStringVector(); + virtual bool DoConsume(const std::string& arg, unsigned int index); + virtual void DoReset(); +}; + +/** cmCAString is to be used for arguments which consist of one value, +e.g. the executable name in ADD_EXECUTABLE(). */ +class cmCAString : public cmCommandArgument +{ + public: + cmCAString(cmCommandArgumentsHelper* args, + const char* key, + cmCommandArgumentGroup* group=0); + + /// Return the string + const std::string& GetString() const {return this->String;} + const char* GetCString() const {return this->String.c_str();} + void SetDefaultString(const char* text) + {this->DefaultString = (text ? text : "");} + private: + std::string String; + std::string DefaultString; + unsigned int DataStart; + virtual bool DoConsume(const std::string& arg, unsigned int index); + virtual void DoReset(); + cmCAString(); +}; + +/** cmCAEnabler is to be used for options which are off by default and can be +enabled using a special argument, e.g. EXCLUDE_FROM_ALL in ADD_EXECUTABLE(). */ +class cmCAEnabler : public cmCommandArgument +{ + public: + cmCAEnabler(cmCommandArgumentsHelper* args, + const char* key, + cmCommandArgumentGroup* group=0); + + /// Has it been enabled ? + bool IsEnabled() const {return this->Enabled;} + private: + bool Enabled; + virtual bool DoConsume(const std::string& arg, unsigned int index); + virtual void DoReset(); + cmCAEnabler(); +}; + +/** cmCADisable is to be used for options which are on by default and can be +disabled using a special argument.*/ +class cmCADisabler : public cmCommandArgument +{ + public: + cmCADisabler(cmCommandArgumentsHelper* args, + const char* key, + cmCommandArgumentGroup* group=0); + + /// Is it still enabled ? + bool IsEnabled() const {return this->Enabled;} + private: + bool Enabled; + virtual bool DoConsume(const std::string& arg, unsigned int index); + virtual void DoReset(); + cmCADisabler(); +}; + + +/** Group of arguments, needed for ordering. E.g. WIN32, EXCLUDE_FROM_ALL and +MACSOX_BUNDLE from ADD_EXECUTABLE() are a group. +*/ +class cmCommandArgumentGroup +{ + friend class cmCommandArgument; + public: + cmCommandArgumentGroup() {} + + /// All members of this group may follow the given argument + void Follows(const cmCommandArgument* arg); + + /// All members of this group may follow all members of the given group + void FollowsGroup(const cmCommandArgumentGroup* group); + private: + std::vector ContainedArguments; +}; + +class cmCommandArgumentsHelper +{ + public: + /// Parse the argument list + void Parse(const std::vector* args, + std::vector* unconsumedArgs); + /// Add an argument. + void AddArgument(cmCommandArgument* arg); + private: + std::vector Arguments; +}; + + +#endif diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx new file mode 100644 index 0000000..49ed967 --- /dev/null +++ b/Source/cmCommands.cxx @@ -0,0 +1,75 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCommands.h" +#if defined(CMAKE_BUILD_WITH_CMAKE) +#include "cmAuxSourceDirectoryCommand.cxx" +#include "cmBuildNameCommand.cxx" +#include "cmElseIfCommand.cxx" +#include "cmExportCommand.cxx" +#include "cmExportLibraryDependencies.cxx" +#include "cmFLTKWrapUICommand.cxx" +#include "cmIncludeExternalMSProjectCommand.cxx" +#include "cmInstallProgramsCommand.cxx" +#include "cmLinkLibrariesCommand.cxx" +#include "cmLoadCacheCommand.cxx" +#include "cmOutputRequiredFilesCommand.cxx" +#include "cmQTWrapCPPCommand.cxx" +#include "cmQTWrapUICommand.cxx" +#include "cmRemoveCommand.cxx" +#include "cmRemoveDefinitionsCommand.cxx" +#include "cmSourceGroupCommand.cxx" +#include "cmSubdirDependsCommand.cxx" +#include "cmUseMangledMesaCommand.cxx" +#include "cmUtilitySourceCommand.cxx" +#include "cmVariableRequiresCommand.cxx" +#include "cmVariableWatchCommand.cxx" + +#include "cmWriteFileCommand.cxx" + +// This one must be last because it includes windows.h and +// windows.h #defines GetCurrentDirectory which is a member +// of cmMakefile +#include "cmLoadCommandCommand.cxx" +#endif + +void GetPredefinedCommands(std::list& +#if defined(CMAKE_BUILD_WITH_CMAKE) + commands +#endif + ) +{ +#if defined(CMAKE_BUILD_WITH_CMAKE) + commands.push_back(new cmAuxSourceDirectoryCommand); + commands.push_back(new cmBuildNameCommand); + commands.push_back(new cmElseIfCommand); + commands.push_back(new cmExportCommand); + commands.push_back(new cmExportLibraryDependenciesCommand); + commands.push_back(new cmFLTKWrapUICommand); + commands.push_back(new cmIncludeExternalMSProjectCommand); + commands.push_back(new cmInstallProgramsCommand); + commands.push_back(new cmLinkLibrariesCommand); + commands.push_back(new cmLoadCacheCommand); + commands.push_back(new cmLoadCommandCommand); + commands.push_back(new cmOutputRequiredFilesCommand); + commands.push_back(new cmQTWrapCPPCommand); + commands.push_back(new cmQTWrapUICommand); + commands.push_back(new cmRemoveCommand); + commands.push_back(new cmRemoveDefinitionsCommand); + commands.push_back(new cmSourceGroupCommand); + commands.push_back(new cmSubdirDependsCommand); + commands.push_back(new cmUseMangledMesaCommand); + commands.push_back(new cmUtilitySourceCommand); + commands.push_back(new cmVariableRequiresCommand); + commands.push_back(new cmVariableWatchCommand); + commands.push_back(new cmWriteFileCommand); +#endif +} diff --git a/Source/cmCommands.h b/Source/cmCommands.h new file mode 100644 index 0000000..096fc20 --- /dev/null +++ b/Source/cmCommands.h @@ -0,0 +1,28 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCommands_h +#define cmCommands_h +#include "cmStandardIncludes.h" + +class cmCommand; +/** + * Global function to return all compiled in commands. + * To add a new command edit cmCommands.cxx or cmBootstrapCommands.cxx + * and add your command. + * It is up to the caller to delete the commands created by this + * call. + */ +void GetBootstrapCommands(std::list& commands); +void GetPredefinedCommands(std::list& commands); + + +#endif diff --git a/Source/cmComputeComponentGraph.cxx b/Source/cmComputeComponentGraph.cxx new file mode 100644 index 0000000..5bec6a1 --- /dev/null +++ b/Source/cmComputeComponentGraph.cxx @@ -0,0 +1,159 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmComputeComponentGraph.h" + +#include + +#include + +//---------------------------------------------------------------------------- +cmComputeComponentGraph::cmComputeComponentGraph(Graph const& input): + InputGraph(input) +{ + // Identify components. + this->Tarjan(); + + // Compute the component graph. + this->ComponentGraph.resize(0); + this->ComponentGraph.resize(this->Components.size()); + this->TransferEdges(); +} + +//---------------------------------------------------------------------------- +cmComputeComponentGraph::~cmComputeComponentGraph() +{ +} + +//---------------------------------------------------------------------------- +void cmComputeComponentGraph::Tarjan() +{ + int n = static_cast(this->InputGraph.size()); + TarjanEntry entry = {0,0}; + this->TarjanEntries.resize(0); + this->TarjanEntries.resize(n, entry); + this->TarjanComponents.resize(0); + this->TarjanComponents.resize(n, -1); + this->TarjanWalkId = 0; + this->TarjanVisited.resize(0); + this->TarjanVisited.resize(n, 0); + for(int i = 0; i < n; ++i) + { + // Start a new DFS from this node if it has never been visited. + if(!this->TarjanVisited[i]) + { + assert(this->TarjanStack.empty()); + ++this->TarjanWalkId; + this->TarjanIndex = 0; + this->TarjanVisit(i); + } + } +} + +//---------------------------------------------------------------------------- +void cmComputeComponentGraph::TarjanVisit(int i) +{ + // We are now visiting this node. + this->TarjanVisited[i] = this->TarjanWalkId; + + // Initialize the entry. + this->TarjanEntries[i].Root = i; + this->TarjanComponents[i] = -1; + this->TarjanEntries[i].VisitIndex = ++this->TarjanIndex; + this->TarjanStack.push(i); + + // Follow outgoing edges. + EdgeList const& nl = this->InputGraph[i]; + for(EdgeList::const_iterator ni = nl.begin(); ni != nl.end(); ++ni) + { + int j = *ni; + + // Ignore edges to nodes that have been reached by a previous DFS + // walk. Since we did not reach the current node from that walk + // it must not belong to the same component and it has already + // been assigned to a component. + if(this->TarjanVisited[j] > 0 && + this->TarjanVisited[j] < this->TarjanWalkId) + { + continue; + } + + // Visit the destination if it has not yet been visited. + if(!this->TarjanVisited[j]) + { + this->TarjanVisit(j); + } + + // If the destination has not yet been assigned to a component, + // check if it has a better root for the current object. + if(this->TarjanComponents[j] < 0) + { + if(this->TarjanEntries[this->TarjanEntries[j].Root].VisitIndex < + this->TarjanEntries[this->TarjanEntries[i].Root].VisitIndex) + { + this->TarjanEntries[i].Root = this->TarjanEntries[j].Root; + } + } + } + + // Check if we have found a component. + if(this->TarjanEntries[i].Root == i) + { + // Yes. Create it. + int c = static_cast(this->Components.size()); + this->Components.push_back(NodeList()); + NodeList& component = this->Components[c]; + + // Populate the component list. + int j; + do + { + // Get the next member of the component. + j = this->TarjanStack.top(); + this->TarjanStack.pop(); + + // Assign the member to the component. + this->TarjanComponents[j] = c; + this->TarjanEntries[j].Root = i; + + // Store the node in its component. + component.push_back(j); + } while(j != i); + + // Sort the component members for clarity. + std::sort(component.begin(), component.end()); + } +} + +//---------------------------------------------------------------------------- +void cmComputeComponentGraph::TransferEdges() +{ + // Map inter-component edges in the original graph to edges in the + // component graph. + int n = static_cast(this->InputGraph.size()); + for(int i=0; i < n; ++i) + { + int i_component = this->TarjanComponents[i]; + EdgeList const& nl = this->InputGraph[i]; + for(EdgeList::const_iterator ni = nl.begin(); ni != nl.end(); ++ni) + { + int j = *ni; + int j_component = this->TarjanComponents[j]; + if(i_component != j_component) + { + // We do not attempt to combine duplicate edges, but instead + // store the inter-component edges with suitable multiplicity. + this->ComponentGraph[i_component].push_back( + cmGraphEdge(j_component, ni->IsStrong())); + } + } + } +} diff --git a/Source/cmComputeComponentGraph.h b/Source/cmComputeComponentGraph.h new file mode 100644 index 0000000..a2ce946 --- /dev/null +++ b/Source/cmComputeComponentGraph.h @@ -0,0 +1,83 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmComputeComponentGraph_h +#define cmComputeComponentGraph_h + +#include "cmStandardIncludes.h" + +#include "cmGraphAdjacencyList.h" + +#include + +/** \class cmComputeComponentGraph + * \brief Analyze a graph to determine strongly connected components. + * + * Convert a directed graph into a directed acyclic graph whose nodes + * correspond to strongly connected components of the original graph. + * + * We use Tarjan's algorithm to enumerate the components efficiently. + * An advantage of this approach is that the components are identified + * in a topologically sorted order. + */ +class cmComputeComponentGraph +{ +public: + // Represent the graph with an adjacency list. + typedef cmGraphNodeList NodeList; + typedef cmGraphEdgeList EdgeList; + typedef cmGraphAdjacencyList Graph; + + cmComputeComponentGraph(Graph const& input); + ~cmComputeComponentGraph(); + + /** Get the adjacency list of the component graph. */ + Graph const& GetComponentGraph() const + { return this->ComponentGraph; } + EdgeList const& GetComponentGraphEdges(int c) const + { return this->ComponentGraph[c]; } + + /** Get map from component index to original node indices. */ + std::vector const& GetComponents() const + { return this->Components; } + NodeList const& GetComponent(int c) const + { return this->Components[c]; } + + /** Get map from original node index to component index. */ + std::vector const& GetComponentMap() const + { return this->TarjanComponents; } + +private: + void TransferEdges(); + + Graph const& InputGraph; + Graph ComponentGraph; + + // Tarjan's algorithm. + struct TarjanEntry + { + int Root; + int VisitIndex; + }; + int TarjanWalkId; + std::vector TarjanVisited; + std::vector TarjanComponents; + std::vector TarjanEntries; + std::stack TarjanStack; + int TarjanIndex; + void Tarjan(); + void TarjanVisit(int i); + + // Connected components. + std::vector Components; +}; + +#endif diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx new file mode 100644 index 0000000..055aab0 --- /dev/null +++ b/Source/cmComputeLinkDepends.cxx @@ -0,0 +1,998 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmComputeLinkDepends.h" + +#include "cmComputeComponentGraph.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmMakefile.h" +#include "cmTarget.h" +#include "cmake.h" + +#include + +#include + +/* + +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 edges lead from nodes to +those which must *follow* them on the link line. For example, the +graph + + A -> B -> C + +will lead to the link line order + + A B C + +The set of items placed in the graph is formed with a breadth-first +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", respectively. Known items are those whose +names correspond to targets (built or imported) and those for which an +old-style _LIB_DEPENDS variable is defined. All other items are +unknown and we must infer dependencies for them. For items that look +like flags (beginning with '-') we trivially infer no dependencies, +and do not include them in the dependencies of other items. + +Known items have dependency lists ordered based on how the user +specified them. We can use this order to infer potential dependencies +of unknown items. For example, if link items A and B are unknown and +items X and Y are known, then we might have the following dependency +lists: + + X: Y A B + Y: A B + +The explicitly known dependencies form graph edges + + X -> Y , X -> A , X -> B , Y -> A , Y -> B + +We can also infer the edge + + A -> B + +because *every* time A appears B is seen on its right. We do not know +whether A really needs symbols from B to link, but it *might* so we +must preserve their order. This is the case also for the following +explicit lists: + + X: A B Y + Y: A B + +Here, A is followed by the set {B,Y} in one list, and {B} in the other +list. The intersection of these sets is {B}, so we can infer that A +depends on at most B. Meanwhile B is followed by the set {Y} in one +list and {} in the other. The intersection is {} so we can infer that +B has no dependencies. + +Let's make a more complex example by adding unknown item C and +considering these dependency lists: + + X: A B Y C + Y: A C B + +The explicit edges are + + X -> Y , X -> A , X -> B , X -> C , Y -> A , Y -> B , Y -> C + +For the unknown items, we infer dependencies by looking at the +"follow" sets: + + A: intersect( {B,Y,C} , {C,B} ) = {B,C} ; infer edges A -> B , A -> C + B: intersect( {Y,C} , {} ) = {} ; infer no edges + C: intersect( {} , {B} ) = {} ; infer no edges + +Note that targets are never inferred as dependees because outside +libraries should not depend on them. + +------------------------------------------------------------------------------ + +The initial exploration of dependencies using a BFS associates an +integer index with each link item. When the graph is built outgoing +edges are sorted by this index. + +After the initial exploration of the link interface tree, any +transitive (dependent) shared libraries that were encountered and not +included in the interface are processed in their own BFS. This BFS +follows only the dependent library lists and not the link interfaces. +They are added to the link items with a mark indicating that the are +transitive dependencies. Then cmComputeLinkInformation deals with +them on a per-platform basis. + +The complete graph formed from all known and inferred dependencies may +not be acyclic, so an acyclic version must be created. +The original graph is converted to a directed acyclic graph in which +each node corresponds to a strongly connected component of the +original graph. For example, the dependency graph + + X -> A -> B -> C -> A -> Y + +contains strongly connected components {X}, {A,B,C}, and {Y}. The +implied directed acyclic graph (DAG) is + + {X} -> {A,B,C} -> {Y} + +We then compute a topological order for the DAG nodes to serve as a +reference for satisfying dependencies efficiently. We perform the DFS +in reverse order and assign topological order indices counting down so +that the result is as close to the original BFS order as possible +without violating dependencies. + +------------------------------------------------------------------------------ + +The final link entry order is constructed as follows. We first walk +through and emit the *original* link line as specified by the user. +As each item is emitted, a set of pending nodes in the component DAG +is maintained. When a pending component has been completely seen, it +is removed from the pending set and its dependencies (following edges +of the DAG) are added. A trivial component (those with one item) is +complete as soon as its item is seen. A non-trivial component (one +with more than one item; assumed to be static libraries) is complete +when *all* its entries have been seen *twice* (all entries seen once, +then all entries seen again, not just each entry twice). A pending +component tracks which items have been seen and a count of how many +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 satisfied no matter where it +appears. + +After the original link line has been completed, we append to it the +remaining pending components and their dependencies. This is done by +repeatedly emitting the first item from the first pending component +and following the same update rules as when traversing the original +link line. Since the pending components are kept in topological order +they are emitted with minimal repeats (we do not want to emit a +component just to have it added again when another component is +completed later). This process continues until no pending components +remain. We know it will terminate because the component graph is +guaranteed to be acyclic. + +The final list of items produced by this procedure consists of the +original user link line followed by minimal additional items needed to +satisfy dependencies. + +*/ + +//---------------------------------------------------------------------------- +cmComputeLinkDepends +::cmComputeLinkDepends(cmTarget* target, const char* config) +{ + // Store context information. + this->Target = target; + this->Makefile = this->Target->GetMakefile(); + this->LocalGenerator = this->Makefile->GetLocalGenerator(); + this->GlobalGenerator = this->LocalGenerator->GetGlobalGenerator(); + this->CMakeInstance = this->GlobalGenerator->GetCMakeInstance(); + + // The configuration being linked. + this->Config = (config && *config)? config : 0; + this->LinkType = this->Target->ComputeLinkType(this->Config); + + // Enable debug mode if requested. + this->DebugMode = this->Makefile->IsOn("CMAKE_LINK_DEPENDS_DEBUG_MODE"); + + // Assume no compatibility until set. + this->OldLinkDirMode = false; + + // No computation has been done. + this->CCG = 0; +} + +//---------------------------------------------------------------------------- +cmComputeLinkDepends::~cmComputeLinkDepends() +{ + for(std::vector::iterator + i = this->InferredDependSets.begin(); + i != this->InferredDependSets.end(); ++i) + { + delete *i; + } + delete this->CCG; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::SetOldLinkDirMode(bool b) +{ + this->OldLinkDirMode = b; +} + +//---------------------------------------------------------------------------- +std::vector const& +cmComputeLinkDepends::Compute() +{ + // Follow the link dependencies of the target to be linked. + this->AddDirectLinkEntries(); + + // Complete the breadth-first search of dependencies. + while(!this->BFSQueue.empty()) + { + // Get the next entry. + BFSEntry qe = this->BFSQueue.front(); + this->BFSQueue.pop(); + + // Follow the entry's dependencies. + this->FollowLinkEntry(qe); + } + + // Complete the search of shared library dependencies. + while(!this->SharedDepQueue.empty()) + { + // Handle the next entry. + this->HandleSharedDependency(this->SharedDepQueue.front()); + this->SharedDepQueue.pop(); + } + + // Infer dependencies of targets for which they were not known. + this->InferDependencies(); + + // Cleanup the constraint graph. + this->CleanConstraintGraph(); + + // Display the constraint graph. + if(this->DebugMode) + { + fprintf(stderr, + "---------------------------------------" + "---------------------------------------\n"); + fprintf(stderr, "Link dependency analysis for target %s, config %s\n", + this->Target->GetName(), this->Config?this->Config:"noconfig"); + this->DisplayConstraintGraph(); + } + + // Compute the final ordering. + this->OrderLinkEntires(); + + // Compute the final set of link entries. + for(std::vector::const_iterator li = this->FinalLinkOrder.begin(); + li != this->FinalLinkOrder.end(); ++li) + { + this->FinalLinkEntries.push_back(this->EntryList[*li]); + } + + // Display the final set. + if(this->DebugMode) + { + this->DisplayFinalEntries(); + } + + return this->FinalLinkEntries; +} + +//---------------------------------------------------------------------------- +std::map::iterator +cmComputeLinkDepends::AllocateLinkEntry(std::string const& item) +{ + std::map::value_type + index_entry(item, static_cast(this->EntryList.size())); + std::map::iterator + lei = this->LinkEntryIndex.insert(index_entry).first; + this->EntryList.push_back(LinkEntry()); + this->InferredDependSets.push_back(0); + this->EntryConstraintGraph.push_back(EdgeList()); + return lei; +} + +//---------------------------------------------------------------------------- +int cmComputeLinkDepends::AddLinkEntry(int depender_index, + std::string const& item) +{ + // Check if the item entry has already been added. + std::map::iterator lei = this->LinkEntryIndex.find(item); + if(lei != this->LinkEntryIndex.end()) + { + // Yes. We do not need to follow the item's dependencies again. + return lei->second; + } + + // Allocate a spot for the item entry. + lei = this->AllocateLinkEntry(item); + + // Initialize the item entry. + int index = lei->second; + LinkEntry& entry = this->EntryList[index]; + entry.Item = item; + entry.Target = this->FindTargetToLink(depender_index, entry.Item.c_str()); + entry.IsFlag = (!entry.Target && item[0] == '-' && item[1] != 'l' && + item.substr(0, 10) != "-framework"); + + // If the item has dependencies queue it to follow them. + if(entry.Target) + { + // Target dependencies are always known. Follow them. + BFSEntry qe = {index, 0}; + this->BFSQueue.push(qe); + } + else + { + // Look for an old-style _LIB_DEPENDS variable. + std::string var = entry.Item; + var += "_LIB_DEPENDS"; + if(const char* val = this->Makefile->GetDefinition(var.c_str())) + { + // The item dependencies are known. Follow them. + BFSEntry qe = {index, val}; + this->BFSQueue.push(qe); + } + else if(!entry.IsFlag) + { + // The item dependencies are not known. We need to infer them. + this->InferredDependSets[index] = new DependSetList; + } + } + + return index; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::FollowLinkEntry(BFSEntry const& qe) +{ + // Get this entry representation. + int depender_index = qe.Index; + LinkEntry const& entry = this->EntryList[depender_index]; + + // Follow the item's dependencies. + if(entry.Target) + { + // Follow the target dependencies. + if(cmTarget::LinkInterface const* iface = + entry.Target->GetLinkInterface(this->Config)) + { + // This target provides its own link interface information. + this->AddLinkEntries(depender_index, iface->Libraries); + + // Handle dependent shared libraries. + this->FollowSharedDeps(depender_index, iface); + + // Support for CMP0003. + for(std::vector::const_iterator + oi = iface->WrongConfigLibraries.begin(); + oi != iface->WrongConfigLibraries.end(); ++oi) + { + this->CheckWrongConfigItem(depender_index, *oi); + } + } + } + else + { + // Follow the old-style dependency list. + this->AddVarLinkEntries(depender_index, qe.LibDepends); + } +} + +//---------------------------------------------------------------------------- +void +cmComputeLinkDepends +::FollowSharedDeps(int depender_index, cmTarget::LinkInterface const* iface, + bool follow_interface) +{ + // Follow dependencies if we have not followed them already. + if(this->SharedDepFollowed.insert(depender_index).second) + { + if(follow_interface) + { + this->QueueSharedDependencies(depender_index, iface->Libraries); + } + this->QueueSharedDependencies(depender_index, iface->SharedDeps); + } +} + +//---------------------------------------------------------------------------- +void +cmComputeLinkDepends +::QueueSharedDependencies(int depender_index, + std::vector const& deps) +{ + for(std::vector::const_iterator li = deps.begin(); + li != deps.end(); ++li) + { + SharedDepEntry qe; + qe.Item = *li; + qe.DependerIndex = depender_index; + this->SharedDepQueue.push(qe); + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::HandleSharedDependency(SharedDepEntry const& dep) +{ + // Check if the target already has an entry. + std::map::iterator lei = + this->LinkEntryIndex.find(dep.Item); + if(lei == this->LinkEntryIndex.end()) + { + // Allocate a spot for the item entry. + lei = this->AllocateLinkEntry(dep.Item); + + // Initialize the item entry. + LinkEntry& entry = this->EntryList[lei->second]; + entry.Item = dep.Item; + entry.Target = this->FindTargetToLink(dep.DependerIndex, + dep.Item.c_str()); + + // This item was added specifically because it is a dependent + // shared library. It may get special treatment + // in cmComputeLinkInformation. + entry.IsSharedDep = true; + } + + // Get the link entry for this target. + int index = lei->second; + LinkEntry& entry = this->EntryList[index]; + + // This shared library dependency must follow the item that listed + // it. + this->EntryConstraintGraph[dep.DependerIndex].push_back(index); + + // Target items may have their own dependencies. + if(entry.Target) + { + if(cmTarget::LinkInterface const* iface = + entry.Target->GetLinkInterface(this->Config)) + { + // Follow public and private dependencies transitively. + this->FollowSharedDeps(index, iface, true); + } + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::AddVarLinkEntries(int depender_index, + const char* value) +{ + // This is called to add the dependencies named by + // _LIB_DEPENDS. The variable contains a semicolon-separated + // list. The list contains link-type;item pairs and just items. + std::vector deplist; + cmSystemTools::ExpandListArgument(value, deplist); + + // Look for entries meant for this configuration. + std::vector actual_libs; + cmTarget::LinkLibraryType llt = cmTarget::GENERAL; + bool haveLLT = false; + for(std::vector::const_iterator di = deplist.begin(); + di != deplist.end(); ++di) + { + if(*di == "debug") + { + llt = cmTarget::DEBUG; + haveLLT = true; + } + else if(*di == "optimized") + { + llt = cmTarget::OPTIMIZED; + haveLLT = true; + } + else if(*di == "general") + { + llt = cmTarget::GENERAL; + haveLLT = true; + } + else if(!di->empty()) + { + // If no explicit link type was given prior to this entry then + // check if the entry has its own link type variable. This is + // needed for compatibility with dependency files generated by + // the export_library_dependencies command from CMake 2.4 and + // lower. + if(!haveLLT) + { + std::string var = *di; + var += "_LINK_TYPE"; + if(const char* val = this->Makefile->GetDefinition(var.c_str())) + { + if(strcmp(val, "debug") == 0) + { + llt = cmTarget::DEBUG; + } + else if(strcmp(val, "optimized") == 0) + { + llt = cmTarget::OPTIMIZED; + } + } + } + + // If the library is meant for this link type then use it. + if(llt == cmTarget::GENERAL || llt == this->LinkType) + { + actual_libs.push_back(*di); + } + else if(this->OldLinkDirMode) + { + this->CheckWrongConfigItem(depender_index, *di); + } + + // Reset the link type until another explicit type is given. + llt = cmTarget::GENERAL; + haveLLT = false; + } + } + + // Add the entries from this list. + this->AddLinkEntries(depender_index, actual_libs); +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::AddDirectLinkEntries() +{ + // Add direct link dependencies in this configuration. + cmTarget::LinkImplementation const* impl = + this->Target->GetLinkImplementation(this->Config); + this->AddLinkEntries(-1, impl->Libraries); + for(std::vector::const_iterator + wi = impl->WrongConfigLibraries.begin(); + wi != impl->WrongConfigLibraries.end(); ++wi) + { + this->CheckWrongConfigItem(-1, *wi); + } +} + +//---------------------------------------------------------------------------- +void +cmComputeLinkDepends::AddLinkEntries(int depender_index, + std::vector const& libs) +{ + // Track inferred dependency sets implied by this list. + std::map dependSets; + + // Loop over the libraries linked directly by the depender. + for(std::vector::const_iterator li = libs.begin(); + li != libs.end(); ++li) + { + // Skip entries that will resolve to the target getting linked or + // are empty. + std::string item = this->Target->CheckCMP0004(*li); + if(item == this->Target->GetName() || item.empty()) + { + continue; + } + + // Add a link entry for this item. + int dependee_index = this->AddLinkEntry(depender_index, item); + + // The dependee must come after the depender. + if(depender_index >= 0) + { + this->EntryConstraintGraph[depender_index].push_back(dependee_index); + } + else + { + // This is a direct dependency of the target being linked. + this->OriginalEntries.push_back(dependee_index); + } + + // Update the inferred dependencies for earlier items. + for(std::map::iterator dsi = dependSets.begin(); + dsi != dependSets.end(); ++dsi) + { + // Add this item to the inferred dependencies of other items. + // Target items are never inferred dependees because unknown + // items are outside libraries that should not be depending on + // targets. + if(!this->EntryList[dependee_index].Target && + !this->EntryList[dependee_index].IsFlag && + dependee_index != dsi->first) + { + dsi->second.insert(dependee_index); + } + } + + // If this item needs to have dependencies inferred, do so. + if(this->InferredDependSets[dependee_index]) + { + // Make sure an entry exists to hold the set for the item. + dependSets[dependee_index]; + } + } + + // Store the inferred dependency sets discovered for this list. + for(std::map::iterator dsi = dependSets.begin(); + dsi != dependSets.end(); ++dsi) + { + this->InferredDependSets[dsi->first]->push_back(dsi->second); + } +} + +//---------------------------------------------------------------------------- +cmTarget* cmComputeLinkDepends::FindTargetToLink(int depender_index, + const char* name) +{ + // Look for a target in the scope of the depender. + cmMakefile* mf = this->Makefile; + if(depender_index >= 0) + { + if(cmTarget* depender = this->EntryList[depender_index].Target) + { + mf = depender->GetMakefile(); + } + } + cmTarget* tgt = mf->FindTargetToUse(name); + + // Skip targets that will not really be linked. This is probably a + // name conflict between an external library and an executable + // within the project. + if(tgt && tgt->GetType() == cmTarget::EXECUTABLE && + !tgt->IsExecutableWithExports()) + { + 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; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::InferDependencies() +{ + // The inferred dependency sets for each item list the possible + // dependencies. The intersection of the sets for one item form its + // inferred dependencies. + for(unsigned int depender_index=0; + depender_index < this->InferredDependSets.size(); ++depender_index) + { + // Skip items for which dependencies do not need to be inferred or + // for which the inferred dependency sets are empty. + DependSetList* sets = this->InferredDependSets[depender_index]; + if(!sets || sets->empty()) + { + continue; + } + + // Intersect the sets for this item. + DependSetList::const_iterator i = sets->begin(); + DependSet common = *i; + for(++i; i != sets->end(); ++i) + { + DependSet intersection; + cmsys_stl::set_intersection + (common.begin(), common.end(), i->begin(), i->end(), + std::inserter(intersection, intersection.begin())); + common = intersection; + } + + // Add the inferred dependencies to the graph. + for(DependSet::const_iterator j = common.begin(); j != common.end(); ++j) + { + int dependee_index = *j; + this->EntryConstraintGraph[depender_index].push_back(dependee_index); + } + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::CleanConstraintGraph() +{ + for(Graph::iterator i = this->EntryConstraintGraph.begin(); + i != this->EntryConstraintGraph.end(); ++i) + { + // Sort the outgoing edges for each graph node so that the + // original order will be preserved as much as possible. + cmsys_stl::sort(i->begin(), i->end()); + + // Make the edge list unique. + EdgeList::iterator last = cmsys_stl::unique(i->begin(), i->end()); + i->erase(last, i->end()); + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::DisplayConstraintGraph() +{ + // Display the graph nodes and their edges. + cmOStringStream e; + for(unsigned int i=0; i < this->EntryConstraintGraph.size(); ++i) + { + EdgeList const& nl = this->EntryConstraintGraph[i]; + e << "item " << i << " is [" << this->EntryList[i].Item << "]\n"; + for(EdgeList::const_iterator j = nl.begin(); j != nl.end(); ++j) + { + e << " item " << *j << " must follow it\n"; + } + } + fprintf(stderr, "%s\n", e.str().c_str()); +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::OrderLinkEntires() +{ + // Compute the DAG of strongly connected components. The algorithm + // used by cmComputeComponentGraph should identify the components in + // the same order in which the items were originally discovered in + // the BFS. This should preserve the original order when no + // constraints disallow it. + this->CCG = new cmComputeComponentGraph(this->EntryConstraintGraph); + + // The component graph is guaranteed to be acyclic. Start a DFS + // from every entry to compute a topological order for the + // components. + Graph const& cgraph = this->CCG->GetComponentGraph(); + int n = static_cast(cgraph.size()); + this->ComponentVisited.resize(cgraph.size(), 0); + this->ComponentOrder.resize(cgraph.size(), n); + this->ComponentOrderId = n; + // Run in reverse order so the topological order will preserve the + // original order where there are no constraints. + for(int c = n-1; c >= 0; --c) + { + this->VisitComponent(c); + } + + // Display the component graph. + if(this->DebugMode) + { + this->DisplayComponents(); + } + + // Start with the original link line. + for(std::vector::const_iterator i = this->OriginalEntries.begin(); + i != this->OriginalEntries.end(); ++i) + { + this->VisitEntry(*i); + } + + // Now explore anything left pending. Since the component graph is + // guaranteed to be acyclic we know this will terminate. + while(!this->PendingComponents.empty()) + { + // Visit one entry from the first pending component. The visit + // logic will update the pending components accordingly. Since + // the pending components are kept in topological order this will + // not repeat one. + int e = *this->PendingComponents.begin()->second.Entries.begin(); + this->VisitEntry(e); + } +} + +//---------------------------------------------------------------------------- +void +cmComputeLinkDepends::DisplayComponents() +{ + fprintf(stderr, "The strongly connected components are:\n"); + std::vector const& components = this->CCG->GetComponents(); + for(unsigned int c=0; c < components.size(); ++c) + { + fprintf(stderr, "Component (%u):\n", c); + NodeList const& nl = components[c]; + for(NodeList::const_iterator ni = nl.begin(); ni != nl.end(); ++ni) + { + int i = *ni; + fprintf(stderr, " item %d [%s]\n", i, + this->EntryList[i].Item.c_str()); + } + EdgeList const& ol = this->CCG->GetComponentGraphEdges(c); + for(EdgeList::const_iterator oi = ol.begin(); oi != ol.end(); ++oi) + { + int i = *oi; + fprintf(stderr, " followed by Component (%d)\n", i); + } + fprintf(stderr, " topo order index %d\n", + this->ComponentOrder[c]); + } + fprintf(stderr, "\n"); +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::VisitComponent(unsigned int c) +{ + // Check if the node has already been visited. + if(this->ComponentVisited[c]) + { + return; + } + + // We are now visiting this component so mark it. + this->ComponentVisited[c] = 1; + + // Visit the neighbors of the component first. + // Run in reverse order so the topological order will preserve the + // original order where there are no constraints. + EdgeList const& nl = this->CCG->GetComponentGraphEdges(c); + for(EdgeList::const_reverse_iterator ni = nl.rbegin(); + ni != nl.rend(); ++ni) + { + this->VisitComponent(*ni); + } + + // Assign an ordering id to this component. + this->ComponentOrder[c] = --this->ComponentOrderId; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::VisitEntry(int index) +{ + // Include this entry on the link line. + this->FinalLinkOrder.push_back(index); + + // This entry has now been seen. Update its component. + bool completed = false; + int component = this->CCG->GetComponentMap()[index]; + std::map::iterator mi = + this->PendingComponents.find(this->ComponentOrder[component]); + if(mi != this->PendingComponents.end()) + { + // The entry is in an already pending component. + PendingComponent& pc = mi->second; + + // Remove the entry from those pending in its component. + pc.Entries.erase(index); + if(pc.Entries.empty()) + { + // The complete component has been seen since it was last needed. + --pc.Count; + + if(pc.Count == 0) + { + // The component has been completed. + this->PendingComponents.erase(mi); + completed = true; + } + else + { + // The whole component needs to be seen again. + NodeList const& nl = this->CCG->GetComponent(component); + assert(nl.size() > 1); + pc.Entries.insert(nl.begin(), nl.end()); + } + } + } + else + { + // The entry is not in an already pending component. + NodeList const& nl = this->CCG->GetComponent(component); + if(nl.size() > 1) + { + // This is a non-trivial component. It is now pending. + PendingComponent& pc = this->MakePendingComponent(component); + + // The starting entry has already been seen. + pc.Entries.erase(index); + } + else + { + // This is a trivial component, so it is already complete. + completed = true; + } + } + + // If the entry completed a component, the component's dependencies + // are now pending. + if(completed) + { + EdgeList const& ol = this->CCG->GetComponentGraphEdges(component); + for(EdgeList::const_iterator oi = ol.begin(); oi != ol.end(); ++oi) + { + // This entire component is now pending no matter whether it has + // been partially seen already. + this->MakePendingComponent(*oi); + } + } +} + +//---------------------------------------------------------------------------- +cmComputeLinkDepends::PendingComponent& +cmComputeLinkDepends::MakePendingComponent(unsigned int component) +{ + // Create an entry (in topological order) for the component. + PendingComponent& pc = + this->PendingComponents[this->ComponentOrder[component]]; + pc.Id = component; + NodeList const& nl = this->CCG->GetComponent(component); + + if(nl.size() == 1) + { + // Trivial components need be seen only once. + pc.Count = 1; + } + else + { + // This is a non-trivial strongly connected component of the + // original graph. It consists of two or more libraries + // (archives) that mutually require objects from one another. In + // the worst case we may have to repeat the list of libraries as + // many times as there are object files in the biggest archive. + // For now we just list them twice. + // + // The list of items in the component has been sorted by the order + // of discovery in the original BFS of dependencies. This has the + // advantage that the item directly linked by a target requiring + // this component will come first which minimizes the number of + // repeats needed. + pc.Count = this->ComputeComponentCount(nl); + } + + // Store the entries to be seen. + pc.Entries.insert(nl.begin(), nl.end()); + + return pc; +} + +//---------------------------------------------------------------------------- +int cmComputeLinkDepends::ComputeComponentCount(NodeList const& nl) +{ + int count = 2; + for(NodeList::const_iterator ni = nl.begin(); ni != nl.end(); ++ni) + { + if(cmTarget* target = this->EntryList[*ni].Target) + { + if(cmTarget::LinkInterface const* iface = + target->GetLinkInterface(this->Config)) + { + if(iface->Multiplicity > count) + { + count = iface->Multiplicity; + } + } + } + } + return count; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::DisplayFinalEntries() +{ + fprintf(stderr, "target [%s] links to:\n", this->Target->GetName()); + for(std::vector::const_iterator lei = + this->FinalLinkEntries.begin(); + lei != this->FinalLinkEntries.end(); ++lei) + { + if(lei->Target) + { + fprintf(stderr, " target [%s]\n", lei->Target->GetName()); + } + else + { + fprintf(stderr, " item [%s]\n", lei->Item.c_str()); + } + } + fprintf(stderr, "\n"); +} + +//---------------------------------------------------------------------------- +void cmComputeLinkDepends::CheckWrongConfigItem(int depender_index, + std::string const& item) +{ + if(!this->OldLinkDirMode) + { + return; + } + + // For CMake 2.4 bug-compatibility we need to consider the output + // directories of targets linked in another configuration as link + // directories. + if(cmTarget* tgt = this->FindTargetToLink(depender_index, item.c_str())) + { + if(!tgt->IsImported()) + { + this->OldWrongConfigItems.insert(tgt); + } + } +} diff --git a/Source/cmComputeLinkDepends.h b/Source/cmComputeLinkDepends.h new file mode 100644 index 0000000..80a0454 --- /dev/null +++ b/Source/cmComputeLinkDepends.h @@ -0,0 +1,168 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmComputeLinkDepends_h +#define cmComputeLinkDepends_h + +#include "cmStandardIncludes.h" +#include "cmTarget.h" + +#include "cmGraphAdjacencyList.h" + +#include + +class cmComputeComponentGraph; +class cmGlobalGenerator; +class cmLocalGenerator; +class cmMakefile; +class cmTarget; +class cmake; + +/** \class cmComputeLinkDepends + * \brief Compute link dependencies for targets. + */ +class cmComputeLinkDepends +{ +public: + cmComputeLinkDepends(cmTarget* target, const char* config); + ~cmComputeLinkDepends(); + + // Basic information about each link item. + struct LinkEntry + { + std::string Item; + cmTarget* Target; + bool IsSharedDep; + bool IsFlag; + LinkEntry(): Item(), Target(0), IsSharedDep(false), IsFlag(false) {} + LinkEntry(LinkEntry const& r): + Item(r.Item), Target(r.Target), IsSharedDep(r.IsSharedDep), + IsFlag(r.IsFlag) {} + }; + + typedef std::vector EntryVector; + EntryVector const& Compute(); + + void SetOldLinkDirMode(bool b); + std::set const& GetOldWrongConfigItems() const + { return this->OldWrongConfigItems; } + +private: + + // Context information. + cmTarget* Target; + cmMakefile* Makefile; + cmLocalGenerator* LocalGenerator; + cmGlobalGenerator* GlobalGenerator; + cmake* CMakeInstance; + bool DebugMode; + + // Configuration information. + const char* Config; + cmTarget::LinkLibraryType LinkType; + + // Output information. + EntryVector FinalLinkEntries; + + typedef cmTarget::LinkLibraryVectorType LinkLibraryVectorType; + + std::map::iterator + AllocateLinkEntry(std::string const& item); + int AddLinkEntry(int depender_index, std::string const& item); + void AddVarLinkEntries(int depender_index, const char* value); + void AddDirectLinkEntries(); + void AddLinkEntries(int depender_index, + std::vector const& libs); + cmTarget* FindTargetToLink(int depender_index, const char* name); + + // One entry for each unique item. + std::vector EntryList; + std::map LinkEntryIndex; + + // BFS of initial dependencies. + struct BFSEntry + { + int Index; + const char* LibDepends; + }; + std::queue BFSQueue; + void FollowLinkEntry(BFSEntry const&); + + // Shared libraries that are included only because they are + // dependencies of other shared libraries, not because they are part + // of the interface. + struct SharedDepEntry + { + std::string Item; + int DependerIndex; + }; + std::queue SharedDepQueue; + std::set SharedDepFollowed; + void FollowSharedDeps(int depender_index, + cmTarget::LinkInterface const* iface, + bool follow_interface = false); + void QueueSharedDependencies(int depender_index, + std::vector const& deps); + void HandleSharedDependency(SharedDepEntry const& dep); + + // Dependency inferral for each link item. + struct DependSet: public std::set {}; + struct DependSetList: public std::vector {}; + std::vector InferredDependSets; + void InferDependencies(); + + // Ordering constraint graph adjacency list. + typedef cmGraphNodeList NodeList; + typedef cmGraphEdgeList EdgeList; + typedef cmGraphAdjacencyList Graph; + Graph EntryConstraintGraph; + void CleanConstraintGraph(); + void DisplayConstraintGraph(); + + // Ordering algorithm. + void OrderLinkEntires(); + std::vector ComponentVisited; + std::vector ComponentOrder; + int ComponentOrderId; + struct PendingComponent + { + // The real component id. Needed because the map is indexed by + // component topological index. + int Id; + + // The number of times the component needs to be seen. This is + // always 1 for trivial components and is initially 2 for + // non-trivial components. + int Count; + + // The entries yet to be seen to complete the component. + std::set Entries; + }; + std::map PendingComponents; + cmComputeComponentGraph* CCG; + std::vector FinalLinkOrder; + void DisplayComponents(); + void VisitComponent(unsigned int c); + void VisitEntry(int index); + PendingComponent& MakePendingComponent(unsigned int component); + int ComputeComponentCount(NodeList const& nl); + void DisplayFinalEntries(); + + // Record of the original link line. + std::vector OriginalEntries; + + // Compatibility help. + bool OldLinkDirMode; + void CheckWrongConfigItem(int depender_index, std::string const& item); + std::set OldWrongConfigItems; +}; + +#endif diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx new file mode 100644 index 0000000..df78bf8 --- /dev/null +++ b/Source/cmComputeLinkInformation.cxx @@ -0,0 +1,1869 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmComputeLinkInformation.h" + +#include "cmComputeLinkDepends.h" +#include "cmOrderDirectories.h" + +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmMakefile.h" +#include "cmTarget.h" +#include "cmake.h" + +#include + +//#define CM_COMPUTE_LINK_INFO_DEBUG + +/* +Notes about linking on various platforms: + +------------------------------------------------------------------------------ + +Linux, FreeBSD, Mac OS X, IRIX, Sun, Windows: + +Linking to libraries using the full path works fine. + +------------------------------------------------------------------------------ + +On AIX, more work is needed. + + The "-bnoipath" option is needed. From "man ld": + + Note: If you specify a shared object, or an archive file + containing a shared object, with an absolute or relative path + name, instead of with the -lName flag, the path name is + included in the import file ID string in the loader section of + the output file. You can override this behavior with the + -bnoipath option. + + noipath + + For shared objects listed on the command-line, rather than + specified with the -l flag, use a null path component when + listing the shared object in the loader section of the + output file. A null path component is always used for + shared objects specified with the -l flag. This option + does not affect the specification of a path component by + using a line beginning with #! in an import file. The + default is the ipath option. + + This prevents the full path specified on the compile line from being + compiled directly into the binary. + + By default the linker places -L paths in the embedded runtime path. + In order to implement CMake's RPATH interface correctly, we need the + -blibpath:Path option. From "man ld": + + libpath:Path + + Uses Path as the library path when writing the loader section + of the output file. Path is neither checked for validity nor + used when searching for libraries specified by the -l flag. + Path overrides any library paths generated when the -L flag is + used. + + If you do not specify any -L flags, or if you specify the + nolibpath option, the default library path information is + written in the loader section of the output file. The default + library path information is the value of the LIBPATH + environment variable if it is defined, and /usr/lib:/lib, + otherwise. + + We can pass -Wl,-blibpath:/usr/lib:/lib always to avoid the -L stuff + and not break when the user sets LIBPATH. Then if we want to add an + rpath we insert it into the option before /usr/lib. + +------------------------------------------------------------------------------ + +On HP-UX, more work is needed. There are differences between +versions. + +ld: 92453-07 linker linker ld B.10.33 990520 + + Linking with a full path works okay for static and shared libraries. + The linker seems to always put the full path to where the library + was found in the binary whether using a full path or -lfoo syntax. + Transitive link dependencies work just fine due to the full paths. + + It has the "-l:libfoo.sl" option. The +nodefaultrpath is accepted + but not documented and does not seem to do anything. There is no + +forceload option. + +ld: 92453-07 linker ld HP Itanium(R) B.12.41 IPF/IPF + + Linking with a full path works okay for static libraries. + + Linking with a full path works okay for shared libraries. However + dependent (transitive) libraries of those linked directly must be + either found with an rpath stored in the direct dependencies or + found in -L paths as if they were specified with "-l:libfoo.sl" + (really "-l:"). The search matches that of the dynamic + loader but only with -L paths. In other words, if we have an + executable that links to shared library bar which links to shared + library foo, the link line for the exe must contain + + /dir/with/bar/libbar.sl -L/dir/with/foo + + It does not matter whether the exe wants to link to foo directly or + whether /dir/with/foo/libfoo.sl is listed. The -L path must still + be present. It should match the runtime path computed for the + executable taking all directly and transitively linked libraries + into account. + + The "+nodefaultrpath" option should be used to avoid getting -L + paths in the rpath unless we add our own rpath with +b. This means + that skip-build-rpath should use this option. + + See documentation in "man ld", "man dld.so", and + http://docs.hp.com/en/B2355-90968/creatingandusinglibraries.htm + + +[no]defaultrpath + +defaultrpath is the default. Include any paths that are + specified with -L in the embedded path, unless you specify the + +b option. If you use +b, only the path list specified by +b is + in the embedded path. + + The +nodefaultrpath option removes all library paths that were + specified with the -L option from the embedded path. The linker + searches the library paths specified by the -L option at link + time. At run time, the only library paths searched are those + specified by the environment variables LD_LIBRARY_PATH and + SHLIB_PATH, library paths specified by the +b linker option, and + finally the default library paths. + + +rpathfirst + This option will cause the paths specified in RPATH (embedded + path) to be used before the paths specified in LD_LIBRARY_PATH + or SHLIB_PATH, in searching for shared libraries. This changes + the default search order of LD_LIBRARY_PATH, SHLIB_PATH, and + RPATH (embedded path). + +------------------------------------------------------------------------------ +Notes about dependent (transitive) shared libraries: + +On non-Windows systems shared libraries may have transitive +dependencies. In order to support LINK_INTERFACE_LIBRARIES we must +support linking to a shared library without listing all the libraries +to which it links. Some linkers want to be able to find the +transitive dependencies (dependent libraries) of shared libraries +listed on the command line. + + - On Windows, DLLs are not directly linked, and the import libraries + have no transitive dependencies. + + - On Mac OS X 10.5 and above transitive dependencies are not needed. + + - On Mac OS X 10.4 and below we need to actually list the dependencies. + Otherwise when using -isysroot for universal binaries it cannot + find the dependent libraries. Listing them on the command line + tells the linker where to find them, but unfortunately also links + the library. + + - On HP-UX, the linker wants to find the transitive dependencies of + shared libraries in the -L paths even if the dependent libraries + are given on the link line. + + - On AIX the transitive dependencies are not needed. + + - On SGI, the linker wants to find the transitive dependencies of + shared libraries in the -L paths if they are not given on the link + line. Transitive linking can be disabled using the options + + -no_transitive_link -Wl,-no_transitive_link + + which disable it. Both options must be given when invoking the + linker through the compiler. + + - On Sun, the linker wants to find the transitive dependencies of + shared libraries in the -L paths if they are not given on the link + line. + + - On Linux, FreeBSD, and QNX: + + The linker wants to find the transitive dependencies of shared + libraries in the "-rpath-link" paths option if they have not been + given on the link line. The option is like rpath but just for + link time: + + -Wl,-rpath-link,"/path1:/path2" + +For -rpath-link, we need a separate runtime path ordering pass +including just the dependent libraries that are not linked. + +For -L paths on non-HP, we can do the same thing as with rpath-link +but put the results in -L paths. The paths should be listed at the +end to avoid conflicting with user search paths (?). + +For -L paths on HP, we should do a runtime path ordering pass with +all libraries, both linked and non-linked. Even dependent +libraries that are also linked need to be listed in -L paths. + +In our implementation we add all dependent libraries to the runtime +path computation. Then the auto-generated RPATH will find everything. + +------------------------------------------------------------------------------ +Notes about shared libraries with not builtin soname: + +Some UNIX shared libraries may be created with no builtin soname. On +some platforms such libraries cannot be linked using the path to their +location because the linker will copy the path into the field used to +find the library at runtime. + + Apple: ../libfoo.dylib ==> libfoo.dylib # ok, uses install_name + SGI: ../libfoo.so ==> libfoo.so # ok + AIX: ../libfoo.so ==> libfoo.so # ok + Linux: ../libfoo.so ==> ../libfoo.so # bad + HP-UX: ../libfoo.so ==> ../libfoo.so # bad + Sun: ../libfoo.so ==> ../libfoo.so # bad + FreeBSD: ../libfoo.so ==> ../libfoo.so # bad + +In order to link these libraries we need to use the old-style split +into -L.. and -lfoo options. This should be fairly safe because most +problems with -lfoo options were related to selecting shared libraries +instead of static but in this case we want the shared lib. Link +directory ordering needs to be done to make sure these shared +libraries are found first. There should be very few restrictions +because this need be done only for shared libraries without soname-s. + +*/ + +//---------------------------------------------------------------------------- +cmComputeLinkInformation +::cmComputeLinkInformation(cmTarget* target, const char* config) +{ + // Store context information. + this->Target = target; + this->Makefile = this->Target->GetMakefile(); + this->LocalGenerator = this->Makefile->GetLocalGenerator(); + this->GlobalGenerator = this->LocalGenerator->GetGlobalGenerator(); + this->CMakeInstance = this->GlobalGenerator->GetCMakeInstance(); + + // Check whether to recognize OpenBSD-style library versioned names. + this->OpenBSD = this->Makefile->GetCMakeInstance() + ->GetPropertyAsBool("FIND_LIBRARY_USE_OPENBSD_VERSIONING"); + + // The configuration being linked. + this->Config = config; + + // Allocate internals. + this->OrderLinkerSearchPath = + new cmOrderDirectories(this->GlobalGenerator, target, + "linker search path"); + this->OrderRuntimeSearchPath = + new cmOrderDirectories(this->GlobalGenerator, target, + "runtime search path"); + this->OrderDependentRPath = 0; + + // Get the language used for linking this target. + this->LinkLanguage = this->Target->GetLinkerLanguage(config); + if(!this->LinkLanguage) + { + // The Compute method will do nothing, so skip the rest of the + // initialization. + return; + } + + // Check whether we should use an import library for linking a target. + this->UseImportLibrary = + this->Makefile->GetDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX")?true:false; + + // On platforms without import libraries there may be a special flag + // to use when creating a plugin (module) that obtains symbols from + // the program that will load it. + this->LoaderFlag = 0; + if(!this->UseImportLibrary && + this->Target->GetType() == cmTarget::MODULE_LIBRARY) + { + std::string loader_flag_var = "CMAKE_SHARED_MODULE_LOADER_"; + loader_flag_var += this->LinkLanguage; + loader_flag_var += "_FLAG"; + this->LoaderFlag = this->Makefile->GetDefinition(loader_flag_var.c_str()); + } + + // Get options needed to link libraries. + this->LibLinkFlag = + this->Makefile->GetSafeDefinition("CMAKE_LINK_LIBRARY_FLAG"); + this->LibLinkFileFlag = + this->Makefile->GetSafeDefinition("CMAKE_LINK_LIBRARY_FILE_FLAG"); + this->LibLinkSuffix = + this->Makefile->GetSafeDefinition("CMAKE_LINK_LIBRARY_SUFFIX"); + + // Get options needed to specify RPATHs. + this->RuntimeUseChrpath = false; + if(this->Target->GetType() != cmTarget::STATIC_LIBRARY) + { + const char* tType = + ((this->Target->GetType() == cmTarget::EXECUTABLE)? + "EXECUTABLE" : "SHARED_LIBRARY"); + std::string rtVar = "CMAKE_"; + rtVar += tType; + rtVar += "_RUNTIME_"; + rtVar += this->LinkLanguage; + rtVar += "_FLAG"; + std::string rtSepVar = rtVar + "_SEP"; + this->RuntimeFlag = this->Makefile->GetSafeDefinition(rtVar.c_str()); + this->RuntimeSep = this->Makefile->GetSafeDefinition(rtSepVar.c_str()); + this->RuntimeAlways = + (this->Makefile-> + GetSafeDefinition("CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH")); + this->RuntimeUseChrpath = this->Target->IsChrpathUsed(config); + + // Get options needed to help find dependent libraries. + std::string rlVar = "CMAKE_"; + rlVar += tType; + rlVar += "_RPATH_LINK_"; + rlVar += this->LinkLanguage; + rlVar += "_FLAG"; + this->RPathLinkFlag = this->Makefile->GetSafeDefinition(rlVar.c_str()); + } + + // Check if we need to include the runtime search path at link time. + { + std::string var = "CMAKE_SHARED_LIBRARY_LINK_"; + var += this->LinkLanguage; + var += "_WITH_RUNTIME_PATH"; + this->LinkWithRuntimePath = this->Makefile->IsOn(var.c_str()); + } + + // Check the platform policy for missing soname case. + this->NoSONameUsesPath = + this->Makefile->IsOn("CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME"); + + // Get link type information. + this->ComputeLinkTypeInfo(); + + // Setup the link item parser. + this->ComputeItemParserInfo(); + + // Setup framework support. + this->ComputeFrameworkInfo(); + + // Choose a mode for dealing with shared library dependencies. + this->SharedDependencyMode = SharedDepModeNone; + if(this->Makefile->IsOn("CMAKE_LINK_DEPENDENT_LIBRARY_FILES")) + { + this->SharedDependencyMode = SharedDepModeLink; + } + else if(this->Makefile->IsOn("CMAKE_LINK_DEPENDENT_LIBRARY_DIRS")) + { + this->SharedDependencyMode = SharedDepModeLibDir; + } + else if(!this->RPathLinkFlag.empty()) + { + this->SharedDependencyMode = SharedDepModeDir; + this->OrderDependentRPath = + new cmOrderDirectories(this->GlobalGenerator, target, + "dependent library path"); + } + + // Add the search path entries requested by the user to path ordering. + this->OrderLinkerSearchPath + ->AddUserDirectories(this->Target->GetLinkDirectories()); + this->OrderRuntimeSearchPath + ->AddUserDirectories(this->Target->GetLinkDirectories()); + + // Set up the implicit link directories. + this->LoadImplicitLinkInfo(); + this->OrderLinkerSearchPath + ->SetImplicitDirectories(this->ImplicitLinkDirs); + this->OrderRuntimeSearchPath + ->SetImplicitDirectories(this->ImplicitLinkDirs); + if(this->OrderDependentRPath) + { + this->OrderDependentRPath + ->SetImplicitDirectories(this->ImplicitLinkDirs); + this->OrderDependentRPath + ->AddLanguageDirectories(this->RuntimeLinkDirs); + } + + // Decide whether to enable compatible library search path mode. + // There exists code that effectively does + // + // /path/to/libA.so -lB + // + // where -lB is meant to link to /path/to/libB.so. This is broken + // because it specified -lB without specifying a link directory (-L) + // in which to search for B. This worked in CMake 2.4 and below + // because -L/path/to would be added by the -L/-l split for A. In + // order to support such projects we need to add the directories + // containing libraries linked with a full path to the -L path. + this->OldLinkDirMode = + this->Target->GetPolicyStatusCMP0003() != cmPolicies::NEW; + if(this->OldLinkDirMode) + { + // Construct a mask to not bother with this behavior for link + // directories already specified by the user. + std::vector const& dirs = this->Target->GetLinkDirectories(); + for(std::vector::const_iterator di = dirs.begin(); + di != dirs.end(); ++di) + { + this->OldLinkDirMask.insert(*di); + } + } +} + +//---------------------------------------------------------------------------- +cmComputeLinkInformation::~cmComputeLinkInformation() +{ + delete this->OrderLinkerSearchPath; + delete this->OrderRuntimeSearchPath; + delete this->OrderDependentRPath; +} + +//---------------------------------------------------------------------------- +cmComputeLinkInformation::ItemVector const& +cmComputeLinkInformation::GetItems() +{ + return this->Items; +} + +//---------------------------------------------------------------------------- +std::vector const& cmComputeLinkInformation::GetDirectories() +{ + return this->OrderLinkerSearchPath->GetOrderedDirectories(); +} + +//---------------------------------------------------------------------------- +std::string cmComputeLinkInformation::GetRPathLinkString() +{ + // If there is no separate linker runtime search flag (-rpath-link) + // there is no reason to compute a string. + if(!this->OrderDependentRPath) + { + return ""; + } + + // Construct the linker runtime search path. + std::string rpath_link; + const char* sep = ""; + std::vector const& dirs = + this->OrderDependentRPath->GetOrderedDirectories(); + for(std::vector::const_iterator di = dirs.begin(); + di != dirs.end(); ++di) + { + rpath_link += sep; + sep = ":"; + rpath_link += *di; + } + return rpath_link; +} + +//---------------------------------------------------------------------------- +std::vector const& cmComputeLinkInformation::GetDepends() +{ + return this->Depends; +} + +//---------------------------------------------------------------------------- +std::vector const& cmComputeLinkInformation::GetFrameworkPaths() +{ + return this->FrameworkPaths; +} + +//---------------------------------------------------------------------------- +std::set const& +cmComputeLinkInformation::GetSharedLibrariesLinked() +{ + return this->SharedLibrariesLinked; +} + +//---------------------------------------------------------------------------- +bool cmComputeLinkInformation::Compute() +{ + // Skip targets that do not link. + if(!(this->Target->GetType() == cmTarget::EXECUTABLE || + this->Target->GetType() == cmTarget::SHARED_LIBRARY || + this->Target->GetType() == cmTarget::MODULE_LIBRARY || + this->Target->GetType() == cmTarget::STATIC_LIBRARY)) + { + return false; + } + + // We require a link language for the target. + if(!this->LinkLanguage) + { + cmSystemTools:: + Error("CMake can not determine linker language for target:", + this->Target->GetName()); + return false; + } + + // Compute the ordered link line items. + cmComputeLinkDepends cld(this->Target, this->Config); + cld.SetOldLinkDirMode(this->OldLinkDirMode); + cmComputeLinkDepends::EntryVector const& linkEntries = cld.Compute(); + + // Add the link line items. + for(cmComputeLinkDepends::EntryVector::const_iterator + lei = linkEntries.begin(); + lei != linkEntries.end(); ++lei) + { + if(lei->IsSharedDep) + { + this->AddSharedDepItem(lei->Item, lei->Target); + } + else + { + this->AddItem(lei->Item, lei->Target); + } + } + + // Restore the target link type so the correct system runtime + // libraries are found. + const char* lss = this->Target->GetProperty("LINK_SEARCH_END_STATIC"); + if(cmSystemTools::IsOn(lss)) + { + this->SetCurrentLinkType(LinkStatic); + } + else + { + this->SetCurrentLinkType(this->StartLinkType); + } + + // Finish listing compatibility paths. + if(this->OldLinkDirMode) + { + // For CMake 2.4 bug-compatibility we need to consider the output + // directories of targets linked in another configuration as link + // directories. + std::set const& wrongItems = cld.GetOldWrongConfigItems(); + for(std::set::const_iterator i = wrongItems.begin(); + i != wrongItems.end(); ++i) + { + cmTarget* tgt = *i; + bool implib = + (this->UseImportLibrary && + (tgt->GetType() == cmTarget::SHARED_LIBRARY)); + std::string lib = tgt->GetFullPath(this->Config , implib, true); + this->OldLinkDirItems.push_back(lib); + } + } + + // Finish setting up linker search directories. + if(!this->FinishLinkerSearchDirectories()) + { + return false; + } + + // Add implicit language runtime libraries and directories. + this->AddImplicitLinkInfo(); + + return true; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddImplicitLinkInfo() +{ + // The link closure lists all languages whose implicit info is needed. + cmTarget::LinkClosure const* lc=this->Target->GetLinkClosure(this->Config); + for(std::vector::const_iterator li = lc->Languages.begin(); + li != lc->Languages.end(); ++li) + { + // Skip those of the linker language. They are implicit. + if(*li != this->LinkLanguage) + { + this->AddImplicitLinkInfo(*li); + } + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddImplicitLinkInfo(std::string const& lang) +{ + // Add libraries for this language that are not implied by the + // linker language. + std::string libVar = "CMAKE_"; + libVar += lang; + libVar += "_IMPLICIT_LINK_LIBRARIES"; + if(const char* libs = this->Makefile->GetDefinition(libVar.c_str())) + { + std::vector libsVec; + cmSystemTools::ExpandListArgument(libs, libsVec); + for(std::vector::const_iterator i = libsVec.begin(); + i != libsVec.end(); ++i) + { + if(this->ImplicitLinkLibs.find(*i) == this->ImplicitLinkLibs.end()) + { + this->AddItem(i->c_str(), 0); + } + } + } + + // Add linker search paths for this language that are not + // implied by the linker language. + std::string dirVar = "CMAKE_"; + dirVar += lang; + dirVar += "_IMPLICIT_LINK_DIRECTORIES"; + if(const char* dirs = this->Makefile->GetDefinition(dirVar.c_str())) + { + std::vector dirsVec; + cmSystemTools::ExpandListArgument(dirs, dirsVec); + this->OrderLinkerSearchPath->AddLanguageDirectories(dirsVec); + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddItem(std::string const& item, cmTarget* tgt) +{ + // Compute the proper name to use to link this library. + const char* config = this->Config; + bool impexe = (tgt && tgt->IsExecutableWithExports()); + if(impexe && !this->UseImportLibrary && !this->LoaderFlag) + { + // Skip linking to executables on platforms with no import + // libraries or loader flags. + return; + } + + if(tgt && tgt->IsLinkable()) + { + // This is a CMake target. Ask the target for its real name. + if(impexe && this->LoaderFlag) + { + // This link item is an executable that may provide symbols + // used by this target. A special flag is needed on this + // platform. Add it now. + std::string linkItem; + linkItem = this->LoaderFlag; + std::string exe = tgt->GetFullPath(config, this->UseImportLibrary, + true); + linkItem += exe; + this->Items.push_back(Item(linkItem, true, tgt)); + this->Depends.push_back(exe); + } + else + { + // Decide whether to use an import library. + bool implib = + (this->UseImportLibrary && + (impexe || tgt->GetType() == cmTarget::SHARED_LIBRARY)); + + // Pass the full path to the target file. + std::string lib = tgt->GetFullPath(config, implib, true); + this->Depends.push_back(lib); + + this->AddTargetItem(lib, tgt); + this->AddLibraryRuntimeInfo(lib, tgt); + } + } + else + { + // This is not a CMake target. Use the name given. + if(cmSystemTools::FileIsFullPath(item.c_str())) + { + if(cmSystemTools::FileIsDirectory(item.c_str())) + { + // This is a directory. + this->AddDirectoryItem(item); + } + else + { + // Use the full path given to the library file. + this->Depends.push_back(item); + this->AddFullItem(item); + this->AddLibraryRuntimeInfo(item); + } + } + else + { + // This is a library or option specified by the user. + this->AddUserItem(item, true); + } + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddSharedDepItem(std::string const& item, + cmTarget* tgt) +{ + // If dropping shared library dependencies, ignore them. + if(this->SharedDependencyMode == SharedDepModeNone) + { + return; + } + + // The user may have incorrectly named an item. Skip items that are + // not full paths to shared libraries. + if(tgt) + { + // The target will provide a full path. Make sure it is a shared + // library. + if(tgt->GetType() != cmTarget::SHARED_LIBRARY) + { + return; + } + } + else + { + // Skip items that are not full paths. We will not be able to + // reliably specify them. + if(!cmSystemTools::FileIsFullPath(item.c_str())) + { + return; + } + + // Get the name of the library from the file name. + std::string file = cmSystemTools::GetFilenameName(item); + if(!this->ExtractSharedLibraryName.find(file.c_str())) + { + // This is not the name of a shared library. + return; + } + } + + // If in linking mode, just link to the shared library. + if(this->SharedDependencyMode == SharedDepModeLink) + { + this->AddItem(item, tgt); + return; + } + + // Get a full path to the dependent shared library. + // Add it to the runtime path computation so that the target being + // linked will be able to find it. + std::string lib; + if(tgt) + { + lib = tgt->GetFullPath(this->Config, this->UseImportLibrary); + this->AddLibraryRuntimeInfo(lib, tgt); + } + else + { + lib = item; + this->AddLibraryRuntimeInfo(lib); + } + + // Check if we need to include the dependent shared library in other + // path ordering. + cmOrderDirectories* order = 0; + if(this->SharedDependencyMode == SharedDepModeLibDir && + !this->LinkWithRuntimePath /* AddLibraryRuntimeInfo adds it */) + { + // Add the item to the linker search path. + order = this->OrderLinkerSearchPath; + } + else if(this->SharedDependencyMode == SharedDepModeDir) + { + // Add the item to the separate dependent library search path. + order = this->OrderDependentRPath; + } + if(order) + { + if(tgt) + { + std::string soName = tgt->GetSOName(this->Config); + const char* soname = soName.empty()? 0 : soName.c_str(); + order->AddRuntimeLibrary(lib, soname); + } + else + { + order->AddRuntimeLibrary(lib); + } + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::ComputeLinkTypeInfo() +{ + // Check whether archives may actually be shared libraries. + this->ArchivesMayBeShared = + this->CMakeInstance->GetPropertyAsBool( + "TARGET_ARCHIVES_MAY_BE_SHARED_LIBS"); + + // First assume we cannot do link type stuff. + this->LinkTypeEnabled = false; + + // Lookup link type selection flags. + const char* static_link_type_flag = 0; + const char* shared_link_type_flag = 0; + const char* target_type_str = 0; + switch(this->Target->GetType()) + { + case cmTarget::EXECUTABLE: target_type_str = "EXE"; break; + case cmTarget::SHARED_LIBRARY: target_type_str = "SHARED_LIBRARY"; break; + case cmTarget::MODULE_LIBRARY: target_type_str = "SHARED_MODULE"; break; + default: break; + } + if(target_type_str) + { + std::string static_link_type_flag_var = "CMAKE_"; + static_link_type_flag_var += target_type_str; + static_link_type_flag_var += "_LINK_STATIC_"; + static_link_type_flag_var += this->LinkLanguage; + static_link_type_flag_var += "_FLAGS"; + static_link_type_flag = + this->Makefile->GetDefinition(static_link_type_flag_var.c_str()); + + std::string shared_link_type_flag_var = "CMAKE_"; + shared_link_type_flag_var += target_type_str; + shared_link_type_flag_var += "_LINK_DYNAMIC_"; + shared_link_type_flag_var += this->LinkLanguage; + shared_link_type_flag_var += "_FLAGS"; + shared_link_type_flag = + this->Makefile->GetDefinition(shared_link_type_flag_var.c_str()); + } + + // We can support link type switching only if all needed flags are + // known. + if(static_link_type_flag && *static_link_type_flag && + shared_link_type_flag && *shared_link_type_flag) + { + this->LinkTypeEnabled = true; + this->StaticLinkTypeFlag = static_link_type_flag; + this->SharedLinkTypeFlag = shared_link_type_flag; + } + + // Lookup the starting link type from the target (linked statically?). + const char* lss = this->Target->GetProperty("LINK_SEARCH_START_STATIC"); + this->StartLinkType = cmSystemTools::IsOn(lss)? LinkStatic : LinkShared; + this->CurrentLinkType = this->StartLinkType; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::ComputeItemParserInfo() +{ + // Get possible library name prefixes. + cmMakefile* mf = this->Makefile; + this->AddLinkPrefix(mf->GetDefinition("CMAKE_STATIC_LIBRARY_PREFIX")); + this->AddLinkPrefix(mf->GetDefinition("CMAKE_SHARED_LIBRARY_PREFIX")); + + // Import library names should be matched and treated as shared + // libraries for the purposes of linking. + this->AddLinkExtension(mf->GetDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX"), + LinkShared); + this->AddLinkExtension(mf->GetDefinition("CMAKE_STATIC_LIBRARY_SUFFIX"), + LinkStatic); + this->AddLinkExtension(mf->GetDefinition("CMAKE_SHARED_LIBRARY_SUFFIX"), + LinkShared); + this->AddLinkExtension(mf->GetDefinition("CMAKE_LINK_LIBRARY_SUFFIX"), + LinkUnknown); + if(const char* linkSuffixes = + mf->GetDefinition("CMAKE_EXTRA_LINK_EXTENSIONS")) + { + std::vector linkSuffixVec; + cmSystemTools::ExpandListArgument(linkSuffixes, linkSuffixVec); + for(std::vector::iterator i = linkSuffixVec.begin(); + i != linkSuffixVec.end(); ++i) + { + this->AddLinkExtension(i->c_str(), LinkUnknown); + } + } + if(const char* sharedSuffixes = + mf->GetDefinition("CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES")) + { + std::vector sharedSuffixVec; + cmSystemTools::ExpandListArgument(sharedSuffixes, sharedSuffixVec); + for(std::vector::iterator i = sharedSuffixVec.begin(); + i != sharedSuffixVec.end(); ++i) + { + this->AddLinkExtension(i->c_str(), LinkShared); + } + } + + // Compute a regex to match link extensions. + std::string libext = this->CreateExtensionRegex(this->LinkExtensions); + + // Create regex to remove any library extension. + std::string reg("(.*)"); + reg += libext; + this->OrderLinkerSearchPath->SetLinkExtensionInfo(this->LinkExtensions, + reg); + + // Create a regex to match a library name. Match index 1 will be + // the prefix if it exists and empty otherwise. Match index 2 will + // be the library name. Match index 3 will be the library + // extension. + reg = "^("; + for(std::set::iterator p = this->LinkPrefixes.begin(); + p != this->LinkPrefixes.end(); ++p) + { + reg += *p; + reg += "|"; + } + reg += ")"; + reg += "([^/:]*)"; + + // Create a regex to match any library name. + std::string reg_any = reg; + reg_any += libext; +#ifdef CM_COMPUTE_LINK_INFO_DEBUG + fprintf(stderr, "any regex [%s]\n", reg_any.c_str()); +#endif + this->ExtractAnyLibraryName.compile(reg_any.c_str()); + + // Create a regex to match static library names. + if(!this->StaticLinkExtensions.empty()) + { + std::string reg_static = reg; + reg_static += this->CreateExtensionRegex(this->StaticLinkExtensions); +#ifdef CM_COMPUTE_LINK_INFO_DEBUG + fprintf(stderr, "static regex [%s]\n", reg_static.c_str()); +#endif + this->ExtractStaticLibraryName.compile(reg_static.c_str()); + } + + // Create a regex to match shared library names. + if(!this->SharedLinkExtensions.empty()) + { + std::string reg_shared = reg; + this->SharedRegexString = + this->CreateExtensionRegex(this->SharedLinkExtensions); + reg_shared += this->SharedRegexString; +#ifdef CM_COMPUTE_LINK_INFO_DEBUG + fprintf(stderr, "shared regex [%s]\n", reg_shared.c_str()); +#endif + this->ExtractSharedLibraryName.compile(reg_shared.c_str()); + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddLinkPrefix(const char* p) +{ + if(p && *p) + { + this->LinkPrefixes.insert(p); + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddLinkExtension(const char* e, LinkType type) +{ + if(e && *e) + { + if(type == LinkStatic) + { + this->StaticLinkExtensions.push_back(e); + } + if(type == LinkShared) + { + this->SharedLinkExtensions.push_back(e); + } + this->LinkExtensions.push_back(e); + } +} + +//---------------------------------------------------------------------------- +std::string +cmComputeLinkInformation +::CreateExtensionRegex(std::vector const& exts) +{ + // Build a list of extension choices. + std::string libext = "("; + const char* sep = ""; + for(std::vector::const_iterator i = exts.begin(); + i != exts.end(); ++i) + { + // Separate this choice from the previous one. + libext += sep; + sep = "|"; + + // Store this extension choice with the "." escaped. + libext += "\\"; +#if defined(_WIN32) && !defined(__CYGWIN__) + libext += this->NoCaseExpression(i->c_str()); +#else + libext += *i; +#endif + } + + // Finish the list. + libext += ")"; + + // Add an optional OpenBSD version component. + if(this->OpenBSD) + { + libext += "(\\.[0-9]+\\.[0-9]+)?"; + } + + libext += "$"; + return libext; +} + +//---------------------------------------------------------------------------- +std::string cmComputeLinkInformation::NoCaseExpression(const char* str) +{ + std::string ret; + const char* s = str; + while(*s) + { + if(*s == '.') + { + ret += *s; + } + else + { + ret += "["; + ret += static_cast(tolower(*s)); + ret += static_cast(toupper(*s)); + ret += "]"; + } + s++; + } + return ret; +} + +//------------------------------------------------------------------- +void cmComputeLinkInformation::SetCurrentLinkType(LinkType lt) +{ + // If we are changing the current link type add the flag to tell the + // linker about it. + if(this->CurrentLinkType != lt) + { + this->CurrentLinkType = lt; + + if(this->LinkTypeEnabled) + { + switch(this->CurrentLinkType) + { + case LinkStatic: + this->Items.push_back(Item(this->StaticLinkTypeFlag, false)); + break; + case LinkShared: + this->Items.push_back(Item(this->SharedLinkTypeFlag, false)); + break; + default: + break; + } + } + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddTargetItem(std::string const& item, + cmTarget* target) +{ + // This is called to handle a link item that is a full path to a target. + // If the target is not a static library make sure the link type is + // shared. This is because dynamic-mode linking can handle both + // shared and static libraries but static-mode can handle only + // static libraries. If a previous user item changed the link type + // to static we need to make sure it is back to shared. + if(target->GetType() != cmTarget::STATIC_LIBRARY) + { + this->SetCurrentLinkType(LinkShared); + } + + // Keep track of shared library targets linked. + if(target->GetType() == cmTarget::SHARED_LIBRARY) + { + this->SharedLibrariesLinked.insert(target); + } + + // Handle case of an imported shared library with no soname. + if(this->NoSONameUsesPath && + target->IsImportedSharedLibWithoutSOName(this->Config)) + { + this->AddSharedLibNoSOName(item); + return; + } + + // If this platform wants a flag before the full path, add it. + if(!this->LibLinkFileFlag.empty()) + { + this->Items.push_back(Item(this->LibLinkFileFlag, false)); + } + + // For compatibility with CMake 2.4 include the item's directory in + // the linker search path. + if(this->OldLinkDirMode && !target->IsFrameworkOnApple() && + this->OldLinkDirMask.find(cmSystemTools::GetFilenamePath(item)) == + this->OldLinkDirMask.end()) + { + this->OldLinkDirItems.push_back(item); + } + + // Now add the full path to the library. + this->Items.push_back(Item(item, true, target)); +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddFullItem(std::string const& item) +{ + // Check for the implicit link directory special case. + if(this->CheckImplicitDirItem(item)) + { + return; + } + + // Check for case of shared library with no builtin soname. + if(this->NoSONameUsesPath && this->CheckSharedLibNoSOName(item)) + { + return; + } + + // Full path libraries should specify a valid library file name. + // See documentation of CMP0008. + if(this->Target->GetPolicyStatusCMP0008() != cmPolicies::NEW && + (strstr(this->GlobalGenerator->GetName(), "Visual Studio") || + strstr(this->GlobalGenerator->GetName(), "Xcode"))) + { + std::string file = cmSystemTools::GetFilenameName(item); + if(!this->ExtractAnyLibraryName.find(file.c_str())) + { + this->HandleBadFullItem(item, file); + return; + } + } + + // This is called to handle a link item that is a full path. + // If the target is not a static library make sure the link type is + // shared. This is because dynamic-mode linking can handle both + // shared and static libraries but static-mode can handle only + // static libraries. If a previous user item changed the link type + // to static we need to make sure it is back to shared. + if(this->LinkTypeEnabled) + { + std::string name = cmSystemTools::GetFilenameName(item); + if(this->ExtractSharedLibraryName.find(name)) + { + this->SetCurrentLinkType(LinkShared); + } + else if(!this->ExtractStaticLibraryName.find(item)) + { + // We cannot determine the type. Assume it is the target's + // default type. + this->SetCurrentLinkType(this->StartLinkType); + } + } + + // For compatibility with CMake 2.4 include the item's directory in + // the linker search path. + if(this->OldLinkDirMode && + this->OldLinkDirMask.find(cmSystemTools::GetFilenamePath(item)) == + this->OldLinkDirMask.end()) + { + this->OldLinkDirItems.push_back(item); + } + + // If this platform wants a flag before the full path, add it. + if(!this->LibLinkFileFlag.empty()) + { + this->Items.push_back(Item(this->LibLinkFileFlag, false)); + } + + // Now add the full path to the library. + this->Items.push_back(Item(item, true)); +} + +//---------------------------------------------------------------------------- +bool cmComputeLinkInformation::CheckImplicitDirItem(std::string const& item) +{ + // We only switch to a pathless item if the link type may be + // enforced. Fortunately only platforms that support link types + // seem to have magic per-architecture implicit link directories. + if(!this->LinkTypeEnabled) + { + return false; + } + + // Check if this item is in an implicit link directory. + std::string dir = cmSystemTools::GetFilenamePath(item); + if(this->ImplicitLinkDirs.find(dir) == this->ImplicitLinkDirs.end()) + { + // Only libraries in implicit link directories are converted to + // pathless items. + return false; + } + + // Only apply the policy below if the library file is one that can + // be found by the linker. + std::string file = cmSystemTools::GetFilenameName(item); + if(!this->ExtractAnyLibraryName.find(file)) + { + return false; + } + + // Many system linkers support multiple architectures by + // automatically selecting the implicit linker search path for the + // current architecture. If the library appears in an implicit link + // directory then just report the file name without the directory + // portion. This will allow the system linker to locate the proper + // library for the architecture at link time. + this->AddUserItem(file, false); + + // Make sure the link directory ordering will find the library. + this->OrderLinkerSearchPath->AddLinkLibrary(item); + + return true; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddUserItem(std::string const& item, + bool pathNotKnown) +{ + // This is called to handle a link item that does not match a CMake + // target and is not a full path. We check here if it looks like a + // library file name to automatically request the proper link type + // from the linker. For example: + // + // foo ==> -lfoo + // libfoo.a ==> -Wl,-Bstatic -lfoo + + // Pass flags through untouched. + if(item[0] == '-' || item[0] == '$' || item[0] == '`') + { + // if this is a -l option then we might need to warn about + // CMP0003 so put it in OldUserFlagItems, if it is not a -l + // or -Wl,-l (-framework -pthread), then allow it without a + // CMP0003 as -L will not affect those other linker flags + if(item.find("-l") == 0 || item.find("-Wl,-l") == 0) + { + // This is a linker option provided by the user. + this->OldUserFlagItems.push_back(item); + } + + // Restore the target link type since this item does not specify + // one. + this->SetCurrentLinkType(this->StartLinkType); + + // Use the item verbatim. + this->Items.push_back(Item(item, false)); + return; + } + + // Parse out the prefix, base, and suffix components of the + // library name. If the name matches that of a shared or static + // library then set the link type accordingly. + // + // Search for shared library names first because some platforms + // have shared libraries with names that match the static library + // pattern. For example cygwin and msys use the convention + // libfoo.dll.a for import libraries and libfoo.a for static + // libraries. On AIX a library with the name libfoo.a can be + // shared! + std::string lib; + if(this->ExtractSharedLibraryName.find(item)) + { + // This matches a shared library file name. +#ifdef CM_COMPUTE_LINK_INFO_DEBUG + fprintf(stderr, "shared regex matched [%s] [%s] [%s]\n", + this->ExtractSharedLibraryName.match(1).c_str(), + this->ExtractSharedLibraryName.match(2).c_str(), + this->ExtractSharedLibraryName.match(3).c_str()); +#endif + // Set the link type to shared. + this->SetCurrentLinkType(LinkShared); + + // Use just the library name so the linker will search. + lib = this->ExtractSharedLibraryName.match(2); + } + else if(this->ExtractStaticLibraryName.find(item)) + { + // This matches a static library file name. +#ifdef CM_COMPUTE_LINK_INFO_DEBUG + fprintf(stderr, "static regex matched [%s] [%s] [%s]\n", + this->ExtractStaticLibraryName.match(1).c_str(), + this->ExtractStaticLibraryName.match(2).c_str(), + this->ExtractStaticLibraryName.match(3).c_str()); +#endif + // Set the link type to static. + this->SetCurrentLinkType(LinkStatic); + + // Use just the library name so the linker will search. + lib = this->ExtractStaticLibraryName.match(2); + } + else if(this->ExtractAnyLibraryName.find(item)) + { + // This matches a library file name. +#ifdef CM_COMPUTE_LINK_INFO_DEBUG + fprintf(stderr, "any regex matched [%s] [%s] [%s]\n", + this->ExtractAnyLibraryName.match(1).c_str(), + this->ExtractAnyLibraryName.match(2).c_str(), + this->ExtractAnyLibraryName.match(3).c_str()); +#endif + // Restore the target link type since this item does not specify + // one. + this->SetCurrentLinkType(this->StartLinkType); + + // Use just the library name so the linker will search. + lib = this->ExtractAnyLibraryName.match(2); + } + else + { + // This is a name specified by the user. + if(pathNotKnown) + { + this->OldUserFlagItems.push_back(item); + } + + // We must ask the linker to search for a library with this name. + // Restore the target link type since this item does not specify + // one. + this->SetCurrentLinkType(this->StartLinkType); + lib = item; + } + + // Create an option to ask the linker to search for the library. + std::string out = this->LibLinkFlag; + out += lib; + out += this->LibLinkSuffix; + this->Items.push_back(Item(out, false)); + + // Here we could try to find the library the linker will find and + // add a runtime information entry for it. It would probably not be + // reliable and we want to encourage use of full paths for library + // specification. +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddFrameworkItem(std::string const& item) +{ + // Try to separate the framework name and path. + if(!this->SplitFramework.find(item.c_str())) + { + cmOStringStream e; + e << "Could not parse framework path \"" << item << "\" " + << "linked by target " << this->Target->GetName() << "."; + cmSystemTools::Error(e.str().c_str()); + return; + } + + // Add the directory portion to the framework search path. + this->AddFrameworkPath(this->SplitFramework.match(1)); + + // Add the item using the -framework option. + this->Items.push_back(Item("-framework", false)); + std::string fw = this->SplitFramework.match(2); + fw = this->LocalGenerator->EscapeForShell(fw.c_str()); + this->Items.push_back(Item(fw, false)); +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddDirectoryItem(std::string const& item) +{ + if(this->Makefile->IsOn("APPLE") + && cmSystemTools::IsPathToFramework(item.c_str())) + { + this->AddFrameworkItem(item); + } + else + { + this->DropDirectoryItem(item); + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::DropDirectoryItem(std::string const& item) +{ + // A full path to a directory was found as a link item. Warn the + // user. + cmOStringStream e; + e << "WARNING: Target \"" << this->Target->GetName() + << "\" requests linking to directory \"" << item << "\". " + << "Targets may link only to libraries. " + << "CMake is dropping the item."; + cmSystemTools::Message(e.str().c_str()); +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::ComputeFrameworkInfo() +{ + // Avoid adding system framework paths. See "man ld" on OS X. + this->FrameworkPathsEmmitted.insert("/Library/Frameworks"); + this->FrameworkPathsEmmitted.insert("/Network/Library/Frameworks"); + this->FrameworkPathsEmmitted.insert("/System/Library/Frameworks"); + + // Regular expression to extract a framework path and name. + this->SplitFramework.compile("(.*)/(.*)\\.framework$"); +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddFrameworkPath(std::string const& p) +{ + if(this->FrameworkPathsEmmitted.insert(p).second) + { + this->FrameworkPaths.push_back(p); + } +} + +//---------------------------------------------------------------------------- +bool cmComputeLinkInformation::CheckSharedLibNoSOName(std::string const& item) +{ + // This platform will use the path to a library as its soname if the + // library is given via path and was not built with an soname. If + // this is a shared library that might be the case. + std::string file = cmSystemTools::GetFilenameName(item); + if(this->ExtractSharedLibraryName.find(file)) + { + // If we can guess the soname fairly reliably then assume the + // library has one. Otherwise assume the library has no builtin + // soname. + std::string soname; + if(!cmSystemTools::GuessLibrarySOName(item, soname)) + { + this->AddSharedLibNoSOName(item); + return true; + } + } + return false; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::AddSharedLibNoSOName(std::string const& item) +{ + // We have a full path to a shared library with no soname. We need + // to ask the linker to locate the item because otherwise the path + // we give to it will be embedded in the target linked. Then at + // runtime the dynamic linker will search for the library using the + // path instead of just the name. + std::string file = cmSystemTools::GetFilenameName(item); + this->AddUserItem(file, false); + + // Make sure the link directory ordering will find the library. + this->OrderLinkerSearchPath->AddLinkLibrary(item); +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::HandleBadFullItem(std::string const& item, + std::string const& file) +{ + // Do not depend on things that do not exist. + std::vector::iterator i = + std::find(this->Depends.begin(), this->Depends.end(), item); + if(i != this->Depends.end()) + { + this->Depends.erase(i); + } + + // Tell the linker to search for the item and provide the proper + // path for it. Do not contribute to any CMP0003 warning (do not + // put in OldLinkDirItems or OldUserFlagItems). + this->AddUserItem(file, false); + this->OrderLinkerSearchPath->AddLinkLibrary(item); + + // Produce any needed message. + switch(this->Target->GetPolicyStatusCMP0008()) + { + case cmPolicies::WARN: + { + // Print the warning at most once for this item. + std::string wid = "CMP0008-WARNING-GIVEN-"; + wid += item; + if(!this->CMakeInstance->GetPropertyAsBool(wid.c_str())) + { + this->CMakeInstance->SetProperty(wid.c_str(), "1"); + cmOStringStream w; + w << (this->Makefile->GetPolicies() + ->GetPolicyWarning(cmPolicies::CMP0008)) << "\n" + << "Target \"" << this->Target->GetName() << "\" links to item\n" + << " " << item << "\n" + << "which is a full-path but not a valid library file name."; + this->CMakeInstance->IssueMessage(cmake::AUTHOR_WARNING, w.str(), + this->Target->GetBacktrace()); + } + } + case cmPolicies::OLD: + // OLD behavior does not warn. + break; + case cmPolicies::NEW: + // NEW behavior will not get here. + break; + case cmPolicies::REQUIRED_IF_USED: + case cmPolicies::REQUIRED_ALWAYS: + { + cmOStringStream e; + e << (this->Makefile->GetPolicies()-> + GetRequiredPolicyError(cmPolicies::CMP0008)) << "\n" + << "Target \"" << this->Target->GetName() << "\" links to item\n" + << " " << item << "\n" + << "which is a full-path but not a valid library file name."; + this->CMakeInstance->IssueMessage(cmake::FATAL_ERROR, e.str(), + this->Target->GetBacktrace()); + } + break; + } +} + +//---------------------------------------------------------------------------- +bool cmComputeLinkInformation::FinishLinkerSearchDirectories() +{ + // Support broken projects if necessary. + if(this->OldLinkDirItems.empty() || this->OldUserFlagItems.empty() || + !this->OldLinkDirMode) + { + return true; + } + + // Enforce policy constraints. + switch(this->Target->GetPolicyStatusCMP0003()) + { + case cmPolicies::WARN: + if(!this->CMakeInstance->GetPropertyAsBool("CMP0003-WARNING-GIVEN")) + { + this->CMakeInstance->SetProperty("CMP0003-WARNING-GIVEN", "1"); + cmOStringStream w; + this->PrintLinkPolicyDiagnosis(w); + this->CMakeInstance->IssueMessage(cmake::AUTHOR_WARNING, w.str(), + this->Target->GetBacktrace()); + } + case cmPolicies::OLD: + // OLD behavior is to add the paths containing libraries with + // known full paths as link directories. + break; + case cmPolicies::NEW: + // Should never happen due to assignment of OldLinkDirMode + return true; + case cmPolicies::REQUIRED_IF_USED: + case cmPolicies::REQUIRED_ALWAYS: + { + cmOStringStream e; + e << (this->Makefile->GetPolicies()-> + GetRequiredPolicyError(cmPolicies::CMP0003)) << "\n"; + this->PrintLinkPolicyDiagnosis(e); + this->CMakeInstance->IssueMessage(cmake::FATAL_ERROR, e.str(), + this->Target->GetBacktrace()); + return false; + } + } + + // Add the link directories for full path items. + for(std::vector::const_iterator + i = this->OldLinkDirItems.begin(); + i != this->OldLinkDirItems.end(); ++i) + { + this->OrderLinkerSearchPath->AddLinkLibrary(*i); + } + return true; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::PrintLinkPolicyDiagnosis(std::ostream& os) +{ + // Tell the user what to do. + os << "Policy CMP0003 should be set before this line. " + << "Add code such as\n" + << " if(COMMAND cmake_policy)\n" + << " cmake_policy(SET CMP0003 NEW)\n" + << " endif(COMMAND cmake_policy)\n" + << "as early as possible but after the most recent call to " + << "cmake_minimum_required or cmake_policy(VERSION). "; + + // List the items that might need the old-style paths. + os << "This warning appears because target \"" + << this->Target->GetName() << "\" " + << "links to some libraries for which the linker must search:\n"; + { + // Format the list of unknown items to be as short as possible while + // still fitting in the allowed width (a true solution would be the + // bin packing problem if we were allowed to change the order). + std::string::size_type max_size = 76; + std::string line; + const char* sep = " "; + for(std::vector::const_iterator + i = this->OldUserFlagItems.begin(); + i != this->OldUserFlagItems.end(); ++i) + { + // If the addition of another item will exceed the limit then + // output the current line and reset it. Note that the separator + // is either " " or ", " which is always 2 characters. + if(!line.empty() && (line.size() + i->size() + 2) > max_size) + { + os << line << "\n"; + sep = " "; + line = ""; + } + line += sep; + line += *i; + // Convert to the other separator. + sep = ", "; + } + if(!line.empty()) + { + os << line << "\n"; + } + } + + // List the paths old behavior is adding. + os << "and other libraries with known full path:\n"; + std::set emitted; + for(std::vector::const_iterator + i = this->OldLinkDirItems.begin(); + i != this->OldLinkDirItems.end(); ++i) + { + if(emitted.insert(cmSystemTools::GetFilenamePath(*i)).second) + { + os << " " << *i << "\n"; + } + } + + // Explain. + os << "CMake is adding directories in the second list to the linker " + << "search path in case they are needed to find libraries from the " + << "first list (for backwards compatibility with CMake 2.4). " + << "Set policy CMP0003 to OLD or NEW to enable or disable this " + << "behavior explicitly. " + << "Run \"cmake --help-policy CMP0003\" for more information."; +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::LoadImplicitLinkInfo() +{ + std::vector implicitDirVec; + + // Get platform-wide implicit directories. + if(const char* implicitLinks = + (this->Makefile->GetDefinition + ("CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES"))) + { + cmSystemTools::ExpandListArgument(implicitLinks, implicitDirVec); + } + + // Append library architecture to all implicit platform directories + // and add them to the set + if(const char* libraryArch = + this->Makefile->GetDefinition("CMAKE_LIBRARY_ARCHITECTURE")) + { + for (std::vector::const_iterator i = implicitDirVec.begin(); + i != implicitDirVec.end(); ++i) + { + this->ImplicitLinkDirs.insert(*i + "/" + libraryArch); + } + } + + // Get language-specific implicit directories. + std::string implicitDirVar = "CMAKE_"; + implicitDirVar += this->LinkLanguage; + implicitDirVar += "_IMPLICIT_LINK_DIRECTORIES"; + if(const char* implicitDirs = + this->Makefile->GetDefinition(implicitDirVar.c_str())) + { + cmSystemTools::ExpandListArgument(implicitDirs, implicitDirVec); + } + + // Store implicit link directories. + for(std::vector::const_iterator i = implicitDirVec.begin(); + i != implicitDirVec.end(); ++i) + { + this->ImplicitLinkDirs.insert(*i); + } + + // Get language-specific implicit libraries. + std::vector implicitLibVec; + std::string implicitLibVar = "CMAKE_"; + implicitLibVar += this->LinkLanguage; + implicitLibVar += "_IMPLICIT_LINK_LIBRARIES"; + if(const char* implicitLibs = + this->Makefile->GetDefinition(implicitLibVar.c_str())) + { + cmSystemTools::ExpandListArgument(implicitLibs, implicitLibVec); + } + + // Store implicit link libraries. + for(std::vector::const_iterator i = implicitLibVec.begin(); + i != implicitLibVec.end(); ++i) + { + // Items starting in '-' but not '-l' are flags, not libraries, + // and should not be filtered by this implicit list. + std::string const& item = *i; + if(item[0] != '-' || item[1] == 'l') + { + this->ImplicitLinkLibs.insert(item); + } + } + + // Get platform specific rpath link directories + if(const char *rpathDirs = + (this->Makefile->GetDefinition + ("CMAKE_PLATFORM_RUNTIME_PATH"))) + { + cmSystemTools::ExpandListArgument(rpathDirs, this->RuntimeLinkDirs); + } +} + +//---------------------------------------------------------------------------- +std::vector const& +cmComputeLinkInformation::GetRuntimeSearchPath() +{ + return this->OrderRuntimeSearchPath->GetOrderedDirectories(); +} + +//---------------------------------------------------------------------------- +void +cmComputeLinkInformation::AddLibraryRuntimeInfo(std::string const& fullPath, + cmTarget* target) +{ + // Libraries with unknown type must be handled using just the file + // on disk. + if(target->GetType() == cmTarget::UNKNOWN_LIBRARY) + { + this->AddLibraryRuntimeInfo(fullPath); + return; + } + + // Skip targets that are not shared libraries (modules cannot be linked). + if(target->GetType() != cmTarget::SHARED_LIBRARY) + { + return; + } + + // Try to get the soname of the library. Only files with this name + // could possibly conflict. + std::string soName = target->GetSOName(this->Config); + const char* soname = soName.empty()? 0 : soName.c_str(); + + // Include this library in the runtime path ordering. + this->OrderRuntimeSearchPath->AddRuntimeLibrary(fullPath, soname); + if(this->LinkWithRuntimePath) + { + this->OrderLinkerSearchPath->AddRuntimeLibrary(fullPath, soname); + } +} + +//---------------------------------------------------------------------------- +void +cmComputeLinkInformation::AddLibraryRuntimeInfo(std::string const& fullPath) +{ + // Get the name of the library from the file name. + std::string file = cmSystemTools::GetFilenameName(fullPath); + if(!this->ExtractSharedLibraryName.find(file.c_str())) + { + // On some platforms (AIX) a shared library may look static. + if(this->ArchivesMayBeShared) + { + if(!this->ExtractStaticLibraryName.find(file.c_str())) + { + // This is not the name of a shared library or archive. + return; + } + } + else + { + // This is not the name of a shared library. + return; + } + } + + // Include this library in the runtime path ordering. + this->OrderRuntimeSearchPath->AddRuntimeLibrary(fullPath); + if(this->LinkWithRuntimePath) + { + this->OrderLinkerSearchPath->AddRuntimeLibrary(fullPath); + } +} + +//---------------------------------------------------------------------------- +void cmComputeLinkInformation::GetRPath(std::vector& runtimeDirs, + bool for_install) +{ + // Select whether to generate runtime search directories. + bool outputRuntime = + !this->Makefile->IsOn("CMAKE_SKIP_RPATH") && !this->RuntimeFlag.empty(); + + // Select whether to generate an rpath for the install tree or the + // build tree. + bool linking_for_install = + (for_install || + this->Target->GetPropertyAsBool("BUILD_WITH_INSTALL_RPATH")); + bool use_install_rpath = + (outputRuntime && this->Target->HaveInstallTreeRPATH() && + linking_for_install); + bool use_build_rpath = + (outputRuntime && this->Target->HaveBuildTreeRPATH() && + !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. + if(use_install_rpath) + { + const char* install_rpath = this->Target->GetProperty("INSTALL_RPATH"); + cmSystemTools::ExpandListArgument(install_rpath, runtimeDirs); + } + if(use_build_rpath || use_link_rpath) + { + std::vector const& rdirs = this->GetRuntimeSearchPath(); + for(std::vector::const_iterator ri = rdirs.begin(); + ri != rdirs.end(); ++ri) + { + // Put this directory in the rpath if using build-tree rpath + // support or if using the link path as an rpath. + if(use_build_rpath) + { + runtimeDirs.push_back(*ri); + } + else if(use_link_rpath) + { + // Do not add any path inside the source or build tree. + const char* topSourceDir = this->Makefile->GetHomeDirectory(); + const char* topBinaryDir = this->Makefile->GetHomeOutputDirectory(); + if(!cmSystemTools::ComparePath(ri->c_str(), topSourceDir) && + !cmSystemTools::ComparePath(ri->c_str(), topBinaryDir) && + !cmSystemTools::IsSubDirectory(ri->c_str(), topSourceDir) && + !cmSystemTools::IsSubDirectory(ri->c_str(), topBinaryDir)) + { + runtimeDirs.push_back(*ri); + } + } + } + } + + // Add runtime paths required by the platform to always be + // present. This is done even when skipping rpath support. + cmSystemTools::ExpandListArgument(this->RuntimeAlways.c_str(), runtimeDirs); +} + +//---------------------------------------------------------------------------- +std::string cmComputeLinkInformation::GetRPathString(bool for_install) +{ + // Get the directories to use. + std::vector runtimeDirs; + this->GetRPath(runtimeDirs, for_install); + + // Concatenate the paths. + std::string rpath; + const char* sep = ""; + for(std::vector::const_iterator ri = runtimeDirs.begin(); + ri != runtimeDirs.end(); ++ri) + { + // Separate from previous path. + rpath += sep; + sep = this->GetRuntimeSep().c_str(); + + // Add this path. + rpath += *ri; + } + + // If the rpath will be replaced at install time, prepare space. + if(!for_install && this->RuntimeUseChrpath) + { + if(!rpath.empty()) + { + // Add one trailing separator so the linker does not re-use the + // rpath .dynstr entry for a symbol name that happens to match + // the end of the rpath string. + rpath += this->GetRuntimeSep(); + } + + // Make sure it is long enough to hold the replacement value. + std::string::size_type minLength = this->GetChrpathString().length(); + while(rpath.length() < minLength) + { + rpath += this->GetRuntimeSep(); + } + } + + return rpath; +} + +//---------------------------------------------------------------------------- +std::string cmComputeLinkInformation::GetChrpathString() +{ + if(!this->RuntimeUseChrpath) + { + return ""; + } + + return this->GetRPathString(true); +} diff --git a/Source/cmComputeLinkInformation.h b/Source/cmComputeLinkInformation.h new file mode 100644 index 0000000..f60f8d3 --- /dev/null +++ b/Source/cmComputeLinkInformation.h @@ -0,0 +1,185 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmComputeLinkInformation_h +#define cmComputeLinkInformation_h + +#include "cmStandardIncludes.h" + +#include + +class cmake; +class cmGlobalGenerator; +class cmLocalGenerator; +class cmMakefile; +class cmTarget; +class cmOrderDirectories; + +/** \class cmComputeLinkInformation + * \brief Compute link information for a target in one configuration. + */ +class cmComputeLinkInformation +{ +public: + cmComputeLinkInformation(cmTarget* target, const char* config); + ~cmComputeLinkInformation(); + bool Compute(); + + struct Item + { + Item(): Value(), IsPath(true), Target(0) {} + Item(Item const& item): + Value(item.Value), IsPath(item.IsPath), Target(item.Target) {} + Item(std::string const& v, bool p, cmTarget* target = 0): + Value(v), IsPath(p), Target(target) {} + std::string Value; + bool IsPath; + cmTarget* Target; + }; + typedef std::vector ItemVector; + ItemVector const& GetItems(); + std::vector const& GetDirectories(); + std::vector const& GetDepends(); + std::vector const& GetFrameworkPaths(); + const char* GetLinkLanguage() const { return this->LinkLanguage; } + std::vector const& GetRuntimeSearchPath(); + std::string const& GetRuntimeFlag() const { return this->RuntimeFlag; } + std::string const& GetRuntimeSep() const { return this->RuntimeSep; } + void GetRPath(std::vector& runtimeDirs, bool for_install); + std::string GetRPathString(bool for_install); + std::string GetChrpathString(); + std::set const& GetSharedLibrariesLinked(); + + std::string const& GetRPathLinkFlag() const { return this->RPathLinkFlag; } + std::string GetRPathLinkString(); +private: + void AddItem(std::string const& item, cmTarget* tgt); + void AddSharedDepItem(std::string const& item, cmTarget* tgt); + + // Output information. + ItemVector Items; + std::vector Directories; + std::vector Depends; + std::vector FrameworkPaths; + std::vector RuntimeSearchPath; + std::set SharedLibrariesLinked; + + // Context information. + cmTarget* Target; + cmMakefile* Makefile; + cmLocalGenerator* LocalGenerator; + cmGlobalGenerator* GlobalGenerator; + cmake* CMakeInstance; + + // Configuration information. + const char* Config; + const char* LinkLanguage; + + // Modes for dealing with dependent shared libraries. + enum SharedDepMode + { + SharedDepModeNone, // Drop + SharedDepModeDir, // List dir in -rpath-link flag + SharedDepModeLibDir, // List dir in linker search path + SharedDepModeLink // List file on link line + }; + + // System info. + bool UseImportLibrary; + const char* LoaderFlag; + std::string LibLinkFlag; + std::string LibLinkFileFlag; + std::string LibLinkSuffix; + std::string RuntimeFlag; + std::string RuntimeSep; + std::string RuntimeAlways; + bool RuntimeUseChrpath; + bool NoSONameUsesPath; + bool LinkWithRuntimePath; + std::string RPathLinkFlag; + SharedDepMode SharedDependencyMode; + + // Link type adjustment. + void ComputeLinkTypeInfo(); + enum LinkType { LinkUnknown, LinkStatic, LinkShared }; + LinkType StartLinkType; + LinkType CurrentLinkType; + std::string StaticLinkTypeFlag; + std::string SharedLinkTypeFlag; + bool LinkTypeEnabled; + void SetCurrentLinkType(LinkType lt); + bool ArchivesMayBeShared; + + // Link item parsing. + void ComputeItemParserInfo(); + std::vector StaticLinkExtensions; + std::vector SharedLinkExtensions; + std::vector LinkExtensions; + std::set LinkPrefixes; + cmsys::RegularExpression ExtractStaticLibraryName; + cmsys::RegularExpression ExtractSharedLibraryName; + cmsys::RegularExpression ExtractAnyLibraryName; + std::string SharedRegexString; + bool OpenBSD; + void AddLinkPrefix(const char* p); + void AddLinkExtension(const char* e, LinkType type); + std::string CreateExtensionRegex(std::vector const& exts); + std::string NoCaseExpression(const char* str); + + // Handling of link items. + void AddTargetItem(std::string const& item, cmTarget* target); + void AddFullItem(std::string const& item); + bool CheckImplicitDirItem(std::string const& item); + void AddUserItem(std::string const& item, bool pathNotKnown); + void AddDirectoryItem(std::string const& item); + void AddFrameworkItem(std::string const& item); + void DropDirectoryItem(std::string const& item); + bool CheckSharedLibNoSOName(std::string const& item); + void AddSharedLibNoSOName(std::string const& item); + void HandleBadFullItem(std::string const& item, std::string const& file); + + // Framework info. + void ComputeFrameworkInfo(); + void AddFrameworkPath(std::string const& p); + std::set FrameworkPathsEmmitted; + cmsys::RegularExpression SplitFramework; + + // Linker search path computation. + cmOrderDirectories* OrderLinkerSearchPath; + bool FinishLinkerSearchDirectories(); + void PrintLinkPolicyDiagnosis(std::ostream&); + + // Implicit link libraries and directories for linker language. + void LoadImplicitLinkInfo(); + void AddImplicitLinkInfo(); + void AddImplicitLinkInfo(std::string const& lang); + std::set ImplicitLinkDirs; + std::set ImplicitLinkLibs; + + // Additional paths configured by the runtime linker + std::vector RuntimeLinkDirs; + + // Linker search path compatibility mode. + std::set OldLinkDirMask; + std::vector OldLinkDirItems; + std::vector OldUserFlagItems; + bool OldLinkDirMode; + + // Runtime path computation. + cmOrderDirectories* OrderRuntimeSearchPath; + void AddLibraryRuntimeInfo(std::string const& fullPath, cmTarget* target); + void AddLibraryRuntimeInfo(std::string const& fullPath); + + // Dependent library path computation. + cmOrderDirectories* OrderDependentRPath; +}; + +#endif diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx new file mode 100644 index 0000000..ab77c6b --- /dev/null +++ b/Source/cmComputeTargetDepends.cxx @@ -0,0 +1,537 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmComputeTargetDepends.h" + +#include "cmComputeComponentGraph.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmMakefile.h" +#include "cmSystemTools.h" +#include "cmTarget.h" +#include "cmake.h" + +#include + +#include + +/* + +This class is meant to analyze inter-target dependencies globally +during the generation step. The goal is to produce a set of direct +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 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. + +In order to safely break dependency cycles we must preserve all other +dependencies passing through the corresponding strongly connected component. +The approach taken by this class is as follows: + + - Collect all targets and form the original dependency graph + - Run Tarjan's algorithm to extract the strongly connected components + (error if any member of a non-trivial component is not STATIC) + - The original dependencies imply a DAG on the components. + Use the implied DAG to construct a final safe set of dependencies. + +The final dependency set is constructed as follows: + + - For each connected component targets are placed in an arbitrary + order. Each target depends on the target following it in the order. + The first target is designated the head and the last target the tail. + (most components will be just 1 target anyway) + + - Original dependencies between targets in different components are + converted to connect the depender's component tail to the + dependee's component head. + +In most cases this will reproduce the original dependencies. However +when there are cycles of static libraries they will be broken in a +safe manner. + +For example, consider targets A0, A1, A2, B0, B1, B2, and C with these +dependencies: + + A0 -> A1 -> A2 -> A0 , B0 -> B1 -> B2 -> B0 -> A0 , C -> B0 + +Components may be identified as + + Component 0: A0, A1, A2 + Component 1: B0, B1, B2 + Component 2: C + +Intra-component dependencies are: + + 0: A0 -> A1 -> A2 , head=A0, tail=A2 + 1: B0 -> B1 -> B2 , head=B0, tail=B2 + 2: head=C, tail=C + +The inter-component dependencies are converted as: + + B0 -> A0 is component 1->0 and becomes B2 -> A0 + C -> B0 is component 2->1 and becomes C -> B0 + +This leads to the final target dependencies: + + C -> B0 -> B1 -> B2 -> A0 -> A1 -> A2 + +These produce a safe build order since C depends directly or +transitively on all the static libraries it links. + +*/ + +//---------------------------------------------------------------------------- +cmComputeTargetDepends::cmComputeTargetDepends(cmGlobalGenerator* gg) +{ + this->GlobalGenerator = gg; + cmake* cm = this->GlobalGenerator->GetCMakeInstance(); + this->DebugMode = cm->GetPropertyAsBool("GLOBAL_DEPENDS_DEBUG_MODE"); + this->NoCycles = cm->GetPropertyAsBool("GLOBAL_DEPENDS_NO_CYCLES"); +} + +//---------------------------------------------------------------------------- +cmComputeTargetDepends::~cmComputeTargetDepends() +{ +} + +//---------------------------------------------------------------------------- +bool cmComputeTargetDepends::Compute() +{ + // Build the original graph. + this->CollectTargets(); + this->CollectDepends(); + if(this->DebugMode) + { + this->DisplayGraph(this->InitialGraph, "initial"); + } + + // Identify components. + cmComputeComponentGraph ccg(this->InitialGraph); + if(this->DebugMode) + { + this->DisplayComponents(ccg); + } + if(!this->CheckComponents(ccg)) + { + return false; + } + + // Compute the final dependency graph. + if(!this->ComputeFinalDepends(ccg)) + { + return false; + } + if(this->DebugMode) + { + this->DisplayGraph(this->FinalGraph, "final"); + } + + return true; +} + +//---------------------------------------------------------------------------- +void +cmComputeTargetDepends::GetTargetDirectDepends(cmTarget* t, + cmTargetDependSet& deps) +{ + // Lookup the index for this target. All targets should be known by + // this point. + std::map::const_iterator tii = this->TargetIndex.find(t); + assert(tii != this->TargetIndex.end()); + int i = tii->second; + + // Get its final dependencies. + EdgeList const& nl = this->FinalGraph[i]; + for(EdgeList::const_iterator ni = nl.begin(); ni != nl.end(); ++ni) + { + cmTarget* dep = this->Targets[*ni]; + cmTargetDependSet::iterator di = deps.insert(dep).first; + di->SetType(ni->IsStrong()); + } +} + +//---------------------------------------------------------------------------- +void cmComputeTargetDepends::CollectTargets() +{ + // Collect all targets from all generators. + std::vector const& lgens = + this->GlobalGenerator->GetLocalGenerators(); + for(unsigned int i = 0; i < lgens.size(); ++i) + { + cmTargets& targets = lgens[i]->GetMakefile()->GetTargets(); + for(cmTargets::iterator ti = targets.begin(); ti != targets.end(); ++ti) + { + cmTarget* target = &ti->second; + int index = static_cast(this->Targets.size()); + this->TargetIndex[target] = index; + this->Targets.push_back(target); + } + } +} + +//---------------------------------------------------------------------------- +void cmComputeTargetDepends::CollectDepends() +{ + // Allocate the dependency graph adjacency lists. + this->InitialGraph.resize(this->Targets.size()); + + // Compute each dependency list. + for(unsigned int i=0; i < this->Targets.size(); ++i) + { + this->CollectTargetDepends(i); + } +} + +//---------------------------------------------------------------------------- +void cmComputeTargetDepends::CollectTargetDepends(int depender_index) +{ + // Get the depender. + cmTarget* depender = this->Targets[depender_index]; + + // Loop over all targets linked directly. + { + cmTarget::LinkLibraryVectorType const& tlibs = + depender->GetOriginalLinkLibraries(); + std::set emitted; + // A target should not depend on itself. + emitted.insert(depender->GetName()); + for(cmTarget::LinkLibraryVectorType::const_iterator lib = tlibs.begin(); + lib != tlibs.end(); ++lib) + { + // Don't emit the same library twice for this target. + if(emitted.insert(lib->first).second) + { + this->AddTargetDepend(depender_index, lib->first.c_str(), true); + } + } + } + + // Loop over all utility dependencies. + { + std::set const& tutils = depender->GetUtilities(); + std::set emitted; + // A target should not depend on itself. + emitted.insert(depender->GetName()); + for(std::set::const_iterator util = tutils.begin(); + util != tutils.end(); ++util) + { + // Don't emit the same utility twice for this target. + if(emitted.insert(*util).second) + { + this->AddTargetDepend(depender_index, util->c_str(), false); + } + } + } +} + +//---------------------------------------------------------------------------- +void cmComputeTargetDepends::AddTargetDepend(int depender_index, + const char* dependee_name, + bool linking) +{ + // Get the depender. + cmTarget* depender = this->Targets[depender_index]; + + // Check the target's makefile first. + cmTarget* dependee = + depender->GetMakefile()->FindTargetToUse(dependee_name); + + // Skip targets that will not really be linked. This is probably a + // name conflict between an external library and an executable + // within the project. + if(linking && dependee && + dependee->GetType() == cmTarget::EXECUTABLE && + !dependee->IsExecutableWithExports()) + { + dependee = 0; + } + + if(dependee) + { + this->AddTargetDepend(depender_index, dependee, linking); + } +} + +//---------------------------------------------------------------------------- +void cmComputeTargetDepends::AddTargetDepend(int depender_index, + cmTarget* dependee, + bool linking) +{ + if(dependee->IsImported()) + { + // Skip imported targets but follow their utility dependencies. + std::set const& utils = dependee->GetUtilities(); + for(std::set::const_iterator i = utils.begin(); + i != utils.end(); ++i) + { + if(cmTarget* transitive_dependee = + dependee->GetMakefile()->FindTargetToUse(i->c_str())) + { + this->AddTargetDepend(depender_index, transitive_dependee, false); + } + } + } + else + { + // Lookup the index for this target. All targets should be known by + // this point. + std::map::const_iterator tii = + this->TargetIndex.find(dependee); + assert(tii != this->TargetIndex.end()); + int dependee_index = tii->second; + + // Add this entry to the dependency graph. + this->InitialGraph[depender_index].push_back( + cmGraphEdge(dependee_index, !linking)); + } +} + +//---------------------------------------------------------------------------- +void +cmComputeTargetDepends::DisplayGraph(Graph const& graph, const char* name) +{ + fprintf(stderr, "The %s target dependency graph is:\n", name); + int n = static_cast(graph.size()); + for(int depender_index = 0; depender_index < n; ++depender_index) + { + EdgeList const& nl = graph[depender_index]; + cmTarget* depender = this->Targets[depender_index]; + fprintf(stderr, "target %d is [%s]\n", + depender_index, depender->GetName()); + for(EdgeList::const_iterator ni = nl.begin(); ni != nl.end(); ++ni) + { + int dependee_index = *ni; + cmTarget* dependee = this->Targets[dependee_index]; + fprintf(stderr, " depends on target %d [%s] (%s)\n", dependee_index, + dependee->GetName(), ni->IsStrong()? "strong" : "weak"); + } + } + fprintf(stderr, "\n"); +} + +//---------------------------------------------------------------------------- +void +cmComputeTargetDepends +::DisplayComponents(cmComputeComponentGraph const& ccg) +{ + fprintf(stderr, "The strongly connected components are:\n"); + std::vector const& components = ccg.GetComponents(); + int n = static_cast(components.size()); + for(int c = 0; c < n; ++c) + { + NodeList const& nl = components[c]; + fprintf(stderr, "Component (%d):\n", c); + for(NodeList::const_iterator ni = nl.begin(); ni != nl.end(); ++ni) + { + int i = *ni; + fprintf(stderr, " contains target %d [%s]\n", + i, this->Targets[i]->GetName()); + } + } + fprintf(stderr, "\n"); +} + +//---------------------------------------------------------------------------- +bool +cmComputeTargetDepends +::CheckComponents(cmComputeComponentGraph const& ccg) +{ + // All non-trivial components should consist only of static + // libraries. + std::vector const& components = ccg.GetComponents(); + int nc = static_cast(components.size()); + for(int c=0; c < nc; ++c) + { + // Get the current component. + NodeList const& nl = components[c]; + + // Skip trivial components. + if(nl.size() < 2) + { + continue; + } + + // Immediately complain if no cycles are allowed at all. + if(this->NoCycles) + { + this->ComplainAboutBadComponent(ccg, c); + return false; + } + + // Make sure the component is all STATIC_LIBRARY targets. + for(NodeList::const_iterator ni = nl.begin(); ni != nl.end(); ++ni) + { + if(this->Targets[*ni]->GetType() != cmTarget::STATIC_LIBRARY) + { + this->ComplainAboutBadComponent(ccg, c); + return false; + } + } + } + return true; +} + +//---------------------------------------------------------------------------- +void +cmComputeTargetDepends +::ComplainAboutBadComponent(cmComputeComponentGraph const& ccg, int c, + bool strong) +{ + // Construct the error message. + cmOStringStream e; + e << "The inter-target dependency graph contains the following " + << "strongly connected component (cycle):\n"; + std::vector const& components = ccg.GetComponents(); + std::vector const& cmap = ccg.GetComponentMap(); + NodeList const& cl = components[c]; + for(NodeList::const_iterator ci = cl.begin(); ci != cl.end(); ++ci) + { + // Get the depender. + int i = *ci; + cmTarget* depender = this->Targets[i]; + + // Describe the depender. + e << " \"" << depender->GetName() << "\" of type " + << cmTarget::GetTargetTypeName(depender->GetType()) << "\n"; + + // List its dependencies that are inside the component. + EdgeList const& nl = this->InitialGraph[i]; + for(EdgeList::const_iterator ni = nl.begin(); ni != nl.end(); ++ni) + { + int j = *ni; + if(cmap[j] == c) + { + cmTarget* dependee = this->Targets[j]; + e << " depends on \"" << dependee->GetName() << "\"" + << " (" << (ni->IsStrong()? "strong" : "weak") << ")\n"; + } + } + } + if(strong) + { + // Custom command executable dependencies cannot occur within a + // component of static libraries. The cycle must appear in calls + // to add_dependencies. + e << "The component contains at least one cycle consisting of strong " + << "dependencies (created by add_dependencies) that cannot be broken."; + } + else if(this->NoCycles) + { + e << "The GLOBAL_DEPENDS_NO_CYCLES global property is enabled, so " + << "cyclic dependencies are not allowed even among static libraries."; + } + else + { + e << "At least one of these targets is not a STATIC_LIBRARY. " + << "Cyclic dependencies are allowed only among static libraries."; + } + cmSystemTools::Error(e.str().c_str()); +} + +//---------------------------------------------------------------------------- +bool +cmComputeTargetDepends +::IntraComponent(std::vector const& cmap, int c, int i, int* head, + std::set& emitted, std::set& visited) +{ + if(!visited.insert(i).second) + { + // Cycle in utility depends! + return false; + } + if(emitted.insert(i).second) + { + // Honor strong intra-component edges in the final order. + EdgeList const& el = this->InitialGraph[i]; + for(EdgeList::const_iterator ei = el.begin(); ei != el.end(); ++ei) + { + int j = *ei; + if(cmap[j] == c && ei->IsStrong()) + { + this->FinalGraph[i].push_back(cmGraphEdge(j, true)); + if(!this->IntraComponent(cmap, c, j, head, emitted, visited)) + { + return false; + } + } + } + + // Prepend to a linear linked-list of intra-component edges. + if(*head >= 0) + { + this->FinalGraph[i].push_back(cmGraphEdge(*head, false)); + } + else + { + this->ComponentTail[c] = i; + } + *head = i; + } + return true; +} + +//---------------------------------------------------------------------------- +bool +cmComputeTargetDepends +::ComputeFinalDepends(cmComputeComponentGraph const& ccg) +{ + // Get the component graph information. + std::vector const& components = ccg.GetComponents(); + Graph const& cgraph = ccg.GetComponentGraph(); + + // Allocate the final graph. + this->FinalGraph.resize(0); + this->FinalGraph.resize(this->InitialGraph.size()); + + // Choose intra-component edges to linearize dependencies. + std::vector const& cmap = ccg.GetComponentMap(); + this->ComponentHead.resize(components.size()); + this->ComponentTail.resize(components.size()); + int nc = static_cast(components.size()); + for(int c=0; c < nc; ++c) + { + int head = -1; + std::set emitted; + NodeList const& nl = components[c]; + for(NodeList::const_reverse_iterator ni = nl.rbegin(); + ni != nl.rend(); ++ni) + { + std::set visited; + if(!this->IntraComponent(cmap, c, *ni, &head, emitted, visited)) + { + // Cycle in add_dependencies within component! + this->ComplainAboutBadComponent(ccg, c, true); + return false; + } + } + this->ComponentHead[c] = head; + } + + // Convert inter-component edges to connect component tails to heads. + int n = static_cast(cgraph.size()); + for(int depender_component=0; depender_component < n; ++depender_component) + { + int depender_component_tail = this->ComponentTail[depender_component]; + EdgeList const& nl = cgraph[depender_component]; + for(EdgeList::const_iterator ni = nl.begin(); ni != nl.end(); ++ni) + { + int dependee_component = *ni; + int dependee_component_head = this->ComponentHead[dependee_component]; + this->FinalGraph[depender_component_tail] + .push_back(cmGraphEdge(dependee_component_head, ni->IsStrong())); + } + } + return true; +} diff --git a/Source/cmComputeTargetDepends.h b/Source/cmComputeTargetDepends.h new file mode 100644 index 0000000..67bce72 --- /dev/null +++ b/Source/cmComputeTargetDepends.h @@ -0,0 +1,82 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmComputeTargetDepends_h +#define cmComputeTargetDepends_h + +#include "cmStandardIncludes.h" + +#include "cmGraphAdjacencyList.h" + +#include + +class cmComputeComponentGraph; +class cmGlobalGenerator; +class cmTarget; +class cmTargetDependSet; + +/** \class cmComputeTargetDepends + * \brief Compute global interdependencies among targets. + * + * Static libraries may form cycles in the target dependency graph. + * This class evaluates target dependencies globally and adjusts them + * to remove cycles while preserving a safe build order. + */ +class cmComputeTargetDepends +{ +public: + cmComputeTargetDepends(cmGlobalGenerator* gg); + ~cmComputeTargetDepends(); + + bool Compute(); + + std::vector const& GetTargets() const { return this->Targets; } + void GetTargetDirectDepends(cmTarget* t, cmTargetDependSet& deps); +private: + void CollectTargets(); + void CollectDepends(); + void CollectTargetDepends(int depender_index); + void AddTargetDepend(int depender_index, const char* dependee_name, + bool linking); + void AddTargetDepend(int depender_index, cmTarget* dependee, bool linking); + bool ComputeFinalDepends(cmComputeComponentGraph const& ccg); + + cmGlobalGenerator* GlobalGenerator; + bool DebugMode; + bool NoCycles; + + // Collect all targets. + std::vector Targets; + std::map TargetIndex; + + // Represent the target dependency graph. The entry at each + // top-level index corresponds to a depender whose dependencies are + // listed. + typedef cmGraphNodeList NodeList; + typedef cmGraphEdgeList EdgeList; + typedef cmGraphAdjacencyList Graph; + Graph InitialGraph; + Graph FinalGraph; + void DisplayGraph(Graph const& graph, const char* name); + + // Deal with connected components. + void DisplayComponents(cmComputeComponentGraph const& ccg); + bool CheckComponents(cmComputeComponentGraph const& ccg); + void ComplainAboutBadComponent(cmComputeComponentGraph const& ccg, int c, + bool strong = false); + + std::vector ComponentHead; + std::vector ComponentTail; + bool IntraComponent(std::vector const& cmap, int c, int i, int* head, + std::set& emitted, std::set& visited); +}; + +#endif diff --git a/Source/cmConfigure.cmake.h.in b/Source/cmConfigure.cmake.h.in new file mode 100644 index 0000000..114afd7 --- /dev/null +++ b/Source/cmConfigure.cmake.h.in @@ -0,0 +1,22 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#cmakedefine CMAKE_NO_STD_NAMESPACE +#cmakedefine CMAKE_NO_ANSI_STREAM_HEADERS +#cmakedefine CMAKE_NO_ANSI_STRING_STREAM +#cmakedefine CMAKE_NO_ANSI_FOR_SCOPE +#cmakedefine HAVE_ENVIRON_NOT_REQUIRE_PROTOTYPE +#cmakedefine HAVE_UNSETENV +#cmakedefine CMAKE_USE_ELF_PARSER +#cmakedefine CMAKE_STRICT +#define CMAKE_ROOT_DIR "${CMake_SOURCE_DIR}" +#define CMAKE_BUILD_DIR "${CMake_BINARY_DIR}" +#define CMAKE_DATA_DIR "@CMAKE_DATA_DIR@" diff --git a/Source/cmConfigureFileCommand.cxx b/Source/cmConfigureFileCommand.cxx new file mode 100644 index 0000000..ea98326 --- /dev/null +++ b/Source/cmConfigureFileCommand.cxx @@ -0,0 +1,141 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmConfigureFileCommand.h" + +#include + +// cmConfigureFileCommand +bool cmConfigureFileCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 2 ) + { + this->SetError("called with incorrect number of arguments, expected 2"); + return false; + } + + const char* inFile = args[0].c_str(); + if(!cmSystemTools::FileIsFullPath(inFile)) + { + this->InputFile = this->Makefile->GetCurrentDirectory(); + this->InputFile += "/"; + } + this->InputFile += inFile; + + // If the input location is a directory, error out. + if(cmSystemTools::FileIsDirectory(this->InputFile.c_str())) + { + cmOStringStream e; + e << "input location\n" + << " " << this->InputFile << "\n" + << "is a directory but a file was expected."; + this->SetError(e.str().c_str()); + return false; + } + + const char* outFile = args[1].c_str(); + if(!cmSystemTools::FileIsFullPath(outFile)) + { + this->OutputFile = this->Makefile->GetCurrentOutputDirectory(); + this->OutputFile += "/"; + } + this->OutputFile += outFile; + + // If the output location is already a directory put the file in it. + if(cmSystemTools::FileIsDirectory(this->OutputFile.c_str())) + { + this->OutputFile += "/"; + this->OutputFile += cmSystemTools::GetFilenameName(inFile); + } + + if ( !this->Makefile->CanIWriteThisFile(this->OutputFile.c_str()) ) + { + std::string e = "attempted to configure a file: " + this->OutputFile + + " into a source directory."; + this->SetError(e.c_str()); + cmSystemTools::SetFatalErrorOccured(); + return false; + } + std::string errorMessage; + if (!this->NewLineStyle.ReadFromArguments(args, errorMessage)) + { + this->SetError(errorMessage.c_str()); + return false; + } + this->CopyOnly = false; + this->EscapeQuotes = false; + + // for CMake 2.0 and earlier CONFIGURE_FILE defaults to the FinalPass, + // after 2.0 it only does InitialPass + this->Immediate = !this->Makefile->NeedBackwardsCompatibility(2,0); + + this->AtOnly = false; + for(unsigned int i=2;i < args.size();++i) + { + if(args[i] == "COPYONLY") + { + this->CopyOnly = true; + if (this->NewLineStyle.IsValid()) + { + this->SetError("COPYONLY could not be used in combination " + "with NEWLINE_STYLE"); + return false; + } + } + else if(args[i] == "ESCAPE_QUOTES") + { + this->EscapeQuotes = true; + } + else if(args[i] == "@ONLY") + { + this->AtOnly = true; + } + else if(args[i] == "IMMEDIATE") + { + this->Immediate = true; + } + } + + // If we were told to copy the file immediately, then do it on the + // first pass (now). + if(this->Immediate) + { + if ( !this->ConfigureFile() ) + { + this->SetError("Problem configuring file"); + return false; + } + } + + return true; +} + +void cmConfigureFileCommand::FinalPass() +{ + if(!this->Immediate) + { + this->ConfigureFile(); + } +} + +int cmConfigureFileCommand::ConfigureFile() +{ + return this->Makefile->ConfigureFile( + this->InputFile.c_str(), + this->OutputFile.c_str(), + this->CopyOnly, + this->AtOnly, + this->EscapeQuotes, + this->NewLineStyle); +} + + diff --git a/Source/cmConfigureFileCommand.h b/Source/cmConfigureFileCommand.h new file mode 100644 index 0000000..de497a9 --- /dev/null +++ b/Source/cmConfigureFileCommand.h @@ -0,0 +1,109 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmConfigureFileCommand_h +#define cmConfigureFileCommand_h + +#include "cmCommand.h" + +class cmConfigureFileCommand : public cmCommand +{ +public: + cmTypeMacro(cmConfigureFileCommand, cmCommand); + + virtual cmCommand* Clone() + { + return new cmConfigureFileCommand; + } + + /** + * This is called when the command is first encountered in + * the input file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "configure_file";} + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Copy a file to another location and modify its contents."; + } + + /** + * Longer documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " configure_file( \n" + " [COPYONLY] [ESCAPE_QUOTES] [@ONLY] \n" + " [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])\n" + "Copies a file to file and substitutes variable " + "values referenced in the file content. " + "If is a relative path it is evaluated with respect to " + "the current source directory. " + "The must be a file, not a directory. " + "If is a relative path it is evaluated with respect to " + "the current binary directory. " + "If names an existing directory the input file is placed " + "in that directory with its original name. " + "\n" + "This command replaces any variables in the input file referenced as " + "${VAR} or @VAR@ with their values as determined by CMake. If a " + "variable is not defined, it will be replaced with nothing. " + "If COPYONLY is specified, then no variable expansion will take " + "place. If ESCAPE_QUOTES is specified then any substituted quotes " + "will be C-style escaped. " + "The file will be configured with the current values of CMake " + "variables. If @ONLY is specified, only variables " + "of the form @VAR@ will be replaces and ${VAR} will be ignored. " + "This is useful for configuring scripts that use ${VAR}. " + "Any occurrences of #cmakedefine VAR will be replaced with " + "either #define VAR or /* #undef VAR */ depending on " + "the setting of VAR in CMake. Any occurrences of #cmakedefine01 VAR " + "will be replaced with either #define VAR 1 or #define VAR 0 " + "depending on whether VAR evaluates to TRUE or FALSE in CMake.\n" + "With NEWLINE_STYLE the line ending could be adjusted: \n" + " 'UNIX' or 'LF' for \\n, 'DOS', 'WIN32' or 'CRLF' for \\r\\n.\n" + "COPYONLY must not be used with NEWLINE_STYLE.\n"; + } + + virtual void FinalPass(); + virtual bool HasFinalPass() const { return !this->Immediate; } + +private: + int ConfigureFile(); + + cmNewLineStyle NewLineStyle; + + std::string InputFile; + std::string OutputFile; + bool CopyOnly; + bool EscapeQuotes; + bool Immediate; + bool AtOnly; +}; + + + +#endif diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx new file mode 100644 index 0000000..48f644b --- /dev/null +++ b/Source/cmCoreTryCompile.cxx @@ -0,0 +1,478 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2011 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 "cmCoreTryCompile.h" +#include "cmake.h" +#include "cmCacheManager.h" +#include "cmGlobalGenerator.h" +#include + +int cmCoreTryCompile::TryCompileCode(std::vector const& argv) +{ + this->BinaryDirectory = argv[1].c_str(); + this->OutputFile = ""; + // which signature were we called with ? + this->SrcFileSignature = false; + unsigned int i; + + const char* sourceDirectory = argv[2].c_str(); + const char* projectName = 0; + const char* targetName = 0; + char targetNameBuf[64]; + int extraArgs = 0; + + // look for CMAKE_FLAGS and store them + std::vector cmakeFlags; + for (i = 3; i < argv.size(); ++i) + { + if (argv[i] == "CMAKE_FLAGS") + { + // CMAKE_FLAGS is the first argument because we need an argv[0] that + // is not used, so it matches regular command line parsing which has + // the program name as arg 0 + for (; i < argv.size() && argv[i] != "COMPILE_DEFINITIONS" && + argv[i] != "OUTPUT_VARIABLE"; + ++i) + { + extraArgs++; + cmakeFlags.push_back(argv[i]); + } + break; + } + } + + // look for OUTPUT_VARIABLE and store them + std::string outputVariable; + for (i = 3; i < argv.size(); ++i) + { + if (argv[i] == "OUTPUT_VARIABLE") + { + if ( argv.size() <= (i+1) ) + { + this->Makefile->IssueMessage(cmake::FATAL_ERROR, + "OUTPUT_VARIABLE specified but there is no variable"); + return -1; + } + extraArgs += 2; + outputVariable = argv[i+1]; + break; + } + } + + // look for COMPILE_DEFINITIONS and store them + std::vector compileFlags; + for (i = 3; i < argv.size(); ++i) + { + if (argv[i] == "COMPILE_DEFINITIONS") + { + extraArgs++; + for (i = i + 1; i < argv.size() && argv[i] != "CMAKE_FLAGS" && + argv[i] != "OUTPUT_VARIABLE"; + ++i) + { + extraArgs++; + compileFlags.push_back(argv[i]); + } + break; + } + } + + // look for COPY_FILE + std::string copyFile; + for (i = 3; i < argv.size(); ++i) + { + if (argv[i] == "COPY_FILE") + { + if ( argv.size() <= (i+1) ) + { + this->Makefile->IssueMessage(cmake::FATAL_ERROR, + "COPY_FILE specified but there is no variable"); + return -1; + } + extraArgs += 2; + copyFile = argv[i+1]; + break; + } + } + + // do we have a srcfile signature + if (argv.size() - extraArgs == 3) + { + this->SrcFileSignature = true; + } + + // compute the binary dir when TRY_COMPILE is called with a src file + // signature + if (this->SrcFileSignature) + { + this->BinaryDirectory += cmake::GetCMakeFilesDirectory(); + this->BinaryDirectory += "/CMakeTmp"; + } + else + { + // only valid for srcfile signatures + if (compileFlags.size()) + { + this->Makefile->IssueMessage(cmake::FATAL_ERROR, + "COMPILE_FLAGS specified on a srcdir type TRY_COMPILE"); + return -1; + } + if (copyFile.size()) + { + this->Makefile->IssueMessage(cmake::FATAL_ERROR, + "COPY_FILE specified on a srcdir type TRY_COMPILE"); + return -1; + } + } + // make sure the binary directory exists + cmSystemTools::MakeDirectory(this->BinaryDirectory.c_str()); + + // do not allow recursive try Compiles + if (this->BinaryDirectory == this->Makefile->GetHomeOutputDirectory()) + { + cmOStringStream e; + e << "Attempt at a recursive or nested TRY_COMPILE in directory\n" + << " " << this->BinaryDirectory << "\n"; + this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); + return -1; + } + + std::string outFileName = this->BinaryDirectory + "/CMakeLists.txt"; + // which signature are we using? If we are using var srcfile bindir + if (this->SrcFileSignature) + { + // remove any CMakeCache.txt files so we will have a clean test + std::string ccFile = this->BinaryDirectory + "/CMakeCache.txt"; + cmSystemTools::RemoveFile(ccFile.c_str()); + + // we need to create a directory and CMakeLists file etc... + // first create the directories + sourceDirectory = this->BinaryDirectory.c_str(); + + // now create a CMakeLists.txt file in that directory + FILE *fout = fopen(outFileName.c_str(),"w"); + if (!fout) + { + cmOStringStream e; + e << "Failed to open\n" + << " " << outFileName.c_str() << "\n" + << cmSystemTools::GetLastSystemError(); + this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); + return -1; + } + + std::string source = argv[2]; + std::string ext = cmSystemTools::GetFilenameLastExtension(source); + const char* lang =(this->Makefile->GetCMakeInstance()->GetGlobalGenerator() + ->GetLanguageFromExtension(ext.c_str())); + const char* def = this->Makefile->GetDefinition("CMAKE_MODULE_PATH"); + fprintf(fout, "cmake_minimum_required(VERSION %u.%u.%u.%u)\n", + cmVersion::GetMajorVersion(), cmVersion::GetMinorVersion(), + cmVersion::GetPatchVersion(), cmVersion::GetTweakVersion()); + if(def) + { + fprintf(fout, "SET(CMAKE_MODULE_PATH %s)\n", def); + } + + const char* rulesOverrideBase = "CMAKE_USER_MAKE_RULES_OVERRIDE"; + std::string rulesOverrideLang = + rulesOverrideBase + (lang ? std::string("_") + lang : std::string("")); + if(const char* rulesOverridePath = + this->Makefile->GetDefinition(rulesOverrideLang.c_str())) + { + fprintf(fout, "SET(%s \"%s\")\n", + rulesOverrideLang.c_str(), rulesOverridePath); + } + else if(const char* rulesOverridePath2 = + this->Makefile->GetDefinition(rulesOverrideBase)) + { + fprintf(fout, "SET(%s \"%s\")\n", + rulesOverrideBase, rulesOverridePath2); + } + + if(lang) + { + fprintf(fout, "PROJECT(CMAKE_TRY_COMPILE %s)\n", lang); + } + else + { + fclose(fout); + cmOStringStream err; + err << "Unknown extension \"" << ext << "\" for file\n" + << " " << source << "\n" + << "try_compile() works only for enabled languages. " + << "Currently these are:\n "; + std::vector langs; + this->Makefile->GetCMakeInstance()->GetGlobalGenerator()-> + GetEnabledLanguages(langs); + for(std::vector::iterator l = langs.begin(); + l != langs.end(); ++l) + { + err << " " << *l; + } + err << "\nSee project() command to enable other languages."; + this->Makefile->IssueMessage(cmake::FATAL_ERROR, err.str()); + return -1; + } + std::string langFlags = "CMAKE_"; + langFlags += lang; + langFlags += "_FLAGS"; + fprintf(fout, "SET(CMAKE_VERBOSE_MAKEFILE 1)\n"); + fprintf(fout, "SET(CMAKE_%s_FLAGS \"", lang); + const char* flags = this->Makefile->GetDefinition(langFlags.c_str()); + if(flags) + { + fprintf(fout, " %s ", flags); + } + fprintf(fout, " ${COMPILE_DEFINITIONS}\")\n"); + fprintf(fout, "INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES})\n"); + fprintf(fout, "SET(CMAKE_SUPPRESS_REGENERATION 1)\n"); + fprintf(fout, "LINK_DIRECTORIES(${LINK_DIRECTORIES})\n"); + // handle any compile flags we need to pass on + if (compileFlags.size()) + { + fprintf(fout, "ADD_DEFINITIONS( "); + for (i = 0; i < compileFlags.size(); ++i) + { + fprintf(fout,"%s ",compileFlags[i].c_str()); + } + fprintf(fout, ")\n"); + } + + /* for the TRY_COMPILEs we want to be able to specify the architecture. + So the user can set CMAKE_OSX_ARCHITECTURE to i386;ppc and then set + CMAKE_TRY_COMPILE_OSX_ARCHITECTURE first to i386 and then to ppc to + have the tests run for each specific architecture. Since + cmLocalGenerator doesn't allow building for "the other" + architecture only via CMAKE_OSX_ARCHITECTURES. + */ + if(this->Makefile->GetDefinition("CMAKE_TRY_COMPILE_OSX_ARCHITECTURES")!=0) + { + std::string flag="-DCMAKE_OSX_ARCHITECTURES="; + flag += this->Makefile->GetSafeDefinition( + "CMAKE_TRY_COMPILE_OSX_ARCHITECTURES"); + cmakeFlags.push_back(flag); + } + else if (this->Makefile->GetDefinition("CMAKE_OSX_ARCHITECTURES")!=0) + { + std::string flag="-DCMAKE_OSX_ARCHITECTURES="; + flag += this->Makefile->GetSafeDefinition("CMAKE_OSX_ARCHITECTURES"); + cmakeFlags.push_back(flag); + } + /* on APPLE also pass CMAKE_OSX_SYSROOT to the try_compile */ + if(this->Makefile->GetDefinition("CMAKE_OSX_SYSROOT")!=0) + { + std::string flag="-DCMAKE_OSX_SYSROOT="; + flag += this->Makefile->GetSafeDefinition("CMAKE_OSX_SYSROOT"); + cmakeFlags.push_back(flag); + } + /* on APPLE also pass CMAKE_OSX_DEPLOYMENT_TARGET to the try_compile */ + if(this->Makefile->GetDefinition("CMAKE_OSX_DEPLOYMENT_TARGET")!=0) + { + std::string flag="-DCMAKE_OSX_DEPLOYMENT_TARGET="; + flag += this->Makefile->GetSafeDefinition("CMAKE_OSX_DEPLOYMENT_TARGET"); + cmakeFlags.push_back(flag); + } + + /* Use a random file name to avoid rapid creation and deletion + of the same executable name (some filesystems fail on that). */ + sprintf(targetNameBuf, "cmTryCompileExec%u", + cmSystemTools::RandomSeed()); + targetName = targetNameBuf; + + /* Put the executable at a known location (for COPY_FILE). */ + fprintf(fout, "SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY \"%s\")\n", + this->BinaryDirectory.c_str()); + /* Create the actual executable. */ + fprintf(fout, "ADD_EXECUTABLE(%s \"%s\")\n", targetName, source.c_str()); + fprintf(fout, "TARGET_LINK_LIBRARIES(%s ${LINK_LIBRARIES})\n",targetName); + fclose(fout); + projectName = "CMAKE_TRY_COMPILE"; + // if the source is not in CMakeTmp + if(source.find("CMakeTmp") == source.npos) + { + this->Makefile->AddCMakeDependFile(source.c_str()); + } + + } + // else the srcdir bindir project target signature + else + { + projectName = argv[3].c_str(); + + if (argv.size() - extraArgs == 5) + { + targetName = argv[4].c_str(); + } + } + + bool erroroc = cmSystemTools::GetErrorOccuredFlag(); + cmSystemTools::ResetErrorOccuredFlag(); + std::string output; + // actually do the try compile now that everything is setup + int res = this->Makefile->TryCompile(sourceDirectory, + this->BinaryDirectory.c_str(), + projectName, + targetName, + this->SrcFileSignature, + &cmakeFlags, + &output); + if ( erroroc ) + { + cmSystemTools::SetErrorOccured(); + } + + // set the result var to the return value to indicate success or failure + this->Makefile->AddCacheDefinition(argv[0].c_str(), + (res == 0 ? "TRUE" : "FALSE"), + "Result of TRY_COMPILE", + cmCacheManager::INTERNAL); + + if ( outputVariable.size() > 0 ) + { + this->Makefile->AddDefinition(outputVariable.c_str(), output.c_str()); + } + + if (this->SrcFileSignature) + { + this->FindOutputFile(targetName); + + if ((res==0) && (copyFile.size())) + { + if(this->OutputFile.empty() || + !cmSystemTools::CopyFileAlways(this->OutputFile.c_str(), + copyFile.c_str())) + { + cmOStringStream emsg; + emsg << "Cannot copy output executable\n" + << " '" << this->OutputFile.c_str() << "'\n" + << "to destination specified by COPY_FILE:\n" + << " '" << copyFile.c_str() << "'\n"; + if(!this->FindErrorMessage.empty()) + { + emsg << this->FindErrorMessage.c_str(); + } + this->Makefile->IssueMessage(cmake::FATAL_ERROR, emsg.str()); + return -1; + } + } + } + return res; +} + +void cmCoreTryCompile::CleanupFiles(const char* binDir) +{ + if ( !binDir ) + { + return; + } + + std::string bdir = binDir; + if(bdir.find("CMakeTmp") == std::string::npos) + { + cmSystemTools::Error( + "TRY_COMPILE attempt to remove -rf directory that does not contain " + "CMakeTmp:", binDir); + return; + } + + cmsys::Directory dir; + dir.Load(binDir); + size_t fileNum; + std::set deletedFiles; + for (fileNum = 0; fileNum < dir.GetNumberOfFiles(); ++fileNum) + { + if (strcmp(dir.GetFile(static_cast(fileNum)),".") && + strcmp(dir.GetFile(static_cast(fileNum)),"..")) + { + + if(deletedFiles.find( dir.GetFile(static_cast(fileNum))) + == deletedFiles.end()) + { + deletedFiles.insert(dir.GetFile(static_cast(fileNum))); + std::string fullPath = binDir; + fullPath += "/"; + fullPath += dir.GetFile(static_cast(fileNum)); + if(cmSystemTools::FileIsDirectory(fullPath.c_str())) + { + this->CleanupFiles(fullPath.c_str()); + } + else + { + // Sometimes anti-virus software hangs on to new files so we + // cannot delete them immediately. Try a few times. + int tries = 5; + while(!cmSystemTools::RemoveFile(fullPath.c_str()) && + --tries && cmSystemTools::FileExists(fullPath.c_str())) + { + cmSystemTools::Delay(500); + } + if(tries == 0) + { + std::string m = "Remove failed on file: " + fullPath; + cmSystemTools::ReportLastSystemError(m.c_str()); + } + } + } + } + } +} + +void cmCoreTryCompile::FindOutputFile(const char* targetName) +{ + this->FindErrorMessage = ""; + this->OutputFile = ""; + std::string tmpOutputFile = "/"; + tmpOutputFile += targetName; + tmpOutputFile +=this->Makefile->GetSafeDefinition("CMAKE_EXECUTABLE_SUFFIX"); + + // a list of directories where to search for the compilation result + // at first directly in the binary dir + std::vector searchDirs; + searchDirs.push_back(""); + + const char* config = this->Makefile->GetDefinition( + "CMAKE_TRY_COMPILE_CONFIGURATION"); + // if a config was specified try that first + if (config && config[0]) + { + std::string tmp = "/"; + tmp += config; + searchDirs.push_back(tmp); + } + searchDirs.push_back("/Debug"); + searchDirs.push_back("/Development"); + + for(std::vector::const_iterator it = searchDirs.begin(); + it != searchDirs.end(); + ++it) + { + std::string command = this->BinaryDirectory; + command += *it; + command += tmpOutputFile; + if(cmSystemTools::FileExists(command.c_str())) + { + tmpOutputFile = cmSystemTools::CollapseFullPath(command.c_str()); + this->OutputFile = tmpOutputFile; + return; + } + } + + cmOStringStream emsg; + emsg << "Unable to find the executable at any of:\n"; + for (unsigned int i = 0; i < searchDirs.size(); ++i) + { + emsg << " " << this->BinaryDirectory << searchDirs[i] + << tmpOutputFile << "\n"; + } + this->FindErrorMessage = emsg.str(); + return; +} diff --git a/Source/cmCoreTryCompile.h b/Source/cmCoreTryCompile.h new file mode 100644 index 0000000..5c67f13 --- /dev/null +++ b/Source/cmCoreTryCompile.h @@ -0,0 +1,60 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCoreTryCompile_h +#define cmCoreTryCompile_h + +#include "cmCommand.h" + +/** \class cmCoreTryCompile + * \brief Base class for cmTryCompileCommand and cmTryRunCommand + * + * cmCoreTryCompile implements the functionality to build a program. + * It is the base class for cmTryCompileCommand and cmTryRunCommand. + */ +class cmCoreTryCompile : public cmCommand +{ +public: + + protected: + /** + * This is the core code for try compile. It is here so that other + * commands, such as TryRun can access the same logic without + * duplication. + */ + int TryCompileCode(std::vector const& argv); + + /** + * This deletes all the files created by TryCompileCode. + * This way we do not have to rely on the timing and + * dependencies of makefiles. + */ + void CleanupFiles(const char* binDir); + + /** + * This tries to find the (executable) file created by + TryCompileCode. The result is stored in OutputFile. If nothing is found, + the error message is stored in FindErrorMessage. + */ + void FindOutputFile(const char* targetName); + + + cmTypeMacro(cmCoreTryCompile, cmCommand); + + std::string BinaryDirectory; + std::string OutputFile; + std::string FindErrorMessage; + bool SrcFileSignature; + +}; + + +#endif diff --git a/Source/cmCreateTestSourceList.cxx b/Source/cmCreateTestSourceList.cxx new file mode 100644 index 0000000..de20cb7 --- /dev/null +++ b/Source/cmCreateTestSourceList.cxx @@ -0,0 +1,189 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCreateTestSourceList.h" +#include "cmSourceFile.h" + +// cmCreateTestSourceList +bool cmCreateTestSourceList +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if (args.size() < 3) + { + this->SetError("called with wrong number of arguments."); + return false; + } + + + std::vector::const_iterator i = args.begin(); + std::string extraInclude; + std::string function; + std::vector tests; + // extract extra include and function ot + for(; i != args.end(); i++) + { + if(*i == "EXTRA_INCLUDE") + { + ++i; + if(i == args.end()) + { + this->SetError("incorrect arguments to EXTRA_INCLUDE"); + return false; + } + extraInclude = "#include \""; + extraInclude += *i; + extraInclude += "\"\n"; + } + else if(*i == "FUNCTION") + { + ++i; + if(i == args.end()) + { + this->SetError("incorrect arguments to FUNCTION"); + return false; + } + function = *i; + function += "(&ac, &av);\n"; + } + else + { + tests.push_back(*i); + } + } + i = tests.begin(); + + // Name of the source list + + const char* sourceList = i->c_str(); + ++i; + + // Name of the test driver + // make sure they specified an extension + if (cmSystemTools::GetFilenameExtension(*i).size() < 2) + { + this->SetError( + "You must specify a file extension for the test driver file."); + return false; + } + std::string driver = this->Makefile->GetCurrentOutputDirectory(); + driver += "/"; + driver += *i; + ++i; + + std::string configFile = + this->Makefile->GetRequiredDefinition("CMAKE_ROOT"); + + configFile += "/Templates/TestDriver.cxx.in"; + // Create the test driver file + + std::vector::const_iterator testsBegin = i; + std::vector tests_func_name; + + // The rest of the arguments consist of a list of test source files. + // Sadly, they can be in directories. Let's find a unique function + // name for the corresponding test, and push it to the tests_func_name + // list. + // For the moment: + // - replace spaces ' ', ':' and '/' with underscores '_' + std::string forwardDeclareCode; + for(i = testsBegin; i != tests.end(); ++i) + { + if(*i == "EXTRA_INCLUDE") + { + break; + } + std::string func_name; + if (cmSystemTools::GetFilenamePath(*i).size() > 0) + { + func_name = cmSystemTools::GetFilenamePath(*i) + "/" + + cmSystemTools::GetFilenameWithoutLastExtension(*i); + } + else + { + func_name = cmSystemTools::GetFilenameWithoutLastExtension(*i); + } + cmSystemTools::ConvertToUnixSlashes(func_name); + cmSystemTools::ReplaceString(func_name, " ", "_"); + cmSystemTools::ReplaceString(func_name, "/", "_"); + cmSystemTools::ReplaceString(func_name, ":", "_"); + tests_func_name.push_back(func_name); + forwardDeclareCode += "int "; + forwardDeclareCode += func_name; + forwardDeclareCode += "(int, char*[]);\n"; + } + + std::string functionMapCode; + int numTests = 0; + std::vector::iterator j; + for(i = testsBegin, j = tests_func_name.begin(); i != tests.end(); ++i, ++j) + { + std::string func_name; + if (cmSystemTools::GetFilenamePath(*i).size() > 0) + { + func_name = cmSystemTools::GetFilenamePath(*i) + "/" + + cmSystemTools::GetFilenameWithoutLastExtension(*i); + } + else + { + func_name = cmSystemTools::GetFilenameWithoutLastExtension(*i); + } + functionMapCode += " {\n" + " \""; + functionMapCode += func_name; + functionMapCode += "\",\n" + " "; + functionMapCode += *j; + functionMapCode += "\n" + " },\n"; + numTests++; + } + if(extraInclude.size()) + { + this->Makefile->AddDefinition("CMAKE_TESTDRIVER_EXTRA_INCLUDES", + extraInclude.c_str()); + } + if(function.size()) + { + this->Makefile->AddDefinition("CMAKE_TESTDRIVER_ARGVC_FUNCTION", + function.c_str()); + } + this->Makefile->AddDefinition("CMAKE_FORWARD_DECLARE_TESTS", + forwardDeclareCode.c_str()); + this->Makefile->AddDefinition("CMAKE_FUNCTION_TABLE_ENTIRES", + functionMapCode.c_str()); + bool res = true; + if ( !this->Makefile->ConfigureFile(configFile.c_str(), driver.c_str(), + false, true, false) ) + { + res = false; + } + + // Construct the source list. + std::string sourceListValue; + { + cmSourceFile* sf = this->Makefile->GetOrCreateSource(driver.c_str()); + sf->SetProperty("ABSTRACT","0"); + sourceListValue = args[1]; + } + for(i = testsBegin; i != tests.end(); ++i) + { + cmSourceFile* sf = this->Makefile->GetOrCreateSource(i->c_str()); + sf->SetProperty("ABSTRACT","0"); + sourceListValue += ";"; + sourceListValue += *i; + } + + this->Makefile->AddDefinition(sourceList, sourceListValue.c_str()); + return res; +} + + + diff --git a/Source/cmCreateTestSourceList.h b/Source/cmCreateTestSourceList.h new file mode 100644 index 0000000..806e5a9 --- /dev/null +++ b/Source/cmCreateTestSourceList.h @@ -0,0 +1,90 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCreateTestSourceList_h +#define cmCreateTestSourceList_h + +#include "cmCommand.h" + +/** \class cmCreateTestSourceList + * \brief + * + */ + +class cmCreateTestSourceList : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmCreateTestSourceList; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const {return "create_test_sourcelist";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Create a test driver and source list for building test programs."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " create_test_sourcelist(sourceListName driverName\n" + " test1 test2 test3\n" + " EXTRA_INCLUDE include.h\n" + " FUNCTION function)\n" + "A test driver is a program that links together many small tests into " + "a single executable. This is useful when building static executables " + "with large libraries to shrink the total required size. " + "The list of source files " + "needed to build the test driver will be in sourceListName. " + "DriverName is the name of the test driver program. The rest of " + "the arguments consist of a list of test source files, can be " + "semicolon separated. Each test source file should have a function in " + "it that is the same name as the file with no extension (foo.cxx " + "should have int foo(int, char*[]);) DriverName will be able to " + "call each of the " + "tests by name on the command line. If EXTRA_INCLUDE is specified, " + "then the next argument is included into the generated file. If " + "FUNCTION is specified, then the next argument is taken as a function " + "name that is passed a pointer to ac and av. This can be used to add " + "extra command line processing to each test. The cmake variable " + "CMAKE_TESTDRIVER_BEFORE_TESTMAIN can be set to have code that will be " + "placed directly before calling the test main function. " + "CMAKE_TESTDRIVER_AFTER_TESTMAIN can be set to have code that will be " + "placed directly after the call to the test main function."; + } + + cmTypeMacro(cmCreateTestSourceList, cmCommand); +}; + + + +#endif diff --git a/Source/cmCryptoHash.cxx b/Source/cmCryptoHash.cxx new file mode 100644 index 0000000..a1505bd --- /dev/null +++ b/Source/cmCryptoHash.cxx @@ -0,0 +1,130 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCryptoHash.h" + +#include +#include "cm_sha2.h" + +//---------------------------------------------------------------------------- +cmsys::auto_ptr cmCryptoHash::New(const char* algo) +{ + if(strcmp(algo,"MD5") == 0) + { return cmsys::auto_ptr(new cmCryptoHashMD5); } + else if(strcmp(algo,"SHA1") == 0) + { return cmsys::auto_ptr(new cmCryptoHashSHA1); } + else if(strcmp(algo,"SHA224") == 0) + { return cmsys::auto_ptr(new cmCryptoHashSHA224); } + else if(strcmp(algo,"SHA256") == 0) + { return cmsys::auto_ptr(new cmCryptoHashSHA256); } + else if(strcmp(algo,"SHA384") == 0) + { return cmsys::auto_ptr(new cmCryptoHashSHA384); } + else if(strcmp(algo,"SHA512") == 0) + { return cmsys::auto_ptr(new cmCryptoHashSHA512); } + else + { return cmsys::auto_ptr(0); } +} + +//---------------------------------------------------------------------------- +std::string cmCryptoHash::HashString(const char* input) +{ + this->Initialize(); + this->Append(reinterpret_cast(input), + static_cast(strlen(input))); + return this->Finalize(); +} + +//---------------------------------------------------------------------------- +std::string cmCryptoHash::HashFile(const char* file) +{ + std::ifstream fin(file, std::ios::in | cmsys_ios_binary); + if(!fin) + { + return ""; + } + + this->Initialize(); + + // Should be efficient enough on most system: + const int bufferSize = 4096; + char buffer[bufferSize]; + unsigned char const* buffer_uc = + reinterpret_cast(buffer); + // This copy loop is very sensitive on certain platforms with + // slightly broken stream libraries (like HPUX). Normally, it is + // incorrect to not check the error condition on the fin.read() + // before using the data, but the fin.gcount() will be zero if an + // error occurred. Therefore, the loop should be safe everywhere. + while(fin) + { + fin.read(buffer, bufferSize); + if(int gcount = static_cast(fin.gcount())) + { + this->Append(buffer_uc, gcount); + } + } + if(fin.eof()) + { + return this->Finalize(); + } + return ""; +} + +//---------------------------------------------------------------------------- +cmCryptoHashMD5::cmCryptoHashMD5(): MD5(cmsysMD5_New()) +{ +} + +//---------------------------------------------------------------------------- +cmCryptoHashMD5::~cmCryptoHashMD5() +{ + cmsysMD5_Delete(this->MD5); +} + +//---------------------------------------------------------------------------- +void cmCryptoHashMD5::Initialize() +{ + cmsysMD5_Initialize(this->MD5); +} + +//---------------------------------------------------------------------------- +void cmCryptoHashMD5::Append(unsigned char const* buf, int sz) +{ + cmsysMD5_Append(this->MD5, buf, sz); +} + +//---------------------------------------------------------------------------- +std::string cmCryptoHashMD5::Finalize() +{ + char md5out[32]; + cmsysMD5_FinalizeHex(this->MD5, md5out); + return std::string(md5out, 32); +} + + +#define cmCryptoHash_SHA_CLASS_IMPL(SHA) \ +cmCryptoHash##SHA::cmCryptoHash##SHA(): SHA(new SHA_CTX) {} \ +cmCryptoHash##SHA::~cmCryptoHash##SHA() { delete this->SHA; } \ +void cmCryptoHash##SHA::Initialize() { SHA##_Init(this->SHA); } \ +void cmCryptoHash##SHA::Append(unsigned char const* buf, int sz) \ +{ SHA##_Update(this->SHA, buf, sz); } \ +std::string cmCryptoHash##SHA::Finalize() \ +{ \ + char out[SHA##_DIGEST_STRING_LENGTH]; \ + SHA##_End(this->SHA, out); \ + return std::string(out, SHA##_DIGEST_STRING_LENGTH-1); \ +} + +cmCryptoHash_SHA_CLASS_IMPL(SHA1) +cmCryptoHash_SHA_CLASS_IMPL(SHA224) +cmCryptoHash_SHA_CLASS_IMPL(SHA256) +cmCryptoHash_SHA_CLASS_IMPL(SHA384) +cmCryptoHash_SHA_CLASS_IMPL(SHA512) diff --git a/Source/cmCryptoHash.h b/Source/cmCryptoHash.h new file mode 100644 index 0000000..1bea9ab --- /dev/null +++ b/Source/cmCryptoHash.h @@ -0,0 +1,65 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCryptoHash_h +#define cmCryptoHash_h + +#include "cmStandardIncludes.h" + +#include + +class cmCryptoHash +{ +public: + virtual ~cmCryptoHash() {} + static cmsys::auto_ptr New(const char* algo); + std::string HashString(const char* input); + std::string HashFile(const char* file); +protected: + virtual void Initialize()=0; + virtual void Append(unsigned char const*, int)=0; + virtual std::string Finalize()=0; +}; + +class cmCryptoHashMD5: public cmCryptoHash +{ + struct cmsysMD5_s* MD5; +public: + cmCryptoHashMD5(); + ~cmCryptoHashMD5(); +protected: + virtual void Initialize(); + virtual void Append(unsigned char const* buf, int sz); + virtual std::string Finalize(); +}; + +#define cmCryptoHash_SHA_CLASS_DECL(SHA) \ + class cmCryptoHash##SHA: public cmCryptoHash \ + { \ + union _SHA_CTX* SHA; \ + public: \ + cmCryptoHash##SHA(); \ + ~cmCryptoHash##SHA(); \ + protected: \ + virtual void Initialize(); \ + virtual void Append(unsigned char const* buf, int sz); \ + virtual std::string Finalize(); \ + } + +cmCryptoHash_SHA_CLASS_DECL(SHA1); +cmCryptoHash_SHA_CLASS_DECL(SHA224); +cmCryptoHash_SHA_CLASS_DECL(SHA256); +cmCryptoHash_SHA_CLASS_DECL(SHA384); +cmCryptoHash_SHA_CLASS_DECL(SHA512); + +#undef cmCryptoHash_SHA_CLASS_DECL + +#endif diff --git a/Source/cmCustomCommand.cxx b/Source/cmCustomCommand.cxx new file mode 100644 index 0000000..bd860ee --- /dev/null +++ b/Source/cmCustomCommand.cxx @@ -0,0 +1,172 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmCustomCommand.h" + +#include "cmMakefile.h" + +//---------------------------------------------------------------------------- +cmCustomCommand::cmCustomCommand() +{ + this->HaveComment = false; + this->EscapeOldStyle = true; + this->EscapeAllowMakeVars = false; +} + +//---------------------------------------------------------------------------- +cmCustomCommand::cmCustomCommand(const cmCustomCommand& r): + Outputs(r.Outputs), + Depends(r.Depends), + CommandLines(r.CommandLines), + HaveComment(r.HaveComment), + Comment(r.Comment), + WorkingDirectory(r.WorkingDirectory), + EscapeAllowMakeVars(r.EscapeAllowMakeVars), + EscapeOldStyle(r.EscapeOldStyle), + Backtrace(new cmListFileBacktrace(*r.Backtrace)) +{ +} + +//---------------------------------------------------------------------------- +cmCustomCommand::cmCustomCommand(cmMakefile* mf, + const std::vector& outputs, + const std::vector& depends, + const cmCustomCommandLines& commandLines, + const char* comment, + const char* workingDirectory): + Outputs(outputs), + Depends(depends), + CommandLines(commandLines), + HaveComment(comment?true:false), + Comment(comment?comment:""), + WorkingDirectory(workingDirectory?workingDirectory:""), + EscapeAllowMakeVars(false), + EscapeOldStyle(true), + Backtrace(new cmListFileBacktrace) +{ + this->EscapeOldStyle = true; + this->EscapeAllowMakeVars = false; + if(mf) + { + mf->GetBacktrace(*this->Backtrace); + } +} + +//---------------------------------------------------------------------------- +cmCustomCommand::~cmCustomCommand() +{ + delete this->Backtrace; +} + +//---------------------------------------------------------------------------- +const std::vector& cmCustomCommand::GetOutputs() const +{ + return this->Outputs; +} + +//---------------------------------------------------------------------------- +const char* cmCustomCommand::GetWorkingDirectory() const +{ + if(this->WorkingDirectory.size() == 0) + { + return 0; + } + return this->WorkingDirectory.c_str(); +} + +//---------------------------------------------------------------------------- +const std::vector& cmCustomCommand::GetDepends() const +{ + return this->Depends; +} + +//---------------------------------------------------------------------------- +const cmCustomCommandLines& cmCustomCommand::GetCommandLines() const +{ + return this->CommandLines; +} + +//---------------------------------------------------------------------------- +const char* cmCustomCommand::GetComment() const +{ + const char* no_comment = 0; + return this->HaveComment? this->Comment.c_str() : no_comment; +} + +//---------------------------------------------------------------------------- +void cmCustomCommand::AppendCommands(const cmCustomCommandLines& commandLines) +{ + for(cmCustomCommandLines::const_iterator i=commandLines.begin(); + i != commandLines.end(); ++i) + { + this->CommandLines.push_back(*i); + } +} + +//---------------------------------------------------------------------------- +void cmCustomCommand::AppendDepends(const std::vector& depends) +{ + for(std::vector::const_iterator i=depends.begin(); + i != depends.end(); ++i) + { + this->Depends.push_back(*i); + } +} + +//---------------------------------------------------------------------------- +bool cmCustomCommand::GetEscapeOldStyle() const +{ + return this->EscapeOldStyle; +} + +//---------------------------------------------------------------------------- +void cmCustomCommand::SetEscapeOldStyle(bool b) +{ + this->EscapeOldStyle = b; +} + +//---------------------------------------------------------------------------- +bool cmCustomCommand::GetEscapeAllowMakeVars() const +{ + return this->EscapeAllowMakeVars; +} + +//---------------------------------------------------------------------------- +void cmCustomCommand::SetEscapeAllowMakeVars(bool b) +{ + this->EscapeAllowMakeVars = b; +} + +//---------------------------------------------------------------------------- +cmListFileBacktrace const& cmCustomCommand::GetBacktrace() const +{ + return *this->Backtrace; +} + +//---------------------------------------------------------------------------- +cmCustomCommand::ImplicitDependsList const& +cmCustomCommand::GetImplicitDepends() const +{ + return this->ImplicitDepends; +} + +//---------------------------------------------------------------------------- +void cmCustomCommand::SetImplicitDepends(ImplicitDependsList const& l) +{ + this->ImplicitDepends = l; +} + +//---------------------------------------------------------------------------- +void cmCustomCommand::AppendImplicitDepends(ImplicitDependsList const& l) +{ + this->ImplicitDepends.insert(this->ImplicitDepends.end(), + l.begin(), l.end()); +} diff --git a/Source/cmCustomCommand.h b/Source/cmCustomCommand.h new file mode 100644 index 0000000..dd92e34 --- /dev/null +++ b/Source/cmCustomCommand.h @@ -0,0 +1,93 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmCustomCommand_h +#define cmCustomCommand_h + +#include "cmStandardIncludes.h" +class cmMakefile; +class cmListFileBacktrace; + +/** \class cmCustomCommand + * \brief A class to encapsulate a custom command + * + * cmCustomCommand encapsulates the properties of a custom command + */ +class cmCustomCommand +{ +public: + /** Default and copy constructors for STL containers. */ + cmCustomCommand(); + cmCustomCommand(const cmCustomCommand& r); + + /** Main constructor specifies all information for the command. */ + cmCustomCommand(cmMakefile* mf, + const std::vector& outputs, + const std::vector& depends, + const cmCustomCommandLines& commandLines, + const char* comment, + const char* workingDirectory); + + ~cmCustomCommand(); + + /** Get the output file produced by the command. */ + const std::vector& GetOutputs() const; + + /** Get the working directory. */ + const char* GetWorkingDirectory() const; + + /** Get the vector that holds the list of dependencies. */ + const std::vector& GetDepends() const; + + /** Get the list of command lines. */ + const cmCustomCommandLines& GetCommandLines() const; + + /** Get the comment string for the command. */ + const char* GetComment() const; + + /** Append to the list of command lines. */ + void AppendCommands(const cmCustomCommandLines& commandLines); + + /** Append to the list of dependencies. */ + void AppendDepends(const std::vector& depends); + + /** Set/Get whether old-style escaping should be used. */ + bool GetEscapeOldStyle() const; + void SetEscapeOldStyle(bool b); + + /** Set/Get whether the build tool can replace variables in + arguments to the command. */ + bool GetEscapeAllowMakeVars() const; + void SetEscapeAllowMakeVars(bool b); + + /** Backtrace of the command that created this custom command. */ + cmListFileBacktrace const& GetBacktrace() const; + + typedef std::pair ImplicitDependsPair; + class ImplicitDependsList: public std::vector {}; + void SetImplicitDepends(ImplicitDependsList const&); + void AppendImplicitDepends(ImplicitDependsList const&); + ImplicitDependsList const& GetImplicitDepends() const; + +private: + std::vector Outputs; + std::vector Depends; + cmCustomCommandLines CommandLines; + bool HaveComment; + std::string Comment; + std::string WorkingDirectory; + bool EscapeAllowMakeVars; + bool EscapeOldStyle; + cmListFileBacktrace* Backtrace; + ImplicitDependsList ImplicitDepends; +}; + +#endif diff --git a/Source/cmCustomCommandGenerator.cxx b/Source/cmCustomCommandGenerator.cxx new file mode 100644 index 0000000..a650129 --- /dev/null +++ b/Source/cmCustomCommandGenerator.cxx @@ -0,0 +1,72 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2010 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 "cmCustomCommandGenerator.h" + +#include "cmMakefile.h" +#include "cmCustomCommand.h" +#include "cmLocalGenerator.h" +#include "cmGeneratorExpression.h" + +//---------------------------------------------------------------------------- +cmCustomCommandGenerator::cmCustomCommandGenerator( + cmCustomCommand const& cc, const char* config, cmMakefile* mf): + CC(cc), Config(config), Makefile(mf), LG(mf->GetLocalGenerator()), + OldStyle(cc.GetEscapeOldStyle()), MakeVars(cc.GetEscapeAllowMakeVars()), + GE(new cmGeneratorExpression(mf, config, cc.GetBacktrace())) +{ +} + +//---------------------------------------------------------------------------- +cmCustomCommandGenerator::~cmCustomCommandGenerator() +{ + delete this->GE; +} + +//---------------------------------------------------------------------------- +unsigned int cmCustomCommandGenerator::GetNumberOfCommands() const +{ + return static_cast(this->CC.GetCommandLines().size()); +} + +//---------------------------------------------------------------------------- +std::string cmCustomCommandGenerator::GetCommand(unsigned int c) const +{ + std::string const& argv0 = this->CC.GetCommandLines()[c][0]; + cmTarget* target = this->Makefile->FindTargetToUse(argv0.c_str()); + if(target && target->GetType() == cmTarget::EXECUTABLE && + (target->IsImported() || !this->Makefile->IsOn("CMAKE_CROSSCOMPILING"))) + { + return target->GetLocation(this->Config); + } + return this->GE->Process(argv0); +} + +//---------------------------------------------------------------------------- +void +cmCustomCommandGenerator +::AppendArguments(unsigned int c, std::string& cmd) const +{ + cmCustomCommandLine const& commandLine = this->CC.GetCommandLines()[c]; + for(unsigned int j=1;j < commandLine.size(); ++j) + { + std::string arg = this->GE->Process(commandLine[j]); + cmd += " "; + if(this->OldStyle) + { + cmd += this->LG->EscapeForShellOldStyle(arg.c_str()); + } + else + { + cmd += this->LG->EscapeForShell(arg.c_str(), this->MakeVars); + } + } +} diff --git a/Source/cmCustomCommandGenerator.h b/Source/cmCustomCommandGenerator.h new file mode 100644 index 0000000..4e89f27 --- /dev/null +++ b/Source/cmCustomCommandGenerator.h @@ -0,0 +1,40 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2010 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 cmCustomCommandGenerator_h +#define cmCustomCommandGenerator_h + +#include "cmStandardIncludes.h" + +class cmCustomCommand; +class cmMakefile; +class cmLocalGenerator; +class cmGeneratorExpression; + +class cmCustomCommandGenerator +{ + cmCustomCommand const& CC; + const char* Config; + cmMakefile* Makefile; + cmLocalGenerator* LG; + bool OldStyle; + bool MakeVars; + cmGeneratorExpression* GE; +public: + cmCustomCommandGenerator(cmCustomCommand const& cc, const char* config, + cmMakefile* mf); + ~cmCustomCommandGenerator(); + unsigned int GetNumberOfCommands() const; + std::string GetCommand(unsigned int c) const; + void AppendArguments(unsigned int c, std::string& cmd) const; +}; + +#endif diff --git a/Source/cmDefinePropertyCommand.cxx b/Source/cmDefinePropertyCommand.cxx new file mode 100644 index 0000000..5816829 --- /dev/null +++ b/Source/cmDefinePropertyCommand.cxx @@ -0,0 +1,137 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDefinePropertyCommand.h" +#include "cmake.h" + +// cmDefinePropertiesCommand +bool cmDefinePropertyCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + // Get the scope in which to define the property. + cmProperty::ScopeType scope; + if(args[0] == "GLOBAL") + { + scope = cmProperty::GLOBAL; + } + else if(args[0] == "DIRECTORY") + { + scope = cmProperty::DIRECTORY; + } + else if(args[0] == "TARGET") + { + scope = cmProperty::TARGET; + } + else if(args[0] == "SOURCE") + { + scope = cmProperty::SOURCE_FILE; + } + else if(args[0] == "TEST") + { + scope = cmProperty::TEST; + } + else if(args[0] == "VARIABLE") + { + scope = cmProperty::VARIABLE; + } + else if (args[0] == "CACHED_VARIABLE") + { + scope = cmProperty::CACHED_VARIABLE; + } + else + { + cmOStringStream e; + e << "given invalid scope " << args[0] << ". " + << "Valid scopes are " + << "GLOBAL, DIRECTORY, TARGET, SOURCE, " + << "TEST, VARIABLE, CACHED_VARIABLE."; + this->SetError(e.str().c_str()); + return false; + } + + // Parse remaining arguments. + bool inherited = false; + enum Doing { DoingNone, DoingProperty, DoingBrief, DoingFull }; + Doing doing = DoingNone; + for(unsigned int i=1; i < args.size(); ++i) + { + if(args[i] == "PROPERTY") + { + doing = DoingProperty; + } + else if(args[i] == "BRIEF_DOCS") + { + doing = DoingBrief; + } + else if(args[i] == "FULL_DOCS") + { + doing = DoingFull; + } + else if(args[i] == "INHERITED") + { + doing = DoingNone; + inherited = true; + } + else if(doing == DoingProperty) + { + doing = DoingNone; + this->PropertyName = args[i]; + } + else if(doing == DoingBrief) + { + this->BriefDocs += args[i]; + } + else if(doing == DoingFull) + { + this->FullDocs += args[i]; + } + else + { + cmOStringStream e; + e << "given invalid argument \"" << args[i] << "\"."; + this->SetError(e.str().c_str()); + return false; + } + } + + // Make sure a property name was found. + if(this->PropertyName.empty()) + { + this->SetError("not given a PROPERTY argument."); + return false; + } + + // Make sure documentation was given. + if(this->BriefDocs.empty()) + { + this->SetError("not given a BRIEF_DOCS argument."); + return false; + } + if(this->FullDocs.empty()) + { + this->SetError("not given a FULL_DOCS argument."); + return false; + } + + // Actually define the property. + this->Makefile->GetCMakeInstance()->DefineProperty + (this->PropertyName.c_str(), scope, + this->BriefDocs.c_str(), this->FullDocs.c_str(), inherited); + + return true; +} + diff --git a/Source/cmDefinePropertyCommand.h b/Source/cmDefinePropertyCommand.h new file mode 100644 index 0000000..55ef521 --- /dev/null +++ b/Source/cmDefinePropertyCommand.h @@ -0,0 +1,93 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDefinesPropertyCommand_h +#define cmDefinesPropertyCommand_h + +#include "cmCommand.h" + +class cmDefinePropertyCommand : public cmCommand +{ +public: + virtual cmCommand* Clone() + { + return new cmDefinePropertyCommand; + } + + /** + * This is called when the command is first encountered in + * the input file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "define_property";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Define and document custom properties."; + } + + /** + * Longer documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " define_property(\n" + " PROPERTY [INHERITED]\n" + " BRIEF_DOCS [docs...]\n" + " FULL_DOCS [docs...])\n" + "Define one property in a scope for use with the " + "set_property and get_property commands. " + "This is primarily useful to associate documentation with property " + "names that may be retrieved with the get_property command. " + "The first argument determines the kind of scope in which the " + "property should be used. It must be one of the following:\n" + " GLOBAL = associated with the global namespace\n" + " DIRECTORY = associated with one directory\n" + " TARGET = associated with one target\n" + " SOURCE = associated with one source file\n" + " TEST = associated with a test named with add_test\n" + " VARIABLE = documents a CMake language variable\n" + " CACHED_VARIABLE = documents a CMake cache variable\n" + "Note that unlike set_property and get_property no actual scope " + "needs to be given; only the kind of scope is important.\n" + "The required PROPERTY option is immediately followed by the name " + "of the property being defined.\n" + "If the INHERITED option then the get_property command will chain " + "up to the next higher scope when the requested property is not " + "set in the scope given to the command. " + "DIRECTORY scope chains to GLOBAL. " + "TARGET, SOURCE, and TEST chain to DIRECTORY.\n" + "The BRIEF_DOCS and FULL_DOCS options are followed by strings to be " + "associated with the property as its brief and full documentation. " + "Corresponding options to the get_property command will retrieve the " + "documentation."; + } + + cmTypeMacro(cmDefinePropertyCommand, cmCommand); +private: + std::string PropertyName; + std::string BriefDocs; + std::string FullDocs; +}; + + + +#endif diff --git a/Source/cmDefinitions.cxx b/Source/cmDefinitions.cxx new file mode 100644 index 0000000..9d28700 --- /dev/null +++ b/Source/cmDefinitions.cxx @@ -0,0 +1,178 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDefinitions.h" + +//---------------------------------------------------------------------------- +cmDefinitions::Def cmDefinitions::NoDef; + +//---------------------------------------------------------------------------- +cmDefinitions::cmDefinitions(cmDefinitions* parent): Up(parent) +{ +} + +//---------------------------------------------------------------------------- +void cmDefinitions::Reset(cmDefinitions* parent) +{ + this->Up = parent; + this->Map.clear(); +} + +//---------------------------------------------------------------------------- +cmDefinitions::Def const& +cmDefinitions::GetInternal(const char* key) +{ + MapType::const_iterator i = this->Map.find(key); + if(i != this->Map.end()) + { + return i->second; + } + else if(cmDefinitions* up = this->Up) + { + // Query the parent scope and store the result locally. + Def def = up->GetInternal(key); + return this->Map.insert(MapType::value_type(key, def)).first->second; + } + return this->NoDef; +} + +//---------------------------------------------------------------------------- +cmDefinitions::Def const& +cmDefinitions::SetInternal(const char* key, Def const& def) +{ + if(this->Up || def.Exists) + { + // In lower scopes we store keys, defined or not. + MapType::iterator i = this->Map.find(key); + if(i == this->Map.end()) + { + i = this->Map.insert(MapType::value_type(key, def)).first; + } + else + { + i->second = def; + } + return i->second; + } + else + { + // In the top-most scope we need not store undefined keys. + this->Map.erase(key); + return this->NoDef; + } +} + +//---------------------------------------------------------------------------- +const char* cmDefinitions::Get(const char* key) +{ + Def const& def = this->GetInternal(key); + return def.Exists? def.c_str() : 0; +} + +//---------------------------------------------------------------------------- +const char* cmDefinitions::Set(const char* key, const char* value) +{ + Def const& def = this->SetInternal(key, Def(value)); + return def.Exists? def.c_str() : 0; +} + +//---------------------------------------------------------------------------- +std::set cmDefinitions::LocalKeys() const +{ + std::set keys; + // Consider local definitions. + for(MapType::const_iterator mi = this->Map.begin(); + mi != this->Map.end(); ++mi) + { + if (mi->second.Exists) + { + keys.insert(mi->first); + } + } + return keys; +} + +//---------------------------------------------------------------------------- +cmDefinitions cmDefinitions::Closure() const +{ + return cmDefinitions(ClosureTag(), this); +} + +//---------------------------------------------------------------------------- +cmDefinitions::cmDefinitions(ClosureTag const&, cmDefinitions const* root): + Up(0) +{ + std::set undefined; + this->ClosureImpl(undefined, root); +} + +//---------------------------------------------------------------------------- +void cmDefinitions::ClosureImpl(std::set& undefined, + cmDefinitions const* defs) +{ + // Consider local definitions. + for(MapType::const_iterator mi = defs->Map.begin(); + mi != defs->Map.end(); ++mi) + { + // Use this key if it is not already set or unset. + if(this->Map.find(mi->first) == this->Map.end() && + undefined.find(mi->first) == undefined.end()) + { + if(mi->second.Exists) + { + this->Map.insert(*mi); + } + else + { + undefined.insert(mi->first); + } + } + } + + // Traverse parents. + if(cmDefinitions const* up = defs->Up) + { + this->ClosureImpl(undefined, up); + } +} + +//---------------------------------------------------------------------------- +std::set cmDefinitions::ClosureKeys() const +{ + std::set defined; + std::set undefined; + this->ClosureKeys(defined, undefined); + return defined; +} + +//---------------------------------------------------------------------------- +void cmDefinitions::ClosureKeys(std::set& defined, + std::set& undefined) const +{ + // Consider local definitions. + for(MapType::const_iterator mi = this->Map.begin(); + mi != this->Map.end(); ++mi) + { + // Use this key if it is not already set or unset. + if(defined.find(mi->first) == defined.end() && + undefined.find(mi->first) == undefined.end()) + { + std::set& m = mi->second.Exists? defined : undefined; + m.insert(mi->first); + } + } + + // Traverse parents. + if(cmDefinitions const* up = this->Up) + { + up->ClosureKeys(defined, undefined); + } +} diff --git a/Source/cmDefinitions.h b/Source/cmDefinitions.h new file mode 100644 index 0000000..4834d84 --- /dev/null +++ b/Source/cmDefinitions.h @@ -0,0 +1,86 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDefinitions_h +#define cmDefinitions_h + +#include "cmStandardIncludes.h" + +/** \class cmDefinitions + * \brief Store a scope of variable definitions for CMake language. + * + * This stores the state of variable definitions (set or unset) for + * one scope. Sets are always local. Gets search parent scopes + * transitively and save results locally. + */ +class cmDefinitions +{ +public: + /** Construct with the given parent scope. */ + cmDefinitions(cmDefinitions* parent = 0); + + /** Reset object as if newly constructed. */ + void Reset(cmDefinitions* parent = 0); + + /** Returns the parent scope, if any. */ + cmDefinitions* GetParent() const { return this->Up; } + + /** Get the value associated with a key; null if none. + Store the result locally if it came from a parent. */ + const char* Get(const char* key); + + /** Set (or unset if null) a value associated with a key. */ + const char* Set(const char* key, const char* value); + + /** Get the set of all local keys. */ + std::set LocalKeys() const; + + /** Compute the closure of all defined keys with values. + This flattens the scope. The result has no parent. */ + cmDefinitions Closure() const; + + /** Compute the set of all defined keys. */ + std::set ClosureKeys() const; + +private: + // String with existence boolean. + struct Def: public cmStdString + { + Def(): cmStdString(), Exists(false) {} + Def(const char* v): cmStdString(v?v:""), Exists(v?true:false) {} + Def(Def const& d): cmStdString(d), Exists(d.Exists) {} + bool Exists; + }; + static Def NoDef; + + // Parent scope, if any. + cmDefinitions* Up; + + // Local definitions, set or unset. + typedef std::map MapType; + MapType Map; + + // Internal query and update methods. + Def const& GetInternal(const char* key); + Def const& SetInternal(const char* key, Def const& def); + + // Implementation of Closure() method. + struct ClosureTag {}; + cmDefinitions(ClosureTag const&, cmDefinitions const* root); + void ClosureImpl(std::set& undefined, + cmDefinitions const* defs); + + // Implementation of ClosureKeys() method. + void ClosureKeys(std::set& defined, + std::set& undefined) const; +}; + +#endif diff --git a/Source/cmDepends.cxx b/Source/cmDepends.cxx new file mode 100644 index 0000000..9296d4c --- /dev/null +++ b/Source/cmDepends.cxx @@ -0,0 +1,286 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDepends.h" + +#include "cmLocalGenerator.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmSystemTools.h" +#include "cmFileTimeComparison.h" +#include + +//---------------------------------------------------------------------------- +cmDepends::cmDepends(cmLocalGenerator* lg, const char* targetDir): + CompileDirectory(), + LocalGenerator(lg), + Verbose(false), + FileComparison(0), + TargetDirectory(targetDir), + MaxPath(16384), + Dependee(new char[MaxPath]), + Depender(new char[MaxPath]) +{ +} + +//---------------------------------------------------------------------------- +cmDepends::~cmDepends() +{ + delete [] this->Dependee; + delete [] this->Depender; +} + +//---------------------------------------------------------------------------- +bool cmDepends::Write(std::ostream &makeDepends, + std::ostream &internalDepends) +{ + // Lookup the set of sources to scan. + std::string srcLang = "CMAKE_DEPENDS_CHECK_"; + srcLang += this->Language; + cmMakefile* mf = this->LocalGenerator->GetMakefile(); + const char* srcStr = mf->GetSafeDefinition(srcLang.c_str()); + std::vector pairs; + cmSystemTools::ExpandListArgument(srcStr, pairs); + + for(std::vector::iterator si = pairs.begin(); + si != pairs.end();) + { + // Get the source and object file. + std::string const& src = *si++; + if(si == pairs.end()) { break; } + std::string obj = *si++; + + // Make sure the object file is relative to the top of the build tree. + obj = this->LocalGenerator->Convert(obj.c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::MAKEFILE); + + // Write the dependencies for this pair. + if(!this->WriteDependencies(src.c_str(), obj.c_str(), + makeDepends, internalDepends)) + { + return false; + } + } + + return this->Finalize(makeDepends, internalDepends); +} + +//---------------------------------------------------------------------------- +bool cmDepends::Finalize(std::ostream&, + std::ostream&) +{ + return true; +} + +//---------------------------------------------------------------------------- +bool cmDepends::Check(const char *makeFile, const char *internalFile, + std::map& validDeps) +{ + // Dependency checks must be done in proper working directory. + std::string oldcwd = "."; + if(this->CompileDirectory != ".") + { + // Get the CWD but do not call CollapseFullPath because + // we only need it to cd back, and the form does not matter + oldcwd = cmSystemTools::GetCurrentWorkingDirectory(false); + cmSystemTools::ChangeDirectory(this->CompileDirectory.c_str()); + } + + // Check whether dependencies must be regenerated. + bool okay = true; + std::ifstream fin(internalFile); + if(!(fin && this->CheckDependencies(fin, validDeps))) + { + // Clear all dependencies so they will be regenerated. + this->Clear(makeFile); + cmSystemTools::RemoveFile(internalFile); + okay = false; + } + + // Restore working directory. + if(oldcwd != ".") + { + cmSystemTools::ChangeDirectory(oldcwd.c_str()); + } + + return okay; +} + +//---------------------------------------------------------------------------- +void cmDepends::Clear(const char *file) +{ + // Print verbose output. + if(this->Verbose) + { + cmOStringStream msg; + msg << "Clearing dependencies in \"" << file << "\"." << std::endl; + cmSystemTools::Stdout(msg.str().c_str()); + } + + // Write an empty dependency file. + cmGeneratedFileStream depFileStream(file); + depFileStream + << "# Empty dependencies file\n" + << "# This may be replaced when dependencies are built." << std::endl; +} + +//---------------------------------------------------------------------------- +bool cmDepends::WriteDependencies(const char*, const char*, + std::ostream&, std::ostream&) +{ + // This should be implemented by the subclass. + return false; +} + +//---------------------------------------------------------------------------- +bool cmDepends::CheckDependencies(std::istream& internalDepends, + std::map& validDeps) +{ + // Parse dependencies from the stream. If any dependee is missing + // or newer than the depender then dependencies should be + // regenerated. + bool okay = true; + bool dependerExists = false; + DependencyVector* currentDependencies = 0; + + while(internalDepends.getline(this->Dependee, this->MaxPath)) + { + if ( this->Dependee[0] == 0 || this->Dependee[0] == '#' || + this->Dependee[0] == '\r' ) + { + continue; + } + size_t len = internalDepends.gcount()-1; + if ( this->Dependee[len-1] == '\r' ) + { + len --; + this->Dependee[len] = 0; + } + if ( this->Dependee[0] != ' ' ) + { + memcpy(this->Depender, this->Dependee, len+1); + // Calling FileExists() for the depender here saves in many cases 50% + // of the calls to FileExists() further down in the loop. E.g. for + // kdelibs/khtml this reduces the number of calls from 184k down to 92k, + // or the time for cmake -E cmake_depends from 0.3 s down to 0.21 s. + dependerExists = cmSystemTools::FileExists(this->Depender); + DependencyVector tmp; + validDeps[this->Depender] = tmp; + currentDependencies = &validDeps[this->Depender]; + continue; + } + /* + // Parse the dependency line. + if(!this->ParseDependency(line.c_str())) + { + continue; + } + */ + + // Dependencies must be regenerated if the dependee does not exist + // or if the depender exists and is older than the dependee. + bool regenerate = false; + const char* dependee = this->Dependee+1; + const char* depender = this->Depender; + if (currentDependencies != 0) + { + currentDependencies->push_back(dependee); + } + + if(!cmSystemTools::FileExists(dependee)) + { + // The dependee does not exist. + regenerate = true; + + // Print verbose output. + if(this->Verbose) + { + cmOStringStream msg; + msg << "Dependee \"" << dependee + << "\" does not exist for depender \"" + << depender << "\"." << std::endl; + cmSystemTools::Stdout(msg.str().c_str()); + } + } + else if(dependerExists) + { + // The dependee and depender both exist. Compare file times. + int result = 0; + if((!this->FileComparison->FileTimeCompare(depender, dependee, + &result) || result < 0)) + { + // The depender is older than the dependee. + regenerate = true; + + // Print verbose output. + if(this->Verbose) + { + cmOStringStream msg; + msg << "Dependee \"" << dependee + << "\" is newer than depender \"" + << depender << "\"." << std::endl; + cmSystemTools::Stdout(msg.str().c_str()); + } + } + } + if(regenerate) + { + // Dependencies must be regenerated. + okay = false; + + // Remove the information of this depender from the map, it needs + // to be rescanned + if (currentDependencies != 0) + { + validDeps.erase(this->Depender); + currentDependencies = 0; + } + + // Remove the depender to be sure it is rebuilt. + if (dependerExists) + { + cmSystemTools::RemoveFile(depender); + dependerExists = false; + } + } + } + + return okay; +} + +//---------------------------------------------------------------------------- +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(); + includePath = mf->GetDefinition(includePathVar.c_str()); + if(includePath) + { + cmSystemTools::ExpandListArgument(includePath, this->IncludePath); + } + else + { + // Fallback to the old directory level variable if no per-target var: + includePathVar = "CMAKE_"; + includePathVar += lang; + includePathVar += "_INCLUDE_PATH"; + includePath = mf->GetDefinition(includePathVar.c_str()); + if(includePath) + { + cmSystemTools::ExpandListArgument(includePath, this->IncludePath); + } + } +} diff --git a/Source/cmDepends.h b/Source/cmDepends.h new file mode 100644 index 0000000..087da64 --- /dev/null +++ b/Source/cmDepends.h @@ -0,0 +1,121 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDepends_h +#define cmDepends_h + +#include "cmStandardIncludes.h" + +class cmFileTimeComparison; +class cmLocalGenerator; + +/** \class cmDepends + * \brief Dependency scanner superclass. + * + * This class is responsible for maintaining a .depends.make file in + * the build tree corresponding to an object file. Subclasses help it + * maintain dependencies for particular languages. + */ +class cmDepends +{ +public: + /** Instances need to know the build directory name and the relative + path from the build directory to the target file. */ + cmDepends(cmLocalGenerator* lg=0, const char* targetDir=""); + + /** at what level will the compile be done from */ + void SetCompileDirectory(const char *dir) {this->CompileDirectory = dir;}; + + /** Set the local generator for the directory in which we are + scanning dependencies. This is not a full local generator; it + has been setup to do relative path conversions for the current + directory. */ + void SetLocalGenerator(cmLocalGenerator* lg) { this->LocalGenerator = lg; } + + /** Set the specific language to be scanned. */ + void SetLanguage(const char* lang) { this->Language = lang; } + + /** Set the target build directory. */ + void SetTargetDirectory(const char* dir) { this->TargetDirectory = dir; } + + /** should this be verbose in its output */ + void SetVerbose(bool verb) { this->Verbose = verb; } + + /** Virtual destructor to cleanup subclasses properly. */ + virtual ~cmDepends(); + + /** Write dependencies for the target file. */ + bool Write(std::ostream &makeDepends, std::ostream &internalDepends); + + class DependencyVector: public std::vector {}; + + /** Check dependencies for the target file. Returns true if + dependencies are okay and false if they must be generated. If + they must be generated Clear has already been called to wipe out + the old dependencies. + Dependencies which are still valid will be stored in validDeps. */ + bool Check(const char *makeFile, const char* internalFile, + std::map& validDeps); + + /** Clear dependencies for the target file so they will be regenerated. */ + void Clear(const char *file); + + /** Set the file comparison object */ + void SetFileComparison(cmFileTimeComparison* fc) { + this->FileComparison = fc; } + +protected: + + // Write dependencies for the target file to the given stream. + // Return true for success and false for failure. + virtual bool WriteDependencies(const char *src, const char* obj, + std::ostream& makeDepends, std::ostream& internalDepends); + + // Check dependencies for the target file in the given stream. + // Return false if dependencies must be regenerated and true + // otherwise. + virtual bool CheckDependencies(std::istream& internalDepends, + std::map& validDeps); + + // Finalize the dependency information for the target. + virtual bool Finalize(std::ostream& makeDepends, + std::ostream& internalDepends); + + // The directory in which the build rule for the target file is executed. + std::string CompileDirectory; + + // The local generator. + cmLocalGenerator* LocalGenerator; + + // Flag for verbose output. + bool Verbose; + cmFileTimeComparison* FileComparison; + + std::string Language; + + // The full path to the target's build directory. + std::string TargetDirectory; + + size_t MaxPath; + char* Dependee; + char* Depender; + + // The include file search path. + std::vector IncludePath; + + void SetIncludePathFromLanguage(const char* lang); + +private: + cmDepends(cmDepends const&); // Purposely not implemented. + void operator=(cmDepends const&); // Purposely not implemented. +}; + +#endif diff --git a/Source/cmDependsC.cxx b/Source/cmDependsC.cxx new file mode 100644 index 0000000..44841a9 --- /dev/null +++ b/Source/cmDependsC.cxx @@ -0,0 +1,581 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDependsC.h" + +#include "cmFileTimeComparison.h" +#include "cmLocalGenerator.h" +#include "cmMakefile.h" +#include "cmSystemTools.h" + +#include // isspace + + +#define INCLUDE_REGEX_LINE \ + "^[ \t]*#[ \t]*(include|import)[ \t]*[<\"]([^\">]+)([\">])" + +#define INCLUDE_REGEX_LINE_MARKER "#IncludeRegexLine: " +#define INCLUDE_REGEX_SCAN_MARKER "#IncludeRegexScan: " +#define INCLUDE_REGEX_COMPLAIN_MARKER "#IncludeRegexComplain: " +#define INCLUDE_REGEX_TRANSFORM_MARKER "#IncludeRegexTransform: " + +//---------------------------------------------------------------------------- +cmDependsC::cmDependsC() +: ValidDeps(0) +{ +} + +//---------------------------------------------------------------------------- +cmDependsC::cmDependsC(cmLocalGenerator* lg, + const char* targetDir, + const char* lang, + const std::map* validDeps) +: cmDepends(lg, targetDir) +, ValidDeps(validDeps) +{ + cmMakefile* mf = lg->GetMakefile(); + + // Configure the include file search path. + this->SetIncludePathFromLanguage(lang); + + // Configure regular expressions. + std::string scanRegex = "^.*$"; + std::string complainRegex = "^$"; + { + std::string scanRegexVar = "CMAKE_"; + scanRegexVar += lang; + scanRegexVar += "_INCLUDE_REGEX_SCAN"; + if(const char* sr = mf->GetDefinition(scanRegexVar.c_str())) + { + scanRegex = sr; + } + std::string complainRegexVar = "CMAKE_"; + complainRegexVar += lang; + complainRegexVar += "_INCLUDE_REGEX_COMPLAIN"; + if(const char* cr = mf->GetDefinition(complainRegexVar.c_str())) + { + complainRegex = cr; + } + } + + this->IncludeRegexLine.compile(INCLUDE_REGEX_LINE); + this->IncludeRegexScan.compile(scanRegex.c_str()); + this->IncludeRegexComplain.compile(complainRegex.c_str()); + this->IncludeRegexLineString = INCLUDE_REGEX_LINE_MARKER INCLUDE_REGEX_LINE; + this->IncludeRegexScanString = INCLUDE_REGEX_SCAN_MARKER; + this->IncludeRegexScanString += scanRegex; + this->IncludeRegexComplainString = INCLUDE_REGEX_COMPLAIN_MARKER; + this->IncludeRegexComplainString += complainRegex; + + this->SetupTransforms(); + + this->CacheFileName = this->TargetDirectory; + this->CacheFileName += "/"; + this->CacheFileName += lang; + this->CacheFileName += ".includecache"; + + this->ReadCacheFile(); +} + +//---------------------------------------------------------------------------- +cmDependsC::~cmDependsC() +{ + this->WriteCacheFile(); + + for (std::map::iterator it= + this->FileCache.begin(); it!=this->FileCache.end(); ++it) + { + delete it->second; + } +} + +//---------------------------------------------------------------------------- +bool cmDependsC::WriteDependencies(const char *src, const char *obj, + std::ostream& makeDepends, std::ostream& internalDepends) +{ + // Make sure this is a scanning instance. + if(!src || src[0] == '\0') + { + cmSystemTools::Error("Cannot scan dependencies without a source file."); + return false; + } + if(!obj || obj[0] == '\0') + { + cmSystemTools::Error("Cannot scan dependencies without an object file."); + return false; + } + + if (this->ValidDeps != 0) + { + std::map::const_iterator tmpIt = + this->ValidDeps->find(obj); + if (tmpIt!= this->ValidDeps->end()) + { + // Write the dependencies to the output stream. Makefile rules + // written by the original local generator for this directory + // convert the dependencies to paths relative to the home output + // directory. We must do the same here. + internalDepends << obj << std::endl; + for(DependencyVector::const_iterator i=tmpIt->second.begin(); + i != tmpIt->second.end(); ++i) + { + makeDepends << obj << ": " << + this->LocalGenerator->Convert(i->c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::MAKEFILE) + << std::endl; + internalDepends << " " << i->c_str() << std::endl; + } + makeDepends << std::endl; + return true; + } + } + + // Walk the dependency graph starting with the source file. + bool first = true; + UnscannedEntry root; + root.FileName = src; + this->Unscanned.push(root); + this->Encountered.clear(); + this->Encountered.insert(src); + std::set dependencies; + std::set scanned; + + // Use reserve to allocate enough memory for tempPathStr + // so that during the loops no memory is allocated or freed + std::string tempPathStr; + tempPathStr.reserve(4*1024); + + while(!this->Unscanned.empty()) + { + // Get the next file to scan. + UnscannedEntry current = this->Unscanned.front(); + this->Unscanned.pop(); + + // If not a full path, find the file in the include path. + std::string fullName; + if(first || cmSystemTools::FileIsFullPath(current.FileName.c_str())) + { + if(cmSystemTools::FileExists(current.FileName.c_str(), true)) + { + fullName = current.FileName; + } + } + else if(!current.QuotedLocation.empty() && + cmSystemTools::FileExists(current.QuotedLocation.c_str(), true)) + { + // The include statement producing this entry was a double-quote + // include and the included file is present in the directory of + // the source containing the include statement. + fullName = current.QuotedLocation; + } + else + { + std::map::iterator + headerLocationIt=this->HeaderLocationCache.find(current.FileName); + if (headerLocationIt!=this->HeaderLocationCache.end()) + { + fullName=headerLocationIt->second; + } + else for(std::vector::const_iterator i = + this->IncludePath.begin(); i != this->IncludePath.end(); ++i) + { + // Construct the name of the file as if it were in the current + // include directory. Avoid using a leading "./". + + tempPathStr = ""; + if((*i) == ".") + { + tempPathStr += current.FileName; + } + else + { + tempPathStr += *i; + tempPathStr+="/"; + tempPathStr+=current.FileName; + } + + // Look for the file in this location. + if(cmSystemTools::FileExists(tempPathStr.c_str(), true)) + { + fullName = tempPathStr; + HeaderLocationCache[current.FileName]=fullName; + break; + } + } + } + + // Complain if the file cannot be found and matches the complain + // regex. + if(fullName.empty() && + this->IncludeRegexComplain.find(current.FileName.c_str())) + { + cmSystemTools::Error("Cannot find file \"", + current.FileName.c_str(), "\"."); + return false; + } + + // Scan the file if it was found and has not been scanned already. + if(!fullName.empty() && (scanned.find(fullName) == scanned.end())) + { + // Record scanned files. + scanned.insert(fullName); + + // Check whether this file is already in the cache + std::map::iterator fileIt= + this->FileCache.find(fullName); + if (fileIt!=this->FileCache.end()) + { + fileIt->second->Used=true; + dependencies.insert(fullName); + for (std::vector::const_iterator incIt= + fileIt->second->UnscannedEntries.begin(); + incIt!=fileIt->second->UnscannedEntries.end(); ++incIt) + { + if (this->Encountered.find(incIt->FileName) == + this->Encountered.end()) + { + this->Encountered.insert(incIt->FileName); + this->Unscanned.push(*incIt); + } + } + } + else + { + + // Try to scan the file. Just leave it out if we cannot find + // it. + std::ifstream fin(fullName.c_str()); + if(fin) + { + // Add this file as a dependency. + dependencies.insert(fullName); + + // Scan this file for new dependencies. Pass the directory + // containing the file to handle double-quote includes. + std::string dir = cmSystemTools::GetFilenamePath(fullName); + this->Scan(fin, dir.c_str(), fullName); + } + } + } + + first = false; + } + + // Write the dependencies to the output stream. Makefile rules + // written by the original local generator for this directory + // convert the dependencies to paths relative to the home output + // directory. We must do the same here. + internalDepends << obj << std::endl; + for(std::set::iterator i=dependencies.begin(); + i != dependencies.end(); ++i) + { + makeDepends << obj << ": " << + this->LocalGenerator->Convert(i->c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::MAKEFILE) + << std::endl; + internalDepends << " " << i->c_str() << std::endl; + } + makeDepends << std::endl; + + return true; +} + +//---------------------------------------------------------------------------- +void cmDependsC::ReadCacheFile() +{ + if(this->CacheFileName.size() == 0) + { + return; + } + std::ifstream fin(this->CacheFileName.c_str()); + if(!fin) + { + return; + } + + std::string line; + cmIncludeLines* cacheEntry=0; + bool haveFileName=false; + + while(cmSystemTools::GetLineFromStream(fin, line)) + { + if (line.empty()) + { + cacheEntry=0; + haveFileName=false; + continue; + } + //the first line after an empty line is the name of the parsed file + if (haveFileName==false) + { + haveFileName=true; + int newer=0; + cmFileTimeComparison comp; + bool res=comp.FileTimeCompare(this->CacheFileName.c_str(), + line.c_str(), &newer); + + if ((res==true) && (newer==1)) //cache is newer than the parsed file + { + cacheEntry=new cmIncludeLines; + this->FileCache[line]=cacheEntry; + } + // file doesn't exist, check that the regular expressions + // haven't changed + else if (res==false) + { + if (line.find(INCLUDE_REGEX_LINE_MARKER) == 0) + { + if (line != this->IncludeRegexLineString) + { + return; + } + } + else if (line.find(INCLUDE_REGEX_SCAN_MARKER) == 0) + { + if (line != this->IncludeRegexScanString) + { + return; + } + } + else if (line.find(INCLUDE_REGEX_COMPLAIN_MARKER) == 0) + { + if (line != this->IncludeRegexComplainString) + { + return; + } + } + else if (line.find(INCLUDE_REGEX_TRANSFORM_MARKER) == 0) + { + if (line != this->IncludeRegexTransformString) + { + return; + } + } + } + } + else if (cacheEntry!=0) + { + UnscannedEntry entry; + entry.FileName = line; + if (cmSystemTools::GetLineFromStream(fin, line)) + { + if (line!="-") + { + entry.QuotedLocation=line; + } + cacheEntry->UnscannedEntries.push_back(entry); + } + } + } +} + +//---------------------------------------------------------------------------- +void cmDependsC::WriteCacheFile() const +{ + if(this->CacheFileName.size() == 0) + { + return; + } + std::ofstream cacheOut(this->CacheFileName.c_str()); + if(!cacheOut) + { + return; + } + + cacheOut << this->IncludeRegexLineString << "\n\n"; + cacheOut << this->IncludeRegexScanString << "\n\n"; + cacheOut << this->IncludeRegexComplainString << "\n\n"; + cacheOut << this->IncludeRegexTransformString << "\n\n"; + + for (std::map::const_iterator fileIt= + this->FileCache.begin(); + fileIt!=this->FileCache.end(); ++fileIt) + { + if (fileIt->second->Used) + { + cacheOut<first.c_str()<::const_iterator + incIt=fileIt->second->UnscannedEntries.begin(); + incIt!=fileIt->second->UnscannedEntries.end(); ++incIt) + { + cacheOut<FileName.c_str()<QuotedLocation.empty()) + { + cacheOut<<"-"<QuotedLocation.c_str()<Used=true; + this->FileCache[fullName]=newCacheEntry; + + // Read one line at a time. + std::string line; + while(cmSystemTools::GetLineFromStream(is, line)) + { + // Transform the line content first. + if(!this->TransformRules.empty()) + { + this->TransformLine(line); + } + + // Match include directives. + if(this->IncludeRegexLine.find(line.c_str())) + { + // Get the file being included. + UnscannedEntry entry; + entry.FileName = this->IncludeRegexLine.match(2); + cmSystemTools::ConvertToUnixSlashes(entry.FileName); + if(this->IncludeRegexLine.match(3) == "\"" && + !cmSystemTools::FileIsFullPath(entry.FileName.c_str())) + { + // This was a double-quoted include with a relative path. We + // must check for the file in the directory containing the + // file we are scanning. + entry.QuotedLocation = directory; + entry.QuotedLocation += "/"; + entry.QuotedLocation += entry.FileName; + } + + // Queue the file if it has not yet been encountered and it + // matches the regular expression for recursive scanning. Note + // that this check does not account for the possibility of two + // headers with the same name in different directories when one + // is included by double-quotes and the other by angle brackets. + // It also does not work properly if two header files with the same + // name exist in different directories, and both are included from a + // file their own directory by simply using "filename.h" (#12619) + // This kind of problem will be fixed when a more + // preprocessor-like implementation of this scanner is created. + if (this->IncludeRegexScan.find(entry.FileName.c_str())) + { + newCacheEntry->UnscannedEntries.push_back(entry); + if(this->Encountered.find(entry.FileName) == this->Encountered.end()) + { + this->Encountered.insert(entry.FileName); + this->Unscanned.push(entry); + } + } + } + } +} + +//---------------------------------------------------------------------------- +void cmDependsC::SetupTransforms() +{ + // Get the transformation rules. + std::vector transformRules; + cmMakefile* mf = this->LocalGenerator->GetMakefile(); + if(const char* xform = + mf->GetDefinition("CMAKE_INCLUDE_TRANSFORMS")) + { + cmSystemTools::ExpandListArgument(xform, transformRules, true); + } + for(std::vector::const_iterator tri = transformRules.begin(); + tri != transformRules.end(); ++tri) + { + this->ParseTransform(*tri); + } + + this->IncludeRegexTransformString = INCLUDE_REGEX_TRANSFORM_MARKER; + if(!this->TransformRules.empty()) + { + // Construct the regular expression to match lines to be + // transformed. + std::string xform = "^([ \t]*#[ \t]*(include|import)[ \t]*)("; + const char* sep = ""; + for(TransformRulesType::const_iterator tri = this->TransformRules.begin(); + tri != this->TransformRules.end(); ++tri) + { + xform += sep; + xform += tri->first; + sep = "|"; + } + xform += ")[ \t]*\\(([^),]*)\\)"; + this->IncludeRegexTransform.compile(xform.c_str()); + + // Build a string that encodes all transformation rules and will + // change when rules are changed. + this->IncludeRegexTransformString += xform; + for(TransformRulesType::const_iterator tri = this->TransformRules.begin(); + tri != this->TransformRules.end(); ++tri) + { + this->IncludeRegexTransformString += " "; + this->IncludeRegexTransformString += tri->first; + this->IncludeRegexTransformString += "(%)="; + this->IncludeRegexTransformString += tri->second; + } + } +} + +//---------------------------------------------------------------------------- +void cmDependsC::ParseTransform(std::string const& xform) +{ + // A transform rule is of the form SOME_MACRO(%)=value-with-% + // We can simply separate with "(%)=". + std::string::size_type pos = xform.find("(%)="); + if(pos == xform.npos || pos == 0) + { + return; + } + std::string name = xform.substr(0, pos); + std::string value = xform.substr(pos+4, xform.npos); + this->TransformRules[name] = value; +} + +//---------------------------------------------------------------------------- +void cmDependsC::TransformLine(std::string& line) +{ + // Check for a transform rule match. Return if none. + if(!this->IncludeRegexTransform.find(line.c_str())) + { + return; + } + TransformRulesType::const_iterator tri = + this->TransformRules.find(this->IncludeRegexTransform.match(3)); + if(tri == this->TransformRules.end()) + { + return; + } + + // Construct the transformed line. + std::string newline = this->IncludeRegexTransform.match(1); + std::string arg = this->IncludeRegexTransform.match(4); + for(const char* c = tri->second.c_str(); *c; ++c) + { + if(*c == '%') + { + newline += arg; + } + else + { + newline += *c; + } + } + + // Return the transformed line. + line = newline; +} diff --git a/Source/cmDependsC.h b/Source/cmDependsC.h new file mode 100644 index 0000000..bd9a4b7 --- /dev/null +++ b/Source/cmDependsC.h @@ -0,0 +1,99 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDependsC_h +#define cmDependsC_h + +#include "cmDepends.h" +#include +#include + +/** \class cmDependsC + * \brief Dependency scanner for C and C++ object files. + */ +class cmDependsC: public cmDepends +{ +public: + /** Checking instances need to know the build directory name and the + relative path from the build directory to the target file. */ + cmDependsC(); + cmDependsC(cmLocalGenerator* lg, const char* targetDir, const char* lang, + const std::map* validDeps); + + /** Virtual destructor to cleanup subclasses properly. */ + virtual ~cmDependsC(); + +protected: + typedef std::vector t_CharBuffer; + + // Implement writing/checking methods required by superclass. + virtual bool WriteDependencies(const char *src, + const char *file, + std::ostream& makeDepends, + std::ostream& internalDepends); + + // Method to scan a single file. + void Scan(std::istream& is, const char* directory, + const cmStdString& fullName); + + // Regular expression to identify C preprocessor include directives. + cmsys::RegularExpression IncludeRegexLine; + + // Regular expressions to choose which include files to scan + // recursively and which to complain about not finding. + cmsys::RegularExpression IncludeRegexScan; + cmsys::RegularExpression IncludeRegexComplain; + std::string IncludeRegexLineString; + std::string IncludeRegexScanString; + std::string IncludeRegexComplainString; + + // Regex to transform #include lines. + std::string IncludeRegexTransformString; + cmsys::RegularExpression IncludeRegexTransform; + typedef std::map TransformRulesType; + TransformRulesType TransformRules; + void SetupTransforms(); + void ParseTransform(std::string const& xform); + void TransformLine(std::string& line); + +public: + // Data structures for dependency graph walk. + struct UnscannedEntry + { + cmStdString FileName; + cmStdString QuotedLocation; + }; + + struct cmIncludeLines + { + cmIncludeLines(): Used(false) {} + std::vector UnscannedEntries; + bool Used; + }; +protected: + const std::map* ValidDeps; + std::set Encountered; + std::queue Unscanned; + t_CharBuffer Buffer; + + std::map FileCache; + std::map HeaderLocationCache; + + cmStdString CacheFileName; + + void WriteCacheFile() const; + void ReadCacheFile(); +private: + cmDependsC(cmDependsC const&); // Purposely not implemented. + void operator=(cmDependsC const&); // Purposely not implemented. +}; + +#endif diff --git a/Source/cmDependsFortran.cxx b/Source/cmDependsFortran.cxx new file mode 100644 index 0000000..c1b6090 --- /dev/null +++ b/Source/cmDependsFortran.cxx @@ -0,0 +1,1258 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDependsFortran.h" + +#include "cmSystemTools.h" +#include "cmLocalGenerator.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" + +#include "cmDependsFortranParser.h" /* Interface to parser object. */ + +#include +#include + +// TODO: Test compiler for the case of the mod file. Some always +// use lower case and some always use upper case. I do not know if any +// use the case from the source code. + +//---------------------------------------------------------------------------- +// Information about a single source file. +class cmDependsFortranSourceInfo +{ +public: + // The name of the source file. + std::string Source; + + // Set of provided and required modules. + std::set Provides; + std::set Requires; + + // Set of files included in the translation unit. + std::set Includes; +}; + +//---------------------------------------------------------------------------- +// Parser methods not included in generated interface. + +// Get the current buffer processed by the lexer. +YY_BUFFER_STATE cmDependsFortranLexer_GetCurrentBuffer(yyscan_t yyscanner); + +// The parser entry point. +int cmDependsFortran_yyparse(yyscan_t); + +//---------------------------------------------------------------------------- +// Define parser object internal structure. +struct cmDependsFortranFile +{ + cmDependsFortranFile(FILE* file, YY_BUFFER_STATE buffer, + const std::string& dir): + File(file), Buffer(buffer), Directory(dir) {} + FILE* File; + YY_BUFFER_STATE Buffer; + std::string Directory; +}; + +struct cmDependsFortranParser_s +{ + cmDependsFortranParser_s(cmDependsFortran* self, + std::set& ppDefines, + cmDependsFortranSourceInfo& info); + ~cmDependsFortranParser_s(); + + // Pointer back to the main class. + cmDependsFortran* Self; + + // Lexical scanner instance. + yyscan_t Scanner; + + // Stack of open files in the translation unit. + std::stack FileStack; + + // Buffer for string literals. + std::string TokenString; + + // Flag for whether lexer is reading from inside an interface. + bool InInterface; + + int OldStartcond; + std::set PPDefinitions; + size_t InPPFalseBranch; + std::stack SkipToEnd; + + // Information about the parsed source. + cmDependsFortranSourceInfo& Info; +}; + +//---------------------------------------------------------------------------- +class cmDependsFortranInternals +{ +public: + // The set of modules provided by this target. + std::set TargetProvides; + + // Map modules required by this target to locations. + typedef std::map TargetRequiresMap; + TargetRequiresMap TargetRequires; + + // Information about each object file. + typedef std::map ObjectInfoMap; + ObjectInfoMap ObjectInfo; + + cmDependsFortranSourceInfo& CreateObjectInfo(const char* obj, + const char* src) + { + std::map::iterator i = + this->ObjectInfo.find(obj); + if(i == this->ObjectInfo.end()) + { + std::map::value_type + entry(obj, cmDependsFortranSourceInfo()); + i = this->ObjectInfo.insert(entry).first; + i->second.Source = src; + } + return i->second; + } +}; + +//---------------------------------------------------------------------------- +cmDependsFortran::cmDependsFortran(): + PPDefinitions(0), Internal(0) +{ +} + +//---------------------------------------------------------------------------- +cmDependsFortran +::cmDependsFortran(cmLocalGenerator* lg): + cmDepends(lg), + Internal(new cmDependsFortranInternals) +{ + // Configure the include file search path. + this->SetIncludePathFromLanguage("Fortran"); + + // Get the list of definitions. + std::vector definitions; + cmMakefile* mf = this->LocalGenerator->GetMakefile(); + if(const char* c_defines = + mf->GetDefinition("CMAKE_TARGET_DEFINITIONS")) + { + cmSystemTools::ExpandListArgument(c_defines, definitions); + } + + // translate i.e. FOO=BAR to FOO and add it to the list of defined + // preprocessor symbols + for(std::vector::const_iterator + it = definitions.begin(); it != definitions.end(); ++it) + { + std::string def = *it; + std::string::size_type assignment = def.find("="); + if(assignment != std::string::npos) + { + def = it->substr(0, assignment); + } + this->PPDefinitions.push_back(def); + } +} + +//---------------------------------------------------------------------------- +cmDependsFortran::~cmDependsFortran() +{ + delete this->Internal; +} + +//---------------------------------------------------------------------------- +bool cmDependsFortran::WriteDependencies(const char *src, const char *obj, + std::ostream&, std::ostream&) +{ + // Make sure this is a scanning instance. + if(!src || src[0] == '\0') + { + cmSystemTools::Error("Cannot scan dependencies without an source file."); + return false; + } + if(!obj || obj[0] == '\0') + { + cmSystemTools::Error("Cannot scan dependencies without an object file."); + return false; + } + + // Get the information object for this source. + cmDependsFortranSourceInfo& info = + this->Internal->CreateObjectInfo(obj, src); + + // Make a copy of the macros defined via ADD_DEFINITIONS + std::set ppDefines(this->PPDefinitions.begin(), + this->PPDefinitions.end()); + + // Create the parser object. The constructor takes ppMacro and info per + // reference, so we may look into the resulting objects later. + cmDependsFortranParser parser(this, ppDefines, info); + + // Push on the starting file. + cmDependsFortranParser_FilePush(&parser, src); + + // Parse the translation unit. + if(cmDependsFortran_yyparse(parser.Scanner) != 0) + { + // Failed to parse the file. Report failure to write dependencies. + return false; + } + + return true; +} + +//---------------------------------------------------------------------------- +bool cmDependsFortran::Finalize(std::ostream& makeDepends, + std::ostream& internalDepends) +{ + // Prepare the module search process. + this->LocateModules(); + + // Get the directory in which stamp files will be stored. + const char* stamp_dir = this->TargetDirectory.c_str(); + + // Get the directory in which module files will be created. + const char* mod_dir; + cmMakefile* mf = this->LocalGenerator->GetMakefile(); + if(const char* target_mod_dir = + mf->GetDefinition("CMAKE_Fortran_TARGET_MODULE_DIR")) + { + mod_dir = target_mod_dir; + } + else + { + mod_dir = + this->LocalGenerator->GetMakefile()->GetCurrentOutputDirectory(); + } + + // Actually write dependencies to the streams. + typedef cmDependsFortranInternals::ObjectInfoMap ObjectInfoMap; + ObjectInfoMap const& objInfo = this->Internal->ObjectInfo; + for(ObjectInfoMap::const_iterator i = objInfo.begin(); + i != objInfo.end(); ++i) + { + if(!this->WriteDependenciesReal(i->first.c_str(), i->second, + mod_dir, stamp_dir, + makeDepends, internalDepends)) + { + return false; + } + } + + // Store the list of modules provided by this target. + std::string fiName = this->TargetDirectory; + fiName += "/fortran.internal"; + cmGeneratedFileStream fiStream(fiName.c_str()); + fiStream << "# The fortran modules provided by this target.\n"; + fiStream << "provides\n"; + std::set const& provides = this->Internal->TargetProvides; + for(std::set::const_iterator i = provides.begin(); + i != provides.end(); ++i) + { + fiStream << " " << *i << "\n"; + } + + // Create a script to clean the modules. + if(!provides.empty()) + { + std::string fcName = this->TargetDirectory; + fcName += "/cmake_clean_Fortran.cmake"; + cmGeneratedFileStream fcStream(fcName.c_str()); + fcStream << "# Remove fortran modules provided by this target.\n"; + fcStream << "FILE(REMOVE"; + for(std::set::const_iterator i = provides.begin(); + i != provides.end(); ++i) + { + std::string mod_upper = mod_dir; + mod_upper += "/"; + mod_upper += cmSystemTools::UpperCase(*i); + mod_upper += ".mod"; + std::string mod_lower = mod_dir; + mod_lower += "/"; + mod_lower += *i; + mod_lower += ".mod"; + std::string stamp = stamp_dir; + stamp += "/"; + stamp += *i; + stamp += ".mod.stamp"; + fcStream << "\n"; + fcStream << " \"" << + this->LocalGenerator->Convert(mod_lower.c_str(), + cmLocalGenerator::START_OUTPUT) + << "\"\n"; + fcStream << " \"" << + this->LocalGenerator->Convert(mod_upper.c_str(), + cmLocalGenerator::START_OUTPUT) + << "\"\n"; + fcStream << " \"" << + this->LocalGenerator->Convert(stamp.c_str(), + cmLocalGenerator::START_OUTPUT) + << "\"\n"; + } + fcStream << " )\n"; + } + return true; +} + +//---------------------------------------------------------------------------- +void cmDependsFortran::LocateModules() +{ + // Collect the set of modules provided and required by all sources. + typedef cmDependsFortranInternals::ObjectInfoMap ObjectInfoMap; + ObjectInfoMap const& objInfo = this->Internal->ObjectInfo; + for(ObjectInfoMap::const_iterator infoI = objInfo.begin(); + infoI != objInfo.end(); ++infoI) + { + cmDependsFortranSourceInfo const& info = infoI->second; + for(std::set::const_iterator i = info.Provides.begin(); + i != info.Provides.end(); ++i) + { + // Include this module in the set provided by this target. + this->Internal->TargetProvides.insert(*i); + } + + for(std::set::const_iterator i = info.Requires.begin(); + i != info.Requires.end(); ++i) + { + // Include this module in the set required by this target. + this->Internal->TargetRequires[*i] = ""; + } + } + + // Short-circuit for simple targets. + if(this->Internal->TargetRequires.empty()) + { + return; + } + + // Match modules provided by this target to those it requires. + this->MatchLocalModules(); + + // Load information about other targets. + cmMakefile* mf = this->LocalGenerator->GetMakefile(); + std::vector infoFiles; + if(const char* infoFilesValue = + mf->GetDefinition("CMAKE_TARGET_LINKED_INFO_FILES")) + { + cmSystemTools::ExpandListArgument(infoFilesValue, infoFiles); + } + for(std::vector::const_iterator i = infoFiles.begin(); + i != infoFiles.end(); ++i) + { + std::string targetDir = cmSystemTools::GetFilenamePath(*i); + std::string fname = targetDir + "/fortran.internal"; + std::ifstream fin(fname.c_str()); + if(fin) + { + this->MatchRemoteModules(fin, targetDir.c_str()); + } + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortran::MatchLocalModules() +{ + const char* stampDir = this->TargetDirectory.c_str(); + std::set const& provides = this->Internal->TargetProvides; + for(std::set::const_iterator i = provides.begin(); + i != provides.end(); ++i) + { + this->ConsiderModule(i->c_str(), stampDir); + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortran::MatchRemoteModules(std::istream& fin, + const char* stampDir) +{ + std::string line; + bool doing_provides = false; + while(cmSystemTools::GetLineFromStream(fin, line)) + { + // Ignore comments and empty lines. + if(line.empty() || line[0] == '#' || line[0] == '\r') + { + continue; + } + + if(line[0] == ' ') + { + if(doing_provides) + { + this->ConsiderModule(line.c_str()+1, stampDir); + } + } + else if(line == "provides") + { + doing_provides = true; + } + else + { + doing_provides = false; + } + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortran::ConsiderModule(const char* name, + const char* stampDir) +{ + // Locate each required module. + typedef cmDependsFortranInternals::TargetRequiresMap TargetRequiresMap; + TargetRequiresMap::iterator required = + this->Internal->TargetRequires.find(name); + if(required != this->Internal->TargetRequires.end() && + required->second.empty()) + { + // The module is provided by a CMake target. It will have a stamp file. + std::string stampFile = stampDir; + stampFile += "/"; + stampFile += name; + stampFile += ".mod.stamp"; + required->second = stampFile; + } +} + +//---------------------------------------------------------------------------- +bool +cmDependsFortran +::WriteDependenciesReal(const char *obj, + cmDependsFortranSourceInfo const& info, + const char* mod_dir, const char* stamp_dir, + std::ostream& makeDepends, + std::ostream& internalDepends) +{ + typedef cmDependsFortranInternals::TargetRequiresMap TargetRequiresMap; + + // Get the source file for this object. + const char* src = info.Source.c_str(); + + // Write the include dependencies to the output stream. + internalDepends << obj << std::endl; + internalDepends << " " << src << std::endl; + for(std::set::const_iterator i = info.Includes.begin(); + i != info.Includes.end(); ++i) + { + makeDepends << obj << ": " << + this->LocalGenerator->Convert(i->c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::MAKEFILE) + << std::endl; + internalDepends << " " << i->c_str() << std::endl; + } + makeDepends << std::endl; + + // Write module requirements to the output stream. + for(std::set::const_iterator i = info.Requires.begin(); + i != info.Requires.end(); ++i) + { + // Require only modules not provided in the same source. + if(std::set::const_iterator(info.Provides.find(*i)) != + info.Provides.end()) + { + continue; + } + + // If the module is provided in this target special handling is + // needed. + if(this->Internal->TargetProvides.find(*i) != + this->Internal->TargetProvides.end()) + { + // The module is provided by a different source in the same + // target. Add the proxy dependency to make sure the other + // source builds first. + std::string proxy = stamp_dir; + proxy += "/"; + proxy += *i; + proxy += ".mod.proxy"; + proxy = this->LocalGenerator->Convert(proxy.c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::MAKEFILE); + + // since we require some things add them to our list of requirements + makeDepends << obj << ".requires: " << proxy << std::endl; + } + + // The object file should depend on timestamped files for the + // modules it uses. + TargetRequiresMap::const_iterator required = + this->Internal->TargetRequires.find(*i); + if(required == this->Internal->TargetRequires.end()) { abort(); } + if(!required->second.empty()) + { + // This module is known. Depend on its timestamp file. + std::string stampFile = + this->LocalGenerator->Convert(required->second.c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::MAKEFILE); + makeDepends << obj << ": " << stampFile << "\n"; + } + else + { + // This module is not known to CMake. Try to locate it where + // the compiler will and depend on that. + std::string module; + if(this->FindModule(*i, module)) + { + module = + this->LocalGenerator->Convert(module.c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::MAKEFILE); + makeDepends << obj << ": " << module << "\n"; + } + } + } + + // Write provided modules to the output stream. + for(std::set::const_iterator i = info.Provides.begin(); + i != info.Provides.end(); ++i) + { + std::string proxy = stamp_dir; + proxy += "/"; + proxy += *i; + proxy += ".mod.proxy"; + proxy = this->LocalGenerator->Convert(proxy.c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::MAKEFILE); + makeDepends << proxy << ": " << obj << ".provides" << std::endl; + } + + // If any modules are provided then they must be converted to stamp files. + if(!info.Provides.empty()) + { + // Create a target to copy the module after the object file + // changes. + makeDepends << obj << ".provides.build:\n"; + for(std::set::const_iterator i = info.Provides.begin(); + i != info.Provides.end(); ++i) + { + // Include this module in the set provided by this target. + this->Internal->TargetProvides.insert(*i); + + // Always use lower case for the mod stamp file name. The + // cmake_copy_f90_mod will call back to this class, which will + // try various cases for the real mod file name. + std::string m = cmSystemTools::LowerCase(*i); + std::string modFile = mod_dir; + modFile += "/"; + modFile += *i; + modFile = + this->LocalGenerator->Convert(modFile.c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::SHELL); + std::string stampFile = stamp_dir; + stampFile += "/"; + stampFile += m; + stampFile += ".mod.stamp"; + stampFile = + this->LocalGenerator->Convert(stampFile.c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::SHELL); + makeDepends << "\t$(CMAKE_COMMAND) -E cmake_copy_f90_mod " + << modFile << " " << stampFile; + cmMakefile* mf = this->LocalGenerator->GetMakefile(); + const char* cid = mf->GetDefinition("CMAKE_Fortran_COMPILER_ID"); + if(cid && *cid) + { + makeDepends << " " << cid; + } + makeDepends << "\n"; + } + // After copying the modules update the timestamp file so that + // copying will not be done again until the source rebuilds. + makeDepends << "\t$(CMAKE_COMMAND) -E touch " << obj + << ".provides.build\n"; + + // Make sure the module timestamp rule is evaluated by the time + // the target finishes building. + std::string driver = this->TargetDirectory; + driver += "/build"; + driver = this->LocalGenerator->Convert(driver.c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::MAKEFILE); + makeDepends << driver << ": " << obj << ".provides.build\n"; + } + + return true; +} + +//---------------------------------------------------------------------------- +bool cmDependsFortran::FindModule(std::string const& name, + std::string& module) +{ + // Construct possible names for the module file. + std::string mod_upper = cmSystemTools::UpperCase(name); + std::string mod_lower = name; + mod_upper += ".mod"; + mod_lower += ".mod"; + + // Search the include path for the module. + std::string fullName; + for(std::vector::const_iterator i = + this->IncludePath.begin(); i != this->IncludePath.end(); ++i) + { + // Try the lower-case name. + fullName = *i; + fullName += "/"; + fullName += mod_lower; + if(cmSystemTools::FileExists(fullName.c_str(), true)) + { + module = fullName; + return true; + } + + // Try the upper-case name. + fullName = *i; + fullName += "/"; + fullName += mod_upper; + if(cmSystemTools::FileExists(fullName.c_str(), true)) + { + module = fullName; + return true; + } + } + return false; +} + +//---------------------------------------------------------------------------- +bool cmDependsFortran::CopyModule(const std::vector& args) +{ + // Implements + // + // $(CMAKE_COMMAND) -E cmake_copy_f90_mod input.mod output.mod.stamp + // [compiler-id] + // + // Note that the case of the .mod file depends on the compiler. In + // the future this copy could also account for the fact that some + // compilers include a timestamp in the .mod file so it changes even + // when the interface described in the module does not. + + std::string mod = args[2]; + std::string stamp = args[3]; + std::string compilerId; + if(args.size() >= 5) + { + compilerId = args[4]; + } + std::string mod_dir = cmSystemTools::GetFilenamePath(mod); + if(!mod_dir.empty()) { mod_dir += "/"; } + std::string mod_upper = mod_dir; + mod_upper += cmSystemTools::UpperCase(cmSystemTools::GetFilenameName(mod)); + std::string mod_lower = mod_dir; + mod_lower += cmSystemTools::LowerCase(cmSystemTools::GetFilenameName(mod)); + mod += ".mod"; + mod_upper += ".mod"; + mod_lower += ".mod"; + if(cmSystemTools::FileExists(mod_upper.c_str(), true)) + { + if(cmDependsFortran::ModulesDiffer(mod_upper.c_str(), stamp.c_str(), + compilerId.c_str())) + { + if(!cmSystemTools::CopyFileAlways(mod_upper.c_str(), stamp.c_str())) + { + std::cerr << "Error copying Fortran module from \"" + << mod_upper.c_str() << "\" to \"" << stamp.c_str() + << "\".\n"; + return false; + } + } + return true; + } + else if(cmSystemTools::FileExists(mod_lower.c_str(), true)) + { + if(cmDependsFortran::ModulesDiffer(mod_lower.c_str(), stamp.c_str(), + compilerId.c_str())) + { + if(!cmSystemTools::CopyFileAlways(mod_lower.c_str(), stamp.c_str())) + { + std::cerr << "Error copying Fortran module from \"" + << mod_lower.c_str() << "\" to \"" << stamp.c_str() + << "\".\n"; + return false; + } + } + return true; + } + + std::cerr << "Error copying Fortran module \"" << args[2].c_str() + << "\". Tried \"" << mod_upper.c_str() + << "\" and \"" << mod_lower.c_str() << "\".\n"; + return false; +} + +//---------------------------------------------------------------------------- +// Helper function to look for a short sequence in a stream. If this +// is later used for longer sequences it should be re-written using an +// efficient string search algorithm such as Boyer-Moore. +static +bool cmDependsFortranStreamContainsSequence(std::ifstream& ifs, + const char* seq, int len) +{ + assert(len > 0); + + int cur = 0; + while(cur < len) + { + // Get the next character. + int token = ifs.get(); + if(!ifs) + { + return false; + } + + // Check the character. + if(token == static_cast(seq[cur])) + { + ++cur; + } + else + { + // Assume the sequence has no repeating subsequence. + cur = 0; + } + } + + // The entire sequence was matched. + return true; +} + +//---------------------------------------------------------------------------- +// Helper function to compare the remaining content in two streams. +static bool cmDependsFortranStreamsDiffer(std::ifstream& ifs1, + std::ifstream& ifs2) +{ + // Compare the remaining content. + for(;;) + { + int ifs1_c = ifs1.get(); + int ifs2_c = ifs2.get(); + if(!ifs1 && !ifs2) + { + // We have reached the end of both streams simultaneously. + // The streams are identical. + return false; + } + + if(!ifs1 || !ifs2 || ifs1_c != ifs2_c) + { + // We have reached the end of one stream before the other or + // found differing content. The streams are different. + break; + } + } + + return true; +} + +//---------------------------------------------------------------------------- +bool cmDependsFortran::ModulesDiffer(const char* modFile, + const char* stampFile, + const char* compilerId) +{ + /* + gnu: + A mod file is an ascii file. + + FORTRAN module created from /path/to/foo.f90 on Sun Dec 30 22:47:58 2007 + If you edit this, you'll get what you deserve. + ... + + As you can see the first line contains the date. + + intel: + A mod file is a binary file. + However, looking into both generated bar.mod files with a hex editor + shows that they differ only before a sequence linefeed-zero (0x0A 0x00) + which is located some bytes in front of the absoulte path to the source + file. + + sun: + A mod file is a binary file. Compiling twice produces identical modules. + + others: + TODO ... + */ + + + /* Compilers which do _not_ produce different mod content when the same + * source is compiled twice + * -SunPro + */ + if(strcmp(compilerId, "SunPro") == 0) + { + return cmSystemTools::FilesDiffer(modFile, stampFile); + } + +#if defined(_WIN32) || defined(__CYGWIN__) + std::ifstream finModFile(modFile, std::ios::in | std::ios::binary); + std::ifstream finStampFile(stampFile, std::ios::in | std::ios::binary); +#else + std::ifstream finModFile(modFile, std::ios::in); + std::ifstream finStampFile(stampFile, std::ios::in); +#endif + if(!finModFile || !finStampFile) + { + // At least one of the files does not exist. The modules differ. + return true; + } + + /* Compilers which _do_ produce different mod content when the same + * source is compiled twice + * -GNU + * -Intel + * + * Eat the stream content until all recompile only related changes + * are left behind. + */ + if (strcmp(compilerId, "GNU") == 0 ) + { + const char seq[1] = {'\n'}; + const int seqlen = 1; + + if(!cmDependsFortranStreamContainsSequence(finModFile, seq, seqlen)) + { + // The module is of unexpected format. Assume it is different. + std::cerr << compilerId << " fortran module " << modFile + << " has unexpected format." << std::endl; + return true; + } + + if(!cmDependsFortranStreamContainsSequence(finStampFile, seq, seqlen)) + { + // The stamp must differ if the sequence is not contained. + return true; + } + } + else if(strcmp(compilerId, "Intel") == 0) + { + const char seq[2] = {'\n', '\0'}; + const int seqlen = 2; + + if(!cmDependsFortranStreamContainsSequence(finModFile, seq, seqlen)) + { + // The module is of unexpected format. Assume it is different. + std::cerr << compilerId << " fortran module " << modFile + << " has unexpected format." << std::endl; + return true; + } + + if(!cmDependsFortranStreamContainsSequence(finStampFile, seq, seqlen)) + { + // The stamp must differ if the sequence is not contained. + return true; + } + } + + // 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)) + { + return false; + } + + // The modules are different. + return true; +} + +//---------------------------------------------------------------------------- +bool cmDependsFortran::FindIncludeFile(const char* dir, + const char* includeName, + std::string& fileName) +{ + // If the file is a full path, include it directly. + if(cmSystemTools::FileIsFullPath(includeName)) + { + fileName = includeName; + return cmSystemTools::FileExists(fileName.c_str(), true); + } + else + { + // Check for the file in the directory containing the including + // file. + std::string fullName = dir; + fullName += "/"; + fullName += includeName; + if(cmSystemTools::FileExists(fullName.c_str(), true)) + { + fileName = fullName; + return true; + } + + // Search the include path for the file. + for(std::vector::const_iterator i = + this->IncludePath.begin(); i != this->IncludePath.end(); ++i) + { + fullName = *i; + fullName += "/"; + fullName += includeName; + if(cmSystemTools::FileExists(fullName.c_str(), true)) + { + fileName = fullName; + return true; + } + } + } + return false; +} + +//---------------------------------------------------------------------------- +cmDependsFortranParser_s +::cmDependsFortranParser_s(cmDependsFortran* self, + std::set& ppDefines, + cmDependsFortranSourceInfo& info): + Self(self), PPDefinitions(ppDefines), Info(info) +{ + this->InInterface = 0; + this->InPPFalseBranch = 0; + + // Initialize the lexical scanner. + cmDependsFortran_yylex_init(&this->Scanner); + cmDependsFortran_yyset_extra(this, this->Scanner); + + // Create a dummy buffer that is never read but is the fallback + // buffer when the last file is popped off the stack. + YY_BUFFER_STATE buffer = + cmDependsFortran_yy_create_buffer(0, 4, this->Scanner); + cmDependsFortran_yy_switch_to_buffer(buffer, this->Scanner); +} + +//---------------------------------------------------------------------------- +cmDependsFortranParser_s::~cmDependsFortranParser_s() +{ + cmDependsFortran_yylex_destroy(this->Scanner); +} + +//---------------------------------------------------------------------------- +bool cmDependsFortranParser_FilePush(cmDependsFortranParser* parser, + const char* fname) +{ + // Open the new file and push it onto the stack. Save the old + // buffer with it on the stack. + if(FILE* file = fopen(fname, "rb")) + { + YY_BUFFER_STATE current = + cmDependsFortranLexer_GetCurrentBuffer(parser->Scanner); + std::string dir = cmSystemTools::GetParentDirectory(fname); + cmDependsFortranFile f(file, current, dir); + YY_BUFFER_STATE buffer = + cmDependsFortran_yy_create_buffer(0, 16384, parser->Scanner); + cmDependsFortran_yy_switch_to_buffer(buffer, parser->Scanner); + parser->FileStack.push(f); + return 1; + } + else + { + return 0; + } +} + +//---------------------------------------------------------------------------- +bool cmDependsFortranParser_FilePop(cmDependsFortranParser* parser) +{ + // Pop one file off the stack and close it. Switch the lexer back + // to the next one on the stack. + if(parser->FileStack.empty()) + { + return 0; + } + else + { + cmDependsFortranFile f = parser->FileStack.top(); parser->FileStack.pop(); + fclose(f.File); + YY_BUFFER_STATE current = + cmDependsFortranLexer_GetCurrentBuffer(parser->Scanner); + cmDependsFortran_yy_delete_buffer(current, parser->Scanner); + cmDependsFortran_yy_switch_to_buffer(f.Buffer, parser->Scanner); + return 1; + } +} + +//---------------------------------------------------------------------------- +int cmDependsFortranParser_Input(cmDependsFortranParser* parser, + char* buffer, size_t bufferSize) +{ + // Read from the file on top of the stack. If the stack is empty, + // the end of the translation unit has been reached. + if(!parser->FileStack.empty()) + { + FILE* file = parser->FileStack.top().File; + return (int)fread(buffer, 1, bufferSize, file); + } + return 0; +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_StringStart(cmDependsFortranParser* parser) +{ + parser->TokenString = ""; +} + +//---------------------------------------------------------------------------- +const char* cmDependsFortranParser_StringEnd(cmDependsFortranParser* parser) +{ + return parser->TokenString.c_str(); +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_StringAppend(cmDependsFortranParser* parser, + char c) +{ + parser->TokenString += c; +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_SetInInterface(cmDependsFortranParser* parser, + bool in) +{ + if(parser->InPPFalseBranch) + { + return; + } + + parser->InInterface = in; +} + +//---------------------------------------------------------------------------- +bool cmDependsFortranParser_GetInInterface(cmDependsFortranParser* parser) +{ + return parser->InInterface; +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_SetOldStartcond(cmDependsFortranParser* parser, + int arg) +{ + parser->OldStartcond = arg; +} + +//---------------------------------------------------------------------------- +int cmDependsFortranParser_GetOldStartcond(cmDependsFortranParser* parser) +{ + return parser->OldStartcond; +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_Error(cmDependsFortranParser*, const char*) +{ + // If there is a parser error just ignore it. The source will not + // compile and the user will edit it. Then dependencies will have + // to be regenerated anyway. +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleUse(cmDependsFortranParser* parser, + const char* name) +{ + if(!parser->InPPFalseBranch) + { + parser->Info.Requires.insert(cmSystemTools::LowerCase(name) ); + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleInclude(cmDependsFortranParser* parser, + const char* name) +{ + if(parser->InPPFalseBranch) + { + return; + } + + // If processing an include statement there must be an open file. + assert(!parser->FileStack.empty()); + + // Get the directory containing the source in which the include + // statement appears. This is always the first search location for + // Fortran include files. + std::string dir = parser->FileStack.top().Directory; + + // Find the included file. If it cannot be found just ignore the + // problem because either the source will not compile or the user + // does not care about depending on this included source. + std::string fullName; + if(parser->Self->FindIncludeFile(dir.c_str(), name, fullName)) + { + // Found the included file. Save it in the set of included files. + parser->Info.Includes.insert(fullName); + + // Parse it immediately to translate the source inline. + cmDependsFortranParser_FilePush(parser, fullName.c_str()); + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleModule(cmDependsFortranParser* parser, + const char* name) +{ + if(!parser->InPPFalseBranch && !parser->InInterface) + { + parser->Info.Provides.insert(cmSystemTools::LowerCase(name)); + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleDefine(cmDependsFortranParser* parser, + const char* macro) +{ + if(!parser->InPPFalseBranch) + { + parser->PPDefinitions.insert(macro); + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleUndef(cmDependsFortranParser* parser, + const char* macro) +{ + if(!parser->InPPFalseBranch) + { + std::set::iterator match; + match = parser->PPDefinitions.find(macro); + if(match != parser->PPDefinitions.end()) + { + parser->PPDefinitions.erase(match); + } + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleIfdef(cmDependsFortranParser* parser, + const char* macro) +{ + // A new PP branch has been opened + parser->SkipToEnd.push(false); + + if (parser->InPPFalseBranch) + { + parser->InPPFalseBranch++; + } + else if(parser->PPDefinitions.find(macro) == parser->PPDefinitions.end()) + { + parser->InPPFalseBranch=1; + } + else + { + parser->SkipToEnd.top() = true; + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleIfndef(cmDependsFortranParser* parser, + const char* macro) +{ + // A new PP branch has been opened + parser->SkipToEnd.push(false); + + if (parser->InPPFalseBranch) + { + parser->InPPFalseBranch++; + } + else if(parser->PPDefinitions.find(macro) != parser->PPDefinitions.end()) + { + parser->InPPFalseBranch = 1; + } + else + { + // ignore other branches + parser->SkipToEnd.top() = true; + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleIf(cmDependsFortranParser* parser) +{ + /* Note: The current parser is _not_ able to get statements like + * #if 0 + * #if 1 + * #if MYSMBOL + * #if defined(MYSYMBOL) + * #if defined(MYSYMBOL) && ... + * right. The same for #elif. Thus in + * #if SYMBOL_1 + * .. + * #elif SYMBOL_2 + * ... + * ... + * #elif SYMBOL_N + * .. + * #else + * .. + * #endif + * _all_ N+1 branches are considered. If you got something like this + * #if defined(MYSYMBOL) + * #if !defined(MYSYMBOL) + * use + * #ifdef MYSYMBOL + * #ifndef MYSYMBOL + * instead. + */ + + // A new PP branch has been opened + // Never skip! See note above. + parser->SkipToEnd.push(false); +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleElif(cmDependsFortranParser* parser) +{ + /* Note: There are parser limitations. See the note at + * cmDependsFortranParser_RuleIf(..) + */ + + // 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() && + parser->SkipToEnd.top() && !parser->InPPFalseBranch) + { + parser->InPPFalseBranch = 1; + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleElse(cmDependsFortranParser* parser) +{ + // if the parent branch is false do nothing! + if(parser->InPPFalseBranch > 1) + { + return; + } + + // parser->InPPFalseBranch is either 0 or 1. We change it depending on + // parser->SkipToEnd.top() + if(!parser->SkipToEnd.empty() && + parser->SkipToEnd.top()) + { + parser->InPPFalseBranch = 1; + } + else + { + parser->InPPFalseBranch = 0; + } +} + +//---------------------------------------------------------------------------- +void cmDependsFortranParser_RuleEndif(cmDependsFortranParser* parser) +{ + if(!parser->SkipToEnd.empty()) + { + parser->SkipToEnd.pop(); + } + + // #endif doesn't know if there was a "#else" in before, so it + // always decreases InPPFalseBranch + if(parser->InPPFalseBranch) + { + parser->InPPFalseBranch--; + } +} diff --git a/Source/cmDependsFortran.h b/Source/cmDependsFortran.h new file mode 100644 index 0000000..cdfde6e --- /dev/null +++ b/Source/cmDependsFortran.h @@ -0,0 +1,92 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDependsFortran_h +#define cmDependsFortran_h + +#include "cmDepends.h" + +class cmDependsFortranInternals; +class cmDependsFortranSourceInfo; + +/** \class cmDependsFortran + * \brief Dependency scanner for Fortran object files. + */ +class cmDependsFortran: public cmDepends +{ +public: + /** Checking instances need to know the build directory name and the + relative path from the build directory to the target file. */ + cmDependsFortran(); + + /** Scanning need to know the build directory name, the relative + path from the build directory to the target file, the source + file from which to start scanning, the include file search + path, and the target directory. */ + cmDependsFortran(cmLocalGenerator* lg); + + /** Virtual destructor to cleanup subclasses properly. */ + virtual ~cmDependsFortran(); + + /** Callback from build system after a .mod file has been generated + by a Fortran90 compiler to copy the .mod file to the + corresponding stamp file. */ + static bool CopyModule(const std::vector& args); + + /** Determine if a mod file and the corresponding mod.stamp file + are representing different module information. */ + static bool ModulesDiffer(const char* modFile, const char* stampFile, + const char* compilerId); + + /** Method to find an included file in the include path. Fortran + always searches the directory containing the including source + first. */ + bool FindIncludeFile(const char* dir, const char* includeName, + std::string& fileName); + +protected: + // Finalize the dependency information for the target. + virtual bool Finalize(std::ostream& makeDepends, + std::ostream& internalDepends); + + // Find all the modules required by the target. + void LocateModules(); + void MatchLocalModules(); + void MatchRemoteModules(std::istream& fin, const char* stampDir); + void ConsiderModule(const char* name, const char* stampDir); + bool FindModule(std::string const& name, std::string& module); + + // Implement writing/checking methods required by superclass. + virtual bool WriteDependencies( + const char *src, const char *file, + std::ostream& makeDepends, std::ostream& internalDepends); + + // Actually write the depenencies to the streams. + bool WriteDependenciesReal(const char *obj, + cmDependsFortranSourceInfo const& info, + const char* mod_dir, const char* stamp_dir, + std::ostream& makeDepends, + std::ostream& internalDepends); + + // The source file from which to start scanning. + std::string SourceFile; + + std::vector PPDefinitions; + + // Internal implementation details. + cmDependsFortranInternals* Internal; + +private: + cmDependsFortran(cmDependsFortran const&); // Purposely not implemented. + void operator=(cmDependsFortran const&); // Purposely not implemented. +}; + +#endif diff --git a/Source/cmDependsFortranLexer.cxx b/Source/cmDependsFortranLexer.cxx new file mode 100644 index 0000000..438af2d --- /dev/null +++ b/Source/cmDependsFortranLexer.cxx @@ -0,0 +1,2388 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#line 2 "cmDependsFortranLexer.cxx" + +#line 4 "cmDependsFortranLexer.cxx" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 34 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE cmDependsFortran_yyrestart(yyin ,yyscanner ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + * Given that the standard has decreed that size_t exists since 1989, + * I guess we can afford to depend on it. Manoj. + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via cmDependsFortran_yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void cmDependsFortran_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void cmDependsFortran_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsFortran_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void cmDependsFortran_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmDependsFortran_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmDependsFortran_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void cmDependsFortran_yypop_buffer_state (yyscan_t yyscanner ); + +static void cmDependsFortran_yyensure_buffer_stack (yyscan_t yyscanner ); +static void cmDependsFortran_yy_load_buffer_state (yyscan_t yyscanner ); +static void cmDependsFortran_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); + +#define YY_FLUSH_BUFFER cmDependsFortran_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) + +YY_BUFFER_STATE cmDependsFortran_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsFortran_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsFortran_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +void *cmDependsFortran_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *cmDependsFortran_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void cmDependsFortran_yyfree (void * ,yyscan_t yyscanner ); + +#define yy_new_buffer cmDependsFortran_yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + cmDependsFortran_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + cmDependsFortran_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + cmDependsFortran_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + cmDependsFortran_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define cmDependsFortran_yywrap(n) 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); +static int yy_get_next_buffer (yyscan_t yyscanner ); +static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; + +#define YY_NUM_RULES 43 +#define YY_END_OF_BUFFER 44 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[161] = + { 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 44, 38, 40, 39, 42, 1, 38, 31, 2, 33, + 38, 39, 36, 38, 37, 38, 37, 40, 38, 39, + 38, 37, 9, 8, 9, 4, 3, 38, 0, 10, + 0, 0, 0, 0, 0, 31, 31, 32, 34, 36, + 38, 37, 0, 41, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 38, 0, 11, 37, 0, 0, 5, + 0, 0, 0, 27, 0, 0, 31, 31, 31, 31, + 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, + 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 28, 29, 0, 0, 0, 0, 0, 0, + 0, 22, 23, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 25, 0, 0, 18, 0, 0, 24, 19, + 0, 0, 17, 0, 0, 16, 26, 0, 0, 15, + 20, 0, 7, 35, 7, 13, 0, 12, 14, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 5, 6, 7, 8, 9, 1, 10, 11, 1, + 1, 12, 1, 13, 1, 1, 1, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 15, 16, 1, + 17, 18, 19, 1, 20, 20, 21, 22, 23, 24, + 20, 20, 25, 20, 20, 26, 20, 27, 20, 20, + 20, 20, 28, 20, 29, 20, 20, 20, 20, 20, + 1, 30, 1, 1, 31, 1, 20, 20, 32, 33, + + 34, 35, 20, 20, 36, 20, 20, 37, 20, 38, + 20, 20, 20, 20, 39, 20, 40, 20, 20, 20, + 20, 20, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[41] = + { 0, + 1, 2, 2, 3, 4, 3, 3, 1, 1, 3, + 3, 1, 3, 5, 1, 3, 3, 1, 1, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, + 5, 6, 6, 6, 6, 6, 6, 6, 6, 6 + } ; + +static yyconst flex_int16_t yy_base[169] = + { 0, + 0, 39, 0, 40, 184, 47, 43, 53, 55, 63, + 186, 0, 476, 476, 164, 476, 79, 72, 476, 476, + 143, 476, 130, 126, 0, 83, 119, 85, 149, 139, + 189, 220, 476, 131, 89, 476, 476, 0, 132, 476, + 259, 37, 69, 76, 34, 119, 137, 476, 0, 476, + 121, 0, 150, 476, 0, 154, 298, 0, 75, 138, + 142, 72, 127, 338, 94, 476, 0, 84, 158, 186, + 81, 145, 108, 172, 147, 173, 260, 266, 284, 299, + 272, 173, 178, 286, 245, 258, 285, 285, 78, 71, + 207, 476, 288, 291, 296, 304, 310, 315, 317, 326, + + 330, 330, 335, 338, 338, 341, 343, 341, 348, 62, + 52, 346, 476, 476, 353, 355, 357, 352, 359, 359, + 359, 476, 476, 363, 365, 370, 366, 375, 46, 38, + 378, 476, 476, 378, 381, 476, 376, 384, 476, 476, + 384, 387, 476, 115, 0, 476, 476, 388, 393, 476, + 476, 394, 476, 476, 476, 476, 398, 476, 476, 476, + 432, 438, 443, 445, 451, 457, 463, 469 + } ; + +static yyconst flex_int16_t yy_def[169] = + { 0, + 160, 1, 1, 1, 1, 1, 161, 161, 161, 161, + 160, 162, 160, 160, 163, 160, 162, 160, 160, 160, + 162, 160, 160, 162, 164, 162, 164, 160, 162, 160, + 165, 160, 160, 160, 160, 160, 160, 162, 163, 160, + 160, 160, 160, 160, 160, 160, 166, 160, 162, 160, + 162, 164, 160, 160, 27, 160, 160, 57, 160, 160, + 160, 160, 160, 165, 165, 160, 32, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 166, 166, 166, 166, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 167, 168, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, + 160, 160, 160, 160, 160, 160, 160, 160 + } ; + +static yyconst flex_int16_t yy_nxt[517] = + { 0, + 12, 13, 14, 13, 13, 15, 16, 12, 17, 18, + 19, 12, 20, 12, 21, 22, 23, 12, 24, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, + 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 28, 28, 145, 28, 28, 34, 29, 29, 28, 30, + 144, 28, 35, 36, 29, 34, 130, 34, 31, 71, + 76, 37, 35, 36, 35, 34, 129, 32, 32, 37, + 71, 76, 35, 46, 46, 111, 46, 47, 32, 32, + 41, 48, 110, 41, 53, 54, 56, 53, 90, 56, + 69, 70, 57, 69, 72, 73, 66, 83, 88, 74, + + 42, 43, 75, 44, 93, 72, 73, 45, 83, 88, + 74, 42, 43, 75, 44, 93, 154, 154, 45, 38, + 46, 46, 81, 46, 47, 81, 38, 38, 48, 96, + 38, 89, 55, 38, 40, 68, 38, 38, 78, 46, + 96, 78, 79, 63, 51, 82, 80, 50, 38, 55, + 58, 53, 54, 58, 53, 56, 82, 49, 56, 69, + 70, 57, 69, 84, 85, 86, 40, 99, 87, 94, + 59, 60, 95, 61, 84, 85, 86, 62, 99, 87, + 94, 59, 60, 95, 61, 160, 30, 91, 62, 64, + 91, 66, 160, 97, 100, 92, 64, 64, 98, 101, + + 64, 102, 64, 64, 97, 100, 64, 64, 91, 98, + 101, 91, 102, 160, 160, 160, 92, 160, 64, 64, + 65, 65, 66, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 67, 65, 65, 65, 65, 65, 67, + 67, 67, 67, 67, 67, 67, 67, 67, 67, 65, + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, + 41, 78, 46, 41, 78, 79, 105, 78, 46, 80, + 78, 79, 160, 81, 160, 80, 81, 105, 160, 106, + 42, 43, 160, 44, 107, 78, 46, 45, 78, 79, + 106, 42, 43, 80, 44, 107, 82, 160, 45, 58, + + 78, 46, 58, 78, 79, 108, 109, 82, 80, 160, + 103, 160, 112, 104, 113, 160, 108, 109, 114, 59, + 60, 103, 61, 112, 104, 113, 62, 160, 115, 114, + 59, 60, 116, 61, 160, 160, 117, 62, 64, 115, + 66, 160, 118, 116, 160, 64, 64, 117, 119, 64, + 120, 64, 64, 118, 121, 64, 64, 160, 122, 119, + 123, 120, 124, 125, 126, 121, 127, 64, 64, 122, + 128, 123, 131, 124, 125, 126, 132, 127, 133, 134, + 135, 128, 136, 131, 137, 138, 139, 132, 140, 133, + 134, 135, 141, 136, 142, 137, 138, 139, 143, 140, + + 146, 147, 148, 141, 149, 142, 150, 151, 152, 143, + 156, 146, 147, 148, 157, 149, 158, 150, 151, 152, + 159, 156, 160, 160, 160, 157, 160, 158, 160, 160, + 160, 159, 33, 33, 33, 33, 33, 33, 38, 160, + 160, 160, 38, 39, 39, 39, 39, 39, 39, 52, + 52, 65, 65, 65, 65, 65, 65, 77, 77, 77, + 77, 77, 77, 153, 153, 153, 160, 153, 153, 155, + 160, 155, 160, 155, 155, 11, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160 + } ; + +static yyconst flex_int16_t yy_chk[517] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 4, 130, 2, 4, 7, 2, 4, 6, 6, + 129, 6, 7, 7, 6, 8, 111, 9, 6, 42, + 45, 9, 8, 8, 9, 10, 110, 6, 6, 10, + 42, 45, 10, 18, 18, 90, 18, 18, 6, 6, + 17, 18, 89, 17, 26, 26, 28, 26, 68, 28, + 35, 35, 28, 35, 43, 43, 65, 59, 62, 44, + + 17, 17, 44, 17, 71, 43, 43, 17, 59, 62, + 44, 17, 17, 44, 17, 71, 144, 144, 17, 27, + 46, 46, 51, 46, 46, 51, 27, 27, 46, 73, + 27, 63, 27, 27, 39, 34, 27, 27, 47, 47, + 73, 47, 47, 30, 24, 51, 47, 23, 27, 27, + 29, 53, 53, 29, 53, 56, 51, 21, 56, 69, + 69, 56, 69, 60, 60, 61, 15, 75, 61, 72, + 29, 29, 72, 29, 60, 60, 61, 29, 75, 61, + 72, 29, 29, 72, 29, 11, 5, 70, 29, 31, + 70, 31, 0, 74, 76, 70, 31, 31, 74, 82, + + 31, 83, 31, 31, 74, 76, 31, 31, 91, 74, + 82, 91, 83, 0, 0, 0, 91, 0, 31, 31, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 41, 77, 77, 41, 77, 77, 85, 78, 78, 77, + 78, 78, 0, 81, 0, 78, 81, 85, 0, 86, + 41, 41, 0, 41, 86, 79, 79, 41, 79, 79, + 86, 41, 41, 79, 41, 86, 81, 0, 41, 57, + + 80, 80, 57, 80, 80, 87, 88, 81, 80, 0, + 84, 0, 93, 84, 94, 0, 87, 88, 95, 57, + 57, 84, 57, 93, 84, 94, 57, 0, 96, 95, + 57, 57, 97, 57, 0, 0, 98, 57, 64, 96, + 64, 0, 99, 97, 0, 64, 64, 98, 100, 64, + 101, 64, 64, 99, 102, 64, 64, 0, 103, 100, + 104, 101, 105, 106, 107, 102, 108, 64, 64, 103, + 109, 104, 112, 105, 106, 107, 115, 108, 116, 117, + 118, 109, 119, 112, 120, 121, 124, 115, 125, 116, + 117, 118, 126, 119, 127, 120, 121, 124, 128, 125, + + 131, 134, 135, 126, 137, 127, 138, 141, 142, 128, + 148, 131, 134, 135, 149, 137, 152, 138, 141, 142, + 157, 148, 0, 0, 0, 149, 0, 152, 0, 0, + 0, 157, 161, 161, 161, 161, 161, 161, 162, 0, + 0, 0, 162, 163, 163, 163, 163, 163, 163, 164, + 164, 165, 165, 165, 165, 165, 165, 166, 166, 166, + 166, 166, 166, 167, 167, 167, 0, 167, 167, 168, + 0, 168, 0, 168, 168, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "cmDependsFortranLexer.in.l" +#line 2 "cmDependsFortranLexer.in.l" +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/*------------------------------------------------------------------------- + Portions of this source have been derived from makedepf90 version 2.8.8, + + Copyright (C) 2000--2006 Erik Edelmann + + The code was originally distributed under the GPL but permission + from the copyright holder has been obtained to distribute this + derived work under the CMake license. +-------------------------------------------------------------------------*/ + +/* + +This file must be translated to C and modified to build everywhere. + +Run flex like this: + + flex -i --prefix=cmDependsFortran_yy --header-file=cmDependsFortranLexer.h -ocmDependsFortranLexer.cxx cmDependsFortranLexer.in.l + +Modify cmDependsFortranLexer.cxx: + - remove TABs + - remove "yyscanner" argument from these methods: + yy_fatal_error, cmDependsFortran_yyalloc, cmDependsFortran_yyrealloc, cmDependsFortran_yyfree + - remove "yyscanner = NULL" from end of cmDependsFortran_yylex_destroy + - remove all YY_BREAK lines occurring right after return statements + - change while ( 1 ) to for(;;) + +Modify cmDependsFortranLexer.h: + - remove TABs + - remove the yy_init_globals function + - remove the block that includes unistd.h + - remove #line directives (avoids bogus warning on old Sun) + +*/ + +#include "cmStandardLexer.h" + +#define cmDependsFortranLexer_cxx +#include "cmDependsFortranParser.h" /* Interface to parser object. */ + +/* Replace the lexer input function. */ +#undef YY_INPUT +#define YY_INPUT(buf, result, max_size) \ + { result = cmDependsFortranParser_Input(yyextra, buf, max_size); } + +/* Include the set of tokens from the parser. */ +#include "cmDependsFortranParserTokens.h" + +/*--------------------------------------------------------------------------*/ + + +#line 670 "cmDependsFortranLexer.cxx" + +#define INITIAL 0 +#define free_fmt 1 +#define fixed_fmt 2 +#define str_sq 3 +#define str_dq 4 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals (yyscan_t yyscanner ); + +int cmDependsFortran_yylex_init (yyscan_t* scanner); + +int cmDependsFortran_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int cmDependsFortran_yylex_destroy (yyscan_t yyscanner ); + +int cmDependsFortran_yyget_debug (yyscan_t yyscanner ); + +void cmDependsFortran_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE cmDependsFortran_yyget_extra (yyscan_t yyscanner ); + +void cmDependsFortran_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *cmDependsFortran_yyget_in (yyscan_t yyscanner ); + +void cmDependsFortran_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *cmDependsFortran_yyget_out (yyscan_t yyscanner ); + +void cmDependsFortran_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int cmDependsFortran_yyget_leng (yyscan_t yyscanner ); + +char *cmDependsFortran_yyget_text (yyscan_t yyscanner ); + +int cmDependsFortran_yyget_lineno (yyscan_t yyscanner ); + +void cmDependsFortran_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int cmDependsFortran_yywrap (yyscan_t yyscanner ); +#else +extern int cmDependsFortran_yywrap (yyscan_t yyscanner ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ,yyscan_t yyscanner); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (yyscan_t yyscanner ); +#else +static int input (yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO fwrite( yytext, yyleng, 1, yyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + int n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int cmDependsFortran_yylex (yyscan_t yyscanner); + +#define YY_DECL int cmDependsFortran_yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + +#line 75 "cmDependsFortranLexer.in.l" + + +#line 901 "cmDependsFortranLexer.cxx" + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + cmDependsFortran_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + cmDependsFortran_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + cmDependsFortran_yy_load_buffer_state(yyscanner ); + } + + for(;;) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 161 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 476 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 77 "cmDependsFortranLexer.in.l" +{ + cmDependsFortranParser_StringStart(yyextra); + cmDependsFortranParser_SetOldStartcond(yyextra, YY_START); + BEGIN(str_dq); +} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 83 "cmDependsFortranLexer.in.l" +{ + cmDependsFortranParser_StringStart(yyextra); + cmDependsFortranParser_SetOldStartcond(yyextra, YY_START); + BEGIN(str_sq); +} + YY_BREAK +case 3: +#line 90 "cmDependsFortranLexer.in.l" +case 4: +YY_RULE_SETUP +#line 90 "cmDependsFortranLexer.in.l" +{ + BEGIN(cmDependsFortranParser_GetOldStartcond(yyextra) ); + yylvalp->string = strdup(cmDependsFortranParser_StringEnd(yyextra)); + return STRING; +} +case 5: +/* rule 5 can match eol */ +#line 97 "cmDependsFortranLexer.in.l" +case 6: +/* rule 6 can match eol */ +YY_RULE_SETUP +#line 97 "cmDependsFortranLexer.in.l" +/* Ignore (continued strings, free fmt) */ + YY_BREAK +case 7: +/* rule 7 can match eol */ +YY_RULE_SETUP +#line 99 "cmDependsFortranLexer.in.l" +{ + if (cmDependsFortranParser_GetOldStartcond(yyextra) == fixed_fmt) + ; /* Ignore (cont. strings, fixed fmt) */ + else + { + unput(yytext[strlen(yytext)-1]); + } +} + YY_BREAK +case 8: +/* rule 8 can match eol */ +YY_RULE_SETUP +#line 109 "cmDependsFortranLexer.in.l" +{ + unput ('\n'); + BEGIN(INITIAL); + return UNTERMINATED_STRING; +} +case 9: +YY_RULE_SETUP +#line 115 "cmDependsFortranLexer.in.l" +{ + cmDependsFortranParser_StringAppend(yyextra, yytext[0]); +} + YY_BREAK +case 10: +/* rule 10 can match eol */ +YY_RULE_SETUP +#line 119 "cmDependsFortranLexer.in.l" +{ return EOSTMT; } /* Treat comments like */ +case 11: +/* rule 11 can match eol */ +YY_RULE_SETUP +#line 120 "cmDependsFortranLexer.in.l" +{ return EOSTMT; } /* empty lines */ +case 12: +YY_RULE_SETUP +#line 122 "cmDependsFortranLexer.in.l" +{ return CPP_INCLUDE; } +case 13: +YY_RULE_SETUP +#line 123 "cmDependsFortranLexer.in.l" +{ return F90PPR_INCLUDE; } +case 14: +YY_RULE_SETUP +#line 124 "cmDependsFortranLexer.in.l" +{ return COCO_INCLUDE; } +case 15: +YY_RULE_SETUP +#line 126 "cmDependsFortranLexer.in.l" +{ return CPP_DEFINE; } +case 16: +YY_RULE_SETUP +#line 127 "cmDependsFortranLexer.in.l" +{ return F90PPR_DEFINE; } +case 17: +YY_RULE_SETUP +#line 129 "cmDependsFortranLexer.in.l" +{ return CPP_UNDEF; } +case 18: +YY_RULE_SETUP +#line 130 "cmDependsFortranLexer.in.l" +{ return F90PPR_UNDEF; } +case 19: +YY_RULE_SETUP +#line 132 "cmDependsFortranLexer.in.l" +{ return CPP_IFDEF; } +case 20: +YY_RULE_SETUP +#line 133 "cmDependsFortranLexer.in.l" +{ return CPP_IFNDEF; } +case 21: +YY_RULE_SETUP +#line 134 "cmDependsFortranLexer.in.l" +{ return CPP_IF; } +case 22: +YY_RULE_SETUP +#line 135 "cmDependsFortranLexer.in.l" +{ return CPP_ELIF; } +case 23: +YY_RULE_SETUP +#line 136 "cmDependsFortranLexer.in.l" +{ return CPP_ELSE; } +case 24: +YY_RULE_SETUP +#line 137 "cmDependsFortranLexer.in.l" +{ return CPP_ENDIF; } +case 25: +YY_RULE_SETUP +#line 139 "cmDependsFortranLexer.in.l" +{ return F90PPR_IFDEF; } +case 26: +YY_RULE_SETUP +#line 140 "cmDependsFortranLexer.in.l" +{ return F90PPR_IFNDEF; } +case 27: +YY_RULE_SETUP +#line 141 "cmDependsFortranLexer.in.l" +{ return F90PPR_IF; } +case 28: +YY_RULE_SETUP +#line 142 "cmDependsFortranLexer.in.l" +{ return F90PPR_ELIF; } +case 29: +YY_RULE_SETUP +#line 143 "cmDependsFortranLexer.in.l" +{ return F90PPR_ELSE; } +case 30: +YY_RULE_SETUP +#line 144 "cmDependsFortranLexer.in.l" +{ return F90PPR_ENDIF; } +/* Line continuations, possible involving comments. */ +case 31: +/* rule 31 can match eol */ +YY_RULE_SETUP +#line 147 "cmDependsFortranLexer.in.l" + + YY_BREAK +case 32: +/* rule 32 can match eol */ +YY_RULE_SETUP +#line 148 "cmDependsFortranLexer.in.l" + + YY_BREAK +case 33: +YY_RULE_SETUP +#line 150 "cmDependsFortranLexer.in.l" +{ return COMMA; } +case 34: +YY_RULE_SETUP +#line 152 "cmDependsFortranLexer.in.l" +{ return DCOLON; } +case 35: +/* rule 35 can match eol */ +YY_RULE_SETUP +#line 154 "cmDependsFortranLexer.in.l" +{ return GARBAGE; } +case 36: +YY_RULE_SETUP +#line 156 "cmDependsFortranLexer.in.l" +{ return ASSIGNMENT_OP; } +case 37: +YY_RULE_SETUP +#line 158 "cmDependsFortranLexer.in.l" +{ + yylvalp->string = strdup(yytext); + return WORD; +} +case 38: +YY_RULE_SETUP +#line 163 "cmDependsFortranLexer.in.l" +{ return GARBAGE; } +case 39: +/* rule 39 can match eol */ +YY_RULE_SETUP +#line 165 "cmDependsFortranLexer.in.l" +{ return EOSTMT; } +case 40: +YY_RULE_SETUP +#line 168 "cmDependsFortranLexer.in.l" +/* Ignore */ + YY_BREAK +case 41: +/* rule 41 can match eol */ +YY_RULE_SETUP +#line 169 "cmDependsFortranLexer.in.l" +/* Ignore line-endings preceeded by \ */ + YY_BREAK +case 42: +YY_RULE_SETUP +#line 171 "cmDependsFortranLexer.in.l" +{ return *yytext; } +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(free_fmt): +case YY_STATE_EOF(fixed_fmt): +case YY_STATE_EOF(str_sq): +case YY_STATE_EOF(str_dq): +#line 173 "cmDependsFortranLexer.in.l" +{ + if(!cmDependsFortranParser_FilePop(yyextra) ) + { + return YY_NULL; + } +} + YY_BREAK +case 43: +YY_RULE_SETUP +#line 180 "cmDependsFortranLexer.in.l" +ECHO; + YY_BREAK +#line 1247 "cmDependsFortranLexer.cxx" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * cmDependsFortran_yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( cmDependsFortran_yywrap(yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of cmDependsFortran_yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = yyg->yytext_ptr; + register int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + cmDependsFortran_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + cmDependsFortran_yyrestart(yyin ,yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) cmDependsFortran_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 161 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + register int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + register char *yy_cp = yyg->yy_c_buf_p; + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 161 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 160); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner) +{ + register char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = yyg->yy_n_chars + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + cmDependsFortran_yyrestart(yyin ,yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( cmDependsFortran_yywrap(yyscanner ) ) + return EOF; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void cmDependsFortran_yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + cmDependsFortran_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + cmDependsFortran_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + cmDependsFortran_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); + cmDependsFortran_yy_load_buffer_state(yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void cmDependsFortran_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * cmDependsFortran_yypop_buffer_state(); + * cmDependsFortran_yypush_buffer_state(new_buffer); + */ + cmDependsFortran_yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + cmDependsFortran_yy_load_buffer_state(yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (cmDependsFortran_yywrap()) processing, but the only time this flag + * is looked at is after cmDependsFortran_yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void cmDependsFortran_yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE cmDependsFortran_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) cmDependsFortran_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in cmDependsFortran_yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) cmDependsFortran_yyalloc(b->yy_buf_size + 2 ,yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in cmDependsFortran_yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + cmDependsFortran_yy_init_buffer(b,file ,yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with cmDependsFortran_yy_create_buffer() + * @param yyscanner The scanner object. + */ + void cmDependsFortran_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + cmDependsFortran_yyfree((void *) b->yy_ch_buf ,yyscanner ); + + cmDependsFortran_yyfree((void *) b ,yyscanner ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a cmDependsFortran_yyrestart() or at EOF. + */ + static void cmDependsFortran_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + cmDependsFortran_yy_flush_buffer(b ,yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then cmDependsFortran_yy_init_buffer was _probably_ + * called from cmDependsFortran_yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void cmDependsFortran_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + cmDependsFortran_yy_load_buffer_state(yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void cmDependsFortran_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + cmDependsFortran_yyensure_buffer_stack(yyscanner); + + /* This block is copied from cmDependsFortran_yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from cmDependsFortran_yy_switch_to_buffer. */ + cmDependsFortran_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void cmDependsFortran_yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + cmDependsFortran_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + cmDependsFortran_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void cmDependsFortran_yyensure_buffer_stack (yyscan_t yyscanner) +{ + int num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + yyg->yy_buffer_stack = (struct yy_buffer_state**)cmDependsFortran_yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in cmDependsFortran_yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)cmDependsFortran_yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in cmDependsFortran_yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE cmDependsFortran_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) cmDependsFortran_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in cmDependsFortran_yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + cmDependsFortran_yy_switch_to_buffer(b ,yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to cmDependsFortran_yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * cmDependsFortran_yy_scan_bytes() instead. + */ +YY_BUFFER_STATE cmDependsFortran_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner) +{ + + return cmDependsFortran_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to cmDependsFortran_yylex() will + * scan from a @e copy of @a yybytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE cmDependsFortran_yy_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) cmDependsFortran_yyalloc(n ,yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in cmDependsFortran_yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = cmDependsFortran_yy_scan_buffer(buf,n ,yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in cmDependsFortran_yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg , yyscan_t) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE cmDependsFortran_yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int cmDependsFortran_yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int cmDependsFortran_yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *cmDependsFortran_yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *cmDependsFortran_yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int cmDependsFortran_yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *cmDependsFortran_yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void cmDependsFortran_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param line_number + * @param yyscanner The scanner object. + */ +void cmDependsFortran_yyset_lineno (int line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "cmDependsFortran_yyset_lineno called with no buffer" , yyscanner); + + yylineno = line_number; +} + +/** Set the current column. + * @param column_no + * @param yyscanner The scanner object. + */ +void cmDependsFortran_yyset_column (int column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "cmDependsFortran_yyset_column called with no buffer" , yyscanner); + + yycolumn = column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * @param yyscanner The scanner object. + * @see cmDependsFortran_yy_switch_to_buffer + */ +void cmDependsFortran_yyset_in (FILE * in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = in_str ; +} + +void cmDependsFortran_yyset_out (FILE * out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = out_str ; +} + +int cmDependsFortran_yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void cmDependsFortran_yyset_debug (int bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* cmDependsFortran_yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ + +int cmDependsFortran_yylex_init(yyscan_t* ptr_yy_globals) + +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) cmDependsFortran_yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* cmDependsFortran_yylex_init_extra has the same functionality as cmDependsFortran_yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to cmDependsFortran_yyalloc in + * the yyextra field. + */ + +int cmDependsFortran_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals ) + +{ + struct yyguts_t dummy_yyguts; + + cmDependsFortran_yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) cmDependsFortran_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + cmDependsFortran_yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from cmDependsFortran_yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = 0; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = (char *) 0; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * cmDependsFortran_yylex_init() + */ + return 0; +} + +/* cmDependsFortran_yylex_destroy is for both reentrant and non-reentrant scanners. */ +int cmDependsFortran_yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + cmDependsFortran_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + cmDependsFortran_yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + cmDependsFortran_yyfree(yyg->yy_buffer_stack ,yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + cmDependsFortran_yyfree(yyg->yy_start_stack ,yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * cmDependsFortran_yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + cmDependsFortran_yyfree ( yyscanner , yyscanner ); + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *cmDependsFortran_yyalloc (yy_size_t size , yyscan_t) +{ + return (void *) malloc( size ); +} + +void *cmDependsFortran_yyrealloc (void * ptr, yy_size_t size , yyscan_t) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void cmDependsFortran_yyfree (void * ptr , yyscan_t) +{ + free( (char *) ptr ); /* see cmDependsFortran_yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 180 "cmDependsFortranLexer.in.l" + + + +/*--------------------------------------------------------------------------*/ +YY_BUFFER_STATE cmDependsFortranLexer_GetCurrentBuffer(yyscan_t yyscanner) +{ + /* Hack into the internal flex-generated scanner to get the buffer. */ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return YY_CURRENT_BUFFER; +} + diff --git a/Source/cmDependsFortranLexer.h b/Source/cmDependsFortranLexer.h new file mode 100644 index 0000000..85e861d --- /dev/null +++ b/Source/cmDependsFortranLexer.h @@ -0,0 +1,341 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDependsFortran_yyHEADER_H +#define cmDependsFortran_yyHEADER_H 1 +#define cmDependsFortran_yyIN_HEADER 1 + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 34 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + * Given that the standard has decreed that size_t exists since 1989, + * I guess we can afford to depend on it. Manoj. + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +void cmDependsFortran_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void cmDependsFortran_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsFortran_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void cmDependsFortran_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmDependsFortran_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmDependsFortran_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void cmDependsFortran_yypop_buffer_state (yyscan_t yyscanner ); + +YY_BUFFER_STATE cmDependsFortran_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsFortran_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsFortran_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +void *cmDependsFortran_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *cmDependsFortran_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void cmDependsFortran_yyfree (void * ,yyscan_t yyscanner ); + +/* Begin user sect3 */ + +#define cmDependsFortran_yywrap(n) 1 +#define YY_SKIP_YYWRAP + +#define yytext_ptr yytext_r + +#ifdef YY_HEADER_EXPORT_START_CONDITIONS +#define INITIAL 0 +#define free_fmt 1 +#define fixed_fmt 2 +#define str_sq 3 +#define str_dq 4 + +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +int cmDependsFortran_yylex_init (yyscan_t* scanner); + +int cmDependsFortran_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int cmDependsFortran_yylex_destroy (yyscan_t yyscanner ); + +int cmDependsFortran_yyget_debug (yyscan_t yyscanner ); + +void cmDependsFortran_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE cmDependsFortran_yyget_extra (yyscan_t yyscanner ); + +void cmDependsFortran_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *cmDependsFortran_yyget_in (yyscan_t yyscanner ); + +void cmDependsFortran_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *cmDependsFortran_yyget_out (yyscan_t yyscanner ); + +void cmDependsFortran_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int cmDependsFortran_yyget_leng (yyscan_t yyscanner ); + +char *cmDependsFortran_yyget_text (yyscan_t yyscanner ); + +int cmDependsFortran_yyget_lineno (yyscan_t yyscanner ); + +void cmDependsFortran_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int cmDependsFortran_yywrap (yyscan_t yyscanner ); +#else +extern int cmDependsFortran_yywrap (yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int cmDependsFortran_yylex (yyscan_t yyscanner); + +#define YY_DECL int cmDependsFortran_yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + +#undef YY_NEW_FILE +#undef YY_FLUSH_BUFFER +#undef yy_set_bol +#undef yy_new_buffer +#undef yy_set_interactive +#undef YY_DO_BEFORE_ACTION + +#ifdef YY_DECL_IS_OURS +#undef YY_DECL_IS_OURS +#undef YY_DECL +#endif + +#undef cmDependsFortran_yyIN_HEADER +#endif /* cmDependsFortran_yyHEADER_H */ diff --git a/Source/cmDependsFortranLexer.in.l b/Source/cmDependsFortranLexer.in.l new file mode 100644 index 0000000..af8e37d --- /dev/null +++ b/Source/cmDependsFortranLexer.in.l @@ -0,0 +1,184 @@ +%{ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/*------------------------------------------------------------------------- + Portions of this source have been derived from makedepf90 version 2.8.8, + + Copyright (C) 2000--2006 Erik Edelmann + + The code was originally distributed under the GPL but permission + from the copyright holder has been obtained to distribute this + derived work under the CMake license. +-------------------------------------------------------------------------*/ + +/* + +This file must be translated to C and modified to build everywhere. + +Run flex like this: + + flex -i --prefix=cmDependsFortran_yy --header-file=cmDependsFortranLexer.h -ocmDependsFortranLexer.cxx cmDependsFortranLexer.in.l + +Modify cmDependsFortranLexer.cxx: + - remove TABs + - remove "yyscanner" argument from these methods: + yy_fatal_error, cmDependsFortran_yyalloc, cmDependsFortran_yyrealloc, cmDependsFortran_yyfree + - remove "yyscanner = NULL" from end of cmDependsFortran_yylex_destroy + - remove all YY_BREAK lines occurring right after return statements + - change while ( 1 ) to for(;;) + +Modify cmDependsFortranLexer.h: + - remove TABs + - remove the yy_init_globals function + - remove the block that includes unistd.h + - remove #line directives (avoids bogus warning on old Sun) + +*/ + +#include "cmStandardLexer.h" + +#define cmDependsFortranLexer_cxx +#include "cmDependsFortranParser.h" /* Interface to parser object. */ + +/* Replace the lexer input function. */ +#undef YY_INPUT +#define YY_INPUT(buf, result, max_size) \ + { result = cmDependsFortranParser_Input(yyextra, buf, max_size); } + +/* Include the set of tokens from the parser. */ +#include "cmDependsFortranParserTokens.h" + +/*--------------------------------------------------------------------------*/ +%} + + +%option reentrant +%option noyywrap +%pointer + +%s free_fmt fixed_fmt +%x str_sq str_dq + +%% + +\" { + cmDependsFortranParser_StringStart(yyextra); + cmDependsFortranParser_SetOldStartcond(yyextra, YY_START); + BEGIN(str_dq); +} + +' { + cmDependsFortranParser_StringStart(yyextra); + cmDependsFortranParser_SetOldStartcond(yyextra, YY_START); + BEGIN(str_sq); +} + +\" | +' { + BEGIN(cmDependsFortranParser_GetOldStartcond(yyextra) ); + yylvalp->string = strdup(cmDependsFortranParser_StringEnd(yyextra)); + return STRING; +} + +&[ \t]*\n | +&[ \t]*\n[ \t]*& /* Ignore (continued strings, free fmt) */ + +\n[ ]{5}[^ \t\n] { + if (cmDependsFortranParser_GetOldStartcond(yyextra) == fixed_fmt) + ; /* Ignore (cont. strings, fixed fmt) */ + else + { + unput(yytext[strlen(yytext)-1]); + } +} + + +\n { + unput ('\n'); + BEGIN(INITIAL); + return UNTERMINATED_STRING; +} + +. { + cmDependsFortranParser_StringAppend(yyextra, yytext[0]); +} + +!.*\n { return EOSTMT; } /* Treat comments like */ +^[cC*dD].*\n { return EOSTMT; } /* empty lines */ + +^[ \t]*#[ \t]*include { return CPP_INCLUDE; } +\$[ \t]*include { return F90PPR_INCLUDE; } +\?\?[ \t]*include { return COCO_INCLUDE; } + +^[ \t]*#[ \t]*define { return CPP_DEFINE; } +\$[ \t]*DEFINE { return F90PPR_DEFINE; } + +^[ \t]*#[ \t]*undef { return CPP_UNDEF; } +\$[ \t]*UNDEF { return F90PPR_UNDEF; } + +^[ \t]*#[ \t]*ifdef { return CPP_IFDEF; } +^[ \t]*#[ \t]*ifndef { return CPP_IFNDEF; } +^[ \t]*#[ \t]*if { return CPP_IF; } +^[ \t]*#[ \t]*elif { return CPP_ELIF; } +^[ \t]*#[ \t]*else { return CPP_ELSE; } +^[ \t]*#[ \t]*endif { return CPP_ENDIF; } + +$[ \t]*ifdef { return F90PPR_IFDEF; } +$[ \t]*ifndef { return F90PPR_IFNDEF; } +$[ \t]*if { return F90PPR_IF; } +$[ \t]*elif { return F90PPR_ELIF; } +$[ \t]*else { return F90PPR_ELSE; } +$[ \t]*endif { return F90PPR_ENDIF; } + + /* Line continuations, possible involving comments. */ +&([ \t\n]*|!.*)* +&([ \t\n]*|!.*)*& + +, { return COMMA; } + +:: { return DCOLON; } + +\n[ ]{5}[^ ] { return GARBAGE; } + +=|=> { return ASSIGNMENT_OP; } + +[a-zA-Z_][a-zA-Z_0-9]* { + yylvalp->string = strdup(yytext); + return WORD; +} + +[^ \t\n\r;,!'"a-zA-Z=&]+ { return GARBAGE; } + +;|\n { return EOSTMT; } + + +[ \t\r,] /* Ignore */ +\\[ \t]*\n /* Ignore line-endings preceeded by \ */ + +. { return *yytext; } + +<> { + if(!cmDependsFortranParser_FilePop(yyextra) ) + { + return YY_NULL; + } +} + +%% + +/*--------------------------------------------------------------------------*/ +YY_BUFFER_STATE cmDependsFortranLexer_GetCurrentBuffer(yyscan_t yyscanner) +{ + /* Hack into the internal flex-generated scanner to get the buffer. */ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return YY_CURRENT_BUFFER; +} diff --git a/Source/cmDependsFortranParser.cxx b/Source/cmDependsFortranParser.cxx new file mode 100644 index 0000000..ea31d3a --- /dev/null +++ b/Source/cmDependsFortranParser.cxx @@ -0,0 +1,2030 @@ +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.4.1" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* Substitute the variable and function names. */ +#define yyparse cmDependsFortran_yyparse +#define yylex cmDependsFortran_yylex +#define yyerror cmDependsFortran_yyerror +#define yylval cmDependsFortran_yylval +#define yychar cmDependsFortran_yychar +#define yydebug cmDependsFortran_yydebug +#define yynerrs cmDependsFortran_yynerrs + + +/* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ +#line 1 "cmDependsFortranParser.y" + +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/*------------------------------------------------------------------------- + Portions of this source have been derived from makedepf90 version 2.8.8, + + Copyright (C) 2000--2006 Erik Edelmann + + The code was originally distributed under the GPL but permission + from the copyright holder has been obtained to distribute this + derived work under the CMake license. +-------------------------------------------------------------------------*/ + +/* + +This file must be translated to C and modified to build everywhere. + +Run bison like this: + + bison --yacc --name-prefix=cmDependsFortran_yy + --defines=cmDependsFortranParserTokens.h + -ocmDependsFortranParser.cxx + cmDependsFortranParser.y + +Modify cmDependsFortranParser.cxx: + - remove TABs + - Remove the yyerrorlab block in range ["goto yyerrlab1", "yyerrlab1:"] +*/ + +/*-------------------------------------------------------------------------*/ +#define cmDependsFortranParser_cxx +#include "cmDependsFortranParser.h" /* Interface to parser object. */ +#include "cmDependsFortranParserTokens.h" /* Need YYSTYPE for YY_DECL. */ + +#include + +/* Configure the parser to use a lexer object. */ +#define YYPARSE_PARAM yyscanner +#define YYLEX_PARAM yyscanner +#define YYERROR_VERBOSE 1 +#define cmDependsFortran_yyerror(x) \ + cmDependsFortranError(yyscanner, x) + +/* Forward declare the lexer entry point. */ +YY_DECL; + +/* Helper function to forward error callback. */ +static void cmDependsFortranError(yyscan_t yyscanner, const char* message) +{ + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_Error(parser, message); +} + +static bool cmDependsFortranParserIsKeyword(const char* word, + const char* keyword) +{ + return cmsysString_strcasecmp(word, keyword) == 0; +} + +/* Disable some warnings in the generated code. */ +#ifdef __BORLANDC__ +# pragma warn -8004 /* Variable assigned a value that is not used. */ +# pragma warn -8008 /* condition always returns true */ +# pragma warn -8060 /* possibly incorrect assignment */ +# pragma warn -8066 /* unreachable code */ +#endif +#ifdef _MSC_VER +# pragma warning (disable: 4102) /* Unused goto label. */ +# pragma warning (disable: 4065) /* Switch contains default but no case. */ +# pragma warning (disable: 4701) /* Local variable may not be initialized. */ +# pragma warning (disable: 4702) /* Unreachable code. */ +# pragma warning (disable: 4127) /* Conditional expression is constant. */ +# pragma warning (disable: 4244) /* Conversion to smaller type, data loss. */ +#endif + + +/* Line 189 of yacc.c */ +#line 172 "cmDependsFortranParser.cxx" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + EOSTMT = 258, + ASSIGNMENT_OP = 259, + GARBAGE = 260, + CPP_INCLUDE = 261, + F90PPR_INCLUDE = 262, + COCO_INCLUDE = 263, + F90PPR_DEFINE = 264, + CPP_DEFINE = 265, + F90PPR_UNDEF = 266, + CPP_UNDEF = 267, + CPP_IFDEF = 268, + CPP_IFNDEF = 269, + CPP_IF = 270, + CPP_ELSE = 271, + CPP_ELIF = 272, + CPP_ENDIF = 273, + F90PPR_IFDEF = 274, + F90PPR_IFNDEF = 275, + F90PPR_IF = 276, + F90PPR_ELSE = 277, + F90PPR_ELIF = 278, + F90PPR_ENDIF = 279, + COMMA = 280, + DCOLON = 281, + CPP_TOENDL = 282, + UNTERMINATED_STRING = 283, + STRING = 284, + WORD = 285 + }; +#endif +/* Tokens. */ +#define EOSTMT 258 +#define ASSIGNMENT_OP 259 +#define GARBAGE 260 +#define CPP_INCLUDE 261 +#define F90PPR_INCLUDE 262 +#define COCO_INCLUDE 263 +#define F90PPR_DEFINE 264 +#define CPP_DEFINE 265 +#define F90PPR_UNDEF 266 +#define CPP_UNDEF 267 +#define CPP_IFDEF 268 +#define CPP_IFNDEF 269 +#define CPP_IF 270 +#define CPP_ELSE 271 +#define CPP_ELIF 272 +#define CPP_ENDIF 273 +#define F90PPR_IFDEF 274 +#define F90PPR_IFNDEF 275 +#define F90PPR_IF 276 +#define F90PPR_ELSE 277 +#define F90PPR_ELIF 278 +#define F90PPR_ENDIF 279 +#define COMMA 280 +#define DCOLON 281 +#define CPP_TOENDL 282 +#define UNTERMINATED_STRING 283 +#define STRING 284 +#define WORD 285 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ + +/* Line 214 of yacc.c */ +#line 94 "cmDependsFortranParser.y" + + char* string; + + + +/* Line 214 of yacc.c */ +#line 274 "cmDependsFortranParser.cxx" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif + + +/* Copy the second part of user declarations. */ + + +/* Line 264 of yacc.c */ +#line 286 "cmDependsFortranParser.cxx" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int yyi) +#else +static int +YYID (yyi) + int yyi; +#endif +{ + return yyi; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 2 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 271 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 31 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 16 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 52 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 94 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 285 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 4, 7, 9, 11, 16, 19, 24, + 30, 38, 43, 48, 53, 58, 63, 68, 72, 76, + 80, 84, 89, 93, 95, 97, 99, 101, 103, 105, + 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, + 127, 129, 131, 133, 135, 136, 139, 141, 143, 145, + 147, 149, 151 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 32, 0, -1, -1, 32, 33, -1, 35, -1, 34, + -1, 30, 4, 45, 3, -1, 30, 3, -1, 30, + 30, 45, 3, -1, 30, 26, 30, 45, 3, -1, + 30, 25, 30, 26, 30, 45, 3, -1, 30, 29, + 45, 3, -1, 36, 29, 45, 3, -1, 37, 30, + 45, 3, -1, 38, 30, 45, 3, -1, 39, 30, + 45, 3, -1, 40, 30, 45, 3, -1, 41, 45, + 3, -1, 42, 45, 3, -1, 43, 45, 3, -1, + 44, 45, 3, -1, 30, 5, 45, 3, -1, 5, + 45, 3, -1, 3, -1, 1, -1, 6, -1, 7, + -1, 8, -1, 10, -1, 9, -1, 12, -1, 11, + -1, 13, -1, 19, -1, 14, -1, 20, -1, 15, + -1, 21, -1, 17, -1, 23, -1, 16, -1, 22, + -1, 18, -1, 24, -1, -1, 45, 46, -1, 30, + -1, 29, -1, 5, -1, 4, -1, 26, -1, 25, + -1, 28, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 115, 115, 115, 117, 117, 119, 125, 135, 165, + 176, 189, 200, 207, 213, 219, 225, 231, 236, 241, + 246, 251, 255, 256, 257, 262, 262, 262, 263, 263, + 264, 264, 265, 265, 266, 266, 267, 267, 268, 268, + 269, 269, 270, 270, 271, 271, 274, 275, 276, 277, + 278, 279, 280 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "EOSTMT", "ASSIGNMENT_OP", "GARBAGE", + "CPP_INCLUDE", "F90PPR_INCLUDE", "COCO_INCLUDE", "F90PPR_DEFINE", + "CPP_DEFINE", "F90PPR_UNDEF", "CPP_UNDEF", "CPP_IFDEF", "CPP_IFNDEF", + "CPP_IF", "CPP_ELSE", "CPP_ELIF", "CPP_ENDIF", "F90PPR_IFDEF", + "F90PPR_IFNDEF", "F90PPR_IF", "F90PPR_ELSE", "F90PPR_ELIF", + "F90PPR_ENDIF", "COMMA", "DCOLON", "CPP_TOENDL", "UNTERMINATED_STRING", + "STRING", "WORD", "$accept", "code", "stmt", "assignment_stmt", + "keyword_stmt", "include", "define", "undef", "ifdef", "ifndef", "if", + "elif", "else", "endif", "other", "misc_code", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 31, 32, 32, 33, 33, 34, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 36, 36, 36, 37, 37, + 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, + 43, 43, 44, 44, 45, 45, 46, 46, 46, 46, + 46, 46, 46 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 2, 1, 1, 4, 2, 4, 5, + 7, 4, 4, 4, 4, 4, 4, 3, 3, 3, + 3, 4, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, + 1, 1, 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 2, 0, 1, 24, 23, 44, 25, 26, 27, 29, + 28, 31, 30, 32, 34, 36, 40, 38, 42, 33, + 35, 37, 41, 39, 43, 0, 3, 5, 4, 0, + 0, 0, 0, 0, 44, 44, 44, 44, 0, 7, + 44, 44, 0, 0, 44, 44, 44, 44, 44, 44, + 44, 0, 0, 0, 0, 22, 49, 48, 51, 50, + 52, 47, 46, 45, 0, 0, 0, 44, 0, 0, + 0, 0, 0, 0, 0, 17, 18, 19, 20, 6, + 21, 0, 0, 11, 8, 12, 13, 14, 15, 16, + 44, 9, 0, 10 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 1, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 63 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -35 +static const yytype_int16 yypact[] = +{ + -35, 29, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, 241, -35, -35, -35, -25, + -22, -21, -13, -12, -35, -35, -35, -35, 57, -35, + -35, -35, -11, -10, -35, -35, -35, -35, -35, -35, + -35, 63, 69, 75, 103, -35, -35, -35, -35, -35, + -35, -35, -35, -35, 109, 115, -5, -35, 121, 149, + 155, 161, 167, 195, 201, -35, -35, -35, -35, -35, + -35, -8, 207, -35, -35, -35, -35, -35, -35, -35, + -35, -35, 213, -35 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -34, -35 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const yytype_uint8 yytable[] = +{ + 51, 52, 53, 54, 46, 0, 64, 65, 47, 48, + 68, 69, 70, 71, 72, 73, 74, 49, 50, 66, + 67, 81, 90, 0, 0, 0, 0, 0, 0, 2, + 3, 0, 4, 82, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 0, 0, 92, 0, 0, 25, + 55, 56, 57, 0, 0, 0, 75, 56, 57, 0, + 0, 0, 76, 56, 57, 0, 0, 0, 77, 56, + 57, 0, 58, 59, 0, 60, 61, 62, 58, 59, + 0, 60, 61, 62, 58, 59, 0, 60, 61, 62, + 58, 59, 0, 60, 61, 62, 78, 56, 57, 0, + 0, 0, 79, 56, 57, 0, 0, 0, 80, 56, + 57, 0, 0, 0, 83, 56, 57, 0, 58, 59, + 0, 60, 61, 62, 58, 59, 0, 60, 61, 62, + 58, 59, 0, 60, 61, 62, 58, 59, 0, 60, + 61, 62, 84, 56, 57, 0, 0, 0, 85, 56, + 57, 0, 0, 0, 86, 56, 57, 0, 0, 0, + 87, 56, 57, 0, 58, 59, 0, 60, 61, 62, + 58, 59, 0, 60, 61, 62, 58, 59, 0, 60, + 61, 62, 58, 59, 0, 60, 61, 62, 88, 56, + 57, 0, 0, 0, 89, 56, 57, 0, 0, 0, + 91, 56, 57, 0, 0, 0, 93, 56, 57, 0, + 58, 59, 0, 60, 61, 62, 58, 59, 0, 60, + 61, 62, 58, 59, 0, 60, 61, 62, 58, 59, + 0, 60, 61, 62, 39, 40, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 42, 43, 0, 0, + 44, 45 +}; + +static const yytype_int8 yycheck[] = +{ + 34, 35, 36, 37, 29, -1, 40, 41, 30, 30, + 44, 45, 46, 47, 48, 49, 50, 30, 30, 30, + 30, 26, 30, -1, -1, -1, -1, -1, -1, 0, + 1, -1, 3, 67, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, -1, -1, 90, -1, -1, 30, + 3, 4, 5, -1, -1, -1, 3, 4, 5, -1, + -1, -1, 3, 4, 5, -1, -1, -1, 3, 4, + 5, -1, 25, 26, -1, 28, 29, 30, 25, 26, + -1, 28, 29, 30, 25, 26, -1, 28, 29, 30, + 25, 26, -1, 28, 29, 30, 3, 4, 5, -1, + -1, -1, 3, 4, 5, -1, -1, -1, 3, 4, + 5, -1, -1, -1, 3, 4, 5, -1, 25, 26, + -1, 28, 29, 30, 25, 26, -1, 28, 29, 30, + 25, 26, -1, 28, 29, 30, 25, 26, -1, 28, + 29, 30, 3, 4, 5, -1, -1, -1, 3, 4, + 5, -1, -1, -1, 3, 4, 5, -1, -1, -1, + 3, 4, 5, -1, 25, 26, -1, 28, 29, 30, + 25, 26, -1, 28, 29, 30, 25, 26, -1, 28, + 29, 30, 25, 26, -1, 28, 29, 30, 3, 4, + 5, -1, -1, -1, 3, 4, 5, -1, -1, -1, + 3, 4, 5, -1, -1, -1, 3, 4, 5, -1, + 25, 26, -1, 28, 29, 30, 25, 26, -1, 28, + 29, 30, 25, 26, -1, 28, 29, 30, 25, 26, + -1, 28, 29, 30, 3, 4, 5, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 25, 26, -1, -1, + 29, 30 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 32, 0, 1, 3, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 30, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 3, + 4, 5, 25, 26, 29, 30, 29, 30, 30, 30, + 30, 45, 45, 45, 45, 3, 4, 5, 25, 26, + 28, 29, 30, 46, 45, 45, 30, 30, 45, 45, + 45, 45, 45, 45, 45, 3, 3, 3, 3, 3, + 3, 26, 45, 3, 3, 3, 3, 3, 3, 3, + 30, 3, 45, 3 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval) +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +#else +static void +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + +/* Prevent warnings from -Wmissing-prototypes. */ +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + + + +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ +/* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + + /* Number of syntax errors so far. */ + int yynerrs; + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yystacksize = YYINITDEPTH; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token. */ + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 6: + +/* Line 1455 of yacc.c */ +#line 120 "cmDependsFortranParser.y" + { + free((yyvsp[(1) - (4)].string)); + } + break; + + case 7: + +/* Line 1455 of yacc.c */ +#line 126 "cmDependsFortranParser.y" + { + if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (2)].string), "interface")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_SetInInterface(parser, true); + } + free((yyvsp[(1) - (2)].string)); + } + break; + + case 8: + +/* Line 1455 of yacc.c */ +#line 136 "cmDependsFortranParser.y" + { + if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (4)].string), "use")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleUse(parser, (yyvsp[(2) - (4)].string)); + } + else if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (4)].string), "module")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleModule(parser, (yyvsp[(2) - (4)].string)); + } + else if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (4)].string), "interface")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_SetInInterface(parser, true); + } + else if (cmDependsFortranParserIsKeyword((yyvsp[(2) - (4)].string), "interface") && + cmDependsFortranParserIsKeyword((yyvsp[(1) - (4)].string), "end")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_SetInInterface(parser, false); + } + free((yyvsp[(1) - (4)].string)); + free((yyvsp[(2) - (4)].string)); + } + break; + + case 9: + +/* Line 1455 of yacc.c */ +#line 166 "cmDependsFortranParser.y" + { + if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (5)].string), "use")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleUse(parser, (yyvsp[(3) - (5)].string)); + } + free((yyvsp[(1) - (5)].string)); + free((yyvsp[(3) - (5)].string)); + } + break; + + case 10: + +/* Line 1455 of yacc.c */ +#line 177 "cmDependsFortranParser.y" + { + if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (7)].string), "use") && + cmDependsFortranParserIsKeyword((yyvsp[(3) - (7)].string), "non_intrinsic") ) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleUse(parser, (yyvsp[(5) - (7)].string)); + } + free((yyvsp[(1) - (7)].string)); + free((yyvsp[(3) - (7)].string)); + free((yyvsp[(5) - (7)].string)); + } + break; + + case 11: + +/* Line 1455 of yacc.c */ +#line 190 "cmDependsFortranParser.y" + { + if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (4)].string), "include")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleInclude(parser, (yyvsp[(2) - (4)].string)); + } + free((yyvsp[(1) - (4)].string)); + free((yyvsp[(2) - (4)].string)); + } + break; + + case 12: + +/* Line 1455 of yacc.c */ +#line 201 "cmDependsFortranParser.y" + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleInclude(parser, (yyvsp[(2) - (4)].string)); + free((yyvsp[(2) - (4)].string)); + } + break; + + case 13: + +/* Line 1455 of yacc.c */ +#line 208 "cmDependsFortranParser.y" + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleDefine(parser, (yyvsp[(2) - (4)].string)); + free((yyvsp[(2) - (4)].string)); + } + break; + + case 14: + +/* Line 1455 of yacc.c */ +#line 214 "cmDependsFortranParser.y" + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleUndef(parser, (yyvsp[(2) - (4)].string)); + free((yyvsp[(2) - (4)].string)); + } + break; + + case 15: + +/* Line 1455 of yacc.c */ +#line 220 "cmDependsFortranParser.y" + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleIfdef(parser, (yyvsp[(2) - (4)].string)); + free((yyvsp[(2) - (4)].string)); + } + break; + + case 16: + +/* Line 1455 of yacc.c */ +#line 226 "cmDependsFortranParser.y" + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleIfndef(parser, (yyvsp[(2) - (4)].string)); + free((yyvsp[(2) - (4)].string)); + } + break; + + case 17: + +/* Line 1455 of yacc.c */ +#line 232 "cmDependsFortranParser.y" + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleIf(parser); + } + break; + + case 18: + +/* Line 1455 of yacc.c */ +#line 237 "cmDependsFortranParser.y" + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleElif(parser); + } + break; + + case 19: + +/* Line 1455 of yacc.c */ +#line 242 "cmDependsFortranParser.y" + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleElse(parser); + } + break; + + case 20: + +/* Line 1455 of yacc.c */ +#line 247 "cmDependsFortranParser.y" + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleEndif(parser); + } + break; + + case 21: + +/* Line 1455 of yacc.c */ +#line 252 "cmDependsFortranParser.y" + { + free((yyvsp[(1) - (4)].string)); + } + break; + + case 46: + +/* Line 1455 of yacc.c */ +#line 274 "cmDependsFortranParser.y" + { free ((yyvsp[(1) - (1)].string)); } + break; + + case 47: + +/* Line 1455 of yacc.c */ +#line 275 "cmDependsFortranParser.y" + { free ((yyvsp[(1) - (1)].string)); } + break; + + + +/* Line 1455 of yacc.c */ +#line 1821 "cmDependsFortranParser.cxx" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + +#if 0 + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: +#endif + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#if !defined(yyoverflow) || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + + +/* Line 1675 of yacc.c */ +#line 283 "cmDependsFortranParser.y" + +/* End of grammar */ diff --git a/Source/cmDependsFortranParser.h b/Source/cmDependsFortranParser.h new file mode 100644 index 0000000..399c3c8 --- /dev/null +++ b/Source/cmDependsFortranParser.h @@ -0,0 +1,96 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDependsFortranParser_h +#define cmDependsFortranParser_h + +#include /* size_t */ + +/* Forward declare parser object type. */ +typedef struct cmDependsFortranParser_s cmDependsFortranParser; + +/* Functions to enter/exit #include'd files in order. */ +bool cmDependsFortranParser_FilePush(cmDependsFortranParser* parser, + const char* fname); +bool cmDependsFortranParser_FilePop(cmDependsFortranParser* parser); + +/* Callbacks for lexer. */ +int cmDependsFortranParser_Input(cmDependsFortranParser* parser, + char* buffer, size_t bufferSize); + + +void cmDependsFortranParser_StringStart(cmDependsFortranParser* parser); +const char* cmDependsFortranParser_StringEnd(cmDependsFortranParser* parser); +void cmDependsFortranParser_StringAppend(cmDependsFortranParser* parser, + char c); + +void cmDependsFortranParser_SetInInterface(cmDependsFortranParser* parser, + bool is_in); +bool cmDependsFortranParser_GetInInterface(cmDependsFortranParser* parser); + + +void cmDependsFortranParser_SetInPPFalseBranch(cmDependsFortranParser* parser, + bool is_in); +bool cmDependsFortranParser_GetInPPFalseBranch(cmDependsFortranParser* parser); + + +void cmDependsFortranParser_SetOldStartcond(cmDependsFortranParser* parser, + int arg); +int cmDependsFortranParser_GetOldStartcond(cmDependsFortranParser* parser); + +/* Callbacks for parser. */ +void cmDependsFortranParser_Error(cmDependsFortranParser* parser, + const char* message); +void cmDependsFortranParser_RuleUse(cmDependsFortranParser* parser, + const char* name); +void cmDependsFortranParser_RuleInclude(cmDependsFortranParser* parser, + const char* name); +void cmDependsFortranParser_RuleModule(cmDependsFortranParser* parser, + const char* name); +void cmDependsFortranParser_RuleDefine(cmDependsFortranParser* parser, + const char* name); +void cmDependsFortranParser_RuleUndef(cmDependsFortranParser* parser, + const char* name); +void cmDependsFortranParser_RuleIfdef(cmDependsFortranParser* parser, + const char* name); +void cmDependsFortranParser_RuleIfndef(cmDependsFortranParser* parser, + const char* name); +void cmDependsFortranParser_RuleIf(cmDependsFortranParser* parser); +void cmDependsFortranParser_RuleElif(cmDependsFortranParser* parser); +void cmDependsFortranParser_RuleElse(cmDependsFortranParser* parser); +void cmDependsFortranParser_RuleEndif(cmDependsFortranParser* parser); + +/* Define the parser stack element type. */ +typedef union cmDependsFortran_yystype_u cmDependsFortran_yystype; +union cmDependsFortran_yystype_u +{ + char* string; +}; + +/* Setup the proper yylex interface. */ +#define YY_EXTRA_TYPE cmDependsFortranParser* +#define YY_DECL \ +int cmDependsFortran_yylex(YYSTYPE* yylvalp, yyscan_t yyscanner) +#define YYSTYPE cmDependsFortran_yystype +#define YYSTYPE_IS_DECLARED 1 +#if !defined(cmDependsFortranLexer_cxx) +# include "cmDependsFortranLexer.h" +#endif +#if !defined(cmDependsFortranLexer_cxx) +#if !defined(cmDependsFortranParser_cxx) +# undef YY_EXTRA_TYPE +# undef YY_DECL +# undef YYSTYPE +# undef YYSTYPE_IS_DECLARED +#endif +#endif + +#endif diff --git a/Source/cmDependsFortranParser.y b/Source/cmDependsFortranParser.y new file mode 100644 index 0000000..00d3327 --- /dev/null +++ b/Source/cmDependsFortranParser.y @@ -0,0 +1,279 @@ +%{ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/*------------------------------------------------------------------------- + Portions of this source have been derived from makedepf90 version 2.8.8, + + Copyright (C) 2000--2006 Erik Edelmann + + The code was originally distributed under the GPL but permission + from the copyright holder has been obtained to distribute this + derived work under the CMake license. +-------------------------------------------------------------------------*/ + +/* + +This file must be translated to C and modified to build everywhere. + +Run bison like this: + + bison --yacc --name-prefix=cmDependsFortran_yy + --defines=cmDependsFortranParserTokens.h + -ocmDependsFortranParser.cxx + cmDependsFortranParser.y + +Modify cmDependsFortranParser.cxx: + - remove TABs + - Remove the yyerrorlab block in range ["goto yyerrlab1", "yyerrlab1:"] +*/ + +/*-------------------------------------------------------------------------*/ +#define cmDependsFortranParser_cxx +#include "cmDependsFortranParser.h" /* Interface to parser object. */ +#include "cmDependsFortranParserTokens.h" /* Need YYSTYPE for YY_DECL. */ + +#include + +/* Configure the parser to use a lexer object. */ +#define YYPARSE_PARAM yyscanner +#define YYLEX_PARAM yyscanner +#define YYERROR_VERBOSE 1 +#define cmDependsFortran_yyerror(x) \ + cmDependsFortranError(yyscanner, x) + +/* Forward declare the lexer entry point. */ +YY_DECL; + +/* Helper function to forward error callback. */ +static void cmDependsFortranError(yyscan_t yyscanner, const char* message) +{ + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_Error(parser, message); +} + +static bool cmDependsFortranParserIsKeyword(const char* word, + const char* keyword) +{ + return cmsysString_strcasecmp(word, keyword) == 0; +} + +/* Disable some warnings in the generated code. */ +#ifdef __BORLANDC__ +# pragma warn -8004 /* Variable assigned a value that is not used. */ +# pragma warn -8008 /* condition always returns true */ +# pragma warn -8060 /* possibly incorrect assignment */ +# pragma warn -8066 /* unreachable code */ +#endif +#ifdef _MSC_VER +# pragma warning (disable: 4102) /* Unused goto label. */ +# pragma warning (disable: 4065) /* Switch contains default but no case. */ +# pragma warning (disable: 4701) /* Local variable may not be initialized. */ +# pragma warning (disable: 4702) /* Unreachable code. */ +# pragma warning (disable: 4127) /* Conditional expression is constant. */ +# pragma warning (disable: 4244) /* Conversion to smaller type, data loss. */ +#endif +%} + +/* Generate a reentrant parser object. */ +%pure-parser + +%union { + char* string; +} + +/*-------------------------------------------------------------------------*/ +/* Tokens */ +%token EOSTMT ASSIGNMENT_OP GARBAGE +%token CPP_INCLUDE F90PPR_INCLUDE COCO_INCLUDE +%token F90PPR_DEFINE CPP_DEFINE F90PPR_UNDEF CPP_UNDEF +%token CPP_IFDEF CPP_IFNDEF CPP_IF CPP_ELSE CPP_ELIF CPP_ENDIF +%token F90PPR_IFDEF F90PPR_IFNDEF F90PPR_IF +%token F90PPR_ELSE F90PPR_ELIF F90PPR_ENDIF +%token COMMA DCOLON +%token CPP_TOENDL +%token UNTERMINATED_STRING +%token STRING WORD + +/*-------------------------------------------------------------------------*/ +/* grammar */ +%% + +code: /* empty */ | code stmt; + +stmt: keyword_stmt | assignment_stmt; + +assignment_stmt: WORD ASSIGNMENT_OP other EOSTMT /* Ignore */ + { + free($1); + } + +keyword_stmt: + WORD EOSTMT + { + if (cmDependsFortranParserIsKeyword($1, "interface")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_SetInInterface(parser, true); + } + free($1); + } +| WORD WORD other EOSTMT + { + if (cmDependsFortranParserIsKeyword($1, "use")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleUse(parser, $2); + } + else if (cmDependsFortranParserIsKeyword($1, "module")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleModule(parser, $2); + } + else if (cmDependsFortranParserIsKeyword($1, "interface")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_SetInInterface(parser, true); + } + else if (cmDependsFortranParserIsKeyword($2, "interface") && + cmDependsFortranParserIsKeyword($1, "end")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_SetInInterface(parser, false); + } + free($1); + free($2); + } +| WORD DCOLON WORD other EOSTMT + { + if (cmDependsFortranParserIsKeyword($1, "use")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleUse(parser, $3); + } + free($1); + free($3); + } +| WORD COMMA WORD DCOLON WORD other EOSTMT + { + if (cmDependsFortranParserIsKeyword($1, "use") && + cmDependsFortranParserIsKeyword($3, "non_intrinsic") ) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleUse(parser, $5); + } + free($1); + free($3); + free($5); + } +| WORD STRING other EOSTMT /* Ignore */ + { + if (cmDependsFortranParserIsKeyword($1, "include")) + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleInclude(parser, $2); + } + free($1); + free($2); + } +| include STRING other EOSTMT + { + cmDependsFortranParser* parser = + cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleInclude(parser, $2); + free($2); + } +| define WORD other EOSTMT + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleDefine(parser, $2); + free($2); + } +| undef WORD other EOSTMT + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleUndef(parser, $2); + free($2); + } +| ifdef WORD other EOSTMT + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleIfdef(parser, $2); + free($2); + } +| ifndef WORD other EOSTMT + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleIfndef(parser, $2); + free($2); + } +| if other EOSTMT + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleIf(parser); + } +| elif other EOSTMT + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleElif(parser); + } +| else other EOSTMT + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleElse(parser); + } +| endif other EOSTMT + { + cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner); + cmDependsFortranParser_RuleEndif(parser); + } +| WORD GARBAGE other EOSTMT /* Ignore */ + { + free($1); + } +| GARBAGE other EOSTMT +| EOSTMT +| error +; + + + +include: CPP_INCLUDE | F90PPR_INCLUDE | COCO_INCLUDE ; +define: CPP_DEFINE | F90PPR_DEFINE; +undef: CPP_UNDEF | F90PPR_UNDEF ; +ifdef: CPP_IFDEF | F90PPR_IFDEF ; +ifndef: CPP_IFNDEF | F90PPR_IFNDEF ; +if: CPP_IF | F90PPR_IF ; +elif: CPP_ELIF | F90PPR_ELIF ; +else: CPP_ELSE | F90PPR_ELSE ; +endif: CPP_ENDIF | F90PPR_ENDIF ; +other: /* empty */ | other misc_code ; + +misc_code: + WORD { free ($1); } +| STRING { free ($1); } +| GARBAGE +| ASSIGNMENT_OP +| DCOLON +| COMMA +| UNTERMINATED_STRING +; + +%% +/* End of grammar */ diff --git a/Source/cmDependsFortranParserTokens.h b/Source/cmDependsFortranParserTokens.h new file mode 100644 index 0000000..0bbcaae --- /dev/null +++ b/Source/cmDependsFortranParserTokens.h @@ -0,0 +1,118 @@ +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + EOSTMT = 258, + ASSIGNMENT_OP = 259, + GARBAGE = 260, + CPP_INCLUDE = 261, + F90PPR_INCLUDE = 262, + COCO_INCLUDE = 263, + F90PPR_DEFINE = 264, + CPP_DEFINE = 265, + F90PPR_UNDEF = 266, + CPP_UNDEF = 267, + CPP_IFDEF = 268, + CPP_IFNDEF = 269, + CPP_IF = 270, + CPP_ELSE = 271, + CPP_ELIF = 272, + CPP_ENDIF = 273, + F90PPR_IFDEF = 274, + F90PPR_IFNDEF = 275, + F90PPR_IF = 276, + F90PPR_ELSE = 277, + F90PPR_ELIF = 278, + F90PPR_ENDIF = 279, + COMMA = 280, + DCOLON = 281, + CPP_TOENDL = 282, + UNTERMINATED_STRING = 283, + STRING = 284, + WORD = 285 + }; +#endif +/* Tokens. */ +#define EOSTMT 258 +#define ASSIGNMENT_OP 259 +#define GARBAGE 260 +#define CPP_INCLUDE 261 +#define F90PPR_INCLUDE 262 +#define COCO_INCLUDE 263 +#define F90PPR_DEFINE 264 +#define CPP_DEFINE 265 +#define F90PPR_UNDEF 266 +#define CPP_UNDEF 267 +#define CPP_IFDEF 268 +#define CPP_IFNDEF 269 +#define CPP_IF 270 +#define CPP_ELSE 271 +#define CPP_ELIF 272 +#define CPP_ENDIF 273 +#define F90PPR_IFDEF 274 +#define F90PPR_IFNDEF 275 +#define F90PPR_IF 276 +#define F90PPR_ELSE 277 +#define F90PPR_ELIF 278 +#define F90PPR_ENDIF 279 +#define COMMA 280 +#define DCOLON 281 +#define CPP_TOENDL 282 +#define UNTERMINATED_STRING 283 +#define STRING 284 +#define WORD 285 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ + +/* Line 1676 of yacc.c */ +#line 94 "cmDependsFortranParser.y" + + char* string; + +/* Line 1676 of yacc.c */ +#line 118 "cmDependsFortranParserTokens.h" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif diff --git a/Source/cmDependsJava.cxx b/Source/cmDependsJava.cxx new file mode 100644 index 0000000..1d84914 --- /dev/null +++ b/Source/cmDependsJava.cxx @@ -0,0 +1,45 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDependsJava.h" + +#include "cmDependsJavaParserHelper.h" +#include "cmSystemTools.h" + +//---------------------------------------------------------------------------- +cmDependsJava::cmDependsJava() +{ +} + +//---------------------------------------------------------------------------- +cmDependsJava::~cmDependsJava() +{ +} + +//---------------------------------------------------------------------------- +bool cmDependsJava::WriteDependencies(const char *src, const char *, + std::ostream&, std::ostream&) +{ + // Make sure this is a scanning instance. + if(!src || src[0] == '\0') + { + cmSystemTools::Error("Cannot scan dependencies without an source file."); + return false; + } + + return true; +} + +bool cmDependsJava::CheckDependencies(std::istream&, + std::map&) +{ + return true; +} diff --git a/Source/cmDependsJava.h b/Source/cmDependsJava.h new file mode 100644 index 0000000..fe6fef5 --- /dev/null +++ b/Source/cmDependsJava.h @@ -0,0 +1,42 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDependsJava_h +#define cmDependsJava_h + +#include "cmDepends.h" + +/** \class cmDependsJava + * \brief Dependency scanner for Java class files. + */ +class cmDependsJava: public cmDepends +{ +public: + /** Checking instances need to know the build directory name and the + relative path from the build directory to the target file. */ + cmDependsJava(); + + /** Virtual destructor to cleanup subclasses properly. */ + virtual ~cmDependsJava(); + +protected: + // Implement writing/checking methods required by superclass. + virtual bool WriteDependencies(const char *src, const char *file, + std::ostream& makeDepends, std::ostream& internalDepends); + virtual bool CheckDependencies(std::istream& internalDepends, + std::map& validDeps); + +private: + cmDependsJava(cmDependsJava const&); // Purposely not implemented. + void operator=(cmDependsJava const&); // Purposely not implemented. +}; + +#endif diff --git a/Source/cmDependsJavaLexer.cxx b/Source/cmDependsJavaLexer.cxx new file mode 100644 index 0000000..63cfebc --- /dev/null +++ b/Source/cmDependsJavaLexer.cxx @@ -0,0 +1,2542 @@ +#include "cmStandardIncludes.h" +#line 2 "cmDependsJavaLexer.cxx" + +#line 4 "cmDependsJavaLexer.cxx" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 31 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +#if defined(__BEOS__) || defined (__HAIKU__) +#include /* prevents a conflict with a #define later on... */ +#endif + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +int cmDependsJava_yylex_init (yyscan_t* scanner); + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE cmDependsJava_yyrestart(yyin ,yyscanner ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via cmDependsJava_yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void cmDependsJava_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void cmDependsJava_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsJava_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void cmDependsJava_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmDependsJava_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmDependsJava_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void cmDependsJava_yypop_buffer_state (yyscan_t yyscanner ); + +static void cmDependsJava_yyensure_buffer_stack (yyscan_t yyscanner ); +static void cmDependsJava_yy_load_buffer_state (yyscan_t yyscanner ); +static void cmDependsJava_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); + +#define YY_FLUSH_BUFFER cmDependsJava_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) + +YY_BUFFER_STATE cmDependsJava_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsJava_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsJava_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +void *cmDependsJava_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *cmDependsJava_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void cmDependsJava_yyfree (void * ,yyscan_t yyscanner ); + +#define yy_new_buffer cmDependsJava_yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + cmDependsJava_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + cmDependsJava_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + cmDependsJava_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + cmDependsJava_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define cmDependsJava_yywrap(n) 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); +static int yy_get_next_buffer (yyscan_t yyscanner ); +static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; + +#define YY_NUM_RULES 111 +#define YY_END_OF_BUFFER 112 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[327] = + { 0, + 0, 0, 0, 0, 0, 0, 112, 110, 109, 109, + 77, 4, 73, 94, 60, 110, 93, 92, 105, 99, + 68, 89, 74, 71, 56, 56, 67, 103, 86, 75, + 79, 102, 107, 64, 63, 65, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 70, 96, 69, 104, 3, 3, 6, 111, 5, + 78, 95, 61, 62, 0, 0, 106, 101, 100, 91, + 90, 57, 1, 0, 72, 57, 56, 57, 0, 56, + 0, 88, 87, 76, 80, 81, 107, 66, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 18, 107, + + 107, 107, 107, 107, 107, 26, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 97, 98, 2, 55, 55, + 0, 0, 0, 108, 57, 0, 57, 58, 85, 82, + 83, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 25, 107, + 107, 30, 107, 107, 34, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 50, 107, 107, 107, 0, 0, 58, 84, 107, + 107, 107, 107, 11, 12, 107, 14, 107, 107, 107, + + 107, 20, 107, 107, 107, 107, 107, 107, 107, 107, + 32, 107, 59, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 46, 107, 107, 54, 51, 107, + 107, 107, 107, 107, 10, 13, 15, 107, 107, 107, + 107, 22, 24, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 40, 107, 107, 43, 107, 107, 47, + 107, 107, 53, 107, 8, 107, 107, 107, 19, 107, + 107, 107, 28, 107, 107, 33, 107, 107, 107, 38, + 39, 41, 107, 44, 107, 48, 107, 107, 107, 9, + 107, 17, 21, 23, 107, 107, 107, 35, 36, 107, + + 107, 107, 107, 107, 7, 16, 107, 107, 107, 107, + 42, 107, 107, 52, 107, 107, 31, 37, 107, 49, + 27, 29, 107, 107, 45, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 5, 1, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, + 19, 19, 19, 19, 19, 20, 20, 21, 22, 23, + 24, 25, 26, 1, 27, 27, 27, 28, 29, 28, + 30, 30, 30, 30, 30, 31, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 32, 30, 30, + 33, 34, 35, 36, 30, 1, 37, 38, 39, 40, + + 41, 42, 43, 44, 45, 30, 46, 47, 48, 49, + 50, 51, 30, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[65] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, + 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, + 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, + 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 1, 1, 1, 1 + } ; + +static yyconst flex_int16_t yy_base[334] = + { 0, + 0, 0, 401, 400, 62, 63, 411, 414, 414, 414, + 386, 414, 414, 385, 61, 374, 414, 414, 383, 57, + 414, 56, 54, 65, 74, 43, 414, 414, 55, 382, + 59, 414, 0, 414, 414, 381, 38, 36, 60, 46, + 51, 75, 69, 354, 82, 76, 362, 85, 56, 352, + 357, 414, 100, 414, 414, 414, 383, 414, 414, 414, + 414, 414, 414, 414, 390, 127, 414, 414, 414, 414, + 414, 129, 414, 395, 414, 132, 95, 414, 165, 414, + 0, 373, 414, 414, 414, 109, 0, 414, 343, 342, + 344, 352, 338, 101, 354, 353, 340, 346, 332, 333, + + 331, 337, 334, 332, 329, 0, 329, 110, 330, 324, + 320, 329, 336, 93, 336, 319, 322, 89, 320, 325, + 320, 114, 131, 120, 323, 414, 414, 414, 414, 358, + 170, 357, 362, 414, 173, 157, 176, 150, 414, 414, + 340, 309, 321, 314, 323, 318, 317, 318, 304, 302, + 300, 316, 314, 310, 309, 296, 311, 310, 0, 153, + 292, 304, 301, 298, 0, 295, 295, 284, 285, 291, + 282, 284, 281, 289, 292, 278, 292, 277, 279, 279, + 286, 0, 286, 288, 277, 189, 314, 414, 414, 270, + 269, 279, 273, 0, 0, 274, 0, 264, 271, 260, + + 267, 0, 264, 271, 264, 256, 268, 256, 270, 254, + 0, 249, 0, 267, 266, 261, 256, 248, 245, 253, + 258, 244, 256, 250, 0, 236, 239, 0, 0, 237, + 249, 252, 234, 250, 0, 0, 0, 237, 238, 243, + 243, 235, 0, 233, 226, 230, 236, 236, 233, 221, + 235, 234, 223, 0, 232, 216, 0, 225, 216, 214, + 221, 220, 0, 225, 0, 214, 207, 207, 0, 207, + 200, 217, 0, 218, 219, 0, 214, 213, 199, 0, + 0, 0, 210, 0, 201, 0, 209, 202, 194, 0, + 206, 0, 0, 0, 197, 204, 205, 0, 0, 202, + + 191, 192, 191, 198, 0, 0, 163, 162, 170, 170, + 0, 164, 152, 0, 152, 157, 0, 0, 127, 0, + 0, 0, 115, 95, 0, 414, 218, 222, 226, 228, + 232, 96, 235 + } ; + +static yyconst flex_int16_t yy_def[334] = + { 0, + 326, 1, 327, 327, 328, 328, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 329, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 25, 326, 326, 326, 326, + 326, 326, 330, 326, 326, 326, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 329, 326, 326, 326, 326, + 326, 326, 326, 331, 326, 326, 25, 326, 326, 326, + 332, 326, 326, 326, 326, 326, 330, 326, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 326, 326, 326, 326, 326, + 326, 333, 331, 326, 326, 326, 326, 332, 326, 326, + 326, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 326, 333, 326, 326, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 0, 326, 326, 326, 326, + 326, 326, 326 + } ; + +static yyconst flex_int16_t yy_nxt[479] = + { 0, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 26, + 27, 28, 29, 30, 31, 32, 33, 33, 33, 33, + 33, 33, 34, 8, 35, 36, 37, 38, 39, 40, + 41, 42, 33, 33, 43, 33, 44, 33, 45, 33, + 46, 47, 48, 49, 33, 50, 51, 33, 33, 33, + 52, 53, 54, 55, 59, 59, 60, 60, 63, 68, + 70, 72, 72, 72, 326, 89, 73, 82, 83, 71, + 69, 74, 85, 86, 64, 91, 98, 92, 75, 76, + 90, 77, 77, 77, 93, 99, 94, 100, 138, 122, + + 326, 78, 79, 95, 80, 81, 96, 123, 101, 97, + 106, 102, 113, 78, 79, 78, 107, 108, 110, 103, + 80, 104, 111, 126, 105, 173, 326, 114, 117, 326, + 115, 81, 140, 141, 325, 130, 112, 168, 118, 119, + 174, 120, 169, 121, 131, 131, 72, 72, 72, 135, + 135, 135, 326, 147, 148, 324, 78, 79, 178, 78, + 79, 127, 161, 162, 183, 179, 184, 180, 78, 79, + 78, 78, 79, 78, 137, 137, 137, 136, 129, 136, + 188, 132, 137, 137, 137, 181, 323, 186, 186, 182, + 135, 135, 135, 137, 137, 137, 188, 129, 322, 207, + + 78, 79, 208, 78, 321, 320, 186, 186, 319, 318, + 317, 316, 78, 79, 78, 78, 315, 78, 56, 56, + 56, 56, 58, 58, 58, 58, 65, 65, 65, 65, + 87, 87, 133, 133, 133, 133, 187, 187, 314, 313, + 312, 311, 310, 309, 308, 307, 306, 305, 304, 303, + 302, 301, 300, 299, 298, 297, 296, 295, 294, 293, + 292, 291, 290, 289, 288, 287, 286, 285, 284, 283, + 282, 281, 280, 279, 278, 277, 276, 275, 274, 273, + 272, 271, 270, 269, 268, 267, 266, 265, 264, 263, + 262, 261, 260, 259, 258, 257, 256, 255, 254, 253, + + 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, + 242, 228, 241, 240, 239, 238, 237, 236, 235, 234, + 233, 232, 129, 231, 230, 229, 228, 227, 226, 225, + 224, 223, 222, 221, 220, 219, 218, 217, 216, 215, + 214, 213, 212, 211, 210, 209, 206, 205, 204, 203, + 202, 201, 200, 199, 198, 197, 196, 195, 194, 193, + 192, 191, 190, 189, 134, 129, 129, 185, 177, 176, + 175, 172, 171, 170, 167, 166, 165, 164, 163, 160, + 159, 158, 157, 156, 155, 154, 153, 152, 151, 150, + 149, 146, 145, 144, 143, 142, 139, 134, 129, 128, + + 125, 124, 116, 109, 88, 84, 67, 66, 62, 61, + 326, 57, 57, 7, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326 + } ; + +static yyconst flex_int16_t yy_chk[479] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 5, 6, 5, 6, 15, 20, + 22, 23, 23, 23, 26, 37, 24, 29, 29, 22, + 20, 24, 31, 31, 15, 38, 40, 38, 24, 25, + 37, 25, 25, 25, 38, 40, 39, 41, 332, 49, + + 26, 25, 25, 39, 25, 25, 39, 49, 41, 39, + 43, 42, 46, 25, 25, 25, 43, 43, 45, 42, + 25, 42, 45, 53, 42, 118, 77, 46, 48, 66, + 46, 25, 86, 86, 324, 66, 45, 114, 48, 48, + 118, 48, 114, 48, 66, 66, 72, 72, 72, 76, + 76, 76, 77, 94, 94, 323, 72, 72, 122, 76, + 76, 53, 108, 108, 124, 122, 124, 123, 72, 72, + 72, 76, 76, 76, 136, 136, 136, 79, 131, 79, + 138, 66, 79, 79, 79, 123, 319, 131, 131, 123, + 135, 135, 135, 137, 137, 137, 138, 186, 316, 160, + + 135, 135, 160, 137, 315, 313, 186, 186, 312, 310, + 309, 308, 135, 135, 135, 137, 307, 137, 327, 327, + 327, 327, 328, 328, 328, 328, 329, 329, 329, 329, + 330, 330, 331, 331, 331, 331, 333, 333, 304, 303, + 302, 301, 300, 297, 296, 295, 291, 289, 288, 287, + 285, 283, 279, 278, 277, 275, 274, 272, 271, 270, + 268, 267, 266, 264, 262, 261, 260, 259, 258, 256, + 255, 253, 252, 251, 250, 249, 248, 247, 246, 245, + 244, 242, 241, 240, 239, 238, 234, 233, 232, 231, + 230, 227, 226, 224, 223, 222, 221, 220, 219, 218, + + 217, 216, 215, 214, 212, 210, 209, 208, 207, 206, + 205, 204, 203, 201, 200, 199, 198, 196, 193, 192, + 191, 190, 187, 185, 184, 183, 181, 180, 179, 178, + 177, 176, 175, 174, 173, 172, 171, 170, 169, 168, + 167, 166, 164, 163, 162, 161, 158, 157, 156, 155, + 154, 153, 152, 151, 150, 149, 148, 147, 146, 145, + 144, 143, 142, 141, 133, 132, 130, 125, 121, 120, + 119, 117, 116, 115, 113, 112, 111, 110, 109, 107, + 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, + 95, 93, 92, 91, 90, 89, 82, 74, 65, 57, + + 51, 50, 47, 44, 36, 30, 19, 16, 14, 11, + 7, 4, 3, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "cmDependsJavaLexer.in.l" +#line 2 "cmDependsJavaLexer.in.l" +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run flex like this: + + flex --prefix=cmDependsJava_yy --header-file=cmDependsJavaLexer.h -ocmDependsJavaLexer.cxx cmDependsJavaLexer.in.l + +Modify cmDependsJavaLexer.c: + - remove TABs + - remove "yyscanner" argument from these methods: + yy_fatal_error, cmDependsJava_yyalloc, cmDependsJava_yyrealloc, cmDependsJava_yyfree + - remove all YY_BREAK lines occurring right after return statements + - change while ( 1 ) to for(;;) + +Modify cmDependsJavaLexer.h: + - remove TABs + - remove the yy_init_globals function + - remove the block that includes unistd.h + - remove #line directives (avoids bogus warning on old Sun) + +*/ + +#include "cmStandardLexer.h" + +#include "cmDependsJavaParserHelper.h" + +/* Replace the lexer input function. */ +#undef YY_INPUT +#define YY_INPUT(buf, result, max_size) \ + { result = yyextra->LexInput(buf, max_size); } + +/* Include the set of tokens from the parser. */ +#include "cmDependsJavaParserTokens.h" + +#define KEYWORD yylvalp->str = 0 +#define SYMBOL yylvalp->str = 0 +#define PRIMITIVE yylvalp->str = 0 + +/*--------------------------------------------------------------------------*/ + + +#line 721 "cmDependsJavaLexer.cxx" + +#define INITIAL 0 +#define comment 1 +#define string 2 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int cmDependsJava_yylex_destroy (yyscan_t yyscanner ); + +int cmDependsJava_yyget_debug (yyscan_t yyscanner ); + +void cmDependsJava_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE cmDependsJava_yyget_extra (yyscan_t yyscanner ); + +void cmDependsJava_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *cmDependsJava_yyget_in (yyscan_t yyscanner ); + +void cmDependsJava_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *cmDependsJava_yyget_out (yyscan_t yyscanner ); + +void cmDependsJava_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int cmDependsJava_yyget_leng (yyscan_t yyscanner ); + +char *cmDependsJava_yyget_text (yyscan_t yyscanner ); + +int cmDependsJava_yyget_lineno (yyscan_t yyscanner ); + +void cmDependsJava_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int cmDependsJava_yywrap (yyscan_t yyscanner ); +#else +extern int cmDependsJava_yywrap (yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (yyscan_t yyscanner ); +#else +static int input (yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int cmDependsJava_yylex (yyscan_t yyscanner); + +#define YY_DECL int cmDependsJava_yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + +#line 88 "cmDependsJavaLexer.in.l" + +#line 940 "cmDependsJavaLexer.cxx" + + if ( yyg->yy_init ) + { + yyg->yy_init = 0; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + cmDependsJava_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + cmDependsJava_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + cmDependsJava_yy_load_buffer_state(yyscanner ); + } + + for(;;) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 327 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 414 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 89 "cmDependsJavaLexer.in.l" +{ BEGIN(comment); } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 90 "cmDependsJavaLexer.in.l" +{ BEGIN(INITIAL); } + YY_BREAK +case 3: +/* rule 3 can match eol */ +YY_RULE_SETUP +#line 91 "cmDependsJavaLexer.in.l" +{} + YY_BREAK +case 4: +YY_RULE_SETUP +#line 93 "cmDependsJavaLexer.in.l" +{ BEGIN(string); } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 94 "cmDependsJavaLexer.in.l" +{ BEGIN(INITIAL); return jp_STRINGLITERAL; } +case 6: +YY_RULE_SETUP +#line 95 "cmDependsJavaLexer.in.l" +{} + YY_BREAK +case 7: +YY_RULE_SETUP +#line 97 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_ABSTRACT; } +case 8: +YY_RULE_SETUP +#line 98 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_ASSERT; } +case 9: +YY_RULE_SETUP +#line 99 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_BOOLEAN_TYPE; } +case 10: +YY_RULE_SETUP +#line 100 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_BREAK; } +case 11: +YY_RULE_SETUP +#line 101 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_BYTE_TYPE; } +case 12: +YY_RULE_SETUP +#line 102 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_CASE; } +case 13: +YY_RULE_SETUP +#line 103 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_CATCH; } +case 14: +YY_RULE_SETUP +#line 104 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_CHAR_TYPE; } +case 15: +YY_RULE_SETUP +#line 105 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_CLASS; } +case 16: +YY_RULE_SETUP +#line 106 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_CONTINUE; } +case 17: +YY_RULE_SETUP +#line 107 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_DEFAULT; } +case 18: +YY_RULE_SETUP +#line 108 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_DO; } +case 19: +YY_RULE_SETUP +#line 109 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_DOUBLE_TYPE; } +case 20: +YY_RULE_SETUP +#line 110 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_ELSE; } +case 21: +YY_RULE_SETUP +#line 111 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_EXTENDS; } +case 22: +YY_RULE_SETUP +#line 112 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_FINAL; } +case 23: +YY_RULE_SETUP +#line 113 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_FINALLY; } +case 24: +YY_RULE_SETUP +#line 114 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_FLOAT_TYPE; } +case 25: +YY_RULE_SETUP +#line 115 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_FOR; } +case 26: +YY_RULE_SETUP +#line 116 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_IF; } +case 27: +YY_RULE_SETUP +#line 117 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_IMPLEMENTS; } +case 28: +YY_RULE_SETUP +#line 118 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_IMPORT; } +case 29: +YY_RULE_SETUP +#line 119 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_INSTANCEOF; } +case 30: +YY_RULE_SETUP +#line 120 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_INT_TYPE; } +case 31: +YY_RULE_SETUP +#line 121 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_INTERFACE; } +case 32: +YY_RULE_SETUP +#line 122 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_LONG_TYPE; } +case 33: +YY_RULE_SETUP +#line 123 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_NATIVE; } +case 34: +YY_RULE_SETUP +#line 124 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_NEW; } +case 35: +YY_RULE_SETUP +#line 125 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_PACKAGE; } +case 36: +YY_RULE_SETUP +#line 126 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_PRIVATE; } +case 37: +YY_RULE_SETUP +#line 127 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_PROTECTED; } +case 38: +YY_RULE_SETUP +#line 128 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_PUBLIC; } +case 39: +YY_RULE_SETUP +#line 129 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_RETURN; } +case 40: +YY_RULE_SETUP +#line 130 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_SHORT_TYPE; } +case 41: +YY_RULE_SETUP +#line 131 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_STATIC; } +case 42: +YY_RULE_SETUP +#line 132 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_STRICTFP; } +case 43: +YY_RULE_SETUP +#line 133 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_SUPER; } +case 44: +YY_RULE_SETUP +#line 134 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_SWITCH; } +case 45: +YY_RULE_SETUP +#line 135 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_SYNCHRONIZED; } +case 46: +YY_RULE_SETUP +#line 136 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_THIS; } +case 47: +YY_RULE_SETUP +#line 137 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_THROW; } +case 48: +YY_RULE_SETUP +#line 138 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_THROWS; } +case 49: +YY_RULE_SETUP +#line 139 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_TRANSIENT; } +case 50: +YY_RULE_SETUP +#line 140 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_TRY; } +case 51: +YY_RULE_SETUP +#line 141 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_VOID; } +case 52: +YY_RULE_SETUP +#line 142 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_VOLATILE; } +case 53: +YY_RULE_SETUP +#line 143 "cmDependsJavaLexer.in.l" +{ KEYWORD; return jp_WHILE; } +case 54: +YY_RULE_SETUP +#line 145 "cmDependsJavaLexer.in.l" +{ PRIMITIVE; return jp_BOOLEANLITERAL; } +case 55: +/* rule 55 can match eol */ +YY_RULE_SETUP +#line 146 "cmDependsJavaLexer.in.l" +{ PRIMITIVE; return jp_CHARACTERLITERAL; } +case 56: +YY_RULE_SETUP +#line 147 "cmDependsJavaLexer.in.l" +{ PRIMITIVE; return jp_DECIMALINTEGERLITERAL; } +case 57: +YY_RULE_SETUP +#line 148 "cmDependsJavaLexer.in.l" +{ PRIMITIVE; return jp_FLOATINGPOINTLITERAL; } +case 58: +YY_RULE_SETUP +#line 149 "cmDependsJavaLexer.in.l" +{ PRIMITIVE; return jp_HEXINTEGERLITERAL; } +case 59: +YY_RULE_SETUP +#line 150 "cmDependsJavaLexer.in.l" +{ PRIMITIVE; return jp_NULLLITERAL; } +case 60: +YY_RULE_SETUP +#line 152 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_AND; } +case 61: +YY_RULE_SETUP +#line 153 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_ANDAND; } +case 62: +YY_RULE_SETUP +#line 154 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_ANDEQUALS; } +case 63: +YY_RULE_SETUP +#line 155 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_BRACKETEND; } +case 64: +YY_RULE_SETUP +#line 156 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_BRACKETSTART; } +case 65: +YY_RULE_SETUP +#line 157 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_CARROT; } +case 66: +YY_RULE_SETUP +#line 158 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_CARROTEQUALS; } +case 67: +YY_RULE_SETUP +#line 159 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_COLON; } +case 68: +YY_RULE_SETUP +#line 160 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_COMMA; } +case 69: +YY_RULE_SETUP +#line 161 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_CURLYEND; } +case 70: +YY_RULE_SETUP +#line 162 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_CURLYSTART; } +case 71: +YY_RULE_SETUP +#line 163 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_DIVIDE; } +case 72: +YY_RULE_SETUP +#line 164 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_DIVIDEEQUALS; } +case 73: +YY_RULE_SETUP +#line 165 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_DOLLAR; } +case 74: +YY_RULE_SETUP +#line 166 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_DOT; } +case 75: +YY_RULE_SETUP +#line 167 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_EQUALS; } +case 76: +YY_RULE_SETUP +#line 168 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_EQUALSEQUALS; } +case 77: +YY_RULE_SETUP +#line 169 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_EXCLAMATION; } +case 78: +YY_RULE_SETUP +#line 170 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_EXCLAMATIONEQUALS; } +case 79: +YY_RULE_SETUP +#line 171 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_GREATER; } +case 80: +YY_RULE_SETUP +#line 172 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_GTEQUALS; } +case 81: +YY_RULE_SETUP +#line 173 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_GTGT; } +case 82: +YY_RULE_SETUP +#line 174 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_GTGTEQUALS; } +case 83: +YY_RULE_SETUP +#line 175 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_GTGTGT; } +case 84: +YY_RULE_SETUP +#line 176 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_GTGTGTEQUALS; } +case 85: +YY_RULE_SETUP +#line 177 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_LESLESEQUALS; } +case 86: +YY_RULE_SETUP +#line 178 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_LESSTHAN; } +case 87: +YY_RULE_SETUP +#line 179 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_LTEQUALS; } +case 88: +YY_RULE_SETUP +#line 180 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_LTLT; } +case 89: +YY_RULE_SETUP +#line 181 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_MINUS; } +case 90: +YY_RULE_SETUP +#line 182 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_MINUSEQUALS; } +case 91: +YY_RULE_SETUP +#line 183 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_MINUSMINUS; } +case 92: +YY_RULE_SETUP +#line 184 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_PAREEND; } +case 93: +YY_RULE_SETUP +#line 185 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_PARESTART; } +case 94: +YY_RULE_SETUP +#line 186 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_PERCENT; } +case 95: +YY_RULE_SETUP +#line 187 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_PERCENTEQUALS; } +case 96: +YY_RULE_SETUP +#line 188 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_PIPE; } +case 97: +YY_RULE_SETUP +#line 189 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_PIPEEQUALS; } +case 98: +YY_RULE_SETUP +#line 190 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_PIPEPIPE; } +case 99: +YY_RULE_SETUP +#line 191 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_PLUS; } +case 100: +YY_RULE_SETUP +#line 192 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_PLUSEQUALS; } +case 101: +YY_RULE_SETUP +#line 193 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_PLUSPLUS; } +case 102: +YY_RULE_SETUP +#line 194 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_QUESTION; } +case 103: +YY_RULE_SETUP +#line 195 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_SEMICOL; } +case 104: +YY_RULE_SETUP +#line 196 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_TILDE; } +case 105: +YY_RULE_SETUP +#line 197 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_TIMES; } +case 106: +YY_RULE_SETUP +#line 198 "cmDependsJavaLexer.in.l" +{ SYMBOL; return jp_TIMESEQUALS; } +case 107: +YY_RULE_SETUP +#line 200 "cmDependsJavaLexer.in.l" +{ + yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + return jp_NAME; +} +case 108: +/* rule 108 can match eol */ +YY_RULE_SETUP +#line 205 "cmDependsJavaLexer.in.l" +{ } + YY_BREAK +case 109: +/* rule 109 can match eol */ +YY_RULE_SETUP +#line 206 "cmDependsJavaLexer.in.l" +{ } + YY_BREAK +case 110: +YY_RULE_SETUP +#line 207 "cmDependsJavaLexer.in.l" +{ + std::cerr << "Unknown character: " << yytext[0] + << " (" << (int)yytext[0] << ")" << std::endl; + yyextra->Error("Unknown character"); + return jp_ERROR; +} +case 111: +YY_RULE_SETUP +#line 214 "cmDependsJavaLexer.in.l" +ECHO; + YY_BREAK +#line 1590 "cmDependsJavaLexer.cxx" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(comment): +case YY_STATE_EOF(string): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * cmDependsJava_yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( cmDependsJava_yywrap(yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +return 0; /* this should not happen but it silences a warning*/ +} /* end of cmDependsJava_yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = yyg->yytext_ptr; + register int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + size_t nuto_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( nuto_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + cmDependsJava_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + nuto_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( nuto_read > YY_READ_BUF_SIZE ) + nuto_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, nuto_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + cmDependsJava_yyrestart(yyin ,yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 327 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + register int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + register char *yy_cp = yyg->yy_c_buf_p; + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 327 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 326); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + cmDependsJava_yyrestart(yyin ,yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( cmDependsJava_yywrap(yyscanner ) ) + return EOF; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void cmDependsJava_yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + cmDependsJava_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + cmDependsJava_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + cmDependsJava_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); + cmDependsJava_yy_load_buffer_state(yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void cmDependsJava_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * cmDependsJava_yypop_buffer_state(); + * cmDependsJava_yypush_buffer_state(new_buffer); + */ + cmDependsJava_yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + cmDependsJava_yy_load_buffer_state(yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (cmDependsJava_yywrap()) processing, but the only time this flag + * is looked at is after cmDependsJava_yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void cmDependsJava_yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE cmDependsJava_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) cmDependsJava_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in cmDependsJava_yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) cmDependsJava_yyalloc(b->yy_buf_size + 2 ,yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in cmDependsJava_yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + cmDependsJava_yy_init_buffer(b,file ,yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with cmDependsJava_yy_create_buffer() + * @param yyscanner The scanner object. + */ + void cmDependsJava_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + cmDependsJava_yyfree((void *) b->yy_ch_buf ,yyscanner ); + + cmDependsJava_yyfree((void *) b ,yyscanner ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a cmDependsJava_yyrestart() or at EOF. + */ + static void cmDependsJava_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + cmDependsJava_yy_flush_buffer(b ,yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then cmDependsJava_yy_init_buffer was _probably_ + * called from cmDependsJava_yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void cmDependsJava_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + cmDependsJava_yy_load_buffer_state(yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void cmDependsJava_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + cmDependsJava_yyensure_buffer_stack(yyscanner); + + /* This block is copied from cmDependsJava_yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from cmDependsJava_yy_switch_to_buffer. */ + cmDependsJava_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void cmDependsJava_yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + cmDependsJava_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + cmDependsJava_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void cmDependsJava_yyensure_buffer_stack (yyscan_t yyscanner) +{ + int nuto_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + nuto_alloc = 1; + yyg->yy_buffer_stack = (struct yy_buffer_state**)cmDependsJava_yyalloc + (nuto_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + + memset(yyg->yy_buffer_stack, 0, nuto_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = nuto_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + nuto_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)cmDependsJava_yyrealloc + (yyg->yy_buffer_stack, + nuto_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = nuto_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE cmDependsJava_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) cmDependsJava_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in cmDependsJava_yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + cmDependsJava_yy_switch_to_buffer(b ,yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to cmDependsJava_yylex() will + * scan from a @e copy of @a yy_str. + * @param yy_str a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * cmDependsJava_yy_scan_bytes() instead. + */ +YY_BUFFER_STATE cmDependsJava_yy_scan_string (yyconst char * yy_str , yyscan_t yyscanner) +{ + + return cmDependsJava_yy_scan_bytes(yy_str,strlen(yy_str) ,yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to cmDependsJava_yylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE cmDependsJava_yy_scan_bytes (yyconst char * bytes, int len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = len + 2; + buf = (char *) cmDependsJava_yyalloc(n ,yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in cmDependsJava_yy_scan_bytes()" ); + + for ( i = 0; i < len; ++i ) + buf[i] = bytes[i]; + + buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; + + b = cmDependsJava_yy_scan_buffer(buf,n ,yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in cmDependsJava_yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg , yyscan_t) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE cmDependsJava_yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int cmDependsJava_yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int cmDependsJava_yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *cmDependsJava_yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *cmDependsJava_yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int cmDependsJava_yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *cmDependsJava_yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void cmDependsJava_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param line_number + * @param yyscanner The scanner object. + */ +void cmDependsJava_yyset_lineno (int line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "cmDependsJava_yyset_lineno called with no buffer" , yyscanner); + + yylineno = line_number; +} + +/** Set the current column. + * @param column_no + * @param yyscanner The scanner object. + */ +void cmDependsJava_yyset_column (int column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "cmDependsJava_yyset_column called with no buffer" , yyscanner); + + yycolumn = column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * @param yyscanner The scanner object. + * @see cmDependsJava_yy_switch_to_buffer + */ +void cmDependsJava_yyset_in (FILE * in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = in_str ; +} + +void cmDependsJava_yyset_out (FILE * out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = out_str ; +} + +int cmDependsJava_yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void cmDependsJava_yyset_debug (int bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + This function is called once per scanner lifetime. */ + + yyg->yy_buffer_stack = 0; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = (char *) 0; + yyg->yy_init = 1; + yyg->yy_start = 0; + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = (int *) 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * cmDependsJava_yylex_init() + */ + return 0; +} + +/* User-visible API */ + +/* cmDependsJava_yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ + +int cmDependsJava_yylex_init(yyscan_t* ptr_yy_globals) + +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) cmDependsJava_yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + memset(*ptr_yy_globals,0,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* cmDependsJava_yylex_destroy is for both reentrant and non-reentrant scanners. */ +int cmDependsJava_yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + cmDependsJava_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + cmDependsJava_yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + cmDependsJava_yyfree(yyg->yy_buffer_stack ,yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + cmDependsJava_yyfree(yyg->yy_start_stack ,yyscanner ); + yyg->yy_start_stack = NULL; + + /* Destroy the main struct (reentrant only). */ + cmDependsJava_yyfree ( yyscanner , yyscanner ); + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) +{ + register int i; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) +{ + register int n; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *cmDependsJava_yyalloc (yy_size_t size , yyscan_t) +{ + return (void *) malloc( size ); +} + +void *cmDependsJava_yyrealloc (void * ptr, yy_size_t size , yyscan_t) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void cmDependsJava_yyfree (void * ptr , yyscan_t) +{ + free( (char *) ptr ); /* see cmDependsJava_yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#undef YY_NEW_FILE +#undef YY_FLUSH_BUFFER +#undef yy_set_bol +#undef yy_new_buffer +#undef yy_set_interactive +#undef yytext_ptr +#undef YY_DO_BEFORE_ACTION + +#ifdef YY_DECL_IS_OURS +#undef YY_DECL_IS_OURS +#undef YY_DECL +#endif +#line 214 "cmDependsJavaLexer.in.l" + + + diff --git a/Source/cmDependsJavaLexer.h b/Source/cmDependsJavaLexer.h new file mode 100644 index 0000000..09c19bf --- /dev/null +++ b/Source/cmDependsJavaLexer.h @@ -0,0 +1,334 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDependsJava_yyHEADER_H +#define cmDependsJava_yyHEADER_H 1 +#define cmDependsJava_yyIN_HEADER 1 + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 31 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +#if defined(__BEOS__) || defined(__HAIKU__) +#include /* prevents a conflict with a #define later on... */ +#endif + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +int cmDependsJava_yylex_init (yyscan_t* scanner); + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +void cmDependsJava_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void cmDependsJava_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , + yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsJava_yy_create_buffer (FILE *file,int size , + yyscan_t yyscanner ); +void cmDependsJava_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmDependsJava_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmDependsJava_yypush_buffer_state (YY_BUFFER_STATE new_buffer , + yyscan_t yyscanner ); +void cmDependsJava_yypop_buffer_state (yyscan_t yyscanner ); + +YY_BUFFER_STATE cmDependsJava_yy_scan_buffer (char *base,yy_size_t size , + yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsJava_yy_scan_string (yyconst char *yy_str , + yyscan_t yyscanner ); +YY_BUFFER_STATE cmDependsJava_yy_scan_bytes (yyconst char *bytes,int len , + yyscan_t yyscanner ); + +void *cmDependsJava_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *cmDependsJava_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void cmDependsJava_yyfree (void * ,yyscan_t yyscanner ); + +/* Begin user sect3 */ + +#define cmDependsJava_yywrap(n) 1 +#define YY_SKIP_YYWRAP + +#define yytext_ptr yytext_r + +#ifdef YY_HEADER_EXPORT_START_CONDITIONS +#define INITIAL 0 +#define comment 1 +#define string 2 + +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int cmDependsJava_yylex_destroy (yyscan_t yyscanner ); + +int cmDependsJava_yyget_debug (yyscan_t yyscanner ); + +void cmDependsJava_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE cmDependsJava_yyget_extra (yyscan_t yyscanner ); + +void cmDependsJava_yyset_extra (YY_EXTRA_TYPE user_defined , + yyscan_t yyscanner ); + +FILE *cmDependsJava_yyget_in (yyscan_t yyscanner ); + +void cmDependsJava_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *cmDependsJava_yyget_out (yyscan_t yyscanner ); + +void cmDependsJava_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int cmDependsJava_yyget_leng (yyscan_t yyscanner ); + +char *cmDependsJava_yyget_text (yyscan_t yyscanner ); + +int cmDependsJava_yyget_lineno (yyscan_t yyscanner ); + +void cmDependsJava_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int cmDependsJava_yywrap (yyscan_t yyscanner ); +#else +extern int cmDependsJava_yywrap (yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int cmDependsJava_yylex (yyscan_t yyscanner); + +#define YY_DECL int cmDependsJava_yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* yy_get_previous_state - get the state just before the + EOB char was reached */ + +#undef YY_NEW_FILE +#undef YY_FLUSH_BUFFER +#undef yy_set_bol +#undef yy_new_buffer +#undef yy_set_interactive +#undef yytext_ptr +#undef YY_DO_BEFORE_ACTION + +#ifdef YY_DECL_IS_OURS +#undef YY_DECL_IS_OURS +#undef YY_DECL +#endif + +#undef cmDependsJava_yyIN_HEADER +#endif /* cmDependsJava_yyHEADER_H */ diff --git a/Source/cmDependsJavaLexer.in.l b/Source/cmDependsJavaLexer.in.l new file mode 100644 index 0000000..aae7ec6 --- /dev/null +++ b/Source/cmDependsJavaLexer.in.l @@ -0,0 +1,188 @@ +%{ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run flex like this: + + flex --prefix=cmDependsJava_yy --header-file=cmDependsJavaLexer.h -ocmDependsJavaLexer.cxx cmDependsJavaLexer.in.l + +Modify cmDependsJavaLexer.c: + - remove TABs + - remove "yyscanner" argument from these methods: + yy_fatal_error, cmDependsJava_yyalloc, cmDependsJava_yyrealloc, cmDependsJava_yyfree + - remove all YY_BREAK lines occurring right after return statements + - change while ( 1 ) to for(;;) + +Modify cmDependsJavaLexer.h: + - remove TABs + - remove the yy_init_globals function + - remove the block that includes unistd.h + - remove #line directives (avoids bogus warning on old Sun) + +*/ + +#include "cmStandardLexer.h" + +#include "cmDependsJavaParserHelper.h" + +/* Replace the lexer input function. */ +#undef YY_INPUT +#define YY_INPUT(buf, result, max_size) \ + { result = yyextra->LexInput(buf, max_size); } + +/* Include the set of tokens from the parser. */ +#include "cmDependsJavaParserTokens.h" + +#define KEYWORD yylvalp->str = 0 +#define SYMBOL yylvalp->str = 0 +#define PRIMITIVE yylvalp->str = 0 + +/*--------------------------------------------------------------------------*/ +%} + +%option reentrant +%option noyywrap +%pointer + +%x comment +%x string + +%% +"/*" { BEGIN(comment); } +"*/" { BEGIN(INITIAL); } +.|\n {} + +\" { BEGIN(string); } +\" { BEGIN(INITIAL); return jp_STRINGLITERAL; } +. {} + +abstract { KEYWORD; return jp_ABSTRACT; } +assert { KEYWORD; return jp_ASSERT; } +boolean { KEYWORD; return jp_BOOLEAN_TYPE; } +break { KEYWORD; return jp_BREAK; } +byte { KEYWORD; return jp_BYTE_TYPE; } +case { KEYWORD; return jp_CASE; } +catch { KEYWORD; return jp_CATCH; } +char { KEYWORD; return jp_CHAR_TYPE; } +class { KEYWORD; return jp_CLASS; } +continue { KEYWORD; return jp_CONTINUE; } +default { KEYWORD; return jp_DEFAULT; } +do { KEYWORD; return jp_DO; } +double { KEYWORD; return jp_DOUBLE_TYPE; } +else { KEYWORD; return jp_ELSE; } +extends { KEYWORD; return jp_EXTENDS; } +final { KEYWORD; return jp_FINAL; } +finally { KEYWORD; return jp_FINALLY; } +float { KEYWORD; return jp_FLOAT_TYPE; } +for { KEYWORD; return jp_FOR; } +if { KEYWORD; return jp_IF; } +implements { KEYWORD; return jp_IMPLEMENTS; } +import { KEYWORD; return jp_IMPORT; } +instanceof { KEYWORD; return jp_INSTANCEOF; } +int { KEYWORD; return jp_INT_TYPE; } +interface { KEYWORD; return jp_INTERFACE; } +long { KEYWORD; return jp_LONG_TYPE; } +native { KEYWORD; return jp_NATIVE; } +new { KEYWORD; return jp_NEW; } +package { KEYWORD; return jp_PACKAGE; } +private { KEYWORD; return jp_PRIVATE; } +protected { KEYWORD; return jp_PROTECTED; } +public { KEYWORD; return jp_PUBLIC; } +return { KEYWORD; return jp_RETURN; } +short { KEYWORD; return jp_SHORT_TYPE; } +static { KEYWORD; return jp_STATIC; } +strictfp { KEYWORD; return jp_STRICTFP; } +super { KEYWORD; return jp_SUPER; } +switch { KEYWORD; return jp_SWITCH; } +synchronized { KEYWORD; return jp_SYNCHRONIZED; } +this { KEYWORD; return jp_THIS; } +throw { KEYWORD; return jp_THROW; } +throws { KEYWORD; return jp_THROWS; } +transient { KEYWORD; return jp_TRANSIENT; } +try { KEYWORD; return jp_TRY; } +void { KEYWORD; return jp_VOID; } +volatile { KEYWORD; return jp_VOLATILE; } +while { KEYWORD; return jp_WHILE; } + +(true|false) { PRIMITIVE; return jp_BOOLEANLITERAL; } +\'([^\\]|\\.|\\u[0-9a-fA-F]*|\\[0-7]*)\' { PRIMITIVE; return jp_CHARACTERLITERAL; } +(0|[0-9]+)[lL]? { PRIMITIVE; return jp_DECIMALINTEGERLITERAL; } +([0-9]+\.[0-9]*|\.[0-9]+|[0-9]+)([eE][+\-]?[0-9]+)?[fFdD]? { PRIMITIVE; return jp_FLOATINGPOINTLITERAL; } +0[xX][0-9a-fA-F]+[lL]? { PRIMITIVE; return jp_HEXINTEGERLITERAL; } +null { PRIMITIVE; return jp_NULLLITERAL; } + +"&" { SYMBOL; return jp_AND; } +"&&" { SYMBOL; return jp_ANDAND; } +"&=" { SYMBOL; return jp_ANDEQUALS; } +"\]" { SYMBOL; return jp_BRACKETEND; } +"\[" { SYMBOL; return jp_BRACKETSTART; } +"\^" { SYMBOL; return jp_CARROT; } +"\^=" { SYMBOL; return jp_CARROTEQUALS; } +":" { SYMBOL; return jp_COLON; } +"," { SYMBOL; return jp_COMMA; } +"}" { SYMBOL; return jp_CURLYEND; } +"{" { SYMBOL; return jp_CURLYSTART; } +"/" { SYMBOL; return jp_DIVIDE; } +"/=" { SYMBOL; return jp_DIVIDEEQUALS; } +"\$" { SYMBOL; return jp_DOLLAR; } +"\." { SYMBOL; return jp_DOT; } +"=" { SYMBOL; return jp_EQUALS; } +"==" { SYMBOL; return jp_EQUALSEQUALS; } +"\!" { SYMBOL; return jp_EXCLAMATION; } +"\!=" { SYMBOL; return jp_EXCLAMATIONEQUALS; } +">" { SYMBOL; return jp_GREATER; } +">=" { SYMBOL; return jp_GTEQUALS; } +">>" { SYMBOL; return jp_GTGT; } +">>=" { SYMBOL; return jp_GTGTEQUALS; } +">>>" { SYMBOL; return jp_GTGTGT; } +">>>=" { SYMBOL; return jp_GTGTGTEQUALS; } +"<<=" { SYMBOL; return jp_LESLESEQUALS; } +"<" { SYMBOL; return jp_LESSTHAN; } +"<=" { SYMBOL; return jp_LTEQUALS; } +"<<" { SYMBOL; return jp_LTLT; } +"-" { SYMBOL; return jp_MINUS; } +"-=" { SYMBOL; return jp_MINUSEQUALS; } +"--" { SYMBOL; return jp_MINUSMINUS; } +"\)" { SYMBOL; return jp_PAREEND; } +"\(" { SYMBOL; return jp_PARESTART; } +"%" { SYMBOL; return jp_PERCENT; } +"%=" { SYMBOL; return jp_PERCENTEQUALS; } +"\|" { SYMBOL; return jp_PIPE; } +"\|=" { SYMBOL; return jp_PIPEEQUALS; } +"\|\|" { SYMBOL; return jp_PIPEPIPE; } +"\+" { SYMBOL; return jp_PLUS; } +"\+=" { SYMBOL; return jp_PLUSEQUALS; } +"\+\+" { SYMBOL; return jp_PLUSPLUS; } +"\?" { SYMBOL; return jp_QUESTION; } +";" { SYMBOL; return jp_SEMICOL; } +"\~" { SYMBOL; return jp_TILDE; } +"\*" { SYMBOL; return jp_TIMES; } +"\*=" { SYMBOL; return jp_TIMESEQUALS; } + +[a-z_A-Z][a-z_0-9A-Z]* { + yyextra->AllocateParserType(yylvalp, yytext, strlen(yytext)); + return jp_NAME; +} + +\/\/.*\n { } +[ \f\t\n\r] { } +. { + std::cerr << "Unknown character: " << yytext[0] + << " (" << (int)yytext[0] << ")" << std::endl; + yyextra->Error("Unknown character"); + return jp_ERROR; +} + +%% diff --git a/Source/cmDependsJavaParser.cxx b/Source/cmDependsJavaParser.cxx new file mode 100644 index 0000000..7f7c385 --- /dev/null +++ b/Source/cmDependsJavaParser.cxx @@ -0,0 +1,6021 @@ +/* A Bison parser, made by GNU Bison 1.875d. */ + +/* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, + 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Written by Richard Stallman by simplifying the original so called + ``semantic'' parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* turn off some warning as this is generated code */ +#if defined(_MSC_VER) +# pragma warning ( disable : 4702 ) /* unreachable code */ +#endif + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* If NAME_PREFIX is specified substitute the variables and functions + names. */ +#define yyparse cmDependsJava_yyparse +#define yylex cmDependsJava_yylex +#define yyerror cmDependsJava_yyerror +#define yylval cmDependsJava_yylval +#define yychar cmDependsJava_yychar +#define yydebug cmDependsJava_yydebug +#define yynerrs cmDependsJava_yynerrs + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + jp_ABSTRACT = 258, + jp_ASSERT = 259, + jp_BOOLEAN_TYPE = 260, + jp_BREAK = 261, + jp_BYTE_TYPE = 262, + jp_CASE = 263, + jp_CATCH = 264, + jp_CHAR_TYPE = 265, + jp_CLASS = 266, + jp_CONTINUE = 267, + jp_DEFAULT = 268, + jp_DO = 269, + jp_DOUBLE_TYPE = 270, + jp_ELSE = 271, + jp_EXTENDS = 272, + jp_FINAL = 273, + jp_FINALLY = 274, + jp_FLOAT_TYPE = 275, + jp_FOR = 276, + jp_IF = 277, + jp_IMPLEMENTS = 278, + jp_IMPORT = 279, + jp_INSTANCEOF = 280, + jp_INT_TYPE = 281, + jp_INTERFACE = 282, + jp_LONG_TYPE = 283, + jp_NATIVE = 284, + jp_NEW = 285, + jp_PACKAGE = 286, + jp_PRIVATE = 287, + jp_PROTECTED = 288, + jp_PUBLIC = 289, + jp_RETURN = 290, + jp_SHORT_TYPE = 291, + jp_STATIC = 292, + jp_STRICTFP = 293, + jp_SUPER = 294, + jp_SWITCH = 295, + jp_SYNCHRONIZED = 296, + jp_THIS = 297, + jp_THROW = 298, + jp_THROWS = 299, + jp_TRANSIENT = 300, + jp_TRY = 301, + jp_VOID = 302, + jp_VOLATILE = 303, + jp_WHILE = 304, + jp_BOOLEANLITERAL = 305, + jp_CHARACTERLITERAL = 306, + jp_DECIMALINTEGERLITERAL = 307, + jp_FLOATINGPOINTLITERAL = 308, + jp_HEXINTEGERLITERAL = 309, + jp_NULLLITERAL = 310, + jp_STRINGLITERAL = 311, + jp_NAME = 312, + jp_AND = 313, + jp_ANDAND = 314, + jp_ANDEQUALS = 315, + jp_BRACKETEND = 316, + jp_BRACKETSTART = 317, + jp_CARROT = 318, + jp_CARROTEQUALS = 319, + jp_COLON = 320, + jp_COMMA = 321, + jp_CURLYEND = 322, + jp_CURLYSTART = 323, + jp_DIVIDE = 324, + jp_DIVIDEEQUALS = 325, + jp_DOLLAR = 326, + jp_DOT = 327, + jp_EQUALS = 328, + jp_EQUALSEQUALS = 329, + jp_EXCLAMATION = 330, + jp_EXCLAMATIONEQUALS = 331, + jp_GREATER = 332, + jp_GTEQUALS = 333, + jp_GTGT = 334, + jp_GTGTEQUALS = 335, + jp_GTGTGT = 336, + jp_GTGTGTEQUALS = 337, + jp_LESLESEQUALS = 338, + jp_LESSTHAN = 339, + jp_LTEQUALS = 340, + jp_LTLT = 341, + jp_MINUS = 342, + jp_MINUSEQUALS = 343, + jp_MINUSMINUS = 344, + jp_PAREEND = 345, + jp_PARESTART = 346, + jp_PERCENT = 347, + jp_PERCENTEQUALS = 348, + jp_PIPE = 349, + jp_PIPEEQUALS = 350, + jp_PIPEPIPE = 351, + jp_PLUS = 352, + jp_PLUSEQUALS = 353, + jp_PLUSPLUS = 354, + jp_QUESTION = 355, + jp_SEMICOL = 356, + jp_TILDE = 357, + jp_TIMES = 358, + jp_TIMESEQUALS = 359, + jp_ERROR = 360 + }; +#endif +#define jp_ABSTRACT 258 +#define jp_ASSERT 259 +#define jp_BOOLEAN_TYPE 260 +#define jp_BREAK 261 +#define jp_BYTE_TYPE 262 +#define jp_CASE 263 +#define jp_CATCH 264 +#define jp_CHAR_TYPE 265 +#define jp_CLASS 266 +#define jp_CONTINUE 267 +#define jp_DEFAULT 268 +#define jp_DO 269 +#define jp_DOUBLE_TYPE 270 +#define jp_ELSE 271 +#define jp_EXTENDS 272 +#define jp_FINAL 273 +#define jp_FINALLY 274 +#define jp_FLOAT_TYPE 275 +#define jp_FOR 276 +#define jp_IF 277 +#define jp_IMPLEMENTS 278 +#define jp_IMPORT 279 +#define jp_INSTANCEOF 280 +#define jp_INT_TYPE 281 +#define jp_INTERFACE 282 +#define jp_LONG_TYPE 283 +#define jp_NATIVE 284 +#define jp_NEW 285 +#define jp_PACKAGE 286 +#define jp_PRIVATE 287 +#define jp_PROTECTED 288 +#define jp_PUBLIC 289 +#define jp_RETURN 290 +#define jp_SHORT_TYPE 291 +#define jp_STATIC 292 +#define jp_STRICTFP 293 +#define jp_SUPER 294 +#define jp_SWITCH 295 +#define jp_SYNCHRONIZED 296 +#define jp_THIS 297 +#define jp_THROW 298 +#define jp_THROWS 299 +#define jp_TRANSIENT 300 +#define jp_TRY 301 +#define jp_VOID 302 +#define jp_VOLATILE 303 +#define jp_WHILE 304 +#define jp_BOOLEANLITERAL 305 +#define jp_CHARACTERLITERAL 306 +#define jp_DECIMALINTEGERLITERAL 307 +#define jp_FLOATINGPOINTLITERAL 308 +#define jp_HEXINTEGERLITERAL 309 +#define jp_NULLLITERAL 310 +#define jp_STRINGLITERAL 311 +#define jp_NAME 312 +#define jp_AND 313 +#define jp_ANDAND 314 +#define jp_ANDEQUALS 315 +#define jp_BRACKETEND 316 +#define jp_BRACKETSTART 317 +#define jp_CARROT 318 +#define jp_CARROTEQUALS 319 +#define jp_COLON 320 +#define jp_COMMA 321 +#define jp_CURLYEND 322 +#define jp_CURLYSTART 323 +#define jp_DIVIDE 324 +#define jp_DIVIDEEQUALS 325 +#define jp_DOLLAR 326 +#define jp_DOT 327 +#define jp_EQUALS 328 +#define jp_EQUALSEQUALS 329 +#define jp_EXCLAMATION 330 +#define jp_EXCLAMATIONEQUALS 331 +#define jp_GREATER 332 +#define jp_GTEQUALS 333 +#define jp_GTGT 334 +#define jp_GTGTEQUALS 335 +#define jp_GTGTGT 336 +#define jp_GTGTGTEQUALS 337 +#define jp_LESLESEQUALS 338 +#define jp_LESSTHAN 339 +#define jp_LTEQUALS 340 +#define jp_LTLT 341 +#define jp_MINUS 342 +#define jp_MINUSEQUALS 343 +#define jp_MINUSMINUS 344 +#define jp_PAREEND 345 +#define jp_PARESTART 346 +#define jp_PERCENT 347 +#define jp_PERCENTEQUALS 348 +#define jp_PIPE 349 +#define jp_PIPEEQUALS 350 +#define jp_PIPEPIPE 351 +#define jp_PLUS 352 +#define jp_PLUSEQUALS 353 +#define jp_PLUSPLUS 354 +#define jp_QUESTION 355 +#define jp_SEMICOL 356 +#define jp_TILDE 357 +#define jp_TIMES 358 +#define jp_TIMESEQUALS 359 +#define jp_ERROR 360 + + + + +/* Copy the first part of user declarations. */ +#line 1 "cmDependsJavaParser.y" + +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run bison like this: + + bison --yacc --name-prefix=cmDependsJava_yy + --defines=cmDependsJavaParserTokens.h -ocmDependsJavaParser.cxx + cmDependsJavaParser.y + +Modify cmDependsJavaParser.c: + - remove TABs + +*/ + +/* Configure the parser to use a lexer object. */ +#define YYPARSE_PARAM yyscanner +#define YYLEX_PARAM yyscanner +#define YYERROR_VERBOSE 1 +#define cmDependsJava_yyerror(x) \ + cmDependsJavaError(yyscanner, x) +#define yyGetParser (cmDependsJava_yyget_extra(yyscanner)) + +/*-------------------------------------------------------------------------*/ +#include "cmDependsJavaParserHelper.h" /* Interface to parser object. */ +#include "cmDependsJavaLexer.h" /* Interface to lexer object. */ +#include "cmDependsJavaParserTokens.h" /* Need YYSTYPE for YY_DECL. */ + +/* Forward declare the lexer entry point. */ +YY_DECL; + +/* Internal utility functions. */ +static void cmDependsJavaError(yyscan_t yyscanner, const char* message); + +#define YYDEBUG 1 +#define YYMAXDEPTH 1000000 + + +#define jpCheckEmpty(cnt) yyGetParser->CheckEmpty(__LINE__, cnt, yyvsp); +#define jpElementStart(cnt) yyGetParser->PrepareElement(&yyval) +#define jpStoreClass(str) \ +yyGetParser->AddClassFound(str); yyGetParser->DeallocateParserType(&(str)) +/* Disable some warnings in the generated code. */ +#ifdef __BORLANDC__ +# pragma warn -8004 /* Variable assigned a value that is not used. */ +# pragma warn -8008 /* condition always returns true */ +# pragma warn -8060 /* possibly incorrect assignment */ +# pragma warn -8066 /* unreachable code */ +#endif +#ifdef _MSC_VER +# pragma warning (disable: 4102) /* Unused goto label. */ +# pragma warning (disable: 4065) /* Switch statement contains default but + no case. */ +#endif + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 214 of yacc.c. */ +#line 372 "cmDependsJavaParser.cxx" + +#if ! defined (yyoverflow) || YYERROR_VERBOSE + +# ifndef YYFREE +# define YYFREE free +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# endif + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# define YYSTACK_ALLOC alloca +# endif +# else +# if defined (alloca) || defined (_ALLOCA_H) +# define YYSTACK_ALLOC alloca +# else +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# else +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# endif +#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ + + +#if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + short int yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined (__GNUC__) && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + register YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (0) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined (__STDC__) || defined (__cplusplus) + typedef signed char yysigned_char; +#else + typedef short int yysigned_char; +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 23 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 2215 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 106 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 158 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 351 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 575 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 360 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const unsigned char yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const unsigned short int yyprhs[] = +{ + 0, 0, 3, 5, 7, 9, 11, 13, 15, 17, + 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, + 39, 41, 43, 45, 47, 49, 51, 54, 57, 59, + 61, 63, 65, 68, 72, 76, 80, 84, 86, 88, + 92, 93, 95, 96, 99, 100, 103, 107, 109, 111, + 115, 121, 123, 125, 127, 129, 132, 134, 136, 138, + 140, 142, 144, 146, 148, 150, 152, 154, 158, 161, + 165, 169, 174, 175, 177, 180, 183, 185, 189, 193, + 194, 197, 199, 201, 203, 205, 207, 209, 214, 216, + 220, 222, 226, 228, 232, 234, 236, 239, 242, 246, + 251, 256, 257, 259, 264, 268, 269, 271, 273, 277, + 281, 284, 286, 290, 292, 295, 300, 306, 311, 316, + 317, 320, 326, 332, 336, 340, 341, 343, 346, 350, + 354, 355, 358, 360, 362, 364, 367, 369, 372, 374, + 377, 379, 382, 386, 387, 389, 392, 394, 398, 402, + 403, 405, 407, 410, 412, 414, 416, 419, 423, 426, + 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, + 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, + 468, 470, 472, 474, 478, 482, 485, 487, 489, 491, + 493, 495, 497, 499, 505, 513, 521, 527, 532, 533, + 535, 536, 539, 542, 544, 547, 551, 554, 560, 566, + 574, 584, 585, 587, 588, 590, 600, 601, 603, 605, + 607, 609, 611, 615, 619, 625, 629, 630, 632, 636, + 640, 644, 650, 654, 659, 660, 662, 664, 667, 673, + 676, 678, 680, 682, 684, 688, 690, 692, 694, 696, + 703, 704, 706, 707, 709, 711, 715, 720, 725, 730, + 735, 736, 738, 740, 743, 747, 750, 754, 758, 762, + 766, 770, 775, 782, 789, 796, 801, 806, 808, 810, + 814, 816, 818, 821, 824, 826, 828, 831, 834, 836, + 839, 842, 844, 847, 850, 852, 858, 863, 869, 871, + 875, 879, 883, 885, 889, 893, 895, 899, 903, 907, + 909, 913, 917, 921, 925, 929, 931, 935, 939, 941, + 945, 947, 951, 953, 957, 959, 963, 965, 969, 971, + 977, 979, 981, 985, 987, 989, 991, 993, 995, 997, + 999, 1001, 1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, + 1019, 1021 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const short int yyrhs[] = +{ + 107, 0, -1, 122, -1, 109, -1, 53, -1, 50, + -1, 51, -1, 56, -1, 55, -1, 52, -1, 54, + -1, 111, -1, 112, -1, 7, -1, 36, -1, 26, + -1, 28, -1, 10, -1, 20, -1, 15, -1, 5, + -1, 113, -1, 116, -1, 117, -1, 113, -1, 113, + -1, 111, 234, -1, 117, 234, -1, 118, -1, 120, + -1, 119, -1, 57, -1, 71, 57, -1, 117, 72, + 119, -1, 117, 72, 11, -1, 117, 72, 42, -1, + 121, 72, 11, -1, 111, -1, 47, -1, 123, 124, + 125, -1, -1, 126, -1, -1, 124, 127, -1, -1, + 125, 130, -1, 31, 117, 101, -1, 128, -1, 129, + -1, 24, 117, 101, -1, 24, 117, 72, 103, 101, + -1, 134, -1, 165, -1, 101, -1, 132, -1, 131, + 132, -1, 34, -1, 33, -1, 32, -1, 37, -1, + 3, -1, 18, -1, 29, -1, 41, -1, 45, -1, + 48, -1, 38, -1, 135, 11, 119, -1, 133, 139, + -1, 133, 137, 139, -1, 133, 136, 139, -1, 133, + 136, 137, 139, -1, -1, 131, -1, 17, 114, -1, + 23, 138, -1, 115, -1, 138, 66, 115, -1, 68, + 140, 67, -1, -1, 140, 141, -1, 142, -1, 158, + -1, 159, -1, 130, -1, 143, -1, 148, -1, 135, + 110, 144, 101, -1, 145, -1, 144, 66, 145, -1, + 146, -1, 146, 73, 147, -1, 119, -1, 146, 62, + 61, -1, 261, -1, 174, -1, 149, 101, -1, 149, + 157, -1, 149, 157, 101, -1, 135, 110, 151, 150, + -1, 135, 47, 151, 150, -1, -1, 155, -1, 119, + 91, 152, 90, -1, 151, 62, 61, -1, -1, 153, + -1, 154, -1, 153, 66, 154, -1, 135, 110, 146, + -1, 44, 156, -1, 114, -1, 156, 66, 114, -1, + 177, -1, 37, 177, -1, 135, 160, 150, 161, -1, + 135, 160, 150, 161, 101, -1, 118, 91, 152, 90, + -1, 68, 162, 178, 67, -1, -1, 162, 163, -1, + 42, 91, 228, 90, 101, -1, 39, 91, 228, 90, + 101, -1, 135, 27, 119, -1, 164, 166, 168, -1, + -1, 167, -1, 17, 115, -1, 167, 66, 115, -1, + 68, 169, 67, -1, -1, 169, 170, -1, 171, -1, + 172, -1, 134, -1, 134, 101, -1, 165, -1, 165, + 101, -1, 143, -1, 149, 173, -1, 101, -1, 173, + 101, -1, 68, 175, 67, -1, -1, 176, -1, 176, + 66, -1, 147, -1, 176, 66, 147, -1, 68, 178, + 67, -1, -1, 179, -1, 180, -1, 179, 180, -1, + 181, -1, 183, -1, 134, -1, 182, 101, -1, 131, + 110, 144, -1, 110, 144, -1, 185, -1, 187, -1, + 191, -1, 192, -1, 201, -1, 204, -1, 185, -1, + 188, -1, 193, -1, 202, -1, 207, -1, 177, -1, + 186, -1, 189, -1, 194, -1, 203, -1, 213, -1, + 215, -1, 216, -1, 218, -1, 217, -1, 219, -1, + 212, -1, 101, -1, 119, 65, 183, -1, 119, 65, + 184, -1, 190, 101, -1, 258, -1, 242, -1, 243, + -1, 239, -1, 240, -1, 236, -1, 226, -1, 22, + 91, 261, 90, 183, -1, 22, 91, 261, 90, 184, + 16, 183, -1, 22, 91, 261, 90, 184, 16, 184, + -1, 40, 91, 261, 90, 195, -1, 68, 197, 196, + 67, -1, -1, 199, -1, -1, 197, 198, -1, 199, + 179, -1, 200, -1, 199, 200, -1, 8, 262, 65, + -1, 13, 65, -1, 49, 91, 261, 90, 183, -1, + 49, 91, 261, 90, 184, -1, 14, 183, 49, 91, + 261, 90, 101, -1, 21, 91, 206, 101, 208, 101, + 205, 90, 183, -1, -1, 210, -1, -1, 209, -1, + 21, 91, 206, 101, 208, 101, 205, 90, 184, -1, + -1, 261, -1, 211, -1, 182, -1, 211, -1, 190, + -1, 211, 66, 190, -1, 4, 261, 101, -1, 4, + 261, 65, 261, 101, -1, 6, 214, 101, -1, -1, + 119, -1, 12, 214, 101, -1, 35, 208, 101, -1, + 43, 261, 101, -1, 41, 91, 261, 90, 177, -1, + 46, 177, 221, -1, 46, 177, 220, 223, -1, -1, + 221, -1, 222, -1, 221, 222, -1, 9, 91, 154, + 90, 177, -1, 19, 177, -1, 225, -1, 230, -1, + 108, -1, 42, -1, 91, 261, 90, -1, 226, -1, + 235, -1, 236, -1, 237, -1, 263, 114, 91, 228, + 90, 227, -1, -1, 139, -1, -1, 229, -1, 261, + -1, 229, 66, 261, -1, 263, 111, 232, 231, -1, + 263, 113, 232, 231, -1, 263, 111, 234, 174, -1, + 263, 113, 234, 174, -1, -1, 234, -1, 233, -1, + 232, 233, -1, 62, 261, 61, -1, 62, 61, -1, + 234, 62, 61, -1, 224, 72, 119, -1, 39, 72, + 119, -1, 42, 72, 119, -1, 224, 72, 42, -1, + 117, 91, 228, 90, -1, 224, 72, 119, 91, 228, + 90, -1, 39, 72, 119, 91, 228, 90, -1, 42, + 72, 119, 91, 228, 90, -1, 117, 62, 261, 61, + -1, 225, 62, 261, 61, -1, 224, -1, 117, -1, + 116, 72, 11, -1, 239, -1, 240, -1, 238, 99, + -1, 238, 89, -1, 242, -1, 243, -1, 97, 241, + -1, 87, 241, -1, 244, -1, 99, 241, -1, 89, + 241, -1, 238, -1, 102, 241, -1, 75, 241, -1, + 245, -1, 91, 111, 231, 90, 241, -1, 91, 261, + 90, 244, -1, 91, 117, 234, 90, 244, -1, 241, + -1, 246, 103, 241, -1, 246, 69, 241, -1, 246, + 92, 241, -1, 246, -1, 247, 97, 246, -1, 247, + 87, 246, -1, 247, -1, 248, 86, 247, -1, 248, + 79, 247, -1, 248, 81, 247, -1, 248, -1, 249, + 84, 248, -1, 249, 77, 248, -1, 249, 85, 248, + -1, 249, 78, 248, -1, 249, 25, 112, -1, 249, + -1, 250, 74, 249, -1, 250, 76, 249, -1, 250, + -1, 251, 58, 250, -1, 251, -1, 252, 63, 251, + -1, 252, -1, 253, 94, 252, -1, 253, -1, 254, + 59, 253, -1, 254, -1, 255, 96, 254, -1, 255, + -1, 255, 100, 261, 65, 256, -1, 256, -1, 258, + -1, 259, 260, 257, -1, 117, -1, 235, -1, 237, + -1, 73, -1, 104, -1, 70, -1, 93, -1, 98, + -1, 88, -1, 83, -1, 80, -1, 82, -1, 60, + -1, 64, -1, 95, -1, 257, -1, 261, -1, 30, + -1, 117, 72, 30, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const unsigned short int yyrline[] = +{ + 0, 191, 191, 200, 208, 216, 224, 232, 240, 249, + 257, 266, 274, 283, 288, 293, 298, 303, 308, 313, + 318, 324, 332, 341, 351, 360, 369, 377, 387, 393, + 400, 407, 413, 420, 429, 439, 449, 458, 466, 475, + 484, 490, 499, 505, 514, 520, 529, 541, 549, 558, + 570, 583, 591, 599, 608, 616, 625, 625, 625, 626, + 627, 627, 627, 627, 627, 627, 628, 631, 641, 650, + 659, 668, 678, 684, 693, 702, 711, 719, 728, 737, + 743, 752, 760, 768, 776, 785, 793, 802, 808, 816, + 825, 833, 842, 851, 860, 868, 877, 885, 893, 902, + 911, 921, 928, 938, 948, 955, 962, 965, 971, 981, + 991, 1001, 1007, 1017, 1027, 1037, 1046, 1056, 1067, 1077, + 1084, 1094, 1103, 1113, 1122, 1132, 1138, 1148, 1157, 1167, + 1177, 1184, 1193, 1202, 1211, 1220, 1228, 1237, 1246, 1256, + 1266, 1275, 1285, 1295, 1302, 1311, 1321, 1330, 1340, 1349, + 1356, 1366, 1375, 1385, 1394, 1403, 1413, 1423, 1432, 1442, + 1451, 1460, 1469, 1478, 1487, 1497, 1506, 1515, 1524, 1533, + 1543, 1552, 1561, 1570, 1579, 1588, 1597, 1606, 1615, 1624, + 1633, 1642, 1652, 1662, 1673, 1683, 1693, 1702, 1711, 1720, + 1729, 1738, 1747, 1757, 1767, 1777, 1787, 1794, 1801, 1808, + 1818, 1825, 1835, 1845, 1854, 1864, 1873, 1883, 1890, 1897, + 1904, 1912, 1919, 1929, 1936, 1946, 1956, 1963, 1973, 1982, + 1992, 2002, 2011, 2021, 2030, 2040, 2051, 2058, 2065, 2076, + 2086, 2096, 2106, 2115, 2125, 2132, 2142, 2151, 2161, 2168, + 2178, 2187, 2197, 2206, 2212, 2221, 2230, 2239, 2248, 2258, + 2268, 2275, 2285, 2292, 2302, 2311, 2321, 2330, 2339, 2348, + 2358, 2365, 2375, 2384, 2394, 2404, 2410, 2417, 2427, 2437, + 2447, 2458, 2468, 2479, 2489, 2500, 2510, 2520, 2529, 2538, + 2547, 2556, 2566, 2576, 2586, 2595, 2604, 2613, 2622, 2632, + 2642, 2652, 2661, 2670, 2679, 2689, 2698, 2707, 2714, 2723, + 2732, 2741, 2751, 2760, 2769, 2779, 2788, 2797, 2806, 2816, + 2825, 2834, 2843, 2852, 2861, 2871, 2880, 2889, 2899, 2908, + 2918, 2927, 2937, 2946, 2956, 2965, 2975, 2984, 2994, 3003, + 3013, 3022, 3032, 3042, 3052, 3061, 3071, 3080, 3089, 3098, + 3107, 3116, 3125, 3134, 3143, 3152, 3161, 3170, 3180, 3190, + 3200, 3209 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE +/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "jp_ABSTRACT", "jp_ASSERT", + "jp_BOOLEAN_TYPE", "jp_BREAK", "jp_BYTE_TYPE", "jp_CASE", "jp_CATCH", + "jp_CHAR_TYPE", "jp_CLASS", "jp_CONTINUE", "jp_DEFAULT", "jp_DO", + "jp_DOUBLE_TYPE", "jp_ELSE", "jp_EXTENDS", "jp_FINAL", "jp_FINALLY", + "jp_FLOAT_TYPE", "jp_FOR", "jp_IF", "jp_IMPLEMENTS", "jp_IMPORT", + "jp_INSTANCEOF", "jp_INT_TYPE", "jp_INTERFACE", "jp_LONG_TYPE", + "jp_NATIVE", "jp_NEW", "jp_PACKAGE", "jp_PRIVATE", "jp_PROTECTED", + "jp_PUBLIC", "jp_RETURN", "jp_SHORT_TYPE", "jp_STATIC", "jp_STRICTFP", + "jp_SUPER", "jp_SWITCH", "jp_SYNCHRONIZED", "jp_THIS", "jp_THROW", + "jp_THROWS", "jp_TRANSIENT", "jp_TRY", "jp_VOID", "jp_VOLATILE", + "jp_WHILE", "jp_BOOLEANLITERAL", "jp_CHARACTERLITERAL", + "jp_DECIMALINTEGERLITERAL", "jp_FLOATINGPOINTLITERAL", + "jp_HEXINTEGERLITERAL", "jp_NULLLITERAL", "jp_STRINGLITERAL", "jp_NAME", + "jp_AND", "jp_ANDAND", "jp_ANDEQUALS", "jp_BRACKETEND", + "jp_BRACKETSTART", "jp_CARROT", "jp_CARROTEQUALS", "jp_COLON", + "jp_COMMA", "jp_CURLYEND", "jp_CURLYSTART", "jp_DIVIDE", + "jp_DIVIDEEQUALS", "jp_DOLLAR", "jp_DOT", "jp_EQUALS", "jp_EQUALSEQUALS", + "jp_EXCLAMATION", "jp_EXCLAMATIONEQUALS", "jp_GREATER", "jp_GTEQUALS", + "jp_GTGT", "jp_GTGTEQUALS", "jp_GTGTGT", "jp_GTGTGTEQUALS", + "jp_LESLESEQUALS", "jp_LESSTHAN", "jp_LTEQUALS", "jp_LTLT", "jp_MINUS", + "jp_MINUSEQUALS", "jp_MINUSMINUS", "jp_PAREEND", "jp_PARESTART", + "jp_PERCENT", "jp_PERCENTEQUALS", "jp_PIPE", "jp_PIPEEQUALS", + "jp_PIPEPIPE", "jp_PLUS", "jp_PLUSEQUALS", "jp_PLUSPLUS", "jp_QUESTION", + "jp_SEMICOL", "jp_TILDE", "jp_TIMES", "jp_TIMESEQUALS", "jp_ERROR", + "$accept", "Goal", "Literal", "IntegerLiteral", "Type", "PrimitiveType", + "ReferenceType", "ClassOrInterfaceType", "ClassType", "InterfaceType", + "ArrayType", "Name", "SimpleName", "Identifier", "QualifiedName", + "SimpleType", "CompilationUnit", "PackageDeclarationopt", + "ImportDeclarations", "TypeDeclarations", "PackageDeclaration", + "ImportDeclaration", "SingleTypeImportDeclaration", + "TypeImportOnDemandDeclaration", "TypeDeclaration", "Modifiers", + "Modifier", "ClassHeader", "ClassDeclaration", "Modifiersopt", "Super", + "Interfaces", "InterfaceTypeList", "ClassBody", "ClassBodyDeclarations", + "ClassBodyDeclaration", "ClassMemberDeclaration", "FieldDeclaration", + "VariableDeclarators", "VariableDeclarator", "VariableDeclaratorId", + "VariableInitializer", "MethodDeclaration", "MethodHeader", "Throwsopt", + "MethodDeclarator", "FormalParameterListopt", "FormalParameterList", + "FormalParameter", "Throws", "ClassTypeList", "MethodBody", + "StaticInitializer", "ConstructorDeclaration", "ConstructorDeclarator", + "ConstructorBody", "ExplicitConstructorInvocationopt", + "ExplicitConstructorInvocation", "InterfaceHeader", + "InterfaceDeclaration", "ExtendsInterfacesopt", "ExtendsInterfaces", + "InterfaceBody", "InterfaceMemberDeclarations", + "InterfaceMemberDeclaration", "ConstantDeclaration", + "AbstractMethodDeclaration", "Semicols", "ArrayInitializer", + "VariableInitializersOptional", "VariableInitializers", "Block", + "BlockStatementsopt", "BlockStatements", "BlockStatement", + "LocalVariableDeclarationStatement", "LocalVariableDeclaration", + "Statement", "StatementNoShortIf", + "StatementWithoutTrailingSubstatement", "EmptyStatement", + "LabeledStatement", "LabeledStatementNoShortIf", "ExpressionStatement", + "StatementExpression", "IfThenStatement", "IfThenElseStatement", + "IfThenElseStatementNoShortIf", "SwitchStatement", "SwitchBlock", + "SwitchLabelsopt", "SwitchBlockStatementGroups", + "SwitchBlockStatementGroup", "SwitchLabels", "SwitchLabel", + "WhileStatement", "WhileStatementNoShortIf", "DoStatement", + "ForStatement", "ForUpdateopt", "ForInitopt", "ForStatementNoShortIf", + "Expressionopt", "ForInit", "ForUpdate", "StatementExpressionList", + "AssertStatement", "BreakStatement", "Identifieropt", + "ContinueStatement", "ReturnStatement", "ThrowStatement", + "SynchronizedStatement", "TryStatement", "Catchesopt", "Catches", + "CatchClause", "Finally", "Primary", "PrimaryNoNewArray", + "ClassInstanceCreationExpression", "ClassBodyOpt", "ArgumentListopt", + "ArgumentList", "ArrayCreationExpression", "Dimsopt", "DimExprs", + "DimExpr", "Dims", "FieldAccess", "MethodInvocation", "ArrayAccess", + "PostfixExpression", "PostIncrementExpression", + "PostDecrementExpression", "UnaryExpression", "PreIncrementExpression", + "PreDecrementExpression", "UnaryExpressionNotPlusMinus", + "CastExpression", "MultiplicativeExpression", "AdditiveExpression", + "ShiftExpression", "RelationalExpression", "EqualityExpression", + "AndExpression", "ExclusiveOrExpression", "InclusiveOrExpression", + "ConditionalAndExpression", "ConditionalOrExpression", + "ConditionalExpression", "AssignmentExpression", "Assignment", + "LeftHandSide", "AssignmentOperator", "Expression", "ConstantExpression", + "New", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const unsigned short int yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const unsigned short int yyr1[] = +{ + 0, 106, 107, 108, 108, 108, 108, 108, 108, 109, + 109, 110, 110, 111, 111, 111, 111, 111, 111, 111, + 111, 112, 112, 113, 114, 115, 116, 116, 117, 117, + 118, 119, 119, 120, 120, 120, 120, 121, 121, 122, + 123, 123, 124, 124, 125, 125, 126, 127, 127, 128, + 129, 130, 130, 130, 131, 131, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 133, 134, 134, + 134, 134, 135, 135, 136, 137, 138, 138, 139, 140, + 140, 141, 141, 141, 141, 142, 142, 143, 144, 144, + 145, 145, 146, 146, 147, 147, 148, 148, 148, 149, + 149, 150, 150, 151, 151, 152, 152, 153, 153, 154, + 155, 156, 156, 157, 158, 159, 159, 160, 161, 162, + 162, 163, 163, 164, 165, 166, 166, 167, 167, 168, + 169, 169, 170, 170, 170, 170, 170, 170, 171, 172, + 173, 173, 174, 175, 175, 175, 176, 176, 177, 178, + 178, 179, 179, 180, 180, 180, 181, 182, 182, 183, + 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, + 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, + 185, 185, 186, 187, 188, 189, 190, 190, 190, 190, + 190, 190, 190, 191, 192, 193, 194, 195, 196, 196, + 197, 197, 198, 199, 199, 200, 200, 201, 202, 203, + 204, 205, 205, 206, 206, 207, 208, 208, 209, 209, + 210, 211, 211, 212, 212, 213, 214, 214, 215, 216, + 217, 218, 219, 219, 220, 220, 221, 221, 222, 223, + 224, 224, 225, 225, 225, 225, 225, 225, 225, 226, + 227, 227, 228, 228, 229, 229, 230, 230, 230, 230, + 231, 231, 232, 232, 233, 234, 234, 235, 235, 235, + 235, 236, 236, 236, 236, 237, 237, 238, 238, 238, + 238, 238, 239, 240, 241, 241, 241, 241, 241, 242, + 243, 244, 244, 244, 244, 245, 245, 245, 246, 246, + 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, + 249, 249, 249, 249, 249, 250, 250, 250, 251, 251, + 252, 252, 253, 253, 254, 254, 255, 255, 256, 256, + 257, 257, 258, 259, 259, 259, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 261, 262, + 263, 263 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const unsigned char yyr2[] = +{ + 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, + 1, 1, 2, 3, 3, 3, 3, 1, 1, 3, + 0, 1, 0, 2, 0, 2, 3, 1, 1, 3, + 5, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 2, 3, + 3, 4, 0, 1, 2, 2, 1, 3, 3, 0, + 2, 1, 1, 1, 1, 1, 1, 4, 1, 3, + 1, 3, 1, 3, 1, 1, 2, 2, 3, 4, + 4, 0, 1, 4, 3, 0, 1, 1, 3, 3, + 2, 1, 3, 1, 2, 4, 5, 4, 4, 0, + 2, 5, 5, 3, 3, 0, 1, 2, 3, 3, + 0, 2, 1, 1, 1, 2, 1, 2, 1, 2, + 1, 2, 3, 0, 1, 2, 1, 3, 3, 0, + 1, 1, 2, 1, 1, 1, 2, 3, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 3, 2, 1, 1, 1, 1, + 1, 1, 1, 5, 7, 7, 5, 4, 0, 1, + 0, 2, 2, 1, 2, 3, 2, 5, 5, 7, + 9, 0, 1, 0, 1, 9, 0, 1, 1, 1, + 1, 1, 3, 3, 5, 3, 0, 1, 3, 3, + 3, 5, 3, 4, 0, 1, 1, 2, 5, 2, + 1, 1, 1, 1, 3, 1, 1, 1, 1, 6, + 0, 1, 0, 1, 1, 3, 4, 4, 4, 4, + 0, 1, 1, 2, 3, 2, 3, 3, 3, 3, + 3, 4, 6, 6, 6, 4, 4, 1, 1, 3, + 1, 1, 2, 2, 1, 1, 2, 2, 1, 2, + 2, 1, 2, 2, 1, 5, 4, 5, 1, 3, + 3, 3, 1, 3, 3, 1, 3, 3, 3, 1, + 3, 3, 3, 3, 3, 1, 3, 3, 1, 3, + 1, 3, 1, 3, 1, 3, 1, 3, 1, 5, + 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const unsigned short int yydefact[] = +{ + 40, 0, 0, 2, 42, 41, 20, 13, 17, 19, + 18, 15, 16, 14, 38, 31, 0, 37, 0, 28, + 30, 29, 0, 1, 44, 32, 0, 46, 0, 0, + 72, 43, 47, 48, 34, 35, 33, 36, 0, 60, + 61, 62, 58, 57, 56, 59, 66, 63, 64, 65, + 53, 45, 73, 54, 0, 51, 0, 125, 52, 0, + 49, 55, 0, 0, 79, 0, 0, 68, 0, 0, + 0, 0, 126, 0, 24, 74, 23, 25, 76, 75, + 72, 0, 70, 69, 67, 123, 127, 130, 124, 0, + 50, 0, 59, 78, 84, 0, 80, 81, 85, 86, + 0, 82, 83, 71, 72, 128, 77, 72, 114, 38, + 0, 11, 12, 21, 22, 23, 28, 101, 96, 97, + 113, 129, 134, 0, 138, 0, 136, 131, 132, 133, + 0, 226, 226, 0, 0, 0, 350, 216, 0, 0, + 63, 243, 0, 0, 0, 5, 6, 9, 4, 10, + 8, 7, 0, 0, 0, 182, 242, 3, 0, 22, + 333, 30, 73, 155, 0, 170, 0, 72, 151, 153, + 0, 154, 159, 171, 160, 172, 0, 161, 162, 173, + 163, 174, 164, 181, 175, 176, 177, 179, 178, 180, + 277, 240, 245, 241, 246, 247, 248, 0, 189, 190, + 187, 188, 186, 0, 0, 0, 101, 92, 0, 88, + 90, 101, 0, 26, 27, 72, 0, 0, 102, 98, + 135, 140, 139, 137, 0, 0, 0, 0, 0, 37, + 0, 278, 245, 247, 291, 280, 281, 298, 284, 285, + 288, 294, 302, 305, 309, 315, 318, 320, 322, 324, + 326, 328, 330, 348, 331, 0, 227, 0, 0, 0, + 0, 213, 0, 0, 217, 0, 0, 0, 0, 0, + 234, 0, 278, 246, 248, 290, 0, 289, 92, 158, + 0, 0, 0, 252, 0, 0, 148, 152, 156, 185, + 0, 0, 283, 282, 345, 346, 338, 336, 343, 344, + 342, 341, 339, 347, 340, 337, 0, 37, 24, 0, + 72, 0, 100, 0, 87, 0, 0, 99, 265, 0, + 0, 0, 106, 107, 111, 110, 119, 115, 141, 293, + 287, 37, 278, 0, 286, 292, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 223, 225, + 228, 0, 0, 219, 221, 0, 214, 218, 0, 229, + 268, 0, 0, 269, 230, 0, 0, 232, 236, 0, + 244, 279, 0, 351, 0, 253, 254, 183, 157, 270, + 267, 0, 332, 0, 260, 262, 0, 260, 0, 252, + 0, 104, 89, 93, 143, 91, 95, 94, 266, 0, + 117, 72, 0, 72, 116, 0, 26, 27, 244, 300, + 301, 299, 304, 303, 307, 308, 306, 314, 311, 313, + 310, 312, 316, 317, 319, 321, 323, 325, 327, 0, + 0, 0, 216, 0, 0, 252, 0, 0, 252, 72, + 0, 233, 237, 0, 275, 271, 0, 252, 276, 0, + 256, 263, 261, 258, 257, 259, 0, 103, 146, 0, + 144, 109, 108, 112, 0, 243, 120, 0, 0, 0, + 296, 0, 224, 0, 0, 222, 0, 0, 0, 30, + 193, 0, 159, 166, 167, 168, 169, 0, 200, 196, + 231, 0, 0, 239, 207, 255, 0, 264, 250, 142, + 145, 252, 252, 118, 295, 297, 329, 0, 211, 213, + 0, 0, 0, 0, 273, 198, 274, 0, 272, 251, + 249, 147, 0, 0, 209, 0, 212, 220, 0, 0, + 0, 184, 194, 0, 0, 0, 201, 72, 203, 238, + 0, 0, 0, 216, 0, 0, 349, 0, 206, 197, + 202, 204, 122, 121, 210, 0, 0, 208, 205, 211, + 0, 0, 195, 0, 215 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const short int yydefgoto[] = +{ + -1, 2, 156, 157, 158, 229, 112, 113, 75, 78, + 230, 231, 19, 20, 21, 22, 3, 4, 24, 30, + 5, 31, 32, 33, 51, 52, 53, 54, 163, 164, + 65, 66, 79, 67, 80, 96, 97, 98, 208, 209, + 210, 405, 99, 100, 217, 206, 321, 322, 323, 218, + 325, 119, 101, 102, 117, 327, 413, 476, 57, 58, + 71, 72, 88, 104, 127, 128, 129, 222, 406, 469, + 470, 165, 166, 167, 168, 169, 170, 171, 491, 172, + 173, 174, 493, 175, 176, 177, 178, 494, 179, 499, + 545, 525, 546, 547, 548, 180, 495, 181, 182, 535, + 365, 496, 263, 366, 536, 367, 183, 184, 257, 185, + 186, 187, 188, 189, 376, 377, 378, 451, 190, 191, + 232, 530, 384, 385, 193, 415, 394, 395, 214, 194, + 233, 196, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 203, 306, 386, 557, 204 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -503 +static const short int yypact[] = +{ + 159, 1039, 236, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, 186, -503, 56, -503, + -503, -503, 178, -503, 35, -503, 21, -503, 248, 1039, + 273, -503, -503, -503, -503, -503, -503, -503, 78, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, 2088, -503, 32, -503, 16, 245, -503, 28, + -503, -503, 1039, 1039, -503, 80, 206, -503, 129, 129, + 1039, 221, 228, 194, -503, -503, 225, -503, -503, 234, + 164, 206, -503, -503, -503, -503, -503, -503, -503, 1039, + -503, 1039, 233, -503, -503, 739, -503, -503, -503, -503, + -49, -503, -503, -503, 1116, -503, -503, 1276, -503, 129, + 129, 40, -503, -503, -503, 122, 212, 265, -503, 215, + -503, -503, 219, 739, -503, 222, 224, -503, -503, -503, + 1820, 129, 129, 1627, 237, 238, -503, 1820, 241, 239, + 242, 283, 1820, 233, 266, -503, -503, -503, -503, -503, + -503, -503, 1820, 1820, 1820, -503, -503, -503, 129, 284, + 476, 293, 2067, -503, 349, -503, 296, 1366, -503, -503, + 264, -503, -503, -503, -503, -503, 268, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + 294, 305, 72, -503, 2070, 88, 2084, 121, 130, 148, + -503, -503, -503, 2111, 1039, 281, 133, 281, -25, -503, + 126, 133, 314, 315, 315, 921, 1039, 308, -503, -503, + -503, -503, 277, -503, 1820, 1820, 1820, 1820, 1820, 317, + 284, 545, -503, -503, 121, -503, -503, -503, -503, -503, + -503, -503, 73, 124, 163, 59, 196, 323, 319, 290, + 324, 18, -503, -503, -503, -30, -503, 285, 286, 242, + 342, 1941, 1820, 291, -503, 129, 1820, 1820, 129, 292, + 385, 1820, 96, -503, -503, -503, 310, -503, -503, 329, + 387, 1085, 3, 1820, 1627, 129, -503, -503, -503, -503, + 175, 1820, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, 1820, 339, 339, 311, + 921, 343, -503, 129, -503, 344, 1766, -503, -503, 346, + 1039, 313, 347, -503, -503, 353, -503, 307, -503, -503, + -503, 6, 545, 326, -503, -503, 1820, 1820, 1820, 1820, + 1820, 1820, 1820, 1820, 1039, 1820, 1820, 1820, 1820, 1820, + 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, -503, -503, + -503, 330, 2067, -503, -503, 327, -503, 354, 334, -503, + 345, 335, 340, 348, -503, 351, 416, 232, -503, 356, + -503, -503, 376, -503, 357, 377, -503, -503, 329, -503, + 358, 390, -503, 1085, 339, -503, 154, 339, 154, 1820, + 362, -503, -503, -503, 1766, -503, -503, -503, -503, 129, + -503, 2088, 1039, 1456, -503, 363, 70, 93, 1874, -503, + -503, -503, 73, 73, 124, 124, 124, -503, 163, 163, + 163, 163, 59, 59, 196, 323, 319, 290, 324, 383, + 360, 1820, 1820, 1995, 1699, 1820, 386, 233, 1820, 2088, + 233, -503, -503, 1627, -503, -503, 1820, 1820, -503, 394, + -503, -503, 315, -503, -503, -503, 369, -503, -503, 396, + 404, 410, -503, -503, 26, 113, -503, 407, 1820, 1874, + -503, 1820, -503, 391, 374, -503, 393, 395, 397, 411, + -503, 466, 471, -503, -503, -503, -503, 399, -503, -503, + -503, 400, 401, -503, -503, -503, 402, -503, 206, -503, + 1766, 1820, 1820, -503, -503, -503, -503, 403, 1995, 1941, + 1820, 1820, 1699, 1627, -503, 34, -503, 233, -503, -503, + -503, -503, 405, 412, -503, 413, -503, 354, 406, 418, + 421, -503, -503, 1820, 429, 430, -503, 1186, -503, -503, + 419, 422, 1627, 1820, 1699, 1699, -503, 447, -503, -503, + 1555, -503, -503, -503, -503, 423, 497, -503, -503, 1995, + 1699, 432, -503, 1699, -503 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const short int yypgoto[] = +{ + -503, -503, -503, -503, -85, 2, 181, -41, -198, -45, + -87, -1, 431, 14, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, 448, -81, -47, -503, 7, -23, + -503, 462, -503, -64, -503, -503, -503, 425, -146, 217, + 123, -391, -503, 427, -101, 424, 230, -503, -360, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, 439, + -503, -503, -503, -503, -503, -503, -503, -503, -110, -503, + -503, -77, 138, -12, -163, -503, -250, -13, -421, -414, + -503, -503, -503, -503, -252, -503, -503, -503, -503, -503, + -503, -503, -503, -503, 5, -503, -503, -503, -503, -16, + 36, -503, -418, -503, -503, -502, -503, -503, 440, -503, + -503, -503, -503, -503, -503, -503, 179, -503, -503, -503, + -54, -503, -341, -503, -503, -149, 255, -136, 102, 652, + 101, 688, 145, 157, 201, -98, 289, 338, -384, -503, + -59, -58, -92, -57, 213, 226, 218, 223, 227, -503, + 95, 274, 350, -503, -503, 660, -503, -503 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -336 +static const short int yytable[] = +{ + 18, 82, 83, 17, 287, 61, 309, 56, 114, 364, + 110, 363, 279, 468, 34, 108, 537, 103, 324, 107, + 159, 74, 77, 120, 484, 86, 162, 68, 38, 77, + 492, 17, 34, 383, 480, 357, 114, 55, 110, 34, + 36, 313, 543, 69, 105, 35, 106, 544, 77, 62, + 77, 472, 118, 192, 275, 63, 277, 95, 466, 29, + 15, 76, 76, 35, 17, 17, 270, 537, 212, 76, + 35, 358, 17, 36, 16, 114, 314, 285, 15, 192, + 159, 123, 84, 85, 344, 15, 162, 55, 76, 502, + 76, 17, 16, 17, 115, 515, -260, 111, 265, 16, + 64, 541, 212, 63, 497, 312, 160, 501, 492, 111, + 317, 122, -37, 192, 355, 61, 506, 511, 356, 531, + 260, 161, 115, 205, 207, 111, 329, 330, 26, 334, + 335, 73, 319, 566, 567, 565, 345, 346, -192, 388, + 492, 492, 336, 347, 348, 256, 256, 161, 64, 572, + 59, 272, 574, 272, -191, 319, 492, 27, 281, 492, + -261, 115, -192, 308, 111, 337, 160, 39, 282, 111, + 532, 533, 278, -192, 159, 74, 338, 216, -191, 60, + 362, 161, 40, 479, 212, 268, 15, 283, 315, -191, + 1, 485, 320, 41, 26, 311, 42, 43, 44, 316, + 16, 92, 46, 76, 512, 47, 307, 192, 195, 48, + 292, 339, 49, 213, 473, 76, 319, 389, 17, -280, + 293, 340, 404, 272, 272, 332, 272, 272, 331, -280, + 192, 93, 15, 114, 195, 409, 23, -281, 419, 420, + 421, 375, 341, 25, 342, 460, 16, -281, 464, 343, + 28, -235, 197, 428, 429, 430, 431, 114, 461, 37, + 160, 461, 70, 111, 198, 50, 364, 364, 195, 363, + 349, 387, 350, -39, 64, 114, 39, 285, 197, 370, + 422, 423, 373, 424, 425, 426, 463, 320, 465, 87, + 198, 40, 432, 433, 89, 90, 36, 26, 161, 278, + 91, 107, 41, 215, 390, 42, 43, 44, 199, 216, + 45, 46, 197, 265, 47, 61, 219, 364, 48, 115, + 220, 49, 111, 221, 198, 223, 159, 278, 261, 262, + 266, 213, 162, 267, 199, 272, 272, 272, 272, 272, + 272, 272, 272, 115, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 268, 280, 271, 284, 192, + 68, 115, 195, 286, 111, 288, 290, 291, 199, 289, + 500, 74, 310, 503, 50, 318, 326, 319, 328, 212, + 514, 351, 352, 354, 353, 195, 359, 360, 320, 192, + 192, 361, 369, 374, 375, 313, 200, 287, 381, 192, + 380, 393, 399, 410, 401, 403, 197, 408, 414, 396, + 398, 76, 160, 411, 17, 111, 418, 272, 198, 412, + 443, 441, 200, 278, 444, 446, 320, 161, 442, 197, + 447, 490, 159, 416, 417, 450, 445, 454, 362, 448, + 504, 198, 449, 456, 529, 201, 453, 455, 481, 457, + 549, 458, 467, 478, 498, 507, 200, 202, 489, 508, + 159, 482, 199, 509, 192, 192, 162, 161, 192, 192, + 510, 201, 315, 159, 513, 518, 522, 272, 272, 162, + 272, 517, 523, 202, 519, 199, 520, -165, 521, 524, + 526, 527, 528, 192, 558, 550, 462, 559, 192, 462, + 192, 192, 551, 552, 534, 201, 192, 553, 554, 387, + 542, 555, 568, 570, 195, 192, 192, 202, 160, 192, + 562, 111, 573, 563, 569, 427, 116, 81, 94, 124, + 402, 125, 471, -23, 211, 560, 489, 161, 281, 564, + 400, 490, 504, 126, 195, 195, 160, -23, 282, 111, + 200, 477, 561, 571, 195, 538, 452, 542, 197, 160, + 564, 161, 111, 397, 434, -278, 161, 283, 489, 489, + 198, 436, 258, 200, 161, -278, 516, 437, 435, 0, + 392, 0, 438, 0, 489, 0, 0, 489, 197, 197, + 0, 0, 0, 0, 0, 0, 0, 0, 197, 201, + 198, 198, 0, 0, 0, -333, 0, 281, 0, -333, + 198, 202, 0, 0, 199, -333, 0, 282, -333, 195, + 195, 0, 201, 195, 195, -333, 0, -333, -333, 0, + 0, 0, 0, -333, 202, 0, 283, 0, -333, 0, + -333, 0, 0, -333, 199, 199, 0, 0, 195, -333, + 0, 0, 0, 195, 199, 195, 195, 0, 0, 0, + 0, 195, 0, 197, 197, 0, 0, 197, 197, 0, + 195, 195, 0, 0, 195, 198, 198, 0, 0, 198, + 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 197, 0, 0, 0, 0, 197, 0, 197, + 197, 0, 200, 0, 198, 197, 0, 0, 0, 198, + 0, 198, 198, 0, 197, 197, 0, 198, 197, 199, + 199, 0, 0, 199, 199, 0, 198, 198, 0, 0, + 198, 0, 200, 200, 0, 0, 0, 0, 0, 0, + 0, 0, 200, 0, 6, 0, 7, 0, 199, 8, + 68, 201, 0, 199, 9, 199, 199, 0, 0, 10, + 0, 199, 0, 202, 0, 11, 69, 12, 0, 0, + 199, 199, 0, 0, 199, 13, 0, 0, 0, 0, + 0, 201, 201, 0, 0, 0, 109, 0, 0, 0, + 255, 201, 0, 202, 202, 0, 15, 264, 0, 0, + 0, 0, 269, 202, 273, 0, 273, 200, 200, 0, + 16, 200, 200, 276, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, + 274, 200, 274, 200, 200, 0, 0, 0, 0, 200, + 0, 0, 0, 0, 0, 0, 201, 201, 200, 200, + 201, 201, 200, 0, 0, 0, 0, 0, 202, 202, + 0, 0, 202, 202, 0, 0, 273, 273, 0, 273, + 273, 0, 0, 0, 0, 201, 333, 0, 0, 0, + 201, 0, 201, 201, 0, 0, 0, 202, 201, 0, + 0, 0, 202, 0, 202, 202, 0, 201, 201, 0, + 202, 201, 274, 274, 0, 274, 274, 0, 0, 202, + 202, 0, 368, 202, 39, 0, 371, 372, 0, 0, + 0, 379, 0, 0, 0, 0, 0, 0, 0, 40, + 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, + 41, 391, 0, 42, 43, 44, 0, 0, 45, 46, + 0, 0, 47, 0, 0, 0, 48, 0, 0, 49, + 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 273, 273, + 273, 273, 273, 273, 273, 273, 0, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 0, 0, + 0, -105, 0, 0, 0, 0, 439, 440, 0, 0, + 0, 0, 0, 0, 274, 274, 274, 274, 274, 274, + 274, 274, 0, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 6, 0, 7, 0, 0, 8, + 0, 0, 0, 459, 9, 0, 0, 0, 0, 10, + 0, 0, 0, 0, 407, 11, 0, 12, 0, 0, + 273, 0, 0, 0, 0, 13, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, + 6, 0, 7, 0, 0, 8, 15, 0, 0, 0, + 9, 483, 264, 0, 0, 10, 274, 0, 0, 0, + 16, 11, 0, 12, 0, 136, 505, 0, 0, 39, + 0, 13, 0, 0, 138, 0, 0, 141, 0, 0, + 273, 273, 14, 273, 40, 145, 146, 147, 148, 149, + 150, 151, 15, 0, 0, 41, 318, 0, 42, 43, + 44, 0, 0, 45, 46, 0, 16, 47, 0, 0, + 224, 48, 0, 0, 49, 0, 274, 274, 0, 274, + 407, 0, 225, 0, 152, 0, 226, 0, 0, 0, + 539, 540, 227, 121, 154, 0, 0, 228, 0, 39, + 130, 6, 131, 7, 543, 0, 8, 0, 132, 544, + 133, 9, 0, 556, 40, 0, 10, 134, 135, 0, + 0, 0, 11, 264, 12, 41, 136, 0, 42, 43, + 44, 137, 13, 45, 46, 138, 139, 140, 141, 142, + 0, 48, 143, 14, 49, 144, 145, 146, 147, 148, + 149, 150, 151, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -199, 107, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 152, 0, 153, 0, 39, + 130, 6, 131, 7, 0, 154, 8, 155, 132, 0, + 133, 9, 0, 0, 40, 0, 10, 134, 135, 0, + 0, 0, 11, 0, 12, 41, 136, 0, 42, 43, + 44, 137, 13, 45, 46, 138, 139, 140, 141, 142, + 0, 48, 143, 14, 49, 144, 145, 146, 147, 148, + 149, 150, 151, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -149, 107, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 152, 0, 153, 0, 39, + 130, 6, 131, 7, 0, 154, 8, 155, 132, 0, + 133, 9, 0, 0, 40, 0, 10, 134, 135, 0, + 0, 0, 11, 0, 12, 41, 136, 0, 42, 43, + 44, 137, 13, 45, 46, 138, 139, 140, 141, 142, + 0, 48, 143, 14, 49, 144, 145, 146, 147, 148, + 149, 150, 151, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -150, 107, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 152, 0, 153, 0, 39, + 130, 6, 131, 7, 0, 154, 8, 155, 132, 0, + 133, 9, 0, 0, 40, 0, 10, 134, 135, 0, + 0, 0, 11, 0, 12, 41, 136, 0, 42, 43, + 44, 137, 13, 45, 46, 474, 139, 140, 475, 142, + 0, 48, 143, 14, 49, 144, 145, 146, 147, 148, + 149, 150, 151, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -149, 107, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 152, 0, 153, 0, 0, + 0, 0, 0, 0, 0, 154, 0, 155, 39, 130, + 6, 131, 7, 0, 0, 8, -72, 132, 0, 133, + 9, 0, 0, 40, 0, 10, 134, 135, 0, 0, + 0, 11, 0, 12, 41, 136, 0, 42, 43, 44, + 137, 13, 45, 46, 138, 139, 140, 141, 142, 0, + 48, 143, 14, 49, 144, 145, 146, 147, 148, 149, + 150, 151, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 107, 0, 0, 16, 0, 0, 0, + 0, 130, 6, 131, 7, 0, 0, 8, 0, 132, + 0, 133, 9, 0, 152, 0, 153, 10, 134, 135, + 0, 0, 0, 11, 154, 12, 155, 136, 0, 0, + 0, 0, 137, 13, 0, 0, 138, 139, 259, 141, + 142, 0, 0, 143, 14, 0, 144, 145, 146, 147, + 148, 149, 150, 151, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 107, 0, 0, 16, 0, + 0, 0, 0, 130, 6, 131, 7, 0, 0, 8, + 0, 132, 0, 133, 9, 0, 152, 0, 153, 10, + 486, 487, 0, 0, 0, 11, 154, 12, 155, 136, + 0, 0, 0, 0, 137, 13, 0, 0, 138, 139, + 259, 141, 142, 0, 0, 143, 14, 0, 488, 145, + 146, 147, 148, 149, 150, 151, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, + 16, 6, 0, 7, 0, 0, 8, 0, 0, 0, + 0, 9, 0, 0, 0, 0, 10, 0, 152, 0, + 153, 0, 11, 0, 12, 0, 136, 0, 154, 0, + 155, 0, 13, 0, 0, 138, 0, 0, 141, 0, + 0, 0, 0, 14, 0, 0, 145, 146, 147, 148, + 149, 150, 151, 15, 0, 6, 0, 7, 0, 0, + 8, 0, 0, 0, 404, 9, 0, 16, 0, 0, + 10, 224, 0, 0, 0, 0, 11, 0, 12, 0, + 136, 0, 0, 225, 0, 152, 13, 226, 0, 138, + 0, 0, 141, 227, 0, 154, 0, 14, 228, 0, + 145, 146, 147, 148, 149, 150, 151, 15, 0, 6, + 0, 7, 0, 0, 8, 0, 0, 0, 0, 9, + 0, 16, 0, 0, 10, 224, 0, 0, 0, 0, + 11, 0, 12, 0, 136, 0, 0, 225, 0, 152, + 13, 226, 0, 138, 0, 0, 141, 227, 0, 154, + 0, 14, 228, 0, 145, 146, 147, 148, 149, 150, + 151, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 39, 16, 6, 0, 7, 224, + 0, 8, 0, 0, 0, 0, 9, 0, 0, 40, + 0, 10, 0, 0, 0, 226, 0, 11, 0, 12, + 41, 136, 0, 42, 43, 44, 228, 13, 45, 46, + 138, 0, 47, 141, 0, 0, 48, 0, 14, 49, + 0, 145, 146, 147, 148, 149, 150, 151, 15, 0, + 6, 0, 7, 0, 0, 8, 0, 0, 0, 0, + 9, 0, 16, 0, 0, 10, 0, 0, 0, 0, + 0, 11, 0, 12, 0, 136, 0, 0, 0, 0, + 152, 13, 153, 0, 138, 0, 0, 141, 0, 0, + 154, 0, 14, 0, 0, 145, 146, 147, 148, 149, + 150, 151, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, + 39, 0, 6, 0, 7, 0, 0, 8, 0, 0, + 0, 0, 9, 0, 152, 40, 153, 10, 0, 0, + 0, 39, 0, 11, 154, 12, 41, 0, 0, 42, + 43, 44, 0, 13, 45, 46, 40, 0, 47, 0, + 0, 0, 48, 0, 14, 49, 0, 41, 0, 0, + 42, 43, 44, 0, 15, 45, 46, 0, 0, 47, + -334, 0, 0, 48, -334, 0, 49, 0, 16, 0, + -334, 0, 0, -334, -335, 0, 0, 0, -335, 0, + -334, 0, -334, -334, -335, 0, 0, -335, -334, 0, + 0, 0, 0, -334, -335, -334, -335, -335, -334, 0, + 0, 294, -335, 0, -334, 295, 0, -335, 0, -335, + 0, 296, -335, 0, 297, 0, 0, 0, -335, 0, + 0, 298, 0, 299, 300, 0, 0, 0, 0, 301, + 0, 0, 0, 0, 302, 0, 303, 0, 0, 304, + 0, 0, 0, 0, 0, 305 +}; + +static const short int yycheck[] = +{ + 1, 65, 66, 1, 167, 52, 204, 30, 95, 261, + 95, 261, 158, 404, 11, 92, 518, 81, 216, 68, + 107, 62, 63, 100, 442, 70, 107, 11, 29, 70, + 444, 29, 11, 30, 418, 65, 123, 30, 123, 11, + 26, 66, 8, 27, 89, 42, 91, 13, 89, 17, + 91, 411, 101, 107, 152, 23, 154, 80, 399, 24, + 57, 62, 63, 42, 62, 63, 143, 569, 62, 70, + 42, 101, 70, 59, 71, 162, 101, 162, 57, 133, + 167, 104, 68, 69, 25, 57, 167, 80, 89, 449, + 91, 89, 71, 91, 95, 479, 90, 95, 72, 71, + 68, 522, 62, 23, 445, 206, 107, 448, 522, 107, + 211, 104, 72, 167, 96, 162, 457, 91, 100, 510, + 133, 107, 123, 109, 110, 123, 224, 225, 72, 227, + 228, 103, 62, 554, 555, 553, 77, 78, 66, 285, + 554, 555, 69, 84, 85, 131, 132, 133, 68, 570, + 72, 152, 573, 154, 66, 62, 570, 101, 62, 573, + 90, 162, 90, 204, 162, 92, 167, 3, 72, 167, + 511, 512, 158, 101, 261, 216, 103, 44, 90, 101, + 261, 167, 18, 90, 62, 72, 57, 91, 62, 101, + 31, 443, 215, 29, 72, 62, 32, 33, 34, 73, + 71, 37, 38, 204, 91, 41, 204, 261, 107, 45, + 89, 87, 48, 111, 412, 216, 62, 42, 216, 89, + 99, 97, 68, 224, 225, 226, 227, 228, 226, 99, + 284, 67, 57, 320, 133, 320, 0, 89, 336, 337, + 338, 9, 79, 57, 81, 394, 71, 99, 397, 86, + 72, 19, 107, 345, 346, 347, 348, 344, 394, 11, + 261, 397, 17, 261, 107, 101, 518, 519, 167, 519, + 74, 284, 76, 0, 68, 362, 3, 362, 133, 265, + 339, 340, 268, 341, 342, 343, 396, 310, 398, 68, + 133, 18, 349, 350, 66, 101, 282, 72, 284, 285, + 66, 68, 29, 91, 290, 32, 33, 34, 107, 44, + 37, 38, 167, 72, 41, 362, 101, 569, 45, 320, + 101, 48, 320, 101, 167, 101, 413, 313, 91, 91, + 91, 229, 413, 91, 133, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 72, 72, 91, 65, 413, + 11, 362, 261, 67, 362, 101, 72, 62, 167, 101, + 447, 412, 91, 450, 101, 61, 68, 62, 101, 62, + 478, 58, 63, 59, 94, 284, 101, 101, 411, 443, + 444, 49, 101, 101, 9, 66, 107, 560, 11, 453, + 90, 62, 91, 90, 61, 61, 261, 61, 101, 307, + 308, 412, 413, 66, 412, 413, 90, 418, 261, 66, + 66, 91, 133, 409, 90, 90, 449, 413, 101, 284, + 90, 444, 519, 331, 332, 19, 91, 61, 519, 91, + 453, 284, 91, 66, 508, 107, 90, 90, 65, 91, + 527, 61, 90, 90, 68, 61, 167, 107, 444, 90, + 547, 101, 261, 67, 518, 519, 547, 453, 522, 523, + 66, 133, 62, 560, 67, 101, 65, 478, 479, 560, + 481, 90, 16, 133, 91, 284, 91, 16, 91, 90, + 90, 90, 90, 547, 65, 90, 394, 67, 552, 397, + 554, 555, 90, 90, 101, 167, 560, 101, 90, 522, + 523, 90, 65, 16, 413, 569, 570, 167, 519, 573, + 101, 519, 90, 101, 101, 344, 95, 65, 80, 104, + 313, 104, 409, 57, 110, 547, 522, 523, 62, 552, + 310, 554, 555, 104, 443, 444, 547, 71, 72, 547, + 261, 413, 547, 569, 453, 519, 377, 570, 413, 560, + 573, 547, 560, 308, 351, 89, 552, 91, 554, 555, + 413, 353, 132, 284, 560, 99, 481, 354, 352, -1, + 306, -1, 355, -1, 570, -1, -1, 573, 443, 444, + -1, -1, -1, -1, -1, -1, -1, -1, 453, 261, + 443, 444, -1, -1, -1, 60, -1, 62, -1, 64, + 453, 261, -1, -1, 413, 70, -1, 72, 73, 518, + 519, -1, 284, 522, 523, 80, -1, 82, 83, -1, + -1, -1, -1, 88, 284, -1, 91, -1, 93, -1, + 95, -1, -1, 98, 443, 444, -1, -1, 547, 104, + -1, -1, -1, 552, 453, 554, 555, -1, -1, -1, + -1, 560, -1, 518, 519, -1, -1, 522, 523, -1, + 569, 570, -1, -1, 573, 518, 519, -1, -1, 522, + 523, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 547, -1, -1, -1, -1, 552, -1, 554, + 555, -1, 413, -1, 547, 560, -1, -1, -1, 552, + -1, 554, 555, -1, 569, 570, -1, 560, 573, 518, + 519, -1, -1, 522, 523, -1, 569, 570, -1, -1, + 573, -1, 443, 444, -1, -1, -1, -1, -1, -1, + -1, -1, 453, -1, 5, -1, 7, -1, 547, 10, + 11, 413, -1, 552, 15, 554, 555, -1, -1, 20, + -1, 560, -1, 413, -1, 26, 27, 28, -1, -1, + 569, 570, -1, -1, 573, 36, -1, -1, -1, -1, + -1, 443, 444, -1, -1, -1, 47, -1, -1, -1, + 130, 453, -1, 443, 444, -1, 57, 137, -1, -1, + -1, -1, 142, 453, 152, -1, 154, 518, 519, -1, + 71, 522, 523, 153, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 547, -1, -1, -1, + 152, 552, 154, 554, 555, -1, -1, -1, -1, 560, + -1, -1, -1, -1, -1, -1, 518, 519, 569, 570, + 522, 523, 573, -1, -1, -1, -1, -1, 518, 519, + -1, -1, 522, 523, -1, -1, 224, 225, -1, 227, + 228, -1, -1, -1, -1, 547, 226, -1, -1, -1, + 552, -1, 554, 555, -1, -1, -1, 547, 560, -1, + -1, -1, 552, -1, 554, 555, -1, 569, 570, -1, + 560, 573, 224, 225, -1, 227, 228, -1, -1, 569, + 570, -1, 262, 573, 3, -1, 266, 267, -1, -1, + -1, 271, -1, -1, -1, -1, -1, -1, -1, 18, + -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, + 29, 291, -1, 32, 33, 34, -1, -1, 37, 38, + -1, -1, 41, -1, -1, -1, 45, -1, -1, 48, + -1, -1, -1, -1, -1, -1, 316, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 336, 337, + 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, -1, -1, + -1, 90, -1, -1, -1, -1, 356, 357, -1, -1, + -1, -1, -1, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 5, -1, 7, -1, -1, 10, + -1, -1, -1, 393, 15, -1, -1, -1, -1, 20, + -1, -1, -1, -1, 404, 26, -1, 28, -1, -1, + 418, -1, -1, -1, -1, 36, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 47, -1, -1, -1, + 5, -1, 7, -1, -1, 10, 57, -1, -1, -1, + 15, 441, 442, -1, -1, 20, 418, -1, -1, -1, + 71, 26, -1, 28, -1, 30, 456, -1, -1, 3, + -1, 36, -1, -1, 39, -1, -1, 42, -1, -1, + 478, 479, 47, 481, 18, 50, 51, 52, 53, 54, + 55, 56, 57, -1, -1, 29, 61, -1, 32, 33, + 34, -1, -1, 37, 38, -1, 71, 41, -1, -1, + 75, 45, -1, -1, 48, -1, 478, 479, -1, 481, + 510, -1, 87, -1, 89, -1, 91, -1, -1, -1, + 520, 521, 97, 67, 99, -1, -1, 102, -1, 3, + 4, 5, 6, 7, 8, -1, 10, -1, 12, 13, + 14, 15, -1, 543, 18, -1, 20, 21, 22, -1, + -1, -1, 26, 553, 28, 29, 30, -1, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 67, 68, -1, -1, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 89, -1, 91, -1, 3, + 4, 5, 6, 7, -1, 99, 10, 101, 12, -1, + 14, 15, -1, -1, 18, -1, 20, 21, 22, -1, + -1, -1, 26, -1, 28, 29, 30, -1, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 67, 68, -1, -1, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 89, -1, 91, -1, 3, + 4, 5, 6, 7, -1, 99, 10, 101, 12, -1, + 14, 15, -1, -1, 18, -1, 20, 21, 22, -1, + -1, -1, 26, -1, 28, 29, 30, -1, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 67, 68, -1, -1, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 89, -1, 91, -1, 3, + 4, 5, 6, 7, -1, 99, 10, 101, 12, -1, + 14, 15, -1, -1, 18, -1, 20, 21, 22, -1, + -1, -1, 26, -1, 28, 29, 30, -1, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 67, 68, -1, -1, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 89, -1, 91, -1, -1, + -1, -1, -1, -1, -1, 99, -1, 101, 3, 4, + 5, 6, 7, -1, -1, 10, 11, 12, -1, 14, + 15, -1, -1, 18, -1, 20, 21, 22, -1, -1, + -1, 26, -1, 28, 29, 30, -1, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, -1, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 68, -1, -1, 71, -1, -1, -1, + -1, 4, 5, 6, 7, -1, -1, 10, -1, 12, + -1, 14, 15, -1, 89, -1, 91, 20, 21, 22, + -1, -1, -1, 26, 99, 28, 101, 30, -1, -1, + -1, -1, 35, 36, -1, -1, 39, 40, 41, 42, + 43, -1, -1, 46, 47, -1, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 68, -1, -1, 71, -1, + -1, -1, -1, 4, 5, 6, 7, -1, -1, 10, + -1, 12, -1, 14, 15, -1, 89, -1, 91, 20, + 21, 22, -1, -1, -1, 26, 99, 28, 101, 30, + -1, -1, -1, -1, 35, 36, -1, -1, 39, 40, + 41, 42, 43, -1, -1, 46, 47, -1, 49, 50, + 51, 52, 53, 54, 55, 56, 57, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 68, -1, -1, + 71, 5, -1, 7, -1, -1, 10, -1, -1, -1, + -1, 15, -1, -1, -1, -1, 20, -1, 89, -1, + 91, -1, 26, -1, 28, -1, 30, -1, 99, -1, + 101, -1, 36, -1, -1, 39, -1, -1, 42, -1, + -1, -1, -1, 47, -1, -1, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 5, -1, 7, -1, -1, + 10, -1, -1, -1, 68, 15, -1, 71, -1, -1, + 20, 75, -1, -1, -1, -1, 26, -1, 28, -1, + 30, -1, -1, 87, -1, 89, 36, 91, -1, 39, + -1, -1, 42, 97, -1, 99, -1, 47, 102, -1, + 50, 51, 52, 53, 54, 55, 56, 57, -1, 5, + -1, 7, -1, -1, 10, -1, -1, -1, -1, 15, + -1, 71, -1, -1, 20, 75, -1, -1, -1, -1, + 26, -1, 28, -1, 30, -1, -1, 87, -1, 89, + 36, 91, -1, 39, -1, -1, 42, 97, -1, 99, + -1, 47, 102, -1, 50, 51, 52, 53, 54, 55, + 56, 57, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3, 71, 5, -1, 7, 75, + -1, 10, -1, -1, -1, -1, 15, -1, -1, 18, + -1, 20, -1, -1, -1, 91, -1, 26, -1, 28, + 29, 30, -1, 32, 33, 34, 102, 36, 37, 38, + 39, -1, 41, 42, -1, -1, 45, -1, 47, 48, + -1, 50, 51, 52, 53, 54, 55, 56, 57, -1, + 5, -1, 7, -1, -1, 10, -1, -1, -1, -1, + 15, -1, 71, -1, -1, 20, -1, -1, -1, -1, + -1, 26, -1, 28, -1, 30, -1, -1, -1, -1, + 89, 36, 91, -1, 39, -1, -1, 42, -1, -1, + 99, -1, 47, -1, -1, 50, 51, 52, 53, 54, + 55, 56, 57, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, + 3, -1, 5, -1, 7, -1, -1, 10, -1, -1, + -1, -1, 15, -1, 89, 18, 91, 20, -1, -1, + -1, 3, -1, 26, 99, 28, 29, -1, -1, 32, + 33, 34, -1, 36, 37, 38, 18, -1, 41, -1, + -1, -1, 45, -1, 47, 48, -1, 29, -1, -1, + 32, 33, 34, -1, 57, 37, 38, -1, -1, 41, + 60, -1, -1, 45, 64, -1, 48, -1, 71, -1, + 70, -1, -1, 73, 60, -1, -1, -1, 64, -1, + 80, -1, 82, 83, 70, -1, -1, 73, 88, -1, + -1, -1, -1, 93, 80, 95, 82, 83, 98, -1, + -1, 60, 88, -1, 104, 64, -1, 93, -1, 95, + -1, 70, 98, -1, 73, -1, -1, -1, 104, -1, + -1, 80, -1, 82, 83, -1, -1, -1, -1, 88, + -1, -1, -1, -1, 93, -1, 95, -1, -1, 98, + -1, -1, -1, -1, -1, 104 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const unsigned short int yystos[] = +{ + 0, 31, 107, 122, 123, 126, 5, 7, 10, 15, + 20, 26, 28, 36, 47, 57, 71, 111, 117, 118, + 119, 120, 121, 0, 124, 57, 72, 101, 72, 24, + 125, 127, 128, 129, 11, 42, 119, 11, 117, 3, + 18, 29, 32, 33, 34, 37, 38, 41, 45, 48, + 101, 130, 131, 132, 133, 134, 135, 164, 165, 72, + 101, 132, 17, 23, 68, 136, 137, 139, 11, 27, + 17, 166, 167, 103, 113, 114, 117, 113, 115, 138, + 140, 137, 139, 139, 119, 119, 115, 68, 168, 66, + 101, 66, 37, 67, 130, 135, 141, 142, 143, 148, + 149, 158, 159, 139, 169, 115, 115, 68, 177, 47, + 110, 111, 112, 113, 116, 117, 118, 160, 101, 157, + 177, 67, 134, 135, 143, 149, 165, 170, 171, 172, + 4, 6, 12, 14, 21, 22, 30, 35, 39, 40, + 41, 42, 43, 46, 49, 50, 51, 52, 53, 54, + 55, 56, 89, 91, 99, 101, 108, 109, 110, 116, + 117, 119, 131, 134, 135, 177, 178, 179, 180, 181, + 182, 183, 185, 186, 187, 189, 190, 191, 192, 194, + 201, 203, 204, 212, 213, 215, 216, 217, 218, 219, + 224, 225, 226, 230, 235, 236, 237, 238, 239, 240, + 242, 243, 258, 259, 263, 119, 151, 119, 144, 145, + 146, 151, 62, 234, 234, 91, 44, 150, 155, 101, + 101, 101, 173, 101, 75, 87, 91, 97, 102, 111, + 116, 117, 226, 236, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 261, 119, 214, 214, 41, + 183, 91, 91, 208, 261, 72, 91, 91, 72, 261, + 177, 91, 117, 235, 237, 241, 261, 241, 119, 144, + 72, 62, 72, 91, 65, 110, 67, 180, 101, 101, + 72, 62, 89, 99, 60, 64, 70, 73, 80, 82, + 83, 88, 93, 95, 98, 104, 260, 111, 113, 114, + 91, 62, 150, 66, 101, 62, 73, 150, 61, 62, + 135, 152, 153, 154, 114, 156, 68, 161, 101, 241, + 241, 111, 117, 261, 241, 241, 69, 92, 103, 87, + 97, 79, 81, 86, 25, 77, 78, 84, 85, 74, + 76, 58, 63, 94, 59, 96, 100, 65, 101, 101, + 101, 49, 131, 182, 190, 206, 209, 211, 261, 101, + 119, 261, 261, 119, 101, 9, 220, 221, 222, 261, + 90, 11, 261, 30, 228, 229, 261, 183, 144, 42, + 119, 261, 257, 62, 232, 233, 234, 232, 234, 91, + 152, 61, 145, 61, 68, 147, 174, 261, 61, 110, + 90, 66, 66, 162, 101, 231, 234, 234, 90, 241, + 241, 241, 246, 246, 247, 247, 247, 112, 248, 248, + 248, 248, 249, 249, 250, 251, 252, 253, 254, 261, + 261, 91, 101, 66, 90, 91, 90, 90, 91, 91, + 19, 223, 222, 90, 61, 90, 66, 91, 61, 261, + 231, 233, 234, 174, 231, 174, 228, 90, 147, 175, + 176, 146, 154, 114, 39, 42, 163, 178, 90, 90, + 244, 65, 101, 261, 208, 190, 21, 22, 49, 119, + 183, 184, 185, 188, 193, 202, 207, 228, 68, 195, + 177, 228, 154, 177, 183, 261, 228, 61, 90, 67, + 66, 91, 91, 67, 241, 244, 256, 90, 101, 91, + 91, 91, 65, 16, 90, 197, 90, 90, 90, 139, + 227, 147, 228, 228, 101, 205, 210, 211, 206, 261, + 261, 184, 183, 8, 13, 196, 198, 199, 200, 177, + 90, 90, 90, 101, 90, 90, 261, 262, 65, 67, + 179, 200, 101, 101, 183, 208, 184, 184, 65, 101, + 16, 205, 184, 90, 184 +}; + +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ +#endif +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int +#endif + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror ("syntax error: cannot back up");\ + YYERROR; \ + } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +/* YYLLOC_DEFAULT -- Compute the default location (before the actions + are run). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + ((Current).first_line = (Rhs)[1].first_line, \ + (Current).first_column = (Rhs)[1].first_column, \ + (Current).last_line = (Rhs)[N].last_line, \ + (Current).last_column = (Rhs)[N].last_column) +#endif + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval) +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +# define YYDSYMPRINT(Args) \ +do { \ + if (yydebug) \ + yysymprint Args; \ +} while (0) + +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_stack_print (short int *bottom, short int *top) +#else +static void +yy_stack_print (bottom, top) + short int *bottom; + short int *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_reduce_print (int yyrule) +#else +static void +yy_reduce_print (yyrule) + int yyrule; +#endif +{ + int yyi; + unsigned int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0 +# undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined (__GLIBC__) && defined (_STRING_H) +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +# if defined (__STDC__) || defined (__cplusplus) +yystrlen (const char *yystr) +# else +yystrlen (yystr) + const char *yystr; +# endif +{ + register const char *yys = yystr; + + while (*yys++ != '\0') + continue; + + return yys - yystr - 1; +} +# endif +# endif + +# ifndef yystpcpy +# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +# if defined (__STDC__) || defined (__cplusplus) +yystpcpy (char *yydest, const char *yysrc) +# else +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +# endif +{ + register char *yyd = yydest; + register const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +#endif /* !YYERROR_VERBOSE */ + + + +#if YYDEBUG +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) +#else +static void +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + if (yytype < YYNTOKENS) + { + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + switch (yytype) + { + default: + break; + } + YYFPRINTF (yyoutput, ")"); +} + +#endif /* ! YYDEBUG */ +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yydestruct (int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yytype, yyvaluep) + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM); +# else +int yyparse (); +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + /* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + register int yystate; + register int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + short int yyssa[YYINITDEPTH]; + short int *yyss = yyssa; + register short int *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + register YYSTYPE *yyvsp; + + + +#define YYPOPSTACK (yyvsp--, yyssp--) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ + int yylen; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. + */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + short int *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow ("parser stack overflow", + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyoverflowlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyoverflowlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + short int *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyoverflowlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; + + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + yystate = yyn; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 192 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 3: +#line 201 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 4: +#line 209 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 5: +#line 217 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 6: +#line 225 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 7: +#line 233 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 8: +#line 241 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 9: +#line 250 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 10: +#line 258 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 11: +#line 267 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 12: +#line 275 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 13: +#line 284 "cmDependsJavaParser.y" + { + jpElementStart(0); +} + break; + + case 14: +#line 289 "cmDependsJavaParser.y" + { + jpElementStart(0); +} + break; + + case 15: +#line 294 "cmDependsJavaParser.y" + { + jpElementStart(0); +} + break; + + case 16: +#line 299 "cmDependsJavaParser.y" + { + jpElementStart(0); +} + break; + + case 17: +#line 304 "cmDependsJavaParser.y" + { + jpElementStart(0); +} + break; + + case 18: +#line 309 "cmDependsJavaParser.y" + { + jpElementStart(0); +} + break; + + case 19: +#line 314 "cmDependsJavaParser.y" + { + jpElementStart(0); +} + break; + + case 20: +#line 319 "cmDependsJavaParser.y" + { + jpElementStart(0); +} + break; + + case 21: +#line 325 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 22: +#line 333 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 23: +#line 342 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpStoreClass(yyvsp[0].str); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 24: +#line 352 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 25: +#line 361 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 26: +#line 370 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 27: +#line 378 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpStoreClass(yyvsp[-1].str); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 28: +#line 388 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyval.str = yyvsp[0].str; +} + break; + + case 29: +#line 394 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyval.str = yyvsp[0].str; +} + break; + + case 30: +#line 401 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyval.str = yyvsp[0].str; +} + break; + + case 31: +#line 408 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyval.str = yyvsp[0].str; +} + break; + + case 32: +#line 414 "cmDependsJavaParser.y" + { + jpElementStart(2); + yyval.str = yyvsp[0].str; +} + break; + + case 33: +#line 421 "cmDependsJavaParser.y" + { + jpElementStart(3); + yyGetParser->AddClassFound(yyvsp[-2].str); + yyGetParser->UpdateCombine(yyvsp[-2].str, yyvsp[0].str); + yyGetParser->DeallocateParserType(&(yyvsp[-2].str)); + yyval.str = const_cast(yyGetParser->GetCurrentCombine()); +} + break; + + case 34: +#line 430 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpStoreClass(yyvsp[-2].str); + jpCheckEmpty(3); + yyGetParser->SetCurrentCombine(""); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 35: +#line 440 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpStoreClass(yyvsp[-2].str); + yyGetParser->SetCurrentCombine(""); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 36: +#line 450 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 37: +#line 459 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 38: +#line 467 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 39: +#line 476 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 40: +#line 484 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 41: +#line 491 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 42: +#line 499 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 43: +#line 506 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 44: +#line 514 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 45: +#line 521 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 46: +#line 530 "cmDependsJavaParser.y" + { + jpElementStart(3); + yyGetParser->SetCurrentPackage(yyvsp[-1].str); + yyGetParser->DeallocateParserType(&(yyvsp[-1].str)); + yyGetParser->SetCurrentCombine(""); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 47: +#line 542 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 48: +#line 550 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 49: +#line 559 "cmDependsJavaParser.y" + { + jpElementStart(3); + yyGetParser->AddPackagesImport(yyvsp[-1].str); + yyGetParser->DeallocateParserType(&(yyvsp[-1].str)); + yyGetParser->SetCurrentCombine(""); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 50: +#line 571 "cmDependsJavaParser.y" + { + jpElementStart(5); + std::string str = yyvsp[-3].str; + str += ".*"; + yyGetParser->AddPackagesImport(str.c_str()); + yyGetParser->DeallocateParserType(&(yyvsp[-3].str)); + yyGetParser->SetCurrentCombine(""); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 51: +#line 584 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 52: +#line 592 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 53: +#line 600 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 54: +#line 609 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 55: +#line 617 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 67: +#line 632 "cmDependsJavaParser.y" + { + yyGetParser->StartClass(yyvsp[0].str); + jpElementStart(3); + yyGetParser->DeallocateParserType(&(yyvsp[0].str)); + jpCheckEmpty(3); +} + break; + + case 68: +#line 642 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + yyGetParser->EndClass(); +} + break; + + case 69: +#line 651 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + yyGetParser->EndClass(); +} + break; + + case 70: +#line 660 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + yyGetParser->EndClass(); +} + break; + + case 71: +#line 669 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + yyGetParser->EndClass(); +} + break; + + case 72: +#line 678 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 73: +#line 685 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 74: +#line 694 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 75: +#line 703 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 76: +#line 712 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 77: +#line 720 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 78: +#line 729 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 79: +#line 737 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 80: +#line 744 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 81: +#line 753 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 82: +#line 761 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 83: +#line 769 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 84: +#line 777 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 85: +#line 786 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 86: +#line 794 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 87: +#line 803 "cmDependsJavaParser.y" + { + jpElementStart(4); +} + break; + + case 88: +#line 809 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 89: +#line 817 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 90: +#line 826 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 91: +#line 834 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 92: +#line 843 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyGetParser->DeallocateParserType(&(yyvsp[0].str)); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 93: +#line 852 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 94: +#line 861 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 95: +#line 869 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 96: +#line 878 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 97: +#line 886 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 98: +#line 894 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 99: +#line 903 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 100: +#line 912 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 101: +#line 921 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 102: +#line 929 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 103: +#line 939 "cmDependsJavaParser.y" + { + jpElementStart(4); + yyGetParser->DeallocateParserType(&(yyvsp[-3].str)); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 104: +#line 949 "cmDependsJavaParser.y" + { + jpElementStart(3); + +} + break; + + case 105: +#line 955 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 107: +#line 966 "cmDependsJavaParser.y" + { + jpElementStart(1); + +} + break; + + case 108: +#line 972 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 109: +#line 982 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 110: +#line 992 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 111: +#line 1002 "cmDependsJavaParser.y" + { + jpElementStart(1); + +} + break; + + case 112: +#line 1008 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 113: +#line 1018 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 114: +#line 1028 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 115: +#line 1038 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 116: +#line 1047 "cmDependsJavaParser.y" + { + jpElementStart(5); + jpCheckEmpty(5); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 117: +#line 1057 "cmDependsJavaParser.y" + { + jpElementStart(4); + yyGetParser->DeallocateParserType(&(yyvsp[-3].str)); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 118: +#line 1068 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 119: +#line 1077 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 120: +#line 1085 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 121: +#line 1095 "cmDependsJavaParser.y" + { + jpElementStart(5); + jpCheckEmpty(5); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 122: +#line 1104 "cmDependsJavaParser.y" + { + jpElementStart(5); + jpCheckEmpty(5); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 123: +#line 1114 "cmDependsJavaParser.y" + { + yyGetParser->StartClass(yyvsp[0].str); + jpElementStart(3); + yyGetParser->DeallocateParserType(&(yyvsp[0].str)); + jpCheckEmpty(3); +} + break; + + case 124: +#line 1123 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + yyGetParser->EndClass(); +} + break; + + case 125: +#line 1132 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); +} + break; + + case 126: +#line 1139 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 127: +#line 1149 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 128: +#line 1158 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 129: +#line 1168 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 130: +#line 1177 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 131: +#line 1185 "cmDependsJavaParser.y" + { + jpElementStart(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 132: +#line 1194 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 133: +#line 1203 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 134: +#line 1212 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 135: +#line 1221 "cmDependsJavaParser.y" + { + jpElementStart(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 136: +#line 1229 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 137: +#line 1238 "cmDependsJavaParser.y" + { + jpElementStart(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 138: +#line 1247 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 139: +#line 1257 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 140: +#line 1267 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 141: +#line 1276 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 142: +#line 1286 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 143: +#line 1295 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 144: +#line 1303 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 145: +#line 1312 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 146: +#line 1322 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 147: +#line 1331 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 148: +#line 1341 "cmDependsJavaParser.y" + { + jpElementStart(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 149: +#line 1349 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 150: +#line 1357 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 151: +#line 1367 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 152: +#line 1376 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 153: +#line 1386 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 154: +#line 1395 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 155: +#line 1404 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 156: +#line 1414 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 157: +#line 1424 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 158: +#line 1433 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 159: +#line 1443 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 160: +#line 1452 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 161: +#line 1461 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 162: +#line 1470 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 163: +#line 1479 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 164: +#line 1488 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 165: +#line 1498 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 166: +#line 1507 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 167: +#line 1516 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 168: +#line 1525 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 169: +#line 1534 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 170: +#line 1544 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 171: +#line 1553 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 172: +#line 1562 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 173: +#line 1571 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 174: +#line 1580 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 175: +#line 1589 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 176: +#line 1598 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 177: +#line 1607 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 178: +#line 1616 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 179: +#line 1625 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 180: +#line 1634 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 181: +#line 1643 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 182: +#line 1653 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 183: +#line 1663 "cmDependsJavaParser.y" + { + jpElementStart(3); + yyGetParser->DeallocateParserType(&(yyvsp[-2].str)); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 184: +#line 1674 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 185: +#line 1684 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 186: +#line 1694 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 187: +#line 1703 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 188: +#line 1712 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 189: +#line 1721 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 190: +#line 1730 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 191: +#line 1739 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 192: +#line 1748 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 193: +#line 1758 "cmDependsJavaParser.y" + { + jpElementStart(5); + jpCheckEmpty(5); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 194: +#line 1768 "cmDependsJavaParser.y" + { + jpElementStart(7); + jpCheckEmpty(7); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 195: +#line 1778 "cmDependsJavaParser.y" + { + jpElementStart(7); + jpCheckEmpty(7); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 196: +#line 1788 "cmDependsJavaParser.y" + { + jpElementStart(5); + +} + break; + + case 197: +#line 1795 "cmDependsJavaParser.y" + { + jpElementStart(4); + +} + break; + + case 198: +#line 1801 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 199: +#line 1809 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 200: +#line 1818 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 201: +#line 1826 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 202: +#line 1836 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 203: +#line 1846 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 204: +#line 1855 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 205: +#line 1865 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 206: +#line 1874 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 207: +#line 1884 "cmDependsJavaParser.y" + { + jpElementStart(5); + +} + break; + + case 208: +#line 1891 "cmDependsJavaParser.y" + { + jpElementStart(5); + +} + break; + + case 209: +#line 1898 "cmDependsJavaParser.y" + { + jpElementStart(7); + +} + break; + + case 210: +#line 1906 "cmDependsJavaParser.y" + { + jpElementStart(9); + +} + break; + + case 211: +#line 1912 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 212: +#line 1920 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 213: +#line 1929 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 214: +#line 1937 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 215: +#line 1948 "cmDependsJavaParser.y" + { + jpElementStart(9); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 216: +#line 1956 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 217: +#line 1964 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 218: +#line 1974 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 219: +#line 1983 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 220: +#line 1993 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 221: +#line 2003 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 222: +#line 2012 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 223: +#line 2022 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 224: +#line 2031 "cmDependsJavaParser.y" + { + jpElementStart(5); + jpCheckEmpty(5); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 225: +#line 2041 "cmDependsJavaParser.y" + { + jpElementStart(3); + yyGetParser->DeallocateParserType(&(yyvsp[-1].str)); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 226: +#line 2051 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 227: +#line 2059 "cmDependsJavaParser.y" + { + jpElementStart(1); + +} + break; + + case 228: +#line 2066 "cmDependsJavaParser.y" + { + jpElementStart(3); + yyGetParser->DeallocateParserType(&(yyvsp[-1].str)); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 229: +#line 2077 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 230: +#line 2087 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 231: +#line 2097 "cmDependsJavaParser.y" + { + jpElementStart(5); + jpCheckEmpty(5); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 232: +#line 2107 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 233: +#line 2116 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 234: +#line 2125 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 235: +#line 2133 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 236: +#line 2143 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 237: +#line 2152 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 238: +#line 2162 "cmDependsJavaParser.y" + { + jpElementStart(5); + +} + break; + + case 239: +#line 2169 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 240: +#line 2179 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 241: +#line 2188 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 242: +#line 2198 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 243: +#line 2207 "cmDependsJavaParser.y" + { + jpElementStart(1); + +} + break; + + case 244: +#line 2213 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 245: +#line 2222 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 246: +#line 2231 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 247: +#line 2240 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 248: +#line 2249 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 249: +#line 2259 "cmDependsJavaParser.y" + { + jpElementStart(6); + jpCheckEmpty(6); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 250: +#line 2268 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 251: +#line 2276 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 252: +#line 2285 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 253: +#line 2293 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 254: +#line 2303 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 255: +#line 2312 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 256: +#line 2322 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 257: +#line 2331 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 258: +#line 2340 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 259: +#line 2349 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 260: +#line 2358 "cmDependsJavaParser.y" + { + jpElementStart(0); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 261: +#line 2366 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 262: +#line 2376 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 263: +#line 2385 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 264: +#line 2395 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 265: +#line 2405 "cmDependsJavaParser.y" + { + jpElementStart(2); + +} + break; + + case 266: +#line 2411 "cmDependsJavaParser.y" + { + jpElementStart(3); + +} + break; + + case 267: +#line 2418 "cmDependsJavaParser.y" + { + jpElementStart(3); + yyGetParser->DeallocateParserType(&(yyvsp[0].str)); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 268: +#line 2428 "cmDependsJavaParser.y" + { + jpElementStart(3); + yyGetParser->DeallocateParserType(&(yyvsp[0].str)); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 269: +#line 2438 "cmDependsJavaParser.y" + { + jpElementStart(3); + yyGetParser->DeallocateParserType(&(yyvsp[0].str)); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 270: +#line 2448 "cmDependsJavaParser.y" + { + jpElementStart(3); + yyGetParser->DeallocateParserType(&(yyvsp[0].str)); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 271: +#line 2459 "cmDependsJavaParser.y" + { + jpElementStart(4); + yyGetParser->DeallocateParserType(&(yyvsp[-3].str)); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 272: +#line 2469 "cmDependsJavaParser.y" + { + jpElementStart(6); + yyGetParser->DeallocateParserType(&(yyvsp[-5].str)); + yyGetParser->DeallocateParserType(&(yyvsp[-3].str)); + jpCheckEmpty(6); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 273: +#line 2480 "cmDependsJavaParser.y" + { + jpElementStart(6); + yyGetParser->DeallocateParserType(&(yyvsp[-3].str)); + jpCheckEmpty(6); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 274: +#line 2490 "cmDependsJavaParser.y" + { + jpElementStart(6); + yyGetParser->DeallocateParserType(&(yyvsp[-3].str)); + jpCheckEmpty(6); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 275: +#line 2501 "cmDependsJavaParser.y" + { + jpElementStart(4); + yyGetParser->DeallocateParserType(&(yyvsp[-3].str)); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 276: +#line 2511 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 277: +#line 2521 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 278: +#line 2530 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyGetParser->DeallocateParserType(&(yyvsp[0].str)); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 279: +#line 2539 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 280: +#line 2548 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 281: +#line 2557 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 282: +#line 2567 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 283: +#line 2577 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 284: +#line 2587 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 285: +#line 2596 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 286: +#line 2605 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 287: +#line 2614 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 288: +#line 2623 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 289: +#line 2633 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 290: +#line 2643 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 291: +#line 2653 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 292: +#line 2662 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 293: +#line 2671 "cmDependsJavaParser.y" + { + jpElementStart(2); + jpCheckEmpty(2); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 294: +#line 2680 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 295: +#line 2690 "cmDependsJavaParser.y" + { + jpElementStart(5); + jpCheckEmpty(5); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 296: +#line 2699 "cmDependsJavaParser.y" + { + jpElementStart(4); + jpCheckEmpty(4); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 297: +#line 2708 "cmDependsJavaParser.y" + { + jpElementStart(5); + +} + break; + + case 298: +#line 2715 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 299: +#line 2724 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 300: +#line 2733 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 301: +#line 2742 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 302: +#line 2752 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 303: +#line 2761 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 304: +#line 2770 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 305: +#line 2780 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 306: +#line 2789 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 307: +#line 2798 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 308: +#line 2807 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 309: +#line 2817 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 310: +#line 2826 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 311: +#line 2835 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 312: +#line 2844 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 313: +#line 2853 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 314: +#line 2862 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 315: +#line 2872 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 316: +#line 2881 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 317: +#line 2890 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 318: +#line 2900 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 319: +#line 2909 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 320: +#line 2919 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 321: +#line 2928 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 322: +#line 2938 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 323: +#line 2947 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 324: +#line 2957 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 325: +#line 2966 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 326: +#line 2976 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 327: +#line 2985 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 328: +#line 2995 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 329: +#line 3004 "cmDependsJavaParser.y" + { + jpElementStart(5); + jpCheckEmpty(5); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 330: +#line 3014 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 331: +#line 3023 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 332: +#line 3033 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 333: +#line 3043 "cmDependsJavaParser.y" + { + jpElementStart(1); + yyGetParser->DeallocateParserType(&(yyvsp[0].str)); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 334: +#line 3053 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 335: +#line 3062 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 336: +#line 3072 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 337: +#line 3081 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 338: +#line 3090 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 339: +#line 3099 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 340: +#line 3108 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 341: +#line 3117 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 342: +#line 3126 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 343: +#line 3135 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 344: +#line 3144 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 345: +#line 3153 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 346: +#line 3162 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 347: +#line 3171 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 348: +#line 3181 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 349: +#line 3191 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 350: +#line 3201 "cmDependsJavaParser.y" + { + jpElementStart(1); + jpCheckEmpty(1); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + case 351: +#line 3210 "cmDependsJavaParser.y" + { + jpElementStart(3); + jpStoreClass(yyvsp[-2].str); + jpCheckEmpty(3); + yyval.str = 0; + yyGetParser->SetCurrentCombine(""); + +} + break; + + + } + +/* Line 1010 of yacc.c. */ +#line 5780 "cmDependsJavaParser.cxx" + + yyvsp -= yylen; + yyssp -= yylen; + + + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (YYPACT_NINF < yyn && yyn < YYLAST) + { + YYSIZE_T yysize = 0; + int yytype = YYTRANSLATE (yychar); + const char* yyprefix; + char *yymsg; + int yyx; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 0; + + yyprefix = ", expecting "; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); + yycount += 1; + if (yycount == 5) + { + yysize = 0; + break; + } + } + yysize += (sizeof ("syntax error, unexpected ") + + yystrlen (yytname[yytype])); + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg != 0) + { + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); + yyp = yystpcpy (yyp, yytname[yytype]); + + if (yycount < 5) + { + yyprefix = ", expecting "; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + yyp = yystpcpy (yyp, yyprefix); + yyp = yystpcpy (yyp, yytname[yyx]); + yyprefix = " or "; + } + } + yyerror (yymsg); + YYSTACK_FREE (yymsg); + } + else + yyerror ("syntax error; also virtual memory exhausted"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror ("syntax error"); + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* If at end of input, pop the error token, + then the rest of the stack, then return failure. */ + if (yychar == YYEOF) + for (;;) + { + YYPOPSTACK; + if (yyssp == yyss) + YYABORT; + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[*yyssp], yyvsp); + } + } + else + { + YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); + yydestruct (yytoken, &yylval); + yychar = YYEMPTY; + + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + +#if defined(__GNUC__) || defined(__HP_aCC) + /* Pacify GCC when the user code never invokes YYERROR and the label + yyerrorlab therefore never appears in user code. */ + if (0) + goto yyerrorlab; +#endif + + yyvsp -= yylen; + yyssp -= yylen; + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[yystate], yyvsp); + YYPOPSTACK; + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + YYDPRINTF ((stderr, "Shifting error token, ")); + + *++yyvsp = yylval; + + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*----------------------------------------------. +| yyoverflowlab -- parser overflow comes here. | +`----------------------------------------------*/ +yyoverflowlab: + yyerror ("parser stack overflow"); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + return yyresult; +} + + +#line 3219 "cmDependsJavaParser.y" + +/* End of grammar */ + +/*--------------------------------------------------------------------------*/ +void cmDependsJavaError(yyscan_t yyscanner, const char* message) +{ + yyGetParser->Error(message); +} + + diff --git a/Source/cmDependsJavaParser.y b/Source/cmDependsJavaParser.y new file mode 100644 index 0000000..53210b8 --- /dev/null +++ b/Source/cmDependsJavaParser.y @@ -0,0 +1,3226 @@ +%{ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run bison like this: + + bison --yacc --name-prefix=cmDependsJava_yy --defines=cmDependsJavaParserTokens.h -ocmDependsJavaParser.cxx cmDependsJavaParser.y + +Modify cmDependsJavaParser.cxx: + - remove TABs + - add __HP_aCC to the #if test for yyerrorlab warning suppression + +*/ + +/* Configure the parser to use a lexer object. */ +#define YYPARSE_PARAM yyscanner +#define YYLEX_PARAM yyscanner +#define YYERROR_VERBOSE 1 +#define cmDependsJava_yyerror(x) \ + cmDependsJavaError(yyscanner, x) +#define yyGetParser (cmDependsJava_yyget_extra(yyscanner)) + +/*-------------------------------------------------------------------------*/ +#include "cmDependsJavaParserHelper.h" /* Interface to parser object. */ +#include "cmDependsJavaLexer.h" /* Interface to lexer object. */ +#include "cmDependsJavaParserTokens.h" /* Need YYSTYPE for YY_DECL. */ + +/* Forward declare the lexer entry point. */ +YY_DECL; + +/* Internal utility functions. */ +static void cmDependsJavaError(yyscan_t yyscanner, const char* message); + +#define YYDEBUG 1 +#define YYMAXDEPTH 1000000 + + +#define jpCheckEmpty(cnt) yyGetParser->CheckEmpty(__LINE__, cnt, yyvsp); +#define jpElementStart(cnt) yyGetParser->PrepareElement(&yyval) +#define jpStoreClass(str) yyGetParser->AddClassFound(str); yyGetParser->DeallocateParserType(&(str)) +/* Disable some warnings in the generated code. */ +#ifdef __BORLANDC__ +# pragma warn -8004 /* Variable assigned a value that is not used. */ +# pragma warn -8008 /* condition always returns true */ +# pragma warn -8060 /* possibly incorrect assignment */ +# pragma warn -8066 /* unreachable code */ +#endif +#ifdef _MSC_VER +# pragma warning (disable: 4102) /* Unused goto label. */ +# pragma warning (disable: 4065) /* Switch statement contains default but no case. */ +#endif +%} + +/* Generate a reentrant parser object. */ +%pure_parser + +/* +%union { + char* string; +} +*/ + +/*-------------------------------------------------------------------------*/ +/* Tokens */ +%token jp_ABSTRACT +%token jp_ASSERT +%token jp_BOOLEAN_TYPE +%token jp_BREAK +%token jp_BYTE_TYPE +%token jp_CASE +%token jp_CATCH +%token jp_CHAR_TYPE +%token jp_CLASS +%token jp_CONTINUE +%token jp_DEFAULT +%token jp_DO +%token jp_DOUBLE_TYPE +%token jp_ELSE +%token jp_EXTENDS +%token jp_FINAL +%token jp_FINALLY +%token jp_FLOAT_TYPE +%token jp_FOR +%token jp_IF +%token jp_IMPLEMENTS +%token jp_IMPORT +%token jp_INSTANCEOF +%token jp_INT_TYPE +%token jp_INTERFACE +%token jp_LONG_TYPE +%token jp_NATIVE +%token jp_NEW +%token jp_PACKAGE +%token jp_PRIVATE +%token jp_PROTECTED +%token jp_PUBLIC +%token jp_RETURN +%token jp_SHORT_TYPE +%token jp_STATIC +%token jp_STRICTFP +%token jp_SUPER +%token jp_SWITCH +%token jp_SYNCHRONIZED +%token jp_THIS +%token jp_THROW +%token jp_THROWS +%token jp_TRANSIENT +%token jp_TRY +%token jp_VOID +%token jp_VOLATILE +%token jp_WHILE + +%token jp_BOOLEANLITERAL +%token jp_CHARACTERLITERAL +%token jp_DECIMALINTEGERLITERAL +%token jp_FLOATINGPOINTLITERAL +%token jp_HEXINTEGERLITERAL +%token jp_NULLLITERAL +%token jp_STRINGLITERAL + +%token jp_NAME + +%token jp_AND +%token jp_ANDAND +%token jp_ANDEQUALS +%token jp_BRACKETEND +%token jp_BRACKETSTART +%token jp_CARROT +%token jp_CARROTEQUALS +%token jp_COLON +%token jp_COMMA +%token jp_CURLYEND +%token jp_CURLYSTART +%token jp_DIVIDE +%token jp_DIVIDEEQUALS +%token jp_DOLLAR +%token jp_DOT +%token jp_EQUALS +%token jp_EQUALSEQUALS +%token jp_EXCLAMATION +%token jp_EXCLAMATIONEQUALS +%token jp_GREATER +%token jp_GTEQUALS +%token jp_GTGT +%token jp_GTGTEQUALS +%token jp_GTGTGT +%token jp_GTGTGTEQUALS +%token jp_LESLESEQUALS +%token jp_LESSTHAN +%token jp_LTEQUALS +%token jp_LTLT +%token jp_MINUS +%token jp_MINUSEQUALS +%token jp_MINUSMINUS +%token jp_PAREEND +%token jp_PARESTART +%token jp_PERCENT +%token jp_PERCENTEQUALS +%token jp_PIPE +%token jp_PIPEEQUALS +%token jp_PIPEPIPE +%token jp_PLUS +%token jp_PLUSEQUALS +%token jp_PLUSPLUS +%token jp_QUESTION +%token jp_SEMICOL +%token jp_TILDE +%token jp_TIMES +%token jp_TIMESEQUALS + +%token jp_ERROR + +/*-------------------------------------------------------------------------*/ +/* grammar */ +%% + +Goal: +CompilationUnit +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +Literal: +IntegerLiteral +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +jp_FLOATINGPOINTLITERAL +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +jp_BOOLEANLITERAL +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +jp_CHARACTERLITERAL +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +jp_STRINGLITERAL +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +jp_NULLLITERAL +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +IntegerLiteral: +jp_DECIMALINTEGERLITERAL +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +jp_HEXINTEGERLITERAL +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +Type: +PrimitiveType +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +ReferenceType +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +PrimitiveType: +jp_BYTE_TYPE +{ + jpElementStart(0); +} +| +jp_SHORT_TYPE +{ + jpElementStart(0); +} +| +jp_INT_TYPE +{ + jpElementStart(0); +} +| +jp_LONG_TYPE +{ + jpElementStart(0); +} +| +jp_CHAR_TYPE +{ + jpElementStart(0); +} +| +jp_FLOAT_TYPE +{ + jpElementStart(0); +} +| +jp_DOUBLE_TYPE +{ + jpElementStart(0); +} +| +jp_BOOLEAN_TYPE +{ + jpElementStart(0); +} + +ReferenceType: +ClassOrInterfaceType +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +ArrayType +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +ClassOrInterfaceType: +Name +{ + jpElementStart(1); + jpStoreClass($1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +ClassType: +ClassOrInterfaceType +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +InterfaceType: +ClassOrInterfaceType +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +ArrayType: +PrimitiveType Dims +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +Name Dims +{ + jpElementStart(2); + jpStoreClass($1); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +Name: +SimpleName +{ + jpElementStart(1); + $$ = $1; +} +| +QualifiedName +{ + jpElementStart(1); + $$ = $1; +} + +SimpleName: +Identifier +{ + jpElementStart(1); + $$ = $1; +} + +Identifier: +jp_NAME +{ + jpElementStart(1); + $$ = $1; +} +| +jp_DOLLAR jp_NAME +{ + jpElementStart(2); + $$ = $2; +} + +QualifiedName: +Name jp_DOT Identifier +{ + jpElementStart(3); + yyGetParser->AddClassFound($1); + yyGetParser->UpdateCombine($1, $3); + yyGetParser->DeallocateParserType(&($1)); + $$ = const_cast(yyGetParser->GetCurrentCombine()); +} +| +Name jp_DOT jp_CLASS +{ + jpElementStart(3); + jpStoreClass($1); + jpCheckEmpty(3); + yyGetParser->SetCurrentCombine(""); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +Name jp_DOT jp_THIS +{ + jpElementStart(3); + jpStoreClass($1); + yyGetParser->SetCurrentCombine(""); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +SimpleType jp_DOT jp_CLASS +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +SimpleType: +PrimitiveType +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +jp_VOID +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +CompilationUnit: +PackageDeclarationopt ImportDeclarations TypeDeclarations +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +PackageDeclarationopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +PackageDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +ImportDeclarations: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +ImportDeclarations ImportDeclaration +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +TypeDeclarations: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +TypeDeclarations TypeDeclaration +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +PackageDeclaration: +jp_PACKAGE Name jp_SEMICOL +{ + jpElementStart(3); + yyGetParser->SetCurrentPackage($2); + yyGetParser->DeallocateParserType(&($2)); + yyGetParser->SetCurrentCombine(""); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +ImportDeclaration: +SingleTypeImportDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +TypeImportOnDemandDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +SingleTypeImportDeclaration: +jp_IMPORT Name jp_SEMICOL +{ + jpElementStart(3); + yyGetParser->AddPackagesImport($2); + yyGetParser->DeallocateParserType(&($2)); + yyGetParser->SetCurrentCombine(""); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +TypeImportOnDemandDeclaration: +jp_IMPORT Name jp_DOT jp_TIMES jp_SEMICOL +{ + jpElementStart(5); + std::string str = $2; + str += ".*"; + yyGetParser->AddPackagesImport(str.c_str()); + yyGetParser->DeallocateParserType(&($2)); + yyGetParser->SetCurrentCombine(""); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +TypeDeclaration: +ClassDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +InterfaceDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +jp_SEMICOL +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +Modifiers: +Modifier +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +Modifiers Modifier +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +Modifier: +jp_PUBLIC | jp_PROTECTED | jp_PRIVATE | +jp_STATIC | +jp_ABSTRACT | jp_FINAL | jp_NATIVE | jp_SYNCHRONIZED | jp_TRANSIENT | jp_VOLATILE | +jp_STRICTFP + +ClassHeader: +Modifiersopt jp_CLASS Identifier +{ + yyGetParser->StartClass($3); + jpElementStart(3); + yyGetParser->DeallocateParserType(&($3)); + jpCheckEmpty(3); +} + + +ClassDeclaration: +ClassHeader ClassBody +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + yyGetParser->EndClass(); +} +| +ClassHeader Interfaces ClassBody +{ + jpElementStart(3); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + yyGetParser->EndClass(); +} +| +ClassHeader Super ClassBody +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + yyGetParser->EndClass(); +} +| +ClassHeader Super Interfaces ClassBody +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + yyGetParser->EndClass(); +} + +Modifiersopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +Modifiers +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +Super: +jp_EXTENDS ClassType +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +Interfaces: +jp_IMPLEMENTS InterfaceTypeList +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +InterfaceTypeList: +InterfaceType +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +InterfaceTypeList jp_COMMA InterfaceType +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +ClassBody: +jp_CURLYSTART ClassBodyDeclarations jp_CURLYEND +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +ClassBodyDeclarations: +{ + jpElementStart(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +ClassBodyDeclarations ClassBodyDeclaration +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +ClassBodyDeclaration: +ClassMemberDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +StaticInitializer +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +ConstructorDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +TypeDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +ClassMemberDeclaration: +FieldDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +MethodDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +FieldDeclaration: +Modifiersopt Type VariableDeclarators jp_SEMICOL +{ + jpElementStart(4); +} + +VariableDeclarators: +VariableDeclarator +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +VariableDeclarators jp_COMMA VariableDeclarator +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +VariableDeclarator: +VariableDeclaratorId +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +VariableDeclaratorId jp_EQUALS VariableInitializer +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +VariableDeclaratorId: +Identifier +{ + jpElementStart(1); + yyGetParser->DeallocateParserType(&($1)); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +VariableDeclaratorId jp_BRACKETSTART jp_BRACKETEND +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +VariableInitializer: +Expression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +ArrayInitializer +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +MethodDeclaration: +MethodHeader jp_SEMICOL +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +MethodHeader MethodBody +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +MethodHeader MethodBody jp_SEMICOL +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} + +MethodHeader: +Modifiersopt Type MethodDeclarator Throwsopt +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Modifiersopt jp_VOID MethodDeclarator Throwsopt +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Throwsopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Throws +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +MethodDeclarator: +Identifier jp_PARESTART FormalParameterListopt jp_PAREEND +{ + jpElementStart(4); + yyGetParser->DeallocateParserType(&($1)); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +MethodDeclarator jp_BRACKETSTART jp_BRACKETEND +{ + jpElementStart(3); + +} + +FormalParameterListopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +FormalParameterList + +FormalParameterList: +FormalParameter +{ + jpElementStart(1); + +} +| +FormalParameterList jp_COMMA FormalParameter +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +FormalParameter: +Modifiersopt Type VariableDeclaratorId +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Throws: +jp_THROWS ClassTypeList +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ClassTypeList: +ClassType +{ + jpElementStart(1); + +} +| +ClassTypeList jp_COMMA ClassType +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +MethodBody: +Block +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +StaticInitializer: +jp_STATIC Block +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ConstructorDeclaration: +Modifiersopt ConstructorDeclarator Throwsopt ConstructorBody +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Modifiersopt ConstructorDeclarator Throwsopt ConstructorBody jp_SEMICOL +{ + jpElementStart(5); + jpCheckEmpty(5); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ConstructorDeclarator: +SimpleName jp_PARESTART FormalParameterListopt jp_PAREEND +{ + jpElementStart(4); + yyGetParser->DeallocateParserType(&($1)); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ConstructorBody: +jp_CURLYSTART ExplicitConstructorInvocationopt BlockStatementsopt jp_CURLYEND +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ExplicitConstructorInvocationopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ExplicitConstructorInvocationopt ExplicitConstructorInvocation +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ExplicitConstructorInvocation: +jp_THIS jp_PARESTART ArgumentListopt jp_PAREEND jp_SEMICOL +{ + jpElementStart(5); + jpCheckEmpty(5); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_SUPER jp_PARESTART ArgumentListopt jp_PAREEND jp_SEMICOL +{ + jpElementStart(5); + jpCheckEmpty(5); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +InterfaceHeader: +Modifiersopt jp_INTERFACE Identifier +{ + yyGetParser->StartClass($3); + jpElementStart(3); + yyGetParser->DeallocateParserType(&($3)); + jpCheckEmpty(3); +} + +InterfaceDeclaration: +InterfaceHeader ExtendsInterfacesopt InterfaceBody +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + yyGetParser->EndClass(); +} + +ExtendsInterfacesopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); +} +| +ExtendsInterfaces +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ExtendsInterfaces: +jp_EXTENDS InterfaceType +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ExtendsInterfaces jp_COMMA InterfaceType +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +InterfaceBody: +jp_CURLYSTART InterfaceMemberDeclarations jp_CURLYEND +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +InterfaceMemberDeclarations: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +InterfaceMemberDeclarations InterfaceMemberDeclaration +{ + jpElementStart(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +InterfaceMemberDeclaration: +ConstantDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +AbstractMethodDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ClassDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ClassDeclaration jp_SEMICOL +{ + jpElementStart(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +InterfaceDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +InterfaceDeclaration jp_SEMICOL +{ + jpElementStart(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ConstantDeclaration: +FieldDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +AbstractMethodDeclaration: +MethodHeader Semicols +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Semicols: +jp_SEMICOL +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Semicols jp_SEMICOL +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ArrayInitializer: +jp_CURLYSTART VariableInitializersOptional jp_CURLYEND +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +VariableInitializersOptional: +{ + jpElementStart(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +VariableInitializers +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +VariableInitializers jp_COMMA +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +VariableInitializers: +VariableInitializer +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +VariableInitializers jp_COMMA VariableInitializer +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Block: +jp_CURLYSTART BlockStatementsopt jp_CURLYEND +{ + jpElementStart(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +BlockStatementsopt: +{ + jpElementStart(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +BlockStatements +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +BlockStatements: +BlockStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +BlockStatements BlockStatement +{ + jpElementStart(1); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +BlockStatement: +LocalVariableDeclarationStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Statement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ClassDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +LocalVariableDeclarationStatement: +LocalVariableDeclaration jp_SEMICOL +{ + jpElementStart(1); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +LocalVariableDeclaration: +Modifiers Type VariableDeclarators +{ + jpElementStart(1); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Type VariableDeclarators +{ + jpElementStart(1); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Statement: +StatementWithoutTrailingSubstatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +LabeledStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +IfThenStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +IfThenElseStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +WhileStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ForStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +StatementNoShortIf: +StatementWithoutTrailingSubstatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +LabeledStatementNoShortIf +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +IfThenElseStatementNoShortIf +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +WhileStatementNoShortIf +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ForStatementNoShortIf +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +StatementWithoutTrailingSubstatement: +Block +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +EmptyStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ExpressionStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +SwitchStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +DoStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +BreakStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ContinueStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ReturnStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +SynchronizedStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ThrowStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +TryStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +AssertStatement +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +EmptyStatement: +jp_SEMICOL +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +LabeledStatement: +Identifier jp_COLON Statement +{ + jpElementStart(3); + yyGetParser->DeallocateParserType(&($1)); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +LabeledStatementNoShortIf: +Identifier jp_COLON StatementNoShortIf +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ExpressionStatement: +StatementExpression jp_SEMICOL +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +StatementExpression: +Assignment +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +PreIncrementExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +PreDecrementExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +PostIncrementExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +PostDecrementExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +MethodInvocation +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ClassInstanceCreationExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +IfThenStatement: +jp_IF jp_PARESTART Expression jp_PAREEND Statement +{ + jpElementStart(5); + jpCheckEmpty(5); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +IfThenElseStatement: +jp_IF jp_PARESTART Expression jp_PAREEND StatementNoShortIf jp_ELSE Statement +{ + jpElementStart(7); + jpCheckEmpty(7); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +IfThenElseStatementNoShortIf: +jp_IF jp_PARESTART Expression jp_PAREEND StatementNoShortIf jp_ELSE StatementNoShortIf +{ + jpElementStart(7); + jpCheckEmpty(7); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +SwitchStatement: +jp_SWITCH jp_PARESTART Expression jp_PAREEND SwitchBlock +{ + jpElementStart(5); + +} + +SwitchBlock: +jp_CURLYSTART SwitchBlockStatementGroups SwitchLabelsopt jp_CURLYEND +{ + jpElementStart(4); + +} + +SwitchLabelsopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +SwitchLabels +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +SwitchBlockStatementGroups: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +SwitchBlockStatementGroups SwitchBlockStatementGroup +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +SwitchBlockStatementGroup: +SwitchLabels BlockStatements +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +SwitchLabels: +SwitchLabel +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +SwitchLabels SwitchLabel +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +SwitchLabel: +jp_CASE ConstantExpression jp_COLON +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_DEFAULT jp_COLON +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +WhileStatement: +jp_WHILE jp_PARESTART Expression jp_PAREEND Statement +{ + jpElementStart(5); + +} + +WhileStatementNoShortIf: +jp_WHILE jp_PARESTART Expression jp_PAREEND StatementNoShortIf +{ + jpElementStart(5); + +} + +DoStatement: +jp_DO Statement jp_WHILE jp_PARESTART Expression jp_PAREEND jp_SEMICOL +{ + jpElementStart(7); + +} + +ForStatement: +jp_FOR jp_PARESTART ForInitopt jp_SEMICOL Expressionopt jp_SEMICOL ForUpdateopt jp_PAREEND +Statement +{ + jpElementStart(9); + +} + +ForUpdateopt: +{ + jpElementStart(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ForUpdate +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ForInitopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ForInit +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ForStatementNoShortIf: +jp_FOR jp_PARESTART ForInitopt jp_SEMICOL Expressionopt jp_SEMICOL ForUpdateopt jp_PAREEND +StatementNoShortIf +{ + jpElementStart(9); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Expressionopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Expression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ForInit: +StatementExpressionList +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +LocalVariableDeclaration +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ForUpdate: +StatementExpressionList +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +StatementExpressionList: +StatementExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +StatementExpressionList jp_COMMA StatementExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +AssertStatement: +jp_ASSERT Expression jp_SEMICOL +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_ASSERT Expression jp_COLON Expression jp_SEMICOL +{ + jpElementStart(5); + jpCheckEmpty(5); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +BreakStatement: +jp_BREAK Identifieropt jp_SEMICOL +{ + jpElementStart(3); + yyGetParser->DeallocateParserType(&($2)); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Identifieropt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Identifier +{ + jpElementStart(1); + +} + +ContinueStatement: +jp_CONTINUE Identifieropt jp_SEMICOL +{ + jpElementStart(3); + yyGetParser->DeallocateParserType(&($2)); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ReturnStatement: +jp_RETURN Expressionopt jp_SEMICOL +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ThrowStatement: +jp_THROW Expression jp_SEMICOL +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +SynchronizedStatement: +jp_SYNCHRONIZED jp_PARESTART Expression jp_PAREEND Block +{ + jpElementStart(5); + jpCheckEmpty(5); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +TryStatement: +jp_TRY Block Catches +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_TRY Block Catchesopt Finally +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Catchesopt: +{ + jpElementStart(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Catches +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Catches: +CatchClause +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Catches CatchClause +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +CatchClause: +jp_CATCH jp_PARESTART FormalParameter jp_PAREEND Block +{ + jpElementStart(5); + +} + +Finally: +jp_FINALLY Block +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Primary: +PrimaryNoNewArray +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ArrayCreationExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +PrimaryNoNewArray: +Literal +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_THIS +{ + jpElementStart(1); + +} +| +jp_PARESTART Expression jp_PAREEND +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ClassInstanceCreationExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +FieldAccess +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +MethodInvocation +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ArrayAccess +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ClassInstanceCreationExpression: +New ClassType jp_PARESTART ArgumentListopt jp_PAREEND ClassBodyOpt +{ + jpElementStart(6); + jpCheckEmpty(6); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ClassBodyOpt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ClassBody +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ArgumentListopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ArgumentList +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ArgumentList: +Expression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ArgumentList jp_COMMA Expression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ArrayCreationExpression: +New PrimitiveType DimExprs Dimsopt +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +New ClassOrInterfaceType DimExprs Dimsopt +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +New PrimitiveType Dims ArrayInitializer +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +New ClassOrInterfaceType Dims ArrayInitializer +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Dimsopt: +{ + jpElementStart(0); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Dims +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +DimExprs: +DimExpr +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +DimExprs DimExpr +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +DimExpr: +jp_BRACKETSTART Expression jp_BRACKETEND +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Dims: +jp_BRACKETSTART jp_BRACKETEND +{ + jpElementStart(2); + +} +| +Dims jp_BRACKETSTART jp_BRACKETEND +{ + jpElementStart(3); + +} + +FieldAccess: +Primary jp_DOT Identifier +{ + jpElementStart(3); + yyGetParser->DeallocateParserType(&($3)); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_SUPER jp_DOT Identifier +{ + jpElementStart(3); + yyGetParser->DeallocateParserType(&($3)); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_THIS jp_DOT Identifier +{ + jpElementStart(3); + yyGetParser->DeallocateParserType(&($3)); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Primary jp_DOT jp_THIS +{ + jpElementStart(3); + yyGetParser->DeallocateParserType(&($3)); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +MethodInvocation: +Name jp_PARESTART ArgumentListopt jp_PAREEND +{ + jpElementStart(4); + yyGetParser->DeallocateParserType(&($1)); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Primary jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND +{ + jpElementStart(6); + yyGetParser->DeallocateParserType(&($1)); + yyGetParser->DeallocateParserType(&($3)); + jpCheckEmpty(6); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_SUPER jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND +{ + jpElementStart(6); + yyGetParser->DeallocateParserType(&($3)); + jpCheckEmpty(6); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_THIS jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND +{ + jpElementStart(6); + yyGetParser->DeallocateParserType(&($3)); + jpCheckEmpty(6); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ArrayAccess: +Name jp_BRACKETSTART Expression jp_BRACKETEND +{ + jpElementStart(4); + yyGetParser->DeallocateParserType(&($1)); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +PrimaryNoNewArray jp_BRACKETSTART Expression jp_BRACKETEND +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +PostfixExpression: +Primary +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Name +{ + jpElementStart(1); + yyGetParser->DeallocateParserType(&($1)); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ArrayType jp_DOT jp_CLASS +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +PostIncrementExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +PostDecrementExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +PostIncrementExpression: +PostfixExpression jp_PLUSPLUS +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +PostDecrementExpression: +PostfixExpression jp_MINUSMINUS +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +UnaryExpression: +PreIncrementExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +PreDecrementExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_PLUS UnaryExpression +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_MINUS UnaryExpression +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +UnaryExpressionNotPlusMinus +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +PreIncrementExpression: +jp_PLUSPLUS UnaryExpression +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +PreDecrementExpression: +jp_MINUSMINUS UnaryExpression +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +UnaryExpressionNotPlusMinus: +PostfixExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_TILDE UnaryExpression +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_EXCLAMATION UnaryExpression +{ + jpElementStart(2); + jpCheckEmpty(2); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +CastExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +CastExpression: +jp_PARESTART PrimitiveType Dimsopt jp_PAREEND UnaryExpression +{ + jpElementStart(5); + jpCheckEmpty(5); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_PARESTART Expression jp_PAREEND UnaryExpressionNotPlusMinus +{ + jpElementStart(4); + jpCheckEmpty(4); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_PARESTART Name Dims jp_PAREEND UnaryExpressionNotPlusMinus +{ + jpElementStart(5); + +} + +MultiplicativeExpression: +UnaryExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +MultiplicativeExpression jp_TIMES UnaryExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +MultiplicativeExpression jp_DIVIDE UnaryExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +MultiplicativeExpression jp_PERCENT UnaryExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +AdditiveExpression: +MultiplicativeExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +AdditiveExpression jp_PLUS MultiplicativeExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +AdditiveExpression jp_MINUS MultiplicativeExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ShiftExpression: +AdditiveExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ShiftExpression jp_LTLT AdditiveExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ShiftExpression jp_GTGT AdditiveExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ShiftExpression jp_GTGTGT AdditiveExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +RelationalExpression: +ShiftExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +RelationalExpression jp_LESSTHAN ShiftExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +RelationalExpression jp_GREATER ShiftExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +RelationalExpression jp_LTEQUALS ShiftExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +RelationalExpression jp_GTEQUALS ShiftExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +RelationalExpression jp_INSTANCEOF ReferenceType +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +EqualityExpression: +RelationalExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +EqualityExpression jp_EQUALSEQUALS RelationalExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +EqualityExpression jp_EXCLAMATIONEQUALS RelationalExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +AndExpression: +EqualityExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +AndExpression jp_AND EqualityExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ExclusiveOrExpression: +AndExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ExclusiveOrExpression jp_CARROT AndExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +InclusiveOrExpression: +ExclusiveOrExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +InclusiveOrExpression jp_PIPE ExclusiveOrExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ConditionalAndExpression: +InclusiveOrExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ConditionalAndExpression jp_ANDAND InclusiveOrExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ConditionalOrExpression: +ConditionalAndExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ConditionalOrExpression jp_PIPEPIPE ConditionalAndExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ConditionalExpression: +ConditionalOrExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ConditionalOrExpression jp_QUESTION Expression jp_COLON ConditionalExpression +{ + jpElementStart(5); + jpCheckEmpty(5); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +AssignmentExpression: +ConditionalExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Assignment +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Assignment: +LeftHandSide AssignmentOperator AssignmentExpression +{ + jpElementStart(3); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +LeftHandSide: +Name +{ + jpElementStart(1); + yyGetParser->DeallocateParserType(&($1)); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +FieldAccess +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +ArrayAccess +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +AssignmentOperator: +jp_EQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_TIMESEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_DIVIDEEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_PERCENTEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_PLUSEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_MINUSEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_LESLESEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_GTGTEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_GTGTGTEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_ANDEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_CARROTEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +jp_PIPEEQUALS +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +Expression: +AssignmentExpression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +ConstantExpression: +Expression +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +New: +jp_NEW +{ + jpElementStart(1); + jpCheckEmpty(1); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} +| +Name jp_DOT jp_NEW +{ + jpElementStart(3); + jpStoreClass($1); + jpCheckEmpty(3); + $$ = 0; + yyGetParser->SetCurrentCombine(""); + +} + +%% +/* End of grammar */ + +/*--------------------------------------------------------------------------*/ +void cmDependsJavaError(yyscan_t yyscanner, const char* message) +{ + yyGetParser->Error(message); +} + diff --git a/Source/cmDependsJavaParserHelper.cxx b/Source/cmDependsJavaParserHelper.cxx new file mode 100644 index 0000000..7b595cc --- /dev/null +++ b/Source/cmDependsJavaParserHelper.cxx @@ -0,0 +1,429 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDependsJavaParserHelper.h" + +#include "cmSystemTools.h" +#include "cmDependsJavaLexer.h" + +int cmDependsJava_yyparse( yyscan_t yyscanner ); + +cmDependsJavaParserHelper::cmDependsJavaParserHelper() +{ + this->CurrentDepth = 0; + + this->UnionsAvailable = 0; + this->LastClassId = 0; + + CurrentClass tl; + tl.Name = "*"; + this->ClassStack.push_back(tl); +} + + +cmDependsJavaParserHelper::~cmDependsJavaParserHelper() +{ + this->CleanupParser(); +} + +void cmDependsJavaParserHelper::CurrentClass +::AddFileNamesForPrinting(std::vector *files, + const char* prefix, const char* sep) +{ + cmStdString rname = ""; + if ( prefix ) + { + rname += prefix; + rname += sep; + } + rname += this->Name; + files->push_back(rname); + std::vector::iterator it; + for ( it = this->NestedClasses->begin(); + it != this->NestedClasses->end(); + ++ it ) + { + it->AddFileNamesForPrinting(files, rname.c_str(), sep); + } +} + +void cmDependsJavaParserHelper::DeallocateParserType(char** pt) +{ + if (!pt) + { + return; + } + if (!*pt) + { + return; + } + *pt = 0; + this->UnionsAvailable --; +} + +void cmDependsJavaParserHelper::AddClassFound(const char* sclass) +{ + if( ! sclass ) + { + return; + } + std::vector::iterator it; + for ( it = this->ClassesFound.begin(); + it != this->ClassesFound.end(); + it ++ ) + { + if ( *it == sclass ) + { + return; + } + } + this->ClassesFound.push_back(sclass); +} + +void cmDependsJavaParserHelper::AddPackagesImport(const char* sclass) +{ + std::vector::iterator it; + for ( it = this->PackagesImport.begin(); + it != this->PackagesImport.end(); + it ++ ) + { + if ( *it == sclass ) + { + return; + } + } + this->PackagesImport.push_back(sclass); +} + +void cmDependsJavaParserHelper::SafePrintMissing(const char* str, + int line, int cnt) +{ + if ( str ) + { + std::cout << line << " String " << cnt << " exists: "; + unsigned int cc; + for ( cc = 0; cc < strlen(str); cc ++ ) + { + unsigned char ch = str[cc]; + if ( ch >= 32 && ch <= 126 ) + { + std::cout << (char)ch; + } + else + { + std::cout << "<" << (int)ch << ">"; + break; + } + } + std::cout << "- " << strlen(str) << std::endl; + } +} +void cmDependsJavaParserHelper::Print(const char* place, const char* str) +{ + if ( this->Verbose ) + { + std::cout << "[" << place << "=" << str << "]" << std::endl; + } +} + +void cmDependsJavaParserHelper::CombineUnions(char** out, + const char* in1, char** in2, + const char* sep) +{ + size_t len = 1; + if ( in1 ) + { + len += strlen(in1); + } + if ( *in2 ) + { + len += strlen(*in2); + } + if ( sep ) + { + len += strlen(sep); + } + *out = new char [ len ]; + *out[0] = 0; + if ( in1 ) + { + strcat(*out, in1); + } + if ( sep ) + { + strcat(*out, sep); + } + if ( *in2 ) + { + strcat(*out, *in2); + } + if ( *in2 ) + { + this->DeallocateParserType(in2); + } + this->UnionsAvailable ++; +} + +void cmDependsJavaParserHelper +::CheckEmpty(int line, int cnt, cmDependsJavaParserHelper::ParserType* pt) +{ + int cc; + int kk = -cnt + 1; + for ( cc = 1; cc <= cnt; cc ++) + { + cmDependsJavaParserHelper::ParserType* cpt = pt + kk; + this->SafePrintMissing(cpt->str, line, cc); + kk ++; + } +} + +void cmDependsJavaParserHelper +::PrepareElement(cmDependsJavaParserHelper::ParserType* me) +{ + // Inititalize self + me->str = 0; +} + +void cmDependsJavaParserHelper +::AllocateParserType(cmDependsJavaParserHelper::ParserType* pt, + const char* str, int len) +{ + pt->str = 0; + if ( len == 0 ) + { + len = (int)strlen(str); + } + if ( len == 0 ) + { + return; + } + this->UnionsAvailable ++; + pt->str = new char[ len + 1 ]; + strncpy(pt->str, str, len); + pt->str[len] = 0; + this->Allocates.push_back(pt->str); +} + +void cmDependsJavaParserHelper::StartClass(const char* cls) +{ + CurrentClass cl; + cl.Name = cls; + this->ClassStack.push_back(cl); + + this->CurrentDepth ++; +} + +void cmDependsJavaParserHelper::EndClass() +{ + CurrentClass* parent = 0; + CurrentClass* current = 0; + if ( this->ClassStack.size() > 0 ) + { + current = &(*(this->ClassStack.end() - 1)); + if ( this->ClassStack.size() > 1 ) + { + parent = &(*(this->ClassStack.end() - 2)); + } + } + if ( current == 0 ) + { + std::cerr << "Error when parsing. Current class is null" << std::endl; + abort(); + } + if ( parent == 0 ) + { + std::cerr << "Error when parsing. Parent class is null" << std::endl; + abort(); + } + this->CurrentDepth --; + parent->NestedClasses->push_back(*current); + this->ClassStack.erase(this->ClassStack.end()-1, this->ClassStack.end()); +} + +void cmDependsJavaParserHelper::PrintClasses() +{ + if ( this->ClassStack.size() == 0 ) + { + std::cerr << "Error when parsing. No classes on class stack" << std::endl; + abort(); + } + std::vector files = this->GetFilesProduced(); + std::vector::iterator sit; + for ( sit = files.begin(); + sit != files.end(); + ++ sit ) + { + std::cout << " " << sit->c_str() << ".class" << std::endl; + } +} + +std::vector cmDependsJavaParserHelper::GetFilesProduced() +{ + std::vector files; + CurrentClass* toplevel = &(*(this->ClassStack.begin())); + std::vector::iterator it; + for ( it = toplevel->NestedClasses->begin(); + it != toplevel->NestedClasses->end(); + ++ it ) + { + it->AddFileNamesForPrinting(&files, 0, "$"); + } + return files; +} + +int cmDependsJavaParserHelper::ParseString(const char* str, int verb) +{ + if ( !str) + { + return 0; + } + this->Verbose = verb; + this->InputBuffer = str; + this->InputBufferPos = 0; + this->CurrentLine = 0; + + + yyscan_t yyscanner; + cmDependsJava_yylex_init(&yyscanner); + cmDependsJava_yyset_extra(this, yyscanner); + int res = cmDependsJava_yyparse(yyscanner); + cmDependsJava_yylex_destroy(yyscanner); + if ( res != 0 ) + { + std::cout << "JP_Parse returned: " << res << std::endl; + return 0; + } + + if ( verb ) + { + if ( this->CurrentPackage.size() > 0 ) + { + std::cout << "Current package is: " << + this->CurrentPackage.c_str() << std::endl; + } + std::cout << "Imports packages:"; + if ( this->PackagesImport.size() > 0 ) + { + std::vector::iterator it; + for ( it = this->PackagesImport.begin(); + it != this->PackagesImport.end(); + ++ it ) + { + std::cout << " " << it->c_str(); + } + } + std::cout << std::endl; + std::cout << "Depends on:"; + if ( this->ClassesFound.size() > 0 ) + { + std::vector::iterator it; + for ( it = this->ClassesFound.begin(); + it != this->ClassesFound.end(); + ++ it ) + { + std::cout << " " << it->c_str(); + } + } + std::cout << std::endl; + std::cout << "Generated files:" << std::endl; + this->PrintClasses(); + if ( this->UnionsAvailable != 0 ) + { + std::cout << "There are still " << + this->UnionsAvailable << " unions available" << std::endl; + } + } + this->CleanupParser(); + return 1; +} + +void cmDependsJavaParserHelper::CleanupParser() +{ + std::vector::iterator it; + for ( it = this->Allocates.begin(); + it != this->Allocates.end(); + ++ it ) + { + delete [] *it; + } + this->Allocates.erase(this->Allocates.begin(), + this->Allocates.end()); +} + +int cmDependsJavaParserHelper::LexInput(char* buf, int maxlen) +{ + if ( maxlen < 1 ) + { + return 0; + } + if ( this->InputBufferPos < this->InputBuffer.size() ) + { + buf[0] = this->InputBuffer[ this->InputBufferPos++ ]; + if ( buf[0] == '\n' ) + { + this->CurrentLine ++; + } + return(1); + } + else + { + buf[0] = '\n'; + return( 0 ); + } +} +void cmDependsJavaParserHelper::Error(const char* str) +{ + unsigned long pos = static_cast(this->InputBufferPos); + fprintf(stderr, "JPError: %s (%lu / Line: %d)\n", + str, pos, this->CurrentLine); + int cc; + std::cerr << "String: ["; + for ( cc = 0; + cc < 30 && *(this->InputBuffer.c_str() + this->InputBufferPos + cc); + cc ++ ) + { + std::cerr << *(this->InputBuffer.c_str() + this->InputBufferPos + cc); + } + std::cerr << "]" << std::endl; +} + +void cmDependsJavaParserHelper::UpdateCombine(const char* str1, + const char* str2) +{ + if ( this->CurrentCombine == "" && str1 != 0) + { + this->CurrentCombine = str1; + } + this->CurrentCombine += "."; + this->CurrentCombine += str2; +} + +int cmDependsJavaParserHelper::ParseFile(const char* file) +{ + if ( !cmSystemTools::FileExists(file)) + { + return 0; + } + std::ifstream ifs(file); + if ( !ifs ) + { + return 0; + } + + cmStdString fullfile = ""; + cmStdString line; + while ( cmSystemTools::GetLineFromStream(ifs, line) ) + { + fullfile += line + "\n"; + } + return this->ParseString(fullfile.c_str(), 0); +} + diff --git a/Source/cmDependsJavaParserHelper.h b/Source/cmDependsJavaParserHelper.h new file mode 100644 index 0000000..baecab3 --- /dev/null +++ b/Source/cmDependsJavaParserHelper.h @@ -0,0 +1,128 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDependsJavaParserHelper_h +#define cmDependsJavaParserHelper_h + +#include "cmStandardIncludes.h" + +#define YYSTYPE cmDependsJavaParserHelper::ParserType +#define YYSTYPE_IS_DECLARED +#define YY_EXTRA_TYPE cmDependsJavaParserHelper* +#define YY_DECL int cmDependsJava_yylex(YYSTYPE* yylvalp, yyscan_t yyscanner) + +/** \class cmDependsJavaParserHelper + * \brief Helper class for parsing java source files + * + * Finds dependencies for java file and list of outputs + */ + +class cmDependsJavaParserHelper +{ +public: + typedef struct { + char* str; + } ParserType; + + cmDependsJavaParserHelper(); + ~cmDependsJavaParserHelper(); + + int ParseString(const char* str, int verb); + int ParseFile(const char* file); + + // For the lexer: + void AllocateParserType(cmDependsJavaParserHelper::ParserType* pt, + const char* str, int len = 0); + + int LexInput(char* buf, int maxlen); + void Error(const char* str); + + // For yacc + void AddClassFound(const char* sclass); + void PrepareElement(ParserType* opt); + void DeallocateParserType(char** pt); + void CheckEmpty(int line, int cnt, ParserType* pt); + void StartClass(const char* cls); + void EndClass(); + void AddPackagesImport(const char* sclass); + void SetCurrentPackage(const char* pkg) { this->CurrentPackage = pkg; } + const char* GetCurrentPackage() { return this->CurrentPackage.c_str(); } + void SetCurrentCombine(const char* cmb) { this->CurrentCombine = cmb; } + const char* GetCurrentCombine() { return this->CurrentCombine.c_str(); } + void UpdateCombine(const char* str1, const char* str2); + + std::vector& GetClassesFound() { return this->ClassesFound; } + + std::vector GetFilesProduced(); + +private: + class CurrentClass + { + public: + cmStdString Name; + std::vector* NestedClasses; + CurrentClass() + { + this->NestedClasses = new std::vector; + } + ~CurrentClass() + { + delete this->NestedClasses; + } + CurrentClass& operator=(CurrentClass const& c) + { + this->NestedClasses->clear(); + this->Name = c.Name; + std::copy( + c.NestedClasses->begin(), + c.NestedClasses->end(), + std::back_inserter( + *this->NestedClasses) + ); + return *this; + } + CurrentClass(CurrentClass const& c) + { + (*this) = c; + } + void AddFileNamesForPrinting(std::vector *files, + const char* prefix, const char* sep); + }; + cmStdString CurrentPackage; + cmStdString::size_type InputBufferPos; + cmStdString InputBuffer; + std::vector OutputBuffer; + std::vector ClassesFound; + std::vector PackagesImport; + cmStdString CurrentCombine; + + std::vector ClassStack; + + int CurrentLine; + int UnionsAvailable; + int LastClassId; + int CurrentDepth; + int Verbose; + + std::vector Allocates; + + void PrintClasses(); + + void Print(const char* place, const char* str); + void CombineUnions(char** out, const char* in1, char** in2, + const char* sep); + void SafePrintMissing(const char* str, int line, int cnt); + + void CleanupParser(); +}; + +#endif + diff --git a/Source/cmDependsJavaParserTokens.h b/Source/cmDependsJavaParserTokens.h new file mode 100644 index 0000000..c7a414f --- /dev/null +++ b/Source/cmDependsJavaParserTokens.h @@ -0,0 +1,254 @@ +/* A Bison parser, made by GNU Bison 1.875d. */ + +/* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, + 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + jp_ABSTRACT = 258, + jp_ASSERT = 259, + jp_BOOLEAN_TYPE = 260, + jp_BREAK = 261, + jp_BYTE_TYPE = 262, + jp_CASE = 263, + jp_CATCH = 264, + jp_CHAR_TYPE = 265, + jp_CLASS = 266, + jp_CONTINUE = 267, + jp_DEFAULT = 268, + jp_DO = 269, + jp_DOUBLE_TYPE = 270, + jp_ELSE = 271, + jp_EXTENDS = 272, + jp_FINAL = 273, + jp_FINALLY = 274, + jp_FLOAT_TYPE = 275, + jp_FOR = 276, + jp_IF = 277, + jp_IMPLEMENTS = 278, + jp_IMPORT = 279, + jp_INSTANCEOF = 280, + jp_INT_TYPE = 281, + jp_INTERFACE = 282, + jp_LONG_TYPE = 283, + jp_NATIVE = 284, + jp_NEW = 285, + jp_PACKAGE = 286, + jp_PRIVATE = 287, + jp_PROTECTED = 288, + jp_PUBLIC = 289, + jp_RETURN = 290, + jp_SHORT_TYPE = 291, + jp_STATIC = 292, + jp_STRICTFP = 293, + jp_SUPER = 294, + jp_SWITCH = 295, + jp_SYNCHRONIZED = 296, + jp_THIS = 297, + jp_THROW = 298, + jp_THROWS = 299, + jp_TRANSIENT = 300, + jp_TRY = 301, + jp_VOID = 302, + jp_VOLATILE = 303, + jp_WHILE = 304, + jp_BOOLEANLITERAL = 305, + jp_CHARACTERLITERAL = 306, + jp_DECIMALINTEGERLITERAL = 307, + jp_FLOATINGPOINTLITERAL = 308, + jp_HEXINTEGERLITERAL = 309, + jp_NULLLITERAL = 310, + jp_STRINGLITERAL = 311, + jp_NAME = 312, + jp_AND = 313, + jp_ANDAND = 314, + jp_ANDEQUALS = 315, + jp_BRACKETEND = 316, + jp_BRACKETSTART = 317, + jp_CARROT = 318, + jp_CARROTEQUALS = 319, + jp_COLON = 320, + jp_COMMA = 321, + jp_CURLYEND = 322, + jp_CURLYSTART = 323, + jp_DIVIDE = 324, + jp_DIVIDEEQUALS = 325, + jp_DOLLAR = 326, + jp_DOT = 327, + jp_EQUALS = 328, + jp_EQUALSEQUALS = 329, + jp_EXCLAMATION = 330, + jp_EXCLAMATIONEQUALS = 331, + jp_GREATER = 332, + jp_GTEQUALS = 333, + jp_GTGT = 334, + jp_GTGTEQUALS = 335, + jp_GTGTGT = 336, + jp_GTGTGTEQUALS = 337, + jp_LESLESEQUALS = 338, + jp_LESSTHAN = 339, + jp_LTEQUALS = 340, + jp_LTLT = 341, + jp_MINUS = 342, + jp_MINUSEQUALS = 343, + jp_MINUSMINUS = 344, + jp_PAREEND = 345, + jp_PARESTART = 346, + jp_PERCENT = 347, + jp_PERCENTEQUALS = 348, + jp_PIPE = 349, + jp_PIPEEQUALS = 350, + jp_PIPEPIPE = 351, + jp_PLUS = 352, + jp_PLUSEQUALS = 353, + jp_PLUSPLUS = 354, + jp_QUESTION = 355, + jp_SEMICOL = 356, + jp_TILDE = 357, + jp_TIMES = 358, + jp_TIMESEQUALS = 359, + jp_ERROR = 360 + }; +#endif +#define jp_ABSTRACT 258 +#define jp_ASSERT 259 +#define jp_BOOLEAN_TYPE 260 +#define jp_BREAK 261 +#define jp_BYTE_TYPE 262 +#define jp_CASE 263 +#define jp_CATCH 264 +#define jp_CHAR_TYPE 265 +#define jp_CLASS 266 +#define jp_CONTINUE 267 +#define jp_DEFAULT 268 +#define jp_DO 269 +#define jp_DOUBLE_TYPE 270 +#define jp_ELSE 271 +#define jp_EXTENDS 272 +#define jp_FINAL 273 +#define jp_FINALLY 274 +#define jp_FLOAT_TYPE 275 +#define jp_FOR 276 +#define jp_IF 277 +#define jp_IMPLEMENTS 278 +#define jp_IMPORT 279 +#define jp_INSTANCEOF 280 +#define jp_INT_TYPE 281 +#define jp_INTERFACE 282 +#define jp_LONG_TYPE 283 +#define jp_NATIVE 284 +#define jp_NEW 285 +#define jp_PACKAGE 286 +#define jp_PRIVATE 287 +#define jp_PROTECTED 288 +#define jp_PUBLIC 289 +#define jp_RETURN 290 +#define jp_SHORT_TYPE 291 +#define jp_STATIC 292 +#define jp_STRICTFP 293 +#define jp_SUPER 294 +#define jp_SWITCH 295 +#define jp_SYNCHRONIZED 296 +#define jp_THIS 297 +#define jp_THROW 298 +#define jp_THROWS 299 +#define jp_TRANSIENT 300 +#define jp_TRY 301 +#define jp_VOID 302 +#define jp_VOLATILE 303 +#define jp_WHILE 304 +#define jp_BOOLEANLITERAL 305 +#define jp_CHARACTERLITERAL 306 +#define jp_DECIMALINTEGERLITERAL 307 +#define jp_FLOATINGPOINTLITERAL 308 +#define jp_HEXINTEGERLITERAL 309 +#define jp_NULLLITERAL 310 +#define jp_STRINGLITERAL 311 +#define jp_NAME 312 +#define jp_AND 313 +#define jp_ANDAND 314 +#define jp_ANDEQUALS 315 +#define jp_BRACKETEND 316 +#define jp_BRACKETSTART 317 +#define jp_CARROT 318 +#define jp_CARROTEQUALS 319 +#define jp_COLON 320 +#define jp_COMMA 321 +#define jp_CURLYEND 322 +#define jp_CURLYSTART 323 +#define jp_DIVIDE 324 +#define jp_DIVIDEEQUALS 325 +#define jp_DOLLAR 326 +#define jp_DOT 327 +#define jp_EQUALS 328 +#define jp_EQUALSEQUALS 329 +#define jp_EXCLAMATION 330 +#define jp_EXCLAMATIONEQUALS 331 +#define jp_GREATER 332 +#define jp_GTEQUALS 333 +#define jp_GTGT 334 +#define jp_GTGTEQUALS 335 +#define jp_GTGTGT 336 +#define jp_GTGTGTEQUALS 337 +#define jp_LESLESEQUALS 338 +#define jp_LESSTHAN 339 +#define jp_LTEQUALS 340 +#define jp_LTLT 341 +#define jp_MINUS 342 +#define jp_MINUSEQUALS 343 +#define jp_MINUSMINUS 344 +#define jp_PAREEND 345 +#define jp_PARESTART 346 +#define jp_PERCENT 347 +#define jp_PERCENTEQUALS 348 +#define jp_PIPE 349 +#define jp_PIPEEQUALS 350 +#define jp_PIPEPIPE 351 +#define jp_PLUS 352 +#define jp_PLUSEQUALS 353 +#define jp_PLUSPLUS 354 +#define jp_QUESTION 355 +#define jp_SEMICOL 356 +#define jp_TILDE 357 +#define jp_TIMES 358 +#define jp_TIMESEQUALS 359 +#define jp_ERROR 360 + + + + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + + + diff --git a/Source/cmDocumentCompileDefinitions.h b/Source/cmDocumentCompileDefinitions.h new file mode 100644 index 0000000..ef3b3e7 --- /dev/null +++ b/Source/cmDocumentCompileDefinitions.h @@ -0,0 +1,34 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2011 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 cmDocumentCompileDefinitions_h +#define cmDocumentCompileDefinitions_h + +#define CM_DOCUMENT_COMPILE_DEFINITIONS_DISCLAIMER \ + "Disclaimer: Most native build tools have poor support for escaping " \ + "certain values. CMake has work-arounds for many cases but some " \ + "values may just not be possible to pass correctly. If a value " \ + "does not seem to be escaped correctly, do not attempt to " \ + "work-around the problem by adding escape sequences to the value. " \ + "Your work-around may break in a future version of CMake that " \ + "has improved escape support. Instead consider defining the macro " \ + "in a (configured) header file. Then report the limitation. " \ + "Known limitations include:\n" \ + " # - broken almost everywhere\n" \ + " ; - broken in VS IDE and Borland Makefiles\n" \ + " , - broken in VS IDE\n" \ + " % - broken in some cases in NMake\n" \ + " & | - broken in some cases on MinGW\n" \ + " ^ < > \\\" - broken in most Make tools on Windows\n" \ + "CMake does not reject these values outright because they do work " \ + "in some cases. Use with caution. " + +#endif diff --git a/Source/cmDocumentGeneratorExpressions.h b/Source/cmDocumentGeneratorExpressions.h new file mode 100644 index 0000000..5359013 --- /dev/null +++ b/Source/cmDocumentGeneratorExpressions.h @@ -0,0 +1,30 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2010 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 cmDocumentGeneratorExpressions_h +#define cmDocumentGeneratorExpressions_h + +#define CM_DOCUMENT_COMMAND_GENERATOR_EXPRESSIONS \ + "Generator expressions are evaluted during build system generation " \ + "to produce information specific to each build configuration. " \ + "Valid expressions are:\n" \ + " $ = configuration name\n" \ + " $ = main file (.exe, .so.1.2, .a)\n" \ + " $ = file used to link (.a, .lib, .so)\n" \ + " $ = file with soname (.so.3)\n" \ + "where \"tgt\" is the name of a target. " \ + "Target file expressions produce a full path, but _DIR and _NAME " \ + "versions can produce the directory and file name components:\n" \ + " $/$\n" \ + " $/$\n" \ + " $/$\n" + +#endif diff --git a/Source/cmDocumentLocationUndefined.h b/Source/cmDocumentLocationUndefined.h new file mode 100644 index 0000000..d1be77a --- /dev/null +++ b/Source/cmDocumentLocationUndefined.h @@ -0,0 +1,24 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2011 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 cmDocumentLocationUndefined_h +#define cmDocumentLocationUndefined_h + +#define CM_LOCATION_UNDEFINED_BEHAVIOR(action) \ + "\n" \ + "Do not set properties that affect the location of a target after " \ + action ". These include properties whose names match " \ + "\"(RUNTIME|LIBRARY|ARCHIVE)_OUTPUT_(NAME|DIRECTORY)(_)?\" " \ + "or \"(IMPLIB_)?(PREFIX|SUFFIX)\". " \ + "Failure to follow this rule is not diagnosed and leaves the location " \ + "of the target undefined." + +#endif diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx new file mode 100644 index 0000000..897e516 --- /dev/null +++ b/Source/cmDocumentVariables.cxx @@ -0,0 +1,1705 @@ +#include "cmDocumentVariables.h" +#include "cmake.h" + +void cmDocumentVariables::DefineVariables(cmake* cm) +{ + // Subsection: variables defined by cmake, that give + // information about the project, and cmake + cm->DefineProperty + ("CMAKE_AR", cmProperty::VARIABLE, + "Name of archiving tool for static libraries.", + "This specifies name of the program that creates archive " + "or static libraries.",false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_COMMAND", cmProperty::VARIABLE, + "The full path to the cmake executable.", + "This is the full path to the CMake executable cmake which is " + "useful from custom commands that want to use the cmake -E " + "option for portable system commands. " + "(e.g. /usr/local/bin/cmake", false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_BINARY_DIR", cmProperty::VARIABLE, + "The path to the top level of the build tree.", + "This is the full path to the top level of the current CMake " + "build tree. For an in-source build, this would be the same " + "as CMAKE_SOURCE_DIR. ", false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_SOURCE_DIR", cmProperty::VARIABLE, + "The path to the top level of the source tree.", + "This is the full path to the top level of the current CMake " + "source tree. For an in-source build, this would be the same " + "as CMAKE_BINARY_DIR. ", false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_CURRENT_BINARY_DIR", cmProperty::VARIABLE, + "The path to the binary directory currently being processed.", + "This the full path to the build directory that is currently " + "being processed by cmake. Each directory added by " + "add_subdirectory will create a binary directory in the build " + "tree, and as it is being processed this variable will be set. " + "For in-source builds this is the current source directory " + "being processed.", false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_CURRENT_SOURCE_DIR", cmProperty::VARIABLE, + "The path to the source directory currently being processed.", + "This the full path to the source directory that is currently " + "being processed by cmake. ", false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_CURRENT_LIST_FILE", cmProperty::VARIABLE, + "Full path to the listfile currently being processed.", + "As CMake processes the listfiles in your project this " + "variable will always be set to the one currently being " + "processed. " + "The value has dynamic scope. " + "When CMake starts processing commands in a source file " + "it sets this variable to the location of the file. " + "When CMake finishes processing commands from the file it " + "restores the previous value. " + "Therefore the value of the variable inside a macro or " + "function is the file invoking the bottom-most entry on " + "the call stack, not the file containing the macro or " + "function definition." + "\n" + "See also CMAKE_PARENT_LIST_FILE.",false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_CURRENT_LIST_LINE", cmProperty::VARIABLE, + "The line number of the current file being processed.", + "This is the line number of the file currently being" + " processed by cmake.", false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_CURRENT_LIST_DIR", cmProperty::VARIABLE, + "Full directory of the listfile currently being processed.", + "As CMake processes the listfiles in your project this " + "variable will always be set to the directory where the listfile which " + "is currently being processed (CMAKE_CURRENT_LIST_FILE) is located. " + "The value has dynamic scope. " + "When CMake starts processing commands in a source file " + "it sets this variable to the directory where this file is located. " + "When CMake finishes processing commands from the file it " + "restores the previous value. " + "Therefore the value of the variable inside a macro or " + "function is the directory of the file invoking the bottom-most entry on " + "the call stack, not the directory of the file containing the macro or " + "function definition." + "\n" + "See also CMAKE_CURRENT_LIST_FILE.",false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_SCRIPT_MODE_FILE", cmProperty::VARIABLE, + "Full path to the -P script file currently being processed. ", + "When run in -P script mode, CMake sets this variable to the full " + "path of the script file. When run to configure a CMakeLists.txt " + "file, this variable is not set.", false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_ARGC", cmProperty::VARIABLE, + "Number of command line arguments passed to CMake in script mode. ", + "When run in -P script mode, CMake sets this variable to the number " + "of command line arguments. See also CMAKE_ARGV0, 1, 2 ... ", false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_ARGV0", cmProperty::VARIABLE, + "Command line argument passed to CMake in script mode. ", + "When run in -P script mode, CMake sets this variable to " + "the first command line argument. It then also sets CMAKE_ARGV1, " + "CMAKE_ARGV2, ... and so on, up to the number of command line arguments " + "given. See also CMAKE_ARGC.", false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_BUILD_TOOL", cmProperty::VARIABLE, + "Tool used for the actual build process.", + "This variable is set to the program that will be" + " needed to build the output of CMake. If the " + "generator selected was Visual Studio 6, the " + "CMAKE_BUILD_TOOL will be set to msdev, for " + "Unix makefiles it will be set to make or gmake, " + "and for Visual Studio 7 it set to devenv. For " + "Nmake Makefiles the value is nmake. This can be " + "useful for adding special flags and commands based" + " on the final build environment. ", false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_CROSSCOMPILING", cmProperty::VARIABLE, + "Is CMake currently cross compiling.", + "This variable will be set to true by CMake if CMake is cross " + "compiling. Specifically if the build platform is different " + "from the target platform.", false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_CACHEFILE_DIR", cmProperty::VARIABLE, + "The directory with the CMakeCache.txt file.", + "This is the full path to the directory that has the " + "CMakeCache.txt file in it. This is the same as " + "CMAKE_BINARY_DIR.", false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_CACHE_MAJOR_VERSION", cmProperty::VARIABLE, + "Major version of CMake used to create the CMakeCache.txt file", + "This is stores the major version of CMake used to " + "write a CMake cache file. It is only different when " + "a different version of CMake is run on a previously " + "created cache file.", false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_CACHE_MINOR_VERSION", cmProperty::VARIABLE, + "Minor version of CMake used to create the CMakeCache.txt file", + "This is stores the minor version of CMake used to " + "write a CMake cache file. It is only different when " + "a different version of CMake is run on a previously " + "created cache file.", false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_CACHE_PATCH_VERSION", cmProperty::VARIABLE, + "Patch version of CMake used to create the CMakeCache.txt file", + "This is stores the patch version of CMake used to " + "write a CMake cache file. It is only different when " + "a different version of CMake is run on a previously " + "created cache file.", false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_CFG_INTDIR", cmProperty::VARIABLE, + "Build-time reference to per-configuration output subdirectory.", + "For native build systems supporting multiple configurations " + "in the build tree (such as Visual Studio and Xcode), " + "the value is a reference to a build-time variable specifying " + "the name of the per-configuration output subdirectory. " + "On Makefile generators this evaluates to \".\" because there " + "is only one configuration in a build tree. " + "Example values:\n" + " $(IntDir) = Visual Studio 6\n" + " $(OutDir) = Visual Studio 7, 8, 9\n" + " $(Configuration) = Visual Studio 10\n" + " $(CONFIGURATION) = Xcode\n" + " . = Make-based tools\n" + "Since these values are evaluated by the native build system, this " + "variable is suitable only for use in command lines that will be " + "evaluated at build time. " + "Example of intended usage:\n" + " add_executable(mytool mytool.c)\n" + " add_custom_command(\n" + " OUTPUT out.txt\n" + " COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mytool\n" + " ${CMAKE_CURRENT_SOURCE_DIR}/in.txt out.txt\n" + " DEPENDS mytool in.txt\n" + " )\n" + " add_custom_target(drive ALL DEPENDS out.txt)\n" + "Note that CMAKE_CFG_INTDIR is no longer necessary for this purpose " + "but has been left for compatibility with existing projects. " + "Instead add_custom_command() recognizes executable target names in " + "its COMMAND option, so " + "\"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mytool\" can be " + "replaced by just \"mytool\"." + "\n" + "This variable is read-only. Setting it is undefined behavior. " + "In multi-configuration build systems the value of this variable " + "is passed as the value of preprocessor symbol \"CMAKE_INTDIR\" to " + "the compilation of all source files.",false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_CTEST_COMMAND", cmProperty::VARIABLE, + "Full path to ctest command installed with cmake.", + "This is the full path to the CTest executable ctest " + "which is useful from custom commands that want " + " to use the cmake -E option for portable system " + "commands.",false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_DL_LIBS", cmProperty::VARIABLE, + "Name of library containing dlopen and dlcose.", + "The name of the library that has dlopen and " + "dlclose in it, usually -ldl on most UNIX machines.",false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_EDIT_COMMAND", cmProperty::VARIABLE, + "Full path to cmake-gui or ccmake.", + "This is the full path to the CMake executable " + "that can graphically edit the cache. For example," + " cmake-gui, ccmake, or cmake -i.",false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_GENERATOR", cmProperty::VARIABLE, + "The generator used to build the project.", + "The name of the generator that is being used to generate the " + "build files. (e.g. \"Unix Makefiles\", " + "\"Visual Studio 6\", etc.)",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_EXTRA_GENERATOR", cmProperty::VARIABLE, + "The extra generator used to build the project.", + "When using the Eclipse, CodeBlocks or KDevelop generators, CMake " + "generates Makefiles (CMAKE_GENERATOR) and additionally project files " + "for the respective IDE. This IDE project file generator is stored in " + "CMAKE_EXTRA_GENERATOR (e.g. \"Eclipse CDT4\").",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_HOME_DIRECTORY", cmProperty::VARIABLE, + "Path to top of source tree.", + "This is the path to the top level of the source tree.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_LINK_LIBRARY_SUFFIX", cmProperty::VARIABLE, + "The suffix for libraries that you link to.", + "The suffix to use for the end of a library, .lib on Windows.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_EXECUTABLE_SUFFIX", cmProperty::VARIABLE, + "The suffix for executables on this platform.", + "The suffix to use for the end of an executable if any, " + ".exe on Windows." + "\n" + "CMAKE_EXECUTABLE_SUFFIX_ overrides this for language ." + ,false, "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_MAJOR_VERSION", cmProperty::VARIABLE, + "The Major version of cmake (i.e. the 2 in 2.X.X)", + "This specifies the major version of the CMake executable" + " being run.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_MAKE_PROGRAM", cmProperty::VARIABLE, + "See CMAKE_BUILD_TOOL.", + "This variable is around for backwards compatibility, " + "see CMAKE_BUILD_TOOL.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_MINOR_VERSION", cmProperty::VARIABLE, + "The Minor version of cmake (i.e. the 4 in X.4.X).", + "This specifies the minor version of the CMake" + " executable being run.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_PATCH_VERSION", cmProperty::VARIABLE, + "The patch version of cmake (i.e. the 3 in X.X.3).", + "This specifies the patch version of the CMake" + " executable being run.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_TWEAK_VERSION", cmProperty::VARIABLE, + "The tweak version of cmake (i.e. the 1 in X.X.X.1).", + "This specifies the tweak version of the CMake executable being run. " + "Releases use tweak < 20000000 and development versions use the date " + "format CCYYMMDD for the tweak level." + ,false, "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_VERSION", cmProperty::VARIABLE, + "The full version of cmake in major.minor.patch[.tweak[-id]] format.", + "This specifies the full version of the CMake executable being run. " + "This variable is defined by versions 2.6.3 and higher. " + "See variables CMAKE_MAJOR_VERSION, CMAKE_MINOR_VERSION, " + "CMAKE_PATCH_VERSION, and CMAKE_TWEAK_VERSION " + "for individual version components. " + "The [-id] component appears in non-release versions " + "and may be arbitrary text.", false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_PARENT_LIST_FILE", cmProperty::VARIABLE, + "Full path to the parent listfile of the one currently being processed.", + "As CMake processes the listfiles in your project this " + "variable will always be set to the listfile that included " + "or somehow invoked the one currently being " + "processed. See also CMAKE_CURRENT_LIST_FILE.",false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_PROJECT_NAME", cmProperty::VARIABLE, + "The name of the current project.", + "This specifies name of the current project from" + " the closest inherited PROJECT command.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_RANLIB", cmProperty::VARIABLE, + "Name of randomizing tool for static libraries.", + "This specifies name of the program that randomizes " + "libraries on UNIX, not used on Windows, but may be present.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_ROOT", cmProperty::VARIABLE, + "Install directory for running cmake.", + "This is the install root for the running CMake and" + " the Modules directory can be found here. This is" + " commonly used in this format: ${CMAKE_ROOT}/Modules",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_SIZEOF_VOID_P", cmProperty::VARIABLE, + "Size of a void pointer.", + "This is set to the size of a pointer on the machine, " + "and is determined by a try compile. If a 64 bit size " + "is found, then the library search path is modified to " + "look for 64 bit libraries first.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_SKIP_RPATH", cmProperty::VARIABLE, + "If true, do not add run time path information.", + "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. 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, + "Source directory for project.", + "This is the top level source directory for the project. " + "It corresponds to the source directory given to " + "cmake-gui or ccmake.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_STANDARD_LIBRARIES", cmProperty::VARIABLE, + "Libraries linked into every executable and shared library.", + "This is the list of libraries that are linked " + "into all executables and libraries.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_USING_VC_FREE_TOOLS", cmProperty::VARIABLE, + "True if free visual studio tools being used.", + "This is set to true if the compiler is Visual " + "Studio free tools.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_VERBOSE_MAKEFILE", cmProperty::VARIABLE, + "Create verbose makefiles if on.", + "This variable defaults to false. You can set " + "this variable to true to make CMake produce verbose " + "makefiles that show each command line as it is used.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("PROJECT_BINARY_DIR", cmProperty::VARIABLE, + "Full path to build directory for project.", + "This is the binary directory of the most recent " + "PROJECT command.",false,"Variables that Provide Information"); + cm->DefineProperty + ("PROJECT_NAME", cmProperty::VARIABLE, + "Name of the project given to the project command.", + "This is the name given to the most " + "recent PROJECT command. ",false, + "Variables that Provide Information"); + cm->DefineProperty + ("PROJECT_SOURCE_DIR", cmProperty::VARIABLE, + "Top level source directory for the current project.", + "This is the source directory of the most recent " + "PROJECT command.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("[Project name]_BINARY_DIR", cmProperty::VARIABLE, + "Top level binary directory for the named project.", + "A variable is created with the name used in the PROJECT " + "command, and is the binary directory for the project. " + " This can be useful when SUBDIR is used to connect " + "several projects.",false, + "Variables that Provide Information"); + cm->DefineProperty + ("[Project name]_SOURCE_DIR", cmProperty::VARIABLE, + "Top level source directory for the named project.", + "A variable is created with the name used in the PROJECT " + "command, and is the source directory for the project." + " This can be useful when add_subdirectory " + "is used to connect several projects.",false, + "Variables that Provide Information"); + + cm->DefineProperty + ("CMAKE_IMPORT_LIBRARY_PREFIX", cmProperty::VARIABLE, + "The prefix for import libraries that you link to.", + "The prefix to use for the name of an import library if used " + "on this platform." + "\n" + "CMAKE_IMPORT_LIBRARY_PREFIX_ overrides this for language ." + ,false, "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_IMPORT_LIBRARY_SUFFIX", cmProperty::VARIABLE, + "The suffix for import libraries that you link to.", + "The suffix to use for the end of an import library if used " + "on this platform." + "\n" + "CMAKE_IMPORT_LIBRARY_SUFFIX_ overrides this for language ." + ,false, "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_SHARED_LIBRARY_PREFIX", cmProperty::VARIABLE, + "The prefix for shared libraries that you link to.", + "The prefix to use for the name of a shared library, lib on UNIX." + "\n" + "CMAKE_SHARED_LIBRARY_PREFIX_ overrides this for language ." + ,false, "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_SHARED_LIBRARY_SUFFIX", cmProperty::VARIABLE, + "The suffix for shared libraries that you link to.", + "The suffix to use for the end of a shared library, .dll on Windows." + "\n" + "CMAKE_SHARED_LIBRARY_SUFFIX_ overrides this for language ." + ,false, "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_SHARED_MODULE_PREFIX", cmProperty::VARIABLE, + "The prefix for loadable modules that you link to.", + "The prefix to use for the name of a loadable module on this platform." + "\n" + "CMAKE_SHARED_MODULE_PREFIX_ overrides this for language ." + ,false, "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_SHARED_MODULE_SUFFIX", cmProperty::VARIABLE, + "The suffix for shared libraries that you link to.", + "The suffix to use for the end of a loadable module on this platform" + "\n" + "CMAKE_SHARED_MODULE_SUFFIX_ overrides this for language ." + ,false, "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_STATIC_LIBRARY_PREFIX", cmProperty::VARIABLE, + "The prefix for static libraries that you link to.", + "The prefix to use for the name of a static library, lib on UNIX." + "\n" + "CMAKE_STATIC_LIBRARY_PREFIX_ overrides this for language ." + ,false, "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_STATIC_LIBRARY_SUFFIX", cmProperty::VARIABLE, + "The suffix for static libraries that you link to.", + "The suffix to use for the end of a static library, .lib on Windows." + "\n" + "CMAKE_STATIC_LIBRARY_SUFFIX_ overrides this for language ." + ,false, "Variables that Provide Information"); + cm->DefineProperty + ("CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES", cmProperty::VARIABLE, + "Additional suffixes for shared libraries.", + "Extensions for shared libraries other than that specified by " + "CMAKE_SHARED_LIBRARY_SUFFIX, if any. " + "CMake uses this to recognize external shared library files during " + "analysis of libraries linked by a target.", + false, + "Variables that Provide Information"); + + + // Variables defined by cmake, that change the behavior + // of cmake + + cm->DefineProperty + ("CMAKE_POLICY_DEFAULT_CMP", cmProperty::VARIABLE, + "Default for CMake Policy CMP when it is otherwise left unset.", + "Commands cmake_minimum_required(VERSION) and cmake_policy(VERSION) " + "by default leave policies introduced after the given version unset. " + "Set CMAKE_POLICY_DEFAULT_CMP to OLD or NEW to specify the " + "default for policy CMP, where is the policy number." + "\n" + "This variable should not be set by a project in CMake code; " + "use cmake_policy(SET) instead. " + "Users running CMake may set this variable in the cache " + "(e.g. -DCMAKE_POLICY_DEFAULT_CMP=) " + "to set a policy not otherwise set by the project. " + "Set to OLD to quiet a policy warning while using old behavior " + "or to NEW to try building the project with new behavior.", + false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_AUTOMOC_RELAXED_MODE", cmProperty::VARIABLE, + "Switch between strict and relaxed automoc mode.", + "By default, automoc behaves exactly as described in the documentation " + "of the AUTOMOC target property. " + "When set to TRUE, it accepts more input and tries to find the correct " + "input file for moc even if it differs from the documented behaviour. " + "In this mode it e.g. also checks whether a header file is intended to " + "be processed by moc when a \"foo.moc\" file has been included.\n" + "Relaxed mode has to be enabled for KDE4 compatibility.", + false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_FIND_LIBRARY_PREFIXES", cmProperty::VARIABLE, + "Prefixes to prepend when looking for libraries.", + "This specifies what prefixes to add to library names when " + "the find_library command looks for libraries. On UNIX " + "systems this is typically lib, meaning that when trying " + "to find the foo library it will look for libfoo.", + false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_FIND_LIBRARY_SUFFIXES", cmProperty::VARIABLE, + "Suffixes to append when looking for libraries.", + "This specifies what suffixes to add to library names when " + "the find_library command looks for libraries. On Windows " + "systems this is typically .lib and .dll, meaning that when trying " + "to find the foo library it will look for foo.dll etc.", + false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_CONFIGURATION_TYPES", cmProperty::VARIABLE, + "Specifies the available build types.", + "This specifies what build types will be available such as " + "Debug, Release, RelWithDebInfo etc. This has reasonable defaults " + "on most platforms. But can be extended to provide other " + "build types. See also CMAKE_BUILD_TYPE.", + false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_BUILD_TYPE", cmProperty::VARIABLE, + "Specifies the build type for make based generators.", + "This specifies what build type will be built in this tree. " + " Possible values are empty, Debug, Release, RelWithDebInfo" + " and MinSizeRel. This variable is only supported for " + "make based generators. If this variable is supported, " + "then CMake will also provide initial values for the " + "variables with the name " + " CMAKE_C_FLAGS_[DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL]." + " For example, if CMAKE_BUILD_TYPE is Debug, then " + "CMAKE_C_FLAGS_DEBUG will be added to the CMAKE_C_FLAGS.",false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_BACKWARDS_COMPATIBILITY", cmProperty::VARIABLE, + "Version of cmake required to build project", + "From the point of view of backwards compatibility, this " + "specifies what version of CMake should be supported. By " + "default this value is the version number of CMake that " + "you are running. You can set this to an older version of" + " CMake to support deprecated commands of CMake in projects" + " that were written to use older versions of CMake. This " + "can be set by the user or set at the beginning of a " + "CMakeLists file.",false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_INSTALL_PREFIX", cmProperty::VARIABLE, + "Install directory used by install.", + "If \"make install\" is invoked or INSTALL is built" + ", this directory is pre-pended onto all install " + "directories. This variable defaults to /usr/local" + " on UNIX and c:/Program Files on Windows.",false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_SKIP_INSTALL_ALL_DEPENDENCY", cmProperty::VARIABLE, + "Don't make the install target depend on the all target.", + "By default, the \"install\" target depends on the \"all\" target. " + "This has the effect, that when \"make install\" is invoked or INSTALL " + "is built, first the \"all\" target is built, then the installation " + "starts. " + "If CMAKE_SKIP_INSTALL_ALL_DEPENDENCY is set to TRUE, this dependency " + "is not created, so the installation process will start immediately, " + "independent from whether the project has been completely built or not." + ,false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_MODULE_PATH", cmProperty::VARIABLE, + "List of directories to search for CMake modules.", + "Commands like include() and find_package() search for files in " + "directories listed by this variable before checking the default " + "modules that come with CMake.", + false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_PREFIX_PATH", cmProperty::VARIABLE, + "Path used for searching by FIND_XXX(), with appropriate suffixes added.", + "Specifies a path which will be used by the FIND_XXX() commands. It " + "contains the \"base\" directories, the FIND_XXX() commands append " + "appropriate subdirectories to the base directories. So FIND_PROGRAM() " + "adds /bin to each of the directories in the path, FIND_LIBRARY() " + "appends /lib to each of the directories, and FIND_PATH() and " + "FIND_FILE() append /include . By default it is empty, it is intended " + "to be set by the project. See also CMAKE_SYSTEM_PREFIX_PATH, " + "CMAKE_INCLUDE_PATH, CMAKE_LIBRARY_PATH, CMAKE_PROGRAM_PATH.", false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_INCLUDE_PATH", cmProperty::VARIABLE, + "Path used for searching by FIND_FILE() and FIND_PATH().", + "Specifies a path which will be used both by FIND_FILE() and " + "FIND_PATH(). Both commands will check each of the contained directories " + "for the existence of the file which is currently searched. By default " + "it is empty, it is intended to be set by the project. See also " + "CMAKE_SYSTEM_INCLUDE_PATH, CMAKE_PREFIX_PATH.", false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_LIBRARY_PATH", cmProperty::VARIABLE, + "Path used for searching by FIND_LIBRARY().", + "Specifies a path which will be used by FIND_LIBRARY(). FIND_LIBRARY() " + "will check each of the contained directories for the existence of the " + "library which is currently searched. By default it is empty, it is " + "intended to be set by the project. See also CMAKE_SYSTEM_LIBRARY_PATH, " + "CMAKE_PREFIX_PATH.", false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_PROGRAM_PATH", cmProperty::VARIABLE, + "Path used for searching by FIND_PROGRAM().", + "Specifies a path which will be used by FIND_PROGRAM(). FIND_PROGRAM() " + "will check each of the contained directories for the existence of the " + "program which is currently searched. By default it is empty, it is " + "intended to be set by the project. See also CMAKE_SYSTEM_PROGRAM_PATH, " + " CMAKE_PREFIX_PATH.", false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_SYSTEM_PREFIX_PATH", cmProperty::VARIABLE, + "Path used for searching by FIND_XXX(), with appropriate suffixes added.", + "Specifies a path which will be used by the FIND_XXX() commands. It " + "contains the \"base\" directories, the FIND_XXX() commands append " + "appropriate subdirectories to the base directories. So FIND_PROGRAM() " + "adds /bin to each of the directories in the path, FIND_LIBRARY() " + "appends /lib to each of the directories, and FIND_PATH() and " + "FIND_FILE() append /include . By default this contains the standard " + "directories for the current system. It is NOT intended " + "to be modified by the project, use CMAKE_PREFIX_PATH for this. See also " + "CMAKE_SYSTEM_INCLUDE_PATH, CMAKE_SYSTEM_LIBRARY_PATH, " + "CMAKE_SYSTEM_PROGRAM_PATH, and CMAKE_SYSTEM_IGNORE_PATH.", false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_SYSTEM_IGNORE_PATH", cmProperty::VARIABLE, + "Path to be ignored by FIND_XXX() commands.", + "Specifies directories to be ignored by searches in FIND_XXX() commands " + "This is useful in cross-compiled environments where some system " + "directories contain incompatible but possibly linkable libraries. For " + "example, on cross-compiled cluster environments, this allows a user to " + "ignore directories containing libraries meant for the front-end " + "machine that modules like FindX11 (and others) would normally search. " + "By default this contains a list of directories containing incompatible " + "binaries for the host system. " + "See also CMAKE_SYSTEM_PREFIX_PATH, CMAKE_SYSTEM_LIBRARY_PATH, " + "CMAKE_SYSTEM_INCLUDE_PATH, and CMAKE_SYSTEM_PROGRAM_PATH.", false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_IGNORE_PATH", cmProperty::VARIABLE, + "Path to be ignored by FIND_XXX() commands.", + "Specifies directories to be ignored by searches in FIND_XXX() commands " + "This is useful in cross-compiled environments where some system " + "directories contain incompatible but possibly linkable libraries. For " + "example, on cross-compiled cluster environments, this allows a user to " + "ignore directories containing libraries meant for the front-end " + "machine that modules like FindX11 (and others) would normally search. " + "By default this is empty; it is intended to be set by the project. " + "Note that CMAKE_IGNORE_PATH takes a list of directory names, NOT a " + "list of prefixes. If you want to ignore paths under prefixes (bin, " + "include, lib, etc.), you'll need to specify them explicitly. " + "See also CMAKE_PREFIX_PATH, CMAKE_LIBRARY_PATH, CMAKE_INCLUDE_PATH, " + "CMAKE_PROGRAM_PATH.", false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_SYSTEM_INCLUDE_PATH", cmProperty::VARIABLE, + "Path used for searching by FIND_FILE() and FIND_PATH().", + "Specifies a path which will be used both by FIND_FILE() and " + "FIND_PATH(). Both commands will check each of the contained directories " + "for the existence of the file which is currently searched. By default " + "it contains the standard directories for the current system. It is " + "NOT intended to be modified by the project, use CMAKE_INCLUDE_PATH " + "for this. See also CMAKE_SYSTEM_PREFIX_PATH.", false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_SYSTEM_LIBRARY_PATH", cmProperty::VARIABLE, + "Path used for searching by FIND_LIBRARY().", + "Specifies a path which will be used by FIND_LIBRARY(). FIND_LIBRARY() " + "will check each of the contained directories for the existence of the " + "library which is currently searched. By default it contains the " + "standard directories for the current system. It is NOT intended to be " + "modified by the project, use CMAKE_LIBRARY_PATH for this. See " + "also CMAKE_SYSTEM_PREFIX_PATH.", false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_SYSTEM_PROGRAM_PATH", cmProperty::VARIABLE, + "Path used for searching by FIND_PROGRAM().", + "Specifies a path which will be used by FIND_PROGRAM(). FIND_PROGRAM() " + "will check each of the contained directories for the existence of the " + "program which is currently searched. By default it contains the " + "standard directories for the current system. It is NOT intended to be " + "modified by the project, use CMAKE_PROGRAM_PATH for this. See also " + "CMAKE_SYSTEM_PREFIX_PATH.", false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_DISABLE_FIND_PACKAGE_", cmProperty::VARIABLE, + "Variable for disabling find_package() calls.", + "Every non-REQUIRED find_package() call in a project can be disabled " + "by setting the variable CMAKE_DISABLE_FIND_PACKAGE_ to " + "TRUE. This can be used to build a project without an optional package, " + "although that package is installed.\n" + "This switch should be used during the initial CMake run. Otherwise if " + "the package has already been found in a previous CMake run, the " + "variables which have been stored in the cache will still be there. " + "In the case it is recommended to remove the cache variables for " + "this package from the cache using the cache editor or cmake -U", false, + "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.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 " + "language from either the project() or enable_language() commands. " + "It is loaded after CMake's builtin compiler and platform information " + "modules have been loaded but before the information is used. " + "The file may set platform information variables to override CMake's " + "defaults." + "\n" + "This feature is intended for use only in overriding information " + "variables that must be set before CMake builds its first test " + "project to check that the compiler for a language works. " + "It should not be used to load a file in cases that a normal include() " + "will work. " + "Use it only as a last resort for behavior that cannot be achieved " + "any other way. " + "For example, one may set CMAKE_C_FLAGS_INIT to change the default " + "value used to initialize CMAKE_C_FLAGS before it is cached. " + "The override file should NOT be used to set anything that could " + "be set after languages are enabled, such as variables like " + "CMAKE_RUNTIME_OUTPUT_DIRECTORY that affect the placement of binaries. " + "Information set in the file will be used for try_compile and try_run " + "builds too." + ,false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("BUILD_SHARED_LIBS", cmProperty::VARIABLE, + "Global flag to cause add_library to create shared libraries if on.", + "If present and true, this will cause all libraries to be " + "built shared unless the library was explicitly added as a " + "static library. This variable is often added to projects " + "as an OPTION so that each user of a project can decide if " + "they want to build the project using shared or static " + "libraries.",false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_NOT_USING_CONFIG_FLAGS", cmProperty::VARIABLE, + "Skip _BUILD_TYPE flags if true.", + "This is an internal flag used by the generators in " + "CMake to tell CMake to skip the _BUILD_TYPE flags.",false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_MFC_FLAG", cmProperty::VARIABLE, + "Tell cmake to use MFC for an executable or dll.", + "This can be set in a CMakeLists.txt file and will " + "enable MFC in the application. It should be set " + "to 1 for static the static MFC library, and 2 for " + "the shared MFC library. This is used in visual " + "studio 6 and 7 project files. The CMakeSetup " + "dialog used MFC and the CMakeLists.txt looks like this:\n" + "add_definitions(-D_AFXDLL)\n" + "set(CMAKE_MFC_FLAG 2)\n" + "add_executable(CMakeSetup WIN32 ${SRCS})\n",false, + "Variables That Change Behavior"); + + cm->DefineProperty + ("CMAKE_COLOR_MAKEFILE", cmProperty::VARIABLE, + "Enables color output when using the Makefile generator.", + "When enabled, the generated Makefiles will produce colored output. " + "Default is ON.",false, + "Variables That Change Behavior"); + + + // Variables defined by CMake that describe the system + + cm->DefineProperty + ("CMAKE_SYSTEM", cmProperty::VARIABLE, + "Name of system cmake is compiling for.", + "This variable is the composite of CMAKE_SYSTEM_NAME " + "and CMAKE_SYSTEM_VERSION, like this " + "${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_VERSION}. " + "If CMAKE_SYSTEM_VERSION is not set, then " + "CMAKE_SYSTEM is the same as CMAKE_SYSTEM_NAME.",false, + "Variables That Describe the System"); + cm->DefineProperty + ("CMAKE_SYSTEM_NAME", cmProperty::VARIABLE, + "Name of the OS CMake is building for.", + "This is the name of the operating system on " + "which CMake is targeting. On systems that " + "have the uname command, this variable is set " + "to the output of uname -s. Linux, Windows, " + " and Darwin for Mac OSX are the values found " + " on the big three operating systems." ,false, + "Variables That Describe the System"); + cm->DefineProperty + ("CMAKE_SYSTEM_PROCESSOR", cmProperty::VARIABLE, + "The name of the CPU CMake is building for.", + "On systems that support uname, this variable is " + "set to the output of uname -p, on windows it is " + "set to the value of the environment variable " + "PROCESSOR_ARCHITECTURE",false, + "Variables That Describe the System"); + cm->DefineProperty + ("CMAKE_SYSTEM_VERSION", cmProperty::VARIABLE, + "OS version CMake is building for.", + "A numeric version string for the system, on " + "systems that support uname, this variable is " + "set to the output of uname -r. On other " + "systems this is set to major-minor version numbers.",false, + "Variables That Describe the System"); + cm->DefineProperty + ("CMAKE_LIBRARY_ARCHITECTURE", cmProperty::VARIABLE, + "Target architecture library directory name, if detected.", + "This is the value of CMAKE__LIBRARY_ARCHITECTURE as " + "detected for one of the enabled languages.",false, + "Variables That Describe the System"); + cm->DefineProperty + ("CMAKE_LIBRARY_ARCHITECTURE_REGEX", cmProperty::VARIABLE, + "Regex matching possible target architecture library directory names.", + "This is used to detect CMAKE__LIBRARY_ARCHITECTURE from the " + "implicit linker search path by matching the name.",false, + "Variables That Describe the System"); + + cm->DefineProperty + ("CMAKE_HOST_SYSTEM", cmProperty::VARIABLE, + "Name of system cmake is being run on.", + "The same as CMAKE_SYSTEM but for the host system instead " + "of the target system when cross compiling.",false, + "Variables That Describe the System"); + cm->DefineProperty + ("CMAKE_HOST_SYSTEM_NAME", cmProperty::VARIABLE, + "Name of the OS CMake is running on.", + "The same as CMAKE_SYSTEM_NAME but for the host system instead " + "of the target system when cross compiling.",false, + "Variables That Describe the System"); + cm->DefineProperty + ("CMAKE_HOST_SYSTEM_PROCESSOR", cmProperty::VARIABLE, + "The name of the CPU CMake is running on.", + "The same as CMAKE_SYSTEM_PROCESSOR but for the host system instead " + "of the target system when cross compiling.",false, + "Variables That Describe the System"); + cm->DefineProperty + ("CMAKE_HOST_SYSTEM_VERSION", cmProperty::VARIABLE, + "OS version CMake is running on.", + "The same as CMAKE_SYSTEM_VERSION but for the host system instead " + "of the target system when cross compiling.",false, + "Variables That Describe the System"); + + cm->DefineProperty + ("APPLE", cmProperty::VARIABLE, + "True if running on Mac OSX.", + "Set to true on Mac OSX.",false, + "Variables That Describe the System"); + + cm->DefineProperty + ("BORLAND", cmProperty::VARIABLE, + "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"); + + cm->DefineProperty + ("CYGWIN", cmProperty::VARIABLE, + "True for cygwin.", + "Set to true when using CYGWIN.",false, + "Variables That Describe the System"); + + cm->DefineProperty + ("MSVC", cmProperty::VARIABLE, + "True when using Microsoft Visual C", + "Set to true when the compiler is some version of Microsoft Visual C.", + false, + "Variables That Describe the System"); + + cm->DefineProperty + ("MSVC80", cmProperty::VARIABLE, + "True when using Microsoft Visual C 8.0", + "Set to true when the compiler is version 8.0 of Microsoft Visual C.", + false, + "Variables That Describe the System"); + + cm->DefineProperty + ("MSVC_IDE", cmProperty::VARIABLE, + "True when using the Microsoft Visual C IDE", + "Set to true when the target platform is the Microsoft Visual C IDE, " + "as opposed to the command line compiler.", + false, + "Variables That Describe the System"); + + cm->DefineProperty + ("MSVC_VERSION", cmProperty::VARIABLE, + "The version of Microsoft Visual C/C++ being used if any.", + "Known version numbers are:\n" + " 1200 = VS 6.0\n" + " 1300 = VS 7.0\n" + " 1310 = VS 7.1\n" + " 1400 = VS 8.0\n" + " 1500 = VS 9.0\n" + " 1600 = VS 10.0\n" + "", + false, + "Variables That Describe the System"); + + cm->DefineProperty + ("CMAKE_CL_64", cmProperty::VARIABLE, + "Using the 64 bit compiler from Microsoft", + "Set to true when using the 64 bit cl compiler from Microsoft.", + false, + "Variables That Describe the System"); + + cm->DefineProperty + ("CMAKE_COMPILER_2005", cmProperty::VARIABLE, + "Using the Visual Studio 2005 compiler from Microsoft", + "Set to true when using the Visual Studio 2005 compiler " + "from Microsoft.", + false, + "Variables That Describe the System"); + + cm->DefineProperty + ("UNIX", cmProperty::VARIABLE, + "True for UNIX and UNIX like operating systems.", + "Set to true when the target system is UNIX or UNIX like " + "(i.e. APPLE and CYGWIN).",false, + "Variables That Describe the System"); + + cm->DefineProperty + ("WIN32", cmProperty::VARIABLE, + "True on windows systems, including win64.", + "Set to true when the target system is Windows.",false, + "Variables That Describe the System"); + + cm->DefineProperty + ("XCODE_VERSION", cmProperty::VARIABLE, + "Version of Xcode (Xcode generator only).", + "Under the Xcode generator, this is the version of Xcode as specified in " + "\"Xcode.app/Contents/version.plist\" (such as \"3.1.2\").",false, + "Variables That Describe the System"); + + cm->DefineProperty + ("CMAKE_HOST_APPLE", cmProperty::VARIABLE, + "True for Apple OSXoperating systems.", + "Set to true when the host system is Apple OSX.", + false, + "Variables That Describe the System"); + + cm->DefineProperty + ("CMAKE_HOST_UNIX", cmProperty::VARIABLE, + "True for UNIX and UNIX like operating systems.", + "Set to true when the host system is UNIX or UNIX like " + "(i.e. APPLE and CYGWIN).",false, + "Variables That Describe the System"); + + cm->DefineProperty + ("CMAKE_HOST_WIN32", cmProperty::VARIABLE, + "True on windows systems, including win64.", + "Set to true when the host system is Windows and on cygwin.",false, + "Variables That Describe the System"); + + cm->DefineProperty + ("CMAKE_OBJECT_PATH_MAX", cmProperty::VARIABLE, + "Maximum object file full-path length allowed by native build tools.", + "CMake computes for every source file an object file name that is " + "unique to the source file and deterministic with respect to the " + "full path to the source file. " + "This allows multiple source files in a target to share the same name " + "if they lie in different directories without rebuilding when one is " + "added or removed. " + "However, it can produce long full paths in a few cases, so CMake " + "shortens the path using a hashing scheme when the full path to an " + "object file exceeds a limit. " + "CMake has a built-in limit for each platform that is sufficient for " + "common tools, but some native tools may have a lower limit. " + "This variable may be set to specify the limit explicitly. " + "The value must be an integer no less than 128.",false, + "Variables That Describe the System"); + + // Variables that affect the building of object files and + // targets. + // + cm->DefineProperty + ("CMAKE_INCLUDE_CURRENT_DIR", cmProperty::VARIABLE, + "Automatically add the current source- and build directories " + "to the include path.", + "If this variable is enabled, CMake automatically adds in each " + "directory ${CMAKE_CURRENT_SOURCE_DIR} and ${CMAKE_CURRENT_BINARY_DIR} " + "to the include path for this directory. These additional include " + "directories do not propagate down to subdirectories. This is useful " + "mainly for out-of-source builds, where files generated into the " + "build tree are included by files located in the source tree.\n" + "By default CMAKE_INCLUDE_CURRENT_DIR is OFF.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_INSTALL_RPATH", cmProperty::VARIABLE, + "The rpath to use for installed targets.", + "A semicolon-separated list specifying the rpath " + "to use in installed targets (for platforms that support it). " + "This is used to initialize the target property " + "INSTALL_RPATH for all targets.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_INSTALL_RPATH_USE_LINK_PATH", cmProperty::VARIABLE, + "Add paths to linker search and installed rpath.", + "CMAKE_INSTALL_RPATH_USE_LINK_PATH is a boolean that if set to true " + "will append directories in the linker search path and outside the " + "project to the INSTALL_RPATH. " + "This is used to initialize the target property " + "INSTALL_RPATH_USE_LINK_PATH for all targets.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_INSTALL_NAME_DIR", cmProperty::VARIABLE, + "Mac OSX directory name for installed targets.", + "CMAKE_INSTALL_NAME_DIR is used to initialize the " + "INSTALL_NAME_DIR property on all targets. See that target " + "property for more information.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_Fortran_FORMAT", cmProperty::VARIABLE, + "Set to FIXED or FREE to indicate the Fortran source layout.", + "This variable is used to initialize the Fortran_FORMAT " + "property on all the targets. " + "See that target property for additional information.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_Fortran_MODULE_DIRECTORY", cmProperty::VARIABLE, + "Fortran module output directory.", + "This variable is used to initialize the " + "Fortran_MODULE_DIRECTORY property on all the targets. " + "See that target property for additional information.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_LIBRARY_OUTPUT_DIRECTORY", cmProperty::VARIABLE, + "Where to put all the LIBRARY targets when built.", + "This variable is used to initialize the " + "LIBRARY_OUTPUT_DIRECTORY property on all the targets. " + "See that target property for additional information.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_ARCHIVE_OUTPUT_DIRECTORY", cmProperty::VARIABLE, + "Where to put all the ARCHIVE targets when built.", + "This variable is used to initialize the " + "ARCHIVE_OUTPUT_DIRECTORY property on all the targets. " + "See that target property for additional information.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_RUNTIME_OUTPUT_DIRECTORY", cmProperty::VARIABLE, + "Where to put all the RUNTIME targets when built.", + "This variable is used to initialize the " + "RUNTIME_OUTPUT_DIRECTORY property on all the targets. " + "See that target property for additional information.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_AUTOMOC", cmProperty::VARIABLE, + "Whether to handle moc automatically for Qt targets.", + "This variable is used to initialize the " + "AUTOMOC property on all the targets. " + "See that target property for additional information.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_AUTOMOC_MOC_OPTIONS", cmProperty::VARIABLE, + "Additional options for moc when using automoc (see CMAKE_AUTOMOC).", + "This variable is used to initialize the " + "AUTOMOC_MOC_OPTIONS property on all the targets. " + "See that target property for additional information.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_GNUtoMS", cmProperty::VARIABLE, + "Convert GNU import libraries (.dll.a) to MS format (.lib).", + "This variable is used to initialize the GNUtoMS property on targets " + "when they are created. " + "See that target property for additional information.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_DEBUG_POSTFIX", cmProperty::VARIABLE, + "See variable CMAKE__POSTFIX.", + "This variable is a special case of the more-general " + "CMAKE__POSTFIX variable for the DEBUG configuration.", + false, + "Variables that Control the Build"); + cm->DefineProperty + ("CMAKE__POSTFIX", cmProperty::VARIABLE, + "Default filename postfix for libraries under configuration .", + "When a non-executable target is created its _POSTFIX " + "target property is initialized with the value of this variable " + "if it is set.", + false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_BUILD_WITH_INSTALL_RPATH", cmProperty::VARIABLE, + "Use the install path for the RPATH", + "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 built with the install path for the RPATH and does not " + "need to be relinked when installed.",false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_NO_BUILTIN_CHRPATH", cmProperty::VARIABLE, + "Do not use the builtin ELF editor to fix RPATHs on installation.", + "When an ELF binary needs to have a different RPATH after installation " + "than it does in the build tree, CMake uses a builtin editor to change " + "the RPATH in the installed copy. " + "If this variable is set to true then CMake will relink the binary " + "before installation instead of using its builtin editor.",false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_SKIP_BUILD_RPATH", cmProperty::VARIABLE, + "Do not include RPATHs in the build 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 built with no RPATH.",false, + "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, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_EXE_LINKER_FLAGS_[CMAKE_BUILD_TYPE]", cmProperty::VARIABLE, + "Flag used when linking an executable.", + "Same as CMAKE_C_FLAGS_* but used by the linker " + "when creating executables.",false, + "Variables that Control the Build"); + cm->DefineProperty + ("CMAKE_LIBRARY_PATH_FLAG", cmProperty::VARIABLE, + "The flag used to add a library search path to a compiler.", + "The flag used to specify a library directory to the compiler. " + "On most compilers this is \"-L\".",false, + "Variables that Control the Build"); + cm->DefineProperty + ("CMAKE_LINK_DEF_FILE_FLAG ", cmProperty::VARIABLE, + "Linker flag used to specify a .def file for dll creation.", + "The flag used to add a .def file when creating " + "a dll on Windows, this is only defined on Windows.",false, + "Variables that Control the Build"); + cm->DefineProperty + ("CMAKE_LINK_LIBRARY_FLAG", cmProperty::VARIABLE, + "Flag used to link a library into an executable.", + "The flag used to specify a library to link to an executable. " + "On most compilers this is \"-l\".",false, + "Variables that Control the Build"); + cm->DefineProperty + ("CMAKE_LINK_LIBRARY_FILE_FLAG", cmProperty::VARIABLE, + "Flag used to link a library specified by a path to its file.", + "The flag used before a library file path is given to the linker. " + "This is needed only on very few platforms.", false, + "Variables that Control the Build"); + cm->DefineProperty + ("CMAKE_USE_RELATIVE_PATHS", cmProperty::VARIABLE, + "Use relative paths (May not work!).", + "If this is set to TRUE, then the CMake will use " + "relative paths between the source and binary tree. " + "This option does not work for more complicated " + "projects, and relative paths are used when possible. " + "In general, it is not possible to move CMake generated" + " makefiles to a different location regardless " + "of the value of this variable.",false, + "Variables that Control the Build"); + cm->DefineProperty + ("EXECUTABLE_OUTPUT_PATH", cmProperty::VARIABLE, + "Old executable location variable.", + "The target property RUNTIME_OUTPUT_DIRECTORY supercedes " + "this variable for a target if it is set. " + "Executable targets are otherwise placed in this directory.",false, + "Variables that Control the Build"); + cm->DefineProperty + ("LIBRARY_OUTPUT_PATH", cmProperty::VARIABLE, + "Old library location variable.", + "The target properties ARCHIVE_OUTPUT_DIRECTORY, " + "LIBRARY_OUTPUT_DIRECTORY, and RUNTIME_OUTPUT_DIRECTORY supercede " + "this variable for a target if they are set. " + "Library targets are otherwise placed in this directory.",false, + "Variables that Control the Build"); + cm->DefineProperty + ("CMAKE_TRY_COMPILE_CONFIGURATION", cmProperty::VARIABLE, + "Build configuration used for try_compile and try_run projects.", + "Projects built by try_compile and try_run are built " + "synchronously during the CMake configuration step. " + "Therefore a specific build configuration must be chosen even " + "if the generated build system supports multiple configurations.",false, + "Variables that Control the Build"); + cm->DefineProperty + ("CMAKE_LINK_INTERFACE_LIBRARIES", cmProperty::VARIABLE, + "Default value for LINK_INTERFACE_LIBRARIES of targets.", + "This variable is used to initialize the " + "LINK_INTERFACE_LIBRARIES property on all the targets. " + "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) +// programs. This support will be loaded whenever CMake is used to compile +// (LANG) files. C and CXX are examples of the most common values for (LANG). + + cm->DefineProperty + ("CMAKE_USER_MAKE_RULES_OVERRIDE_", cmProperty::VARIABLE, + "Specify a CMake file that overrides platform information for .", + "This is a language-specific version of " + "CMAKE_USER_MAKE_RULES_OVERRIDE loaded only when enabling " + "language .",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__COMPILER", cmProperty::VARIABLE, + "The full path to the compiler for LANG.", + "This is the command that will be used as the compiler. " + "Once set, you can not change this variable.",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__COMPILER_ID", cmProperty::VARIABLE, + "An internal variable subject to change.", + "This is used in determining the compiler and is subject to change.", + false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__PLATFORM_ID", cmProperty::VARIABLE, + "An internal variable subject to change.", + "This is used in determining the platform and is subject to change.", + false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__COMPILER_ABI", cmProperty::VARIABLE, + "An internal variable subject to change.", + "This is used in determining the compiler ABI and is subject to change.", + false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__COMPILER_VERSION", cmProperty::VARIABLE, + "An internal variable subject to change.", + "Compiler version in major[.minor[.patch[.tweak]]] format. " + "This variable is reserved for internal use by CMake and is not " + "guaranteed to be set.", + false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE_INTERNAL_PLATFORM_ABI", cmProperty::VARIABLE, + "An internal variable subject to change.", + "This is used in determining the compiler ABI and is subject to change.", + false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__SIZEOF_DATA_PTR", cmProperty::VARIABLE, + "Size of pointer-to-data types for language .", + "This holds the size (in bytes) of pointer-to-data types in the target " + "platform ABI. " + "It is defined for languages C and CXX (C++).", + false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE_COMPILER_IS_GNU", cmProperty::VARIABLE, + "True if the compiler is GNU.", + "If the selected compiler is the GNU " + "compiler then this is TRUE, if not it is FALSE.",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__FLAGS_DEBUG", cmProperty::VARIABLE, + "Flags for Debug build type or configuration.", + " flags used when CMAKE_BUILD_TYPE is Debug.",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__FLAGS_MINSIZEREL", cmProperty::VARIABLE, + "Flags for MinSizeRel build type or configuration.", + " flags used when CMAKE_BUILD_TYPE is MinSizeRel." + "Short for minimum size release.",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__FLAGS_RELEASE", cmProperty::VARIABLE, + "Flags for Release build type or configuration.", + " flags used when CMAKE_BUILD_TYPE is Release",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__FLAGS_RELWITHDEBINFO", cmProperty::VARIABLE, + "Flags for RelWithDebInfo type or configuration.", + " flags used when CMAKE_BUILD_TYPE is RelWithDebInfo. " + "Short for Release With Debug Information.",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__COMPILE_OBJECT", cmProperty::VARIABLE, + "Rule variable to compile a single object file.", + "This is a rule variable that tells CMake how to " + "compile a single object file for for the language .",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__CREATE_SHARED_LIBRARY", cmProperty::VARIABLE, + "Rule variable to create a shared library.", + "This is a rule variable that tells CMake how to " + "create a shared library for the language .",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__CREATE_SHARED_MODULE", cmProperty::VARIABLE, + "Rule variable to create a shared module.", + "This is a rule variable that tells CMake how to " + "create a shared library for the language .",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__CREATE_STATIC_LIBRARY", cmProperty::VARIABLE, + "Rule variable to create a static library.", + "This is a rule variable that tells CMake how " + "to create a static library for the language .",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__ARCHIVE_CREATE", cmProperty::VARIABLE, + "Rule variable to create a new static archive.", + "This is a rule variable that tells CMake how to create a static " + "archive. It is used in place of CMAKE__CREATE_STATIC_LIBRARY " + "on some platforms in order to support large object counts. " + "See also CMAKE__ARCHIVE_APPEND and CMAKE__ARCHIVE_FINISH.", + false, "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__ARCHIVE_APPEND", cmProperty::VARIABLE, + "Rule variable to append to a static archive.", + "This is a rule variable that tells CMake how to append to a static " + "archive. It is used in place of CMAKE__CREATE_STATIC_LIBRARY " + "on some platforms in order to support large object counts. " + "See also CMAKE__ARCHIVE_CREATE and CMAKE__ARCHIVE_FINISH.", + false, "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__ARCHIVE_FINISH", cmProperty::VARIABLE, + "Rule variable to finish an existing static archive.", + "This is a rule variable that tells CMake how to finish a static " + "archive. It is used in place of CMAKE__CREATE_STATIC_LIBRARY " + "on some platforms in order to support large object counts. " + "See also CMAKE__ARCHIVE_CREATE and CMAKE__ARCHIVE_APPEND.", + false, "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__IGNORE_EXTENSIONS", cmProperty::VARIABLE, + "File extensions that should be ignored by the build.", + "This is a list of file extensions that may be " + "part of a project for a given language but are not compiled. ",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__IMPLICIT_INCLUDE_DIRECTORIES", cmProperty::VARIABLE, + "Directories implicitly searched by the compiler for header files.", + "CMake does not explicitly specify these directories on compiler " + "command lines for language . " + "This prevents system include directories from being treated as user " + "include directories on some compilers.", false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__IMPLICIT_LINK_DIRECTORIES", cmProperty::VARIABLE, + "Implicit linker search path detected for language .", + "Compilers typically pass directories containing language runtime " + "libraries and default library search paths when they invoke a linker. " + "These paths are implicit linker search directories for the compiler's " + "language. " + "CMake automatically detects these directories for each language and " + "reports the results in this variable.", false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__IMPLICIT_LINK_LIBRARIES", cmProperty::VARIABLE, + "Implicit link libraries and flags detected for language .", + "Compilers typically pass language runtime library names and " + "other flags when they invoke a linker. " + "These flags are implicit link options for the compiler's language. " + "CMake automatically detects these libraries and flags for each " + "language and reports the results in this variable.", false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__LIBRARY_ARCHITECTURE", cmProperty::VARIABLE, + "Target architecture library directory name detected for .", + "If the compiler passes to the linker an architecture-specific " + "system library search directory such as /lib/ this " + "variable contains the name if/as detected by CMake.",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__LINKER_PREFERENCE_PROPAGATES", cmProperty::VARIABLE, + "True if CMAKE__LINKER_PREFERENCE propagates across targets.", + "This is used when CMake selects a linker language for a target. " + "Languages compiled directly into the target are always considered. " + "A language compiled into static libraries linked by the target is " + "considered if this variable is true.", false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__LINKER_PREFERENCE", cmProperty::VARIABLE, + "Preference value for linker language selection.", + "The \"linker language\" for executable, shared library, and module " + "targets is the language whose compiler will invoke the linker. " + "The LINKER_LANGUAGE target property sets the language explicitly. " + "Otherwise, the linker language is that whose linker preference value " + "is highest among languages compiled and linked into the target. " + "See also the CMAKE__LINKER_PREFERENCE_PROPAGATES variable.", + false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__LINK_EXECUTABLE ", cmProperty::VARIABLE, + "Rule variable to link and executable.", + "Rule variable to link and executable for the given language.",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__OUTPUT_EXTENSION", cmProperty::VARIABLE, + "Extension for the output of a compile for a single file.", + "This is the extension for an object file for " + "the given . For example .obj for C on Windows.",false, + "Variables for Languages"); + + cm->DefineProperty + ("CMAKE__SOURCE_FILE_EXTENSIONS", cmProperty::VARIABLE, + "Extensions of source files for the given language.", + "This is the list of extensions for a " + "given languages source files.",false,"Variables for Languages"); + + cm->DefineProperty( + "CMAKE__COMPILER_LOADED", cmProperty::VARIABLE, + "Defined to true if the language is enabled.", + "When language is enabled by project() or enable_language() " + "this variable is defined to 1.", + false,"Variables for Languages"); + + cm->DefineProperty( + "CMAKE_Fortran_MODDIR_FLAG", cmProperty::VARIABLE, + "Fortran flag for module output directory.", + "This stores the flag needed to pass the value of the " + "Fortran_MODULE_DIRECTORY target property to the compiler.", + false,"Variables for Languages"); + + cm->DefineProperty( + "CMAKE_Fortran_MODDIR_DEFAULT", cmProperty::VARIABLE, + "Fortran default module output directory.", + "Most Fortran compilers write .mod files to the current working " + "directory. " + "For those that do not, this is set to \".\" and used when the " + "Fortran_MODULE_DIRECTORY target property is not set.", + false,"Variables for Languages"); + + cm->DefineProperty( + "CMAKE_Fortran_MODOUT_FLAG", cmProperty::VARIABLE, + "Fortran flag to enable module output.", + "Most Fortran compilers write .mod files out by default. " + "For others, this stores the flag needed to enable module output.", + false,"Variables for Languages"); + + // variables that are used by cmake but not to be documented + cm->DefineProperty("CMAKE_MATCH_0", cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_MATCH_1", cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_MATCH_2", cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_MATCH_3", cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_MATCH_4", cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_MATCH_5", cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_MATCH_6", cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_MATCH_7", cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_MATCH_8", cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_MATCH_9", cmProperty::VARIABLE,0,0); + + cm->DefineProperty("CMAKE__COMPILER_ARG1", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__COMPILER_ENV_VAR", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__COMPILER_ID_RUN", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__ABI_FILES", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__CREATE_ASSEMBLY_SOURCE", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__CREATE_PREPROCESSED_SOURCE", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__FLAGS_DEBUG_INIT", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__FLAGS_INIT", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__FLAGS_MINSIZEREL_INIT", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__FLAGS_RELEASE_INIT", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__FLAGS_RELWITHDEBINFO_INIT", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__INFORMATION_LOADED", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__LINK_EXECUTABLE", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__LINK_FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__RESPONSE_FILE_LINK_FLAG", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__STANDARD_LIBRARIES", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__STANDARD_LIBRARIES_INIT", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__USE_RESPONSE_FILE_FOR_INCLUDES", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE__USE_RESPONSE_FILE_FOR_OBJECTS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_EXECUTABLE_SUFFIX_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_EXE_LINK_DYNAMIC__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_EXE_LINK_STATIC__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_GENERATOR_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_IMPORT_LIBRARY_PREFIX_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_IMPORT_LIBRARY_SUFFIX_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_INCLUDE_FLAG_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_INCLUDE_FLAG_SEP_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_INCLUDE_SYSTEM_FLAG_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_NEEDS_REQUIRES_STEP__FLAG", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_LIBRARY_CREATE__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_LIBRARY__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_LIBRARY_LINK__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_LIBRARY_LINK_DYNAMIC__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_LIBRARY_LINK_STATIC__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_LIBRARY_PREFIX_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_LIBRARY_SUFFIX_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_LIBRARY_RUNTIME__FLAG", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_LIBRARY_RUNTIME__FLAG_SEP", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_LIBRARY_RPATH_LINK__FLAG", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_EXECUTABLE_RUNTIME__FLAG", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_EXECUTABLE_RUNTIME__FLAG_SEP", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_EXECUTABLE_RPATH_LINK__FLAG", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_MODULE_CREATE__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_MODULE__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_MODULE_LINK_DYNAMIC__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_MODULE_LINK_STATIC__FLAGS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_MODULE_PREFIX_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_SHARED_MODULE_SUFFIX_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_STATIC_LIBRARY_PREFIX_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_STATIC_LIBRARY_SUFFIX_", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_LINK_DEPENDENT_LIBRARY_FILES", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_LINK_DEPENDENT_LIBRARY_DIRS", + cmProperty::VARIABLE,0,0); + cm->DefineProperty("CMAKE_MAKE_INCLUDE_FROM_ROOT", + cmProperty::VARIABLE,0,0); +} diff --git a/Source/cmDocumentVariables.h b/Source/cmDocumentVariables.h new file mode 100644 index 0000000..1d59b24 --- /dev/null +++ b/Source/cmDocumentVariables.h @@ -0,0 +1,21 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmDocumentVariables_h +#define cmDocumentVariables_h +class cmake; +class cmDocumentVariables +{ +public: + static void DefineVariables(cmake* cm); +}; + +#endif diff --git a/Source/cmDocumentation.cxx b/Source/cmDocumentation.cxx new file mode 100644 index 0000000..904a157 --- /dev/null +++ b/Source/cmDocumentation.cxx @@ -0,0 +1,1958 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDocumentation.h" + +#include "cmSystemTools.h" +#include "cmVersion.h" +#include +#include + +#include + +//---------------------------------------------------------------------------- +static const char *cmDocumentationStandardOptions[][3] = +{ + {"--copyright [file]", "Print the CMake copyright and exit.", + "If a file is specified, the copyright is written into it."}, + {"--help,-help,-usage,-h,-H,/?", "Print usage information and exit.", + "Usage describes the basic command line interface and its options."}, + {"--help-full [file]", "Print full help and exit.", + "Full help displays most of the documentation provided by the UNIX " + "man page. It is provided for use on non-UNIX platforms, but is " + "also convenient if the man page is not installed. If a file is " + "specified, the help is written into it."}, + {"--help-html [file]", "Print full help in HTML format.", + "This option is used by CMake authors to help produce web pages. " + "If a file is specified, the help is written into it."}, + {"--help-man [file]", "Print full help as a UNIX man page and exit.", + "This option is used by the cmake build to generate the UNIX man page. " + "If a file is specified, the help is written into it."}, + {"--version,-version,/V [file]", + "Show program name/version banner and exit.", + "If a file is specified, the version is written into it."}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char *cmModulesDocumentationDescription[][3] = +{ + {0, + " CMake Modules - Modules coming with CMake, the Cross-Platform Makefile " + "Generator.", 0}, +// CMAKE_DOCUMENTATION_OVERVIEW, + {0, + "This is the documentation for the modules and scripts coming with CMake. " + "Using these modules you can check the computer system for " + "installed software packages, features of the compiler and the " + "existance of headers to name just a few.", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char *cmCustomModulesDocumentationDescription[][3] = +{ + {0, + " Custom CMake Modules - Additional Modules for CMake.", 0}, +// CMAKE_DOCUMENTATION_OVERVIEW, + {0, + "This is the documentation for additional modules and scripts for CMake. " + "Using these modules you can check the computer system for " + "installed software packages, features of the compiler and the " + "existance of headers to name just a few.", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char *cmPropertiesDocumentationDescription[][3] = +{ + {0, + " CMake Properties - Properties supported by CMake, " + "the Cross-Platform Makefile Generator.", 0}, +// CMAKE_DOCUMENTATION_OVERVIEW, + {0, + "This is the documentation for the properties supported by CMake. " + "Properties can have different scopes. They can either be assigned to a " + "source file, a directory, a target or globally to CMake. By modifying the " + "values of properties the behaviour of the build system can be customized.", + 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char *cmCompatCommandsDocumentationDescription[][3] = +{ + {0, + " CMake Compatibility Listfile Commands - " + "Obsolete commands supported by CMake for compatibility.", 0}, +// CMAKE_DOCUMENTATION_OVERVIEW, + {0, + "This is the documentation for now obsolete listfile commands from previous " + "CMake versions, which are still supported for compatibility reasons. You " + "should instead use the newer, faster and shinier new commands. ;-)", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char *cmDocumentationModulesHeader[][3] = +{ + {0, + "The following modules are provided with CMake. " + "They can be used with INCLUDE(ModuleName).", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char *cmDocumentationCustomModulesHeader[][3] = +{ + {0, + "The following modules are also available for CMake. " + "They can be used with INCLUDE(ModuleName).", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char *cmDocumentationGeneratorsHeader[][3] = +{ + {0, + "The following generators are available on this platform:", 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char *cmDocumentationStandardSeeAlso[][3] = +{ + {0, + "The following resources are available to get help using CMake:", 0}, + {"Home Page", + "http://www.cmake.org", + "The primary starting point for learning about CMake."}, + {"Frequently Asked Questions", + "http://www.cmake.org/Wiki/CMake_FAQ", + "A Wiki is provided containing answers to frequently asked questions. "}, + {"Online Documentation", + "http://www.cmake.org/HTML/Documentation.html", + "Links to available documentation may be found on this web page."}, + {"Mailing List", + "http://www.cmake.org/HTML/MailingLists.html", + "For help and discussion about using cmake, a mailing list is provided at " + "cmake@cmake.org. " + "The list is member-post-only but one may sign up on the CMake web page. " + "Please first read the full documentation at " + "http://www.cmake.org before posting questions to the list."}, + {0, + "Summary of helpful links:\n" + " Home: http://www.cmake.org\n" + " Docs: http://www.cmake.org/HTML/Documentation.html\n" + " Mail: http://www.cmake.org/HTML/MailingLists.html\n" + " FAQ: http://www.cmake.org/Wiki/CMake_FAQ\n" + , 0}, + {0,0,0} +}; + +//---------------------------------------------------------------------------- +static const char *cmDocumentationCopyright[][3] = +{ + {0, + "Copyright 2000-2009 Kitware, Inc., Insight Software Consortium. " + "All rights reserved.", 0}, + {0, + "Redistribution and use in source and binary forms, with or without " + "modification, are permitted provided that the following conditions are " + "met:", 0}, + {"", + "Redistributions of source code must retain the above copyright notice, " + "this list of conditions and the following disclaimer.", 0}, + {"", + "Redistributions in binary form must reproduce the above copyright " + "notice, this list of conditions and the following disclaimer in the " + "documentation and/or other materials provided with the distribution.", + 0}, + {"", + "Neither the names of Kitware, Inc., the Insight Software Consortium, " + "nor the names of their contributors may be used to endorse or promote " + "products derived from this software without specific prior written " + "permission.", 0}, + {0, + "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS " + "\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT " + "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR " + "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT " + "HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, " + "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT " + "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, " + "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY " + "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT " + "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE " + "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", + 0}, + {0, 0, 0} +}; + +//---------------------------------------------------------------------------- +#define DOCUMENT_INTRO(type, default_name, desc) \ + static char const *cmDocumentation##type##Intro[2] = { default_name, desc }; +#define GET_DOCUMENT_INTRO(type) cmDocumentation##type##Intro + +DOCUMENT_INTRO(Modules, "cmakemodules", + "Reference of available CMake modules."); +DOCUMENT_INTRO(CustomModules, "cmakecustommodules", + "Reference of available CMake custom modules."); +DOCUMENT_INTRO(Policies, "cmakepolicies", + "Reference of CMake policies."); +DOCUMENT_INTRO(Properties, "cmakeprops", + "Reference of CMake properties."); +DOCUMENT_INTRO(Variables, "cmakevars", + "Reference of CMake variables."); +DOCUMENT_INTRO(Commands, "cmakecommands", + "Reference of available CMake commands."); +DOCUMENT_INTRO(CompatCommands, "cmakecompat", + "Reference of CMake compatibility commands."); + +//---------------------------------------------------------------------------- +cmDocumentation::cmDocumentation() +:CurrentFormatter(0) +{ + this->SetForm(TextForm); + this->addCommonStandardDocSections(); + this->ShowGenerators = true; +} + +//---------------------------------------------------------------------------- +cmDocumentation::~cmDocumentation() +{ + for(std::vector< char* >::iterator i = this->ModuleStrings.begin(); + i != this->ModuleStrings.end(); ++i) + { + delete [] *i; + } + for(std::map::iterator i = + this->AllSections.begin(); + i != this->AllSections.end(); ++i) + { + delete i->second; + } +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintCopyright(std::ostream& os) +{ + cmDocumentationSection *sec = this->AllSections["Copyright"]; + const std::vector &entries = sec->GetEntries(); + for(std::vector::const_iterator op = entries.begin(); + op != entries.end(); ++op) + { + if(op->Name.size()) + { + os << " * "; + this->TextFormatter.SetIndent(" "); + this->TextFormatter.PrintColumn(os, op->Brief.c_str()); + } + else + { + this->TextFormatter.SetIndent(""); + this->TextFormatter.PrintColumn(os, op->Brief.c_str()); + } + os << "\n"; + } + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintVersion(std::ostream& os) +{ + os << this->GetNameString() << " version " + << cmVersion::GetCMakeVersion() << "\n"; + return true; +} + +//---------------------------------------------------------------------------- +void cmDocumentation::AddSectionToPrint(const char *section) +{ + if (this->AllSections.find(section) != this->AllSections.end()) + { + this->PrintSections.push_back(this->AllSections[section]); + } +} + +//---------------------------------------------------------------------------- +void cmDocumentation::ClearSections() +{ + this->PrintSections.erase(this->PrintSections.begin(), + this->PrintSections.end()); + this->ModulesFound.clear(); +} + +//---------------------------------------------------------------------------- +void cmDocumentation::AddDocumentIntroToPrint(const char* intro[2]) +{ + const char* docname = this->GetDocName(false); + if(intro && docname) + { + cmDocumentationSection* section; + std::string desc(""); + + desc += docname; + desc += " - "; + desc += intro[1]; + + section = new cmDocumentationSection("Introduction", "NAME"); + section->Append(0, desc.c_str(), 0); + this->PrintSections.push_back(section); + } +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentation(Type ht, std::ostream& os, + const char* docname) +{ + if ((this->CurrentFormatter->GetForm() != HTMLForm) + && (this->CurrentFormatter->GetForm() != DocbookForm) + && (this->CurrentFormatter->GetForm() != ManForm)) + { + this->PrintVersion(os); + } + + // Handle Document Name. docname==0 disables intro. + this->SetDocName(""); + if (docname) + { + if (*docname) + this->SetDocName(docname); + else // empty string was given. select default if possible + this->SetDocName(this->GetDefaultDocName(ht)); + } + + switch (ht) + { + case cmDocumentation::Usage: + return this->PrintDocumentationUsage(os); + case cmDocumentation::Single: + return this->PrintDocumentationSingle(os); + case cmDocumentation::SingleModule: + return this->PrintDocumentationSingleModule(os); + case cmDocumentation::SinglePolicy: + return this->PrintDocumentationSinglePolicy(os); + case cmDocumentation::SingleProperty: + return this->PrintDocumentationSingleProperty(os); + case cmDocumentation::SingleVariable: + return this->PrintDocumentationSingleVariable(os); + case cmDocumentation::List: + this->PrintDocumentationList(os,"Commands"); + this->PrintDocumentationList(os,"Compatibility Commands"); + return true; + case cmDocumentation::ModuleList: + // find the modules first, print the custom module docs only if + // any custom modules have been found actually, Alex + this->CreateCustomModulesSection(); + this->CreateModulesSection(); + if (this->AllSections.find("Custom CMake Modules") + != this->AllSections.end()) + { + this->PrintDocumentationList(os,"Custom CMake Modules"); + } + this->PrintDocumentationList(os,"Modules"); + return true; + case cmDocumentation::PropertyList: + this->PrintDocumentationList(os,"Properties Description"); + for (std::vector::iterator i = + this->PropertySections.begin(); + i != this->PropertySections.end(); ++i) + { + this->PrintDocumentationList(os,i->c_str()); + } + return true; + case cmDocumentation::VariableList: + for (std::vector::iterator i = + this->VariableSections.begin(); + i != this->VariableSections.end(); ++i) + { + this->PrintDocumentationList(os,i->c_str()); + } + return true; + case cmDocumentation::Full: + return this->PrintDocumentationFull(os); + case cmDocumentation::Modules: + return this->PrintDocumentationModules(os); + case cmDocumentation::CustomModules: + return this->PrintDocumentationCustomModules(os); + case cmDocumentation::Policies: + return this->PrintDocumentationPolicies(os); + case cmDocumentation::Properties: + return this->PrintDocumentationProperties(os); + case cmDocumentation::Variables: + return this->PrintDocumentationVariables(os); + case cmDocumentation::Commands: + return this->PrintDocumentationCurrentCommands(os); + case cmDocumentation::CompatCommands: + return this->PrintDocumentationCompatCommands(os); + + case cmDocumentation::Copyright: + return this->PrintCopyright(os); + case cmDocumentation::Version: + return true; + default: return false; + } +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::CreateModulesSection() +{ + cmDocumentationSection *sec = + new cmDocumentationSection("Standard CMake Modules", "MODULES"); + this->AllSections["Modules"] = sec; + std::string cmakeModules = this->CMakeRoot; + cmakeModules += "/Modules"; + cmsys::Directory dir; + dir.Load(cmakeModules.c_str()); + if (dir.GetNumberOfFiles() > 0) + { + sec->Append(cmDocumentationModulesHeader[0]); + sec->Append(cmModulesDocumentationDescription); + this->CreateModuleDocsForDir(dir, *this->AllSections["Modules"]); + } + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::CreateCustomModulesSection() +{ + bool sectionHasHeader = false; + + std::vector dirs; + cmSystemTools::ExpandListArgument(this->CMakeModulePath, dirs); + + for(std::vector::const_iterator dirIt = dirs.begin(); + dirIt != dirs.end(); + ++dirIt) + { + cmsys::Directory dir; + dir.Load(dirIt->c_str()); + if (dir.GetNumberOfFiles() > 0) + { + if (!sectionHasHeader) + { + cmDocumentationSection *sec = + new cmDocumentationSection("Custom CMake Modules","CUSTOM MODULES"); + this->AllSections["Custom CMake Modules"] = sec; + sec->Append(cmDocumentationCustomModulesHeader[0]); + sec->Append(cmCustomModulesDocumentationDescription); + sectionHasHeader = true; + } + this->CreateModuleDocsForDir + (dir, *this->AllSections["Custom CMake Modules"]); + } + } + + return true; +} + +//---------------------------------------------------------------------------- +void cmDocumentation +::CreateModuleDocsForDir(cmsys::Directory& dir, + cmDocumentationSection &moduleSection) +{ + // sort the files alphabetically, so the docs for one module are easier + // to find than if they are in random order + std::vector sortedFiles; + for(unsigned int i = 0; i < dir.GetNumberOfFiles(); ++i) + { + sortedFiles.push_back(dir.GetFile(i)); + } + std::sort(sortedFiles.begin(), sortedFiles.end()); + + for(std::vector::const_iterator fname = sortedFiles.begin(); + fname!=sortedFiles.end(); ++fname) + { + if(fname->length() > 6) + { + if(fname->substr(fname->length()-6, 6) == ".cmake") + { + std::string moduleName = fname->substr(0, fname->length()-6); + // this check is to avoid creating documentation for the modules with + // the same name in multiple directories of CMAKE_MODULE_PATH + if (this->ModulesFound.find(moduleName) == this->ModulesFound.end()) + { + this->ModulesFound.insert(moduleName); + std::string path = dir.GetPath(); + path += "/"; + path += (*fname); + this->CreateSingleModule(path.c_str(), moduleName.c_str(), + moduleSection); + } + } + } + } +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::CreateSingleModule(const char* fname, + const char* moduleName, + cmDocumentationSection &moduleSection) +{ + std::ifstream fin(fname); + if(!fin) + { + std::cerr << "Internal error: can not open module." << fname << std::endl; + return false; + } + std::string line; + std::string text; + std::string brief; + brief = " "; + bool newParagraph = true; + while ( fin && cmSystemTools::GetLineFromStream(fin, line) ) + { + if(line.size() && line[0] == '#') + { + /* line beginnings with ## are mark-up ignore them */ + if (line.size()>=2 && line[1] == '#') continue; + // blank line + if(line.size() <= 2) + { + text += "\n"; + newParagraph = true; + } + else if(line[2] == '-') + { + brief = line.c_str()+4; + } + else + { + // two spaces + if(line[1] == ' ' && line[2] == ' ') + { + if(!newParagraph) + { + text += "\n"; + newParagraph = true; + } + // Skip #, and leave space for preformatted + text += line.c_str()+1; + text += "\n"; + } + else if(line[1] == ' ') + { + if(!newParagraph) + { + text += " "; + } + newParagraph = false; + // skip # and space + text += line.c_str()+2; + } + else + { + if(!newParagraph) + { + text += " "; + } + newParagraph = false; + // skip # + text += line.c_str()+1; + } + } + } + else + { + break; + } + } + + if(text.length() < 2 && brief.length() == 1) + { + return false; + } + + char* pname = strcpy(new char[strlen(moduleName)+1], moduleName); + char* ptext = strcpy(new char[text.length()+1], text.c_str()); + this->ModuleStrings.push_back(pname); + this->ModuleStrings.push_back(ptext); + char* pbrief = strcpy(new char[brief.length()+1], brief.c_str()); + this->ModuleStrings.push_back(pbrief); + moduleSection.Append(pname, pbrief, ptext); + return true; +} + + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintRequestedDocumentation(std::ostream& os) +{ + bool result = true; + + // Loop over requested documentation types. + for(std::vector::const_iterator + i = this->RequestedHelpItems.begin(); + i != this->RequestedHelpItems.end(); + ++i) + { + this->SetForm(i->HelpForm); + this->CurrentArgument = i->Argument; + // If a file name was given, use it. Otherwise, default to the + // given stream. + std::ofstream* fout = 0; + std::ostream* s = &os; + std::string docname(""); + if(i->Filename.length() > 0) + { + fout = new std::ofstream(i->Filename.c_str(), std::ios::out); + if(fout) + { + s = fout; + } + else + { + result = false; + } + if(i->Filename != "-") + { + docname = cmSystemTools::GetFilenameWithoutLastExtension(i->Filename); + } + } + + // Print this documentation type to the stream. + if(!this->PrintDocumentation(i->HelpType, *s, docname.c_str()) || !*s) + { + result = false; + } + + // Close the file if we wrote one. + if(fout) + { + delete fout; + } + } + return result; +} + +#define GET_OPT_ARGUMENT(target) \ + if((i+1 < argc) && !this->IsOption(argv[i+1])) \ + { \ + target = argv[i+1]; \ + i = i+1; \ + }; + + +cmDocumentation::Form cmDocumentation::GetFormFromFilename( + const std::string& filename) +{ + std::string ext = cmSystemTools::GetFilenameLastExtension(filename); + ext = cmSystemTools::UpperCase(ext); + if ((ext == ".HTM") || (ext == ".HTML")) + { + return cmDocumentation::HTMLForm; + } + + if (ext == ".DOCBOOK") + { + return cmDocumentation::DocbookForm; + } + + // ".1" to ".9" should be manpages + if ((ext.length()==2) && (ext[1] >='1') && (ext[1]<='9')) + { + return cmDocumentation::ManForm; + } + + return cmDocumentation::TextForm; +} + +//---------------------------------------------------------------------------- +void cmDocumentation::addCommonStandardDocSections() +{ + cmDocumentationSection *sec; + + sec = new cmDocumentationSection("Author","AUTHOR"); + sec->Append(cmDocumentationEntry + (0, + "This manual page was generated by the \"--help-man\" option.", + 0)); + this->AllSections["Author"] = sec; + + sec = new cmDocumentationSection("Copyright","COPYRIGHT"); + sec->Append(cmDocumentationCopyright); + this->AllSections["Copyright"] = sec; + + sec = new cmDocumentationSection("See Also","SEE ALSO"); + sec->Append(cmDocumentationStandardSeeAlso); + this->AllSections["Standard See Also"] = sec; + + sec = new cmDocumentationSection("Options","OPTIONS"); + sec->Append(cmDocumentationStandardOptions); + this->AllSections["Options"] = sec; + + sec = new cmDocumentationSection("Compatibility Commands", + "COMPATIBILITY COMMANDS"); + sec->Append(cmCompatCommandsDocumentationDescription); + this->AllSections["Compatibility Commands"] = sec; +} + +//---------------------------------------------------------------------------- +void cmDocumentation::addCMakeStandardDocSections() +{ + cmDocumentationSection *sec; + + sec = new cmDocumentationSection("Properties","PROPERTIES"); + sec->Append(cmPropertiesDocumentationDescription); + this->AllSections["Properties Description"] = sec; + + sec = new cmDocumentationSection("Generators","GENERATORS"); + sec->Append(cmDocumentationGeneratorsHeader); + this->AllSections["Generators"] = sec; + + this->PropertySections.push_back("Properties of Global Scope"); + this->PropertySections.push_back("Properties on Directories"); + this->PropertySections.push_back("Properties on Targets"); + this->PropertySections.push_back("Properties on Tests"); + this->PropertySections.push_back("Properties on Source Files"); + this->PropertySections.push_back("Properties on Cache Entries"); + + this->VariableSections.push_back("Variables that Provide Information"); + this->VariableSections.push_back("Variables That Change Behavior"); + this->VariableSections.push_back("Variables That Describe the System"); + this->VariableSections.push_back("Variables that Control the Build"); + this->VariableSections.push_back("Variables for Languages"); + +} + +//---------------------------------------------------------------------------- +void cmDocumentation::addCTestStandardDocSections() +{ + // This is currently done for backward compatibility reason + // We may suppress some of these. + addCMakeStandardDocSections(); +} + +//---------------------------------------------------------------------------- +void cmDocumentation::addCPackStandardDocSections() +{ + cmDocumentationSection *sec; + + sec = new cmDocumentationSection("Generators","GENERATORS"); + sec->Append(cmDocumentationGeneratorsHeader); + this->AllSections["Generators"] = sec; + + this->VariableSections.push_back( + "Variables common to all CPack generators"); +} + +void cmDocumentation::addAutomaticVariableSections(const std::string& section) +{ + std::vector::iterator it; + it = std::find(this->VariableSections.begin(), + this->VariableSections.end(), + section); + /* if the section does not exist then add it */ + if (it==this->VariableSections.end()) + { + this->VariableSections.push_back(section); + } +} +//---------------------------------------------------------------------------- +int cmDocumentation::getDocumentedModulesListInDir( + std::string path, + std::string globExpr, + documentedModulesList_t& docedModuleList) +{ + cmsys::Glob gl; + std::string findExpr; + std::vector files; + std::string line; + documentedModuleSectionPair_t docPair; + int nbDocumentedModules = 0; + + findExpr = path + "/" + globExpr; + if (gl.FindFiles(findExpr)) + { + files = gl.GetFiles(); + for (std::vector::iterator itf=files.begin(); + itf!=files.end();++itf) + { + std::ifstream fin((*itf).c_str()); + // file access trouble ignore it (ignore this kind of error) + if (!fin) continue; + /* read first line in order to get doc section */ + if (cmSystemTools::GetLineFromStream(fin, line)) + { + /* Doc section indicates that + * this file has structured doc in it. + */ + if (line.find("##section")!=std::string::npos) + { + // ok found one more documented module + ++nbDocumentedModules; + docPair.first = *itf; + // 10 is the size of '##section' + 1 + docPair.second = line.substr(10,std::string::npos); + docedModuleList.push_back(docPair); + } + // No else if no section is found (undocumented module) + } + // No else cannot read first line (ignore this kind of error) + line = ""; + } + } + if (nbDocumentedModules>0) + { + return 0; + } + else + { + return 1; + } +} + +//---------------------------------------------------------------------------- +static void trim(std::string& s) +{ + std::string::size_type pos = s.find_last_not_of(' '); + if(pos != std::string::npos) + { + s.erase(pos + 1); + pos = s.find_first_not_of(' '); + if(pos != std::string::npos) s.erase(0, pos); + } + else + { + s.erase(s.begin(), s.end()); + } +} + +int cmDocumentation::GetStructuredDocFromFile( + const char* fname, + std::vector& commands, + cmake* cm) +{ + typedef enum sdoce { + SDOC_NONE, SDOC_MODULE, SDOC_MACRO, SDOC_FUNCTION, SDOC_VARIABLE, + SDOC_SECTION, + SDOC_UNKNOWN} sdoc_t; + int nbDocItemFound = 0; + int docCtxIdx = 0; + std::vector docContextStack(60); + docContextStack[docCtxIdx]=SDOC_NONE; + cmDocumentationEntry e; + std::ifstream fin(fname); + if(!fin) + { + return nbDocItemFound; + } + std::string section; + std::string name; + std::string full; + std::string brief; + std::string line; + bool newCtx = false; /* we've just entered ## context */ + bool inBrief = false; /* we are currently parsing brief desc. */ + bool inFullFirstParagraph = false; /* we are currently parsing full + desc. first paragraph */ + brief = ""; + full = ""; + bool newParagraph = true; + while ( fin && cmSystemTools::GetLineFromStream(fin, line) ) + { + if(line.size() && line[0] == '#') + { + /* handle structured doc context */ + if ((line.size()>=2) && line[1]=='#') + { + /* markup word is following '##' stopping at first space + * Some markup word like 'section' may have more characters + * following but we don't handle those here. + */ + std::string mkword = line.substr(2,line.find(' ',2)-2); + if (mkword=="macro") + { + docCtxIdx++; + docContextStack[docCtxIdx]=SDOC_MACRO; + newCtx = true; + } + else if (mkword=="variable") + { + docCtxIdx++; + docContextStack[docCtxIdx]=SDOC_VARIABLE; + newCtx = true; + } + else if (mkword=="function") + { + docCtxIdx++; + docContextStack[docCtxIdx]=SDOC_FUNCTION; + newCtx = true; + } + else if (mkword=="module") + { + docCtxIdx++; + docContextStack[docCtxIdx]=SDOC_MODULE; + newCtx = true; + } + else if (mkword=="section") + { + docCtxIdx++; + docContextStack[docCtxIdx]=SDOC_SECTION; + // 10 is the size of '##section' + 1 + section = line.substr(10,std::string::npos); + /* drop the rest of the line */ + line = ""; + newCtx = true; + } + else if (mkword.substr(0,3)=="end") + { + switch (docContextStack[docCtxIdx]) { + case SDOC_MACRO: + /* for now MACRO and FUNCTION are handled in the same way */ + case SDOC_FUNCTION: + commands.push_back(cmDocumentationEntry(name.c_str(), + brief.c_str(),full.c_str())); + break; + case SDOC_VARIABLE: + this->addAutomaticVariableSections(section); + cm->DefineProperty + (name.c_str(), cmProperty::VARIABLE, + brief.c_str(), + full.c_str(),false, + section.c_str()); + break; + case SDOC_MODULE: + /* not implemented */ + break; + case SDOC_SECTION: + /* not implemented */ + break; + default: + /* ignore other cases */ + break; + } + docCtxIdx--; + newCtx = false; + ++nbDocItemFound; + } + else + { + // error out unhandled context + return nbDocItemFound; + } + /* context is set go to next doc line */ + continue; + } + + // Now parse the text attached to the context + + // The first line after the context mark-up contains:: + // name - brief until. (brief is dot terminated or + // followed by a blank line) + if (newCtx) + { + // no brief (for easy variable definition) + if (line.find("-")==std::string::npos) + { + name = line.substr(1,std::string::npos); + trim(name); + brief = ""; + inBrief = false; + full = ""; + } + // here we have a name and brief beginning + else + { + name = line.substr(1,line.find("-")-1); + trim(name); + // we are parsing the brief context + brief = line.substr(line.find("-")+1,std::string::npos); + trim(brief); + // Brief may already be terminated on the first line + if (brief.find('.')!=std::string::npos) + { + inBrief = false; + full = brief.substr(brief.find('.')+1,std::string::npos); + trim(full); + inFullFirstParagraph = true; + brief = brief.substr(0,brief.find('.')); + } + // brief is continued on following lines + else + { + inBrief = true; + full = ""; + } + } + newCtx = false; + continue; + } + // blank line + if(line.size() <= 2) + { + if (inBrief) { + inBrief = false; + full = ""; + } else { + if (full.length()>0) + { + full += "\n"; + } + // the first paragraph of full has ended + inFullFirstParagraph = false; + } + newParagraph = true; + } + // brief is terminated by '.' + else if (inBrief && (line.find('.')!=std::string::npos)) + { + /* the brief just ended */ + inBrief = false; + std::string endBrief = line.substr(1,line.find('.')); + trim(endBrief); + trim(brief); + brief += " " + endBrief; + full += line.substr(line.find('.')+1,std::string::npos); + trim(full); + inFullFirstParagraph = true; + } + // we handle full text or multi-line brief. + else + { + std::string* text; + if (inBrief) + { + text = &brief; + } + else + { + text = &full; + } + // two spaces + if(line[1] == ' ' && line[2] == ' ') + { + // there is no "full first paragraph at all." + if (line[3] == ' ') + { + inFullFirstParagraph = false; + } + + if(!newParagraph && !inFullFirstParagraph) + { + *text += "\n"; + newParagraph = true; + } + // Skip #, and leave space for pre-formatted + if (inFullFirstParagraph) + { + std::string temp = line.c_str()+1; + trim(temp); + *text += " " + temp; + } + else + { + *text += line.c_str()+1; + *text += "\n"; + } + } + else if(line[1] == ' ') + { + if(!newParagraph) + { + *text += " "; + } + newParagraph = false; + // skip # and space + *text += line.c_str()+2; + } + else + { + if(!newParagraph) + { + *text += " "; + } + newParagraph = false; + // skip # + *text += line.c_str()+1; + } + } + } + /* next line is not the first context line */ + newCtx = false; + } + return nbDocItemFound; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::CheckOptions(int argc, const char* const* argv, + const char* exitOpt) +{ + // Providing zero arguments gives usage information. + if(argc == 1) + { + RequestedHelpItem help; + help.HelpType = cmDocumentation::Usage; + help.HelpForm = cmDocumentation::UsageForm; + this->RequestedHelpItems.push_back(help); + return true; + } + + // Search for supported help options. + + bool result = false; + for(int i=1; i < argc; ++i) + { + if(exitOpt && strcmp(argv[i], exitOpt) == 0) + { + return result; + } + RequestedHelpItem help; + // Check if this is a supported help option. + if((strcmp(argv[i], "-help") == 0) || + (strcmp(argv[i], "--help") == 0) || + (strcmp(argv[i], "/?") == 0) || + (strcmp(argv[i], "-usage") == 0) || + (strcmp(argv[i], "-h") == 0) || + (strcmp(argv[i], "-H") == 0)) + { + help.HelpType = cmDocumentation::Usage; + help.HelpForm = cmDocumentation::UsageForm; + GET_OPT_ARGUMENT(help.Argument); + help.Argument = cmSystemTools::LowerCase(help.Argument); + // special case for single command + if (!help.Argument.empty()) + { + help.HelpType = cmDocumentation::Single; + } + } + else if(strcmp(argv[i], "--help-properties") == 0) + { + help.HelpType = cmDocumentation::Properties; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-policies") == 0) + { + help.HelpType = cmDocumentation::Policies; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-variables") == 0) + { + help.HelpType = cmDocumentation::Variables; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-modules") == 0) + { + help.HelpType = cmDocumentation::Modules; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-custom-modules") == 0) + { + help.HelpType = cmDocumentation::CustomModules; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-commands") == 0) + { + help.HelpType = cmDocumentation::Commands; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-compatcommands") == 0) + { + help.HelpType = cmDocumentation::CompatCommands; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-full") == 0) + { + help.HelpType = cmDocumentation::Full; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-html") == 0) + { + help.HelpType = cmDocumentation::Full; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = cmDocumentation::HTMLForm; + } + else if(strcmp(argv[i], "--help-man") == 0) + { + help.HelpType = cmDocumentation::Full; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = cmDocumentation::ManForm; + } + else if(strcmp(argv[i], "--help-command") == 0) + { + help.HelpType = cmDocumentation::Single; + GET_OPT_ARGUMENT(help.Argument); + GET_OPT_ARGUMENT(help.Filename); + help.Argument = cmSystemTools::LowerCase(help.Argument); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-module") == 0) + { + help.HelpType = cmDocumentation::SingleModule; + GET_OPT_ARGUMENT(help.Argument); + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-property") == 0) + { + help.HelpType = cmDocumentation::SingleProperty; + GET_OPT_ARGUMENT(help.Argument); + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-policy") == 0) + { + help.HelpType = cmDocumentation::SinglePolicy; + GET_OPT_ARGUMENT(help.Argument); + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-variable") == 0) + { + help.HelpType = cmDocumentation::SingleVariable; + GET_OPT_ARGUMENT(help.Argument); + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = this->GetFormFromFilename(help.Filename); + } + else if(strcmp(argv[i], "--help-command-list") == 0) + { + help.HelpType = cmDocumentation::List; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = cmDocumentation::TextForm; + } + else if(strcmp(argv[i], "--help-module-list") == 0) + { + help.HelpType = cmDocumentation::ModuleList; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = cmDocumentation::TextForm; + } + else if(strcmp(argv[i], "--help-property-list") == 0) + { + help.HelpType = cmDocumentation::PropertyList; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = cmDocumentation::TextForm; + } + else if(strcmp(argv[i], "--help-variable-list") == 0) + { + help.HelpType = cmDocumentation::VariableList; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = cmDocumentation::TextForm; + } + else if(strcmp(argv[i], "--copyright") == 0) + { + help.HelpType = cmDocumentation::Copyright; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = cmDocumentation::UsageForm; + } + else if((strcmp(argv[i], "--version") == 0) || + (strcmp(argv[i], "-version") == 0) || + (strcmp(argv[i], "/V") == 0)) + { + help.HelpType = cmDocumentation::Version; + GET_OPT_ARGUMENT(help.Filename); + help.HelpForm = cmDocumentation::UsageForm; + } + if(help.HelpType != None) + { + // This is a help option. See if there is a file name given. + result = true; + this->RequestedHelpItems.push_back(help); + } + } + return result; +} + +//---------------------------------------------------------------------------- +void cmDocumentation::Print(Form f, std::ostream& os) +{ + this->SetForm(f); + this->Print(os); +} + +//---------------------------------------------------------------------------- +void cmDocumentation::Print(std::ostream& os) +{ + // if the formatter supports it, print a master index for + // all sections + this->CurrentFormatter->PrintIndex(os, this->PrintSections); + for(unsigned int i=0; i < this->PrintSections.size(); ++i) + { + std::string name = this->PrintSections[i]-> + GetName((this->CurrentFormatter->GetForm())); + this->CurrentFormatter->PrintSection(os,*this->PrintSections[i], + name.c_str()); + } +} + +//---------------------------------------------------------------------------- +void cmDocumentation::SetName(const char* name) +{ + this->NameString = name?name:""; +} + +//---------------------------------------------------------------------------- +void cmDocumentation::SetDocName(const char *docname) +{ + this->DocName = docname?docname:""; +} + +//---------------------------------------------------------------------------- +void cmDocumentation::SetSection(const char *name, + cmDocumentationSection *section) +{ + if (this->AllSections.find(name) != this->AllSections.end()) + { + delete this->AllSections[name]; + } + this->AllSections[name] = section; +} + +//---------------------------------------------------------------------------- +void cmDocumentation::SetSection(const char *name, + std::vector &docs) +{ + cmDocumentationSection *sec = + new cmDocumentationSection(name, + cmSystemTools::UpperCase(name).c_str()); + sec->Append(docs); + this->SetSection(name,sec); +} + +//---------------------------------------------------------------------------- +void cmDocumentation::SetSection(const char *name, + const char *docs[][3]) +{ + cmDocumentationSection *sec = + new cmDocumentationSection(name, + cmSystemTools::UpperCase(name).c_str()); + sec->Append(docs); + this->SetSection(name,sec); +} + +//---------------------------------------------------------------------------- +void cmDocumentation +::SetSections(std::map §ions) +{ + for (std::map::const_iterator + it = sections.begin(); it != sections.end(); ++it) + { + this->SetSection(it->first.c_str(),it->second); + } +} + +//---------------------------------------------------------------------------- +void cmDocumentation::PrependSection(const char *name, + const char *docs[][3]) +{ + cmDocumentationSection *sec = 0; + if (this->AllSections.find(name) == this->AllSections.end()) + { + sec = new cmDocumentationSection + (name, cmSystemTools::UpperCase(name).c_str()); + this->SetSection(name,sec); + } + else + { + sec = this->AllSections[name]; + } + sec->Prepend(docs); +} + +//---------------------------------------------------------------------------- +void cmDocumentation::PrependSection(const char *name, + std::vector &docs) +{ + cmDocumentationSection *sec = 0; + if (this->AllSections.find(name) == this->AllSections.end()) + { + sec = new cmDocumentationSection + (name, cmSystemTools::UpperCase(name).c_str()); + this->SetSection(name,sec); + } + else + { + sec = this->AllSections[name]; + } + sec->Prepend(docs); +} + +//---------------------------------------------------------------------------- +void cmDocumentation::AppendSection(const char *name, + const char *docs[][3]) +{ + cmDocumentationSection *sec = 0; + if (this->AllSections.find(name) == this->AllSections.end()) + { + sec = new cmDocumentationSection + (name, cmSystemTools::UpperCase(name).c_str()); + this->SetSection(name,sec); + } + else + { + sec = this->AllSections[name]; + } + sec->Append(docs); +} + +//---------------------------------------------------------------------------- +void cmDocumentation::AppendSection(const char *name, + std::vector &docs) +{ + cmDocumentationSection *sec = 0; + if (this->AllSections.find(name) == this->AllSections.end()) + { + sec = new cmDocumentationSection + (name, cmSystemTools::UpperCase(name).c_str()); + this->SetSection(name,sec); + } + else + { + sec = this->AllSections[name]; + } + sec->Append(docs); +} + +//---------------------------------------------------------------------------- +void cmDocumentation::AppendSection(const char *name, + cmDocumentationEntry &docs) +{ + + std::vector docsVec; + docsVec.push_back(docs); + this->AppendSection(name,docsVec); +} + +//---------------------------------------------------------------------------- +void cmDocumentation::PrependSection(const char *name, + cmDocumentationEntry &docs) +{ + + std::vector docsVec; + docsVec.push_back(docs); + this->PrependSection(name,docsVec); +} + +//---------------------------------------------------------------------------- +void cmDocumentation::SetSeeAlsoList(const char *data[][3]) +{ + cmDocumentationSection *sec = + new cmDocumentationSection("See Also", "SEE ALSO"); + this->AllSections["See Also"] = sec; + this->SeeAlsoString = ".B "; + int i = 0; + while(data[i][1]) + { + this->SeeAlsoString += data[i][1]; + this->SeeAlsoString += data[i+1][1]? "(1), ":"(1)"; + ++i; + } + sec->Append(0,this->SeeAlsoString.c_str(),0); + sec->Append(cmDocumentationStandardSeeAlso); +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationGeneric(std::ostream& os, + const char *section) +{ + if(this->AllSections.find(section) == this->AllSections.end()) + { + os << "Internal error: " << section << " list is empty." << std::endl; + return false; + } + if(this->CurrentArgument.length() == 0) + { + os << "Required argument missing.\n"; + return false; + } + const std::vector &entries = + this->AllSections[section]->GetEntries(); + for(std::vector::const_iterator ei = + entries.begin(); + ei != entries.end(); ++ei) + { + if(this->CurrentArgument == ei->Name) + { + this->PrintDocumentationCommand(os, *ei); + return true; + } + } + return false; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationSingle(std::ostream& os) +{ + if (this->PrintDocumentationGeneric(os,"Commands")) + { + return true; + } + if (this->PrintDocumentationGeneric(os,"Compatibility Commands")) + { + return true; + } + + // Argument was not a command. Complain. + os << "Argument \"" << this->CurrentArgument.c_str() + << "\" to --help-command is not a CMake command. " + << "Use --help-command-list to see all commands.\n"; + return false; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationSingleModule(std::ostream& os) +{ + if(this->CurrentArgument.length() == 0) + { + os << "Argument --help-module needs a module name.\n"; + return false; + } + + std::string moduleName; + // find the module + std::vector dirs; + cmSystemTools::ExpandListArgument(this->CMakeModulePath, dirs); + for(std::vector::const_iterator dirIt = dirs.begin(); + dirIt != dirs.end(); + ++dirIt) + { + moduleName = *dirIt; + moduleName += "/"; + moduleName += this->CurrentArgument; + moduleName += ".cmake"; + if(cmSystemTools::FileExists(moduleName.c_str())) + { + break; + } + moduleName = ""; + } + + if (moduleName.empty()) + { + moduleName = this->CMakeRoot; + moduleName += "/Modules/"; + moduleName += this->CurrentArgument; + moduleName += ".cmake"; + if(!cmSystemTools::FileExists(moduleName.c_str())) + { + moduleName = ""; + } + } + + if(!moduleName.empty()) + { + cmDocumentationSection *sec = + new cmDocumentationSection("Standard CMake Modules", "MODULES"); + this->AllSections["Modules"] = sec; + if (this->CreateSingleModule(moduleName.c_str(), + this->CurrentArgument.c_str(), + *this->AllSections["Modules"])) + { + if(this->AllSections["Modules"]->GetEntries().size()) + { + this->PrintDocumentationCommand + (os, this->AllSections["Modules"]->GetEntries()[0]); + os << "\n Defined in: "; + os << moduleName << "\n"; + return true; + } + else + { + return false; + } + } + } + + // Argument was not a module. Complain. + os << "Argument \"" << this->CurrentArgument.c_str() + << "\" to --help-module is not a CMake module.\n"; + return false; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationSingleProperty(std::ostream& os) +{ + bool done = false; + for (std::vector::iterator i = + this->PropertySections.begin(); + !done && i != this->PropertySections.end(); ++i) + { + done = this->PrintDocumentationGeneric(os,i->c_str()); + } + + if (done) + { + return true; + } + + // Argument was not a command. Complain. + os << "Argument \"" << this->CurrentArgument.c_str() + << "\" to --help-property is not a CMake property. " + << "Use --help-property-list to see all properties.\n"; + return false; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationSinglePolicy(std::ostream& os) +{ + if (this->PrintDocumentationGeneric(os,"Policies")) + { + return true; + } + + // Argument was not a command. Complain. + os << "Argument \"" << this->CurrentArgument.c_str() + << "\" to --help-policy is not a CMake policy.\n"; + return false; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationSingleVariable(std::ostream& os) +{ + bool done = false; + for (std::vector::iterator i = + this->VariableSections.begin(); + !done && i != this->VariableSections.end(); ++i) + { + done = this->PrintDocumentationGeneric(os,i->c_str()); + } + + if (done) + { + return true; + } + + // Argument was not a command. Complain. + os << "Argument \"" << this->CurrentArgument.c_str() + << "\" to --help-variable is not a defined variable. " + << "Use --help-variable-list to see all defined variables.\n"; + return false; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationList(std::ostream& os, + const char *section) +{ + if(this->AllSections.find(section) == this->AllSections.end()) + { + os << "Internal error: " << section << " list is empty." << std::endl; + return false; + } + + const std::vector &entries = + this->AllSections[section]->GetEntries(); + for(std::vector::const_iterator ei = + entries.begin(); + ei != entries.end(); ++ei) + { + if(ei->Name.size()) + { + os << ei->Name << std::endl; + } + } + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationUsage(std::ostream& os) +{ + this->ClearSections(); + this->AddSectionToPrint("Usage"); + this->AddSectionToPrint("Options"); + if(this->ShowGenerators) + { + this->AddSectionToPrint("Generators"); + } + this->Print(os); + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationFull(std::ostream& os) +{ + this->CreateFullDocumentation(); + this->CurrentFormatter->PrintHeader(GetNameString(), GetNameString(), os); + this->Print(os); + this->CurrentFormatter->PrintFooter(os); + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationModules(std::ostream& os) +{ + this->ClearSections(); + this->CreateModulesSection(); + this->AddDocumentIntroToPrint(GET_DOCUMENT_INTRO(Modules)); + this->AddSectionToPrint("Description"); + this->AddSectionToPrint("Modules"); + this->AddSectionToPrint("Copyright"); + this->AddSectionToPrint("See Also"); + this->CurrentFormatter->PrintHeader(GetDocName(), GetNameString(), os); + this->Print(os); + this->CurrentFormatter->PrintFooter(os); + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationCustomModules(std::ostream& os) +{ + this->ClearSections(); + this->CreateCustomModulesSection(); + this->AddDocumentIntroToPrint(GET_DOCUMENT_INTRO(CustomModules)); + this->AddSectionToPrint("Description"); + this->AddSectionToPrint("Custom CMake Modules"); +// the custom modules are most probably not under Kitware's copyright, Alex +// this->AddSectionToPrint("Copyright"); + this->AddSectionToPrint("See Also"); + + this->CurrentFormatter->PrintHeader(GetDocName(), GetNameString(), os); + this->Print(os); + this->CurrentFormatter->PrintFooter(os); + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationPolicies(std::ostream& os) +{ + this->ClearSections(); + this->AddDocumentIntroToPrint(GET_DOCUMENT_INTRO(Policies)); + this->AddSectionToPrint("Description"); + this->AddSectionToPrint("Policies"); + this->AddSectionToPrint("Copyright"); + this->AddSectionToPrint("See Also"); + + this->CurrentFormatter->PrintHeader(GetDocName(), GetNameString(), os); + this->Print(os); + this->CurrentFormatter->PrintFooter(os); + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationProperties(std::ostream& os) +{ + this->ClearSections(); + this->AddDocumentIntroToPrint(GET_DOCUMENT_INTRO(Properties)); + this->AddSectionToPrint("Properties Description"); + for (std::vector::iterator i = + this->PropertySections.begin(); + i != this->PropertySections.end(); ++i) + { + this->AddSectionToPrint(i->c_str()); + } + this->AddSectionToPrint("Copyright"); + this->AddSectionToPrint("Standard See Also"); + this->CurrentFormatter->PrintHeader(GetDocName(), GetNameString(), os); + this->Print(os); + this->CurrentFormatter->PrintFooter(os); + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationVariables(std::ostream& os) +{ + this->ClearSections(); + this->AddDocumentIntroToPrint(GET_DOCUMENT_INTRO(Variables)); + for (std::vector::iterator i = + this->VariableSections.begin(); + i != this->VariableSections.end(); ++i) + { + this->AddSectionToPrint(i->c_str()); + } + this->AddSectionToPrint("Copyright"); + this->AddSectionToPrint("Standard See Also"); + this->CurrentFormatter->PrintHeader(GetDocName(), GetNameString(), os); + this->Print(os); + this->CurrentFormatter->PrintFooter(os); + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationCurrentCommands(std::ostream& os) +{ + this->ClearSections(); + this->AddDocumentIntroToPrint(GET_DOCUMENT_INTRO(Commands)); + this->AddSectionToPrint("Commands"); + this->AddSectionToPrint("Copyright"); + this->AddSectionToPrint("Standard See Also"); + this->CurrentFormatter->PrintHeader(GetDocName(), GetNameString(), os); + this->Print(os); + this->CurrentFormatter->PrintFooter(os); + return true; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::PrintDocumentationCompatCommands(std::ostream& os) +{ + this->ClearSections(); + this->AddDocumentIntroToPrint(GET_DOCUMENT_INTRO(CompatCommands)); + this->AddSectionToPrint("Compatibility Commands Description"); + this->AddSectionToPrint("Compatibility Commands"); + this->AddSectionToPrint("Copyright"); + this->AddSectionToPrint("Standard See Also"); + this->CurrentFormatter->PrintHeader(GetDocName(), GetNameString(), os); + this->Print(os); + this->CurrentFormatter->PrintFooter(os); + return true; +} + +//---------------------------------------------------------------------------- +void cmDocumentation +::PrintDocumentationCommand(std::ostream& os, + const cmDocumentationEntry &entry) +{ + // the string "SingleItem" will be used in a few places to detect the case + // that only the documentation for a single item is printed + cmDocumentationSection *sec = new cmDocumentationSection("SingleItem",""); + sec->Append(entry); + this->AllSections["temp"] = sec; + this->ClearSections(); + this->AddSectionToPrint("temp"); + this->Print(os); + this->AllSections.erase("temp"); + delete sec; +} + +//---------------------------------------------------------------------------- +void cmDocumentation::CreateFullDocumentation() +{ + this->ClearSections(); + this->CreateCustomModulesSection(); + this->CreateModulesSection(); + + std::set emitted; + this->AddSectionToPrint("Name"); + emitted.insert("Name"); + this->AddSectionToPrint("Usage"); + emitted.insert("Usage"); + this->AddSectionToPrint("Description"); + emitted.insert("Description"); + this->AddSectionToPrint("Options"); + emitted.insert("Options"); + this->AddSectionToPrint("Generators"); + emitted.insert("Generators"); + this->AddSectionToPrint("Commands"); + emitted.insert("Commands"); + + + this->AddSectionToPrint("Properties Description"); + emitted.insert("Properties Description"); + for (std::vector::iterator i = + this->PropertySections.begin(); + i != this->PropertySections.end(); ++i) + { + this->AddSectionToPrint(i->c_str()); + emitted.insert(i->c_str()); + } + + emitted.insert("Copyright"); + emitted.insert("See Also"); + emitted.insert("Standard See Also"); + emitted.insert("Author"); + + // add any sections not yet written out, or to be written out + for (std::map::iterator i = + this->AllSections.begin(); + i != this->AllSections.end(); ++i) + { + if (emitted.find(i->first) == emitted.end()) + { + this->AddSectionToPrint(i->first.c_str()); + } + } + + this->AddSectionToPrint("Copyright"); + + if(this->CurrentFormatter->GetForm() == ManForm) + { + this->AddSectionToPrint("See Also"); + this->AddSectionToPrint("Author"); + } + else + { + this->AddSectionToPrint("Standard See Also"); + } +} + +//---------------------------------------------------------------------------- +void cmDocumentation::SetForm(Form f) +{ + switch(f) + { + case HTMLForm: + this->CurrentFormatter = &this->HTMLFormatter; + break; + case DocbookForm: + this->CurrentFormatter = &this->DocbookFormatter; + break; + case ManForm: + this->CurrentFormatter = &this->ManFormatter; + break; + case TextForm: + this->CurrentFormatter = &this->TextFormatter; + break; + case UsageForm: + this->CurrentFormatter = & this->UsageFormatter; + break; + } +} + + +//---------------------------------------------------------------------------- +const char* cmDocumentation::GetNameString() const +{ + if(this->NameString.length() > 0) + { + return this->NameString.c_str(); + } + else + { + return "CMake"; + } +} + +//---------------------------------------------------------------------------- +const char* cmDocumentation::GetDocName(bool fallbackToNameString) const +{ + if (this->DocName.length() > 0) + { + return this->DocName.c_str(); + } + else if (fallbackToNameString) + { + return this->GetNameString(); + } + else + return 0; +} + +//---------------------------------------------------------------------------- +#define CASE_DEFAULT_DOCNAME(doctype) \ + case cmDocumentation::doctype : \ + return GET_DOCUMENT_INTRO(doctype)[0]; +const char* cmDocumentation::GetDefaultDocName(Type ht) const +{ + switch (ht) + { + CASE_DEFAULT_DOCNAME(Modules) + CASE_DEFAULT_DOCNAME(CustomModules) + CASE_DEFAULT_DOCNAME(Policies) + CASE_DEFAULT_DOCNAME(Properties) + CASE_DEFAULT_DOCNAME(Variables) + CASE_DEFAULT_DOCNAME(Commands) + CASE_DEFAULT_DOCNAME(CompatCommands) + default: break; + } + return 0; +} + +//---------------------------------------------------------------------------- +bool cmDocumentation::IsOption(const char* arg) const +{ + return ((arg[0] == '-') || (strcmp(arg, "/V") == 0) || + (strcmp(arg, "/?") == 0)); +} diff --git a/Source/cmDocumentation.h b/Source/cmDocumentation.h new file mode 100644 index 0000000..11bef16 --- /dev/null +++ b/Source/cmDocumentation.h @@ -0,0 +1,269 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef _cmDocumentation_h +#define _cmDocumentation_h + +#include "cmStandardIncludes.h" +#include "cmProperty.h" +#include "cmDocumentationFormatter.h" +#include "cmDocumentationFormatterHTML.h" +#include "cmDocumentationFormatterDocbook.h" +#include "cmDocumentationFormatterMan.h" +#include "cmDocumentationFormatterText.h" +#include "cmDocumentationFormatterUsage.h" +#include "cmDocumentationSection.h" +#include "cmake.h" + +namespace cmsys +{ + class Directory; +} + +/** Class to generate documentation. */ +class cmDocumentation: public cmDocumentationEnums +{ +public: + cmDocumentation(); + + ~cmDocumentation(); + + /** + * An helper type pair for [structured] documented modules. + * The comment of those module contains structure markup + * which makes it possible to retrieve the documentation + * of variables, macros and functions defined in the module. + * - first is the filename of the module + * - second is the section of the doc the module belongs too + */ + typedef std::pair documentedModuleSectionPair_t; + /** + * A list of documented module(s). + */ + typedef std::list documentedModulesList_t; + + // High-level interface for standard documents: + + /** + * Check command line arguments for documentation options. Returns + * true if documentation options are found, and false otherwise. + * When true is returned, PrintRequestedDocumentation should be + * called. exitOpt can be used for things like cmake -E, so that + * all arguments after the -E are ignored and not searched for + * help arguments. + */ + bool CheckOptions(int argc, const char* const* argv, + const char* exitOpt =0); + + /** + * Print help requested on the command line. Call after + * CheckOptions returns true. Returns true on success, and false + * otherwise. Failure can occur when output files specified on the + * command line cannot be written. + */ + bool PrintRequestedDocumentation(std::ostream& os); + + /** Print help of the given type. */ + bool PrintDocumentation(Type ht, std::ostream& os, const char* docname=0); + + void SetShowGenerators(bool showGen) { this->ShowGenerators = showGen; } + + /** Set the program name for standard document generation. */ + void SetName(const char* name); + + /** Set a section of the documentation. Typical sections include Name, + Usage, Description, Options, SeeAlso */ + void SetSection(const char *sectionName, + cmDocumentationSection *section); + void SetSection(const char *sectionName, + std::vector &docs); + void SetSection(const char *sectionName, + const char *docs[][3]); + void SetSections(std::map + §ions); + + /** Add the documentation to the beginning/end of the section */ + void PrependSection(const char *sectionName, + const char *docs[][3]); + void PrependSection(const char *sectionName, + std::vector &docs); + void PrependSection(const char *sectionName, + cmDocumentationEntry &docs); + void AppendSection(const char *sectionName, + const char *docs[][3]); + void AppendSection(const char *sectionName, + std::vector &docs); + void AppendSection(const char *sectionName, + cmDocumentationEntry &docs); + + /** + * Print documentation in the given form. All previously added + * sections will be generated. + */ + void Print(Form f, std::ostream& os); + + /** + * Print documentation in the current form. All previously added + * sections will be generated. + */ + void Print(std::ostream& os); + + /** + * Add a section of documentation. This can be used to generate custom help + * documents. + */ + void AddSectionToPrint(const char *section); + + void SetSeeAlsoList(const char *data[][3]); + + /** Clear all previously added sections of help. */ + void ClearSections(); + + /** Set cmake root so we can find installed files */ + void SetCMakeRoot(const char* root) { this->CMakeRoot = root;} + + /** Set CMAKE_MODULE_PATH so we can find additional cmake modules */ + void SetCMakeModulePath(const char* path) { this->CMakeModulePath = path;} + + static Form GetFormFromFilename(const std::string& filename); + + /** Add common (to all tools) documentation section(s) */ + void addCommonStandardDocSections(); + + /** Add the CMake standard documentation section(s) */ + void addCMakeStandardDocSections(); + + /** Add the CTest standard documentation section(s) */ + void addCTestStandardDocSections(); + + /** Add the CPack standard documentation section(s) */ + void addCPackStandardDocSections(); + + /** Add automatic variables sections */ + void addAutomaticVariableSections(const std::string& section); + + /** + * Retrieve the list of documented module located in + * path which match the globing expression globExpr. + * @param[in] path, directory where to start the search + * we will recurse into it. + * @param[in] globExpr, the globing expression used to + * match the file in path. + * @param[out] the list of obtained pairs (may be empty) + * @return 0 on success 1 on error or empty list + */ + int getDocumentedModulesListInDir( + std::string path, + std::string globExpr, + documentedModulesList_t& docModuleList); + + /** + * Get the documentation of macros, functions and variable documented + * with CMake structured documentation in a CMake script. + * (in fact it may be in any file which follow the structured doc format) + * Structured documentation begin with + * ## (double sharp) in column 1 & 2 immediately followed + * by a markup. Those ## are ignored by the legacy module + * documentation parser @see CreateSingleModule. + * Current markup are ##section, ##module, + * ##macro, ##function, ##variable and ##end. + * ##end is closing either of the previous ones. + * @param[in] fname the script file name to be parsed for documentation + * @param[in,out] commands the vector of command/macros documentation + * entry found in the script file. + * @param[in,out] the cmake object instance to which variable documentation + * will be attached (using @see cmake::DefineProperty) + * @param[in] the documentation section in which the property will be + * inserted. + * @return the number of documented items (command and variable) + * found in the file. + */ + int GetStructuredDocFromFile(const char* fname, + std::vector& commands, + cmake* cm); +private: + void SetForm(Form f); + void SetDocName(const char* docname); + + bool CreateSingleModule(const char* fname, + const char* moduleName, + cmDocumentationSection &sec); + void CreateModuleDocsForDir(cmsys::Directory& dir, + cmDocumentationSection &moduleSection); + bool CreateModulesSection(); + bool CreateCustomModulesSection(); + void CreateFullDocumentation(); + + void AddDocumentIntroToPrint(const char* intro[2]); + + bool PrintCopyright(std::ostream& os); + bool PrintVersion(std::ostream& os); + bool PrintDocumentationGeneric(std::ostream& os, const char *section); + bool PrintDocumentationList(std::ostream& os, const char *section); + bool PrintDocumentationSingle(std::ostream& os); + bool PrintDocumentationSingleModule(std::ostream& os); + bool PrintDocumentationSingleProperty(std::ostream& os); + bool PrintDocumentationSinglePolicy(std::ostream& os); + bool PrintDocumentationSingleVariable(std::ostream& os); + bool PrintDocumentationUsage(std::ostream& os); + bool PrintDocumentationFull(std::ostream& os); + bool PrintDocumentationModules(std::ostream& os); + bool PrintDocumentationCustomModules(std::ostream& os); + bool PrintDocumentationPolicies(std::ostream& os); + bool PrintDocumentationProperties(std::ostream& os); + bool PrintDocumentationVariables(std::ostream& os); + bool PrintDocumentationCurrentCommands(std::ostream& os); + bool PrintDocumentationCompatCommands(std::ostream& os); + void PrintDocumentationCommand(std::ostream& os, + const cmDocumentationEntry &entry); + + + const char* GetNameString() const; + const char* GetDocName(bool fallbackToNameString = true) const; + const char* GetDefaultDocName(Type ht) const; + bool IsOption(const char* arg) const; + + bool ShowGenerators; + + std::string NameString; + std::string DocName; + std::map AllSections; + + std::string SeeAlsoString; + std::string CMakeRoot; + std::string CMakeModulePath; + std::set ModulesFound; + std::vector< char* > ModuleStrings; + std::vector PrintSections; + std::string CurrentArgument; + + struct RequestedHelpItem + { + RequestedHelpItem():HelpForm(TextForm), HelpType(None) {} + cmDocumentationEnums::Form HelpForm; + cmDocumentationEnums::Type HelpType; + std::string Filename; + std::string Argument; + }; + + std::vector RequestedHelpItems; + cmDocumentationFormatter* CurrentFormatter; + cmDocumentationFormatterHTML HTMLFormatter; + cmDocumentationFormatterDocbook DocbookFormatter; + cmDocumentationFormatterMan ManFormatter; + cmDocumentationFormatterText TextFormatter; + cmDocumentationFormatterUsage UsageFormatter; + + std::vector PropertySections; + std::vector VariableSections; +}; + +#endif diff --git a/Source/cmDocumentationFormatter.cxx b/Source/cmDocumentationFormatter.cxx new file mode 100644 index 0000000..6762d66 --- /dev/null +++ b/Source/cmDocumentationFormatter.cxx @@ -0,0 +1,156 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDocumentationFormatter.h" + +cmDocumentationFormatter::cmDocumentationFormatter() +{ +} + +cmDocumentationFormatter::~cmDocumentationFormatter() +{ +} + +void cmDocumentationFormatter::PrintFormatted(std::ostream& os, + const char* text) +{ + if(!text) + { + return; + } + const char* ptr = text; + while(*ptr) + { + // Any ptrs starting in a space are treated as preformatted text. + std::string preformatted; + while(*ptr == ' ') + { + for(char ch = *ptr; ch && ch != '\n'; ++ptr, ch = *ptr) + { + preformatted.append(1, ch); + } + if(*ptr) + { + ++ptr; + preformatted.append(1, '\n'); + } + } + if(preformatted.length()) + { + this->PrintPreformatted(os, preformatted.c_str()); + } + + // Other ptrs are treated as paragraphs. + std::string paragraph; + for(char ch = *ptr; ch && ch != '\n'; ++ptr, ch = *ptr) + { + paragraph.append(1, ch); + } + if(*ptr) + { + ++ptr; + paragraph.append(1, '\n'); + } + if(paragraph.length()) + { + this->PrintParagraph(os, paragraph.c_str()); + } + } +} + +//---------------------------------------------------------------------------- +std::string +cmDocumentationFormatter::ComputeSectionLinkPrefix(std::string const& name) +{ + // Map from section name to a prefix for links pointing within the + // section. For example, the commands section should have HTML + // links to each command with names like #command:ADD_EXECUTABLE. + if(name.find("Command") != name.npos) + { + return "command"; + } + else if(name.find("Propert") != name.npos) + { + if(name.find("Global") != name.npos) + { + return "prop_global"; + } + else if(name.find("Direct") != name.npos) + { + return "prop_dir"; + } + else if(name.find("Target") != name.npos) + { + return "prop_tgt"; + } + else if(name.find("Test") != name.npos) + { + return "prop_test"; + } + else if(name.find("Source") != name.npos) + { + return "prop_sf"; + } + return "property"; + } + else if(name.find("Variable") != name.npos) + { + return "variable"; + } + else if(name.find("Polic") != name.npos) + { + return "policy"; + } + else if(name.find("Module") != name.npos) + { + return "module"; + } + else if(name.find("Name") != name.npos || + name.find("Introduction") != name.npos) + { + return "name"; + } + else if(name.find("Usage") != name.npos) + { + return "usage"; + } + else if(name.find("Description") != name.npos) + { + return "desc"; + } + else if(name.find("Generators") != name.npos) + { + return "gen"; + } + else if(name.find("Options") != name.npos) + { + return "opt"; + } + else if(name.find("Copyright") != name.npos) + { + return "copy"; + } + else if(name.find("See Also") != name.npos) + { + return "see"; + } + else if(name.find("SingleItem") != name.npos) + { + return "single_item"; + } + else + { + std::cerr + << "WARNING: ComputeSectionLinkPrefix failed for \"" << name << "\"" + << std::endl; + return "other"; + } +} diff --git a/Source/cmDocumentationFormatter.h b/Source/cmDocumentationFormatter.h new file mode 100644 index 0000000..665b9b6 --- /dev/null +++ b/Source/cmDocumentationFormatter.h @@ -0,0 +1,67 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef _cmDocumentationFormatter_h +#define _cmDocumentationFormatter_h + +#include "cmStandardIncludes.h" + +/** This is just a helper class to make it build with MSVC 6.0. +Actually the enums and internal classes could directly go into +cmDocumentation, but then MSVC6 complains in RequestedHelpItem that +cmDocumentation is an undefined type and so it doesn't know the enums. +Moving the enums to a class which is then already completely parsed helps +against this. */ +class cmDocumentationEnums +{ +public: + /** Types of help provided. */ + enum Type + { None, Usage, Single, SingleModule, SingleProperty, SingleVariable, + List, ModuleList, PropertyList, VariableList, + Full, Properties, Variables, Modules, CustomModules, Commands, + CompatCommands, Copyright, Version, Policies, SinglePolicy }; + + /** Forms of documentation output. */ + enum Form { TextForm, HTMLForm, ManForm, UsageForm, DocbookForm }; +}; + +class cmDocumentationSection; + +/** Base class for printing the documentation in the various supported + formats. */ +class cmDocumentationFormatter +{ +public: + cmDocumentationFormatter(); + virtual ~cmDocumentationFormatter(); + void PrintFormatted(std::ostream& os, const char* text); + + virtual cmDocumentationEnums::Form GetForm() const = 0; + + virtual void PrintHeader(const char* /*docname*/, + const char* /*appname*/, + std::ostream& /*os*/) {} + virtual void PrintFooter(std::ostream& /*os*/) {} + virtual void PrintSection(std::ostream& os, + const cmDocumentationSection& section, + const char* name) = 0; + virtual void PrintPreformatted(std::ostream& os, const char* text) = 0; + virtual void PrintParagraph(std::ostream& os, const char* text) = 0; + virtual void PrintIndex(std::ostream& , + std::vector&) + {} + + /** Compute a prefix for links into a section (#\_SOMETHING). */ + std::string ComputeSectionLinkPrefix(std::string const& name); +}; + +#endif diff --git a/Source/cmDocumentationFormatterDocbook.cxx b/Source/cmDocumentationFormatterDocbook.cxx new file mode 100644 index 0000000..3087330 --- /dev/null +++ b/Source/cmDocumentationFormatterDocbook.cxx @@ -0,0 +1,255 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDocumentationFormatterDocbook.h" +#include "cmDocumentationSection.h" +//---------------------------------------------------------------------------- + +// this function is a copy of the one in the HTML formatter +// the three functions below are slightly modified copies +static bool cmDocumentationIsHyperlinkCharDocbook(char c) +{ + // This is not a complete list but works for CMake documentation. + return ((c >= 'A' && c <= 'Z') || + (c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || + c == '-' || c == '.' || c == '/' || c == '~' || c == '@' || + c == ':' || c == '_' || c == '&' || c == '?' || c == '='); +} + +//---------------------------------------------------------------------------- +static void cmDocumentationPrintDocbookChar(std::ostream& os, char c) +{ + // Use an escape sequence if necessary. + switch(c) + { + case '<': + os << "<"; + break; + case '>': + os << ">"; + break; + case '&': + os << "&"; + break; + default: + os << c; + } +} + +//---------------------------------------------------------------------------- +const char* cmDocumentationPrintDocbookLink(std::ostream& os,const char* begin) +{ + // Look for the end of the link. + const char* end = begin; + while(cmDocumentationIsHyperlinkCharDocbook(*end)) + { + ++end; + } + + // Print the hyperlink itself. + os << ""; + + return end; +} + +//---------------------------------------------------------------------------- +void cmDocumentationPrintDocbookEscapes(std::ostream& os, const char* text) +{ + // Hyperlink prefixes. + static const char* hyperlinks[] = {"http://", "ftp://", "mailto:", 0}; + + // Print each character. + for(const char* p = text; *p;) + { + // Handle hyperlinks specially to make them active. + bool found_hyperlink = false; + for(const char** h = hyperlinks; !found_hyperlink && *h; ++h) + { + if(strncmp(p, *h, strlen(*h)) == 0) + { + p = cmDocumentationPrintDocbookLink(os, p); + found_hyperlink = true; + } + } + + // Print other characters normally. + if(!found_hyperlink) + { + cmDocumentationPrintDocbookChar(os, *p++); + } + } +} + + +cmDocumentationFormatterDocbook::cmDocumentationFormatterDocbook() +:cmDocumentationFormatter() +{ +} + +void cmDocumentationFormatterDocbook +::PrintSection(std::ostream& os, + const cmDocumentationSection §ion, + const char* name) +{ + if(name) + { + std::string id = "section_"; + id += name; + if (this->EmittedLinkIds.find(id) == this->EmittedLinkIds.end()) + { + this->EmittedLinkIds.insert(id); + os << "\n" + "\n" << name << "\n"; + } + else + { + static unsigned int i=0; + i++; + os << "\n" + "\n" << name << "\n"; + } + } + + std::string prefix = this->ComputeSectionLinkPrefix(name); + + const std::vector &entries = + section.GetEntries(); + + if (!entries.empty()) + { + os << "\n"; + for(std::vector::const_iterator op + = entries.begin(); op != entries.end(); ++ op ) + { + if(op->Name.size()) + { + os << " Name.c_str()); + os << "\">"; + cmDocumentationPrintDocbookEscapes(os, op->Name.c_str()); + os << "\n"; + } + } + os << "\n" ; + } + + for(std::vector::const_iterator op = entries.begin(); + op != entries.end();) + { + if(op->Name.size()) + { + for(;op != entries.end() && op->Name.size(); ++op) + { + if(op->Name.size()) + { + os << " Name.c_str()); + + // make sure that each id exists only once. Since it seems + // not easily possible to determine which link refers to which id, + // we have at least to make sure that the duplicated id's get a + // different name (by appending an increasing number), Alex + std::string id = prefix; + id += "_"; + id += op->Name; + if (this->EmittedLinkIds.find(id) == this->EmittedLinkIds.end()) + { + this->EmittedLinkIds.insert(id); + } + else + { + static unsigned int i=0; + i++; + os << i; + } + // continue as normal... + + os << "\">"; + cmDocumentationPrintDocbookEscapes(os, op->Name.c_str()); + os << " "; + } + cmDocumentationPrintDocbookEscapes(os, op->Brief.c_str()); + if(op->Name.size()) + { + os << "\n"; + } + + if(op->Full.size()) + { + // a line break seems to be simply a line break with docbook + os << "\n "; + this->PrintFormatted(os, op->Full.c_str()); + } + os << "\n"; + } + } + else + { + this->PrintFormatted(os, op->Brief.c_str()); + os << "\n"; + ++op; + } + } + if(name) + { + os << "\n"; + } +} + +void cmDocumentationFormatterDocbook::PrintPreformatted(std::ostream& os, + const char* text) +{ + os << ""; + cmDocumentationPrintDocbookEscapes(os, text); + os << "\n "; +} + +void cmDocumentationFormatterDocbook::PrintParagraph(std::ostream& os, + const char* text) +{ + os << ""; + cmDocumentationPrintDocbookEscapes(os, text); + os << ""; +} + +//---------------------------------------------------------------------------- +void cmDocumentationFormatterDocbook::PrintHeader(const char* docname, + const char* appname, + std::ostream& os) +{ + // this one is used to ensure that we don't create multiple link targets + // with the same name. We can clear it here since we are at the + // start of a document here. + this->EmittedLinkIds.clear(); + + os << "\n" + "\n" + " ]>\n" + "
\n" + "\n" + "" << docname << " - " << appname << "\n" + "\n"; +} + +//---------------------------------------------------------------------------- +void cmDocumentationFormatterDocbook::PrintFooter(std::ostream& os) +{ + os << "
\n"; +} + diff --git a/Source/cmDocumentationFormatterDocbook.h b/Source/cmDocumentationFormatterDocbook.h new file mode 100644 index 0000000..213948d --- /dev/null +++ b/Source/cmDocumentationFormatterDocbook.h @@ -0,0 +1,41 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef _cmDocumentationFormatterDocbook_h +#define _cmDocumentationFormatterDocbook_h + +#include "cmStandardIncludes.h" + +#include "cmDocumentationFormatter.h" + +/** Class to print the documentation as Docbook. + http://www.oasis-open.org/docbook/xml/4.2/ */ +class cmDocumentationFormatterDocbook : public cmDocumentationFormatter +{ +public: + cmDocumentationFormatterDocbook(); + + virtual cmDocumentationEnums::Form GetForm() const + { return cmDocumentationEnums::DocbookForm;} + + virtual void PrintHeader(const char* docname, const char* appname, + std::ostream& os); + virtual void PrintFooter(std::ostream& os); + virtual void PrintSection(std::ostream& os, + const cmDocumentationSection& section, + const char* name); + virtual void PrintPreformatted(std::ostream& os, const char* text); + virtual void PrintParagraph(std::ostream& os, const char* text); +private: + std::set EmittedLinkIds; +}; + +#endif diff --git a/Source/cmDocumentationFormatterHTML.cxx b/Source/cmDocumentationFormatterHTML.cxx new file mode 100644 index 0000000..6ced1e4 --- /dev/null +++ b/Source/cmDocumentationFormatterHTML.cxx @@ -0,0 +1,288 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDocumentationFormatterHTML.h" +#include "cmDocumentationSection.h" +#include "cmVersion.h" +//---------------------------------------------------------------------------- +static bool cmDocumentationIsHyperlinkChar(char c) +{ + // This is not a complete list but works for CMake documentation. + return ((c >= 'A' && c <= 'Z') || + (c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || + c == '-' || c == '.' || c == '/' || c == '~' || c == '@' || + c == ':' || c == '_' || c == '&' || c == '?' || c == '='); +} + +//---------------------------------------------------------------------------- +static void cmDocumentationPrintHTMLChar(std::ostream& os, char c) +{ + // Use an escape sequence if necessary. + switch (c) + { + case '<': + os << "<"; + break; + case '>': + os << ">"; + break; + case '&': + os << "&"; + break; + case '\n': + os << "
"; + break; + default: + os << c; + } +} + +//---------------------------------------------------------------------------- +bool cmDocumentationHTMLIsIdChar(char c) +{ + // From the HTML specification: + // ID and NAME tokens must begin with a letter ([A-Za-z]) and may + // be followed by any number of letters, digits ([0-9]), hyphens + // ("-"), underscores ("_"), colons (":"), and periods ("."). + return ((c >= 'A' && c <= 'Z') || + (c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || + c == '-' || c == '_' || c == ':' || c == '.'); +} + +//---------------------------------------------------------------------------- +void cmDocumentationPrintHTMLId(std::ostream& os, const char* begin) +{ + for(const char* c = begin; *c; ++c) + { + if(cmDocumentationHTMLIsIdChar(*c)) + { + os << *c; + } + } +} + +//---------------------------------------------------------------------------- +const char* cmDocumentationPrintHTMLLink(std::ostream& os, const char* begin) +{ + // Look for the end of the link. + const char* end = begin; + while(cmDocumentationIsHyperlinkChar(*end)) + { + ++end; + } + + // Print the hyperlink itself. + os << ""; + + // The name of the hyperlink is the text itself. + for(const char* c = begin; c != end; ++c) + { + cmDocumentationPrintHTMLChar(os, *c); + } + os << ""; + + // Return the position at which to continue scanning the input + // string. + return end; +} + + +cmDocumentationFormatterHTML::cmDocumentationFormatterHTML() +:cmDocumentationFormatter() +{ +} + +void cmDocumentationFormatterHTML +::PrintSection(std::ostream& os, + const cmDocumentationSection §ion, + const char* name) +{ + std::string prefix = this->ComputeSectionLinkPrefix(name); + + const std::vector &entries = + section.GetEntries(); + + // skip the index if the help for only a single item (--help-command, + // --help-policy, --help-property, --help-module) is printed + bool isSingleItemHelp = ((name!=0) && (strcmp(name, "SingleItem")==0)); + + if (!isSingleItemHelp) + { + if (name) + { + os << "

" << name << "

\n"; + } + + // Is a list needed? + for(std::vector::const_iterator op + = entries.begin(); op != entries.end(); ++ op ) + { + if (op->Name.size()) + { + os << "\n" ; + break; // Skip outer loop termination test + } + } + } + + for(std::vector::const_iterator op = entries.begin(); + op != entries.end();) + { + if(op->Name.size()) + { + os << "\n"; + } + else + { + this->PrintFormatted(os, op->Brief.c_str()); + os << "\n"; + ++op; + } + } +} + +void cmDocumentationFormatterHTML::PrintPreformatted(std::ostream& os, + const char* text) +{ + os << "
";
+  this->PrintHTMLEscapes(os, text);
+  os << "
\n "; +} + +void cmDocumentationFormatterHTML::PrintParagraph(std::ostream& os, + const char* text) +{ + os << "

"; + this->PrintHTMLEscapes(os, text); + os << "

\n"; +} + +//---------------------------------------------------------------------------- +void cmDocumentationFormatterHTML::PrintHeader(const char* docname, + const char* appname, + std::ostream& os) +{ + os << "\n"; + os << "\n"; + os << ""; + os << docname << " - " << appname; + os << "\n"; +} + +//---------------------------------------------------------------------------- +void cmDocumentationFormatterHTML::PrintFooter(std::ostream& os) +{ + os << "\n"; +} + +//---------------------------------------------------------------------------- +void cmDocumentationFormatterHTML::PrintHTMLEscapes(std::ostream& os, + const char* text) +{ + // Hyperlink prefixes. + static const char* hyperlinks[] = {"http://", "ftp://", "mailto:", 0}; + + // Print each character. + for(const char* p = text; *p;) + { + // Handle hyperlinks specially to make them active. + bool found_hyperlink = false; + for(const char** h = hyperlinks; !found_hyperlink && *h; ++h) + { + if(strncmp(p, *h, strlen(*h)) == 0) + { + p = cmDocumentationPrintHTMLLink(os, p); + found_hyperlink = true; + } + } + + // Print other characters normally. + if(!found_hyperlink) + { + cmDocumentationPrintHTMLChar(os, *p++); + } + } +} + +void cmDocumentationFormatterHTML +::PrintIndex(std::ostream& os, + std::vector& sections) +{ + // skip the index if only the help for a single item is printed + if ((sections.size() == 1) + && (sections[0]->GetName(this->GetForm()) != 0 ) + && (std::string(sections[0]->GetName(this->GetForm())) == "SingleItem")) + { + return; + } + + os << "

Master Index " + << "CMake " << cmVersion::GetCMakeVersion() + << "

\n"; + + if (!sections.empty()) + { + os << "
    \n"; + for(unsigned int i=0; i < sections.size(); ++i) + { + std::string name = sections[i]->GetName((this->GetForm())); + os << "
  • " << name << "
  • \n"; + } + os << "
\n"; + } +} diff --git a/Source/cmDocumentationFormatterHTML.h b/Source/cmDocumentationFormatterHTML.h new file mode 100644 index 0000000..427e04b --- /dev/null +++ b/Source/cmDocumentationFormatterHTML.h @@ -0,0 +1,42 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef _cmDocumentationFormatterHTML_h +#define _cmDocumentationFormatterHTML_h + +#include "cmStandardIncludes.h" + +#include "cmDocumentationFormatter.h" + +/** Class to print the documentation as HTML. */ +class cmDocumentationFormatterHTML : public cmDocumentationFormatter +{ +public: + cmDocumentationFormatterHTML(); + + virtual cmDocumentationEnums::Form GetForm() const + { return cmDocumentationEnums::HTMLForm;} + + virtual void PrintHeader(const char* docname, const char* appname, + std::ostream& os); + virtual void PrintFooter(std::ostream& os); + virtual void PrintSection(std::ostream& os, + const cmDocumentationSection& section, + const char* name); + virtual void PrintPreformatted(std::ostream& os, const char* text); + virtual void PrintParagraph(std::ostream& os, const char* text); + virtual void PrintIndex(std::ostream& , + std::vector&); +private: + void PrintHTMLEscapes(std::ostream& os, const char* text); +}; + +#endif diff --git a/Source/cmDocumentationFormatterMan.cxx b/Source/cmDocumentationFormatterMan.cxx new file mode 100644 index 0000000..79a3b25 --- /dev/null +++ b/Source/cmDocumentationFormatterMan.cxx @@ -0,0 +1,96 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmDocumentationFormatterMan.h" +#include "cmDocumentationSection.h" + +#include "cmSystemTools.h" +#include "cmVersion.h" + + +cmDocumentationFormatterMan::cmDocumentationFormatterMan() +:cmDocumentationFormatter() +{ +} + +void cmDocumentationFormatterMan +::PrintSection(std::ostream& os, + const cmDocumentationSection §ion, + const char* name) +{ + if(name) + { + os << ".SH " << name << "\n"; + } + + const std::vector &entries = + section.GetEntries(); + for(std::vector::const_iterator op = entries.begin(); + op != entries.end(); ++op) + { + if(op->Name.size()) + { + os << ".TP\n" + << ".B " << (op->Name.size()?op->Name.c_str():"*") << "\n"; + this->PrintFormatted(os, op->Brief.c_str()); + this->PrintFormatted(os, op->Full.c_str()); + } + else + { + os << ".PP\n"; + this->PrintFormatted(os, op->Brief.c_str()); + } + } +} + +void cmDocumentationFormatterMan::EscapeText(std::string& man_text) +{ + cmSystemTools::ReplaceString(man_text, "\\", "\\\\"); + cmSystemTools::ReplaceString(man_text, "-", "\\-"); +} + +void cmDocumentationFormatterMan::PrintPreformatted(std::ostream& os, + const char* text) +{ + std::string man_text = text; + this->EscapeText(man_text); + os << ".nf\n" << man_text; + if (*text && man_text.at(man_text.length()-1) != '\n') + os << "\n"; + os << ".fi\n\n"; +} + +void cmDocumentationFormatterMan::PrintParagraph(std::ostream& os, + const char* text) +{ + std::string man_text = text; + this->EscapeText(man_text); + os << man_text << "\n\n"; +} + + +//---------------------------------------------------------------------------- +void cmDocumentationFormatterMan::PrintHeader(const char* docname, + const char* appname, + std::ostream& os) +{ + std::string s_docname(docname), s_appname(appname); + + this->EscapeText(s_docname); + this->EscapeText(s_appname); + os << ".TH " << s_docname << " 1 \"" + << cmSystemTools::GetCurrentDateTime("%B %d, %Y").c_str() + << "\" \"" << s_appname + << " " << cmVersion::GetCMakeVersion() + << "\"\n"; +} + diff --git a/Source/cmDocumentationFormatterMan.h b/Source/cmDocumentationFormatterMan.h new file mode 100644 index 0000000..11b5acb --- /dev/null +++ b/Source/cmDocumentationFormatterMan.h @@ -0,0 +1,40 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef _cmDocumentationFormatterMan_h +#define _cmDocumentationFormatterMan_h + +#include "cmStandardIncludes.h" + +#include "cmDocumentationFormatter.h" + +/** Class to print the documentation as man page. */ +class cmDocumentationFormatterMan : public cmDocumentationFormatter +{ +public: + cmDocumentationFormatterMan(); + + virtual cmDocumentationEnums::Form GetForm() const + { return cmDocumentationEnums::ManForm;} + + virtual void PrintHeader(const char* docname, const char* appname, + std::ostream& os); + virtual void PrintSection(std::ostream& os, + const cmDocumentationSection& section, + const char* name); + virtual void PrintPreformatted(std::ostream& os, const char* text); + virtual void PrintParagraph(std::ostream& os, const char* text); + +private: + void EscapeText(std::string& man_text); +}; + +#endif diff --git a/Source/cmDocumentationFormatterText.cxx b/Source/cmDocumentationFormatterText.cxx new file mode 100644 index 0000000..0b04b73 --- /dev/null +++ b/Source/cmDocumentationFormatterText.cxx @@ -0,0 +1,180 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmDocumentationFormatterText.h" +#include "cmDocumentationSection.h" + +cmDocumentationFormatterText::cmDocumentationFormatterText() +:cmDocumentationFormatter() +,TextWidth(77) +,TextIndent("") +{ +} + +void cmDocumentationFormatterText +::PrintSection(std::ostream& os, + const cmDocumentationSection §ion, + const char* name) +{ + if(name && (strcmp(name, "SingleItem")!=0)) + { + os << + "---------------------------------------" + "---------------------------------------\n"; + os << name << "\n\n"; + } + + const std::vector &entries = + section.GetEntries(); + for(std::vector::const_iterator op = entries.begin(); + op != entries.end(); ++op) + { + if(op->Name.size()) + { + os << " " << op->Name << "\n"; + this->TextIndent = " "; + this->PrintFormatted(os, op->Brief.c_str()); + if(op->Full.size()) + { + os << "\n"; + this->PrintFormatted(os, op->Full.c_str()); + } + } + else + { + this->TextIndent = ""; + this->PrintFormatted(os, op->Brief.c_str()); + } + os << "\n"; + } +} + +void cmDocumentationFormatterText::PrintPreformatted(std::ostream& os, + const char* text) +{ + bool newline = true; + for(const char* ptr = text; *ptr; ++ptr) + { + if(newline && *ptr != '\n') + { + os << this->TextIndent; + newline = false; + } + os << *ptr; + if(*ptr == '\n') + { + newline = true; + } + } + os << "\n"; +} + +void cmDocumentationFormatterText::PrintParagraph(std::ostream& os, + const char* text) +{ + os << this->TextIndent; + this->PrintColumn(os, text); + os << "\n"; +} + +void cmDocumentationFormatterText::SetIndent(const char* indent) +{ + this->TextIndent = indent; +} + +void cmDocumentationFormatterText::PrintColumn(std::ostream& os, + const char* text) +{ + // Print text arranged in an indented column of fixed witdh. + const char* l = text; + long column = 0; + bool newSentence = false; + bool firstLine = true; + int width = this->TextWidth - static_cast(strlen(this->TextIndent)); + + // Loop until the end of the text. + while(*l) + { + // Parse the next word. + const char* r = l; + while(*r && (*r != '\n') && (*r != ' ')) { ++r; } + + // Does it fit on this line? + if(r-l < (width-column-(newSentence?1:0))) + { + // Word fits on this line. + if(r > l) + { + if(column) + { + // Not first word on line. Separate from the previous word + // by a space, or two if this is a new sentence. + if(newSentence) + { + os << " "; + column += 2; + } + else + { + os << " "; + column += 1; + } + } + else + { + // First word on line. Print indentation unless this is the + // first line. + os << (firstLine?"":this->TextIndent); + } + + // Print the word. + os.write(l, static_cast(r-l)); + newSentence = (*(r-1) == '.'); + } + + if(*r == '\n') + { + // Text provided a newline. Start a new line. + os << "\n"; + ++r; + column = 0; + firstLine = false; + } + else + { + // No provided newline. Continue this line. + column += static_cast(r-l); + } + } + else + { + // Word does not fit on this line. Start a new line. + os << "\n"; + firstLine = false; + if(r > l) + { + os << this->TextIndent; + os.write(l, static_cast(r-l)); + column = static_cast(r-l); + newSentence = (*(r-1) == '.'); + } + else + { + column = 0; + } + } + + // Move to beginning of next word. Skip over whitespace. + l = r; + while(*l && (*l == ' ')) { ++l; } + } +} diff --git a/Source/cmDocumentationFormatterText.h b/Source/cmDocumentationFormatterText.h new file mode 100644 index 0000000..d9c2af2 --- /dev/null +++ b/Source/cmDocumentationFormatterText.h @@ -0,0 +1,40 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef _cmDocumentationFormatterText_h +#define _cmDocumentationFormatterText_h + +#include "cmStandardIncludes.h" + +#include "cmDocumentationFormatter.h" + +/** Class to print the documentation as plain text. */ +class cmDocumentationFormatterText : public cmDocumentationFormatter +{ +public: + cmDocumentationFormatterText(); + + virtual cmDocumentationEnums::Form GetForm() const + { return cmDocumentationEnums::TextForm;} + + virtual void PrintSection(std::ostream& os, + const cmDocumentationSection& section, + const char* name); + virtual void PrintPreformatted(std::ostream& os, const char* text); + virtual void PrintParagraph(std::ostream& os, const char* text); + void PrintColumn(std::ostream& os, const char* text); + void SetIndent(const char* indent); +protected: + int TextWidth; + const char* TextIndent; +}; + +#endif diff --git a/Source/cmDocumentationFormatterUsage.cxx b/Source/cmDocumentationFormatterUsage.cxx new file mode 100644 index 0000000..8a415cb --- /dev/null +++ b/Source/cmDocumentationFormatterUsage.cxx @@ -0,0 +1,63 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ + +#include "cmDocumentationFormatterUsage.h" +#include "cmDocumentationSection.h" + +cmDocumentationFormatterUsage::cmDocumentationFormatterUsage() +:cmDocumentationFormatterText() +{ +} + +void cmDocumentationFormatterUsage +::PrintSection(std::ostream& os, + const cmDocumentationSection §ion, + const char* name) +{ + if(name) + { + os << name << "\n"; + } + + const std::vector &entries = + section.GetEntries(); + for(std::vector::const_iterator op = entries.begin(); + op != entries.end(); ++op) + { + if(op->Name.size()) + { + os << " " << op->Name; + this->TextIndent = " "; + int align = static_cast(strlen(this->TextIndent))-4; + for(int i = static_cast(op->Name.size()); i < align; ++i) + { + os << " "; + } + if (op->Name.size() > strlen(this->TextIndent)-4 ) + { + os << "\n"; + os.write(this->TextIndent, strlen(this->TextIndent)-2); + } + os << "= "; + this->PrintColumn(os, op->Brief.c_str()); + os << "\n"; + } + else + { + os << "\n"; + this->TextIndent = ""; + this->PrintFormatted(os, op->Brief.c_str()); + } + } + os << "\n"; +} + diff --git a/Source/cmDocumentationFormatterUsage.h b/Source/cmDocumentationFormatterUsage.h new file mode 100644 index 0000000..3ed3442 --- /dev/null +++ b/Source/cmDocumentationFormatterUsage.h @@ -0,0 +1,31 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef _cmDocumentationFormatterUsage_h +#define _cmDocumentationFormatterUsage_h + +#include "cmDocumentationFormatterText.h" + +/** Class to print the documentation as usage on the command line. */ +class cmDocumentationFormatterUsage : public cmDocumentationFormatterText +{ +public: + cmDocumentationFormatterUsage(); + + virtual cmDocumentationEnums::Form GetForm() const + { return cmDocumentationEnums::UsageForm;} + + virtual void PrintSection(std::ostream& os, + const cmDocumentationSection& section, + const char* name); +}; + +#endif diff --git a/Source/cmDocumentationSection.cxx b/Source/cmDocumentationSection.cxx new file mode 100644 index 0000000..a2dfe70 --- /dev/null +++ b/Source/cmDocumentationSection.cxx @@ -0,0 +1,81 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDocumentationSection.h" + + +//---------------------------------------------------------------------------- +void cmDocumentationSection::Append(const char *data[][3]) +{ + int i = 0; + while(data[i][1]) + { + this->Entries.push_back(cmDocumentationEntry(data[i][0], + data[i][1], + data[i][2])); + data += 1; + } +} + +//---------------------------------------------------------------------------- +void cmDocumentationSection::Prepend(const char *data[][3]) +{ + std::vector tmp; + int i = 0; + while(data[i][1]) + { + tmp.push_back(cmDocumentationEntry(data[i][0], + data[i][1], + data[i][2])); + data += 1; + } + this->Entries.insert(this->Entries.begin(),tmp.begin(),tmp.end()); +} + +//---------------------------------------------------------------------------- +void cmDocumentationSection::Append(const char *n, const char *b, + const char *f) +{ + this->Entries.push_back(cmDocumentationEntry(n,b,f)); +} + +#if 0 +//---------------------------------------------------------------------------- +void cmDocumentationSection::Set(const cmDocumentationEntry* header, + const cmDocumentationEntry* section, + const cmDocumentationEntry* footer) +{ + this->Entries.erase(this->Entries.begin(), this->Entries.end()); + if(header) + { + for(const cmDocumentationEntry* op = header; op->brief; ++op) + { + this->Entries.push_back(*op); + } + } + if(section) + { + for(const cmDocumentationEntry* op = section; op->brief; ++op) + { + this->Entries.push_back(*op); + } + } + if(footer) + { + for(const cmDocumentationEntry* op = footer; op->brief; ++op) + { + this->Entries.push_back(*op); + } + } + cmDocumentationEntry empty = {0,0,0}; + this->Entries.push_back(empty); +} +#endif diff --git a/Source/cmDocumentationSection.h b/Source/cmDocumentationSection.h new file mode 100644 index 0000000..0fab38f --- /dev/null +++ b/Source/cmDocumentationSection.h @@ -0,0 +1,68 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef _cmDocumentationSection_h +#define _cmDocumentationSection_h + +#include "cmStandardIncludes.h" +#include "cmDocumentationFormatter.h" + +// Low-level interface for custom documents: +/** Internal class representing a section of the documentation. + * Cares e.g. for the different section titles in the different + * output formats. + */ +class cmDocumentationSection +{ +public: + /** Create a cmSection, with a special name for man-output mode. */ + cmDocumentationSection(const char* name, const char* manName) + :Name(name), ManName(manName) {} + + /** Has any content been added to this section or is it empty ? */ + bool IsEmpty() const { return this->Entries.empty(); } + + /** Clear contents. */ + void Clear() { this->Entries.clear(); } + + /** Return the name of this section for the given output form. */ + const char* GetName(cmDocumentationEnums::Form form) const + { return (form==cmDocumentationEnums::ManForm ? + this->ManName.c_str() : this->Name.c_str()); } + + /** Return a pointer to the first entry of this section. */ + const std::vector &GetEntries() const + { return this->Entries; } + + /** Append an entry to this section. */ + void Append(const cmDocumentationEntry& entry) + { this->Entries.push_back(entry); } + void Append(const std::vector &entries) + { this->Entries.insert(this->Entries.end(),entries.begin(),entries.end()); } + + /** Append an entry to this section using NULL terminated chars */ + void Append(const char *[][3]); + void Append(const char *n, const char *b, const char *f); + + /** prepend some documentation to this section */ + void Prepend(const char *[][3]); + void Prepend(const std::vector &entries) + { this->Entries.insert(this->Entries.begin(), + entries.begin(),entries.end()); } + + +private: + std::string Name; + std::string ManName; + std::vector Entries; +}; + +#endif diff --git a/Source/cmDynamicLoader.cxx b/Source/cmDynamicLoader.cxx new file mode 100644 index 0000000..6a0ab7b --- /dev/null +++ b/Source/cmDynamicLoader.cxx @@ -0,0 +1,112 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmDynamicLoader.h" + +class cmDynamicLoaderCache +{ +public: + ~cmDynamicLoaderCache(); + void CacheFile(const char* path, + const cmsys::DynamicLoader::LibraryHandle&); + bool GetCacheFile(const char* path, cmsys::DynamicLoader::LibraryHandle&); + bool FlushCache(const char* path); + void FlushCache(); + static cmDynamicLoaderCache* GetInstance(); + +private: + std::map CacheMap; + static cmDynamicLoaderCache* Instance; +}; + +cmDynamicLoaderCache* cmDynamicLoaderCache::Instance = 0; + +cmDynamicLoaderCache::~cmDynamicLoaderCache() +{ +} + +void cmDynamicLoaderCache::CacheFile(const char* path, + const cmsys::DynamicLoader::LibraryHandle& p) +{ + cmsys::DynamicLoader::LibraryHandle h; + if ( this->GetCacheFile(path, h) ) + { + this->FlushCache(path); + } + this->CacheMap[path] = p; +} + +bool cmDynamicLoaderCache::GetCacheFile(const char* path, + cmsys::DynamicLoader::LibraryHandle& p) +{ + std::map::iterator it + = this->CacheMap.find(path); + if ( it != this->CacheMap.end() ) + { + p = it->second; + return true; + } + return false; +} + +bool cmDynamicLoaderCache::FlushCache(const char* path) +{ + std::map::iterator it + = this->CacheMap.find(path); + bool ret = false; + if ( it != this->CacheMap.end() ) + { + cmsys::DynamicLoader::CloseLibrary(it->second); + this->CacheMap.erase(it); + ret = true; + } + return ret; +} + +void cmDynamicLoaderCache::FlushCache() +{ + for ( std::map::iterator it + = this->CacheMap.begin(); + it != this->CacheMap.end(); it++ ) + { + cmsys::DynamicLoader::CloseLibrary(it->second); + } + delete cmDynamicLoaderCache::Instance; + cmDynamicLoaderCache::Instance = 0; +} + +cmDynamicLoaderCache* cmDynamicLoaderCache::GetInstance() +{ + if ( !cmDynamicLoaderCache::Instance ) + { + cmDynamicLoaderCache::Instance = new cmDynamicLoaderCache; + } + return cmDynamicLoaderCache::Instance; +} + +cmsys::DynamicLoader::LibraryHandle cmDynamicLoader::OpenLibrary( + const char* libname ) +{ + cmsys::DynamicLoader::LibraryHandle lh; + if ( cmDynamicLoaderCache::GetInstance()->GetCacheFile(libname, lh) ) + { + return lh; + } + lh = cmsys::DynamicLoader::OpenLibrary(libname); + cmDynamicLoaderCache::GetInstance()->CacheFile(libname, lh); + return lh; +} + +void cmDynamicLoader::FlushCache() +{ + cmDynamicLoaderCache::GetInstance()->FlushCache(); +} diff --git a/Source/cmDynamicLoader.h b/Source/cmDynamicLoader.h new file mode 100644 index 0000000..acf8011 --- /dev/null +++ b/Source/cmDynamicLoader.h @@ -0,0 +1,47 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +// .NAME cmDynamicLoader - class interface to system dynamic libraries +// .SECTION Description +// cmDynamicLoader provides a portable interface to loading dynamic +// libraries into a process. + + +#ifndef __cmDynamicLoader_h +#define __cmDynamicLoader_h + +#include "cmStandardIncludes.h" + +#include + +class cmDynamicLoader +{ +public: + // Description: + // Load a dynamic library into the current process. + // The returned cmsys::DynamicLoader::LibraryHandle can be used to access + // the symbols in the library. + static cmsys::DynamicLoader::LibraryHandle OpenLibrary(const char*); + + // Description: + // Flush the cache of dynamic loader. + static void FlushCache(); + +protected: + cmDynamicLoader() {}; + ~cmDynamicLoader() {}; + +private: + cmDynamicLoader(const cmDynamicLoader&); // Not implemented. + void operator=(const cmDynamicLoader&); // Not implemented. +}; + +#endif diff --git a/Source/cmELF.cxx b/Source/cmELF.cxx new file mode 100644 index 0000000..1158fc0 --- /dev/null +++ b/Source/cmELF.cxx @@ -0,0 +1,920 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmStandardIncludes.h" // to get CMAKE_USE_ELF_PARSER first +#include "cmELF.h" + +#include + +// Need the native byte order of the running CPU. +#define cmsys_CPU_UNKNOWN_OKAY // We can decide at runtime if not known. +#include + +// Include the ELF format information system header. +#include +#if defined(__sun) +# include // For dynamic section information +#endif + +//---------------------------------------------------------------------------- +// Low-level byte swapping implementation. +template struct cmELFByteSwapSize {}; +void cmELFByteSwap(char*, cmELFByteSwapSize<1> const&) +{ +} +void cmELFByteSwap(char* data, cmELFByteSwapSize<2> const&) +{ + char one_byte; + one_byte = data[0]; data[0] = data[1]; data[1] = one_byte; +} +void cmELFByteSwap(char* data, cmELFByteSwapSize<4> const&) +{ + char one_byte; + one_byte = data[0]; data[0] = data[3]; data[3] = one_byte; + one_byte = data[1]; data[1] = data[2]; data[2] = one_byte; +} +void cmELFByteSwap(char* data, cmELFByteSwapSize<8> const&) +{ + char one_byte; + one_byte = data[0]; data[0] = data[7]; data[7] = one_byte; + one_byte = data[1]; data[1] = data[6]; data[6] = one_byte; + one_byte = data[2]; data[2] = data[5]; data[5] = one_byte; + one_byte = data[3]; data[3] = data[4]; data[4] = one_byte; +} + +// Low-level byte swapping interface. +template +void cmELFByteSwap(T& x) +{ + cmELFByteSwap(reinterpret_cast(&x), cmELFByteSwapSize()); +} + +//---------------------------------------------------------------------------- +class cmELFInternal +{ +public: + typedef cmELF::StringEntry StringEntry; + enum ByteOrderType { ByteOrderMSB, ByteOrderLSB }; + + // Construct and take ownership of the file stream object. + cmELFInternal(cmELF* external, + cmsys::auto_ptr& fin, + ByteOrderType order): + External(external), + Stream(*fin.release()), + ByteOrder(order), + ELFType(cmELF::FileTypeInvalid) + { + // In most cases the processor-specific byte order will match that + // of the target execution environment. If we choose wrong here + // it is fixed when the header is read. +#if cmsys_CPU_ENDIAN_ID == cmsys_CPU_ENDIAN_ID_LITTLE + this->NeedSwap = (this->ByteOrder == ByteOrderMSB); +#elif cmsys_CPU_ENDIAN_ID == cmsys_CPU_ENDIAN_ID_BIG + this->NeedSwap = (this->ByteOrder == ByteOrderLSB); +#else + this->NeedSwap = false; // Final decision is at runtime anyway. +#endif + + // We have not yet loaded the section info. + this->DynamicSectionIndex = -1; + } + + // Destruct and delete the file stream object. + virtual ~cmELFInternal() + { + delete &this->Stream; + } + + // Forward to the per-class implementation. + virtual unsigned int GetNumberOfSections() const = 0; + virtual unsigned int GetDynamicEntryCount() = 0; + virtual unsigned long GetDynamicEntryPosition(int j) = 0; + virtual StringEntry const* GetDynamicSectionString(int tag) = 0; + virtual void PrintInfo(std::ostream& os) const = 0; + + bool ReadBytes(unsigned long pos, unsigned long size, char* buf) + { + this->Stream.seekg(pos); + this->Stream.read(buf, size); + return this->Stream?true:false; + } + + // Lookup the SONAME in the DYNAMIC section. + StringEntry const* GetSOName() + { + return this->GetDynamicSectionString(DT_SONAME); + } + + // Lookup the RPATH in the DYNAMIC section. + StringEntry const* GetRPath() + { + return this->GetDynamicSectionString(DT_RPATH); + } + + // Lookup the RUNPATH in the DYNAMIC section. + StringEntry const* GetRunPath() + { +#if defined(DT_RUNPATH) + return this->GetDynamicSectionString(DT_RUNPATH); +#else + return 0; +#endif + } + + // Return the recorded ELF type. + cmELF::FileType GetFileType() const { return this->ELFType; } +protected: + // Data common to all ELF class implementations. + + // The external cmELF object. + cmELF* External; + + // The stream from which to read. + std::istream& Stream; + + // The byte order of the ELF file. + ByteOrderType ByteOrder; + + // The ELF file type. + cmELF::FileType ELFType; + + // Whether we need to byte-swap structures read from the stream. + bool NeedSwap; + + // The section header index of the DYNAMIC section (-1 if none). + int DynamicSectionIndex; + + // Helper methods for subclasses. + void SetErrorMessage(const char* msg) + { + this->External->ErrorMessage = msg; + this->ELFType = cmELF::FileTypeInvalid; + } + + // Store string table entry states. + std::map DynamicSectionStrings; +}; + +//---------------------------------------------------------------------------- +// Configure the implementation template for 32-bit ELF files. +struct cmELFTypes32 +{ + typedef Elf32_Ehdr ELF_Ehdr; + typedef Elf32_Shdr ELF_Shdr; + typedef Elf32_Dyn ELF_Dyn; + typedef Elf32_Half ELF_Half; + static const char* GetName() { return "32-bit"; } +}; + +// Configure the implementation template for 32-bit ELF files. +struct cmELFTypes64 +{ + typedef Elf64_Ehdr ELF_Ehdr; + typedef Elf64_Shdr ELF_Shdr; + typedef Elf64_Dyn ELF_Dyn; + typedef Elf64_Half ELF_Half; + static const char* GetName() { return "64-bit"; } +}; + +//---------------------------------------------------------------------------- +// Parser implementation template. +template +class cmELFInternalImpl: public cmELFInternal +{ +public: + // Copy the ELF file format types from our configuration parameter. + typedef typename Types::ELF_Ehdr ELF_Ehdr; + typedef typename Types::ELF_Shdr ELF_Shdr; + typedef typename Types::ELF_Dyn ELF_Dyn; + typedef typename Types::ELF_Half ELF_Half; + + // Construct with a stream and byte swap indicator. + cmELFInternalImpl(cmELF* external, + cmsys::auto_ptr& fin, + ByteOrderType order); + + // Return the number of sections as specified by the ELF header. + virtual unsigned int GetNumberOfSections() const + { + return static_cast(this->ELFHeader.e_shnum); + } + + // Get the file position and size of a dynamic section entry. + virtual unsigned int GetDynamicEntryCount(); + virtual unsigned long GetDynamicEntryPosition(int j); + + // Lookup a string from the dynamic section with the given tag. + virtual StringEntry const* GetDynamicSectionString(int tag); + + // Print information about the ELF file. + virtual void PrintInfo(std::ostream& os) const + { + os << "ELF " << Types::GetName(); + if(this->ByteOrder == ByteOrderMSB) + { + os << " MSB"; + } + else if(this->ByteOrder == ByteOrderLSB) + { + os << " LSB"; + } + switch(this->ELFType) + { + case cmELF::FileTypeInvalid: + os << " invalid file"; + break; + case cmELF::FileTypeRelocatableObject: + os << " relocatable object"; + break; + case cmELF::FileTypeExecutable: + os << " executable"; + break; + case cmELF::FileTypeSharedLibrary: + os << " shared library"; + break; + case cmELF::FileTypeCore: + os << " core file"; + break; + case cmELF::FileTypeSpecificOS: + os << " os-specific type"; + break; + case cmELF::FileTypeSpecificProc: + os << " processor-specific type"; + break; + } + os << "\n"; + } + +private: + void ByteSwap(ELF_Ehdr& elf_header) + { + cmELFByteSwap(elf_header.e_type); + cmELFByteSwap(elf_header.e_machine); + cmELFByteSwap(elf_header.e_version); + cmELFByteSwap(elf_header.e_entry); + cmELFByteSwap(elf_header.e_phoff); + cmELFByteSwap(elf_header.e_shoff); + cmELFByteSwap(elf_header.e_flags); + cmELFByteSwap(elf_header.e_ehsize); + cmELFByteSwap(elf_header.e_phentsize); + cmELFByteSwap(elf_header.e_phnum); + cmELFByteSwap(elf_header.e_shentsize); + cmELFByteSwap(elf_header.e_shnum); + cmELFByteSwap(elf_header.e_shstrndx); + } + + void ByteSwap(ELF_Shdr& sec_header) + { + cmELFByteSwap(sec_header.sh_name); + cmELFByteSwap(sec_header.sh_type); + cmELFByteSwap(sec_header.sh_flags); + cmELFByteSwap(sec_header.sh_addr); + cmELFByteSwap(sec_header.sh_offset); + cmELFByteSwap(sec_header.sh_size); + cmELFByteSwap(sec_header.sh_link); + cmELFByteSwap(sec_header.sh_info); + cmELFByteSwap(sec_header.sh_addralign); + cmELFByteSwap(sec_header.sh_entsize); + } + + void ByteSwap(ELF_Dyn& dyn) + { + cmELFByteSwap(dyn.d_tag); + switch (dyn.d_tag) + { + case DT_NULL: /* dyn.d_un ignored */ break; + case DT_NEEDED: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_PLTRELSZ: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_PLTGOT: cmELFByteSwap(dyn.d_un.d_ptr); break; + case DT_HASH: cmELFByteSwap(dyn.d_un.d_ptr); break; + case DT_STRTAB: cmELFByteSwap(dyn.d_un.d_ptr); break; + case DT_SYMTAB: cmELFByteSwap(dyn.d_un.d_ptr); break; + case DT_RELA: cmELFByteSwap(dyn.d_un.d_ptr); break; + case DT_RELASZ: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_RELAENT: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_STRSZ: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_SYMENT: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_INIT: cmELFByteSwap(dyn.d_un.d_ptr); break; + case DT_FINI: cmELFByteSwap(dyn.d_un.d_ptr); break; + case DT_SONAME: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_RPATH: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_SYMBOLIC: /* dyn.d_un ignored */ break; + case DT_REL: cmELFByteSwap(dyn.d_un.d_ptr); break; + case DT_RELSZ: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_RELENT: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_PLTREL: cmELFByteSwap(dyn.d_un.d_val); break; + case DT_DEBUG: cmELFByteSwap(dyn.d_un.d_ptr); break; + case DT_TEXTREL: /* dyn.d_un ignored */ break; + case DT_JMPREL: cmELFByteSwap(dyn.d_un.d_ptr); break; +#ifdef T_BIND_NOW + case T_BIND_NOW: /* dyn.d_un ignored */ break; +#endif +#ifdef DT_INIT_ARRAY + case DT_INIT_ARRAY: cmELFByteSwap(dyn.d_un.d_ptr); break; +#endif +#ifdef DT_FINI_ARRAY + case DT_FINI_ARRAY: cmELFByteSwap(dyn.d_un.d_ptr); break; +#endif +#ifdef DT_INIT_ARRAYSZ + case DT_INIT_ARRAYSZ: cmELFByteSwap(dyn.d_un.d_val); break; +#endif +#ifdef DT_FINI_ARRAYSZ + case DT_FINI_ARRAYSZ: cmELFByteSwap(dyn.d_un.d_val); break; +#endif +#ifdef DT_RUNPATH + case DT_RUNPATH: cmELFByteSwap(dyn.d_un.d_val); break; +#endif +#ifdef DT_FLAGS + case DT_FLAGS: cmELFByteSwap(dyn.d_un.d_val); break; +#endif +#ifdef DT_PREINIT_ARRAY + case DT_PREINIT_ARRAY: cmELFByteSwap(dyn.d_un.d_ptr); break; +#endif +#ifdef DT_PREINIT_ARRAYSZ + case DT_PREINIT_ARRAYSZ: cmELFByteSwap(dyn.d_un.d_val); break; +#endif + } + } + + bool FileTypeValid(ELF_Half et) + { + unsigned int eti = static_cast(et); + if(eti == ET_NONE || eti == ET_REL || eti == ET_EXEC || + eti == ET_DYN || eti == ET_CORE) + { + return true; + } +#if defined(ET_LOOS) && defined(ET_HIOS) + if(eti >= ET_LOOS && eti <= ET_HIOS) + { + return true; + } +#endif +#if defined(ET_LOPROC) && defined(ET_HIPROC) + if(eti >= ET_LOPROC && eti <= ET_HIPROC) + { + return true; + } +#endif + return false; + } + + bool Read(ELF_Ehdr& x) + { + // Read the header from the file. + if(!this->Stream.read(reinterpret_cast(&x), sizeof(x))) + { + return false; + } + + // The byte order of ELF header fields may not match that of the + // processor-specific data. The header fields are ordered to + // match the target execution environment, so we may need to + // memorize the order of all platforms based on the e_machine + // value. As a heuristic, if the type is invalid but its + // swapped value is okay then flip our swap mode. + ELF_Half et = x.e_type; + if(this->NeedSwap) + { + cmELFByteSwap(et); + } + if(!this->FileTypeValid(et)) + { + cmELFByteSwap(et); + if(this->FileTypeValid(et)) + { + // The previous byte order guess was wrong. Flip it. + this->NeedSwap = !this->NeedSwap; + } + } + + // Fix the byte order of the header. + if(this->NeedSwap) + { + ByteSwap(x); + } + return true; + } + bool Read(ELF_Shdr& x) + { + if(this->Stream.read(reinterpret_cast(&x), sizeof(x)) && + this->NeedSwap) + { + ByteSwap(x); + } + return this->Stream? true:false; + } + bool Read(ELF_Dyn& x) + { + if(this->Stream.read(reinterpret_cast(&x), sizeof(x)) && + this->NeedSwap) + { + ByteSwap(x); + } + return this->Stream? true:false; + } + + bool LoadSectionHeader(ELF_Half i) + { + // Read the section header from the file. + this->Stream.seekg(this->ELFHeader.e_shoff + + this->ELFHeader.e_shentsize * i); + if(!this->Read(this->SectionHeaders[i])) + { + return false; + } + + // Identify some important sections. + if(this->SectionHeaders[i].sh_type == SHT_DYNAMIC) + { + this->DynamicSectionIndex = i; + } + return true; + } + + bool LoadDynamicSection(); + + // Store the main ELF header. + ELF_Ehdr ELFHeader; + + // Store all the section headers. + std::vector SectionHeaders; + + // Store all entries of the DYNAMIC section. + std::vector DynamicSectionEntries; +}; + +//---------------------------------------------------------------------------- +template +cmELFInternalImpl +::cmELFInternalImpl(cmELF* external, + cmsys::auto_ptr& fin, + ByteOrderType order): + cmELFInternal(external, fin, order) +{ + // Read the main header. + if(!this->Read(this->ELFHeader)) + { + this->SetErrorMessage("Failed to read main ELF header."); + return; + } + + // Determine the ELF file type. + switch(this->ELFHeader.e_type) + { + case ET_NONE: + this->SetErrorMessage("ELF file type is NONE."); + return; + case ET_REL: + this->ELFType = cmELF::FileTypeRelocatableObject; + break; + case ET_EXEC: + this->ELFType = cmELF::FileTypeExecutable; + break; + case ET_DYN: + this->ELFType = cmELF::FileTypeSharedLibrary; + break; + case ET_CORE: + this->ELFType = cmELF::FileTypeCore; + break; + default: + { + unsigned int eti = static_cast(this->ELFHeader.e_type); +#if defined(ET_LOOS) && defined(ET_HIOS) + if(eti >= ET_LOOS && eti <= ET_HIOS) + { + this->ELFType = cmELF::FileTypeSpecificOS; + break; + } +#endif +#if defined(ET_LOPROC) && defined(ET_HIPROC) + if(eti >= ET_LOPROC && eti <= ET_HIPROC) + { + this->ELFType = cmELF::FileTypeSpecificProc; + break; + } +#endif + cmOStringStream e; + e << "Unknown ELF file type " << eti; + this->SetErrorMessage(e.str().c_str()); + return; + } + } + + // Load the section headers. + this->SectionHeaders.resize(this->ELFHeader.e_shnum); + for(ELF_Half i=0; i < this->ELFHeader.e_shnum; ++i) + { + if(!this->LoadSectionHeader(i)) + { + this->SetErrorMessage("Failed to load section headers."); + return; + } + } +} + +//---------------------------------------------------------------------------- +template +bool cmELFInternalImpl::LoadDynamicSection() +{ + // If there is no dynamic section we are done. + if(this->DynamicSectionIndex < 0) + { + return false; + } + + // If the section was already loaded we are done. + if(!this->DynamicSectionEntries.empty()) + { + return true; + } + + // Allocate the dynamic section entries. + ELF_Shdr const& sec = this->SectionHeaders[this->DynamicSectionIndex]; + int n = static_cast(sec.sh_size / sec.sh_entsize); + this->DynamicSectionEntries.resize(n); + + // Read each entry. + for(int j=0; j < n; ++j) + { + // Seek to the beginning of the section entry. + this->Stream.seekg(sec.sh_offset + sec.sh_entsize*j); + ELF_Dyn& dyn = this->DynamicSectionEntries[j]; + + // Try reading the entry. + if(!this->Read(dyn)) + { + this->SetErrorMessage("Error reading entry from DYNAMIC section."); + this->DynamicSectionIndex = -1; + return false; + } + } + return true; +} + +//---------------------------------------------------------------------------- +template +unsigned int cmELFInternalImpl::GetDynamicEntryCount() +{ + if(!this->LoadDynamicSection()) + { + return 0; + } + for(unsigned int i = 0; i < this->DynamicSectionEntries.size(); ++i) + { + if(this->DynamicSectionEntries[i].d_tag == DT_NULL) + { + return i; + } + } + return static_cast(this->DynamicSectionEntries.size()); +} + +//---------------------------------------------------------------------------- +template +unsigned long cmELFInternalImpl::GetDynamicEntryPosition(int j) +{ + if(!this->LoadDynamicSection()) + { + return 0; + } + if(j < 0 || j >= static_cast(this->DynamicSectionEntries.size())) + { + return 0; + } + ELF_Shdr const& sec = this->SectionHeaders[this->DynamicSectionIndex]; + return static_cast(sec.sh_offset + sec.sh_entsize*j); +} + +//---------------------------------------------------------------------------- +template +cmELF::StringEntry const* +cmELFInternalImpl::GetDynamicSectionString(int tag) +{ + // Short-circuit if already checked. + std::map::iterator dssi = + this->DynamicSectionStrings.find(tag); + if(dssi != this->DynamicSectionStrings.end()) + { + if(dssi->second.Position > 0) + { + return &dssi->second; + } + return 0; + } + + // Create an entry for this tag. Assume it is missing until found. + StringEntry& se = this->DynamicSectionStrings[tag]; + se.Position = 0; + se.Size = 0; + se.IndexInSection = -1; + + // Try reading the dynamic section. + if(!this->LoadDynamicSection()) + { + return 0; + } + + // Get the string table referenced by the DYNAMIC section. + ELF_Shdr const& sec = this->SectionHeaders[this->DynamicSectionIndex]; + if(sec.sh_link >= this->SectionHeaders.size()) + { + this->SetErrorMessage("Section DYNAMIC has invalid string table index."); + return 0; + } + ELF_Shdr const& strtab = this->SectionHeaders[sec.sh_link]; + + // Look for the requested entry. + for(typename std::vector::iterator + di = this->DynamicSectionEntries.begin(); + di != this->DynamicSectionEntries.end(); ++di) + { + ELF_Dyn& dyn = *di; + if(dyn.d_tag == tag) + { + // We found the tag requested. + // Make sure the position given is within the string section. + if(dyn.d_un.d_val >= strtab.sh_size) + { + this->SetErrorMessage("Section DYNAMIC references string beyond " + "the end of its string section."); + return 0; + } + + // Seek to the position reported by the entry. + unsigned long first = static_cast(dyn.d_un.d_val); + unsigned long last = first; + unsigned long end = static_cast(strtab.sh_size); + this->Stream.seekg(strtab.sh_offset + first); + + // Read the string. It may be followed by more than one NULL + // terminator. Count the total size of the region allocated to + // the string. This assumes that the next string in the table + // is non-empty, but the "chrpath" tool makes the same + // assumption. + bool terminated = false; + char c; + while(last != end && this->Stream.get(c) && !(terminated && c)) + { + ++last; + if(c) + { + se.Value += c; + } + else + { + terminated = true; + } + } + + // Make sure the whole value was read. + if(!this->Stream) + { + this->SetErrorMessage("Dynamic section specifies unreadable RPATH."); + se.Value = ""; + return 0; + } + + // The value has been read successfully. Report it. + se.Position = static_cast(strtab.sh_offset + first); + se.Size = last - first; + se.IndexInSection = + static_cast(di - this->DynamicSectionEntries.begin()); + return &se; + } + } + return 0; +} + +//============================================================================ +// External class implementation. + +//---------------------------------------------------------------------------- +cmELF::cmELF(const char* fname): Internal(0) +{ + // Try to open the file. + cmsys::auto_ptr fin(new std::ifstream(fname)); + + // Quit now if the file could not be opened. + if(!fin.get() || !*fin) + { + this->ErrorMessage = "Error opening input file."; + return; + } + + // Read the ELF identification block. + char ident[EI_NIDENT]; + if(!fin->read(ident, EI_NIDENT)) + { + this->ErrorMessage = "Error reading ELF identification."; + return; + } + if(!fin->seekg(0)) + { + this->ErrorMessage = "Error seeking to beginning of file."; + return; + } + + // Verify the ELF identification. + if(!(ident[EI_MAG0] == ELFMAG0 && + ident[EI_MAG1] == ELFMAG1 && + ident[EI_MAG2] == ELFMAG2 && + ident[EI_MAG3] == ELFMAG3)) + { + this->ErrorMessage = "File does not have a valid ELF identification."; + return; + } + + // Check the byte order in which the rest of the file is encoded. + cmELFInternal::ByteOrderType order; + if(ident[EI_DATA] == ELFDATA2LSB) + { + // File is LSB. + order = cmELFInternal::ByteOrderLSB; + } + else if(ident[EI_DATA] == ELFDATA2MSB) + { + // File is MSB. + order = cmELFInternal::ByteOrderMSB; + } + else + { + this->ErrorMessage = "ELF file is not LSB or MSB encoded."; + return; + } + + // Check the class of the file and construct the corresponding + // parser implementation. + if(ident[EI_CLASS] == ELFCLASS32) + { + // 32-bit ELF + this->Internal = new cmELFInternalImpl(this, fin, order); + } + else if(ident[EI_CLASS] == ELFCLASS64) + { + // 64-bit ELF + this->Internal = new cmELFInternalImpl(this, fin, order); + } + else + { + this->ErrorMessage = "ELF file class is not 32-bit or 64-bit."; + return; + } +} + +//---------------------------------------------------------------------------- +cmELF::~cmELF() +{ + delete this->Internal; +} + +//---------------------------------------------------------------------------- +bool cmELF::Valid() const +{ + return this->Internal && this->Internal->GetFileType() != FileTypeInvalid; +} + +//---------------------------------------------------------------------------- +cmELF::FileType cmELF::GetFileType() const +{ + if(this->Valid()) + { + return this->Internal->GetFileType(); + } + else + { + return FileTypeInvalid; + } +} + +//---------------------------------------------------------------------------- +unsigned int cmELF::GetNumberOfSections() const +{ + if(this->Valid()) + { + return this->Internal->GetNumberOfSections(); + } + else + { + return 0; + } +} + +//---------------------------------------------------------------------------- +unsigned int cmELF::GetDynamicEntryCount() const +{ + if(this->Valid()) + { + return this->Internal->GetDynamicEntryCount(); + } + else + { + return 0; + } +} + +//---------------------------------------------------------------------------- +unsigned long cmELF::GetDynamicEntryPosition(int index) const +{ + if(this->Valid()) + { + return this->Internal->GetDynamicEntryPosition(index); + } + else + { + return 0; + } +} + +//---------------------------------------------------------------------------- +bool cmELF::ReadBytes(unsigned long pos, unsigned long size, char* buf) const +{ + if(this->Valid()) + { + return this->Internal->ReadBytes(pos, size, buf); + } + else + { + return false; + } +} + +//---------------------------------------------------------------------------- +bool cmELF::GetSOName(std::string& soname) +{ + if(StringEntry const* se = this->GetSOName()) + { + soname = se->Value; + return true; + } + else + { + return false; + } +} + +//---------------------------------------------------------------------------- +cmELF::StringEntry const* cmELF::GetSOName() +{ + if(this->Valid() && + this->Internal->GetFileType() == cmELF::FileTypeSharedLibrary) + { + return this->Internal->GetSOName(); + } + else + { + return 0; + } +} + +//---------------------------------------------------------------------------- +cmELF::StringEntry const* cmELF::GetRPath() +{ + if(this->Valid() && + (this->Internal->GetFileType() == cmELF::FileTypeExecutable || + this->Internal->GetFileType() == cmELF::FileTypeSharedLibrary)) + { + return this->Internal->GetRPath(); + } + else + { + return 0; + } +} + +//---------------------------------------------------------------------------- +cmELF::StringEntry const* cmELF::GetRunPath() +{ + if(this->Valid() && + (this->Internal->GetFileType() == cmELF::FileTypeExecutable || + this->Internal->GetFileType() == cmELF::FileTypeSharedLibrary)) + { + return this->Internal->GetRunPath(); + } + else + { + return 0; + } +} + +//---------------------------------------------------------------------------- +void cmELF::PrintInfo(std::ostream& os) const +{ + if(this->Valid()) + { + this->Internal->PrintInfo(os); + } + else + { + os << "Not a valid ELF file.\n"; + } +} diff --git a/Source/cmELF.h b/Source/cmELF.h new file mode 100644 index 0000000..ab9be42 --- /dev/null +++ b/Source/cmELF.h @@ -0,0 +1,108 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmELF_h +#define cmELF_h + +#if !defined(CMAKE_USE_ELF_PARSER) +# error "This file may be included only if CMAKE_USE_ELF_PARSER is enabled." +#endif + +class cmELFInternal; + +/** \class cmELF + * \brief Executable and Link Format (ELF) parser. + */ +class cmELF +{ +public: + /** Construct with the name of the ELF input file to parse. */ + cmELF(const char* fname); + + /** Destruct. */ + ~cmELF(); + + /** Get the error message if any. */ + std::string const& GetErrorMessage() const + { + return this->ErrorMessage; + } + + /** Boolean conversion. True if the ELF file is valid. */ + operator bool() const { return this->Valid(); } + + /** Enumeration of ELF file types. */ + enum FileType + { + FileTypeInvalid, + FileTypeRelocatableObject, + FileTypeExecutable, + FileTypeSharedLibrary, + FileTypeCore, + FileTypeSpecificOS, + FileTypeSpecificProc + }; + + /** Represent string table entries. */ + struct StringEntry + { + // The string value itself. + std::string Value; + + // The position in the file at which the string appears. + unsigned long Position; + + // The size of the string table entry. This includes the space + // allocated for one or more null terminators. + unsigned long Size; + + // The index of the section entry referencing the string. + int IndexInSection; + }; + + /** Get the type of the file opened. */ + FileType GetFileType() const; + + /** Get the number of ELF sections present. */ + unsigned int GetNumberOfSections() const; + + /** Get the number of DYNAMIC section entries before the first + DT_NULL. Returns zero on error. */ + unsigned int GetDynamicEntryCount() const; + + /** Get the position of a DYNAMIC section header entry. Returns + zero on error. */ + unsigned long GetDynamicEntryPosition(int index) const; + + /** Read bytes from the file. */ + bool ReadBytes(unsigned long pos, unsigned long size, char* buf) const; + + /** Get the SONAME field if any. */ + bool GetSOName(std::string& soname); + StringEntry const* GetSOName(); + + /** Get the RPATH field if any. */ + StringEntry const* GetRPath(); + + /** Get the RUNPATH field if any. */ + StringEntry const* GetRunPath(); + + /** Print human-readable information about the ELF file. */ + void PrintInfo(std::ostream& os) const; + +private: + friend class cmELFInternal; + bool Valid() const; + cmELFInternal* Internal; + std::string ErrorMessage; +}; + +#endif diff --git a/Source/cmElseCommand.cxx b/Source/cmElseCommand.cxx new file mode 100644 index 0000000..163d006 --- /dev/null +++ b/Source/cmElseCommand.cxx @@ -0,0 +1,21 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmElseCommand.h" + +bool cmElseCommand::InitialPass(std::vector const&, + cmExecutionStatus &) +{ + this->SetError("An ELSE command was found outside of a proper " + "IF ENDIF structure. Or its arguments did not match " + "the opening IF command."); + return false; +} diff --git a/Source/cmElseCommand.h b/Source/cmElseCommand.h new file mode 100644 index 0000000..5e8b790 --- /dev/null +++ b/Source/cmElseCommand.h @@ -0,0 +1,72 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmElseCommand_h +#define cmElseCommand_h + +#include "cmIfCommand.h" + +/** \class cmElseCommand + * \brief ends an if block + * + * cmElseCommand ends an if block + */ +class cmElseCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmElseCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "else";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Starts the else portion of an if block."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " else(expression)\n" + "See the if command."; + } + + cmTypeMacro(cmElseCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmElseIfCommand.cxx b/Source/cmElseIfCommand.cxx new file mode 100644 index 0000000..cd9742b --- /dev/null +++ b/Source/cmElseIfCommand.cxx @@ -0,0 +1,20 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmElseIfCommand.h" + +bool cmElseIfCommand::InitialPass(std::vector const&, + cmExecutionStatus &) +{ + this->SetError("An ELSEIF command was found outside of a proper " + "IF ENDIF structure."); + return false; +} diff --git a/Source/cmElseIfCommand.h b/Source/cmElseIfCommand.h new file mode 100644 index 0000000..20cd81a --- /dev/null +++ b/Source/cmElseIfCommand.h @@ -0,0 +1,72 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmElseIfCommand_h +#define cmElseIfCommand_h + +#include "cmIfCommand.h" + +/** \class cmElseIfCommand + * \brief ends an if block + * + * cmElseIfCommand ends an if block + */ +class cmElseIfCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmElseIfCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "elseif";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Starts the elseif portion of an if block."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " elseif(expression)\n" + "See the if command."; + } + + cmTypeMacro(cmElseIfCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmEnableLanguageCommand.cxx b/Source/cmEnableLanguageCommand.cxx new file mode 100644 index 0000000..f8f36eb --- /dev/null +++ b/Source/cmEnableLanguageCommand.cxx @@ -0,0 +1,43 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmEnableLanguageCommand.h" + +// cmEnableLanguageCommand +bool cmEnableLanguageCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + bool optional = false; + std::vector languages; + if(args.size() < 1 ) + { + this->SetError + ("called with incorrect number of arguments"); + return false; + } + for (std::vector::const_iterator it = args.begin(); + it != args.end(); + ++it) + { + if ((*it) == "OPTIONAL") + { + optional = true; + } + else + { + languages.push_back(*it); + } + } + + this->Makefile->EnableLanguage(languages, optional); + return true; +} + diff --git a/Source/cmEnableLanguageCommand.h b/Source/cmEnableLanguageCommand.h new file mode 100644 index 0000000..5958e44 --- /dev/null +++ b/Source/cmEnableLanguageCommand.h @@ -0,0 +1,76 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmEnableLanguageCommand_h +#define cmEnableLanguageCommand_h + +#include "cmCommand.h" + +/** \class cmEnableLanguageCommand + * \brief Specify the name for this build project. + * + * cmEnableLanguageCommand is used to specify a name for this build project. + * It is defined once per set of CMakeList.txt files (including + * all subdirectories). Currently it just sets the name of the workspace + * file for Microsoft Visual C++ + */ +class cmEnableLanguageCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmEnableLanguageCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const {return "enable_language";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Enable a language (CXX/C/Fortran/etc)"; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " enable_language(languageName [OPTIONAL] )\n" + "This command enables support for the named language in CMake. " + "This is the same as the project command but does not create " + "any of the extra variables that are created by the project command. " + "Example languages are CXX, C, Fortran. " + "If OPTIONAL is used, use the CMAKE__COMPILER_WORKS " + "variable to check whether the language has been enabled successfully."; + } + + cmTypeMacro(cmEnableLanguageCommand, cmCommand); +}; + + + +#endif diff --git a/Source/cmEnableTestingCommand.cxx b/Source/cmEnableTestingCommand.cxx new file mode 100644 index 0000000..5abb873 --- /dev/null +++ b/Source/cmEnableTestingCommand.cxx @@ -0,0 +1,22 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmEnableTestingCommand.h" +#include "cmLocalGenerator.h" + +// we do this in the final pass so that we now the subdirs have all +// been defined +bool cmEnableTestingCommand::InitialPass(std::vector const&, + cmExecutionStatus &) +{ + this->Makefile->AddDefinition("CMAKE_TESTING_ENABLED","1"); + return true; +} diff --git a/Source/cmEnableTestingCommand.h b/Source/cmEnableTestingCommand.h new file mode 100644 index 0000000..b607818 --- /dev/null +++ b/Source/cmEnableTestingCommand.h @@ -0,0 +1,79 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmEnableTestingCommand_h +#define cmEnableTestingCommand_h + +#include "cmCommand.h" + +/** \class cmEnableTestingCommand + * \brief Enable testing for this directory and below. + * + * Produce the output testfile. This produces a file in the build directory + * called CMakeTestfile with a syntax similar to CMakeLists.txt. It contains + * the SUBDIRS() and ADD_TEST() commands from the source CMakeLists.txt + * file with CMake variables expanded. Only the subdirs and tests + * within the valid control structures are replicated in Testfile + * (i.e. SUBDIRS() and ADD_TEST() commands within IF() commands that are + * not entered by CMake are not replicated in Testfile). + * Note that CTest expects to find this file in the build directory root; + * therefore, this command should be in the source directory root too. + */ +class cmEnableTestingCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmEnableTestingCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const&, + cmExecutionStatus &); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "enable_testing";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Enable testing for current directory and below."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " enable_testing()\n" + "Enables testing for this directory and below. " + "See also the add_test command. Note that ctest expects to find " + "a test file in the build directory root. Therefore, this command " + "should be in the source directory root."; + } + + cmTypeMacro(cmEnableTestingCommand, cmCommand); + +}; + + +#endif diff --git a/Source/cmEndForEachCommand.cxx b/Source/cmEndForEachCommand.cxx new file mode 100644 index 0000000..2eca4e2 --- /dev/null +++ b/Source/cmEndForEachCommand.cxx @@ -0,0 +1,23 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmEndForEachCommand.h" + +bool cmEndForEachCommand +::InvokeInitialPass(std::vector const&, + cmExecutionStatus &) +{ + this->SetError("An ENDFOREACH command was found outside of a proper " + "FOREACH ENDFOREACH structure. Or its arguments did " + "not match the opening FOREACH command."); + return false; +} + diff --git a/Source/cmEndForEachCommand.h b/Source/cmEndForEachCommand.h new file mode 100644 index 0000000..37b2d2a --- /dev/null +++ b/Source/cmEndForEachCommand.h @@ -0,0 +1,79 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmEndForEachCommand_h +#define cmEndForEachCommand_h + +#include "cmCommand.h" + +/** \class cmEndForEachCommand + * \brief ends an if block + * + * cmEndForEachCommand ends an if block + */ +class cmEndForEachCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmEndForEachCommand; + } + + /** + * Override cmCommand::InvokeInitialPass to get arguments before + * expansion. + */ + virtual bool InvokeInitialPass(std::vector const&, + cmExecutionStatus &); + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const&, + cmExecutionStatus &) {return false;} + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "endforeach";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Ends a list of commands in a FOREACH block."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " endforeach(expression)\n" + "See the FOREACH command."; + } + + cmTypeMacro(cmEndForEachCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmEndFunctionCommand.cxx b/Source/cmEndFunctionCommand.cxx new file mode 100644 index 0000000..04b242d --- /dev/null +++ b/Source/cmEndFunctionCommand.cxx @@ -0,0 +1,23 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmEndFunctionCommand.h" + +bool cmEndFunctionCommand +::InvokeInitialPass(std::vector const&, + cmExecutionStatus &) +{ + this->SetError("An ENDFUNCTION command was found outside of a proper " + "FUNCTION ENDFUNCTION structure. Or its arguments did not " + "match the opening FUNCTION command."); + return false; +} + diff --git a/Source/cmEndFunctionCommand.h b/Source/cmEndFunctionCommand.h new file mode 100644 index 0000000..54ac068 --- /dev/null +++ b/Source/cmEndFunctionCommand.h @@ -0,0 +1,79 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmEndFunctionCommand_h +#define cmEndFunctionCommand_h + +#include "cmCommand.h" + +/** \class cmEndFunctionCommand + * \brief ends an if block + * + * cmEndFunctionCommand ends an if block + */ +class cmEndFunctionCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmEndFunctionCommand; + } + + /** + * Override cmCommand::InvokeInitialPass to get arguments before + * expansion. + */ + virtual bool InvokeInitialPass(std::vector const&, + cmExecutionStatus &); + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const&, + cmExecutionStatus &) {return false;} + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "endfunction";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Ends a list of commands in a function block."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " endfunction(expression)\n" + "See the function command."; + } + + cmTypeMacro(cmEndFunctionCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmEndIfCommand.cxx b/Source/cmEndIfCommand.cxx new file mode 100644 index 0000000..e98d4d4 --- /dev/null +++ b/Source/cmEndIfCommand.cxx @@ -0,0 +1,29 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmEndIfCommand.h" +#include // required for atof +bool cmEndIfCommand::InitialPass(std::vector const&, + cmExecutionStatus &) +{ + const char* versionValue + = this->Makefile->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION"); + if (!versionValue || (atof(versionValue) <= 1.4)) + { + return true; + } + + this->SetError("An ENDIF command was found outside of a proper " + "IF ENDIF structure. Or its arguments did not match " + "the opening IF command."); + return false; +} + diff --git a/Source/cmEndIfCommand.h b/Source/cmEndIfCommand.h new file mode 100644 index 0000000..81d1b5f --- /dev/null +++ b/Source/cmEndIfCommand.h @@ -0,0 +1,72 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmEndIfCommand_h +#define cmEndIfCommand_h + +#include "cmIfCommand.h" + +/** \class cmEndIfCommand + * \brief ends an if block + * + * cmEndIfCommand ends an if block + */ +class cmEndIfCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmEndIfCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "endif";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Ends a list of commands in an if block."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " endif(expression)\n" + "See the if command."; + } + + cmTypeMacro(cmEndIfCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmEndMacroCommand.cxx b/Source/cmEndMacroCommand.cxx new file mode 100644 index 0000000..86d907b --- /dev/null +++ b/Source/cmEndMacroCommand.cxx @@ -0,0 +1,23 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmEndMacroCommand.h" + +bool cmEndMacroCommand +::InvokeInitialPass(std::vector const&, + cmExecutionStatus &) +{ + this->SetError("An ENDMACRO command was found outside of a proper " + "MACRO ENDMACRO structure. Or its arguments did not " + "match the opening MACRO command."); + return false; +} + diff --git a/Source/cmEndMacroCommand.h b/Source/cmEndMacroCommand.h new file mode 100644 index 0000000..25e86b7 --- /dev/null +++ b/Source/cmEndMacroCommand.h @@ -0,0 +1,79 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmEndMacroCommand_h +#define cmEndMacroCommand_h + +#include "cmCommand.h" + +/** \class cmEndMacroCommand + * \brief ends an if block + * + * cmEndMacroCommand ends an if block + */ +class cmEndMacroCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmEndMacroCommand; + } + + /** + * Override cmCommand::InvokeInitialPass to get arguments before + * expansion. + */ + virtual bool InvokeInitialPass(std::vector const&, + cmExecutionStatus &); + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const&, + cmExecutionStatus &) {return false;} + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "endmacro";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Ends a list of commands in a macro block."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " endmacro(expression)\n" + "See the macro command."; + } + + cmTypeMacro(cmEndMacroCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmEndWhileCommand.cxx b/Source/cmEndWhileCommand.cxx new file mode 100644 index 0000000..abb9e5e --- /dev/null +++ b/Source/cmEndWhileCommand.cxx @@ -0,0 +1,32 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmEndWhileCommand.h" + +bool cmEndWhileCommand +::InvokeInitialPass(std::vector const& args, + cmExecutionStatus &) +{ + 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 new file mode 100644 index 0000000..635ad5a --- /dev/null +++ b/Source/cmEndWhileCommand.h @@ -0,0 +1,79 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmEndWhileCommand_h +#define cmEndWhileCommand_h + +#include "cmCommand.h" + +/** \class cmEndWhileCommand + * \brief ends a while loop + * + * cmEndWhileCommand ends a while loop + */ +class cmEndWhileCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmEndWhileCommand; + } + + /** + * Override cmCommand::InvokeInitialPass to get arguments before + * expansion. + */ + virtual bool InvokeInitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const&, + cmExecutionStatus &) {return false;} + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "endwhile";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Ends a list of commands in a while block."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " endwhile(expression)\n" + "See the while command."; + } + + cmTypeMacro(cmEndWhileCommand, cmCommand); +}; + + +#endif diff --git a/Source/cmExecProgramCommand.cxx b/Source/cmExecProgramCommand.cxx new file mode 100644 index 0000000..61b27ea --- /dev/null +++ b/Source/cmExecProgramCommand.cxx @@ -0,0 +1,145 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmExecProgramCommand.h" +#include "cmSystemTools.h" + +// cmExecProgramCommand +bool cmExecProgramCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + std::string arguments; + bool doingargs = false; + int count = 0; + std::string output_variable; + bool haveoutput_variable = false; + std::string return_variable; + bool havereturn_variable = false; + for(size_t i=0; i < args.size(); ++i) + { + if(args[i] == "OUTPUT_VARIABLE") + { + count++; + doingargs = false; + havereturn_variable = false; + haveoutput_variable = true; + } + else if ( haveoutput_variable ) + { + if ( output_variable.size() > 0 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + output_variable = args[i]; + haveoutput_variable = false; + count ++; + } + else if(args[i] == "RETURN_VALUE") + { + count++; + doingargs = false; + haveoutput_variable = false; + havereturn_variable = true; + } + else if ( havereturn_variable ) + { + if ( return_variable.size() > 0 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + return_variable = args[i]; + havereturn_variable = false; + count ++; + } + else if(args[i] == "ARGS") + { + count++; + havereturn_variable = false; + haveoutput_variable = false; + doingargs = true; + } + else if(doingargs) + { + arguments += args[i]; + arguments += " "; + count++; + } + } + + std::string command; + if(arguments.size()) + { + command = cmSystemTools::ConvertToRunCommandPath(args[0].c_str()); + command += " "; + command += arguments; + } + else + { + command = args[0]; + } + bool verbose = true; + if(output_variable.size() > 0) + { + verbose = false; + } + int retVal = 0; + std::string output; + bool result = true; + if(args.size() - count == 2) + { + cmSystemTools::MakeDirectory(args[1].c_str()); + result = cmSystemTools::RunCommand(command.c_str(), output, retVal, + args[1].c_str(), verbose); + } + else + { + result = cmSystemTools::RunCommand(command.c_str(), output, + retVal, 0, verbose); + } + if(!result) + { + retVal = -1; + } + + if ( output_variable.size() > 0 ) + { + std::string::size_type first = output.find_first_not_of(" \n\t\r"); + std::string::size_type last = output.find_last_not_of(" \n\t\r"); + if(first == std::string::npos) + { + first = 0; + } + if(last == std::string::npos) + { + last = output.size()-1; + } + + std::string coutput = std::string(output, first, last-first+1); + this->Makefile->AddDefinition(output_variable.c_str(), coutput.c_str()); + } + + if ( return_variable.size() > 0 ) + { + char buffer[100]; + sprintf(buffer, "%d", retVal); + this->Makefile->AddDefinition(return_variable.c_str(), buffer); + } + + return true; +} + diff --git a/Source/cmExecProgramCommand.h b/Source/cmExecProgramCommand.h new file mode 100644 index 0000000..7233860 --- /dev/null +++ b/Source/cmExecProgramCommand.h @@ -0,0 +1,95 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExecProgramCommand_h +#define cmExecProgramCommand_h + +#include "cmCommand.h" + +/** \class cmExecProgramCommand + * \brief Command that adds a target to the build system. + * + * cmExecProgramCommand adds an extra target to the build system. + * This is useful when you would like to add special + * targets like "install,", "clean," and so on. + */ +class cmExecProgramCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmExecProgramCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const + {return "exec_program";} + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return + "Deprecated. Use the execute_process() command instead."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + "Run an executable program during the processing of the CMakeList.txt" + " file.\n" + " exec_program(Executable [directory in which to run]\n" + " [ARGS ]\n" + " [OUTPUT_VARIABLE ]\n" + " [RETURN_VALUE ])\n" + "The executable is run in the optionally specified directory. The " + "executable can include arguments if it is double quoted, but it is " + "better to use the optional ARGS argument to specify arguments to the " + "program. This is because cmake will then be able to escape spaces " + "in the executable path. An optional argument OUTPUT_VARIABLE " + "specifies a variable in which to store the output. " + "To capture the return value of the execution, provide a RETURN_VALUE. " + "If OUTPUT_VARIABLE is specified, then no output will go to the " + "stdout/stderr of the console running cmake.\n" + ; + } + + /** This command is kept for compatibility with older CMake versions. */ + virtual bool IsDiscouraged() const + { + return true; + } + + cmTypeMacro(cmExecProgramCommand, cmCommand); +}; + +#endif diff --git a/Source/cmExecuteProcessCommand.cxx b/Source/cmExecuteProcessCommand.cxx new file mode 100644 index 0000000..a0d9c9c --- /dev/null +++ b/Source/cmExecuteProcessCommand.cxx @@ -0,0 +1,422 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmExecuteProcessCommand.h" +#include "cmSystemTools.h" + +#include + +#include /* isspace */ + +static bool cmExecuteProcessCommandIsWhitespace(char c) +{ + return (isspace((int)c) || c == '\n' || c == '\r'); +} + +void cmExecuteProcessCommandFixText(std::vector& output, + bool strip_trailing_whitespace); +void cmExecuteProcessCommandAppend(std::vector& output, + const char* data, int length); + +// cmExecuteProcessCommand +bool cmExecuteProcessCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + std::vector< std::vector > cmds; + std::string arguments; + bool doing_command = false; + size_t command_index = 0; + bool output_quiet = false; + bool error_quiet = false; + bool output_strip_trailing_whitespace = false; + bool error_strip_trailing_whitespace = false; + std::string timeout_string; + std::string input_file; + std::string output_file; + std::string error_file; + std::string output_variable; + std::string error_variable; + std::string result_variable; + std::string working_directory; + for(size_t i=0; i < args.size(); ++i) + { + if(args[i] == "COMMAND") + { + doing_command = true; + command_index = cmds.size(); + cmds.push_back(std::vector()); + } + else if(args[i] == "OUTPUT_VARIABLE") + { + doing_command = false; + if(++i < args.size()) + { + output_variable = args[i]; + } + else + { + this->SetError(" called with no value for OUTPUT_VARIABLE."); + return false; + } + } + else if(args[i] == "ERROR_VARIABLE") + { + doing_command = false; + if(++i < args.size()) + { + error_variable = args[i]; + } + else + { + this->SetError(" called with no value for ERROR_VARIABLE."); + return false; + } + } + else if(args[i] == "RESULT_VARIABLE") + { + doing_command = false; + if(++i < args.size()) + { + result_variable = args[i]; + } + else + { + this->SetError(" called with no value for RESULT_VARIABLE."); + return false; + } + } + else if(args[i] == "WORKING_DIRECTORY") + { + doing_command = false; + if(++i < args.size()) + { + working_directory = args[i]; + } + else + { + this->SetError(" called with no value for WORKING_DIRECTORY."); + return false; + } + } + else if(args[i] == "INPUT_FILE") + { + doing_command = false; + if(++i < args.size()) + { + input_file = args[i]; + } + else + { + this->SetError(" called with no value for INPUT_FILE."); + return false; + } + } + else if(args[i] == "OUTPUT_FILE") + { + doing_command = false; + if(++i < args.size()) + { + output_file = args[i]; + } + else + { + this->SetError(" called with no value for OUTPUT_FILE."); + return false; + } + } + else if(args[i] == "ERROR_FILE") + { + doing_command = false; + if(++i < args.size()) + { + error_file = args[i]; + } + else + { + this->SetError(" called with no value for ERROR_FILE."); + return false; + } + } + else if(args[i] == "TIMEOUT") + { + doing_command = false; + if(++i < args.size()) + { + timeout_string = args[i]; + } + else + { + this->SetError(" called with no value for TIMEOUT."); + return false; + } + } + else if(args[i] == "OUTPUT_QUIET") + { + doing_command = false; + output_quiet = true; + } + else if(args[i] == "ERROR_QUIET") + { + doing_command = false; + error_quiet = true; + } + else if(args[i] == "OUTPUT_STRIP_TRAILING_WHITESPACE") + { + doing_command = false; + output_strip_trailing_whitespace = true; + } + else if(args[i] == "ERROR_STRIP_TRAILING_WHITESPACE") + { + doing_command = false; + error_strip_trailing_whitespace = true; + } + else if(doing_command) + { + cmds[command_index].push_back(args[i].c_str()); + } + else + { + cmOStringStream e; + e << " given unknown argument \"" << args[i] << "\"."; + this->SetError(e.str().c_str()); + return false; + } + } + + if ( !this->Makefile->CanIWriteThisFile(output_file.c_str()) ) + { + std::string e = "attempted to output into a file: " + output_file + + " into a source directory."; + this->SetError(e.c_str()); + cmSystemTools::SetFatalErrorOccured(); + return false; + } + + // Check for commands given. + if(cmds.empty()) + { + this->SetError(" called with no COMMAND argument."); + return false; + } + for(unsigned int i=0; i < cmds.size(); ++i) + { + if(cmds[i].empty()) + { + this->SetError(" given COMMAND argument with no value."); + return false; + } + else + { + // Add the null terminating pointer to the command argument list. + cmds[i].push_back(0); + } + } + + // Parse the timeout string. + double timeout = -1; + if(!timeout_string.empty()) + { + if(sscanf(timeout_string.c_str(), "%lg", &timeout) != 1) + { + this->SetError(" called with TIMEOUT value that could not be parsed."); + return false; + } + } + + // Create a process instance. + cmsysProcess* cp = cmsysProcess_New(); + + // Set the command sequence. + for(unsigned int i=0; i < cmds.size(); ++i) + { + cmsysProcess_AddCommand(cp, &*cmds[i].begin()); + } + + // Set the process working directory. + if(!working_directory.empty()) + { + cmsysProcess_SetWorkingDirectory(cp, working_directory.c_str()); + } + + // Always hide the process window. + cmsysProcess_SetOption(cp, cmsysProcess_Option_HideWindow, 1); + + // Check the output variables. + bool merge_output = (output_variable == error_variable); + if(error_variable.empty() && !error_quiet) + { + cmsysProcess_SetPipeShared(cp, cmsysProcess_Pipe_STDERR, 1); + } + if(!input_file.empty()) + { + cmsysProcess_SetPipeFile(cp, cmsysProcess_Pipe_STDIN, input_file.c_str()); + } + if(!output_file.empty()) + { + cmsysProcess_SetPipeFile(cp, cmsysProcess_Pipe_STDOUT, + output_file.c_str()); + } + if(!error_file.empty()) + { + cmsysProcess_SetPipeFile(cp, cmsysProcess_Pipe_STDERR, + error_file.c_str()); + } + + // Set the timeout if any. + if(timeout >= 0) + { + cmsysProcess_SetTimeout(cp, timeout); + } + + // Start the process. + cmsysProcess_Execute(cp); + + // Read the process output. + std::vector tempOutput; + std::vector tempError; + int length; + char* data; + int p; + while((p = cmsysProcess_WaitForData(cp, &data, &length, 0), p)) + { + // Put the output in the right place. + if((p == cmsysProcess_Pipe_STDOUT && !output_quiet) || + (p == cmsysProcess_Pipe_STDERR && !error_quiet && merge_output)) + { + if(output_variable.empty()) + { + cmSystemTools::Stdout(data, length); + } + else + { + cmExecuteProcessCommandAppend(tempOutput, data, length); + } + } + else if(p == cmsysProcess_Pipe_STDERR && !error_quiet) + { + if(!error_variable.empty()) + { + cmExecuteProcessCommandAppend(tempError, data, length); + } + } + } + + // All output has been read. Wait for the process to exit. + cmsysProcess_WaitForExit(cp, 0); + + // Fix the text in the output strings. + cmExecuteProcessCommandFixText(tempOutput, + output_strip_trailing_whitespace); + cmExecuteProcessCommandFixText(tempError, + error_strip_trailing_whitespace); + + // Store the output obtained. + if(!output_variable.empty() && tempOutput.size()) + { + this->Makefile->AddDefinition(output_variable.c_str(), + &*tempOutput.begin()); + } + if(!merge_output && !error_variable.empty() && tempError.size()) + { + this->Makefile->AddDefinition(error_variable.c_str(), + &*tempError.begin()); + } + + // Store the result of running the process. + if(!result_variable.empty()) + { + switch(cmsysProcess_GetState(cp)) + { + case cmsysProcess_State_Exited: + { + int v = cmsysProcess_GetExitValue(cp); + char buf[100]; + sprintf(buf, "%d", v); + this->Makefile->AddDefinition(result_variable.c_str(), buf); + } + break; + case cmsysProcess_State_Exception: + this->Makefile->AddDefinition(result_variable.c_str(), + cmsysProcess_GetExceptionString(cp)); + break; + case cmsysProcess_State_Error: + this->Makefile->AddDefinition(result_variable.c_str(), + cmsysProcess_GetErrorString(cp)); + break; + case cmsysProcess_State_Expired: + this->Makefile->AddDefinition(result_variable.c_str(), + "Process terminated due to timeout"); + break; + } + } + + // Delete the process instance. + cmsysProcess_Delete(cp); + + return true; +} + +//---------------------------------------------------------------------------- +void cmExecuteProcessCommandFixText(std::vector& output, + bool strip_trailing_whitespace) +{ + // Remove \0 characters and the \r part of \r\n pairs. + unsigned int in_index = 0; + unsigned int out_index = 0; + while(in_index < output.size()) + { + char c = output[in_index++]; + if((c != '\r' || !(in_index < output.size() && output[in_index] == '\n')) + && c != '\0') + { + output[out_index++] = c; + } + } + + // Remove trailing whitespace if requested. + if(strip_trailing_whitespace) + { + while(out_index > 0 && + cmExecuteProcessCommandIsWhitespace(output[out_index-1])) + { + --out_index; + } + } + + // Shrink the vector to the size needed. + output.resize(out_index); + + // Put a terminator on the text string. + output.push_back('\0'); +} + +//---------------------------------------------------------------------------- +void cmExecuteProcessCommandAppend(std::vector& output, + const char* data, int length) +{ +#if defined(__APPLE__) + // HACK on Apple to work around bug with inserting at the + // end of an empty vector. This resulted in random failures + // that were hard to reproduce. + if(output.empty() && length > 0) + { + output.push_back(data[0]); + ++data; + --length; + } +#endif + output.insert(output.end(), data, data+length); +} diff --git a/Source/cmExecuteProcessCommand.h b/Source/cmExecuteProcessCommand.h new file mode 100644 index 0000000..0e20a4b --- /dev/null +++ b/Source/cmExecuteProcessCommand.h @@ -0,0 +1,113 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExecuteProcessCommand_h +#define cmExecuteProcessCommand_h + +#include "cmCommand.h" + +/** \class cmExecuteProcessCommand + * \brief Command that adds a target to the build system. + * + * cmExecuteProcessCommand is a CMake language interface to the KWSys + * Process Execution implementation. + */ +class cmExecuteProcessCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmExecuteProcessCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const + {return "execute_process";} + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Execute one or more child processes."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " execute_process(COMMAND [args1...]]\n" + " [COMMAND [args2...] [...]]\n" + " [WORKING_DIRECTORY ]\n" + " [TIMEOUT ]\n" + " [RESULT_VARIABLE ]\n" + " [OUTPUT_VARIABLE ]\n" + " [ERROR_VARIABLE ]\n" + " [INPUT_FILE ]\n" + " [OUTPUT_FILE ]\n" + " [ERROR_FILE ]\n" + " [OUTPUT_QUIET]\n" + " [ERROR_QUIET]\n" + " [OUTPUT_STRIP_TRAILING_WHITESPACE]\n" + " [ERROR_STRIP_TRAILING_WHITESPACE])\n" + "Runs the given sequence of one or more commands with the standard " + "output of each process piped to the standard input of the next. " + "A single standard error pipe is used for all processes. " + "If WORKING_DIRECTORY is given the named directory will be set as " + "the current working directory of the child processes. " + "If TIMEOUT is given the child processes will be terminated if they " + "do not finish in the specified number of seconds " + "(fractions are allowed). " + "If RESULT_VARIABLE is given the variable will be set to contain " + "the result of running the processes. This will be an integer return " + "code from the last child or a string describing an error condition. " + "If OUTPUT_VARIABLE or ERROR_VARIABLE are given the variable named " + "will be set with the contents of the standard output and standard " + "error pipes respectively. If the same variable is named for both " + "pipes their output will be merged in the order produced. " + "If INPUT_FILE, OUTPUT_FILE, or ERROR_FILE is given the file named " + "will be attached to the standard input of the first process, " + "standard output of the last process, or standard error of all " + "processes respectively. " + "If OUTPUT_QUIET or ERROR_QUIET is given then the standard output " + "or standard error results will be quietly ignored. " + "If more than one OUTPUT_* or ERROR_* option is given for the same " + "pipe the precedence is not specified. " + "If no OUTPUT_* or ERROR_* options are given the output will be shared " + "with the corresponding pipes of the CMake process itself.\n" + "The execute_process command is a newer more powerful version of " + "exec_program, but the old command has been kept for compatibility." + ; + } + + cmTypeMacro(cmExecuteProcessCommand, cmCommand); +}; + +#endif diff --git a/Source/cmExecutionStatus.h b/Source/cmExecutionStatus.h new file mode 100644 index 0000000..9fbecac --- /dev/null +++ b/Source/cmExecutionStatus.h @@ -0,0 +1,55 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExecutionStatus_h +#define cmExecutionStatus_h + +#include "cmObject.h" + +/** \class cmExecutionStatus + * \brief Superclass for all command status classes + * + * when a command is involked it may set values on a command status instance + */ +class cmExecutionStatus : public cmObject +{ +public: + cmTypeMacro(cmExecutionStatus, cmObject); + + cmExecutionStatus() { this->Clear();}; + + virtual void SetReturnInvoked(bool val) + { this->ReturnInvoked = val; } + virtual bool GetReturnInvoked() + { return this->ReturnInvoked; } + + virtual void SetBreakInvoked(bool val) + { this->BreakInvoked = val; } + virtual bool GetBreakInvoked() + { return this->BreakInvoked; } + + virtual void Clear() + { + this->ReturnInvoked = false; + this->BreakInvoked = false; + this->NestedError = false; + } + virtual void SetNestedError(bool val) { this->NestedError = val; } + virtual bool GetNestedError() { return this->NestedError; } + + +protected: + bool ReturnInvoked; + bool BreakInvoked; + bool NestedError; +}; + +#endif diff --git a/Source/cmExportBuildFileGenerator.cxx b/Source/cmExportBuildFileGenerator.cxx new file mode 100644 index 0000000..32595ee --- /dev/null +++ b/Source/cmExportBuildFileGenerator.cxx @@ -0,0 +1,152 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmExportBuildFileGenerator.h" + +#include "cmExportCommand.h" + +//---------------------------------------------------------------------------- +cmExportBuildFileGenerator::cmExportBuildFileGenerator() +{ + this->ExportCommand = 0; +} + +//---------------------------------------------------------------------------- +bool cmExportBuildFileGenerator::GenerateMainFile(std::ostream& os) +{ + // Create all the imported targets. + for(std::vector::const_iterator + tei = this->Exports->begin(); + tei != this->Exports->end(); ++tei) + { + cmTarget* te = *tei; + if(this->ExportedTargets.insert(te).second) + { + this->GenerateImportTargetCode(os, te); + } + else + { + if(this->ExportCommand && this->ExportCommand->ErrorMessage.empty()) + { + cmOStringStream e; + e << "given target \"" << te->GetName() << "\" more than once."; + this->ExportCommand->ErrorMessage = e.str(); + } + return false; + } + } + + // Generate import file content for each configuration. + for(std::vector::const_iterator + ci = this->Configurations.begin(); + ci != this->Configurations.end(); ++ci) + { + this->GenerateImportConfig(os, ci->c_str()); + } + + return true; +} + +//---------------------------------------------------------------------------- +void +cmExportBuildFileGenerator +::GenerateImportTargetsConfig(std::ostream& os, + const char* config, std::string const& suffix) +{ + for(std::vector::const_iterator + tei = this->Exports->begin(); + tei != this->Exports->end(); ++tei) + { + // Collect import properties for this target. + cmTarget* target = *tei; + ImportPropertyMap properties; + this->SetImportLocationProperty(config, suffix, target, properties); + if(!properties.empty()) + { + // Get the rest of the target details. + this->SetImportDetailProperties(config, suffix, + target, properties); + + // TOOD: PUBLIC_HEADER_LOCATION + // This should wait until the build feature propagation stuff + // is done. Then this can be a propagated include directory. + // this->GenerateImportProperty(config, te->HeaderGenerator, + // properties); + + // Generate code in the export file. + this->GenerateImportPropertyCode(os, config, target, properties); + } + } +} + +//---------------------------------------------------------------------------- +void +cmExportBuildFileGenerator +::SetImportLocationProperty(const char* config, std::string const& suffix, + cmTarget* target, ImportPropertyMap& properties) +{ + // Get the makefile in which to lookup target information. + cmMakefile* mf = target->GetMakefile(); + + // Add the main target file. + { + std::string prop = "IMPORTED_LOCATION"; + prop += suffix; + std::string value; + if(target->IsFrameworkOnApple() || target->IsAppBundleOnApple()) + { + value = target->GetFullPath(config, false); + } + else + { + value = target->GetFullPath(config, false, true); + } + properties[prop] = value; + } + + // Check whether this is a DLL platform. + bool dll_platform = + (mf->IsOn("WIN32") || mf->IsOn("CYGWIN") || mf->IsOn("MINGW")); + + // Add the import library for windows DLLs. + if(dll_platform && + (target->GetType() == cmTarget::SHARED_LIBRARY || + target->IsExecutableWithExports()) && + mf->GetDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX")) + { + std::string prop = "IMPORTED_IMPLIB"; + prop += suffix; + std::string value = target->GetFullPath(config, true); + target->GetImplibGNUtoMS(value, value, + "${CMAKE_IMPORT_LIBRARY_SUFFIX}"); + properties[prop] = value; + } +} + +//---------------------------------------------------------------------------- +void +cmExportBuildFileGenerator +::ComplainAboutMissingTarget(cmTarget* depender, + cmTarget* dependee) +{ + if(!this->ExportCommand || !this->ExportCommand->ErrorMessage.empty()) + { + return; + } + + cmOStringStream e; + e << "called with target \"" << depender->GetName() + << "\" which requires target \"" << dependee->GetName() + << "\" that is not in the export list.\n" + << "If the required target is not easy to reference in this call, " + << "consider using the APPEND option with multiple separate calls."; + this->ExportCommand->ErrorMessage = e.str(); +} diff --git a/Source/cmExportBuildFileGenerator.h b/Source/cmExportBuildFileGenerator.h new file mode 100644 index 0000000..0f37626 --- /dev/null +++ b/Source/cmExportBuildFileGenerator.h @@ -0,0 +1,61 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExportBuildFileGenerator_h +#define cmExportBuildFileGenerator_h + +#include "cmExportFileGenerator.h" + +class cmExportCommand; + +/** \class cmExportBuildFileGenerator + * \brief Generate a file exporting targets from a build tree. + * + * cmExportBuildFileGenerator generates a file exporting targets from + * a build tree. A single file exports information for all + * configurations built. + * + * This is used to implement the EXPORT() command. + */ +class cmExportBuildFileGenerator: public cmExportFileGenerator +{ +public: + cmExportBuildFileGenerator(); + + /** Set the list of targets to export. */ + void SetExports(std::vector const* exports) + { this->Exports = exports; } + + /** Set whether to append generated code to the output file. */ + void SetAppendMode(bool append) { this->AppendMode = append; } + + /** Set the command instance through which errors should be reported. */ + void SetCommand(cmExportCommand* cmd) { this->ExportCommand = cmd; } +protected: + // Implement virtual methods from the superclass. + virtual bool GenerateMainFile(std::ostream& os); + virtual void GenerateImportTargetsConfig(std::ostream& os, + const char* config, + std::string const& suffix); + virtual void ComplainAboutMissingTarget(cmTarget* depender, + cmTarget* dependee); + + /** Fill in properties indicating built file locations. */ + void SetImportLocationProperty(const char* config, + std::string const& suffix, + cmTarget* target, + ImportPropertyMap& properties); + + std::vector const* Exports; + cmExportCommand* ExportCommand; +}; + +#endif diff --git a/Source/cmExportCommand.cxx b/Source/cmExportCommand.cxx new file mode 100644 index 0000000..1cc1754 --- /dev/null +++ b/Source/cmExportCommand.cxx @@ -0,0 +1,347 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmExportCommand.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmGeneratedFileStream.h" +#include "cmake.h" + +#include + +#include "cmExportBuildFileGenerator.h" + +#if defined(__HAIKU__) +#include +#endif + +cmExportCommand::cmExportCommand() +:cmCommand() +,ArgumentGroup() +,Targets(&Helper, "TARGETS") +,Append(&Helper, "APPEND", &ArgumentGroup) +,Namespace(&Helper, "NAMESPACE", &ArgumentGroup) +,Filename(&Helper, "FILE", &ArgumentGroup) +{ + // at first TARGETS + this->Targets.Follows(0); + // and after that the other options in any order + this->ArgumentGroup.Follows(&this->Targets); +} + + +// cmExportCommand +bool cmExportCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 2 ) + { + this->SetError("called with too few arguments"); + return false; + } + + if(args[0] == "PACKAGE") + { + return this->HandlePackage(args); + } + + std::vector unknownArgs; + this->Helper.Parse(&args, &unknownArgs); + + if (!unknownArgs.empty()) + { + this->SetError("Unknown arguments."); + return false; + } + + if (this->Targets.WasFound() == false) + { + this->SetError("TARGETS option missing."); + return false; + } + + if(!this->Filename.WasFound()) + { + this->SetError("FILE option missing."); + return false; + } + + // Make sure the file has a .cmake extension. + if(cmSystemTools::GetFilenameLastExtension(this->Filename.GetCString()) + != ".cmake") + { + cmOStringStream e; + e << "FILE option given filename \"" << this->Filename.GetString() + << "\" which does not have an extension of \".cmake\".\n"; + this->SetError(e.str().c_str()); + return false; + } + + // Get the file to write. + std::string fname = this->Filename.GetString(); + if(cmSystemTools::FileIsFullPath(fname.c_str())) + { + if(!this->Makefile->CanIWriteThisFile(fname.c_str())) + { + cmOStringStream e; + e << "FILE option given filename \"" << fname + << "\" which is in the source tree.\n"; + this->SetError(e.str().c_str()); + return false; + } + } + else + { + // Interpret relative paths with respect to the current build dir. + fname = this->Makefile->GetCurrentOutputDirectory(); + fname += "/"; + fname += this->Filename.GetString(); + } + + // Collect the targets to be exported. + std::vector targets; + for(std::vector::const_iterator + currentTarget = this->Targets.GetVector().begin(); + currentTarget != this->Targets.GetVector().end(); + ++currentTarget) + { + if(cmTarget* target = + this->Makefile->GetLocalGenerator()-> + GetGlobalGenerator()->FindTarget(0, currentTarget->c_str())) + { + if((target->GetType() == cmTarget::EXECUTABLE) || + (target->GetType() == cmTarget::STATIC_LIBRARY) || + (target->GetType() == cmTarget::SHARED_LIBRARY) || + (target->GetType() == cmTarget::MODULE_LIBRARY)) + { + 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; + e << "given target \"" << *currentTarget + << "\" which is not an executable or library."; + this->SetError(e.str().c_str()); + return false; + } + } + else + { + cmOStringStream e; + e << "given target \"" << *currentTarget + << "\" which is not built by this project."; + this->SetError(e.str().c_str()); + return false; + } + } + + // Setup export file generation. + cmExportBuildFileGenerator ebfg; + ebfg.SetExportFile(fname.c_str()); + ebfg.SetNamespace(this->Namespace.GetCString()); + ebfg.SetAppendMode(this->Append.IsEnabled()); + ebfg.SetExports(&targets); + ebfg.SetCommand(this); + + // Compute the set of configurations exported. + std::vector configurationTypes; + this->Makefile->GetConfigurations(configurationTypes); + if(!configurationTypes.empty()) + { + for(std::vector::const_iterator + ci = configurationTypes.begin(); + ci != configurationTypes.end(); ++ci) + { + ebfg.AddConfiguration(ci->c_str()); + } + } + else + { + ebfg.AddConfiguration(""); + } + + // Generate the import file. + if(!ebfg.GenerateImportFile() && this->ErrorMessage.empty()) + { + this->SetError("could not write export file."); + return false; + } + + // Report generated error message if any. + if(!this->ErrorMessage.empty()) + { + this->SetError(this->ErrorMessage.c_str()); + return false; + } + + return true; +} + +//---------------------------------------------------------------------------- +bool cmExportCommand::HandlePackage(std::vector const& args) +{ + // Parse PACKAGE mode arguments. + enum Doing { DoingNone, DoingPackage }; + Doing doing = DoingPackage; + std::string package; + for(unsigned int i=1; i < args.size(); ++i) + { + if(doing == DoingPackage) + { + package = args[i]; + doing = DoingNone; + } + else + { + cmOStringStream e; + e << "PACKAGE given unknown argumsnt: " << args[i]; + this->SetError(e.str().c_str()); + return false; + } + } + + // Verify the package name. + if(package.empty()) + { + this->SetError("PACKAGE must be given a package name."); + return false; + } + const char* packageExpr = "^[A-Za-z0-9_.-]+$"; + cmsys::RegularExpression packageRegex(packageExpr); + if(!packageRegex.find(package.c_str())) + { + cmOStringStream e; + e << "PACKAGE given invalid package name \"" << package << "\". " + << "Package names must match \"" << packageExpr << "\"."; + this->SetError(e.str().c_str()); + return false; + } + + // We store the current build directory in the registry as a value + // named by a hash of its own content. This is deterministic and is + // unique with high probability. + const char* outDir = this->Makefile->GetCurrentOutputDirectory(); + std::string hash = cmSystemTools::ComputeStringMD5(outDir); +#if defined(_WIN32) && !defined(__CYGWIN__) + this->StorePackageRegistryWin(package, outDir, hash.c_str()); +#else + this->StorePackageRegistryDir(package, outDir, hash.c_str()); +#endif + + return true; +} + +#if defined(_WIN32) && !defined(__CYGWIN__) +# include +# undef GetCurrentDirectory +//---------------------------------------------------------------------------- +void cmExportCommand::ReportRegistryError(std::string const& msg, + std::string const& key, + long err) +{ + cmOStringStream e; + e << msg << "\n" + << " HKEY_CURRENT_USER\\" << key << "\n"; + char winmsg[1024]; + if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, 0, err, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + winmsg, 1024, 0) > 0) + { + e << "Windows reported:\n" + << " " << winmsg; + } + this->Makefile->IssueMessage(cmake::WARNING, e.str()); +} + +//---------------------------------------------------------------------------- +void cmExportCommand::StorePackageRegistryWin(std::string const& package, + const char* content, + const char* hash) +{ + std::string key = "Software\\Kitware\\CMake\\Packages\\"; + key += package; + HKEY hKey; + LONG err = RegCreateKeyEx(HKEY_CURRENT_USER, + key.c_str(), 0, 0, REG_OPTION_NON_VOLATILE, + KEY_SET_VALUE, 0, &hKey, 0); + if(err != ERROR_SUCCESS) + { + this->ReportRegistryError( + "Cannot create/open registry key", key, err); + return; + } + err = RegSetValueEx(hKey, hash, 0, REG_SZ, (BYTE const*)content, + static_cast(strlen(content)+1)); + RegCloseKey(hKey); + if(err != ERROR_SUCCESS) + { + cmOStringStream msg; + msg << "Cannot set registry value \"" << hash << "\" under key"; + this->ReportRegistryError(msg.str(), key, err); + return; + } +} +#else +//---------------------------------------------------------------------------- +void cmExportCommand::StorePackageRegistryDir(std::string const& package, + const char* content, + const char* hash) +{ +#if defined(__HAIKU__) + BPath dir; + if (find_directory(B_USER_SETTINGS_DIRECTORY, &dir) != B_OK) + { + return; + } + dir.Append("cmake/packages"); + dir.Append(package.c_str()); + std::string fname = dir.Path(); +#else + const char* home = cmSystemTools::GetEnv("HOME"); + if(!home) + { + return; + } + std::string fname = home; + cmSystemTools::ConvertToUnixSlashes(fname); + fname += "/.cmake/packages/"; + fname += package; +#endif + cmSystemTools::MakeDirectory(fname.c_str()); + fname += "/"; + fname += hash; + if(!cmSystemTools::FileExists(fname.c_str())) + { + cmGeneratedFileStream entry(fname.c_str(), true); + if(entry) + { + entry << content << "\n"; + } + else + { + cmOStringStream e; + e << "Cannot create package registry file:\n" + << " " << fname << "\n" + << cmSystemTools::GetLastSystemError() << "\n"; + this->Makefile->IssueMessage(cmake::WARNING, e.str()); + } + } +} +#endif diff --git a/Source/cmExportCommand.h b/Source/cmExportCommand.h new file mode 100644 index 0000000..ae67b47 --- /dev/null +++ b/Source/cmExportCommand.h @@ -0,0 +1,121 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExportCommand_h +#define cmExportCommand_h + +#include "cmCommand.h" +#include "cmDocumentLocationUndefined.h" + +class cmExportBuildFileGenerator; + +/** \class cmExportLibraryDependenciesCommand + * \brief Add a test to the lists of tests to run. + * + * cmExportLibraryDependenciesCommand adds a test to the list of tests to run + * + */ +class cmExportCommand : public cmCommand +{ +public: + cmExportCommand(); + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmExportCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "export";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return + "Export targets from the build tree for use by outside projects."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " export(TARGETS [target1 [target2 [...]]] [NAMESPACE ]\n" + " [APPEND] FILE )\n" + "Create a file that may be included by outside projects to " + "import targets from the current project's build tree. " + "This is useful during cross-compiling to build utility executables " + "that can run on the host platform in one project and then import " + "them into another project being compiled for the target platform. " + "If the NAMESPACE option is given the string will be " + "prepended to all target names written to the file. " + "If the APPEND option is given the generated code will be appended " + "to the file instead of overwriting it. " + "If a library target is included in the export but " + "a target to which it links is not included the behavior is " + "unspecified." + "\n" + "The file created by this command is specific to the build tree and " + "should never be installed. " + "See the install(EXPORT) command to export targets from an " + "installation tree." + CM_LOCATION_UNDEFINED_BEHAVIOR("passing it to this command") + "\n" + " export(PACKAGE )\n" + "Store the current build directory in the CMake user package registry " + "for package . " + "The find_package command may consider the directory while searching " + "for package . " + "This helps dependent projects find and use a package from the " + "current project's build tree without help from the user. " + "Note that the entry in the package registry that this command " + "creates works only in conjunction with a package configuration " + "file (Config.cmake) that works with the build tree." + ; + } + + cmTypeMacro(cmExportCommand, cmCommand); + +private: + cmCommandArgumentGroup ArgumentGroup; + cmCAStringVector Targets; + cmCAEnabler Append; + cmCAString Namespace; + cmCAString Filename; + + friend class cmExportBuildFileGenerator; + std::string ErrorMessage; + + bool HandlePackage(std::vector const& args); + void StorePackageRegistryWin(std::string const& package, + const char* content, const char* hash); + void StorePackageRegistryDir(std::string const& package, + const char* content, const char* hash); + void ReportRegistryError(std::string const& msg, std::string const& key, + long err); +}; + + +#endif diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx new file mode 100644 index 0000000..c4f5dfb --- /dev/null +++ b/Source/cmExportFileGenerator.cxx @@ -0,0 +1,433 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmExportFileGenerator.h" + +#include "cmGeneratedFileStream.h" +#include "cmMakefile.h" +#include "cmSystemTools.h" +#include "cmTarget.h" +#include "cmVersion.h" + +#include + +//---------------------------------------------------------------------------- +cmExportFileGenerator::cmExportFileGenerator() +{ + this->AppendMode = false; +} + +//---------------------------------------------------------------------------- +void cmExportFileGenerator::AddConfiguration(const char* config) +{ + this->Configurations.push_back(config); +} + +//---------------------------------------------------------------------------- +void cmExportFileGenerator::SetExportFile(const char* mainFile) +{ + this->MainImportFile = mainFile; + this->FileDir = + cmSystemTools::GetFilenamePath(this->MainImportFile); + this->FileBase = + cmSystemTools::GetFilenameWithoutLastExtension(this->MainImportFile); + this->FileExt = + cmSystemTools::GetFilenameLastExtension(this->MainImportFile); +} + +//---------------------------------------------------------------------------- +bool cmExportFileGenerator::GenerateImportFile() +{ + // Open the output file to generate it. + cmsys::auto_ptr foutPtr; + if(this->AppendMode) + { + // Open for append. + cmsys::auto_ptr + ap(new std::ofstream(this->MainImportFile.c_str(), std::ios::app)); + foutPtr = ap; + } + else + { + // Generate atomically and with copy-if-different. + cmsys::auto_ptr + ap(new cmGeneratedFileStream(this->MainImportFile.c_str(), true)); + ap->SetCopyIfDifferent(true); + foutPtr = ap; + } + if(!foutPtr.get() || !*foutPtr) + { + std::string se = cmSystemTools::GetLastSystemError(); + cmOStringStream e; + e << "cannot write to file \"" << this->MainImportFile + << "\": " << se; + cmSystemTools::Error(e.str().c_str()); + return false; + } + std::ostream& os = *foutPtr; + + // Protect that file against use with older CMake versions. + os << "# Generated by CMake " << cmVersion::GetCMakeVersion() << "\n\n"; + os << "IF(\"${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}\" LESS 2.5)\n" + << " MESSAGE(FATAL_ERROR \"CMake >= 2.6.0 required\")\n" + << "ENDIF(\"${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}\" LESS 2.5)\n"; + + // Isolate the file policy level. + // We use 2.6 here instead of the current version because newer + // versions of CMake should be able to export files imported by 2.6 + // until the import format changes. + os << "CMAKE_POLICY(PUSH)\n" + << "CMAKE_POLICY(VERSION 2.6)\n"; + + // Start with the import file header. + this->GenerateImportHeaderCode(os); + + // Create all the imported targets. + bool result = this->GenerateMainFile(os); + + // End with the import file footer. + this->GenerateImportFooterCode(os); + os << "CMAKE_POLICY(POP)\n"; + + return result; +} + +//---------------------------------------------------------------------------- +void cmExportFileGenerator::GenerateImportConfig(std::ostream& os, + const char* config) +{ + // Construct the property configuration suffix. + std::string suffix = "_"; + if(config && *config) + { + suffix += cmSystemTools::UpperCase(config); + } + else + { + suffix += "NOCONFIG"; + } + + // Generate the per-config target information. + this->GenerateImportTargetsConfig(os, config, suffix); +} + +//---------------------------------------------------------------------------- +void +cmExportFileGenerator +::SetImportDetailProperties(const char* config, std::string const& suffix, + cmTarget* target, ImportPropertyMap& properties) +{ + // Get the makefile in which to lookup target information. + cmMakefile* mf = target->GetMakefile(); + + // Add the soname for unix shared libraries. + if(target->GetType() == cmTarget::SHARED_LIBRARY || + target->GetType() == cmTarget::MODULE_LIBRARY) + { + // Check whether this is a DLL platform. + bool dll_platform = + (mf->IsOn("WIN32") || mf->IsOn("CYGWIN") || mf->IsOn("MINGW")); + if(!dll_platform) + { + std::string soname = target->GetSOName(config); + std::string prop = "IMPORTED_SONAME"; + prop += suffix; + properties[prop] = soname; + } + } + + // Add the transitive link dependencies for this configuration. + if(cmTarget::LinkInterface const* iface = target->GetLinkInterface(config)) + { + this->SetImportLinkProperty(suffix, target, + "IMPORTED_LINK_INTERFACE_LANGUAGES", + iface->Languages, properties); + this->SetImportLinkProperty(suffix, target, + "IMPORTED_LINK_INTERFACE_LIBRARIES", + iface->Libraries, properties); + this->SetImportLinkProperty(suffix, target, + "IMPORTED_LINK_DEPENDENT_LIBRARIES", + iface->SharedDeps, properties); + if(iface->Multiplicity > 0) + { + std::string prop = "IMPORTED_LINK_INTERFACE_MULTIPLICITY"; + prop += suffix; + cmOStringStream m; + m << iface->Multiplicity; + properties[prop] = m.str(); + } + } +} + +//---------------------------------------------------------------------------- +void +cmExportFileGenerator +::SetImportLinkProperty(std::string const& suffix, + cmTarget* target, + const char* propName, + std::vector const& libs, + ImportPropertyMap& properties) +{ + // Skip the property if there are no libraries. + if(libs.empty()) + { + return; + } + + // Get the makefile in which to lookup target information. + cmMakefile* mf = target->GetMakefile(); + + // Construct the property value. + std::string link_libs; + const char* sep = ""; + for(std::vector::const_iterator li = libs.begin(); + li != libs.end(); ++li) + { + // Separate this from the previous entry. + link_libs += sep; + sep = ";"; + + // Append this entry. + if(cmTarget* tgt = mf->FindTargetToUse(li->c_str())) + { + // This is a target. + if(tgt->IsImported()) + { + // The target is imported (and therefore is not in the + // export). Append the raw name. + link_libs += *li; + } + else if(this->ExportedTargets.find(tgt) != this->ExportedTargets.end()) + { + // The target is in the export. Append it with the export + // namespace. + link_libs += this->Namespace; + link_libs += *li; + } + else + { + // The target is not in the export. + if(!this->AppendMode) + { + // We are not appending, so all exported targets should be + // known here. This is probably user-error. + this->ComplainAboutMissingTarget(target, tgt); + } + // Assume the target will be exported by another command. + // Append it with the export namespace. + link_libs += this->Namespace; + link_libs += *li; + } + } + else + { + // Append the raw name. + link_libs += *li; + } + } + + // Store the property. + std::string prop = propName; + prop += suffix; + properties[prop] = link_libs; +} + +//---------------------------------------------------------------------------- +void cmExportFileGenerator::GenerateImportHeaderCode(std::ostream& os, + const char* config) +{ + os << "#----------------------------------------------------------------\n" + << "# Generated CMake target import file"; + if(config) + { + os << " for configuration \"" << config << "\".\n"; + } + else + { + os << ".\n"; + } + os << "#----------------------------------------------------------------\n" + << "\n"; + this->GenerateImportVersionCode(os); +} + +//---------------------------------------------------------------------------- +void cmExportFileGenerator::GenerateImportFooterCode(std::ostream& os) +{ + os << "# Commands beyond this point should not need to know the version.\n" + << "SET(CMAKE_IMPORT_FILE_VERSION)\n"; +} + +//---------------------------------------------------------------------------- +void cmExportFileGenerator::GenerateImportVersionCode(std::ostream& os) +{ + // Store an import file format version. This will let us change the + // format later while still allowing old import files to work. + os << "# Commands may need to know the format version.\n" + << "SET(CMAKE_IMPORT_FILE_VERSION 1)\n" + << "\n"; +} + +//---------------------------------------------------------------------------- +void +cmExportFileGenerator +::GenerateImportTargetCode(std::ostream& os, cmTarget* target) +{ + // Construct the imported target name. + std::string targetName = this->Namespace; + targetName += target->GetName(); + + // Create the imported target. + os << "# Create imported target " << targetName << "\n"; + switch(target->GetType()) + { + case cmTarget::EXECUTABLE: + os << "ADD_EXECUTABLE(" << targetName << " IMPORTED)\n"; + break; + case cmTarget::STATIC_LIBRARY: + os << "ADD_LIBRARY(" << targetName << " STATIC IMPORTED)\n"; + break; + case cmTarget::SHARED_LIBRARY: + os << "ADD_LIBRARY(" << targetName << " SHARED IMPORTED)\n"; + break; + case cmTarget::MODULE_LIBRARY: + os << "ADD_LIBRARY(" << targetName << " MODULE IMPORTED)\n"; + break; + default: // should never happen + break; + } + + // Mark the imported executable if it has exports. + if(target->IsExecutableWithExports()) + { + os << "SET_PROPERTY(TARGET " << targetName + << " PROPERTY ENABLE_EXPORTS 1)\n"; + } + + // Mark the imported library if it is a framework. + if(target->IsFrameworkOnApple()) + { + os << "SET_PROPERTY(TARGET " << targetName + << " PROPERTY FRAMEWORK 1)\n"; + } + + // Mark the imported executable if it is an application bundle. + if(target->IsAppBundleOnApple()) + { + os << "SET_PROPERTY(TARGET " << targetName + << " PROPERTY MACOSX_BUNDLE 1)\n"; + } + + if (target->IsCFBundleOnApple()) + { + os << "SET_PROPERTY(TARGET " << targetName + << " PROPERTY BUNDLE 1)\n"; + } + os << "\n"; +} + +//---------------------------------------------------------------------------- +void +cmExportFileGenerator +::GenerateImportPropertyCode(std::ostream& os, const char* config, + cmTarget* target, + ImportPropertyMap const& properties) +{ + // Construct the imported target name. + std::string targetName = this->Namespace; + targetName += target->GetName(); + + // Set the import properties. + os << "# Import target \"" << targetName << "\" for configuration \"" + << config << "\"\n"; + os << "SET_PROPERTY(TARGET " << targetName + << " APPEND PROPERTY IMPORTED_CONFIGURATIONS "; + if(config && *config) + { + os << cmSystemTools::UpperCase(config); + } + else + { + os << "NOCONFIG"; + } + os << ")\n"; + os << "SET_TARGET_PROPERTIES(" << targetName << " PROPERTIES\n"; + for(ImportPropertyMap::const_iterator pi = properties.begin(); + pi != properties.end(); ++pi) + { + os << " " << pi->first << " \"" << pi->second << "\"\n"; + } + os << " )\n" + << "\n"; +} + + +//---------------------------------------------------------------------------- +void +cmExportFileGenerator::GenerateImportedFileCheckLoop(std::ostream& os) +{ + // Add code which verifies at cmake time that the file which is being + // imported actually exists on disk. This should in theory always be theory + // case, but still when packages are split into normal and development + // packages this might get broken (e.g. the Config.cmake could be part of + // the non-development package, something similar happened to me without + // on SUSE with a mysql pkg-config file, which claimed everything is fine, + // but the development package was not installed.). + os << "# Loop over all imported files and verify that they actually exist\n" + "FOREACH(target ${_IMPORT_CHECK_TARGETS} )\n" + " FOREACH(file ${_IMPORT_CHECK_FILES_FOR_${target}} )\n" + " IF(NOT EXISTS \"${file}\" )\n" + " MESSAGE(FATAL_ERROR \"The imported target \\\"${target}\\\"" + " references the file\n" + " \\\"${file}\\\"\n" + "but this file does not exist. Possible reasons include:\n" + "* The file was deleted, renamed, or moved to another location.\n" + "* An install or uninstall procedure did not complete successfully.\n" + "* The installation package was faulty and contained\n" + " \\\"${CMAKE_CURRENT_LIST_FILE}\\\"\n" + "but not all the files it references.\n" + "\")\n" + " ENDIF()\n" + " ENDFOREACH()\n" + " UNSET(_IMPORT_CHECK_FILES_FOR_${target})\n" + "ENDFOREACH()\n" + "UNSET(_IMPORT_CHECK_TARGETS)\n" + "\n"; +} + + +//---------------------------------------------------------------------------- +void +cmExportFileGenerator +::GenerateImportedFileChecksCode(std::ostream& os, cmTarget* target, + ImportPropertyMap const& properties, + const std::set& importedLocations) +{ + // Construct the imported target name. + std::string targetName = this->Namespace; + targetName += target->GetName(); + + os << "LIST(APPEND _IMPORT_CHECK_TARGETS " << targetName << " )\n" + "LIST(APPEND _IMPORT_CHECK_FILES_FOR_" << targetName << " "; + + for(std::set::const_iterator li = importedLocations.begin(); + li != importedLocations.end(); + ++li) + { + ImportPropertyMap::const_iterator pi = properties.find(*li); + if (pi != properties.end()) + { + os << "\"" << pi->second << "\" "; + } + } + + os << ")\n\n"; +} diff --git a/Source/cmExportFileGenerator.h b/Source/cmExportFileGenerator.h new file mode 100644 index 0000000..f271e55 --- /dev/null +++ b/Source/cmExportFileGenerator.h @@ -0,0 +1,105 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExportFileGenerator_h +#define cmExportFileGenerator_h + +#include "cmCommand.h" + +/** \class cmExportFileGenerator + * \brief Generate a file exporting targets from a build or install tree. + * + * cmExportFileGenerator is the superclass for + * cmExportBuildFileGenerator and cmExportInstallFileGenerator. It + * contains common code generation routines for the two kinds of + * export implementations. + */ +class cmExportFileGenerator +{ +public: + cmExportFileGenerator(); + virtual ~cmExportFileGenerator() {} + + /** Set the full path to the export file to generate. */ + void SetExportFile(const char* mainFile); + + /** Set the namespace in which to place exported target names. */ + void SetNamespace(const char* ns) { this->Namespace = ns; } + + /** Add a configuration to be exported. */ + void AddConfiguration(const char* config); + + /** Actually generate the export file. Returns whether there was an + error. */ + bool GenerateImportFile(); +protected: + + typedef std::map ImportPropertyMap; + + // Generate per-configuration target information to the given output + // stream. + void GenerateImportConfig(std::ostream& os, const char* config); + + // Methods to implement export file code generation. + void GenerateImportHeaderCode(std::ostream& os, const char* config = 0); + void GenerateImportFooterCode(std::ostream& os); + void GenerateImportVersionCode(std::ostream& os); + void GenerateImportTargetCode(std::ostream& os, cmTarget* target); + void GenerateImportPropertyCode(std::ostream& os, const char* config, + cmTarget* target, + ImportPropertyMap const& properties); + void GenerateImportedFileChecksCode(std::ostream& os, cmTarget* target, + ImportPropertyMap const& properties, + const std::set& importedLocations); + void GenerateImportedFileCheckLoop(std::ostream& os); + + + // Collect properties with detailed information about targets beyond + // their location on disk. + void SetImportDetailProperties(const char* config, + std::string const& suffix, cmTarget* target, + ImportPropertyMap& properties); + void SetImportLinkProperty(std::string const& suffix, + cmTarget* target, const char* propName, + std::vector const& libs, + ImportPropertyMap& properties); + + /** Each subclass knows how to generate its kind of export file. */ + virtual bool GenerateMainFile(std::ostream& os) = 0; + + /** Each subclass knows where the target files are located. */ + virtual void GenerateImportTargetsConfig(std::ostream& os, + const char* config, + std::string const& suffix) = 0; + + /** Each subclass knows how to complain about a target that is + missing from an export set. */ + virtual void ComplainAboutMissingTarget(cmTarget* depender, + cmTarget* dependee) = 0; + + // The namespace in which the exports are placed in the generated file. + std::string Namespace; + + // The set of configurations to export. + std::vector Configurations; + + // The file to generate. + std::string MainImportFile; + std::string FileDir; + std::string FileBase; + std::string FileExt; + bool AppendMode; + + // The set of targets included in the export. + std::set ExportedTargets; +}; + +#endif diff --git a/Source/cmExportInstallFileGenerator.cxx b/Source/cmExportInstallFileGenerator.cxx new file mode 100644 index 0000000..da14dd7 --- /dev/null +++ b/Source/cmExportInstallFileGenerator.cxx @@ -0,0 +1,333 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmExportInstallFileGenerator.h" + +#include "cmGeneratedFileStream.h" +#include "cmInstallExportGenerator.h" +#include "cmInstallTargetGenerator.h" + +//---------------------------------------------------------------------------- +cmExportInstallFileGenerator +::cmExportInstallFileGenerator(cmInstallExportGenerator* iegen): + InstallExportGenerator(iegen) +{ +} + +//---------------------------------------------------------------------------- +std::string cmExportInstallFileGenerator::GetConfigImportFileGlob() +{ + std::string glob = this->FileBase; + glob += "-*"; + glob += this->FileExt; + return glob; +} + +//---------------------------------------------------------------------------- +bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os) +{ + // Create all the imported targets. + for(std::vector::const_iterator + tei = this->ExportSet->begin(); + tei != this->ExportSet->end(); ++tei) + { + cmTargetExport* te = *tei; + if(this->ExportedTargets.insert(te->Target).second) + { + this->GenerateImportTargetCode(os, te->Target); + } + else + { + cmOStringStream e; + e << "INSTALL(EXPORT \"" << this->Name << "\" ...) " + << "includes target \"" << te->Target->GetName() + << "\" more than once in the export set."; + cmSystemTools::Error(e.str().c_str()); + return false; + } + } + + // Now load per-configuration properties for them. + os << "# Load information for each installed configuration.\n" + << "GET_FILENAME_COMPONENT(_DIR \"${CMAKE_CURRENT_LIST_FILE}\" PATH)\n" + << "FILE(GLOB CONFIG_FILES \"${_DIR}/" + << this->GetConfigImportFileGlob() << "\")\n" + << "FOREACH(f ${CONFIG_FILES})\n" + << " INCLUDE(${f})\n" + << "ENDFOREACH(f)\n" + << "\n"; + + // Generate an import file for each configuration. + bool result = true; + for(std::vector::const_iterator + ci = this->Configurations.begin(); + ci != this->Configurations.end(); ++ci) + { + if(!this->GenerateImportFileConfig(ci->c_str())) + { + result = false; + } + } + return result; +} + +//---------------------------------------------------------------------------- +bool +cmExportInstallFileGenerator::GenerateImportFileConfig(const char* config) +{ + // Skip configurations not enabled for this export. + if(!this->InstallExportGenerator->InstallsForConfig(config)) + { + return true; + } + + // Construct the name of the file to generate. + std::string fileName = this->FileDir; + fileName += "/"; + fileName += this->FileBase; + fileName += "-"; + if(config && *config) + { + fileName += cmSystemTools::LowerCase(config); + } + else + { + fileName += "noconfig"; + } + fileName += this->FileExt; + + // Open the output file to generate it. + cmGeneratedFileStream exportFileStream(fileName.c_str(), true); + if(!exportFileStream) + { + std::string se = cmSystemTools::GetLastSystemError(); + cmOStringStream e; + e << "cannot write to file \"" << fileName.c_str() + << "\": " << se; + cmSystemTools::Error(e.str().c_str()); + return false; + } + std::ostream& os = exportFileStream; + + // Start with the import file header. + this->GenerateImportHeaderCode(os, config); + + // Generate the per-config target information. + this->GenerateImportConfig(os, config); + + // End with the import file footer. + this->GenerateImportFooterCode(os); + + // Record this per-config import file. + this->ConfigImportFiles[config] = fileName; + + return true; +} + +//---------------------------------------------------------------------------- +void +cmExportInstallFileGenerator +::GenerateImportTargetsConfig(std::ostream& os, + const char* config, std::string const& suffix) +{ + // Add code to compute the installation prefix relative to the + // import file location. + const char* installDest = this->InstallExportGenerator->GetDestination(); + if(!cmSystemTools::FileIsFullPath(installDest)) + { + std::string dest = installDest; + os << "# Compute the installation prefix relative to this file.\n" + << "GET_FILENAME_COMPONENT(_IMPORT_PREFIX " + << "\"${CMAKE_CURRENT_LIST_FILE}\" PATH)\n"; + while(!dest.empty()) + { + os << + "GET_FILENAME_COMPONENT(_IMPORT_PREFIX \"${_IMPORT_PREFIX}\" PATH)\n"; + dest = cmSystemTools::GetFilenamePath(dest); + } + os << "\n"; + + // Import location properties may reference this variable. + this->ImportPrefix = "${_IMPORT_PREFIX}/"; + } + + // Add each target in the set to the export. + for(std::vector::const_iterator + tei = this->ExportSet->begin(); + tei != this->ExportSet->end(); ++tei) + { + // Collect import properties for this target. + cmTargetExport* te = *tei; + ImportPropertyMap properties; + std::set importedLocations; + this->SetImportLocationProperty(config, suffix, te->ArchiveGenerator, + properties, importedLocations); + this->SetImportLocationProperty(config, suffix, te->LibraryGenerator, + properties, importedLocations); + this->SetImportLocationProperty(config, suffix, + te->RuntimeGenerator, properties, + importedLocations); + this->SetImportLocationProperty(config, suffix, te->FrameworkGenerator, + properties, importedLocations); + this->SetImportLocationProperty(config, suffix, te->BundleGenerator, + properties, importedLocations); + + // If any file location was set for the target add it to the + // import file. + if(!properties.empty()) + { + // Get the rest of the target details. + this->SetImportDetailProperties(config, suffix, + te->Target, properties); + + // TOOD: PUBLIC_HEADER_LOCATION + // This should wait until the build feature propagation stuff + // is done. Then this can be a propagated include directory. + // this->GenerateImportProperty(config, te->HeaderGenerator, + // properties); + + // Generate code in the export file. + this->GenerateImportPropertyCode(os, config, te->Target, properties); + this->GenerateImportedFileChecksCode(os, te->Target, properties, + importedLocations); + } + } + + this->GenerateImportedFileCheckLoop(os); + + // Cleanup the import prefix variable. + if(!this->ImportPrefix.empty()) + { + os << "# Cleanup temporary variables.\n" + << "SET(_IMPORT_PREFIX)\n" + << "\n"; + } +} + +//---------------------------------------------------------------------------- +void +cmExportInstallFileGenerator +::SetImportLocationProperty(const char* config, std::string const& suffix, + cmInstallTargetGenerator* itgen, + ImportPropertyMap& properties, + std::set& importedLocations + ) +{ + // Skip rules that do not match this configuration. + if(!(itgen && itgen->InstallsForConfig(config))) + { + return; + } + + // Get the target to be installed. + cmTarget* target = itgen->GetTarget(); + + // Construct the installed location of the target. + std::string dest = itgen->GetDestination(); + std::string value; + if(!cmSystemTools::FileIsFullPath(dest.c_str())) + { + // The target is installed relative to the installation prefix. + if(this->ImportPrefix.empty()) + { + this->ComplainAboutImportPrefix(itgen); + } + value = this->ImportPrefix; + } + value += dest; + value += "/"; + + if(itgen->IsImportLibrary()) + { + // Construct the property name. + std::string prop = "IMPORTED_IMPLIB"; + prop += suffix; + + // Append the installed file name. + value += itgen->GetInstallFilename(target, config, + cmInstallTargetGenerator::NameImplib); + + // Store the property. + properties[prop] = value; + importedLocations.insert(prop); + } + else + { + // Construct the property name. + std::string prop = "IMPORTED_LOCATION"; + prop += suffix; + + // Append the installed file name. + if(target->IsFrameworkOnApple()) + { + value += itgen->GetInstallFilename(target, config); + value += ".framework/"; + value += itgen->GetInstallFilename(target, config); + } + else if(target->IsCFBundleOnApple()) + { + const char *ext = target->GetProperty("BUNDLE_EXTENSION"); + if (!ext) + { + ext = "bundle"; + } + + value += itgen->GetInstallFilename(target, config); + value += "."; + value += ext; + value += "/"; + value += itgen->GetInstallFilename(target, config); + } + else if(target->IsAppBundleOnApple()) + { + value += itgen->GetInstallFilename(target, config); + value += ".app/Contents/MacOS/"; + value += itgen->GetInstallFilename(target, config); + } + else + { + value += itgen->GetInstallFilename(target, config, + cmInstallTargetGenerator::NameReal); + } + + // Store the property. + properties[prop] = value; + importedLocations.insert(prop); + } +} + +//---------------------------------------------------------------------------- +void +cmExportInstallFileGenerator +::ComplainAboutImportPrefix(cmInstallTargetGenerator* itgen) +{ + const char* installDest = this->InstallExportGenerator->GetDestination(); + cmOStringStream e; + e << "INSTALL(EXPORT \"" << this->Name << "\") given absolute " + << "DESTINATION \"" << installDest << "\" but the export " + << "references an installation of target \"" + << itgen->GetTarget()->GetName() << "\" which has relative " + << "DESTINATION \"" << itgen->GetDestination() << "\"."; + cmSystemTools::Error(e.str().c_str()); +} + +//---------------------------------------------------------------------------- +void +cmExportInstallFileGenerator +::ComplainAboutMissingTarget(cmTarget* depender, cmTarget* dependee) +{ + cmOStringStream e; + e << "INSTALL(EXPORT \"" << this->Name << "\" ...) " + << "includes target \"" << depender->GetName() + << "\" which requires target \"" << dependee->GetName() + << "\" that is not in the export set."; + cmSystemTools::Error(e.str().c_str()); +} diff --git a/Source/cmExportInstallFileGenerator.h b/Source/cmExportInstallFileGenerator.h new file mode 100644 index 0000000..fb678e8 --- /dev/null +++ b/Source/cmExportInstallFileGenerator.h @@ -0,0 +1,124 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExportInstallFileGenerator_h +#define cmExportInstallFileGenerator_h + +#include "cmExportFileGenerator.h" + +class cmInstallExportGenerator; +class cmInstallFilesGenerator; +class cmInstallTargetGenerator; +class cmTargetExport; + +/** \class cmExportInstallFileGenerator + * \brief Generate a file exporting targets from an install tree. + * + * cmExportInstallFileGenerator generates files exporting targets from + * install an installation tree. The files are placed in a temporary + * location for installation by cmInstallExportGenerator. One main + * file is generated that creates the imported targets and loads + * per-configuration files. Target locations and settings for each + * configuration are written to these per-configuration files. After + * installation the main file loads the configurations that have been + * installed. + * + * This is used to implement the INSTALL(EXPORT) command. + */ +class cmExportInstallFileGenerator: public cmExportFileGenerator +{ +public: + /** Construct with the export installer that will install the + files. */ + cmExportInstallFileGenerator(cmInstallExportGenerator* iegen); + + /** Set the name of the export associated with the files. This is + the name given to the install(EXPORT) command mode. */ + void SetName(const char* name) { this->Name = name; } + + /** Set the set of targets to be exported. These are the targets + associated with the export name. */ + void SetExportSet(std::vector const* eSet) + { this->ExportSet = eSet; } + + /** Get the per-config file generated for each configuraiton. This + maps from the configuration name to the file temporary location + for installation. */ + std::map const& GetConfigImportFiles() + { return this->ConfigImportFiles; } + + /** Compute the globbing expression used to load per-config import + files from the main file. */ + std::string GetConfigImportFileGlob(); +protected: + + // Implement virtual methods from the superclass. + virtual bool GenerateMainFile(std::ostream& os); + virtual void GenerateImportTargetsConfig(std::ostream& os, + const char* config, + std::string const& suffix); + virtual void ComplainAboutMissingTarget(cmTarget* depender, + cmTarget* dependee); + + /** Generate a per-configuration file for the targets. */ + bool GenerateImportFileConfig(const char* config); + + /** Fill in properties indicating installed file locations. */ + void SetImportLocationProperty(const char* config, + std::string const& suffix, + cmInstallTargetGenerator* itgen, + ImportPropertyMap& properties, + std::set& importedLocations + ); + + void ComplainAboutImportPrefix(cmInstallTargetGenerator* itgen); + + cmInstallExportGenerator* InstallExportGenerator; + std::string Name; + std::vector const* ExportSet; + + std::string ImportPrefix; + + // The import file generated for each configuration. + std::map ConfigImportFiles; +}; + +/* + cmTargetExport is used in cmGlobalGenerator to collect the install + generators for targets associated with an export. +*/ +class cmTargetExport +{ +public: + cmTargetExport(cmTarget* tgt, + cmInstallTargetGenerator* archive, + cmInstallTargetGenerator* runtime, + cmInstallTargetGenerator* library, + cmInstallTargetGenerator* framework, + cmInstallTargetGenerator* bundle, + cmInstallFilesGenerator* headers + ) : Target(tgt), ArchiveGenerator(archive), + RuntimeGenerator(runtime), LibraryGenerator(library), + FrameworkGenerator(framework), BundleGenerator(bundle), + HeaderGenerator(headers) {} + + cmTarget* Target; + cmInstallTargetGenerator* ArchiveGenerator; + cmInstallTargetGenerator* RuntimeGenerator; + cmInstallTargetGenerator* LibraryGenerator; + cmInstallTargetGenerator* FrameworkGenerator; + cmInstallTargetGenerator* BundleGenerator; + cmInstallFilesGenerator* HeaderGenerator; +private: + cmTargetExport(); +}; + +#endif diff --git a/Source/cmExportLibraryDependencies.cxx b/Source/cmExportLibraryDependencies.cxx new file mode 100644 index 0000000..8fdb069 --- /dev/null +++ b/Source/cmExportLibraryDependencies.cxx @@ -0,0 +1,204 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmExportLibraryDependencies.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmGeneratedFileStream.h" +#include "cmake.h" +#include "cmVersion.h" + +#include + +bool cmExportLibraryDependenciesCommand +::InitialPass(std::vector const& args, cmExecutionStatus &) +{ + if(args.size() < 1 ) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + // store the arguments for the final pass + this->Filename = args[0]; + this->Append = false; + if(args.size() > 1) + { + if(args[1] == "APPEND") + { + this->Append = true; + } + } + return true; +} + + +void cmExportLibraryDependenciesCommand::FinalPass() +{ + // export_library_dependencies() shouldn't modify anything + // ensure this by calling a const method + this->ConstFinalPass(); +} + +void cmExportLibraryDependenciesCommand::ConstFinalPass() const +{ + // Use copy-if-different if not appending. + cmsys::auto_ptr foutPtr; + if(this->Append) + { + cmsys::auto_ptr ap( + new std::ofstream(this->Filename.c_str(), std::ios::app)); + foutPtr = ap; + } + else + { + cmsys::auto_ptr ap( + new cmGeneratedFileStream(this->Filename.c_str(), true)); + ap->SetCopyIfDifferent(true); + foutPtr = ap; + } + std::ostream& fout = *foutPtr.get(); + + if (!fout) + { + cmSystemTools::Error("Error Writing ", this->Filename.c_str()); + cmSystemTools::ReportLastSystemError(""); + return; + } + + // Collect dependency information about all library targets built in + // the project. + cmake* cm = this->Makefile->GetCMakeInstance(); + cmGlobalGenerator* global = cm->GetGlobalGenerator(); + const std::vector& locals = global->GetLocalGenerators(); + std::map libDepsOld; + std::map libDepsNew; + std::map libTypes; + for(std::vector::const_iterator i = locals.begin(); + i != locals.end(); ++i) + { + const cmLocalGenerator* gen = *i; + const cmTargets &tgts = gen->GetMakefile()->GetTargets(); + for(cmTargets::const_iterator l = tgts.begin(); + l != tgts.end(); ++l) + { + // Get the current target. + cmTarget const& target = l->second; + + // Skip non-library targets. + if(target.GetType() < cmTarget::STATIC_LIBRARY + || target.GetType() > cmTarget::MODULE_LIBRARY) + { + continue; + } + + // Construct the dependency variable name. + std::string targetEntry = target.GetName(); + targetEntry += "_LIB_DEPENDS"; + + // Construct the dependency variable value. It is safe to use + // the target GetLinkLibraries method here because this code is + // called at the end of configure but before generate so library + // dependencies have yet to be analyzed. Therefore the value + // will be the direct link dependencies. + std::string valueOld; + std::string valueNew; + cmTarget::LinkLibraryVectorType const& libs = target.GetLinkLibraries(); + for(cmTarget::LinkLibraryVectorType::const_iterator li = libs.begin(); + li != libs.end(); ++li) + { + std::string ltVar = li->first; + ltVar += "_LINK_TYPE"; + std::string ltValue; + switch(li->second) + { + case cmTarget::GENERAL: + valueNew += "general;"; + ltValue = "general"; + break; + case cmTarget::DEBUG: + valueNew += "debug;"; + ltValue = "debug"; + break; + case cmTarget::OPTIMIZED: + valueNew += "optimized;"; + ltValue = "optimized"; + break; + } + std::string lib = li->first; + if(cmTarget* libtgt = global->FindTarget(0, lib.c_str())) + { + // Handle simple output name changes. This command is + // deprecated so we do not support full target name + // translation (which requires per-configuration info). + if(const char* outname = libtgt->GetProperty("OUTPUT_NAME")) + { + lib = outname; + } + } + valueOld += lib; + valueOld += ";"; + valueNew += lib; + valueNew += ";"; + + std::string& ltEntry = libTypes[ltVar]; + if(ltEntry.empty()) + { + ltEntry = ltValue; + } + else if(ltEntry != ltValue) + { + ltEntry = "general"; + } + } + libDepsNew[targetEntry] = valueNew; + libDepsOld[targetEntry] = valueOld; + } + } + + // Generate dependency information for both old and new style CMake + // versions. + const char* vertest = + "\"${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}\" GREATER 2.4"; + fout << "# Generated by CMake " << cmVersion::GetCMakeVersion() << "\n\n"; + fout << "IF(" << vertest << ")\n"; + fout << " # Information for CMake 2.6 and above.\n"; + for(std::map::const_iterator + i = libDepsNew.begin(); + i != libDepsNew.end(); ++i) + { + if(!i->second.empty()) + { + fout << " SET(\"" << i->first << "\" \"" << i->second << "\")\n"; + } + } + fout << "ELSE(" << vertest << ")\n"; + fout << " # Information for CMake 2.4 and lower.\n"; + for(std::map::const_iterator + i = libDepsOld.begin(); + i != libDepsOld.end(); ++i) + { + if(!i->second.empty()) + { + fout << " SET(\"" << i->first << "\" \"" << i->second << "\")\n"; + } + } + for(std::map::const_iterator i = libTypes.begin(); + i != libTypes.end(); ++i) + { + if(i->second != "general") + { + fout << " SET(\"" << i->first << "\" \"" << i->second << "\")\n"; + } + } + fout << "ENDIF(" << vertest << ")\n"; + return; +} diff --git a/Source/cmExportLibraryDependencies.h b/Source/cmExportLibraryDependencies.h new file mode 100644 index 0000000..2a2ff21 --- /dev/null +++ b/Source/cmExportLibraryDependencies.h @@ -0,0 +1,100 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExportLibraryDependenciesCommand_h +#define cmExportLibraryDependenciesCommand_h + +#include "cmCommand.h" + +/** \class cmExportLibraryDependenciesCommand + * \brief Add a test to the lists of tests to run. + * + * cmExportLibraryDependenciesCommand adds a test to the list of tests to run + * + */ +class cmExportLibraryDependenciesCommand : public cmCommand +{ +public: + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + return new cmExportLibraryDependenciesCommand; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector const& args, + cmExecutionStatus &status); + + /** + * This is called at the end after all the information + * specified by the command is accumulated. + */ + virtual void FinalPass(); + virtual bool HasFinalPass() const { return true; } + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "export_library_dependencies";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Deprecated. Use INSTALL(EXPORT) or EXPORT command."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + "This command generates an old-style library dependencies file. " + "Projects requiring CMake 2.6 or later should not use the command. " + "Use instead the install(EXPORT) command to help export targets " + "from an installation tree and the export() command to export targets " + "from a build tree.\n" + "The old-style library dependencies file does not take into account " + "per-configuration names of libraries or the LINK_INTERFACE_LIBRARIES " + "target property.\n" + " export_library_dependencies( [APPEND])\n" + "Create a file named that can be included into a CMake listfile " + "with the INCLUDE command. The file will contain a number of SET " + "commands that will set all the variables needed for library dependency " + "information. This should be the last command in the top level " + "CMakeLists.txt file of the project. If the APPEND option is " + "specified, the SET commands will be appended to the given file " + "instead of replacing it."; + } + + /** This command is kept for compatibility with older CMake versions. */ + virtual bool IsDiscouraged() const + { + return true; + } + + cmTypeMacro(cmExportLibraryDependenciesCommand, cmCommand); + +private: + std::string Filename; + bool Append; + void ConstFinalPass() const; +}; + + +#endif diff --git a/Source/cmExprLexer.cxx b/Source/cmExprLexer.cxx new file mode 100644 index 0000000..53dfca7 --- /dev/null +++ b/Source/cmExprLexer.cxx @@ -0,0 +1,1928 @@ +#include "cmStandardIncludes.h" +#line 2 "/home/andy/vtk/CMake-bin/Source/cmExprLexer.cxx" + +#line 4 "/home/andy/vtk/CMake-bin/Source/cmExprLexer.cxx" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 31 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +int cmExpr_yylex_init (yyscan_t* scanner); + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE cmExpr_yyrestart(yyin ,yyscanner ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input + stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via cmExpr_yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is + * not NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void cmExpr_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void cmExpr_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmExpr_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void cmExpr_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmExpr_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmExpr_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void cmExpr_yypop_buffer_state (yyscan_t yyscanner ); + +static void cmExpr_yyensure_buffer_stack (yyscan_t yyscanner ); +static void cmExpr_yy_load_buffer_state (yyscan_t yyscanner ); +static void cmExpr_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); + +#define YY_FLUSH_BUFFER cmExpr_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) + +YY_BUFFER_STATE cmExpr_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmExpr_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE cmExpr_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +void *cmExpr_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *cmExpr_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void cmExpr_yyfree (void * ,yyscan_t yyscanner ); + +#define yy_new_buffer cmExpr_yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + cmExpr_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + cmExpr_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + cmExpr_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + cmExpr_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define cmExpr_yywrap(n) 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state , + yyscan_t yyscanner); +static int yy_get_next_buffer (yyscan_t yyscanner ); +static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; + +#define YY_NUM_RULES 15 +#define YY_END_OF_BUFFER 16 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[23] = + { 0, + 0, 0, 16, 15, 6, 8, 13, 14, 4, 2, + 3, 5, 1, 15, 15, 9, 7, 10, 1, 11, + 12, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 3, 1, 4, + 5, 6, 7, 1, 8, 1, 9, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 1, 1, 11, + 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 13, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 14, 1, 15, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[16] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int16_t yy_base[23] = + { 0, + 0, 0, 20, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 9, 7, 5, 21, 21, 21, 6, 21, + 21, 21 + } ; + +static yyconst flex_int16_t yy_def[23] = + { 0, + 22, 1, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 0 + } ; + +static yyconst flex_int16_t yy_nxt[37] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 21, 20, 19, 22, + 3, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22 + } ; + +static yyconst flex_int16_t yy_chk[37] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 19, 15, 14, 13, 3, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +#line 2 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run flex like this: + + flex --prefix=cmExpr_yy --header-file=cmExprLexer.h -ocmExprLexer.cxx cmExprLexer.in.l + +Modify cmExprLexer.cxx: + - remove TABs + - remove "yyscanner" argument from these methods: + yy_fatal_error, cmExpr_yyalloc, cmExpr_yyrealloc, cmExpr_yyfree + - remove all YY_BREAK lines occurring right after return statements + - change while ( 1 ) to for(;;) + +Modify cmExprLexer.h: + - remove TABs + - remove the yy_init_globals function + - remove the block that includes unistd.h + - remove #line directives (avoids bogus warning on old Sun) + +*/ + +#include "cmStandardLexer.h" + +#include "cmExprParserHelper.h" + +/* Replace the lexer input function. */ +#undef YY_INPUT +#define YY_INPUT(buf, result, max_size) \ + { result = yyextra->LexInput(buf, max_size); } + +/* Include the set of tokens from the parser. */ +#include "cmExprParserTokens.h" + +/*--------------------------------------------------------------------------*/ +#line 518 "/home/andy/vtk/CMake-bin/Source/cmExprLexer.cxx" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant + scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int cmExpr_yylex_destroy (yyscan_t yyscanner ); + +int cmExpr_yyget_debug (yyscan_t yyscanner ); + +void cmExpr_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE cmExpr_yyget_extra (yyscan_t yyscanner ); + +void cmExpr_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *cmExpr_yyget_in (yyscan_t yyscanner ); + +void cmExpr_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *cmExpr_yyget_out (yyscan_t yyscanner ); + +void cmExpr_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int cmExpr_yyget_leng (yyscan_t yyscanner ); + +char *cmExpr_yyget_text (yyscan_t yyscanner ); + +int cmExpr_yyget_lineno (yyscan_t yyscanner ); + +void cmExpr_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int cmExpr_yywrap (yyscan_t yyscanner ); +#else +extern int cmExpr_yywrap (yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (yyscan_t yyscanner ); +#else +static int input (yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int cmExpr_yylex (yyscan_t yyscanner); + +#define YY_DECL int cmExpr_yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + +#line 86 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" + + +#line 736 "/home/andy/vtk/CMake-bin/Source/cmExprLexer.cxx" + + if ( yyg->yy_init ) + { + yyg->yy_init = 0; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + cmExpr_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + cmExpr_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + cmExpr_yy_load_buffer_state(yyscanner ); + } + + for(;;) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 23 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 21 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 88 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ yylvalp->Number = atoi(yytext); return exp_NUMBER; } +case 2: +YY_RULE_SETUP +#line 90 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_PLUS; } +case 3: +YY_RULE_SETUP +#line 91 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_MINUS; } +case 4: +YY_RULE_SETUP +#line 92 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_TIMES; } +case 5: +YY_RULE_SETUP +#line 93 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_DIVIDE; } +case 6: +YY_RULE_SETUP +#line 94 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_MOD; } +case 7: +YY_RULE_SETUP +#line 95 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_OR; } +case 8: +YY_RULE_SETUP +#line 96 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_AND; } +case 9: +YY_RULE_SETUP +#line 97 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_XOR; } +case 10: +YY_RULE_SETUP +#line 98 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_NOT; } +case 11: +YY_RULE_SETUP +#line 99 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_SHIFTLEFT; } +case 12: +YY_RULE_SETUP +#line 100 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_SHIFTRIGHT; } +case 13: +YY_RULE_SETUP +#line 101 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_OPENPARENT; } +case 14: +YY_RULE_SETUP +#line 102 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +{ return exp_CLOSEPARENT; } +case 15: +YY_RULE_SETUP +#line 104 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" +ECHO; + YY_BREAK +#line 894 "/home/andy/vtk/CMake-bin/Source/cmExprLexer.cxx" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * cmExpr_yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( cmExpr_yywrap(yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +return 0; /* this should not happen but it silences a warning*/ +} /* end of cmExpr_yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = yyg->yytext_ptr; + register int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + size_t nuto_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( nuto_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + cmExpr_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + nuto_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( nuto_read > YY_READ_BUF_SIZE ) + nuto_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, nuto_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + cmExpr_yyrestart(yyin ,yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was + reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 23 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + register int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + register char *yy_cp = yyg->yy_c_buf_p; + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 23 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 22); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + cmExpr_yyrestart(yyin ,yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( cmExpr_yywrap(yyscanner ) ) + return EOF; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void cmExpr_yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + cmExpr_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + cmExpr_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + cmExpr_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); + cmExpr_yy_load_buffer_state(yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void cmExpr_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * cmExpr_yypop_buffer_state(); + * cmExpr_yypush_buffer_state(new_buffer); + */ + cmExpr_yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + cmExpr_yy_load_buffer_state(yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (cmExpr_yywrap()) processing, but the only time this flag + * is looked at is after cmExpr_yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void cmExpr_yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE cmExpr_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) cmExpr_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in cmExpr_yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) cmExpr_yyalloc(b->yy_buf_size + 2 ,yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in cmExpr_yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + cmExpr_yy_init_buffer(b,file ,yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with cmExpr_yy_create_buffer() + * @param yyscanner The scanner object. + */ + void cmExpr_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + cmExpr_yyfree((void *) b->yy_ch_buf ,yyscanner ); + + cmExpr_yyfree((void *) b ,yyscanner ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a cmExpr_yyrestart() or at EOF. + */ + static void cmExpr_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + cmExpr_yy_flush_buffer(b ,yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then cmExpr_yy_init_buffer was _probably_ + * called from cmExpr_yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void cmExpr_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + cmExpr_yy_load_buffer_state(yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void cmExpr_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + cmExpr_yyensure_buffer_stack(yyscanner); + + /* This block is copied from cmExpr_yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from cmExpr_yy_switch_to_buffer. */ + cmExpr_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void cmExpr_yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + cmExpr_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + cmExpr_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void cmExpr_yyensure_buffer_stack (yyscan_t yyscanner) +{ + int nuto_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + nuto_alloc = 1; + yyg->yy_buffer_stack = (struct yy_buffer_state**)cmExpr_yyalloc + (nuto_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + + memset(yyg->yy_buffer_stack, 0, nuto_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = nuto_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + nuto_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)cmExpr_yyrealloc + (yyg->yy_buffer_stack, + nuto_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = nuto_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE cmExpr_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) cmExpr_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in cmExpr_yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + cmExpr_yy_switch_to_buffer(b ,yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to cmExpr_yylex() will + * scan from a @e copy of @a yy_str. + * @param yy_str a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * cmExpr_yy_scan_bytes() instead. + */ +YY_BUFFER_STATE cmExpr_yy_scan_string (yyconst char * yy_str , yyscan_t yyscanner) +{ + + return cmExpr_yy_scan_bytes(yy_str,strlen(yy_str) ,yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to cmExpr_yylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE cmExpr_yy_scan_bytes (yyconst char * bytes, int len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = len + 2; + buf = (char *) cmExpr_yyalloc(n ,yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in cmExpr_yy_scan_bytes()" ); + + for ( i = 0; i < len; ++i ) + buf[i] = bytes[i]; + + buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; + + b = cmExpr_yy_scan_buffer(buf,n ,yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in cmExpr_yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg , yyscan_t) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE cmExpr_yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int cmExpr_yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int cmExpr_yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *cmExpr_yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *cmExpr_yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int cmExpr_yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *cmExpr_yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void cmExpr_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param line_number + * @param yyscanner The scanner object. + */ +void cmExpr_yyset_lineno (int line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "cmExpr_yyset_lineno called with no buffer" , yyscanner); + + yylineno = line_number; +} + +/** Set the current column. + * @param column_no + * @param yyscanner The scanner object. + */ +void cmExpr_yyset_column (int column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "cmExpr_yyset_column called with no buffer" , yyscanner); + + yycolumn = column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * @param yyscanner The scanner object. + * @see cmExpr_yy_switch_to_buffer + */ +void cmExpr_yyset_in (FILE * in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = in_str ; +} + +void cmExpr_yyset_out (FILE * out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = out_str ; +} + +int cmExpr_yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void cmExpr_yyset_debug (int bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + This function is called once per scanner lifetime. */ + + yyg->yy_buffer_stack = 0; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = (char *) 0; + yyg->yy_init = 1; + yyg->yy_start = 0; + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = (int *) 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * cmExpr_yylex_init() + */ + return 0; +} + +/* User-visible API */ + +/* cmExpr_yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ + +int cmExpr_yylex_init(yyscan_t* ptr_yy_globals) + +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) cmExpr_yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + memset(*ptr_yy_globals,0,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* cmExpr_yylex_destroy is for both reentrant and non-reentrant scanners. */ +int cmExpr_yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + cmExpr_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + cmExpr_yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + cmExpr_yyfree(yyg->yy_buffer_stack ,yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + cmExpr_yyfree(yyg->yy_start_stack ,yyscanner ); + yyg->yy_start_stack = NULL; + + /* Destroy the main struct (reentrant only). */ + cmExpr_yyfree ( yyscanner , yyscanner ); + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) +{ + register int i; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) +{ + register int n; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *cmExpr_yyalloc (yy_size_t size , yyscan_t) +{ + return (void *) malloc( size ); +} + +void *cmExpr_yyrealloc (void * ptr, yy_size_t size , yyscan_t) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void cmExpr_yyfree (void * ptr , yyscan_t) +{ + free( (char *) ptr ); /* see cmExpr_yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#undef YY_NEW_FILE +#undef YY_FLUSH_BUFFER +#undef yy_set_bol +#undef yy_new_buffer +#undef yy_set_interactive +#undef yytext_ptr +#undef YY_DO_BEFORE_ACTION + +#ifdef YY_DECL_IS_OURS +#undef YY_DECL_IS_OURS +#undef YY_DECL +#endif +#line 104 "/home/andy/vtk/CMake/Source/cmExprLexer.in.l" + + + diff --git a/Source/cmExprLexer.h b/Source/cmExprLexer.h new file mode 100644 index 0000000..4c10496 --- /dev/null +++ b/Source/cmExprLexer.h @@ -0,0 +1,334 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExpr_yyHEADER_H +#define cmExpr_yyHEADER_H 1 +#define cmExpr_yyIN_HEADER 1 + + + + + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 31 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +int cmExpr_yylex_init (yyscan_t* scanner); + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +void cmExpr_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void cmExpr_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , + yyscan_t yyscanner ); +YY_BUFFER_STATE cmExpr_yy_create_buffer (FILE *file,int size , + yyscan_t yyscanner ); +void cmExpr_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmExpr_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void cmExpr_yypush_buffer_state (YY_BUFFER_STATE new_buffer , + yyscan_t yyscanner ); +void cmExpr_yypop_buffer_state (yyscan_t yyscanner ); + +YY_BUFFER_STATE cmExpr_yy_scan_buffer (char *base,yy_size_t size , + yyscan_t yyscanner ); +YY_BUFFER_STATE cmExpr_yy_scan_string (yyconst char *yy_str , + yyscan_t yyscanner ); +YY_BUFFER_STATE cmExpr_yy_scan_bytes (yyconst char *bytes,int len , + yyscan_t yyscanner ); + +void *cmExpr_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *cmExpr_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void cmExpr_yyfree (void * ,yyscan_t yyscanner ); + +/* Begin user sect3 */ + +#define cmExpr_yywrap(n) 1 +#define YY_SKIP_YYWRAP + +#define yytext_ptr yytext_r + +#ifdef YY_HEADER_EXPORT_START_CONDITIONS +#define INITIAL 0 + +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int cmExpr_yylex_destroy (yyscan_t yyscanner ); + +int cmExpr_yyget_debug (yyscan_t yyscanner ); + +void cmExpr_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE cmExpr_yyget_extra (yyscan_t yyscanner ); + +void cmExpr_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *cmExpr_yyget_in (yyscan_t yyscanner ); + +void cmExpr_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *cmExpr_yyget_out (yyscan_t yyscanner ); + +void cmExpr_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int cmExpr_yyget_leng (yyscan_t yyscanner ); + +char *cmExpr_yyget_text (yyscan_t yyscanner ); + +int cmExpr_yyget_lineno (yyscan_t yyscanner ); + +void cmExpr_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int cmExpr_yywrap (yyscan_t yyscanner ); +#else +extern int cmExpr_yywrap (yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int cmExpr_yylex (yyscan_t yyscanner); + +#define YY_DECL int cmExpr_yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* yy_get_previous_state - get the state just before the EOB char was + reached */ + +#undef YY_NEW_FILE +#undef YY_FLUSH_BUFFER +#undef yy_set_bol +#undef yy_new_buffer +#undef yy_set_interactive +#undef yytext_ptr +#undef YY_DO_BEFORE_ACTION + +#ifdef YY_DECL_IS_OURS +#undef YY_DECL_IS_OURS +#undef YY_DECL +#endif + + + + +#undef cmExpr_yyIN_HEADER +#endif /* cmExpr_yyHEADER_H */ diff --git a/Source/cmExprLexer.in.l b/Source/cmExprLexer.in.l new file mode 100644 index 0000000..db9018f --- /dev/null +++ b/Source/cmExprLexer.in.l @@ -0,0 +1,73 @@ +%{ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run flex like this: + + flex --prefix=cmExpr_yy --header-file=cmExprLexer.h -ocmExprLexer.cxx cmExprLexer.in.l + +Modify cmExprLexer.cxx: + - remove TABs + - remove "yyscanner" argument from these methods: + yy_fatal_error, cmExpr_yyalloc, cmExpr_yyrealloc, cmExpr_yyfree + - remove all YY_BREAK lines occurring right after return statements + - change while ( 1 ) to for(;;) + +Modify cmExprLexer.h: + - remove TABs + - remove the yy_init_globals function + - remove the block that includes unistd.h + - remove #line directives (avoids bogus warning on old Sun) + +*/ + +#include "cmStandardLexer.h" + +#include "cmExprParserHelper.h" + +/* Replace the lexer input function. */ +#undef YY_INPUT +#define YY_INPUT(buf, result, max_size) \ + { result = yyextra->LexInput(buf, max_size); } + +/* Include the set of tokens from the parser. */ +#include "cmExprParserTokens.h" + +/*--------------------------------------------------------------------------*/ +%} + +%option reentrant +%option noyywrap +%pointer + +%% + +[0-9][0-9]* { yylvalp->Number = atoi(yytext); return exp_NUMBER; } + +"+" { return exp_PLUS; } +"-" { return exp_MINUS; } +"*" { return exp_TIMES; } +"/" { return exp_DIVIDE; } +"%" { return exp_MOD; } +"\|" { return exp_OR; } +"&" { return exp_AND; } +"^" { return exp_XOR; } +"~" { return exp_NOT; } +"<<" { return exp_SHIFTLEFT; } +">>" { return exp_SHIFTRIGHT; } +"(" { return exp_OPENPARENT; } +")" { return exp_CLOSEPARENT; } + +%% diff --git a/Source/cmExprParser.cxx b/Source/cmExprParser.cxx new file mode 100644 index 0000000..5c164a0 --- /dev/null +++ b/Source/cmExprParser.cxx @@ -0,0 +1,1433 @@ +/* A Bison parser, made by GNU Bison 1.875d. */ + +/* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, + 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Written by Richard Stallman by simplifying the original so called + ``semantic'' parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* turn off some warning as this is generated code */ +#if defined(_MSC_VER) +# pragma warning ( disable : 4702 ) /* unreachable code */ +#endif + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* If NAME_PREFIX is specified substitute the variables and functions + names. */ +#define yyparse cmExpr_yyparse +#define yylex cmExpr_yylex +#define yyerror cmExpr_yyerror +#define yylval cmExpr_yylval +#define yychar cmExpr_yychar +#define yydebug cmExpr_yydebug +#define yynerrs cmExpr_yynerrs + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + exp_PLUS = 258, + exp_MINUS = 259, + exp_TIMES = 260, + exp_DIVIDE = 261, + exp_MOD = 262, + exp_SHIFTLEFT = 263, + exp_SHIFTRIGHT = 264, + exp_OPENPARENT = 265, + exp_CLOSEPARENT = 266, + exp_OR = 267, + exp_AND = 268, + exp_XOR = 269, + exp_NOT = 270, + exp_NUMBER = 271 + }; +#endif +#define exp_PLUS 258 +#define exp_MINUS 259 +#define exp_TIMES 260 +#define exp_DIVIDE 261 +#define exp_MOD 262 +#define exp_SHIFTLEFT 263 +#define exp_SHIFTRIGHT 264 +#define exp_OPENPARENT 265 +#define exp_CLOSEPARENT 266 +#define exp_OR 267 +#define exp_AND 268 +#define exp_XOR 269 +#define exp_NOT 270 +#define exp_NUMBER 271 + + + + +/* Copy the first part of user declarations. */ + + +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run bison like this: + + bison --yacc --name-prefix=cmExpr_yy --defines=cmExprParserTokens.h + -ocmExprParser.cxx cmExprParser.y + +Modify cmExprParser.cxx: + - remove TABs + - add __HP_aCC to the #if test for yyerrorlab warning suppression + +*/ + +/* Configure the parser to use a lexer object. */ +#define YYPARSE_PARAM yyscanner +#define YYLEX_PARAM yyscanner +#define YYERROR_VERBOSE 1 +#define cmExpr_yyerror(x) \ + cmExprError(yyscanner, x) +#define yyGetParser (cmExpr_yyget_extra(yyscanner)) + +/*-------------------------------------------------------------------------*/ +#include "cmExprParserHelper.h" /* Interface to parser object. */ +#include "cmExprLexer.h" /* Interface to lexer object. */ +#include "cmExprParserTokens.h" /* Need YYSTYPE for YY_DECL. */ + +#include + +/* Forward declare the lexer entry point. */ +YY_DECL; + +/* Internal utility functions. */ +static void cmExprError(yyscan_t yyscanner, const char* message); + +#define YYDEBUG 1 +//#define YYMAXDEPTH 100000 +//#define YYINITDEPTH 10000 + + +/* Disable some warnings in the generated code. */ +#ifdef __BORLANDC__ +# pragma warn -8004 /* Variable assigned a value that is not used. */ +# pragma warn -8008 /* condition always returns true */ +# pragma warn -8060 /* possibly incorrect assignment */ +# pragma warn -8066 /* unreachable code */ +#endif +#ifdef _MSC_VER +# pragma warning (disable: 4102) /* Unused goto label. */ +# pragma warning (disable: 4065) /* Switch statement contains default but + no case. */ +#endif + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 214 of yacc.c. */ + + +#if ! defined (yyoverflow) || YYERROR_VERBOSE + +# ifndef YYFREE +# define YYFREE free +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# endif + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# define YYSTACK_ALLOC alloca +# endif +# else +# if defined (alloca) || defined (_ALLOCA_H) +# define YYSTACK_ALLOC alloca +# else +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# else +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# endif +#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ + + +#if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + short int yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined (__GNUC__) && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + register YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (0) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined (__STDC__) || defined (__cplusplus) + typedef signed char yysigned_char; +#else + typedef short int yysigned_char; +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 12 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 25 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 17 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 9 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 20 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 34 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 271 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const unsigned char yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const unsigned char yyprhs[] = +{ + 0, 0, 3, 5, 7, 11, 13, 17, 19, 23, + 25, 29, 33, 35, 39, 43, 45, 49, 53, 57, + 59 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yysigned_char yyrhs[] = +{ + 18, 0, -1, 19, -1, 20, -1, 19, 12, 20, + -1, 21, -1, 20, 14, 21, -1, 22, -1, 21, + 13, 22, -1, 23, -1, 22, 8, 23, -1, 22, + 9, 23, -1, 24, -1, 23, 3, 24, -1, 23, + 4, 24, -1, 25, -1, 24, 5, 25, -1, 24, + 6, 25, -1, 24, 7, 25, -1, 16, -1, 10, + 19, 11, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const unsigned char yyrline[] = +{ + 0, 94, 94, 100, 103, 107, 110, 114, 117, 121, + 124, 127, 132, 135, 138, 142, 145, 148, 151, 155, + 158 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE +/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "exp_PLUS", "exp_MINUS", "exp_TIMES", + "exp_DIVIDE", "exp_MOD", "exp_SHIFTLEFT", "exp_SHIFTRIGHT", + "exp_OPENPARENT", "exp_CLOSEPARENT", "exp_OR", "exp_AND", "exp_XOR", + "exp_NOT", "exp_NUMBER", "$accept", "Start", "exp", "bitwiseor", + "bitwisexor", "bitwiseand", "shift", "term", "factor", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const unsigned short int yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const unsigned char yyr1[] = +{ + 0, 17, 18, 19, 19, 20, 20, 21, 21, 22, + 22, 22, 23, 23, 23, 24, 24, 24, 24, 25, + 25 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const unsigned char yyr2[] = +{ + 0, 2, 1, 1, 3, 1, 3, 1, 3, 1, + 3, 3, 1, 3, 3, 1, 3, 3, 3, 1, + 3 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const unsigned char yydefact[] = +{ + 0, 0, 19, 0, 2, 3, 5, 7, 9, 12, + 15, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 20, 4, 6, 8, 10, 11, 13, + 14, 16, 17, 18 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yysigned_char yydefgoto[] = +{ + -1, 3, 4, 5, 6, 7, 8, 9, 10 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -14 +static const yysigned_char yypact[] = +{ + -10, -10, -14, 18, 7, 6, 8, 2, 1, -4, + -14, 3, -14, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -14, 6, 8, 2, 1, 1, -4, + -4, -14, -14, -14 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yysigned_char yypgoto[] = +{ + -14, -14, 21, 10, 11, 9, 0, -6, -13 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const unsigned char yytable[] = +{ + 1, 20, 21, 22, 18, 19, 2, 31, 32, 33, + 16, 17, 29, 30, 23, 13, 27, 28, 12, 13, + 14, 15, 11, 24, 26, 25 +}; + +static const unsigned char yycheck[] = +{ + 10, 5, 6, 7, 3, 4, 16, 20, 21, 22, + 8, 9, 18, 19, 11, 12, 16, 17, 0, 12, + 14, 13, 1, 13, 15, 14 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const unsigned char yystos[] = +{ + 0, 10, 16, 18, 19, 20, 21, 22, 23, 24, + 25, 19, 0, 12, 14, 13, 8, 9, 3, 4, + 5, 6, 7, 11, 20, 21, 22, 23, 23, 24, + 24, 25, 25, 25 +}; + +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ +#endif +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int +#endif + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror ("syntax error: cannot back up");\ + YYERROR; \ + } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +/* YYLLOC_DEFAULT -- Compute the default location (before the actions + are run). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + ((Current).first_line = (Rhs)[1].first_line, \ + (Current).first_column = (Rhs)[1].first_column, \ + (Current).last_line = (Rhs)[N].last_line, \ + (Current).last_column = (Rhs)[N].last_column) +#endif + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval) +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +# define YYDSYMPRINT(Args) \ +do { \ + if (yydebug) \ + yysymprint Args; \ +} while (0) + +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_stack_print (short int *bottom, short int *top) +#else +static void +yy_stack_print (bottom, top) + short int *bottom; + short int *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_reduce_print (int yyrule) +#else +static void +yy_reduce_print (yyrule) + int yyrule; +#endif +{ + int yyi; + unsigned int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0 +# undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined (__GLIBC__) && defined (_STRING_H) +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +# if defined (__STDC__) || defined (__cplusplus) +yystrlen (const char *yystr) +# else +yystrlen (yystr) + const char *yystr; +# endif +{ + register const char *yys = yystr; + + while (*yys++ != '\0') + continue; + + return yys - yystr - 1; +} +# endif +# endif + +# ifndef yystpcpy +# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +# if defined (__STDC__) || defined (__cplusplus) +yystpcpy (char *yydest, const char *yysrc) +# else +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +# endif +{ + register char *yyd = yydest; + register const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +#endif /* !YYERROR_VERBOSE */ + + + +#if YYDEBUG +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) +#else +static void +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + if (yytype < YYNTOKENS) + { + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + switch (yytype) + { + default: + break; + } + YYFPRINTF (yyoutput, ")"); +} + +#endif /* ! YYDEBUG */ +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yydestruct (int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yytype, yyvaluep) + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM); +# else +int yyparse (); +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + /* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + register int yystate; + register int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + short int yyssa[YYINITDEPTH]; + short int *yyss = yyssa; + register short int *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + register YYSTYPE *yyvsp; + + + +#define YYPOPSTACK (yyvsp--, yyssp--) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ + int yylen; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. + */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + short int *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow ("parser stack overflow", + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyoverflowlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyoverflowlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + short int *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyoverflowlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; + + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + yystate = yyn; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: + + { + yyGetParser->SetResult(yyvsp[0].Number); +} + break; + + case 3: + + {yyval.Number = yyvsp[0].Number;} + break; + + case 4: + + {yyval.Number = yyvsp[-2].Number | yyvsp[0].Number;} + break; + + case 5: + + {yyval.Number = yyvsp[0].Number;} + break; + + case 6: + + {yyval.Number = yyvsp[-2].Number ^ yyvsp[0].Number;} + break; + + case 7: + + {yyval.Number = yyvsp[0].Number;} + break; + + case 8: + + {yyval.Number = yyvsp[-2].Number & yyvsp[0].Number;} + break; + + case 9: + + {yyval.Number = yyvsp[0].Number;} + break; + + case 10: + + {yyval.Number = yyvsp[-2].Number << yyvsp[0].Number;} + break; + + case 11: + + {yyval.Number = yyvsp[-2].Number >> yyvsp[0].Number;} + break; + + case 12: + + {yyval.Number = yyvsp[0].Number;} + break; + + case 13: + + {yyval.Number = yyvsp[-2].Number + yyvsp[0].Number;} + break; + + case 14: + + {yyval.Number = yyvsp[-2].Number - yyvsp[0].Number;} + break; + + case 15: + + {yyval.Number = yyvsp[0].Number;} + break; + + case 16: + + {yyval.Number = yyvsp[-2].Number * yyvsp[0].Number;} + break; + + case 17: + + {yyval.Number = yyvsp[-2].Number / yyvsp[0].Number;} + break; + + case 18: + + {yyval.Number = yyvsp[-2].Number % yyvsp[0].Number;} + break; + + case 19: + + {yyval.Number = yyvsp[0].Number;} + break; + + case 20: + + {yyval.Number = yyvsp[-1].Number;} + break; + + + } + +/* Line 1010 of yacc.c. */ + + + yyvsp -= yylen; + yyssp -= yylen; + + + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (YYPACT_NINF < yyn && yyn < YYLAST) + { + YYSIZE_T yysize = 0; + int yytype = YYTRANSLATE (yychar); + const char* yyprefix; + char *yymsg; + int yyx; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 0; + + yyprefix = ", expecting "; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); + yycount += 1; + if (yycount == 5) + { + yysize = 0; + break; + } + } + yysize += (sizeof ("syntax error, unexpected ") + + yystrlen (yytname[yytype])); + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg != 0) + { + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); + yyp = yystpcpy (yyp, yytname[yytype]); + + if (yycount < 5) + { + yyprefix = ", expecting "; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + yyp = yystpcpy (yyp, yyprefix); + yyp = yystpcpy (yyp, yytname[yyx]); + yyprefix = " or "; + } + } + yyerror (yymsg); + YYSTACK_FREE (yymsg); + } + else + yyerror ("syntax error; also virtual memory exhausted"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror ("syntax error"); + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* If at end of input, pop the error token, + then the rest of the stack, then return failure. */ + if (yychar == YYEOF) + for (;;) + { + YYPOPSTACK; + if (yyssp == yyss) + YYABORT; + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[*yyssp], yyvsp); + } + } + else + { + YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); + yydestruct (yytoken, &yylval); + yychar = YYEMPTY; + + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + +#if defined( __GNUC__ ) || defined(__HP_aCC) + /* Pacify GCC when the user code never invokes YYERROR and the label + yyerrorlab therefore never appears in user code. */ + if (0) + goto yyerrorlab; +#endif + + yyvsp -= yylen; + yyssp -= yylen; + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[yystate], yyvsp); + YYPOPSTACK; + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + YYDPRINTF ((stderr, "Shifting error token, ")); + + *++yyvsp = yylval; + + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*----------------------------------------------. +| yyoverflowlab -- parser overflow comes here. | +`----------------------------------------------*/ +yyoverflowlab: + yyerror ("parser stack overflow"); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + return yyresult; +} + + + + +/* End of grammar */ + +/*--------------------------------------------------------------------------*/ +void cmExprError(yyscan_t yyscanner, const char* message) +{ + yyGetParser->Error(message); +} + + diff --git a/Source/cmExprParser.y b/Source/cmExprParser.y new file mode 100644 index 0000000..317b0ba --- /dev/null +++ b/Source/cmExprParser.y @@ -0,0 +1,169 @@ +%{ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +/* + +This file must be translated to C and modified to build everywhere. + +Run bison like this: + + bison --yacc --name-prefix=cmExpr_yy --defines=cmExprParserTokens.h -ocmExprParser.cxx cmExprParser.y + +Modify cmExprParser.cxx: + - remove TABs + - add __HP_aCC to the #if test for yyerrorlab warning suppression + +*/ + +/* Configure the parser to use a lexer object. */ +#define YYPARSE_PARAM yyscanner +#define YYLEX_PARAM yyscanner +#define YYERROR_VERBOSE 1 +#define cmExpr_yyerror(x) \ + cmExprError(yyscanner, x) +#define yyGetParser (cmExpr_yyget_extra(yyscanner)) + +/*-------------------------------------------------------------------------*/ +#include "cmExprParserHelper.h" /* Interface to parser object. */ +#include "cmExprLexer.h" /* Interface to lexer object. */ +#include "cmExprParserTokens.h" /* Need YYSTYPE for YY_DECL. */ + +#include + +/* Forward declare the lexer entry point. */ +YY_DECL; + +/* Internal utility functions. */ +static void cmExprError(yyscan_t yyscanner, const char* message); + +#define YYDEBUG 1 +//#define YYMAXDEPTH 100000 +//#define YYINITDEPTH 10000 + + +/* Disable some warnings in the generated code. */ +#ifdef __BORLANDC__ +# pragma warn -8004 /* Variable assigned a value that is not used. */ +# pragma warn -8008 /* condition always returns true */ +# pragma warn -8060 /* possibly incorrect assignment */ +# pragma warn -8066 /* unreachable code */ +#endif +#ifdef _MSC_VER +# pragma warning (disable: 4102) /* Unused goto label. */ +# pragma warning (disable: 4065) /* Switch statement contains default but no case. */ +#endif +%} + +/* Generate a reentrant parser object. */ +%pure_parser + +/*-------------------------------------------------------------------------*/ +/* Tokens */ +%token exp_PLUS +%token exp_MINUS +%token exp_TIMES +%token exp_DIVIDE +%token exp_MOD +%token exp_SHIFTLEFT +%token exp_SHIFTRIGHT +%token exp_OPENPARENT +%token exp_CLOSEPARENT +%token exp_OR; +%token exp_AND; +%token exp_XOR; +%token exp_NOT; +%token exp_NUMBER; + +/*-------------------------------------------------------------------------*/ +/* grammar */ +%% + + +Start: +exp +{ + yyGetParser->SetResult($1); +} + +exp: +bitwiseor +{$$ = $1;} +| +exp exp_OR bitwiseor +{$$ = $1 | $3;} + +bitwiseor: +bitwisexor +{$$ = $1;} +| +bitwiseor exp_XOR bitwisexor +{$$ = $1 ^ $3;} + +bitwisexor: +bitwiseand +{$$ = $1;} +| +bitwisexor exp_AND bitwiseand +{$$ = $1 & $3;} + +bitwiseand: +shift +{$$ = $1;} +| +bitwiseand exp_SHIFTLEFT shift +{$$ = $1 << $3;} +| +bitwiseand exp_SHIFTRIGHT shift +{$$ = $1 >> $3;} + + +shift: +term +{$$ = $1;} +| +shift exp_PLUS term +{$$ = $1 + $3;} +| +shift exp_MINUS term +{$$ = $1 - $3;} + +term: +factor +{$$ = $1;} +| +term exp_TIMES factor +{$$ = $1 * $3;} +| +term exp_DIVIDE factor +{$$ = $1 / $3;} +| +term exp_MOD factor +{$$ = $1 % $3;} + +factor: +exp_NUMBER +{$$ = $1;} +| +exp_OPENPARENT exp exp_CLOSEPARENT +{$$ = $2;} +; + + +%% +/* End of grammar */ + +/*--------------------------------------------------------------------------*/ +void cmExprError(yyscan_t yyscanner, const char* message) +{ + yyGetParser->Error(message); +} + diff --git a/Source/cmExprParserHelper.cxx b/Source/cmExprParserHelper.cxx new file mode 100644 index 0000000..7728d74 --- /dev/null +++ b/Source/cmExprParserHelper.cxx @@ -0,0 +1,112 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include "cmExprParserHelper.h" + +#include "cmSystemTools.h" +#include "cmExprLexer.h" + +#include "cmMakefile.h" + +int cmExpr_yyparse( yyscan_t yyscanner ); +// +cmExprParserHelper::cmExprParserHelper() +{ + this->FileLine = -1; + this->FileName = 0; +} + + +cmExprParserHelper::~cmExprParserHelper() +{ + this->CleanupParser(); +} + +int cmExprParserHelper::ParseString(const char* str, int verb) +{ + if ( !str) + { + return 0; + } + //printf("Do some parsing: %s\n", str); + + this->Verbose = verb; + this->InputBuffer = str; + this->InputBufferPos = 0; + this->CurrentLine = 0; + + this->Result = 0; + + yyscan_t yyscanner; + cmExpr_yylex_init(&yyscanner); + cmExpr_yyset_extra(this, yyscanner); + int res = cmExpr_yyparse(yyscanner); + cmExpr_yylex_destroy(yyscanner); + if ( res != 0 ) + { + //str << "CAL_Parser returned: " << res << std::endl; + //std::cerr << "When parsing: [" << str << "]" << std::endl; + return 0; + } + + this->CleanupParser(); + + if ( Verbose ) + { + std::cerr << "Expanding [" << str << "] produced: [" + << this->Result << "]" << std::endl; + } + return 1; +} + +void cmExprParserHelper::CleanupParser() +{ +} + +int cmExprParserHelper::LexInput(char* buf, int maxlen) +{ + //std::cout << "JPLexInput "; + //std::cout.write(buf, maxlen); + //std::cout << std::endl; + if ( maxlen < 1 ) + { + return 0; + } + if ( this->InputBufferPos < this->InputBuffer.size() ) + { + buf[0] = this->InputBuffer[ this->InputBufferPos++ ]; + if ( buf[0] == '\n' ) + { + this->CurrentLine ++; + } + return(1); + } + else + { + buf[0] = '\n'; + return( 0 ); + } +} + +void cmExprParserHelper::Error(const char* str) +{ + unsigned long pos = static_cast(this->InputBufferPos); + cmOStringStream ostr; + ostr << str << " (" << pos << ")"; + this->ErrorString = ostr.str(); +} + +void cmExprParserHelper::SetResult(int value) +{ + this->Result = value; +} + + diff --git a/Source/cmExprParserHelper.h b/Source/cmExprParserHelper.h new file mode 100644 index 0000000..690426d --- /dev/null +++ b/Source/cmExprParserHelper.h @@ -0,0 +1,71 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExprParserHelper_h +#define cmExprParserHelper_h + +#include "cmStandardIncludes.h" + +#define YYSTYPE cmExprParserHelper::ParserType +#define YYSTYPE_IS_DECLARED +#define YY_EXTRA_TYPE cmExprParserHelper* +#define YY_DECL int cmExpr_yylex(YYSTYPE* yylvalp, yyscan_t yyscanner) + +/** \class cmExprParserHelper + * \brief Helper class for parsing java source files + * + * Finds dependencies for java file and list of outputs + */ + +class cmMakefile; + +class cmExprParserHelper +{ +public: + typedef struct { + int Number; + } ParserType; + + cmExprParserHelper(); + ~cmExprParserHelper(); + + int ParseString(const char* str, int verb); + + int LexInput(char* buf, int maxlen); + void Error(const char* str); + + void SetResult(int value); + + int GetResult() { return this->Result; } + + const char* GetError() { return this->ErrorString.c_str(); } + +private: + cmStdString::size_type InputBufferPos; + cmStdString InputBuffer; + std::vector OutputBuffer; + int CurrentLine; + int Verbose; + + void Print(const char* place, const char* str); + + void CleanupParser(); + + int Result; + const char* FileName; + long FileLine; + std::string ErrorString; +}; + +#endif + + + diff --git a/Source/cmExprParserTokens.h b/Source/cmExprParserTokens.h new file mode 100644 index 0000000..0309c09 --- /dev/null +++ b/Source/cmExprParserTokens.h @@ -0,0 +1,76 @@ +/* A Bison parser, made by GNU Bison 1.875d. */ + +/* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, + 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + exp_PLUS = 258, + exp_MINUS = 259, + exp_TIMES = 260, + exp_DIVIDE = 261, + exp_MOD = 262, + exp_SHIFTLEFT = 263, + exp_SHIFTRIGHT = 264, + exp_OPENPARENT = 265, + exp_CLOSEPARENT = 266, + exp_OR = 267, + exp_AND = 268, + exp_XOR = 269, + exp_NOT = 270, + exp_NUMBER = 271 + }; +#endif +#define exp_PLUS 258 +#define exp_MINUS 259 +#define exp_TIMES 260 +#define exp_DIVIDE 261 +#define exp_MOD 262 +#define exp_SHIFTLEFT 263 +#define exp_SHIFTRIGHT 264 +#define exp_OPENPARENT 265 +#define exp_CLOSEPARENT 266 +#define exp_OR 267 +#define exp_AND 268 +#define exp_XOR 269 +#define exp_NOT 270 +#define exp_NUMBER 271 + + + + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + + + diff --git a/Source/cmExternalMakefileProjectGenerator.cxx b/Source/cmExternalMakefileProjectGenerator.cxx new file mode 100644 index 0000000..6ed84bd --- /dev/null +++ b/Source/cmExternalMakefileProjectGenerator.cxx @@ -0,0 +1,64 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#include + +#include "cmExternalMakefileProjectGenerator.h" + +std::string cmExternalMakefileProjectGenerator::CreateFullGeneratorName( + const char* globalGenerator, + const char* extraGenerator) +{ + std::string fullName; + if (globalGenerator) + { + if (extraGenerator && *extraGenerator) + { + fullName = extraGenerator; + fullName += " - "; + } + fullName += globalGenerator; + } + return fullName; +} + +const char* cmExternalMakefileProjectGenerator::GetGlobalGeneratorName( + const char* fullName) +{ + // at least one global generator must be supported + assert(!this->SupportedGlobalGenerators.empty()); + + if (fullName==0) + { + return 0; + } + + std::string currentName = fullName; + // if we get only the short name, take the first global generator as default + if (currentName == this->GetName()) + { + return this->SupportedGlobalGenerators[0].c_str(); + } + + // otherwise search for the matching global generator + for (std::vector::const_iterator + it = this->SupportedGlobalGenerators.begin(); + it != this->SupportedGlobalGenerators.end(); + ++it) + { + if (this->CreateFullGeneratorName(it->c_str(), this->GetName()) + == currentName) + { + return it->c_str(); + } + } + return 0; +} diff --git a/Source/cmExternalMakefileProjectGenerator.h b/Source/cmExternalMakefileProjectGenerator.h new file mode 100644 index 0000000..46f1d31 --- /dev/null +++ b/Source/cmExternalMakefileProjectGenerator.h @@ -0,0 +1,70 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the License for more information. +============================================================================*/ +#ifndef cmExternalMakefileProjectGenerator_h +#define cmExternalMakefileProjectGenerator_h + +#include "cmStandardIncludes.h" + +#include "cmDocumentation.h" + +class cmGlobalGenerator; + +/** \class cmExternalMakefileProjectGenerator + * \brief Base class for generators for "External Makefile based IDE projects". + * + * cmExternalMakefileProjectGenerator is a base class for generators + * for "external makefile based projects", i.e. IDE projects which work + * an already existing makefiles. + * See cmGlobalKdevelopGenerator as an example. + * After the makefiles have been generated by one of the Makefile + * generators, the Generate() method is called and this generator + * can iterate over the local generators and/or projects to produce the + * project files for the IDE. + */ +class cmExternalMakefileProjectGenerator +{ +public: + + virtual ~cmExternalMakefileProjectGenerator() {} + + ///! Get the name for this generator. + virtual const char* GetName() const = 0; + /** Get the documentation entry for this generator. */ + virtual void GetDocumentation(cmDocumentationEntry& entry, + const char* fullName) const = 0; + + ///! set the global generator which will generate the makefiles + virtual void SetGlobalGenerator(cmGlobalGenerator* generator) + {this->GlobalGenerator = generator;} + + ///! Return the list of global generators supported by this extra generator + const std::vector& GetSupportedGlobalGenerators() const + {return this->SupportedGlobalGenerators;} + + ///! Get the name of the global generator for the given full name + const char* GetGlobalGeneratorName(const char* fullName); + /** Create a full name from the given global generator name and the + * extra generator name + */ + static std::string CreateFullGeneratorName(const char* globalGenerator, + const char* extraGenerator); + + ///! Generate the project files, the Makefiles have already been generated + virtual void Generate() = 0; +protected: + ///! Contains the names of the global generators support by this generator. + std::vector SupportedGlobalGenerators; + ///! the global generator which creates the makefiles + const cmGlobalGenerator* GlobalGenerator; +}; + +#endif diff --git a/Source/cmExtraCodeBlocksGenerator.cxx b/Source/cmExtraCodeBlocksGenerator.cxx new file mode 100644 index 0000000..ccb17f0 --- /dev/null +++ b/Source/cmExtraCodeBlocksGenerator.cxx @@ -0,0 +1,779 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2004-2009 Kitware, Inc. + Copyright 2004 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. +============================================================================*/ +#include "cmExtraCodeBlocksGenerator.h" +#include "cmGlobalUnixMakefileGenerator3.h" +#include "cmLocalUnixMakefileGenerator3.h" +#include "cmMakefile.h" +#include "cmake.h" +#include "cmSourceFile.h" +#include "cmGeneratedFileStream.h" +#include "cmTarget.h" +#include "cmSystemTools.h" +#include "cmXMLSafe.h" + +#include + +/* Some useful URLs: +Homepage: +http://www.codeblocks.org + +File format docs: +http://wiki.codeblocks.org/index.php?title=File_formats_description +http://wiki.codeblocks.org/index.php?title=Workspace_file +http://wiki.codeblocks.org/index.php?title=Project_file + +Discussion: +http://forums.codeblocks.org/index.php/topic,6789.0.html +*/ + +//---------------------------------------------------------------------------- +void cmExtraCodeBlocksGenerator +::GetDocumentation(cmDocumentationEntry& entry, const char*) const +{ + entry.Name = this->GetName(); + entry.Brief = "Generates CodeBlocks project files."; + entry.Full = + "Project files for CodeBlocks will be created in the top directory " + "and in every subdirectory which features a CMakeLists.txt file " + "containing a PROJECT() call. " + "Additionally a hierarchy of makefiles is generated into the " + "build tree. The appropriate make program can build the project through " + "the default make target. A \"make install\" target is also provided."; +} + +cmExtraCodeBlocksGenerator::cmExtraCodeBlocksGenerator() +:cmExternalMakefileProjectGenerator() +{ +#if defined(_WIN32) + this->SupportedGlobalGenerators.push_back("MinGW Makefiles"); + this->SupportedGlobalGenerators.push_back("NMake Makefiles"); +// disable until somebody actually tests it: +// this->SupportedGlobalGenerators.push_back("MSYS Makefiles"); +#endif + this->SupportedGlobalGenerators.push_back("Unix Makefiles"); +} + + +void cmExtraCodeBlocksGenerator::Generate() +{ + // for each sub project in the project create a codeblocks project + for (std::map >::const_iterator + it = this->GlobalGenerator->GetProjectMap().begin(); + it!= this->GlobalGenerator->GetProjectMap().end(); + ++it) + { + // create a project file + this->CreateProjectFile(it->second); + } +} + + +/* create the project file */ +void cmExtraCodeBlocksGenerator::CreateProjectFile( + const std::vector& lgs) +{ + const cmMakefile* mf=lgs[0]->GetMakefile(); + std::string outputDir=mf->GetStartOutputDirectory(); + std::string projectName=mf->GetProjectName(); + + std::string filename=outputDir+"/"; + filename+=projectName+".cbp"; + std::string sessionFilename=outputDir+"/"; + sessionFilename+=projectName+".layout"; + + this->CreateNewProjectFile(lgs, filename); +} + + +/* Tree is used to create a "Virtual Folder" in CodeBlocks, in which all + CMake files this project depends on will be put. This means additionally + to the "Sources" and "Headers" virtual folders of CodeBlocks, there will + now also be a "CMake Files" virtual folder. + Patch by Daniel Teske (which use C::B project + files in QtCreator).*/ +struct Tree +{ + std::string path; //only one component of the path + std::vector folders; + std::vector files; + void InsertPath(const std::vector& splitted, + std::vector::size_type start, + const std::string& fileName); + void BuildVirtualFolder(std::string& virtualFolders) const; + void BuildVirtualFolderImpl(std::string& virtualFolders, + const std::string& prefix) const; + void BuildUnit(std::string& unitString, const std::string& fsPath) const; + void BuildUnitImpl(std::string& unitString, + const std::string& virtualFolderPath, + const std::string& fsPath) const; +}; + + +void Tree::InsertPath(const std::vector& splitted, + std::vector::size_type start, + const std::string& fileName) +{ + if (start == splitted.size()) + { + files.push_back(fileName); + return; + } + for (std::vector::iterator + it = folders.begin(); + it != folders.end(); + ++it) + { + if ((*it).path == splitted[start]) + { + if (start + 1 < splitted.size()) + { + it->InsertPath(splitted, start + 1, fileName); + return; + } + else + { + // last part of splitted + it->files.push_back(fileName); + return; + } + } + } + // Not found in folders, thus insert + Tree newFolder; + newFolder.path = splitted[start]; + if (start + 1 < splitted.size()) + { + newFolder.InsertPath(splitted, start + 1, fileName); + folders.push_back(newFolder); + return; + } + else + { + // last part of splitted + newFolder.files.push_back(fileName); + folders.push_back(newFolder); + return; + } +} + + +void Tree::BuildVirtualFolder(std::string& virtualFolders) const +{ + virtualFolders += "